This commit is contained in:
Faheedkhan 2025-07-02 14:53:41 +03:00
parent d085940fca
commit 533300b0ed
7 changed files with 56 additions and 20 deletions

View File

@ -1185,6 +1185,9 @@ class Staff(models.Model, LocalizedNameMixin):
return self.staff_member.user
@property
def groups(self):
return [x.customgroup for x in self.user.groups.all()]
@property
def groups(self):
return [x.customgroup for x in self.user.groups.all()]

View File

@ -1145,6 +1145,7 @@ class CarListView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
@login_required
@permission_required("inventory.view_car")
def inventory_stats_view(request, dealer_slug):
"""
Handle the inventory stats view for a dealer, displaying detailed information
@ -1161,7 +1162,7 @@ def inventory_stats_view(request, dealer_slug):
"inventory/inventory_stats.html" template.
:rtype: HttpResponse
"""
# Base queryset for cars belonging to the dealer
cars = models.Car.objects.filter(dealer=request.dealer)

View File

@ -31,9 +31,10 @@
</thead>
<tbody>
{% for group in groups %}
{{group.users}}
<tr>
<td class="align-middle white-space-nowrap ps-1">{{ group.name }}</td>
<td class="align-middle white-space-nowrap"><i class="fa-solid fa-users me-1"></i> {{ group.users.count|subtract:1}}</td>
<td class="align-middle white-space-nowrap"><i class="fa-solid fa-users me-1"></i> {{ group.users.count}}</td>
<td class="align-middle white-space-nowrap"><i class="fa-solid fa-unlock me-1"></i> {{ group.permissions.count }}</td>
<td class="align-middle white-space-nowrap">
<a class="btn btn-phoenix-success"

View File

@ -30,8 +30,9 @@
</li>
</li>
{% endif %}
<li class="nav-item">
{% if perms.inventory.view_car%}
<li class="nav-item">
<a class="nav-link" href="{% url 'inventory_stats' request.dealer.slug %}">
<div class="d-flex align-items-center">
<span class="nav-link-icon"><span class="fas fa-car-side"></span></span><span class="nav-link-text">{% trans 'Cars'|capfirst %}</span>
@ -45,6 +46,8 @@
</div>
</a>
</li>
{% endif %}
{% if perms.inventory.add_car %}
<li class="nav-item">
<a class="nav-link" href="{% url 'upload_cars' request.dealer.slug %}">
@ -120,7 +123,7 @@
</div>
{% endif %}
{% if perms.django_ledger.view_customermodel %}
{% if perms.inventory.view_lead %}
<div class="nav-item-wrapper">
<a class="nav-link dropdown-indicator label-1" href="#nv-crm" role="button" data-bs-toggle="collapse" aria-expanded="false" aria-controls="nv-crm">
<div class="d-flex align-items-center">
@ -146,6 +149,8 @@
</div>
</a>
</li>
{% endif %}
{%if perms.inventory.view_opportunity %}
<li class="nav-item">
<a class="nav-link" href="{% url 'opportunity_list' request.dealer.slug %}">
<div class="d-flex align-items-center">
@ -154,7 +159,7 @@
</a>
</li>
{% endif %}
{% if perms.django_ledger.view_customermodel %}
{% if perms.inventory.view_customer %}
<li class="nav-item">
<a class="nav-link" href="{% url 'customer_list' request.dealer.slug %}">
<div class="d-flex align-items-center">
@ -163,6 +168,7 @@
</a>
</li>
{% endif %}
{% if perms.inventory.view_organization %}
<li class="nav-item">
<a class="nav-link" href="{% url 'organization_list' request.dealer.slug %}">
<div class="d-flex align-items-center">
@ -171,6 +177,7 @@
</a>
</li>
{% endif %}
{% comment %} <li class="nav-item">
<a class="nav-link" href="{% url 'representative_list' %}">
<div class="d-flex align-items-center">

View File

@ -75,6 +75,7 @@
</div>
{% endif %}
<!-- Main row -->
{% if perms.inventory.view_car %}
<div class="row-fluid {% if car.status == 'sold' %}disabled{% endif %}">
<div class="row g-3 justify-content-between">
<div class="col-lg-12 col-xl-6">
@ -242,7 +243,12 @@
</div>
</div>
</div>
<div class="col-lg-6 col-xl-6">
{% if perms.inventory.view_carfinance%}
<div class="card rounded shadow d-flex align-content-center {% if car.get_transfer %}transfer{% endif %}">
<p class="card-header rounded-top fw-bold">{% trans 'Financial Details' %}</p>
<div class="card-body">
@ -283,27 +289,31 @@
<th>{% trans "Total"|capfirst %}</th>
<td>{{ car.finances.total_vat|floatformat:2 }}</td>
</tr>
{% if perms.inventory.change_carfinance%}
<tr>
<td colspan="2">
{% if not car.get_transfer %}
<a href="{% url 'car_finance_update' request.dealer.slug car.finances.pk %}"
class="btn btn-phoenix-warning btn-sm mb-3">{% trans "Edit" %}</a>
<a href="{% url 'car_finance_update' request.dealer.slug car.finances.pk %}" class="btn btn-phoenix-warning btn-sm mb-3">{% trans "Edit" %}</a>
{% else %}
<span class="badge bg-danger">{% trans "Cannot Edit, Car in Transfer." %}</span>
{% endif %}
{% endif %}
</td>
</tr>
{% endif %}
{% else %}
<p>{% trans "No finance details available." %}</p>
{% if perms.inventory.add_carfinance %}
<p>{% trans "No finance details available." %}</p>
{% if perms.inventory.add_carfinance %}
<a href="{% url 'car_finance_create' request.dealer.slug car.slug %}"
class="btn btn-phoenix-success btn-sm mb-3">{% trans "Add" %}</a>
{% endif %}
</td>
</tr>
{% endif %}
</table>
</div>
</div>
</div>
{% endif %}
{% if perms.inventory.view_carcolors %}
<div class="card rounded shadow d-flex align-content-center mt-3 {% if car.get_transfer %}transfer{% endif %}">
<p class="card-header rounded-top fw-bold">{% trans 'Colors Details' %}</p>
<div class="card-body">
@ -332,7 +342,8 @@
style="background-color: rgb({{ car.colors.interior.rgb }})"></div>
</td>
</tr>
{% if perms.inventory.change_carcolors%}
<tr>
<td colspan="2">
{% if not car.get_transfer %}
@ -343,8 +354,9 @@
{% endif %}
</td>
</tr>
{% endif %}
{% else %}
<tr>
<tr>
<td colspan="2">
<p>{% trans "No color details available." %}</p>
@ -352,7 +364,7 @@
<a class="btn btn-phoenix-success btn-sm mb-3" href="{% url 'add_color' request.dealer.slug car.slug %}">{{ _("Add Color") }}</a>
{% endif %}
</td>
</tr>
</tr>
{% endif %}
<!--test-->
@ -360,7 +372,9 @@
</div>
</div>
</div>
{% endif %}
{% if car.status != 'transfer' %}
{%if perms.inventory.view_carreservation%}
<div class="card rounded shadow d-flex align-content-center mt-3">
<p class="card-header rounded-top fw-bold">{% trans 'Reservations Details' %}</p>
<div class="card-body">
@ -379,6 +393,7 @@
<tr>
<td>{{ reservation.reserved_by.dealer }}</td>
<td>{{ reservation.reserved_until }}</td>
{% if perms.inventory.change_carreservation %}
<td>
{% if reservation.is_active %}
<form method="post" action="{% url 'reservations' request.dealer.slug reservation.id %}">
@ -402,27 +417,30 @@
<span class="badge badge-phoenix badge-phoenix-danger fs-10">{% trans "Expired" %}</span>
{% endif %}
</td>
{% endif %}
</tr>
{% endfor %}
{% else %}
{% if perms.inventory.add_carreservation %}
<tr>
<td>
{% if perms.inventory.change_carreservation %}
<button type="button"
class="btn btn-sm btn-phoenix-success"
data-bs-toggle="modal"
data-bs-target="#reserveModal">
{% trans 'Reserve' %}
</button>
{% endif %}
</td>
</tr>
</tbody>
{% endif %}
{% endif %}
</tbody>
{% endif %}
</table>
</div>
</div>
</div>
{% endif %}
{% endif %}
<!-- Transfer Table -->
{% if car.status == 'transfer' and car.get_transfer %}
@ -483,6 +501,7 @@
alt="">
{% endif %}
</div>
<!-- Custom Card Modal -->
<div class="modal fade"
id="customCardModal"
@ -583,6 +602,7 @@
</div>
</div>
</div>
{% endif %}
<script>
document.addEventListener("DOMContentLoaded", function () {
const csrftoken = getCookie("csrftoken");

View File

@ -272,9 +272,13 @@
</button>
<div class="dropdown-menu dropdown-menu-end py-2">
<a class="dropdown-item" href="{% url 'car_detail' request.dealer.slug car.slug %}"> <span class="fas fa-eye me-2"></span>{{ _("View") }} </a>
{% if perms.inventory.change_car%}
<a class="dropdown-item" href="{% url 'car_update' request.dealer.slug car.slug %}"> <span class="fas fa-edit me-2"></span>{{ _("Edit") }} </a>
{% endif %}
{% if perms.inventory.delete_car%}
<div class="dropdown-divider"></div>
<a class="dropdown-item text-danger" href="{% url 'car_delete' request.dealer.slug car.slug %}"> <span class="fas fa-trash me-2"></span>{{ _("Remove") }} </a>
{% endif %}
</div>
</div>
</div>

View File

@ -80,7 +80,7 @@
<a href="{% url 'send_email' request.dealer.slug estimate.pk %}" class="btn btn-phoenix-primary me-2"><span class="fa-regular fa-paper-plane me-sm-2"></span><span class="d-none d-sm-inline-block">{% trans 'Send Quotation' %}</span></a>
<button id="mark_as_sent_estimate" class="btn btn-phoenix-secondary" onclick="setFormAction('review')" data-bs-toggle="modal" data-bs-target="#confirmModal"><span class="d-none d-sm-inline-block"><i class="fa-solid fa-check-double"></i> {% trans 'Mark As Sent' %}</span></button>
{% elif estimate.status == 'in_review' %}
{% if perms.django_ledger.can_approve_estimatemodel %}
{% if perms.django_ledger.can_approve_estimate %}
<button id="accept_estimate" onclick="setFormAction('approved')" class="btn btn-phoenix-secondary" data-bs-toggle="modal" data-bs-target="#confirmModal"><span class="d-none d-sm-inline-block"><i class="fa-solid fa-check-double"></i> {% trans 'Mark As Accept' %}</span></button>
{% endif %}
{% elif estimate.status == 'approved' %}