From 93d27059af74c61ae5980cd10a4c39f6b5418b66 Mon Sep 17 00:00:00 2001 From: laurentbarontini Date: Sat, 21 Mar 2026 18:25:30 +0100 Subject: [PATCH] 21.03.26 --- modules/purchase_trade/__init__.py | 3 + modules/purchase_trade/purchase.py | 65 ++++++++++++++++++- modules/purchase_trade/purchase.xml | 21 ++++++ modules/purchase_trade/view/assay_form.xml | 16 +++++ .../purchase_trade/view/assay_line_tree.xml | 8 +++ modules/purchase_trade/view/assay_tree.xml | 8 +++ .../view/purchase_line_form.xml | 4 +- 7 files changed, 122 insertions(+), 3 deletions(-) create mode 100644 modules/purchase_trade/view/assay_form.xml create mode 100644 modules/purchase_trade/view/assay_line_tree.xml create mode 100644 modules/purchase_trade/view/assay_tree.xml diff --git a/modules/purchase_trade/__init__.py b/modules/purchase_trade/__init__.py index 73fe546..171353f 100755 --- a/modules/purchase_trade/__init__.py +++ b/modules/purchase_trade/__init__.py @@ -169,6 +169,9 @@ def register(): purchase.PurchaseStrategy, purchase.PriceComposition, purchase.QualityAnalysis, + purchase.Assay, + purchase.AssayLine, + purchase.AssayElement, backtoback.Backtoback, dimension.AnalyticDimension, dimension.AnalyticDimensionValue, diff --git a/modules/purchase_trade/purchase.py b/modules/purchase_trade/purchase.py index a1097a6..56318b1 100755 --- a/modules/purchase_trade/purchase.py +++ b/modules/purchase_trade/purchase.py @@ -528,7 +528,69 @@ class PriceComposition(ModelSQL,ModelView): line = fields.Many2One('purchase.line',"Purchase line") component = fields.Char("Component") price = fields.Numeric("Price") - + +class Assay(ModelSQL, ModelView): + __name__ = 'assay.assay' + + line = fields.Many2One('purchase.line',"Purchase Line") + + reference = fields.Char("Lab Reference") + date = fields.Date("Analysis Date") + + type = fields.Selection([ + ('provisional', 'Provisional'), + ('final', 'Final'), + ('umpire', 'Umpire'), + ], "Type") + + status = fields.Selection([ + ('draft', 'Draft'), + ('validated', 'Validated'), + ], "Status") + + laboratory = fields.Char("Laboratory") + + lines = fields.One2Many( + 'assay.line', 'assay', "Assay Lines" + ) + + document = fields.Binary("Analysis", filename='filename') + filename = fields.Char('Analysis') + +class AssayLine(ModelSQL, ModelView): + __name__ = 'assay.line' + + assay = fields.Many2One('assay.assay', "Assay") + + element = fields.Many2One('assay.element', "Element") + + value = fields.Float("Value") + + unit = fields.Many2One('product.uom', "Unit") + + category = fields.Selection([ + ('assay', 'Assay'), + ('penalty', 'Penalty'), + ('moisture', 'Moisture'), + ], "Category") + + method = fields.Char("Method") + + is_payable = fields.Boolean("Payable") + +class AssayElement(ModelSQL, ModelView): + __name__ = 'assay.element' + + name = fields.Char("Code") # Cu, Au, As + description = fields.Char("Description") + + default_unit = fields.Many2One('product.uom', "Default Unit") + + type = fields.Selection([ + ('metal', 'Metal'), + ('impurity', 'Impurity'), + ]) + class QualityAnalysis(ModelSQL,ModelView): "Quality Analysis" __name__ = 'quality.analysis' @@ -690,6 +752,7 @@ class Line(metaclass=PoolMeta): finished = fields.Boolean("Mark as finished") quality_analysis = fields.One2Many('quality.analysis','line',"Quality analysis") + assays = fields.One2Many('assay.assay','line',"Assays") @classmethod def default_finished(cls): diff --git a/modules/purchase_trade/purchase.xml b/modules/purchase_trade/purchase.xml index d692377..9ff5df5 100755 --- a/modules/purchase_trade/purchase.xml +++ b/modules/purchase_trade/purchase.xml @@ -173,6 +173,27 @@ this repository contains the full copyright notices and license terms. --> quality_analysis_form + + assay.assay + tree + assay_tree + + + assay.assay + form + assay_form + + + assay.line + tree + assay_line_tree + + + assay.element + form + assay_element_form + + +