summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPrakash Prajapati <ppr@odoo.com>2021-05-10 11:47:42 +0000
committerPrakash Prajapati <ppr@odoo.com>2021-05-20 08:12:51 +0000
commit5fc2f6943bbeb3e12740681ba9aaa22d2bd8abf3 (patch)
tree904c73e94c222829e49535d7bee7c0ef970fa209
parent279dcbe7232fbd331902ec557f6c85b51ca522c0 (diff)
[FIX] sale_timesheet: fix domain of project on product
Currently, create a service product and select a project or a project template from the 'sales' tab, it is not possible to select projects with allow_timesheets = false So in this commit, the domain of the project_id and the project_template_id fields should include projects for which allow_timesheets is false except if the 'Timesheets on tasks' option is selected as a service_policy Also if onchage of service_policy, the project field will be empty. TaskID-2522084 closes odoo/odoo#70609 Signed-off-by: LTU-Odoo <IT-Ideas@users.noreply.github.com>
-rw-r--r--addons/sale_timesheet/models/product.py32
1 files changed, 30 insertions, 2 deletions
diff --git a/addons/sale_timesheet/models/product.py b/addons/sale_timesheet/models/product.py
index 0c54ef8486c..3d6e07661f9 100644
--- a/addons/sale_timesheet/models/product.py
+++ b/addons/sale_timesheet/models/product.py
@@ -19,8 +19,8 @@ class ProductTemplate(models.Model):
('timesheet', 'Timesheets on project (one fare per SO/Project)'),
], ondelete={'timesheet': 'set default'})
# override domain
- project_id = fields.Many2one(domain="[('company_id', '=', current_company_id), ('allow_billable', '=', True), ('bill_type', '=', 'customer_task'), ('allow_timesheets', 'in', [service_policy == 'delivered_timesheet' or '', True])]")
- project_template_id = fields.Many2one(domain="[('company_id', '=', current_company_id), ('allow_billable', '=', True), ('bill_type', '=', 'customer_project'), ('allow_timesheets', 'in', [service_policy == 'delivered_timesheet' or '', True])]")
+ project_id = fields.Many2one(domain="[('company_id', '=', current_company_id), ('allow_billable', '=', True), ('bill_type', '=', 'customer_task'), ('allow_timesheets', 'in', [service_policy == 'delivered_timesheet', True])]")
+ project_template_id = fields.Many2one(domain="[('company_id', '=', current_company_id), ('allow_billable', '=', True), ('bill_type', '=', 'customer_project'), ('allow_timesheets', 'in', [service_policy == 'delivered_timesheet', True])]")
def _default_visible_expense_policy(self):
visibility = self.user_has_groups('project.group_project_user')
@@ -68,6 +68,25 @@ class ProductTemplate(models.Model):
self.invoice_policy = 'order'
return res
+ @api.model
+ def _get_onchange_service_policy_updates(self, service_tracking, service_policy, project_id, project_template_id):
+ vals = {}
+ if service_tracking != 'no' and service_policy == 'delivered_timesheet':
+ if project_id and not project_id.allow_timesheets:
+ vals['project_id'] = False
+ elif project_template_id and not project_template_id.allow_timesheets:
+ vals['project_template_id'] = False
+ return vals
+
+ @api.onchange('service_policy')
+ def _onchange_service_policy(self):
+ vals = self._get_onchange_service_policy_updates(self.service_tracking,
+ self.service_policy,
+ self.project_id,
+ self.project_template_id)
+ if vals:
+ self.update(vals)
+
def unlink(self):
time_product = self.env.ref('sale_timesheet.time_product')
if time_product.product_tmpl_id in self:
@@ -92,6 +111,15 @@ class ProductProduct(models.Model):
self.ensure_one()
return self.type == 'service' and self.service_policy == 'delivered_timesheet'
+ @api.onchange('service_policy')
+ def _onchange_service_policy(self):
+ vals = self.product_tmpl_id._get_onchange_service_policy_updates(self.service_tracking,
+ self.service_policy,
+ self.project_id,
+ self.project_template_id)
+ if vals:
+ self.update(vals)
+
def unlink(self):
time_product = self.env.ref('sale_timesheet.time_product')
if time_product in self: