update
This commit is contained in:
parent
85a0b8e827
commit
7a0079e25d
@ -142,10 +142,11 @@ class StaffForm(forms.ModelForm):
|
||||
queryset=CustomGroup.objects.all(),
|
||||
required=True,
|
||||
)
|
||||
|
||||
name = forms.CharField(
|
||||
label=_("Full Name"))
|
||||
class Meta:
|
||||
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
|
||||
|
||||
@ -223,7 +223,7 @@ class CarMake(models.Model, LocalizedNameMixin):
|
||||
name = models.CharField(max_length=255, blank=True, null=True)
|
||||
slug = models.SlugField(max_length=255, unique=True, blank=True, null=True)
|
||||
arabic_name = models.CharField(max_length=255, blank=True, null=True)
|
||||
logo = models.ImageField(_("logo"), upload_to="car_make", blank=True, null=True,default="user-logo.jpg")
|
||||
logo = models.ImageField(_("logo"), upload_to="car_make", blank=True, null=True,default="user-logo.jpg")
|
||||
is_sa_import = models.BooleanField(default=False)
|
||||
car_type = models.SmallIntegerField(choices=CarType.choices, blank=True, null=True)
|
||||
|
||||
@ -1278,6 +1278,8 @@ class Staff(models.Model, LocalizedNameMixin):
|
||||
StaffMember, 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"))
|
||||
arabic_name = models.CharField(max_length=255, verbose_name=_("Arabic Name"))
|
||||
phone_number = PhoneNumberField(region="SA", verbose_name=_("Phone Number"))
|
||||
@ -2000,6 +2002,8 @@ class Lead(models.Model):
|
||||
.order_by("-updated")
|
||||
.first()
|
||||
)
|
||||
def get_absolute_url(self):
|
||||
return reverse("lead_detail", args=[self.slug])
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if not self.slug:
|
||||
|
||||
@ -914,7 +914,7 @@ class SearchCodeView(LoginRequiredMixin, View):
|
||||
)
|
||||
car = get_object_or_404(models.Car, vin=code)
|
||||
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(
|
||||
{
|
||||
@ -3405,6 +3405,7 @@ class UserCreateView(
|
||||
return form
|
||||
|
||||
def form_valid(self, form):
|
||||
staff = form.save(commit=False)
|
||||
dealer = get_object_or_404(models.Dealer, slug=self.kwargs["dealer_slug"])
|
||||
if dealer.is_staff_exceed_quota_limit:
|
||||
messages.error(
|
||||
@ -3426,14 +3427,13 @@ class UserCreateView(
|
||||
return redirect("user_create", dealer_slug=dealer.slug)
|
||||
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.save()
|
||||
|
||||
staff_member = StaffMember.objects.create(user=user)
|
||||
for service in form.cleaned_data["service_offered"]:
|
||||
staff_member.services_offered.add(service)
|
||||
staff = form.save(commit=False)
|
||||
staff.staff_member = staff_member
|
||||
staff.dealer = dealer
|
||||
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 |
@ -17,8 +17,8 @@
|
||||
</h3>
|
||||
</div>
|
||||
<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 %}
|
||||
{{ form|crispy }}
|
||||
<hr class="my-2">
|
||||
@ -27,7 +27,7 @@
|
||||
<a href="{% url 'dealer_detail' request.dealer.slug %}" class="btn btn-lg btn-phoenix-secondary"><i class="fa-solid fa-ban me-1"></i>{% trans "Cancel" %}</a>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -39,7 +39,6 @@
|
||||
|
||||
<div class="empty-state-container">
|
||||
<!-- Empty State Illustration -->
|
||||
|
||||
|
||||
{% if image %}
|
||||
{% static image as final_image_path %}
|
||||
|
||||
@ -504,7 +504,7 @@
|
||||
</li>
|
||||
{% else %}
|
||||
<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>
|
||||
{% endif %}
|
||||
{% if request.is_dealer %}
|
||||
|
||||
@ -19,8 +19,8 @@
|
||||
<script src="{% static 'vendors/zxing/index.min.js' %}"></script>
|
||||
<script src="{% static 'vendors/tesseract/tesseract.min.js' %}"></script>
|
||||
{% if not vendor_exists %}
|
||||
{% url "vendor_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 %}
|
||||
{% url "user_create" request.dealer.slug as create_vendor_url %}
|
||||
{% include "empty-illustration-page.html" with value="Vendor" url=create_vendor_url %}
|
||||
{% endif %}
|
||||
<!---->
|
||||
<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 %}
|
||||
<script>
|
||||
// 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
|
||||
document.addEventListener('DOMContentLoaded', initPage);
|
||||
document.addEventListener('htmx:afterSwap', initPage);
|
||||
|
||||
function initPage() {
|
||||
let codeReader;
|
||||
let currentStream = null;
|
||||
const csrfToken = getCookie("csrftoken");
|
||||
const ajaxUrl = "{% url 'ajax_handler' request.dealer.slug %}";
|
||||
|
||||
// Get DOM elements
|
||||
const elements = {
|
||||
vinInput: document.getElementById("{{ form.vin.id_for_label }}"),
|
||||
|
||||
@ -70,20 +70,20 @@
|
||||
</style>
|
||||
|
||||
<div class="empty-state-container alert mb-2" role="alert">
|
||||
|
||||
|
||||
<img src="{% static message_image %}" alt="message-image" class="empty-state-image mb-2">
|
||||
<!-- Title -->
|
||||
<h3 class="empty-state-title mb-2">
|
||||
{% blocktrans %}{{ value1}}{% endblocktrans %}
|
||||
</h3>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="d-flex justify-content-between mt-4">
|
||||
<a class="btn btn-primary mx-2" href="{{ url }}">
|
||||
<i class="fa fa-plus me-2"></i>
|
||||
{% blocktrans %}{{value2}}{% endblocktrans %}
|
||||
</a>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@ -125,16 +125,15 @@
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
{% if not items %}
|
||||
|
||||
{% 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/empty/no_car.png" url=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 %}
|
||||
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col">
|
||||
{% if not customer_count %}
|
||||
{% 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 %}
|
||||
</div>
|
||||
<div>
|
||||
|
||||
@ -18,7 +18,6 @@
|
||||
<div class="card shadow-sm border-0 rounded-3">
|
||||
<div class="card-header bg-gray-200 py-3 border-0 rounded-top-3">
|
||||
<h3 class="mb-0 fs-4 text-center">
|
||||
|
||||
{% if staff.created %}
|
||||
{{ _("Edit Staff") }}
|
||||
{% else %}
|
||||
@ -31,6 +30,8 @@
|
||||
<form class="row g-3 mb-3" method="post" class="form" novalidate>
|
||||
{% csrf_token %}
|
||||
{{ redirect_field }}
|
||||
{{ form.first_name|as_crispy_field }}
|
||||
{{ form.last_name|as_crispy_field }}
|
||||
{{ form.name|as_crispy_field }}
|
||||
{{ form.arabic_name|as_crispy_field }}
|
||||
{{ form.email|as_crispy_field }}
|
||||
@ -49,10 +50,10 @@
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
{% endblock %}
|
||||
|
||||
@ -18,9 +18,9 @@
|
||||
<a href="{% url 'group_list' request.dealer.slug %}"
|
||||
class="btn btn-sm btn-phoenix-success"><i class="fa-solid fa-user-group me-1"></i> {% trans "Manage Groups & Permissions" %}</a>
|
||||
{% else %}
|
||||
|
||||
|
||||
{% 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 %}
|
||||
</div>
|
||||
@ -81,18 +81,14 @@
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{% else %}
|
||||
{% if request.user.userplan %}
|
||||
{% 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"%}
|
||||
{% else %}
|
||||
{% if request.user.userplan %}
|
||||
{% url "user_create" request.dealer.slug as create_staff_url %}
|
||||
{% include "empty-illustration-page.html" with value="staff" url=create_staff_url %}
|
||||
|
||||
{% else %}
|
||||
{% 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 %}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% 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" url=pricing_page_url %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
|
||||
|
||||
|
||||
{% endblock %}
|
||||
|
||||
2
templates/vendors/vendors_list.html
vendored
2
templates/vendors/vendors_list.html
vendored
@ -166,6 +166,6 @@
|
||||
|
||||
{% else %}
|
||||
{% 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 %}
|
||||
{% endblock %}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user