update
This commit is contained in:
parent
d085940fca
commit
533300b0ed
@ -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()]
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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">
|
||||
|
||||
@ -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");
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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' %}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user