[FIX] hr_timesheet, project: let user disable Timesheets in config

This change allows uninstallation of hr_timesheet from the configuration of
Project.

Previously, attempting to disable the Timesheets feature from the configuration
of Project resulted in a user error that requested the user to first remove
tasks in projects that were linked to analytic accounts. This was caused by the
removal of demo data during the uninstallation of hr_timesheet, which attempted
to unlink analytic accounts before unlinking the projects that were referencing
those accounts. The order in which demo data are removed during uninstallation
of a module is currently not fixed. This change avoids the problem by instead
removing the explicit creation of analytic accounts as demo data.

Furthermore, hr_timesheet would be immediately re-installed upon uninstallation
through project_timesheet_synchro and project_timesheet_holidays. Disabling
those modules along with hr_timesheet fixes this.

Task 2339016

closes odoo/odoo#60134

X-original-commit: 43db576b7f0efed563ee597ab087e4d7ef5c74d9
Signed-off-by: Yannick Tivisse (yti) <yti@odoo.com>
This commit is contained in:
Dominik Rubo
2020-10-30 08:32:04 +00:00
parent 442326bc29
commit f4c1f54223
2 changed files with 11 additions and 16 deletions
@@ -17,26 +17,12 @@
</record>
<!-- Projects -->
<record id="account_analytic_account_project_1" model="account.analytic.account">
<field name="name">Office Design</field>
<field name="code">OD</field>
<field name="active" eval="True"/>
</record>
<record id="project.project_project_1" model="project.project">
<field name="allow_timesheets" eval="True"/>
<field name="analytic_account_id" ref="account_analytic_account_project_1"/>
</record>
<record id="account_analytic_account_project_2" model="account.analytic.account">
<field name="name">Research &amp; Development Project</field>
<field name="code">RD</field>
<field name="active" eval="True"/>
</record>
<record id="project.project_project_2" model="project.project">
<field name="allow_timesheets" eval="True"/>
<field name="analytic_account_id" ref="account_analytic_account_project_2"/>
</record>
<!-- Timesheet Lines -->
@@ -7,8 +7,10 @@ from odoo import api, fields, models
class ResConfigSettings(models.TransientModel):
_inherit = 'res.config.settings'
module_project_timesheet_synchro = fields.Boolean("Awesome Timesheet")
module_project_timesheet_holidays = fields.Boolean("Record Time Off")
module_project_timesheet_synchro = fields.Boolean("Awesome Timesheet",
compute="_compute_timesheet_modules", store=True, readonly=False)
module_project_timesheet_holidays = fields.Boolean("Record Time Off",
compute="_compute_timesheet_modules", store=True, readonly=False)
project_time_mode_id = fields.Many2one(
'uom.uom', related='company_id.project_time_mode_id', string='Project Time Unit', readonly=False,
help="This will set the unit of measure used in projects and tasks.\n"
@@ -27,3 +29,10 @@ class ResConfigSettings(models.TransientModel):
product_uom_day = self.env.ref('uom.product_uom_day')
for settings in self:
settings.is_encode_uom_days = settings.timesheet_encode_uom_id == product_uom_day
@api.depends('module_hr_timesheet')
def _compute_timesheet_modules(self):
self.filtered(lambda config: not config.module_hr_timesheet).update({
'module_project_timesheet_synchro': False,
'module_project_timesheet_holidays': False,
})