diff --git a/inventory/models.py b/inventory/models.py index c7c0e6ab..f31ae132 100644 --- a/inventory/models.py +++ b/inventory/models.py @@ -1958,7 +1958,7 @@ class Opportunity(models.Model): loss_reason = models.CharField(max_length=255, blank=True, null=True) def get_notes(self): - return self._get_filter(Notes) + return self._get_filter(Notes).order_by("-created") def get_activities(self): return self._get_filter(Activity) @@ -1968,7 +1968,7 @@ class Opportunity(models.Model): def get_schedules(self): return self.lead.get_all_schedules().filter( scheduled_at__gt=timezone.now() - ) + ).order_by("scheduled_at") def get_emails(self): return self._get_filter(Email) @@ -1980,7 +1980,7 @@ class Opportunity(models.Model): lead_objects = Model.objects.filter( content_type__model="lead", object_id=self.lead.id ) - objects = objects.union(lead_objects) + objects = objects.union(lead_objects).order_by("-created") return objects def save(self, *args, **kwargs): diff --git a/inventory/views.py b/inventory/views.py index 710fa429..872df45e 100644 --- a/inventory/views.py +++ b/inventory/views.py @@ -26,7 +26,7 @@ from django.db.models import Q from django.conf import settings from django.db.models import Func from django.contrib import messages -from django.http import Http404, JsonResponse, HttpResponseForbidden +from django.http import Http404, HttpResponseRedirect, JsonResponse, HttpResponseForbidden from django.forms import HiddenInput, ValidationError from django.shortcuts import HttpResponse @@ -5220,13 +5220,7 @@ def schedule_lead(request, slug): instance.customer = lead.get_customer_model() - # Create AppointmentRequest - # service,_ = Service.objects.get_or_create(name=instance.scheduled_type,duration=datetime.timedelta(minutes=10),price=0) service = Service.objects.get(name=instance.scheduled_type) - # service = Service.objects.filter(name=instance.scheduled_type).first() - # if not service: - # messages.error(request, "Service not found!") - # return redirect("lead_list") try: appointment_request = AppointmentRequest.objects.create( @@ -5251,13 +5245,16 @@ def schedule_lead(request, slug): instance.save() messages.success( - request, _("Lead scheduled and appointment created successfully") + request, _("Appointment Created Successfully") ) - return redirect("lead_list") + try: + if lead.opportunity: + return redirect("opportunity_detail", slug=lead.opportunity.slug) + except models.Lead.opportunity.RelatedObjectDoesNotExist: + return redirect("lead_list") else: messages.error(request, f"Invalid form data: {str(form.errors)}") - return redirect("lead_list") - + return redirect("schedule_lead", slug=lead.slug) form = forms.ScheduleForm() return render(request, "crm/leads/schedule_lead.html", {"lead": lead, "form": form}) @@ -5330,9 +5327,16 @@ def send_lead_email(request, slug, email_pk=None): activity_type=models.ActionChoices.EMAIL, ) messages.success(request, _("Email Draft successfully")) - response = HttpResponse(redirect("lead_detail", slug=lead.slug)) - response["HX-Redirect"] = reverse("lead_detail", args=[lead.slug]) - return response + try: + if lead.opportunity: + response = HttpResponse(redirect("opportunity_detail", slug=lead.opportunity.slug)) + response["HX-Redirect"] = reverse("opportunity_detail", args=[lead.opportunity.slug]) + else: + response = HttpResponse(redirect("lead_detail", slug=lead.slug)) + response["HX-Redirect"] = reverse("lead_detail", args=[lead.slug]) + return response + except models.Lead.opportunity.RelatedObjectDoesNotExist: + return redirect("lead_list") if request.method == "POST": email_pk = request.POST.get("email_pk") @@ -5365,7 +5369,11 @@ def send_lead_email(request, slug, email_pk=None): activity_type=models.ActionChoices.EMAIL, ) messages.success(request, _("Email sent successfully")) - return redirect("lead_list") + try: + if lead.opportunity: + return redirect("opportunity_detail", slug=lead.opportunity.slug) + except models.Lead.opportunity.RelatedObjectDoesNotExist: + return redirect("lead_list") msg = f""" السلام عليكم Dear {lead.full_name}, diff --git a/templates/crm/leads/lead_send.html b/templates/crm/leads/lead_send.html index 4cddacd6..0b41104f 100644 --- a/templates/crm/leads/lead_send.html +++ b/templates/crm/leads/lead_send.html @@ -26,7 +26,7 @@
- Discard + Discard Save as Draft
diff --git a/templates/crm/opportunities/opportunity_detail.html b/templates/crm/opportunities/opportunity_detail.html index 8d34fa3c..6f301997 100644 --- a/templates/crm/opportunities/opportunity_detail.html +++ b/templates/crm/opportunities/opportunity_detail.html @@ -76,27 +76,20 @@

{{ _("Upcoming Events")}}

-
- {% for event in opportunity.get_schedules %} - - - - - - - - - - - - - - - -
{{ _("Type") }}{{ _("Purpose") }}{{ _("Scheduled At") }}
{{ event.scheduled_type|capfirst }}{{ event.purpose }}{{ event.scheduled_at|naturaltime|capfirst }}
- {% empty %} -

{{ _("No Invoice") }}

- {% endfor %} +
+
    + {% for event in opportunity.get_schedules %} +
  • +
    + {{ event.scheduled_type|capfirst }} + {{ event.purpose }} +
    +
    {{ event.scheduled_at|naturaltime|capfirst }}
    +
  • + {% empty %} +
  • {{ _("No upcoming events") }}
  • + {% endfor %} +
@@ -510,6 +503,14 @@

Emails

+