diff --git a/inventory/forms.py b/inventory/forms.py index 9989cd97..151b48c5 100644 --- a/inventory/forms.py +++ b/inventory/forms.py @@ -177,7 +177,7 @@ class DealerForm(forms.ModelForm): """ - phone_number = SaudiPhoneNumberField(label=_("Phone Number")) + # phone_number = SaudiPhoneNumberField(label=_("Phone Number")) class Meta: model = Dealer @@ -193,7 +193,7 @@ class DealerForm(forms.ModelForm): class CustomerForm(forms.ModelForm): - phone_number = SaudiPhoneNumberField(label=_("Phone Number")) + # phone_number = SaudiPhoneNumberField(label=_("Phone Number")) class Meta: model = Customer @@ -563,7 +563,7 @@ class VendorForm(forms.ModelForm): :type Meta: Type[VendorForm.Meta] """ - phone_number = SaudiPhoneNumberField(label=_("Phone Number")) + # phone_number = SaudiPhoneNumberField(label=_("Phone Number")) contact_person = forms.CharField(label=_("Contact Person")) class Meta: @@ -652,7 +652,7 @@ class RepresentativeForm(forms.ModelForm): :type Meta.fields: list of str """ - phone_number = SaudiPhoneNumberField(label=_("Phone Number")) + # phone_number = SaudiPhoneNumberField(label=_("Phone Number")) class Meta: model = Representative diff --git a/inventory/urls.py b/inventory/urls.py index f0a92d2d..a6f63fbc 100644 --- a/inventory/urls.py +++ b/inventory/urls.py @@ -443,7 +443,7 @@ urlpatterns = [ path( "/inventory//list/", views.InventoryListView.as_view(), - name="inventort_list", + name="inventory_list", ), # Sales URLs quotation_create # path( diff --git a/inventory/utils.py b/inventory/utils.py index 43d4d252..1886d8fc 100644 --- a/inventory/utils.py +++ b/inventory/utils.py @@ -1588,7 +1588,7 @@ def _post_sale_and_cogs(invoice, dealer): net_car_price = Decimal(data['discounted_price']) net_additionals_price = Decimal(data['additional_services']['total']) vat_amount = Decimal(data['vat_amount']) - grand_total = net_car_price + net_additionals_price + vat_amount + grand_total = net_car_price + car.get_additional_services_amount_ + vat_amount cost_total = Decimal(car.cost_price) discount_amount =Decimal(data['discount_amount']) @@ -1608,7 +1608,8 @@ def _post_sale_and_cogs(invoice, dealer): journal_entry=je_sale, account=cash_acc, amount=grand_total, - tx_type='debit' + tx_type='debit', + description='Debit to Cash on Hand' ) # # Cr A/R (clear the receivable) @@ -1624,7 +1625,8 @@ def _post_sale_and_cogs(invoice, dealer): journal_entry=je_sale, account=vat_acc, amount=vat_amount, - tx_type='credit' + tx_type='credit', + description="Credit to Tax Payable" ) # Cr Sales – Car @@ -1633,7 +1635,7 @@ def _post_sale_and_cogs(invoice, dealer): account=car_rev, amount=net_car_price, tx_type='credit', - description="Car Sale" + description=" Credit to Car Sales" ) if car.get_additional_services_amount > 0: @@ -1642,14 +1644,16 @@ def _post_sale_and_cogs(invoice, dealer): journal_entry=je_sale, account=add_rev, amount=car.get_additional_services_amount, - tx_type='credit' + tx_type='credit', + description="Credit to After-Sales Services" ) TransactionModel.objects.create( journal_entry=je_sale, + account=vat_acc, amount=car.get_additional_services_vat, tx_type='credit', - description="Additional Services VAT" + description="Credit to Tax Payable (Additional Services)" ) # ------------------------------------------------------------------ @@ -1668,7 +1672,7 @@ def _post_sale_and_cogs(invoice, dealer): journal_entry=je_cogs, account=cogs_acc, amount=cost_total, - tx_type='debit' + tx_type='debit', ) # Cr Inventory diff --git a/inventory/validators.py b/inventory/validators.py index 8d9b66eb..a3a9c8aa 100644 --- a/inventory/validators.py +++ b/inventory/validators.py @@ -3,7 +3,7 @@ from django.utils.translation import gettext_lazy as _ import re class SaudiPhoneNumberValidator(RegexValidator): - def __init__(self): + def __init__(self, *args, **kwargs): super().__init__( regex=r"^(\+9665|05)[0-9]{8}$", message=_("Enter a valid Saudi phone number (05XXXXXXXX or +9665XXXXXXXX)"), diff --git a/inventory/views.py b/inventory/views.py index f85797cd..7f716543 100644 --- a/inventory/views.py +++ b/inventory/views.py @@ -10617,10 +10617,12 @@ class PurchaseOrderListView(LoginRequiredMixin, PermissionRequiredMixin, ListVie query = self.request.GET.get("q") qs = self.model.objects.filter(entity=dealer.entity) if query: - qs = apply_search_filters(qs, query) + qs=qs.filter(Q(po_number__icontains=query)|Q(po_status__icontains=query)|Q(po_title__icontains=query)) + return qs return qs def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) dealer = get_user_type(self.request) vendors=models.Vendor.objects.filter(dealer=dealer) context = super().get_context_data(**kwargs) diff --git a/scripts/set_plans.py b/scripts/set_plans.py index a5593359..0fb47a05 100644 --- a/scripts/set_plans.py +++ b/scripts/set_plans.py @@ -4,6 +4,13 @@ from decimal import Decimal def run(): # Create quotas first + free_quota = Quota.objects.create( + codename="free_quota", + name="Free Features", + description="Free plan features", + is_boolean=True, + url="pricing", + ) basic_quota = Quota.objects.create( codename="basic_quota", name="Basic Features", @@ -27,7 +34,19 @@ def run(): is_boolean=True, url="pricing", ) - + # Create the plans + free_plan = Plan.objects.create( + name="Free", + description="Free plan with limited features", + price=Decimal("0.00"), # 0 + period=7, # 1 week + default=True, + available=True, + visible=True, + order=1, + ) + free_plan.quotas.add(free_quota) + # Create the plans basic_plan = Plan.objects.create( name="Basic", @@ -39,7 +58,7 @@ def run(): visible=True, order=1, ) - basic_plan.quotas.add(basic_quota) + basic_plan.quotas.add(basic_quota,free_quota) pro_plan = Plan.objects.create( name="Professional", @@ -50,7 +69,7 @@ def run(): visible=True, # order=2 ) - pro_plan.quotas.add(basic_quota, pro_quota) + pro_plan.quotas.add(free_quota,basic_quota, pro_quota) premium_plan = Plan.objects.create( name="Premium", @@ -61,4 +80,4 @@ def run(): visible=True, order=3, ) - premium_plan.quotas.add(basic_quota, pro_quota, premium_quota) + premium_plan.quotas.add(free_quota,basic_quota, pro_quota, premium_quota) diff --git a/staticfiles/css/custom.css b/staticfiles/css/custom.css index 987242ff..fa1996f6 100644 --- a/staticfiles/css/custom.css +++ b/staticfiles/css/custom.css @@ -138,7 +138,8 @@ html[dir="rtl"] .form-icon-container .form-control { top: 50%; left: 50%; transform: translate(-50%, -50%); - z-index: 10; + z-index: 9999; + pointer-events: none; } #spinner-bg { @@ -150,11 +151,14 @@ html[dir="rtl"] .form-icon-container .form-control { background-color: rgba(255, 255, 255, 0.7); opacity: 0; transition: opacity 500ms ease-in; - z-index: 5; + visibility: hidden; + z-index: 10000; + pointer-events: none; } #spinner-bg.htmx-request { opacity: .8; + visibility: visible; } diff --git a/staticfiles/images/customers/Gemini_Generated_Image_wf3w0uwf3w0uwf3w_1.png b/staticfiles/images/customers/Gemini_Generated_Image_wf3w0uwf3w0uwf3w_1.png new file mode 100644 index 00000000..934c1be1 Binary files /dev/null and b/staticfiles/images/customers/Gemini_Generated_Image_wf3w0uwf3w0uwf3w_1.png differ diff --git a/staticfiles/images/customers/istockphoto-1188035960-612x612.jpg b/staticfiles/images/customers/istockphoto-1188035960-612x612.jpg new file mode 100644 index 00000000..ede81f81 Binary files /dev/null and b/staticfiles/images/customers/istockphoto-1188035960-612x612.jpg differ diff --git a/staticfiles/images/logos/users/Gemini_Generated_Image_wf3w0uwf3w0uwf3w.png b/staticfiles/images/logos/users/Gemini_Generated_Image_wf3w0uwf3w0uwf3w.png new file mode 100644 index 00000000..0b4f99a9 Binary files /dev/null and b/staticfiles/images/logos/users/Gemini_Generated_Image_wf3w0uwf3w0uwf3w.png differ diff --git a/templates/dashboards/aging_inventory_list.html b/templates/dashboards/aging_inventory_list.html index f2619a01..01097a10 100644 --- a/templates/dashboards/aging_inventory_list.html +++ b/templates/dashboards/aging_inventory_list.html @@ -8,7 +8,7 @@ {% trans "Aging Inventory" %} -

{% trans "Aging Inventory Total" %} :: {{total_aging_inventory_value}}

+

{% trans "Aging Inventory Total" %} :: {{total_aging_inventory_value|default:0.00}}

{% trans "Cars in inventory for more than 60 days." %}

diff --git a/templates/dealers/dealer_detail.html b/templates/dealers/dealer_detail.html index 704b2d97..88cd9a90 100644 --- a/templates/dealers/dealer_detail.html +++ b/templates/dealers/dealer_detail.html @@ -138,11 +138,11 @@ {% endcomment %}
{% if not dealer.user.userplan %} - {{ _("Subscribe Now") }} + {{ _("Subscribe Now") }} {% elif dealer.user.userplan.is_expired %} - {{ _("Renew") }} + {{ _("Renew") }} {% elif dealer.user.userplan.plan.name != "Enterprise" %} - {{ _("Upgrade Plan") }} + {{ _("Upgrade Plan") }} {% endif %}
diff --git a/templates/header.html b/templates/header.html index 6c3c2d0a..3fe083dd 100644 --- a/templates/header.html +++ b/templates/header.html @@ -6,7 +6,7 @@