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:
parent
37aea5c181
commit
a2d9f37ef2
3 changed files with 36 additions and 2 deletions
|
|
@ -32,6 +32,7 @@
|
||||||
'sale',
|
'sale',
|
||||||
'sale_project',
|
'sale_project',
|
||||||
'sale_stock',
|
'sale_stock',
|
||||||
|
'sale_planning',
|
||||||
'industry_fsm_stock',
|
'industry_fsm_stock',
|
||||||
'industry_fsm_report',
|
'industry_fsm_report',
|
||||||
'bemade_partner_root_ancestor',
|
'bemade_partner_root_ancestor',
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,8 @@ class SaleOrder(models.Model):
|
||||||
def _inverse_default_contacts(self):
|
def _inverse_default_contacts(self):
|
||||||
pass
|
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):
|
def _compute_default_equipment(self):
|
||||||
for rec in self:
|
for rec in self:
|
||||||
if rec.partner_shipping_id.equipment_ids:
|
if rec.partner_shipping_id.equipment_ids:
|
||||||
|
|
@ -89,7 +90,6 @@ class SaleOrderLine(models.Model):
|
||||||
column1="sale_order_line_id",
|
column1="sale_order_line_id",
|
||||||
column2="equipment_id")
|
column2="equipment_id")
|
||||||
|
|
||||||
|
|
||||||
@api.model_create_multi
|
@api.model_create_multi
|
||||||
def create(self, vals):
|
def create(self, vals):
|
||||||
recs = super().create(vals)
|
recs = super().create(vals)
|
||||||
|
|
@ -238,3 +238,15 @@ class SaleOrderLine(models.Model):
|
||||||
if not val:
|
if not val:
|
||||||
return val
|
return val
|
||||||
return True
|
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
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,27 @@ class TestTaskTemplate(BemadeFSMBaseTest):
|
||||||
|
|
||||||
self.assertFalse(equipment1 in task.equipment_ids)
|
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')
|
@tagged('-at_install', 'post_install', 'slow')
|
||||||
class TestTaskTemplateTour(HttpCase, BemadeFSMBaseTest):
|
class TestTaskTemplateTour(HttpCase, BemadeFSMBaseTest):
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue