diff --git a/project_task_date_deadline_cascade_update/__manifest__.py b/project_task_date_deadline_cascade_update/__manifest__.py index 9601fda..475787e 100644 --- a/project_task_date_deadline_cascade_update/__manifest__.py +++ b/project_task_date_deadline_cascade_update/__manifest__.py @@ -6,16 +6,14 @@ 'description': """ This module ensures that when a parent task's deadline is updated, all child tasks' deadlines are automatically updated to match. """, - 'author': 'Your Name', - 'license': 'AGPL-3', - 'website': 'https://www.yourwebsite.com', + 'author': 'Bemade', + 'license': 'LGPL-3', + 'website': 'https://www.bemade.org', 'depends': [ 'project', 'project_enterprise' ], 'data': [ - 'views/res_config_settings_views.xml', - 'data/res_config_settings_data.xml', ], 'installable': True, 'auto_install': False, diff --git a/project_task_date_deadline_cascade_update/data/res_config_settings_data.xml b/project_task_date_deadline_cascade_update/data/res_config_settings_data.xml deleted file mode 100644 index 11c1d09..0000000 --- a/project_task_date_deadline_cascade_update/data/res_config_settings_data.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - project_task_date_deadline_cascade_update.enablecascade - False - - - diff --git a/project_task_date_deadline_cascade_update/models/__init__.py b/project_task_date_deadline_cascade_update/models/__init__.py index 0ce6827..d44ba0c 100644 --- a/project_task_date_deadline_cascade_update/models/__init__.py +++ b/project_task_date_deadline_cascade_update/models/__init__.py @@ -1,4 +1,3 @@ # -*- coding: utf-8 -*- from . import project_task -from . import res_config_settings diff --git a/project_task_date_deadline_cascade_update/models/project_task.py b/project_task_date_deadline_cascade_update/models/project_task.py index 86bd12f..755cf09 100644 --- a/project_task_date_deadline_cascade_update/models/project_task.py +++ b/project_task_date_deadline_cascade_update/models/project_task.py @@ -19,7 +19,7 @@ class ProjectTask(models.Model): if not self.child_ids: return - _logger.info( + _logger.debug( 'Starting update for all subtasks of: %s (ID: %s)', self.name, self.id ) @@ -33,7 +33,7 @@ class ProjectTask(models.Model): 'date_deadline': date_deadline, 'planned_date_begin': planned_date_begin } - _logger.info( + _logger.debug( 'Updating %d subtasks with values: %s', len(all_subtasks), values ) @@ -43,17 +43,36 @@ class ProjectTask(models.Model): def _onchange_date_deadline(self): """When parent task deadline changes, update all child tasks deadlines and planned dates recursively.""" if self.date_deadline and self.child_ids and not self.env.context.get('skip_onchange'): - _logger.info('Recursively updating deadline and planned date for all subtasks of: %s', self.name) + _logger.debug('Recursively updating deadline and planned date for all subtasks of: %s', self.name) self.with_context(skip_onchange=True)._update_child_dates_recursive( date_deadline=self.date_deadline, planned_date_begin=self.planned_date_begin # Always pass planned_date_begin ) + def write(self, vals): + """Override write to handle date updates from calendar view and form view. + + The calendar view updates dates through write instead of onchange. + This ensures the cascade update works in both cases. + """ + result = super().write(vals) + + # Check if date_deadline or planned_date_begin was updated + if ('date_deadline' in vals or 'planned_date_begin' in vals) and not self.env.context.get('skip_write'): + for task in self: + if task.child_ids: + _logger.debug('Write: Recursively updating dates for all subtasks of: %s', task.name) + task.with_context(skip_write=True)._update_child_dates_recursive( + date_deadline=task.date_deadline, + planned_date_begin=task.planned_date_begin + ) + return result + @api.onchange('planned_date_begin') def _onchange_planned_date_begin(self): """When parent task planned date changes, update all child tasks planned dates and deadlines recursively.""" if self.planned_date_begin and self.child_ids and not self.env.context.get('skip_onchange'): - _logger.info('Recursively updating planned date and deadline for all subtasks of: %s', self.name) + _logger.debug('Recursively updating planned date and deadline for all subtasks of: %s', self.name) self.with_context(skip_onchange=True)._update_child_dates_recursive( planned_date_begin=self.planned_date_begin, date_deadline=self.date_deadline # Always pass date_deadline diff --git a/project_task_date_deadline_cascade_update/models/res_config_settings.py b/project_task_date_deadline_cascade_update/models/res_config_settings.py deleted file mode 100644 index 744e8dd..0000000 --- a/project_task_date_deadline_cascade_update/models/res_config_settings.py +++ /dev/null @@ -1,12 +0,0 @@ -# -*- coding: utf-8 -*- - -from odoo import fields, models - - -class ResConfigSettings(models.TransientModel): - _inherit = 'res.config.settings' - - enable_task_deadline_cascade = fields.Boolean( - string='Enable Task Deadline Cascade', - config_parameter='project_task_date_deadline_cascade_update.enablecascade' - ) diff --git a/project_task_date_deadline_cascade_update/security/ir.model.access.csv b/project_task_date_deadline_cascade_update/security/ir.model.access.csv deleted file mode 100644 index 83995b4..0000000 --- a/project_task_date_deadline_cascade_update/security/ir.model.access.csv +++ /dev/null @@ -1,2 +0,0 @@ -id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_update_deadline_wizard,access.update.deadline.wizard,model_update_deadline_wizard,project.group_project_user,1,1,1,1 diff --git a/project_task_date_deadline_cascade_update/views/res_config_settings_views.xml b/project_task_date_deadline_cascade_update/views/res_config_settings_views.xml deleted file mode 100644 index 5517118..0000000 --- a/project_task_date_deadline_cascade_update/views/res_config_settings_views.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - res.config.settings.view.form.inherit.project.task.deadline - res.config.settings - 99 - - - - - - - Enable deadline cascade update for project tasks - - - - - -