[IMP] sale_timesheet: convert timesheet_product_id in related for task
Before this commit, this field is stored and contains by default the value of the same field in project.project. Moreover, we cannot choose another timesheet_product_id in task views. It means that field is most of the time the timesheet_product_id of linked project. This commit converts this stored field into related field to the same field in project.project and remove an inherit view which adds only this field without displaying in the view. task-2424382
This commit is contained in:
@@ -186,16 +186,6 @@ class Project(models.Model):
|
||||
class ProjectTask(models.Model):
|
||||
_inherit = "project.task"
|
||||
|
||||
@api.model
|
||||
def default_get(self, fields):
|
||||
result = super(ProjectTask, self).default_get(fields)
|
||||
|
||||
if not result.get('timesheet_product_id', False) and 'project_id' in result:
|
||||
project = self.env['project.project'].browse(result['project_id'])
|
||||
if project.pricing_type != 'employee_rate':
|
||||
result['timesheet_product_id'] = project.timesheet_product_id.id
|
||||
return result
|
||||
|
||||
# override sale_order_id and make it computed stored field instead of regular field.
|
||||
sale_order_id = fields.Many2one(compute='_compute_sale_order_id', store=True, readonly=False,
|
||||
domain="['|', '|', ('partner_id', '=', partner_id), ('partner_id', 'child_of', commercial_partner_id), ('partner_id', 'parent_of', partner_id)]")
|
||||
@@ -204,14 +194,7 @@ class ProjectTask(models.Model):
|
||||
is_project_map_empty = fields.Boolean("Is Project map empty", compute='_compute_is_project_map_empty')
|
||||
has_multi_sol = fields.Boolean(compute='_compute_has_multi_sol', compute_sudo=True)
|
||||
allow_billable = fields.Boolean(related="project_id.allow_billable")
|
||||
timesheet_product_id = fields.Many2one(
|
||||
'product.product', string='Service',
|
||||
domain="""[
|
||||
('type', '=', 'service'),
|
||||
('invoice_policy', '=', 'delivery'),
|
||||
('service_type', '=', 'timesheet'),
|
||||
'|', ('company_id', '=', False), ('company_id', '=', company_id)]""",
|
||||
help='Select a Service product with which you would like to bill your time spent on this task.')
|
||||
timesheet_product_id = fields.Many2one(related="project_id.timesheet_product_id")
|
||||
remaining_hours_so = fields.Float('Remaining Hours on SO', compute='_compute_remaining_hours_so')
|
||||
remaining_hours_available = fields.Boolean(related="sale_line_id.remaining_hours_available")
|
||||
|
||||
@@ -298,21 +281,6 @@ class ProjectTask(models.Model):
|
||||
domain.append(('order_id', '=?', self.project_sale_order_id.id))
|
||||
return self.env['sale.order.line'].search(domain, limit=1)
|
||||
|
||||
def action_make_billable(self):
|
||||
return {
|
||||
"name": _("Create Sales Order"),
|
||||
"type": 'ir.actions.act_window',
|
||||
"res_model": 'project.task.create.sale.order',
|
||||
"views": [[False, "form"]],
|
||||
"target": 'new',
|
||||
"context": {
|
||||
'active_id': self.id,
|
||||
'active_model': 'project.task',
|
||||
'form_view_initial_mode': 'edit',
|
||||
'default_product_id': self.timesheet_product_id.id or self.project_id.timesheet_product_id.id,
|
||||
},
|
||||
}
|
||||
|
||||
def _get_timesheet(self):
|
||||
# return not invoiced timesheet and timesheet without so_line or so_line linked to task
|
||||
timesheet_ids = super(ProjectTask, self)._get_timesheet()
|
||||
|
||||
@@ -119,7 +119,8 @@ class TestProjectBilling(TestCommonSaleTimesheet):
|
||||
Task = self.env['project.task']
|
||||
# set a customer on the project
|
||||
self.project_non_billable.write({
|
||||
'partner_id': self.partner_2.id
|
||||
'partner_id': self.partner_2.id,
|
||||
'timesheet_product_id': self.product_delivery_timesheet3,
|
||||
})
|
||||
# create a task and 2 timesheets
|
||||
task = Task.with_context(default_project_id=self.project_non_billable.id).create({
|
||||
@@ -147,7 +148,6 @@ class TestProjectBilling(TestCommonSaleTimesheet):
|
||||
'allow_billable': True,
|
||||
'pricing_type': 'fixed_rate',
|
||||
})
|
||||
task.timesheet_product_id = self.product_delivery_timesheet3
|
||||
|
||||
# create wizard
|
||||
wizard = self.env['project.create.sale.order'].with_context(active_id=self.project_non_billable.id, active_model='project.project').create({})
|
||||
|
||||
@@ -202,17 +202,6 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="quick_create_task_form_sale_timesheet" model="ir.ui.view">
|
||||
<field name="name">project.task.form.inherit.timesheet</field>
|
||||
<field name="model">project.task</field>
|
||||
<field name="inherit_id" ref="project.quick_create_task_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="project_id" position="after">
|
||||
<field name="timesheet_product_id" invisible="1"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="project_timesheet_action_client_timesheet_plan" model="ir.actions.act_window">
|
||||
<field name="name">Overview</field>
|
||||
<field name="res_model">project.project</field>
|
||||
|
||||
Reference in New Issue
Block a user