From d10d805753883b8ad04a5faec39dbb4e51e8b19e Mon Sep 17 00:00:00 2001 From: laurentbarontini Date: Sun, 22 Mar 2026 11:22:09 +0100 Subject: [PATCH] 22.03.26 --- modules/purchase_trade/__init__.py | 3 + modules/purchase_trade/purchase.py | 62 +++++++++++++++++++ modules/purchase_trade/purchase.xml | 11 ++++ .../purchase_trade/view/concentrate_form.xml | 22 +++++++ .../purchase_trade/view/concentrate_tree.xml | 6 ++ .../view/purchase_line_form.xml | 12 +++- 6 files changed, 113 insertions(+), 3 deletions(-) create mode 100644 modules/purchase_trade/view/concentrate_form.xml create mode 100644 modules/purchase_trade/view/concentrate_tree.xml diff --git a/modules/purchase_trade/__init__.py b/modules/purchase_trade/__init__.py index 30a7040..f7c201e 100755 --- a/modules/purchase_trade/__init__.py +++ b/modules/purchase_trade/__init__.py @@ -173,6 +173,9 @@ def register(): purchase.AssayLine, purchase.AssayElement, purchase.AssayUnit, + purchase.PayableRule, + purchase.PenaltyRule, + purchase.ConcentrateTerm, backtoback.Backtoback, dimension.AnalyticDimension, dimension.AnalyticDimensionValue, diff --git a/modules/purchase_trade/purchase.py b/modules/purchase_trade/purchase.py index c01f26c..cca9aef 100755 --- a/modules/purchase_trade/purchase.py +++ b/modules/purchase_trade/purchase.py @@ -760,6 +760,67 @@ class AssayElement(ModelSQL, ModelView): ('impurity', 'Impurity'), ], "Type") +class PayableRule(ModelSQL, ModelView): + "Payable Rule" + __name__ = 'payable.rule' + + element = fields.Many2One('assay.element', "Element") + + payable_percent = fields.Numeric("Payable %") + + deduction_value = fields.Numeric("Deduction Value") + deduction_unit = fields.Many2One('assay.unit',"Unit") + +class PenaltyRule(ModelSQL, ModelView): + "Penalty Rule" + __name__ = 'penalty.rule' + + element = fields.Many2One('assay.element', "Element") + + threshold = fields.Numeric("Treshold") + threshold_unit = fields.Many2One('assay.unit',"Unit") + + step = fields.Numeric("Step") + penalty_value = fields.Numeric("Penalty Value") + currency = fields.Many2One('currency.currency',"Curr") + unit = fields.Many2One('product.uom',"Unit") + +class ConcentrateTerm(ModelSQL, ModelView): + "Concentrate Term" + __name__ = 'concentrate.term' + + line = fields.Many2One( + 'purchase.line', "Line", + ondelete='CASCADE' + ) + + element = fields.Many2One('assay.element',"Element") + + component = fields.Many2One( + 'pricing.component', + "Price Component" + ) + + manual_price = fields.Numeric( + "Manual Price", + digits=(16, 6) + ) + + currency = fields.Many2One('currency.currency',"Curr") + unit = fields.Many2One('product.uom',"Unit") + + payable_rule = fields.Many2One( + 'payable.rule',"Payable Rule" + ) + + penalty_rules = fields.Many2One( + 'penalty.rule', + "Penalties" + ) + + valid_from = fields.Date("Valid From") + valid_to = fields.Date("Valid To") + class QualityAnalysis(ModelSQL,ModelView): "Quality Analysis" __name__ = 'quality.analysis' @@ -922,6 +983,7 @@ class Line(metaclass=PoolMeta): quality_analysis = fields.One2Many('quality.analysis','line',"Quality analysis") assays = fields.One2Many('assay.assay','line',"Assays") + terms = fields.One2Many('concentrate.term','line',"Terms") @classmethod def default_finished(cls): diff --git a/modules/purchase_trade/purchase.xml b/modules/purchase_trade/purchase.xml index 9ff5df5..2576cbd 100755 --- a/modules/purchase_trade/purchase.xml +++ b/modules/purchase_trade/purchase.xml @@ -194,6 +194,17 @@ this repository contains the full copyright notices and license terms. --> assay_element_form + + concentrate.term + tree + concentrate_tree + + + concentrate.term + form + concentrate_form + + +