bemade_fsm: Added logic to use the planned hours from task templates on sale order lines (for planning purposes). Re #11.

This commit is contained in:
Marc Durepos 2023-07-20 11:40:36 -04:00
parent 37aea5c181
commit a2d9f37ef2
3 changed files with 36 additions and 2 deletions

View file

@ -32,6 +32,7 @@
'sale',
'sale_project',
'sale_stock',
'sale_planning',
'industry_fsm_stock',
'industry_fsm_report',
'bemade_partner_root_ancestor',

View file

@ -55,7 +55,8 @@ class SaleOrder(models.Model):
def _inverse_default_contacts(self):
pass
@api.depends('partner_id', 'partner_shipping_id', 'partner_shipping_id.equipment_ids', 'partner_id.owned_equipment_ids')
@api.depends('partner_id', 'partner_shipping_id', 'partner_shipping_id.equipment_ids',
'partner_id.owned_equipment_ids')
def _compute_default_equipment(self):
for rec in self:
if rec.partner_shipping_id.equipment_ids:
@ -89,7 +90,6 @@ class SaleOrderLine(models.Model):
column1="sale_order_line_id",
column2="equipment_id")
@api.model_create_multi
def create(self, vals):
recs = super().create(vals)
@ -238,3 +238,15 @@ class SaleOrderLine(models.Model):
if not val:
return val
return True
@api.depends('product_uom', 'product_uom_qty', 'product_id.planning_enabled', 'state',
'product_id.task_template_id')
def _compute_planning_hours_to_plan(self):
# Override the method from sale_planning to use time estimates from the task template if appropriate
super()._compute_planning_hours_to_plan()
templated_lines = self.filtered(
lambda l: l.product_id.task_template_id and l.product_id.task_template_id.planned_hours)
for line in templated_lines:
line.planning_hours_to_plan = line.product_id.task_template_id.planned_hours
if line.product_uom_category_id == self.env.ref('uom.product_uom_unit').category_id:
line.planning_hours_to_plan *= line.product_uom_qty

View file

@ -42,6 +42,27 @@ class TestTaskTemplate(BemadeFSMBaseTest):
self.assertFalse(equipment1 in task.equipment_ids)
def test_hours_estimate_used_for_planning(self):
partner = self._generate_partner()
so = self._generate_sale_order(partner=partner)
task_template = self._generate_task_template(planned_hours=8)
product = self._generate_product(uom=self.env.ref('uom.product_uom_unit'), task_template=task_template)
sol = self._generate_sale_order_line(sale_order=so, product=product)
self.assertEqual(sol.planning_hours_to_plan, 8)
def test_hours_estimate_multiplied_for_multiple_units_sold(self):
partner = self._generate_partner()
so = self._generate_sale_order(partner=partner)
task_template = self._generate_task_template(planned_hours=8)
product = self._generate_product(uom=self.env.ref('uom.product_uom_unit'), task_template=task_template)
sol = self._generate_sale_order_line(sale_order=so, product=product, qty=3.0)
self.assertEqual(sol.planning_hours_to_plan, 24)
@tagged('-at_install', 'post_install', 'slow')
class TestTaskTemplateTour(HttpCase, BemadeFSMBaseTest):