Merge branch 'main' of http://10.10.1.136:3000/ismail/haikal into frontend
This commit is contained in:
commit
630a9d95f7
@ -50,12 +50,12 @@ urlpatterns = [
|
||||
# path('tasks/<int:task_id>/detail/', views.task_detail, name='task_detail'),
|
||||
# Dashboards
|
||||
# path("user/<int:pk>/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("<slug:dealer_slug>/pricing/", views.pricing_page, name="pricing_page"),
|
||||
path("<slug:dealer_slug>/submit_plan/", views.submit_plan, name="submit_plan"),
|
||||
path("<slug:dealer_slug>/payment-callback/", views.payment_callback, name="payment_callback"),
|
||||
#
|
||||
path(
|
||||
"dealers/activity/",
|
||||
"<slug:dealer_slug>/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("<slug:dealer_slug>/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/<slug:slug>/", views.DealerDetailView.as_view(), name="dealer_detail"
|
||||
"<slug:slug>/dealers/", views.DealerDetailView.as_view(), name="dealer_detail"
|
||||
),
|
||||
path(
|
||||
"dealers/<slug:slug>/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/<slug:slug>/", views.vendorDetailView, name="vendor_detail"),
|
||||
#######################################################
|
||||
path("<slug:dealer_slug>/vendors/create/", views.VendorCreateView.as_view(), name="vendor_create"),
|
||||
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(
|
||||
"vendors/<slug:slug>/update/",
|
||||
"<slug:dealer_slug>/vendors/<slug:slug>/update/",
|
||||
views.VendorUpdateView.as_view(),
|
||||
name="vendor_update",
|
||||
),
|
||||
path(
|
||||
"vendors/<slug:slug>/delete/",
|
||||
"<slug:dealer_slug>/vendors/<slug:slug>/delete/",
|
||||
views.delete_vendor,
|
||||
name="vendor_delete",
|
||||
),
|
||||
#######################################################
|
||||
# Car URLs
|
||||
#######################################################
|
||||
path("<slug:dealer_slug>/cars/upload_cars/", views.upload_cars, name="upload_cars"),
|
||||
path(
|
||||
"<slug:dealer_slug>/cars/<uuid:pk>/upload_cars/",
|
||||
@ -477,24 +481,24 @@ urlpatterns = [
|
||||
# name="payment_create",
|
||||
# ),
|
||||
# Users URLs
|
||||
path("user/<slug:dealer_slug>/", views.UserListView.as_view(), name="user_list"),
|
||||
path("user/create/", views.UserCreateView.as_view(), name="user_create"),
|
||||
path("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/", views.UserListView.as_view(), name="user_list"),
|
||||
path("<slug:dealer_slug>/user/create/", views.UserCreateView.as_view(), name="user_create"),
|
||||
path("<slug:dealer_slug>/user/<slug:slug>/", views.UserDetailView.as_view(), name="user_detail"),
|
||||
path("<slug:dealer_slug>/user/<slug:slug>/groups/", views.UserGroupView, name="user_groups"),
|
||||
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
|
||||
path("group/create/", views.GroupCreateView.as_view(), name="group_create"),
|
||||
path("<slug:dealer_slug>/group/create/", views.GroupCreateView.as_view(), name="group_create"),
|
||||
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("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>/", views.GroupDetailView.as_view(), name="group_detail"),
|
||||
path("<slug:dealer_slug>/group/", views.GroupListView.as_view(), name="group_list"),
|
||||
path("<slug:dealer_slug>/group/<int:pk>/confirm/", views.GroupDeleteview, name="group_delete"),
|
||||
path(
|
||||
"group/<int:pk>/permission/", views.GroupPermissionView, name="group_permission"
|
||||
"<slug:dealer_slug>/group/<int:pk>/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("<slug:dealer_slug>/ledgers/", views.LedgerModelListView.as_view(), name="ledger_list"),
|
||||
path(
|
||||
"ledgers/create/", views.LedgerModelCreateView.as_view(), name="ledger_create"
|
||||
"<slug:dealer_slug>/ledgers/create/", views.LedgerModelCreateView.as_view(), name="ledger_create"
|
||||
),
|
||||
path(
|
||||
"ledgers/<slug:entity_slug>/detail/<uuid:pk>/",
|
||||
"<slug:dealer_slug>/ledgers/<slug:entity_slug>/detail/<uuid:pk>/",
|
||||
views.LedgerModelDetailView.as_view(),
|
||||
name="ledger_detail",
|
||||
),
|
||||
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,
|
||||
name="lock_all_journals",
|
||||
),
|
||||
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,
|
||||
name="unlock_all_journals",
|
||||
),
|
||||
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,
|
||||
name="post_all_journals",
|
||||
),
|
||||
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,
|
||||
name="unpost_all_journals",
|
||||
),
|
||||
@ -581,77 +586,81 @@ urlpatterns = [
|
||||
# "ledgers/create/", views.LedgerModelCreateView.as_view(), name="ledger_create"
|
||||
# ),
|
||||
path(
|
||||
"journalentries/<uuid:pk>/list/",
|
||||
"<slug:dealer_slug>/journalentries/<uuid:pk>/list/",
|
||||
views.JournalEntryListView.as_view(),
|
||||
name="journalentry_list",
|
||||
),
|
||||
path(
|
||||
"journalentries/<uuid:pk>/create/",
|
||||
"<slug:dealer_slug>/journalentries/<uuid:pk>/create/",
|
||||
views.JournalEntryCreateView.as_view(),
|
||||
name="journalentry_create",
|
||||
),
|
||||
path(
|
||||
"journalentries/<uuid:pk>/delete/",
|
||||
"<slug:dealer_slug>/journalentries/<uuid:pk>/delete/",
|
||||
views.JournalEntryDeleteView,
|
||||
name="journalentry_delete",
|
||||
),
|
||||
path(
|
||||
"journalentries/<uuid:pk>/transactions/",
|
||||
"<slug:dealer_slug>/journalentries/<uuid:pk>/transactions/",
|
||||
views.JournalEntryTransactionsView,
|
||||
name="journalentry_transactions",
|
||||
),
|
||||
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(),
|
||||
name="journalentry_txs",
|
||||
),
|
||||
##############################################################
|
||||
# ledger actions
|
||||
##############################################################
|
||||
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"),
|
||||
name="ledger-action-post",
|
||||
),
|
||||
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"),
|
||||
name="ledger-action-post-journal-entries",
|
||||
),
|
||||
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"),
|
||||
name="ledger-action-unpost",
|
||||
),
|
||||
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"),
|
||||
name="ledger-action-lock",
|
||||
),
|
||||
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"),
|
||||
name="ledger-action-lock-journal-entries",
|
||||
),
|
||||
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"),
|
||||
name="ledger-action-unlock",
|
||||
),
|
||||
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"),
|
||||
name="ledger-action-hide",
|
||||
),
|
||||
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"),
|
||||
name="ledger-action-unhide",
|
||||
),
|
||||
path(
|
||||
"ledgers/<slug:entity_slug>/delete/<uuid:ledger_pk>/",
|
||||
"<slug:dealer_slug>/ledgers/<slug:entity_slug>/delete/<uuid:ledger_pk>/",
|
||||
views.LedgerModelDeleteView.as_view(),
|
||||
name="ledger-delete",
|
||||
),
|
||||
##############################################################
|
||||
# Bank Account
|
||||
##############################################################
|
||||
path(
|
||||
"<slug:dealer_slug>/bank_accounts/",
|
||||
views.BankAccountListView.as_view(),
|
||||
@ -833,31 +842,31 @@ urlpatterns = [
|
||||
# path('sales/journal/<uuid:pk>/create/', views.JournalEntryCreateView.as_view(), name='journal_create'),
|
||||
# Items
|
||||
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(
|
||||
"items/services/create/",
|
||||
"<slug:dealer_slug>/items/services/create/",
|
||||
views.ItemServiceCreateView.as_view(),
|
||||
name="item_service_create",
|
||||
),
|
||||
path(
|
||||
"items/services/<int:pk>/update/",
|
||||
"<slug:dealer_slug>/items/services/<int:pk>/update/",
|
||||
views.ItemServiceUpdateView.as_view(),
|
||||
name="item_service_update",
|
||||
),
|
||||
# Expanese
|
||||
path(
|
||||
"items/expeneses/",
|
||||
"<slug:dealer_slug>/items/expeneses/",
|
||||
views.ItemExpenseListView.as_view(),
|
||||
name="item_expense_list",
|
||||
),
|
||||
path(
|
||||
"items/expeneses/create/",
|
||||
"<slug:dealer_slug>/items/expeneses/create/",
|
||||
views.ItemExpenseCreateView.as_view(),
|
||||
name="item_expense_create",
|
||||
),
|
||||
path(
|
||||
"items/expeneses/<uuid:pk>/update/",
|
||||
"<slug:dealer_slug>/items/expeneses/<uuid:pk>/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("<slug:dealer_slug>/management/", views.management_view, name="management"),
|
||||
path("<slug:dealer_slug>/management/user_management/", views.user_management, name="user_management"),
|
||||
path(
|
||||
"management/<str:content_type>/<slug:slug>/activate_account/",
|
||||
"<slug:dealer_slug>/management/<str:content_type>/<slug:slug>/activate_account/",
|
||||
views.activate_account,
|
||||
name="activate_account",
|
||||
),
|
||||
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,
|
||||
name="permenant_delete_account",
|
||||
),
|
||||
path(
|
||||
"management/audit_log_dashboard/",
|
||||
"<slug:dealer_slug>/management/audit_log_dashboard/",
|
||||
views.AuditLogDashboardView,
|
||||
name="audit_log_dashboard",
|
||||
),
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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}
|
||||
)
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
{% csrf_token %}
|
||||
<div class="d-flex justify-content-center">
|
||||
<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>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
{% block content %}
|
||||
<div class="row row-cols-1 row-cols-sm-2 row-cols-md-4 g-4 mt-10">
|
||||
<div class="col">
|
||||
<a href="{% url 'user_management' %}">
|
||||
<a href="{% url 'user_management' request.dealer.slug %}">
|
||||
<div class="card h-100">
|
||||
<div class="card-header text-center">
|
||||
<h5 class="card-title">{{ _("User Management")}}</h5>
|
||||
@ -14,7 +14,7 @@
|
||||
</a>
|
||||
</div>
|
||||
<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-header text-center">
|
||||
<h5 class="card-title">{{ _("Audit Log Dashboard")}}</h5>
|
||||
|
||||
@ -2,17 +2,17 @@
|
||||
<ul class="nav nav-tabs" id="accountTypeTabs" role="tablist">
|
||||
|
||||
<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" %}
|
||||
</a>
|
||||
</li>
|
||||
<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" %}
|
||||
</a>
|
||||
</li>
|
||||
<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" %}
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
{% csrf_token %}
|
||||
<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>
|
||||
<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>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@ -51,9 +51,9 @@
|
||||
<span class="fas fa-ellipsis-h fs-10"></span>
|
||||
</button>
|
||||
<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>
|
||||
<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>
|
||||
</td>
|
||||
@ -115,9 +115,9 @@
|
||||
<span class="fas fa-ellipsis-h fs-10"></span>
|
||||
</button>
|
||||
<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>
|
||||
<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>
|
||||
</td>
|
||||
@ -179,9 +179,9 @@
|
||||
<span class="fas fa-ellipsis-h fs-10"></span>
|
||||
</button>
|
||||
<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>
|
||||
<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>
|
||||
</td>
|
||||
@ -245,7 +245,7 @@
|
||||
<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>
|
||||
<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>
|
||||
</td>
|
||||
|
||||
@ -58,7 +58,7 @@
|
||||
|
||||
<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 %}
|
||||
|
||||
<div class="car-makes-grid">
|
||||
|
||||
@ -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>
|
||||
{% 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>
|
||||
<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 %}
|
||||
{% 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 %}
|
||||
{% 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 %}
|
||||
|
||||
</div>
|
||||
@ -172,7 +172,7 @@
|
||||
{% endfor %}
|
||||
</div>
|
||||
<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>
|
||||
|
||||
|
||||
@ -226,7 +226,7 @@
|
||||
{% endif %}
|
||||
{% if perms.django_ledger.view_itemmodel %}
|
||||
<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">
|
||||
<span class="nav-link-icon"><span class="fas fa-book"></span></span><span class="nav-link-text">{% trans "Ledgers"|capfirst %}</span>
|
||||
</div>
|
||||
@ -234,7 +234,7 @@
|
||||
</li>
|
||||
{% endif %}
|
||||
<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">
|
||||
<span class="nav-link-icon"><span data-feather="activity"></span></span><span class="nav-link-text">{% trans "Services"|capfirst %}</span>
|
||||
</div>
|
||||
@ -242,7 +242,7 @@
|
||||
</li>
|
||||
{% if perms.django_ledger.view_itemmodel %}
|
||||
<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">
|
||||
<span class="nav-link-icon"><span class="fas fa-users-cog"></span></span><span class="nav-link-text">{% trans "Expenses"|capfirst %}</span>
|
||||
</div>
|
||||
@ -251,7 +251,7 @@
|
||||
{% endif %}
|
||||
{% if perms.django_ledger.view_vendormodel %}
|
||||
<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">
|
||||
<span class="nav-link-icon"><span data-feather="package"></span></span><span class="nav-link-text">{% trans 'vendors'|capfirst %}</span>
|
||||
</div>
|
||||
@ -442,10 +442,10 @@
|
||||
{% endif %}
|
||||
{% if request.is_dealer %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link px-3 d-block" href="{% url 'user_list' request.user.dealer.slug %}"><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 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>
|
||||
{% endif %}
|
||||
<li class="nav-item">
|
||||
@ -455,7 +455,7 @@
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
{% 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 %}
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
<div class="alert alert-outline-warning d-flex align-items-center"
|
||||
role="alert">
|
||||
<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"
|
||||
type="button"
|
||||
data-bs-dismiss="alert"
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
|
||||
<div class="d-flex justify-content-between mb-2">
|
||||
<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>
|
||||
{% include "partials/search_box.html" %}
|
||||
{% if page_obj.object_list %}
|
||||
@ -39,7 +39,7 @@
|
||||
{{ expense.uom }}
|
||||
</td>
|
||||
<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">
|
||||
{% trans "Update" %}
|
||||
</a>
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
|
||||
<div class="d-flex justify-content-between mb-2">
|
||||
<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>
|
||||
{% include "partials/search_box.html" %}
|
||||
{% if page_obj.object_list %}
|
||||
@ -46,7 +46,7 @@
|
||||
{{ service.item.co }}
|
||||
</td>
|
||||
<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">
|
||||
{% trans "Update" %}
|
||||
</a>
|
||||
|
||||
@ -27,7 +27,7 @@
|
||||
</button>
|
||||
<a type="button"
|
||||
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' %}
|
||||
</a>
|
||||
</div>
|
||||
@ -52,7 +52,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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> -->
|
||||
{{ _("Edit") }}
|
||||
</a>
|
||||
@ -63,7 +63,7 @@
|
||||
{{ _("Delete") }}
|
||||
</a>
|
||||
<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>-->
|
||||
{% trans "Back to List" %}
|
||||
</a>
|
||||
|
||||
@ -27,7 +27,9 @@
|
||||
{% for bank in bank_accounts %}
|
||||
<tr class="hover-actions-trigger btn-reveal-trigger position-static">
|
||||
<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 class="align-middle product white-space-nowrap">
|
||||
{{ bank.account_number }}
|
||||
|
||||
@ -38,19 +38,19 @@
|
||||
<div class="card-footer">
|
||||
<div class="d-flex justify-content-between">
|
||||
{% 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>
|
||||
{% endif %}
|
||||
{% 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>
|
||||
{% endif %}
|
||||
{% 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>
|
||||
{% endif %}
|
||||
{% 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>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
</div>
|
||||
<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>
|
||||
<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>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@ -36,7 +36,7 @@
|
||||
|
||||
<div class="d-flex justify-content-between mb-2">
|
||||
<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>
|
||||
|
||||
|
||||
@ -96,10 +96,10 @@
|
||||
<span class="fas fa-ellipsis-h fs-10"></span>
|
||||
</button>
|
||||
<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_txs' je.entity_slug je.ledger_id je.pk %}">{% trans "Transactions" %}</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' request.dealer.slug je.entity_slug je.ledger_id je.pk %}">{% trans "Transactions" %}</a>
|
||||
{% 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 %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -62,30 +62,30 @@
|
||||
{% trans 'Save' %}
|
||||
</button>
|
||||
<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' %}
|
||||
</a>
|
||||
{% if journal_entry.can_lock %}
|
||||
<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' %}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if journal_entry.can_unlock %}
|
||||
<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' %}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if journal_entry.can_post %}
|
||||
<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' %}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if journal_entry.can_unpost %}
|
||||
<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' %}
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
|
||||
<div class="d-flex justify-content-between mb-2">
|
||||
<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 class="table-responsive px-1 scrollbar mt-3">
|
||||
<table class="table align-items-center table-flush">
|
||||
@ -32,16 +32,16 @@
|
||||
<tr class="hover-actions-trigger btn-reveal-trigger position-static">
|
||||
<td class="align-middle product white-space-nowrap px-1">
|
||||
{% 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 %}
|
||||
<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 %}
|
||||
<a href="#">{{ ledger.name }}</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="align-middle product white-space-nowrap">
|
||||
<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>
|
||||
<span>
|
||||
<span class="has-text-weight-bold">{{ ledger.journal_entries__count }}</span>
|
||||
@ -80,33 +80,33 @@
|
||||
</button>
|
||||
<div class="dropdown-menu dropdown-menu-end py-2">
|
||||
{% 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>
|
||||
{% endif %}
|
||||
{% 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>
|
||||
{% endif %}
|
||||
{% 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>
|
||||
{% endif %}
|
||||
{% 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>
|
||||
{% endif %}
|
||||
|
||||
{% 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>
|
||||
{% endif %}
|
||||
{% 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>
|
||||
{% endif %}
|
||||
|
||||
{% 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>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
@ -42,7 +42,7 @@
|
||||
<span class="text-muted small">{% trans "Plan" %}</span>
|
||||
<div class="d-flex align-items-center justify-content-between">
|
||||
<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" %}
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@ -98,7 +98,7 @@
|
||||
<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>
|
||||
{% 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" %}
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
@ -51,7 +51,7 @@
|
||||
{% block content %}
|
||||
<div class="container py-5">
|
||||
<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 %}
|
||||
<!-- Step 1: Plan Selection -->
|
||||
<div class="step" id="step1">
|
||||
|
||||
@ -17,7 +17,7 @@
|
||||
{% else %}
|
||||
<div class="alert alert-outline-warning d-flex align-items-center" role="alert">
|
||||
<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>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
8
templates/vendors/vendors_list.html
vendored
8
templates/vendors/vendors_list.html
vendored
@ -11,7 +11,7 @@
|
||||
<h3 class="">
|
||||
{{ _("Vendors") |capfirst }}
|
||||
</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>
|
||||
</div>
|
||||
{% include "partials/search_box.html" %}
|
||||
@ -92,7 +92,7 @@
|
||||
{% endif %}
|
||||
</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">
|
||||
<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>-->
|
||||
@ -121,11 +121,11 @@
|
||||
<span class="fas fa-ellipsis-h fs-10"></span>
|
||||
</button>
|
||||
<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>
|
||||
<div class="dropdown-divider"></div>
|
||||
<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-bs-toggle="modal"
|
||||
data-bs-target="#deleteModal">{{ _("Delete") }}</button>
|
||||
|
||||
4
templates/vendors/view_vendor.html
vendored
4
templates/vendors/view_vendor.html
vendored
@ -28,12 +28,12 @@
|
||||
</ul>
|
||||
</div>
|
||||
<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" %}
|
||||
<i class="fa fa-pencil"></i>
|
||||
</a>
|
||||
<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-bs-toggle="modal" data-bs-target="#deleteModal">
|
||||
{{ _("Delete") }}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user