Compare commits

..

No commits in common. "8b2f76208acf97f2e0c83c1b4774acf4d9aada4a" and "d78754105b03600dc0385ccb3c457fda75d4c286" have entirely different histories.

17 changed files with 200 additions and 431 deletions

BIN
dbtest.sqlite3 Normal file

Binary file not shown.

View File

@ -4238,18 +4238,6 @@ def sales_list_view(request, dealer_slug):
qs = models.ExtraInfo.get_sale_orders(staff=staff) qs = models.ExtraInfo.get_sale_orders(staff=staff)
except Exception as e: except Exception as e:
print(e) print(e)
print(qs[0])
# query = request.GET.get('q')
# # if query:
# # qs = qs.filter(
# # Q(order_number__icontains=query) |
# # Q(customer__name__icontains=query) |
# # Q(item_details__icontains=query)
# # ).distinct()
# for so in qs:
# if query in so.customer_customer
paginator = Paginator(qs, 30) paginator = Paginator(qs, 30)
page_number = request.GET.get("page") page_number = request.GET.get("page")
@ -4337,7 +4325,6 @@ class EstimateListView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
related_content_type=ContentType.objects.get_for_model(models.Staff), related_content_type=ContentType.objects.get_for_model(models.Staff),
related_object_id=staff.pk, related_object_id=staff.pk,
) )
context["staff_estimates"] = qs context["staff_estimates"] = qs
return context return context
def get_queryset(self): def get_queryset(self):
@ -4345,17 +4332,8 @@ class EstimateListView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
entity = dealer.entity entity = dealer.entity
status = self.request.GET.get("status") status = self.request.GET.get("status")
queryset = entity.get_estimates() queryset = entity.get_estimates()
if status: if status:
queryset = queryset.filter(status=status) queryset = queryset.filter(status=status)
# search_query = self.request.GET.get('q', '').strip()
# if search_query:
# queryset = queryset.filter(
# Q(quotation_number__icontains=search_query) |
# Q(customer__name__icontains=search_query)
# ).distinct() #
return queryset return queryset

View File

@ -6,7 +6,7 @@
{% trans "Sign In" %} {% trans "Sign In" %}
{% endblock head_title %} {% endblock head_title %}
{% block content %} {% block content %}
<section class="main mt-2"> <section class="main my-2">
<div class="row flex-center "> <div class="row flex-center ">
<div class="col-sm-10 col-md-8 col-lg-5 col-xl-5 col-xxl-3"> <div class="col-sm-10 col-md-8 col-lg-5 col-xl-5 col-xxl-3">
@ -22,20 +22,20 @@
<h3 class="mb-4">{% trans "Sign In" %}</h3> <h3 class="mb-4">{% trans "Sign In" %}</h3>
{% if not SOCIALACCOUNT_ONLY %} {% if not SOCIALACCOUNT_ONLY %}
</div>
<form method="post" action="{% url 'account_login' %}" class="form needs-validation" novalidate > <form method="post" action="{% url 'account_login' %}" class="form needs-validation" novalidate dir="rtl">
{% csrf_token %} {% csrf_token %}
<div class="mb-3 "> <div class="mb-3 text-start">
<label class="form-label" for="id_login" >{{ _("Email") }}</label> <label class="form-label" for="id_login" >{{ _("Email") }}</label>
<div class="form-icon-container"> <div class="form-icon-container">
<input type="email" name="login" id="id_login" class="form-control form-icon-input placeholder-center" placeholder="{{ _("Email") }}" required > <input type="email" name="login" id="id_login" class="form-control form-icon-input placeholder-center" placeholder="{{ _("Email") }}" required>
<span class="fas fa-user text-body fs-9 form-icon"></span> <span class="fas fa-user text-body fs-9 form-icon"></span>
</div> </div>
</div> </div>
<div class="mb-3 "> <div class="mb-3 text-start">
<label class="form-label" for="id_password">{{ _("Password") }}</label> <label class="form-label" for="id_password">{{ _("Password") }}</label>
<div class="form-icon-container"> <div class="form-icon-container">
<input type="password" name="password" id="id_password" class="form-control form-icon-input placeholder-center" placeholder="{{ _("Password") }}" required > <input type="password" name="password" id="id_password" class="form-control form-icon-input placeholder-center" placeholder="{{ _("Password") }}" required>
<span class="fas fa-key text-body fs-9 form-icon"></span> <span class="fas fa-key text-body fs-9 form-icon"></span>
</div> </div>
</div> </div>

View File

@ -4,9 +4,8 @@
{% block content %} {% block content %}
<section class="main my-2"> <section class="main my-2">
<div class="container" style="max-width:60rem;"> <div class="container-fluid">
<div class="row form-container" id="form-container"> <div class="row form-container" id="form-container">
<div class="col-12 "><a class="d-flex flex-center text-decoration-none mb-4" href="{% url 'home' %}"> <div class="col-12 "><a class="d-flex flex-center text-decoration-none mb-4" href="{% url 'home' %}">

View File

@ -1,9 +1,7 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load i18n %}
{% load crispy_forms_filters %}
{% block content %} {% block content %}
{% comment %} <div class="d-flex justify-content-center align-items-center mt-10"> <div class="d-flex justify-content-center align-items-center mt-10">
<div class="text-center"> <div class="text-center">
<h1>Activate Account</h1> <h1>Activate Account</h1>
<p>Are you sure you want to activate this account "{{ obj.email }}"?</p> <p>Are you sure you want to activate this account "{{ obj.email }}"?</p>
@ -15,38 +13,5 @@
</div> </div>
</form> </form>
</div> </div>
</div> {% endcomment %} </div>
<!---->
<div class="row justify-content-center mt-5 mb-3">
<div class="col-lg-8 col-md-10">
<div class="card shadow-sm border-0 rounded-3">
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3">
<h3 class="mb-0 fs-4 text-center text-white">
{% trans 'Activate Account'%}
</h3>
</div>
<div class="card-body bg-light-subtle">
<p class="text-center">Are you sure you want to activate this account "{{ obj.email }}"?</p>
<form method="post">
{% csrf_token %}
<hr class="my-2">
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
<button class="btn btn-lg btn-phoenix-primary md-me-2" type="submit">{{ _("Activate") }}</button>
<a class="btn btn-lg btn-phoenix-danger mx-2" href="{% url 'user_management' request.dealer.slug %}">Cancel</a>
</div>
</form>
</div>
</div>
</div>
</div>
<!---->
{% endblock %} {% endblock %}

View File

@ -1,7 +1,7 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load i18n %}
{% block content %} {% block content %}
{% comment %} <div class="d-flex justify-content-center align-items-center mt-10"> <div class="d-flex justify-content-center align-items-center mt-10">
<div class="text-center"> <div class="text-center">
<h1 class="display-4">Delete Account</h1> <h1 class="display-4">Delete Account</h1>
<p class="lead">Are you sure you want to delete this account "{{ obj.email }}"? This will delete all associated information for this user.</p> <p class="lead">Are you sure you want to delete this account "{{ obj.email }}"? This will delete all associated information for this user.</p>
@ -13,39 +13,6 @@
</div> </div>
</form> </form>
</div> </div>
</div> {% endcomment %} </div>
<!---->
<div class="row justify-content-center mt-5 mb-3">
<div class="col-lg-8 col-md-10">
<div class="card shadow-sm border-0 rounded-3">
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3">
<h3 class="mb-0 fs-4 text-center text-white">
{% trans 'Delete Account'%}
</h3>
</div>
<div class="card-body bg-light-subtle">
<p class="lead text-center">Are you sure you want to delete this account "{{ obj.email }}"? This will delete all associated information for this user.</p>
<form method="post">
{% csrf_token %}
<hr class="my-2">
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
<button class="btn btn-lg btn-phoenix-danger md-me-2" type="submit"><i class="fas fa-trash me-2"></i>{{ _("Delete Permenantly") }}</button>
<a class="btn btn-lg 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>
</div>
</div>
</div>
<!---->
{% endblock %} {% endblock %}

View File

@ -73,7 +73,7 @@
{% block content %} {% block content %}
<div class="container mt-4"> <div class="container mt-4">
<h2>Upload Cars CSV <i class="fa-solid fa-file-csv text-primary"></i></h2> <h2>Upload Cars CSV</h2>
<div class="d-flex justify-content-end"> <div class="d-flex justify-content-end">
<a href="{% static 'sample/cars_sample.csv' %}" class="btn btn-phoenix-success mt-4"> <a href="{% static 'sample/cars_sample.csv' %}" class="btn btn-phoenix-success mt-4">
<i class="fa-solid fa-file-csv me-2"></i>Download Sample CSV <i class="fa-solid fa-file-csv me-2"></i>Download Sample CSV

View File

@ -5,9 +5,10 @@
{% block title %}{{ _("Update Dealer Information") }}{% endblock title %} {% block title %}{{ _("Update Dealer Information") }}{% endblock title %}
{% block content %} {% block content %}
{% comment %} <div class="row my-5"> <div class="row my-5">
<div class="col-md-8"> <div class="col-md-8">
<!-- Form Header --> <!-- Form Header -->
<h3 class="mb-3">{{ _("Update Dealer Information") }}</h3> <h3 class="mb-3">{{ _("Update Dealer Information") }}</h3>
<form method="post" enctype="multipart/form-data" class="needs-validation" novalidate> <form method="post" enctype="multipart/form-data" class="needs-validation" novalidate>
@ -23,36 +24,5 @@
</form> </form>
</div> </div>
</div> {% endcomment %} </div>
<!---->
<div class="row justify-content-center mt-5 mb-3">
<div class="col-lg-8 col-md-10">
<div class="card shadow-sm border-0 rounded-3">
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3">
<h3 class="mb-0 fs-4 text-center text-white">
{{ _("Update Dealer Information") }}
</h3>
</div>
<div class="card-body bg-light-subtle">
<form method="post" enctype="multipart/form-data" class="needs-validation" novalidate>
{% csrf_token %}
{{ form|crispy }}
<hr class="my-2">
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
<button class="btn btn-lg btn-phoenix-success md-me-2" type="submit"><i class="fa-solid fa-floppy-disk me-1"></i>{{ _("Save") }}</button>
<a href="{{request.META.HTTP_REFERER}}" class="btn btn-lg btn-phoenix-danger"><i class="fa-solid fa-ban me-1"></i>{% trans "Cancel" %}</a>
</div>
</form>
</div>
</div>
</div>
</div>
<!---->
{% endblock %} {% endblock %}

View File

@ -13,7 +13,7 @@
{% block content %} {% block content %}
{% comment %} <div class="row mt-4"> <div class="row mt-4">
<div class="row"> <div class="row">
<div class="col-sm-9"> <div class="col-sm-9">
<div class="d-sm-flex justify-content-between"> <div class="d-sm-flex justify-content-between">
@ -48,45 +48,5 @@
</form> </form>
</div> </div>
</div> </div>
</div> {% endcomment %} </div>
<!---->
<div class="row justify-content-center mt-5 mb-3">
<div class="col-lg-8 col-md-10">
<div class="card shadow-sm border-0 rounded-3">
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3">
<h3 class="mb-0 fs-4 text-center text-white">
{% if staff.created %}
{{ _("Edit Group") }}
{% else %}
{{ _("Add Group") }}
{% endif %}
</h3>
</div>
<div class="card-body bg-light-subtle">
<form class="row g-3 " method="post" class="form" novalidate>
{% csrf_token %}
{{ redirect_field }}
{{ form|crispy }}
{% for error in form.errors %}
<div class="text-danger">{{ error }}</div>
{% endfor %}
<hr class="my-2">
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
<button class="btn btn-lg btn-phoenix-success md-me-2" type="submit"><i class="fa-solid fa-floppy-disk me-1"></i>{{ _("Save") }}</button>
<a href="{{request.META.HTTP_REFERER}}" class="btn btn-lg btn-phoenix-danger"><i class="fa-solid fa-ban me-1"></i>{% trans "Cancel" %}</a>
</div>
</form>
</div>
</div>
</div>
</div>
<!---->
{% endblock %} {% endblock %}

View File

@ -6,7 +6,7 @@
{% trans 'Edit Car' %} {% trans 'Edit Car' %}
{% endblock %} {% endblock %}
{% block content %} {% block content %}
{% comment %} <div class="row"> <div class="row">
<div class="card rounded shadow mt-3"> <div class="card rounded shadow mt-3">
<p class="card-header bg-primary text-white rounded-top fw-bold">{% trans 'Edit Car' %}</p> <p class="card-header bg-primary text-white rounded-top fw-bold">{% trans 'Edit Car' %}</p>
<div class="card-body"> <div class="card-body">
@ -20,38 +20,5 @@
</form> </form>
</div> </div>
</div> </div>
</div> {% endcomment %} </div>
<!---->
<div class="row justify-content-center mt-5 mb-3">
<div class="col-lg-8 col-md-10">
<div class="card shadow-sm border-0 rounded-3">
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3">
<h3 class="mb-0 fs-4 text-center text-white">
{% trans 'Edit Car' %}
</h3>
</div>
<div class="card-body bg-light-subtle">
<form method="post" class="needs-validation" novalidate>
{% csrf_token %} {{ form|crispy }}
<!-- Save and Back Buttons -->
<hr class="my-2">
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
<button class="btn btn-lg btn-phoenix-success md-me-2" type="submit"><i class="fa-solid fa-floppy-disk me-1"></i>{{ _("Save") }}</button>
<a href="{{request.META.HTTP_REFERER}}" class="btn btn-lg btn-phoenix-danger"><i class="fa-solid fa-ban me-1"></i>{% trans "Cancel" %}</a>
</div>
</form>
</div>
</div>
</div>
</div>
<!---->
{% endblock %} {% endblock %}

View File

@ -6,7 +6,7 @@
{% trans "Car Finance Details" %} {% trans "Car Finance Details" %}
{% endblock %} {% endblock %}
{% block content %} {% block content %}
{% comment %} <div class="row p-4"> <div class="row p-4">
<p class="mb-4"> <p class="mb-4">
{% trans "Finance Details for" %} {% trans "Finance Details for" %}
{{ car.id_car_make.get_local_name }} - {{ car.id_car_model.get_local_name }} {{ car.id_car_make.get_local_name }} - {{ car.id_car_model.get_local_name }}
@ -38,56 +38,6 @@
<a href="{{ request.META.HTTP_REFERER }}" class="btn btn-sm btn-phoenix-danger"><i class="fa-solid fa-ban me-1"></i>{% trans "Cancel" %}</a> <a href="{{ request.META.HTTP_REFERER }}" class="btn btn-sm btn-phoenix-danger"><i class="fa-solid fa-ban me-1"></i>{% trans "Cancel" %}</a>
</div> </div>
</form> </form>
</div> {% endcomment %} </div>
<!---->
<div class="row justify-content-center mt-5 mb-3">
<div class="col-lg-8 col-md-10">
<div class="card shadow-sm border-0 rounded-3">
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3">
<h3 class="mb-0 fs-4 text-center text-white">
{% trans "Finance Details for" %}{{ car.id_car_make.get_local_name }} - {{ car.id_car_model.get_local_name }}
</h3>
{% if form.errors %}
<div class="alert alert-danger">
<ul>
{% for field in form %}
{% for error in field.errors %}<li>{{ field.label }}: {{ error }}</li>{% endfor %}
{% endfor %}
{% for error in form.non_field_errors %}<li>{{ error }}</li>{% endfor %}
</ul>
</div>
{% endif %}
</div>
<div class="card-body bg-light-subtle">
<form method="post" class="needs-validation" novalidate>
<div class="row g-1">
<div class="col-lg-4 col-xl-12">
{% csrf_token %}
{{ form|crispy }}
</div>
</div>
<hr class="my-2">
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
<button class="btn btn-lg btn-phoenix-success md-me-2" type="submit"><i class="fa-solid fa-floppy-disk me-1"></i>{{ _("Save") }}</button>
<a href="{{request.META.HTTP_REFERER}}" class="btn btn-lg btn-phoenix-danger"><i class="fa-solid fa-ban me-1"></i>{% trans "Cancel" %}</a>
</div>
</form>
</div>
</div>
</div>
</div>
<!---->
<!-- JavaScript Section --> <!-- JavaScript Section -->
{% endblock %} {% endblock %}

View File

@ -3,11 +3,11 @@
{%block title%} {% trans 'Billing Information'%}{%endblock%} {%block title%} {% trans 'Billing Information'%}{%endblock%}
{% block content %} {% block content %}
{% comment %} <div class="row mb-3"> <div class="row mb-3">
<div class="col-sm-6"> <div class="col-sm-6">
<form action="{% url 'billing_info' %}{% if request.GET.next %}?next={{ request.GET.next }}{% endif %}" method="post" class="form"> <form action="{% url 'billing_info' %}{% if request.GET.next %}?next={{ request.GET.next }}{% endif %}" method="post" class="form">
{% comment %} <legend>{% trans "Provide billing data"|upper %}</legend> {% endcomment %}
<h3>{% trans "Provide billing data"|upper %}</h3> <h3>{% trans "Provide billing data"|upper %}</h3>
{% csrf_token %} {% csrf_token %}
{{ form|crispy }} {{ form|crispy }}
@ -21,44 +21,5 @@
</form> </form>
</div> </div>
</div> {% endcomment %} </div>
<!---->
<div class="row justify-content-center mt-5 mb-3">
<div class="col-lg-8 col-md-10">
<div class="card shadow-sm border-0 rounded-3">
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3">
<h3 class="mb-0 fs-4 text-center text-white">
{% trans "Provide billing data"|upper %}
</h3>
</div>
<div class="card-body bg-light-subtle">
<form action="{% url 'billing_info' %}{% if request.GET.next %}?next={{ request.GET.next }}{% endif %}" method="post" class="form">
{% csrf_token %}
{{ form|crispy }}
<hr class="my-2">
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
<button class="btn btn-lg btn-phoenix-success md-me-2" type="submit"><i class="fa-solid fa-floppy-disk me-1"></i>{{ _("Save") }}</button>
{% if object %}
<a class="btn btn-lg btn-phoenix-danger " href="{% url 'billing_info_delete' %}"><i class="fa-solid fa-trash me-1"></i> {{ _("Delete") }}</a>
{% endif %}
</div>
</form>
</div>
</div>
</div>
</div>
<!---->
{% endblock %} {% endblock %}

View File

@ -45,15 +45,11 @@
.form-label { .form-label {
font-weight: 500; font-weight: 500;
} }
#pricing_container{
max-width:60rem;
}
</style> </style>
{% endblock customCSS %} {% endblock customCSS %}
{% block content %} {% block content %}
<div class="container py-5" id="pricing_container"> <div class="container py-5">
<h1 class="text-center mb-5 text-primary">{{ _("Choose Your Plan")}}</h1> <h1 class="text-center mb-5 text-primary">{{ _("Choose Your Plan")}}</h1>
<form method="POST" action="{% url 'submit_plan' request.dealer.slug %}" id="wizardForm"> <form method="POST" action="{% url 'submit_plan' request.dealer.slug %}" id="wizardForm">
{% csrf_token %} {% csrf_token %}
@ -204,14 +200,10 @@
<div class="col-lg-8 col-md-10"> <div class="col-lg-8 col-md-10">
<div class="card shadow-sm border-0 rounded-3"> <div class="card shadow-sm border-0 rounded-3">
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3"> <div class="card-header bg-gray-200 py-3 border-0 rounded-top-3">
<h3 class="mb-0 fs-4 text-center text-white"> 4. {{ _("Confirm Your Information")}}
4. {{ _("Confirm Your Information")}}
</h3>
</div> </div>
<div class="card-body bg-light-subtle me-2">
<div class="card-body bg-light-subtle">
<h5 class="text-center"><i class="fas fa-file-invoice-dollar me-2"></i>{{ _("Order Summary")}}</h5> <h5 class="text-center"><i class="fas fa-file-invoice-dollar me-2"></i>{{ _("Order Summary")}}</h5>
<div class="summary-item"><i class="fas fa-box me-2"></i><strong>{{ _("Plan") }}:</strong> <span id="summary_plan"></span></div> <div class="summary-item"><i class="fas fa-box me-2"></i><strong>{{ _("Plan") }}:</strong> <span id="summary_plan"></span></div>
<div class="summary-item"><i class="fas fa-tag me-2"></i><strong>{{ _("Price") }}:</strong> <span id="summary_price"></span></div> <div class="summary-item"><i class="fas fa-tag me-2"></i><strong>{{ _("Price") }}:</strong> <span id="summary_price"></span></div>

View File

@ -4,20 +4,8 @@
{% block title %}{{ _("Quotations") }}{% endblock title %} {% block title %}{{ _("Quotations") }}{% endblock title %}
{% block content %} {% block content %}
<div class="row g-3 mt-4 mb-4"> <div class="row mt-4">
<h3 class="mb-3"><i class="fa-regular fa-file-lines"></i> {% trans "Quotations" %}</h3>
<div class="row g-3 justify-content-between mb-4">
<div class="col-auto">
<div class="d-md-flex justify-content-between">
<h2 class="mb-3"> {% trans "Quotations" %}<i class="fa-regular fa-file-lines text-primary ms-2"></i></h2>
</div>
</div>
<div class="col-auto">
<div class="d-flex">
{% include 'partials/search_box.html' %}
</div>
</div>
</div>
<div class="table-responsive px-1 scrollbar"> <div class="table-responsive px-1 scrollbar">
<table class="table align-items-center table-flush"> <table class="table align-items-center table-flush">

View File

@ -5,19 +5,8 @@
{% block content %} {% block content %}
<div class="row mt-4"> <div class="row mt-4">
<h3 class="mb-3"><i class="fa-solid fa-receipt"></i> {% trans "Invoices" %}</h3>
<div class="row g-3 justify-content-between mb-4">
<div class="col-auto">
<div class="d-md-flex justify-content-between">
<h2 class="mb-3"> {% trans "Invoices" %}<i class="fa-solid fa-receipt ms-2 text-primary"></i></h2>
</div>
</div>
<div class="col-auto">
<div class="d-flex">
{% include 'partials/search_box.html' %}
</div>
</div>
</div>
<div class="table-responsive px-1 scrollbar"> <div class="table-responsive px-1 scrollbar">
<table class="table align-items-center table-flush"> <table class="table align-items-center table-flush">
<thead> <thead>

View File

@ -3,34 +3,117 @@
{% load custom_filters %} {% load custom_filters %}
{%block title%} {%trans 'Sales'%} {%endblock%} {%block title%} {%trans 'Sales'%} {%endblock%}
{% block content %} {% block customCSS %}
<section class="mt-2"> <style>
<div class="row overflow-x-auto whitespace-nowrap -mx-2 sm:mx-0"> .htmx-indicator{
opacity:0;
transition: opacity 500ms ease-in;
}
.htmx-request .htmx-indicator{
opacity:1;
}
.htmx-request.htmx-indicator{
opacity:1;
}
.on-before-request{
opacity: 0.5;
pointer-events: none;
}
.transition {
transition: all ease-in 1s ;
}
</style>
{% endblock customCSS %}
<div class="row g-3 justify-content-between mb-4"> {% block content %}
<div class="col-auto"> <div class="mb-9">
<div class="d-md-flex justify-content-between"> <div id="projectSummary">
<h2 class="mb-4">{% trans 'Sale Orders' %}<i class="fa-solid fa-cart-shopping ms-2 text-primary"></i></h2> <div class="row g-3 justify-content-between align-items-end mb-4">
</div> <div class="col-12 col-sm-auto">
{% comment %} <ul class="nav nav-links mx-n2" hx-boost="true" hx-push-url='false' hx-target=".table-responsive" hx-select=".table-responsive" hx-swap="innerHTML show:window:top" hx-indicator=".htmx-indicator"
hx-on::before-request="on_before_request()"
hx-on::after-request="on_after_request()"
>
<li class="nav-item"><a class="nav-link px-2 py-1 active" aria-current="page" href="{% url 'car_list' %}"><span>All</span><span class="text-body-tertiary fw-semibold">({{stats.all}})</span></a></li>
<li class="nav-item"><a class="nav-link px-2 py-1" href="{% url 'car_list' %}?status=available"><span>Available</span><span class="text-body-tertiary fw-semibold">({{stats.available}})</span></a></li>
<li class="nav-item"><a class="nav-link px-2 py-1" href="{% url 'car_list' %}?status=reserved"><span>Reserved</span><span class="text-body-tertiary fw-semibold">({{stats.reserved}})</span></a></li>
<li class="nav-item"><a class="nav-link px-2 py-1" href="{% url 'car_list' %}?status=transfer"><span>Transfer</span><span class="text-body-tertiary fw-semibold">({{stats.transfer}})</span></a></li>
<li class="nav-item"><a class="nav-link px-2 py-1" href="{% url 'car_list' %}?status=sold"><span>Sold</span><span class="text-body-tertiary fw-semibold">({{stats.sold}})</span></a></li>
<li class="nav-item"><button hx-on:click="toggle_filter()" class="nav-link px-2 py-1"><span>Filter</span><span class="text-body-tertiary fw-semibold"></span></button></li>
</ul> {% endcomment %}
</div> </div>
<div class="col-auto"> <div class="col-12 col-sm-auto">
<div class="d-flex"> <div class="d-flex align-items-center">
{% include 'partials/search_box.html' %} <div class="spinner-border mx-3 htmx-indicator" role="status"><span class="visually-hidden">Loading...</span></div>
<div class="search-box me-3">
<form class="position-relative">
<input class="form-control search-input search" name='search' type="search" placeholder="{{ _("Search") }}" aria-label="Search" hx-get="{% url 'car_list' request.dealer.slug %}" hx-trigger='keyup changed delay:500ms' hx-target='.table-responsive' hx-select='.table-responsive' hx-swap="innerHTML show:window:top" hx-indicator=".htmx-indicator"
hx-on::before-request="on_before_request()"
hx-on::after-request="on_after_request()"
/>
<span class="fas fa-search search-box-icon"></span>
</form>
</div>
</div> </div>
</div> </div>
</div> </div>
<div class="d-flex align-items-center d-none filter">
<select hx-get="{% url 'car_list' request.dealer.slug %}" name="make" hx-target='.model-select' hx-select='.model-select' hx-swap="outerHTML show:window:top" hx-indicator=".htmx-indicator" class="form-select make" aria-label="Default select example"
hx-on::before-request="filter_before_request()"
hx-on::after-request="filter_after_request()"
>
<option selected="" value="" disabled>Select Make</option>
{% for m in make %}
<option value="{{ m.pk }}">{{ m.name }}</option>
{% endfor %}
</select>
<select hx-get="{% url 'car_list' request.dealer.slug %}" hx-include=".make" name="model" hx-target='.year' hx-select='.year' hx-swap="outerHTML show:window:top" hx-indicator=".htmx-indicator" class="form-select model-select" aria-label="Default select example"
hx-on::before-request="filter_before_request()"
hx-on::after-request="filter_after_request()"
>
<option selected="" value="" disabled>Select Model</option>
{% for m in model %}
<option value="{{ m.pk }}">{{ m.name }}</option>
{% endfor %}
</select>
<select class="form-select year" name="year" aria-label="Default select example">
<option selected="" value="" disabled>Select Year</option>
{% for y in year %}
<option value="{{ y.0 }}">{{ y.0 }}</option>
{% endfor %}
</select>
<select class="form-select car_status" name="car_status" aria-label="Default select example">
<option selected="" value="">All</option>
<option value="available">Available</option>
<option value="reserved">Reserved</option>
<option value="sold">Sold</option>
<option value="transfer">Transfer</option>
</select>
<button id="search" hx-get="{% url 'car_list' request.dealer.slug %}" hx-include=".make,.model,.year,.car_status" hx-indicator=".htmx-indicator" hx-target='.table-responsive' hx-select='.table-responsive' hx-swap="outerHTML show:window:top" class="btn btn-sm btn-phoenix-primary"
hx-on::before-request="filter_before_request()"
hx-on::after-request="filter_after_request()">Search</button>
</div>
<div class="row">
<div class="table-responsive scrollbar transition">
<div class="d-flex flex-wrap align-items-center justify-content-between py-3 pe-0 fs-9">
<div class="table-responsive scrollbar mx-n1 px-1"> <div class="d-flex" hx-boost="true" hx-push-url='false' hx-include=".make,.model,.year,.car_status" hx-target=".table-responsive" hx-select=".table-responsive" hx-swap="innerHTML show:window:top" hx-indicator=".htmx-indicator"
<table class="table align-items-center table-flush"> hx-on::before-request="on_before_request()"
hx-on::after-request="on_after_request()">
</div>
<table class="table align-items-center table-flush">
<thead> <thead>
<tr class="bg-body-highlight"> <tr class="bg-body-highlight">
<th class="sort white-space-nowrap align-middle ps-0" scope="col" data-sort="customer_name"> <th class="sort white-space-nowrap align-middle ps-0" scope="col" data-sort="customer_name" style="width:10%;">
{{ _("Customer Name")}}</th> {{ _("Customer Name")}}</th>
<th class="sort align-middle ps-3" scope="col" data-sort="customer_address" >{{ _("Customer Address")}}</th> <th class="sort align-middle ps-3" scope="col" data-sort="customer_address" style="width:5%;">{{ _("Customer Address")}}</th>
<th class="sort align-middle ps-3" scope="col" data-sort="customer_phone">{{ _("Customer Phone")}}</th> <th class="sort align-middle ps-3" scope="col" data-sort="customer_phone" style="width:5%;">{{ _("Customer Phone")}}</th>
<th class="sort align-middle ps-3" scope="col" data-sort="quotation">{{ _("Quotation") }}</th> <th class="sort align-middle ps-3" scope="col" data-sort="quotation" style="width:7%;">{{ _("Quotation") }}</th>
<th class="sort align-middle ps-3" scope="col" data-sort="invoice" >{{ _("Invoice") }}</th> <th class="sort align-middle ps-3" scope="col" data-sort="invoice" style="width:7%;">{{ _("Invoice") }}</th>
<th class="sort align-middle text-end" scope="col" ></th> <th class="sort align-middle ps-3" scope="col" data-sort="status" style="width:7%;">{{ _("Status") }}</th>
<th class="sort align-middle ps-3" scope="col" data-sort="staff" style="width:7%;">{{ _("Staff Member") }}</th>
<th class="sort align-middle text-end" scope="col" style="width:10%;"></th>
</tr> </tr>
</thead> </thead>
<tbody class="list" id="project-list-table-body"> <tbody class="list" id="project-list-table-body">
@ -87,7 +170,20 @@
</p> </p>
{% endif %} {% endif %}
</td> </td>
<td class="align-middle text-end white-space-nowrap pe-4 action">
<td class="align-middle white-space-nowrap text-end status">
{% if car.status == "available" %}
<span class="badge badge-phoenix fs-10 badge-phoenix-success">{{car.status}}</span>
{% elif car.status == "reserved" %}
<span class="badge badge-phoenix fs-10 badge-phoenix-danger">{{car.status}}</span>
{% elif car.status == "sold" %}
<span class="badge badge-phoenix fs-10 badge-phoenix-info">{{car.status}}</span>
{% elif car.status == "transfer" %}
<span class="badge badge-phoenix fs-10 badge-phoenix-warning">{{car.status}}</span>
{% endif %}
</td>
<td class="align-middle white-space-nowrap text-center staff"></td>
<td class="align-middle text-end white-space-nowrap pe-0 action">
<div class="btn-reveal-trigger position-static"> <div class="btn-reveal-trigger position-static">
<button class="btn btn-sm dropdown-toggle dropdown-caret-none transition-none btn-reveal fs-10" type="button" data-bs-toggle="dropdown" data-boundary="window" aria-haspopup="true" aria-expanded="false" data-bs-reference="parent"><span class="fas fa-ellipsis-h fs-10"></span></button> <button class="btn btn-sm dropdown-toggle dropdown-caret-none transition-none btn-reveal fs-10" type="button" data-bs-toggle="dropdown" data-boundary="window" aria-haspopup="true" aria-expanded="false" data-bs-reference="parent"><span class="fas fa-ellipsis-h fs-10"></span></button>
<div class="dropdown-menu dropdown-menu-end py-2"><a class="dropdown-item text-success-dark" href="{% url 'order_detail' request.dealer.slug tx.pk %}">{{ _("View Sales Order Detail") }}</a> <div class="dropdown-menu dropdown-menu-end py-2"><a class="dropdown-item text-success-dark" href="{% url 'order_detail' request.dealer.slug tx.pk %}">{{ _("View Sales Order Detail") }}</a>
@ -98,18 +194,53 @@
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>
</div>
{% if page_obj.paginator.num_pages > 1 %}
<div class="d-flex justify-content-end mt-3">
<div class="d-flex">
{% include 'partials/pagination.html'%}
</div> </div>
</div> </div>
{% endif %} <div class="d-flex justify-content-end mt-3">
<div class="d-flex">
{% if is_paginated %}
{% include 'partials/pagination.html' %}
{% endif %}
</div>
</div>
</div>
</div> </div>
</section> </div>
{% endblock %} {% endblock %}
{% block customJS %}
<script>
links = document.querySelectorAll('.nav-link')
links.forEach(link => {
link.addEventListener('click', () => {
links.forEach(link => {
link.classList.remove('active')
})
link.classList.add('active')
})
})
function on_before_request() {
document.querySelector('.table').classList.toggle('on-before-request')
document.querySelector('.model-select').classList.add('on-after-request')
}
function on_after_request() {
document.querySelector('.table').classList.remove('on-before-request')
document.querySelector('.model-select').classList.remove('on-after-request')
}
function toggle_filter(){
document.querySelector('.filter').classList.toggle('d-none')
}
function filter_before_request(){
document.querySelector('.model-select').setAttribute('disabled', true)
document.querySelector('.year').setAttribute('disabled', true)
document.querySelector('.car_status').setAttribute('disabled', true)
}
function filter_after_request(){
document.querySelector('.model-select').removeAttribute('disabled')
document.querySelector('.year').removeAttribute('disabled')
document.querySelector('.car_status').removeAttribute('disabled')
}
</script>
{% endblock customJS %}

View File

@ -13,7 +13,7 @@
{% block content %} {% block content %}
{% comment %} <div class="row"> <div class="row">
<div class="row"> <div class="row">
<div class="col-sm-9"> <div class="col-sm-9">
<div class="d-sm-flex justify-content-between"> <div class="d-sm-flex justify-content-between">
@ -55,54 +55,6 @@
</form> </form>
</div> </div>
</div> </div>
</div> {% endcomment %} </div>
<!---->
<div class="row justify-content-center mt-5 mb-3">
<div class="col-lg-8 col-md-10">
<div class="card shadow-sm border-0 rounded-3">
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3">
<h3 class="mb-0 fs-4 text-center text-white">
<i class="fa-solid fa-user-tie"></i>
{% if staff.created %}
{{ _("Edit Staff") }}
{% else %}
{{ _("Add Staff") }}
{% endif %}
</h3>
</div>
<div class="card-body bg-light-subtle">
<form class="row g-3 mb-9" method="post" class="form" novalidate>
{% csrf_token %}
{{ redirect_field }}
{{ form.name|as_crispy_field }}
{{ form.arabic_name|as_crispy_field }}
{{ form.email|as_crispy_field }}
{{ form.phone_number|as_crispy_field }}
{{ form.address|as_crispy_field }}
{{ form.image|as_crispy_field }}
{{ form.group|as_crispy_field }}
{% for error in form.errors %}
<div class="text-danger">{{ error }}</div>
{% endfor %}
<hr class="my-2">
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
<button class="btn btn-lg btn-phoenix-success md-me-2" type="submit"><i class="fa-solid fa-floppy-disk me-1"></i>{{ _("Save") }}</button>
<a href="{{request.META.HTTP_REFERER}}" class="btn btn-lg btn-phoenix-danger"><i class="fa-solid fa-ban me-1"></i>{% trans "Cancel" %}</a>
</div>
</form>
</div>
</div>
</div>
</div>
<!---->
{% endblock %} {% endblock %}