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>
This commit is contained in:
@@ -0,0 +1,254 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Captain Services 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 .title { font-size: 17pt; font-weight: bold; color: #c4a747; letter-spacing: 1px; font-family: Arial, sans-serif; }
|
||||
.header-banner .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: 14px; font-family: Arial, sans-serif; }
|
||||
.alert-box { background: #fff3cd; border: 2px solid #c4a747; border-radius: 3px; padding: 11px 16px; margin: 12px 0 16px; font-size: 10.5pt; font-weight: bold; color: #7d5a00; text-align: center; font-family: Arial, sans-serif; line-height: 1.6; }
|
||||
.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; }
|
||||
.ic-box { background: #eef6fc; border: 1px solid #b3d9ef; border-radius: 3px; padding: 11px 15px; font-size: 10.5pt; }
|
||||
.license-badge { display: inline-block; padding: 2px 10px; border-radius: 8px; font-size: 9.5pt; font-weight: bold; font-family: Arial, sans-serif; }
|
||||
.badge-private { background: #e9ecef; color: #495057; }
|
||||
.badge-sixpack { background: #cce5ff; color: #004085; }
|
||||
.badge-master { background: #f0e8cc; color: #7d5a00; }
|
||||
.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; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header-banner">
|
||||
<div class="title">Captain Services Agreement</div>
|
||||
<div class="sub">Independent Contractor Agreement • Private Charter • State of Florida</div>
|
||||
</div>
|
||||
<div class="gold-bar"></div>
|
||||
|
||||
<div class="doc-title">Captain Services Agreement</div>
|
||||
<div class="doc-ref">
|
||||
Reference: Charter Agreement No. CHR-{{ '%04d' | format(charter.id) }} •
|
||||
Vessel: {{ vessel.name if vessel else 'N/A' }} •
|
||||
Date: {{ charter.start_datetime.strftime('%B %d, %Y') if charter.start_datetime else '________________' }}
|
||||
</div>
|
||||
|
||||
<div class="alert-box">
|
||||
THIS AGREEMENT IS ENTERED INTO DIRECTLY BETWEEN THE CHARTERER AND THE CAPTAIN.<br>
|
||||
THE VESSEL MANAGEMENT COMPANY IS NOT A PARTY TO THIS AGREEMENT<br>
|
||||
AND ASSUMES NO LIABILITY WHATSOEVER UNDER THIS CONTRACT.
|
||||
</div>
|
||||
|
||||
<!-- 1. PARTIES -->
|
||||
<div class="section">
|
||||
<div class="section-title">1. Parties</div>
|
||||
<table>
|
||||
<tr>
|
||||
<th style="width:50%;">Captain (Independent Contractor)</th>
|
||||
<th style="width:50%;">Client (Charterer)</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="vertical-align:top;padding:8px;">
|
||||
{% if captain %}
|
||||
<strong>{{ captain.name }}</strong><br>
|
||||
{% if captain.phone %}Phone: {{ captain.phone }}<br>{% endif %}
|
||||
{% if captain.license_number %}License No.: {{ captain.license_number }}<br>{% endif %}
|
||||
License Type:
|
||||
{% if captain.license_type == 'six_pack' %}
|
||||
<span class="license-badge badge-sixpack">USCG Six-Pack (OUPV)</span>
|
||||
{% elif captain.license_type == 'master' %}
|
||||
<span class="license-badge badge-master">USCG Master 50/100 Ton</span>
|
||||
{% else %}
|
||||
<span class="license-badge badge-private">Private Captain</span>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<span style="color:#999;font-style:italic;">Captain not yet assigned</span>
|
||||
{% 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>
|
||||
</div>
|
||||
|
||||
<!-- 2. VESSEL & SERVICE DETAILS -->
|
||||
<div class="section">
|
||||
<div class="section-title">2. Vessel and Service Details</div>
|
||||
<table>
|
||||
<tr>
|
||||
<th>Vessel</th><th>Date</th><th>Departure</th><th>Return</th><th>Duration</th><th>Departure Port</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>{{ vessel.name if vessel else '—' }}</strong><br>
|
||||
<span style="font-size:9pt;color:#777;">{{ ((vessel.make or '') ~ ' ' ~ (vessel.model or '')) | trim if vessel else '' }}</span>
|
||||
</td>
|
||||
<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 ~ ' hr' ~ ('s' if charter.hours != 1 else '') if charter.hours else '—' }}</td>
|
||||
<td>___________________</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<!-- 3. CAPTAIN'S FEE -->
|
||||
<div class="section">
|
||||
<div class="section-title">3. Captain's Fee</div>
|
||||
<table>
|
||||
<tr><th style="width:65%;">Description</th><th style="width:35%;text-align:right;">Amount (USD)</th></tr>
|
||||
{% if captain and captain.hourly_rate and charter.hours %}
|
||||
<tr>
|
||||
<td>Captain's hourly rate: ${{ '%.2f' | format(captain.hourly_rate) }}/hr × {{ charter.hours }} hr{{ 's' if charter.hours != 1 else '' }}</td>
|
||||
<td style="text-align:right;">${{ '%.2f' | format(captain.hourly_rate * charter.hours) }}</td>
|
||||
</tr>
|
||||
<tr class="total-row">
|
||||
<td>TOTAL CAPTAIN'S FEE</td>
|
||||
<td style="text-align:right;">${{ '%.2f' | format(captain.hourly_rate * charter.hours) }}</td>
|
||||
</tr>
|
||||
{% else %}
|
||||
<tr>
|
||||
<td>Fee agreed upon between the parties</td>
|
||||
<td style="text-align:right;">$_____________________</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
</table>
|
||||
<div style="font-size:9pt;color:#777;margin-top:5px;">
|
||||
All amounts in U.S. Dollars. Payment is due directly from Charterer to Captain.
|
||||
The vessel management company has no involvement in this payment.
|
||||
Gratuity, if any, is at the sole discretion of the Charterer and is not included above.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 4. CAPTAIN'S RESPONSIBILITIES -->
|
||||
<div class="section">
|
||||
<div class="section-title">4. Captain's Responsibilities</div>
|
||||
<div class="clause">
|
||||
<span class="clause-num">4.1 SAFE OPERATION.</span>
|
||||
The Captain shall operate the vessel in a safe and seamanlike manner at all times, in compliance with all applicable federal, state, and local maritime laws and U.S. Coast Guard regulations.
|
||||
</div>
|
||||
<div class="clause">
|
||||
<span class="clause-num">4.2 PASSENGER CAPACITY.</span>
|
||||
The vessel's maximum rated capacity per its official documentation is
|
||||
<strong>{{ vessel.max_passengers if vessel and vessel.max_passengers else '___' }} persons total</strong>
|
||||
(including captain). The Captain shall ensure that the number of passengers does not exceed
|
||||
<strong>{{ (vessel.max_passengers - 1) if vessel and vessel.max_passengers else '___' }} persons</strong>
|
||||
at any time. The Captain is solely responsible for enforcing this limit before departure and during the voyage.
|
||||
Exceeding the rated capacity is a federal violation and voids the insurance rider.
|
||||
</div>
|
||||
<div class="clause">
|
||||
<span class="clause-num">4.3 WEATHER AUTHORITY.</span>
|
||||
The Captain has sole and final authority to cancel or terminate the voyage at any time if, in the Captain's professional judgment, weather or sea conditions pose an unacceptable risk to the safety of passengers, crew, or the vessel.
|
||||
</div>
|
||||
<div class="clause">
|
||||
<span class="clause-num">4.4 INCIDENT REPORTING.</span>
|
||||
The Captain shall promptly report any accident, injury, damage to the vessel, or contact with another vessel or object to the vessel owner's management company and, if required by law, to the U.S. Coast Guard.
|
||||
</div>
|
||||
<div class="clause">
|
||||
<span class="clause-num">4.5 PRIVATE USE ENFORCEMENT.</span>
|
||||
The Captain acknowledges that this charter is for private recreational use only and shall not knowingly permit any commercial activity aboard the vessel.
|
||||
</div>
|
||||
<div class="clause">
|
||||
<span class="clause-num">4.6 SOBRIETY.</span>
|
||||
The Captain shall not operate the vessel under the influence of alcohol or any controlled substance. The Captain may refuse to depart or may return to port if any passenger's behavior poses a safety risk.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 5. INDEPENDENT CONTRACTOR STATUS -->
|
||||
<div class="section">
|
||||
<div class="section-title">5. Independent Contractor Status</div>
|
||||
<div class="ic-box">
|
||||
<div class="clause" style="margin-bottom:8px;">
|
||||
<span class="clause-num">5.1</span>
|
||||
The Captain is an <strong>independent contractor</strong> and not an employee, agent, or representative of the vessel management company or the vessel owner. Nothing in this Agreement shall be construed to create an employer-employee relationship between the Captain and any party other than as expressly stated herein.
|
||||
</div>
|
||||
<div class="clause" style="margin-bottom:8px;">
|
||||
<span class="clause-num">5.2</span>
|
||||
The Captain is solely responsible for all federal, state, and local income taxes, self-employment taxes, and any other taxes or contributions arising from compensation received under this Agreement.
|
||||
</div>
|
||||
<div class="clause" style="margin-bottom:0;">
|
||||
<span class="clause-num">5.3</span>
|
||||
The vessel management company shall have no obligation to provide workers' compensation, unemployment insurance, health insurance, or any other employee benefits to the Captain.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 6. LIABILITY & INDEMNIFICATION -->
|
||||
<div class="section">
|
||||
<div class="section-title">6. Liability and Indemnification</div>
|
||||
<div class="clause">
|
||||
<span class="clause-num">6.1</span>
|
||||
The Captain shall indemnify and hold harmless the Charterer from any claims arising out of the Captain's gross negligence or willful misconduct during the performance of services under this Agreement.
|
||||
</div>
|
||||
<div class="clause">
|
||||
<span class="clause-num">6.2</span>
|
||||
The Charterer shall indemnify and hold harmless the Captain from any claims arising from the Charterer's or guests' actions, misconduct, or violation of the terms of the Charter Agreement.
|
||||
</div>
|
||||
<div class="clause">
|
||||
<span class="clause-num">6.3</span>
|
||||
<strong>The vessel management company and the vessel owner are expressly excluded from any liability arising under this Captain Services Agreement.</strong>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 7. GOVERNING LAW -->
|
||||
<div class="section">
|
||||
<div class="section-title">7. Governing Law</div>
|
||||
<div class="clause" style="margin-bottom:0;">
|
||||
This Agreement shall be governed by the laws of the State of Florida and applicable federal maritime law. Any disputes shall be resolved by binding arbitration in Miami-Dade County, Florida.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 8. SIGNATURES -->
|
||||
<div class="section" style="margin-top:20px;">
|
||||
<div class="section-title">8. Signatures</div>
|
||||
<p style="font-size:10pt;margin-bottom:12px;">
|
||||
By signing below, both parties confirm they have read and agree to all terms of this Captain Services Agreement.
|
||||
</p>
|
||||
<table style="border:none;">
|
||||
<tr>
|
||||
<td style="width:46%;border:none;vertical-align:bottom;padding:8px 5px;">
|
||||
<div style="font-size:10pt;margin-bottom:6px;"><strong>CAPTAIN (Independent Contractor)</strong></div>
|
||||
<div style="font-size:10pt;color:#333;margin-bottom:4px;">{{ captain.name if captain else '______________________________' }}</div>
|
||||
{% if captain and captain.license_number %}
|
||||
<div style="font-size:9.5pt;color:#666;margin-bottom:4px;">License No.: {{ captain.license_number }}</div>
|
||||
{% endif %}
|
||||
<div style="font-size:9.5pt;color:#666;margin-bottom:40px;">Date: ___________________________</div>
|
||||
<div class="sig-line">Captain's Signature</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:6px;"><strong>CHARTERER (Client)</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:4px;">ID / Passport No.: _______________</div>
|
||||
<div style="font-size:9.5pt;color:#666;margin-bottom:40px;">Date: ___________________________</div>
|
||||
<div class="sig-line">Charterer's Signature</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
Captain Services Agreement • Ref. Charter No. CHR-{{ '%04d' | format(charter.id) }} •
|
||||
{{ charter.start_datetime.strftime('%B %d, %Y') if charter.start_datetime else '' }} •
|
||||
Vessel: {{ vessel.name if vessel else 'N/A' }} •
|
||||
Governing Law: State of Florida
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,278 @@
|
||||
<!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 • Private Vessel Charter Agreement • 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) }} •
|
||||
Status: <span class="badge">{{ charter.status | upper }}</span> •
|
||||
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
|
||||
— <strong>{{ vessel.max_passengers - 1 }} passengers</strong> (excluding captain)
|
||||
{% else %}
|
||||
Per vessel documentation — Captain not counted as passenger
|
||||
{% endif %}
|
||||
• <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 %} — License No. {{ captain.license_number }}{% endif %}
|
||||
— 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 × ${{ '%.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 '____________' }}
|
||||
–
|
||||
{{ 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;">
|
||||
⚠ 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 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 Date: _______________</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
Agreement No. CHR-{{ '%04d' | format(charter.id) }} •
|
||||
{{ charter.start_datetime.strftime('%B %d, %Y') if charter.start_datetime else '' }} •
|
||||
{{ management_company.name if management_company else 'Fleet Management LLC' }} •
|
||||
Governing Law: State of Florida
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,210 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Insurance Rider Confirmation</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 .title { font-size: 17pt; font-weight: bold; color: #c4a747; letter-spacing: 1px; font-family: Arial, sans-serif; }
|
||||
.header-banner .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 4px; 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; }
|
||||
.status-issued { display: block; text-align: center; background: #d4edda; color: #155724; border: 2px solid #28a745; border-radius: 4px; padding: 10px; font-size: 14pt; font-weight: bold; margin-bottom: 18px; font-family: Arial, sans-serif; letter-spacing: 1px; }
|
||||
.status-pending { display: block; text-align: center; background: #fff3cd; color: #856404; border: 2px solid #ffc107; border-radius: 4px; padding: 10px; font-size: 14pt; font-weight: bold; margin-bottom: 18px; font-family: Arial, sans-serif; letter-spacing: 1px; }
|
||||
.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: 6px 8px; border-bottom: 1px solid #ddd; }
|
||||
tr:nth-child(even) td { background: #f9f9f9; }
|
||||
.coverage-box { background: #eef6fc; border: 1px solid #b3d9ef; border-radius: 3px; padding: 14px 16px; }
|
||||
.field-label { font-size: 9pt; color: #555; font-weight: bold; font-family: Arial, sans-serif; text-transform: uppercase; letter-spacing: 0.4px; display: block; margin-bottom: 3px; }
|
||||
.field-value { font-size: 11.5pt; font-weight: bold; color: #0a2a3a; }
|
||||
.field-blank { font-size: 11.5pt; color: #bbb; border-bottom: 1px solid #ccc; display: inline-block; min-width: 180px; }
|
||||
.grid-2 { display: table; width: 100%; }
|
||||
.grid-cell { display: table-cell; width: 50%; padding: 8px 10px; vertical-align: top; }
|
||||
.instructions { background: #fff8e1; border-left: 4px solid #c4a747; padding: 11px 15px; margin-top: 12px; font-size: 10pt; }
|
||||
.clearance-ok { background: #d4edda; border: 1.5px solid #28a745; border-radius: 3px; padding: 9px 14px; font-size: 10.5pt; color: #155724; font-weight: bold; margin-top: 12px; font-family: Arial, sans-serif; }
|
||||
.clearance-no { background: #f8d7da; border: 1.5px solid #dc3545; border-radius: 3px; padding: 9px 14px; font-size: 10.5pt; color: #721c24; font-weight: bold; margin-top: 12px; font-family: Arial, sans-serif; }
|
||||
.stamp-area { border: 2px dashed #ccc; border-radius: 6px; padding: 20px; text-align: center; color: #bbb; font-size: 10pt; margin-top: 14px; min-height: 80px; 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; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header-banner">
|
||||
<div class="title">Insurance Rider — Private Charter</div>
|
||||
<div class="sub">Temporary Named Insured Endorsement • Private Recreational Vessel Use • State of Florida</div>
|
||||
</div>
|
||||
<div class="gold-bar"></div>
|
||||
|
||||
<div class="doc-title">Insurance Rider Confirmation</div>
|
||||
<div class="doc-ref">
|
||||
Charter Ref. No. CHR-{{ '%04d' | format(charter.id) }} •
|
||||
Vessel: <strong>{{ vessel.name if vessel else 'N/A' }}</strong> •
|
||||
Date: {{ charter.start_datetime.strftime('%B %d, %Y') if charter.start_datetime else '________________' }}
|
||||
</div>
|
||||
|
||||
{% if charter.insurance_rider_number %}
|
||||
<div class="status-issued">✓ RIDER ISSUED — VESSEL CLEARED FOR DEPARTURE</div>
|
||||
{% else %}
|
||||
<div class="status-pending">⚠ PENDING ISSUANCE — VESSEL NOT AUTHORIZED TO DEPART</div>
|
||||
{% endif %}
|
||||
|
||||
<!-- 1. NAMED INSURED -->
|
||||
<div class="section">
|
||||
<div class="section-title">1. Named Insured (Temporary)</div>
|
||||
<div class="coverage-box">
|
||||
<div class="grid-2">
|
||||
<div class="grid-cell">
|
||||
<span class="field-label">Full Name</span>
|
||||
<span class="field-value">{{ charter.charterer_name }}</span>
|
||||
</div>
|
||||
<div class="grid-cell">
|
||||
<span class="field-label">Contact</span>
|
||||
<span class="field-value">{{ charter.charterer_email or charter.charterer_phone or '—' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 2. VESSEL -->
|
||||
<div class="section">
|
||||
<div class="section-title">2. Insured Vessel</div>
|
||||
<table>
|
||||
<tr><th>Vessel Name</th><th>HIN / USCG Doc.</th><th>Make / Model</th><th>LOA</th><th>Engines</th></tr>
|
||||
<tr>
|
||||
<td><strong>{{ vessel.name if vessel else '—' }}</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>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<!-- 3. COVERAGE -->
|
||||
<div class="section">
|
||||
<div class="section-title">3. Coverage Details</div>
|
||||
<div class="coverage-box">
|
||||
<div class="grid-2">
|
||||
<div class="grid-cell">
|
||||
<span class="field-label">Rider / Endorsement No.</span>
|
||||
{% if charter.insurance_rider_number %}
|
||||
<span class="field-value">{{ charter.insurance_rider_number }}</span>
|
||||
{% else %}
|
||||
<span class="field-blank"> </span>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="grid-cell">
|
||||
<span class="field-label">Insurer</span>
|
||||
{% if charter.insurer_name %}
|
||||
<span class="field-value">{{ charter.insurer_name }}</span>
|
||||
{% else %}
|
||||
<span class="field-blank"> </span>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="grid-2" style="margin-top:10px;">
|
||||
<div class="grid-cell">
|
||||
<span class="field-label">Coverage Amount</span>
|
||||
{% if charter.coverage_amount %}
|
||||
<span class="field-value">${{ '%,.2f' | format(charter.coverage_amount) }} USD</span>
|
||||
{% else %}
|
||||
<span class="field-blank"> </span>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="grid-cell">
|
||||
<span class="field-label">Coverage Type</span>
|
||||
<span class="field-value">Liability — Private Recreational Use Only</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="grid-2" style="margin-top:10px;">
|
||||
<div class="grid-cell">
|
||||
<span class="field-label">Coverage Start</span>
|
||||
<span class="field-value">{{ charter.start_datetime.strftime('%B %d, %Y %I:%M %p') if charter.start_datetime else '___________________________' }}</span>
|
||||
</div>
|
||||
<div class="grid-cell">
|
||||
<span class="field-label">Coverage End</span>
|
||||
<span class="field-value">{{ end_dt.strftime('%B %d, %Y %I:%M %p') if end_dt else '___________________________' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
{% if charter.damage_waiver and charter.damage_waiver > 0 %}
|
||||
<div style="margin-top:10px;">
|
||||
<span class="field-label">Damage Waiver (paid by Charterer)</span>
|
||||
<span class="field-value">${{ '%.2f' | format(charter.damage_waiver) }} USD</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
{% if charter.insurance_rider_number %}
|
||||
<div class="clearance-ok">✅ DEPARTURE CLEARANCE GRANTED — Coverage active {{ charter.start_datetime.strftime('%I:%M %p') if charter.start_datetime else '—' }} to {{ end_dt.strftime('%I:%M %p') if end_dt else '—' }}</div>
|
||||
{% else %}
|
||||
<div class="clearance-no">🚫 NO CLEARANCE — Vessel may NOT depart until this rider is issued and the rider number is recorded.</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<!-- 4. SCOPE -->
|
||||
<div class="section">
|
||||
<div class="section-title">4. Scope and Exclusions</div>
|
||||
<table>
|
||||
<tr><th style="width:50%;">Covered</th><th style="width:50%;">Excluded</th></tr>
|
||||
<tr>
|
||||
<td>Third-party bodily injury and property damage liability during the coverage period</td>
|
||||
<td>Commercial use, for-hire transport, or any income-generating activity</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Passenger liability for the named insured's guests aboard during the coverage period</td>
|
||||
<td>Operation under the influence of alcohol or controlled substances</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Navigation within agreed Florida coastal / intracoastal operational area</td>
|
||||
<td>Navigation outside approved area or overnight use without prior written consent</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Accidental vessel damage if Damage Waiver was purchased</td>
|
||||
<td>Intentional damage, gross negligence, or willful misconduct</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
{% if not charter.insurance_rider_number %}
|
||||
<div class="instructions">
|
||||
<strong>TO ISSUE THIS RIDER:</strong> Contact your marine insurance broker with the vessel and charterer details above.<br>
|
||||
Recommended Florida marine insurers: <strong>Markel Marine</strong> • <strong>BoatUS / GEICO Marine</strong> • <strong>Progressive Marine</strong> • <strong>Pantaenius America</strong><br>
|
||||
Most brokers issue short-term hourly riders via online portal or email within minutes.
|
||||
Once issued, enter the Rider No. in the charter record to grant departure clearance.
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<!-- 5. INSURER CONFIRMATION -->
|
||||
<div class="section" style="margin-top:16px;">
|
||||
<div class="section-title">5. Insurer Confirmation</div>
|
||||
<table style="border:none;">
|
||||
<tr>
|
||||
<td style="border:none;vertical-align:bottom;padding:8px 5px;width:55%;">
|
||||
<div style="font-size:10pt;margin-bottom:4px;"><strong>{{ charter.insurer_name or 'Insurer' }}</strong></div>
|
||||
<div style="font-size:9.5pt;color:#666;margin-bottom:4px;">Authorized Representative: ___________________________</div>
|
||||
<div style="font-size:9.5pt;color:#666;margin-bottom:40px;">Date of Issuance: ___________________________</div>
|
||||
<div style="border-top:1px solid #333;padding-top:5px;font-size:9pt;color:#555;font-family:Arial,sans-serif;">Authorized Signature</div>
|
||||
</td>
|
||||
<td style="border:none;padding:8px 5px;width:45%;vertical-align:top;">
|
||||
<div class="stamp-area">Insurer Stamp / Seal</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
Insurance Rider • Charter Ref. CHR-{{ '%04d' | format(charter.id) }} •
|
||||
Vessel: {{ vessel.name if vessel else 'N/A' }} •
|
||||
{{ charter.start_datetime.strftime('%B %d, %Y %I:%M %p') if charter.start_datetime else '' }}
|
||||
– {{ end_dt.strftime('%I:%M %p') if end_dt else '' }} •
|
||||
Private Recreational Use Only • State of Florida
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user