title and notification history update
This commit is contained in:
parent
3765c321a1
commit
2c0c85c74f
@ -829,6 +829,7 @@ class Car(Base):
|
||||
def mark_as_sold(self):
|
||||
self.cancel_reservation()
|
||||
self.status = CarStatusChoices.SOLD
|
||||
self.sold_date=timezone.now()
|
||||
self.save()
|
||||
|
||||
def cancel_reservation(self):
|
||||
|
||||
@ -985,7 +985,9 @@ def send_schedule_reminder_email(schedule_id):
|
||||
"""
|
||||
try:
|
||||
schedule = Schedule.objects.get(pk=schedule_id)
|
||||
|
||||
if schedule.completed:
|
||||
logger.info("Schedule is already completed, existing.")
|
||||
return
|
||||
# Ensure the user has an email and the schedule is not completed/canceled
|
||||
if not schedule.scheduled_by.email or schedule.status in [
|
||||
"completed",
|
||||
|
||||
@ -1402,7 +1402,7 @@ class CarListView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
|
||||
template_name = "inventory/car_list_view.html"
|
||||
context_object_name = "cars"
|
||||
paginate_by = 10
|
||||
permission_required = "inventory.view_carcolors"
|
||||
permission_required = "inventory.view_car"
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
@ -1422,7 +1422,6 @@ class CarListView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
|
||||
context["year"] = models.Car.objects.none()
|
||||
make = self.request.GET.get("make")
|
||||
model = self.request.GET.get("model")
|
||||
|
||||
if make:
|
||||
make_ = models.CarMake.objects.get(id_car_make=int(make))
|
||||
context["model"] = make_.carmodel_set.filter(car__in=cars).distinct()
|
||||
@ -1440,15 +1439,16 @@ class CarListView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
|
||||
dealer = get_user_type(self.request)
|
||||
qs = super().get_queryset()
|
||||
qs = qs.filter(dealer=dealer)
|
||||
status = self.request.GET.get("status")
|
||||
# status = self.request.GET.get("status")
|
||||
search = self.request.GET.get("search")
|
||||
make = self.request.GET.get("make", None)
|
||||
model = self.request.GET.get("model", None)
|
||||
year = self.request.GET.get("year", None)
|
||||
car_status = self.request.GET.get("car_status", None)
|
||||
print("ALLLLLLLLL:::",make,model)
|
||||
|
||||
if status:
|
||||
qs = qs.filter(status=status)
|
||||
if car_status:
|
||||
qs = qs.filter(status=car_status)
|
||||
if search:
|
||||
query = (
|
||||
Q(vin__icontains=search)
|
||||
@ -4990,6 +4990,7 @@ def create_estimate(request, dealer_slug, slug=None):
|
||||
.annotate(hash_count=Count("hash"))
|
||||
.distinct()
|
||||
)
|
||||
print(car_list)
|
||||
context = {
|
||||
"form": form,
|
||||
"items": [
|
||||
@ -5124,8 +5125,7 @@ def create_sale_order(request, dealer_slug, pk):
|
||||
f"KeyError: 'car_info' or 'status' key missing when attempting to update status to 'sold' for item.item_model PK: {getattr(item.item_model, 'pk', 'N/A')}."
|
||||
)
|
||||
pass
|
||||
item.item_model.car.sold_date=timezone.now() # to be checked added by faheed
|
||||
item.item_model.car.save()# to be checked added byfaheed
|
||||
|
||||
item.item_model.car.mark_as_sold()
|
||||
messages.success(request, "Sale Order created successfully")
|
||||
|
||||
@ -7539,6 +7539,18 @@ class NotificationListView(LoginRequiredMixin, ListView):
|
||||
|
||||
def get_queryset(self):
|
||||
return models.Notification.objects.filter(user=self.request.user)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
|
||||
context = super().get_context_data(**kwargs)
|
||||
user_notifications = self.get_queryset()
|
||||
|
||||
# Calculate the number of total, read and unread notifications
|
||||
context['total_count'] = user_notifications.count()
|
||||
context['read_count'] = user_notifications.filter(is_read=True).count()
|
||||
context['unread_count'] = user_notifications.filter(is_read=False).count()
|
||||
|
||||
return context
|
||||
|
||||
|
||||
class ItemServiceCreateView(
|
||||
@ -8198,7 +8210,7 @@ def send_email_view(request, dealer_slug, pk):
|
||||
|
||||
تحياتي،
|
||||
|
||||
{dealer.get_local_name}
|
||||
{dealer.get_local_name()}
|
||||
{dealer.phone_number}
|
||||
Haikal | هيكل
|
||||
-----
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>403 - Access Forbidden</title>
|
||||
<title>403 - {% trans "Access Forbidden" %}</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css"
|
||||
rel="stylesheet">
|
||||
<style>
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<title>Access Forbidden</title>
|
||||
<title>{% trans "Access Forbidden" %}</title>
|
||||
<meta name="description" content="" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="apple-touch-icon"
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<title>Access Forbidden</title>
|
||||
<title>{% trans "Access Forbidden" %}</title>
|
||||
<meta name="description" content="" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="apple-touch-icon"
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
{% extends "base.html" %}
|
||||
{% load crispy_forms_filters %}
|
||||
{% load allauth i18n static %}
|
||||
{% block head_title %}
|
||||
{% block title %}
|
||||
{% trans "Change Password" %}
|
||||
{% endblock head_title %}
|
||||
{% endblock title %}
|
||||
{% block content %}
|
||||
<div class="row ">
|
||||
<div class="row flex-center min-vh-50">
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
{% extends "base.html" %}
|
||||
{% load crispy_forms_filters %}
|
||||
{% load i18n allauth account static %}
|
||||
{% block head_title %}
|
||||
{% block title %}
|
||||
{% trans "Password Reset" %}
|
||||
{% endblock head_title %}
|
||||
{% endblock title %}
|
||||
{% block content %}
|
||||
<div class="row ">
|
||||
<div class="row flex-center min-vh-50">
|
||||
|
||||
@ -2,9 +2,9 @@
|
||||
{% load i18n static %}
|
||||
{% load allauth %}
|
||||
{% load account %}
|
||||
{% block head_title %}
|
||||
{% block title %}
|
||||
{% trans "Password Reset" %}
|
||||
{% endblock head_title %}
|
||||
{% endblock title %}
|
||||
{% block content %}
|
||||
<div class="row ">
|
||||
<div class="row flex-center min-vh-50">
|
||||
|
||||
@ -2,9 +2,9 @@
|
||||
{% load crispy_forms_filters %}
|
||||
{% load i18n static %}
|
||||
{% load allauth %}
|
||||
{% block head_title %}
|
||||
{% block title %}
|
||||
{% trans "Change Password" %}
|
||||
{% endblock head_title %}
|
||||
{% endblock title %}
|
||||
{% block content %}
|
||||
<div class="row ">
|
||||
<div class="row flex-center min-vh-50">
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
{% extends "base.html" %}
|
||||
{% load i18n static %}
|
||||
{% load allauth %}
|
||||
{% block head_title %}
|
||||
{% block title %}
|
||||
{% trans "Change Password" %}
|
||||
{% endblock head_title %}
|
||||
{% endblock title %}
|
||||
{% block content %}
|
||||
<div class="row ">
|
||||
<div class="row flex-center min-vh-50">
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
{% extends "base.html" %}
|
||||
{% load i18n custom_filters %}
|
||||
{% block title %}
|
||||
{% trans "Accounts" %}
|
||||
{% trans "Audit Log Dashboard" %}
|
||||
{% endblock title %}
|
||||
{% block accounts %}
|
||||
<a class="nav-link active fw-bold">
|
||||
|
||||
@ -1,21 +1,11 @@
|
||||
{% extends 'base.html' %}
|
||||
{% load i18n %}
|
||||
{% load crispy_forms_filters %}
|
||||
{% block title %}
|
||||
{% trans "Activate Account" %}
|
||||
{% endblock title %}
|
||||
{% block content %}
|
||||
{% 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>
|
||||
<form method="post">
|
||||
{% csrf_token %}
|
||||
<div class="d-flex justify-content-center">
|
||||
<button class="btn btn-phoenix-primary mx-2" type="submit">Activate</button>
|
||||
<a class="btn btn-phoenix-danger mx-2" href="{% url 'user_management' request.dealer.slug %}">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">
|
||||
|
||||
@ -1,33 +1,44 @@
|
||||
{% extends "base.html" %}
|
||||
{% load i18n %}
|
||||
{% block title %}
|
||||
{% trans 'Admin Management' %}
|
||||
{% trans 'Admin Dashboard' %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h3 class="my-4">
|
||||
{% trans "Admin Management" %}
|
||||
<li class="fa fa-user-cog ms-2 text-primary"></li>
|
||||
</h3>
|
||||
<div class="row row-cols-1 row-cols-sm-2 row-cols-md-4 g-4 mt-10">
|
||||
<div class="col">
|
||||
<a href="{% url 'user_management' request.dealer.slug %}">
|
||||
<div class="card h-100">
|
||||
<div class="card-header text-center">
|
||||
<h5 class="card-title">{{ _("User Management") }}</h5>
|
||||
<span class="me-2"><i class="fas fa-user fa-2x"></i></span>
|
||||
<div class="container py-5">
|
||||
<header class="mb-5">
|
||||
<h1 class="display-4 fw-bold">
|
||||
<i class="fas fa-user-cog text-primary me-3"></i>
|
||||
{% trans "Admin Dashboard" %}
|
||||
</h1>
|
||||
<p class="lead mt-3">
|
||||
{% trans "Manage user accounts, review system logs, and control access permissions." %}
|
||||
</p>
|
||||
</header>
|
||||
|
||||
<div class="row row-cols-1 row-cols-md-2 row-cols-lg-3 g-4">
|
||||
<div class="col">
|
||||
<a href="{% url 'user_management' request.dealer.slug %}" class="text-decoration-none">
|
||||
<div class="card h-100 shadow-sm border-0 rounded-3">
|
||||
<div class="card-body text-center p-4">
|
||||
<i class="fas fa-users fa-3x text-primary mb-3"></i>
|
||||
<h5 class="card-title fw-bold ">{{ _("User Management") }}</h5>
|
||||
<p class="card-text text-muted">{% trans "View, edit, and manage all user accounts within the system." %}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col">
|
||||
<a href="{% url 'audit_log_dashboard' request.dealer.slug %}">
|
||||
<div class="card h-100">
|
||||
<div class="card-header text-center">
|
||||
<h5 class="card-title">{{ _("Audit Log Dashboard") }}</h5>
|
||||
<span class="me-2"><i class="fas fa-user fa-2x"></i></span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col">
|
||||
<a href="{% url 'audit_log_dashboard' request.dealer.slug %}" class="text-decoration-none">
|
||||
<div class="card h-100 shadow-sm border-0 rounded-3">
|
||||
<div class="card-body text-center p-4">
|
||||
<i class="fas fa-history fa-3x text-primary mb-3"></i>
|
||||
<h5 class="card-title fw-bold ">{{ _("Audit Log") }}</h5>
|
||||
<p class="card-text text-muted">{% trans "Review a detailed history of all critical system activities and changes." %}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock content %}
|
||||
{% endblock content %}
|
||||
@ -1,7 +1,7 @@
|
||||
{% extends "base.html" %}
|
||||
{% load i18n custom_filters %}
|
||||
{% block title %}
|
||||
{% trans "Accounts" %}
|
||||
{% trans "Audit Log Dashboard" %}
|
||||
{% endblock title %}
|
||||
{% block accounts %}
|
||||
<a class="nav-link active fw-bold">
|
||||
|
||||
@ -1,20 +1,10 @@
|
||||
{% extends 'base.html' %}
|
||||
{% load i18n %}
|
||||
{% block title %}
|
||||
{% trans "Permanent Delete instance" %}
|
||||
{% endblock title %}
|
||||
{% block content %}
|
||||
{% 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>
|
||||
<form method="post">
|
||||
{% csrf_token %}
|
||||
<div class="d-flex justify-content-center">
|
||||
<button class="btn btn-phoenix-danger mx-2" type="submit"><i class="fas fa-trash me-2"></i> Delete Permenantly</button>
|
||||
<a class="btn 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> {% 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">
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
{% extends "base.html" %}
|
||||
{% load i18n custom_filters %}
|
||||
{% block title %}
|
||||
{% trans "Accounts" %}
|
||||
{% trans "Audit Log Dashboard" %}
|
||||
{% endblock title %}
|
||||
{% block accounts %}
|
||||
<a class="nav-link active fw-bold">
|
||||
|
||||
@ -2,6 +2,9 @@
|
||||
{% load i18n static %}
|
||||
{% load django_ledger %}
|
||||
{% load widget_tweaks %}
|
||||
{% block title %}
|
||||
{% trans "Create Chart of Accounts" %}
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<main class="d-flex align-items-center justify-content-center min-vh-80 py-5">
|
||||
<div class="col-12 col-sm-10 col-md-8 col-lg-6 col-xl-5">
|
||||
|
||||
@ -2,6 +2,9 @@
|
||||
{% load i18n %}
|
||||
{% load static %}
|
||||
{% load icon from django_ledger %}
|
||||
{% block title %}
|
||||
{% trans "Chart of Accounts" %}
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<div class="card mb-4">
|
||||
<div class="card-body">
|
||||
|
||||
@ -2,6 +2,9 @@
|
||||
{% load i18n %}
|
||||
{% load static %}
|
||||
{% load widget_tweaks %}
|
||||
{% block title %}
|
||||
{% trans "Update chart of Account"%}
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-lg-6 col-md-8">
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
{% extends 'base.html' %}
|
||||
{% load static %}
|
||||
{% block title %}
|
||||
{% trans "Calender Events" %}
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<div class="row">
|
||||
<div class="table-responsive border-translucent">
|
||||
|
||||
@ -1,6 +1,9 @@
|
||||
{% extends 'base.html' %}
|
||||
{% load i18n static humanize %}
|
||||
{% load crispy_forms_tags %}
|
||||
{% block title %}
|
||||
{% trans "Lead Detail" %}
|
||||
{% endblock %}
|
||||
{% block customCSS %}
|
||||
<style>
|
||||
.main-tab li:last-child {
|
||||
|
||||
@ -1,43 +1,119 @@
|
||||
{% extends 'base.html' %}
|
||||
{% block content %}
|
||||
<div class="content">
|
||||
<h2 class="mb-5">{{ _("Notifications") }}</h2>
|
||||
<div class="d-flex justify-content-end mb-3">
|
||||
<a href="{% url 'mark_all_notifications_as_read' %}"
|
||||
hx-select-oob="#toast-container:outerHTML"
|
||||
class="btn btn-phoenix-primary"><i class="far fa-envelope fs-8 me-2"></i>{{ _("Mark all as read") }}</a>
|
||||
</div>
|
||||
{% if notifications %}
|
||||
<div class="mx-n4 mx-lg-n6 mb-5 border-bottom">
|
||||
{% for notification in notifications %}
|
||||
<div class="d-flex align-items-center justify-content-between py-3 px-lg-6 px-4 notification-card border-top">
|
||||
<div class="d-flex">
|
||||
<div class="me-3 flex-1 mt-2">
|
||||
<h4 class="fs-9 text-body-emphasis">{{ _("System") }}:</h4>
|
||||
{% if notification.is_read %}
|
||||
<p class="fs-9 text-body-highlight">
|
||||
<span class="far fa-envelope text-success-dark fs-8 me-1"></span><span class="me-1">{{ notification.message|safe }}</span> <span class="ms-2 text-body-tertiary text-opacity-85 fw-bold fs-10 text-end">{{ notification.created|timesince }}</span>
|
||||
</p>
|
||||
{% else %}
|
||||
<p class="fs-9 text-body-highlight">
|
||||
<span class="far fa-envelope-open text-danger-dark fs-8 me-1"></span><span>{{ notification.message|safe }}</span> <span class="ms-2 text-body-tertiary text-opacity-85 fw-bold fs-10 text-end">{{ notification.created|timesince }}</span>
|
||||
</p>
|
||||
{% endif %}
|
||||
<p class="text-body-secondary fs-9 mb-0">
|
||||
<span class="me-1 far fa-clock"></span>{{ notification.created }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</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 %}
|
||||
{% else %}
|
||||
<p>{% trans "No notifications found." %}</p>
|
||||
{% endif %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block title %}
|
||||
{% trans "Notifications" %}
|
||||
{% endblock title %}
|
||||
|
||||
{% block customeCSS %}
|
||||
|
||||
/* General Layout */
|
||||
body {
|
||||
background-color: #f8f9fa; /* Light gray background for contrast */
|
||||
}
|
||||
|
||||
/* List Item Styling */
|
||||
.list-item {
|
||||
transition: background-color 0.2s ease-in-out, transform 0.2s ease-in-out;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.list-item:hover {
|
||||
background-color: #f1f3f5;
|
||||
transform: translateY(-2px); /* Subtle lift on hover */
|
||||
}
|
||||
|
||||
/* Unread Notification Dot */
|
||||
.unread-dot {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
/* HTMX Loading Indicator */
|
||||
.htmx-request #loading-indicator {
|
||||
display: block;
|
||||
}
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<main class="container-fluid p-5">
|
||||
<div class="row gx-5">
|
||||
<div class="col-lg-8">
|
||||
<header class="d-flex justify-content-between align-items-center mb-5 border-bottom pb-4">
|
||||
<h1 class="display-5 fw-bolder">{% trans "Inbox" %}</h1>
|
||||
<div class="d-flex align-items-center">
|
||||
<span class="text-muted d-none d-md-block me-3">
|
||||
<span id="unread-count-text" class="fw-bold me-1">{{ total_count}}</span> {% trans "notifications" %}
|
||||
</span>
|
||||
<a href="{% url 'mark_all_notifications_as_read' %}"
|
||||
hx-get="{% url 'mark_all_notifications_as_read' %}"
|
||||
hx-swap="none"
|
||||
class="btn btn-sm btn-outline-secondary rounded-pill fw-bold">
|
||||
<i class="fas fa-check-double me-2"></i>{% trans "Mark all read" %}
|
||||
</a>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
{% if notifications %}
|
||||
<div class="list-container" hx-indicator="#loading-indicator">
|
||||
{% for notification in notifications %}
|
||||
<div class="list-item d-flex align-items-start py-4 border-bottom position-relative">
|
||||
{% if not notification.is_read %}
|
||||
<span class="unread-dot bg-primary"></span>
|
||||
{% endif %}
|
||||
<div class="me-4 mt-1">
|
||||
<i class="fas fa-info-circle fa-2x text-secondary"></i>
|
||||
</div>
|
||||
<div class="flex-grow-1">
|
||||
<h5 class="mb-1 text-dark fw-normal">
|
||||
{{ notification.message|safe }}
|
||||
</h5>
|
||||
<p class="text-muted fs-6 mb-0 mt-2">
|
||||
<i class="far fa-clock me-1"></i>
|
||||
<span class="text-nowrap">{{ notification.created|timesince }} ago</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="text-center py-5 mt-5">
|
||||
<i class="fas fa-bell-slash fa-4x text-muted mb-4"></i>
|
||||
<h4 class="text-secondary fw-bold">{% trans "No new notifications" %}</h4>
|
||||
<p class="text-muted">{% trans "You're all caught up. Check back later for updates." %}</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if page_obj.paginator.num_pages > 1 %}
|
||||
<div class="d-flex justify-content-center mt-5">
|
||||
{% include 'partials/pagination.html' %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="col-lg-4 d-none d-lg-block">
|
||||
<div class="card bg-light border-0 rounded-4 p-4 sticky-top">
|
||||
<h4 class="fw-bold mb-3 text-dark">{% trans "Status" %}</h4>
|
||||
<ul class="list-unstyled mb-0">
|
||||
<li class="d-flex align-items-center mb-2">
|
||||
<i class="fas fa-circle-check text-success me-2"></i>
|
||||
<span>{% trans "Read:" %}<span class="fw-bold ms-1">{{read_count}}</span></span>
|
||||
</li>
|
||||
<li class="d-flex align-items-center">
|
||||
<i class="fas fa-bell text-primary me-2"></i>
|
||||
<span>{% trans "Unread:" %} <span class="fw-bold ms-1">{{unread_count}}</span></span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<div id="loading-indicator" class="spinner-border text-primary d-none position-fixed bottom-0 end-0 m-3" role="status">
|
||||
<span class="visually-hidden">Loading...</span>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@ -1,6 +1,9 @@
|
||||
{% extends 'base.html' %}
|
||||
{% load i18n %}
|
||||
{% load tenhal_tag %}
|
||||
{% block title %}
|
||||
{% trans "Aging Inventory" %}
|
||||
{% endblock title %}
|
||||
{% block content %}
|
||||
<div class="main-content flex-grow-1 container-fluid mt-4 mb-3">
|
||||
<div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center mb-5 pb-3 border-bottom">
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
{% extends 'base.html' %}
|
||||
{% load i18n %}
|
||||
{% block title %}
|
||||
{% trans "Sales Dashboard" %}
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<div class="main-content flex-grow-1 container-fluid mt-4 mb-3">
|
||||
<div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center mb-5 pb-3 border-bottom">
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
{% extends 'base.html' %}
|
||||
{% load i18n static %}
|
||||
{% block title %}Haikal Bot{% endblock %}
|
||||
{% block title %}{% trans "Haikal Bot" %}{% endblock %}
|
||||
{% block content %}
|
||||
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/PapaParse/5.3.2/papaparse.min.js"></script>
|
||||
|
||||
@ -495,8 +495,23 @@
|
||||
title="{% trans 'Logged in as ' %}{{ request.user.username }}">
|
||||
{% trans 'Hello, ' %}{{ name_to_display }}
|
||||
</h6>
|
||||
|
||||
{% endwith %}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="navbar-logo ">
|
||||
|
||||
<div class="d-flex align-items-center">
|
||||
|
||||
<small class="text-gray-600 ms-2 d-none d-sm-block fs-9"
|
||||
data-bs-toggle="tooltip"
|
||||
data-bs-placement="bottom"
|
||||
>
|
||||
{% now "l, F j, Y g:i A" %}
|
||||
</small>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<ul class="navbar-nav navbar-nav-icons flex-row gap-2" hx-boost="false">
|
||||
@ -650,19 +665,19 @@
|
||||
</hr>
|
||||
<div class="px-3">
|
||||
<a class="btn btn-sm btn-phoenix-danger d-flex flex-center w-100"
|
||||
href="{% url 'account_logout' %}"> <span class="fas fa-power-off me-2"></span>{% trans 'Sign Out' %}</a>
|
||||
href="{% url 'account_logout' %}"> <i class="fa-solid fa-right-from-bracket me-2"></i></span>{% trans 'Sign Out' %}</a>
|
||||
</div>
|
||||
<div class="my-2 text-center fw-bold fs-10 text-body-quaternary">
|
||||
<a class="text-body-quaternary me-1" href="">{% trans 'Privacy policy' %}</a>•<a class="text-body-quaternary mx-1" href="">{% trans 'Terms' %}</a>•<a class="text-body-quaternary ms-1" href="">Cookies</a>
|
||||
<a class="text-body-quaternary me-1" href="">{% trans 'Privacy policy' %}</a>•<a class="text-body-quaternary mx-1" href="">{% trans 'Terms' %}</a>•<a class="text-body-quaternary ms-1" href="">{% trans "Cookies" %}</a>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="px-3">
|
||||
<a class="btn btn-phoenix-succes d-flex flex-center w-100"
|
||||
href="{% url 'account_login' %}"> <span class="me-2" data-feather="log-in"></span>{% trans 'Sign In' %}</a>
|
||||
href="{% url 'account_login' %}"> <i class="fa-solid fa-right-to-bracket me-2"></i>{% trans 'Sign In' %}</a>
|
||||
</div>
|
||||
<div class="px-3">
|
||||
<a class="btn btn-phoenix-primary d-flex flex-center w-100"
|
||||
href="{% url 'account_signup' %}"> <span class="me-2" data-feather="user-plus"></span>{% trans 'Sign Up' %}</a>
|
||||
href="{% url 'account_signup' %}"> <i class="fa-solid fa-user-plus"></i>{% trans 'Sign Up' %}</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
@ -1,6 +1,9 @@
|
||||
{% extends "base.html" %}
|
||||
{% load i18n %}
|
||||
{% load custom_filters %}
|
||||
{% block title %}
|
||||
{% trans "Car list" %}
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<div class="row-fluid p-2">
|
||||
<!-- Display Validation Errors -->
|
||||
|
||||
@ -2,6 +2,9 @@
|
||||
{% load i18n %}
|
||||
{% load static %}
|
||||
{% load custom_filters %}
|
||||
{% block title %}
|
||||
{% trans "Track Inventory" %}
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<div class="container-fluid px-4 py-4">
|
||||
<div class="row g-4">
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>transfer</title>
|
||||
<title>{% trans "transfer" %}</title>
|
||||
<!-- Bootstrap CSS -->
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css"
|
||||
rel="stylesheet">
|
||||
|
||||
@ -25,7 +25,6 @@
|
||||
<th class="sort white-space-nowrap align-middle" scope="col">{% trans "Name" %}</th>
|
||||
<th class="sort white-space-nowrap align-middle" scope="col">{% trans "Unit of Measure" %}</th>
|
||||
<th class="sort white-space-nowrap align-middle" scope="col">{% trans "Taxable" %}</th>
|
||||
<th class="sort white-space-nowrap align-middle" scope="col">{% trans "Account" %}</th>
|
||||
<th class="sort white-space-nowrap align-middle" scope="col">{% trans "Action" %}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
@ -36,7 +35,6 @@
|
||||
<td class="align-middle product white-space-nowrap">{{ service.get_local_name|default:service.name }}</td>
|
||||
<td class="align-middle product white-space-nowrap">{{ service.get_uom_display }}</td>
|
||||
<td class="align-middle product white-space-nowrap">{{ service.taxable|yesno }}</td>
|
||||
<td class="align-middle product white-space-nowrap">{{ service.item.co }}</td>
|
||||
<td class="align-middle white-space-nowrap text-start">
|
||||
{% if perms.inventory.add_additionalservices %}
|
||||
<div class="btn-reveal-trigger position-static">
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
{% load i18n %}
|
||||
{% load crispy_forms_filters %}
|
||||
{% block title %}
|
||||
{% trans "Bill" %}
|
||||
{% trans "Bill Update" %}
|
||||
{% endblock title %}
|
||||
{% block content %}
|
||||
<div class="row my-4">
|
||||
|
||||
@ -2,7 +2,6 @@
|
||||
{% load i18n %}
|
||||
{% load crispy_forms_filters %}
|
||||
{% block title %}
|
||||
{# Check if an 'object' exists in the context #}
|
||||
{% if object %}
|
||||
{% trans 'Update Account' %}
|
||||
{% else %}
|
||||
@ -10,35 +9,39 @@
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<div class="row justify-content-center mt-5 mb-3">
|
||||
<main class="d-flex align-items-center justify-content-center min-vh-80 py-5">
|
||||
<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 ">
|
||||
{% if account.created %}
|
||||
{{ _("Edit Account") }}
|
||||
<div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
|
||||
<div class="card-header bg-gradient py-4 border-0 rounded-top-4">
|
||||
<h3 class="mb-0 fs-4 fw-bold text-center">
|
||||
{% if object %}
|
||||
{% trans "Update Account" %}
|
||||
<i class="fa-solid fa-edit ms-2"></i>
|
||||
{% else %}
|
||||
{{ _("Add Account") }}
|
||||
{% trans "Add New Account" %}
|
||||
<i class="fa-solid fa-book ms-2"></i>
|
||||
{% endif %}
|
||||
<i class="fa-solid fa-book ms-2 text-primary"></i>
|
||||
</h3>
|
||||
</div>
|
||||
<div class="card-body bg-light-subtle">
|
||||
<div class="card-body p-4 p-md-5">
|
||||
<form method="post" class="form" novalidate>
|
||||
{% csrf_token %}
|
||||
{{ form|crispy }}
|
||||
{% for error in form.errors %}<div class="text-danger">{{ error }}</div>{% endfor %}
|
||||
<hr class="my-2">
|
||||
<hr class="my-4">
|
||||
<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">
|
||||
<i class="saveBtnIcon fa-solid fa-floppy-disk me-1"></i>{{ _("Save") }}
|
||||
<button class="btn btn-phoenix-primary btn-lg me-md-2" type="submit">
|
||||
<i class="fa-solid fa-floppy-disk me-1"></i>
|
||||
{% trans "Save" %}
|
||||
</button>
|
||||
<a href="{% url 'account_list' request.dealer.slug url_kwargs.coa_pk %}"
|
||||
class="btn btn-lg btn-phoenix-secondary"><i class="fa-solid fa-ban me-1"></i>{% trans "Cancel" %}</a>
|
||||
class="btn btn-phoenix-secondary btn-lg">
|
||||
<i class="fa-solid fa-ban me-1"></i>
|
||||
{% trans "Cancel" %}
|
||||
</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!---->
|
||||
{% endblock %}
|
||||
</main>
|
||||
{% endblock %}
|
||||
@ -2,23 +2,40 @@
|
||||
{% load i18n %}
|
||||
{% load static %}
|
||||
{% load django_ledger %}
|
||||
|
||||
{% block title %}
|
||||
{% trans "Delete Journal Entry" %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-6">
|
||||
<form action="{% url 'journalentry_delete' request.dealer.slug journal_entry.pk %}"
|
||||
method="post">
|
||||
{% csrf_token %}
|
||||
<div class="card">
|
||||
<div class="card-body text-center">
|
||||
<h5 class="card-title fw-light">{% trans "Are you sure you want to delete?" %}</h5>
|
||||
</div>
|
||||
<div class="card-body text-center">
|
||||
<a href="{% url 'journalentry_list' request.dealer.slug journal_entry.ledger.pk %}"
|
||||
class="btn btn-phoenix-primary me-2">{% trans 'Go Back' %}</a>
|
||||
<button type="submit" class="btn btn-phoenix-danger">{% trans 'Delete' %}</button>
|
||||
<main class="container py-5">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-lg-6 col-md-8">
|
||||
<div class="card shadow-lg border-0 rounded-4">
|
||||
<div class="card-body p-5 text-center">
|
||||
<div class="mb-4">
|
||||
<i class="fas fa-exclamation-triangle fa-4x text-danger"></i>
|
||||
</div>
|
||||
<h2 class="h3 fw-bold mb-3">{% trans "Confirm Deletion" %}</h2>
|
||||
<p class="lead text-muted mb-4">
|
||||
{% blocktrans %}Are you sure you want to delete the journal entry? This action cannot be undone.{% endblocktrans %}
|
||||
</p>
|
||||
|
||||
<div class="d-flex justify-content-center gap-3">
|
||||
<a href="{% url 'journalentry_list' request.dealer.slug journal_entry.ledger.pk %}"
|
||||
class="btn btn-outline-secondary btn-lg rounded-pill px-5 fw-bold">
|
||||
{% trans 'Go Back' %}
|
||||
</a>
|
||||
<form action="{% url 'journalentry_delete' request.dealer.slug journal_entry.pk %}" method="post" class="d-inline">
|
||||
{% csrf_token %}
|
||||
<button type="submit" class="btn btn-danger btn-lg rounded-pill px-5 fw-bold">
|
||||
{% trans 'Delete' %}
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
</main>
|
||||
{% endblock %}
|
||||
@ -5,7 +5,7 @@
|
||||
{{ _("Create Journal Entry") }}
|
||||
{% endblock title %}
|
||||
{% block content %}
|
||||
<main class="d-flex align-items-center justify-content-center min-vh-100 py-5">
|
||||
<main class="d-flex align-items-center justify-content-center min-vh-80 py-5">
|
||||
<div class="col-12 col-sm-10 col-md-8 col-lg-6 col-xl-5">
|
||||
<div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
|
||||
<div class="card-header bg-gradient py-4 border-0 rounded-top-4">
|
||||
|
||||
@ -104,13 +104,13 @@
|
||||
</button>
|
||||
<div class="dropdown-menu dropdown-menu-end py-2">
|
||||
{% if perms.django_ledger.view_transactionmodel %}
|
||||
<a class="dropdown-item"
|
||||
<a class="dropdown-item text-success"
|
||||
href="{% url 'journalentry_transactions' request.dealer.slug je.pk %}">{% trans "View" %}</a>
|
||||
<a class="dropdown-item"
|
||||
<a class="dropdown-item text-info"
|
||||
href="{% url 'journalentry_txs' request.dealer.slug je.entity_slug je.ledger_id je.pk %}">{% trans "Transactions" %}</a>
|
||||
{% endif %}
|
||||
{% if je.can_delete and perms.django_ledger.delete_journalentrymodel %}
|
||||
<a class="dropdown-item"
|
||||
<a class="dropdown-item text-danger"
|
||||
href="{% url 'journalentry_delete' request.dealer.slug je.pk %}">{% trans "Delete" %}</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
{% extends "base.html" %}
|
||||
{% load i18n static %}
|
||||
{% block title %}
|
||||
{{ _("Transactions") }}
|
||||
{{ _("Journal Entry Detail") }}
|
||||
{% endblock title %}
|
||||
{% block content %}
|
||||
<div class="row mt-4">
|
||||
|
||||
@ -2,6 +2,9 @@
|
||||
{% load i18n %}
|
||||
{% load static %}
|
||||
{% load crispy_forms_tags %}
|
||||
{% block title %}
|
||||
{% trans "Transactions" %}
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-12">
|
||||
|
||||
@ -2,23 +2,38 @@
|
||||
{% load i18n %}
|
||||
{% load static %}
|
||||
{% load django_ledger %}
|
||||
{% block title %}
|
||||
{% trans "Delete Ledger Entry" %}
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-6">
|
||||
<form action="{% url 'ledger-delete' dealer_slug=request.dealer.slug entity_slug=request.dealer.entity.slug ledger_pk=ledger_model.uuid %}"
|
||||
method="post">
|
||||
{% csrf_token %}
|
||||
<div class="card">
|
||||
<div class="card-body text-center">
|
||||
<h5 class="card-title fw-light">{{ ledger_model.get_delete_message }}</h5>
|
||||
</div>
|
||||
<div class="card-body text-center">
|
||||
<a href="{% url 'ledger_list' request.dealer.slug request.dealer.entity.slug %}"
|
||||
class="btn btn-phoenix-primary me-2">{% trans 'Go Back' %}</a>
|
||||
<button type="submit" class="btn btn-phoenix-danger">{% trans 'Delete' %}</button>
|
||||
<main class="container py-5">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-lg-6 col-md-8">
|
||||
<div class="card shadow-lg border-0 rounded-4">
|
||||
<div class="card-body p-5 text-center">
|
||||
<div class="mb-4">
|
||||
<i class="fas fa-exclamation-triangle fa-4x text-danger"></i>
|
||||
</div>
|
||||
<h2 class="h3 fw-bold mb-3">{% trans "Confirm Deletion" %}</h2>
|
||||
<p class="lead text-muted mb-4">
|
||||
{{ ledger_model.get_delete_message }}
|
||||
</p>
|
||||
<div class="d-flex justify-content-center gap-3">
|
||||
<a href="{% url 'ledger_list' request.dealer.slug request.dealer.entity.slug %}"
|
||||
class="btn btn-outline-secondary btn-lg rounded-pill px-5 fw-bold">
|
||||
{% trans 'Go Back' %}
|
||||
</a>
|
||||
<form action="{% url 'ledger-delete' dealer_slug=request.dealer.slug entity_slug=request.dealer.entity.slug ledger_pk=ledger_model.uuid %}"
|
||||
method="post" class="d-inline">
|
||||
{% csrf_token %}
|
||||
<button type="submit" class="btn btn-danger btn-lg rounded-pill px-5 fw-bold">
|
||||
{% trans 'Delete' %}
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
</main>
|
||||
{% endblock %}
|
||||
@ -2,6 +2,9 @@
|
||||
{% load i18n %}
|
||||
{% load static %}
|
||||
{% load django_ledger %}
|
||||
{% block title %}
|
||||
{% trans 'ledger Detail' %}
|
||||
{% endblock title %}
|
||||
{% block content %}
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
|
||||
@ -255,7 +255,7 @@
|
||||
<td class="fs-9">{{ car.mileage }}</td>
|
||||
<td class="fs-9">{{ car.stock_type|capfirst }}</td>
|
||||
<td class="fs-9">{{ car.created_at|date }}</td>
|
||||
<td class="fs-9">{{ car.invoice.date_paid|date|default_if_none:"-" }}</td>
|
||||
<td class="fs-9">{{ car.invoice.sale_orders.first.order_date|date|default_if_none:"-" }}</td>
|
||||
<td class="fs-9 text-nowrap">
|
||||
<span>{{ car.cost_price }}<span class="icon-saudi_riyal"></span></span>
|
||||
</td>
|
||||
|
||||
@ -2,6 +2,9 @@
|
||||
{% load i18n %}
|
||||
{% load static %}
|
||||
{% load django_ledger %}
|
||||
{% block title %}
|
||||
{% trans "Delete Purchase Order" %}
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-6">
|
||||
|
||||
@ -3,6 +3,9 @@
|
||||
{% load static %}
|
||||
{% load django_ledger %}
|
||||
{% load custom_filters %}
|
||||
{% block title %}
|
||||
{% trans "Purchase Order Detail" %}
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<div class="container-fluid mt-4">
|
||||
<div class="row g-1">
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<!-- po_list.html -->
|
||||
{% extends "base.html" %}
|
||||
{% load i18n static %}
|
||||
{% block title %}Purchase Orders{% endblock %}
|
||||
{% block title %}{% trans "Purchase Orders" %}{% endblock %}
|
||||
{% block content %}
|
||||
{% if purchase_orders or request.GET.q %}
|
||||
<div class="row mt-4">
|
||||
|
||||
@ -5,6 +5,9 @@
|
||||
{% load custom_filters %}
|
||||
{% load widget_tweaks %}
|
||||
{% load crispy_forms_tags %}
|
||||
{%block title %}
|
||||
{% trans "Update Purchase Order" %}
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<div class="container-fluid py-4">
|
||||
<div class="row g-4">
|
||||
|
||||
@ -1,12 +1,15 @@
|
||||
{% extends "base.html" %}
|
||||
{% load i18n %}
|
||||
{% block title %}
|
||||
{% trans "Upload Cars" %}
|
||||
{%endblock%}
|
||||
{% block content %}
|
||||
<div class="mt-4">
|
||||
<h1>
|
||||
<i class="fa-solid fa-cart-shopping me-1"></i>{{ po.po_number }}
|
||||
</h1>
|
||||
<div class="d-flex align-items-center">
|
||||
<h4>Status:</h4>
|
||||
<h4>{% trans "Status:" %}</h4>
|
||||
{% comment %} Apply appropriate text color based on po.po_status {% endcomment %}
|
||||
{% if po.po_status == 'draft' %}
|
||||
<h4 class="ms-2 text-warning mb-0">{{ po.po_status|capfirst }}</h4>
|
||||
|
||||
@ -135,7 +135,7 @@
|
||||
</div>
|
||||
<div>
|
||||
<div class="col-md-10 ms-4 needs-validation {% if not items or not customer_count %}d-none{% endif %}">
|
||||
<div class="card shadow-lg border-0 rounded-4 overflow-hidden animate__animated animate__fadeInUp">
|
||||
<div class="card shadow-lg border-0 rounded-4 animate__animated animate__fadeInUp">
|
||||
<div class="card-header bg-gradient py-4 border-0 rounded-top-4">
|
||||
<h3 class="mb-0 fs-4 text-center">
|
||||
{% trans "Create Quotation" %}<i class="fa-regular fa-file-lines ms-2"></i>
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Quotation</title>
|
||||
<title>{% trans "Quotation" %}</title>
|
||||
<link href="{% static 'css/theme.min.css' %}"
|
||||
type="text/css"
|
||||
rel="stylesheet"
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
{% load static %}
|
||||
{% load i18n %}
|
||||
{% block title %}
|
||||
{{ _("Sale Order") }}
|
||||
{{ _("Create Sale Order") }}
|
||||
{% endblock title %}
|
||||
{% block content %}
|
||||
<main class="d-flex align-items-center justify-content-center min-vh-80 py-5">
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Sale Order</title>
|
||||
<title>{% trans "Sale Order" %}</title>
|
||||
<!-- Bootstrap CSS -->
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css"
|
||||
rel="stylesheet">
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
{% load static %}
|
||||
{% load i18n %}
|
||||
{% block title %}
|
||||
{{ _("Invoice") }}
|
||||
{{ _("Create Invoice") }}
|
||||
{% endblock title %}
|
||||
{% block content %}
|
||||
<main class="d-flex align-items-center justify-content-center min-vh-80 py-5">
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Invoice</title>
|
||||
<title>{% trans "Invoice" %}</title>
|
||||
<link href="{% static 'css/theme.min.css' %}"
|
||||
type="text/css"
|
||||
rel="stylesheet"
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
{% extends 'base.html' %}
|
||||
{% load i18n static custom_filters crispy_forms_filters %}
|
||||
{% block title %}
|
||||
{% trans 'Profile' %}
|
||||
{% trans 'Staff Profile' %}
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<div class="container-fluid py-4">
|
||||
|
||||
@ -2,6 +2,9 @@
|
||||
{% load static %}
|
||||
{% load crispy_forms_tags %}
|
||||
{% load i18n %}
|
||||
{%block title%}
|
||||
{% trans "Raise Ticket" %}
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<main class="d-flex align-items-center justify-content-center min-vh-80 py-5">
|
||||
<div class="col-12 col-sm-10 col-md-8 col-lg-6 col-xl-5">
|
||||
|
||||
@ -82,12 +82,36 @@
|
||||
<span class="text-muted small d-block">{{ ticket.created_at|time:"H:i" }}</span>
|
||||
</td>
|
||||
<td class="text-end pe-4">
|
||||
<a href="{% url 'ticket_detail' request.dealer.slug ticket.id %}"
|
||||
{% comment %} <a href="{% url 'ticket_detail' request.dealer.slug ticket.id %}"
|
||||
class="btn btn-phoenix-primary btn-sm">
|
||||
<i class="fa-solid fa-eye me-1"></i>
|
||||
{% trans "View" %}
|
||||
</a>
|
||||
</a> {% endcomment %}
|
||||
|
||||
<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 'ticket_detail' request.dealer.slug ticket.id %}">
|
||||
<i class="fa fa-eye me-2"></i>{% trans "View" %}
|
||||
</a>
|
||||
<a class="dropdown-item"
|
||||
href="{% url 'ticket_update' ticket.id%}">
|
||||
<i class="fa fa-edit me-2"></i>{% trans "Update" %}
|
||||
</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
{% empty %}
|
||||
<tr>
|
||||
|
||||
@ -2,19 +2,41 @@
|
||||
{% load static %}
|
||||
{% load crispy_forms_tags %}
|
||||
{% load i18n %}
|
||||
{% block title %}
|
||||
{% trans "Update Ticket" %} #{{ ticket.id }}
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<div class="card">
|
||||
<div class="card-header bg-primary text-white">
|
||||
<h2 class="h4 mb-0">{% trans "Update Ticket" %}</h2>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<form method="post">
|
||||
{% csrf_token %}
|
||||
{{ form|crispy }}
|
||||
<button type="submit" class="btn btn-primary">{% trans "Save" %}</button>
|
||||
<a href="{% url 'ticket_list' request.dealer.slug %}"
|
||||
class="btn btn-secondary">{% trans "Cancel" %}</a>
|
||||
</form>
|
||||
<div class="container py-5">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-lg-8 col-md-10">
|
||||
<div class="card shadow-lg border-0 rounded-4">
|
||||
<div class="card-body p-5">
|
||||
<header class="text-center mb-5">
|
||||
<h1 class="display-6 fw-bold">
|
||||
<i class="fas fa-ticket-alt text-primary me-2"></i>
|
||||
{% trans "Update Ticket" %}
|
||||
</h1>
|
||||
<p class="text-muted mt-2">
|
||||
{% trans "Make changes to the ticket details below and save." %}
|
||||
</p>
|
||||
</header>
|
||||
<form method="post" class="needs-validation" novalidate>
|
||||
{% csrf_token %}
|
||||
{{ form|crispy }}
|
||||
<hr class="my-4">
|
||||
<div class="d-flex justify-content-between">
|
||||
<button type="submit" class="btn btn-primary btn-lg rounded-pill px-5 fw-bold">
|
||||
{% trans "Save Changes" %}
|
||||
</button>
|
||||
<a href="{% url 'ticket_list' request.dealer.slug %}"
|
||||
class="btn btn-outline-secondary btn-lg rounded-pill px-5 fw-bold">
|
||||
{% trans "Cancel" %}
|
||||
</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
@ -1,5 +1,5 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}{{ tour.name }} - Interactive Guide{% endblock %}
|
||||
{% block title %}{{ tour.name }} - {% trans "Interactive Guide" %}{% endblock %}
|
||||
{% block content %}
|
||||
<div class="container my-4">
|
||||
<h1>{{ tour.name }}</h1>
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}Interactive Guides{% endblock %}
|
||||
{% block title %}{% trans "Interactive Guides" %}{% endblock %}
|
||||
{% block content %}
|
||||
<div class="container my-4">
|
||||
<h1>{% trans "Interactive Guides" %}</h1>
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
{% load static %}
|
||||
{% load i18n %}
|
||||
{% block title %}
|
||||
{{ user_.name }}
|
||||
{{user_.fullname}}
|
||||
{% endblock title %}
|
||||
{% block content %}
|
||||
<div class="container py-4">
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
{% load i18n %}
|
||||
{% load crispy_forms_filters %}
|
||||
{% block title %}
|
||||
{% trans "Group" %}
|
||||
{% trans "Groups" %}
|
||||
{% endblock title %}
|
||||
{% block content %}
|
||||
<main class="d-flex align-items-center justify-content-center min-vh-80 py-5 ">
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
{% extends 'base.html' %}
|
||||
{% load i18n %}
|
||||
{% block title%}
|
||||
{% trans "Change Password" %}
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<main class="d-flex align-items-center justify-content-center min-vh-80 py-5">
|
||||
<div class="col-12 col-sm-10 col-md-8 col-lg-6 col-xl-5">
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user