{% set isAsAgreed = isAsAgreed|default(false) %} {# ═══════════════════════════════ HEADER ═══════════════════════════════ #}
{{ numberParts.prefix }} {{ data.route.departureCode }} {{ numberParts.serial }}   {{ numberParts.prefix }}{{ numberParts.serial }}
{% if isAsAgreed %}
As Agreed
{% endif %} {# ═══════════════════════════════ SHIPPER ═══════════════════════════════ #}
Shipper's Name and Address
{{ data.shipper.name }}
{{ data.shipper.address|raw }}
{{ data.shipper.city }}
Shipper's Account Number
{{ data.shipper.accountNumber ?: '' }}
Not Negotiable
{% if data.type == 'HAWB' %} HOUSE AIRWAY BILL {% else %} AIR WAYBILL {% endif %}
{{ company.city|default(company.address) }}{% if company.phone is defined and company.phone %} / {{ company.phone }}{% endif %}
Issued by
Copies 1, 2 and 3 of this Air Waybill are originals and have the same validity.
{# ═══════════════════════════════ CONSIGNEE ═══════════════════════════════ #}
Consignee's Name and Address
{{ data.consignee.name }}
{{ data.consignee.address|raw }}
{{ data.consignee.city }}
Consignee's Account Number
{{ data.consignee.accountNumber ?: '' }}
It is agreed that the goods described herein are accepted in apparent good order and condition (except as noted) for carriage SUBJECT TO THE CONDITIONS OF CONTRACT ON THE REVERSE HEREOF. ALL GOODS MAY BE CARRIED BY ANY OTHER MEANS INCLUDING ROAD OR ANY OTHER CARRIER UNLESS SPECIFIC CONTRARY INSTRUCTIONS ARE GIVEN HEREON BY THE SHIPPER, AND SHIPPER AGREES THAT THE SHIPMENT MAY BE CARRIED VIA INTERMEDIATE STOPPING PLACES WHICH THE CARRIER DEEMS APPROPRIATE. THE SHIPPER'S ATTENTION IS DRAWN TO THE NOTICE CONCERNING CARRIER'S LIMITATION OF LIABILITY. Shipper may increase such limitation of liability by declaring a higher value for carriage and paying a supplemental charge if required.
{# ═══════════════════════════════ ISSUING CARRIER ═══════════════════════════════ #}
Issuing Carrier
{{ data.carrier.issuingName|default('') }}
{% set issuingAddress = data.carrier.issuingAddress|default('') %}
{{ issuingAddress|raw }}
{{ data.carrier.issuingCity|default('') }}
Accounting
MAWB# {{ data.info|raw }}
{# ═══════════════════════════════ IATA ═══════════════════════════════ #}
Agent's IATA Code
{{ data.carrier.agentIataCode|default('') }}
Account No.
{{ data.carrier.agentAccountNumber|default('') }}
{# ═══════════════════════════════ DEPARTURE ═══════════════════════════════ #}
Airport of Departure (Addr. of First Carrier) and Requested Routing
{% if data.route.departureName %}{{ data.route.departureName|upper }} ({{ data.route.departureCode }}){% endif %}
Reference Number
{{ data.flight.refNumber }}
Optional Shipping Information
{{ data.flight.optionalInfo }}
{# ═══════════════════════════════ ROUTING ROW ═══════════════════════════════ #}
To {{ data.route.routeToCode ?? data.route.destinationCode }} By First Carrier {{ data.route.byFirstCarrier }} to by to by Charges at Destination
{{ (data.charges.destcharges is not null ? (data.charges.destcharges|number_format(2)) : '0.00') }}
Total Collect Charges
{{ (((data.charges.totalCollect ?? 0) * (data.charges.conversionRate ?? 1)) + (data.charges.destcharges ?? 0))|number_format(2) }}
WT/VAL PPD   COL {{ data.charges.wtval }} Other PPD   COL {{ data.charges.other }} Declared Value for Carriage {{ data.charges.carrierValue }} Declared Value for Customs {{ data.charges.customValue }}
{# ═══════════════════════════════ DESTINATION ═══════════════════════════════ #}
Airport of Destination
{% if data.route.destinationName %}{{ data.route.destinationName|upper }} ({{ data.route.destinationCode }}){% endif %}
Requested Flight/Date
{{ data.flight.number ?: '' }} {{ data.flight.date ?: '' }}
Amount of Insurance {{ data.charges.insuranceAmount is not null ? (data.charges.insuranceAmount|number_format(2)) : '0.00' }} INSURANCE – If carrier offers insurance and such insurance is requested in accordance with conditions thereof, indicate amount to be insured in figures in box marked "Amount of Insurance".
{# ═══════════════════════════════ HANDLING ═══════════════════════════════ #}
Handling Information {{ data.handling|raw }}
{# ═══════════════════════════════ COMMODITIES ═══════════════════════════════ #} {# asegurarnos de reservar espacio: filas mínimas para que el bloque empuje abajo otras secciones #} {% set itemCount = data.commodities|length %} {% set minRows = 12 %} {% for c in data.commodities %} {% endfor %} {# filas vacías: usamos una celda con colspan para evitar divisiones verticales internas #} {# reduce fillers: target ~22 rows, but cap added rows so we don't force extra pages #} {% set minRows = 20 %} {% set needed = minRows - itemCount %} {% if needed > 1 %} {% set fillerCount = 1 %} {% elseif needed > 0 %} {% set fillerCount = needed %} {% else %} {% set fillerCount = 0 %} {% endif %} {% if fillerCount > 0 %} {% for i in 1..fillerCount %} {% endfor %} {% endif %}
No. of
Pieces
RCP
Gross
Weight
kg
lb
Rate Class
Commodity
Item No.
Chargeable
Weight
Rate/
Charge
Total Nature and Quantity of Goods
(Incl. Dimensions or Volume)
{% if c.pieces is not null %}{{ c.pieces|number_format(0, '.', '') }}{% endif %} {% if c.grossWeight is not null %}{{ c.grossWeight|number_format(company.decimals|default(2), '.', '') }}{% endif %} {{ c.weightUnit[:1] }} {{ c.rateClass }} {% if c.chargeableWeight is not null %}{{ c.chargeableWeight|number_format(company.decimals|default(2), '.', '') }}{% endif %} {% if isAsAgreed %}As Agreed{% elseif c.rateCharge is not null %}{{ c.rateCharge|number_format(company.decimals|default(2), '.', '') }}{% endif %} {% if isAsAgreed %}As Agreed{% elseif c.lineTotal is not null %}{{ c.lineTotal|number_format(company.decimals|default(2), '.', '') }}{% endif %} {% if isAsAgreed %}As Agreed{% else %}{{ c.description }}{% endif %}
 
{# ═══ TOTALS — solo piezas y peso bruto tienen borde ═══ #}
{% if data.totals.totalPieces is not null %}{{ data.totals.totalPieces|number_format(0, '.', '') }}{% endif %} {% if data.totals.totalGrossWeight is not null %}{{ data.totals.totalGrossWeight|number_format(company.decimals|default(2), '.', '') }}{% endif %}         {% if isAsAgreed %}As Agreed{% else %}{{ data.totals.commoditiesLineTotalSum|default(0)|number_format(2, '.', ',') }}{% endif %}  
{# ═══════════════════════════════ CHARGES — rowspan real ═══════════════════════════════ #} {# wtval: PPD = Prepaid (col izq), Col = Collect (col der) — Weight Charge, Valuation Charge, Tax #} {# other: PPD = Prepaid (col izq), Col = Collect (col der) — Due Agent, Due Carrier #} {# Fila 1: headers con separadores diagonales — label en col izq/der, centro vacío #} {# Fila 2: Weight Charge — true=Prepaid, false=Collect #} {# Fila 3: Valuation Charge — true=Prepaid, false=Collect #} {# Fila 4: Tax — true=Prepaid, false=Collect #} {# Fila 5: Due Agent — true=Prepaid, false=Collect #} {# Fila 6: Due Carrier — true=Prepaid, false=Collect #} {# Fila 7: Total Prepaid / Total Collect con separadores diagonales + valores #}
Prepaid
  Collect
Other Charges
Shipper certifies that the particulars on the face hereof are correct and that insofar as any part of the consignment contains dangerous goods, such part is properly described by name and is in proper condition for carriage by air according to the applicable Dangerous Goods Regulations.
{{ data.execution.signPerson }}
 
Signature of Shipper or his Agent
{% if isAsAgreed %}As Agreed{% elseif data.charges.tweightcharges != false %}{{ data.charges.weightCharges ?? '0.00' }}{% endif %} Weight Charge {% if isAsAgreed %}As Agreed{% elseif data.charges.tweightcharges == false %}{{ data.charges.weightCharges ?? '0.00' }}{% endif %}
{% if isAsAgreed %}As Agreed{% elseif data.charges.tvaluecharges != false %}{{ data.charges.valuationCharge ?? '0.00' }}{% endif %} Valuation Charge {% if isAsAgreed %}As Agreed{% elseif data.charges.tvaluecharges == false %}{{ data.charges.valuationCharge ?? '0.00' }}{% endif %}
{% if isAsAgreed %}As Agreed{% elseif data.charges.ttax != false %}{{ data.charges.tax ?? '0.00' }}{% endif %} Tax {% if isAsAgreed %}As Agreed{% elseif data.charges.ttax == false %}{{ data.charges.tax ?? '0.00' }}{% endif %}
{% if isAsAgreed %}As Agreed{% elseif data.charges.tdueagent != false %}{{ data.charges.dueAgent ?? '0.00' }}{% endif %} Total Other Charges Due Agent {% if isAsAgreed %}As Agreed{% elseif data.charges.tdueagent == false %}{{ data.charges.dueAgent ?? '0.00' }}{% endif %}
{% if isAsAgreed %}As Agreed{% elseif data.charges.tduecarrier != false %}{{ data.charges.dueCarrier ?? '0.00' }}{% endif %} Total Other Charges Due Carrier {% if isAsAgreed %}As Agreed{% elseif data.charges.tduecarrier == false %}{{ data.charges.dueCarrier ?? '0.00' }}{% endif %}
Total Prepaid
{% if isAsAgreed %}As Agreed{% else %}{{ data.charges.totalPrepaid ?? '0.00' }}{% endif %}
  Total Collect
{% if isAsAgreed %}As Agreed{% else %}{{ data.charges.totalCollect ?? '0.00' }}{% endif %}
{# ═══════════════════════════════ CURRENCY / EXECUTION ═══════════════════════════════ #} {# Una sola fila: izq 50% (moneda) + der 50% (ejecución) — mismo ancho que Other Charges #}
Currency Conversion Rates
{{ data.charges.conversionRate is not null ? (data.charges.conversionRate|number_format(2)) : '' }}
CC Charges in Dest. Currency
{{ (data.charges.totalCollect * (data.charges.conversionRate ?: 1))|number_format(2) }}
Executed on (date)
{{ data.execution.date ?: '' }}
at (place)
{{ data.execution.place ?: '' }}
Signature of Issuing Carrier or its Agent {{ data.execution.signPerson }}
 
{# ═══════════════════════════════ CHARGES AT DESTINATION ═══════════════════════════════ #}
Charges at Destination
{{ (data.charges.destcharges is not null ? (data.charges.destcharges|number_format(2)) : '0.00') }}
Total Collect Charges
{{ (((data.charges.totalCollect ?? 0) * (data.charges.conversionRate ?? 1)) + (data.charges.destcharges ?? 0))|number_format(2) }}
{{ numberParts.sequence }}
{# ═══════════════════════════════ COPY LABEL ═══════════════════════════════ #}

{{ copyLabel }}