bemade_fsm: Improved task naming. Fixes Dur-Pro/bemade-addons#89.
This commit is contained in:
parent
22cf91c67c
commit
f12583275b
3 changed files with 31 additions and 8 deletions
|
|
@ -1,6 +1,7 @@
|
||||||
from odoo import fields, models, api, _, Command
|
from odoo import fields, models, api, _, Command
|
||||||
from odoo.exceptions import ValidationError
|
from odoo.exceptions import ValidationError
|
||||||
from odoo.tools import float_round
|
from odoo.tools import float_round
|
||||||
|
import re
|
||||||
|
|
||||||
|
|
||||||
class SaleOrder(models.Model):
|
class SaleOrder(models.Model):
|
||||||
|
|
|
||||||
|
|
@ -65,8 +65,9 @@ class Task(models.Model):
|
||||||
prev_seqs = self.sale_order_id.tasks_ids and \
|
prev_seqs = self.sale_order_id.tasks_ids and \
|
||||||
self.sale_order_id.tasks_ids.mapped('work_order_number')
|
self.sale_order_id.tasks_ids.mapped('work_order_number')
|
||||||
if prev_seqs:
|
if prev_seqs:
|
||||||
seq += max(map(lambda n: int(re.search("\d+$", n).start() or 0),
|
pattern = re.compile(r"\d+$")
|
||||||
prev_seqs))
|
matches = map(lambda n: pattern.search(n), prev_seqs)
|
||||||
|
seq += max(map(lambda n: int(n.group(1)) if n else 0), matches)
|
||||||
rec.work_order_number = rec.sale_order_id.name.replace('SO', 'WO', 1) \
|
rec.work_order_number = rec.sale_order_id.name.replace('SO', 'WO', 1) \
|
||||||
+ f"-{seq}"
|
+ f"-{seq}"
|
||||||
return res
|
return res
|
||||||
|
|
@ -190,13 +191,15 @@ class Task(models.Model):
|
||||||
assert rec.is_fsm, "This method should only be called on FSM tasks."
|
assert rec.is_fsm, "This method should only be called on FSM tasks."
|
||||||
|
|
||||||
template = rec.sale_line_id and rec.sale_line_id.product_id.task_template_id
|
template = rec.sale_line_id and rec.sale_line_id.product_id.task_template_id
|
||||||
|
name_parts = rec.sale_line_id and rec.sale_line_id.name.split('\n')
|
||||||
|
title = name_parts and name_parts[0] or rec.sale_line_id.product_id.name
|
||||||
if not rec.parent_id:
|
if not rec.parent_id:
|
||||||
rec.name = f"{rec.sale_order_id.partner_shipping_id.name} - " \
|
rec.name = f"{rec.sale_order_id.partner_shipping_id.name} - " \
|
||||||
f"{rec.sale_line_id.name}"
|
f"{title}"
|
||||||
if template:
|
if template:
|
||||||
rec.name += f" ({template.name})"
|
rec.name += f" ({template.name})"
|
||||||
else:
|
else:
|
||||||
rec.name = f"{template.name or rec.sale_line_id.name or rec.name}"
|
rec.name = template.name or title or rec.name
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def root_ancestor(self):
|
def root_ancestor(self):
|
||||||
|
|
|
||||||
|
|
@ -25,10 +25,10 @@ class TestSalesOrder(BemadeFSMBaseTest):
|
||||||
partner = self._generate_partner()
|
partner = self._generate_partner()
|
||||||
so = self._generate_sale_order(partner=partner)
|
so = self._generate_sale_order(partner=partner)
|
||||||
parent_template = self._generate_task_template(structure=[2, 1],
|
parent_template = self._generate_task_template(structure=[2, 1],
|
||||||
names=['Parent Template',
|
names=['Parent Template',
|
||||||
'Child Template',
|
'Child Template',
|
||||||
'Grandchild Template'])
|
'Grandchild Template'])
|
||||||
child_template_1= parent_template.subtasks[0]
|
child_template_1 = parent_template.subtasks[0]
|
||||||
child_template_2 = parent_template.subtasks[1]
|
child_template_2 = parent_template.subtasks[1]
|
||||||
grandchild_template = parent_template.subtasks[0].subtasks[0]
|
grandchild_template = parent_template.subtasks[0].subtasks[0]
|
||||||
product = self._generate_product(task_template=parent_template)
|
product = self._generate_product(task_template=parent_template)
|
||||||
|
|
@ -252,6 +252,25 @@ class TestSalesOrder(BemadeFSMBaseTest):
|
||||||
self.assertFalse(subtask1.user_ids)
|
self.assertFalse(subtask1.user_ids)
|
||||||
self.assertFalse(subtask2.user_ids)
|
self.assertFalse(subtask2.user_ids)
|
||||||
|
|
||||||
|
def test_long_line_name_overflows_to_task_description(self):
|
||||||
|
so = self._generate_sale_order()
|
||||||
|
product = self._generate_product()
|
||||||
|
product.description_sale = "This is a long product description.\n" \
|
||||||
|
"It even spans multiple lines.\n" \
|
||||||
|
"One could find this annoying in a task name."
|
||||||
|
|
||||||
|
sol = self._generate_sale_order_line(sale_order=so, product=product)
|
||||||
|
|
||||||
|
so.action_confirm()
|
||||||
|
task = sol.task_id
|
||||||
|
|
||||||
|
self.assertFalse("This is a long product description." in task.name)
|
||||||
|
self.assertFalse("It even spans multiple lines." in task.name)
|
||||||
|
self.assertFalse("One could find this annoying in a task name." in task.name)
|
||||||
|
self.assertTrue("It even spans multiple lines." in task.description)
|
||||||
|
self.assertTrue("One could find this annoying in a task name."
|
||||||
|
in task.description)
|
||||||
|
|
||||||
|
|
||||||
@tagged("-at_install", "post_install", "slow")
|
@tagged("-at_install", "post_install", "slow")
|
||||||
class TestSaleOrderTour(HttpCase, TestSalesOrder):
|
class TestSaleOrderTour(HttpCase, TestSalesOrder):
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue