234 lines
17 KiB
HTML
234 lines
17 KiB
HTML
{% extends 'base.html' %}
|
|
{% load i18n static %}
|
|
{% block title %}{{ _('Leads')|capfirst }}{% endblock title %}
|
|
|
|
{% block content %}
|
|
<div class="row g-3">
|
|
<h2 class="mb-4">{{ _("Leads")|capfirst }}</h2>
|
|
<div class="row g-3 justify-content-between mb-4">
|
|
<div class="col-auto">
|
|
<div class="d-md-flex justify-content-between">
|
|
<div>
|
|
<a href="{% url 'lead_create' %}" class="btn btn-phoenix-primary"><span class="fas fa-plus me-2"></span>{{ _("Add Lead") }}</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-auto">
|
|
<div class="d-flex">
|
|
<div class="search-box me-2">
|
|
<form method="get" class="d-inline-block position-relative">
|
|
<div class="input-group">
|
|
<button type="submit" class="btn btn-phoenix-primary"><span class="fas fa-search search-box-icon"></span></button>
|
|
<input name="q" class="form-control search-input search" type="search" placeholder="{{ _('Enter lead name') }}" value="{{ request.GET.q }}" />
|
|
{% if request.GET.q %}
|
|
<a href="{% url request.resolver_match.view_name %}" class="btn btn-close"></a>
|
|
</div>
|
|
{% endif %}
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="row g-3">
|
|
<div class="col-12">
|
|
{% if page_obj.object_list %}
|
|
<div class="table-responsive scrollbar mx-n1 px-1">
|
|
<table class="table fs-9 mb-0 border-top border-translucent">
|
|
<thead>
|
|
<tr>
|
|
<th class="align-middle white-space-nowrap text-uppercase" scope="col" style="width: 20%;">{{ _("Lead Name")|capfirst }}</th>
|
|
<th class="align-middle white-space-nowrap text-uppercase" scope="col" style="width: 15%;">
|
|
<div class="d-inline-flex flex-center">
|
|
<div class="d-flex align-items-center px-1 py-1 bg-success-subtle rounded me-2"><i class="text-success-dark fas fa-car"></i></div>
|
|
<span>{{ _("Car")|capfirst }}</span>
|
|
</div>
|
|
</th>
|
|
<th class="align-middle white-space-nowrap text-uppercase" scope="col" style="width: 15%;">
|
|
<div class="d-inline-flex flex-center">
|
|
<div class="d-flex align-items-center px-1 py-1 bg-success-subtle rounded me-2"><span class="text-success-dark" data-feather="mail"></span></div>
|
|
<span>{{ _("email")|capfirst }}</span>
|
|
</div>
|
|
</th>
|
|
<th class="align-middle white-space-nowrap text-uppercase" scope="col" style="width: 15%;">
|
|
<div class="d-inline-flex flex-center">
|
|
<div class="d-flex align-items-center px-1 py-1 bg-primary-subtle rounded me-2"><span class="text-primary-dark" data-feather="phone"></span></div>
|
|
<span>{{ _("Phone Number") }}</span>
|
|
</div>
|
|
</th>
|
|
<th class="align-middle white-space-nowrap text-uppercase" scope="col" style="width: 15%;">
|
|
<div class="d-inline-flex flex-center">
|
|
<div class="d-flex align-items-center px-1 py-1 bg-primary-subtle rounded me-2"><span class="text-primary-dark" data-feather="phone"></span></div>
|
|
<span>{{ _("Schedule") }}</span>
|
|
</div>
|
|
</th>
|
|
<th class="align-middle white-space-nowrap text-uppercase" scope="col" style="width: 10%;">
|
|
<div class="d-inline-flex flex-center">
|
|
<div class="d-flex align-items-center bg-info-subtle rounded me-2"><span class="text-info-dark" data-feather="database"></span></div>
|
|
<span>{{ _("Assigned To")|capfirst }}</span>
|
|
</div>
|
|
</th>
|
|
<th class="align-middle white-space-nowrap text-uppercase" scope="col" style="width: 10%;">
|
|
<div class="d-inline-flex flex-center">
|
|
<div class="d-flex align-items-center bg-info-subtle rounded me-2"><span class="text-info-dark" data-feather="database"></span></div>
|
|
<span>{{ _("Source")|capfirst }}</span>
|
|
</div>
|
|
</th>
|
|
<th class="align-middle white-space-nowrap text-uppercase" scope="col" style="width: 10%;">
|
|
<div class="d-inline-flex flex-center">
|
|
<div class="d-flex align-items-center bg-warning-subtle rounded me-2"><span class="text-warning-dark" data-feather="grid"></span></div>
|
|
<span>{{ _("Channel")|capfirst }}</span>
|
|
</div>
|
|
</th>
|
|
<th class="align-middle white-space-nowrap text-uppercase" scope="col" style="width: 15%;">
|
|
{{ _("Create date") }}
|
|
</th>
|
|
<th class="text-end white-space-nowrap align-middle" scope="col"></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody class="list" id="lead-tables-body">
|
|
{% for lead in leads %}
|
|
<!-- Delete Modal -->
|
|
<div class="modal fade" id="deleteModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="deleteModalLabel" aria-hidden="true">
|
|
<div class="modal-dialog modal-sm">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title" id="deleteModalLabel">
|
|
{% trans "Delete Lead" %}
|
|
<span data-feather="alert-circle"></span>
|
|
</h5>
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
</div>
|
|
<div class="modal-body text-center">
|
|
<p class="mb-0 text-danger fw-bold">
|
|
{% trans "Are you sure you want to delete this lead?" %}
|
|
</p>
|
|
<button type="button" class="btn btn-secondary btn-sm" data-bs-dismiss="modal">
|
|
{% trans "No" %}
|
|
</button>
|
|
<a type="button" class="btn btn-danger btn-sm" href="{% url 'lead_delete' lead.pk %}">
|
|
{% trans "Yes" %}
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<tr class="hover-actions-trigger btn-reveal-trigger position-static">
|
|
<td class="name align-middle white-space-nowrap ps-0">
|
|
<div class="d-flex align-items-center"><a href="#!">
|
|
</a>
|
|
<div><a class="fs-8 fw-bold" href="{% url 'lead_detail' lead.pk %}">{{lead.full_name}}</a>
|
|
<div class="d-flex align-items-center">
|
|
<p class="mb-0 text-body-highlight fw-semibold fs-9 me-2"></p>
|
|
{% if lead.status == "new" %}
|
|
<span class="badge badge-phoenix badge-phoenix-primary"><span class="badge-label">{{_("New")}}</span><span class="fa fa-bell ms-1"></span></span>
|
|
{% elif lead.status == "pending" %}
|
|
<span class="badge badge-phoenix badge-phoenix-warning"><span class="badge-label">{{_("Pending")}}</span><span class="fa fa-clock-o ms-1"></span></span>
|
|
{% elif lead.status == "in_progress" %}
|
|
<span class="badge badge-phoenix badge-phoenix-info"><span class="badge-label">{{_("In Progress")}}</span><span class="fa fa-wrench ms-1"></span></span>
|
|
{% elif lead.status == "qualified" %}
|
|
<span class="badge badge-phoenix badge-phoenix-success"><span class="badge-label">{{_("Qualified")}}</span><span class="fa fa-check ms-1"></span></span>
|
|
{% elif lead.status == "canceled" %}
|
|
<span class="badge badge-phoenix badge-phoenix-danger"><span class="badge-label">{{_("Canceled")}}</span><span class="fa fa-times ms-1"></span></span>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</td>
|
|
|
|
<td class="align-middle white-space-nowrap fw-semibold"><a class="text-body-highlight" href="">{{ lead.id_car_make.get_local_name }} - {{ lead.id_car_model.get_local_name }} {{ lead.year }}</a></td>
|
|
<td class="align-middle white-space-nowrap fw-semibold"><a class="text-body-highlight" href="">{{ lead.email }}</a></td>
|
|
<td class="align-middle white-space-nowrap fw-semibold"><a class="text-body-highlight" href="tel:{{ lead.phone_number }}">{{ lead.phone_number }}</a></td>
|
|
<td class="align-middle white-space-nowrap fw-semibold">
|
|
{% if lead.get_latest_schedule %}
|
|
{% if lead.get_latest_schedule.scheduled_type == "Call" %}
|
|
<span class="badge badge-phoenix badge-phoenix-primary text-primary {% if lead.get_latest_schedule.schedule_past_date %}badge-phoenix-danger text-danger{% endif %} fw-semibold"><span class="text-primary {% if lead.get_latest_schedule.schedule_past_date %}text-danger{% endif %}" data-feather="phone"></span>
|
|
{{ lead.get_latest_schedule.scheduled_at }}</span>
|
|
{% elif lead.get_latest_schedule.scheduled_type == "Meeting" %}
|
|
<span class="badge badge-phoenix badge-phoenix-success text-success fw-semibold"><span class="text-success" data-feather="calendar"></span>
|
|
{{ lead.get_latest_schedule.scheduled_at }}</span>
|
|
{% elif lead.get_latest_schedule.scheduled_type == "Email" %}
|
|
<span class="badge badge-phoenix badge-phoenix-warning text-warning fw-semibold"><span class="text-warning" data-feather="email"></span>
|
|
{{ lead.get_latest_schedule.scheduled_at }}</span>
|
|
{% endif %}
|
|
{% endif %}
|
|
</td>
|
|
<td class="align-middle white-space-nowrap text-body-tertiary text-opacity-85 fw-semibold text-body-highlight">{{ lead.staff|upper }}</td>
|
|
<td class="align-middle white-space-nowrap fw-semibold text-body-highlight">{{ lead.source|upper }}</td>
|
|
<td class="align-middle white-space-nowrap text-body-tertiary text-opacity-85 fw-semibold text-body-highlight">{{ lead.channel|upper }}</td>
|
|
<td class="align-middle white-space-nowrap text-end">
|
|
<div class="btn-reveal-trigger position-static">
|
|
<button
|
|
class="btn btn-sm dropdown-toggle dropdown-caret-none transition-none btn-reveal fs-10"
|
|
type="button"
|
|
data-bs-toggle="dropdown"
|
|
data-boundary="window"
|
|
aria-haspopup="true"
|
|
aria-expanded="false"
|
|
data-bs-reference="parent">
|
|
<span class="fas fa-ellipsis-h fs-10"></span>
|
|
</button>
|
|
<div class="dropdown-menu dropdown-menu-end py-2">
|
|
<a href="{% url 'lead_update' lead.id %}" class="dropdown-item text-success-dark">{% trans "Edit" %}</a>
|
|
<a href="{% url 'send_lead_email' lead.id %}" class="dropdown-item text-success-dark">{% trans "Send Email" %}</a>
|
|
<a href="{% url 'schedule_lead' lead.id %}" class="dropdown-item text-success-dark">{% trans "Set Schedule" %}</a>
|
|
{% if not lead.is_converted %}
|
|
<a href="{% url 'lead_convert' lead.id %}" class="dropdown-item text-success-dark">{% trans "Convert To Customer" %}</a>
|
|
{% endif %}
|
|
<div class="dropdown-divider"></div>
|
|
<button class="dropdown-item text-danger" data-bs-toggle="modal" data-bs-target="#deleteModal">{% trans "Delete" %}</button>
|
|
</div>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
{% endif %}
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="row align-items-center justify-content-end py-4 pe-0 fs-9">
|
|
<div class="col-auto">
|
|
<!-- Optional: Pagination -->
|
|
{% if is_paginated %}
|
|
<nav aria-label="Page navigation">
|
|
<ul class="pagination pagination-sm justify-content-center">
|
|
{% if page_obj.has_previous %}
|
|
<li class="page-item py-0">
|
|
<a class="page-link" href="?page={{ page_obj.previous_page_number }}" aria-label="Previous">
|
|
<span aria-hidden="true">«</span>
|
|
</a>
|
|
</li>
|
|
{% else %}
|
|
<li class="page-item disabled">
|
|
<a class="page-link" href="#" aria-label="Previous">
|
|
<span aria-hidden="true">«</span>
|
|
</a>
|
|
</li>
|
|
{% endif %} {% for num in page_obj.paginator.page_range %} {% if page_obj.number == num %}
|
|
<li class="page-item active"><a class="page-link" href="?page={{ num }}">{{ num }}</a></li>
|
|
{% else %}
|
|
<li class="page-item"><a class="page-link" href="?page={{ num }}">{{ num }}</a></li>
|
|
{% endif %} {% endfor %} {% if page_obj.has_next %}
|
|
<li class="page-item">
|
|
<a class="page-link" href="?page={{ page_obj.next_page_number }}" aria-label="Next">
|
|
<span aria-hidden="true">»</span>
|
|
</a>
|
|
</li>
|
|
{% else %}
|
|
<li class="page-item disabled">
|
|
<a class="page-link" href="#" aria-label="Next">
|
|
<span aria-hidden="true">»</span>
|
|
</a>
|
|
</li>
|
|
{% endif %}
|
|
</ul>
|
|
</nav>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
{% endblock %}
|