From 1fd00af6ac932fcc5640b07ace2247480dadf661 Mon Sep 17 00:00:00 2001 From: ismail Date: Thu, 24 Jul 2025 18:42:38 +0300 Subject: [PATCH] more updates --- inventory/views.py | 39 ++++++++++++-------- static/js/main.js | 43 ++++++++++++++++++++++ templates/crm/leads/lead_detail.html | 3 -- templates/crm/notifications_history.html | 2 +- templates/customers/view_customer.html | 47 +++++++----------------- templates/partials/search_box.html | 29 +++------------ 6 files changed, 87 insertions(+), 76 deletions(-) diff --git a/inventory/views.py b/inventory/views.py index b619acf7..6f420dd6 100644 --- a/inventory/views.py +++ b/inventory/views.py @@ -2293,8 +2293,10 @@ class CustomerDetailView(LoginRequiredMixin, PermissionRequiredMixin, DetailView dealer = get_user_type(self.request) entity = dealer.entity context = super().get_context_data(**kwargs) - context["customer_notes"] = models.Notes.objects.filter( - object_id=self.object.pk + + context["notes"] = models.Notes.objects.filter( + dealer=dealer, + content_type__model="customer", object_id=self.object.id ) estimates = entity.get_estimates().filter(customer=self.object.customer_model) invoices = entity.get_invoices().filter(customer=self.object.customer_model) @@ -2304,6 +2306,7 @@ class CustomerDetailView(LoginRequiredMixin, PermissionRequiredMixin, DetailView context["estimates"] = estimates context["invoices"] = invoices context["total"] = total + context["note_form"] = forms.NoteForm() return context @@ -4337,16 +4340,12 @@ def sales_list_view(request, dealer_slug): except Exception as e: print(e) - # query = request.GET.get('q') - # # if query: - # # qs = qs.filter( - # # Q(order_number__icontains=query) | - # # Q(customer__name__icontains=query) | - # # Q(item_details__icontains=query) - - # # ).distinct() - # for so in qs: - # if query in so.customer_customer + search_query = request.GET.get('q', None) + if search_query: + qs = qs.filter( + Q(order_number__icontains=search_query)| + Q(customer__customer_name__icontains=search_query) + ).distinct() paginator = Paginator(qs, 30) page_number = request.GET.get("page") @@ -4446,22 +4445,32 @@ class EstimateListView(LoginRequiredMixin, PermissionRequiredMixin, ListView): related_content_type=ContentType.objects.get_for_model(models.Staff), related_object_id=self.request.staff.pk, ) - context["staff_estimates"] = EstimateModel.objects.filter(pk__in=[x.content_object.pk for x in qs]) + qs = EstimateModel.objects.filter(pk__in=[x.content_object.pk for x in qs]) + search_query = self.request.GET.get('q', None) + if search_query: + qs = qs.filter( + Q(estimate_number__icontains=search_query)| + Q(customer__customer_name__icontains=search_query) + ).distinct() + context["staff_estimates"] = qs return context def get_queryset(self): dealer = get_user_type(self.request) entity = dealer.entity status = self.request.GET.get("status") + queryset = entity.get_estimates() if status: queryset = queryset.filter(status=status) search_query = self.request.GET.get('q', None) + if search_query: queryset = queryset.filter( - Q(estimate_number__icontains=search_query) - + Q(estimate_number__icontains=search_query)| + Q(customer__customer_name__icontains=search_query) ).distinct() + return queryset diff --git a/static/js/main.js b/static/js/main.js index da998095..10093df8 100644 --- a/static/js/main.js +++ b/static/js/main.js @@ -249,3 +249,46 @@ const getDataTableInit = () => { }; + + +/* + // Register delete modal initializer +htmxInitializer.register(function initDeleteModals() { + const deleteModal = document.getElementById("deleteModal"); + const confirmDeleteBtn = document.getElementById("deleteModalConfirm"); + const deleteModalMessage = document.getElementById("deleteModalText"); + + // Clean up old listeners + document.querySelectorAll(".delete-btn").forEach(btn => { + btn.removeEventListener("click", handleDeleteClick); + }); + + // Add new listeners + document.querySelectorAll(".delete-btn").forEach(button => { + button.addEventListener("click", handleDeleteClick); + }); + + function handleDeleteClick() { + if (!deleteModal || !confirmDeleteBtn || !deleteModalMessage) return; + + const deleteUrl = this.getAttribute("data-url"); + const deleteMessage = this.getAttribute("data-message") || "Are you sure?"; + + confirmDeleteBtn.setAttribute("href", deleteUrl); + deleteModalMessage.textContent = deleteMessage; + + if (typeof htmx !== 'undefined') htmx.process(confirmDeleteBtn); + if (typeof bootstrap !== 'undefined') new bootstrap.Modal(deleteModal).show(); + } +}, "delete_modals"); + +// Register custom selects initializer +htmxInitializer.register(function initCustomSelects() { + // Your custom select initialization code +}, "custom_selects"); + +// Register form submission initializer +htmxInitializer.register(function initForms() { + // Your form handling code +}, "forms"); +*/ \ No newline at end of file diff --git a/templates/crm/leads/lead_detail.html b/templates/crm/leads/lead_detail.html index 977db24e..bb7283d3 100644 --- a/templates/crm/leads/lead_detail.html +++ b/templates/crm/leads/lead_detail.html @@ -811,9 +811,6 @@

- {{ _("View in Calendar") }} -
+ {% endif %}
{% endif %} @@ -105,8 +104,8 @@ - - {% for note in customer_notes %} + + {% for note in notes %} @@ -223,28 +222,9 @@ - + {% include "components/note_modal.html" with content_type="customer" slug=customer.slug %} + {% endblock %} diff --git a/templates/partials/search_box.html b/templates/partials/search_box.html index fabad3c6..ee61669b 100644 --- a/templates/partials/search_box.html +++ b/templates/partials/search_box.html @@ -1,35 +1,16 @@ -
{{ _("Note") }} {{ _("Date") }}
{{ note.note }} {{ note.created }}