update
This commit is contained in:
parent
48d70dc084
commit
c4ea8db46e
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -35,6 +35,7 @@ admin.site.register(models.Notification)
|
|||||||
admin.site.register(models.Lead)
|
admin.site.register(models.Lead)
|
||||||
admin.site.register(models.Activity)
|
admin.site.register(models.Activity)
|
||||||
admin.site.register(models.Schedule)
|
admin.site.register(models.Schedule)
|
||||||
|
admin.site.register(models.Notes)
|
||||||
|
|
||||||
@admin.register(models.CarMake)
|
@admin.register(models.CarMake)
|
||||||
class CarMakeAdmin(admin.ModelAdmin):
|
class CarMakeAdmin(admin.ModelAdmin):
|
||||||
|
|||||||
@ -737,7 +737,7 @@ class EstimateModelCreateForm(EstimateModelCreateFormBase):
|
|||||||
'customer': forms.Select(attrs={
|
'customer': forms.Select(attrs={
|
||||||
'id': 'djl-customer-estimate-customer-input',
|
'id': 'djl-customer-estimate-customer-input',
|
||||||
'class': 'input',
|
'class': 'input',
|
||||||
'label': _('Customer MARWAN'),
|
'label': _('Customer'),
|
||||||
}),
|
}),
|
||||||
'terms': forms.Select(attrs={
|
'terms': forms.Select(attrs={
|
||||||
'id': 'djl-customer-estimate-terms-input',
|
'id': 'djl-customer-estimate-terms-input',
|
||||||
|
|||||||
@ -1224,7 +1224,7 @@ class Schedule(models.Model):
|
|||||||
updated_at = models.DateTimeField(auto_now=True)
|
updated_at = models.DateTimeField(auto_now=True)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"Scheduled {self.purpose} with {self.customer.customer_name} on {self.scheduled_at}"
|
return f"Scheduled {self.purpose} with {self.lead.full_name} on {self.scheduled_at}"
|
||||||
|
|
||||||
def schedule_past_date(self):
|
def schedule_past_date(self):
|
||||||
if self.scheduled_at < timezone.now():
|
if self.scheduled_at < timezone.now():
|
||||||
|
|||||||
@ -862,7 +862,7 @@ def create_activity_on_schedule_creation(sender, instance, created, **kwargs):
|
|||||||
content_object=instance,
|
content_object=instance,
|
||||||
activity_type='Schedule Created',
|
activity_type='Schedule Created',
|
||||||
created_by=instance.scheduled_by.user,
|
created_by=instance.scheduled_by.user,
|
||||||
notes=f"New schedule created for {instance.purpose} with {instance.customer.customer_name} on {instance.scheduled_at}."
|
notes=f"New schedule created for {instance.purpose} with {instance.lead.full_name} on {instance.scheduled_at}."
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -93,8 +93,10 @@ urlpatterns = [
|
|||||||
"crm/leads/<int:pk>/update/", views.LeadUpdateView.as_view(), name="lead_update"
|
"crm/leads/<int:pk>/update/", views.LeadUpdateView.as_view(), name="lead_update"
|
||||||
),
|
),
|
||||||
path("crm/leads/<int:pk>/delete/", views.LeadDeleteView, name="lead_delete"),
|
path("crm/leads/<int:pk>/delete/", views.LeadDeleteView, name="lead_delete"),
|
||||||
path("crm/leads/<int:pk>/add-note/", views.add_note_to_lead, name="add_note"),
|
|
||||||
path("crm/leads/<int:pk>/lead-convert/", views.lead_convert, name="lead_convert"),
|
path("crm/leads/<int:pk>/lead-convert/", views.lead_convert, name="lead_convert"),
|
||||||
|
path("crm/leads/<int:pk>/add-note/", views.add_note_to_lead, name="add_note"),
|
||||||
|
path('crm/leads/<int:pk>/update-note/', views.update_note, name='update_note'),
|
||||||
|
path("crm/leads/<int:pk>/delete-note/", views.delete_note, name="delete_note"),
|
||||||
path(
|
path(
|
||||||
"crm/leads/<int:pk>/add-activity/",
|
"crm/leads/<int:pk>/add-activity/",
|
||||||
views.add_activity_to_lead,
|
views.add_activity_to_lead,
|
||||||
|
|||||||
@ -2981,6 +2981,7 @@ def LeadDeleteView(request,pk):
|
|||||||
return redirect("lead_list")
|
return redirect("lead_list")
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
def add_note_to_lead(request, pk):
|
def add_note_to_lead(request, pk):
|
||||||
lead = get_object_or_404(models.Lead, pk=pk)
|
lead = get_object_or_404(models.Lead, pk=pk)
|
||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
@ -2988,14 +2989,45 @@ def add_note_to_lead(request, pk):
|
|||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
note = form.save(commit=False)
|
note = form.save(commit=False)
|
||||||
note.content_object = lead
|
note.content_object = lead
|
||||||
|
|
||||||
note.created_by = request.user
|
note.created_by = request.user
|
||||||
note.save()
|
note.save()
|
||||||
return redirect("lead_detail", pk=pk)
|
messages.success(request, "Note added successfully!")
|
||||||
|
return redirect("lead_detail", pk=lead.pk)
|
||||||
else:
|
else:
|
||||||
form = forms.NoteForm()
|
form = forms.NoteForm()
|
||||||
return render(request, "crm/add_note.html", {"form": form, "lead": lead})
|
return render(request, "crm/note_form.html", {"form": form, "lead": lead})
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def update_note(request, pk):
|
||||||
|
note = get_object_or_404(models.Notes, pk=pk, created_by=request.user)
|
||||||
|
lead_pk = note.content_object.pk
|
||||||
|
|
||||||
|
if request.method == "POST":
|
||||||
|
form = forms.NoteForm(request.POST, instance=note)
|
||||||
|
if form.is_valid():
|
||||||
|
updated_note = form.save(commit=False)
|
||||||
|
updated_note.content_object = note.content_object
|
||||||
|
updated_note.created_by = request.user
|
||||||
|
updated_note.save()
|
||||||
|
messages.success(request, "Note updated successfully!")
|
||||||
|
return redirect("lead_detail", pk=lead_pk)
|
||||||
|
else:
|
||||||
|
form = forms.NoteForm(instance=note)
|
||||||
|
|
||||||
|
return render(request, "crm/note_form.html", {"form": form, "note": note})
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def delete_note(request, pk):
|
||||||
|
note = get_object_or_404(models.Notes, pk=pk, created_by=request.user)
|
||||||
|
lead_pk = note.content_object.pk
|
||||||
|
note.delete()
|
||||||
|
messages.success(request, _("Note deleted successfully."))
|
||||||
|
return redirect("lead_detail", pk=lead_pk)
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
def lead_convert(request, pk):
|
def lead_convert(request, pk):
|
||||||
lead = get_object_or_404(models.Lead, pk=pk)
|
lead = get_object_or_404(models.Lead, pk=pk)
|
||||||
dealer = get_user_type(request)
|
dealer = get_user_type(request)
|
||||||
@ -3007,6 +3039,8 @@ def lead_convert(request, pk):
|
|||||||
messages.success(request, "Lead converted to customer successfully!")
|
messages.success(request, "Lead converted to customer successfully!")
|
||||||
return redirect("opportunity_create",pk=lead.pk)
|
return redirect("opportunity_create",pk=lead.pk)
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
def schedule_lead(request, pk):
|
def schedule_lead(request, pk):
|
||||||
lead = get_object_or_404(models.Lead, pk=pk)
|
lead = get_object_or_404(models.Lead, pk=pk)
|
||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
@ -3026,6 +3060,8 @@ def schedule_lead(request, pk):
|
|||||||
form = forms.ScheduleForm()
|
form = forms.ScheduleForm()
|
||||||
return render(request, "crm/leads/schedule_lead.html", {"lead": lead, "form": form})
|
return render(request, "crm/leads/schedule_lead.html", {"lead": lead, "form": form})
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
def send_lead_email(request, pk):
|
def send_lead_email(request, pk):
|
||||||
lead = get_object_or_404(models.Lead, pk=pk)
|
lead = get_object_or_404(models.Lead, pk=pk)
|
||||||
dealer = get_user_type(request)
|
dealer = get_user_type(request)
|
||||||
@ -3068,6 +3104,8 @@ def send_lead_email(request, pk):
|
|||||||
{"lead": lead, "message": msg},
|
{"lead": lead, "message": msg},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
def add_activity_to_lead(request, pk):
|
def add_activity_to_lead(request, pk):
|
||||||
lead = get_object_or_404(models.Lead, pk=pk)
|
lead = get_object_or_404(models.Lead, pk=pk)
|
||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
|
|||||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -63,7 +63,7 @@
|
|||||||
<!-- Down Payment Field -->
|
<!-- Down Payment Field -->
|
||||||
<div class="form-floating mb-3">
|
<div class="form-floating mb-3">
|
||||||
{{ form.down_payment|add_class:"form-control form-control-sm" }}
|
{{ form.down_payment|add_class:"form-control form-control-sm" }}
|
||||||
<label for="{{ form.down_payment.id_for_label }}">{{ _("Down Payment<")}}/label>
|
<label for="{{ form.down_payment.id_for_label }}">{{ _("Down Payment")}}</label>
|
||||||
{% if form.down_payment.errors %}
|
{% if form.down_payment.errors %}
|
||||||
<div class="alert alert-danger mt-2">
|
<div class="alert alert-danger mt-2">
|
||||||
{{ form.down_payment.errors }}
|
{{ form.down_payment.errors }}
|
||||||
|
|||||||
@ -1,10 +0,0 @@
|
|||||||
{% extends 'base.html' %}
|
|
||||||
{% load i18n static crispy_forms_filters %}
|
|
||||||
{% block content %}
|
|
||||||
<h1>Add Note to {{ lead.first_name }} {{ lead.last_name }}</h1>
|
|
||||||
<form method="post">
|
|
||||||
{% csrf_token %}
|
|
||||||
{{ form|crispy }}
|
|
||||||
<button class="btn btn-phoenix-primary" type="submit">Add Note</button>
|
|
||||||
</form>
|
|
||||||
{% endblock %}
|
|
||||||
@ -1,32 +1,32 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
{% load i18n static %}
|
{% load i18n static %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="row g-3">
|
|
||||||
<div class="col-12">
|
<div class="row g-3">
|
||||||
|
<div class="col-12">
|
||||||
<div class="row align-items-center justify-content-between g-3 mb-3">
|
<div class="row align-items-center justify-content-between g-3 mb-3">
|
||||||
<div class="col-12 col-md-auto">
|
<div class="col-12 col-md-auto">
|
||||||
<h2 class="mb-0">{{ _("Lead Details")}}</h2>
|
<h4 class="mb-0">{{ _("Lead Details")}}</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12 col-md-auto">
|
<div class="col-12 col-md-auto">
|
||||||
<div class="d-flex">
|
<div class="d-flex">
|
||||||
<div class="flex-1 d-md-none">
|
<div class="flex-1 d-md-none">
|
||||||
<button class="btn px-3 btn-phoenix-secondary text-body-tertiary me-2"><span class="fa-solid fa-bars"></span></button>
|
<button class="btn px-3 btn-phoenix-secondary text-body-tertiary me-2"><span class="fa-solid fa-bars"></span></button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row g-0 g-md-4 g-xl-6">
|
<div class="row g-0 g-md-4 g-xl-6">
|
||||||
<div class="col-md-5 col-lg-5 col-xl-4">
|
<div class="col-md-5 col-lg-5 col-xl-4">
|
||||||
<div class="sticky-leads-sidebar">
|
<div class="sticky-leads-sidebar">
|
||||||
<div class="lead-details" data-breakpoint="md">
|
<div class="lead-details" data-breakpoint="md">
|
||||||
<div class="d-flex justify-content-between align-items-center mb-2 d-md-none">
|
<div class="d-flex justify-content-between align-items-center mb-2 d-md-none">
|
||||||
<h3 class="mb-0">{{ _("Lead Details")}}</h3>
|
<h3 class="mb-0">{{ _("Lead Details")}}</h3>
|
||||||
<button class="btn p-0" ><span class="uil uil-times fs-7"></span></button>
|
<button class="btn p-0" ><span class="uil uil-times fs-7"></span></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="card mb-3">
|
<div class="card mb-2">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="row align-items-center g-3 text-center text-xxl-start">
|
<div class="row align-items-center g-3 text-center text-xxl-start">
|
||||||
<div class="col-6 col-sm-auto flex-1">
|
<div class="col-6 col-sm-auto flex-1">
|
||||||
@ -56,7 +56,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card mb-3">
|
<div class="card mb-2">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="row align-items-center g-3 text-center text-xxl-start">
|
<div class="row align-items-center g-3 text-center text-xxl-start">
|
||||||
<div class="col-6 col-sm-auto flex-1">
|
<div class="col-6 col-sm-auto flex-1">
|
||||||
@ -66,49 +66,51 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card">
|
<div class="card mb-2">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="mb-4">
|
<div class="mb-3">
|
||||||
<div class="d-flex align-items-center mb-1"><span class="me-2 uil uil-envelope-alt"> </span>
|
<div class="d-flex align-items-center mb-1"><span class="me-2 uil uil-envelope-alt"> </span>
|
||||||
<h5 class="text-body-highlight mb-0">{{ _("Email") }}</h5>
|
<h5 class="text-body-highlight mb-0">{{ _("Email") }}</h5>
|
||||||
</div><a href="{{ lead.email}}">{{ lead.email }}</a>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="mb-4">
|
<a href="{{ lead.email}}">{{ lead.email }}</a>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
<div class="d-flex align-items-center mb-1"><span class="me-2 uil uil-phone"> </span>
|
<div class="d-flex align-items-center mb-1"><span class="me-2 uil uil-phone"> </span>
|
||||||
<h5 class="text-body-highlight mb-0">{{ _("Phone") }}</h5>
|
<h5 class="text-body-highlight mb-0">{{ _("Phone") }}</h5>
|
||||||
</div><a href="{{ lead.phone_number}}">{{ lead.phone_number}} </a>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="mb-4">
|
<a href="{{ lead.phone_number}}">{{ lead.phone_number}} </a>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
<div class="d-flex align-items-center mb-1"><span class="me-2 uil uil-dollar-alt"></span>
|
<div class="d-flex align-items-center mb-1"><span class="me-2 uil uil-dollar-alt"></span>
|
||||||
<h5 class="text-body-highlight mb-0">{{ _("Salary")}}</h5>
|
<h5 class="text-body-highlight mb-0">{{ _("Salary")}}</h5>
|
||||||
</div>
|
</div>
|
||||||
<p class="mb-0 text-body-secondary">{{lead.salary}} </p>
|
<p class="mb-0 text-body-secondary">{{lead.salary}} </p>
|
||||||
</div>
|
</div>
|
||||||
<div class="mb-4">
|
<div class="mb-3">
|
||||||
<div class="d-flex align-items-center mb-1"><span class="me-2 uil uil-clock"></span>
|
<div class="d-flex align-items-center mb-1"><span class="me-2 uil uil-clock"></span>
|
||||||
<h5 class="text-body-highlight mb-0">{{ _("Created")}}</h5>
|
<h5 class="text-body-highlight mb-0">{{ _("Created")}}</h5>
|
||||||
</div>
|
</div>
|
||||||
<p class="mb-0 text-body-secondary">{{ lead.created|date }}</p>
|
<p class="mb-0 text-body-secondary">{{ lead.created|date }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="mb-4">
|
<div class="mb-3">
|
||||||
<div class="d-flex align-items-center mb-1"><span class="me-2 uil uil-file-check-alt"></span>
|
<div class="d-flex align-items-center mb-1"><span class="me-2 uil uil-file-check-alt"></span>
|
||||||
<h5 class="text-body-highlight mb-0">{{ _("Lead Source")}}</h5>
|
<h5 class="text-body-highlight mb-0">{{ _("Lead Source")}}</h5>
|
||||||
</div>
|
</div>
|
||||||
<p class="mb-0 text-body-secondary">{{ lead.source|upper }}</p>
|
<p class="mb-0 text-body-secondary">{{ lead.source|upper }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="mb-4">
|
<div class="mb-3">
|
||||||
<div class="d-flex align-items-center mb-1"><span class="me-2 uil uil-file-check-alt"></span>
|
<div class="d-flex align-items-center mb-1"><span class="me-2 uil uil-file-check-alt"></span>
|
||||||
<h5 class="text-body-highlight mb-0">{{ _("Lead Channel")}}</h5>
|
<h5 class="text-body-highlight mb-0">{{ _("Lead Channel")}}</h5>
|
||||||
</div>
|
</div>
|
||||||
<p class="mb-0 text-body-secondary">{{ lead.channel|upper }}</p>
|
<p class="mb-0 text-body-secondary">{{ lead.channel|upper }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="mb-4">
|
<div class="mb-3">
|
||||||
<div class="d-flex align-items-center mb-1"><span class="me-2 uil uil-estate"></span>
|
<div class="d-flex align-items-center mb-1"><span class="me-2 uil uil-estate"></span>
|
||||||
<h5 class="mb-0">{{ _("Address") }}</h5>
|
<h5 class="mb-0">{{ _("Address") }}</h5>
|
||||||
</div>
|
</div>
|
||||||
<p class="mb-0 text-body-secondary">{{ lead.address}}</p>
|
<p class="mb-0 text-body-secondary">{{ lead.address}}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="mb-4">
|
<div class="mb-3">
|
||||||
<div class="d-flex align-items-center mb-1"><span class="me-2 uil uil-map"></span>
|
<div class="d-flex align-items-center mb-1"><span class="me-2 uil uil-map"></span>
|
||||||
<h5 class="mb-0 text-body-highlight">{{ _("City") }}</h5>
|
<h5 class="mb-0 text-body-highlight">{{ _("City") }}</h5>
|
||||||
</div>
|
</div>
|
||||||
@ -119,37 +121,70 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="d-lg-none top-0"></div>
|
<div class="d-lg-none top-0"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-7 col-lg-7 col-xl-8">
|
<div class="col-md-7 col-lg-7 col-xl-8">
|
||||||
|
|
||||||
<ul class="nav nav-underline fs-9 deal-details scrollbar flex-nowrap w-100 pb-1 mb-6" id="myTab" role="tablist" style="overflow-y: hidden;">
|
<ul class="nav nav-underline fs-9 deal-details scrollbar flex-nowrap w-100 pb-1 mb-6" id="myTab" role="tablist" style="overflow-y: hidden;">
|
||||||
<li class="nav-item text-nowrap me-2" role="presentation"><a class="nav-link active" id="activity-tab" data-bs-toggle="tab" href="#tab-activity" role="tab" aria-controls="tab-activity" aria-selected="false" tabindex="-1"> <span class="fa-solid fa-chart-line me-2 tab-icon-color"></span>{{ _("Activity") }}</a></li>
|
<li class="nav-item text-nowrap me-2" role="presentation"><a class="nav-link active" id="activity-tab" data-bs-toggle="tab" href="#tab-activity" role="tab" aria-controls="tab-activity" aria-selected="false" tabindex="-1"> <span class="fa-solid fa-chart-line me-2 tab-icon-color fs-8"></span>{{ _("Activity") }}</a></li>
|
||||||
<li class="nav-item text-nowrap me-2" role="presentation"><a class="nav-link" id="notes-tab" data-bs-toggle="tab" href="#tab-notes" role="tab" aria-controls="tab-notes" aria-selected="false" tabindex="-1"> <span class="fa-solid fa-clipboard me-2 tab-icon-color"></span>{{ _("Notes") }}</a></li>
|
<li class="nav-item text-nowrap me-2" role="presentation"><a class="nav-link" id="notes-tab" data-bs-toggle="tab" href="#tab-notes" role="tab" aria-controls="tab-notes" aria-selected="false" tabindex="-1"> <span class="fa-solid fa-clipboard me-2 tab-icon-color fs-8"></span>{{ _("Notes") }}</a></li>
|
||||||
<li class="nav-item text-nowrap me-2" role="presentation"><a class="nav-link" id="emails-tab" data-bs-toggle="tab" href="#tab-emails" role="tab" aria-controls="tab-emails" aria-selected="true"> <span class="fa-solid fa-envelope me-2 tab-icon-color"></span>{{ _("Emails") }}</a></li>
|
<li class="nav-item text-nowrap me-2" role="presentation"><a class="nav-link" id="emails-tab" data-bs-toggle="tab" href="#tab-emails" role="tab" aria-controls="tab-emails" aria-selected="true"> <span class="fa-solid fa-envelope me-2 tab-icon-color fs-8"></span>{{ _("Emails") }}</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="tab-content" id="myTabContent">
|
<div class="tab-content" id="myTabContent">
|
||||||
<div class="tab-pane fade active show" id="tab-activity" role="tabpanel" aria-labelledby="activity-tab">
|
<div class="tab-pane fade active show" id="tab-activity" role="tabpanel" aria-labelledby="activity-tab">
|
||||||
<div class="mb-1">
|
<div class="mb-1">
|
||||||
<h3 class="mb-4" id="scrollspyTask">{{ _("Activities") }} <span class="fw-light fs-7">({{ activities.count}})</span></h3>
|
<h3 class="mb-4" id="scrollspyTask">{{ _("Activities") }} <span class="fw-light fs-7">({{ activities.count}})</span></h3>
|
||||||
</div>
|
</div>
|
||||||
{% for activity in activities %}
|
|
||||||
<div class="row justify-content-between align-items-md-center hover-actions-trigger btn-reveal-trigger border-translucent py-3 gx-0 border-top">
|
<div class="row justify-content-between align-items-md-center hover-actions-trigger btn-reveal-trigger border-translucent py-3 gx-0 border-top">
|
||||||
<div class="col-12 col-lg-auto">
|
<div class="col-12 col-lg-auto">
|
||||||
<div class="d-flex ms-4 lh-1 align-items-center">
|
<div class="timeline-basic mb-9">
|
||||||
<p class="text-body-tertiary fs-9 ps-lg-3 fw-bold mb-md-0 mb-0">{{ activity.activity_type|capfirst }} </p>
|
{% for activity in activities %}
|
||||||
<p class="text-body-tertiary fs-10 ps-lg-3 mb-md-0 mb-0"> {{ _("by") }}: {{ activity.created_by.staff.user.get_full_name }} </p>
|
<div class="timeline-item">
|
||||||
<p class="text-body-tertiary fs-10 ps-lg-3 mb-md-0 mb-0"> {{ _("on") }}: {{ activity.created }} </p>
|
<div class="row g-3">
|
||||||
|
<div class="col-auto">
|
||||||
|
<div class="timeline-item-bar position-relative">
|
||||||
|
<div class="icon-item icon-item-md rounded-7 border border-translucent">
|
||||||
|
{% if activity.activity_type == "call" %}
|
||||||
|
<span class="fa-solid fa-phone text-warning fs-8"></span>
|
||||||
|
{% elif activity.activity_type == "email" %}
|
||||||
|
<span class="fa-solid fa-envelope text-info-light fs-8"></span>
|
||||||
|
{% elif activity.activity_type == "visit" %}
|
||||||
|
<span class="fa-solid fa-users text-danger fs-8"></span>
|
||||||
|
{% elif activity.activity_type == "whatsapp" %}
|
||||||
|
<span class="fab fa-whatsapp text-success-dark fs-7"></span>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% if forloop.last %}
|
||||||
|
<span class=""></span>
|
||||||
|
{% else %}
|
||||||
|
<span class="timeline-bar border-end border-dashed"></span>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<div class="d-flex justify-content-between">
|
||||||
|
<div class="d-flex mb-2">
|
||||||
|
<h6 class="lh-sm mb-0 me-2 text-body-secondary timeline-item-title">{{ activity.activity_type|capfirst }}</h6>
|
||||||
|
</div>
|
||||||
|
<p class="text-body-quaternary fs-9 mb-0 text-nowrap timeline-time"><span class="fa-regular fa-clock me-1"></span>{{ activity.created }}</p>
|
||||||
|
</div>
|
||||||
|
<h6 class="fs-10 fw-normal mb-3">{{ _("by") }} <a class="fw-semibold" href="#!">{{ activity.created_by.staff.user.get_full_name }}</a></h6>
|
||||||
|
<p class="fs-9 text-body-secondary w-sm-60 mb-5">{{ activity.notes }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="tab-pane fade" id="tab-notes" role="tabpanel" aria-labelledby="notes-tab">
|
<div class="tab-pane fade" id="tab-notes" role="tabpanel" aria-labelledby="notes-tab">
|
||||||
<div class="mb-1">
|
<div class="mb-1">
|
||||||
<h3 class="mb-0">{{ _("Notes") }}</h3>
|
<h3 class="mb-4" id="scrollspyNotes">{{ _("Notes") }}</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="d-flex align-items-center justify-content-end">
|
<div class="d-flex align-items-center justify-content-start">
|
||||||
<a class="fw-bold fs-9 mb-4 text-end" href="{% url 'add_note' lead.pk %}"><span class="fas fa-plus me-1"></span>{{ _("Add Note")}}</a>
|
<a id="addBtn" href="#" class="btn btn-sm btn-phoenix-primary mb-3" data-url="{% url 'add_note' lead.pk %}" data-bs-toggle="modal" data-bs-target="#noteModal" data-note-title="{{ _("Add") }}<i class='fa fa-plus-circle text-success ms-2'></i>">
|
||||||
|
<span class="fas fa-plus me-1"></span>
|
||||||
|
{% trans 'Add Note' %}
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="border-top border-bottom border-translucent" id="leadDetailsTable">
|
<div class="border-top border-bottom border-translucent" id="leadDetailsTable">
|
||||||
<div class="table-responsive scrollbar mx-n1 px-1">
|
<div class="table-responsive scrollbar mx-n1 px-1">
|
||||||
@ -158,15 +193,32 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<th class="align-middle pe-6 text-uppercase text-start" scope="col" style="width:40%;">{{ _("Note") }}</th>
|
<th class="align-middle pe-6 text-uppercase text-start" scope="col" style="width:40%;">{{ _("Note") }}</th>
|
||||||
<th class="align-middle text-start text-uppercase" scope="col" style="width:20%;">{{ _("Created By")}}</th>
|
<th class="align-middle text-start text-uppercase" scope="col" style="width:20%;">{{ _("Created By")}}</th>
|
||||||
<th class="align-middle text-start text-uppercase white-space-nowrap" scope="col" style="width:20%;">
|
<th class="align-middle text-start text-uppercase white-space-nowrap" scope="col" style="width:20%;">{{ _("Created On")}}</th>
|
||||||
{{ _("Created On")}}</th>
|
|
||||||
<th class="align-middle pe-0 text-end" scope="col" style="width:10%;"> </th>
|
<th class="align-middle pe-0 text-end" scope="col" style="width:10%;"> </th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody class="list" id="lead-details-table-body">
|
<tbody class="list" id="lead-details-table-body">
|
||||||
{% for note in notes %}
|
{% for note in notes %}
|
||||||
|
<div class="modal fade" id="deleteModal" data-bs-keyboard="false" tabindex="-1" aria-labelledby="deleteModalModal" aria-hidden="true">
|
||||||
|
<div class="modal-dialog modal-sm">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header justify-content-between align-items-start gap-5 px-4 pt-4 pb-3 border-0">
|
||||||
|
<h4 class="mb-0 me-2 text-danger">{{ _("Delete")}}<i class="fas fa-exclamation-circle text-danger ms-2"></i></h4>
|
||||||
|
<button class="btn p-0 text-body-quaternary fs-6" data-bs-dismiss="modal" aria-label="Close"><span class="fas fa-times"></span></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body p-4">
|
||||||
|
<p>{{ _("Are you sure you want to delete this note?") }}</p>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer flex justify-content-center border-top-0">
|
||||||
|
<a class="btn btn-sm btn-danger w-100" href="{% url 'delete_note' note.pk %}">
|
||||||
|
{{ _("Delete") }}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<tr class="hover-actions-trigger btn-reveal-trigger position-static">
|
<tr class="hover-actions-trigger btn-reveal-trigger position-static">
|
||||||
<td class="align-middle white-space-nowrap text-start fw-bold text-body-tertiary ps-1">{{note.note}}</td>
|
<td class="align-middle text-start fw-bold text-body-tertiary ps-1">{{note.note}}</td>
|
||||||
{% if note.created_by.staff %}
|
{% if note.created_by.staff %}
|
||||||
<td class="align-middle white-space-nowrap text-start white-space-nowrap">{{ note.created_by.staff.name }}</td>
|
<td class="align-middle white-space-nowrap text-start white-space-nowrap">{{ note.created_by.staff.name }}</td>
|
||||||
{% else %}
|
{% else %}
|
||||||
@ -174,14 +226,14 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
<td class="align-middle text-body-tertiary text-start white-space-nowrap">{{ note.created }}</td>
|
<td class="align-middle text-body-tertiary text-start white-space-nowrap">{{ note.created }}</td>
|
||||||
<td class="align-middle text-end white-space-nowrap pe-0 action py-2">
|
<td class="align-middle text-end white-space-nowrap pe-0 action py-2">
|
||||||
<div class="btn-reveal-trigger position-static">
|
{% if note.created_by == request.user %}
|
||||||
<button class="btn btn-sm dropdown-toggle dropdown-caret-none transition-none btn-reveal" 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>
|
<a id="updateBtn" href="#" class="btn btn-sm btn-phoenix-primary me-2" data-url="{% url 'update_note' note.pk %}" data-bs-toggle="modal" data-bs-target="#noteModal" data-note-title="{{ _("Update") }}<i class='fas fa-pen-square text-primary ms-2'></i>">
|
||||||
<div class="dropdown-menu dropdown-menu-end py-2">
|
<i class="fas fa-pen"></i>
|
||||||
<a class="dropdown-item" href="">{{ _("View") }}</a>
|
</a>
|
||||||
<div class="dropdown-divider"></div>
|
<button class="btn btn-sm btn-phoenix-danger text-danger" type="button" data-bs-toggle="modal" data-bs-target="#deleteModal">
|
||||||
<a class="dropdown-item text-danger" href="">{{ _("Remove") }}</a>
|
<i class="fa fa-trash"></i>
|
||||||
</div>
|
</button>
|
||||||
</div>
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
@ -190,10 +242,10 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="tab-pane fade" id="tab-emails" role="tabpanel" aria-labelledby="emails-tab">
|
<div class="tab-pane fade" id="tab-emails" role="tabpanel" aria-labelledby="emails-tab">
|
||||||
<div class="mb-8">
|
<div class="mb-1">
|
||||||
<h3 class="mb-2" id="scrollspyEmails">Emails</h3>
|
<h3 class="mb-0" id="scrollspyEmails">{{ _("Emails") }}</h3>
|
||||||
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div class="scrollbar">
|
<div class="scrollbar">
|
||||||
<ul class="nav nav-underline fs-9 flex-nowrap mb-1" id="emailTab" role="tablist">
|
<ul class="nav nav-underline fs-9 flex-nowrap mb-1" id="emailTab" role="tablist">
|
||||||
@ -202,7 +254,6 @@
|
|||||||
<li class="nav-item me-3"><a class="nav-link text-nowrap border-0" id="schedule-tab" data-bs-toggle="tab" href="#tab-schedule" aria-controls="schedule-tab" role="tab" aria-selected="true">Scheduled (17)</a></li>
|
<li class="nav-item me-3"><a class="nav-link text-nowrap border-0" id="schedule-tab" data-bs-toggle="tab" href="#tab-schedule" aria-controls="schedule-tab" role="tab" aria-selected="true">Scheduled (17)</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="tab-content" id="profileTabContent">
|
<div class="tab-content" id="profileTabContent">
|
||||||
<div class="tab-pane fade show active" id="tab-mail" role="tabpanel" aria-labelledby="mail-tab">
|
<div class="tab-pane fade show active" id="tab-mail" role="tabpanel" aria-labelledby="mail-tab">
|
||||||
<div class="border-top border-bottom border-translucent" id="allEmailsTable" data-list='{"valueNames":["subject","sent","date","source","status"],"page":7,"pagination":true}'>
|
<div class="border-top border-bottom border-translucent" id="allEmailsTable" data-list='{"valueNames":["subject","sent","date","source","status"],"page":7,"pagination":true}'>
|
||||||
@ -534,7 +585,47 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- add update Modal -->
|
||||||
|
<div class="modal fade" id="noteModal" tabindex="-1" aria-labelledby="noteModalLabel" aria-hidden="true">
|
||||||
|
<div class="modal-dialog modal-sm">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header justify-content-between align-items-start gap-5 px-4 pt-4 pb-3 border-0">
|
||||||
|
<h4 class="modal-title" id="noteModalLabel">{% trans 'Notes' %}</h4>
|
||||||
|
<button class="btn p-0 text-body-quaternary fs-6" data-bs-dismiss="modal" aria-label="Close">
|
||||||
|
<span class="fas fa-times"></span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<!-- Content will be loaded here via AJAX -->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
document.addEventListener("DOMContentLoaded", function () {
|
||||||
|
const noteModal = document.getElementById("noteModal");
|
||||||
|
const modalTitle = document.getElementById("noteModalLabel");
|
||||||
|
|
||||||
|
const modalBody = noteModal.querySelector(".modal-body");
|
||||||
|
|
||||||
|
noteModal.addEventListener("show.bs.modal", function (event) {
|
||||||
|
const button = event.relatedTarget;
|
||||||
|
const url = button.getAttribute("data-url");
|
||||||
|
const title = button.getAttribute("data-note-title");
|
||||||
|
|
||||||
|
fetch(url)
|
||||||
|
.then((response) => response.text())
|
||||||
|
.then((html) => {
|
||||||
|
modalBody.innerHTML = html;
|
||||||
|
modalTitle.innerHTML = title;
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
modalBody.innerHTML = '<p class="text-danger">Error loading form. Please try again later.</p>';
|
||||||
|
console.error("Error loading form:", error);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
{% load i18n static crispy_forms_filters %}
|
{% load i18n static crispy_forms_filters %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h1>{% if object %}{{ _("Update") }}{% else %}{{ _("Create") }}{% endif %}</h1>
|
<h3>{% if object %}{{ _("Update") }}{% else %}{{ _("Create") }}{% endif %}</h3>
|
||||||
<form method="post">
|
<form method="post">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ form|crispy }}
|
{{ form|crispy }}
|
||||||
|
|||||||
17
templates/crm/note_form.html
Normal file
17
templates/crm/note_form.html
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{% load i18n static crispy_forms_filters %}
|
||||||
|
|
||||||
|
{% if form.instance.pk %}
|
||||||
|
<form method="post" action="{% url 'update_note' note.pk %}" enctype="multipart/form-data">
|
||||||
|
{% else %}
|
||||||
|
<form method="post" action="{% url 'add_note' lead.pk %}" enctype="multipart/form-data">
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% csrf_token %}
|
||||||
|
{{ form|crispy }}
|
||||||
|
|
||||||
|
{% if form.instance.pk %}
|
||||||
|
<button type="submit" class="btn btn-sm btn-primary w-100">{{ _("Update") }}</button>
|
||||||
|
{% else %}
|
||||||
|
<button type="submit" class="btn btn-sm btn-success w-100">{{ _("Add") }}</button>
|
||||||
|
{% endif %}
|
||||||
|
</form>
|
||||||
@ -8,7 +8,7 @@
|
|||||||
<h2 class="mb-5">{{ _("Opportunities") }}</h2>
|
<h2 class="mb-5">{{ _("Opportunities") }}</h2>
|
||||||
<div class="d-xl-flex justify-content-between">
|
<div class="d-xl-flex justify-content-between">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<a class="btn btn-primary me-4" href="{% url 'opportunity_create' %}"><span class="fas fa-plus me-2"></span>{{ _("Add Opportunity") }}</a>
|
<a class="btn btn-sm btn-phoenix-primary me-4" href="{% url 'opportunity_create' %}"><span class="fas fa-plus me-2"></span>{{ _("Add Opportunity") }}</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -104,16 +104,16 @@
|
|||||||
<p class="fs-9 mb-1 fw-bold"> {{ _("Probability") }}: %</p>
|
<p class="fs-9 mb-1 fw-bold"> {{ _("Probability") }}: %</p>
|
||||||
<div class="progress" style="height:16px">
|
<div class="progress" style="height:16px">
|
||||||
{% if opportunity.probability >= 25 and opportunity.probability < 49 %}
|
{% if opportunity.probability >= 25 and opportunity.probability < 49 %}
|
||||||
<div class="progress-bar rounded-pill bg-danger" role="progressbar" style="width: {{ opportunity.probability }}%" aria-valuenow="{{ opportunity.probability }}" aria-valuemin="0" aria-valuemax="100">
|
<div class="progress-bar rounded-pill bg-danger-dark" role="progressbar" style="width: {{ opportunity.probability }}%" aria-valuenow="{{ opportunity.probability }}" aria-valuemin="0" aria-valuemax="100">
|
||||||
<span class="fw-bold fs-10 text-sm-end text-secondary me-1">{{ opportunity.probability }}</span>
|
<span class="fw-bolder fs-9 text-sm-end me-1">{{ opportunity.probability }}</span>
|
||||||
</div>
|
</div>
|
||||||
{% elif opportunity.probability >= 50 and opportunity.probability <= 74 %}
|
{% elif opportunity.probability >= 50 and opportunity.probability <= 74 %}
|
||||||
<div class="progress-bar rounded-pill bg-warning" role="progressbar" style="width: {{ opportunity.probability }}%" aria-valuenow="{{ opportunity.probability }}" aria-valuemin="0" aria-valuemax="100">
|
<div class="progress-bar rounded-pill bg-warning-dark" role="progressbar" style="width: {{ opportunity.probability }}%" aria-valuenow="{{ opportunity.probability }}" aria-valuemin="0" aria-valuemax="100">
|
||||||
<span class="fw-bold fs-10 text-sm-end text-secondary me-1">{{ opportunity.probability }}</span>
|
<span class="fw-bolder fs-9 text-sm-end me-1">{{ opportunity.probability }}</span>
|
||||||
</div>
|
</div>
|
||||||
{% elif opportunity.probability >= 75 and opportunity.probability <= 100 %}
|
{% elif opportunity.probability >= 75 and opportunity.probability <= 100 %}
|
||||||
<div class="progress-bar rounded-pill bg-success" role="progressbar" style="width: {{ opportunity.probability }}%" aria-valuenow="{{ opportunity.probability }}" aria-valuemin="0" aria-valuemax="100">
|
<div class="progress-bar rounded-pill bg-success-dark" role="progressbar" style="width: {{ opportunity.probability }}%" aria-valuenow="{{ opportunity.probability }}" aria-valuemin="0" aria-valuemax="100">
|
||||||
<span class="fw-bold fs-10 text-sm-end text-secondary me-1">{{ opportunity.probability }}</span>
|
<span class="fw-bolder fs-9 text-sm-end me-1">{{ opportunity.probability }}</span>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -11,7 +11,7 @@
|
|||||||
<div class="col-auto">
|
<div class="col-auto">
|
||||||
<div class="d-md-flex justify-content-between">
|
<div class="d-md-flex justify-content-between">
|
||||||
<div>
|
<div>
|
||||||
<a href="{% url 'customer_create' %}" class="btn btn-primary me-4"><span class="fas fa-plus me-2"></span>{{ _("Add Customer") }}</a>
|
<a href="{% url 'customer_create' %}" class="btn btn-sm btn-phoenix-primary me-4"><span class="fas fa-plus me-2"></span>{{ _("Add Customer") }}</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -364,7 +364,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Registration Modal -->
|
<!-- Registration Modal -->
|
||||||
<div class="modal fade" id="registrationModal" tabindex="-1" aria-labelledby="cregistrationModalLabel" aria-hidden="true">
|
<div class="modal fade" id="registrationModal" tabindex="-1" aria-labelledby="registrationModalLabel" aria-hidden="true">
|
||||||
<div class="modal-dialog modal-sm">
|
<div class="modal-dialog modal-sm">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
|
|||||||
@ -17,38 +17,35 @@
|
|||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{% include 'partials/form_errors.html' %}
|
{% include 'partials/form_errors.html' %}
|
||||||
<div class="d-flex flex-column min-vh-100">
|
<div class="d-flex flex-column min-vh-100">
|
||||||
<div class="d-flex flex-column flex-sm-grow-1 p-4">
|
<div class="d-flex flex-column flex-sm-grow-1 p-0">
|
||||||
<main class="d-grid gap-4 p-1">
|
|
||||||
<div class="row g-4">
|
<div class="row g-4">
|
||||||
<h3 class="mb-3">{% trans 'Add Car' %}</h3>
|
<h3 class="mb-3">{% trans 'Add Car' %}</h3>
|
||||||
|
|
||||||
<!-- VIN -->
|
<!-- VIN -->
|
||||||
<div class="col-lg-4 col-xl-6">
|
<div class="col-lg-4 col-xl-6">
|
||||||
<div class="card h-100">
|
<div class="card bg-body">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="row">
|
|
||||||
<div>
|
|
||||||
<div class="form-floating">
|
<div class="form-floating">
|
||||||
<input type="text"
|
<input type="text"
|
||||||
class="form-control"
|
class="form-control form-control-sm"
|
||||||
id="{{ form.vin.id_for_label }}" name="{{ form.vin.html_name }}" required/>
|
id="{{ form.vin.id_for_label }}" name="{{ form.vin.html_name }}" required/>
|
||||||
<label for="{{ form.vin.id_for_label }}">{% trans 'VIN' %}</label>
|
<label for="{{ form.vin.id_for_label }}">{% trans 'VIN' %}</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div class="input-group input-group-sm my-2">
|
<div class="input-group input-group-sm my-2">
|
||||||
<button type="button"
|
<button type="button"
|
||||||
class="btn btn-phoenix-warning fs-8 rounded-start"
|
class="btn btn-warning rounded-start"
|
||||||
id="scan-vin-btn"
|
id="scan-vin-btn"
|
||||||
data-bs-toggle="modal"
|
data-bs-toggle="modal"
|
||||||
data-bs-target="#scannerModal">
|
data-bs-target="#scannerModal">
|
||||||
<span class="fas fa-camera"></span>
|
<span class="fas fa-camera fs-9"></span>
|
||||||
</button>
|
</button>
|
||||||
<button type="button" class="btn btn-sm btn-phoenix-primary rounded-end" id="decodeVinBtn">
|
<button type="button" class="btn btn-sm btn-primary rounded-end ms-1" id="decodeVinBtn">
|
||||||
{% trans 'Search' %}
|
<span class="fas fa-search fs-9 fw-bolder"></span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div class="row my-3">
|
<div class="row mt-2">
|
||||||
<div class="col-6">
|
<div class="col-6">
|
||||||
<div class="form-floating">
|
<div class="form-floating">
|
||||||
<span class="text-success fw-bold" id="year-check"></span>
|
<span class="text-success fw-bold" id="year-check"></span>
|
||||||
@ -70,7 +67,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row my-3">
|
<div class="row mt-2">
|
||||||
<div class="col-6" id="make-row">
|
<div class="col-6" id="make-row">
|
||||||
<div class="form-floating">
|
<div class="form-floating">
|
||||||
<span class="text-success fw-bold" id="make-check"></span>
|
<span class="text-success fw-bold" id="make-check"></span>
|
||||||
@ -89,7 +86,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row my-3">
|
<div class="row mt-2">
|
||||||
<div class="col-6" id="model-row">
|
<div class="col-6" id="model-row">
|
||||||
<div class="form-floating">
|
<div class="form-floating">
|
||||||
<span class="text-success fw-bold" id="model-check"></span>
|
<span class="text-success fw-bold" id="model-check"></span>
|
||||||
@ -122,14 +119,14 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row g-3">
|
<div class="row g-3">
|
||||||
<div class="col-lg-4 col-xl-6">
|
<div class="col-lg-4 col-xl-6">
|
||||||
<div class="row g-3">
|
<div class="row">
|
||||||
|
|
||||||
<!--Vendor Field-->
|
<!--Vendor Field-->
|
||||||
<div class="col-lg-4 col-xl-4">
|
<div class="col-lg-4 col-xl-4">
|
||||||
<div class="card h-100">
|
<div class="card bg-body my-1">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="form-floating">
|
<div class="form-floating">
|
||||||
{{ form.vendor|add_class:"form-select form-select-sm" }}
|
{{ form.vendor|add_class:"form-select form-select-sm" }}
|
||||||
@ -142,7 +139,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- Stock Type Card -->
|
<!-- Stock Type Card -->
|
||||||
<div class="col-lg-4 col-xl-4">
|
<div class="col-lg-4 col-xl-4">
|
||||||
<div class="card h-100">
|
<div class="card bg-body my-1">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="form-floating">
|
<div class="form-floating">
|
||||||
{{ form.stock_type|add_class:"form-select form-select-sm" }}
|
{{ form.stock_type|add_class:"form-select form-select-sm" }}
|
||||||
@ -155,7 +152,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- Mileage Card -->
|
<!-- Mileage Card -->
|
||||||
<div class="col-lg-4 col-xl-4">
|
<div class="col-lg-4 col-xl-4">
|
||||||
<div class="card h-100">
|
<div class="card bg-body my-1">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="form-floating">
|
<div class="form-floating">
|
||||||
{{ form.mileage|add_class:"form-control form-control-sm" }}
|
{{ form.mileage|add_class:"form-control form-control-sm" }}
|
||||||
@ -167,7 +164,7 @@
|
|||||||
|
|
||||||
<!-- Receiving Date Field -->
|
<!-- Receiving Date Field -->
|
||||||
<div class="col-lg-4 col-xl-4">
|
<div class="col-lg-4 col-xl-4">
|
||||||
<div class="card h-100 border-1 rounded shadow">
|
<div class="card bg-body my-3">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="form-floating">
|
<div class="form-floating">
|
||||||
{{ form.receiving_date|add_class:"form-control form-control-sm" }}
|
{{ form.receiving_date|add_class:"form-control form-control-sm" }}
|
||||||
@ -182,7 +179,7 @@
|
|||||||
|
|
||||||
<!-- Remarks Card -->
|
<!-- Remarks Card -->
|
||||||
<div class="col-lg-4 col-xl-8">
|
<div class="col-lg-4 col-xl-8">
|
||||||
<div class="card h-100">
|
<div class="card bg-body my-3">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="form-floating">
|
<div class="form-floating">
|
||||||
{{ form.remarks|add_class:"form-control form-control-sm" }}
|
{{ form.remarks|add_class:"form-control form-control-sm" }}
|
||||||
@ -205,10 +202,10 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
|
||||||
|
|
||||||
<!--Specification Modal-->
|
<!--Specification Modal-->
|
||||||
<div class="modal fade"
|
<div class="modal fade"
|
||||||
@ -292,6 +289,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user