add slug for the remaining of the apps

This commit is contained in:
ismail 2025-06-25 20:10:12 +03:00
parent 8111dd6378
commit 9beeedd5bd
27 changed files with 205 additions and 191 deletions

View File

@ -50,12 +50,12 @@ urlpatterns = [
# path('tasks/<int:task_id>/detail/', views.task_detail, name='task_detail'), # path('tasks/<int:task_id>/detail/', views.task_detail, name='task_detail'),
# Dashboards # Dashboards
# path("user/<int:pk>/settings/", views.UserSettingsView.as_view(), name="user_settings"), # path("user/<int:pk>/settings/", views.UserSettingsView.as_view(), name="user_settings"),
path("pricing/", views.pricing_page, name="pricing_page"), path("<slug:dealer_slug>/pricing/", views.pricing_page, name="pricing_page"),
path("submit_plan/", views.submit_plan, name="submit_plan"), path("<slug:dealer_slug>/submit_plan/", views.submit_plan, name="submit_plan"),
path("payment-callback/", views.payment_callback, name="payment_callback"), path("<slug:dealer_slug>/payment-callback/", views.payment_callback, name="payment_callback"),
# #
path( path(
"dealers/activity/", "<slug:dealer_slug>/dealers/activity/",
views.UserActivityLogListView.as_view(), views.UserActivityLogListView.as_view(),
name="dealer_activity", name="dealer_activity",
), ),
@ -64,7 +64,7 @@ urlpatterns = [
views.DealerSettingsView, views.DealerSettingsView,
name="dealer_settings", name="dealer_settings",
), ),
path("dealers/assign-car-makes/", views.assign_car_makes, name="assign_car_makes"), path("<slug:dealer_slug>/dealers/assign-car-makes/", views.assign_car_makes, name="assign_car_makes"),
path( path(
"dashboards/manager/", "dashboards/manager/",
views.ManagerDashboard.as_view(), views.ManagerDashboard.as_view(),
@ -76,7 +76,7 @@ urlpatterns = [
path("export/format/", TableExport, name="export"), path("export/format/", TableExport, name="export"),
# Dealer URLs # Dealer URLs
path( path(
"dealers/<slug:slug>/", views.DealerDetailView.as_view(), name="dealer_detail" "<slug:slug>/dealers/", views.DealerDetailView.as_view(), name="dealer_detail"
), ),
path( path(
"dealers/<slug:slug>/update/", "dealers/<slug:slug>/update/",
@ -267,21 +267,25 @@ urlpatterns = [
name="mark_notification_as_read", name="mark_notification_as_read",
), ),
path("crm/calender/", views.EmployeeCalendarView.as_view(), name="calendar_list"), path("crm/calender/", views.EmployeeCalendarView.as_view(), name="calendar_list"),
#######################################################
# Vendor URLs # Vendor URLs
path("vendors/create/", views.VendorCreateView.as_view(), name="vendor_create"), #######################################################
path("vendors", views.VendorListView.as_view(), name="vendor_list"), path("<slug:dealer_slug>/vendors/create/", views.VendorCreateView.as_view(), name="vendor_create"),
path("vendors/<slug:slug>/", views.vendorDetailView, name="vendor_detail"), path("<slug:dealer_slug>/vendors", views.VendorListView.as_view(), name="vendor_list"),
path("<slug:dealer_slug>/vendors/<slug:slug>/", views.vendorDetailView, name="vendor_detail"),
path( path(
"vendors/<slug:slug>/update/", "<slug:dealer_slug>/vendors/<slug:slug>/update/",
views.VendorUpdateView.as_view(), views.VendorUpdateView.as_view(),
name="vendor_update", name="vendor_update",
), ),
path( path(
"vendors/<slug:slug>/delete/", "<slug:dealer_slug>/vendors/<slug:slug>/delete/",
views.delete_vendor, views.delete_vendor,
name="vendor_delete", name="vendor_delete",
), ),
#######################################################
# Car URLs # Car URLs
#######################################################
path("<slug:dealer_slug>/cars/upload_cars/", views.upload_cars, name="upload_cars"), path("<slug:dealer_slug>/cars/upload_cars/", views.upload_cars, name="upload_cars"),
path( path(
"<slug:dealer_slug>/cars/<uuid:pk>/upload_cars/", "<slug:dealer_slug>/cars/<uuid:pk>/upload_cars/",
@ -477,24 +481,24 @@ urlpatterns = [
# name="payment_create", # name="payment_create",
# ), # ),
# Users URLs # Users URLs
path("user/", views.UserListView.as_view(), name="user_list"), path("<slug:dealer_slug>/user/", views.UserListView.as_view(), name="user_list"),
path("user/create/", views.UserCreateView.as_view(), name="user_create"), path("<slug:dealer_slug>/user/create/", views.UserCreateView.as_view(), name="user_create"),
path("user/<slug:slug>/", views.UserDetailView.as_view(), name="user_detail"), path("<slug:dealer_slug>/user/<slug:slug>/", views.UserDetailView.as_view(), name="user_detail"),
path("user/<slug:slug>/groups/", views.UserGroupView, name="user_groups"), path("<slug:dealer_slug>/user/<slug:slug>/groups/", views.UserGroupView, name="user_groups"),
path( path(
"user/<slug:slug>/update/", views.UserUpdateView.as_view(), name="user_update" "<slug:dealer_slug>/user/<slug:slug>/update/", views.UserUpdateView.as_view(), name="user_update"
), ),
path("user/<slug:slug>/confirm/", views.UserDeleteview, name="user_delete"), path("<slug:dealer_slug>/user/<slug:slug>/confirm/", views.UserDeleteview, name="user_delete"),
# Group URLs # Group URLs
path("group/create/", views.GroupCreateView.as_view(), name="group_create"), path("<slug:dealer_slug>/group/create/", views.GroupCreateView.as_view(), name="group_create"),
path( path(
"group/<int:pk>/update/", views.GroupUpdateView.as_view(), name="group_update" "<slug:dealer_slug>/group/<int:pk>/update/", views.GroupUpdateView.as_view(), name="group_update"
), ),
path("group/<int:pk>/", views.GroupDetailView.as_view(), name="group_detail"), path("<slug:dealer_slug>/group/<int:pk>/", views.GroupDetailView.as_view(), name="group_detail"),
path("group/", views.GroupListView.as_view(), name="group_list"), path("<slug:dealer_slug>/group/", views.GroupListView.as_view(), name="group_list"),
path("group/<int:pk>/confirm/", views.GroupDeleteview, name="group_delete"), path("<slug:dealer_slug>/group/<int:pk>/confirm/", views.GroupDeleteview, name="group_delete"),
path( path(
"group/<int:pk>/permission/", views.GroupPermissionView, name="group_permission" "<slug:dealer_slug>/group/<int:pk>/permission/", views.GroupPermissionView, name="group_permission"
), ),
# Organization URLs # Organization URLs
path( path(
@ -546,34 +550,35 @@ urlpatterns = [
views.RepresentativeDeleteView.as_view(), views.RepresentativeDeleteView.as_view(),
name="representative_delete", name="representative_delete",
), ),
# Ledger URLS #####################################################################
# Ledger # Ledger
path("ledgers/", views.LedgerModelListView.as_view(), name="ledger_list"), #####################################################################
path("<slug:dealer_slug>/ledgers/", views.LedgerModelListView.as_view(), name="ledger_list"),
path( path(
"ledgers/create/", views.LedgerModelCreateView.as_view(), name="ledger_create" "<slug:dealer_slug>/ledgers/create/", views.LedgerModelCreateView.as_view(), name="ledger_create"
), ),
path( path(
"ledgers/<slug:entity_slug>/detail/<uuid:pk>/", "<slug:dealer_slug>/ledgers/<slug:entity_slug>/detail/<uuid:pk>/",
views.LedgerModelDetailView.as_view(), views.LedgerModelDetailView.as_view(),
name="ledger_detail", name="ledger_detail",
), ),
path( path(
"ledgers/<slug:entity_slug>/lock_all_journals/<uuid:pk>/", "<slug:dealer_slug>/ledgers/<slug:entity_slug>/lock_all_journals/<uuid:pk>/",
views.ledger_lock_all_journals, views.ledger_lock_all_journals,
name="lock_all_journals", name="lock_all_journals",
), ),
path( path(
"ledgers/<slug:entity_slug>/unlock_all_journals/<uuid:pk>/", "<slug:dealer_slug>/ledgers/<slug:entity_slug>/unlock_all_journals/<uuid:pk>/",
views.ledger_unlock_all_journals, views.ledger_unlock_all_journals,
name="unlock_all_journals", name="unlock_all_journals",
), ),
path( path(
"ledgers/<slug:entity_slug>/post_all_journals/<uuid:pk>/", "<slug:dealer_slug>/ledgers/<slug:entity_slug>/post_all_journals/<uuid:pk>/",
views.ledger_post_all_journals, views.ledger_post_all_journals,
name="post_all_journals", name="post_all_journals",
), ),
path( path(
"ledgers/<slug:entity_slug>/unpost_all_journals/<uuid:pk>/", "<slug:dealer_slug>/ledgers/<slug:entity_slug>/unpost_all_journals/<uuid:pk>/",
views.ledger_unpost_all_journals, views.ledger_unpost_all_journals,
name="unpost_all_journals", name="unpost_all_journals",
), ),
@ -581,77 +586,81 @@ urlpatterns = [
# "ledgers/create/", views.LedgerModelCreateView.as_view(), name="ledger_create" # "ledgers/create/", views.LedgerModelCreateView.as_view(), name="ledger_create"
# ), # ),
path( path(
"journalentries/<uuid:pk>/list/", "<slug:dealer_slug>/journalentries/<uuid:pk>/list/",
views.JournalEntryListView.as_view(), views.JournalEntryListView.as_view(),
name="journalentry_list", name="journalentry_list",
), ),
path( path(
"journalentries/<uuid:pk>/create/", "<slug:dealer_slug>/journalentries/<uuid:pk>/create/",
views.JournalEntryCreateView.as_view(), views.JournalEntryCreateView.as_view(),
name="journalentry_create", name="journalentry_create",
), ),
path( path(
"journalentries/<uuid:pk>/delete/", "<slug:dealer_slug>/journalentries/<uuid:pk>/delete/",
views.JournalEntryDeleteView, views.JournalEntryDeleteView,
name="journalentry_delete", name="journalentry_delete",
), ),
path( path(
"journalentries/<uuid:pk>/transactions/", "<slug:dealer_slug>/journalentries/<uuid:pk>/transactions/",
views.JournalEntryTransactionsView, views.JournalEntryTransactionsView,
name="journalentry_transactions", name="journalentry_transactions",
), ),
path( path(
"journalentries/<slug:entity_slug>/<uuid:ledger_pk>/detail/<uuid:je_pk>/txs/", "<slug:dealer_slug>/journalentries/<slug:entity_slug>/<uuid:ledger_pk>/detail/<uuid:je_pk>/txs/",
views.JournalEntryModelTXSDetailView.as_view(), views.JournalEntryModelTXSDetailView.as_view(),
name="journalentry_txs", name="journalentry_txs",
), ),
##############################################################
# ledger actions # ledger actions
##############################################################
path( path(
"ledgers/<slug:entity_slug>/action/<uuid:ledger_pk>/post/", "<slug:dealer_slug>/ledgers/<slug:entity_slug>/action/<uuid:ledger_pk>/post/",
views.LedgerModelModelActionView.as_view(action_name="post"), views.LedgerModelModelActionView.as_view(action_name="post"),
name="ledger-action-post", name="ledger-action-post",
), ),
path( path(
"ledgers/<slug:entity_slug>/action/<uuid:ledger_pk>/post-journal-entries/", "<slug:dealer_slug>/ledgers/<slug:entity_slug>/action/<uuid:ledger_pk>/post-journal-entries/",
views.LedgerModelModelActionView.as_view(action_name="post_journal_entries"), views.LedgerModelModelActionView.as_view(action_name="post_journal_entries"),
name="ledger-action-post-journal-entries", name="ledger-action-post-journal-entries",
), ),
path( path(
"ledgers/<slug:entity_slug>/action/<uuid:ledger_pk>/unpost/", "<slug:dealer_slug>/ledgers/<slug:entity_slug>/action/<uuid:ledger_pk>/unpost/",
views.LedgerModelModelActionView.as_view(action_name="unpost"), views.LedgerModelModelActionView.as_view(action_name="unpost"),
name="ledger-action-unpost", name="ledger-action-unpost",
), ),
path( path(
"ledgers/<slug:entity_slug>/action/<uuid:ledger_pk>/lock/", "<slug:dealer_slug>/ledgers/<slug:entity_slug>/action/<uuid:ledger_pk>/lock/",
views.LedgerModelModelActionView.as_view(action_name="lock"), views.LedgerModelModelActionView.as_view(action_name="lock"),
name="ledger-action-lock", name="ledger-action-lock",
), ),
path( path(
"ledgers/<slug:entity_slug>/action/<uuid:ledger_pk>/lock-journal-entries/", "<slug:dealer_slug>/ledgers/<slug:entity_slug>/action/<uuid:ledger_pk>/lock-journal-entries/",
views.LedgerModelModelActionView.as_view(action_name="lock_journal_entries"), views.LedgerModelModelActionView.as_view(action_name="lock_journal_entries"),
name="ledger-action-lock-journal-entries", name="ledger-action-lock-journal-entries",
), ),
path( path(
"ledgers/<slug:entity_slug>/action/<uuid:ledger_pk>/unlock/", "<slug:dealer_slug>/ledgers/<slug:entity_slug>/action/<uuid:ledger_pk>/unlock/",
views.LedgerModelModelActionView.as_view(action_name="unlock"), views.LedgerModelModelActionView.as_view(action_name="unlock"),
name="ledger-action-unlock", name="ledger-action-unlock",
), ),
path( path(
"ledgers/<slug:entity_slug>/action/<uuid:ledger_pk>/hide/", "<slug:dealer_slug>/ledgers/<slug:entity_slug>/action/<uuid:ledger_pk>/hide/",
views.LedgerModelModelActionView.as_view(action_name="hide"), views.LedgerModelModelActionView.as_view(action_name="hide"),
name="ledger-action-hide", name="ledger-action-hide",
), ),
path( path(
"ledgers/<slug:entity_slug>/action/<uuid:ledger_pk>/unhide/", "<slug:dealer_slug>/ledgers/<slug:entity_slug>/action/<uuid:ledger_pk>/unhide/",
views.LedgerModelModelActionView.as_view(action_name="unhide"), views.LedgerModelModelActionView.as_view(action_name="unhide"),
name="ledger-action-unhide", name="ledger-action-unhide",
), ),
path( path(
"ledgers/<slug:entity_slug>/delete/<uuid:ledger_pk>/", "<slug:dealer_slug>/ledgers/<slug:entity_slug>/delete/<uuid:ledger_pk>/",
views.LedgerModelDeleteView.as_view(), views.LedgerModelDeleteView.as_view(),
name="ledger-delete", name="ledger-delete",
), ),
##############################################################
# Bank Account # Bank Account
##############################################################
path( path(
"<slug:dealer_slug>/bank_accounts/", "<slug:dealer_slug>/bank_accounts/",
views.BankAccountListView.as_view(), views.BankAccountListView.as_view(),
@ -833,31 +842,31 @@ urlpatterns = [
# path('sales/journal/<uuid:pk>/create/', views.JournalEntryCreateView.as_view(), name='journal_create'), # path('sales/journal/<uuid:pk>/create/', views.JournalEntryCreateView.as_view(), name='journal_create'),
# Items # Items
path( path(
"items/services/", views.ItemServiceListView.as_view(), name="item_service_list" "<slug:dealer_slug>/items/services/", views.ItemServiceListView.as_view(), name="item_service_list"
), ),
path( path(
"items/services/create/", "<slug:dealer_slug>/items/services/create/",
views.ItemServiceCreateView.as_view(), views.ItemServiceCreateView.as_view(),
name="item_service_create", name="item_service_create",
), ),
path( path(
"items/services/<int:pk>/update/", "<slug:dealer_slug>/items/services/<int:pk>/update/",
views.ItemServiceUpdateView.as_view(), views.ItemServiceUpdateView.as_view(),
name="item_service_update", name="item_service_update",
), ),
# Expanese # Expanese
path( path(
"items/expeneses/", "<slug:dealer_slug>/items/expeneses/",
views.ItemExpenseListView.as_view(), views.ItemExpenseListView.as_view(),
name="item_expense_list", name="item_expense_list",
), ),
path( path(
"items/expeneses/create/", "<slug:dealer_slug>/items/expeneses/create/",
views.ItemExpenseCreateView.as_view(), views.ItemExpenseCreateView.as_view(),
name="item_expense_create", name="item_expense_create",
), ),
path( path(
"items/expeneses/<uuid:pk>/update/", "<slug:dealer_slug>/items/expeneses/<uuid:pk>/update/",
views.ItemExpenseUpdateView.as_view(), views.ItemExpenseUpdateView.as_view(),
name="item_expense_update", name="item_expense_update",
), ),
@ -1099,20 +1108,20 @@ urlpatterns = [
name="entity-json-pnl", name="entity-json-pnl",
), ),
# Admin Management... # Admin Management...
path("management/", views.management_view, name="management"), path("<slug:dealer_slug>/management/", views.management_view, name="management"),
path("management/user_management/", views.user_management, name="user_management"), path("<slug:dealer_slug>/management/user_management/", views.user_management, name="user_management"),
path( path(
"management/<str:content_type>/<slug:slug>/activate_account/", "<slug:dealer_slug>/management/<str:content_type>/<slug:slug>/activate_account/",
views.activate_account, views.activate_account,
name="activate_account", name="activate_account",
), ),
path( path(
"management/<str:content_type>/<slug:slug>/permenant_delete_account/", "<slug:dealer_slug>/management/<str:content_type>/<slug:slug>/permenant_delete_account/",
views.permenant_delete_account, views.permenant_delete_account,
name="permenant_delete_account", name="permenant_delete_account",
), ),
path( path(
"management/audit_log_dashboard/", "<slug:dealer_slug>/management/audit_log_dashboard/",
views.AuditLogDashboardView, views.AuditLogDashboardView,
name="audit_log_dashboard", name="audit_log_dashboard",
), ),

View File

@ -1366,7 +1366,7 @@ def create_user_dealer(email, password, name, arabic_name, phone, crn, vrn, addr
def handle_payment(request, order): def handle_payment(request, order):
url = "https://api.moyasar.com/v1/payments" 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: if request.user.is_authenticated:
# email = request.user.email # email = request.user.email

View File

@ -2432,7 +2432,7 @@ class VendorListView(LoginRequiredMixin, ListView):
@login_required @login_required
def vendorDetailView(request, slug): def vendorDetailView(request, dealer_slug,slug):
""" """
Fetches and renders the detail view for a specific vendor. Fetches and renders the detail view for a specific vendor.
@ -2480,7 +2480,6 @@ class VendorCreateView(
model = models.Vendor model = models.Vendor
form_class = forms.VendorForm form_class = forms.VendorForm
template_name = "vendors/vendor_form.html" template_name = "vendors/vendor_form.html"
success_url = reverse_lazy("vendor_list")
success_message = _("Vendor created successfully") success_message = _("Vendor created successfully")
def form_valid(self, form): def form_valid(self, form):
@ -2500,7 +2499,8 @@ class VendorCreateView(
form.instance.save() form.instance.save()
return super().form_valid(form) return super().form_valid(form)
def get_success_url(self):
return reverse_lazy("vendor_list", kwargs={"dealer_slug": self.kwargs["dealer_slug"]})
class VendorUpdateView( class VendorUpdateView(
LoginRequiredMixin, LoginRequiredMixin,
@ -2531,7 +2531,6 @@ class VendorUpdateView(
model = models.Vendor model = models.Vendor
form_class = forms.VendorForm form_class = forms.VendorForm
template_name = "vendors/vendor_form.html" template_name = "vendors/vendor_form.html"
success_url = reverse_lazy("vendor_list")
success_message = _("Vendor updated successfully") success_message = _("Vendor updated successfully")
# def get_initial(self): # def get_initial(self):
@ -2553,10 +2552,11 @@ class VendorUpdateView(
# instance.additional_info = additionals # instance.additional_info = additionals
# instance.save() # instance.save()
return super().form_valid(form) return super().form_valid(form)
def get_success_url(self):
return reverse_lazy("vendor_list", kwargs={"dealer_slug": self.kwargs["dealer_slug"]})
@login_required @login_required
def delete_vendor(request, slug): def delete_vendor(request, dealer_slug,slug):
""" """
Deletes an existing vendor record from the database. Deletes an existing vendor record from the database.
@ -2576,7 +2576,7 @@ def delete_vendor(request, slug):
vendor.vendor_model.active = False vendor.vendor_model.active = False
vendor.save() vendor.save()
messages.success(request, _("Vendor deleted successfully")) messages.success(request, _("Vendor deleted successfully"))
return redirect("vendor_list") return redirect("vendor_list", dealer_slug=dealer_slug)
# group # group
@ -3418,23 +3418,23 @@ class BankAccountCreateView(
model = BankAccountModel model = BankAccountModel
form_class = BankAccountCreateForm form_class = BankAccountCreateForm
template_name = "ledger/bank_accounts/bank_account_form.html" template_name = "ledger/bank_accounts/bank_account_form.html"
success_url = reverse_lazy("bank_account_list")
success_message = _("Bank account created successfully") success_message = _("Bank account created successfully")
permission_required = ["inventory.view_carfinance"] permission_required = ["inventory.view_carfinance"]
def form_valid(self, form): 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 form.instance.entity_model = dealer.entity
return super().form_valid(form) return super().form_valid(form)
def get_form_kwargs(self): 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 entity = dealer.entity
kwargs = super().get_form_kwargs() kwargs = super().get_form_kwargs()
kwargs["entity_slug"] = entity.slug kwargs["entity_slug"] = entity.slug
kwargs["user_model"] = entity.admin kwargs["user_model"] = entity.admin
return kwargs 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): 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. rendering the confirmation template if accessed via GET.
:rtype: HttpResponse :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) bank_account = get_object_or_404(BankAccountModel, pk=pk)
if request.method == "POST":
bank_account.delete() bank_account.delete()
messages.success(request, _("Bank account deleted successfully")) messages.success(request, _("Bank account deleted successfully"))
return redirect("bank_account_list", dealer_slug=dealer_slug) return redirect("bank_account_list", dealer_slug=dealer_slug)
return render(
request,
"ledger/bank_accounts/bank_account_delete.html",
{"bank_account": bank_account},
)
# Accounts # Accounts
@ -6134,7 +6129,6 @@ class ItemServiceCreateView(
model = models.AdditionalServices model = models.AdditionalServices
form_class = forms.AdditionalServiceForm form_class = forms.AdditionalServiceForm
template_name = "items/service/service_create.html" template_name = "items/service/service_create.html"
success_url = reverse_lazy("item_service_list")
success_message = _("Service created successfully") success_message = _("Service created successfully")
context_object_name = "service" context_object_name = "service"
permission_required = ["django_ledger.add_itemmodel"] permission_required = ["django_ledger.add_itemmodel"]
@ -6147,6 +6141,8 @@ class ItemServiceCreateView(
form.instance.price = (form.instance.price * vat.rate) + form.instance.price form.instance.price = (form.instance.price * vat.rate) + form.instance.price
return super().form_valid(form) 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( class ItemServiceUpdateView(
LoginRequiredMixin, PermissionRequiredMixin, SuccessMessageMixin, UpdateView LoginRequiredMixin, PermissionRequiredMixin, SuccessMessageMixin, UpdateView
@ -6179,7 +6175,6 @@ class ItemServiceUpdateView(
model = models.AdditionalServices model = models.AdditionalServices
form_class = forms.AdditionalServiceForm form_class = forms.AdditionalServiceForm
template_name = "items/service/service_create.html" template_name = "items/service/service_create.html"
success_url = reverse_lazy("item_service_list")
success_message = _("Service updated successfully") success_message = _("Service updated successfully")
context_object_name = "service" context_object_name = "service"
permission_required = ["django_ledger.change_itemmodel"] permission_required = ["django_ledger.change_itemmodel"]
@ -6191,8 +6186,8 @@ class ItemServiceUpdateView(
if form.instance.taxable: if form.instance.taxable:
form.instance.price = (form.instance.price * vat.rate) + form.instance.price form.instance.price = (form.instance.price * vat.rate) + form.instance.price
return super().form_valid(form) 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): class ItemServiceListView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
""" """
Handles the listing of additional services for a dealer. Handles the listing of additional services for a dealer.
@ -6265,7 +6260,8 @@ class ItemExpenseCreateView(LoginRequiredMixin, PermissionRequiredMixin, CreateV
dealer = get_user_type(self.request) dealer = get_user_type(self.request)
form.instance.entity = dealer.entity form.instance.entity = dealer.entity
return super().form_valid(form) 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): class ItemExpenseUpdateView(LoginRequiredMixin, PermissionRequiredMixin, UpdateView):
""" """
@ -6305,7 +6301,8 @@ class ItemExpenseUpdateView(LoginRequiredMixin, PermissionRequiredMixin, UpdateV
dealer = get_user_type(self.request) dealer = get_user_type(self.request)
form.instance.entity = dealer.entity form.instance.entity = dealer.entity
return super().form_valid(form) 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): class ItemExpenseListView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
""" """
@ -8195,7 +8192,7 @@ def schedule_cancel(request,dealer_slug, pk):
@login_required @login_required
def assign_car_makes(request): def assign_car_makes(request,dealer_slug):
""" """
Assigns car makes to a dealer. Assigns car makes to a dealer.
@ -8212,7 +8209,7 @@ def assign_car_makes(request):
dealer detail page after successful form submission. dealer detail page after successful form submission.
:rtype: HttpResponse :rtype: HttpResponse
""" """
dealer = get_user_type(request) dealer = get_object_or_404(models.Dealer, slug=dealer_slug)
if request.method == "POST": if request.method == "POST":
form = forms.DealersMakeForm(request.POST, dealer=dealer) form = forms.DealersMakeForm(request.POST, dealer=dealer)
if form.is_valid(): if form.is_valid():
@ -8371,7 +8368,7 @@ class LedgerModelModelActionView(LedgerModelModelActionViewBase):
""" """
def get_redirect_url(self, *args, **kwargs): def get_redirect_url(self, *args, **kwargs):
return reverse("ledger_list") return reverse("ledger_list", args=[self.kwargs["dealer_slug"]])
class LedgerModelDeleteView(LedgerModelDeleteViewBase, SuccessMessageMixin): class LedgerModelDeleteView(LedgerModelDeleteViewBase, SuccessMessageMixin):
@ -8394,7 +8391,7 @@ class LedgerModelDeleteView(LedgerModelDeleteViewBase, SuccessMessageMixin):
success_message = "Ledger deleted" success_message = "Ledger deleted"
def get_success_url(self): def get_success_url(self):
return reverse("ledger_list") return reverse("ledger_list", args=[self.kwargs["dealer_slug"]])
# class LedgerModelCreateView(LoginRequiredMixin,SuccessMessageMixin, CreateView): # class LedgerModelCreateView(LoginRequiredMixin,SuccessMessageMixin, CreateView):
@ -8497,7 +8494,7 @@ class JournalEntryCreateView(LoginRequiredMixin, SuccessMessageMixin, CreateView
def get_success_url(self): def get_success_url(self):
ledger = LedgerModel.objects.filter(pk=self.kwargs["pk"]).first() 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): 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 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 entry instance. It retrieves the journal entry and its associated transactions, ordering
@ -8546,12 +8543,8 @@ def JournalEntryTransactionsView(request, pk):
its transactions. its transactions.
:rtype: django.http.HttpResponse :rtype: django.http.HttpResponse
""" """
get_object_or_404(models.Dealer,slug=dealer_slug)
journal = JournalEntryModel.objects.filter(pk=pk).first() 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() qs = TransactionModel.objects.filter(journal_entry=journal).all()
transactions = qs.annotate( transactions = qs.annotate(
debit_credit_sort_order=Case( debit_credit_sort_order=Case(
@ -8583,7 +8576,7 @@ class JournalEntryModelTXSDetailView(JournalEntryModelTXSDetailViewBase):
template_name = "ledger/journal_entry/journal_entry_txs.html" 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, 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 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. :return: HttpResponse redirecting to the journal entry list page of the locked ledger.
:rtype: HttpResponse :rtype: HttpResponse
""" """
get_object_or_404(models.Dealer,slug=dealer_slug)
ledger = LedgerModel.objects.filter(pk=pk).first() ledger = LedgerModel.objects.filter(pk=pk).first()
if ledger.is_locked(): if ledger.is_locked():
messages.error(request, _("Ledger is already 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_journal_entries()
ledger.lock() ledger.lock()
ledger.save() 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 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 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. :return: A redirection to the journal entry list page for the specified ledger.
:rtype: HttpResponseRedirect :rtype: HttpResponseRedirect
""" """
get_object_or_404(models.Dealer,slug=dealer_slug)
ledger = LedgerModel.objects.filter(pk=pk).first() ledger = LedgerModel.objects.filter(pk=pk).first()
if not ledger.is_locked(): if not ledger.is_locked():
messages.error(request, _("Ledger is already Unlocked")) 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.unlock()
ledger.save() ledger.save()
@ -8638,10 +8633,10 @@ def ledger_unlock_all_journals(request, entity_slug, pk):
for je in qs: for je in qs:
je.unlock() je.unlock()
je.save() 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 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 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. :return: A redirect to the journal entry list view for the specified ledger.
:rtype: HttpResponseRedirect :rtype: HttpResponseRedirect
""" """
get_object_or_404(models.Dealer,slug=dealer_slug)
ledger = LedgerModel.objects.filter(pk=pk).first() ledger = LedgerModel.objects.filter(pk=pk).first()
if ledger.is_posted(): if ledger.is_posted():
messages.error(request, _("Ledger is already 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_journal_entries()
ledger.post() ledger.post()
ledger.save() 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. 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. page for the specified ledger.
:rtype: HttpResponseRedirect :rtype: HttpResponseRedirect
""" """
get_object_or_404(models.Dealer,slug=dealer_slug)
ledger = LedgerModel.objects.filter(pk=pk).first() ledger = LedgerModel.objects.filter(pk=pk).first()
if not ledger.is_posted(): if not ledger.is_posted():
messages.error(request, _("Ledger is already Unposted")) 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() qs = ledger.journal_entries.posted()
for je in qs: for je in qs:
je.mark_as_unposted() je.mark_as_unposted()
@ -8697,18 +8694,19 @@ def ledger_unpost_all_journals(request, entity_slug, pk):
ledger.unpost() ledger.unpost()
ledger.save() 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() plan_list = PlanPricing.objects.all()
form = forms.PaymentPlanForm() form = forms.PaymentPlanForm()
return render(request, "pricing_page.html", {"plan_list": plan_list, "form": form}) return render(request, "pricing_page.html", {"plan_list": plan_list, "form": form})
# @require_POST # @require_POST
def submit_plan(request): def submit_plan(request,dealer_slug):
dealer = get_user_type(request) dealer = get_object_or_404(models.Dealer,slug=dealer_slug)
selected_plan_id = request.POST.get("selected_plan") selected_plan_id = request.POST.get("selected_plan")
pp = PlanPricing.objects.get(pk=selected_plan_id) pp = PlanPricing.objects.get(pk=selected_plan_id)
@ -8725,9 +8723,9 @@ def submit_plan(request):
return redirect(transaction_url) return redirect(transaction_url)
def payment_callback(request): def payment_callback(request,dealer_slug):
message = request.GET.get("message") 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") payment_id = request.GET.get("id")
history = models.PaymentHistory.objects.filter(transaction_id=payment_id).first() history = models.PaymentHistory.objects.filter(transaction_id=payment_id).first()
payment_status = request.GET.get("status") payment_status = request.GET.get("status")
@ -8966,11 +8964,13 @@ def update_note(request,dealer_slug, pk):
# Admin Management # 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") 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 = { context = {
"customers": models.Customer.objects.filter(active=False), "customers": models.Customer.objects.filter(active=False),
"organizations": models.Organization.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) 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. Displays audit logs (User Actions, Login Events, Request Events) with pagination.
Log type is determined by the 'q' query parameter (e.g., ?q=userActions). 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). 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 q = request.GET.get("q") # Get the log type from the 'q' query parameter
current_pagination_page = request.GET.get("page", 1) current_pagination_page = request.GET.get("page", 1)
context = {} context = {}
@ -9113,7 +9114,8 @@ def AuditLogDashboardView(request):
return render(request, template_name, context) 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: try:
model = apps.get_model(f"inventory.{content_type}") model = apps.get_model(f"inventory.{content_type}")
except LookupError: except LookupError:
@ -9123,13 +9125,14 @@ def activate_account(request, content_type, slug):
if request.method == "POST": if request.method == "POST":
obj.activate_account() obj.activate_account()
messages.success(request, _("Account activated successfully")) messages.success(request, _("Account activated successfully"))
return redirect("user_management") return redirect("user_management", dealer_slug=dealer_slug)
return render( return render(
request, "admin_management/confirm_activate_account.html", {"obj": obj} 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: try:
model = apps.get_model(f"inventory.{content_type}") model = apps.get_model(f"inventory.{content_type}")
except LookupError: except LookupError:
@ -9147,7 +9150,7 @@ def permenant_delete_account(request, content_type, slug):
) )
except Exception as e: except Exception as e:
messages.error(request, _(f"Error deleting account: {e}")) messages.error(request, _(f"Error deleting account: {e}"))
return redirect("user_management") return redirect("user_management", dealer_slug=dealer_slug)
return render( return render(
request, "admin_management/permenant_delete_account.html", {"obj": obj} request, "admin_management/permenant_delete_account.html", {"obj": obj}
) )

View File

@ -9,7 +9,7 @@
{% csrf_token %} {% csrf_token %}
<div class="d-flex justify-content-center"> <div class="d-flex justify-content-center">
<button class="btn btn-phoenix-primary mx-2" type="submit">Activate</button> <button class="btn btn-phoenix-primary mx-2" type="submit">Activate</button>
<a class="btn btn-phoenix-danger mx-2" href="{% url 'user_management' %}">Cancel</a> <a class="btn btn-phoenix-danger mx-2" href="{% url 'user_management' request.dealer.slug %}">Cancel</a>
</div> </div>
</form> </form>
</div> </div>

View File

@ -4,7 +4,7 @@
{% block content %} {% block content %}
<div class="row row-cols-1 row-cols-sm-2 row-cols-md-4 g-4 mt-10"> <div class="row row-cols-1 row-cols-sm-2 row-cols-md-4 g-4 mt-10">
<div class="col"> <div class="col">
<a href="{% url 'user_management' %}"> <a href="{% url 'user_management' request.dealer.slug %}">
<div class="card h-100"> <div class="card h-100">
<div class="card-header text-center"> <div class="card-header text-center">
<h5 class="card-title">{{ _("User Management")}}</h5> <h5 class="card-title">{{ _("User Management")}}</h5>
@ -14,7 +14,7 @@
</a> </a>
</div> </div>
<div class="col"> <div class="col">
<a href="{% url 'audit_log_dashboard' %}"> <a href="{% url 'audit_log_dashboard' request.dealer.slug %}">
<div class="card h-100"> <div class="card h-100">
<div class="card-header text-center"> <div class="card-header text-center">
<h5 class="card-title">{{ _("Audit Log Dashboard")}}</h5> <h5 class="card-title">{{ _("Audit Log Dashboard")}}</h5>

View File

@ -2,17 +2,17 @@
<ul class="nav nav-tabs" id="accountTypeTabs" role="tablist"> <ul class="nav nav-tabs" id="accountTypeTabs" role="tablist">
<li class="nav-item me-3" role="presentation"> <li class="nav-item me-3" role="presentation">
<a href="{% url 'audit_log_dashboard' %}?q=userActions"> <a href="{% url 'audit_log_dashboard' request.dealer.slug %}?q=userActions">
<i class="fas fa-history me-2"></i>{% trans "User Actions" %} <i class="fas fa-history me-2"></i>{% trans "User Actions" %}
</a> </a>
</li> </li>
<li class="nav-item me-3" role="presentation"> <li class="nav-item me-3" role="presentation">
<a href="{% url 'audit_log_dashboard' %}?q=loginEvents"> <a href="{% url 'audit_log_dashboard' request.dealer.slug %}?q=loginEvents">
<i class="fas fa-right-to-bracket me-2"></i>{% trans "User Login Events" %} <i class="fas fa-right-to-bracket me-2"></i>{% trans "User Login Events" %}
</a> </a>
</li> </li>
<li class="nav-item" role="presentation"> <li class="nav-item" role="presentation">
<a href="{% url 'audit_log_dashboard' %}?q=userRequests"> <a href="{% url 'audit_log_dashboard' request.dealer.slug %}?q=userRequests">
<i class="fas fa-file-alt me-2"></i>{% trans "User Page Requests" %} <i class="fas fa-file-alt me-2"></i>{% trans "User Page Requests" %}
</a> </a>
</li> </li>

View File

@ -9,7 +9,7 @@
{% csrf_token %} {% csrf_token %}
<div class="d-flex justify-content-center"> <div class="d-flex justify-content-center">
<button class="btn btn-phoenix-danger mx-2" type="submit"><i class="fas fa-trash me-2"></i> Delete Permenantly</button> <button class="btn btn-phoenix-danger mx-2" type="submit"><i class="fas fa-trash me-2"></i> Delete Permenantly</button>
<a class="btn btn-phoenix-secondary mx-2" href="{% url 'user_management' %}"><i class="fas fa-ban me-2"></i>Cancel</a> <a class="btn btn-phoenix-secondary mx-2" href="{% url 'user_management' request.dealer.slug %}"><i class="fas fa-ban me-2"></i>Cancel</a>
</div> </div>
</form> </form>
</div> </div>

View File

@ -51,9 +51,9 @@
<span class="fas fa-ellipsis-h fs-10"></span> <span class="fas fa-ellipsis-h fs-10"></span>
</button> </button>
<div class="dropdown-menu dropdown-menu-end py-2"> <div class="dropdown-menu dropdown-menu-end py-2">
<a href="{% url 'activate_account' 'customer' customer.slug %}"><button class="dropdown-item text-primary">{% trans "Activate" %}</button></a> <a href="{% url 'activate_account' request.dealer.slug 'customer' customer.slug %}"><button class="dropdown-item text-primary">{% trans "Activate" %}</button></a>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<a href="{% url 'permenant_delete_account' 'customer' customer.slug %}"><button class="dropdown-item text-danger">{% trans "Permenantly Delete" %}</button></a> <a href="{% url 'permenant_delete_account' request.dealer.slug 'customer' customer.slug %}"><button class="dropdown-item text-danger">{% trans "Permenantly Delete" %}</button></a>
</div> </div>
</div> </div>
</td> </td>
@ -115,9 +115,9 @@
<span class="fas fa-ellipsis-h fs-10"></span> <span class="fas fa-ellipsis-h fs-10"></span>
</button> </button>
<div class="dropdown-menu dropdown-menu-end py-2"> <div class="dropdown-menu dropdown-menu-end py-2">
<a href="{% url 'activate_account' 'organization' organization.slug %}"><button class="dropdown-item text-primary">{% trans "Activate" %}</button></a> <a href="{% url 'activate_account' request.dealer.slug 'organization' organization.slug %}"><button class="dropdown-item text-primary">{% trans "Activate" %}</button></a>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<a href="{% url 'permenant_delete_account' 'organization' organization.slug %}"><button class="dropdown-item text-danger">{% trans "Permenantly Delete" %}</button></a> <a href="{% url 'permenant_delete_account' request.dealer.slug 'organization' organization.slug %}"><button class="dropdown-item text-danger">{% trans "Permenantly Delete" %}</button></a>
</div> </div>
</div> </div>
</td> </td>
@ -179,9 +179,9 @@
<span class="fas fa-ellipsis-h fs-10"></span> <span class="fas fa-ellipsis-h fs-10"></span>
</button> </button>
<div class="dropdown-menu dropdown-menu-end py-2"> <div class="dropdown-menu dropdown-menu-end py-2">
<a href="{% url 'activate_account' 'vendor' vendor.slug %}"><button class="dropdown-item text-primary">{% trans "Activate" %}</button></a> <a href="{% url 'activate_account' request.dealer.slug 'vendor' vendor.slug %}"><button class="dropdown-item text-primary">{% trans "Activate" %}</button></a>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<a href="{% url 'permenant_delete_account' 'vendor' vendor.slug %}"><button class="dropdown-item text-danger">{% trans "Permenantly Delete" %}</button></a> <a href="{% url 'permenant_delete_account' request.dealer.slug 'vendor' vendor.slug %}"><button class="dropdown-item text-danger">{% trans "Permenantly Delete" %}</button></a>
</div> </div>
</div> </div>
</td> </td>
@ -245,7 +245,7 @@
<div class="dropdown-menu dropdown-menu-end py-2"> <div class="dropdown-menu dropdown-menu-end py-2">
<a href="{% url 'activate_account' 'staff' obj.slug %}"><button class="dropdown-item text-primary">{% trans "Activate" %}</button></a> <a href="{% url 'activate_account' 'staff' obj.slug %}"><button class="dropdown-item text-primary">{% trans "Activate" %}</button></a>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<a href="{% url 'permenant_delete_account' 'staff' obj.slug %}"><button class="dropdown-item text-danger">{% trans "Permenantly Delete" %}</button></a> <a href="{% url 'permenant_delete_account' request.dealer.slug 'staff' obj.slug %}"><button class="dropdown-item text-danger">{% trans "Permenantly Delete" %}</button></a>
</div> </div>
</div> </div>
</td> </td>

View File

@ -58,7 +58,7 @@
<h2>{{ _("Select Car Makes You Sell") }}</h2> <h2>{{ _("Select Car Makes You Sell") }}</h2>
<form method="post" action="{% url 'assign_car_makes' %}"> <form method="post" action="{% url 'assign_car_makes' request.dealer.slug %}">
{% csrf_token %} {% csrf_token %}
<div class="car-makes-grid"> <div class="car-makes-grid">

View File

@ -114,13 +114,13 @@
<span class="badge badge-phoenix fs-9 badge-phoenix-success"> <span class="badge-label">{% trans 'Active' %}</span><span class="ms-1" data-feather="check" style="height:16px;width:16px;"></span> </span> <span class="badge badge-phoenix fs-9 badge-phoenix-success"> <span class="badge-label">{% trans 'Active' %}</span><span class="ms-1" data-feather="check" style="height:16px;width:16px;"></span> </span>
{% else %} {% else %}
<span class="badge badge-phoenix fs-9 badge-phoenix-danger"> <span class="badge-label">{% trans 'Expired' %}</span><span class="ms-1" data-feather="times" style="height:16px;width:16px;"></span> </span> <span class="badge badge-phoenix fs-9 badge-phoenix-danger"> <span class="badge-label">{% trans 'Expired' %}</span><span class="ms-1" data-feather="times" style="height:16px;width:16px;"></span> </span>
<a href="{% url 'pricing_page' %}" class="btn btn-phoenix-secondary ms-2"><span class="fas fa-arrow-right me-2"></span>{{ _("Renew") }}</a> <a href="{% url 'pricing_page' request.dealer.slug %}" class="btn btn-phoenix-secondary ms-2"><span class="fas fa-arrow-right me-2"></span>{{ _("Renew") }}</a>
{% endif %} {% endif %}
{% if dealer.user.userplan.plan.name != "Enterprise" %} {% if dealer.user.userplan.plan.name != "Enterprise" %}
<a href="{% url 'pricing_page' %}" class="btn btn-sm btn-phoenix-primary ms-2"><span class="fas fa-rocket me-2"></span>{{ _("Upgrade") }}</a> <a href="{% url 'pricing_page' request.dealer.slug %}" class="btn btn-sm btn-phoenix-primary ms-2"><span class="fas fa-rocket me-2"></span>{{ _("Upgrade") }}</a>
{% endif %} {% endif %}
{% else %} {% else %}
<span class="text-body-tertiary fw-semibold">You have no active plan.</span> <a href="{% url 'pricing_page' %}" class="btn btn-phoenix-secondary ms-2"><span class="fas fa-arrow-right me-2"></span>{{ _("Subscribe") }}</a> <span class="text-body-tertiary fw-semibold">You have no active plan.</span> <a href="{% url 'pricing_page' request.dealer.slug %}" class="btn btn-phoenix-secondary ms-2"><span class="fas fa-arrow-right me-2"></span>{{ _("Subscribe") }}</a>
{% endif %} {% endif %}
</div> </div>
@ -172,7 +172,7 @@
{% endfor %} {% endfor %}
</div> </div>
<div class="row"> <div class="row">
<a class="btn btn-sm btn-phoenix-warning" href="{% url 'assign_car_makes' %}">{{ _("Select Makes")}}</a> <a class="btn btn-sm btn-phoenix-warning" href="{% url 'assign_car_makes' request.dealer.slug %}">{{ _("Select Makes")}}</a>
</div> </div>
</div> </div>

View File

@ -230,7 +230,7 @@
{% endif %} {% endif %}
{% if perms.django_ledger.view_itemmodel %} {% if perms.django_ledger.view_itemmodel %}
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="{% url 'ledger_list' %}"> <a class="nav-link" href="{% url 'ledger_list' request.dealer.slug %}">
<div class="d-flex align-items-center"> <div class="d-flex align-items-center">
<span class="nav-link-icon"><span class="fas fa-book"></span></span><span class="nav-link-text">{% trans "Ledgers"|capfirst %}</span> <span class="nav-link-icon"><span class="fas fa-book"></span></span><span class="nav-link-text">{% trans "Ledgers"|capfirst %}</span>
</div> </div>
@ -238,7 +238,7 @@
</li> </li>
{% endif %} {% endif %}
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="{% url 'item_service_list' %}"> <a class="nav-link" href="{% url 'item_service_list' request.dealer.slug %}">
<div class="d-flex align-items-center"> <div class="d-flex align-items-center">
<span class="nav-link-icon"><span data-feather="activity"></span></span><span class="nav-link-text">{% trans "Services"|capfirst %}</span> <span class="nav-link-icon"><span data-feather="activity"></span></span><span class="nav-link-text">{% trans "Services"|capfirst %}</span>
</div> </div>
@ -246,7 +246,7 @@
</li> </li>
{% if perms.django_ledger.view_itemmodel %} {% if perms.django_ledger.view_itemmodel %}
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="{% url 'item_expense_list' %}"> <a class="nav-link" href="{% url 'item_expense_list' request.dealer.slug %}">
<div class="d-flex align-items-center"> <div class="d-flex align-items-center">
<span class="nav-link-icon"><span class="fas fa-users-cog"></span></span><span class="nav-link-text">{% trans "Expenses"|capfirst %}</span> <span class="nav-link-icon"><span class="fas fa-users-cog"></span></span><span class="nav-link-text">{% trans "Expenses"|capfirst %}</span>
</div> </div>
@ -255,7 +255,7 @@
{% endif %} {% endif %}
{% if perms.django_ledger.view_vendormodel %} {% if perms.django_ledger.view_vendormodel %}
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="{% url 'vendor_list' %}"> <a class="nav-link" href="{% url 'vendor_list' request.dealer.slug %}">
<div class="d-flex align-items-center"> <div class="d-flex align-items-center">
<span class="nav-link-icon"><span data-feather="package"></span></span><span class="nav-link-text">{% trans 'vendors'|capfirst %}</span> <span class="nav-link-icon"><span data-feather="package"></span></span><span class="nav-link-text">{% trans 'vendors'|capfirst %}</span>
</div> </div>
@ -439,10 +439,10 @@
{% endif %} {% endif %}
{% if request.is_dealer %} {% if request.is_dealer %}
<li class="nav-item"> <li class="nav-item">
<a class="nav-link px-3 d-block" href="{% url 'user_list' %}"><span class="me-2 text-body align-bottom" data-feather="users"></span>{{ _("Staff & Groups") }}</a> <a class="nav-link px-3 d-block" href="{% url 'user_list' request.dealer.slug %}"><span class="me-2 text-body align-bottom" data-feather="users"></span>{{ _("Staff & Groups") }}</a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a class="nav-link px-3 d-block" href="{% url 'dealer_activity' %}"> <span class="me-2 text-body align-bottom" data-feather="lock"></span>{{ _("Activities") }}</a> <a class="nav-link px-3 d-block" href="{% url 'dealer_activity' request.dealer.slug %}"> <span class="me-2 text-body align-bottom" data-feather="lock"></span>{{ _("Activities") }}</a>
</li> </li>
{% endif %} {% endif %}
<li class="nav-item"> <li class="nav-item">
@ -452,7 +452,7 @@
</li> </li>
<li class="nav-item"> <li class="nav-item">
{% if request.is_dealer %} {% if request.is_dealer %}
<a class="nav-link px-3 d-block" href="{% url 'management' %}"> <span class="me-2 text-body align-bottom" data-feather="shield"></span>{{ _("Admin Managemnet") }}</a> <a class="nav-link px-3 d-block" href="{% url 'management' request.dealer.slug %}"> <span class="me-2 text-body align-bottom" data-feather="shield"></span>{{ _("Admin Managemnet") }}</a>
{% endif %} {% endif %}
</li> </li>
<li class="nav-item"> <li class="nav-item">

View File

@ -21,7 +21,7 @@
<div class="alert alert-outline-warning d-flex align-items-center" <div class="alert alert-outline-warning d-flex align-items-center"
role="alert"> role="alert">
<i class="fa-solid fa-circle-info fs-6"></i> <i class="fa-solid fa-circle-info fs-6"></i>
<p class="mb-0 flex-1">{{ _("Please Add A Vendor, Before Adding A Car .") }} <a href="{% url 'vendor_create' %}" class="ms-3 text-body-primary fs-9" >{{ _("Add Vendor") }}</a> </p> <p class="mb-0 flex-1">{{ _("Please Add A Vendor, Before Adding A Car .") }} <a href="{% url 'vendor_create' request.dealer.slug %}" class="ms-3 text-body-primary fs-9" >{{ _("Add Vendor") }}</a> </p>
<button class="btn-close" <button class="btn-close"
type="button" type="button"
data-bs-dismiss="alert" data-bs-dismiss="alert"

View File

@ -9,7 +9,7 @@
<div class="d-flex justify-content-between mb-2"> <div class="d-flex justify-content-between mb-2">
<h3 class="">{% trans "Expenses" %}</h3> <h3 class="">{% trans "Expenses" %}</h3>
<a href="{% url 'item_expense_create' %}" class="btn btn-md btn-phoenix-primary"><i class="fa fa-plus me-2"></i>{% trans "Add Expense" %}</a> <a href="{% url 'item_expense_create' request.dealer.slug %}" class="btn btn-md btn-phoenix-primary"><i class="fa fa-plus me-2"></i>{% trans "Add Expense" %}</a>
</div> </div>
{% include "partials/search_box.html" %} {% include "partials/search_box.html" %}
{% if page_obj.object_list %} {% if page_obj.object_list %}
@ -39,7 +39,7 @@
{{ expense.uom }} {{ expense.uom }}
</td> </td>
<td class="align-middle product white-space-nowrap"> <td class="align-middle product white-space-nowrap">
<a href="{% url 'item_expense_update' expense.pk %}" <a href="{% url 'item_expense_update' request.dealer.slug expense.pk %}"
class="btn btn-sm btn-phoenix-success"> class="btn btn-sm btn-phoenix-success">
{% trans "Update" %} {% trans "Update" %}
</a> </a>

View File

@ -8,7 +8,7 @@
<div class="d-flex justify-content-between mb-2"> <div class="d-flex justify-content-between mb-2">
<h3 class="">{% trans "Services" %}</h3> <h3 class="">{% trans "Services" %}</h3>
<a href="{% url 'item_service_create' %}" class="btn btn-md btn-phoenix-primary"><i class="fa fa-plus me-2"></i>{% trans "Add Service" %}</a> <a href="{% url 'item_service_create' request.dealer.slug %}" class="btn btn-md btn-phoenix-primary"><i class="fa fa-plus me-2"></i>{% trans "Add Service" %}</a>
</div> </div>
{% include "partials/search_box.html" %} {% include "partials/search_box.html" %}
{% if page_obj.object_list %} {% if page_obj.object_list %}
@ -46,7 +46,7 @@
{{ service.item.co }} {{ service.item.co }}
</td> </td>
<td class="align-middle white-space-nowrap text-start"> <td class="align-middle white-space-nowrap text-start">
<a href="{% url 'item_service_update' service.pk %}" <a href="{% url 'item_service_update' request.dealer.slug service.pk %}"
class="btn btn-sm btn-phoenix-success"> class="btn btn-sm btn-phoenix-success">
{% trans "Update" %} {% trans "Update" %}
</a> </a>

View File

@ -27,7 +27,7 @@
</button> </button>
<a type="button" <a type="button"
class="btn btn-sm btn-phoenix-danger" class="btn btn-sm btn-phoenix-danger"
href="{% url 'bank_account_delete' bank_account.pk %}"> href="{% url 'bank_account_delete' request.dealer.slug bank_account.pk %}">
{% trans 'Yes' %} {% trans 'Yes' %}
</a> </a>
</div> </div>
@ -52,7 +52,7 @@
</div> </div>
</div> </div>
<div class="card-footer d-flex "> <div class="card-footer d-flex ">
<a class="btn btn-sm btn-phoenix-primary me-1" href="{% url 'bank_account_update' bank_account.pk %}"> <a class="btn btn-sm btn-phoenix-primary me-1" href="{% url 'bank_account_update' request.dealer.slug bank_account.pk %}">
<!--<i class="bi bi-pencil-square"></i> --> <!--<i class="bi bi-pencil-square"></i> -->
{{ _("Edit") }} {{ _("Edit") }}
</a> </a>
@ -63,7 +63,7 @@
{{ _("Delete") }} {{ _("Delete") }}
</a> </a>
<a class="btn btn-sm btn-phoenix-secondary" <a class="btn btn-sm btn-phoenix-secondary"
href="{% url 'bank_account_list' %}"> href="{% url 'bank_account_list' request.dealer.slug %}">
<!--<i class="bi bi-arrow-left-square-fill"></i>--> <!--<i class="bi bi-arrow-left-square-fill"></i>-->
{% trans "Back to List" %} {% trans "Back to List" %}
</a> </a>

View File

@ -8,7 +8,7 @@
<div class="d-flex justify-content-between mb-2"> <div class="d-flex justify-content-between mb-2">
<h3 class="">{% trans "Bank Accounts" %}</h3> <h3 class="">{% trans "Bank Accounts" %}</h3>
<a href="{% url 'bank_account_create' %}" class="btn btn-md btn-phoenix-primary"><i class="fa fa-plus me-2"></i>{% trans "Add Bank Account" %}</a> <a href="{% url 'bank_account_create' request.dealer.slug %}" class="btn btn-md btn-phoenix-primary"><i class="fa fa-plus me-2"></i>{% trans "Add Bank Account" %}</a>
</div> </div>
{% include "partials/search_box.html" %} {% include "partials/search_box.html" %}
{% if page_obj.object_list %} {% if page_obj.object_list %}
@ -27,7 +27,9 @@
{% for bank in bank_accounts %} {% for bank in bank_accounts %}
<tr class="hover-actions-trigger btn-reveal-trigger position-static"> <tr class="hover-actions-trigger btn-reveal-trigger position-static">
<td class="align-middle product white-space-nowrap px-1"> <td class="align-middle product white-space-nowrap px-1">
{{ bank.name }} <a href="{% url 'bank_account_detail' request.dealer.slug bank.pk %}">
{{ bank.name }}
</a>
</td> </td>
<td class="align-middle product white-space-nowrap"> <td class="align-middle product white-space-nowrap">
{{ bank.account_number }} {{ bank.account_number }}
@ -36,7 +38,7 @@
{{ bank.account_type|capfirst }} {{ bank.account_type|capfirst }}
</td> </td>
<td class="align-middle product white-space-nowrap"> <td class="align-middle product white-space-nowrap">
<a href="{% url 'bank_account_update' bank.pk %}" <a href="{% url 'bank_account_update' request.dealer.slug bank.pk %}"
class="btn btn-sm btn-phoenix-success"> class="btn btn-sm btn-phoenix-success">
{% trans "Update" %} {% trans "Update" %}
</a> </a>

View File

@ -38,19 +38,19 @@
<div class="card-footer"> <div class="card-footer">
<div class="d-flex justify-content-between"> <div class="d-flex justify-content-between">
{% if journal_entry.can_lock %} {% if journal_entry.can_lock %}
<a href="{{ journal_entry.get_lock_url }}?next={% url 'journalentry_txs' journal_entry.entity_slug journal_entry.ledger_id journal_entry.pk %}" <a href="{{ journal_entry.get_lock_url }}?next={% url 'journalentry_txs' request.dealer.slug journal_entry.entity_slug journal_entry.ledger_id journal_entry.pk %}"
class="btn btn-phoenix-success font-weight-bold">{% trans 'Lock' %}</a> class="btn btn-phoenix-success font-weight-bold">{% trans 'Lock' %}</a>
{% endif %} {% endif %}
{% if journal_entry.can_unlock %} {% if journal_entry.can_unlock %}
<a href="{{ journal_entry.get_unlock_url }}?next={% url 'journalentry_txs' journal_entry.entity_slug journal_entry.ledger_id journal_entry.pk %}" <a href="{{ journal_entry.get_unlock_url }}?next={% url 'journalentry_txs' request.dealer.slug journal_entry.entity_slug journal_entry.ledger_id journal_entry.pk %}"
class="btn btn-phoenix-warning font-weight-bold">{% trans 'UnLock' %}</a> class="btn btn-phoenix-warning font-weight-bold">{% trans 'UnLock' %}</a>
{% endif %} {% endif %}
{% if journal_entry.can_post %} {% if journal_entry.can_post %}
<a href="{{ journal_entry.get_post_url }}?next={% url 'journalentry_txs' journal_entry.entity_slug journal_entry.ledger_id journal_entry.pk %}" <a href="{{ journal_entry.get_post_url }}?next={% url 'journalentry_txs' request.dealer.slug journal_entry.entity_slug journal_entry.ledger_id journal_entry.pk %}"
class="btn btn-phoenix-success font-weight-bold">{% trans 'Post' %}</a> class="btn btn-phoenix-success font-weight-bold">{% trans 'Post' %}</a>
{% endif %} {% endif %}
{% if journal_entry.can_unpost %} {% if journal_entry.can_unpost %}
<a href="{{ journal_entry.get_unpost_url }}?next={% url 'journalentry_txs' journal_entry.entity_slug journal_entry.ledger_id journal_entry.pk %}" <a href="{{ journal_entry.get_unpost_url }}?next={% url 'journalentry_txs' request.dealer.slug journal_entry.entity_slug journal_entry.ledger_id journal_entry.pk %}"
class="btn btn-phoenix-danger font-weight-bold">{% trans 'UnPost' %}</a> class="btn btn-phoenix-danger font-weight-bold">{% trans 'UnPost' %}</a>
{% endif %} {% endif %}
</div> </div>

View File

@ -14,7 +14,7 @@
</div> </div>
<div class="mt-5 text-center"> <div class="mt-5 text-center">
<button type="submit" class="btn btn-phoenix-success me-2"><i class="fa-solid fa-floppy-disk me-1"></i>{% trans "Save" %}</button> <button type="submit" class="btn btn-phoenix-success me-2"><i class="fa-solid fa-floppy-disk me-1"></i>{% trans "Save" %}</button>
<a href="{% url 'journalentry_list' ledger.pk %}" class="btn btn-phoenix-secondary"><i class="fa-solid fa-ban me-1"></i> {% trans "Cancel" %}</a> <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>
</div> </div>
</form> </form>
</div> </div>

View File

@ -36,7 +36,7 @@
<div class="d-flex justify-content-between mb-2"> <div class="d-flex justify-content-between mb-2">
<h3 class="">{% trans "Journal Entries" %}</h3> <h3 class="">{% trans "Journal Entries" %}</h3>
<a href="{% url 'journalentry_create' ledger.pk %}" class="btn btn-md btn-phoenix-primary"><i class="fa fa-plus me-2"></i>{% trans "Add Journal Entry" %}</a> <a href="{% url 'journalentry_create' request.dealer.slug ledger.pk %}" class="btn btn-md btn-phoenix-primary"><i class="fa fa-plus me-2"></i>{% trans "Add Journal Entry" %}</a>
</div> </div>
@ -96,10 +96,10 @@
<span class="fas fa-ellipsis-h fs-10"></span> <span class="fas fa-ellipsis-h fs-10"></span>
</button> </button>
<div class="dropdown-menu dropdown-menu-end py-2"> <div class="dropdown-menu dropdown-menu-end py-2">
<a class="dropdown-item" href="{% url 'journalentry_transactions' je.pk %}">{% trans "View" %}</a> <a class="dropdown-item" href="{% url 'journalentry_transactions' request.dealer.slug je.pk %}">{% trans "View" %}</a>
<a class="dropdown-item" href="{% url 'journalentry_txs' je.entity_slug je.ledger_id je.pk %}">{% trans "Transactions" %}</a> <a class="dropdown-item" href="{% url 'journalentry_txs' request.dealer.slug je.entity_slug je.ledger_id je.pk %}">{% trans "Transactions" %}</a>
{% if je.can_delete %} {% if je.can_delete %}
<a class="dropdown-item" href="{% url 'journalentry_delete' je.pk %}">{% trans "Delete" %}</a> <a class="dropdown-item" href="{% url 'journalentry_delete' request.dealer.slug je.pk %}">{% trans "Delete" %}</a>
{% endif %} {% endif %}
</div> </div>
</div> </div>

View File

@ -62,30 +62,30 @@
{% trans 'Save' %} {% trans 'Save' %}
</button> </button>
<a class="btn btn-phoenix-secondary" <a class="btn btn-phoenix-secondary"
href="{% url 'journalentry_list' journal_entry.ledger_id %}"> href="{% url 'journalentry_list' request.dealer.slug journal_entry.ledger_id %}">
{% trans 'Done' %} {% trans 'Done' %}
</a> </a>
{% if journal_entry.can_lock %} {% if journal_entry.can_lock %}
<a class="btn btn-phoenix-danger" <a class="btn btn-phoenix-danger"
href="{{ journal_entry.get_action_lock_url }}?next={% url 'journalentry_txs' journal_entry.entity_slug journal_entry.ledger_id journal_entry.pk %}"> href="{{ journal_entry.get_action_lock_url }}?next={% url 'journalentry_txs' request.dealer.slug journal_entry.entity_slug journal_entry.ledger_id journal_entry.pk %}">
{% trans 'Lock' %} {% trans 'Lock' %}
</a> </a>
{% endif %} {% endif %}
{% if journal_entry.can_unlock %} {% if journal_entry.can_unlock %}
<a class="btn btn-phoenix-warning" <a class="btn btn-phoenix-warning"
href="{{ journal_entry.get_action_unlock_url }}?next={% url 'journalentry_txs' journal_entry.entity_slug journal_entry.ledger_id journal_entry.pk %}"> href="{{ journal_entry.get_action_unlock_url }}?next={% url 'journalentry_txs' request.dealer.slug journal_entry.entity_slug journal_entry.ledger_id journal_entry.pk %}">
{% trans 'UnLock' %} {% trans 'UnLock' %}
</a> </a>
{% endif %} {% endif %}
{% if journal_entry.can_post %} {% if journal_entry.can_post %}
<a class="btn btn-phoenix-danger" <a class="btn btn-phoenix-danger"
href="{{ journal_entry.get_action_post_url }}?next={% url 'journalentry_txs' journal_entry.entity_slug journal_entry.ledger_id journal_entry.pk %}"> href="{{ journal_entry.get_action_post_url }}?next={% url 'journalentry_txs' request.dealer.slug journal_entry.entity_slug journal_entry.ledger_id journal_entry.pk %}">
{% trans 'Post' %} {% trans 'Post' %}
</a> </a>
{% endif %} {% endif %}
{% if journal_entry.can_unpost %} {% if journal_entry.can_unpost %}
<a class="btn btn-phoenix-warning" <a class="btn btn-phoenix-warning"
href="{{ journal_entry.get_action_unpost_url }}?next={% url 'journalentry_txs' journal_entry.entity_slug journal_entry.ledger_id journal_entry.pk %}"> href="{{ journal_entry.get_action_unpost_url }}?next={% url 'journalentry_txs' request.dealer.slug journal_entry.entity_slug journal_entry.ledger_id journal_entry.pk %}">
{% trans 'UnPost' %} {% trans 'UnPost' %}
</a> </a>
{% endif %} {% endif %}

View File

@ -10,7 +10,7 @@
<div class="d-flex justify-content-between mb-2"> <div class="d-flex justify-content-between mb-2">
<h3 class="">{% trans "Ledger" %}</h3> <h3 class="">{% trans "Ledger" %}</h3>
<a href="{% url 'ledger_create' %}" class="btn btn-md btn-phoenix-primary"><i class="fa fa-plus me-2"></i>{% trans 'Create Ledger' %}</a> <a href="{% url 'ledger_create' request.dealer.slug %}" class="btn btn-md btn-phoenix-primary"><i class="fa fa-plus me-2"></i>{% trans 'Create Ledger' %}</a>
</div> </div>
<div class="table-responsive px-1 scrollbar mt-3"> <div class="table-responsive px-1 scrollbar mt-3">
<table class="table align-items-center table-flush"> <table class="table align-items-center table-flush">
@ -32,16 +32,16 @@
<tr class="hover-actions-trigger btn-reveal-trigger position-static"> <tr class="hover-actions-trigger btn-reveal-trigger position-static">
<td class="align-middle product white-space-nowrap px-1"> <td class="align-middle product white-space-nowrap px-1">
{% if ledger.invoicemodel %} {% if ledger.invoicemodel %}
<a href="{% url 'invoice_detail' ledger.invoicemodel.pk %}">{{ ledger.get_wrapped_model_instance }}</a> <a href="{% url 'invoice_detail' request.dealer.slug ledger.invoicemodel.pk %}">{{ ledger.get_wrapped_model_instance }}</a>
{% elif ledger.billmodel %} {% elif ledger.billmodel %}
<a href="{% url 'bill_detail' ledger.billmodel.pk %}">{{ ledger.get_wrapped_model_instance }}</a> <a href="{% url 'bill-detail' request.dealer.slug request.dealer.entity.slug ledger.billmodel.pk %}">{{ ledger.get_wrapped_model_instance }}</a>
{% else %} {% else %}
<a href="#">{{ ledger.name }}</a> <a href="#">{{ ledger.name }}</a>
{% endif %} {% endif %}
</td> </td>
<td class="align-middle product white-space-nowrap"> <td class="align-middle product white-space-nowrap">
<a class="btn btn-sm btn-phoenix-primary" <a class="btn btn-sm btn-phoenix-primary"
href="{% url 'journalentry_list' ledger.pk %}"> href="{% url 'journalentry_list' request.dealer.slug ledger.pk %}">
<i class="fa-solid fa-right-left"></i> <i class="fa-solid fa-right-left"></i>
<span> <span>
<span class="has-text-weight-bold">{{ ledger.journal_entries__count }}</span> <span class="has-text-weight-bold">{{ ledger.journal_entries__count }}</span>
@ -80,33 +80,33 @@
</button> </button>
<div class="dropdown-menu dropdown-menu-end py-2"> <div class="dropdown-menu dropdown-menu-end py-2">
{% if ledger.can_lock %} {% if ledger.can_lock %}
<a href="{% url 'ledger-action-lock' entity_slug=entity_slug ledger_pk=ledger.uuid %}" <a href="{% url 'ledger-action-lock' dealer_slug=request.dealer.slug entity_slug=entity_slug ledger_pk=ledger.uuid %}"
class="dropdown-item has-text-info has-text-weight-bold">{% trans 'Lock' %}</a> class="dropdown-item has-text-info has-text-weight-bold">{% trans 'Lock' %}</a>
{% endif %} {% endif %}
{% if ledger.can_unlock %} {% if ledger.can_unlock %}
<a href="{% url 'ledger-action-unlock' entity_slug=entity_slug ledger_pk=ledger.uuid %}" <a href="{% url 'ledger-action-unlock' dealer_slug=request.dealer.slug entity_slug=entity_slug ledger_pk=ledger.uuid %}"
class="dropdown-item has-text-warning has-text-weight-bold">{% trans 'UnLock' %}</a> class="dropdown-item has-text-warning has-text-weight-bold">{% trans 'UnLock' %}</a>
{% endif %} {% endif %}
{% if ledger.can_post %} {% if ledger.can_post %}
<a href="{% url 'ledger-action-post' entity_slug=entity_slug ledger_pk=ledger.uuid %}" <a href="{% url 'ledger-action-post' dealer_slug=request.dealer.slug entity_slug=entity_slug ledger_pk=ledger.uuid %}"
class="dropdown-item has-text-info has-text-weight-bold text-success">{% trans 'Post' %}</a> class="dropdown-item has-text-info has-text-weight-bold text-success">{% trans 'Post' %}</a>
{% endif %} {% endif %}
{% if ledger.can_unpost %} {% if ledger.can_unpost %}
<a href="{% url 'ledger-action-unpost' entity_slug=entity_slug ledger_pk=ledger.uuid %}" <a href="{% url 'ledger-action-unpost' dealer_slug=request.dealer.slug entity_slug=entity_slug ledger_pk=ledger.uuid %}"
class="dropdown-item has-text-warning has-text-weight-bold text-info">{% trans 'UnPost' %}</a> class="dropdown-item has-text-warning has-text-weight-bold text-info">{% trans 'UnPost' %}</a>
{% endif %} {% endif %}
{% if ledger.can_hide %} {% if ledger.can_hide %}
<a href="{% url 'ledger-action-hide' entity_slug=entity_slug ledger_pk=ledger.uuid %}" <a href="{% url 'ledger-action-hide' dealer_slug=request.dealer.slug entity_slug=entity_slug ledger_pk=ledger.uuid %}"
class="dropdown-item has-text-warning has-text-weight-bold text-danger">{% trans 'Hide' %}</a> class="dropdown-item has-text-warning has-text-weight-bold text-danger">{% trans 'Hide' %}</a>
{% endif %} {% endif %}
{% if ledger.can_unhide %} {% if ledger.can_unhide %}
<a href="{% url 'ledger-action-unhide' entity_slug=entity_slug ledger_pk=ledger.uuid %}" <a href="{% url 'ledger-action-unhide' dealer_slug=request.dealer.slug entity_slug=entity_slug ledger_pk=ledger.uuid %}"
class="dropdown-item has-text-danger has-text-weight-bold">{% trans 'UnHide' %}</a> class="dropdown-item has-text-danger has-text-weight-bold">{% trans 'UnHide' %}</a>
{% endif %} {% endif %}
{% if ledger.can_delete %} {% if ledger.can_delete %}
<a href="{% url 'ledger-delete' entity_slug=entity_slug ledger_pk=ledger.uuid %}" <a href="{% url 'ledger-delete' dealer_slug=request.dealer.slug entity_slug=entity_slug ledger_pk=ledger.uuid %}"
class="dropdown-item has-text-danger has-text-weight-bold text-danger">{% trans 'Delete' %}</a> class="dropdown-item has-text-danger has-text-weight-bold text-danger">{% trans 'Delete' %}</a>
{% endif %} {% endif %}
</div> </div>

View File

@ -42,7 +42,7 @@
<span class="text-muted small">{% trans "Plan" %}</span> <span class="text-muted small">{% trans "Plan" %}</span>
<div class="d-flex align-items-center justify-content-between"> <div class="d-flex align-items-center justify-content-between">
<span class="fw-semibold">{{ userplan.plan }}</span> <span class="fw-semibold">{{ userplan.plan }}</span>
<a href="{% url 'pricing_page' %}" class="btn btn-sm btn-phoenix-primary"> <a href="{% url 'pricing_page' request.dealer.slug %}" class="btn btn-sm btn-phoenix-primary">
{% trans "Upgrade" %} {% trans "Upgrade" %}
</a> </a>
</div> </div>

View File

@ -98,7 +98,7 @@
<div class="d-flex justify-content-between align-items-end mt-2"> <div class="d-flex justify-content-between align-items-end mt-2">
<span class="fs-5 fw-bold">{{ plan_pricing.price }} <span class="icon-saudi_riyal"></span></span> <span class="fs-5 fw-bold">{{ plan_pricing.price }} <span class="icon-saudi_riyal"></span></span>
{% if plan_pricing.plan == userplan.plan or userplan.is_expired or userplan.plan.is_free %} {% if plan_pricing.plan == userplan.plan or userplan.is_expired or userplan.plan.is_free %}
<a href="{% url 'pricing_page' %}" class="btn btn-sm btn-phoenix-success"> <a href="{% url 'pricing_page' request.dealer.slug %}" class="btn btn-sm btn-phoenix-success">
{% trans "Buy" %} {% trans "Buy" %}
</a> </a>
{% endif %} {% endif %}

View File

@ -51,7 +51,7 @@
{% block content %} {% block content %}
<div class="container py-5"> <div class="container py-5">
<h1 class="text-center mb-5">{{ _("Choose Your Plan")}}</h1> <h1 class="text-center mb-5">{{ _("Choose Your Plan")}}</h1>
<form method="POST" action="{% url 'submit_plan' %}" id="wizardForm"> <form method="POST" action="{% url 'submit_plan' request.dealer.slug %}" id="wizardForm">
{% csrf_token %} {% csrf_token %}
<!-- Step 1: Plan Selection --> <!-- Step 1: Plan Selection -->
<div class="step" id="step1"> <div class="step" id="step1">

View File

@ -17,7 +17,7 @@
{% else %} {% else %}
<div class="alert alert-outline-warning d-flex align-items-center" role="alert"> <div class="alert alert-outline-warning d-flex align-items-center" role="alert">
<i class="fa-solid fa-circle-info fs-6"></i> <i class="fa-solid fa-circle-info fs-6"></i>
<p class="mb-0 flex-1">{{ _("No Active Subscription,please activate your subscription.") }}<a href="{% url 'pricing_page' %}" class="ms-3 text-body-primary fs-9">Manage Subscription</a></p> <p class="mb-0 flex-1">{{ _("No Active Subscription,please activate your subscription.") }}<a href="{% url 'pricing_page' request.dealer.slug %}" class="ms-3 text-body-primary fs-9">Manage Subscription</a></p>
<button class="btn-close" type="button" data-bs-dismiss="alert" aria-label="Close"></button> <button class="btn-close" type="button" data-bs-dismiss="alert" aria-label="Close"></button>
</div> </div>
{% endif %} {% endif %}

View File

@ -11,7 +11,7 @@
<h3 class=""> <h3 class="">
{{ _("Vendors") |capfirst }} {{ _("Vendors") |capfirst }}
</h2> </h2>
<a href="{% url 'vendor_create' %}" <a href="{% url 'vendor_create' request.dealer.slug %}"
class="btn btn-md btn-phoenix-primary"><i class="fa fa-plus me-2"></i>{{ _("Add Vendor") }}</a> class="btn btn-md btn-phoenix-primary"><i class="fa fa-plus me-2"></i>{{ _("Add Vendor") }}</a>
</div> </div>
{% include "partials/search_box.html" %} {% include "partials/search_box.html" %}
@ -92,7 +92,7 @@
{% endif %} {% endif %}
</div> </div>
<div> <div>
<a class="fs-8 fw-bold" href="{% url 'vendor_detail' vendor.slug %}">{{ vendor.arabic_name }}</a> <a class="fs-8 fw-bold" href="{% url 'vendor_detail' request.dealer.slug vendor.slug %}">{{ vendor.arabic_name }}</a>
<div class="d-flex align-items-center"> <div class="d-flex align-items-center">
<p class="mb-0 text-body-highlight fw-semibold fs-9 me-2">{{ vendor.name }}</p> <p class="mb-0 text-body-highlight fw-semibold fs-9 me-2">{{ vendor.name }}</p>
<!--<span class="badge badge-phoenix badge-phoenix-primary">{{ vendor.vendor_model.uuid }}</span>--> <!--<span class="badge badge-phoenix badge-phoenix-primary">{{ vendor.vendor_model.uuid }}</span>-->
@ -121,11 +121,11 @@
<span class="fas fa-ellipsis-h fs-10"></span> <span class="fas fa-ellipsis-h fs-10"></span>
</button> </button>
<div class="dropdown-menu dropdown-menu-end py-2"> <div class="dropdown-menu dropdown-menu-end py-2">
<a href="{% url 'vendor_update' vendor.slug %}" <a href="{% url 'vendor_update' request.dealer.slug vendor.slug %}"
class="dropdown-item text-success-dark">{% trans "Edit" %}</a> class="dropdown-item text-success-dark">{% trans "Edit" %}</a>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<button class="delete-btn dropdown-item text-danger" <button class="delete-btn dropdown-item text-danger"
data-url="{% url 'vendor_delete' vendor.slug %}" data-url="{% url 'vendor_delete' request.dealer.slug vendor.slug %}"
data-message="{{ _("Are you sure you want to delete this vendor") }}?" data-message="{{ _("Are you sure you want to delete this vendor") }}?"
data-bs-toggle="modal" data-bs-toggle="modal"
data-bs-target="#deleteModal">{{ _("Delete") }}</button> data-bs-target="#deleteModal">{{ _("Delete") }}</button>

View File

@ -28,12 +28,12 @@
</ul> </ul>
</div> </div>
<div class="card-footer d-flex"> <div class="card-footer d-flex">
<a class="btn btn-sm btn-phoenix-primary me-1" href="{% url 'vendor_update' vendor.slug %}"> <a class="btn btn-sm btn-phoenix-primary me-1" href="{% url 'vendor_update' request.dealer.slug vendor.slug %}">
{% trans "Edit" %} {% trans "Edit" %}
<i class="fa fa-pencil"></i> <i class="fa fa-pencil"></i>
</a> </a>
<button class="btn btn-phoenix-danger btn-sm delete-btn" <button class="btn btn-phoenix-danger btn-sm delete-btn"
data-url="{% url 'vendor_delete' vendor.slug %}" data-url="{% url 'vendor_delete' request.dealer.slug vendor.slug %}"
data-message="{{ _("Are you sure you want to delete this vendor")}}?" data-message="{{ _("Are you sure you want to delete this vendor")}}?"
data-bs-toggle="modal" data-bs-target="#deleteModal"> data-bs-toggle="modal" data-bs-target="#deleteModal">
{{ _("Delete") }} {{ _("Delete") }}