From 3c5d7258cb93f9e17f2f54d0ee9b4588b19f910e Mon Sep 17 00:00:00 2001 From: TosinIbikunle Date: Tue, 30 Sep 2025 07:49:38 +0100 Subject: [PATCH 1/4] processing when creating deal for case marked-request --- crm/site/requestadmin.py | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/crm/site/requestadmin.py b/crm/site/requestadmin.py index 9cf80f4..3e32f1a 100644 --- a/crm/site/requestadmin.py +++ b/crm/site/requestadmin.py @@ -22,7 +22,7 @@ from common.utils.notify_user import notify_user from common.utils.parse_full_name import parse_contacts_name from crm.forms.admin_forms import RequestForm -from crm.models import Currency +from crm.models import Currency, request from crm.models import CrmEmail from crm.models import Deal from crm.models import Output @@ -193,10 +193,11 @@ def changelist_view(self, request, extra_context=None): def get_form(self, request, obj=None, **kwargs): form = super().get_form(request, obj, **kwargs) if request.method == "POST" and '_create-deal' in request.POST: - department_id = request.user.department_id - works_globally = Department.objects.get( - id=department_id).works_globally - if works_globally: + if not (obj and obj.case and not obj.pk): # Skip if case + unsaved + department_id = request.user.department_id + works_globally = Department.objects.get( + id=department_id).works_globally + if works_globally: form.country_must_be_specified = True return form @@ -242,13 +243,15 @@ def save_model(self, request, obj, form, change): self.set_owner(request, obj) if request.user.is_manager: obj.subsequent = True - - if any(( - '_create-deal' in request.POST or 'duplicate' in form.changed_data and obj.duplicate, - '_close-case' in request.POST)): - obj.pending = False - elif '_activate-case' in request.POST: - obj.pending = True + if '_create-deal' in request.POST and obj.case and not obj.pk: + pass # Skip if case + unsaved + else: + if any(( + '_create-deal' in request.POST or 'duplicate' in form.changed_data and obj.duplicate, + '_close-case' in request.POST)): + obj.pending = False + elif '_activate-case' in request.POST: + obj.pending = True if not obj.pending: if not obj.owner: obj.owner = request.user @@ -322,7 +325,7 @@ def save_related(self, request, form, formsets, change): _change_related_objs_attrs(obj, attrs) if '_create-deal' in request.POST: - if not any((obj.pending, obj.deal, obj.duplicate, obj.case)): + if not any((obj.pending, obj.deal, obj.duplicate)): # remove obj.case check update_fields = ['deal'] d = _get_or_create_deal(obj, request) obj.deal = d From 76ab0ff5950e24254361ddd46838b73b37fc4e89 Mon Sep 17 00:00:00 2001 From: TosinIbikunle Date: Fri, 3 Oct 2025 15:19:13 +0100 Subject: [PATCH 2/4] fix: process when creating deal for case marked request updated --- crm/site/requestadmin.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/crm/site/requestadmin.py b/crm/site/requestadmin.py index 3e32f1a..3ecef90 100644 --- a/crm/site/requestadmin.py +++ b/crm/site/requestadmin.py @@ -22,7 +22,7 @@ from common.utils.notify_user import notify_user from common.utils.parse_full_name import parse_contacts_name from crm.forms.admin_forms import RequestForm -from crm.models import Currency, request +from crm.models import Currency from crm.models import CrmEmail from crm.models import Deal from crm.models import Output @@ -192,13 +192,17 @@ def changelist_view(self, request, extra_context=None): def get_form(self, request, obj=None, **kwargs): form = super().get_form(request, obj, **kwargs) + # we're interested only when Create Deal button is clicked and request is not saved. if request.method == "POST" and '_create-deal' in request.POST: - if not (obj and obj.case and not obj.pk): # Skip if case + unsaved - department_id = request.user.department_id - works_globally = Department.objects.get( + case_checked = request.POST.get('case') is not None + if case_checked and obj is None: + form.country_must_be_specified = False + else: + department_id = request.user.department_id + works_globally = Department.objects.get( id=department_id).works_globally - if works_globally: - form.country_must_be_specified = True + if works_globally: + form.country_must_be_specified = True return form def get_changeform_initial_data(self, request): @@ -244,7 +248,7 @@ def save_model(self, request, obj, form, change): if request.user.is_manager: obj.subsequent = True if '_create-deal' in request.POST and obj.case and not obj.pk: - pass # Skip if case + unsaved + pass else: if any(( '_create-deal' in request.POST or 'duplicate' in form.changed_data and obj.duplicate, @@ -325,7 +329,7 @@ def save_related(self, request, form, formsets, change): _change_related_objs_attrs(obj, attrs) if '_create-deal' in request.POST: - if not any((obj.pending, obj.deal, obj.duplicate)): # remove obj.case check + if not any((obj.pending, obj.deal, obj.duplicate, obj.case)): update_fields = ['deal'] d = _get_or_create_deal(obj, request) obj.deal = d From 6a09de0de41a53fa17dd3f2da29a1d636fc83710 Mon Sep 17 00:00:00 2001 From: TosinIbikunle Date: Mon, 6 Oct 2025 15:08:05 +0100 Subject: [PATCH 3/4] removed the redundant check for obj.pk and upddated the logic --- crm/site/requestadmin.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/crm/site/requestadmin.py b/crm/site/requestadmin.py index 3e32f1a..b8f8572 100644 --- a/crm/site/requestadmin.py +++ b/crm/site/requestadmin.py @@ -193,7 +193,9 @@ def changelist_view(self, request, extra_context=None): def get_form(self, request, obj=None, **kwargs): form = super().get_form(request, obj, **kwargs) if request.method == "POST" and '_create-deal' in request.POST: - if not (obj and obj.case and not obj.pk): # Skip if case + unsaved + if obj.case: + form.country_must_be_specified = False + else: department_id = request.user.department_id works_globally = Department.objects.get( id=department_id).works_globally @@ -243,13 +245,15 @@ def save_model(self, request, obj, form, change): self.set_owner(request, obj) if request.user.is_manager: obj.subsequent = True - if '_create-deal' in request.POST and obj.case and not obj.pk: - pass # Skip if case + unsaved - else: - if any(( - '_create-deal' in request.POST or 'duplicate' in form.changed_data and obj.duplicate, - '_close-case' in request.POST)): - obj.pending = False + + if '_create-deal' in request.POST: + # Do not deactivate if this is a case + if not obj.case: + obj.pending = False + else: + obj.pending = True + elif ('duplicate' in form.changed_data and obj.duplicate) or '_close-case' in request.POST: + obj.pending = False elif '_activate-case' in request.POST: obj.pending = True if not obj.pending: From 8460cc7dc0b261be1265fc22666439feba75649d Mon Sep 17 00:00:00 2001 From: TosinIbikunle Date: Mon, 6 Oct 2025 15:12:04 +0100 Subject: [PATCH 4/4] resolved merge conflicts. --- crm/site/requestadmin.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/crm/site/requestadmin.py b/crm/site/requestadmin.py index db22dbf..7366782 100644 --- a/crm/site/requestadmin.py +++ b/crm/site/requestadmin.py @@ -192,7 +192,6 @@ def changelist_view(self, request, extra_context=None): def get_form(self, request, obj=None, **kwargs): form = super().get_form(request, obj, **kwargs) - # we're interested only when Create Deal button is clicked and request is not saved. if request.method == "POST" and '_create-deal' in request.POST: if obj.case: form.country_must_be_specified = False @@ -200,7 +199,7 @@ def get_form(self, request, obj=None, **kwargs): department_id = request.user.department_id works_globally = Department.objects.get( id=department_id).works_globally - if works_globally: + if works_globally: form.country_must_be_specified = True return form