[IMP] sale_timehseet: bring improvements in project invoice notebook

In project.project form view  invoicing notebook > employee/SOL mapping
    - set the project's default Sol
    - selecting existing employees should not be possible
    - allow for on-the-fly employee creation

task-2947578

Part-of: odoo/odoo#119771
This commit is contained in:
Yash Vaishnav
2023-06-19 23:16:44 +02:00
parent 5ce17f327a
commit 798f7db3c1
2 changed files with 14 additions and 3 deletions
@@ -9,7 +9,8 @@ class ProjectProductEmployeeMap(models.Model):
_description = 'Project Sales line, employee mapping'
project_id = fields.Many2one('project.project', "Project", required=True)
employee_id = fields.Many2one('hr.employee', "Employee", required=True)
employee_id = fields.Many2one('hr.employee', "Employee", required=True, domain="[('id', 'not in', existing_employee_ids)]")
existing_employee_ids = fields.Many2many('hr.employee', compute="_compute_existing_employee_ids")
sale_line_id = fields.Many2one(
'sale.order.line', "Sales Order Item",
compute="_compute_sale_line_id", store=True, readonly=False,
@@ -34,6 +35,15 @@ class ProjectProductEmployeeMap(models.Model):
('uniqueness_employee', 'UNIQUE(project_id,employee_id)', 'An employee cannot be selected more than once in the mapping. Please remove duplicate(s) and try again.'),
]
@api.depends('employee_id', 'project_id.sale_line_employee_ids.employee_id')
def _compute_existing_employee_ids(self):
project = self.project_id
if len(project) == 1:
self.existing_employee_ids = project.sale_line_employee_ids.employee_id
return
for map_entry in self:
map_entry.existing_employee_ids = map_entry.project_id.sale_line_employee_ids.employee_id
@api.depends('partner_id')
def _compute_sale_line_id(self):
self.filtered(
@@ -12,12 +12,13 @@
</xpath>
<xpath expr="//page[@name='settings']" position="after">
<page name="billing_employee_rate" string="Invoicing" attrs="{'invisible': ['|', ('allow_billable', '=', False), ('partner_id', '=', False)]}">
<field name="sale_line_employee_ids">
<field name="sale_line_employee_ids" context="{'default_sale_line_id': sale_line_id}">
<tree editable="bottom">
<field name="company_id" invisible="1"/>
<field name="partner_id" invisible="1"/>
<field name="sale_order_id" invisible="1"/>
<field name="employee_id" options="{'no_create': True}" widget="many2one_avatar_user"/>
<field name="employee_id" widget="many2one_avatar_user"/>
<field name="existing_employee_ids" invisible="1"/>
<field name="sale_line_id" attrs="{'required': True}" options="{'no_create': True}" context="{'search_default_order_id': sale_order_id}"/>
<field name="price_unit" widget="monetary" force_save="1" options="{'currency_field': 'currency_id'}"/>
<field name="display_cost" widget="monetary" options="{'currency_field': 'currency_id'}"/>