lims: copy/move typification: show when additional is not typified

This commit is contained in:
Adrián Bernardi 2021-06-28 19:28:14 -03:00
parent 87c5723688
commit 22868d6c65
6 changed files with 76 additions and 5 deletions

View file

@ -111,6 +111,7 @@ def register():
sample.DuplicateSampleFromEntryStart,
analysis.CopyTypificationStart,
analysis.CopyTypificationConfirm,
analysis.CopyTypificationError,
analysis.CopyCalculatedTypificationStart,
analysis.UpdateTypificationStart,
analysis.RelateAnalysisStart,

View file

@ -2088,6 +2088,13 @@ class CopyTypificationConfirm(ModelView):
summary = fields.Text('Summary', readonly=True)
class CopyTypificationError(ModelView):
'Copy/Move Typification'
__name__ = 'lims.typification.copy.error'
message = fields.Text('Message', readonly=True)
class CopyTypification(Wizard):
'Copy/Move Typification'
__name__ = 'lims.typification.copy'
@ -2103,6 +2110,10 @@ class CopyTypification(Wizard):
Button('Confirm', 'confirm', 'tryton-ok', default=True),
])
confirm = StateTransition()
error = StateView('lims.typification.copy.error',
'lims.lims_copy_typification_error_view_form', [
Button('Cancel', 'end', 'tryton-cancel', default=True),
])
def default_ask(self, fields):
summary = '%s\n' % gettext(
@ -2160,10 +2171,15 @@ class CopyTypification(Wizard):
return {'summary': summary}
def default_error(self, fields):
return {'message': self.error.message}
def transition_confirm(self):
cursor = Transaction().connection.cursor()
pool = Pool()
Typification = pool.get('lims.typification')
ProductType = pool.get('lims.product.type')
Matrix = pool.get('lims.matrix')
clause = [
('valid', '=', True),
@ -2176,11 +2192,6 @@ class CopyTypification(Wizard):
clause.append(('method', '=', self.start.origin_method.id))
origins = Typification.search(clause)
if origins and self.start.action == 'move':
Typification.write(origins, {
'valid': False,
'by_default': False,
})
product_type_id = self.start.destination_product_type.id
if self.start.action == 'copy':
@ -2190,6 +2201,7 @@ class CopyTypification(Wizard):
method_id = (self.start.destination_method.id if
self.start.destination_method else None)
error_additionals = ''
to_copy = {}
new_by_defaults = []
for origin in origins:
@ -2200,6 +2212,7 @@ class CopyTypification(Wizard):
continue
for matrix_id in matrix_ids:
# check if typification already exists
cursor.execute('SELECT COUNT(*) '
'FROM "' + Typification._table + '" '
'WHERE product_type = %s '
@ -2211,6 +2224,29 @@ class CopyTypification(Wizard):
if cursor.fetchone()[0] != 0:
continue
# check if additionals are typified
for a in origin.additionals:
cursor.execute('SELECT COUNT(*) '
'FROM "' + Typification._table + '" '
'WHERE product_type = %s '
'AND matrix = %s '
'AND analysis = %s '
'AND valid IS TRUE',
(product_type_id, matrix_id, a.id))
if cursor.fetchone()[0] == 0:
error_additionals += '* %s\n' % gettext('lims.msg_not_typified',
analysis=a.rec_name,
product_type=ProductType(product_type_id).rec_name,
matrix=Matrix(matrix_id).rec_name)
if error_additionals:
continue
if self.start.action == 'move':
Typification.write([origin], {
'valid': False,
'by_default': False,
})
if origin not in to_copy:
to_copy[origin] = []
@ -2239,6 +2275,12 @@ class CopyTypification(Wizard):
to_copy[origin].append(default)
if error_additionals:
self.error.message = '%s\n%s' % (
gettext('lims.msg_typification_copy_additional'),
error_additionals)
return 'error'
for typification, defaults in to_copy.items():
for default in defaults:
Typification.copy([typification], default=default)

View file

@ -493,6 +493,11 @@
<field name="type">form</field>
<field name="name">typification_copy_confirm_form</field>
</record>
<record model="ir.ui.view" id="lims_copy_typification_error_view_form">
<field name="model">lims.typification.copy.error</field>
<field name="type">form</field>
<field name="name">typification_copy_error_form</field>
</record>
<record model="ir.action.wizard" id="wiz_lims_copy_typification">
<field name="name">Copy/Move Typification</field>

View file

@ -6195,6 +6195,10 @@ msgctxt "field:lims.typification.copy.confirm,summary:"
msgid "Summary"
msgstr "Resumen"
msgctxt "field:lims.typification.copy.error,message:"
msgid "Message"
msgstr "Mensaje"
msgctxt "field:lims.typification.copy.start,action:"
msgid "Action"
msgstr "Acción"
@ -8252,6 +8256,10 @@ msgctxt "model:ir.message,text:msg_typification_copy_action"
msgid "You are going to %(action)s"
msgstr "Está por %(action)s"
msgctxt "model:ir.message,text:msg_typification_copy_additional"
msgid "Missing typification for additional analysis:"
msgstr "Falta tipificación para análisis adicional:"
msgctxt "model:ir.message,text:msg_typification_copy_analysis"
msgid " * Analysis: %(analysis)s"
msgstr " * Análisis: %(analysis)s"
@ -9761,6 +9769,10 @@ msgctxt "model:lims.typification.copy.confirm,name:"
msgid "Copy/Move Typification"
msgstr "Copiar/Mover tipificación"
msgctxt "model:lims.typification.copy.error,name:"
msgid "Copy/Move Typification"
msgstr "Copiar/Mover tipificación"
msgctxt "model:lims.typification.copy.start,name:"
msgid "Copy/Move Typification"
msgstr "Copiar/Mover tipificación"
@ -15324,6 +15336,10 @@ msgctxt "wizard_button:lims.typification.copy,ask,end:"
msgid "Cancel"
msgstr "Cancelar"
msgctxt "wizard_button:lims.typification.copy,error,end:"
msgid "Cancel"
msgstr "Cancelar"
msgctxt "wizard_button:lims.typification.copy,start,ask:"
msgid "Continue"
msgstr "Continuar"

View file

@ -529,6 +529,9 @@
<record model="ir.message" id="msg_typification_copy_matrices">
<field name="text"> * Matrices:</field>
</record>
<record model="ir.message" id="msg_typification_copy_additional">
<field name="text">Missing typification for additional analysis:</field>
</record>
<record model="ir.message" id="msg_additional_no_method">
<field name="text">Missing typification for additional analysis "%(additional)s" of analysis "%(analysis)s".</field>
</record>

View file

@ -0,0 +1,4 @@
<?xml version="1.0"?>
<form>
<field name="message" colspan="4" height="300"/>
</form>