diff --git a/trytond/trytond/modules/commission/commission.py b/trytond/trytond/modules/commission/commission.py index dd57371..8880c0a 100644 --- a/trytond/trytond/modules/commission/commission.py +++ b/trytond/trytond/modules/commission/commission.py @@ -141,9 +141,28 @@ class Plan(ModelSQL, ModelView): def compute(self, amount, product, pattern=None): 'Compute commission amount for the amount' + Template = Pool().get('product.template') + + def parents(categories): + for category in categories: + while category: + yield category + category = category.parent + if pattern is None: pattern = {} - pattern['product'] = product.id if product else None + if product: + if hasattr(Template, 'categories'): + pattern['categories'] = [c.id for c in parents(product.categories)] + else: + pattern['category'] = product.category.id if product.category else None + pattern['product'] = product.id + else: + if hasattr(Template, 'categories'): + pattern['categories'] = [] + else: + pattern['category'] = None + pattern['product'] = None context = self.get_context_formula(amount, product) for line in self.lines: if line.match(pattern): @@ -155,6 +174,8 @@ class PlanLines(ModelSQL, ModelView, MatchMixin): __name__ = 'commission.plan.line' plan = fields.Many2One('commission.plan', 'Plan', required=True, ondelete='CASCADE') + category = fields.Many2One( + 'product.category', "Category", ondelete='CASCADE') product = fields.Many2One('product.product', 'Product') sequence = fields.Integer('Sequence') formula = fields.Char('Formula', required=True, @@ -204,6 +225,15 @@ class PlanLines(ModelSQL, ModelView, MatchMixin): context.setdefault('functions', {})['Decimal'] = Decimal return simple_eval(decistmt(self.formula), **context) + def match(self, pattern): + if 'categories' in pattern: + pattern = pattern.copy() + categories = pattern.pop('categories') + if (self.category is not None + and self.category.id not in categories): + return False + return super(PlanLines, self).match(pattern) + class Commission(ModelSQL, ModelView): 'Commission' diff -r dcef1b340df0 trytond/trytond/modules/commission/view/plan_line_form.xml --- a/trytond/trytond/modules/commission/view/plan_line_form.xml Wed Jan 04 00:28:37 2017 +0100 +++ b/trytond/trytond/modules/commission/view/plan_line_form.xml Fri Nov 17 13:33:24 2017 +0100 @@ -5,11 +5,12 @@