diff --git a/locale/ca.po b/locale/ca.po index 264eabe..8e2d9ff 100644 --- a/locale/ca.po +++ b/locale/ca.po @@ -1544,6 +1544,14 @@ msgstr "" "El pes en \"%(weighing)s\" no està totalment distibuit i no s'ha forçat " "l'anàlisi" +msgctxt "model:ir.message,text:msg_parcel_without_current_crop" +msgid "" +"The plantation \"%(plantation)s\" in the weighing \"%(weighing)s\" has no " +"parcel of the weighing's crop." +msgstr "" +"La plantació \"%(plantation)s\" en la pesada \"%(weighing)s\" no te una " +"parcel·la amb la collita de la pesada" + msgctxt "model:ir.message,text:msg_uom_not_fit" msgid "" "Inputs from Production template \"%(production)s\" must be of uom " diff --git a/locale/es.po b/locale/es.po index 981d356..2c62a45 100644 --- a/locale/es.po +++ b/locale/es.po @@ -1545,6 +1545,14 @@ msgstr "" "El peso en \"%(weighin)s\" no está totalmente distribuido i no se ha forzado" " el anàlisis" +msgctxt "model:ir.message,text:msg_parcel_without_current_crop" +msgid "" +"The plantation \"%(plantation)s\" in the weighing \"%(weighing)s\" has no " +"parcel of the weighing's crop." +msgstr "" +"La plantación \"%(plantation)s\" en la pesada \"%(weighing)s\" no tiene una " +"parcela con la cosecha de la pesada" + msgctxt "model:ir.message,text:msg_uom_not_fit" msgid "" "Inputs from Production template \"%(production)s\" must be of uom " diff --git a/message.xml b/message.xml index 71a3224..9868d78 100644 --- a/message.xml +++ b/message.xml @@ -48,5 +48,8 @@ this repository contains the full copyright notices and license terms. --> The weighing center "%(center)s" dont have a to location configured. + + The plantation "%(plantation)s" in the weighing "%(weighing)s" has no parcel of the weighing's crop. + diff --git a/production.py b/production.py index 3096ce8..d4a90a2 100644 --- a/production.py +++ b/production.py @@ -17,7 +17,10 @@ class ProductionTemplate(ModelSQL, ModelView): __name__ = 'production.template' name = fields.Char('Name', required=True) - uom = fields.Many2One('product.uom', 'Uom', required=True) + uom = fields.Many2One('product.uom', 'Uom', + states = { + 'required': True + }) unit_digits = fields.Function(fields.Integer('Unit Digits'), 'on_change_with_unit_digits') quantity = fields.Float('Quantity', @@ -43,6 +46,21 @@ class ProductionTemplate(ModelSQL, ModelView): 'production.cost_price.distribution.template', 'production_template', "Cost Distribution Templates") transfer_wine_aging = fields.Boolean("Transfer Wine Aging") + inputs_products = fields.Function(fields.One2Many('product.product', None, + 'Products'), 'get_products', searcher='search_input_products') + + def get_products(self, name=None): + products = [] + for template in self.inputs: + products += template.products + return [x.id for x in products] + + @classmethod + def search_input_products(cls, name, clause): + Inputs = Pool().get('production.template.inputs-product.template') + product = clause[-1] + inputs = Inputs.search([('template.products', '=', product)]) + return [('id', 'in', [x.production_template.id for x in inputs])] @fields.depends('uom') def on_change_with_unit_digits(self, name=None): @@ -58,6 +76,8 @@ class ProductionTemplate(ModelSQL, ModelView): record.check_cost_distribution() def check_input_uoms(self): + if not self.uom: + return category_uom = self.uom.category uoms = [i.default_uom.category for i in self.inputs] uoms.append(category_uom) diff --git a/quality.py b/quality.py index 820817b..a404fd5 100644 --- a/quality.py +++ b/quality.py @@ -162,7 +162,8 @@ class QualityTest(metaclass=PoolMeta): if not key: continue - values[key] = round(line.value, _WINE_DIGITS) + if line.value: + values[key] = round(line.value, _WINE_DIGITS) values[key + '_comment'] = line.internal_description values[key + '_confirm'] = today values[key + '_success'] = line.success diff --git a/weighing.py b/weighing.py index 0129578..4957fed 100644 --- a/weighing.py +++ b/weighing.py @@ -206,12 +206,18 @@ class Weighing(Workflow, ModelSQL, ModelView): return crop[0].id def get_parcel(self): + crop = self.on_change_with_crop() if not self.plantations: return plantation = self.plantations[0].plantation if not plantation or not plantation.parcels: return - return plantation.parcels[0] + res = None + for parcel in plantation.parcels: + if parcel.crop.id == crop: + res = parcel + break + return res @fields.depends('plantations') def on_change_with_variety(self): @@ -529,6 +535,17 @@ class Weighing(Workflow, ModelSQL, ModelView): Beneficiary.delete([x for x in weighing.beneficiaries]) parcel = weighing.get_parcel() + + # Check if all plantations has a parcel in the weighing's crop + for plantation in weighing.plantations: + plantation = plantation.plantation + for parcel in plantation.parcels: + if parcel.crop == weighing.crop: + break + else: + raise UserError(gettext('agronomics.msg_parcel_without_current_crop', + weighing=weighing.rec_name, plantation=plantation.code)) + if not parcel: continue