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