ui changes to the forms and the list page
This commit is contained in:
parent
4487ba68f5
commit
cacb9f5ee6
@ -297,7 +297,7 @@ def dealer_signup(request):
|
||||
:rtype: Union[django.http.HttpResponse, django.http.JsonResponse]
|
||||
"""
|
||||
if request.method == "POST":
|
||||
|
||||
|
||||
data = json.loads(request.body)
|
||||
|
||||
email = data.get("email")
|
||||
@ -4236,6 +4236,18 @@ def sales_list_view(request, dealer_slug):
|
||||
qs = models.ExtraInfo.get_sale_orders(staff=staff)
|
||||
except Exception as 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)
|
||||
page_number = request.GET.get("page")
|
||||
@ -4323,6 +4335,7 @@ class EstimateListView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
|
||||
related_content_type=ContentType.objects.get_for_model(models.Staff),
|
||||
related_object_id=staff.pk,
|
||||
)
|
||||
|
||||
context["staff_estimates"] = qs
|
||||
return context
|
||||
def get_queryset(self):
|
||||
@ -4330,8 +4343,17 @@ class EstimateListView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
|
||||
entity = dealer.entity
|
||||
status = self.request.GET.get("status")
|
||||
queryset = entity.get_estimates()
|
||||
|
||||
if 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
|
||||
|
||||
|
||||
|
||||
@ -45,7 +45,7 @@
|
||||
}
|
||||
|
||||
.form-control, .form-select {
|
||||
/* text-align: center; */
|
||||
text-align: center;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
{% trans "Sign In" %}
|
||||
{% endblock head_title %}
|
||||
{% block content %}
|
||||
<section class="main my-2">
|
||||
<section class="main mt-2">
|
||||
|
||||
<div class="row flex-center ">
|
||||
<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>
|
||||
{% if not SOCIALACCOUNT_ONLY %}
|
||||
|
||||
</div>
|
||||
<form method="post" action="{% url 'account_login' %}" class="form needs-validation" novalidate dir="rtl">
|
||||
|
||||
<form method="post" action="{% url 'account_login' %}" class="form needs-validation" novalidate >
|
||||
{% csrf_token %}
|
||||
<div class="mb-3 text-start">
|
||||
<div class="mb-3 ">
|
||||
<label class="form-label" for="id_login" >{{ _("Email") }}</label>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-3 text-start">
|
||||
<div class="mb-3 ">
|
||||
<label class="form-label" for="id_password">{{ _("Password") }}</label>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
@ -63,7 +63,7 @@
|
||||
<section class="pt-lg-0 pt-xl-8">
|
||||
{% include 'footer.html' %}
|
||||
</section>
|
||||
|
||||
|
||||
{% if LOGIN_BY_CODE_ENABLED or PASSKEY_LOGIN_ENABLED %}
|
||||
<hr>
|
||||
{% element button_group vertical=True %}
|
||||
|
||||
@ -4,8 +4,9 @@
|
||||
|
||||
|
||||
{% block content %}
|
||||
|
||||
<section class="main my-2">
|
||||
<div class="container-fluid">
|
||||
<div class="container" style="max-width:60rem;">
|
||||
<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' %}">
|
||||
|
||||
@ -1,7 +1,9 @@
|
||||
{% extends 'base.html' %}
|
||||
|
||||
{% extends 'base.html' %}
|
||||
{% load i18n %}
|
||||
{% load crispy_forms_filters %}
|
||||
{% block content %}
|
||||
<div class="d-flex justify-content-center align-items-center mt-10">
|
||||
{% comment %} <div class="d-flex justify-content-center align-items-center mt-10">
|
||||
<div class="text-center">
|
||||
<h1>Activate Account</h1>
|
||||
<p>Are you sure you want to activate this account "{{ obj.email }}"?</p>
|
||||
@ -13,5 +15,38 @@
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div> {% endcomment %}
|
||||
|
||||
|
||||
<!---->
|
||||
<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 %}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
{% extends 'base.html' %}
|
||||
|
||||
{% load i18n %}
|
||||
{% block content %}
|
||||
<div class="d-flex justify-content-center align-items-center mt-10">
|
||||
{% comment %} <div class="d-flex justify-content-center align-items-center mt-10">
|
||||
<div class="text-center">
|
||||
<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>
|
||||
@ -13,6 +13,39 @@
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div> {% endcomment %}
|
||||
|
||||
<!---->
|
||||
|
||||
<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 %}
|
||||
|
||||
|
||||
@ -73,7 +73,7 @@
|
||||
|
||||
{% block content %}
|
||||
<div class="container mt-4">
|
||||
<h2>Upload Cars CSV</h2>
|
||||
<h2>Upload Cars CSV <i class="fa-solid fa-file-csv text-primary"></i></h2>
|
||||
<div class="d-flex justify-content-end">
|
||||
<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
|
||||
|
||||
@ -5,10 +5,9 @@
|
||||
{% block title %}{{ _("Update Dealer Information") }}{% endblock title %}
|
||||
|
||||
{% block content %}
|
||||
<div class="row my-5">
|
||||
{% comment %} <div class="row my-5">
|
||||
<div class="col-md-8">
|
||||
<!-- Form Header -->
|
||||
|
||||
<h3 class="mb-3">{{ _("Update Dealer Information") }}</h3>
|
||||
|
||||
<form method="post" enctype="multipart/form-data" class="needs-validation" novalidate>
|
||||
@ -24,5 +23,36 @@
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div> {% endcomment %}
|
||||
|
||||
<!---->
|
||||
<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 %}
|
||||
@ -13,7 +13,7 @@
|
||||
{% block content %}
|
||||
|
||||
|
||||
<div class="row mt-4">
|
||||
{% comment %} <div class="row mt-4">
|
||||
<div class="row">
|
||||
<div class="col-sm-9">
|
||||
<div class="d-sm-flex justify-content-between">
|
||||
@ -48,5 +48,45 @@
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> {% endcomment %}
|
||||
|
||||
<!---->
|
||||
<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 %}
|
||||
@ -6,7 +6,7 @@
|
||||
{% trans 'Edit Car' %}
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<div class="row">
|
||||
{% comment %} <div class="row">
|
||||
<div class="card rounded shadow mt-3">
|
||||
<p class="card-header bg-primary text-white rounded-top fw-bold">{% trans 'Edit Car' %}</p>
|
||||
<div class="card-body">
|
||||
@ -20,5 +20,38 @@
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> {% endcomment %}
|
||||
|
||||
|
||||
<!---->
|
||||
<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 %}
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
{% trans "Car Finance Details" %}
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<div class="row p-4">
|
||||
{% comment %} <div class="row p-4">
|
||||
<p class="mb-4">
|
||||
{% trans "Finance Details for" %}
|
||||
{{ car.id_car_make.get_local_name }} - {{ car.id_car_model.get_local_name }}
|
||||
@ -38,6 +38,56 @@
|
||||
<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>
|
||||
</form>
|
||||
</div>
|
||||
</div> {% endcomment %}
|
||||
|
||||
|
||||
|
||||
<!---->
|
||||
<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 -->
|
||||
{% endblock %}
|
||||
|
||||
@ -3,11 +3,11 @@
|
||||
{%block title%} {% trans 'Billing Information'%}{%endblock%}
|
||||
|
||||
{% block content %}
|
||||
<div class="row mb-3">
|
||||
{% comment %} <div class="row mb-3">
|
||||
<div class="col-sm-6">
|
||||
<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>
|
||||
{% csrf_token %}
|
||||
{{ form|crispy }}
|
||||
@ -21,5 +21,44 @@
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div> {% endcomment %}
|
||||
|
||||
|
||||
<!---->
|
||||
<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 %}
|
||||
|
||||
@ -45,11 +45,15 @@
|
||||
.form-label {
|
||||
font-weight: 500;
|
||||
}
|
||||
#pricing_container{
|
||||
max-width:60rem;
|
||||
|
||||
}
|
||||
</style>
|
||||
{% endblock customCSS %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container py-5">
|
||||
<div class="container py-5" id="pricing_container">
|
||||
<h1 class="text-center mb-5 text-primary">{{ _("Choose Your Plan")}}</h1>
|
||||
<form method="POST" action="{% url 'submit_plan' request.dealer.slug %}" id="wizardForm">
|
||||
{% csrf_token %}
|
||||
@ -200,10 +204,14 @@
|
||||
|
||||
<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">
|
||||
4. {{ _("Confirm Your Information")}}
|
||||
<h3 class="mb-0 fs-4 text-center text-white">
|
||||
4. {{ _("Confirm Your Information")}}
|
||||
</h3>
|
||||
</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>
|
||||
<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>
|
||||
|
||||
@ -4,8 +4,20 @@
|
||||
{% block title %}{{ _("Quotations") }}{% endblock title %}
|
||||
|
||||
{% block content %}
|
||||
<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 mt-4 mb-4">
|
||||
|
||||
<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">
|
||||
<table class="table align-items-center table-flush">
|
||||
|
||||
@ -5,8 +5,19 @@
|
||||
|
||||
{% block content %}
|
||||
<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">
|
||||
<table class="table align-items-center table-flush">
|
||||
<thead>
|
||||
|
||||
@ -3,117 +3,34 @@
|
||||
{% load custom_filters %}
|
||||
{%block title%} {%trans 'Sales'%} {%endblock%}
|
||||
|
||||
{% block customCSS %}
|
||||
<style>
|
||||
.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 %}
|
||||
|
||||
{% block content %}
|
||||
<div class="mb-9">
|
||||
<div id="projectSummary">
|
||||
<div class="row g-3 justify-content-between align-items-end mb-4">
|
||||
<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 %}
|
||||
<section class="mt-2">
|
||||
<div class="row overflow-x-auto whitespace-nowrap -mx-2 sm:mx-0">
|
||||
|
||||
<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-4">{% trans 'Sale Orders' %}<i class="fa-solid fa-cart-shopping ms-2 text-primary"></i></h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-sm-auto">
|
||||
<div class="d-flex align-items-center">
|
||||
<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 class="col-auto">
|
||||
<div class="d-flex">
|
||||
{% include 'partials/search_box.html' %}
|
||||
</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="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"
|
||||
hx-on::before-request="on_before_request()"
|
||||
hx-on::after-request="on_after_request()">
|
||||
</div>
|
||||
|
||||
<table class="table align-items-center table-flush">
|
||||
<div class="table-responsive scrollbar mx-n1 px-1">
|
||||
<table class="table align-items-center table-flush">
|
||||
<thead>
|
||||
<tr class="bg-body-highlight">
|
||||
<th class="sort white-space-nowrap align-middle ps-0" scope="col" data-sort="customer_name" style="width:10%;">
|
||||
<th class="sort white-space-nowrap align-middle ps-0" scope="col" data-sort="customer_name">
|
||||
{{ _("Customer Name")}}</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" style="width:5%;">{{ _("Customer Phone")}}</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" style="width:7%;">{{ _("Invoice") }}</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>
|
||||
<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_phone">{{ _("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="invoice" >{{ _("Invoice") }}</th>
|
||||
<th class="sort align-middle text-end" scope="col" ></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="list" id="project-list-table-body">
|
||||
@ -170,20 +87,7 @@
|
||||
</p>
|
||||
{% endif %}
|
||||
</td>
|
||||
|
||||
<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">
|
||||
<td class="align-middle text-end white-space-nowrap pe-4 action">
|
||||
<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>
|
||||
<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>
|
||||
@ -194,53 +98,18 @@
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-end mt-3">
|
||||
<div class="d-flex">
|
||||
{% if is_paginated %}
|
||||
{% include 'partials/pagination.html' %}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</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>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
{% 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 %}
|
||||
@ -13,7 +13,7 @@
|
||||
{% block content %}
|
||||
|
||||
|
||||
<div class="row">
|
||||
{% comment %} <div class="row">
|
||||
<div class="row">
|
||||
<div class="col-sm-9">
|
||||
<div class="d-sm-flex justify-content-between">
|
||||
@ -55,6 +55,54 @@
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> {% endcomment %}
|
||||
|
||||
|
||||
<!---->
|
||||
<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 %}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user