From e9e675a2bdd884d392c0bd3bff7c98cbe41c956b Mon Sep 17 00:00:00 2001 From: eLBati Date: Tue, 12 Jun 2018 17:29:56 +0200 Subject: [PATCH] ADD redmine time entry deletion syncronized with odoo --- redmine_import_time_entry/__manifest__.py | 2 +- .../models/hr_analytic_timesheet.py | 20 +++++++++++++++++++ .../models/redmine_backend.py | 8 ++++---- .../unit/import_synchronizer.py | 11 ++++++++++ 4 files changed, 36 insertions(+), 5 deletions(-) diff --git a/redmine_import_time_entry/__manifest__.py b/redmine_import_time_entry/__manifest__.py index c9c5752..4fe7748 100644 --- a/redmine_import_time_entry/__manifest__.py +++ b/redmine_import_time_entry/__manifest__.py @@ -5,7 +5,7 @@ { 'name': 'Redmine Import Time Entry', - 'version': '10.0.1.0.0', + 'version': '10.0.1.1.0', 'author': 'Savoir-faire Linux,Odoo Community Association (OCA)', 'maintainer': 'Odoo Community Association (OCA)', 'website': 'http://odoo-community.org', diff --git a/redmine_import_time_entry/models/hr_analytic_timesheet.py b/redmine_import_time_entry/models/hr_analytic_timesheet.py index 43c491e..fba2bde 100644 --- a/redmine_import_time_entry/models/hr_analytic_timesheet.py +++ b/redmine_import_time_entry/models/hr_analytic_timesheet.py @@ -1,10 +1,14 @@ # -*- coding: utf-8 -*- # © 2016 Savoir-faire Linux +# © 2018 Lorenzo Battistini - Agile Business Group # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +import logging from odoo import fields, models, api from odoo.addons.queue_job.job import job +_logger = logging.getLogger(__name__) + class RedmineTimeEntry(models.Model): _name = 'redmine.account.analytic.line' @@ -17,6 +21,22 @@ class RedmineTimeEntry(models.Model): ondelete='cascade' ) + @job + @api.model + def delete_batch(self, backend, filters=None): + with backend.work_on(self._name) as work: + deleter = work.component(usage='batch.deleter') + redmine_ids = deleter.get_all_records(filters=filters) + deleted_lines = self.search([ + ('date', '>=', filters['from_date']), + ('date', '<=', filters['to_date']), + ('redmine_id', 'not in', redmine_ids) + ]) + deleted_lines.mapped('odoo_id').unlink() + if deleted_lines: + _logger.debug( + 'Deleted %s timesheet lines' % len(deleted_lines)) + @job @api.model def import_batch(self, backend, filters=None): diff --git a/redmine_import_time_entry/models/redmine_backend.py b/redmine_import_time_entry/models/redmine_backend.py index f65c5a1..a046118 100644 --- a/redmine_import_time_entry/models/redmine_backend.py +++ b/redmine_import_time_entry/models/redmine_backend.py @@ -82,15 +82,15 @@ def prepare_time_entry_import(self): for backend in backends: today = datetime.now() date_to = to_string(today) - date_from = today - timedelta( - days=backend.time_entry_number_of_days) - + date_from = to_string(today - timedelta( + days=backend.time_entry_number_of_days)) filters = { 'from_date': date_from, 'to_date': date_to, } model = 'redmine.account.analytic.line' _logger.info( - 'Scheduling time entry batch import from Redmine ' + 'Scheduling time entry batch synchronization from Redmine ' 'with backend %s.' % backend.name) self.env[model].with_delay().import_batch(backend, filters=filters) + self.env[model].with_delay().delete_batch(backend, filters=filters) diff --git a/redmine_import_time_entry/unit/import_synchronizer.py b/redmine_import_time_entry/unit/import_synchronizer.py index 744cb9b..3df06d2 100644 --- a/redmine_import_time_entry/unit/import_synchronizer.py +++ b/redmine_import_time_entry/unit/import_synchronizer.py @@ -76,6 +76,17 @@ def run_single_user(self, filters=None, options=None): return mapping_errors +class TimeEntryBatchDeleterSynchronizer(Component): + + _name = 'redmine.account.analytic.line.batch.deleter' + _inherit = 'redmine.importer' + _usage = 'batch.deleter' + _apply_on = 'redmine.account.analytic.line' + + def get_all_records(self, filters=None): + return self.backend_adapter.search(None, filters) + + class TimeEntryImportSynchronizer(Component): _name = 'redmine.account.analytic.line.importer'