From 88bf90b19cef74ceca6b57e2b5430044f6a9020e Mon Sep 17 00:00:00 2001 From: Zeryab Khan Date: Tue, 28 May 2024 17:38:22 +0500 Subject: [PATCH 1/3] [ISSUE-3526] Keep closed ConnectWise projects for a period after closing --- djconnectwise/__init__.py | 2 +- djconnectwise/sync.py | 30 +++++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/djconnectwise/__init__.py b/djconnectwise/__init__.py index 07bbcb1..2ac7bc4 100644 --- a/djconnectwise/__init__.py +++ b/djconnectwise/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -VERSION = (1, 5, 5, 'final') +VERSION = (1, 5, 6, 'final') # pragma: no cover if VERSION[-1] != "final": diff --git a/djconnectwise/sync.py b/djconnectwise/sync.py index 297e47d..c3812ae 100644 --- a/djconnectwise/sync.py +++ b/djconnectwise/sync.py @@ -2148,9 +2148,11 @@ def parent_object_ids(self): class ProjectSynchronizer(CreateRecordMixin, - UpdateRecordMixin, Synchronizer): + UpdateRecordMixin, BatchConditionMixin, + Synchronizer): client_class = api.ProjectAPIClient model_class = models.ProjectTracker + batch_condition_list = [] related_meta = { 'status': (models.ProjectStatus, 'status'), 'manager': (models.Member, 'manager'), @@ -2189,6 +2191,32 @@ def __init__(self, *args, **kwargs): i in models.ProjectStatus.objects.filter(closed_flag=False) ) )] + self.batch_condition_list = self.api_conditions + + def get_batch_condition(self,conditions): + batch_condition = self.api_conditions[-1] + + request_settings = DjconnectwiseSettings().get_settings() + keep_closed = request_settings.get('keep_closed_ticket_days') + if keep_closed: + batch_condition = self.format_conditions( + keep_closed, batch_condition, request_settings) + + return batch_condition + + def format_conditions(self, keep_closed, + batch_condition, request_settings): + closed_date = timezone.now() - timezone.timedelta(days=keep_closed) + condition = 'lastUpdated>[{}]'.format(closed_date) + + keep_closed_board_ids = \ + request_settings.get('keep_closed_status_board_ids') + if keep_closed_board_ids: + condition = '{} and board/id in ({})'.format( + condition, keep_closed_board_ids) + + batch_condition = '{} or {}'.format(batch_condition, condition) + return batch_condition def _assign_field_data(self, instance, json_data): actual_start = json_data.get('actualStart') From f6beb755521f05fcb110354a939985948992562b Mon Sep 17 00:00:00 2001 From: kti-sam Date: Wed, 29 May 2024 13:37:28 -0700 Subject: [PATCH 2/3] pep8 --- djconnectwise/sync.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/djconnectwise/sync.py b/djconnectwise/sync.py index c3812ae..05dfa67 100644 --- a/djconnectwise/sync.py +++ b/djconnectwise/sync.py @@ -2193,7 +2193,7 @@ def __init__(self, *args, **kwargs): )] self.batch_condition_list = self.api_conditions - def get_batch_condition(self,conditions): + def get_batch_condition(self, conditions): batch_condition = self.api_conditions[-1] request_settings = DjconnectwiseSettings().get_settings() From 80824e17e91421fa88db77f024114b9a865707cb Mon Sep 17 00:00:00 2001 From: Zeryab Khan Date: Thu, 30 May 2024 19:18:14 +0500 Subject: [PATCH 3/3] [ISSUE-3526] Keep closed ConnectWise projects for a period after closing --- djconnectwise/sync.py | 49 ++++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/djconnectwise/sync.py b/djconnectwise/sync.py index 05dfa67..b19d621 100644 --- a/djconnectwise/sync.py +++ b/djconnectwise/sync.py @@ -2148,11 +2148,10 @@ def parent_object_ids(self): class ProjectSynchronizer(CreateRecordMixin, - UpdateRecordMixin, BatchConditionMixin, + UpdateRecordMixin, Synchronizer): client_class = api.ProjectAPIClient model_class = models.ProjectTracker - batch_condition_list = [] related_meta = { 'status': (models.ProjectStatus, 'status'), 'manager': (models.Member, 'manager'), @@ -2185,38 +2184,40 @@ def __init__(self, *args, **kwargs): # Only sync projects in non-closed statuses. We could simply use # closedFlag=False but API versions before 2019.5 don't support the # closedFlag field and we need to support those versions for now. - self.api_conditions = ['status/id in ({})'.format( - ','.join( - str(i.id) for - i in models.ProjectStatus.objects.filter(closed_flag=False) + project_conditions = [ + 'status/id in ({})'.format( + ','.join( + str(status.id) + for status in models.ProjectStatus.objects.filter( + closed_flag=False + ) + ) + ) + ] + request_settings = DjconnectwiseSettings().get_settings() + keep_closed_days = request_settings.get('keep_closed_ticket_days') + if keep_closed_days: + project_conditions = self.format_conditions( + keep_closed_days, project_conditions, request_settings ) - )] - self.batch_condition_list = self.api_conditions - - def get_batch_condition(self, conditions): - batch_condition = self.api_conditions[-1] - - request_settings = DjconnectwiseSettings().get_settings() - keep_closed = request_settings.get('keep_closed_ticket_days') - if keep_closed: - batch_condition = self.format_conditions( - keep_closed, batch_condition, request_settings) - return batch_condition + self.api_conditions = project_conditions - def format_conditions(self, keep_closed, - batch_condition, request_settings): - closed_date = timezone.now() - timezone.timedelta(days=keep_closed) + def format_conditions(self, keep_closed_days, + project_conditions, request_settings): + closed_date = \ + timezone.now() - timezone.timedelta(days=keep_closed_days) condition = 'lastUpdated>[{}]'.format(closed_date) keep_closed_board_ids = \ request_settings.get('keep_closed_status_board_ids') if keep_closed_board_ids: condition = '{} and board/id in ({})'.format( - condition, keep_closed_board_ids) + condition, keep_closed_board_ids + ) - batch_condition = '{} or {}'.format(batch_condition, condition) - return batch_condition + project_conditions.append(condition) + return project_conditions def _assign_field_data(self, instance, json_data): actual_start = json_data.get('actualStart')