help center in the header as link

This commit is contained in:
Faheedkhan 2025-08-27 18:40:10 +03:00
parent ba180dcbd0
commit 36f279a386
9 changed files with 751 additions and 1068 deletions

View File

@ -762,7 +762,8 @@ class Car(Base):
make = self.id_car_make.name if self.id_car_make else "Unknown Make" make = self.id_car_make.name if self.id_car_make else "Unknown Make"
model = self.id_car_model.name if self.id_car_model else "Unknown Model" model = self.id_car_model.name if self.id_car_model else "Unknown Model"
trim = self.id_car_trim.name if self.id_car_trim else "Unknown Trim" trim = self.id_car_trim.name if self.id_car_trim else "Unknown Trim"
return f"{self.year} - {make} - {model} - {trim}" vin=self.vin if self.vin else None
return f"{self.year} - {make} - {model} - {trim}-{vin}"
@property @property
def product(self): def product(self):

View File

@ -40,18 +40,13 @@ urlpatterns = [
views.assign_car_makes, views.assign_car_makes,
name="assign_car_makes", name="assign_car_makes",
), ),
# dashboards for manager, dealer, inventory and accounatant
path(
"dashboards/<slug:dealer_slug>/general/", #dashboards for manager, dealer, inventory and accounatant
views.general_dashboard, path("dashboards/<slug:dealer_slug>/general/", views.general_dashboard,name="general_dashboard"),
name="general_dashboard", #dashboard for sales
), path("dashboards/<slug:dealer_slug>/sales/", views.sales_dashboard, name="sales_dashboard"),
# dashboard for sales
path(
"dashboards/<slug:dealer_slug>/sales/",
views.sales_dashboard,
name="sales_dashboard",
),
path( path(
"<slug:dealer_slug>/cars/aging-inventory/list", "<slug:dealer_slug>/cars/aging-inventory/list",
views.aging_inventory_list_view, views.aging_inventory_list_view,
@ -782,11 +777,7 @@ urlpatterns = [
views.EstimateDetailView.as_view(), views.EstimateDetailView.as_view(),
name="estimate_detail", name="estimate_detail",
), ),
path( path('<slug:dealer_slug>/sales/estimates/print/<uuid:pk>/', views.EstimatePrintView.as_view(), name='estimate_print'),
"<slug:dealer_slug>/sales/estimates/print/<uuid:pk>/",
views.EstimatePrintView.as_view(),
name="estimate_print",
),
path( path(
"<slug:dealer_slug>/sales/estimates/create/", "<slug:dealer_slug>/sales/estimates/create/",
views.create_estimate, views.create_estimate,
@ -943,6 +934,7 @@ urlpatterns = [
views.ItemServiceUpdateView.as_view(), views.ItemServiceUpdateView.as_view(),
name="item_service_update", name="item_service_update",
), ),
# Expanese # Expanese
path( path(
"<slug:dealer_slug>/items/expeneses/", "<slug:dealer_slug>/items/expeneses/",
@ -1101,47 +1093,32 @@ urlpatterns = [
name="entity-ic-date", name="entity-ic-date",
), ),
# Chart of Accounts... # Chart of Accounts...
path( path('<slug:dealer_slug>/chart-of-accounts/<slug:entity_slug>/list/',
"<slug:dealer_slug>/chart-of-accounts/<slug:entity_slug>/list/",
views.ChartOfAccountModelListView.as_view(), views.ChartOfAccountModelListView.as_view(),
name="coa-list", name='coa-list'),
), path('<slug:dealer_slug>/chart-of-accounts/<slug:entity_slug>/list/inactive/',
path( views.ChartOfAccountModelListView.as_view(inactive=True),
"<slug:dealer_slug>/chart-of-accounts/<slug:entity_slug>/list/inactive/", name='coa-list-inactive'),
views.ChartOfAccountModelListView.as_view(inactive=True), path('<slug:dealer_slug>/<slug:entity_slug>/create/',
name="coa-list-inactive", views.ChartOfAccountModelCreateView.as_view(),
), name='coa-create'),
path( path('<slug:dealer_slug>/<slug:entity_slug>/detail/<slug:coa_slug>/',
"<slug:dealer_slug>/<slug:entity_slug>/create/", views.ChartOfAccountModelListView.as_view(),
views.ChartOfAccountModelCreateView.as_view(), name='coa-detail'),
name="coa-create", path('<slug:dealer_slug>/<slug:entity_slug>/update/<slug:coa_slug>/',
), views.ChartOfAccountModelUpdateView.as_view(),
path( name='coa-update'),
"<slug:dealer_slug>/<slug:entity_slug>/detail/<slug:coa_slug>/",
views.ChartOfAccountModelListView.as_view(),
name="coa-detail",
),
path(
"<slug:dealer_slug>/<slug:entity_slug>/update/<slug:coa_slug>/",
views.ChartOfAccountModelUpdateView.as_view(),
name="coa-update",
),
# ACTIONS.... # ACTIONS....
path( path('<slug:dealer_slug>/<slug:entity_slug>/action/<slug:coa_slug>/mark-as-default/',
"<slug:dealer_slug>/<slug:entity_slug>/action/<slug:coa_slug>/mark-as-default/", views.CharOfAccountModelActionView.as_view(action_name='mark_as_default'),
views.CharOfAccountModelActionView.as_view(action_name="mark_as_default"), name='coa-action-mark-as-default'),
name="coa-action-mark-as-default", path('<slug:dealer_slug>/<slug:entity_slug>/action/<slug:coa_slug>/mark-as-active/',
), views.CharOfAccountModelActionView.as_view(action_name='mark_as_active'),
path( name='coa-action-mark-as-active'),
"<slug:dealer_slug>/<slug:entity_slug>/action/<slug:coa_slug>/mark-as-active/", path('<slug:dealer_slug>/<slug:entity_slug>/action/<slug:coa_slug>/mark-as-inactive/',
views.CharOfAccountModelActionView.as_view(action_name="mark_as_active"), views.CharOfAccountModelActionView.as_view(action_name='mark_as_inactive'),
name="coa-action-mark-as-active", name='coa-action-mark-as-inactive'),
),
path(
"<slug:dealer_slug>/<slug:entity_slug>/action/<slug:coa_slug>/mark-as-inactive/",
views.CharOfAccountModelActionView.as_view(action_name="mark_as_inactive"),
name="coa-action-mark-as-inactive",
),
# CASH FLOW STATEMENTS... # CASH FLOW STATEMENTS...
# Entities... # Entities...
path( path(
@ -1317,74 +1294,40 @@ urlpatterns = [
views.PurchaseOrderMarkAsVoidView.as_view(), views.PurchaseOrderMarkAsVoidView.as_view(),
name="po-action-mark-as-void", name="po-action-mark-as-void",
), ),
# reports # reports
path( path(
"<slug:dealer_slug>/purchase-report/", "<slug:dealer_slug>/purchase-report/",
views.purchase_report_view, views.purchase_report_view,
name="po-report", name="po-report",
), ),
path( path('purchase-report/<slug:dealer_slug>/csv/', views.purchase_report_csv_export, name='purchase-report-csv-export'),
"purchase-report/<slug:dealer_slug>/csv/",
views.purchase_report_csv_export, path(
name="purchase-report-csv-export",
),
path(
"<slug:dealer_slug>/car-sale-report/", "<slug:dealer_slug>/car-sale-report/",
views.car_sale_report_view, views.car_sale_report_view,
name="car-sale-report", name="car-sale-report",
), ),
path( path('car-sale-report/<slug:dealer_slug>/csv/', views.car_sale_report_csv_export, name='car-sale-report-csv-export'),
"car-sale-report/<slug:dealer_slug>/csv/",
views.car_sale_report_csv_export, path('feature/recall/', views.RecallListView.as_view(), name='recall_list'),
name="car-sale-report-csv-export", path('feature/recall/filter/', views.RecallFilterView, name='recall_filter'),
), path('feature/recall/<int:pk>/view/', views.RecallDetailView.as_view(), name='recall_detail'),
path("feature/recall/", views.RecallListView.as_view(), name="recall_list"), path('feature/recall/create/', views.RecallCreateView.as_view(), name='recall_create'),
path("feature/recall/filter/", views.RecallFilterView, name="recall_filter"), path('feature/recall/success/', views.RecallSuccessView.as_view(), name='recall_success'),
path(
"feature/recall/<int:pk>/view/", path('<slug:dealer_slug>/schedules/calendar/', views.schedule_calendar, name='schedule_calendar'),
views.RecallDetailView.as_view(),
name="recall_detail",
),
path(
"feature/recall/create/", views.RecallCreateView.as_view(), name="recall_create"
),
path(
"feature/recall/success/",
views.RecallSuccessView.as_view(),
name="recall_success",
),
path(
"<slug:dealer_slug>/schedules/calendar/",
views.schedule_calendar,
name="schedule_calendar",
),
# staff profile # staff profile
path( path('<slug:dealer_slug>/staff/<slug:slug>detail/', views.StaffDetailView.as_view(), name='staff_detail'),
"<slug:dealer_slug>/staff/<slug:slug>detail/",
views.StaffDetailView.as_view(),
name="staff_detail",
),
# tickets # tickets
path("help_center/view/", views.help_center, name="help_center"), path('help_center/view/', views.help_center, name='help_center'),
path( path('<slug:dealer_slug>/help_center/tickets/', views.ticket_list, name='ticket_list'),
"<slug:dealer_slug>/help_center/tickets/", views.ticket_list, name="ticket_list" path('help_center/tickets/<slug:dealer_slug>/create/', views.create_ticket, name='create_ticket'),
), path('<slug:dealer_slug>/help_center/tickets/<int:ticket_id>/', views.ticket_detail, name='ticket_detail'),
path( path('help_center/tickets/<int:ticket_id>/update/', views.ticket_update, name='ticket_update'),
"help_center/tickets/<slug:dealer_slug>/create/",
views.create_ticket,
name="create_ticket",
),
path(
"<slug:dealer_slug>/help_center/tickets/<int:ticket_id>/",
views.ticket_detail,
name="ticket_detail",
),
path(
"help_center/tickets/<int:ticket_id>/update/",
views.ticket_update,
name="ticket_update",
),
# path('help_center/tickets/<int:ticket_id>/ticket_mark_resolved/', views.ticket_mark_resolved, name='ticket_mark_resolved'), # path('help_center/tickets/<int:ticket_id>/ticket_mark_resolved/', views.ticket_mark_resolved, name='ticket_mark_resolved'),
] ]
handler404 = "inventory.views.custom_page_not_found_view" handler404 = "inventory.views.custom_page_not_found_view"

File diff suppressed because it is too large Load Diff

View File

@ -88,7 +88,7 @@
</div> </div>
<div id="main_content" <div id="main_content"
class="fade-me-in" class="fade-me-in"
hx-boost="false" hx-boost="true"
hx-target="#main_content" hx-target="#main_content"
hx-select="#main_content" hx-select="#main_content"
hx-swap="outerHTML transition:true" hx-swap="outerHTML transition:true"

View File

@ -12,7 +12,7 @@
<h5 class="fw-bold mb-0 text-dark">{% trans "Monthly Revenue & Profit" %}</h5> <h5 class="fw-bold mb-0 text-dark">{% trans "Monthly Revenue & Profit" %}</h5>
</div> </div>
<div class="card-body" style="height: 400px;"> <div class="card-body" style="height: 400px;">
<canvas id="revenueProfitChart"></canvas> <canvas id="revenueProfitChart" ></canvas>
</div> </div>
</div> </div>
</div> </div>

View File

@ -8,13 +8,13 @@
<div class="main-content flex-grow-1 container-fluid mt-4 mb-3"> <div class="main-content flex-grow-1 container-fluid mt-4 mb-3">
<div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center mb-5 pb-3 border-bottom"> <div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center mb-5 pb-3 border-bottom">
<h2 class="h3 fw-bold mb-3 mb-md-0"> <h2 class="h3 fw-bold mb-3 mb-md-0">
{% if request.is_dealer %} {% if request.is_dealer or request.is_manager%}
{% trans "Business Health Dashboard" %} {% trans "Business Health Dashboard" %}
{% elif request.is_manger %} {% endif %}
{% trans "Manager Dashboard" %} {% if request.is_inventory and not request.is_manager and not request.is_dealer %}
{% elif request.is_inventory %}
{% trans "Inventory Dashboard" %} {% trans "Inventory Dashboard" %}
{% else %} {% endif %}
{% if request.is_accountant and not request.is_manager and not request.is_dealer %}
{% trans "Accountant Dashboard" %} {% trans "Accountant Dashboard" %}
{% endif %} {% endif %}
<i class="fas fa-chart-area text-primary ms-2"></i> <i class="fas fa-chart-area text-primary ms-2"></i>

View File

@ -439,12 +439,14 @@
</div> </div>
</a> </a>
</li> </li>
<li class="nav-item "> <li class="nav-item">
<a class="nav-link" href="#"> <a class="nav-link" href="{% url 'ticket_list' request.dealer.slug %}">
<div class="d-flex align-items-center"> <div class="d-flex align-items-center">
{% if user.is_authenticated %} {% if user.is_authenticated %}
<span class="nav-link-icon"><span class="fa-solid fa-car"></span></span> <span class="nav-link-icon"><span class="fa-solid fa-car"></span></span>
<span class="nav-link-text">{{ request.dealer.user.username }}</span> <span class="nav-link-text">{{ request.dealer.user.username }}</span>
{% endif %} {% endif %}
</div> </div>
</a> </a>
@ -626,10 +628,12 @@
href="{% url 'management' request.dealer.slug %}"> <span class="me-2 text-body align-bottom" data-feather="shield"></span>{{ _("Admin Managemnet") }}</a> 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>
{% if request.is_dealer%}
<li class="nav-item"> <li class="nav-item">
<a class="nav-link px-3 d-block" <a class="nav-link px-3 d-block"
href="{% url 'ticket_list' request.dealer.slug %}"> <span class="me-2 text-body align-bottom" data-feather="help-circle"></span>{{ _("Help Center") }}</a> href="{% url 'ticket_list' request.dealer.slug %}"> <span class="me-2 text-body align-bottom" data-feather="help-circle"></span>{{ _("Help Center") }}</a>
</li> </li>
{% endif %}
{% if request.is_staff %} {% if request.is_staff %}
<li class="nav-item"> <li class="nav-item">
<a hx-boost="false" <a hx-boost="false"

View File

@ -1,9 +1,16 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load i18n static custom_filters django_ledger %} {% load i18n static custom_filters django_ledger %}
{% block content %} {% block content %}
{% if request.user.is_authenticated %} {% if request.user.is_authenticated %}
{% if request.is_sales and not request.is_manager and not request.is_dealer %}
{% url 'sales_dashboard' request.dealer.slug as dashboard_url %}
{% else %}
{% url 'general_dashboard' request.dealer.slug as dashboard_url %}
{% endif %}
<div id="dashboard-content" <div id="dashboard-content"
hx-get="{% if request.is_sales and not request.is_manager %} {% url 'sales_dashboard' request.dealer.slug %} {% else %} {% url 'general_dashboard' request.dealer.slug %} {% endif %}" hx-get="{{ dashboard_url }}"
hx-trigger="load" hx-trigger="load"
hx-target="#dashboard-content" hx-target="#dashboard-content"
hx-swap="innerHTML"> hx-swap="innerHTML">
@ -13,4 +20,4 @@
</div> </div>
</div> </div>
{% endif %} {% endif %}
{% endblock %} {% endblock %}

View File

@ -5,6 +5,7 @@
{% endblock title %} {% endblock title %}
{% block content %} {% block content %}
{% if expenses or request.GET.q %} {% if expenses or request.GET.q %}
<div class="row mt-4"> <div class="row mt-4">
<div class="d-flex justify-content-between mb-2"> <div class="d-flex justify-content-between mb-2">
<h3 class=""> <h3 class="">