Files
fleet-management/app/templates/pdf/charter_contract.html
T
alro65 5b7b41aa50 Initial commit: Fleet Management app with security hardening and background launcher
- Flask app with SQLAlchemy, Flask-Login, Flask-Mail
- Admin/owner roles, vessel management, charters, work orders
- Background launcher (Iniciar.vbs) runs server without terminal window
- Root redirect fixed: / → /login
- debug=False, use_reloader=False for pythonw.exe compatibility

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-05 02:54:10 -04:00

279 lines
17 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Private Vessel Charter Agreement</title>
<style>
@page { size: letter; margin: 1.8cm 2.2cm; }
body { font-family: 'Times New Roman', Times, serif; font-size: 11pt; color: #1a1a1a; line-height: 1.55; }
.header-banner { background: #0a2a3a; color: white; padding: 16px 22px; }
.header-banner .company-name { font-size: 17pt; font-weight: bold; color: #c4a747; letter-spacing: 1px; font-family: Arial, sans-serif; }
.header-banner .company-sub { font-size: 9pt; color: #aac4d0; margin-top: 3px; font-family: Arial, sans-serif; }
.gold-bar { background: #c4a747; height: 5px; margin-bottom: 16px; }
.doc-title { text-align: center; font-size: 14pt; font-weight: bold; color: #0a2a3a; margin: 14px 0 3px; text-transform: uppercase; letter-spacing: 1.5px; font-family: Arial, sans-serif; }
.doc-ref { text-align: center; font-size: 9pt; color: #666; margin-bottom: 18px; font-family: Arial, sans-serif; }
.section { margin-bottom: 14px; }
.section-title { background: #0a2a3a; color: #c4a747; padding: 4px 10px; font-size: 9.5pt; font-weight: bold; text-transform: uppercase; letter-spacing: 0.8px; margin-bottom: 8px; font-family: Arial, sans-serif; }
table { width: 100%; border-collapse: collapse; font-size: 10.5pt; }
th { background: #0a2a3a; color: white; padding: 5px 8px; text-align: left; font-size: 9.5pt; font-family: Arial, sans-serif; }
td { padding: 5px 8px; border-bottom: 1px solid #ddd; }
tr:nth-child(even) td { background: #f9f9f9; }
.total-row td { background: #f0e8cc; font-weight: bold; font-size: 11.5pt; }
.clause { margin-bottom: 9px; text-align: justify; font-size: 10.5pt; }
.clause-num { font-weight: bold; color: #0a2a3a; }
.insurance-box { background: #eef6fc; border: 1px solid #b3d9ef; padding: 10px 14px; border-radius: 3px; font-size: 10pt; }
.notice-box { background: #fff8e1; border-left: 4px solid #c4a747; padding: 9px 13px; margin: 10px 0; font-size: 10pt; }
.sig-area { margin-top: 28px; }
.sig-line { border-top: 1px solid #333; margin-top: 45px; padding-top: 5px; font-size: 9pt; color: #555; font-family: Arial, sans-serif; }
.footer { margin-top: 18px; border-top: 1px solid #ddd; padding-top: 7px; text-align: center; font-size: 8.5pt; color: #999; font-family: Arial, sans-serif; }
.badge { display: inline-block; padding: 2px 9px; border-radius: 8px; font-size: 9pt; font-weight: bold; font-family: Arial, sans-serif; background: #d4edda; color: #155724; }
</style>
</head>
<body>
<div class="header-banner">
<div class="company-name">{{ management_company.name if management_company else 'Fleet Management LLC' }}</div>
<div class="company-sub">Professional Vessel Management &bull; Private Vessel Charter Agreement &bull; State of Florida</div>
</div>
<div class="gold-bar"></div>
<div class="doc-title">Private Vessel Charter Agreement</div>
<div class="doc-ref">
Agreement No. CHR-{{ '%04d' | format(charter.id) }} &nbsp;&bull;&nbsp;
Status: <span class="badge">{{ charter.status | upper }}</span> &nbsp;&bull;&nbsp;
Governing Law: State of Florida, United States
</div>
<!-- 1. PARTIES -->
<div class="section">
<div class="section-title">1. Parties</div>
<table>
<tr>
<th style="width:50%;">Owner's Agent (Lessor)</th>
<th style="width:50%;">Charterer (Lessee)</th>
</tr>
<tr>
<td style="vertical-align:top;padding:8px;">
<strong>{{ management_company.name if management_company else 'Fleet Management LLC' }}</strong><br>
Acting as authorized agent for the vessel owner<br>
{% if management_company and management_company.email %}Email: {{ management_company.email }}<br>{% endif %}
{% if management_company and management_company.phone %}Phone: {{ management_company.phone }}{% endif %}
</td>
<td style="vertical-align:top;padding:8px;">
<strong>{{ charter.charterer_name }}</strong><br>
{% if charter.charterer_email %}Email: {{ charter.charterer_email }}<br>{% endif %}
{% if charter.charterer_phone %}Phone: {{ charter.charterer_phone }}<br>{% endif %}
ID / Passport No.: _______________________
</td>
</tr>
</table>
{% if owner_company %}
<div style="margin-top:7px;font-size:9.5pt;color:#555;font-style:italic;">
Registered owner of vessel: {{ owner_company.name }}
</div>
{% endif %}
</div>
<!-- 2. VESSEL -->
<div class="section">
<div class="section-title">2. Vessel Description</div>
<table>
<tr>
<th>Vessel Name</th><th>HIN / USCG Doc.</th><th>Make / Model</th><th>LOA</th><th>Engines</th><th>Max. Passengers</th>
</tr>
<tr>
<td><strong>{{ vessel.name if vessel else 'N/A' }}</strong></td>
<td>{{ vessel.hin if vessel and vessel.hin else '_______________' }}</td>
<td>{{ ((vessel.make or '') ~ ' ' ~ (vessel.model or '')) | trim if vessel else '—' }}</td>
<td>{{ (vessel.length | string ~ ' ft') if vessel and vessel.length else '—' }}</td>
<td>{{ vessel.engines if vessel and vessel.engines else '—' }}</td>
<td>___________</td>
</tr>
</table>
</div>
<!-- 3. CHARTER PERIOD -->
<div class="section">
<div class="section-title">3. Charter Period</div>
<table>
<tr>
<th>Date</th><th>Departure Time</th><th>Return Time</th><th>Duration</th><th>Departure Port / Marina</th>
</tr>
<tr>
<td>{{ charter.start_datetime.strftime('%B %d, %Y') if charter.start_datetime else '________________' }}</td>
<td><strong>{{ charter.start_datetime.strftime('%I:%M %p') if charter.start_datetime else '________' }}</strong></td>
<td><strong>{{ end_dt.strftime('%I:%M %p') if end_dt else '________' }}</strong></td>
<td>{{ charter.hours | string ~ ' hour' ~ ('s' if charter.hours != 1 else '') if charter.hours else '___' }}</td>
<td>___________________________</td>
</tr>
<tr>
<td colspan="5" style="background:#fff8e1;padding:7px 8px;">
<strong>Maximum persons aboard:</strong>
{% if vessel and vessel.max_passengers %}
{{ vessel.max_passengers }} total per vessel documentation
&mdash; <strong>{{ vessel.max_passengers - 1 }} passengers</strong> (excluding captain)
{% else %}
Per vessel documentation &mdash; Captain not counted as passenger
{% endif %}
&nbsp;&bull;&nbsp; <em>Exceeding rated capacity is strictly prohibited and voids insurance coverage.</em>
</td>
</tr>
</table>
{% if captain %}
<div style="margin-top:7px;font-size:10pt;">
<strong>Captain:</strong> {{ captain.name }}
{% if captain.license_number %}&nbsp;— License No. {{ captain.license_number }}{% endif %}
&nbsp;— Engaged directly by Charterer under separate Captain Services Agreement.
</div>
{% endif %}
</div>
<!-- 4. CHARTER FEE -->
<div class="section">
<div class="section-title">4. Charter Fee</div>
<table>
<tr><th style="width:65%;">Description</th><th style="width:35%;text-align:right;">Amount (USD)</th></tr>
{% if vessel and vessel.base_rate_4h %}
<tr>
<td>Base charter rate (4-hour minimum) — {{ vessel.name }}</td>
<td style="text-align:right;">${{ '%.2f' | format(vessel.base_rate_4h) }}</td>
</tr>
{% endif %}
{% if charter.hours and charter.hours > 4 and vessel and vessel.hourly_rate_extra %}
<tr>
<td>Additional hours: {{ '%.1f' | format(charter.hours - 4) }} hr &times; ${{ '%.2f' | format(vessel.hourly_rate_extra) }}/hr</td>
<td style="text-align:right;">${{ '%.2f' | format((charter.hours - 4) * vessel.hourly_rate_extra) }}</td>
</tr>
{% endif %}
{% if charter.damage_waiver and charter.damage_waiver > 0 %}
<tr>
<td>Damage Waiver (optional / non-refundable)</td>
<td style="text-align:right;">${{ '%.2f' | format(charter.damage_waiver) }}</td>
</tr>
{% endif %}
<tr class="total-row">
<td>TOTAL CHARTER FEE</td>
<td style="text-align:right;">${{ '%.2f' | format(charter.total_base_rate or 0) }}</td>
</tr>
</table>
<div style="font-size:9pt;color:#777;margin-top:5px;">All amounts in U.S. Dollars (USD). Payment due in full upon signing this Agreement. Captain's fees are separate and paid directly by Charterer to Captain.</div>
</div>
<!-- 5. INSURANCE -->
<div class="section">
<div class="section-title">5. Insurance Coverage</div>
<div class="insurance-box">
<table style="border:none;">
<tr>
<td style="border:none;padding:4px 6px;width:50%;">
<span style="font-size:9pt;color:#555;font-weight:bold;font-family:Arial,sans-serif;">Policy / Rider No.:</span><br>
<strong>{{ charter.insurance_rider_number if charter.insurance_rider_number else '_________________________' }}</strong>
</td>
<td style="border:none;padding:4px 6px;width:50%;">
<span style="font-size:9pt;color:#555;font-weight:bold;font-family:Arial,sans-serif;">Insurer:</span><br>
<strong>{{ charter.insurer_name if charter.insurer_name else '_________________________' }}</strong>
</td>
</tr>
<tr>
<td style="border:none;padding:4px 6px;">
<span style="font-size:9pt;color:#555;font-weight:bold;font-family:Arial,sans-serif;">Coverage Amount:</span><br>
<strong>{{ '$%,.2f' | format(charter.coverage_amount) if charter.coverage_amount else '_________________________' }}</strong>
</td>
<td style="border:none;padding:4px 6px;">
<span style="font-size:9pt;color:#555;font-weight:bold;font-family:Arial,sans-serif;">Coverage Period:</span><br>
<strong>
{{ charter.start_datetime.strftime('%B %d, %Y %I:%M %p') if charter.start_datetime else '____________' }}
&ndash;
{{ end_dt.strftime('%I:%M %p') if end_dt else '____________' }}
</strong>
</td>
</tr>
</table>
{% if not charter.insurance_rider_number %}
<div style="margin-top:8px;color:#c0392b;font-weight:bold;font-size:9.5pt;font-family:Arial,sans-serif;">
&#9888; INSURANCE RIDER PENDING — Vessel is NOT authorized to depart until a valid rider number is assigned.
</div>
{% endif %}
</div>
</div>
<!-- 6. TERMS & CONDITIONS -->
<div class="section">
<div class="section-title">6. Terms and Conditions</div>
<div class="clause">
<span class="clause-num">6.1 PRIVATE RECREATIONAL USE ONLY.</span>
This Agreement is strictly for private recreational use. The Charterer expressly agrees that the vessel shall not be used for any commercial purpose, for-hire passenger transport, commercial fishing, or any income-generating activity whatsoever. Any breach of this clause shall immediately void the insurance coverage and entitle the Owner's Agent to terminate this Agreement without refund.
</div>
<div class="clause">
<span class="clause-num">6.2 CAPTAIN.</span>
The captain providing services during this charter is engaged directly by the Charterer pursuant to a separate Captain Services Agreement. The management company and vessel owner are not parties to that agreement and assume no liability for the captain's actions or compensation.
</div>
<div class="clause">
<span class="clause-num">6.3 CHARTERER'S LIABILITY.</span>
The Charterer shall be responsible for all damage to the vessel, equipment, or third parties caused by the Charterer, guests, or any person aboard during the charter period, unless such damage results from normal wear and tear or a pre-existing condition documented prior to departure.
</div>
<div class="clause">
<span class="clause-num">6.4 PASSENGER CAPACITY AND PROHIBITED CONDUCT.</span>
The Charterer shall not exceed the vessel's maximum rated passenger capacity. Operation of the vessel while under the influence of alcohol or controlled substances, navigation outside agreed operational area, and overnight use without prior written consent are strictly prohibited.
</div>
<div class="clause">
<span class="clause-num">6.5 CANCELLATION.</span>
Cancellations made 72 hours or more before departure: full refund. Cancellations within 72 hours: 50% of the charter fee is forfeited. No-shows: full charter fee is forfeited. Cancellation due to unsafe weather conditions at captain's sole discretion: full credit toward a future booking.
</div>
<div class="clause">
<span class="clause-num">6.6 LIMITATION OF LIABILITY.</span>
The Owner's Agent's total liability under this Agreement shall not exceed the total charter fee paid. In no event shall the Owner's Agent be liable for any indirect, incidental, or consequential damages.
</div>
<div class="clause">
<span class="clause-num">6.7 GOVERNING LAW AND VENUE.</span>
This Agreement shall be governed by and construed in accordance with the laws of the State of Florida, United States. Any dispute arising under this Agreement shall be resolved by binding arbitration in Miami-Dade County, Florida, under the rules of the American Arbitration Association.
</div>
<div class="clause">
<span class="clause-num">6.8 ENTIRE AGREEMENT.</span>
This Agreement, together with the Insurance Rider and Captain Services Agreement (if applicable), constitutes the entire agreement between the parties and supersedes all prior negotiations or understandings.
</div>
</div>
<!-- 7. SIGNATURES -->
<div class="sig-area">
<div class="section-title">7. Signatures</div>
<div class="notice-box" style="font-size:10pt;">
By signing below, both parties confirm they have read, understood, and agree to all terms and conditions of this Private Vessel Charter Agreement.
</div>
<table style="border:none;margin-top:10px;">
<tr>
<td style="width:46%;border:none;vertical-align:bottom;padding:8px 5px;">
<div style="font-size:10pt;margin-bottom:8px;"><strong>OWNER'S AGENT</strong></div>
<div style="font-size:10pt;color:#333;margin-bottom:4px;">{{ management_company.name if management_company else 'Fleet Management LLC' }}</div>
<div style="font-size:9.5pt;color:#666;margin-bottom:40px;">Name: ___________________________</div>
<div class="sig-line">Signature &nbsp;&nbsp; Date: _______________</div>
</td>
<td style="width:8%;border:none;"></td>
<td style="width:46%;border:none;vertical-align:bottom;padding:8px 5px;">
<div style="font-size:10pt;margin-bottom:8px;"><strong>CHARTERER</strong></div>
<div style="font-size:10pt;color:#333;margin-bottom:4px;">{{ charter.charterer_name }}</div>
<div style="font-size:9.5pt;color:#666;margin-bottom:40px;">ID / Passport No.: _______________</div>
<div class="sig-line">Signature &nbsp;&nbsp; Date: _______________</div>
</td>
</tr>
</table>
</div>
<div class="footer">
Agreement No. CHR-{{ '%04d' | format(charter.id) }} &bull;
{{ charter.start_datetime.strftime('%B %d, %Y') if charter.start_datetime else '' }} &bull;
{{ management_company.name if management_company else 'Fleet Management LLC' }} &bull;
Governing Law: State of Florida
</div>
</body>
</html>