37794-vm/core/templates/core/invoice.html
2026-01-28 00:24:24 +00:00

247 lines
8.2 KiB
HTML

{% load static %}
{% load i18n %}
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="UTF-8">
<title>{% trans "Invoice" %} {{ parcel.tracking_number }}</title>
<style>
@page {
size: A4;
margin: 2cm;
}
body {
/* Prioritize Noto Sans for Arabic support */
font-family: 'Noto Sans', 'Noto Sans Arabic', 'DejaVu Sans', sans-serif;
font-size: 14px;
color: #333;
line-height: 1.4;
}
.header {
width: 100%;
margin-bottom: 30px;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 2px solid #eee;
padding-bottom: 20px;
}
.logo-section {
width: 40%;
}
.company-info {
width: 50%;
text-align: right;
font-size: 12px;
}
.title {
text-align: center;
font-size: 24px;
font-weight: bold;
margin-bottom: 30px;
text-transform: uppercase;
background-color: #f9f9f9;
padding: 10px;
border: 1px solid #eee;
}
.title span.ar { display: block; font-size: 18px; font-weight: normal; margin-top: 5px; }
.details-grid {
display: flex;
justify-content: space-between;
margin-bottom: 30px;
}
.details-col {
width: 48%;
background: #fdfdfd;
padding: 15px;
border: 1px solid #eee;
border-radius: 4px;
}
.label {
font-weight: bold;
color: #666;
margin-bottom: 5px;
font-size: 11px;
text-transform: uppercase;
border-bottom: 1px solid #ddd;
padding-bottom: 2px;
display: flex;
justify-content: space-between;
}
.value {
margin-bottom: 10px;
}
table {
width: 100%;
border-collapse: collapse;
margin-bottom: 30px;
}
th, td {
padding: 12px;
border-bottom: 1px solid #eee;
text-align: left;
}
th {
background-color: #f5f5f5;
font-weight: bold;
font-size: 12px;
}
th span.ar { display: block; font-weight: normal; font-size: 11px; color: #555; }
.text-right { text-align: right; }
.total-row td {
font-weight: bold;
font-size: 16px;
border-top: 2px solid #333;
border-bottom: none;
background-color: #f9f9f9;
}
.footer {
margin-top: 50px;
text-align: center;
font-size: 12px;
color: #888;
border-top: 1px solid #eee;
padding-top: 20px;
}
.status-badge {
display: inline-block;
padding: 4px 8px;
border-radius: 4px;
font-size: 12px;
font-weight: bold;
text-transform: uppercase;
}
.paid { color: #0f9d58; border: 1px solid #0f9d58; }
.pending { color: #f4b400; border: 1px solid #f4b400; }
.ar-text {
font-family: 'Noto Sans', 'Noto Sans Arabic', 'DejaVu Sans', sans-serif;
direction: rtl;
unicode-bidi: embed;
}
</style>
</head>
<body>
<div class="header">
<div class="logo-section">
{% if logo_base64 %}
<img src="data:image/jpeg;base64,{{ logo_base64 }}" style="max-width: 200px; max-height: 80px;">
{% else %}
<h2>{{ platform_profile.name }}</h2>
{% endif %}
</div>
<div class="company-info">
<strong>{{ platform_profile.name }}</strong><br>
{{ platform_profile.address|linebreaksbr }}<br>
{% if platform_profile.vat_number %}
VAT / الرقم الضريبي: {{ platform_profile.vat_number }}<br>
{% endif %}
Tel: {{ platform_profile.phone_number }}
</div>
</div>
<div class="title">
TAX INVOICE
<span class="ar ar-text">فاتورة ضريبية</span>
</div>
<div class="details-grid">
<div class="details-col">
<div class="label">
<span>INVOICE DETAILS</span>
<span class="ar-text">تفاصيل الفاتورة</span>
</div>
<div class="value">
<strong>No / رقم:</strong> #{{ parcel.id }}<br>
<strong>Date / التاريخ:</strong> {{ parcel.created_at|date:"Y-m-d" }}<br>
<strong>Status / الحالة:</strong>
<span class="status-badge {% if parcel.payment_status == 'paid' %}paid{% else %}pending{% endif %}">
{% if parcel.payment_status == 'paid' %}
PAID / مدفوع
{% else %}
PENDING / غير مدفوع
{% endif %}
</span>
</div>
</div>
<div class="details-col">
<div class="label">
<span>BILL TO (Shipper)</span>
<span class="ar-text">فاتورة إلى (الشاحن)</span>
</div>
<div class="value">
<strong>{{ parcel.shipper.first_name }} {{ parcel.shipper.last_name }}</strong><br>
{{ parcel.shipper.profile.address }}<br>
{% if parcel.shipper.profile.city %}
{{ parcel.shipper.profile.city.name_en }} / <span class="ar-text">{{ parcel.shipper.profile.city.name_ar }}</span><br>
{% endif %}
{% if parcel.shipper.profile.governate %}
{{ parcel.shipper.profile.governate.name_en }} / <span class="ar-text">{{ parcel.shipper.profile.governate.name_ar }}</span><br>
{% endif %}
{% if parcel.shipper.profile.country %}
{{ parcel.shipper.profile.country.name_en }} / <span class="ar-text">{{ parcel.shipper.profile.country.name_ar }}</span><br>
{% endif %}
<br>
{{ parcel.shipper.email }}<br>
{{ parcel.shipper.profile.phone_number }}
</div>
</div>
</div>
<table>
<thead>
<tr>
<th width="50%">
Description
<span class="ar ar-text">الوصف</span>
</th>
<th>
Tracking No
<span class="ar ar-text">رقم التتبع</span>
</th>
<th>
Weight
<span class="ar ar-text">الوزن</span>
</th>
<th class="text-right">
Amount
<span class="ar ar-text">المبلغ</span>
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
Delivery Service / خدمة توصيل<br>
<small>{{ parcel.description|truncatechars:50 }}</small>
</td>
<td>{{ parcel.tracking_number }}</td>
<td>{{ parcel.weight }} kg</td>
<td class="text-right">{{ parcel.price }} OMR / <span class="ar-text">ر.ع.</span></td>
</tr>
</tbody>
<tfoot>
<tr class="total-row">
<td colspan="3" class="text-right">
TOTAL / الإجمالي
</td>
<td class="text-right">{{ parcel.price }} OMR / <span class="ar-text">ر.ع.</span></td>
</tr>
</tfoot>
</table>
<div class="footer">
<p>Thank you for using {{ platform_profile.name }}!</p>
<p class="ar-text">شكراً لاستخدامكم {{ platform_profile.name }}!</p>
{% if platform_profile.registration_number %}
<p>CR No / السجل التجاري: {{ platform_profile.registration_number }}</p>
{% endif %}
</div>
</body>
</html>