make the forms consistant with the phoenix bootstrap

This commit is contained in:
Faheedkhan 2025-08-27 11:46:05 +03:00
parent 696daf92bd
commit 6eb77e3158
44 changed files with 1479 additions and 1680 deletions

View File

@ -2417,9 +2417,9 @@ def force_regenerate_car_image(car):
class CarImageAPIClient: class CarImageAPIClient:
"""Simple client to handle authenticated requests to the car image API""" """Simple client to handle authenticated requests to the car image API"""
BASE_URL = "http://127.0.0.1:8888" BASE_URL = "http://10.10.1.111:8888"
USERNAME = "ismail.mosa.ibrahim@gmail.com" USERNAME = "faheed"
PASSWORD = "Supremk4!" PASSWORD = "Tenhal@123"
def __init__(self): def __init__(self):
self.session = None self.session = None

View File

@ -6328,6 +6328,7 @@ def lead_create(request, dealer_slug):
qs = form.fields["id_car_make"].queryset.filter( qs = form.fields["id_car_make"].queryset.filter(
is_sa_import=True, pk__in=dealer_make_list is_sa_import=True, pk__in=dealer_make_list
) )
# print(qs)
form.fields["staff"].queryset = ( form.fields["staff"].queryset = (
form.fields["staff"] form.fields["staff"]
.queryset.select_related("user") .queryset.select_related("user")
@ -6346,10 +6347,12 @@ def lead_create(request, dealer_slug):
form.fields["staff"].queryset = models.Staff.objects.filter( form.fields["staff"].queryset = models.Staff.objects.filter(
dealer=dealer, pk=request.staff.pk dealer=dealer, pk=request.staff.pk
) )
qs = qs.order_by("name")
form.fields["id_car_make"].queryset = qs form.fields["id_car_make"].queryset = qs
form.fields["id_car_make"].choices = [ form.fields["id_car_make"].choices = [
(obj.id_car_make, obj.get_local_name()) for obj in qs (obj.id_car_make, obj.get_local_name()) for obj in qs
] ]
if first_make := qs.first(): if first_make := qs.first():
form.fields["id_car_model"].queryset = first_make.carmodel_set.all() form.fields["id_car_model"].queryset = first_make.carmodel_set.all()
@ -8435,7 +8438,7 @@ class FiscalYearIncomeStatementViewBase(
""" """
template_name = "ledger/reports/income_statement.html" template_name = "ledger/reports/income_statement.html"
permission_required = ["inventory.view_carfinance"] permission_required = ["django_ledger.view_ledgermodel"]
def get_login_url(self): def get_login_url(self):
return reverse("account_login") return reverse("account_login")
@ -8574,7 +8577,7 @@ class FiscalYearCashFlowStatementViewBase(
""" """
template_name = "ledger/reports/cash_flow_statement.html" template_name = "ledger/reports/cash_flow_statement.html"
permission_required = ["inventory.view_carfinance"] permission_required = ["django_ledger.view_ledgermodel"]
def get_login_url(self): def get_login_url(self):
return reverse("account_login") return reverse("account_login")
@ -8763,7 +8766,7 @@ class FiscalYearEntityModelDashboardView(
:type permission_required: list :type permission_required: list
""" """
permission_required = ["inventory.view_carfinance"] permission_required = ["django_ledger.view_ledgermodel"]
def get_login_url(self): def get_login_url(self):
return reverse("account_login") return reverse("account_login")
@ -11433,6 +11436,10 @@ def create_ticket(request,dealer_slug):
def ticket_list(request,dealer_slug): def ticket_list(request,dealer_slug):
dealer= get_object_or_404(models.Dealer, slug=dealer_slug) dealer= get_object_or_404(models.Dealer, slug=dealer_slug)
tickets = models.Ticket.objects.filter(dealer=dealer).order_by('-created_at') tickets = models.Ticket.objects.filter(dealer=dealer).order_by('-created_at')
query=request.GET.get('q')
if query:
tickets=tickets.filter(Q(id__icontains=query)| Q(subject__icontains=query))
return render(request, 'support/ticket_list.html', {'tickets': tickets}) return render(request, 'support/ticket_list.html', {'tickets': tickets})
@login_required @login_required

Binary file not shown.

View File

@ -20,20 +20,7 @@ msgstr ""
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" "&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
#: api/models.py:6 inventory/models.py:536 inventory/tables.py:51
#: templates/inventory/car_detail.html:87 templates/inventory/car_form.html:45
#: templates/inventory/car_form.html:51
#: templates/inventory/car_form_qabl alfalsafa.html:30
#: templates/inventory/car_inventory.html:65
#: templates/inventory/car_list.html:72 templates/inventory/car_list.html:78
#: templates/inventory/car_list_view.html:172
#: templates/inventory/cars_list_api.html:32
#: templates/inventory/transfer_details.html:89
#: templates/sales/estimates/estimate_detail.html:234
#: templates/sales/estimates/sale_order_form.html:123
#: templates/sales/estimates/sale_or ils.html:503
msgid "VIN"
msgstr "رقم الهيكل"
#: api/views.py:146 inventory/views.py:726 #: api/views.py:146 inventory/views.py:726
msgid "Invalid VIN number provided" msgid "Invalid VIN number provided"
@ -560,29 +547,11 @@ msgstr "المعرض"
#: templates/bill/tags/bill_table.html:12 #: templates/bill/tags/bill_table.html:12
#: templates/inventory/car_detail.html:128 #: templates/inventory/car_detail.html:128
#: templates/inventory/car_form.html:155 #: templates/inventory/car_form.html:155
#: templates/inventory/car_form_qabl alfalsafa.html:136
#: templates/ledger/bills/bill_list.html:50
#: venv/lib/python3.11/site-packages/django_ledger/models/bill.py:364
#: venv/lib/python3.11/site-packages/django_ledger/models/vendor.py:191
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/bills/tags/bill_table.html:12
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/vendor/tags/vendor_table.html:10
msgid "Vendor"
msgstr "المورد"
#: inventory/forms.py:1952 inventory/models.py:563 inventory/tables.py:54 #: inventory/forms.py:1952 inventory/models.py:563 inventory/tables.py:54
#: templates/inventory/car_form.html:77 #: templates/inventory/car_form.html:77
#: templates/inventory/car_form_qabl alfalsafa.html:55
#: templates/inventory/car_inventory.html:67
#: templates/inventory/car_list_view.html:124
#: templates/inventory/car_list_view.html:175
#: templates/ledger/reports/components/period_navigator.html:21
#: templates/sales/estimates/estimate_detail.html:193
#: 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:198
msgid "Year"
msgstr "السنة"
#: inventory/forms.py:2050 inventory/tables.py:68 #: inventory/forms.py:2050 inventory/tables.py:68
#: templates/inventory/car_inventory.html:70 #: templates/inventory/car_inventory.html:70
@ -594,12 +563,7 @@ msgstr "اللون الخارجي"
msgid "Interior Color" msgid "Interior Color"
msgstr "اللون الداخلي" msgstr "اللون الداخلي"
#: inventory/forms.py:1969 inventory/models.py:594
#: templates/inventory/car_detail.html:123
#: templates/inventory/car_form.html:188
#: templates/inventory/car_form_qabl alfalsafa.html:168
msgid "Receiving Date"
msgstr "تاريخ الاستلام"
#: inventory/forms.py:2069 #: inventory/forms.py:2069
msgid "File is not a CSV file" msgid "File is not a CSV file"
@ -698,11 +662,7 @@ msgstr "دراجات الثلج"
msgid "logo" msgid "logo"
msgstr "الشعار" msgstr "الشعار"
#: inventory/models.py:301 inventory/models.py:570 inventory/tables.py:55
#: templates/inventory/car_form.html:111
#: templates/inventory/car_form_qabl alfalsafa.html:100
msgid "Series"
msgstr "السلسلة"
#: inventory/models.py:391 #: inventory/models.py:391
msgid "Equipment" msgid "Equipment"
@ -884,30 +844,7 @@ msgstr "الخدمات الإضافية"
msgid "Item Model" msgid "Item Model"
msgstr "نموذج العنصر" msgstr "نموذج العنصر"
#: inventory/models.py:590 inventory/tables.py:50
#: templates/inventory/car_detail.html:115
#: templates/inventory/car_form.html:166
#: templates/inventory/car_form_qabl alfalsafa.html:147
#: templates/inventory/car_list.html:185
msgid "Stock Type"
msgstr "نوع المخزون"
#: inventory/models.py:592 inventory/models.py:742
#: templates/inventory/car_detail.html:133
#: templates/inventory/car_form.html:199
#: templates/inventory/car_form_qabl alfalsafa.html:181
#: templates/inventory/car_list.html:211
msgid "Remarks"
msgstr "ملاحظات"
#: inventory/models.py:593 inventory/tables.py:57
#: templates/inventory/car_detail.html:119
#: 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:206
msgid "Mileage"
msgstr "عدد الكيلومترات"
#: inventory/models.py:596 #: inventory/models.py:596
msgid "Hash" msgid "Hash"
@ -1592,12 +1529,7 @@ msgstr "الراتب"
msgid "Priority" msgid "Priority"
msgstr "الأولوية" msgstr "الأولوية"
#: inventory/models.py:1939
#: templates/crm/opportunities/opportunity_detail.html:179
#: templates/crm/opportunities/opportunity_list copy.html:78
#: templates/crm/opportunities/partials/opportunity_grid.html:81
msgid "Expected Revenue"
msgstr "الإيرادات المتوقعة"
#: inventory/models.py:2192 #: inventory/models.py:2192
msgid "Unique slug for the opportunity." msgid "Unique slug for the opportunity."
@ -1609,13 +1541,7 @@ msgstr "المُعرّف الفريد للفرصة (slug)."
msgid "Opportunity" msgid "Opportunity"
msgstr "فرصة" msgstr "فرصة"
#: inventory/models.py:2011 templates/crm/leads/lead_detail.html:170
#: templates/crm/leads/lead_detail.html:254
#: templates/crm/opportunities/opportunity_list copy.html:8
#: templates/crm/opportunities/opportunity_list.html:4
#: templates/crm/opportunities/opportunity_list.html:8
msgid "Opportunities"
msgstr "الفرص"
#: inventory/models.py:2276 inventory/models.py:2284 #: inventory/models.py:2276 inventory/models.py:2284
#: templates/account/snippets/already_logged_in.html:7 #: templates/account/snippets/already_logged_in.html:7
@ -2059,10 +1985,6 @@ msgstr "مصروفات الفائدة"
msgid "success" msgid "success"
msgstr "ناجحة" msgstr "ناجحة"
#: inventory/utils.py:80 templates/inventory/car_form.html:397
#: templates/inventory/car_form_qabl alfalsafa.html:381
msgid "error"
msgstr "خطأ"
#: inventory/utils.py:96 templates/account/login.html:68 #: inventory/utils.py:96 templates/account/login.html:68
#: templates/account/password_change.html:38 #: templates/account/password_change.html:38
@ -3246,17 +3168,7 @@ msgstr "يرجى إدخال رقم هاتف صالح"
msgid "Password does not match" msgid "Password does not match"
msgstr "كلمة المرور غير متطابقة" msgstr "كلمة المرور غير متطابقة"
#: templates/account/signup-wizard.html:252
#: templates/inventory/car_form.html:628
#: templates/inventory/car_form_qabl alfalsafa.html:608
msgid "Please Wait"
msgstr "الرجاء الإنتظار"
#: templates/account/signup-wizard.html:253
#: templates/inventory/car_form.html:629
#: templates/inventory/car_form_qabl alfalsafa.html:609
msgid "Loading"
msgstr "تحميل"
#: templates/account/signup.html:28 #: templates/account/signup.html:28
msgid "Sign up using a passkey" msgid "Sign up using a passkey"
@ -3666,65 +3578,6 @@ msgstr "تاريخ الانتهاء"
msgid "Confirm Deletion" msgid "Confirm Deletion"
msgstr "تأكيد الحذف" msgstr "تأكيد الحذف"
#: templates/administration/manage_service.html:12
#: templates/administration/service_list.html:13
#: templates/administration/staff_index.html:79
#: templates/administration/user_profile.html:18
#: templates/bill/tags/bill_item_formset.html:41
#: templates/crm/leads/lead_list.html:89 templates/crm/leads/lead_list.html:226
#: templates/crm/opportunities/opportunity_list copy.html:28
#: templates/customers/view_customer.html:23
#: templates/groups/group_detail.html:109
#: templates/ledger/bank_accounts/bank_account_detail.html:63
#: templates/ledger/coa_accounts/account_detail.html:144
#: templates/ledger/coa_accounts/partials/account_table.html:45
#: templates/ledger/journal_entry/journal_entry_delete.html:19
#: templates/ledger/journal_entry/journal_entry_list.html:102
#: templates/ledger/ledger/ledger_delete.html:19
#: templates/ledger/ledger/ledger_list.html:110
#: templates/modal/delete_modal.html:12 templates/modal/delete_modal.html:26
#: templates/modal/event_details_modal.html:33
#: templates/organizations/organization_detail.html:19
#: templates/organizations/organization_list.html:123
#: templates/plans/billing_info_create_or_update.html:14
#: templates/purchase_orders/includes/card_po.html:205
#: templates/purchase_orders/includes/po_item_formset.html:26
#: templates/purchase_orders/po_delete.html:23
#: templates/representatives/representative_detail.html:16
#: templates/sales/estimates/estimate_detail.html:29
#: templates/users/user_detail.html:60 templates/vendors/vendors_list.html:131
#: templates/vendors/view_vendor.html:39
#: venv/lib/python3.11/site-packages/appointment/templates/administration/staff_index.html:325
#: venv/lib/python3.11/site-packages/appointment/templates/administration/user_profile.html:33
#: venv/lib/python3.11/site-packages/appointment/templates/modal/event_details_modal.html:31
#: venv/lib/python3.11/site-packages/django/forms/formsets.py:499
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/bills/bill_delete.html:28
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/bills/tags/bill_item_formset.html:25
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/closing_entry/closing_entry_delete.html:19
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/closing_entry/includes/card_closing_entry.html:60
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/closing_entry/tags/closing_entry_table.html:46
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/data_import/import_job_delete.html:18
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/data_import/tags/data_import_job_list_table.html:50
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/entity/entitiy_list.html:22
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/entity/entity_delete.html:23
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/estimate/tags/ce_item_formset.html:25
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/invoice/invoice_delete.html:24
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/invoice/tags/invoice_item_formset.html:23
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/journal_entry/je_delete.html:18
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/journal_entry/tags/je_table.html:88
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/ledger/ledger_delete.html:19
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/ledger/tags/ledgers_table.html:131
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/product/product_delete.html:20
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/product/tags/product_table.html:44
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/purchase_order/includes/card_po.html:103
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/purchase_order/includes/po_item_formset.html:25
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/purchase_order/po_delete.html:24
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/service/service_delete.html:20
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/service/tags/services_table.html:44
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/uom/tags/uom_table.html:43
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/uom/uom_delete.html:28
msgid "Delete"
msgstr "حذف"
#: templates/administration/manage_service.html:29 #: templates/administration/manage_service.html:29
#: templates/administration/service_list.html:23 #: templates/administration/service_list.html:23
@ -3924,12 +3777,7 @@ msgstr "أعضاء الفريق"
msgid "Add" msgid "Add"
msgstr "إضافة" msgstr "إضافة"
#: templates/administration/staff_list.html:36
#: templates/crm/opportunities/opportunity_list copy.html:71
#: templates/inventory/car_form.html:246
#: templates/inventory/inventory_stats.html:63
msgid "Details"
msgstr "التفاصيل"
#: templates/administration/staff_list.html:37 #: templates/administration/staff_list.html:37
msgid "View Profile" msgid "View Profile"
@ -4391,23 +4239,6 @@ msgstr "المبلغ المدفوع"
msgid "Progress" msgid "Progress"
msgstr "التقدم" msgstr "التقدم"
#: templates/bill/includes/card_bill.html:64
#: templates/crm/opportunities/opportunity_list copy.html:55
#: templates/inventory/car_list_view.html:258
#: templates/ledger/bills/bill_list.html:84
#: templates/ledger/coa_accounts/partials/account_table.html:42
#: templates/ledger/journal_entry/includes/card_invoice.html:33
#: templates/ledger/journal_entry/journal_entry_list.html:99
#: templates/sales/invoices/invoice_list.html:61
#: templates/sales/sales_list.html:208
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/bills/includes/card_bill.html:44
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/entity/entitiy_list.html:20
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/invoice/includes/card_invoice.html:38
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/journal_entry/tags/je_table.html:85
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/purchase_order/includes/card_po.html:22
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/unit/unit_list.html:32
msgid "View"
msgstr "عرض"
#: templates/bill/includes/card_bill.html:58 #: templates/bill/includes/card_bill.html:58
#: templates/bill/includes/card_bill.html:207 #: templates/bill/includes/card_bill.html:207
@ -4651,17 +4482,6 @@ msgstr "تحديث الإجراءات"
msgid "created by" msgid "created by"
msgstr "تم الإنشاء بواسطة" msgstr "تم الإنشاء بواسطة"
#: templates/crm/leads/lead_detail.html:255
#: templates/crm/opportunities/opportunity_list copy.html:11
#: templates/crm/opportunities/opportunity_list.html:83
msgid "Add Opportunity"
msgstr "إضافة فرصة"
#: templates/crm/leads/lead_detail.html:264
#: templates/crm/opportunities/opportunity_list copy.html:110
#: templates/crm/opportunities/partials/opportunity_grid.html:104
msgid "Probability"
msgstr "الاحتمالية"
#: templates/crm/leads/lead_detail.html:452 #: templates/crm/leads/lead_detail.html:452
#: templates/crm/opportunities/opportunity_detail.html:624 #: templates/crm/opportunities/opportunity_detail.html:624
@ -4709,28 +4529,6 @@ msgstr "مُعين إلى"
msgid "Are you sure you want to delete this lead?" msgid "Are you sure you want to delete this lead?"
msgstr "هل أنت متأكد أنك تريد حذف هذا العميل المحتمل؟" msgstr "هل أنت متأكد أنك تريد حذف هذا العميل المحتمل؟"
#: templates/crm/leads/lead_list.html:97
#: templates/crm/opportunities/opportunity_list copy.html:158
#: templates/groups/group_detail.html:32
#: templates/inventory/car_detail.html:543
#: templates/inventory/transfer_details.html:62
#: templates/ledger/bank_accounts/bank_account_detail.html:31
#: templates/ledger/bills/bill_detail.html:24
#: templates/ledger/bills/bill_detail.html:49
#: templates/ledger/bills/bill_detail.html:121
#: templates/ledger/coa_accounts/account_detail.html:22
#: templates/ledger/coa_accounts/account_list.html:123
#: templates/ledger/journal_entry/journal_entry_list.html:25
#: templates/organizations/organization_list.html:96
#: templates/sales/estimates/estimate_detail.html:37
#: templates/sales/estimates/estimate_detail.html:64
#: templates/sales/invoices/invoice_detail.html:31
#: templates/sales/invoices/invoice_detail.html:56
#: templates/sales/invoices/invoice_detail.html:142
#: venv/lib/python3.11/site-packages/appointment/models.py:530
#: venv/lib/python3.11/site-packages/django/forms/widgets.py:867
msgid "Yes"
msgstr "نعم"
#: templates/crm/leads/lead_list.html:159 #: templates/crm/leads/lead_list.html:159
msgid "In Progress" msgid "In Progress"
@ -4740,23 +4538,7 @@ msgstr "قيد التنفيذ"
msgid "View Schedules" msgid "View Schedules"
msgstr "عرض الجداول" msgstr "عرض الجداول"
#: templates/crm/leads/lead_list.html:214
#: templates/crm/opportunities/opportunity_list copy.html:27
#: templates/dealers/dealer_detail.html:22
#: templates/groups/group_detail.html:103
#: templates/inventory/car_detail.html:218
#: templates/inventory/car_detail.html:276
#: templates/inventory/car_detail.html:326
#: templates/ledger/bank_accounts/bank_account_detail.html:57
#: templates/ledger/coa_accounts/account_detail.html:140
#: templates/modal/event_details_modal.html:41
#: templates/organizations/organization_detail.html:26
#: templates/organizations/organization_list.html:161
#: templates/representatives/representative_detail.html:22
#: templates/users/user_detail.html:81 templates/vendors/vendors_list.html:132
#: templates/vendors/view_vendor.html:34
msgid "Edit"
msgstr "تحديث"
#: templates/crm/leads/lead_list.html:253 #: templates/crm/leads/lead_list.html:253
msgid "Convert to Opportunity" msgid "Convert to Opportunity"
@ -4799,28 +4581,7 @@ msgstr "اختر الإجراء التالي"
msgid "No Action" msgid "No Action"
msgstr "لا يوجد إجراء" msgstr "لا يوجد إجراء"
#: templates/crm/leads/partials/update_action.html:47
#: templates/inventory/car_form.html:250 templates/inventory/car_form.html:269
#: templates/inventory/car_form.html:287 templates/inventory/car_form.html:304
#: templates/inventory/car_form_qabl alfalsafa.html:229
#: templates/inventory/car_form_qabl alfalsafa.html:235
#: templates/inventory/car_form_qabl alfalsafa.html:252
#: templates/inventory/car_form_qabl alfalsafa.html:270
#: templates/inventory/car_form_qabl alfalsafa.html:287
#: templates/modal/confirm_modal.html:11 templates/modal/confirm_modal.html:20
#: templates/modal/error_modal.html:17
#: 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:583
#: templates/sales/orders/order_details.html:587
#: templates/sales/orders/order_details.html:621
#: templates/sales/orders/order_details.html:625
#: 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
msgid "Close"
msgstr "إغلاق"
#: templates/crm/notifications.html:17 #: templates/crm/notifications.html:17
#: templates/crm/notifications_history.html:14 #: templates/crm/notifications_history.html:14
@ -4933,44 +4694,7 @@ msgstr "تحديث المرحلة مع تقدم الصفقة"
msgid "Set realistic closing dates" msgid "Set realistic closing dates"
msgstr "تحديد تواريخ إغلاق واقعية" msgstr "تحديد تواريخ إغلاق واقعية"
#: templates/crm/opportunities/opportunity_list copy.html:89
msgid "Contact"
msgstr "جهة الاتصال"
#: templates/crm/opportunities/opportunity_list copy.html:100
#: templates/crm/opportunities/partials/opportunity_grid.html:93
#: venv/lib/python3.11/site-packages/django_ledger/models/closing_entry.py:75
msgid "Closing Date"
msgstr "تاريخ الإغلاق"
#: templates/crm/opportunities/opportunity_list copy.html:145
msgid "Delete Opportunity"
msgstr "حذف الفرصة"
#: templates/crm/opportunities/opportunity_list copy.html:152
msgid "Are you sure you want to delete this opportunity?"
msgstr "هل أنت متأكد أنك تريد حذف هذه الفرصة؟"
#: templates/crm/opportunities/opportunity_list copy.html:155
#: templates/groups/group_detail.html:27
#: templates/inventory/car_detail.html:577
#: templates/inventory/car_list_view.html:260
#: templates/inventory/transfer_details.html:29
#: templates/inventory/transfer_details.html:60
#: templates/ledger/bank_accounts/bank_account_detail.html:26
#: templates/ledger/bills/bill_detail.html:26
#: templates/ledger/bills/bill_detail.html:59
#: templates/ledger/bills/bill_detail.html:184
#: templates/ledger/coa_accounts/account_detail.html:23
#: templates/ledger/coa_accounts/account_list.html:189
#: templates/ledger/journal_entry/journal_entry_list.html:34
#: templates/organizations/organization_list.html:118
#: templates/sales/estimates/estimate_detail.html:72
#: templates/sales/invoices/invoice_detail.html:36
#: templates/sales/invoices/invoice_detail.html:73
#: templates/sales/invoices/invoice_detail.html:229
msgid "No"
msgstr "لا"
#: templates/crm/opportunities/opportunity_list.html:20 #: templates/crm/opportunities/opportunity_list.html:20
msgid "Search opportunities..." msgid "Search opportunities..."
@ -5811,39 +5535,7 @@ msgstr "هذه السيارة محجوزة حتى "
msgid "year" msgid "year"
msgstr "السنة" msgstr "السنة"
#: templates/inventory/car_detail.html:95 templates/inventory/car_form.html:87
#: templates/inventory/car_form_qabl alfalsafa.html:70
#: templates/inventory/car_list.html:89
msgid "make"
msgstr "الصانع"
#: templates/inventory/car_detail.html:99 templates/inventory/car_form.html:98
#: templates/inventory/car_form_qabl alfalsafa.html:83
#: templates/inventory/car_list.html:107
msgid "model"
msgstr "الموديل"
#: templates/inventory/car_detail.html:108
#: templates/inventory/car_list.html:141
msgid "series"
msgstr "السلسلة"
#: templates/inventory/car_detail.html:107
#: templates/inventory/car_form.html:121
#: templates/inventory/car_form_qabl alfalsafa.html:117
#: templates/inventory/car_list.html:151
msgid "trim"
msgstr "الفئة"
#: templates/inventory/car_detail.html:137
#: templates/inventory/car_detail.html:560
#: templates/inventory/car_form.html:133 templates/inventory/car_form.html:238
#: templates/inventory/car_form_qabl alfalsafa.html:196
#: templates/inventory/car_form_qabl alfalsafa.html:225
#: templates/inventory/car_form_qabl alfalsafa.html:248
#: templates/inventory/car_list.html:49 templates/inventory/car_list.html:235
msgid "specifications"
msgstr "المواصفات"
#: templates/inventory/car_detail.html:211 #: templates/inventory/car_detail.html:211
#: templates/inventory/car_inventory.html:125 #: templates/inventory/car_inventory.html:125
@ -5976,77 +5668,7 @@ msgstr "مسح رقم الهيكل"
msgid "Decode VIN" msgid "Decode VIN"
msgstr "تحليل رقم الهيكل" msgstr "تحليل رقم الهيكل"
#: templates/inventory/car_form.html:96 templates/inventory/car_form.html:109
#: templates/inventory/car_form.html:119 templates/inventory/car_form.html:279
#: templates/inventory/car_form.html:468 templates/inventory/car_form.html:485
#: templates/inventory/car_form.html:486 templates/inventory/car_form.html:508
#: templates/inventory/car_form.html:527
#: templates/inventory/car_form_qabl alfalsafa.html:88
#: templates/inventory/car_form_qabl alfalsafa.html:104
#: templates/inventory/car_form_qabl alfalsafa.html:121
#: templates/inventory/car_form_qabl alfalsafa.html:262
#: templates/inventory/car_form_qabl alfalsafa.html:451
#: templates/inventory/car_form_qabl alfalsafa.html:468
#: templates/inventory/car_form_qabl alfalsafa.html:469
#: templates/inventory/car_form_qabl alfalsafa.html:489
#: templates/inventory/car_form_qabl alfalsafa.html:508
#: templates/plans/plan_table.html:120
msgid "Select"
msgstr "اختيار"
#: templates/inventory/car_form.html:139
#: templates/inventory/car_form_qabl alfalsafa.html:202
#: templates/inventory/car_list.html:26 templates/inventory/car_list.html:229
msgid "options"
msgstr "الخيارات"
#: templates/inventory/car_form.html:211
#: templates/inventory/car_form_qabl alfalsafa.html:206
msgid "Save and Add Another"
msgstr "حفظ وإضافة آخر"
#: templates/inventory/car_form.html:217
#: templates/inventory/car_form_qabl alfalsafa.html:210
msgid "Save and Go to Inventory"
msgstr "حفظ والانتقال إلى المخزون"
#: templates/inventory/car_form.html:286
msgid "Options"
msgstr "الخيارات"
#: templates/inventory/car_form.html:275
#: templates/inventory/car_form_qabl alfalsafa.html:258
#: templates/inventory/car_list.html:162
msgid "equipment"
msgstr "التجهيزات"
#: templates/inventory/car_form.html:300
#: templates/inventory/car_form_qabl alfalsafa.html:283
msgid "scanner"
msgstr "الماسح الضوئي"
#: templates/inventory/car_form.html:309
#: templates/inventory/car_form_qabl alfalsafa.html:292
#: templates/partials/scanner_modal.html:10
msgid "VIN will appear here."
msgstr "رقم الهيكل سيظهر هنا."
#: templates/inventory/car_form.html:310
#: templates/inventory/car_form_qabl alfalsafa.html:293
#: templates/partials/scanner_modal.html:11
msgid "Use OCR Fallback"
msgstr "التعرف الآلي على الحروف"
#: templates/inventory/car_form.html:379 templates/inventory/car_form.html:380
#: templates/inventory/car_form_qabl alfalsafa.html:363
#: templates/inventory/car_form_qabl alfalsafa.html:364
msgid "Please enter a valid VIN."
msgstr "الرجاء إدخال رقم هيكل صالح مكون من 17 حرفًا."
#: templates/inventory/car_form.html:402
#: templates/inventory/car_form_qabl alfalsafa.html:386
msgid "An error occurred while decoding the VIN."
msgstr "حدث خطأ أثناء فك تشفير الهيكل"
#: templates/inventory/car_history.html:24 #: templates/inventory/car_history.html:24
msgid "History" msgid "History"

Binary file not shown.

After

Width:  |  Height:  |  Size: 418 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 432 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 422 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 448 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 398 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 438 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 MiB

View File

@ -3,52 +3,45 @@
{% load i18n static %} {% load i18n static %}
{% load allauth account %} {% load allauth account %}
{% block title %} {% block title %}
{% trans 'User Settings' %} {% trans 'Dealer Settings' %}
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<main class="d-flex align-items-center justify-content-center min-vh-80 py-5">
<div class="col-md-6">
<div class="row justify-content-center mt-5 mb-3"> <div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
<div class="card-header bg-gradient py-4 border-0 rounded-top-4">
<div class="col-lg-8 col-md-10"> <h3 class="mb-0 fs-4 fw-bold text-center">
<div class="card shadow-sm border-0 rounded-3"> {% trans "Dealer Settings" %}
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3"> <i class="fas fa-solid fa-gear ms-2"></i>
<h3 class="mb-0 fs-4 text-center"> </h3>
Dealer Settings
<span class="fas fa-solid fa-gear ms-2 text-primary"></span>
</h3>
</div> </div>
<div class="card-body bg-light-subtle "> <div class="card-body p-4 p-md-5">
<form action="" method="post"> <form action="" method="post" class="needs-validation" novalidate>
{% csrf_token %} {% csrf_token %}
<div class="col-12"> <div class="row g-1">
<div class=" mb-4"> <div class="col-12">
<div class="row gx-3 mb-4 gy-6 gy-sm-3"> <h4 class="mb-4 text-center">{% trans 'Default Invoice Accounts' %}</h4>
<div class="col-12"> {{ form.invoice_cash_account|as_crispy_field }}
<h4 class="mb-4">{% trans 'Default Invoice Accounts' %}</h4> {{ form.invoice_prepaid_account|as_crispy_field }}
<div class="form-icon-container mb-3">{{ form.invoice_cash_account|as_crispy_field }}</div> {{ form.invoice_unearned_account|as_crispy_field }}
<div class="form-icon-container mb-3">{{ form.invoice_prepaid_account|as_crispy_field }}</div> </div>
<div class="form-icon-container mb-3">{{ form.invoice_unearned_account|as_crispy_field }}</div> <div class="col-12 mt-4">
</div> <h4 class="mb-4 text-center">{% trans 'Default Bill Accounts' %}</h4>
</div> {{ form.bill_cash_account|as_crispy_field }}
<div class="row gx-3 mb-4 gy-6 gy-sm-3"> {{ form.bill_prepaid_account|as_crispy_field }}
<div class="col-12"> {{ form.bill_unearned_account|as_crispy_field }}
<h4 class="mb-4">{% trans 'Default Bill Accounts' %}</h4> </div>
<div class="form-icon-container mb-3">{{ form.bill_cash_account|as_crispy_field }}</div> </div>
<div class="form-icon-container mb-3">{{ form.bill_prepaid_account|as_crispy_field }}</div> <hr class="my-4">
<div class="form-icon-container mb-3">{{ form.bill_unearned_account|as_crispy_field }}</div> <div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
</div> <button class="btn btn-phoenix-primary btn-lg" type="submit">
</div> <i class="fa-solid fa-pen-to-square me-1"></i>
<div class="text-center mb-6"> {% trans 'Update' %}
<div> </button>
<button type="submit" class="btn btn-phoenix-primary"><i class="fa-solid fa-pen-to-square me-1"></i>{% trans 'Update' %}</button> </div>
</div> </form>
</div>
</div>
</div>
</form>
</div> </div>
</div> </div>
</div> </div>
{% endblock %} </main>
{% endblock %}

View File

@ -8,50 +8,46 @@
{% endblock title %} {% endblock title %}
{% block content %} {% block content %}
<main class="d-flex align-items-center justify-content-center min-vh-80 py-5 ">
<!----> <div class="col-md-6">
<div class="row justify-content-center mt-5 mb-3"> <div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
<div class="card-header bg-gradient py-4 border-0 rounded-top-4">
<div class="col-lg-8 col-md-10"> <h3 class="mb-0 fs-4 fw-bold text-center">
<div class="card shadow-sm border-0 rounded-3"> {% trans 'Create Bill' %}
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3"> <i class="fas fa-money-bills ms-2"></i>
<h3 class="mb-0 fs-4 text-center"> </h3>
{% trans 'Create Bill' %}<span class="fas fa-money-bills ms-2 text-primary"></span>
</h3>
</div> </div>
<div class="card-body bg-light-subtle"> <div class="card-body p-4 p-md-5">
<form action="{{ form_action_url }}" method="post" id="djl-bill-model-create-form-id" class="needs-validation" novalidate>
<form action="{{ form_action_url }}" method="post" id="djl-bill-model-create-form-id"> {% csrf_token %}
<div class="card-body"> {% if po_model %}
<div class="text-center mb-4">
{% csrf_token %} <h3 class="h5">{% trans 'Bill for' %} {{ po_model.po_number }}</h3>
{% if po_model %} <p class="text-muted mb-3">{% trans 'Bill for' %} {{ po_model.po_title }}</p>
<div class="text-center mb-4"> <div class="d-flex flex-column gap-2">
<h3 class="h5">{% trans 'Bill for' %} {{ po_model.po_number }}</h3> {% for itemtxs in po_itemtxs_qs %}
<p class="text-muted mb-3">{% trans 'Bill for' %} {{ po_model.po_title }}</p> <span class="badge bg-secondary">{{ itemtxs }}</span>
<div class="d-flex flex-column gap-2"> {% endfor %}
{% for itemtxs in po_itemtxs_qs %}
<span class="badge bg-secondary">{{ itemtxs }}</span>
{% endfor %}
</div>
</div> </div>
{% endif %}
<div class="mb-4">
{{ form|crispy }}
</div> </div>
<hr class="my-2"> {% endif %}
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3"> <div class="mb-4">
<button class="btn btn-lg btn-phoenix-primary md-me-2" type="submit"><i class="fa-solid fa-floppy-disk me-1"></i>{{ _("Save") }}</button> {{ form|crispy }}
<a href="{% url 'bill_list' request.dealer.slug%}" class="btn btn-lg btn-phoenix-secondary"><i class="fa-solid fa-ban me-1"></i>{% trans "Cancel" %}</a> </div>
</div> <hr class="my-4">
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
<button class="btn btn-phoenix-primary btn-lg me-md-2" type="submit">
<i class="fa-solid fa-floppy-disk me-1"></i>
{{ _("Save") }}
</button>
<a href="{% url 'bill_list' request.dealer.slug%}" class="btn btn-phoenix-secondary btn-lg">
<i class="fa-solid fa-ban me-1"></i>
{% trans "Cancel" %}
</a>
</div> </div>
</form> </form>
</div> </div>
</div> </div>
</div> </div>
<!----> </main>
{% endblock %} {% endblock %}

View File

@ -1,54 +1,59 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load i18n %} {% load i18n static %}
{% load static %}
{% load django_ledger %} {% load django_ledger %}
{% load widget_tweaks %} {% load widget_tweaks %}
{% block content %} {% block content %}
<div class="container py-5"> <main class="d-flex align-items-center justify-content-center min-vh-80 py-5">
<div class="row justify-content-center"> <div class="col-12 col-sm-10 col-md-8 col-lg-6 col-xl-5">
<div class="col-12 text-center mb-4"> <div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
<h1 class="display-4">{% trans 'Create Chart of Accounts' %}</h1> <div class="card-header bg-gradient py-4 border-0 rounded-top-4">
<h3 class="mb-0 fs-4 fw-bold text-center">
{% trans 'Create Chart of Accounts' %}
<i class="fa-solid fa-chart-pie ms-2"></i>
</h3>
</div> </div>
<div class="col-lg-6 col-md-8"> <div class="card-body p-4 p-md-5">
<div class="card shadow-sm"> <form method="post" id="{{ form.get_form_id }}" class="needs-validation" novalidate>
<div class="card-body p-4"> {% csrf_token %}
<form method="post" id="{{ form.get_form_id }}">
{% csrf_token %} {# Bootstrap form rendering #}
<div class="mb-3">
{# Bootstrap form rendering #} {{ form.name.label_tag }}
<div class="mb-3"> {{ form.name|add_class:"form-control" }}
{{ form.name.label_tag }} {% if form.name.help_text %}
{{ form.name|add_class:"form-control" }} <small class="form-text text-muted">{{ form.name.help_text }}</small>
{% if form.name.help_text %} {% endif %}
<small class="form-text text-muted">{{ form.name.help_text }}</small> {% for error in form.name.errors %}
{% endif %} <div class="invalid-feedback d-block">{{ error }}</div>
{% for error in form.name.errors %} {% endfor %}
<div class="invalid-feedback d-block">{{ error }}</div>
{% endfor %}
</div>
<div class="mb-3">
{{ form.description.label_tag }}
{{ form.description|add_class:"form-control" }}
{% if form.description.help_text %}
<small class="form-text text-muted">{{ form.description.help_text }}</small>
{% endif %}
{% for error in form.description.errors %}
<div class="invalid-feedback d-block">{{ error }}</div>
{% endfor %}
</div>
<div class="d-flex justify-content-center gap-2 mt-4">
<button type="submit" class="btn btn-phoenix-primary">Submit</button>
<a href="{% url 'coa-list' request.dealer.slug request.entity.slug %}" class="btn btn-phoenix-secondary">
{% trans 'Back' %}
</a>
</div>
</form>
</div> </div>
</div> <div class="mb-3">
{{ form.description.label_tag }}
{{ form.description|add_class:"form-control" }}
{% if form.description.help_text %}
<small class="form-text text-muted">{{ form.description.help_text }}</small>
{% endif %}
{% for error in form.description.errors %}
<div class="invalid-feedback d-block">{{ error }}</div>
{% endfor %}
</div>
<hr class="my-4">
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
<button type="submit" class="btn btn-phoenix-primary btn-lg me-md-2">
<i class="fa-solid fa-plus me-1"></i>
{% trans 'Create' %}
</button>
<a href="{% url 'coa-list' request.dealer.slug request.entity.slug %}"
class="btn btn-phoenix-secondary btn-lg">
<i class="fa-solid fa-ban me-1"></i>
{% trans 'Cancel' %}
</a>
</div>
</form>
</div> </div>
</div> </div>
</div> </div>
</main>
{% endblock %} {% endblock %}

View File

@ -1,5 +1,6 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load i18n static crispy_forms_filters %} {% load i18n static crispy_forms_filters %}
{% block title %} {% block title %}
{% if object %} {% if object %}
{% trans 'Update Lead' %} {% trans 'Update Lead' %}
@ -7,6 +8,7 @@
{% trans 'Add New Lead' %} {% trans 'Add New Lead' %}
{% endif %} {% endif %}
{% endblock %} {% endblock %}
{% block customcss %} {% block customcss %}
<style> <style>
.htmx-indicator{ .htmx-indicator{
@ -28,51 +30,41 @@
} }
</style> </style>
{% endblock customcss %} {% endblock customcss %}
{% block content %} {% block content %}
<div class="row justify-content-center mt-5 mb-3"> <main class="d-flex align-items-center justify-content-center min-vh-100 py-5">
<div class="col-lg-8 col-md-10"> <div class="col-md-8">
<div class="card shadow-sm border-0 rounded-3"> <div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3"> <div class="card-header bg-gradient py-4 border-0 rounded-top-4">
<h3 class="mb-0 fs-4 text-center"> <h3 class="mb-0 fs-4 fw-bold text-center">
{% if object %} {% if object %}
{{ _("Update Lead") }} {% trans "Update Lead" %}
{% else %} <i class="fa-solid fa-edit ms-2"></i>
{{ _("Create New Lead") }} {% else %}
{% endif %} {% trans "Create New Lead" %}
<li class="fas fa-bullhorn text-primary ms-2"></li> <i class="fa-solid fa-bullhorn ms-2"></i>
</h3> {% endif %}
</div> </h3>
<div class="card-body bg-light-subtle"> </div>
<form class="form" method="post" enctype="multipart/form-data"> <div class="card-body p-4 p-md-5">
{% csrf_token %} <form class="form" method="post" enctype="multipart/form-data">
{{ form|crispy }} {% csrf_token %}
<hr class="my-2"> {{ form|crispy }}
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
<button class="btn btn-phoenix-primary btn-lg me-md-2" type="submit"> <hr class="my-4">
<i class="fa-solid fa-floppy-disk me-1"></i> <div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
{{ _("Save") }} <button class="btn btn-phoenix-primary btn-lg me-md-2" type="submit">
</button> <i class="fa-solid fa-floppy-disk me-1"></i>
<a href="{% url 'lead_list' request.dealer.slug %}" class="btn btn-phoenix-secondary btn-lg"> {% trans "Save" %}
<i class="fa-solid fa-ban me-1"></i> </button>
{% trans "Cancel" %} <a href="{% url 'lead_list' request.dealer.slug %}" class="btn btn-phoenix-secondary btn-lg">
</a> <i class="fa-solid fa-ban me-1"></i>
</div> {% trans "Cancel" %}
</form> </a>
</div> </div>
</form>
</div> </div>
</div> </div>
</div> </div>
<script> </main>
document.addEventListener('DOMContentLoaded', function() { {% endblock %}
const spinner = document.createElement('div');
spinner.id = 'spinner';
spinner.className = 'htmx-indicator spinner-border text-primary inline-spinner';
spinner.innerHTML = '<span class="visually-hidden">Loading...</span>';
const targetFieldDiv = document.getElementById('div_id_id_car_model');
if (targetFieldDiv) {
targetFieldDiv.parentNode.insertBefore(spinner, targetFieldDiv.nextSibling);
}
});
</script>
{% endblock %}

View File

@ -1,42 +1,60 @@
{% extends "base.html" %} {% extends "base.html" %}
{% load i18n static %} {% load i18n static %}
{% load crispy_forms_filters %} {% load crispy_forms_filters %}
{% block title %} {% block title %}
{# Check if an 'object' exists in the context #}
{% if object %} {% if object %}
{% trans 'Update Customer' %} {% trans 'Update Customer' %}
{% else %} {% else %}
{% trans 'Add New Customer' %} {% trans 'Add New Customer' %}
{% endif %} {% endif %}
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<div class="row justify-content-center mt-5 mb-3"> <main class="d-flex align-items-center justify-content-center min-vh-100 py-5 ">
<div class="col-lg-8 col-md-10"> <div class="col-md-8">
<div class="card shadow-sm border-o rounded-3"> <div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3"> <div class="card-header bg-gradient py-4 border-0 rounded-top-4">
<h3 class="mb-0 fs-4 text-center"> <h3 class="mb-0 fs-4 fw-bold text-center">
{% if customer.created %} {% if object %}
{{ _("Edit Customer") }} {% trans "Update Customer" %}
{% else %} <i class="fa-solid fa-user-edit ms-2"></i>
{{ _("Add Customer") }} {% else %}
{% endif %} {% trans "Add New Customer" %}
<i class="fa-solid fa-user ms-2 text-primary"></i> <i class="fa-solid fa-user-plus ms-2"></i>
</h3> {% endif %}
</div> </h3>
<div class="card-body bg-light-subtle"> </div>
<form method="post" <div class="card-body p-4 p-md-5">
class="form row g-3 needs-validation" <form method="post" class="form" enctype="multipart/form-data" novalidate>
enctype="multipart/form-data" {% csrf_token %}
novalidate> {{ form|crispy }}
{% csrf_token %}
{{ form|crispy }} {% if form.errors %}
<hr class="my-2"> <div class="alert alert-danger mt-4" role="alert">
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3"> <h4 class="alert-heading small">{% trans "Please correct the following errors:" %}</h4>
<button class="btn btn-phoenix-primary btn-lg me-md-2" type="submit"><i class="fa-solid fa-floppy-disk me-1"></i>{{ _("Save") }}</button> <ul class="mb-0">
<a href="{% url 'customer_list' request.dealer.slug %}" class="btn btn-lg btn-phoenix-secondary"><i class="fa-solid fa-ban me-1"></i>{% trans "Cancel" %}</a> {% for field, errors in form.errors.items %}
<li><strong>{{ field|capfirst }}:</strong> {% for error in errors %}{{ error }}{% endfor %}</li>
{% endfor %}
</ul>
</div> </div>
</form> {% endif %}
</div>
<hr class="my-4">
<div class="d-grid gap-2 d-md-flex justify-content-md-center">
<button class="btn btn-phoenix-primary btn-lg me-md-2" type="submit">
<i class="fa-solid fa-floppy-disk me-1"></i>
{% trans "Save" %}
</button>
<a href="{% url 'customer_list' request.dealer.slug %}" class="btn btn-phoenix-secondary btn-lg">
<i class="fa-solid fa-ban me-1"></i>
{% trans "Cancel" %}
</a>
</div>
</form>
</div> </div>
</div> </div>
{% endblock %} </div>
</main>
{% endblock %}

View File

@ -5,32 +5,34 @@
{{ _("Update Dealer Information") }} {{ _("Update Dealer Information") }}
{% endblock title %} {% endblock title %}
{% block content %} {% block content %}
<main class="d-flex align-items-center justify-content-center min-vh-80 py-5">
<!----> <div class="col-md-8">
<div class="row justify-content-center mt-5 mb-3"> <div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
<div class="card-header bg-gradient py-4 border-0 rounded-top-4">
<div class="col-lg-8 col-md-10"> <h3 class="mb-0 fs-4 fw-bold text-center">
<div class="card shadow-sm border-0 rounded-3"> {{ _("Update Dealer Information") }}
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3"> <i class="fas fa-car ms-2"></i>
<h3 class="mb-0 fs-4 text-center"> </h3>
{{ _("Update Dealer Information") }}<span class="fas fa-car ms-2 text-primary"></span>
</h3>
</div> </div>
<div class="card-body bg-light-subtle"> <div class="card-body p-4 p-md-5">
<form hx-boost="false" method="post" enctype="multipart/form-data" class="needs-validation" novalidate> <form hx-boost="false" method="post" enctype="multipart/form-data" class="needs-validation" novalidate>
{% csrf_token %} {% csrf_token %}
{{ form|crispy }} {{ form|crispy }}
<hr class="my-2"> <hr class="my-4">
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3"> <div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
<button class="btn btn-lg btn-phoenix-primary md-me-2" type="submit"><i class="fa-solid fa-floppy-disk me-1"></i>{{ _("Save") }}</button> <button class="btn btn-phoenix-primary btn-lg me-md-2" type="submit">
<a href="{% url 'dealer_detail' request.dealer.slug %}" class="btn btn-lg btn-phoenix-secondary"><i class="fa-solid fa-ban me-1"></i>{% trans "Cancel" %}</a> <i class="fa-solid fa-floppy-disk me-1"></i>
{{ _("Save") }}
</button>
<a href="{% url 'dealer_detail' request.dealer.slug %}"
class="btn btn-phoenix-secondary btn-lg">
<i class="fa-solid fa-ban me-1"></i>
{% trans "Cancel" %}
</a>
</div> </div>
</form> </form>
</div> </div>
</div> </div>
</div> </div>
<!----> </main>
{% endblock %} {% endblock %}

View File

@ -2,7 +2,7 @@
{% load i18n %} {% load i18n %}
{% load crispy_forms_filters %} {% load crispy_forms_filters %}
{% block title %} {% block title %}
{# Check if an 'object' exists in the context #} {# Check if an 'object' exists in the context #}
{% if object %} {% if object %}
{% trans 'Update Group' %} {% trans 'Update Group' %}
{% else %} {% else %}
@ -10,41 +10,49 @@
{% endif %} {% endif %}
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<main class="d-flex align-items-center justify-content-center min-vh-80 py-5">
<!----> <div class="col-12 col-sm-10 col-md-8 col-lg-6 col-xl-5">
<div class="row justify-content-center mt-5 mb-3"> <div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
<div class="col-lg-8 col-md-10"> <div class="card-header bg-gradient py-4 border-0 rounded-top-4">
<div class="card shadow-sm border-0 rounded-3"> <h3 class="mb-0 fs-4 fw-bold text-center">
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3"> {% if object %}
<h3 class="mb-0 fs-4 text-center"> {% trans "Update Group" %}
{% if staff.created %} <i class="fa-solid fa-user-group ms-2"></i>
{{ _("Edit Group") }} {% else %}
{% else %} {% trans "Create Group" %}
{{ _("Create Group") }} <i class="fa-solid fa-user-plus ms-2"></i>
{% endif %} {% endif %}
<i class="fa-solid fa-user-group text-primary ms-2"></i> </h3>
</h3>
</div> </div>
<div class="card-body bg-light-subtle"> <div class="card-body p-4 p-md-5">
<form method="post" class="needs-validation" novalidate>
<form class="row g-3 " method="post" class="form" novalidate>
{% csrf_token %} {% csrf_token %}
{{ redirect_field }} {{ redirect_field }}
{{ form|crispy }} {{ form|crispy }}
{% for error in form.errors %}
<div class="text-danger">{{ error }}</div>
{% endfor %}
<hr class="my-2"> {% if form.errors %}
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3"> <div class="alert alert-danger mt-4" role="alert">
<button class="btn btn-lg btn-phoenix-primary md-me-2" type="submit"><i class="fa-solid fa-floppy-disk me-1"></i>{{ _("Save") }}</button> <h4 class="alert-heading small">{% trans "Please correct the following errors:" %}</h4>
<a href="{% url 'group_list' request.dealer.slug %}" class="btn btn-lg btn-phoenix-secondary"><i class="fa-solid fa-ban me-1"></i>{% trans "Cancel" %}</a> <ul class="mb-0">
{% for field, errors in form.errors.items %}
<li><strong>{{ field|capfirst }}:</strong> {% for error in errors %}{{ error }}{% endfor %}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<hr class="my-4">
<div class="d-grid gap-2 d-md-flex justify-content-md-center">
<button class="btn btn-phoenix-primary btn-lg md-me-2" type="submit">
<i class="fa-solid fa-floppy-disk me-1"></i>{% trans "Save" %}
</button>
<a href="{% url 'group_list' request.dealer.slug %}" class="btn btn-phoenix-secondary btn-lg">
<i class="fa-solid fa-ban me-1"></i>{% trans "Cancel" %}
</a>
</div> </div>
</form> </form>
</div> </div>
</div> </div>
</div> </div>
<!----> </main>
{% endblock %} {% endblock %}

View File

@ -6,62 +6,70 @@
{% trans "Groups" %} {% trans "Groups" %}
{% endblock title %} {% endblock title %}
{% block content %} {% block content %}
<main class="py-5">
{% if groups or request.GET.q%} <div class="container">
<section class=""> {% if groups or request.GET.q %}
<div class="row mt-4"> <div class="card border-0 rounded-4 animate__animated animate__fadeInUp">
<div class="col-auto"> <div class="card-header border-bottom d-flex flex-column flex-md-row justify-content-between align-items-md-center p-4">
<div class="d-md-flex justify-content-between"> <h5 class="card-title mb-2 mb-md-0 me-md-4 fw-bold"> <i class="fa-solid fa-user-group fs-3 me-1 text-primary "></i>{% trans "Groups" %}</h5>
<div> <div class="d-flex gap-2">
<a href="{% url 'group_create' request.dealer.slug %}" <a href="{% url 'group_create' request.dealer.slug %}"
class="btn btn-sm btn-phoenix-primary me-5"><span class="fas fa-plus me-2"></span>{% trans "Add Group" %}</a> class="btn btn-phoenix-primary">
<i class="fa-solid fa-user-group fs-9 me-1"></i>
<span class="fas fa-plus me-2"></span>{% trans "Add Group" %}
</a>
<a href="{% url 'user_list' request.dealer.slug %}" <a href="{% url 'user_list' request.dealer.slug %}"
class="btn btn-sm btn-phoenix-secondary"><span class="fas fas fa-arrow-left me-2"></span>{% trans "Back to Staffs" %}</a> class="btn btn-phoenix-secondary">
<span class="fas fas fa-arrow-left me-2"></span>{% trans "Back to Staffs" %}
</a>
</div> </div>
</div> </div>
</div> <div class="card-body p-0">
<div class="table-responsive scrollbar mx-n1 px-1 mt-3"> <div class="table-responsive scrollbar mx-n1 px-1 mt-3">
<table class="table align-items-center table-flush table-hover"> <table class="table align-items-center table-hover mb-0">
<thead> <thead>
<tr class="bg-body-highlight"> <tr class="bg-light">
<th>{% trans 'name'|capfirst %}</th> <th scope="col" class="text-secondary text-uppercase fw-bold ps-4">{% trans 'name'|capfirst %}</th>
<th>{% trans 'total Users'|capfirst %}</th> <th scope="col" class="text-secondary text-uppercase fw-bold">{% trans 'total Users'|capfirst %}</th>
<th>{% trans 'total permission'|capfirst %}</th> <th scope="col" class="text-secondary text-uppercase fw-bold">{% trans 'total permission'|capfirst %}</th>
<th>{% trans 'actions'|capfirst %}</th> <th scope="col" class="text-secondary text-uppercase fw-bold text-end pe-4">{% trans 'actions'|capfirst %}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{% for group in groups %} {% for group in groups %}
<tr> <tr>
<td class="align-middle white-space-nowrap ps-1">{{ group.name }}</td> <td class="align-middle white-space-nowrap ps-4">{{ group.name }}</td>
<td class="align-middle white-space-nowrap"> <td class="align-middle white-space-nowrap">
<i class="fa-solid fa-users me-1"></i> {{ group.users.count }} <i class="fa-solid fa-users me-1"></i> {{ group.users.count }}
</td> </td>
<td class="align-middle white-space-nowrap"> <td class="align-middle white-space-nowrap">
<i class="fa-solid fa-unlock me-1"></i> {{ group.permissions.count }} <i class="fa-solid fa-unlock me-1"></i> {{ group.permissions.count }}
</td> </td>
<td class="align-middle white-space-nowrap"> <td class="align-middle white-space-nowrap text-end pe-4">
<a class="btn btn-phoenix-success" <a class="btn btn-phoenix-secondary btn-sm"
href="{% url 'group_detail' request.dealer.slug group.id %}"> href="{% url 'group_detail' request.dealer.slug group.id %}">
<i class="fa-solid fa-eye"></i> <i class="fa-solid fa-eye me-1"></i>
{% trans 'view'|capfirst %} {% trans 'view'|capfirst %}
</a> </a>
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>
</div> </div>
{% if page_obj.paginator.num_pages > 1 %}
<div class="d-flex justify-content-end mt-3">
<div class="d-flex">{% include 'partials/pagination.html' %}</div>
</div> </div>
{% endif %} {% if page_obj.paginator.num_pages > 1 %}
</div> <div class="card-footer bg-light border-top">
</section> <div class="d-flex justify-content-end">
{% include 'partials/pagination.html' %}
{% else %} </div>
{% url "group_create" request.dealer.slug as create_group_url %} </div>
{% include "empty-illustration-page.html" with value="group" url=create_group_url %} {% endif %}
{% endif %} </div>
{% endblock %} {% else %}
{% url "group_create" request.dealer.slug as create_group_url %}
{% include "empty-illustration-page.html" with value="group" url=create_group_url %}
{% endif %}
</div>
</main>
{% endblock %}

View File

@ -3,10 +3,10 @@
<nav class="navbar navbar-vertical navbar-expand-lg "> <nav class="navbar navbar-vertical navbar-expand-lg ">
<div class="collapse navbar-collapse" id="navbarVerticalCollapse"> <div class="collapse navbar-collapse" id="navbarVerticalCollapse">
<div class="navbar-vertical-content d-flex flex-column"> <div class="navbar-vertical-content d-flex flex-column">
<ul class="navbar-nav flex-column" id="navbarVerticalNav" hx-boost="true" hx-target="#main_content" hx-select="#main_content" hx-swap="outerHTML" hx-select-oob="#toast-container" hx-indicator="#spinner"> <ul class="navbar-nav flex-column" id="navbarVerticalNav" hx-boost="false" hx-target="#main_content" hx-select="#main_content" hx-swap="outerHTML" hx-select-oob="#toast-container" hx-indicator="#spinner">
<li class="nav-item"> <li class="nav-item">
<p class="navbar-vertical-label text-primary fs-8 text-truncate">{{request.dealer|default:"Apps"}}</p> {% comment %} <p class="navbar-vertical-label text-primary fs-8 text-truncate">{{request.dealer|default:"Apps"}}</p>
<hr class="navbar-vertical-line"> <hr class="navbar-vertical-line"> {% endcomment %}
{% if perms.inventory.can_view_inventory %} {% if perms.inventory.can_view_inventory %}
<div class="nav-item-wrapper"> <div class="nav-item-wrapper">
<a id="inventory-nav" class="nav-link dropdown-indicator label-1 inventory-nav" href="#nv-inventory" role="button" data-bs-toggle="collapse" aria-expanded="false" aria-controls="nv-inventory"> <a id="inventory-nav" class="nav-link dropdown-indicator label-1 inventory-nav" href="#nv-inventory" role="button" data-bs-toggle="collapse" aria-expanded="false" aria-controls="nv-inventory">
@ -386,7 +386,7 @@
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item mb-4">
<a class="nav-link" href="#"> <a class="nav-link" href="#">
<div class="d-flex align-items-center"> <div class="d-flex align-items-center">
<span class="nav-link-icon"><span class="fas fa-robot"></span></span> <span class="nav-link-icon"><span class="fas fa-robot"></span></span>
@ -394,9 +394,22 @@
</div> </div>
</a> </a>
</li> </li>
<li class="nav-item ">
<a class="nav-link" href="#">
<div class="d-flex align-items-center">
{% if user.is_authenticated %}
<span class="nav-link-icon"><span class="fa-solid fa-car"></span></span>
<span class="nav-link-text">{{ request.dealer.user.username }}</span>
{% endif %}
</div>
</a>
</li>
</ul> </ul>
</div> </div>
{% endif %} {% endif %}
</div> </div>
@ -437,11 +450,11 @@
<div class="navbar-logo"> <div class="navbar-logo">
<div class="d-flex align-items-center"> <div class="d-flex align-items-center">
{% with name_to_display=request.user.first_name|default:request.dealer.name %} {% with name_to_display=request.user.first_name|default:request.dealer.name %}
<h6 class="text-info ms-2 d-none d-sm-block fs-7" <h6 class="text-gray-600 ms-2 d-none d-sm-block fs-8"
data-bs-toggle="tooltip" data-bs-toggle="tooltip"
data-bs-placement="bottom" data-bs-placement="bottom"
title="{% trans 'Logged in as ' %}{{request.user.username }}"> title="{% trans 'Logged in as ' %}{{request.user.username }}">
{% trans 'Hello, ' %}{{ name_to_display }} {% trans 'Hello, ' %}{{ name_to_display }}
</h6> </h6>
{% endwith %} {% endwith %}
</div> </div>

View File

@ -1,16 +1,41 @@
<!-- templates/cars/car_confirm_delete.html -->
{% extends 'base.html' %} {% extends 'base.html' %}
{% load i18n %} {% load i18n %}
{% block title %}Delete Car{% endblock %} {% block title %}Delete Car{% endblock %}
{% block content %} {% block content %}
<div class="mt-4 ms-4"> <main class="d-flex align-items-center justify-content-center min-vh-50 py-5">
<h1>Delete Car</h1> <div class="col-md-6 ">
<p class="text-danger">Are you sure you want to delete the car "{{ car }}"?</p> <div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
<form method="post">
{% csrf_token %} <div class="card-body p-4 p-md-5 text-center bg-gradient">
<button type="submit" class="btn btn-phoenix-danger">Confirm Delete</button> <div class="mb-4">
<a href="{% url 'car_list' request.dealer.slug %}" <i class="fa-solid fa-triangle-exclamation text-danger" style="font-size: 2rem;"></i>
class="btn btn-phoenix-secondary">{% trans 'Cancel' %}</a> </div>
</form>
<h1 class="card-title fw-bold mb-3 fs-4">{% trans 'Confirm Deletion' %}</h1>
<p class="fs-7 mb-4">
{% trans "Are you absolutely sure you want to delete the car" %}
</p>
<p class="fs-6 mb-4">
"<strong class="">{{ car }}</strong>"?
</p>
<p class="fs-7 mb-4">
{% trans "This action is permanent and cannot be undone." %}
</p>
<form method="post" class="d-grid gap-3 d-sm-flex justify-content-sm-center">
{% csrf_token %}
<button type="submit" class="btn btn-phoenix-danger btn-lg px-5">
<i class="fa-solid fa-trash-can me-2"></i>{% trans 'Confirm Delete' %}
</button>
<a href="{% url 'car_list' request.dealer.slug %}" class="btn btn-phoenix-secondary btn-lg px-5">
<i class="fa-solid fa-ban me-2"></i>{% trans 'Cancel' %}
</a>
</form>
</div>
</div>
</div> </div>
{% endblock %} </main>
{% endblock %}

View File

@ -76,13 +76,279 @@
{% if perms.inventory.view_car %} {% if perms.inventory.view_car %}
<div class="row-fluid {% if car.status == 'sold' %}disabled{% endif %}"> <div class="row-fluid {% if car.status == 'sold' %}disabled{% endif %}">
<div class="row g-3 justify-content-between"> <div class="row g-3 justify-content-between">
<div class="col-lg-12 col-xl-6">
<div class="avatar avatar-5xl mb-3">
<img class="rounded h-100 w-100" <div class="col-md-6">
src="{% static 'images/car_images/' %}{{ car.get_hash }}.png" <div class="row mb-2">
alt="{{ car.vin }}" /> <div class="col-md-4">
</div> <div class="avatar avatar-6xl mb-3">
<div class="card mb-3 rounded shadow d-flex align-content-center <img class="rounded"
src="{% static 'images/car_images/' %}{{ car.get_hash }}.png"
alt="{{ car.vin }}" />
</div>
</div>
<div class="col-md-8">
<div class="card rounded shadow d-flex align-content-center
{% if car.get_transfer %}transfer{% endif %}">
<p class="card-header rounded-top fw-bold">{% trans 'Financial Details' %}</p>
<div class="card-body">
<div class="table-responsive scrollbar mb-3">
<table class="table table-sm fs-9 mb-0 overflow-hidden">
{% if car.marked_price %}
<tr>
<th>{% trans "Cost Price"|capfirst %}</th>
<td>{{ car.cost_price|floatformat:2 }}</td>
</tr>
<tr>
<th>{% trans "Marked Price"|capfirst %}</th>
<td>{{ car.marked_price|floatformat:2 }}</td>
</tr>
{% comment %} <tr>
<th>{% trans "Selling Price"|capfirst %}</th>
<td>{{ car.finances.selling_price|floatformat:2 }}</td>
</tr>
<tr>
<th>{% trans "Discount Amount"|capfirst %}</th>
<td>{{ car.finances.discount_amount|floatformat:2 }}</td>
</tr>
<tr>
<th>{% trans "Additional Fee"|capfirst %}</th>
<td></td>
</tr>
{% if car.finances.additional_services.first.pk %}
{% for service in car.finances.additional_services.all %}
<tr>
<td>{{ service.name }}</td>
<td>{{ service.price_|floatformat:2 }}</td>
</tr>
{% endfor %}
{% endif %}
<tr>
<th>{% trans "VAT Amount"|capfirst %}</th>
<td>{{ car.finances.vat_amount|floatformat:2 }}</td>
</tr>
<tr>
<th>{% trans "Total"|capfirst %}</th>
<td>{{ car.finances.total_vat|floatformat:2 }}</td>
</tr> {% endcomment %}
<tr>
<td colspan="2">
{% if not car.get_transfer %}
<a href="{% url 'car_finance_update' request.dealer.slug car.slug %}"
class="btn btn-phoenix-warning btn-sm mb-3">{% trans "Edit" %}</a>
{% else %}
<span class="badge bg-danger">{% trans "Cannot Edit, Car in Transfer." %}</span>
{% endif %}
</td>
</tr>
{% else %}
<p>{% trans "No finance details available." %}</p>
<a href="{% url 'car_finance_update' request.dealer.slug car.slug %}"
class="btn btn-phoenix-success btn-sm mb-3">{% trans "Add" %}</a>
{% endif %}
</table>
</div>
</div>
</div>
</div>
</div>
{% if perms.inventory.view_carcolors %}
<div class="card rounded shadow d-flex align-content-center mt-3
{% if car.get_transfer %}transfer{% endif %}">
<p class="card-header rounded-top fw-bold">{% trans 'Colors Details' %}</p>
<div class="card-body">
<div class="table-responsive scrollbar mb-3">
<table class="table table-sm fs-9 mb-0 overflow-hidden">
<!--test-->
{% if car.colors %}
<tr>
<th>{% trans 'Exterior' %}</th>
<td>
<span>{{ car.colors.exterior.get_local_name }}</span>
</td>
<td class="align-middle">
<div class="text-end color-div"
style="background-color: rgb({{ car.colors.exterior.rgb }})">
</div>
</td>
</tr>
<tr>
<th>{% trans 'Interior' %}</th>
<td>
<span>{{ car.colors.interior.get_local_name }}</span>
</td>
<td class="align-middle">
<div class="text-end color-div"
style="background-color: rgb({{ car.colors.interior.rgb }})">
</div>
</td>
</tr>
{% if perms.inventory.change_carcolors %}
<tr>
<td colspan="2">
{% if not car.get_transfer %}
<a href="{% url 'car_colors_update' request.dealer.slug car.slug %}"
class="btn btn-phoenix-warning btn-sm mb-3">{% trans "Edit" %}</a>
{% else %}
<span class="badge bg-danger">{% trans "Cannot Edit, Car in Transfer." %}</span>
{% endif %}
</td>
</tr>
{% endif %}
{% else %}
<tr>
<td colspan="2">
<p>{% trans "No color details available." %}</p>
{% if perms.inventory.add_carcolors %}
<a class="btn btn-phoenix-success btn-sm mb-3"
href="{% url 'add_color' request.dealer.slug car.slug %}">{{ _("Add Color") }}</a>
{% endif %}
</td>
</tr>
{% endif %}
<!--test-->
</table>
</div>
</div>
</div>
{% endif %}
{% if car.status != 'transfer' %}
{% if perms.inventory.view_carreservation %}
<div class="card rounded shadow d-flex align-content-center mt-3 h-full w-100">
<p class="card-header rounded-top fw-bold">{% trans 'Reservations Details' %}</p>
<div class="card-body">
<div class="table-responsive scrollbar mb-3">
<table class="table table-sm fs-9 mb-0 overflow-hidden">
{% if car.is_reserved %}
<thead>
<tr>
<th>{% trans "Reserved By" %}</th>
<th>{% trans "Expires At" %}</th>
<th>{% trans 'Actions' %}</th>
</tr>
</thead>
<tbody>
{% for reservation in car.reservations.all %}
<tr>
<td>{{ reservation.reserved_by.dealer }}</td>
<td>{{ reservation.reserved_until }}</td>
{% if perms.inventory.change_carreservation %}
<td>
{% if reservation.is_active %}
<form method="post"
action="{% url 'reservations' request.dealer.slug reservation.id %}">
{% csrf_token %}
<div class="btn-group">
<button type="submit"
name="action"
value="renew"
class="btn btn-sm btn-phoenix-success px-3 py-1">
{% trans "Renew" %}
</button>
<button type="submit"
name="action"
value="cancel"
class="btn btn-sm btn-phoenix-secondary px-3 py-1">
{% trans "Cancel" %}
</button>
</div>
</form>
{% else %}
<span class="badge badge-phoenix badge-phoenix-danger fs-10">{% trans "Expired" %}</span>
{% endif %}
</td>
{% endif %}
</tr>
{% endfor %}
{% else %}
{% if perms.inventory.add_carreservation %}
<tr>
<td>
<button type="button"
class="btn btn-sm btn-phoenix-success"
data-bs-toggle="modal"
data-bs-target="#reserveModal">
{% trans 'Reserve' %}
</button>
</td>
</tr>
{% endif %}
</tbody>
{% endif %}
</table>
</div>
</div>
</div>
{% endif %}
{% endif %}
<!-- Transfer Table -->
{% if car.status == 'transfer' and car.get_transfer %}
<div class="card rounded shadow d-flex align-content-center mt-3">
<p class="card-header rounded-top fw-bold">{% trans 'Transfer Details' %}</p>
<div class="card-body">
<div class="table-responsive scrollbar mb-3">
<table class="table table-sm fs-9 mb-0 overflow-hidden">
<thead>
<tr>
<th>{% trans "Action" %}</th>
<th>{% trans "Status" %}</th>
<th>{% trans "From Showroom" %}</th>
<th>{% trans "To Showroom" %}</th>
<th>{% trans 'Date' %}</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>
<span class="badge badge-phoenix badge-phoenix-info">{% trans "Transfer" %}</span>
</td>
<td>
{% if car.get_transfer.status == "draft" %}
<span class="badge badge-phoenix badge-phoenix-warning">{% trans "waiting for approval" %}</span>
{% elif car.get_transfer.status == "approved" %}
<span class="badge badge-phoenix badge-phoenix-info">{% trans "waiting for dealer acceptance" %}</span>
{% endif %}
</td>
<td>{{ car.get_transfer.from_dealer|title }}</td>
<td>{{ car.get_transfer.to_dealer|title }}</td>
<td>{{ car.get_transfer.transfer_date|date:"Y-m-d" }}</td>
<td>
{% if car.get_transfer.status == "draft" %}
<a class="btn btn-sm btn-phoenix-success"
href="{% url 'transfer_detail' car.get_transfer.pk %}">{% trans "Approve" %}</a>
{% endif %}
</td>
<td>
<a class="btn btn-sm btn-phoenix-success"
href="{% url 'transfer_detail' car.get_transfer.pk %}?action=cancel">{% trans "Cancel" %}</a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
{% endif %}
</div>
<div class="col-md-6">
<div class="card mb-3 rounded shadow d-flex align-content-center
{% if car.get_transfer %}disabled{% endif %}"> {% if car.get_transfer %}disabled{% endif %}">
<p class="card-header rounded-top fw-bold">{% trans 'Car Details' %}</p> <p class="card-header rounded-top fw-bold">{% trans 'Car Details' %}</p>
<div class="card-body"> <div class="card-body">
@ -234,7 +500,7 @@
{% if not car.get_transfer %} {% if not car.get_transfer %}
{% if perms.inventory.change_car %} {% if perms.inventory.change_car %}
<a href="{% url 'car_update' request.dealer.slug car.slug %}" <a href="{% url 'car_update' request.dealer.slug car.slug %}"
class="btn btn-phoenix-primary btn-sm mt-1">{% trans "Edit" %} class="btn btn-phoenix-primary btn-sm mt-1 me-3 mb-3">{% trans "Edit" %}
<span class="fas fa-solid fa-pencil ms-1"></span> <span class="fas fa-solid fa-pencil ms-1"></span>
</a> </a>
<a href="{% url 'transfer' car.slug %}" <a href="{% url 'transfer' car.slug %}"
@ -249,257 +515,10 @@
</div> </div>
</div> </div>
</div> </div>
<div class="col-lg-6 col-xl-6">
{% if perms.inventory.view_carfinance %}
<div class="card rounded shadow d-flex align-content-center
{% if car.get_transfer %}transfer{% endif %}">
<p class="card-header rounded-top fw-bold">{% trans 'Financial Details' %}</p>
<div class="card-body">
<div class="table-responsive scrollbar mb-3">
<table class="table table-sm fs-9 mb-0 overflow-hidden">
{% if car.marked_price %}
<tr>
{% if perms.inventory.view_carfinance %}
<th>{% trans "Cost Price"|capfirst %}</th>
<td>{{ car.cost_price|floatformat:2 }}</td>
{% endif %}
</tr>
<tr>
<th>{% trans "Marked Price"|capfirst %}</th>
<td>{{ car.marked_price|floatformat:2 }}</td>
</tr>
{% comment %} <tr>
<th>{% trans "Selling Price"|capfirst %}</th>
<td>{{ car.finances.selling_price|floatformat:2 }}</td>
</tr>
<tr>
<th>{% trans "Discount Amount"|capfirst %}</th>
<td>{{ car.finances.discount_amount|floatformat:2 }}</td>
</tr>
<tr>
<th>{% trans "Additional Fee"|capfirst %}</th>
<td></td>
</tr>
{% if car.finances.additional_services.first.pk %}
{% for service in car.finances.additional_services.all %}
<tr>
<td>{{ service.name }}</td>
<td>{{ service.price_|floatformat:2 }}</td>
</tr>
{% endfor %}
{% endif %}
<tr>
<th>{% trans "VAT Amount"|capfirst %}</th>
<td>{{ car.finances.vat_amount|floatformat:2 }}</td>
</tr>
<tr>
<th>{% trans "Total"|capfirst %}</th>
<td>{{ car.finances.total_vat|floatformat:2 }}</td>
</tr> {% endcomment %}
{% if perms.inventory.change_carfinance %}
<tr>
<td colspan="2">
{% if not car.get_transfer %}
<a href="{% url 'car_finance_update' request.dealer.slug car.slug %}"
class="btn btn-phoenix-warning btn-sm mb-3">{% trans "Edit" %}</a>
{% else %}
<span class="badge bg-danger">{% trans "Cannot Edit, Car in Transfer." %}</span>
{% endif %}
</td>
</tr>
{% endif %}
{% else %}
<p>{% trans "No finance details available." %}</p>
{% if perms.inventory.add_carfinance %}
<a href="{% url 'car_finance_update' request.dealer.slug car.slug %}"
class="btn btn-phoenix-success btn-sm mb-3">{% trans "Add" %}</a>
{% endif %}
{% endif %}
</table>
</div>
</div>
</div>
{% endif %}
{% if perms.inventory.view_carcolors %}
<div class="card rounded shadow d-flex align-content-center mt-3
{% if car.get_transfer %}transfer{% endif %}">
<p class="card-header rounded-top fw-bold">{% trans 'Colors Details' %}</p>
<div class="card-body">
<div class="table-responsive scrollbar mb-3">
<table class="table table-sm fs-9 mb-0 overflow-hidden">
<!--test-->
{% if car.colors %}
<tr>
<th>{% trans 'Exterior' %}</th>
<td>
<span>{{ car.colors.exterior.get_local_name }}</span>
</td>
<td class="align-middle">
<div class="text-end color-div"
style="background-color: rgb({{ car.colors.exterior.rgb }})">
</div>
</td>
</tr>
<tr>
<th>{% trans 'Interior' %}</th>
<td>
<span>{{ car.colors.interior.get_local_name }}</span>
</td>
<td class="align-middle">
<div class="text-end color-div"
style="background-color: rgb({{ car.colors.interior.rgb }})">
</div>
</td>
</tr>
{% if perms.inventory.change_carcolors %}
<tr>
<td colspan="2">
{% if not car.get_transfer %}
<a href="{% url 'car_colors_update' request.dealer.slug car.slug %}"
class="btn btn-phoenix-warning btn-sm mb-3">{% trans "Edit" %}</a>
{% else %}
<span class="badge bg-danger">{% trans "Cannot Edit, Car in Transfer." %}</span>
{% endif %}
</td>
</tr>
{% endif %}
{% else %}
<tr>
<td colspan="2">
<p>{% trans "No color details available." %}</p>
{% if perms.inventory.add_carcolors %}
<a class="btn btn-phoenix-success btn-sm mb-3"
href="{% url 'add_color' request.dealer.slug car.slug %}">{{ _("Add Color") }}</a>
{% endif %}
</td>
</tr>
{% endif %}
<!--test-->
</table>
</div>
</div>
</div>
{% endif %}
{% if car.status != 'transfer' %}
{% if perms.inventory.view_carreservation %}
<div class="card rounded shadow d-flex align-content-center mt-3">
<p class="card-header rounded-top fw-bold">{% trans 'Reservations Details' %}</p>
<div class="card-body">
<div class="table-responsive scrollbar mb-3">
<table class="table table-sm fs-9 mb-0 overflow-hidden">
{% if car.is_reserved %}
<thead>
<tr>
<th>{% trans "Reserved By" %}</th>
<th>{% trans "Expires At" %}</th>
<th>{% trans 'Actions' %}</th>
</tr>
</thead>
<tbody>
{% for reservation in car.reservations.all %}
<tr>
<td>{{ reservation.reserved_by.dealer }}</td>
<td>{{ reservation.reserved_until }}</td>
{% if perms.inventory.change_carreservation %}
<td>
{% if reservation.is_active %}
<form method="post"
action="{% url 'reservations' request.dealer.slug reservation.id %}">
{% csrf_token %}
<div class="btn-group">
<button type="submit"
name="action"
value="renew"
class="btn btn-sm btn-phoenix-success px-3 py-1">
{% trans "Renew" %}
</button>
<button type="submit"
name="action"
value="cancel"
class="btn btn-sm btn-phoenix-secondary px-3 py-1">
{% trans "Cancel" %}
</button>
</div>
</form>
{% else %}
<span class="badge badge-phoenix badge-phoenix-danger fs-10">{% trans "Expired" %}</span>
{% endif %}
</td>
{% endif %}
</tr>
{% endfor %}
{% else %}
{% if perms.inventory.add_carreservation %}
<tr>
<td>
<button type="button"
class="btn btn-sm btn-phoenix-success"
data-bs-toggle="modal"
data-bs-target="#reserveModal">
{% trans 'Reserve' %}
</button>
</td>
</tr>
{% endif %}
</tbody>
{% endif %}
</table>
</div>
</div>
</div>
{% endif %}
{% endif %}
<!-- Transfer Table -->
{% if car.status == 'transfer' and car.get_transfer %}
<div class="card rounded shadow d-flex align-content-center mt-3">
<p class="card-header rounded-top fw-bold">{% trans 'Transfer Details' %}</p>
<div class="card-body">
<div class="table-responsive scrollbar mb-3">
<table class="table table-sm fs-9 mb-0 overflow-hidden">
<thead>
<tr>
<th>{% trans "Action" %}</th>
<th>{% trans "Status" %}</th>
<th>{% trans "From Showroom" %}</th>
<th>{% trans "To Showroom" %}</th>
<th>{% trans 'Date' %}</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>
<span class="badge badge-phoenix badge-phoenix-info">Transfer</span>
</td>
<td>
{% if car.get_transfer.status == "draft" %}
<span class="badge badge-phoenix badge-phoenix-warning">waiting for approval</span>
{% elif car.get_transfer.status == "approved" %}
<span class="badge badge-phoenix badge-phoenix-info">waiting for dealer acceptance</span>
{% endif %}
</td>
<td>{{ car.get_transfer.from_dealer|title }}</td>
<td>{{ car.get_transfer.to_dealer|title }}</td>
<td>{{ car.get_transfer.transfer_date|date:"Y-m-d" }}</td>
<td>
{% if car.get_transfer.status == "draft" %}
<a class="btn btn-sm btn-phoenix-success"
href="{% url 'transfer_detail' car.get_transfer.pk %}">Approve</a>
{% endif %}
</td>
<td>
<a class="btn btn-sm btn-phoenix-success"
href="{% url 'transfer_detail' car.get_transfer.pk %}?action=cancel">Cancel</a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
{% endif %}
</div>
</div> </div>
{% if car.status == 'sold' %} {% if car.status == 'sold' %}
<img class="car_status" <img class="car_status"
src="{% static 'images/sold.png' %}" src="{% static 'images/sold.png' %}"
@ -508,6 +527,7 @@
alt=""> alt="">
{% endif %} {% endif %}
</div> </div>
<!-- Custom Card Modal --> <!-- Custom Card Modal -->
<div class="modal fade" <div class="modal fade"
id="customCardModal" id="customCardModal"

View File

@ -6,34 +6,34 @@
{% trans 'Edit Car' %} {% trans 'Edit Car' %}
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<main class="d-flex align-items-center justify-content-center min-vh-80 py-5">
<!----> <div class="col-12 col-sm-10 col-md-8 col-lg-6 col-xl-5">
<div class="row justify-content-center mt-5 mb-3"> <div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
<div class="card-header bg-gradient py-4 border-0 rounded-top-4">
<div class="col-lg-8 col-md-10"> <h3 class="mb-0 fs-4 fw-bold text-center">
<div class="card shadow-sm border-0 rounded-3"> {% trans 'Edit Car' %}
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3"> <i class="fas fa-solid fa-car ms-2"></i>
<h3 class="mb-0 fs-4 text-center"> </h3>
{% trans 'Edit Car' %}
<span class="fas fa-solid fa-car text-primary ms-2"></span>
</h3>
</div> </div>
<div class="card-body bg-light-subtle"> <div class="card-body p-4 p-md-5">
<form method="post" class="needs-validation" novalidate>
<form method="post" class="needs-validation" novalidate> {% csrf_token %}
{% csrf_token %} {{ form|crispy }} {{ form|crispy }}
<!-- Save and Back Buttons --> <hr class="my-4">
<hr class="my-2">
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3"> <div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
<button class="btn btn-lg btn-phoenix-success md-me-2" type="submit"><i class="fa-solid fa-floppy-disk me-1"></i>{{ _("Save") }}</button> <button class="btn btn-phoenix-primary btn-lg me-md-2" type="submit">
<a href="{% url 'car_detail' request.dealer.slug car.slug %}" class="btn btn-lg btn-phoenix-danger"><i class="fa-solid fa-ban me-1"></i>{% trans "Cancel" %}</a> <i class="fa-solid fa-floppy-disk me-1"></i>
{{ _("Save") }}
</button>
<a href="{% url 'car_detail' request.dealer.slug car.slug %}"
class="btn btn-phoenix-danger btn-lg">
<i class="fa-solid fa-ban me-1"></i>
{% trans "Cancel" %}
</a>
</div> </div>
</form> </form>
</div> </div>
</div> </div>
</div> </div>
<!----> </main>
{% endblock %} {% endblock %}

View File

@ -1,50 +1,54 @@
{% extends 'base.html' %} {% extends "base.html" %}
{% load crispy_forms_filters %}
{% load i18n %} {% load i18n %}
{% load crispy_forms_filters %}
{% load custom_filters %} {% load custom_filters %}
{% block title %} {% block title %}
{% trans "Car Finance Details" %} {% trans "Car Finance Details" %}
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<main class="d-flex align-items-center justify-content-center min-vh-80 py-5">
<!----> <div class="col-md-8">
<div class="row justify-content-center mt-5 mb-3"> <div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
<div class="col-lg-8 col-md-10"> <div class="card-header bg-gradient py-4 border-0 rounded-top-4">
<div class="card shadow-sm border-0 rounded-3"> <h3 class="mb-0 fs-4 fw-bold text-center">
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3"> {% trans "Finance Details for" %}
<h3 class="mb-0 fs-4 text-center"> <span class="text-gray-300">{{car.id_car_make.name}}&nbsp;{{car.id_car_model.name}}&nbsp;{{car.id_car_serie.serie}}&nbsp;{{car.year}}</span>
{% trans "Finance Details for" %}<span class="fas fa-solid fa-car text-primary ms-2"></span>&nbsp;{{ car.id_car_make.get_local_name }} - {{ car.id_car_model.get_local_name }} <i class="fas fa-solid fa-car ms-2"></i>
</h3> </h3>
{% if form.errors %} <p class="text-center mt-1">VIN:&nbsp;&nbsp;{{car.vin}}</p>
<div class="alert alert-danger">
<ul>
{% for field in form %}
{% for error in field.errors %}<li>{{ field.label }}: {{ error }}</li>{% endfor %}
{% endfor %}
{% for error in form.non_field_errors %}<li>{{ error }}</li>{% endfor %}
</ul>
</div>
{% endif %}
</div> </div>
<div class="card-body bg-light-subtle"> <div class="card-body p-4 p-md-5">
{% if form.errors %}
<div class="alert alert-danger mt-4" role="alert">
<h4 class="alert-heading small">{% trans "Please correct the following errors:" %}</h4>
<ul class="mb-0">
{% for field, errors in form.errors.items %}
<li><strong>{{ field|capfirst }}:</strong> {% for error in errors %}{{ error }}{% endfor %}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<form method="post" class="needs-validation" novalidate> <form method="post" class="needs-validation" novalidate>
<div class="row g-1"> <div class="row g-1">
<div class="col-lg-4 col-xl-12"> <div class="col-lg-4 col-xl-12">
{% csrf_token %} {% csrf_token %}
{{ form|crispy }} {{ form|crispy }}
</div> </div>
</div> </div>
<hr class="my-4">
<hr class="my-2">
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3"> <div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
<button class="btn btn-lg btn-phoenix-primary md-me-2" type="submit"><i class="fa-solid fa-floppy-disk me-1"></i>{{ _("Save") }}</button> <button class="btn btn-phoenix-primary btn-lg me-md-2" type="submit">
<a href="{% url 'car_detail' request.dealer.slug car.slug %}" class="btn btn-lg btn-phoenix-secondary"><i class="fa-solid fa-ban me-1"></i>{% trans "Cancel" %}</a> <i class="fa-solid fa-floppy-disk me-1"></i>
{{ _("Save") }}
</button>
<a href="{% url 'car_detail' request.dealer.slug car.slug %}" class="btn btn-phoenix-secondary btn-lg">
<i class="fa-solid fa-ban me-1"></i>
{% trans "Cancel" %}
</a>
</div> </div>
</form> </form>
</div> </div>
</div> </div>
</div> </div>
<!----> </main>
<!-- JavaScript Section --> {% endblock %}
{% endblock %}

View File

@ -24,7 +24,6 @@
</style> </style>
{% endblock customCSS %} {% endblock customCSS %}
{% block content %} {% block content %}
{% if cars or request.GET.q%} {% if cars or request.GET.q%}
<div class="container-fluid" id="projectSummary"> <div class="container-fluid" id="projectSummary">
<div class="row g-3 justify-content-between align-items-end mb-4"> <div class="row g-3 justify-content-between align-items-end mb-4">
@ -269,11 +268,11 @@
<div class="dropdown-menu dropdown-menu-end py-2"> <div class="dropdown-menu dropdown-menu-end py-2">
<a class="dropdown-item" <a class="dropdown-item"
href="{% url 'car_detail' request.dealer.slug car.slug %}"> <span class="fas fa-eye me-2"></span>{{ _("View") }} </a> href="{% url 'car_detail' request.dealer.slug car.slug %}"> <span class="fas fa-eye me-2"></span>{{ _("View") }} </a>
{% if perms.inventory.change_car %} {% if perms.inventory.change_car and not car.status == 'sold' %}
<a class="dropdown-item" <a class="dropdown-item"
href="{% url 'car_update' request.dealer.slug car.slug %}"> <span class="fas fa-edit me-2"></span>{{ _("Edit") }} </a> href="{% url 'car_update' request.dealer.slug car.slug %}"> <span class="fas fa-edit me-2"></span>{{ _("Edit") }} </a>
{% endif %} {% endif %}
{% if perms.inventory.delete_car %} {% if perms.inventory.delete_car and not car.status == 'sold' %}
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<a class="dropdown-item text-danger" <a class="dropdown-item text-danger"
href="{% url 'car_delete' request.dealer.slug car.slug %}"> <span class="fas fa-trash me-2"></span>{{ _("Remove") }} </a> href="{% url 'car_delete' request.dealer.slug car.slug %}"> <span class="fas fa-trash me-2"></span>{{ _("Remove") }} </a>

View File

@ -6,31 +6,35 @@
{{ _("Add New Expense") }} {{ _("Add New Expense") }}
{% endblock title %} {% endblock title %}
{% block content %} {% block content %}
<main class="d-flex align-items-center justify-content-center min-vh-80 py-5">
<!----> <div class="col-md-6">
<div class="row justify-content-center mt-5 mb-3"> <div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
<div class="card-header bg-gradient py-4 border-0 rounded-top-4">
<div class="col-lg-8 col-md-10"> <h3 class="mb-0 fs-4 fw-bold text-center">
<div class="card shadow-sm border-0 rounded-3"> {{ _("Add Expense") }}
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3"> <i class="fas fa-money-bill-wave ms-2"></i>
<h3 class="mb-0 fs-4 text-center"> </h3>
{{ _("Add Expense") }}
<span class="fas fa-money-bill-wave ms-2 text-primary"></span>
</h3>
</div> </div>
<div class="card-body bg-light-subtle"> <div class="card-body p-4 p-md-5">
<form method="post" action=""> <form method="post" action="" class="needs-validation" novalidate>
{% csrf_token %} {% csrf_token %}
{{ form|crispy }} {{ form|crispy }}
<hr class="my-2"> <hr class="my-4">
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3"> <div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
<button class="btn btn-lg btn-phoenix-primary md-me-2" type="submit"><i class="fa-solid fa-floppy-disk me-1"></i>{{ _("Save") }}</button> <button class="btn btn-phoenix-primary btn-lg me-md-2" type="submit">
<a href="{% url 'item_expense_list' request.dealer.slug %}" class="btn btn-lg btn-phoenix-secondary"><i class="fa-solid fa-ban me-1"></i>{% trans "Cancel" %}</a> <i class="fa-solid fa-floppy-disk me-1"></i>
</div> {{ _("Save") }}
</button>
<a href="{% url 'item_expense_list' request.dealer.slug %}"
class="btn btn-phoenix-secondary btn-lg">
<i class="fa-solid fa-ban me-1"></i>
{% trans "Cancel" %}
</a>
</div>
</form> </form>
</div> </div>
</div> </div>
</div> </div>
<!----> </main>
{% endblock content %} {% endblock content %}

View File

@ -6,48 +6,34 @@
{{ _("Update Expense") }} {{ _("Update Expense") }}
{% endblock title %} {% endblock title %}
{% block content %} {% block content %}
{% comment %} <div class="row"> <main class="d-flex align-items-center justify-content-center min-vh-80 py-5">
<div class="row justify-content-center"> <div class="col-md-6">
<div class="col-md-8"> <div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
<div class="card"> <div class="card-header bg-gradient py-4 border-0 rounded-top-4">
<div class="card-header">{{ _("Update Expense") }}</div> <h3 class="mb-0 fs-4 fw-bold text-center">
<div class="card-body"> {{ _("Update Expense") }}
<form method="post" action=""> <i class="fas fa-money-bill-wave ms-2"></i>
{% csrf_token %} </h3>
{{ form|crispy }}
<button type="submit" class="btn btn-phoenix-primary">{% trans 'Save' %}</button>
</form>
</div>
</div>
</div> </div>
</div> <div class="card-body p-4 p-md-5">
</div> {% endcomment %} <form method="post" action="" class="needs-validation" novalidate>
<!----> {% csrf_token %}
<div class="row justify-content-center mt-5 mb-3"> {{ form|crispy }}
<hr class="my-4">
<div class="col-lg-8 col-md-10">
<div class="card shadow-sm border-0 rounded-3">
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3">
<h3 class="mb-0 fs-4 text-center">
{{ _("Update Expense") }}
<span class="fas fa-money-bill-wave ms-2 text-primary"></span>
</h3>
</div>
<div class="card-body bg-light-subtle">
<form method="post" action="">
{% csrf_token %}
{{ form|crispy }}
<hr class="my-2">
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3"> <div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
<button class="btn btn-lg btn-phoenix-success md-me-2" type="submit"><i class="fa-solid fa-floppy-disk me-1"></i>{{ _("Save") }}</button> <button class="btn btn-phoenix-primary btn-lg me-md-2" type="submit">
<a href="{% url 'item_expense_list' request.dealer.slug %}" class="btn btn-lg btn-phoenix-danger"><i class="fa-solid fa-ban me-1"></i>{% trans "Cancel" %}</a> <i class="fa-solid fa-floppy-disk me-1"></i>
{{ _("Save") }}
</button>
<a href="{% url 'item_expense_list' request.dealer.slug %}"
class="btn btn-phoenix-danger btn-lg">
<i class="fa-solid fa-ban me-1"></i>
{% trans "Cancel" %}
</a>
</div> </div>
</form> </form>
</div> </div>
</div> </div>
</div> </div>
<!----> </main>
{% endblock content %} {% endblock content %}

View File

@ -3,7 +3,7 @@
{% load static %} {% load static %}
{% load i18n %} {% load i18n %}
{% block title %} {% block title %}
{# Check if an 'object' exists in the context #} {# Check if an 'object' exists in the context #}
{% if object %} {% if object %}
{% trans 'Update Service' %} {% trans 'Update Service' %}
{% else %} {% else %}
@ -11,39 +11,50 @@
{% endif %} {% endif %}
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<main class="d-flex align-items-center justify-content-center min-vh-100 py-5">
<!----> <div class="col-12 col-sm-10 col-md-8 col-lg-6 col-xl-5">
<div class="row justify-content-center mt-5 mb-3"> <div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
<div class="card-header bg-gradient py-4 border-0 rounded-top-4">
<div class="col-lg-8 col-md-10"> <h3 class="mb-0 fs-4 fw-bold text-center">
<div class="card shadow-sm border-0 rounded-3"> {% if object %}
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3"> {% trans "Update Service" %}
<h3 class="mb-0 fs-4 text-center"> <i class="fas fa-tools ms-2"></i>
{% if service.pk %} {% else %}
{{ _("Update Service") }} {% trans "Add New Service" %}
{% else %} <i class="fas fa-tools ms-2"></i>
{{ _("Add Service") }} {% endif %}
{% endif %} </h3>
<span class="fas fa-tools ms-2 text-primary"></span>
</h3>
</div> </div>
<div class="card-body bg-light-subtle"> <div class="card-body p-4 p-md-5">
<form method="post" action="" class="needs-validation" novalidate>
{% csrf_token %}
{{ form|crispy }}
{% if form.errors %}
<div class="alert alert-danger mt-4" role="alert">
<h4 class="alert-heading small">{% trans "Please correct the following errors:" %}</h4>
<ul class="mb-0">
{% for field, errors in form.errors.items %}
<li><strong>{{ field|capfirst }}:</strong> {% for error in errors %}{{ error }}{% endfor %}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<form method="post" action=""> <hr class="my-4">
{% csrf_token %} <div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
{{ form|crispy }} <button class="btn btn-phoenix-primary btn-lg me-md-2" type="submit">
<i class="fa-solid fa-floppy-disk me-1"></i>
<hr class="my-2"> {{ _("Save") }}
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3"> </button>
<button class="btn btn-lg btn-phoenix-primary md-me-2" type="submit"><i class="fa-solid fa-floppy-disk me-1"></i>{{ _("Save") }}</button> <a href="{% url 'item_service_list' request.dealer.slug %}" class="btn btn-phoenix-secondary btn-lg">
<a href="{% url 'item_service_list' request.dealer.slug%}" class="btn btn-lg btn-phoenix-secondary"><i class="fa-solid fa-ban me-1"></i>{% trans "Cancel" %}</a> <i class="fa-solid fa-ban me-1"></i>
</div> {% trans "Cancel" %}
</a>
</div>
</form> </form>
</div> </div>
</div> </div>
</div> </div>
<!----> </main>
{% endblock content %} {% endblock content %}

View File

@ -2,7 +2,7 @@
{% load i18n %} {% load i18n %}
{% load crispy_forms_filters %} {% load crispy_forms_filters %}
{% block title %} {% block title %}
{# Check if an 'object' exists in the context #} {# Check if an 'object' exists in the context #}
{% if object %} {% if object %}
{% trans 'Update Bank Account' %} {% trans 'Update Bank Account' %}
{% else %} {% else %}
@ -10,41 +10,50 @@
{% endif %} {% endif %}
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<main class="d-flex align-items-center justify-content-center min-vh-100 py-5 ">
<!----> <div class="col-md-8">
<div class="row justify-content-center mt-5 mb-3"> <div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
<div class="col-lg-8 col-md-10"> <div class="card-header bg-gradient py-4 border-0 rounded-top-4">
<div class="card shadow-sm border-0 rounded-3"> <h3 class="mb-0 fs-4 fw-bold text-center">
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3"> {% if object %}
<h3 class="mb-0 fs-4 text-center"> {% trans "Update Bank Account" %}
{% if customer.created %} <i class="fa-solid fa-bank ms-2"></i>
{{ _("Edit Bank Account") }} {% else %}
{% else %} {% trans "Add New Bank Account" %}
{{ _("Add Bank Account") }} <i class="fa-solid fa-bank ms-2"></i>
{% endif %} {% endif %}
<span class="fas fa-bank ms-2 text-primary"></span> </h3>
</h3>
</div> </div>
<div class="card-body bg-light-subtle"> <div class="card-body p-4 p-md-5">
<form method="post" class="needs-validation" novalidate>
<form method="post" class="form" novalidate> {% csrf_token %}
{% csrf_token %} {{ form|crispy }}
{{ form|crispy }}
{% for error in form.errors %}
<div class="text-danger">{{ error }}</div>
{% endfor %}
<hr class="my-2">
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
<button class="btn btn-lg btn-phoenix-primary md-me-2" type="submit"><i class="fa-solid fa-floppy-disk me-1"></i>{{ _("Save") }}</button>
<a href="{% url 'bank_account_list' request.dealer.slug%}" class="btn btn-lg btn-phoenix-secondary"><i class="fa-solid fa-ban me-1"></i>{% trans "Cancel" %}</a>
</div>
</form>
{% if form.errors %}
<div class="alert alert-danger mt-4" role="alert">
<h4 class="alert-heading small">{% trans "Please correct the following errors:" %}</h4>
<ul class="mb-0">
{% for field, errors in form.errors.items %}
<li><strong>{{ field|capfirst }}:</strong> {% for error in errors %}{{ error }}{% endfor %}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<hr class="my-4">
<div class="d-grid gap-2 d-md-flex justify-content-md-center">
<button class="btn btn-phoenix-primary btn-lg me-md-2" type="submit">
<i class="fa-solid fa-floppy-disk me-1"></i>
{% trans "Save" %}
</button>
<a href="{% url 'bank_account_list' request.dealer.slug %}" class="btn btn-phoenix-secondary btn-lg">
<i class="fa-solid fa-ban me-1"></i>
{% trans "Cancel" %}
</a>
</div>
</form>
</div> </div>
</div> </div>
</div> </div>
<!----> </main>
{% endblock %} {% endblock %}

View File

@ -5,42 +5,36 @@
{{ _("Create Journal Entry") }} {{ _("Create Journal Entry") }}
{% endblock title %} {% endblock title %}
{% block content %} {% block content %}
{% comment %} <div class="row mt-4"> <main class="d-flex align-items-center justify-content-center min-vh-100 py-5">
<h3 class="text-center">{% trans "Create Journal Entry" %}</h3> <div class="col-12 col-sm-10 col-md-8 col-lg-6 col-xl-5">
<form id="mainForm" method="post" class="needs-validation"> <div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
{% csrf_token %} <div class="card-header bg-gradient py-4 border-0 rounded-top-4">
<div class="row g-3"> <h3 class="mb-0 fs-4 fw-bold text-center">
{{ form|crispy }} {% trans "Create Journal Entry" %}
<i class="fas fa-book-open ms-2"></i>
</h3>
</div> </div>
<div class="mt-5 text-center"> <div class="card-body p-4 p-md-5">
<button type="submit" class="btn btn-phoenix-success me-2"><i class="fa-solid fa-floppy-disk me-1"></i>{% trans "Save" %}</button> <form id="mainForm" method="post" class="needs-validation" novalidate>
<a href="{% url 'journalentry_list' request.dealer.slug ledger.pk %}" class="btn btn-phoenix-secondary"><i class="fa-solid fa-ban me-1"></i> {% trans "Cancel" %}</a> {% csrf_token %}
</div> <div class="row g-3">
</form> {{ form|crispy }}
</div> {% endcomment %} </div>
<!----> <hr class="my-4">
<div class="row justify-content-center mt-5 mb-3"> <div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
<div class="col-lg-8 col-md-10"> <button class="btn btn-phoenix-primary btn-lg me-md-2" type="submit">
<div class="card shadow-sm border-0 rounded-3"> <i class="fa-solid fa-floppy-disk me-1"></i>
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3"> {{ _("Save") }}
<h3 class="mb-0 fs-4 text-center text-white">{% trans "Create Journal Entry" %}</h3> </button>
</div> <a href="{% url 'journalentry_list' request.dealer.slug ledger.pk %}"
<div class="card-body bg-light-subtle"> class="btn btn-phoenix-secondary btn-lg">
<form id="mainForm" method="post" class="needs-validation"> <i class="fa-solid fa-ban me-1"></i>
{% csrf_token %} {% trans "Cancel" %}
<div class="row g-3">{{ form|crispy }}</div> </a>
<hr class="my-2"> </div>
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3"> </form>
<button class="btn btn-lg btn-phoenix-success md-me-2" type="submit">
<i class="fa-solid fa-floppy-disk me-1"></i>{{ _("Save") }}
</button>
<a href="{% url 'journalentry_list' request.dealer.slug ledger.pk %}"
class="btn btn-lg btn-phoenix-secondary"><i class="fa-solid fa-ban me-1"></i> {% trans "Cancel" %}</a>
</div>
</form>
</div>
</div> </div>
</div> </div>
</div> </div>
<!----> </main>
{% endblock content %} {% endblock content %}

View File

@ -5,38 +5,36 @@
{{ _("Create Ledger") }} {{ _("Create Ledger") }}
{% endblock title %} {% endblock title %}
{% block content %} {% block content %}
<!----> <main class="d-flex align-items-center justify-content-center min-vh-100 py-5 ">
<div class="row justify-content-center mt-5 mb-3"> <div class="col-12 col-sm-10 col-md-8 col-lg-6 col-xl-5">
<div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
<div class="col-lg-8 col-md-10"> <div class="card-header bg-gradient py-4 border-0 rounded-top-4">
<div class="card shadow-sm border-0 rounded-3"> <h3 class="mb-0 fs-4 fw-bold text-center">
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3"> {% trans "Create Ledger" %}
<h3 class="mb-0 fs-4 text-center"> <i class="fas fa-book-open ms-2"></i>
{% trans "Create Ledger" %} </h3>
<span class="fas fa-book-open ms-2 text-primary"></span>
</h3>
</div> </div>
<div class="card-body bg-light-subtle"> <div class="card-body p-4 p-md-5">
<form id="mainForm" method="post" class="needs-validation" novalidate>
<form id="mainForm" method="post" class="needs-validation">
{% csrf_token %} {% csrf_token %}
<div class="row g-3"> <div class="row g-3">
{{ form|crispy }} {{ form|crispy }}
</div>
<hr class="my-2">
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
<button class="btn btn-lg btn-phoenix-primary md-me-2" type="submit"><i class="fa-solid fa-floppy-disk me-1"></i>{{ _("Save") }}</button>
<a href="{% url 'ledger_list' request.dealer.slug request.entity.slug %}" class="btn btn-lg btn-phoenix-secondary"><i class="fa-solid fa-ban me-1"></i>{% trans "Cancel" %}</a>
</div> </div>
<hr class="my-4">
</form> <div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
<button class="btn btn-phoenix-primary btn-lg me-md-2" type="submit">
<i class="fa-solid fa-floppy-disk me-1"></i>
{{ _("Save") }}
</button>
<a href="{% url 'ledger_list' request.dealer.slug request.entity.slug %}" class="btn btn-phoenix-secondary btn-lg">
<i class="fa-solid fa-ban me-1"></i>
{% trans "Cancel" %}
</a>
</div>
</form>
</div> </div>
</div> </div>
</div> </div>
<!----> </main>
{% endblock content %} {% endblock content %}

View File

@ -4,37 +4,69 @@
{% trans "Organization Details" %} {% trans "Organization Details" %}
{% endblock title %} {% endblock title %}
{% block content %} {% block content %}
<div class="row my-4"> <main class="py-5 min-vh-80 d-flex justify-content-center align-items-center">
<h2 class="mb-2">{{ organization.get_local_name }}</h2> <div class="container py-4">
<ul class="list-group mb-4"> <div class="row justify-content-center">
<li class="list-group-item"> <div class="col-12 col-lg-8 col-xl-6">
<strong>{% trans "CRN" %}:</strong> {{ organization.crn }} <div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
</li> <div class="card-header bg-gradient py-4 border-0 rounded-top-4">
<li class="list-group-item"> <h2 class="card-title mb-0 fs-3 fw-bold text-center">
<strong>{% trans "VRN" %}:</strong> {{ organization.vrn }} <i class="fas fa-building me-2"></i>
</li> {{ organization.get_local_name }}
<li class="list-group-item"> </h2>
<strong>{% trans "Phone" %}:</strong> {{ organization.phone_number }} </div>
</li> <div class="card-body p-4 p-md-5">
<li class="list-group-item"> <ul class="list-group list-group-flush rounded-3 border">
<strong>{% trans "Address" %}:</strong> {{ organization.address }} <li class="list-group-item d-flex justify-content-between align-items-center p-3">
</li> <div class=" fw-semibold">
</ul> <i class="fas fa-id-card-alt me-2 text-primary"></i>
<div class="d-flex"> {% trans "CRN" %}:
{% if perms.inventory.change_organization %} </div>
<a href="{% url 'organization_update' request.dealer.slug organization.slug %}" <span class="">{{ organization.crn }}</span>
class="btn btn-sm btn-phoenix-primary me-2"><span class="fas fa-edit me-1"></span>{% trans "Edit" %}</a> </li>
{% endif %} <li class="list-group-item d-flex justify-content-between align-items-center p-3">
{% if perms.inventory.delete_organization %} <div class=" fw-semibold">
<button class="btn btn-phoenix-danger btn-sm delete-btn" <i class="fas fa-receipt me-2 text-primary"></i>
data-url="{% url 'organization_delete' request.dealer.slug organization.slug %}" {% trans "VRN" %}:
data-message="Are you sure you want to delete this organization?" </div>
data-bs-toggle="modal" <span class="">{{ organization.vrn }}</span>
data-bs-target="#deleteModal"> </li>
<i class="fas fa-trash me-1"></i> {% trans 'Delete' %} <li class="list-group-item d-flex justify-content-between align-items-center p-3">
</button> <div class="fw-semibold">
{% endif %} <i class="fas fa-phone-alt me-2 text-primary"></i>
{% trans "Phone" %}:
</div>
<span class="">{{ organization.phone_number }}</span>
</li>
<li class="list-group-item d-flex justify-content-between align-items-center p-3">
<div class="fw-semibold">
<i class="fas fa-map-marker-alt me-2 text-primary"></i>
{% trans "Address" %}:
</div>
<span class=" text-end ms-3">{{ organization.address }}</span>
</li>
</ul>
<div class="d-grid gap-2 d-sm-flex justify-content-sm-center mt-4 pt-2">
{% if perms.inventory.change_organization %}
<a href="{% url 'organization_update' request.dealer.slug organization.slug %}"
class="btn btn-phoenix-primary btn-lg flex-grow-1"><i class="fas fa-edit me-2"></i>{% trans "Edit Details" %}</a>
{% endif %}
{% if perms.inventory.delete_organization %}
<button class="btn btn-phoenix-danger btn-lg delete-btn flex-grow-1"
data-url="{% url 'organization_delete' request.dealer.slug organization.slug %}"
data-message="Are you sure you want to delete this organization?"
data-bs-toggle="modal"
data-bs-target="#deleteModal">
<i class="fas fa-trash me-2"></i>{% trans 'Delete' %}
</button>
{% endif %}
</div>
</div>
</div>
</div>
</div> </div>
</div> </div>
{% include 'modal/delete_modal.html' %} </main>
{% endblock %} {% include 'modal/delete_modal.html' %}
{% endblock %}

View File

@ -1,44 +1,61 @@
{% extends 'base.html' %} {% extends "base.html" %}
{% load i18n %} {% load i18n %}
{% load crispy_forms_filters %} {% load crispy_forms_filters %}
{% block title %} {% block title %}
{# Check if an 'object' exists in the context #}
{% if object %} {% if object %}
{% trans 'Update Organization' %} {% trans 'Update Organization' %}
{% else %} {% else %}
{% trans 'Add New Organization' %} {% trans 'Add New Organization' %}
{% endif %} {% endif %}
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<div class="row justify-content-center mt-5 mb-3"> <main class="d-flex align-items-center justify-content-center min-vh-100 py-5">
<div class="col-lg-8 col-md-10"> <div class="col-md-8">
<div class="card shadow-sm border-0 rounded-3"> <div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3"> <div class="card-header bg-gradient py-4 border-0 rounded-top-4">
<h3 class="mb-0 fs-4 text-center"> <h3 class="mb-0 fs-4 fw-bold text-center">
{% if object %} {% if object %}
{% trans 'Update Organization'%} {% trans 'Update Organization' %}
{% else %} <i class="fa-solid fa-edit ms-2"></i>
{% trans 'Add New Organization'%} {% else %}
{% endif %} {% trans 'Add New Organization' %}
<span class=" fas fa-solid fa-city ms-2 text-primary"></span> <i class="fa-solid fa-building ms-2"></i>
</h3> {% endif %}
</h3>
</div> </div>
<div class="card-body bg-light-subtle"> <div class="card-body p-4 p-md-5">
<form class="form" method="post" enctype="multipart/form-data"> <form class="form" method="post" enctype="multipart/form-data">
{% csrf_token %} {% csrf_token %}
{{ redirect_field }} {{ redirect_field }}
{{ form|crispy }} {{ form|crispy }}
<hr class="my-2"> {% if form.errors %}
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3"> <div class="alert alert-danger mt-4" role="alert">
<button class="btn btn-lg btn-phoenix-primary md-me-2" type="submit"><i class="fa-solid fa-floppy-disk me-1"></i>{{ _("Save") }}</button> <h4 class="alert-heading small">{% trans "Please correct the following errors:" %}</h4>
<a href="{% url 'organization_list' request.dealer.slug %}" class="btn btn-lg btn-phoenix-secondary"><i class="fa-solid fa-ban me-1"></i>{% trans "Cancel" %}</a> <ul class="mb-0">
</div> {% for field, errors in form.errors.items %}
<li><strong>{{ field|capfirst }}:</strong> {% for error in errors %}{{ error }}{% endfor %}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<hr class="my-4">
<div class="d-grid gap-2 d-md-flex justify-content-md-center">
<button class="btn btn-phoenix-primary btn-lg me-md-2" type="submit">
<i class="fa-solid fa-floppy-disk me-1"></i>
{% trans "Save" %}
</button>
<a href="{% url 'organization_list' request.dealer.slug %}" class="btn btn-phoenix-secondary btn-lg">
<i class="fa-solid fa-ban me-1"></i>
{% trans "Cancel" %}
</a>
</div>
</form> </form>
</div> </div>
</div> </div>
</div> </div>
{% endblock %} </main>
{% endblock %}

View File

@ -1,60 +1,39 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load i18n crispy_forms_filters %} {% load i18n crispy_forms_filters %}
{% block title %} {% block title %}
{% trans 'Billing Information' %}{% endblock %} {% trans 'Billing Information' %}
{% block content %} {% endblock %}
{% comment %} <div class="row mb-3"> {% block content %}
<div class="col-sm-6"> <main class="d-flex align-items-center justify-content-center min-vh-80 py-5">
<form action="{% url 'billing_info' %}{% if request.GET.next %}?next={{ request.GET.next }}{% endif %}" method="post" class="form"> <div class="col-md-8">
<div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
<div class="card-header bg-gradient py-4 border-0 rounded-top-4">
<h3>{% trans "Provide billing data"|upper %}</h3> <h3 class="mb-0 fs-4 fw-bold text-center">
{% csrf_token %} {% trans "Provide billing data"|upper %}
{{ form|crispy }} <i class="fas fa-file-invoice-dollar ms-2"></i>
</h3>
<button type="submit" class="btn btn-sm btn-phoenix-success me-2">
<i class="fa fa-save me-1"></i>{{ _("Save") }}
</button>
{% if object %}
<a class="btn btn-sm btn-phoenix-danger " href="{% url 'billing_info_delete' %}"><i class="fa-solid fa-trash me-1"></i> {{ _("Delete") }}</a>
{% endif %}
</form>
</div>
</div> {% endcomment %}
<!---->
<div class="row justify-content-center mt-5 mb-3">
<div class="col-lg-8 col-md-10">
<div class="card shadow-sm border-0 rounded-3">
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3">
<h3 class="mb-0 fs-4 text-center">
{% trans "Provide billing data"|upper %}<span class="fas fa-file-invoice-dollar ms-2 text-primary"></span>
</h3>
</div> </div>
<div class="card-body bg-light-subtle"> <div class="card-body p-4 p-md-5">
<form action="{% url 'billing_info' %}{% if request.GET.next %}?next={{ request.GET.next }}{% endif %}"
method="post" class="needs-validation" novalidate>
<form action="{% url 'billing_info' %}{% if request.GET.next %}?next={{ request.GET.next }}{% endif %}" method="post" class="form"> {% csrf_token %}
{% csrf_token %} {{ form|crispy }}
{{ form|crispy }} <hr class="my-4">
<hr class="my-2">
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3"> <div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
<button class="btn btn-lg btn-phoenix-primary md-me-2" type="submit"><i class="fa-solid fa-floppy-disk me-1"></i>{{ _("Save") }}</button> <button class="btn btn-phoenix-primary btn-lg me-md-2" type="submit">
{% if object %} <i class="fa-solid fa-floppy-disk me-1"></i>
<a class="btn btn-lg btn-phoenix-danger" href="{% url 'billing_info_delete' %}"><i class="fa-solid fa-trash me-1"></i> {{ _("Delete") }}</a> {{ _("Save") }}
{% endif %} </button>
{% if object %}
</div> <a class="btn btn-phoenix-danger btn-lg" href="{% url 'billing_info_delete' %}">
<i class="fa-solid fa-trash me-1"></i>
</form> {{ _("Delete") }}
</a>
{% endif %}
</div>
</form>
</div> </div>
</div> </div>
<!----> </div>
{% endblock %} </main>
{% endblock %}

View File

@ -121,7 +121,7 @@
width: 0; width: 0;
} }
</style> </style>
<div class="row justify-content-center mt-5 mb-3"> <div class="row d-flex justify-content-center align-items-center mt-5 mb-3 ms-6 ps-3" >
<div class="row"> <div class="row">
<div class="col"> <div class="col">
{% if not items %} {% if not items %}
@ -137,19 +137,19 @@
{% endif %} {% endif %}
</div> </div>
<div> <div>
<div class="col-lg-12 col-md-10 needs-validation {% if not items or not customer_count %}d-none{% endif %}"> <div class="col-md-10 ms-4 needs-validation {% if not items or not customer_count %}d-none{% endif %}">
<div class="card shadow-sm border-0 rounded-3"> <div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3"> <div class="card-header bg-gradient py-4 border-0 rounded-top-4">
<h3 class="mb-0 fs-4 text-center"> <h3 class="mb-0 fs-4 text-center">
{% trans "Create Quotation" %}<i class="fa-regular fa-file-lines text-primary ms-2"></i> {% trans "Create Quotation" %}<i class="fa-regular fa-file-lines ms-2"></i>
</h3> </h3>
</div> </div>
<div class="card-body bg-light-subtle"> <div class="card-body p-4 p-md-5">
<form id="mainForm" method="post" class="needs-validation {% if not items and not customer_count %}d-none{% endif %}"> <form id="mainForm" method="post" class="needs-validation {% if not items and not customer_count %}d-none{% endif %}">
{% csrf_token %} {% csrf_token %}
<div class="row g-3 col-12"> <div class="row g-3">
{{ form|crispy }} {{ form|crispy }}
<div class="custom-select"> <div class="custom-select">
<!-- Hidden native select for form submission --> <!-- Hidden native select for form submission -->

View File

@ -6,20 +6,33 @@
{{ _("Sale Order") }} {{ _("Sale Order") }}
{% endblock title %} {% endblock title %}
{% block content %} {% block content %}
<div class="row"> <main class="d-flex align-items-center justify-content-center min-vh-80 py-5">
<div class="row justify-content-center"> <div class="col-12 col-sm-10 col-md-8 col-lg-6 col-xl-5">
<div class="col-md-8"> <div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
<div class="card"> <div class="card-header bg-gradient py-4 border-0 rounded-top-4">
<div class="card-header">{{ _("Sale Order") }}</div> <h3 class="mb-0 fs-4 fw-bold text-center">
<div class="card-body"> {{ _("Create Sale Order") }}
<form method="post" action="{% url 'create_sale_order' request.dealer.slug estimate.pk %}"> <i class="fas fa-file-invoice-dollar ms-2"></i>
{% csrf_token %} </h3>
{{ form|crispy }} </div>
<button type="submit" class="btn btn-phoenix-primary">{% trans 'Save' %}</button> <div class="card-body p-4 p-md-5">
</form> <form method="post" action="{% url 'create_sale_order' request.dealer.slug estimate.pk %}" class="needs-validation" novalidate>
{% csrf_token %}
{{ form|crispy }}
<hr class="my-4">
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
<button class="btn btn-phoenix-primary btn-lg me-md-2" type="submit">
<i class="fa-solid fa-floppy-disk me-1"></i>
{% trans 'Save' %}
</button>
<a href="{% url 'home' request.dealer.slug %}" class="btn btn-phoenix-secondary btn-lg">
<i class="fa-solid fa-ban me-1"></i>
{% trans "Cancel" %}
</a>
</div> </div>
</div> </form>
</div> </div>
</div> </div>
</div> </div>
</main>
{% endblock content %} {% endblock content %}

View File

@ -6,30 +6,34 @@
{{ _("Invoice") }} {{ _("Invoice") }}
{% endblock title %} {% endblock title %}
{% block content %} {% block content %}
<div class="row paid justify-content-center mt-5 mb-3"> <main class="d-flex align-items-center justify-content-center min-vh-80 py-5">
<div class="col-lg-8 col-md-10"> <div class="col-12 col-sm-10 col-md-8 col-lg-6 col-xl-5">
<div class="card shadow-sm border-0 rounded-3"> <div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3"> <div class="card-header bg-gradient py-4 border-0 rounded-top-4">
<h3 class="mb-0 fs-4 text-center"> <h3 class="mb-0 fs-4 fw-bold text-center">
{{ _("Add Invoice") }}<i class="fa-solid fa-receipt ms-2 text-primary"></i> {{ _("Add Invoice") }}
</h3> <i class="fa-solid fa-receipt ms-2"></i>
</h3>
</div> </div>
<div class="card-body bg-light-subtle"> <div class="card-body p-4 p-md-5">
<form method="post" action="" class="needs-validation" novalidate>
{% csrf_token %}
<form method="post" action=""> {{ form|crispy }}
{% csrf_token %} <hr class="my-4">
{{ form|crispy }} <div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
<button class="btn btn-phoenix-primary btn-lg me-md-2" type="submit">
<hr class="my-2"> <i class="fa-solid fa-floppy-disk me-1"></i>
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3"> {{ _("Save") }}
<button class="btn btn-lg btn-phoenix-success md-me-2" type="submit"><i class="fa-solid fa-floppy-disk me-1"></i>{{ _("Save") }}</button> </button>
<a href="{% url 'invoice_list' request.dealer.slug %}" class="btn btn-lg btn-phoenix-danger"><i class="fa-solid fa-ban me-1"></i>{% trans "Cancel" %}</a> <a href="{% url 'invoice_list' request.dealer.slug %}"
</div> class="btn btn-phoenix-danger btn-lg">
</form> <i class="fa-solid fa-ban me-1"></i>
</div> {% trans "Cancel" %}
</a>
</div>
</form>
</div> </div>
</div> </div>
</div> </div>
<!----> </main>
{% endblock content %} {% endblock content %}

View File

@ -4,18 +4,33 @@
{% load i18n %} {% load i18n %}
{% block content %} {% block content %}
<div class="card"> <main class="d-flex align-items-center justify-content-center min-vh-80 py-5">
<div class="card-header bg-primary text-white"> <div class="col-12 col-sm-10 col-md-8 col-lg-6 col-xl-5">
<h2 class="h4 mb-0">Create Support Ticket</h2> <div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
<div class="card-header bg-gradient py-4 border-0 rounded-top-4">
<h3 class="mb-0 fs-4 fw-bold text-center">
{% trans "Create Support Ticket" %}
<i class="fa-solid fa-headset ms-2"></i>
</h3>
</div>
<div class="card-body p-4 p-md-5">
<form method="post" class="needs-validation" novalidate>
{% csrf_token %}
{{ form|crispy }}
<hr class="my-4">
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
<button type="submit" class="btn btn-phoenix-primary btn-lg me-md-2">
<i class="fa-solid fa-paper-plane me-1"></i>
{% trans "Submit Ticket" %}
</button>
<a href="{% url 'ticket_list' request.dealer.slug %}" class="btn btn-phoenix-secondary btn-lg">
<i class="fa-solid fa-ban me-1"></i>
{% trans "Cancel" %}
</a>
</div>
</form>
</div>
</div>
</div> </div>
<div class="card-body"> </main>
<form method="post"> {% endblock %}
{% csrf_token %}
{{form|crispy}}
<button type="submit" class="btn btn-primary">Submit Ticket</button>
<a href="{% url 'ticket_list' request.dealer.slug %}" class="btn btn-secondary">Cancel</a>
</form>
</div>
</div>
{% endblock %}

View File

@ -2,59 +2,76 @@
{% load static %} {% load static %}
{% load crispy_forms_tags %} {% load crispy_forms_tags %}
{% load i18n %} {% load i18n %}
{% block title %}
{% trans 'Ticket' %} #{{ ticket.id }}
{% endblock title %}
{% block content %} {% block content %}
<div class="card"> <main class="d-flex align-items-center justify-content-center min-vh-80 py-5 ">
<div class="card-header d-flex justify-content-between align-items-center"> <div class="col-12 col-sm-10 col-md-8 col-lg-6 col-xl-5">
<h2 class="h4 mb-0">Ticket #{{ ticket.id }}: {{ ticket.subject }}</h2> <div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
<div> <div class="card-header bg-gradient py-4 border-0 rounded-top-4">
<a href="{% url 'ticket_list' request.dealer.slug %}" class="btn btn-sm btn-outline-secondary"> <h3 class="mb-0 fs-4 fw-bold text-center">
Back to List {% trans 'Ticket' %} #{{ ticket.id }}
</a> <i class="fas fa-headset ms-2"></i>
</h3>
</div>
<div class="card-body p-4 p-md-5">
<div class="row g-3">
<div class="col-12 text-center mb-3">
<h4 class="h5 fw-bold">{{ ticket.subject }}</h4>
</div>
<div class="col-sm-6">
<strong>{% trans 'Status:' %}</strong>
<span class="badge
{% if ticket.status == 'open' %}bg-primary
{% elif ticket.status == 'in_progress' %}bg-info
{% elif ticket.status == 'resolved' %}bg-success
{% else %}bg-secondary{% endif %}">
{{ ticket.get_status_display }}
</span>
</div>
<div class="col-sm-6 text-sm-end">
<strong>{% trans 'Priority:' %}</strong>
<span class="badge
{% if ticket.priority == 'low' %}bg-success
{% elif ticket.priority == 'medium' %}bg-warning
{% elif ticket.priority == 'high' %}bg-danger
{% else %}bg-dark{% endif %}">
{{ ticket.get_priority_display }}
</span>
</div>
<div class="col-sm-6">
<strong>{% trans 'Created:' %}</strong>
<br class="d-sm-none">{{ ticket.created_at|date:"M d, Y" }}
</div>
<div class="col-sm-6 text-sm-end">
<strong>{% trans 'Last Updated:' %}</strong>
<br class="d-sm-none">{{ ticket.updated_at|date:"M d, Y" }}
</div>
</div>
<hr class="my-4">
<div class="mb-4">
<h5 class="fw-bold mb-2">{% trans 'Description' %}</h5>
<div class="p-3 bg-light rounded-3">
{{ ticket.description|linebreaks }}
</div>
</div>
{% if ticket.resolution_notes %}
<div class="mb-4">
<h5 class="fw-bold mb-2">{% trans 'Resolution Notes' %}</h5>
<div class="p-3 bg-light rounded-3">
{{ ticket.resolution_notes|linebreaks }}
</div>
</div>
{% endif %}
<div class="d-grid mt-4">
<a href="{% url 'ticket_list' request.dealer.slug %}" class="btn btn-phoenix-secondary btn-lg">
<i class="fa-solid fa-arrow-left me-1"></i>
{% trans 'Back to Tickets' %}
</a>
</div>
</div>
</div> </div>
</div> </div>
<div class="card-body"> </main>
<div class="row mb-4">
<div class="col-md-6">
<p><strong>Status:</strong>
<span class="badge
{% if ticket.status == 'open' %}bg-primary
{% elif ticket.status == 'in_progress' %}bg-info
{% elif ticket.status == 'resolved' %}bg-success
{% else %}bg-secondary{% endif %}">
{{ ticket.get_status_display }}
</span>
</p>
<p><strong>Priority:</strong>
<span class="badge
{% if ticket.priority == 'low' %}bg-success
{% elif ticket.priority == 'medium' %}bg-warning
{% elif ticket.priority == 'high' %}bg-danger
{% else %}bg-dark{% endif %}">
{{ ticket.get_priority_display }}
</span>
</p>
</div>
<div class="col-md-6">
<p><strong>Created:</strong> {{ ticket.created_at|date:"M d, Y H:i" }}</p>
<p><strong>Last Updated:</strong> {{ ticket.updated_at|date:"M d, Y H:i" }}</p>
</div>
</div>
<div class="mb-4">
<h3 class="h5">Description</h3>
<div class="p-3 rounded">
{{ ticket.description|linebreaks }}
</div>
</div>
<div class="mb-4">
<h3 class="h5">Resolution Notes</h3>
<div class="p-3 rounded">
{{ ticket.resolution_notes|linebreaks }}
</div>
</div>
<!-- You can add comments/replies section here later -->
</div>
</div>
{% endblock %} {% endblock %}

View File

@ -1,131 +1,116 @@
{% extends "base.html" %} {% extends "base.html" %}
{% load static %} {% load static %}
{% load i18n %} {% load i18n %}
{% block title %}
{% trans "My Tickets" %}
{% endblock title %}
{% block content %} {% block content %}
<div class="row g-4 mb-5"> <main class="py-5">
<div class="container">
<div class="col-12 col-lg-8"> <div class="row justify-content-center mb-5">
<div class="card h-100"> <div class="col-lg-8">
<div class="card-body d-flex flex-column justify-content-center p-5 text-center"> <div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInDown">
<h2 class="card-title fw-bold text-primary">Need Help? We're Here for You.</h2> <div class="card-header bg-gradient py-4 border-0 rounded-top-4 text-center">
<p class="card-text text-muted mb-4"> <i class="fa-solid fa-headset fa-2x mb-2"></i>
Our support team is ready to assist you with any questions or issues. <h2 class="card-title fw-bold mb-0">
Raise a new ticket, and we'll get back to you as soon as possible. {% trans "Need Help?" %}
</p> </h2>
<a href="{% url 'create_ticket' request.dealer.slug %}" class="btn btn-phoenix-primary btn-lg shadow-sm w-50 mx-auto"> </div>
Raise a New Ticket <div class="card-body p-4 p-md-5 text-center bg-white">
</a> <p class="card-text text-muted mb-4">
{% blocktrans %}
Our support team is ready to assist you. Raise a new ticket below, and we'll get back to you as soon as possible.
{% endblocktrans %}
</p>
<a href="{% url 'create_ticket' request.dealer.slug %}" class="btn btn-phoenix-primary btn-lg shadow-sm">
<i class="fa-solid fa-plus me-1"></i>
{% trans "Raise a New Ticket" %}
</a>
</div>
</div>
</div>
</div>
{% if messages %}
<div class="alert-container mb-4">
{% for message in messages %}
<div class="alert alert-{{ message.tags }} alert-dismissible fade show" role="alert">
{{ message }}
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
{% endfor %}
</div>
{% endif %}
<div class="card shadow-lg border-0 rounded-4 animate__animated animate__fadeInUp">
<div class="card-header border-bottom d-flex flex-column flex-md-row justify-content-between align-items-md-center p-4">
<h5 class="card-title mb-2 mb-md-0 me-md-4 fw-bold">{% trans "My Tickets" %}</h5>
<div class="input-group w-100 w-md-50">
{% include 'partials/search_box.html' %}
</div>
</div>
<div class="card-body p-0">
<div class="table-responsive">
<table class="table table-striped table-hover mb-0">
<thead class="bg-light">
<tr>
<th scope="col" class="text-secondary text-uppercase fw-bold ps-4">ID</th>
<th scope="col" class="text-secondary text-uppercase fw-bold">Subject</th>
<th scope="col" class="text-secondary text-uppercase fw-bold">Status</th>
<th scope="col" class="text-secondary text-uppercase fw-bold">Priority</th>
<th scope="col" class="text-secondary text-uppercase fw-bold">Created</th>
<th scope="col" class="text-secondary text-uppercase fw-bold text-end pe-4">Actions</th>
</tr>
</thead>
<tbody>
{% for ticket in tickets %}
<tr>
<td class="text-muted ps-4">#{{ ticket.id }}</td>
<td>{{ ticket.subject }}</td>
<td>
<span class="badge
{% if ticket.status == 'open' %}bg-primary
{% elif ticket.status == 'in_progress' %}bg-info
{% elif ticket.status == 'resolved' %}bg-success
{% else %}bg-secondary{% endif %}">
{{ ticket.get_status_display }}
</span>
</td>
<td>
<span class="badge
{% if ticket.priority == 'low' %}bg-success
{% elif ticket.priority == 'medium' %}bg-warning
{% elif ticket.priority == 'high' %}bg-danger
{% else %}bg-dark{% endif %}">
{{ ticket.get_priority_display }}
</span>
</td>
<td>
<span class="d-block">{{ ticket.created_at|date:"M d, Y" }}</span>
<span class="text-muted small d-block">{{ ticket.created_at|time:"H:i" }}</span>
</td>
<td class="text-end pe-4">
<a href="{% url 'ticket_detail' request.dealer.slug ticket.id %}" class="btn btn-phoenix-primary btn-sm">
<i class="fa-solid fa-eye me-1"></i>
{% trans "View" %}
</a>
</td>
</tr>
{% empty %}
<tr>
<td colspan="6" class="text-center text-muted py-5">
<i class="fas fa-ticket-alt fs-2 mb-3"></i>
<p class="mb-0">{% trans "No tickets found." %}</p>
<p class="text-muted small">{% trans "All your past and present tickets will appear here." %}</p>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div> </div>
</div> </div>
</div> </div>
</main>
<div class="col-12 col-lg-4">
<div class="card h-100">
<div class="card-body p-4">
<h5 class="card-title fw-bold">Quick Links</h5>
<p class="card-text text-muted">Explore common resources to find answers quickly.</p>
<ul class="list-unstyled mb-0">
<li class="mb-3">
<a href="#" class="d-flex align-items-center text-decoration-none">
<span class="fs-4 text-secondary me-2"><i class="fas fa-search"></i></span>
<span class="text-dark">Search our knowledge base</span>
</a>
</li>
<li class="mb-3">
<a href="#" class="d-flex align-items-center text-decoration-none">
<span class="fs-4 text-success me-2"><i class="fas fa-question-circle"></i></span>
<span class="text-dark">View frequently asked questions</span>
</a>
</li>
<li class="mb-3">
<a href="#" class="d-flex align-items-center text-decoration-none">
<span class="fs-4 text-info me-2"><i class="fas fa-bell"></i></span>
<span class="text-dark">Check system status updates</span>
</a>
</li>
</ul>
</div>
</div>
</div>
</div>
{% if messages %}
<div class="alert-container mb-4">
{% for message in messages %}
<div class="alert alert-{{ message.tags }} alert-dismissible fade show" role="alert">
{{ message }}
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
{% endfor %}
</div>
{% endif %}
<div class="card">
<div class="card-header border-bottom d-flex justify-content-between align-items-center p-4">
<h5 class="card-title mb-0">My Tickets</h5>
<div class="input-group w-50">
<input type="text" class="form-control" placeholder="Search by ID or subject..." aria-label="Search tickets">
<button class="btn btn-outline-secondary" type="button">
<i class="fas fa-search"></i>
</button>
</div>
</div>
<div class="card-body p-0">
<div class="table-responsive">
<table class="table table-striped table-hover mb-0">
<thead class="bg-light">
<tr>
<th scope="col" class="text-secondary text-uppercase fw-bold">ID</th>
<th scope="col" class="text-secondary text-uppercase fw-bold">Subject</th>
<th scope="col" class="text-secondary text-uppercase fw-bold">Status</th>
<th scope="col" class="text-secondary text-uppercase fw-bold">Priority</th>
<th scope="col" class="text-secondary text-uppercase fw-bold">Created</th>
<th scope="col" class="text-secondary text-uppercase fw-bold text-end">Actions</th>
</tr>
</thead>
<tbody>
{% for ticket in tickets %}
<tr>
<td class="text-muted">#{{ ticket.id }}</td>
<td>{{ ticket.subject }}</td>
<td>
<span class="badge
{% if ticket.status == 'open' %}bg-primary
{% elif ticket.status == 'in_progress' %}bg-info
{% elif ticket.status == 'resolved' %}bg-success
{% else %}bg-secondary{% endif %}">
{{ ticket.get_status_display }}
</span>
</td>
<td>
<span class="badge
{% if ticket.priority == 'low' %}bg-success
{% elif ticket.priority == 'medium' %}bg-warning
{% elif ticket.priority == 'high' %}bg-danger
{% else %}bg-dark{% endif %}">
{{ ticket.get_priority_display }}
</span>
</td>
<td>{{ ticket.created_at|date:"M d, Y" }} <span class="text-muted small">{{ ticket.created_at|time:"H:i" }}</span></td>
<td class="text-end">
<a href="{% url 'ticket_detail' request.dealer.slug ticket.id %}" class="btn btn-sm btn-outline-primary">
View
</a>
</td>
</tr>
{% empty %}
<tr>
<td colspan="6" class="text-center text-muted py-5">
<i class="fas fa-ticket-alt fs-2 mb-3"></i>
<p class="mb-0">No tickets found.</p>
<p class="text-muted small">All your past and present tickets will appear here.</p>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
{% endblock %} {% endblock %}

View File

@ -1,8 +1,6 @@
{% extends "base.html" %} {% extends "base.html" %}
{% load i18n %} {% load i18n crispy_forms_filters %}
{% load crispy_forms_filters %}
{% block title %} {% block title %}
{# Check if an 'object' exists in the context #}
{% if object %} {% if object %}
{% trans 'Update Staff' %} {% trans 'Update Staff' %}
{% else %} {% else %}
@ -10,49 +8,51 @@
{% endif %} {% endif %}
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<main class="d-flex align-items-center justify-content-center min-vh-80 py-5">
<div class="col-md-8">
<div class="row justify-content-center mt-5 mb-3"> <div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
<div class="card-header bg-gradient py-4 border-0 rounded-top-4">
<div class="col-lg-8 col-md-10"> <h3 class="mb-0 fs-4 fw-bold text-center">
<div class="card shadow-sm border-0 rounded-3"> {% if object %}
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3"> {% trans "Update Staff" %}
<h3 class="mb-0 fs-4 text-center"> <i class="fa-solid fa-user-tie ms-2"></i>
{% if staff.created %} {% else %}
{{ _("Edit Staff") }} {% trans "Add New Staff" %}
{% else %} <i class="fa-solid fa-user-tie ms-2"></i>
{{ _("Add Staff") }} {% endif %}
{% endif %} </h3>
<i class="fa-solid fa-user-tie text-primary ms-2"></i>
</h3>
</div> </div>
<div class="card-body bg-light-subtle"> <div class="card-body p-4 p-md-5">
<form class="row g-3 mb-3" method="post" class="form" novalidate> <form class="needs-validation" method="post" novalidate>
{% csrf_token %} {% csrf_token %}
{{ redirect_field }} {{ redirect_field }}
{{ form.first_name|as_crispy_field }} {{ form|crispy }}
{{ form.last_name|as_crispy_field }}
{{ form.arabic_name|as_crispy_field }} {% if form.errors %}
{{ form.email|as_crispy_field }} <div class="alert alert-danger mt-4" role="alert">
{{ form.phone_number|as_crispy_field }} <h4 class="alert-heading small">{% trans "Please correct the following errors:" %}</h4>
{{ form.address|as_crispy_field }} <ul class="mb-0">
{{ form.logo|as_crispy_field }} {% for field, errors in form.errors.items %}
{{ form.group|as_crispy_field }} <li><strong>{{ field|capfirst }}:</strong> {% for error in errors %}{{ error }}{% endfor %}</li>
{% for error in form.errors %} {% endfor %}
<div class="text-danger">{{ error }}</div> </ul>
{% endfor %} </div>
{% endif %}
<hr class="my-2">
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3"> <hr class="my-4">
<button class="btn btn-lg btn-phoenix-primary md-me-2" type="submit"><i class="fa-solid fa-floppy-disk me-1"></i>{{ _("Save") }}</button> <div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
<a href="{% url 'user_list' request.dealer.slug %}" class="btn btn-lg btn-phoenix-secondary"><i class="fa-solid fa-ban me-1"></i>{% trans "Cancel" %}</a> <button class="btn btn-phoenix-primary btn-lg me-md-2" type="submit">
</div> <i class="fa-solid fa-floppy-disk me-1"></i>
</form> {{ _("Save") }}
</button>
<a href="{% url 'user_list' request.dealer.slug %}" class="btn btn-phoenix-secondary btn-lg">
<i class="fa-solid fa-ban me-1"></i>
{% trans "Cancel" %}
</a>
</div>
</form>
</div> </div>
</div> </div>
</div> </div>
</main>
{% endblock %} {% endblock %}

View File

@ -5,37 +5,46 @@
{% trans "Group" %} {% trans "Group" %}
{% endblock title %} {% endblock title %}
{% block content %} {% block content %}
<main class="d-flex align-items-center justify-content-center min-vh-80 py-5 ">
<div class="row justify-content-center mt-5 mb-3"> <div class="col-12 col-sm-10 col-md-8 col-lg-6 col-xl-5">
<div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
<div class="col-lg-8 col-md-10"> <div class="card-header bg-gradient py-4 border-0 rounded-top-4">
<div class="card shadow-sm border-0 rounded-3"> <h3 class="mb-0 fs-4 fw-bold text-center">
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3"> {{ _("Manage Groups") }}
<h3 class="mb-0 fs-5 text-center"> <i class="fa-solid fa-users ms-2"></i>
{{ _("Manage Groups") }}<i class="fa-solid fa-users ms-2 text-primary"></i> </h3>
</h3>
</div> </div>
<div class="card-body bg-light-subtle"> <div class="card-body p-4 p-md-5">
<form class="row g-3 mb-3" method="post" class="form" enctype="multipart/form-data" novalidate > <form class="needs-validation" method="post" enctype="multipart/form-data" novalidate>
{% csrf_token %} {% csrf_token %}
{{ redirect_field }} {{ redirect_field }}
{{ form|crispy }} {{ form|crispy }}
{% for error in form.errors %}<div class="text-danger">{{ error }}</div>{% endfor %}
<hr class="my-2"> {% if form.errors %}
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3"> <div class="alert alert-danger mt-4" role="alert">
<button class="btn btn-lg btn-phoenix-primary md-me-2" type="submit"><i class="fa-solid fa-floppy-disk me-1"></i>{{ _("Save") }}</button> <h4 class="alert-heading small">{% trans "Please correct the following errors:" %}</h4>
<a href="{% url 'user_detail' request.dealer.slug staff.slug %}" class="btn btn-lg btn-phoenix-secondary"><i class="fa-solid fa-ban me-1"></i>{% trans "Cancel" %}</a> <ul class="mb-0">
</div> {% for field, errors in form.errors.items %}
</form> <li><strong>{{ field|capfirst }}:</strong> {% for error in errors %}{{ error }}{% endfor %}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<hr class="my-4">
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
<button class="btn btn-phoenix-primary btn-lg me-md-2" type="submit">
<i class="fa-solid fa-floppy-disk me-1"></i>
{{ _("Save") }}
</button>
<a href="{% url 'user_detail' request.dealer.slug staff.slug %}" class="btn btn-phoenix-secondary btn-lg">
<i class="fa-solid fa-ban me-1"></i>
{% trans "Cancel" %}
</a>
</div>
</form>
</div> </div>
</div> </div>
</div> </div>
</main>
{% endblock %}
{% endblock %}

View File

@ -1,18 +1,20 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load i18n %} {% load i18n %}
{% block content %} {% block content %}
<main class="d-flex align-items-center justify-content-center min-vh-100 py-5"> <main class="d-flex align-items-center justify-content-center min-vh-80 py-5">
<div class="col-12 col-sm-10 col-md-8 col-lg-6 col-xl-5"> <div class="col-12 col-sm-10 col-md-8 col-lg-6 col-xl-5">
<div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp" style="background-color: #f8f9fa;"> <div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
<div class="card-header bg-gradient py-4 border-0 rounded-top-4">
<h1 class="h3 fw-bold mb-0 text-center">
<i class="fas fa-lock me-2"></i> {% trans "Set New Password" %}
</h1>
</div>
<div class="card-body p-4 p-md-5"> <div class="card-body p-4 p-md-5">
<div class="text-center mb-4"> <div class="text-center mb-4">
<h1 class="h3 fw-bold text-dark mb-2">{% trans "Set New Password" %}</h1> <p class="mb-0 fs-5">{% trans "Enter your new password below." %}</p>
<p class="text-muted">{% trans "Enter your new password below." %}</p>
</div> </div>
<form method="post" class="needs-validation" novalidate> <form method="post" class="needs-validation" novalidate>
{% csrf_token %} {% csrf_token %}
{% for field in form %} {% for field in form %}
<div class="form-floating mb-3"> <div class="form-floating mb-3">
{{ field.errors }} {{ field.errors }}
@ -20,17 +22,16 @@
<label for="{{ field.id_for_label }}">{{ field.label }}</label> <label for="{{ field.id_for_label }}">{{ field.label }}</label>
</div> </div>
{% endfor %} {% endfor %}
<div class="d-grid mt-4"> <div class="d-grid mt-4">
<button type="submit" class="btn btn-primary btn-lg rounded-pill fw-bold"> <button type="submit" class="btn btn-phoenix-primary btn-lg rounded-pill fw-bold">
{% trans "Change Password" %} {% trans "Change Password" %}
</button> </button>
</div> </div>
</form> </form>
</div> </div>
<div class="card-footer bg-light border-0 py-3 text-center"> <div class="card-footer bg-gray-300 border-0 py-3 text-center">
<small class="text-muted"> <small class="text-muted">
{% trans "Remember to choose a strong password." %} <i class="fas fa-info-circle me-1"></i> {% trans "Remember to choose a strong password." %}
</small> </small>
</div> </div>
</div> </div>

View File

@ -2,7 +2,6 @@
{% load i18n %} {% load i18n %}
{% load crispy_forms_filters %} {% load crispy_forms_filters %}
{% block title %} {% block title %}
{# Check if an 'object' exists in the context #}
{% if object %} {% if object %}
{% trans 'Update Vendor' %} {% trans 'Update Vendor' %}
{% else %} {% else %}
@ -10,37 +9,51 @@
{% endif %} {% endif %}
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<main class="d-flex align-items-center justify-content-center min-vh-80 py-5 ">
<div class="col-md-8 ">
<div class="row justify-content-center mt-5 mb-3"> <div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
<div class="card-header bg-gradient py-4 border-0 rounded-top-4">
<div class="col-lg-8 col-md-10"> <h3 class="mb-0 fs-4 fw-bold text-center">
<div class="card shadow-sm border-0 rounded-3"> {% if object %}
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3"> {% trans "Update Vendor" %}
<h3 class="mb-0 fs-4 text-center"> <i class="fas fa-cube ms-2"></i>
{% if vendor.created %} {% else %}
{{ _("Edit Vendor") }} {% trans "Add New Vendor" %}
{% else %} <i class="fas fa-cube ms-2"></i>
{{ _("Add Vendor") }} {% endif %}
{% endif %} </h3>
<span class="fas fa-cube ms-2 text-primary"></span>
</h3>
</div> </div>
<div class="card-body bg-light-subtle"> <div class="card-body p-4 p-md-5">
<form class="row g-3 mb-3" method="post" class="form" enctype="multipart/form-data" novalidate > <form class="needs-validation" method="post" enctype="multipart/form-data" novalidate>
{% csrf_token %} {% csrf_token %}
{{ redirect_field }} {{ redirect_field }}
{{ form|crispy }} {{ form|crispy }}
{% for error in form.errors %}<div class="text-danger">{{ error }}</div>{% endfor %}
<hr class="my-2"> {% if form.errors %}
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3"> <div class="alert alert-danger mt-4" role="alert">
<button class="btn btn-lg btn-phoenix-primary md-me-2" type="submit"><i class="fa-solid fa-floppy-disk me-1"></i>{{ _("Save") }}</button> <h4 class="alert-heading small">{% trans "Please correct the following errors:" %}</h4>
<a href="{% url 'vendor_list' request.dealer.slug%}" class="btn btn-lg btn-phoenix-secondary"><i class="fa-solid fa-ban me-1"></i>{% trans "Cancel" %}</a> <ul class="mb-0">
</div> {% for field, errors in form.errors.items %}
</form> <li><strong>{{ field|capfirst }}:</strong> {% for error in errors %}{{ error }}{% endfor %}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<hr class="my-4">
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
<button class="btn btn-phoenix-primary btn-lg me-md-2" type="submit">
<i class="fa-solid fa-floppy-disk me-1"></i>
{{ _("Save") }}
</button>
<a href="{% url 'vendor_list' request.dealer.slug %}" class="btn btn-phoenix-secondary btn-lg">
<i class="fa-solid fa-ban me-1"></i>
{% trans "Cancel" %}
</a>
</div>
</form>
</div> </div>
</div> </div>
</div> </div>
<!----> </main>
{% endblock %} {% endblock %}