diff --git a/inventory/forms.py b/inventory/forms.py index e5f0a22e..30eb24c0 100644 --- a/inventory/forms.py +++ b/inventory/forms.py @@ -1003,7 +1003,7 @@ class LeadForm(forms.ModelForm): queryset=CarMake.objects.filter(is_sa_import=True), widget=forms.Select( attrs={ - "class": "form-control form-control-sm", + "hx-get": "", "hx-include": "#id_id_car_make", "hx-select": "#div_id_id_car_model", @@ -1018,7 +1018,7 @@ class LeadForm(forms.ModelForm): id_car_model = forms.ModelChoiceField( label=_("Model"), queryset=CarModel.objects.none(), - widget=forms.Select(attrs={"class": "form-control form-control-sm"}), + widget=forms.Select(), required=True, ) diff --git a/inventory/mixins.py b/inventory/mixins.py index 953e7940..ffc728cf 100644 --- a/inventory/mixins.py +++ b/inventory/mixins.py @@ -18,12 +18,12 @@ class AddClassMixin: :return: class names form-control or form-select """ for field_name, field in self.fields.items(): - if isinstance(field.widget, forms.Select): - existing_classes = field.widget.attrs.get('class', '') - field.widget.attrs['class'] = f"{existing_classes} form-select form-select-sm".strip() - else: - existing_classes = field.widget.attrs.get('class', '') - field.widget.attrs['class'] = f"{existing_classes} form-control form-control-sm".strip() + # if isinstance(field.widget, forms.Select): + # existing_classes = field.widget.attrs.get('class', '') + # field.widget.attrs['class'] = f"{existing_classes} form-select form-select-sm".strip() + # else: + existing_classes = field.widget.attrs.get('class', '') + field.widget.attrs['class'] = f"{existing_classes} form-control form-control-sm".strip() class LocalizedNameMixin: diff --git a/inventory/views.py b/inventory/views.py index d341c21b..f6c64236 100644 --- a/inventory/views.py +++ b/inventory/views.py @@ -151,6 +151,7 @@ from django_tables2 import SingleTableView from django_tables2.export.views import ExportMixin from appointment.models import Appointment, AppointmentRequest, Service, StaffMember +from .models import SaleOrder from .services import ( decodevin, get_make, @@ -3831,11 +3832,9 @@ class EstimateDetailView(LoginRequiredMixin, PermissionRequiredMixin, DetailView if estimate.get_itemtxs_data(): calculator = CarFinanceCalculator(estimate) finance_data = calculator.get_finance_data() - + invoice_obj = InvoiceModel.objects.all().filter(ce_model=estimate).first() kwargs["data"] = finance_data - kwargs["invoice"] = ( - InvoiceModel.objects.all().filter(ce_model=estimate).first() - ) + kwargs["invoice"] = invoice_obj return super().get_context_data(**kwargs) @@ -7654,11 +7653,12 @@ def pricing_page(request): # @require_POST def submit_plan(request): + dealer = get_user_type(request) selected_plan_id = request.POST.get("selected_plan") pp = PlanPricing.objects.get(pk=selected_plan_id) order = Order.objects.create( - user=request.user, + user=dealer.user, plan=pp.plan, pricing=pp.pricing, amount=pp.price, @@ -7674,14 +7674,14 @@ def payment_callback(request): payment_id = request.GET.get("id") history = models.PaymentHistory.objects.filter(transaction_id=payment_id).first() payment_status = request.GET.get("status") - order = Order.objects.filter(user=dealer,status=AbstractOrder.STATUS.NEW).first() + order = Order.objects.filter(user=dealer.user,status=AbstractOrder.STATUS.NEW).first() if payment_status == "paid": billing_info,created = BillingInfo.objects.get_or_create( user=dealer.user, tax_number=dealer.vrn, name=dealer.arabic_name, - street=dealer.entity.address, + street=dealer.address, zipcode=dealer.entity.zip_code, city=dealer.entity.city, country=dealer.entity.country, diff --git a/static/css/custom.css b/static/css/custom.css index 7a939487..4ec4d3e0 100644 --- a/static/css/custom.css +++ b/static/css/custom.css @@ -50,3 +50,15 @@ @keyframes spin { to { transform: rotate(360deg); } } + +.form-select select { + padding: 0 16px 0 48px; + right: auto; + left: 0; + direction: rtl; +} + +.form-select:after { + left: 16px; + right: auto; +} diff --git a/static/css/theme-rtl.css b/static/css/theme-rtl.css index 3d544a6f..1ce0ad73 100644 --- a/static/css/theme-rtl.css +++ b/static/css/theme-rtl.css @@ -3780,8 +3780,9 @@ textarea.form-control-lg { .form-select { --phoenix-form-select-bg-img: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE1MCIgdmlld0JveD0iMCAwIDE1MCAxNTAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik03NS4zNDggMTI3LjE5MkM3Mi40MzgxIDEyNy4xOTIgNjkuODUxNCAxMjYuMjIyIDY3LjkxMTUgMTI0LjI4Mkw1LjgzMjE1IDYyLjIwMjNDMS42Mjg4NyA1OC4zMjIzIDEuNjI4ODcgNTEuNTMyNCA1LjgzMjE1IDQ3LjY1MjVDOS43MTIxMSA0My40NDkyIDE2LjUwMiA0My40NDkyIDIwLjM4MiA0Ny42NTI1TDc1LjM0OCAxMDIuMjk1TDEyOS45OTEgNDcuNjUyNUMxMzMuODcxIDQzLjQ0OTIgMTQwLjY2MSA0My40NDkyIDE0NC41NDEgNDcuNjUyNUMxNDguNzQ0IDUxLjUzMjQgMTQ4Ljc0NCA1OC4zMjIzIDE0NC41NDEgNjIuMjAyM0w4Mi40NjEzIDEyNC4yODJDODAuNTIxMyAxMjYuMjIyIDc3LjkzNDcgMTI3LjE5MiA3NS4zNDggMTI3LjE5MloiIGZpbGw9IiMzMTM3NEEiLz4KPC9zdmc+Cg=="); + align-content: start; display: block; - text-align: start; + text-align: right; width: 100%; padding: 0.5rem 1rem 0.5rem 2.5rem; font-size: 0.8rem; @@ -3808,9 +3809,12 @@ textarea.form-control-lg { } @media (prefers-reduced-motion: reduce) { .form-select { - -webkit-transition: none; + -webkit-transition:right; -o-transition: none; transition: none; + right: auto; + left: 0; + direction: rtl; } } .form-select:focus { diff --git a/static/css/theme.css b/static/css/theme.css index 05ea19bc..ca4d4ebb 100644 --- a/static/css/theme.css +++ b/static/css/theme.css @@ -1138,6 +1138,9 @@ select { select { word-wrap: normal; + padding: 0 16px 0 48px; + right: auto; + left: 0; } select:disabled { opacity: 1; @@ -3784,8 +3787,9 @@ textarea.form-control-lg { .form-select { --phoenix-form-select-bg-img: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE1MCIgdmlld0JveD0iMCAwIDE1MCAxNTAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik03NS4zNDggMTI3LjE5MkM3Mi40MzgxIDEyNy4xOTIgNjkuODUxNCAxMjYuMjIyIDY3LjkxMTUgMTI0LjI4Mkw1LjgzMjE1IDYyLjIwMjNDMS42Mjg4NyA1OC4zMjIzIDEuNjI4ODcgNTEuNTMyNCA1LjgzMjE1IDQ3LjY1MjVDOS43MTIxMSA0My40NDkyIDE2LjUwMiA0My40NDkyIDIwLjM4MiA0Ny42NTI1TDc1LjM0OCAxMDIuMjk1TDEyOS45OTEgNDcuNjUyNUMxMzMuODcxIDQzLjQ0OTIgMTQwLjY2MSA0My40NDkyIDE0NC41NDEgNDcuNjUyNUMxNDguNzQ0IDUxLjUzMjQgMTQ4Ljc0NCA1OC4zMjIzIDE0NC41NDEgNjIuMjAyM0w4Mi40NjEzIDEyNC4yODJDODAuNTIxMyAxMjYuMjIyIDc3LjkzNDcgMTI3LjE5MiA3NS4zNDggMTI3LjE5MloiIGZpbGw9IiMzMTM3NEEiLz4KPC9zdmc+Cg=="); display: block; + align-content: start; width: 100%; - text-align: start; + text-align: right; padding: 0.5rem 2.5rem 0.5rem 1rem; font-size: 0.8rem; font-weight: 600; diff --git a/staticfiles/css/custom.css b/staticfiles/css/custom.css index 1aebbccb..7a939487 100644 --- a/staticfiles/css/custom.css +++ b/staticfiles/css/custom.css @@ -1,9 +1,10 @@ @font-face { font-family: 'SaudiRiyalFont'; - src: url('static/fonts/SaudiRiyalFont.woff2') format('woff2'), - url('static/fonts/SaudiRiyalFont.woff') format('woff'), - url('static/fonts/SaudiRiyalFont.ttf') format('truetype'); - + src: url('data:font/woff2;charset=utf-8;base64,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') format('woff2'), + url('data:font/woff;charset=utf-8;base64,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') format('woff'); + font-weight: normal; + font-style: normal; + font-display: swap; } .currency { @@ -26,4 +27,26 @@ .rtl .fa-chevron-right { transform: scaleX(-1); -} \ No newline at end of file +} + +.spinner-container { + display: flex; + align-items: center; + gap: 10px; + padding: 10px; + color: #555; + font-size: 14px; +} + +.spinner { + width: 18px; + height: 18px; + border: 3px solid #ccc; + border-top-color: #333; + border-radius: 50%; + animation: spin 0.6s linear infinite; +} + +@keyframes spin { + to { transform: rotate(360deg); } +} diff --git a/staticfiles/images/logos/users/marwan-company_bpjODUu.png b/staticfiles/images/logos/users/marwan-company_bpjODUu.png new file mode 100644 index 00000000..b8addbe8 Binary files /dev/null and b/staticfiles/images/logos/users/marwan-company_bpjODUu.png differ diff --git a/staticfiles/js/crm-dashboard.js b/staticfiles/js/crm-dashboard.js index 5f7eceb5..58d4b86d 100644 --- a/staticfiles/js/crm-dashboard.js +++ b/staticfiles/js/crm-dashboard.js @@ -120,85 +120,7 @@ /* Echarts Total Sales */ /* -------------------------------------------------------------------------- */ - const contactsBySourceChartInit = () => { - const { getColor, getData, toggleColor } = window.phoenix.utils; - const chartElContainer = document.querySelector( - '.echart-contact-by-source-container' - ); - const chartEl = chartElContainer.querySelector('.echart-contact-by-source'); - const chartLabel = chartElContainer.querySelector('[data-label]'); - if (chartEl) { - const userOptions = getData(chartEl, 'echarts'); - const chart = window.echarts.init(chartEl); - const data = [ - { value: 80, name: 'Organic Search' }, - { value: 65, name: 'Paid Search' }, - { value: 40, name: 'Direct Traffic' }, - { value: 220, name: 'Social Media' }, - { value: 120, name: 'Referrals' }, - { value: 35, name: 'Others Campaigns' } - ]; - const totalSource = data.reduce((acc, val) => val.value + acc, 0); - if (chartLabel) { - chartLabel.innerHTML = totalSource; - } - const getDefaultOptions = () => ({ - color: [ - getColor('primary'), - getColor('success'), - getColor('info'), - getColor('info-light'), - toggleColor(getColor('danger-lighter'), getColor('danger-darker')), - toggleColor(getColor('warning-light'), getColor('warning-dark')) - ], - tooltip: { - trigger: 'item', - borderWidth: 0, - position: (...params) => handleTooltipPosition(params), - extraCssText: 'z-index: 1000' - }, - responsive: true, - maintainAspectRatio: false, - - series: [ - { - name: 'Contacts by Source', - type: 'pie', - radius: ['55%', '90%'], - startAngle: 90, - avoidLabelOverlap: false, - itemStyle: { - borderColor: getColor('body-bg'), - borderWidth: 3 - }, - - label: { - show: false - }, - emphasis: { - label: { - show: false - } - }, - labelLine: { - show: false - }, - data - } - ], - grid: { - bottom: 0, - top: 0, - left: 0, - right: 0, - containLabel: false - } - }); - - echartSetOption(chart, userOptions, getDefaultOptions); - } - }; // dayjs.extend(advancedFormat); @@ -1338,7 +1260,6 @@ const { docReady } = window.phoenix.utils; - docReady(contactsBySourceChartInit); docReady(contactsCreatedChartInit); docReady(newUsersChartsInit); docReady(newLeadsChartsInit); diff --git a/templates/base.html b/templates/base.html index 21f7ebb4..3cb7e58d 100644 --- a/templates/base.html +++ b/templates/base.html @@ -40,12 +40,12 @@ - {% if LANGUAGE_CODE == 'en' %} - - - {% else %} + {% if LANGUAGE_CODE == 'ar' %} + {% else %} + + {% endif %} diff --git a/templates/crm/leads/lead_form.html b/templates/crm/leads/lead_form.html index 250202e0..959fe472 100644 --- a/templates/crm/leads/lead_form.html +++ b/templates/crm/leads/lead_form.html @@ -2,20 +2,21 @@ {% load i18n static crispy_forms_filters %} {% block content %} -

{% if object %}Update{% else %}Create{% endif %}

-
- {% csrf_token %} - {{ form|crispy }} - - - {{ _("Cancel") }} - -
+
+

{% if object %}{{ _("Update") }}{% else %}{{ _("Create") }}{% endif %}

+
+
+
+ {% csrf_token %} + {{ form|crispy }} + + + {{ _("Cancel") }} + +
+
+
+
{% endblock %} \ No newline at end of file diff --git a/templates/customers/customer_form.html b/templates/customers/customer_form.html index d43f4ac2..dbcfc3b9 100644 --- a/templates/customers/customer_form.html +++ b/templates/customers/customer_form.html @@ -26,7 +26,12 @@ {% csrf_token %} {{ form|crispy }}
- + + + {{ _("Cancel") }} +
diff --git a/templates/ledger/coa_accounts/account_list.html b/templates/ledger/coa_accounts/account_list.html index e85b3c9e..10eeefa6 100644 --- a/templates/ledger/coa_accounts/account_list.html +++ b/templates/ledger/coa_accounts/account_list.html @@ -45,16 +45,19 @@ + {% trans "Type" %} {% trans "Account Name" %} {% trans "Code" %} {% trans "Balance Type" %} {% trans "Active" %} + + + {% for account in accounts %} + + - - - {% for account in accounts %} +{{ account.role_bs|upper }} {{ account.name }} {{ account.code }} diff --git a/templates/organizations/organization_form.html b/templates/organizations/organization_form.html index c5f9955d..f0a91e47 100644 --- a/templates/organizations/organization_form.html +++ b/templates/organizations/organization_form.html @@ -3,20 +3,24 @@ {% load crispy_forms_filters %} {% block title %}{% trans "Add Organization" %}{% endblock title %} {% block content %} -
+ +

{% trans "Add Organization" %}

-
- {% csrf_token %} - {{ redirect_field }} - {{ form|crispy }} - -
- {% trans "Cancel"|capfirst %} - -
-
+
+
+
+ {% csrf_token %} + {{ redirect_field }} + {{ form|crispy }} + + + {% trans "Cancel" %} + +
+
+
{% endblock %} \ No newline at end of file diff --git a/templates/plans/plan_table.html b/templates/plans/plan_table.html index c6995e99..1eeb8444 100644 --- a/templates/plans/plan_table.html +++ b/templates/plans/plan_table.html @@ -3,7 +3,7 @@ - + {% for plan in plan_list %} {% for quota_row in plan_table %} - + - - + {% if user.is_authenticated %} - + {% for plan in plan_list %} - + {% for plan in plan_list %}
@@ -20,7 +20,7 @@
{% if quota_row.0.url %}{% endif %} @@ -58,15 +58,15 @@
+
{% trans 'Pricing' %}
{% if plan != userplan.plan and not userplan.is_expired and not userplan.plan.is_free %} @@ -80,7 +80,7 @@ {% endif %}
{% if plan.available %} @@ -88,7 +88,7 @@ {% if not plan.is_free %} {% for plan_pricing in plan.planpricing_set.all %} {% if plan_pricing.visible %} -
+
{% if plan_pricing.pricing.url %}{% endif %}
{{ plan_pricing.pricing.name }} @@ -107,7 +107,7 @@ {% endif %} {% endfor %} {% else %} -
+
{% trans "Free" %} {% trans "no expiry" %} diff --git a/templates/pricing_page.html b/templates/pricing_page.html index 5752ea41..00b64564 100644 --- a/templates/pricing_page.html +++ b/templates/pricing_page.html @@ -13,7 +13,6 @@ .pricing-card .card.selected { border-color: #0d6efd; box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.4); - background-color: #f0f8ff; } .btn-check:checked + .btn .card { @@ -25,18 +24,15 @@ .card.selected { border-color: #0d6efd; box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.4); - background-color: #f0f8ff; } .summary-box { - background: #f8f9fa; - border: 1px solid #dee2e6; + border: 1px solid #8d8f94; border-radius: 0.5rem; padding: 1.5rem; } .summary-box h5 { - border-bottom: 1px solid #dee2e6; padding-bottom: 0.5rem; margin-bottom: 1rem; } @@ -53,7 +49,7 @@ {% block content %}
-

Choose Your Plan

+

{{ _("Choose Your Plan")}}

{% csrf_token %} @@ -94,38 +90,38 @@

2. {{ _("Enter Your Information")}}

- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
@@ -136,38 +132,38 @@

3. {{ _("Payment Information")}}

- +
- +
- +
-
- +
-
- +
-
diff --git a/templates/sales/estimates/estimate_detail.html b/templates/sales/estimates/estimate_detail.html index 1eccd8f6..dbfaa65b 100644 --- a/templates/sales/estimates/estimate_detail.html +++ b/templates/sales/estimates/estimate_detail.html @@ -105,10 +105,11 @@ {% elif estimate.status == 'approved' %} {% if estimate.sale_orders.first %} - {% trans 'Create Invoice' %} +
{% trans 'Create Invoice' %} + {{ _("Preview Sale Order") }} {% else %} {% trans 'Create Sale Order' %} - {% comment %} {% trans 'Preview Sale Order' %} {% endcomment %} + {% comment %} {% endcomment %} {% endif %} {% elif estimate.status == 'in_review' %} {% trans 'Preview' %} diff --git a/templates/sales/estimates/sale_order_preview.html b/templates/sales/estimates/sale_order_preview.html index 9f3ee0f6..d997a101 100644 --- a/templates/sales/estimates/sale_order_preview.html +++ b/templates/sales/estimates/sale_order_preview.html @@ -119,94 +119,36 @@ {% else %} - {% endif %} + {% endif %} -{% if not estimate.is_completed %} +{% if estimate.is_completed %}
-
-

Page Missing!

-

But no worries! Our ostrich is looking everywhere
+

ERROR FETCHING DATA

-
- -
-
-
- - - -
-
- -
+ +
{% else%} - {% comment %}
- - - -
{% endcomment %} +
+
+ +
+
+ +
+
+
@@ -220,11 +162,11 @@
- {% comment %}

{% trans "Estimate Number" %} : #{{estimate.estimate_number}}

{% endcomment %} -

{% trans "Date" %} : {{estimate.date_in_review}}

-

{% trans "Customer" %} : {{estimate.customer.customer_name}}

-

{% trans "Email" %} : {{estimate.customer.email}}

-

{% trans "Terms" %} : {{estimate.terms|title}}

+

{{ _("Estimate Number") }} : #{{estimate.estimate_number}}

+

{{ _("Date") }} : {{estimate.date_in_review}}

+

{{ _("Customer") }} : {{estimate.customer.customer_name}}

+

{{ _("Email") }} : {{estimate.customer.email}}

+

{{ _("Terms") }} : {{estimate.terms|title}}

@@ -233,13 +175,13 @@ - - - - - - - + + + + + + + @@ -248,10 +190,10 @@ - - - - + + + + {% endfor %} @@ -260,8 +202,8 @@
-

{% trans "VAT" %} ({{vat}}%): {{data.vat}} {{ CURRENCY }}

-

{% trans "Additional Services" %}: +

{{ _("VAT") }} ({{vat}}%): {{data.vat}} {{ CURRENCY }}

+

{{ _("Additional Services") }} :
{% for service in data.additional_services %} {{service.name}} - {{service.price}} {{ CURRENCY }}
@@ -271,7 +213,7 @@

-

{%trans "Total Amount" %}: {{data.grand_total}} {{ CURRENCY }}

+

{{ _("Total Amount") }} : {{data.grand_total}} {{ CURRENCY }}

@@ -308,15 +250,6 @@ html2pdf().from(element).set(options).save(); }); - document.getElementById('confirmAccept').addEventListener('click', function () { - // Handle the accept action here - $('#acceptModal').modal('hide'); - }); - - document.getElementById('confirmReject').addEventListener('click', function () { - // Handle the reject action here - $('#rejectModal').modal('hide'); - }); \ No newline at end of file
{% trans "VIN" %}{% trans "Make" %}{% trans "Model" %}{% trans "Year" %}{% trans "Quantity" %}{% trans "Unit Price" %}{% trans "Total" %}{{ _("VIN") }}{{ _("Make") }}{{ _("Model") }}{{ _("Year") }}{{ _("Quantity") }}{{ _("Unit Price") }}{{ _("Total") }}
{{ car.vin }} {{ car.make }} {{ car.model }}{{ car.year }}{{ car.quantity }}{{ car.unit_price }}{{ car.total }}{{ car.year }}{{ car.quantity }}{{ car.unit_price }}{{ car.total }}