From 86792930f0447a253e9f4693f4805c567cb50998 Mon Sep 17 00:00:00 2001 From: Faheedkhan Date: Tue, 2 Sep 2025 14:08:07 +0300 Subject: [PATCH] new chnages to the sale and purchase report and chnages to the charts label colors --- inventory/urls.py | 1 + inventory/views.py | 255 +++++++++++++----- locale/ar/LC_MESSAGES/django.mo | Bin 233822 -> 234012 bytes locale/ar/LC_MESSAGES/django.po | 16 -- templates/dashboards/general_dashboard.html | 8 +- templates/ledger/reports/car_sale_report.html | 167 +++++++----- templates/ledger/reports/purchase_report.html | 26 +- templates/sales/estimates/estimate_form.html | 2 +- templates/welcome.html | 6 +- 9 files changed, 324 insertions(+), 157 deletions(-) diff --git a/inventory/urls.py b/inventory/urls.py index edc968a1..99f49ec0 100644 --- a/inventory/urls.py +++ b/inventory/urls.py @@ -1308,6 +1308,7 @@ urlpatterns = [ views.car_sale_report_view, name="car-sale-report", ), + path('/car-sale-report/get_filtered_choices/',views.get_filtered_choices,name='get_filtered_choices'), path('car-sale-report//csv/', views.car_sale_report_csv_export, name='car-sale-report-csv-export'), path('feature/recall/', views.RecallListView.as_view(), name='recall_list'), diff --git a/inventory/views.py b/inventory/views.py index eefb7339..a3fb5d15 100644 --- a/inventory/views.py +++ b/inventory/views.py @@ -11030,55 +11030,76 @@ class InventoryListView(InventoryListViewBase): permission_required = ["django_ledger.view_purchaseordermodel"] @login_required -def purchase_report_view(request,dealer_slug): +def purchase_report_view(request, dealer_slug): + start_date_str = request.GET.get('start_date') + end_date_str = request.GET.get('end_date') + pos = request.entity.get_purchase_orders() + + if start_date_str: + try: + start_date = datetime.strptime(start_date_str, '%Y-%m-%d').date() + pos = pos.filter(created__date__gte=start_date) + except (ValueError, TypeError): + pass + + if end_date_str: + try: + end_date = datetime.strptime(end_date_str, '%Y-%m-%d').date() + pos = pos.filter(created__date__lte=end_date) + except (ValueError, TypeError): + pass + data = [] - total_po_amount=0 - total_po_cars=0 + total_po_amount = 0 + total_po_cars = 0 + for po in pos: - items = [{"total":x.total_amount,"q":x.quantity} for x in po.get_itemtxs_data()[0].all()] + items = [{"total": x.total_amount, "q": x.quantity} for x in po.get_itemtxs_data()[0].all()] - po_amount=0 - po_quantity=0 - for item in items: - po_amount+=item["total"] - po_quantity+=item["q"] + po_amount = sum(item["total"] for item in items) + po_quantity = sum(item["q"] for item in items) - total_po_amount+=po_amount - total_po_cars+=po_quantity - bills=po.get_po_bill_queryset() - vendors=set([bill.vendor.vendor_name for bill in bills]) + total_po_amount += po_amount + total_po_cars += po_quantity + + bills = po.get_po_bill_queryset() + vendors = set([bill.vendor.vendor_name for bill in bills]) vendors_str = ", ".join(sorted(list(vendors))) if vendors else "N/A" - data.append({"po_number":po.po_number,"po_created":po.created,"po_status":po.po_status,"po_fulfilled_date":po.date_fulfilled,"po_amount":po_amount, - "po_quantity":po_quantity,"vendors_str":vendors_str}) + + data.append({ + "po_number": po.po_number, + "po_created": po.created, + "po_status": po.po_status, + "po_fulfilled_date": po.date_fulfilled, + "po_amount": po_amount, + "po_quantity": po_quantity, + "vendors_str": vendors_str + }) current_time = timezone.now().strftime("%Y-%m-%d %H:%M:%S") - context={ - "dealer":request.entity.name, - "time":current_time, - "data":data, - "total_po_amount":total_po_amount, - "total_po_cars":total_po_cars, - "current_time":current_time - + context = { + "dealer": request.entity.name, + "time": current_time, + "data": data, + "total_po_amount": total_po_amount, + "total_po_cars": total_po_cars, + "current_time": current_time, + "start_date": start_date_str, + "end_date": end_date_str, } + return render(request, 'ledger/reports/purchase_report.html', context) - return render(request,'ledger/reports/purchase_report.html',context) - - -def purchase_report_csv_export(request,dealer_slug): +def purchase_report_csv_export(request, dealer_slug): response = HttpResponse(content_type='text/csv') - - current_time = timezone.now().strftime("%Y-%m-%d_%H%M%S") filename = f"purchase_report_{dealer_slug}_{current_time}.csv" response['Content-Disposition'] = f'attachment; filename="{filename}"' writer = csv.writer(response) - header = [ 'PO Number', 'Created Date', @@ -11089,22 +11110,38 @@ def purchase_report_csv_export(request,dealer_slug): 'Vendors' ] writer.writerow(header) + pos = request.entity.get_purchase_orders() + start_date_str = request.GET.get('start_date') + end_date_str = request.GET.get('end_date') + + if start_date_str: + try: + start_date = datetime.strptime(start_date_str, '%Y-%m-%d').date() + pos = pos.filter(created__date__gte=start_date) + except (ValueError, TypeError): + pass + + if end_date_str: + try: + end_date = datetime.strptime(end_date_str, '%Y-%m-%d').date() + pos = pos.filter(created__date__lte=end_date) + except (ValueError, TypeError): + pass for po in pos: po_amount = 0 po_quantity = 0 - items = [{"total":x.total_amount,"q":x.quantity} for x in po.get_itemtxs_data()[0].all()] + items = [{"total": x.total_amount, "q": x.quantity} for x in po.get_itemtxs_data()[0].all()] for item in items: po_amount += item["total"] po_quantity += item["q"] bills = po.get_po_bill_queryset() - vendors = set([bill.vendor.vendor_name for bill in bills ]) + vendors = set([bill.vendor.vendor_name for bill in bills]) vendors_str = ", ".join(sorted(list(vendors))) if vendors else "N/A" - writer.writerow([ po.po_number, po.created.strftime("%Y-%m-%d %H:%M:%S") if po.created else '', @@ -11117,22 +11154,22 @@ def purchase_report_csv_export(request,dealer_slug): return response - @login_required def car_sale_report_view(request, dealer_slug): dealer = get_object_or_404(models.Dealer, slug=dealer_slug) - vat = models.VatRate.objects.filter(dealer=dealer,is_active=True).first() - VAT_RATE=vat.rate + vat = models.VatRate.objects.filter(dealer=dealer, is_active=True).first() + VAT_RATE = vat.rate if vat else 0 cars_sold = models.Car.objects.filter(dealer=dealer, status='sold') - # Get filter parameters from the request selected_make = request.GET.get('make') selected_model = request.GET.get('model') selected_serie = request.GET.get('serie') selected_year = request.GET.get('year') - selected_stock_type=request.GET.get('stock_type') + selected_stock_type = request.GET.get('stock_type') + start_date_str = request.GET.get('start_date') + end_date_str = request.GET.get('end_date') # Apply filters to the queryset if selected_make: @@ -11145,62 +11182,122 @@ def car_sale_report_view(request, dealer_slug): cars_sold = cars_sold.filter(year=selected_year) if selected_stock_type: cars_sold = cars_sold.filter(stock_type=selected_stock_type) + + # Corrected: Apply date filters using the 'sold_date' field + if start_date_str: + try: + start_date = datetime.strptime(start_date_str, '%Y-%m-%d').date() + cars_sold = cars_sold.filter(sold_date__gte=start_date) + except (ValueError, TypeError): + pass + + if end_date_str: + try: + end_date = datetime.strptime(end_date_str, '%Y-%m-%d').date() + cars_sold = cars_sold.filter(sold_date__lte=end_date) + except (ValueError, TypeError): + pass - - # # Calculate summary data for the filtered results - total_cars_sold=cars_sold.count() + # Calculate summary data for the filtered results + total_cars_sold = cars_sold.count() total_revenue_from_cars = cars_sold.aggregate( total=Sum(F('marked_price') - F('discount_amount')) )['total'] or 0 - total_vat_on_cars=cars_sold.annotate( + total_vat_on_cars = cars_sold.annotate( final_price=F('marked_price') - F('discount_amount')).aggregate( total=Sum(F('final_price') * VAT_RATE))['total'] or 0 - total_revenue_from_additonals=sum([car.get_additional_services()['total'] for car in cars_sold]) - total_vat_from_additonals=sum([car.get_additional_services()['services_vat'] for car in cars_sold]) - total_vat_collected = total_vat_on_cars+total_vat_from_additonals - total_revenue_collected=total_revenue_from_cars+total_revenue_from_additonals - total_discount = sum([car.discount for car in cars_sold]) + total_revenue_from_additonals = sum([car.get_additional_services()['total'] for car in cars_sold]) + total_vat_from_additonals = sum([car.get_additional_services()['services_vat'] for car in cars_sold]) + total_vat_collected = total_vat_on_cars + total_vat_from_additonals + total_revenue_collected = total_revenue_from_cars + total_revenue_from_additonals + + total_discount = cars_sold.aggregate(total=Sum('discount_amount'))['total'] or 0 current_time = timezone.now().strftime("%Y-%m-%d %H:%M:%S") - # Get distinct values for filter dropdowns + # Get distinct makes for the initial dropdown, other dropdowns will be populated via AJAX base_sold_cars_queryset = models.Car.objects.filter(dealer=dealer, status='sold') - makes =base_sold_cars_queryset.values_list('id_car_make__name', flat=True).distinct() - models_qs =base_sold_cars_queryset.values_list('id_car_model__name', flat=True).distinct() - - series =base_sold_cars_queryset.values_list('id_car_serie__name', flat=True).distinct() - stock_types=base_sold_cars_queryset.values_list('stock_type', flat=True).distinct() - years = base_sold_cars_queryset.values_list('year', flat=True).distinct().order_by('-year') + makes = base_sold_cars_queryset.values_list('id_car_make__name', flat=True).distinct().order_by('id_car_make__name') context = { 'cars_sold': cars_sold, - 'total_cars_sold':total_cars_sold, + 'total_cars_sold': total_cars_sold, 'current_time': current_time, 'dealer': dealer, 'total_revenue_from_cars': total_revenue_from_cars, - 'total_revenue_from_additonals':total_revenue_from_additonals, + 'total_revenue_from_additonals': total_revenue_from_additonals, 'total_revenue_collected': total_revenue_collected, - 'total_vat_on_cars':total_vat_on_cars, - 'total_vat_from_additonals':total_vat_from_additonals, - 'total_vat_collected':total_vat_collected, + 'total_vat_on_cars': total_vat_on_cars, + 'total_vat_from_additonals': total_vat_from_additonals, + 'total_vat_collected': total_vat_collected, 'total_discount': total_discount, 'makes': makes, - 'models': models_qs, - 'series': series, - 'years': years, - 'stock_types':stock_types, 'selected_make': selected_make, 'selected_model': selected_model, 'selected_serie': selected_serie, 'selected_year': selected_year, - 'selected_stock_type':selected_stock_type, + 'selected_stock_type': selected_stock_type, + 'start_date': start_date_str, + 'end_date': end_date_str, } return render(request, 'ledger/reports/car_sale_report.html', context) +### 2. Updated `get_filtered_choices` + +@login_required +def get_filtered_choices(request, dealer_slug): + dealer = get_object_or_404(models.Dealer, slug=dealer_slug) + + # Get all filter parameters from the request + selected_make = request.GET.get('make') + selected_model = request.GET.get('model') + selected_serie = request.GET.get('serie') + start_date_str = request.GET.get('start_date') + end_date_str = request.GET.get('end_date') + + # Start with the base queryset + queryset = models.Car.objects.filter(dealer=dealer, status='sold') + + # Apply filters based on what is selected + if selected_make: + queryset = queryset.filter(id_car_make__name=selected_make) + + if selected_model: + queryset = queryset.filter(id_car_model__name=selected_model) + + if selected_serie: + queryset = queryset.filter(id_car_serie__name=selected_serie) + + # Corrected: Apply date filters to the AJAX queryset + if start_date_str: + try: + start_date = datetime.strptime(start_date_str, '%Y-%m-%d').date() + queryset = queryset.filter(sold_date__gte=start_date) + except (ValueError, TypeError): + pass + + if end_date_str: + try: + end_date = datetime.strptime(end_date_str, '%Y-%m-%d').date() + queryset = queryset.filter(sold_date__lte=end_date) + except (ValueError, TypeError): + pass + + data = { + 'models': list(queryset.values_list('id_car_model__name', flat=True).distinct().order_by('id_car_model__name')), + 'series': list(queryset.values_list('id_car_serie__name', flat=True).distinct().order_by('id_car_serie__name')), + 'years': list(queryset.values_list('year', flat=True).distinct().order_by('-year')), + 'stock_types': list(queryset.values_list('stock_type', flat=True).distinct().order_by('stock_type')) + } + return JsonResponse(data) + + +### 3. Updated `car_sale_report_csv_export` + @login_required def car_sale_report_csv_export(request, dealer_slug): response = HttpResponse(content_type='text/csv') @@ -11229,6 +11326,8 @@ def car_sale_report_csv_export(request, dealer_slug): selected_serie = request.GET.get('serie') selected_year = request.GET.get('year') selected_stock_type = request.GET.get('stock_type') + start_date_str = request.GET.get('start_date') + end_date_str = request.GET.get('end_date') if selected_make: cars_sold = cars_sold.filter(id_car_make__name=selected_make) @@ -11240,15 +11339,28 @@ def car_sale_report_csv_export(request, dealer_slug): cars_sold = cars_sold.filter(year=selected_year) if selected_stock_type: cars_sold = cars_sold.filter(stock_type=selected_stock_type) + + # Corrected: Apply date filters for CSV export + if start_date_str: + try: + start_date = datetime.strptime(start_date_str, '%Y-%m-%d').date() + cars_sold = cars_sold.filter(sold_date__gte=start_date) + except (ValueError, TypeError): + pass + + if end_date_str: + try: + end_date = datetime.strptime(end_date_str, '%Y-%m-%d').date() + cars_sold = cars_sold.filter(sold_date__lte=end_date) + except (ValueError, TypeError): + pass # Write the data for the filtered cars for car in cars_sold: - # Fetching data for the additional services additional_services = car.get_additional_services() services_total_price = additional_services['total'] services_vat_amount = additional_services['services_vat'] - # Checking for the invoice number to avoid errors on cars without one invoice_number = None sold_date = None if car.invoice: @@ -11268,18 +11380,17 @@ def car_sale_report_csv_export(request, dealer_slug): sold_date.strftime("%Y-%m-%d %H:%M:%S") if sold_date else '', car.cost_price, car.marked_price, - car.discount, # Ensure this property returns a number - car.final_price, # Selling Price without VAT - car.vat_amount, # VAT on the car - services_total_price, # Total services without VAT - services_vat_amount, # VAT on services + car.discount_amount, + car.final_price, + car.vat_amount, + services_total_price, + services_vat_amount, car.final_price_plus_services_plus_vat, invoice_number, ]) return response - @login_required # @permission_required('inventory.view_staff') def staff_password_reset_view(request, dealer_slug, user_pk): diff --git a/locale/ar/LC_MESSAGES/django.mo b/locale/ar/LC_MESSAGES/django.mo index 0adf915563c4971496c4403b37f973735067f8aa..155f3b64145669be96f4f18ed11c2ebafcff8c9b 100644 GIT binary patch delta 55837 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

kiYCKl`+I%t4)*gcl7 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 Jv+&60{|D+wcSisK diff --git a/locale/ar/LC_MESSAGES/django.po b/locale/ar/LC_MESSAGES/django.po index 146e2478..8810f382 100644 --- a/locale/ar/LC_MESSAGES/django.po +++ b/locale/ar/LC_MESSAGES/django.po @@ -13191,20 +13191,14 @@ msgid "Total cars" msgstr "إجمالي السيارات" #: templates/dealers/dealer_detail.html:113 -#, fuzzy -#| msgid "Subscriptions" msgid "Plan & Subscription" msgstr "الاشتراكات" #: templates/dealers/dealer_detail.html:125 -#, fuzzy -#| msgid "Car Details" msgid "Company Details" msgstr "تفاصيل السيارة" #: templates/dealers/dealer_detail.html:137 -#, fuzzy -#| msgid "Car Transfer" msgid "Car Brands" msgstr "نقل السيارة" @@ -13252,8 +13246,6 @@ msgid "Upgrade Plan" msgstr "ترقية الخطة" #: templates/dealers/dealer_detail.html:212 -#, fuzzy -#| msgid "Manage Groups & Permissions" msgid "Manage Users & Cars" msgstr "إدارة المجموعات والأذونات" @@ -13269,20 +13261,14 @@ msgid "Contact support to increase your limits" msgstr "" #: templates/dealers/dealer_detail.html:258 -#, fuzzy -#| msgid "Client Information" msgid "Contact Information" msgstr "معلومات العميل" #: templates/dealers/dealer_detail.html:286 -#, fuzzy -#| msgid "User Information" msgid "VAT Information" msgstr "معلومات المستخدم" #: templates/dealers/dealer_detail.html:292 -#, fuzzy -#| msgid "Updated At" msgid "Update VAT" msgstr "تم التحديث" @@ -13291,8 +13277,6 @@ msgid "Makes you are selling" msgstr "الماركات التي تبيعها" #: templates/dealers/dealer_detail.html:321 -#, fuzzy -#| msgid "No staff member selected." msgid "No car makes selected." msgstr "لم يتم اختيار أي عضو من الفريق." diff --git a/templates/dashboards/general_dashboard.html b/templates/dashboards/general_dashboard.html index 03f2fa3a..f863b446 100644 --- a/templates/dashboards/general_dashboard.html +++ b/templates/dashboards/general_dashboard.html @@ -122,7 +122,7 @@ data: {{ monthly_cars_sold_json|safe }}, backgroundColor: primaryColor, borderColor: primaryColor, - borderWidth: 1 + borderWidth: 1, }] }, options: { @@ -193,7 +193,7 @@ plugins: { legend: { display: true, - labels: { color: '#495057', boxWidth: 20 } + labels: { boxWidth: 20 } }, tooltip: { backgroundColor: 'rgba(33, 37, 41, 0.9)', @@ -250,7 +250,7 @@ plugins: { legend: { position: 'right', - labels: { color: '#343a40', font: { size: 14 } } + labels: { font: { size: 14 } } }, tooltip: { backgroundColor: 'rgba(33, 37, 41, 0.9)', @@ -349,7 +349,7 @@ plugins: { legend: { position: 'right', - labels: { color: '#343a40', font: { size: 14 } } + labels: { font: { size: 14 } } }, tooltip: { backgroundColor: 'rgba(33, 37, 41, 0.9)', diff --git a/templates/ledger/reports/car_sale_report.html b/templates/ledger/reports/car_sale_report.html index 971a3990..3ab02e91 100644 --- a/templates/ledger/reports/car_sale_report.html +++ b/templates/ledger/reports/car_sale_report.html @@ -3,7 +3,7 @@ {% load static %} {% load tenhal_tag %} {% block title %} - {{ _("Car Sale Report") |capfirst }} + {{ _("Car Sale Report")|capfirst }} {% endblock title %} {% block content %}

@@ -47,11 +45,19 @@

{% trans 'Report Date' %}: {{ current_time }}

-
+

{% trans 'Filters' %}

-
+ +
+ + +
+
+ + +
- {% for model in models %} - - {% endfor %} + {% if selected_model %} + + {% endif %}
@@ -111,27 +109,8 @@
-
- - {% comment %} 'cars_sold': cars_sold, - 'current_time': current_time, - 'dealer': dealer, - 'total_revenue_from_cars': total_revenue_from_cars, - 'total_revenue_from_additonals':total_revenue_from_additonals, - 'total_revenue_collected': total_revenue_collected, - 'total_vat_on_cars':total_vat_on_cars, - 'total_vat_from_additonals':total_vat_from_additonals, - 'total_vat_collected':total_vat_collected, - 'total_discount': total_discount, - 'makes': makes, - 'models': models_qs, - 'series': series, - 'years': years, - 'selected_make': selected_make, - 'selected_model': selected_model, - 'selected_serie': selected_serie, - 'selected_year': selected_year, {% endcomment %} - +
+

{% trans 'Report Summary' %}

@@ -166,7 +145,7 @@ {% trans 'Total Revenue' %}

- {{ total_revenue_collected |floatformat:2 }} + {{ total_revenue_collected|floatformat:2 }}

@@ -302,14 +281,82 @@ {{ car.final_price_plus_services_plus_vat|floatformat:2 }} - {{ car.invoice.invoice_number }} - - - {% endfor %} - - - - - - - {% endblock %} + {{ car.invoice.invoice_number }} + + + {% endfor %} + + + + + + + + + + +{% endblock %} \ No newline at end of file diff --git a/templates/ledger/reports/purchase_report.html b/templates/ledger/reports/purchase_report.html index d6f10e42..6aecdab6 100644 --- a/templates/ledger/reports/purchase_report.html +++ b/templates/ledger/reports/purchase_report.html @@ -2,7 +2,7 @@ {% load i18n %} {% load static %} {% block title %} - {{ _("Car Purchase Report") |capfirst }} + {{ _("Car Purchase Report")|capfirst }} {% endblock title %} {% block content %}