update
This commit is contained in:
parent
85a0b8e827
commit
7a0079e25d
@ -142,10 +142,11 @@ class StaffForm(forms.ModelForm):
|
|||||||
queryset=CustomGroup.objects.all(),
|
queryset=CustomGroup.objects.all(),
|
||||||
required=True,
|
required=True,
|
||||||
)
|
)
|
||||||
|
name = forms.CharField(
|
||||||
|
label=_("Full Name"))
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Staff
|
model = Staff
|
||||||
fields = ["name", "arabic_name", "phone_number", "address", "logo", "group"]
|
fields = ["first_name","last_name","name", "arabic_name", "phone_number", "address", "logo", "group"]
|
||||||
|
|
||||||
|
|
||||||
# Dealer Form
|
# Dealer Form
|
||||||
|
|||||||
@ -1278,6 +1278,8 @@ class Staff(models.Model, LocalizedNameMixin):
|
|||||||
StaffMember, on_delete=models.CASCADE, related_name="staff"
|
StaffMember, on_delete=models.CASCADE, related_name="staff"
|
||||||
)
|
)
|
||||||
dealer = models.ForeignKey(Dealer, on_delete=models.CASCADE, related_name="staff")
|
dealer = models.ForeignKey(Dealer, on_delete=models.CASCADE, related_name="staff")
|
||||||
|
first_name = models.CharField(max_length=255, verbose_name=_("First Name"))
|
||||||
|
last_name = models.CharField(max_length=255, verbose_name=_("Last Name"))
|
||||||
name = models.CharField(max_length=255, verbose_name=_("Name"))
|
name = models.CharField(max_length=255, verbose_name=_("Name"))
|
||||||
arabic_name = models.CharField(max_length=255, verbose_name=_("Arabic Name"))
|
arabic_name = models.CharField(max_length=255, verbose_name=_("Arabic Name"))
|
||||||
phone_number = PhoneNumberField(region="SA", verbose_name=_("Phone Number"))
|
phone_number = PhoneNumberField(region="SA", verbose_name=_("Phone Number"))
|
||||||
@ -2000,6 +2002,8 @@ class Lead(models.Model):
|
|||||||
.order_by("-updated")
|
.order_by("-updated")
|
||||||
.first()
|
.first()
|
||||||
)
|
)
|
||||||
|
def get_absolute_url(self):
|
||||||
|
return reverse("lead_detail", args=[self.slug])
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
if not self.slug:
|
if not self.slug:
|
||||||
|
|||||||
@ -914,7 +914,7 @@ class SearchCodeView(LoginRequiredMixin, View):
|
|||||||
)
|
)
|
||||||
car = get_object_or_404(models.Car, vin=code)
|
car = get_object_or_404(models.Car, vin=code)
|
||||||
logger.info(
|
logger.info(
|
||||||
f"Successfully found car (VIN: {code}, ID: {car.id}) based on scanned code for user: {request.user.username}."
|
f"Successfully found car (VIN: {code}, ID: {car.pk}) based on scanned code for user: {request.user.username}."
|
||||||
)
|
)
|
||||||
return JsonResponse(
|
return JsonResponse(
|
||||||
{
|
{
|
||||||
@ -3405,6 +3405,7 @@ class UserCreateView(
|
|||||||
return form
|
return form
|
||||||
|
|
||||||
def form_valid(self, form):
|
def form_valid(self, form):
|
||||||
|
staff = form.save(commit=False)
|
||||||
dealer = get_object_or_404(models.Dealer, slug=self.kwargs["dealer_slug"])
|
dealer = get_object_or_404(models.Dealer, slug=self.kwargs["dealer_slug"])
|
||||||
if dealer.is_staff_exceed_quota_limit:
|
if dealer.is_staff_exceed_quota_limit:
|
||||||
messages.error(
|
messages.error(
|
||||||
@ -3426,14 +3427,13 @@ class UserCreateView(
|
|||||||
return redirect("user_create", dealer_slug=dealer.slug)
|
return redirect("user_create", dealer_slug=dealer.slug)
|
||||||
password = "Tenhal@123"
|
password = "Tenhal@123"
|
||||||
|
|
||||||
user = User.objects.create_user(username=email, email=email, password=password)
|
user = User.objects.create_user(first_name=staff.first_name, last_name=staff.last_name, username=email, email=email, password=password)
|
||||||
user.is_staff = True
|
user.is_staff = True
|
||||||
user.save()
|
user.save()
|
||||||
|
|
||||||
staff_member = StaffMember.objects.create(user=user)
|
staff_member = StaffMember.objects.create(user=user)
|
||||||
for service in form.cleaned_data["service_offered"]:
|
for service in form.cleaned_data["service_offered"]:
|
||||||
staff_member.services_offered.add(service)
|
staff_member.services_offered.add(service)
|
||||||
staff = form.save(commit=False)
|
|
||||||
staff.staff_member = staff_member
|
staff.staff_member = staff_member
|
||||||
staff.dealer = dealer
|
staff.dealer = dealer
|
||||||
staff.save()
|
staff.save()
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 570 B |
BIN
static/images/logos/users/customer2.jpg
Normal file
BIN
static/images/logos/users/customer2.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 30 KiB |
@ -18,7 +18,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="card-body bg-light-subtle">
|
<div class="card-body bg-light-subtle">
|
||||||
|
|
||||||
<form method="post" enctype="multipart/form-data" class="needs-validation" novalidate>
|
<form hx-boost="false" method="post" enctype="multipart/form-data" class="needs-validation" novalidate>
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ form|crispy }}
|
{{ form|crispy }}
|
||||||
<hr class="my-2">
|
<hr class="my-2">
|
||||||
|
|||||||
@ -40,7 +40,6 @@
|
|||||||
<div class="empty-state-container">
|
<div class="empty-state-container">
|
||||||
<!-- Empty State Illustration -->
|
<!-- Empty State Illustration -->
|
||||||
|
|
||||||
|
|
||||||
{% if image %}
|
{% if image %}
|
||||||
{% static image as final_image_path %}
|
{% static image as final_image_path %}
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|||||||
@ -504,7 +504,7 @@
|
|||||||
</li>
|
</li>
|
||||||
{% else %}
|
{% else %}
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link px-3 d-block" href="{% url 'appointment:user_profile' request.user.id %}"> <span class="me-2 text-body align-bottom" data-feather="user"></span><span>{% translate 'profile'|capfirst %}</span></a>
|
<a hx-boost="false" class="nav-link px-3 d-block" href="{% url 'appointment:user_profile' request.user.id %}"> <span class="me-2 text-body align-bottom" data-feather="user"></span><span>{% translate 'profile'|capfirst %}</span></a>
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if request.is_dealer %}
|
{% if request.is_dealer %}
|
||||||
|
|||||||
@ -19,8 +19,8 @@
|
|||||||
<script src="{% static 'vendors/zxing/index.min.js' %}"></script>
|
<script src="{% static 'vendors/zxing/index.min.js' %}"></script>
|
||||||
<script src="{% static 'vendors/tesseract/tesseract.min.js' %}"></script>
|
<script src="{% static 'vendors/tesseract/tesseract.min.js' %}"></script>
|
||||||
{% if not vendor_exists %}
|
{% if not vendor_exists %}
|
||||||
{% url "vendor_create" request.dealer.slug as create_vendor_url %}
|
{% url "user_create" request.dealer.slug as create_vendor_url %}
|
||||||
{% include "message-illustration.html" with value1="Please Add A Vendor, Before Adding A Car." value2="Create Vendor" message_image="images/empty/vendor2.png" url=create_vendor_url %}
|
{% include "empty-illustration-page.html" with value="Vendor" url=create_vendor_url %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<!---->
|
<!---->
|
||||||
<div class="row justify-content-center mt-5 mb-3 {% if not vendor_exists %}d-none{% endif %}" hx-boost="false">
|
<div class="row justify-content-center mt-5 mb-3 {% if not vendor_exists %}d-none{% endif %}" hx-boost="false">
|
||||||
@ -332,16 +332,17 @@
|
|||||||
{% block customJS %}
|
{% block customJS %}
|
||||||
<script>
|
<script>
|
||||||
// Global variables
|
// Global variables
|
||||||
let codeReader;
|
|
||||||
let currentStream = null;
|
|
||||||
const csrfToken = getCookie("csrftoken");
|
|
||||||
const ajaxUrl = "{% url 'ajax_handler' request.dealer.slug %}";
|
|
||||||
|
|
||||||
// Initialize when page loads and after HTMX swaps
|
// Initialize when page loads and after HTMX swaps
|
||||||
document.addEventListener('DOMContentLoaded', initPage);
|
document.addEventListener('DOMContentLoaded', initPage);
|
||||||
document.addEventListener('htmx:afterSwap', initPage);
|
document.addEventListener('htmx:afterSwap', initPage);
|
||||||
|
|
||||||
function initPage() {
|
function initPage() {
|
||||||
|
let codeReader;
|
||||||
|
let currentStream = null;
|
||||||
|
const csrfToken = getCookie("csrftoken");
|
||||||
|
const ajaxUrl = "{% url 'ajax_handler' request.dealer.slug %}";
|
||||||
|
|
||||||
// Get DOM elements
|
// Get DOM elements
|
||||||
const elements = {
|
const elements = {
|
||||||
vinInput: document.getElementById("{{ form.vin.id_for_label }}"),
|
vinInput: document.getElementById("{{ form.vin.id_for_label }}"),
|
||||||
|
|||||||
@ -125,16 +125,15 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
{% if not items %}
|
{% if not items %}
|
||||||
|
{% url "car_add" request.dealer.slug as create_car_url %}
|
||||||
{% url "car_add" request.dealer.slug as create_car_url %}
|
{% include "message-illustration.html" with value1="Please add at least one car before creating a quotation." value2="Add car" message_image="images/logos/no-content-new.jpg" url=create_car_url %}
|
||||||
{% include "message-illustration.html" with value1="Please add at least one car before creating a quotation." value2="Add car" message_image="images/empty/no_car.png" url=create_car_url %}
|
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div class="col">
|
||||||
{% if not customer_count %}
|
{% if not customer_count %}
|
||||||
{% url "customer_create" request.dealer.slug as create_customer_url %}
|
{% url "customer_create" request.dealer.slug as create_customer_url %}
|
||||||
{% include "message-illustration.html" with value1="Please add at least one customer before creating a quotation." value2="Add Customer" message_image="images/empty/no_estimate.png" url=create_customer_url %}
|
{% include "message-illustration.html" with value1="Please add at least one customer before creating a quotation." value2="Add Customer" message_image="images/logos/no-content-new.jpg" url=create_customer_url %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
|
|||||||
@ -18,7 +18,6 @@
|
|||||||
<div class="card shadow-sm border-0 rounded-3">
|
<div class="card shadow-sm border-0 rounded-3">
|
||||||
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3">
|
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3">
|
||||||
<h3 class="mb-0 fs-4 text-center">
|
<h3 class="mb-0 fs-4 text-center">
|
||||||
|
|
||||||
{% if staff.created %}
|
{% if staff.created %}
|
||||||
{{ _("Edit Staff") }}
|
{{ _("Edit Staff") }}
|
||||||
{% else %}
|
{% else %}
|
||||||
@ -31,6 +30,8 @@
|
|||||||
<form class="row g-3 mb-3" method="post" class="form" novalidate>
|
<form class="row g-3 mb-3" method="post" class="form" novalidate>
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ redirect_field }}
|
{{ redirect_field }}
|
||||||
|
{{ form.first_name|as_crispy_field }}
|
||||||
|
{{ form.last_name|as_crispy_field }}
|
||||||
{{ form.name|as_crispy_field }}
|
{{ form.name|as_crispy_field }}
|
||||||
{{ form.arabic_name|as_crispy_field }}
|
{{ form.arabic_name|as_crispy_field }}
|
||||||
{{ form.email|as_crispy_field }}
|
{{ form.email|as_crispy_field }}
|
||||||
|
|||||||
@ -20,7 +20,7 @@
|
|||||||
{% else %}
|
{% else %}
|
||||||
|
|
||||||
{% url "pricing_page" request.dealer.slug as pricing_page_url %}
|
{% url "pricing_page" request.dealer.slug as pricing_page_url %}
|
||||||
{% include "message-illustration.html" with value1="No Active Plan, please create your subscription plan." value2="Manage Subscription" message_image="images/messages/haikal_plan_message.jpg" url=pricing_page_url %}
|
{% include "message-illustration.html" with value1="No Active Plan, please create your subscription plan." value2="Manage Subscription" url=pricing_page_url %}
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
@ -82,17 +82,13 @@
|
|||||||
</section>
|
</section>
|
||||||
|
|
||||||
{% else %}
|
{% else %}
|
||||||
{% if request.user.userplan %}
|
{% if request.user.userplan %}
|
||||||
{% url "user_create" request.dealer.slug as create_staff_url %}
|
{% url "user_create" request.dealer.slug as create_staff_url %}
|
||||||
{% include "empty-illustration-page.html" with value="staff" url=create_staff_url image="images/no_content/no_user.png"%}
|
{% include "empty-illustration-page.html" with value="staff" url=create_staff_url %}
|
||||||
|
|
||||||
{% else %}
|
{% else %}
|
||||||
{% url "pricing_page" request.dealer.slug as pricing_page_url %}
|
{% url "pricing_page" request.dealer.slug as pricing_page_url %}
|
||||||
{% include "message-illustration.html" with value1="No Active Plan, please create your subscription plan." value2="Buy Plan" message_image="images/no_content/no_plan.jpg" url=pricing_page_url %}
|
{% include "message-illustration.html" with value1="No Active Plan, please create your subscription plan." value2="Buy Plan" url=pricing_page_url %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
2
templates/vendors/vendors_list.html
vendored
2
templates/vendors/vendors_list.html
vendored
@ -166,6 +166,6 @@
|
|||||||
|
|
||||||
{% else %}
|
{% else %}
|
||||||
{% url "vendor_create" request.dealer.slug as create_vendor_url %}
|
{% url "vendor_create" request.dealer.slug as create_vendor_url %}
|
||||||
{% include "empty-illustration-page.html" with value="vendor" url=create_vendor_url image="images/no_content/no_vendor.png" %}
|
{% include "empty-illustration-page.html" with value="vendor" url=create_vendor_url %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user