diff --git a/inventory/forms.py b/inventory/forms.py index 2b36887c..05d7df1a 100644 --- a/inventory/forms.py +++ b/inventory/forms.py @@ -186,6 +186,17 @@ class CustomerForm(forms.ModelForm): "address", 'image', ] + widgets = { + 'title': forms.Select(attrs={'class': 'form-control form-control-sm'}), + 'first_name': forms.TextInput(attrs={'class': 'form-control form-control-sm'}), + 'last_name': forms.TextInput(attrs={'class': 'form-control form-control-sm'}), + 'email': forms.EmailInput(attrs={'class': 'form-control form-control-sm'}), + 'phone_number': forms.TextInput(attrs={'class': 'form-control form-control-sm'}), + 'national_id': forms.TextInput(attrs={'class': 'form-control form-control-sm'}), + 'dob': DateInput(attrs={'class': 'form-control form-control-sm', 'type': 'date'}), + 'address': forms.Textarea(attrs={'class': 'form-control form-control-sm'}), + 'image': forms.FileInput(attrs={'class': 'form-control form-control-sm'}), + } # class CustomerForm(forms.Form): # """ # Represents a form for collecting customer information. @@ -1025,6 +1036,7 @@ class LeadForm(forms.ModelForm): "hx-swap": "outerHTML", "hx-on::before-request": "document.querySelector('#id_id_car_model').setAttribute('disabled', true)", "hx-on::after-request": "document.querySelector('#id_id_car_model').removeAttribute('disabled')", + "hx-indicator": "#spinner", } ), required=True, diff --git a/inventory/views.py b/inventory/views.py index a3bd2ceb..f61f9694 100644 --- a/inventory/views.py +++ b/inventory/views.py @@ -2091,7 +2091,7 @@ class CustomerUpdateView(LoginRequiredMixin, PermissionRequiredMixin, UpdateView @login_required -def delete_customer(request, pk): +def delete_customer(request, slug): """ Deletes a customer from the system and deactivates the corresponding user account. @@ -2107,7 +2107,7 @@ def delete_customer(request, pk): :return: A redirect response to the customer list page. :rtype: HttpResponseRedirect """ - customer = get_object_or_404(models.Customer, pk=pk) + customer = get_object_or_404(models.Customer, slug=slug) customer.deactivate_account() messages.success(request, _("Customer deactivated successfully")) return redirect("customer_list") @@ -3760,7 +3760,7 @@ def create_sale_order(request, pk): models.Car.objects.get(vin=item.item_model.name).mark_as_sold(request) messages.success(request, "Sale Order created successfully") - return redirect("estimate_detail", pk=pk) + return redirect("estimate_detail", pk=estimate.pk) form = forms.SaleOrderForm() form.fields["estimate"].queryset = EstimateModel.objects.filter(pk=pk) @@ -4246,7 +4246,6 @@ def invoice_create(request, pk): form = forms.InvoiceModelCreateForm( entity_slug=entity.slug, user_model=entity.admin ) - form.initial.update( { "customer": estimate.customer, @@ -4255,6 +4254,7 @@ def invoice_create(request, pk): "unearned_account": dealer.settings.invoice_unearned_account, } ) + print(dir(form.fields["customer"])) context = { "form": form, @@ -4675,11 +4675,15 @@ def lead_create(request): form = forms.LeadForm() form.filter_qs(dealer=dealer) - make = request.GET.get("id_car_make", None) - if make: + if make := request.GET.get("id_car_make", None): form.fields["id_car_model"].queryset = models.CarModel.objects.filter( id_car_make=int(make) ) + else: + if first_make := form.fields["id_car_make"].queryset.first(): + form.fields["id_car_model"].queryset = models.CarModel.objects.filter( + id_car_make=first_make.id_car_make + ) return render(request, "crm/leads/lead_form.html", {"form": form}) def lead_tracking(request): @@ -4769,7 +4773,7 @@ class LeadUpdateView(LoginRequiredMixin, PermissionRequiredMixin, UpdateView): @login_required @permission_required("inventory.delete_lead", raise_exception=True) -def LeadDeleteView(request, pk): +def LeadDeleteView(request, slug): """ Handles the deletion of a Lead along with its associated customer and potentially a related user account in the system. Ensures proper permissions and login @@ -4780,7 +4784,7 @@ def LeadDeleteView(request, pk): :param pk: The primary key identifier of the Lead to be deleted. :return: An HTTP redirect response to the lead list page. """ - lead = get_object_or_404(models.Lead, pk=pk) + lead = get_object_or_404(models.Lead, slug=slug) try: User.objects.get(email=lead.customer.email).delete() lead.customer.delete() @@ -5193,11 +5197,11 @@ class OpportunityCreateView(CreateView,SuccessMessageMixin, LoginRequiredMixin): dealer = get_user_type(self.request) return context - def get_form_kwargs(self): - kwargs = super().get_form_kwargs() - dealer = get_user_type(self.request) - kwargs["car"].queryset = models.Car.objects.filter(dealer=dealer,) - return kwargs + # def get_form_kwargs(self): + # kwargs = super().get_form_kwargs() + # dealer = get_user_type(self.request) + # kwargs["car"].queryset = models.Car.objects.filter(dealer=dealer,) + # return kwargs # def get_initial(self): # initial = super().get_initial() diff --git a/templates/crm/leads/lead_form.html b/templates/crm/leads/lead_form.html index db8da5da..f396c898 100644 --- a/templates/crm/leads/lead_form.html +++ b/templates/crm/leads/lead_form.html @@ -1,11 +1,26 @@ {% extends 'base.html' %} {% load i18n static crispy_forms_filters %} +{% block customcss %} + +{% endblock customcss %} {% block content %}

{% if object %}{{ _("Update") }}{% else %}{{ _("Create") }}{% endif %}

-
+
+
{% csrf_token %} {{ form|crispy }} @@ -21,4 +36,23 @@
+ {% endblock %} \ No newline at end of file diff --git a/templates/crm/leads/lead_list.html b/templates/crm/leads/lead_list.html index 33830e27..57e4ca00 100644 --- a/templates/crm/leads/lead_list.html +++ b/templates/crm/leads/lead_list.html @@ -132,9 +132,7 @@ {{ _("Action") }} - - - + image {% for lead in leads %}