lims: add configuration for mandatory zone in samples

This commit is contained in:
Adrián Bernardi 2020-06-09 11:58:07 -03:00
parent 1334693d5c
commit beefca95ff
5 changed files with 65 additions and 19 deletions

View file

@ -210,6 +210,7 @@ class Configuration(ModelSingleton, ModelSQL, ModelView,
('accepted', 'With accepted results'),
], 'Samples in progress',
help='Samples allowed for preliminary reports')
zone_required = fields.Boolean('Zone required')
@staticmethod
def default_brix_digits():
@ -247,6 +248,10 @@ class Configuration(ModelSingleton, ModelSQL, ModelView,
def default_samples_in_progress():
return 'result'
@staticmethod
def default_zone_required():
return True
def get_reagents(self):
res = []
if self.reagents:

View file

@ -471,6 +471,10 @@ msgctxt "field:lims.configuration,soluble_solids_digits:"
msgid "Soluble solids digits"
msgstr "Dígitos de Sólidos solubles"
msgctxt "field:lims.configuration,zone_required:"
msgid "Zone required"
msgstr "Zona requerida"
msgctxt "field:lims.configuration-laboratory,configuration:"
msgid "Configuration"
msgstr "Configuración"
@ -1223,6 +1227,10 @@ msgctxt "field:lims.create_sample.start,zone:"
msgid "Zone"
msgstr "Zona"
msgctxt "field:lims.create_sample.start,zone_required:"
msgid "Zone required"
msgstr "Zona requerida"
msgctxt "field:lims.divide_reports.detail,analysis:"
msgid "Analysis"
msgstr "Análisis"
@ -5315,6 +5323,10 @@ msgctxt "field:lims.sample,zone:"
msgid "Zone"
msgstr "Zona"
msgctxt "field:lims.sample,zone_required:"
msgid "Zone required"
msgstr "Zona requerida"
msgctxt "field:lims.sample.duplicate.start,date:"
msgid "Date"
msgstr "Fecha de ingreso"

View file

@ -2500,9 +2500,10 @@ class AddFractionRMBMZ(Wizard):
raise UserError(gettext('lims.msg_no_entry_control'))
entry = Entry(workyear.default_entry_control.id)
if not entry.party.entry_zone:
if not entry.party.entry_zone and config.zone_required:
raise UserError(gettext('lims.msg_no_party_zone',
party=entry.party.rec_name))
zone_id = entry.party.entry_zone and entry.party.entry_zone.id or None
laboratory = self.start.planification.laboratory
obj_description = self._get_obj_description(self.start)
@ -2513,7 +2514,7 @@ class AddFractionRMBMZ(Wizard):
'date': datetime.now(),
'product_type': self.start.product_type.id,
'matrix': self.start.matrix.id,
'zone': entry.party.entry_zone.id,
'zone': zone_id,
'label': self.start.label,
'obj_description': obj_description,
'packages_quantity': 1,
@ -2938,9 +2939,10 @@ class AddFractionBRE(Wizard):
raise UserError(gettext('lims.msg_no_entry_control'))
entry = Entry(workyear.default_entry_control.id)
if not entry.party.entry_zone:
if not entry.party.entry_zone and config.zone_required:
raise UserError(gettext('lims.msg_no_party_zone',
party=entry.party.rec_name))
zone_id = entry.party.entry_zone and entry.party.entry_zone.id or None
laboratory = self.start.planification.laboratory
obj_description = self._get_obj_description(self.start)
@ -2951,7 +2953,7 @@ class AddFractionBRE(Wizard):
'date': datetime.now(),
'product_type': self.start.product_type.id,
'matrix': self.start.matrix.id,
'zone': entry.party.entry_zone.id,
'zone': zone_id,
'label': self.start.label,
'obj_description': obj_description,
'packages_quantity': 1,
@ -3301,9 +3303,10 @@ class AddFractionMRT(Wizard):
raise UserError(gettext('lims.msg_no_entry_control'))
entry = Entry(workyear.default_entry_control.id)
if not entry.party.entry_zone:
if not entry.party.entry_zone and config.zone_required:
raise UserError(gettext('lims.msg_no_party_zone',
party=entry.party.rec_name))
zone_id = entry.party.entry_zone and entry.party.entry_zone.id or None
laboratory = self.start.planification.laboratory
obj_description = self._get_obj_description(self.start)
@ -3314,7 +3317,7 @@ class AddFractionMRT(Wizard):
'date': datetime.now(),
'product_type': self.start.product_type.id,
'matrix': self.start.matrix.id,
'zone': entry.party.entry_zone.id,
'zone': zone_id,
'label': self.start.label,
'obj_description': obj_description,
'packages_quantity': 1,
@ -4521,9 +4524,10 @@ class CreateFractionControl(Wizard):
raise UserError(gettext('lims.msg_no_entry_control'))
entry = Entry(workyear.default_entry_control.id)
if not entry.party.entry_zone:
if not entry.party.entry_zone and config.zone_required:
raise UserError(gettext('lims.msg_no_party_zone',
party=entry.party.rec_name))
zone_id = entry.party.entry_zone and entry.party.entry_zone.id or None
laboratory = self.start.laboratory
obj_description = self._get_obj_description(self.start)
@ -4534,7 +4538,7 @@ class CreateFractionControl(Wizard):
'date': datetime.now(),
'product_type': self.start.product_type.id,
'matrix': self.start.matrix.id,
'zone': entry.party.entry_zone.id,
'zone': zone_id,
'label': self.start.label,
'obj_description': obj_description,
'packages_quantity': 1,

View file

@ -2370,7 +2370,11 @@ class Sample(ModelSQL, ModelView):
domain=[('category.lims_only_available', '=', True)])
restricted_entry = fields.Boolean('Restricted entry',
states={'readonly': True})
zone = fields.Many2One('lims.zone', 'Zone', required=True)
zone = fields.Many2One('lims.zone', 'Zone',
states={'required': Bool(Eval('zone_required'))},
depends=['zone_required'])
zone_required = fields.Function(fields.Boolean('Zone required'),
'get_zone_required')
trace_report = fields.Boolean('Trace report')
fractions = fields.One2Many('lims.fraction', 'sample', 'Fractions',
context={
@ -2701,15 +2705,6 @@ class Sample(ModelSQL, ModelView):
return Transaction().context.get('party')
return None
@staticmethod
def default_zone():
Party = Pool().get('party.party')
if (Transaction().context.get('party', 0) > 0):
party = Party(Transaction().context.get('party'))
if party.entry_zone:
return party.entry_zone.id
@fields.depends('entry', '_parent_entry.party')
def on_change_with_party(self, name=None):
if self.entry:
@ -2717,6 +2712,22 @@ class Sample(ModelSQL, ModelView):
return result['party'][self.id]
return None
@staticmethod
def default_zone_required():
Config = Pool().get('lims.configuration')
return Config(1).zone_required
def get_zone_required(self, name=None):
return self.default_zone_required()
@staticmethod
def default_zone():
Party = Pool().get('party.party')
if (Transaction().context.get('party', 0) > 0):
party = Party(Transaction().context.get('party'))
if party.entry_zone:
return party.entry_zone.id
@classmethod
def get_views_field(cls, samples, names):
result = {}
@ -4611,7 +4622,11 @@ class CreateSampleStart(ModelView):
domain=[('category.lims_only_available', '=', True)])
restricted_entry = fields.Boolean('Restricted entry',
states={'readonly': True})
zone = fields.Many2One('lims.zone', 'Zone', required=True)
zone = fields.Many2One('lims.zone', 'Zone',
states={'required': Bool(Eval('zone_required'))},
depends=['zone_required'])
zone_required = fields.Function(fields.Boolean('Zone required'),
'get_zone_required')
trace_report = fields.Boolean('Trace report')
report_comments = fields.Text('Report comments', translate=True)
comments = fields.Text('Comments')
@ -4649,6 +4664,14 @@ class CreateSampleStart(ModelView):
def default_restricted_entry():
return False
@staticmethod
def default_zone_required():
Config = Pool().get('lims.configuration')
return Config(1).zone_required
def get_zone_required(self, name=None):
return self.default_zone_required()
@staticmethod
def default_zone():
Entry = Pool().get('lims.entry')

View file

@ -22,6 +22,8 @@
<field name="planification_process_background"/>
<label name="samples_in_progress"/>
<field name="samples_in_progress"/>
<label name="zone_required"/>
<field name="zone_required"/>
<field name="microbiology_laboratories" colspan="4"/>
</page>
<page string="Fraction Types" id="fraction_type">