From 9beeedd5bdfe9bd6aff923ec38173e1e7140fcbc Mon Sep 17 00:00:00 2001 From: ismail Date: Wed, 25 Jun 2025 20:10:12 +0300 Subject: [PATCH] add slug for the remaining of the apps --- inventory/urls.py | 121 +++++++++-------- inventory/utils.py | 2 +- inventory/views.py | 127 +++++++++--------- .../confirm_activate_account.html | 2 +- templates/admin_management/management.html | 4 +- templates/admin_management/nav.html | 6 +- .../permenant_delete_account.html | 2 +- .../admin_management/user_management.html | 14 +- templates/dealers/assign_car_makes.html | 2 +- templates/dealers/dealer_detail.html | 8 +- templates/header.html | 14 +- templates/inventory/car_form.html | 2 +- templates/items/expenses/expenses_list.html | 4 +- templates/items/service/service_list.html | 4 +- .../bank_accounts/bank_account_detail.html | 6 +- .../bank_accounts/bank_account_list.html | 8 +- .../includes/card_journal_entry.html | 8 +- .../journal_entry/journal_entry_form.html | 2 +- .../journal_entry/journal_entry_list.html | 8 +- .../journal_entry/journal_entry_txs.html | 10 +- templates/ledger/ledger/ledger_list.html | 22 +-- templates/plans/current.html | 2 +- templates/plans/plan_table.html | 2 +- templates/pricing_page.html | 2 +- templates/users/user_list.html | 2 +- templates/vendors/vendors_list.html | 8 +- templates/vendors/view_vendor.html | 4 +- 27 files changed, 205 insertions(+), 191 deletions(-) diff --git a/inventory/urls.py b/inventory/urls.py index 75cf7332..94b061ba 100644 --- a/inventory/urls.py +++ b/inventory/urls.py @@ -50,12 +50,12 @@ urlpatterns = [ # path('tasks//detail/', views.task_detail, name='task_detail'), # Dashboards # path("user//settings/", views.UserSettingsView.as_view(), name="user_settings"), - path("pricing/", views.pricing_page, name="pricing_page"), - path("submit_plan/", views.submit_plan, name="submit_plan"), - path("payment-callback/", views.payment_callback, name="payment_callback"), + path("/pricing/", views.pricing_page, name="pricing_page"), + path("/submit_plan/", views.submit_plan, name="submit_plan"), + path("/payment-callback/", views.payment_callback, name="payment_callback"), # path( - "dealers/activity/", + "/dealers/activity/", views.UserActivityLogListView.as_view(), name="dealer_activity", ), @@ -64,7 +64,7 @@ urlpatterns = [ views.DealerSettingsView, name="dealer_settings", ), - path("dealers/assign-car-makes/", views.assign_car_makes, name="assign_car_makes"), + path("/dealers/assign-car-makes/", views.assign_car_makes, name="assign_car_makes"), path( "dashboards/manager/", views.ManagerDashboard.as_view(), @@ -76,7 +76,7 @@ urlpatterns = [ path("export/format/", TableExport, name="export"), # Dealer URLs path( - "dealers//", views.DealerDetailView.as_view(), name="dealer_detail" + "/dealers/", views.DealerDetailView.as_view(), name="dealer_detail" ), path( "dealers//update/", @@ -267,21 +267,25 @@ urlpatterns = [ name="mark_notification_as_read", ), path("crm/calender/", views.EmployeeCalendarView.as_view(), name="calendar_list"), + ####################################################### # Vendor URLs - path("vendors/create/", views.VendorCreateView.as_view(), name="vendor_create"), - path("vendors", views.VendorListView.as_view(), name="vendor_list"), - path("vendors//", views.vendorDetailView, name="vendor_detail"), + ####################################################### + path("/vendors/create/", views.VendorCreateView.as_view(), name="vendor_create"), + path("/vendors", views.VendorListView.as_view(), name="vendor_list"), + path("/vendors//", views.vendorDetailView, name="vendor_detail"), path( - "vendors//update/", + "/vendors//update/", views.VendorUpdateView.as_view(), name="vendor_update", ), path( - "vendors//delete/", + "/vendors//delete/", views.delete_vendor, name="vendor_delete", ), + ####################################################### # Car URLs + ####################################################### path("/cars/upload_cars/", views.upload_cars, name="upload_cars"), path( "/cars//upload_cars/", @@ -477,24 +481,24 @@ urlpatterns = [ # name="payment_create", # ), # Users URLs - path("user/", views.UserListView.as_view(), name="user_list"), - path("user/create/", views.UserCreateView.as_view(), name="user_create"), - path("user//", views.UserDetailView.as_view(), name="user_detail"), - path("user//groups/", views.UserGroupView, name="user_groups"), + path("/user/", views.UserListView.as_view(), name="user_list"), + path("/user/create/", views.UserCreateView.as_view(), name="user_create"), + path("/user//", views.UserDetailView.as_view(), name="user_detail"), + path("/user//groups/", views.UserGroupView, name="user_groups"), path( - "user//update/", views.UserUpdateView.as_view(), name="user_update" + "/user//update/", views.UserUpdateView.as_view(), name="user_update" ), - path("user//confirm/", views.UserDeleteview, name="user_delete"), + path("/user//confirm/", views.UserDeleteview, name="user_delete"), # Group URLs - path("group/create/", views.GroupCreateView.as_view(), name="group_create"), + path("/group/create/", views.GroupCreateView.as_view(), name="group_create"), path( - "group//update/", views.GroupUpdateView.as_view(), name="group_update" + "/group//update/", views.GroupUpdateView.as_view(), name="group_update" ), - path("group//", views.GroupDetailView.as_view(), name="group_detail"), - path("group/", views.GroupListView.as_view(), name="group_list"), - path("group//confirm/", views.GroupDeleteview, name="group_delete"), + path("/group//", views.GroupDetailView.as_view(), name="group_detail"), + path("/group/", views.GroupListView.as_view(), name="group_list"), + path("/group//confirm/", views.GroupDeleteview, name="group_delete"), path( - "group//permission/", views.GroupPermissionView, name="group_permission" + "/group//permission/", views.GroupPermissionView, name="group_permission" ), # Organization URLs path( @@ -546,34 +550,35 @@ urlpatterns = [ views.RepresentativeDeleteView.as_view(), name="representative_delete", ), - # Ledger URLS + ##################################################################### # Ledger - path("ledgers/", views.LedgerModelListView.as_view(), name="ledger_list"), + ##################################################################### + path("/ledgers/", views.LedgerModelListView.as_view(), name="ledger_list"), path( - "ledgers/create/", views.LedgerModelCreateView.as_view(), name="ledger_create" + "/ledgers/create/", views.LedgerModelCreateView.as_view(), name="ledger_create" ), path( - "ledgers//detail//", + "/ledgers//detail//", views.LedgerModelDetailView.as_view(), name="ledger_detail", ), path( - "ledgers//lock_all_journals//", + "/ledgers//lock_all_journals//", views.ledger_lock_all_journals, name="lock_all_journals", ), path( - "ledgers//unlock_all_journals//", + "/ledgers//unlock_all_journals//", views.ledger_unlock_all_journals, name="unlock_all_journals", ), path( - "ledgers//post_all_journals//", + "/ledgers//post_all_journals//", views.ledger_post_all_journals, name="post_all_journals", ), path( - "ledgers//unpost_all_journals//", + "/ledgers//unpost_all_journals//", views.ledger_unpost_all_journals, name="unpost_all_journals", ), @@ -581,77 +586,81 @@ urlpatterns = [ # "ledgers/create/", views.LedgerModelCreateView.as_view(), name="ledger_create" # ), path( - "journalentries//list/", + "/journalentries//list/", views.JournalEntryListView.as_view(), name="journalentry_list", ), path( - "journalentries//create/", + "/journalentries//create/", views.JournalEntryCreateView.as_view(), name="journalentry_create", ), path( - "journalentries//delete/", + "/journalentries//delete/", views.JournalEntryDeleteView, name="journalentry_delete", ), path( - "journalentries//transactions/", + "/journalentries//transactions/", views.JournalEntryTransactionsView, name="journalentry_transactions", ), path( - "journalentries///detail//txs/", + "/journalentries///detail//txs/", views.JournalEntryModelTXSDetailView.as_view(), name="journalentry_txs", ), + ############################################################## # ledger actions + ############################################################## path( - "ledgers//action//post/", + "/ledgers//action//post/", views.LedgerModelModelActionView.as_view(action_name="post"), name="ledger-action-post", ), path( - "ledgers//action//post-journal-entries/", + "/ledgers//action//post-journal-entries/", views.LedgerModelModelActionView.as_view(action_name="post_journal_entries"), name="ledger-action-post-journal-entries", ), path( - "ledgers//action//unpost/", + "/ledgers//action//unpost/", views.LedgerModelModelActionView.as_view(action_name="unpost"), name="ledger-action-unpost", ), path( - "ledgers//action//lock/", + "/ledgers//action//lock/", views.LedgerModelModelActionView.as_view(action_name="lock"), name="ledger-action-lock", ), path( - "ledgers//action//lock-journal-entries/", + "/ledgers//action//lock-journal-entries/", views.LedgerModelModelActionView.as_view(action_name="lock_journal_entries"), name="ledger-action-lock-journal-entries", ), path( - "ledgers//action//unlock/", + "/ledgers//action//unlock/", views.LedgerModelModelActionView.as_view(action_name="unlock"), name="ledger-action-unlock", ), path( - "ledgers//action//hide/", + "/ledgers//action//hide/", views.LedgerModelModelActionView.as_view(action_name="hide"), name="ledger-action-hide", ), path( - "ledgers//action//unhide/", + "/ledgers//action//unhide/", views.LedgerModelModelActionView.as_view(action_name="unhide"), name="ledger-action-unhide", ), path( - "ledgers//delete//", + "/ledgers//delete//", views.LedgerModelDeleteView.as_view(), name="ledger-delete", ), + ############################################################## # Bank Account + ############################################################## path( "/bank_accounts/", views.BankAccountListView.as_view(), @@ -833,31 +842,31 @@ urlpatterns = [ # path('sales/journal//create/', views.JournalEntryCreateView.as_view(), name='journal_create'), # Items path( - "items/services/", views.ItemServiceListView.as_view(), name="item_service_list" + "/items/services/", views.ItemServiceListView.as_view(), name="item_service_list" ), path( - "items/services/create/", + "/items/services/create/", views.ItemServiceCreateView.as_view(), name="item_service_create", ), path( - "items/services//update/", + "/items/services//update/", views.ItemServiceUpdateView.as_view(), name="item_service_update", ), # Expanese path( - "items/expeneses/", + "/items/expeneses/", views.ItemExpenseListView.as_view(), name="item_expense_list", ), path( - "items/expeneses/create/", + "/items/expeneses/create/", views.ItemExpenseCreateView.as_view(), name="item_expense_create", ), path( - "items/expeneses//update/", + "/items/expeneses//update/", views.ItemExpenseUpdateView.as_view(), name="item_expense_update", ), @@ -1099,20 +1108,20 @@ urlpatterns = [ name="entity-json-pnl", ), # Admin Management... - path("management/", views.management_view, name="management"), - path("management/user_management/", views.user_management, name="user_management"), + path("/management/", views.management_view, name="management"), + path("/management/user_management/", views.user_management, name="user_management"), path( - "management///activate_account/", + "/management///activate_account/", views.activate_account, name="activate_account", ), path( - "management///permenant_delete_account/", + "/management///permenant_delete_account/", views.permenant_delete_account, name="permenant_delete_account", ), path( - "management/audit_log_dashboard/", + "/management/audit_log_dashboard/", views.AuditLogDashboardView, name="audit_log_dashboard", ), diff --git a/inventory/utils.py b/inventory/utils.py index df409ca5..d396fcf2 100644 --- a/inventory/utils.py +++ b/inventory/utils.py @@ -1366,7 +1366,7 @@ def create_user_dealer(email, password, name, arabic_name, phone, crn, vrn, addr def handle_payment(request, order): url = "https://api.moyasar.com/v1/payments" - callback_url = request.build_absolute_uri(reverse("payment_callback")) + callback_url = request.build_absolute_uri(reverse("payment_callback", args=[request.dealer.slug])) if request.user.is_authenticated: # email = request.user.email diff --git a/inventory/views.py b/inventory/views.py index 6c0b3b16..258ff023 100644 --- a/inventory/views.py +++ b/inventory/views.py @@ -2432,7 +2432,7 @@ class VendorListView(LoginRequiredMixin, ListView): @login_required -def vendorDetailView(request, slug): +def vendorDetailView(request, dealer_slug,slug): """ Fetches and renders the detail view for a specific vendor. @@ -2480,7 +2480,6 @@ class VendorCreateView( model = models.Vendor form_class = forms.VendorForm template_name = "vendors/vendor_form.html" - success_url = reverse_lazy("vendor_list") success_message = _("Vendor created successfully") def form_valid(self, form): @@ -2500,7 +2499,8 @@ class VendorCreateView( form.instance.save() return super().form_valid(form) - + def get_success_url(self): + return reverse_lazy("vendor_list", kwargs={"dealer_slug": self.kwargs["dealer_slug"]}) class VendorUpdateView( LoginRequiredMixin, @@ -2531,7 +2531,6 @@ class VendorUpdateView( model = models.Vendor form_class = forms.VendorForm template_name = "vendors/vendor_form.html" - success_url = reverse_lazy("vendor_list") success_message = _("Vendor updated successfully") # def get_initial(self): @@ -2553,10 +2552,11 @@ class VendorUpdateView( # instance.additional_info = additionals # instance.save() return super().form_valid(form) - + def get_success_url(self): + return reverse_lazy("vendor_list", kwargs={"dealer_slug": self.kwargs["dealer_slug"]}) @login_required -def delete_vendor(request, slug): +def delete_vendor(request, dealer_slug,slug): """ Deletes an existing vendor record from the database. @@ -2576,7 +2576,7 @@ def delete_vendor(request, slug): vendor.vendor_model.active = False vendor.save() messages.success(request, _("Vendor deleted successfully")) - return redirect("vendor_list") + return redirect("vendor_list", dealer_slug=dealer_slug) # group @@ -3418,23 +3418,23 @@ class BankAccountCreateView( model = BankAccountModel form_class = BankAccountCreateForm template_name = "ledger/bank_accounts/bank_account_form.html" - success_url = reverse_lazy("bank_account_list") success_message = _("Bank account created successfully") permission_required = ["inventory.view_carfinance"] def form_valid(self, form): - dealer = get_user_type(self.request) + dealer = get_object_or_404(models.Dealer, slug=self.kwargs["dealer_slug"]) form.instance.entity_model = dealer.entity return super().form_valid(form) def get_form_kwargs(self): - dealer = get_user_type(self.request) + dealer = get_object_or_404(models.Dealer, slug=self.kwargs["dealer_slug"]) entity = dealer.entity kwargs = super().get_form_kwargs() kwargs["entity_slug"] = entity.slug kwargs["user_model"] = entity.admin return kwargs - + def get_success_url(self): + return reverse_lazy("bank_account_list", kwargs={"dealer_slug": self.kwargs["dealer_slug"]}) class BankAccountDetailView(LoginRequiredMixin, PermissionRequiredMixin, DetailView): """ @@ -3530,17 +3530,12 @@ def bank_account_delete(request, dealer_slug, pk): rendering the confirmation template if accessed via GET. :rtype: HttpResponse """ - dealer = get_object_or_404(models.Dealer, slug=dealer_slug) + get_object_or_404(models.Dealer, slug=dealer_slug) bank_account = get_object_or_404(BankAccountModel, pk=pk) - if request.method == "POST": - bank_account.delete() - messages.success(request, _("Bank account deleted successfully")) - return redirect("bank_account_list", dealer_slug=dealer_slug) - return render( - request, - "ledger/bank_accounts/bank_account_delete.html", - {"bank_account": bank_account}, - ) + + bank_account.delete() + messages.success(request, _("Bank account deleted successfully")) + return redirect("bank_account_list", dealer_slug=dealer_slug) # Accounts @@ -6134,7 +6129,6 @@ class ItemServiceCreateView( model = models.AdditionalServices form_class = forms.AdditionalServiceForm template_name = "items/service/service_create.html" - success_url = reverse_lazy("item_service_list") success_message = _("Service created successfully") context_object_name = "service" permission_required = ["django_ledger.add_itemmodel"] @@ -6147,6 +6141,8 @@ class ItemServiceCreateView( form.instance.price = (form.instance.price * vat.rate) + form.instance.price return super().form_valid(form) + def get_success_url(self): + return reverse_lazy("item_service_list", kwargs={"dealer_slug": self.kwargs["dealer_slug"]}) class ItemServiceUpdateView( LoginRequiredMixin, PermissionRequiredMixin, SuccessMessageMixin, UpdateView @@ -6179,7 +6175,6 @@ class ItemServiceUpdateView( model = models.AdditionalServices form_class = forms.AdditionalServiceForm template_name = "items/service/service_create.html" - success_url = reverse_lazy("item_service_list") success_message = _("Service updated successfully") context_object_name = "service" permission_required = ["django_ledger.change_itemmodel"] @@ -6191,8 +6186,8 @@ class ItemServiceUpdateView( if form.instance.taxable: form.instance.price = (form.instance.price * vat.rate) + form.instance.price return super().form_valid(form) - - + def get_success_url(self): + return reverse_lazy("item_service_list", kwargs={"dealer_slug": self.kwargs["dealer_slug"]}) class ItemServiceListView(LoginRequiredMixin, PermissionRequiredMixin, ListView): """ Handles the listing of additional services for a dealer. @@ -6265,7 +6260,8 @@ class ItemExpenseCreateView(LoginRequiredMixin, PermissionRequiredMixin, CreateV dealer = get_user_type(self.request) form.instance.entity = dealer.entity return super().form_valid(form) - + def get_success_url(self): + return reverse_lazy("item_expense_list", kwargs={"dealer_slug": self.kwargs["dealer_slug"]}) class ItemExpenseUpdateView(LoginRequiredMixin, PermissionRequiredMixin, UpdateView): """ @@ -6305,7 +6301,8 @@ class ItemExpenseUpdateView(LoginRequiredMixin, PermissionRequiredMixin, UpdateV dealer = get_user_type(self.request) form.instance.entity = dealer.entity return super().form_valid(form) - + def get_success_url(self): + return reverse_lazy("item_expense_list", kwargs={"dealer_slug": self.kwargs["dealer_slug"]}) class ItemExpenseListView(LoginRequiredMixin, PermissionRequiredMixin, ListView): """ @@ -8195,7 +8192,7 @@ def schedule_cancel(request,dealer_slug, pk): @login_required -def assign_car_makes(request): +def assign_car_makes(request,dealer_slug): """ Assigns car makes to a dealer. @@ -8212,7 +8209,7 @@ def assign_car_makes(request): dealer detail page after successful form submission. :rtype: HttpResponse """ - dealer = get_user_type(request) + dealer = get_object_or_404(models.Dealer, slug=dealer_slug) if request.method == "POST": form = forms.DealersMakeForm(request.POST, dealer=dealer) if form.is_valid(): @@ -8371,7 +8368,7 @@ class LedgerModelModelActionView(LedgerModelModelActionViewBase): """ def get_redirect_url(self, *args, **kwargs): - return reverse("ledger_list") + return reverse("ledger_list", args=[self.kwargs["dealer_slug"]]) class LedgerModelDeleteView(LedgerModelDeleteViewBase, SuccessMessageMixin): @@ -8394,7 +8391,7 @@ class LedgerModelDeleteView(LedgerModelDeleteViewBase, SuccessMessageMixin): success_message = "Ledger deleted" def get_success_url(self): - return reverse("ledger_list") + return reverse("ledger_list", args=[self.kwargs["dealer_slug"]]) # class LedgerModelCreateView(LoginRequiredMixin,SuccessMessageMixin, CreateView): @@ -8497,7 +8494,7 @@ class JournalEntryCreateView(LoginRequiredMixin, SuccessMessageMixin, CreateView def get_success_url(self): ledger = LedgerModel.objects.filter(pk=self.kwargs["pk"]).first() - return reverse("journalentry_list", kwargs={"pk": ledger.pk}) + return reverse("journalentry_list", kwargs={"dealer_slug":self.kwargs["dealer_slug"],"pk": ledger.pk}) def JournalEntryDeleteView(request, pk): @@ -8532,7 +8529,7 @@ def JournalEntryDeleteView(request, pk): ) -def JournalEntryTransactionsView(request, pk): +def JournalEntryTransactionsView(request, dealer_slug,pk): """ Handles the retrieval and display of journal entry transactions for a specific journal entry instance. It retrieves the journal entry and its associated transactions, ordering @@ -8546,12 +8543,8 @@ def JournalEntryTransactionsView(request, pk): its transactions. :rtype: django.http.HttpResponse """ + get_object_or_404(models.Dealer,slug=dealer_slug) journal = JournalEntryModel.objects.filter(pk=pk).first() - # transactions = ( - # TransactionModel.objects.filter(journal_entry=journal) - # .order_by("account__code") - # .all() - # ) qs = TransactionModel.objects.filter(journal_entry=journal).all() transactions = qs.annotate( debit_credit_sort_order=Case( @@ -8583,7 +8576,7 @@ class JournalEntryModelTXSDetailView(JournalEntryModelTXSDetailViewBase): template_name = "ledger/journal_entry/journal_entry_txs.html" -def ledger_lock_all_journals(request, entity_slug, pk): +def ledger_lock_all_journals(request,dealer_slug, entity_slug, pk): """ Locks all journals associated with a specific ledger. If the ledger is already locked, it will notify the user through an error message. Otherwise, it initiates the locking of @@ -8600,17 +8593,18 @@ def ledger_lock_all_journals(request, entity_slug, pk): :return: HttpResponse redirecting to the journal entry list page of the locked ledger. :rtype: HttpResponse """ + get_object_or_404(models.Dealer,slug=dealer_slug) ledger = LedgerModel.objects.filter(pk=pk).first() if ledger.is_locked(): messages.error(request, _("Ledger is already locked")) - return redirect("journalentry_list", pk=ledger.pk) + return redirect("journalentry_list",dealer_slug=dealer_slug, pk=ledger.pk) ledger.lock_journal_entries() ledger.lock() ledger.save() - return redirect("journalentry_list", pk=ledger.pk) + return redirect("journalentry_list", dealer_slug=dealer_slug,pk=ledger.pk) -def ledger_unlock_all_journals(request, entity_slug, pk): +def ledger_unlock_all_journals(request, dealer_slug, entity_slug, pk): """ Unlocks all journal entries associated with a specific ledger. This function first checks if the ledger is locked. If it is already unlocked, it shows an error message and redirects the user @@ -8627,10 +8621,11 @@ def ledger_unlock_all_journals(request, entity_slug, pk): :return: A redirection to the journal entry list page for the specified ledger. :rtype: HttpResponseRedirect """ + get_object_or_404(models.Dealer,slug=dealer_slug) ledger = LedgerModel.objects.filter(pk=pk).first() if not ledger.is_locked(): messages.error(request, _("Ledger is already Unlocked")) - return redirect("journalentry_list", pk=ledger.pk) + return redirect("journalentry_list",dealer_slug=dealer_slug, pk=ledger.pk) ledger.unlock() ledger.save() @@ -8638,10 +8633,10 @@ def ledger_unlock_all_journals(request, entity_slug, pk): for je in qs: je.unlock() je.save() - return redirect("journalentry_list", pk=ledger.pk) + return redirect("journalentry_list", dealer_slug=dealer_slug, pk=ledger.pk) -def ledger_post_all_journals(request, entity_slug, pk): +def ledger_post_all_journals(request, dealer_slug, entity_slug, pk): """ Posts all journal entries associated with a ledger. This function updates the ledger's state to reflect that its journal entries have been posted. If the ledger is already @@ -8656,17 +8651,18 @@ def ledger_post_all_journals(request, entity_slug, pk): :return: A redirect to the journal entry list view for the specified ledger. :rtype: HttpResponseRedirect """ + get_object_or_404(models.Dealer,slug=dealer_slug) ledger = LedgerModel.objects.filter(pk=pk).first() if ledger.is_posted(): messages.error(request, _("Ledger is already posted")) - return redirect("journalentry_list", pk=ledger.pk) + return redirect("journalentry_list",dealer_slug=dealer_slug, pk=ledger.pk) ledger.post_journal_entries() ledger.post() ledger.save() - return redirect("journalentry_list", pk=ledger.pk) + return redirect("journalentry_list",dealer_slug=dealer_slug, pk=ledger.pk) -def ledger_unpost_all_journals(request, entity_slug, pk): +def ledger_unpost_all_journals(request,dealer_slug, entity_slug, pk): """ Unposts all journal entries for a specified ledger and marks the ledger as unposted. @@ -8686,10 +8682,11 @@ def ledger_unpost_all_journals(request, entity_slug, pk): page for the specified ledger. :rtype: HttpResponseRedirect """ + get_object_or_404(models.Dealer,slug=dealer_slug) ledger = LedgerModel.objects.filter(pk=pk).first() if not ledger.is_posted(): messages.error(request, _("Ledger is already Unposted")) - return redirect("journalentry_list", pk=ledger.pk) + return redirect("journalentry_list",dealer_slug=dealer_slug, pk=ledger.pk) qs = ledger.journal_entries.posted() for je in qs: je.mark_as_unposted() @@ -8697,18 +8694,19 @@ def ledger_unpost_all_journals(request, entity_slug, pk): ledger.unpost() ledger.save() - return redirect("journalentry_list", pk=ledger.pk) + return redirect("journalentry_list",dealer_slug=dealer_slug, pk=ledger.pk) -def pricing_page(request): +def pricing_page(request,dealer_slug): + get_object_or_404(models.Dealer,slug=dealer_slug) plan_list = PlanPricing.objects.all() form = forms.PaymentPlanForm() return render(request, "pricing_page.html", {"plan_list": plan_list, "form": form}) # @require_POST -def submit_plan(request): - dealer = get_user_type(request) +def submit_plan(request,dealer_slug): + dealer = get_object_or_404(models.Dealer,slug=dealer_slug) selected_plan_id = request.POST.get("selected_plan") pp = PlanPricing.objects.get(pk=selected_plan_id) @@ -8725,9 +8723,9 @@ def submit_plan(request): return redirect(transaction_url) -def payment_callback(request): +def payment_callback(request,dealer_slug): message = request.GET.get("message") - dealer = get_user_type(request) + dealer = get_object_or_404(models.Dealer,slug=dealer_slug) payment_id = request.GET.get("id") history = models.PaymentHistory.objects.filter(transaction_id=payment_id).first() payment_status = request.GET.get("status") @@ -8966,11 +8964,13 @@ def update_note(request,dealer_slug, pk): # Admin Management -def management_view(request): +def management_view(request,dealer_slug): + get_object_or_404(models.Dealer,slug=dealer_slug) return render(request, "admin_management/management.html") -def user_management(request): +def user_management(request,dealer_slug): + get_object_or_404(models.Dealer,slug=dealer_slug) context = { "customers": models.Customer.objects.filter(active=False), "organizations": models.Organization.objects.filter(active=False), @@ -8980,12 +8980,13 @@ def user_management(request): return render(request, "admin_management/user_management.html", context) -def AuditLogDashboardView(request): +def AuditLogDashboardView(request,dealer_slug): """ Displays audit logs (User Actions, Login Events, Request Events) with pagination. Log type is determined by the 'q' query parameter (e.g., ?q=userActions). Pagination page number is passed as a query parameter (e.g., ?page=2). """ + get_object_or_404(models.Dealer,slug=dealer_slug) q = request.GET.get("q") # Get the log type from the 'q' query parameter current_pagination_page = request.GET.get("page", 1) context = {} @@ -9113,7 +9114,8 @@ def AuditLogDashboardView(request): return render(request, template_name, context) -def activate_account(request, content_type, slug): +def activate_account(request,dealer_slug, content_type, slug): + get_object_or_404(models.Dealer,slug=dealer_slug) try: model = apps.get_model(f"inventory.{content_type}") except LookupError: @@ -9123,13 +9125,14 @@ def activate_account(request, content_type, slug): if request.method == "POST": obj.activate_account() messages.success(request, _("Account activated successfully")) - return redirect("user_management") + return redirect("user_management", dealer_slug=dealer_slug) return render( request, "admin_management/confirm_activate_account.html", {"obj": obj} ) -def permenant_delete_account(request, content_type, slug): +def permenant_delete_account(request,dealer_slug, content_type, slug): + get_object_or_404(models.Dealer,slug=dealer_slug) try: model = apps.get_model(f"inventory.{content_type}") except LookupError: @@ -9147,7 +9150,7 @@ def permenant_delete_account(request, content_type, slug): ) except Exception as e: messages.error(request, _(f"Error deleting account: {e}")) - return redirect("user_management") + return redirect("user_management", dealer_slug=dealer_slug) return render( request, "admin_management/permenant_delete_account.html", {"obj": obj} ) diff --git a/templates/admin_management/confirm_activate_account.html b/templates/admin_management/confirm_activate_account.html index 55c84c24..1ba44f4c 100644 --- a/templates/admin_management/confirm_activate_account.html +++ b/templates/admin_management/confirm_activate_account.html @@ -9,7 +9,7 @@ {% csrf_token %}
- Cancel + Cancel
diff --git a/templates/admin_management/management.html b/templates/admin_management/management.html index 92e391ca..b352d6d1 100644 --- a/templates/admin_management/management.html +++ b/templates/admin_management/management.html @@ -4,7 +4,7 @@ {% block content %}
- +
- +
{{ _("Audit Log Dashboard")}}
diff --git a/templates/admin_management/nav.html b/templates/admin_management/nav.html index 98f0b892..92571841 100644 --- a/templates/admin_management/nav.html +++ b/templates/admin_management/nav.html @@ -2,17 +2,17 @@
diff --git a/templates/admin_management/user_management.html b/templates/admin_management/user_management.html index c2f47da7..e9dd1b19 100644 --- a/templates/admin_management/user_management.html +++ b/templates/admin_management/user_management.html @@ -51,9 +51,9 @@
@@ -115,9 +115,9 @@
@@ -179,9 +179,9 @@
@@ -245,7 +245,7 @@
diff --git a/templates/dealers/assign_car_makes.html b/templates/dealers/assign_car_makes.html index 0cef6b58..16eb14ee 100644 --- a/templates/dealers/assign_car_makes.html +++ b/templates/dealers/assign_car_makes.html @@ -58,7 +58,7 @@

{{ _("Select Car Makes You Sell") }}

-
+ {% csrf_token %}
diff --git a/templates/dealers/dealer_detail.html b/templates/dealers/dealer_detail.html index e0e528cc..1913089d 100644 --- a/templates/dealers/dealer_detail.html +++ b/templates/dealers/dealer_detail.html @@ -114,13 +114,13 @@ {% trans 'Active' %} {% else %} {% trans 'Expired' %} - {{ _("Renew") }} + {{ _("Renew") }} {% endif %} {% if dealer.user.userplan.plan.name != "Enterprise" %} - {{ _("Upgrade") }} + {{ _("Upgrade") }} {% endif %} {% else %} - You have no active plan. {{ _("Subscribe") }} + You have no active plan. {{ _("Subscribe") }} {% endif %}
@@ -172,7 +172,7 @@ {% endfor %}
diff --git a/templates/header.html b/templates/header.html index 0e91087b..4afcb7d2 100644 --- a/templates/header.html +++ b/templates/header.html @@ -230,7 +230,7 @@ {% endif %} {% if perms.django_ledger.view_itemmodel %} {% endif %} {% if perms.django_ledger.view_itemmodel %} {% endif %}