car list is back to previous design

This commit is contained in:
Marwan Alwali 2025-06-23 00:52:24 +03:00
parent 49677eca4a
commit 4a941aa891

View File

@ -1,6 +1,6 @@
{% extends "base.html" %} {% extends "base.html" %}
{% load static i18n custom_filters humanize %} {% load static i18n custom_filters humanize %}
{%block title%} {%trans 'Stocks'%} {%endblock%} {%block title%} {%trans 'Inventory'%} {%endblock%}
{% block customCSS %} {% block customCSS %}
<style> <style>
@ -23,11 +23,16 @@
} }
</style> </style>
{% endblock customCSS %} {% endblock customCSS %}
{% block content %} {% block content %}
<div class="mb-9"> <div class="container-fluid" id="projectSummary">
<div id="projectSummary"> <div class="row g-3 justify-content-between align-items-end mb-4">
<div class="row g-3 justify-content-between align-items-end mb-4">
<div class="col-12 col-sm-auto"> <div class="col-12 col-sm-auto">
<h1 class="text-body-emphasis fw-bold fs-2 mb-0">{{ _("Inventory") }}</h1>
</div>
</div>
<div class="row g-3 justify-content-between align-items-end mb-2">
<div class="col-4 col-sm-auto">
<ul <ul
class="nav nav-links mx-n2" class="nav nav-links mx-n2"
hx-boost="true" hx-boost="true"
@ -55,12 +60,22 @@
</li> </li>
<li class="nav-item"> <li class="nav-item">
<button hx-on:click="toggle_filter()" class="btn btn-sm btn-phoenix-primary px-2 py-1"> <button hx-on:click="toggle_filter()" class="btn btn-sm btn-phoenix-primary px-2 py-1">
<span><span class="fa fa-filter me-1"></span>{{ _("Filter") }}</span><span class="fas fa-caret-down fs-9 ms-1 filter-icon"></span> <span><span class="fa fa-filter me-1"></span>{{ _("Filter") }}</span>
<span class="fas fa-caret-down fs-9 ms-1 filter-icon"></span>
</button> </button>
</li> </li>
</ul> </ul>
</div> </div>
<div class="col-12 col-sm-auto"> <div class="col-4 col-sm-auto">
<form hx-boost="true" action="{% url 'bulk_update_car_price' %}" method="post" hx-include=".car-checkbox" class="update-price-form d-flex flex-row align-items-center ms-auto d-none" style="float: right;">
{% csrf_token %}
<div class="input-group">
<input class="form-control" type="number" placeholder='{{ _("Price") }}' name="price" aria-label="Price" id="price" />
<button class="btn btn-sm btn-phoenix-primary" type="submit">{{ _("Update") }}</button>
</div>
</form>
</div>
<div class="col-4 col-sm-auto">
<div class="d-flex align-items-center"> <div class="d-flex align-items-center">
<div class="spinner-border mx-3 htmx-indicator" role="status"> <div class="spinner-border mx-3 htmx-indicator" role="status">
<span class="visually-hidden">Loading...</span> <span class="visually-hidden">Loading...</span>
@ -87,7 +102,8 @@
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="row">
<div class="d-flex align-items-center d-none filter"> <div class="d-flex align-items-center d-none filter">
<select <select
hx-get="{% url 'car_list' %}" hx-get="{% url 'car_list' %}"
@ -149,17 +165,8 @@
{{ _("Search") }} {{ _("Search") }}
</button> </button>
</div> </div>
<div class="row"> <div class="table-responsive scrollbar">
<form hx-boost="true" action="{% url 'bulk_update_car_price' %}" method="post" hx-include=".car-checkbox" class="update-price-form d-flex flex-row align-items-center ms-auto w-25 d-none" style="float: right;"> <div class="d-flex flex-wrap align-items-center justify-content-between py-3 pe-0 fs-9">
{% csrf_token %}
<div class="form-floating me-2">
<input class="form-control" type="number" placeholder='{{ _("Search") }}' name="price" aria-label="Price" id="price" />
<label for="price">{{ _("Price") }}</label>
</div>
<button class="btn btn-outline-primary" type="submit">{{ _("Search") }}</button>
</form>
<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 <div
class="d-flex" class="d-flex"
hx-boost="true" hx-boost="true"
@ -170,130 +177,133 @@
hx-swap="innerHTML show:window:top" hx-swap="innerHTML show:window:top"
hx-indicator=".htmx-indicator" hx-indicator=".htmx-indicator"
hx-on::before-request="on_before_request()" hx-on::before-request="on_before_request()"
hx-on::after-request="on_after_request()"></div> hx-on::after-request="on_after_request()">
<div class="w-100 list table-responsive" > </div>
<div class="form-check"> <table class="table fs-9 mb-0 border-top border-translucent">
<input class="form-check-input ms-4" type="checkbox" id="select-all" /> <span class="ms-1 text-body-tertiary">{{ _("Select All") }}</span> <thead>
</div> <tr>
{% for car in cars %} <th class="sort white-space-nowrap align-middle" scope="col">
<div class="card border mb-3 py-0 px-0" id="project-list-table-body"> <div class="form-check">
<div class="card-body"> <input class="form-check-input" type="checkbox" id="select-all" />
<div class="row align-items-center"> </div>
<div class="col-auto"> </th>
<div class="form-check"> <th class="sort white-space-nowrap align-middle" scope="col">{{ _("VIN") }}</th>
<input class="form-check-input car-checkbox" type="checkbox" name="car" value="{{ car.pk }}" id="car-{{car.pk}}" /> <th class="sort white-space-nowrap align-middle" scope="col" data-sort="make">{{ _("Make") }}</th>
</div> <th class="sort white-space-nowrap align-middle" scope="col" data-sort="model">{{ _("Model") }}</th>
</div> <th class="sort white-space-nowrap align-middle" scope="col" data-sort="year">{{ _("Year") }}</th>
<!-- Vehicle Image/Icon --> <th class="sort white-space-nowrap align-middle" scope="col">{{ _("Trim") }}</th>
<div class="col-auto"> <th class="sort white-space-nowrap align-middle" scope="col">{{ _("Color") }}</th>
<div class="avatar avatar-3xl"> <th class="sort white-space-nowrap align-middle" scope="col">{{ _("Date Received") }}</th>
<img class="rounded-soft shadow shadow-lg" src="{% static 'images/cars/' %}{{ car.vin }}.png" alt="{{ car.vin }}" /> <th class="sort white-space-nowrap align-middle" scope="col" data-sort="car_status">{{ _("Status") }}</th>
</div> <th class="sort white-space-nowrap align-middle" scope="col">{{ _("Inventory Ready") }}</th>
</div> <th class="sort white-space-nowrap align-middle" scope="col"></th>
<!-- Vehicle Details --> </tr>
<div class="col"> </thead>
<div class="row"> <tbody class="list" id="project-list-table-body">
<!-- Make/Model/Specs --> {% for car in cars %}
<div class="col-md-4"> <tr class="position-static">
<h5 class="text-body-emphasis fw-bold">{{ car.year }}</h5> <td class="align-middle time white-space-nowrap">
<p class="text-body-emphasis fw-bold"> <div class="form-check">
<a href="{% url 'car_detail' car.slug %}" class="text-decoration-none text-body-emphasis"> <input class="form-check-input car-checkbox"
{{ car.id_car_make.get_local_name }} type="checkbox"
</a> name="car"
<small>{{ car.id_car_model.get_local_name }}</small> value="{{ car.pk }}"
</p> id="car-{{car.pk}}" />
<small class="text-body-secondary" dir="ltr"> </div>
{{ car.id_car_trim }} </td>
</small> <td class="align-middle white-space-nowrap assignees">
</div> <a class="fw-bold" href="{% url 'car_detail' car.slug %}">{{ car.vin }}</a>
</td>
<!-- Color and Date --> <td class="align-middle white-space-nowrap make">
<div class="col-md-3"> <p class="mb-0 fs-9 text-body">{{ car.id_car_make.get_local_name|default:car.id_car_make.name }}</p>
<p class="text-body mb-1"> </td>
{{ car.colors.exterior.get_local_name }} <td class="align-middle white-space-nowrap model">
</p> <p class="mb-0 fs-9 text-body">{{ car.id_car_model.get_local_name|default:car.id_car_model.name }}</p>
<small class="text-body-secondary"> </td>
{{ car.receiving_date|naturalday|capfirst }} <td class="align-middle white-space-nowrap year">
</small> <p class="fw-bo text-body fs-9 mb-0">{{ car.year }}</p>
</div> </td>
<td class="align-middle white-space-nowrap">
<!-- Status Badge --> <p class="text-body-secondary fs-10 mb-0">{{ car.id_car_trim }}</p>
<div class="col-md-3"> </td>
{% if car.status == "available" %} <td class="align-middle white-space-nowrap">
<span class="badge badge-phoenix fs-10 badge-phoenix-success text-uppercase px-3 py-2">{{ _("Available") }}</span> <div class="d-flex flex-row align-items-center">
{% elif car.status == "reserved" %} <div class="d-flex flex-column align-items-center">
<span class="badge badge-phoenix fs-10 badge-phoenix-warning text-uppercase px-3 py-2">{{ _("Reserved") }}</span> <span class="color-div"
{% elif car.status == "sold" %} style="background: linear-gradient(90deg, rgba({{ car.colors.exterior.rgb }},1) 10%, rgba({{ car.colors.exterior.rgb }},0.10) 100%)"
<span class="badge badge-phoenix fs-10 badge-phoenix-danger text-uppercase px-3 py-2">{{ _("Sold") }}</span> title="{{ car.colors.exterior.get_local_name }}"></span><span>{{ car.colors.exterior.get_local_name }}</span>
{% elif car.status == "transfer" %} </div>
<span class="badge badge-phoenix fs-10 badge-phoenix-info text-uppercase px-3 py-2">{{ _("Transfer") }}</span> <div class="d-flex flex-column align-items-center">
{% endif %} <span class="color-div"
</div> style="background: linear-gradient(90deg, rgba({{ car.colors.interior.rgb }},1) 10%, rgba({{ car.colors.interior.rgb }},0.10) 100%)"
title="{{ car.colors.interior.get_local_name }}"></span><span>{{ car.colors.interior.get_local_name }}</span>
<!-- Ready Status --> </div>
<div class="col-md-2"> </div>
<div class="d-flex align-items-center"> </td>
<span class="fs-10 fw-light me-2">{{ _("Inventory Ready") }}</span> <td class="align-middle white-space-nowrap">
{% if car.ready %} <p class="fw-bold text-body mb-0">{{ car.receiving_date|naturalday|capfirst }}</p>
<span class="badge bg-success rounded-circle p-1 me-2"> </td>
<span class="visually-hidden">Ready</span> <td class="align-middle white-space-nowrap statuses">
</span> {% if car.status == "available" %}
<span class="text-success fw-bold">{{ _("Yes") }}</span> <span class="badge badge-phoenix fs-11 badge-phoenix-success">{{ _("Available") }}</span>
{% else %} {% elif car.status == "reserved" %}
<span class="badge bg-danger rounded-circle p-1 me-2"> <span class="badge badge-phoenix fs-11 badge-phoenix-danger">{{ _("Reserved") }}</span>
<span class="visually-hidden">Not Ready</span> {% elif car.status == "sold" %}
</span> <span class="badge badge-phoenix fs-11 badge-phoenix-info">{{ _("Sold") }}</span>
<span class="text-danger fw-bold">{{ _("No") }}</span> {% elif car.status == "transfer" %}
{% endif %} <span class="badge badge-phoenix fs-11 badge-phoenix-warning">{{ _("Transfer") }}</span>
{% endif %}
</td>
<td class="align-middle white-space-nowrap">
{% if not car.ready %}
<span class="text-danger"> {{ _("NO") }} </span>
{%else%}
<span class="text-success"> {{ _("YES") }} </span>
{%endif%}
</td>
<td class="align-middle text-end white-space-nowrap pe-0 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" href="{% url 'car_detail' car.slug %}">{{ _("View") }}</a>
<a class="dropdown-item" href="#!">{{ _("Export") }}</a>
</div>
</div>
</td>
</tr>
{% empty %}
<div class="col-12">
<div class="text-center py-5">
<div class="text-body-secondary">
<i class="fas fa-car fa-4x mb-3 opacity-50"></i>
<h4 class="text-body-secondary">{{ _("No vehicles found") }}</h4>
<p class="text-body-tertiary">{{ _("Try adjusting your search criteria or filters") }}</p>
</div>
</div> </div>
</div>
</div> </div>
</div> {% endfor %}
</tbody>
</table>
</div>
<!-- Action Menu --> <!-- Pagination -->
<div class="col-auto"> {% if is_paginated %}
<div class="btn-reveal-trigger position-static"> {% include 'partials/pagination.html' %}
<button {% endif %}
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" href="{% url 'car_detail' car.slug %}"> <span class="fas fa-eye me-2"></span>{{ _("View") }} </a>
<a class="dropdown-item" href="{% url 'car_update' car.slug %}"> <span class="fas fa-edit me-2"></span>{{ _("Edit") }} </a>
<div class="dropdown-divider"></div>
<a class="dropdown-item text-danger" href="{% url 'car_delete' car.slug %}"> <span class="fas fa-trash me-2"></span>{{ _("Remove") }} </a>
</div>
</div>
</div>
</div>
</div>
</div>
{% empty %}
<div class="text-center py-5">
<div class="text-body-secondary">
<span class="fas fa-car fa-4x mb-3 opacity-50"></span>
<h4 class="text-body-secondary">{{ _("No vehicles found") }}</h4>
<p class="text-body-tertiary">{{ _("Try adjusting your search criteria or filters") }}</p>
</div>
</div>
{% endfor %}
</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> </div>
</div>
</div> </div>
{% endblock %} {% block customJS %} </div>
{% endblock %}
{% block customJS %}
<script> <script>
links = document.querySelectorAll(".nav-link"); links = document.querySelectorAll(".nav-link");
links.forEach((link) => { links.forEach((link) => {
@ -358,4 +368,4 @@
} }
</script> </script>
{% endblock customJS %} {% endblock customJS %}
</div>