From bf6e9f6a78112da1c2f4db304a00430cc22adf24 Mon Sep 17 00:00:00 2001 From: laurentbarontini Date: Fri, 20 Mar 2026 10:01:22 +0100 Subject: [PATCH] 20.03.26 --- modules/purchase_trade/__init__.py | 1 + modules/purchase_trade/purchase.py | 40 +++++++++++++++++++ modules/purchase_trade/purchase.xml | 6 +++ .../view/quality_analysis_tree.xml | 5 +++ 4 files changed, 52 insertions(+) create mode 100644 modules/purchase_trade/view/quality_analysis_tree.xml diff --git a/modules/purchase_trade/__init__.py b/modules/purchase_trade/__init__.py index 44dac07..73fe546 100755 --- a/modules/purchase_trade/__init__.py +++ b/modules/purchase_trade/__init__.py @@ -168,6 +168,7 @@ def register(): purchase.DocTypeTemplate, purchase.PurchaseStrategy, purchase.PriceComposition, + purchase.QualityAnalysis, backtoback.Backtoback, dimension.AnalyticDimension, dimension.AnalyticDimensionValue, diff --git a/modules/purchase_trade/purchase.py b/modules/purchase_trade/purchase.py index f8848b0..7a2f4f5 100755 --- a/modules/purchase_trade/purchase.py +++ b/modules/purchase_trade/purchase.py @@ -528,6 +528,44 @@ class PriceComposition(ModelSQL,ModelView): line = fields.Many2One('purchase.line',"Purchase line") component = fields.Char("Component") price = fields.Numeric("Price") + +class QualityAnalysis(ModelSQL,ModelView): + __name__ = 'quality.analysis' + + line = fields.Many2One('purchase.line',"Purchase Line") + reference = fields.Char("Reference") + date = fields.Date("Analysis date") + attributes = fields.Dict( + 'product.attribute', 'Attributes', + domain=[ + ('sets', '=', Eval('attribute_set')), + ], + states={ + 'readonly': ~Eval('attribute_set'), + }, + depends=['product', 'attribute_set'], + help="Add attributes to the variant." + ) + + product = fields.Function( + fields.Many2One('product.product', "Product"), + 'on_change_with_product' + ) + + attribute_set = fields.Function( + fields.Many2One('product.attribute.set', "Attribute Set"), + 'on_change_with_attribute_set' + ) + + @fields.depends('product') + def on_change_with_attribute_set(self, name=None): + if self.product and self.product.template and self.product.template.attribute_set: + return self.product.template.attribute_set.id + + @fields.depends('line') + def on_change_with_product(self, name=None): + if self.line: + return self.line.product class Line(metaclass=PoolMeta): __name__ = 'purchase.line' @@ -624,6 +662,8 @@ class Line(metaclass=PoolMeta): finished = fields.Boolean("Mark as finished") + quality_analysis = fields.One2Many('quality.analysis','line',"Quality analysis") + @classmethod def default_finished(cls): return False diff --git a/modules/purchase_trade/purchase.xml b/modules/purchase_trade/purchase.xml index bd2e24c..29d5cee 100755 --- a/modules/purchase_trade/purchase.xml +++ b/modules/purchase_trade/purchase.xml @@ -162,6 +162,12 @@ this repository contains the full copyright notices and license terms. --> price_composition_tree + + quality.analysis + tree + quality_analysis_tree + + + + + + \ No newline at end of file