changed the most of the forms and pricing_page
This commit is contained in:
parent
81c69f5858
commit
27d6cce9f3
4
.vscode/launch.json
vendored
4
.vscode/launch.json
vendored
@ -8,13 +8,13 @@
|
||||
"name": "Python Debugger: Django",
|
||||
"type": "debugpy",
|
||||
"request": "launch",
|
||||
"args": [
|
||||
"args": [
|
||||
"runserver",
|
||||
"0.0.0.0:8000"
|
||||
],
|
||||
"django": true,
|
||||
"autoStartBrowser": false,
|
||||
"program": "${workspaceFolder}/manage.py"
|
||||
"program": "C:\\Users\\user\\Desktop\\haikal_projects\\venv\\bin\\activate & ${workspaceFolder}/manage.py"
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -4,7 +4,7 @@ from django.conf.urls.static import static
|
||||
from django.conf import settings
|
||||
from django.conf.urls.i18n import i18n_patterns
|
||||
from inventory import views
|
||||
from debug_toolbar.toolbar import debug_toolbar_urls
|
||||
# from debug_toolbar.toolbar import debug_toolbar_urls
|
||||
|
||||
|
||||
# import debug_toolbar
|
||||
@ -17,7 +17,7 @@ urlpatterns = [
|
||||
path("api-auth/", include("rest_framework.urls")),
|
||||
path("api/", include("api.urls")),
|
||||
# path('dj-rest-auth/', include('dj_rest_auth.urls')),
|
||||
] + debug_toolbar_urls()
|
||||
]# + debug_toolbar_urls()
|
||||
urlpatterns += i18n_patterns(
|
||||
path("admin/", admin.site.urls),
|
||||
path("switch_language/", views.switch_language, name="switch_language"),
|
||||
|
||||
@ -206,7 +206,7 @@ from .tasks import create_accounts_for_make, create_user_dealer, send_email
|
||||
# djago easy audit log
|
||||
from easyaudit.models import RequestEvent, CRUDEvent, LoginEvent
|
||||
from django_q.tasks import async_task
|
||||
from django.db.models import Prefetch
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
|
||||
@ -1150,7 +1150,7 @@ class CarListView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
|
||||
|
||||
def get_queryset(self):
|
||||
dealer = get_user_type(self.request)
|
||||
qs = super().get_queryset().prefetch_related("id_car_make", "id_car_model", "id_car_trim","finances","colors")
|
||||
qs = super().get_queryset()
|
||||
qs = qs.filter(dealer=dealer)
|
||||
status = self.request.GET.get("status")
|
||||
search = self.request.GET.get("search")
|
||||
@ -1202,193 +1202,8 @@ def inventory_stats_view(request, dealer_slug):
|
||||
"inventory/inventory_stats.html" template.
|
||||
:rtype: HttpResponse
|
||||
"""
|
||||
# cars = (
|
||||
# models.Car.objects
|
||||
# .filter(dealer=request.dealer)
|
||||
# .select_related(
|
||||
# "id_car_make",
|
||||
# "id_car_model",
|
||||
# "id_car_trim__id_car_serie__id_car_model__id_car_make"
|
||||
# )
|
||||
# .only(
|
||||
# "id",
|
||||
# "id_car_make__id_car_make",
|
||||
# "id_car_make__slug",
|
||||
# "id_car_make__name",
|
||||
# "id_car_make__arabic_name",
|
||||
# "id_car_model__id_car_model",
|
||||
# "id_car_model__slug",
|
||||
# "id_car_model__name",
|
||||
# "id_car_model__arabic_name",
|
||||
# "id_car_trim__id_car_trim",
|
||||
# "id_car_trim__slug",
|
||||
# "id_car_trim__name",
|
||||
# "id_car_trim__id_car_serie__id_car_model__id_car_make",
|
||||
# "id_car_trim__id_car_serie__id_car_model__id_car_model",
|
||||
# )
|
||||
# .order_by('id_car_make', 'id_car_model', 'id_car_trim')
|
||||
# )
|
||||
|
||||
# # Get counts in optimized queries
|
||||
# total_cars = cars.count()
|
||||
# reserved_cars = models.CarReservation.objects.filter(
|
||||
# car__dealer=request.dealer
|
||||
# ).count()
|
||||
|
||||
# # Prefetch related data if needed for additional fields
|
||||
# cars = cars.prefetch_related(
|
||||
# Prefetch('colors', queryset=models.CarColors.objects.select_related('exterior', 'interior'))
|
||||
# )
|
||||
|
||||
# # Get distinct makes, models, trims in database-compatible way
|
||||
# makes = (
|
||||
# cars.order_by('id_car_make')
|
||||
# .values_list('id_car_make', flat=True)
|
||||
# .distinct()
|
||||
# )
|
||||
|
||||
# _models = (
|
||||
# cars.order_by('id_car_model')
|
||||
# .values_list('id_car_model', flat=True)
|
||||
# .distinct()
|
||||
# )
|
||||
|
||||
# trims = (
|
||||
# cars.order_by('id_car_trim')
|
||||
# .values_list('id_car_trim', flat=True)
|
||||
# .distinct()
|
||||
# )
|
||||
|
||||
# # Get counts by make/model/trim
|
||||
# make_counts = dict(
|
||||
# cars.values_list('id_car_make')
|
||||
# .annotate(count=Count('id'))
|
||||
# .order_by('id_car_make')
|
||||
# )
|
||||
|
||||
# model_counts = dict(
|
||||
# cars.values_list('id_car_model')
|
||||
# .annotate(count=Count('id'))
|
||||
# .order_by('id_car_model')
|
||||
# )
|
||||
|
||||
# trim_counts = dict(
|
||||
# cars.values_list('id_car_trim')
|
||||
# .annotate(count=Count('id'))
|
||||
# .order_by('id_car_trim')
|
||||
# )
|
||||
|
||||
# # Build inventory structure
|
||||
# inventory = {}
|
||||
|
||||
# # Process makes
|
||||
# make_objects = {
|
||||
# m.id_car_make: m for m in
|
||||
# models.CarMake.objects.filter(id_car_make__in=makes)
|
||||
# .only('id_car_make', 'slug', 'name', 'arabic_name')
|
||||
# }
|
||||
|
||||
# for make_id in makes:
|
||||
# if not make_id:
|
||||
# continue
|
||||
|
||||
# make_obj = make_objects.get(make_id)
|
||||
# if not make_obj:
|
||||
# continue
|
||||
|
||||
# inventory[make_id] = {
|
||||
# "make_id": make_id,
|
||||
# "slug": make_obj.slug,
|
||||
# "make_name": make_obj.get_local_name(),
|
||||
# "total_cars": make_counts.get(make_id, 0),
|
||||
# "models": {},
|
||||
# }
|
||||
|
||||
# # Process models
|
||||
# model_objects = {
|
||||
# m.id_car_model: m for m in
|
||||
# models.CarModel.objects.filter(id_car_model__in=_models)
|
||||
# .select_related('id_car_make')
|
||||
# .only('id_car_model', 'slug', 'name', 'arabic_name', 'id_car_make')
|
||||
# }
|
||||
|
||||
# for model_id in _models:
|
||||
# if not model_id:
|
||||
# continue
|
||||
|
||||
# model_obj = model_objects.get(model_id)
|
||||
# if not model_obj:
|
||||
# continue
|
||||
|
||||
# make_id = model_obj.id_car_make.id_car_make
|
||||
# if make_id not in inventory:
|
||||
# continue
|
||||
|
||||
# inventory[make_id]["models"][model_id] = {
|
||||
# "model_id": model_id,
|
||||
# "slug": model_obj.slug,
|
||||
# "model_name": model_obj.get_local_name(),
|
||||
# "total_cars": model_counts.get(model_id, 0),
|
||||
# "trims": {},
|
||||
# }
|
||||
|
||||
# # Process trims
|
||||
# trim_objects = {
|
||||
# t.id_car_trim: t for t in
|
||||
# models.CarTrim.objects.filter(id_car_trim__in=trims)
|
||||
# .select_related('id_car_serie__id_car_model__id_car_make')
|
||||
# .only('id_car_trim', 'slug', 'name', 'id_car_serie__id_car_model__id_car_make')
|
||||
# }
|
||||
|
||||
# for trim_id in trims:
|
||||
# if not trim_id:
|
||||
# continue
|
||||
|
||||
# trim_obj = trim_objects.get(trim_id)
|
||||
# if not trim_obj:
|
||||
# continue
|
||||
|
||||
# make_id = trim_obj.id_car_serie.id_car_model.id_car_make.id_car_make
|
||||
# model_id = trim_obj.id_car_serie.id_car_model.id_car_model
|
||||
|
||||
# if make_id not in inventory or model_id not in inventory[make_id]["models"]:
|
||||
# continue
|
||||
|
||||
# inventory[make_id]["models"][model_id]["trims"][trim_id] = {
|
||||
# "trim_id": trim_id,
|
||||
# "slug": trim_obj.slug,
|
||||
# "trim_name": trim_obj.name,
|
||||
# "total_cars": trim_counts.get(trim_id, 0),
|
||||
# }
|
||||
|
||||
# # Convert to final structure
|
||||
# result = {
|
||||
# "total_cars": total_cars,
|
||||
# "reserved_cars": reserved_cars,
|
||||
# "makes": [
|
||||
# {
|
||||
# "make_id": make_data["make_id"],
|
||||
# "slug": make_data["slug"],
|
||||
# "make_name": make_data["make_name"],
|
||||
# "total_cars": make_data["total_cars"],
|
||||
# "models": [
|
||||
# {
|
||||
# "model_id": model_data["model_id"],
|
||||
# "slug": model_data["slug"],
|
||||
# "model_name": model_data["model_name"],
|
||||
# "total_cars": model_data["total_cars"],
|
||||
# "trims": list(model_data["trims"].values()),
|
||||
# }
|
||||
# for model_data in make_data["models"].values()
|
||||
# if model_data["model_id"] # Skip empty models
|
||||
# ],
|
||||
# }
|
||||
# for make_data in inventory.values()
|
||||
# if make_data["make_id"] # Skip empty makes
|
||||
# ],
|
||||
# }
|
||||
###############################################
|
||||
# # Base queryset for cars belonging to the dealer
|
||||
# Base queryset for cars belonging to the dealer
|
||||
cars = models.Car.objects.filter(dealer=request.dealer)
|
||||
|
||||
# Count for total, reserved, showroom, and unreserved cars
|
||||
@ -1628,18 +1443,6 @@ class CarDetailView(LoginRequiredMixin, PermissionRequiredMixin, DetailView):
|
||||
context_object_name = "car"
|
||||
permission_required = ["inventory.view_car"]
|
||||
|
||||
def get_queryset(self):
|
||||
qs = super().get_queryset()
|
||||
qs = qs.select_related(
|
||||
"id_car_make",
|
||||
"id_car_model",
|
||||
"id_car_trim",
|
||||
"colors",
|
||||
"finances",
|
||||
"vendor",
|
||||
"registrations"
|
||||
)
|
||||
return qs
|
||||
|
||||
class CarFinanceCreateView(LoginRequiredMixin, PermissionRequiredMixin, CreateView):
|
||||
"""
|
||||
@ -2718,11 +2521,6 @@ def vendorDetailView(request, dealer_slug,slug):
|
||||
:rtype: HttpResponse
|
||||
"""
|
||||
vendor = get_object_or_404(models.Vendor, slug=slug)
|
||||
dealer=vendor.dealer
|
||||
cars=Car.objects.filter(dealer=dealer,vendor=vendor)
|
||||
print(cars)
|
||||
|
||||
|
||||
return render(
|
||||
request, template_name="vendors/view_vendor.html", context={"vendor": vendor}
|
||||
)
|
||||
@ -4074,7 +3872,7 @@ class BankAccountDetailView(LoginRequiredMixin, PermissionRequiredMixin, DetailV
|
||||
template_name = "ledger/bank_accounts/bank_account_detail.html"
|
||||
context_object_name = "bank_account"
|
||||
permission_required = ["django_ledger.view_bankaccountmodel"]
|
||||
|
||||
|
||||
def get_queryset(self):
|
||||
dealer = get_object_or_404(models.Dealer, slug=self.kwargs["dealer_slug"])
|
||||
query=self.request.GET.get('q')
|
||||
@ -5543,6 +5341,7 @@ def PaymentCreateView(request, dealer_slug, pk):
|
||||
model = invoice if invoice else bill
|
||||
entity = dealer.entity
|
||||
form = forms.PaymentForm()
|
||||
breakpoint()
|
||||
if request.method == "POST":
|
||||
form = forms.PaymentForm(request.POST)
|
||||
|
||||
@ -5799,25 +5598,25 @@ class LeadListView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
|
||||
def get_queryset(self):
|
||||
dealer = get_object_or_404(models.Dealer, slug=self.kwargs["dealer_slug"])
|
||||
query = self.request.GET.get("q")
|
||||
qs = models.Lead.objects.select_related("staff","id_car_make","id_car_model","customer").filter(dealer=dealer).exclude(status="converted")
|
||||
|
||||
qs = models.Lead.objects.filter(dealer=dealer).exclude(status="converted")
|
||||
if query:
|
||||
qs = qs.filter(Q(first_name__icontains=query)
|
||||
| Q(last_name__icontains=query)
|
||||
| Q(id_car_make__name__icontains=query)
|
||||
| Q(id_car_model__name__icontains=query)
|
||||
| Q(email__icontains=query)
|
||||
| Q(phone_number__icontains=query)
|
||||
| Q(next_action__icontains=query)
|
||||
| Q(staff__name__icontains=query))
|
||||
|
||||
| Q(last_name__icontains=query)
|
||||
| Q(id_car_make__name__icontains=query)
|
||||
| Q(id_car_model__name__icontains=query)
|
||||
| Q(email__icontains=query)
|
||||
| Q(phone_number__icontains=query)
|
||||
| Q(next_action__icontains=query)
|
||||
| Q(staff__name__icontains=query))
|
||||
|
||||
if self.request.is_dealer:
|
||||
return qs
|
||||
if self.request.user.is_staff:
|
||||
staff = getattr(self.request.user.staffmember, "staff", None)
|
||||
return qs.filter(staff=staff)
|
||||
return models.Lead.objects.none()
|
||||
|
||||
|
||||
|
||||
|
||||
class LeadDetailView(LoginRequiredMixin, PermissionRequiredMixin, DetailView):
|
||||
"""
|
||||
@ -6886,9 +6685,9 @@ class OpportunityListView(LoginRequiredMixin,PermissionRequiredMixin, ListView):
|
||||
Q(customer__first_name__icontains=search)
|
||||
| Q(customer__last_name__icontains=search)
|
||||
| Q(customer__email__icontains=search)
|
||||
|
||||
|
||||
)
|
||||
|
||||
|
||||
|
||||
# Stage filter
|
||||
stage = self.request.GET.get("stage")
|
||||
@ -7307,7 +7106,7 @@ class ItemExpenseListView(LoginRequiredMixin, PermissionRequiredMixin, ListView)
|
||||
# def get_queryset(self):
|
||||
# dealer = get_user_type(self.request)
|
||||
# return dealer.entity.get_items_expenses()
|
||||
|
||||
|
||||
def get_queryset(self):
|
||||
dealer = get_user_type(self.request)
|
||||
query=self.request.GET.get('q')
|
||||
@ -10183,9 +9982,9 @@ class PurchaseOrderListView(LoginRequiredMixin, PermissionRequiredMixin, ListVie
|
||||
if query:
|
||||
qs=apply_search_filters(qs,query)
|
||||
return qs
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# def get_queryset(self):
|
||||
# dealer = get_user_type(self.request)
|
||||
# entity = dealer.entity
|
||||
@ -10319,28 +10118,11 @@ class BillModelActionMarkAsInReviewView(BaseBillActionView):
|
||||
class BillModelActionMarkAsApprovedView(BaseBillActionView):
|
||||
action_name = "mark_as_approved"
|
||||
|
||||
def get_redirect_url(self, dealer_slug, entity_slug, bill_pk, *args, **kwargs):
|
||||
if self.request.is_manager:
|
||||
messages.add_message(
|
||||
self.request,
|
||||
message="Bill updated successfully.",
|
||||
level=messages.SUCCESS,
|
||||
)
|
||||
return reverse("home",kwargs={"dealer_slug": dealer_slug})
|
||||
|
||||
return reverse(
|
||||
"bill-update",
|
||||
kwargs={
|
||||
"dealer_slug": dealer_slug,
|
||||
"entity_slug": entity_slug,
|
||||
"bill_pk": bill_pk,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class BillModelActionMarkAsPaidView(BaseBillActionView):
|
||||
action_name = "mark_as_paid"
|
||||
|
||||
|
||||
class BillModelActionDeleteView(BaseBillActionView):
|
||||
action_name = "mark_as_delete"
|
||||
|
||||
|
||||
@ -45,7 +45,7 @@
|
||||
}
|
||||
|
||||
.form-control, .form-select {
|
||||
text-align: center;
|
||||
/* text-align: center; */
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
{% load crispy_forms_filters %}
|
||||
|
||||
{% block content %}
|
||||
<div class="row justify-content-center">
|
||||
{% comment %} <div class="row justify-content-center">
|
||||
<div class="col-lg-6">
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-header bg-light py-3">
|
||||
@ -46,5 +46,63 @@
|
||||
</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 'Create Bill' %}
|
||||
</h3>
|
||||
</div>
|
||||
<div class="card-body bg-light-subtle">
|
||||
|
||||
<form action="{{ form_action_url }}" method="post" id="djl-bill-model-create-form-id">
|
||||
<div class="card-body">
|
||||
|
||||
{% csrf_token %}
|
||||
{% if po_model %}
|
||||
<div class="text-center mb-4">
|
||||
<h3 class="h5">{% trans 'Bill for' %} {{ po_model.po_number }}</h3>
|
||||
<p class="text-muted mb-3">{% trans 'Bill for' %} {{ po_model.po_title }}</p>
|
||||
<div class="d-flex flex-column gap-2">
|
||||
{% for itemtxs in po_itemtxs_qs %}
|
||||
<span class="badge bg-secondary">{{ itemtxs }}</span>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="mb-4">
|
||||
{{ form|crispy }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-footer bg-transparent">
|
||||
<div class="d-grid gap-2">
|
||||
<button type="submit"
|
||||
id="djl-bill-create-button"
|
||||
class="btn btn-phoenix-primary btn-lg">{% trans 'Create' %}
|
||||
</button>
|
||||
<a href="{{request.META.HTTP_REFERER}}"
|
||||
id="djl-bill-create-back-button"
|
||||
class="btn btn-phoenix-secondary">{% trans 'Cancel' %}</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!---->
|
||||
{% endblock %}
|
||||
@ -1,13 +1,14 @@
|
||||
{% extends 'base.html' %}
|
||||
{% load i18n static crispy_forms_filters %}
|
||||
|
||||
{% block title %}
|
||||
{# Check if an 'object' exists in the context #}
|
||||
{% if object %}
|
||||
{% trans 'Update Lead'%}
|
||||
{% trans 'Update Lead' %}
|
||||
{% else %}
|
||||
{% trans 'Add New Lead'%}
|
||||
{% trans 'Add New Lead' %}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block customcss %}
|
||||
<style>
|
||||
.htmx-indicator{
|
||||
@ -17,49 +18,68 @@
|
||||
.htmx-request .htmx-indicator{
|
||||
opacity:1;
|
||||
}
|
||||
.htmx-request.htmx-indicator{
|
||||
.htmx-request.htmx-indicator{ /* For elements with htmx-indicator itself becoming the target */
|
||||
opacity:1;
|
||||
}
|
||||
/* Style for the inline spinner if needed */
|
||||
.inline-spinner {
|
||||
width: 1.5rem; /* Adjust size */
|
||||
height: 1.5rem; /* Adjust size */
|
||||
vertical-align: middle;
|
||||
margin-left: 0.5rem; /* Space from the field */
|
||||
}
|
||||
</style>
|
||||
{% endblock customcss %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container-fluid">
|
||||
<h1>{% if object %}{{ _("Update Lead") }}{% else %}{{ _("Create New Lead") }}{% endif %}</h1>
|
||||
<div class="row mb-3">
|
||||
<div class="col-sm-6 col-md-8">
|
||||
<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-300 py-3 border-0 rounded-top-3">
|
||||
<h3 class="mb-0 fs-4 text-center">
|
||||
{% if object %}
|
||||
{{ _("Update Lead") }}
|
||||
{% else %}
|
||||
{{ _("Create New Lead") }}
|
||||
{% endif %}
|
||||
</h3>
|
||||
|
||||
</div>
|
||||
<div class="card-body bg-light-subtle">
|
||||
<form class="form" method="post">
|
||||
{% csrf_token %}
|
||||
{{ form|crispy }}
|
||||
|
||||
<form class="form" method="post">
|
||||
{% csrf_token %}
|
||||
{{ form|crispy }}
|
||||
<div class="d-flex justify-content-start">
|
||||
<button class="btn btn-sm btn-phoenix-success me-2" type="submit"><i class="fa-solid fa-floppy-disk me-1"></i>
|
||||
<!--<i class="bi bi-save"></i> -->
|
||||
{{ _("Save") }}
|
||||
</button>
|
||||
<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>
|
||||
<hr class="my-2">
|
||||
|
||||
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
|
||||
|
||||
<button class="btn btn-phoenix-success btn-lg me-md-2" type="submit">
|
||||
<i class="fa-solid fa-floppy-disk me-1"></i>
|
||||
{{ _("Save") }}
|
||||
</button>
|
||||
<a href="{{ request.META.HTTP_REFERER }}" class="btn btn-phoenix-danger btn-lg">
|
||||
<i class="fa-solid fa-ban me-1"></i>
|
||||
{% trans "Cancel" %}
|
||||
</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// First, create the spinner div (or use the existing one)
|
||||
const spinner = document.createElement('div');
|
||||
spinner.id = 'spinner';
|
||||
spinner.className = 'htmx-indicator spinner-border inline-spinner';
|
||||
spinner.setAttribute('role', 'status');
|
||||
spinner.className = 'htmx-indicator spinner-border text-primary inline-spinner';
|
||||
spinner.innerHTML = '<span class="visually-hidden">Loading...</span>';
|
||||
const targetFieldDiv = document.getElementById('div_id_id_car_model');
|
||||
|
||||
// Find the form field you want to place it next to
|
||||
// Replace 'id_your_field_name' with the actual ID of your form field
|
||||
const targetField = document.getElementById('div_id_id_car_model');
|
||||
|
||||
if (targetField) {
|
||||
// Insert the spinner right after the target field
|
||||
targetField.parentNode.insertBefore(spinner, targetField.nextSibling);
|
||||
if (targetFieldDiv) {
|
||||
targetFieldDiv.parentNode.insertBefore(spinner, targetFieldDiv.nextSibling);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
|
||||
{% block content %}
|
||||
<div class="row g-3 mt-4 mb-4">
|
||||
<h2 class="mb-2">{{ _("Leads")|capfirst }}</h2>
|
||||
<h2 class="mb-2">{{ _("Leads")|capfirst }}<li class="fas fa-bullhorn text-primary ms-2"></li></h2>
|
||||
<!-- Action Tracking Modal -->
|
||||
{% include "crm/leads/partials/update_action.html" %}
|
||||
|
||||
|
||||
@ -68,7 +68,7 @@
|
||||
<div class="row justify-content-center">
|
||||
<div class="col">
|
||||
<div class="d-flex justify-content-between mb-3">
|
||||
<h3>{{ _("Lead Tracking")}}</h3>
|
||||
<h3>{{ _("Lead Tracking")}}<li class="fas fa-bullhorn text-primary ms-2"></li></h3>
|
||||
</div>
|
||||
|
||||
<div class="row g-3">
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
{% block content %}
|
||||
<div class="row g-3 mt-4">
|
||||
<div class="col-12">
|
||||
<h2 class="mb-3">{{ _("Opportunities") }}</h2>
|
||||
<h2 class="mb-3">{{ _("Opportunities") }} <li class="fas fas fa-rocket text-primary ms-2"></li></h2>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center gap-3 mb-4">
|
||||
|
||||
@ -9,38 +9,38 @@
|
||||
{% trans 'Add New Customer'%}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
|
||||
{% block content %}
|
||||
|
||||
<link rel="stylesheet" href="{% static 'flags/sprite.css' %}">
|
||||
<div class="row">
|
||||
<div class="row mb-3">
|
||||
<div class="col-sm-6 col-md-8">
|
||||
<div class="d-sm-flex justify-content-between">
|
||||
<h3 class="mb-3">
|
||||
<div class="row justify-content-center mt-5 mb-3">
|
||||
|
||||
<div class="col-lg-8 col-md-10">
|
||||
<div class="card shadow-sm border-o 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 customer.created %}
|
||||
<i class="fa-solid fa-user"></i> {{ _("Edit Customer") }}
|
||||
{% else %}
|
||||
<i class="fa-solid fa-user"></i> {{ _("Add Customer") }}
|
||||
{% endif %}
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-sm-6 col-md-8">
|
||||
<div class="card-body bg-light-subtle">
|
||||
<form method="post" class="form row g-3 needs-validation" enctype="multipart/form-data" novalidate>
|
||||
{% csrf_token %}
|
||||
{{ form|crispy }}
|
||||
<div class="col-12">
|
||||
<button class="btn btn-sm btn-phoenix-success me-2" type="submit"><i class="fa-solid fa-floppy-disk me-1"></i>
|
||||
<!--<i class="bi bi-save"></i> -->
|
||||
{{ _("Save") }}
|
||||
</button>
|
||||
<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>
|
||||
</div>
|
||||
{% endblock %}
|
||||
<hr class="my-2">
|
||||
|
||||
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
|
||||
<button class="btn btn-phoenix-success btn-lg me-md-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>
|
||||
{%endblock %}
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
|
||||
{% block content %}
|
||||
<div class="row g-3 mt-4">
|
||||
<h2 class="mb-2">{{ _("Customers")|capfirst }}</h2>
|
||||
<h2 class="mb-2">{{ _("Customers")|capfirst }} <li class="fas fa-people-group text-primary ms-2"></li></h2>
|
||||
<div class="row g-3 justify-content-between mb-4">
|
||||
<div class="col-auto">
|
||||
<div class="d-md-flex justify-content-between">
|
||||
|
||||
@ -28,16 +28,27 @@
|
||||
aria-label="Close"></button>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="container-fluid m-0 {% if not vendor_exists %}disabled{% endif %}">
|
||||
<form method="post" id="carForm" class="form needs-validation" novalidate>
|
||||
{% csrf_token %}
|
||||
{% include 'partials/form_errors.html' %}
|
||||
|
||||
<!---->
|
||||
<div class="row justify-content-center mt-5 mb-3 {% if not vendor_exists %}disabled{% endif %}">
|
||||
|
||||
<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">
|
||||
<h3 class="mb-3">{% trans 'Add Car' %} <li class="fas fa-car-on text-primary ms-2"></li></h3>
|
||||
</h3>
|
||||
</div>
|
||||
<div class="card-body bg-light-subtle">
|
||||
<form method="post" id="carForm" class="form needs-validation" novalidate>
|
||||
{% csrf_token %}
|
||||
{% include 'partials/form_errors.html' %}
|
||||
<div class="d-flex flex-column">
|
||||
<div class="d-flex flex-column flex-sm-grow-1 p-0">
|
||||
<div class="row g-4">
|
||||
<h3 class="mb-3">{% trans 'Add Car' %}</h3>
|
||||
|
||||
<!-- VIN Section -->
|
||||
<div class="col-lg-12 col-xl-6">
|
||||
<div class="col-lg-12 ">
|
||||
<div class="card bg-body mb-3 shadow-sm">
|
||||
<div class="card-body">
|
||||
<!-- Improved VIN input with integrated buttons -->
|
||||
@ -144,7 +155,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="row g-3">
|
||||
<div class="col-xl-6">
|
||||
<div class="col-lg-12">
|
||||
<div class="row">
|
||||
<!--Vendor Field-->
|
||||
<div class="col-lg-4 col-xl-4">
|
||||
@ -202,28 +213,39 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--Save Buttons-->
|
||||
<div class="btn-group mt-3">
|
||||
<button type="submit"
|
||||
|
||||
|
||||
<hr class="my-2">
|
||||
<!--Save Buttons-->
|
||||
<div class="d-grid gap-2 d-md-flex justify-content-md-center mt-3">
|
||||
|
||||
<button type="submit"
|
||||
name="add_another"
|
||||
value="true"
|
||||
class="btn btn-phoenix-success me-1">
|
||||
class="btn btn-lg btn-phoenix-success md-me-2">
|
||||
{% trans "Save and Add Another" %}
|
||||
</button>
|
||||
<button type="submit"
|
||||
name="go_to_stats"
|
||||
value="true"
|
||||
class="btn btn-phoenix-primary">
|
||||
class="btn btn-lg btn-phoenix-primary">
|
||||
{% trans "Save and Go to Inventory" %}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
</form>
|
||||
|
||||
<!-- Modal sections remain largely unchanged -->
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<!-- Modal sections remain largely unchanged -->
|
||||
<!--Specification Modal-->
|
||||
<div class="modal fade"
|
||||
id="specificationsModal"
|
||||
@ -312,7 +334,11 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!---->
|
||||
<script>
|
||||
function getCookie(name) {
|
||||
let cookieValue = null;
|
||||
|
||||
@ -28,7 +28,7 @@
|
||||
<div class="container-fluid" id="projectSummary">
|
||||
<div class="row g-3 justify-content-between align-items-end mb-4">
|
||||
<div class="col-12 col-sm-auto">
|
||||
<h2 class="text-body-emphasis fw-bold mb-0">{{ _("Inventory") }}</h2>
|
||||
<h2 class="text-body-emphasis fw-bold mb-0">{{ _("Inventory") }}<li class="fas fa-store text-primary ms-2"></li></h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row g-3 justify-content-between align-items-end mb-2">
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
{% load i18n %}
|
||||
{% block title %}{{ _("Add New Expense") }}{% endblock title %}
|
||||
{% block content %}
|
||||
<div class="row">
|
||||
{% comment %} <div class="row">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-8">
|
||||
<div class="card">
|
||||
@ -13,9 +13,7 @@
|
||||
<form method="post" action="">
|
||||
{% csrf_token %}
|
||||
{{ form|crispy }}
|
||||
<!--<button type="submit" class="btn btn-primary">{% trans 'Save' %}</button> -->
|
||||
{% comment %} <button class="btn btn-sm btn-success me-1" type="submit"><i class="fa-solid fa-floppy-disk"></i>{{ _("Save") }}</button> {% endcomment %}
|
||||
|
||||
|
||||
<div class="d-flex justify-content-start">
|
||||
<button class="btn btn-sm btn-phoenix-success 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-sm btn-phoenix-danger"><i class="fa-solid fa-ban me-1"></i>{% trans "Cancel" %}</a>
|
||||
@ -26,6 +24,43 @@
|
||||
</div>
|
||||
</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">
|
||||
{{ _("Add Expense") }}
|
||||
</h3>
|
||||
</div>
|
||||
<div class="card-body bg-light-subtle">
|
||||
|
||||
<form method="post" action="">
|
||||
{% 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 content %}
|
||||
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
{% load i18n %}
|
||||
{% block title %}{{ _("Update Expense") }}{% endblock title %}
|
||||
{% block content %}
|
||||
<div class="row">
|
||||
{% comment %} <div class="row">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-8">
|
||||
<div class="card">
|
||||
@ -19,6 +19,40 @@
|
||||
</div>
|
||||
</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">
|
||||
{{ _("Update Expense") }}
|
||||
</h3>
|
||||
</div>
|
||||
<div class="card-body bg-light-subtle">
|
||||
|
||||
<form method="post" action="">
|
||||
{% 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 content %}
|
||||
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container">
|
||||
{% comment %} <div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-8">
|
||||
<div class="card bg-body">
|
||||
@ -38,6 +38,45 @@
|
||||
</div>
|
||||
</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 service.pk %}
|
||||
{{ _("Update Service") }}
|
||||
{% else %}
|
||||
{{ _("Add Service") }}
|
||||
{% endif %}
|
||||
</h3>
|
||||
</div>
|
||||
<div class="card-body bg-light-subtle">
|
||||
|
||||
<form method="post" action="">
|
||||
{% 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 content %}
|
||||
|
||||
|
||||
@ -12,7 +12,8 @@
|
||||
|
||||
|
||||
{% block content %}
|
||||
<div class="container">
|
||||
{% comment %} <div class="container">
|
||||
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-8">
|
||||
<div class="card shadow rounded bg-body">
|
||||
@ -46,5 +47,48 @@
|
||||
</div>
|
||||
</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 customer.created %}
|
||||
{{ _("Edit Bank Account") }}
|
||||
{% else %}
|
||||
{{ _("Add Bank Account") }}
|
||||
{% endif %}
|
||||
</h3>
|
||||
</div>
|
||||
<div class="card-body bg-light-subtle">
|
||||
|
||||
<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">
|
||||
<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 %}
|
||||
@ -12,6 +12,7 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% comment %}
|
||||
<div class="row my-5">
|
||||
<!-- Display Form Errors -->
|
||||
<div class="card shadow rounded bg-body">
|
||||
@ -46,5 +47,46 @@
|
||||
</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 account.created %}
|
||||
|
||||
<i class="fa-solid fa-book"></i> {{ _("Edit Account") }}
|
||||
{% else %}
|
||||
|
||||
<i class="fa-solid fa-book"></i> {{ _("Add Account") }}
|
||||
{% endif %}
|
||||
</h3>
|
||||
</div>
|
||||
<div class="card-body bg-light-subtle">
|
||||
|
||||
<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">
|
||||
<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 %}
|
||||
@ -5,7 +5,7 @@
|
||||
{% block title %}{{ _("Create Journal Entry") }}{% endblock title %}
|
||||
|
||||
{% block content %}
|
||||
<div class="row mt-4">
|
||||
{% comment %} <div class="row mt-4">
|
||||
<h3 class="text-center">{% trans "Create Journal Entry" %}</h3>
|
||||
<form id="mainForm" method="post" class="needs-validation">
|
||||
{% csrf_token %}
|
||||
@ -17,5 +17,40 @@
|
||||
<a href="{% url 'journalentry_list' request.dealer.slug ledger.pk %}" class="btn btn-phoenix-secondary"><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 "Create Journal Entry" %}
|
||||
</h3>
|
||||
</div>
|
||||
<div class="card-body bg-light-subtle">
|
||||
|
||||
<form id="mainForm" method="post" class="needs-validation">
|
||||
{% csrf_token %}
|
||||
<div class="row g-3">
|
||||
{{ form|crispy }}
|
||||
</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="{% url 'journalentry_list' request.dealer.slug ledger.pk %}" class="btn btn-lg btn-phoenix-secondary"><i class="fa-solid fa-ban me-1"></i> {% trans "Cancel" %}</a>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!---->
|
||||
{% endblock content %}
|
||||
@ -5,17 +5,13 @@
|
||||
{% block title %}{{ _("Create Ledger") }}{% endblock title %}
|
||||
|
||||
{% block content %}
|
||||
<div class="row mt-4">
|
||||
{% comment %} <div class="row mt-4">
|
||||
<h3 class="text-center">{% trans "Create Ledger" %}</h3>
|
||||
<form id="mainForm" method="post" class="needs-validation">
|
||||
{% csrf_token %}
|
||||
<div class="row g-3">
|
||||
{{ form|crispy }}
|
||||
</div>
|
||||
{% comment %} <div class="mt-5 text-center">
|
||||
<button type="submit" class="btn btn-success me-2"><i class="fa-solid fa-floppy-disk"></i>{% trans "Save" %}</button>
|
||||
<a href="{% url 'ledger_list' %}" class="btn btn-danger"><i class="fa-solid fa-ban"></i> {% trans "Cancel" %}</a>
|
||||
</div> {% endcomment %}
|
||||
|
||||
<div class="d-flex justify-content-center">
|
||||
<button class="btn btn-sm btn-phoenix-success me-2" type="submit"><i class="fa-solid fa-floppy-disk me-1"></i>{{ _("Save") }}</button>
|
||||
@ -24,5 +20,44 @@
|
||||
|
||||
|
||||
</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 "Create Ledger" %}
|
||||
</h3>
|
||||
</div>
|
||||
<div class="card-body bg-light-subtle">
|
||||
|
||||
<form id="mainForm" method="post" class="needs-validation">
|
||||
{% csrf_token %}
|
||||
<div class="row g-3">
|
||||
{{ form|crispy }}
|
||||
</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>
|
||||
<!---->
|
||||
{% endblock content %}
|
||||
@ -9,29 +9,45 @@
|
||||
{% trans 'Add New Organization'%}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="container-fluid mt-4">
|
||||
<!--Heading-->
|
||||
<h3 class="mb-3">
|
||||
{% if object %}
|
||||
{% trans 'Update Organization'%}
|
||||
{% else %}
|
||||
{% trans 'Add New Organization'%}
|
||||
{% endif %}
|
||||
</h3>
|
||||
<!--form body-->
|
||||
<div class="row justify-content-center mt-5 mb-3">
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-sm-6 col-md-8">
|
||||
<form class="form" method="post" enctype="multipart/form-data">
|
||||
<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 object %}
|
||||
{% trans 'Update Organization'%}
|
||||
{% else %}
|
||||
{% trans 'Add New Organization'%}
|
||||
{% endif %}
|
||||
</h3>
|
||||
</div>
|
||||
<div class="card-body bg-light-subtle">
|
||||
<form class="form" method="post" enctype="multipart/form-data">
|
||||
{% csrf_token %}
|
||||
{{ redirect_field }}
|
||||
{{ form|crispy }}
|
||||
<button class="btn btn-sm btn-phoenix-success 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-sm btn-phoenix-danger"><i class="fa-solid fa-ban me-1"></i>{% trans "Cancel" %}</a>
|
||||
|
||||
<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>
|
||||
{% endblock %}
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
{% endblock%}
|
||||
@ -11,7 +11,7 @@
|
||||
{% block content %}
|
||||
<section class="pt-5 pb-9 ">
|
||||
<div class="row overflow-x-auto whitespace-nowrap -mx-2 sm:mx-0">
|
||||
<h2 class="mb-4">{% trans 'Organizations' %}</h2>
|
||||
<h2 class="mb-4">{% trans 'Organizations' %} <li class="fas fa-city text-primary ms-2"></li></h2>
|
||||
|
||||
<div class="row g-3 justify-content-between mb-4">
|
||||
<div class="col-auto">
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<div class="search-box me-2">
|
||||
<form class="position-relative show" id="search-form">
|
||||
<input name="q" id="search-input" class="form-control form-control-sm search-input search" type="search"
|
||||
aria-label="Search" placeholder="{{ _('Search') }}" value="{{ request.GET.q }}" />
|
||||
aria-label="Search" placeholder="{{ _('Search...') }}" value="{{ request.GET.q }}" />
|
||||
<span class="fa fa-magnifying-glass search-box-icon"></span>
|
||||
{% if request.GET.q %}
|
||||
<button type="button" class="btn-close position-absolute end-0 top-50 translate-middle cursor-pointer shadow-none"
|
||||
|
||||
@ -12,13 +12,13 @@
|
||||
}
|
||||
|
||||
.pricing-card .card.selected {
|
||||
border-color: #0d6efd;
|
||||
border-color:rgb(20, 108, 241);
|
||||
box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.4);
|
||||
}
|
||||
|
||||
.btn-check:checked + .btn .card {
|
||||
/* fallback if JS fails */
|
||||
border-color: #0d6efd;
|
||||
border-color:rgb(13, 91, 207);
|
||||
box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
|
||||
}
|
||||
|
||||
@ -50,29 +50,37 @@
|
||||
|
||||
{% block content %}
|
||||
<div class="container py-5">
|
||||
<h1 class="text-center mb-5">{{ _("Choose Your Plan")}}</h1>
|
||||
<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 %}
|
||||
<!-- Step 1: Plan Selection -->
|
||||
<div class="step" id="step1">
|
||||
<h4 class="mb-4">1. {{ _("Select a Plan")}}</h4>
|
||||
<div class="row g-4">
|
||||
{% for pp in plan_list %}
|
||||
<div class="col-md-6 col-lg-3">
|
||||
|
||||
<!--step1: Choose Plans-->
|
||||
<div class="step row justify-content-center mt-5 mb-3" id="step1">
|
||||
|
||||
<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">
|
||||
<h4 class="mb-0 fs-4 text-center text-white">
|
||||
1. {{ _("Select a Plan")}}
|
||||
</h4>
|
||||
</div>
|
||||
<div class="card-body bg-light-subtle">
|
||||
{% for pp in plan_list %}
|
||||
<div class="col-md-12 mb-3">
|
||||
<input type="radio" class="btn-check" name="selected_plan" id="plan_{{ forloop.counter }}" value="{{ pp.id }}"
|
||||
data-name="{{ pp.plan.name }}" data-price="{{ pp.price }}" autocomplete="off" {% if forloop.first %}checked{% endif %}>
|
||||
<label class="btn w-100 p-0 pricing-card" for="plan_{{ forloop.counter }}">
|
||||
<div class="card h-100 border border-2 rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<h4 class="mb-3">{{ pp.plan.name }}</h4>
|
||||
<h4 class="mb-3">{{ pp.plan.name|capfirst }}</h4>
|
||||
<h5 class="mb-4">{{ pp.price }} <span class="icon-saudi_riyal"></span><span class="fs-6 fw-normal">/ {{ pp.pricing.period }}</span> {% trans "days" %}</h5>
|
||||
<h6>{{ _("Included") }}</h6>
|
||||
<h5>{{_("Include Haikal's")}}</h5>
|
||||
<ul class="fa-ul ps-3">
|
||||
{% if pp.plan.description %}
|
||||
{% for line in pp.plan.description|splitlines %}
|
||||
<li class="mb-2">
|
||||
<span class="fa-li"><i class="fas fa-check text-primary"></i></span>
|
||||
{{ line }}
|
||||
{{ line|capfirst}}
|
||||
</li>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
@ -82,124 +90,156 @@
|
||||
</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Step 2: User Info -->
|
||||
<div class="step d-none" id="step2">
|
||||
<h4 class="mb-4">2. {{ _("Enter Your Information")}}</h4>
|
||||
<div class="row g-3">
|
||||
<div class="col-md-6">
|
||||
<label class="form-label" for="first_name">{{ _("First Name")}}</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text"><i class="fas fa-user"></i></span>
|
||||
<input type="text" name="first_name" id="first_name" class="form-control form-control-sm" required placeholder="{{ _("First Name")}}" value="{{ request.user.first_name }}">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!--step2: Information-->
|
||||
|
||||
<div class="step d-none row justify-content-center mt-5 mb-3" id="step2">
|
||||
|
||||
<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">
|
||||
2. {{ _("Enter Your Information")}}
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label class="form-label" for="last_name">{{ _("Last Name")}}</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text"><i class="fas fa-user"></i></span>
|
||||
<input type="text" name="last_name" id="last_name" class="form-control form-control-sm" required placeholder="{{ _("Last Name")}}" value="{{ request.user.last_name }}">
|
||||
<div class="card-body bg-light-subtle">
|
||||
|
||||
<label class="form-label" for="first_name">{{ _("First Name")}}</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text"><i class="fas fa-user"></i></span>
|
||||
<input type="text" name="first_name" id="first_name" class="form-control form-control-sm" required placeholder="{{ _("First Name")}}" value="{{ request.user.first_name }}">
|
||||
</div>
|
||||
|
||||
<label class="form-label" for="last_name">{{ _("Last Name")}}</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text"><i class="fas fa-user"></i></span>
|
||||
<input type="text" name="last_name" id="last_name" class="form-control form-control-sm" required placeholder="{{ _("Last Name")}}" value="{{ request.user.last_name }}">
|
||||
</div>
|
||||
|
||||
<label class="form-label" for="email">{{ _("Email Address")}}</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text"><i class="fas fa-envelope"></i></span>
|
||||
<input type="email" name="email" id="email" class="form-control form-control-sm" required placeholder="email@example.com" value="{{ request.user.email }}">
|
||||
</div>
|
||||
|
||||
<label class="form-label" for="phone">{{ _("Phone Number")}}</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text"><i class="fas fa-phone"></i></span>
|
||||
<input type="text" name="phone" id="phone" class="form-control form-control-sm" dir="ltr" placeholder="{{ _("Phone Number")}}" value="{{ request.dealer.phone_number.raw_input }}" required>
|
||||
</div>
|
||||
|
||||
<label class="form-label" for="company">{{ _("Company") }}</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text"><i class="fas fa-building"></i></span>
|
||||
<input type="text" name="company" id="company" class="form-control form-control-sm" placeholder="{{ _("Company") }}" value="{{ request.dealer.get_local_name }}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label class="form-label" for="email">{{ _("Email Address")}}</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text"><i class="fas fa-envelope"></i></span>
|
||||
<input type="email" name="email" id="email" class="form-control form-control-sm" required placeholder="email@example.com" value="{{ request.user.email }}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label class="form-label" for="phone">{{ _("Phone Number")}}</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text"><i class="fas fa-phone"></i></span>
|
||||
<input type="text" name="phone" id="phone" class="form-control form-control-sm" dir="ltr" placeholder="{{ _("Phone Number")}}" value="{{ request.dealer.phone_number.raw_input }}" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label class="form-label" for="company">{{ _("Company") }}</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text"><i class="fas fa-building"></i></span>
|
||||
<input type="text" name="company" id="company" class="form-control form-control-sm" placeholder="{{ _("Company") }}" value="{{ request.dealer.get_local_name }}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Step 3: Payment -->
|
||||
<div class="step d-none" id="step3">
|
||||
<h4 class="mb-4">3. {{ _("Payment Information")}}</h4>
|
||||
<div class="row g-3">
|
||||
<div class="col-md-6">
|
||||
<label class="form-label" for="card_name">{{ _("Cardholder Name")}}</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text"><i class="fas fa-user"></i></span>
|
||||
<input type="text" name="card_name" id="card_name" class="form-control form-control-sm" placeholder="{{ _("Cardholder Name")}}" required>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!--step3: Payment-->
|
||||
<div class="step d-none row justify-content-center mt-5 mb-3" id="step3">
|
||||
|
||||
<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">
|
||||
3. {{ _("Payment Information")}}
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body bg-light-subtle">
|
||||
<label class="form-label" for="card_name">{{ _("Cardholder Name")}}</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text"><i class="fas fa-user"></i></span>
|
||||
<input type="text" name="card_name" id="card_name" class="form-control form-control-sm" placeholder="{{ _("Cardholder Name")}}" required>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<label class="form-label" for="card_number">{{ _("Card Number")}}</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text"><i class="fas fa-credit-card"></i></span>
|
||||
<input type="text" name="card_number" id="card_number" class="form-control form-control-sm" placeholder="{{ _("Card Number")}}"
|
||||
maxlength="19" pattern="^\d{4}\s\d{4}\s\d{4}\s\d{4}$"
|
||||
inputmode="numeric" required title="Enter a 16-digit card number">
|
||||
</div>
|
||||
</div>
|
||||
<label class="form-label" for="card_number">{{ _("Card Number")}}</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text"><i class="fas fa-credit-card"></i></span>
|
||||
<input type="text" name="card_number" id="card_number" class="form-control form-control-sm" placeholder="{{ _("Card Number")}}"
|
||||
maxlength="19" pattern="^\d{4}\s\d{4}\s\d{4}\s\d{4}$"
|
||||
inputmode="numeric" required title="Enter a 16-digit card number">
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<label class="form-label" for="card_expiry">{{ _("Expiry Date")}} (MM/YY)</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text"><i class="far fa-calendar-alt"></i></span>
|
||||
<input type="text" name="card_expiry" id="card_expiry" class="form-control form-control-sm" placeholder="{{ _("Expiry Date")}}"
|
||||
|
||||
<label class="form-label" for="card_expiry">{{ _("Expiry Date")}} (MM/YY)</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text"><i class="far fa-calendar-alt"></i></span>
|
||||
<input type="text" name="card_expiry" id="card_expiry" class="form-control form-control-sm" placeholder="{{ _("Expiry Date")}}"
|
||||
maxlength="5" pattern="^(0[1-9]|1[0-2])\/\d{2}$"
|
||||
inputmode="numeric" required title="Enter expiry in MM/YY format">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-2">
|
||||
<label class="form-label" for="card_cvv">{{ _("CVV") }}</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text"><i class="fas fa-lock"></i></span>
|
||||
<input type="text" name="card_cvv" id="card_cvv" class="form-control form-control-sm" placeholder="{{ _("CVV") }}"
|
||||
maxlength="3" pattern="^\d{3}$"
|
||||
inputmode="numeric" required title="Enter 3-digit CVV">
|
||||
<label class="form-label" for="card_cvv">{{ _("CVV") }}</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text"><i class="fas fa-lock"></i></span>
|
||||
<input type="text" name="card_cvv" id="card_cvv" class="form-control form-control-sm" placeholder="{{ _("CVV") }}"
|
||||
maxlength="3" pattern="^\d{3}$"
|
||||
inputmode="numeric" required title="Enter 3-digit CVV">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Step 4: Confirmation -->
|
||||
<div class="step d-none" id="step4">
|
||||
<h4 class="mb-4">4. {{ _("Confirm Your Information")}}</h4>
|
||||
<div class="summary-box">
|
||||
<h5><i class="fas fa-file-invoice-dollar me-2"></i>{{ _("Order Summary")}}</h5>
|
||||
<div class="summary-item"><i class="fas fa-box"></i><strong>{{ _("Plan") }}:</strong> <span id="summary_plan"></span></div>
|
||||
<div class="summary-item"><i class="fas fa-tag"></i><strong>{{ _("Price") }}:</strong> <span id="summary_price"></span></div>
|
||||
<div class="summary-item"><i class="fas fa-receipt"></i><strong>{{ _("VAT") }} (15%):</strong> <span id="summary-tax">0.00</span> <span class="icon-saudi_riyal"></span></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!--Step4 confirmation-->
|
||||
|
||||
<div class="step d-none row justify-content-center mt-5 mb-3" id="step4">
|
||||
|
||||
<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")}}
|
||||
</div>
|
||||
<div class="card-body bg-light-subtle me-2">
|
||||
<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>
|
||||
<div class="summary-item"><i class="fas fa-receipt me-2"></i><strong>{{ _("VAT") }} (15%):</strong> <span id="summary-tax">0.00</span> <span class="icon-saudi_riyal"></span></div>
|
||||
<div class="summary-item"><i class="fas fa-hand-holding-usd me-2"></i><strong>{{ _("Total") }}:</strong> <span id="summary-total">0.00</span> <span class="icon-saudi_riyal"></span></div>
|
||||
<hr>
|
||||
<div class="summary-item"><i class="fas fa-hand-holding-usd"></i><strong>{{ _("Total") }}:</strong> <span id="summary-total">0.00</span> <span class="icon-saudi_riyal"></span></div>
|
||||
|
||||
|
||||
<h5 class="mt-4"><i class="fas fa-user me-2"></i>{{ _("User Information")}}</h5>
|
||||
<div class="summary-item"><i class="fas fa-signature"></i><strong>{{ _("Name") }}:</strong> <span id="summary_name"></span></div>
|
||||
<div class="summary-item"><i class="fas fa-envelope"></i><strong>{{ _("Email") }}:</strong> <span id="summary_email"></span></div>
|
||||
<div class="summary-item"><i class="fas fa-building"></i><strong>{{ _("Company") }}:</strong> <span id="summary_company"></span></div>
|
||||
<div class="summary-item"><i class="fas fa-phone"></i><strong>{{ _("Phone") }}:</strong> <span id="summary_phone"></span></div>
|
||||
<h5 class="mt-4 text-center"><i class="fas fa-user me-2"></i>{{ _("User Information")}}</h5>
|
||||
<div class="summary-item"><i class="fas fa-signature me-2"></i><strong>{{ _("Name") }}:</strong> <span id="summary_name"></span></div>
|
||||
<div class="summary-item"><i class="fas fa-envelope me-2"></i><strong>{{ _("Email") }}:</strong> <span id="summary_email"></span></div>
|
||||
<div class="summary-item"><i class="fas fa-building me-2"></i><strong>{{ _("Company") }}:</strong> <span id="summary_company"></span></div>
|
||||
<div class="summary-item"><i class="fas fa-phone me-2"></i><strong>{{ _("Phone") }}:</strong> <span id="summary_phone"></span></div>
|
||||
<hr>
|
||||
|
||||
<h5 class="mt-4"><i class="fas fa-credit-card me-2"></i>{{ _("Payment") }}</h5>
|
||||
<div class="summary-item"><i class="fas fa-user"></i><strong>{{ _("Cardholder") }}:</strong> <span id="summary_card_name"></span></div>
|
||||
<div class="summary-item"><i class="fas fa-credit-card"></i><strong>{{ _("Card Number")}}:</strong> <span id="summary_card_number"></span></div>
|
||||
<div class="summary-item"><i class="far fa-calendar-alt"></i><strong>{{ _("Expiry") }}:</strong> <span id="summary_card_expiry"></span></div>
|
||||
<h5 class="mt-4 text-center"><i class="fas fa-credit-card me-2"></i>{{ _("Payment") }}</h5>
|
||||
<div class="summary-item"><i class="fas fa-user me-2"></i><strong>{{ _("Cardholder") }}:</strong> <span id="summary_card_name"></span></div>
|
||||
<div class="summary-item"><i class="fas fa-credit-card me-2"></i><strong>{{ _("Card Number")}}:</strong> <span id="summary_card_number"></span></div>
|
||||
<div class="summary-item"><i class="far fa-calendar-alt me-2"></i><strong>{{ _("Expiry") }}:</strong> <span id="summary_card_expiry"></span></div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<!---->
|
||||
|
||||
<!-- Navigation -->
|
||||
<div class="d-flex justify-content-between mt-4">
|
||||
<button type="button" class="btn btn-phoenix-secondary" id="prevBtn" disabled>{{ _("Previous") }}</button>
|
||||
<button type="button" class="btn btn-phoenix-primary" id="nextBtn">{{ _("Next") }}</button>
|
||||
<button type="submit" class="btn btn-phoenix-success d-none" id="submitBtn">{{ _("Confirm") }}</button>
|
||||
<button type="button" class="btn btn-lg btn-phoenix-secondary" id="prevBtn" disabled>{{ _("Previous") }}</button>
|
||||
<button type="button" class="btn btn-lg btn-phoenix-primary" id="nextBtn">{{ _("Next") }}</button>
|
||||
<button type="submit" class="btn btn-lg btn-phoenix-primary d-none" id="submitBtn">{{ _("Confirm") }}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@ -10,44 +10,42 @@
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<div class="row mt-4">
|
||||
<div class="row">
|
||||
<div class="col-xl-9">
|
||||
<div class="d-sm-flex justify-content-between">
|
||||
|
||||
<!---->
|
||||
<div class="row justify-content-center mt-5 mb-3">
|
||||
|
||||
<h3 class="mb-3">
|
||||
{% if vendor.created %}
|
||||
<!--<i class="bi bi-pencil-square"></i>-->
|
||||
{{ _("Edit Purchase Order") }}
|
||||
{% else %}
|
||||
<!--<i class="bi bi-person-plus"></i> -->
|
||||
{{ _("Add New Purchase Order") }}
|
||||
{% endif %}
|
||||
</h3>
|
||||
<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">
|
||||
{{ _("Add New Purchase Order") }}
|
||||
</h3>
|
||||
</div>
|
||||
<div class="card-body bg-light-subtle">
|
||||
<form class="row g-3 mb-9" method="post" class="form" enctype="multipart/form-data" 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>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xl-9">
|
||||
</div>
|
||||
|
||||
<form class="row g-3 mb-9" method="post" class="form" enctype="multipart/form-data" novalidate >
|
||||
{% csrf_token %}
|
||||
{{ redirect_field }}
|
||||
{{ form|crispy }}
|
||||
{% for error in form.errors %}
|
||||
<div class="text-danger">{{ error }}</div>
|
||||
{% endfor %}
|
||||
<div class="d-flex justify-content-start">
|
||||
<button class="btn btn-sm btn-phoenix-success me-2" type="submit"><i class="fa-solid fa-floppy-disk me-1"></i>
|
||||
<!--<i class="bi bi-save"></i> -->
|
||||
{{ _("Save") }}
|
||||
</button>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!---->
|
||||
{% endblock %}
|
||||
@ -13,21 +13,26 @@
|
||||
<div class="alert alert-success">{{ message }}</div>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
<!-- Add New PO Button -->
|
||||
<div class="d-flex justify-content-between mb-2">
|
||||
<h3 class="">
|
||||
{{ _("Purchase Orders") |capfirst }}
|
||||
|
||||
<h2 class="">
|
||||
{{ _("Purchase Orders") |capfirst }} <li class="fas fa-file-invoice text-primary ms-2"></li>
|
||||
</h2>
|
||||
{% if perms.django_ledger.add_purchaseordermodel%}
|
||||
<div>
|
||||
{% if perms.django_ledger.add_purchaseordermodel %}
|
||||
|
||||
<div class="row g-3 justify-content-between mb-4">
|
||||
<div class="col-auto">
|
||||
<div class="d-md-flex justify-content-between">
|
||||
{% if perms.django_ledger.add_purchaseordermodel %}
|
||||
<a href="{% url 'purchase_order_create' request.dealer.slug request.dealer.entity.slug %}"
|
||||
class="btn btn-md btn-phoenix-primary"><i class="fa fa-plus me-2"></i>{{ _("Create New PO") }}</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% include "partials/search_box.html" %}
|
||||
<div class="col-auto">
|
||||
<div class="d-flex">
|
||||
{% include 'partials/search_box.html' %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="table-responsive px-1 scrollbar mt-3">
|
||||
<table class= "table align-items-center table-flush table-hover">
|
||||
|
||||
@ -120,8 +120,89 @@
|
||||
}
|
||||
</style>
|
||||
{% endblock customCSS %}
|
||||
<!---->
|
||||
{% block content%}
|
||||
|
||||
<div class="row justify-content-center mt-5 mb-3">
|
||||
{% if not items %}
|
||||
<div class="alert alert-outline-warning d-flex align-items-center" role="alert">
|
||||
<i class="fa-solid fa-circle-info fs-6"></i>
|
||||
<p class="mb-0 flex-1">{{ _("Please add at least one car before creating a quotation.") }}<a class="ms-3 text-body-primary fs-9" href="{% url 'car_add' request.dealer.slug %}"> {{ _("Add Car") }} </a></p>
|
||||
<button class="btn-close" type="button" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if not customer_count %}
|
||||
<div class="alert alert-outline-warning d-flex align-items-center" role="alert">
|
||||
<i class="fa-solid fa-circle-info fs-6"></i>
|
||||
<p class="mb-0 flex-1"> {{ _("Please add at least one customer before creating a quotation.") }}<a class="ms-3 text-body-primary fs-9" href="{% url 'customer_create' request.dealer.slug %}"> {{ _("Add Customer") }} </a></p>
|
||||
<button class="btn-close" type="button" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||
</div>
|
||||
{% endif %}
|
||||
<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-regular fa-file-lines"></i> {% trans "Create Quotation" %}
|
||||
</h3>
|
||||
</div>
|
||||
<div class="card-body bg-light-subtle">
|
||||
|
||||
|
||||
<form id="mainForm" method="post" class="needs-validation {% if not items or not customer_count %}disabled{% endif %}">
|
||||
|
||||
{% csrf_token %}
|
||||
<div class="row g-3 col-12">
|
||||
{{ form|crispy }}
|
||||
<div class="custom-select">
|
||||
<!-- Hidden native select for form submission -->
|
||||
<select class="native-select" name="item" required tabindex="-1">
|
||||
<option value="">Select a car</option>
|
||||
{% for item in items %}
|
||||
<option value="{{ item.hash }}"></option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
<!-- Custom select UI -->
|
||||
<div class="select-trigger">
|
||||
<div class="selected-value">
|
||||
<span>Select a car</span>
|
||||
</div>
|
||||
<i class="fas fa-chevron-down dropdown-icon"></i>
|
||||
</div>
|
||||
|
||||
<div class="options-container">
|
||||
{% for item in items %}
|
||||
<div class="option" data-value="{{ item.hash }}" data-image="{{item.logo}}">
|
||||
<img src="{{item.logo}}" alt="{{item.model}}">
|
||||
<span>{{item.make}} {{item.model}} {{item.serie}} {{item.trim}} {{item.color_name}}</span>
|
||||
<div class="color-box" style="background-color: rgb({{ item.exterior_color }});"></div>
|
||||
<div class="color-box" style="background-color: rgb({{ item.interior_color }});"></div>
|
||||
<span style="color:gray;">({{item.hash_count}} in stock)</span>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</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>
|
||||
{% endblock %}
|
||||
<!---->
|
||||
|
||||
{% comment %} {% block content %}
|
||||
|
||||
{% block content %}
|
||||
<div class="row mt-4">
|
||||
{% if not items %}
|
||||
<div class="alert alert-outline-warning d-flex align-items-center" role="alert">
|
||||
@ -184,7 +265,7 @@
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{% endblock content %}
|
||||
{% endblock content %} {% endcomment %}
|
||||
|
||||
{% block customJS %}
|
||||
<script>
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
{% load i18n %}
|
||||
{% block title %}{{ _("Invoice") }}{% endblock title %}
|
||||
{% block content %}
|
||||
<div class="row paid">
|
||||
{% comment %} <div class="row paid">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-8">
|
||||
<div class="card">
|
||||
@ -19,6 +19,42 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> {% endcomment %}
|
||||
|
||||
<!---->
|
||||
<div class="row paid 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-receipt"></i> {{ _("Add Invoice") }}
|
||||
</h3>
|
||||
</div>
|
||||
<div class="card-body bg-light-subtle">
|
||||
|
||||
|
||||
<form method="post" action="">
|
||||
{% 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 content %}
|
||||
|
||||
|
||||
41
templates/vendors/vendor_form.html
vendored
41
templates/vendors/vendor_form.html
vendored
@ -13,7 +13,7 @@
|
||||
|
||||
{% block content %}
|
||||
|
||||
|
||||
{% comment %}
|
||||
<div class="row">
|
||||
<div class="row">
|
||||
<div class="col-xl-9">
|
||||
@ -54,4 +54,43 @@
|
||||
</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 vendor.created %}
|
||||
{{ _("Edit Vendor") }}
|
||||
{% else %}
|
||||
{{ _("Add Vendor") }}
|
||||
{% endif %}
|
||||
</h3>
|
||||
</div>
|
||||
<div class="card-body bg-light-subtle">
|
||||
<form class="row g-3 mb-9" method="post" class="form" enctype="multipart/form-data" 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 %}
|
||||
Loading…
x
Reference in New Issue
Block a user