This commit is contained in:
Marwan Alwali 2025-06-15 18:41:19 +03:00
parent 85793dfba7
commit 08628da712
5 changed files with 250 additions and 84 deletions

View File

@ -234,7 +234,7 @@ urlpatterns = [
name="fetch_notifications",
),
path(
"crm/notifications/<int:pk>/mark_as_read/",
"crm/notifications/<int:notification_id>/mark_as_read/",
views.mark_notification_as_read,
name="mark_notification_as_read",
),

Binary file not shown.

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-06-13 02:11+0300\n"
"POT-Creation-Date: 2025-06-15 18:31+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -32,32 +32,34 @@ msgstr ""
#: templates/sales/estimates/sale_order_form.html:122
#: templates/sales/estimates/sale_order_preview.html:178
#: templates/sales/invoices/invoice_detail.html:241
#: templates/sales/orders/order_details.html:201
#: templates/sales/orders/order_details.html:486
#: templates/sales/sales_list.html:115
msgid "VIN"
msgstr "رقم الهيكل"
#: api/views.py:146 inventory/views.py:681
#: api/views.py:147 inventory/views.py:681
msgid "Invalid VIN number provided"
msgstr "تم تقديم رقم تعريف مركبة (VIN) غير صالح"
#: api/views.py:154
#: api/views.py:155
msgid "VIN not found in any source"
msgstr "لم يتم العثور على رقم الهيكل (VIN) في أي مصدر"
#: car_inventory/settings.py:174
#: car_inventory/settings.py:173
msgid "SAR"
msgstr "ريال"
#: car_inventory/settings.py:270
#: car_inventory/settings.py:269
#: venv/lib/python3.11/site-packages/appointments/settings.py:136
msgid "English"
msgstr "الإنجليزية"
#: car_inventory/settings.py:271
#: car_inventory/settings.py:270
msgid "Arabic"
msgstr "العربية"
#: car_inventory/settings.py:360 templates/header.html:358
#: car_inventory/settings.py:359 templates/header.html:358
#: templates/welcome-temp.html:57 templates/welcome_header.html:7
msgid "Haikal"
msgstr "هيكل"
@ -358,6 +360,7 @@ msgstr "الكمية"
#: templates/plans/create_order.html:29 templates/plans/invoices/layout.html:11
#: templates/sales/invoices/invoice_create.html:5
#: templates/sales/invoices/invoice_detail.html:69
#: templates/sales/orders/order_details.html:439
#: templates/sales/orders/order_list.html:17
#: templates/sales/payments/payment_list.html:21
#: templates/sales/sales_list.html:119
@ -413,6 +416,7 @@ msgid "SADAD"
msgstr "سداد"
#: inventory/forms.py:1009 templates/sales/estimates/sale_order_form.html:177
#: templates/sales/orders/order_details.html:128
msgid "Payment Method"
msgstr "طريقة الدفع"
@ -446,6 +450,7 @@ msgstr "إلى"
#: templates/sales/estimates/sale_order_form.html:124
#: templates/sales/estimates/sale_order_preview.html:179
#: templates/sales/invoices/invoice_detail.html:238
#: templates/sales/orders/order_details.html:189
#: templates/sales/sales_list.html:113
msgid "Make"
msgstr "الصانع"
@ -460,6 +465,7 @@ msgstr "الصانع"
#: templates/sales/estimates/sale_order_form.html:126
#: templates/sales/estimates/sale_order_preview.html:180
#: templates/sales/invoices/invoice_detail.html:239
#: templates/sales/orders/order_details.html:193
#: templates/sales/sales_list.html:114
msgid "Model"
msgstr "الموديل"
@ -908,6 +914,7 @@ msgstr "المورد"
#: templates/sales/estimates/sale_order_form.html:128
#: templates/sales/estimates/sale_order_preview.html:181
#: templates/sales/invoices/invoice_detail.html:240
#: templates/sales/orders/order_details.html:197
msgid "Year"
msgstr "السنة"
@ -932,6 +939,7 @@ msgstr "ملاحظات"
#: templates/inventory/car_form.html:177
#: templates/inventory/car_form_qabl alfalsafa.html:157
#: templates/inventory/car_list.html:197 templates/inventory/car_list.html:203
#: templates/sales/orders/order_details.html:205
msgid "Mileage"
msgstr "عدد الكيلومترات"
@ -1065,6 +1073,7 @@ msgstr "وصف اختياري حول وضع السيارة في صالة الع
#: inventory/models.py:965
#: templates/crm/opportunities/opportunity_detail.html:139
#: templates/sales/orders/order_details.html:148
msgid "Last Updated"
msgstr "آخر تحديث"
@ -1384,11 +1393,13 @@ msgstr "إلغاء العرض"
msgid "Create Order"
msgstr "إنشاء طلب"
#: inventory/models.py:1276
#: inventory/models.py:1276 templates/sales/orders/order_details.html:389
#: templates/sales/orders/order_details.html:528
msgid "Cancel Order"
msgstr "إلغاء الطلب"
#: inventory/models.py:1277 templates/sales/estimates/estimate_detail.html:108
#: templates/sales/orders/order_details.html:377
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/invoice/invoice_create.html:24
#: venv/lib/python3.11/site-packages/django_ledger/views/invoice.py:68
msgid "Create Invoice"
@ -1402,6 +1413,7 @@ msgstr "إلغاء الفاتورة"
msgid "Qualification"
msgstr "التأهيل"
#: inventory/models.py:1283
msgid "Test Drive"
msgstr "تجربة القيادة"
@ -1409,6 +1421,7 @@ msgstr "تجربة القيادة"
#: templates/sales/estimates/estimate_detail.html:79
#: templates/sales/estimates/estimate_send.html:5
#: templates/sales/estimates/sale_order_form.html:171
#: templates/sales/orders/order_details.html:431
#: templates/sales/sales_list.html:118
msgid "Quotation"
msgstr "عرض سعر"
@ -1478,6 +1491,8 @@ msgstr "الصورة"
#: templates/sales/estimates/sale_order_preview.html:167
#: templates/sales/invoices/invoice_list.html:16
#: templates/sales/journals/journal_list.html:16
#: templates/sales/orders/order_details.html:124
#: templates/sales/orders/order_details.html:461
#: templates/sales/orders/order_list.html:15
#: venv/lib/python3.11/site-packages/django_ledger/models/customer.py:189
#: venv/lib/python3.11/site-packages/django_ledger/models/estimate.py:252
@ -1653,6 +1668,7 @@ msgstr "المُعرّف الفريد للفرصة (slug)."
#: inventory/models.py:2008 templates/crm/leads/lead_detail.html:110
#: templates/crm/leads/lead_list.html:75 templates/header.html:148
#: templates/sales/orders/order_details.html:453
msgid "Opportunity"
msgstr "فرصة"
@ -1680,6 +1696,7 @@ msgstr "ملاحظة"
#: templates/crm/opportunities/opportunity_detail.html:329
#: templates/customers/view_customer.html:192
#: templates/plans/invoices/layout.html:175
#: templates/sales/orders/order_details.html:568
#: venv/lib/python3.11/site-packages/django_ledger/forms/bill.py:154
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/includes/card_markdown.html:9
msgid "Notes"
@ -2194,6 +2211,8 @@ msgstr "المخزون"
msgid "Car Colors details updated successfully"
msgstr "تم تحديث تفاصيل ألوان السيارة بنجاح"
#: inventory/views.py:1017
#, python-format
msgid "Update Colors for %(car_name)s"
msgstr "تحديث الألوان لـ %(car_name)s"
@ -2334,7 +2353,8 @@ msgstr "لقد وصلت إلى الحد الأقصى لعدد أعضاء الف
#: inventory/views.py:2743
msgid "A user with this email already exists. Please use a different email."
msgstr "يوجد مستخدم بهذا البريد الإلكتروني بالفعل. يرجى استخدام بريد إلكتروني مختلف."
msgstr ""
"يوجد مستخدم بهذا البريد الإلكتروني بالفعل. يرجى استخدام بريد إلكتروني مختلف."
#: inventory/views.py:2790
msgid "User updated successfully"
@ -2624,9 +2644,11 @@ msgstr "تم حذف الحساب بنجاح"
msgid "You cannot delete this account,it is related to another account"
msgstr "لا يمكنك حذف هذا الحساب، لأنه مرتبط بحساب آخر"
#: inventory/views.py:8529
msgid "Purchase order created successfully"
msgstr "تم إنشاء أمر الشراء بنجاح"
#: inventory/views.py:8570
msgid "Inventory item created successfully"
msgstr "تم إنشاء عنصر المخزون بنجاح"
@ -3499,12 +3521,16 @@ msgstr "الطابع الزمني"
msgid "User"
msgstr "المستخدم"
#: templates/admin_management/auth_logs.html:32
msgid "Event Type"
msgstr "نوع الحدث"
#: templates/admin_management/auth_logs.html:33
msgid "username"
msgstr "اسم المستخدم"
#: templates/admin_management/auth_logs.html:34
#: templates/admin_management/request_logs.html:33
msgid "IP Address"
msgstr "عنوان IP"
@ -3544,39 +3570,51 @@ msgstr "لوحة سجل التدقيق"
msgid "Action"
msgstr "الإجراء"
#: templates/admin_management/model_logs.html:34
msgid "Object ID"
msgstr "معرّف الكائن"
#: templates/admin_management/model_logs.html:35
msgid "Object Representation"
msgstr "تمثيل الكائن"
#: templates/admin_management/model_logs.html:36
msgid "Field"
msgstr "الحقل"
#: templates/admin_management/model_logs.html:37
msgid "Old Value"
msgstr "القيمة القديمة"
#: templates/admin_management/model_logs.html:38
msgid "New Value"
msgstr "القيمة الجديدة"
#: templates/admin_management/model_logs.html:99
msgid "Object created."
msgstr "تم إنشاء الكائن."
#: templates/admin_management/model_logs.html:101
msgid "Object deleted."
msgstr "تم حذف الكائن."
#: templates/admin_management/model_logs.html:103
msgid "No specific field changes recorded."
msgstr "لم يتم تسجيل تغييرات محددة في الحقول."
#: templates/admin_management/model_logs.html:116
msgid "No model change audit events found."
msgstr "لم يتم العثور على أحداث تدقيق لتغييرات النماذج."
#: templates/admin_management/nav.html:6
msgid "User Actions"
msgstr "إجراءات المستخدم"
#: templates/admin_management/nav.html:11
msgid "User Login Events"
msgstr "أحداث تسجيل دخول المستخدم"
#: templates/admin_management/nav.html:16
msgid "User Page Requests"
msgstr "طلبات صفحات المستخدم"
@ -3925,6 +3963,7 @@ msgstr "المدة"
#: templates/administration/manage_service.html:66
#: templates/appointment/appointment_client_information.html:108
#: templates/sales/orders/order_details.html:234
#: venv/lib/python3.11/site-packages/appointment/templates/appointment/appointment_client_information.html:115
msgid "Down Payment"
msgstr "دفعة مقدمة"
@ -4440,6 +4479,7 @@ msgstr "تفاصيل الدفع"
#: templates/sales/estimates/estimate_detail.html:197
#: templates/sales/estimates/sale_order_preview.html:184
#: templates/sales/invoices/invoice_detail.html:244
#: templates/sales/orders/order_details.html:269
#: venv/lib/python3.11/site-packages/appointment/templates/appointment/appointment_client_information.html:103
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/bills/bill_detail.html:98
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/bills/bill_detail.html:127
@ -5146,6 +5186,7 @@ msgstr "السيارة المطلوبة"
msgid "Related Records"
msgstr "السجلات المرتبطة"
#: templates/crm/leads/lead_detail.html:114
msgid "No Opportunity"
msgstr "لا توجد فرصة"
@ -5194,6 +5235,7 @@ msgid "Add Note"
msgstr "إضافة ملاحظة"
#: templates/crm/leads/lead_detail.html:296
#: templates/sales/orders/order_details.html:132
msgid "Created By"
msgstr "تم الإنشاء بواسطة"
@ -5320,9 +5362,11 @@ msgstr "متابعات"
msgid "Negotiation Ups"
msgstr "مفاوضات إضافية"
#: templates/crm/leads/partials/update_action.html:5
msgid "Update Lead Actions"
msgstr "تحديث إجراءات العميل المحتمل"
#: templates/crm/leads/partials/update_action.html:16
msgid "Select Stage"
msgstr "اختر المرحلة"
@ -5347,6 +5391,8 @@ msgstr "لا يوجد إجراء"
#: templates/modal/event_details_modal.html:21
#: templates/partials/scanner_modal.html:6
#: templates/partials/specifications_modal.html:8
#: templates/sales/orders/order_details.html:542
#: templates/sales/orders/order_details.html:573
#: venv/lib/python3.11/site-packages/appointment/templates/modal/confirm_modal.html:18
#: venv/lib/python3.11/site-packages/appointment/templates/modal/error_modal.html:17
#: venv/lib/python3.11/site-packages/appointment/templates/modal/event_details_modal.html:19
@ -5376,24 +5422,34 @@ msgstr "تفاصيل الفرصة"
msgid "View Quotation"
msgstr "مشاهدة عرض السعر"
#: templates/crm/opportunities/opportunity_detail.html:77
msgid "Upcoming Events"
msgstr "الأحداث القادمة"
#: templates/crm/opportunities/opportunity_detail.html:90
msgid "No upcoming events"
msgstr "لا توجد أحداث قادمة"
#: templates/crm/opportunities/opportunity_detail.html:109
msgid "No Estimate"
msgstr "لا يوجد تقدير"
#: templates/crm/opportunities/opportunity_detail.html:117
#: templates/payment_success.html:29
#: templates/sales/estimates/estimate_detail.html:97
#: templates/sales/invoices/invoice_detail.html:5
msgid "View Invoice"
msgstr "عرض الفاتورة"
#: templates/crm/opportunities/opportunity_detail.html:119
msgid "No Invoice"
msgstr "لا توجد فاتورة"
#: templates/crm/opportunities/opportunity_detail.html:128
msgid "System Information"
msgstr "معلومات النظام"
#: templates/crm/opportunities/opportunity_detail.html:133
msgid "Created "
msgstr "تم الإنشاء"
@ -5418,6 +5474,7 @@ msgstr "تاريخ الإنشاء"
msgid "Meetings"
msgstr "الاجتماعات"
#: templates/crm/opportunities/opportunity_detail.html:333
msgid "Calls"
msgstr "المكالمات"
@ -5606,6 +5663,7 @@ msgstr "حالة الدفع"
#: templates/sales/invoices/invoice_detail.html:80
#: templates/sales/invoices/invoice_detail.html:224
#: templates/sales/invoices/invoice_list.html:40
#: templates/sales/orders/order_details.html:268
#: venv/lib/python3.11/site-packages/django_ledger/models/bill.py:346
#: venv/lib/python3.11/site-packages/django_ledger/models/invoice.py:303
msgid "Paid"
@ -6471,6 +6529,7 @@ msgid "Cannot Edit, Car in Transfer."
msgstr "لا يمكن التعديل، السيارة قيد النقل."
#: templates/inventory/car_detail.html:233
#: templates/sales/orders/order_details.html:224
msgid "Financial Details"
msgstr "التفاصيل المالية"
@ -6597,9 +6656,11 @@ msgstr "يرجى إضافة مورد قبل إضافة السيارة."
msgid "Add Vendor"
msgstr "إضافة مورد"
#: templates/inventory/car_form.html:58
msgid "Scan VIN"
msgstr "مسح رقم الهيكل"
#: templates/inventory/car_form.html:64
msgid "Decode VIN"
msgstr "تحليل رقم الهيكل"
@ -7333,9 +7394,13 @@ msgstr "الأصول"
msgid "COGS"
msgstr "تكلفة البضائع المباعة"
#: templates/ledger/coa_accounts/account_list.html:32
#: venv/lib/python3.11/site-packages/django_ledger/io/roles.py:483
#: venv/lib/python3.11/site-packages/django_ledger/io/roles.py:569
msgid "Capital"
msgstr "رأس المال"
#: templates/ledger/coa_accounts/account_list.html:37
msgid "Income"
msgstr "الإيرادات"
@ -8080,9 +8145,11 @@ msgstr "تم الدفع بنجاح"
msgid "Thank You"
msgstr "شكرًا لك"
#: templates/payment_success.html:26
msgid "Your payment was successful"
msgstr "تمت عملية الدفع بنجاح"
#: templates/payment_success.html:26
msgid "Your order is being processed"
msgstr "يتم الآن معالجة طلبك"
@ -8341,6 +8408,7 @@ msgid "Issued"
msgstr "تاريخ الإصدار"
#: templates/plans/invoices/layout.html:27
#: templates/sales/orders/order_details.html:120
msgid "Order Date"
msgstr "تاريخ الطلب"
@ -8613,6 +8681,7 @@ msgid "Confirm Your Information"
msgstr "تأكيد معلوماتك"
#: templates/pricing_page.html:178
#: templates/sales/orders/order_details.html:106
msgid "Order Summary"
msgstr "ملخص الطلب"
@ -8749,9 +8818,11 @@ msgstr "مورد جديد"
msgid "Edit Purchase Order"
msgstr "تعديل أمر الشراء"
#: templates/purchase_orders/po_form.html:24
msgid "Add New Purchase Order"
msgstr "إضافة أمر شراء جديد"
#: templates/purchase_orders/po_list.html:22
msgid "Create New PO"
msgstr "إنشاء أمر شراء جديد"
@ -8874,6 +8945,7 @@ msgstr "إرسال"
#: templates/sales/estimates/sale_order_form.html:5
#: templates/sales/estimates/sale_order_form1.html:5
#: templates/sales/estimates/sale_order_preview.html:159
#: templates/sales/orders/order_details.html:84
msgid "Sale Order"
msgstr "أمر بيع"
@ -8953,6 +9025,104 @@ msgstr "لم يتم العثور على فاتورة"
msgid "Create Payment"
msgstr "إجراء الدفع"
#: templates/sales/orders/order_details.html:88
#: templates/sales/orders/purchase_order.html:37
msgid "Print"
msgstr "طباعة"
msgid "Share"
msgstr "مشاركة"
msgid "Not scheduled"
msgstr "لم يتم الجدولة"
msgid "Cancellation Reason"
msgstr "سبب الإلغاء"
msgid "Order Comments"
msgstr "ملاحظات الطلب"
msgid "Vehicle Details"
msgstr "تفاصيل المركبة"
msgid "km"
msgstr "كم"
msgid "No vehicle assigned to this order"
msgstr "لم يتم تخصيص مركبة لهذا الطلب"
msgid "Agreed Price"
msgstr "السعر المتفق عليه"
msgid "Trade-In Value"
msgstr "قيمة الاستبدال"
msgid "Loan Amount"
msgstr "قيمة القرض"
msgid "Total Paid"
msgstr "المبلغ المدفوع"
msgid "Remaining Balance"
msgstr "المبلغ المتبقي"
msgid "Documents"
msgstr "المستندات"
msgid "Add Document"
msgstr "إضافة مستند"
msgid "Drag & drop files here or click to browse"
msgstr "اسحب وأفلت الملفات هنا أو انقر للتصفح"
msgid "No documents uploaded yet"
msgstr "لم يتم تحميل أي مستندات بعد"
msgid "Comments & Notes"
msgstr "التعليقات والملاحظات"
msgid "Post Comment"
msgstr "نشر تعليق"
msgid "No comments yet"
msgstr "لا توجد تعليقات بعد"
msgid "Order Actions"
msgstr "إجراءات الطلب"
msgid "Edit Order"
msgstr "تعديل الطلب"
msgid "Schedule Delivery"
msgstr "جدولة التسليم"
msgid "Order Status Timeline"
msgstr "الجدول الزمني لحالة الطلب"
msgid "Changed by"
msgstr "تم التغيير بواسطة"
msgid "No status history available"
msgstr "لا يوجد سجل للحالة"
msgid "Related Items"
msgstr "العناصر ذات الصلة"
msgid "Not created yet"
msgstr "لم يتم الإنشاء بعد"
msgid "Trade-In Vehicle"
msgstr "مركبة الاستبدال"
msgid "Reason for Cancellation"
msgstr "سبب الإلغاء"
msgid "Confirm Cancellation"
msgstr "تأكيد الإلغاء"
msgid "Delivery Date"
msgstr "تاريخ التسليم"
#: templates/sales/orders/order_list.html:14
msgid "Order Number"
msgstr "رقم الطلب"
@ -8961,14 +9131,6 @@ msgstr "رقم الطلب"
msgid "For Quotation"
msgstr "لعرض سعر"
#: templates/sales/orders/order_list.html:19
msgid "Expected Delivery"
msgstr "موعد التسليم المتوقع"
#: templates/sales/orders/purchase_order.html:37
msgid "Print"
msgstr "طباعة"
#: templates/sales/orders/purchase_order.html:45
#: venv/lib/python3.11/site-packages/django_ledger/models/entity.py:3170
msgid "Purchase Order"
@ -10385,9 +10547,13 @@ msgstr "الفرنسية"
msgid "not allowed with argument %s"
msgstr "غير مسموح به مع الوسيط %s"
#: venv/lib/python3.11/site-packages/argcomplete/packages/_argparse.py:201
#: venv/lib/python3.11/site-packages/argcomplete/packages/_argparse.py:215
#, python-format
msgid "ignored explicit argument %r"
msgstr "تم تجاهل الوسيط المحدد %r"
#: venv/lib/python3.11/site-packages/argcomplete/packages/_argparse.py:317
msgid "too few arguments"
msgstr "عدد غير كافٍ من الوسائط"

View File

@ -22,7 +22,7 @@
</div>
<div class="dropdown">
<button class="btn fs-10 btn-sm dropdown-toggle dropdown-caret-none transition-none notification-dropdown-toggle" type="button" data-bs-toggle="dropdown" data-boundary="window" aria-haspopup="true" aria-expanded="false" data-bs-reference="parent"><span class="fas fa-ellipsis-h fs-10 text-body"></span></button>
<div class="dropdown-menu dropdown-menu-end py-2"><a class="dropdown-item" href="{% url 'mark_notification_as_read' notification.pk %}">{{ _("Mark as Read")}}</a></div>
<div class="dropdown-menu dropdown-menu-end py-2"><a class="dropdown-item" href="{% url 'mark_notification_as_read' notification.id %}">{{ _("Mark as Read")}}</a></div>
</div>
</div>
{% endfor %}

View File

@ -76,19 +76,19 @@
{% block content %}
<div class="container-fluid px-0">
<!-- Header -->
<header class="bg-primary text-white py-3">
<header class="bg-primary py-3">
<div class="container">
<div class="d-flex justify-content-between align-items-center">
<h1 class="h4 mb-0">
<i class="fas fa-file-invoice me-2"></i>
Sale Order #{{ saleorder.formatted_order_id }}
{{ _("Sale Order")}} #{{ saleorder.formatted_order_id }}
</h1>
<div>
<button class="btn btn-sm btn-outline-light me-2">
<i class="fas fa-print me-1"></i> Print
<i class="fas fa-print me-1"></i> {{ _("Print") }}
</button>
<button class="btn btn-sm btn-outline-light">
<i class="fas fa-share-alt me-1"></i> Share
<i class="fas fa-share-alt me-1"></i> {{ _("Share") }}
</button>
</div>
</div>
@ -103,7 +103,7 @@
<!-- Order Summary Card -->
<div class="card mb-4 shadow-sm">
<div class="card-header d-flex justify-content-between align-items-center bg-light">
<h5 class="mb-0 text-primary">Order Summary</h5>
<h5 class="mb-0 text-primary">{{ _("Order Summary")}}</h5>
<span class="status-badge
{% if saleorder.status == 'approved' %}bg-success text-white
{% elif saleorder.status == 'cancelled' %}bg-danger text-white
@ -117,35 +117,35 @@
<div class="row">
<div class="col-md-6">
<div class="mb-3">
<label class="form-label text-muted small mb-1">Order Date</label>
<label class="form-label text-muted small mb-1">{{ _("Order Date")}}</label>
<p class="mb-0 fw-bold">{{ saleorder.order_date|date }}</p>
</div>
<div class="mb-3">
<label class="form-label text-muted small mb-1">Customer</label>
<label class="form-label text-muted small mb-1">{{ _("Customer") }}</label>
<p class="mb-0 fw-bold">{{ saleorder.customer.full_name|capfirst }}</p>
</div>
<div class="mb-3">
<label class="form-label text-muted small mb-1">Payment Method</label>
<label class="form-label text-muted small mb-1">{{ _("Payment Method")}}</label>
<p class="mb-0 fw-bold">{{ saleorder.get_payment_method_display }}</p>
</div>
<div class="mb-3">
<label class="form-label text-muted small mb-1">Created By</label>
<label class="form-label text-muted small mb-1">{{ _("Created By")}}</label>
<p class="mb-0 fw-bold">{{ saleorder.created_by }}</p>
</div>
</div>
<div class="col-md-6">
<div class="mb-3">
<label class="form-label text-muted small mb-1">Expected Delivery</label>
<label class="form-label text-muted small mb-1">{{ _("Expected Delivery")}}</label>
<p class="mb-0 fw-bold">
{% if saleorder.expected_delivery_date %}
{{ saleorder.expected_delivery_date|date }}
{% else %}
<span class="text-warning">Not scheduled</span>
<span class="text-warning">{{ _("Not scheduled")}}</span>
{% endif %}
</p>
</div>
<div class="mb-3">
<label class="form-label text-muted small mb-1">Last Updated</label>
<label class="form-label text-muted small mb-1">{{ _("Last Updated")}}</label>
<p class="mb-0 fw-bold">
{{ saleorder.updated_at|naturaltime|capfirst }} by
{{ saleorder.last_modified_by }}
@ -153,7 +153,7 @@
</div>
{% if saleorder.status == 'cancelled' %}
<div class="mb-3">
<label class="form-label text-muted small mb-1">Cancellation Reason</label>
<label class="form-label text-muted small mb-1">{{ _("Cancellation Reason")}}</label>
<p class="mb-0 fw-bold text-danger">{{ saleorder.cancellation_reason|default:"Not specified" }}</p>
</div>
{% endif %}
@ -161,7 +161,7 @@
</div>
{% if saleorder.comments %}
<div class="mt-3">
<label class="form-label text-muted small mb-1">Order Comments</label>
<label class="form-label text-muted small mb-1">{{ _("Order Comments")}}</label>
<blockquote class="blockquote mb-0">
<p class="mb-0">{{ saleorder.comments }}</p>
</blockquote>
@ -173,7 +173,7 @@
<!-- Vehicle Details Card -->
<div class="card mb-4 shadow-sm">
<div class="card-header">
<h5 class="mb-0">Vehicle Details</h5>
<h5 class="mb-0">{{ _("Vehicle Details")}}</h5>
</div>
<div class="card-body">
<div class="row">
@ -186,24 +186,24 @@
<div class="col-md-8">
<div class="row">
<div class="col-md-6 mb-3">
<label class="form-label text-muted small mb-1">Make</label>
<label class="form-label text-muted small mb-1">{{ _("Make") }}</label>
<p class="mb-0">{{ car.make }}</p>
</div>
<div class="col-md-6 mb-3">
<label class="form-label text-muted small mb-1">Model</label>
<label class="form-label text-muted small mb-1">{{ _("Model") }}</label>
<p class="mb-0">{{ car.model }}</p>
</div>
<div class="col-md-6 mb-3">
<label class="form-label text-muted small mb-1">Year</label>
<label class="form-label text-muted small mb-1">{{ _("Year") }}</label>
<p class="mb-0">{{ car.year }}</p>
</div>
<div class="col-md-6 mb-3">
<label class="form-label text-muted small mb-1">VIN</label>
<label class="form-label text-muted small mb-1">{{ _("VIN") }}</label>
<p class="mb-0">{{ car.vin }}</p>
</div>
<div class="col-md-6 mb-3">
<label class="form-label text-muted small mb-1">Mileage</label>
<p class="mb-0">{{ car.mileage|intcomma }} km</p>
<label class="form-label text-muted small mb-1">{{ _("Mileage") }}</label>
<p class="mb-0">{{ car.mileage|intcomma }} {{ _("km") }}</p>
</div>
</div>
</div>
@ -211,7 +211,7 @@
{% endfor %}
{% else %}
<div class="col-12 text-center py-4">
<p class="text-muted">No vehicle assigned to this order</p>
<p class="text-muted">{{ _("No vehicle assigned to this order")}}</p>
</div>
{% endif %}
</div>
@ -221,35 +221,35 @@
<!-- Financial Details Card -->
<div class="card mb-4 shadow-sm">
<div class="card-header">
<h5 class="mb-0">Financial Details</h5>
<h5 class="mb-0">{{ _("Financial Details")}}</h5>
</div>
<div class="card-body">
<div class="row">
<div class="col-md-6">
<div class="mb-3">
<label class="form-label text-muted small mb-1">Agreed Price</label>
<label class="form-label text-muted small mb-1">{{ _("Agreed Price")}}</label>
<p class="mb-0 fw-bold">SAR {{ saleorder.agreed_price|intcomma }}</p>
</div>
<div class="mb-3">
<label class="form-label text-muted small mb-1">Down Payment</label>
<label class="form-label text-muted small mb-1">{{ _("Down Payment")}}</label>
<p class="mb-0">SAR {{ saleorder.down_payment_amount|intcomma }}</p>
</div>
<div class="mb-3">
<label class="form-label text-muted small mb-1">Trade-In Value</label>
<label class="form-label text-muted small mb-1">{{ _("Trade-In Value")}}</label>
<p class="mb-0">SAR {{ saleorder.trade_in_value|intcomma }}</p>
</div>
</div>
<div class="col-md-6">
<div class="mb-3">
<label class="form-label text-muted small mb-1">Loan Amount</label>
<label class="form-label text-muted small mb-1">{{ _("Loan Amount")}}</label>
<p class="mb-0">SAR {{ saleorder.loan_amount|intcomma }}</p>
</div>
<div class="mb-3">
<label class="form-label text-muted small mb-1">Total Paid</label>
<label class="form-label text-muted small mb-1">{{ _("Total Paid")}}</label>
<p class="mb-0">SAR {{ saleorder.total_paid_amount|intcomma }}</p>
</div>
<div class="mb-3">
<label class="form-label text-muted small mb-1">Remaining Balance</label>
<label class="form-label text-muted small mb-1">{{ _("Remaining Balance")}}</label>
<p class="mb-0 fw-bold {% if saleorder.remaining_balance > 0 %}text-danger{% else %}text-success{% endif %}">
SAR {{ saleorder.remaining_balance|intcomma }}
</p>
@ -265,8 +265,8 @@
aria-valuemax="100"></div>
</div>
<div class="d-flex justify-content-between mt-1 small text-muted">
<span>{{ payment_percentage }}% Paid</span>
<span>SAR {{ saleorder.agreed_price|intcomma }} Total</span>
<span>{{ payment_percentage }}% {{ _("Paid") }}</span>
<span>SAR {{ saleorder.agreed_price|intcomma }} {{ _("Total") }}</span>
</div>
</div>
</div>
@ -274,15 +274,15 @@
<!-- Documents Card -->
<div class="card mb-4 shadow-sm">
<div class="card-header d-flex justify-content-between align-items-center">
<h5 class="mb-0">Documents</h5>
<h5 class="mb-0">{{ _("Documents") }}</h5>
<button class="btn btn-sm btn-primary">
<i class="fas fa-plus me-1"></i> Add Document
<i class="fas fa-plus me-1"></i> {{ _("Add Document")}}
</button>
</div>
<div class="card-body">
<div class="file-upload mb-3">
<i class="fas fa-cloud-upload-alt fa-3x text-muted mb-2"></i>
<p class="mb-1">Drag & drop files here or click to browse</p>
<p class="mb-1">{{ _("Drag & drop files here or click to browse")}}</p>
<p class="small text-muted mb-0">PDF, JPG, PNG up to 10MB</p>
</div>
<div class="row">
@ -290,7 +290,7 @@
<div class="col-md-3 mb-3">
<div class="card">
{% if document.file.url|lower|slice:'-3:' == 'pdf' %}
<img src="{% static 'images/pdf-icon.png' %}" class="document-thumbnail card-img-top" alt="PDF Document">
<img src="{% static 'images/icons/file.png' %}" class="document-thumbnail card-img-top" alt="PDF Document">
{% else %}
<img src="{{ document.file.url }}" class="document-thumbnail card-img-top" alt="Document">
{% endif %}
@ -302,7 +302,7 @@
</div>
{% empty %}
<div class="col-12 text-center py-3">
<p class="text-muted">No documents uploaded yet</p>
<p class="text-muted">{{ _("No documents uploaded yet")}}</p>
</div>
{% endfor %}
</div>
@ -312,7 +312,7 @@
<!-- Comments Card -->
<div class="card shadow-sm">
<div class="card-header">
<h5 class="mb-0">Comments & Notes</h5>
<h5 class="mb-0">{{ _("Comments & Notes")}}</h5>
</div>
<div class="card-body">
{% comment %} <form method="post" action="{% url 'add_sale_order_comment' saleorder.pk %}"> {% endcomment %}
@ -321,7 +321,7 @@
<div class="mb-3">
<textarea class="form-control" name="comment" rows="3" placeholder="Add a comment or note..." required></textarea>
<div class="d-flex justify-content-end mt-2">
<button type="submit" class="btn btn-primary btn-sm">Post Comment</button>
<button type="submit" class="btn btn-primary btn-sm">{{ _("Post Comment")}}</button>
</div>
</div>
</form>
@ -340,7 +340,7 @@
</div>
{% empty %}
<div class="text-center py-3">
<p class="text-muted">No comments yet</p>
<p class="text-muted">{{ _("No comments yet")}}</p>
</div>
{% endfor %}
</div>
@ -353,7 +353,7 @@
<!-- Actions Card -->
<div class="card mb-4 shadow-sm">
<div class="card-header">
<h5 class="mb-0">Order Actions</h5>
<h5 class="mb-0">{{ _("Order Actions")}}</h5>
</div>
<div class="card-body">
<div class="d-grid gap-2">
@ -365,25 +365,25 @@
{% comment %} <a href="{% url 'edit_sale_order' saleorder.pk %}" class="btn btn-primary"> {% endcomment %}
<a href="" class="btn btn-primary">
<i class="fas fa-edit me-2"></i> Edit Order
<i class="fas fa-edit me-2"></i> {{ _("Edit Order")}}
</a>
{% if not saleorder.invoice %}
{% comment %} <a href="{% url 'create_invoice_from_order' saleorder.pk %}" class="btn btn-info"> {% endcomment %}
<a href="" class="btn btn-info">
<i class="fas fa-file-invoice-dollar me-2"></i> Create Invoice
<i class="fas fa-file-invoice-dollar me-2"></i> {{ _("Create Invoice")}}
</a>
{% endif %}
{% if saleorder.status == 'approved' and not saleorder.actual_delivery_date %}
<button class="btn btn-warning" data-bs-toggle="modal" data-bs-target="#deliveryModal">
<i class="fas fa-truck me-2"></i> Schedule Delivery
<i class="fas fa-truck me-2"></i> {{ _("Schedule Delivery")}}
</button>
{% endif %}
{% if saleorder.status != 'cancelled' %}
<button class="btn btn-danger" data-bs-toggle="modal" data-bs-target="#cancelModal">
<i class="fas fa-times-circle me-2"></i> Cancel Order
<i class="fas fa-times-circle me-2"></i> {{ _("Cancel Order")}}
</button>
{% endif %}
</div>
@ -393,7 +393,7 @@
<!-- Status Timeline Card -->
<div class="card mb-4 shadow-sm">
<div class="card-header">
<h5 class="mb-0">Order Status Timeline</h5>
<h5 class="mb-0">{{ _("Order Status Timeline")}}</h5>
</div>
<div class="card-body">
<div class="timeline">
@ -406,12 +406,12 @@
<p class="small mb-0">
{% if log.note %}{{ log.note }}{% endif %}
<br>
<small class="text-muted">Changed by: {{ log.changed_by.get_full_name|default:log.changed_by.username }}</small>
<small class="text-muted">{{ _("Changed by")}}: {{ log.changed_by.get_full_name|default:log.changed_by.username }}</small>
</p>
</div>
{% empty %}
<div class="text-center py-3">
<p class="text-muted">No status history available</p>
<p class="text-muted">{{ _("No status history available")}}</p>
</div>
{% endfor %}
</div>
@ -421,11 +421,11 @@
<!-- Related Items Card -->
<div class="card mb-4 shadow-sm">
<div class="card-header">
<h5 class="mb-0">Related Items</h5>
<h5 class="mb-0">{{ _("Related Items")}}</h5>
</div>
<div class="card-body">
<div class="mb-3">
<label class="form-label text-muted small mb-1">Estimate</label>
<label class="form-label text-muted small mb-1">{{ _("Quotation") }}</label>
<a href="{% url 'estimate_detail' saleorder.estimate.pk %}" target="_blank" rel="noopener noreferrer">
<p class="mb-0">
<span class="badge bg-success ms-1">{{ saleorder.estimate.estimate_number }} <i class="fas fa-external-link-alt ms-2" style="font-size: 0.8rem;"></i></span>
@ -433,7 +433,7 @@
</a>
</div>
<div class="mb-3">
<label class="form-label text-muted small mb-1">Invoice</label>
<label class="form-label text-muted small mb-1">{{ _("Invoice") }}</label>
<p class="mb-0">
{% if saleorder.invoice %}
<a href="{% url 'invoice_detail' saleorder.invoice.pk %}" target="_blank" rel="noopener noreferrer">
@ -442,12 +442,12 @@
</p>
</a>
{% else %}
<span class="text-muted">Not created yet</span>
<span class="text-muted">{{ _("Not created yet")}}</span>
{% endif %}
</p>
</div>
<div class="mb-3">
<label class="form-label text-muted small mb-1">Opportunity</label>
<label class="form-label text-muted small mb-1">{{ _("Opportunity") }}</label>
<a href="{% url 'opportunity_detail' saleorder.opportunity.slug %}" target="_blank" rel="noopener noreferrer">
<p class="mb-0">
<span class="badge bg-success ms-1">{{ saleorder.opportunity }} <i class="fas fa-external-link-alt ms-2" style="font-size: 0.8rem;"></i></span>
@ -455,7 +455,7 @@
</a>
</div>
<div class="mb-3">
<label class="form-label text-muted small mb-1">Customer</label>
<label class="form-label text-muted small mb-1">{{ _("Customer") }}</label>
<a href="{% url 'customer_detail' saleorder.customer.slug %}" target="_blank" rel="noopener noreferrer">
<p class="mb-0">
<span class="badge bg-success ms-1">{{ saleorder.customer.full_name|capfirst }} <i class="fas fa-external-link-alt ms-2" style="font-size: 0.8rem;"></i></span>
@ -469,7 +469,7 @@
{% if saleorder.trade_in_vehicle %}
<div class="card shadow-sm">
<div class="card-header">
<h5 class="mb-0">Trade-In Vehicle</h5>
<h5 class="mb-0">{{ _("Trade-In Vehicle")}}</h5>
</div>
<div class="card-body">
<div class="text-center mb-3">
@ -480,14 +480,14 @@
{{ saleorder.trade_in_vehicle.make }}
{{ saleorder.trade_in_vehicle.model }}
</h6>
<p class="small text-muted mb-2">VIN: {{ saleorder.trade_in_vehicle.vin }}</p>
<p class="small text-muted mb-2">{{ _("VIN") }}: {{ saleorder.trade_in_vehicle.vin }}</p>
<p class="fw-bold">SAR {{ saleorder.trade_in_value|intcomma }}</p>
</div>
<div class="row">
<div class="col-6">
<p class="small mb-1">
<i class="fas fa-tachometer-alt me-1 text-muted"></i>
{{ saleorder.trade_in_vehicle.mileage|intcomma }} km
{{ saleorder.trade_in_vehicle.mileage|intcomma }} {{ _("km") }}
</p>
</div>
<div class="col-6">
@ -522,7 +522,7 @@
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="cancelModalLabel">Cancel Order</h5>
<h5 class="modal-title" id="cancelModalLabel">{{ _("Cancel Order")}}</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
{% comment %} <form method="post" action="{% url 'cancel_sale_order' saleorder.pk %}"> {% endcomment %}
@ -530,13 +530,13 @@
{% csrf_token %}
<div class="modal-body">
<div class="mb-3">
<label for="cancellationReason" class="form-label">Reason for Cancellation</label>
<label for="cancellationReason" class="form-label">{{ _("Reason for Cancellation")}}</label>
<textarea class="form-control" id="cancellationReason" name="cancellation_reason" rows="3" required></textarea>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
<button type="submit" class="btn btn-danger">Confirm Cancellation</button>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">{{ _("Close") }}</button>
<button type="submit" class="btn btn-danger">{{ _("Confirm Cancellation")}}</button>
</div>
</form>
</div>
@ -548,7 +548,7 @@
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="deliveryModalLabel">Schedule Delivery</h5>
<h5 class="modal-title" id="deliveryModalLabel">{{ _("Schedule Delivery")}}</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
{% comment %} <form method="post" action="{% url 'schedule_delivery' saleorder.pk %}"> {% endcomment %}
@ -556,17 +556,17 @@
{% csrf_token %}
<div class="modal-body">
<div class="mb-3">
<label for="deliveryDate" class="form-label">Delivery Date</label>
<label for="deliveryDate" class="form-label">{{ _("Delivery Date")}}</label>
<input type="date" class="form-control" id="deliveryDate" name="delivery_date" required>
</div>
<div class="mb-3">
<label for="deliveryNotes" class="form-label">Notes</label>
<label for="deliveryNotes" class="form-label">{{ _("Notes") }}</label>
<textarea class="form-control" id="deliveryNotes" name="notes" rows="3"></textarea>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
<button type="submit" class="btn btn-primary">Schedule Delivery</button>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">{{ _("Close") }}</button>
<button type="submit" class="btn btn-primary">{{ _("Schedule Delivery")}}</button>
</div>
</form>
</div>