From 22868d6c655017252c72ee8a535f52b5b37f4ae1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Bernardi?= Date: Mon, 28 Jun 2021 19:28:14 -0300 Subject: [PATCH] lims: copy/move typification: show when additional is not typified --- lims/__init__.py | 1 + lims/analysis.py | 52 +++++++++++++++++++--- lims/analysis.xml | 5 +++ lims/locale/es.po | 16 +++++++ lims/message.xml | 3 ++ lims/view/typification_copy_error_form.xml | 4 ++ 6 files changed, 76 insertions(+), 5 deletions(-) create mode 100644 lims/view/typification_copy_error_form.xml diff --git a/lims/__init__.py b/lims/__init__.py index 2b17f141..706b3583 100644 --- a/lims/__init__.py +++ b/lims/__init__.py @@ -111,6 +111,7 @@ def register(): sample.DuplicateSampleFromEntryStart, analysis.CopyTypificationStart, analysis.CopyTypificationConfirm, + analysis.CopyTypificationError, analysis.CopyCalculatedTypificationStart, analysis.UpdateTypificationStart, analysis.RelateAnalysisStart, diff --git a/lims/analysis.py b/lims/analysis.py index a27bd18c..adc96758 100644 --- a/lims/analysis.py +++ b/lims/analysis.py @@ -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) diff --git a/lims/analysis.xml b/lims/analysis.xml index a25de3d9..0387c73c 100644 --- a/lims/analysis.xml +++ b/lims/analysis.xml @@ -493,6 +493,11 @@ form typification_copy_confirm_form + + lims.typification.copy.error + form + typification_copy_error_form + Copy/Move Typification diff --git a/lims/locale/es.po b/lims/locale/es.po index 46edecaf..300fe6fb 100644 --- a/lims/locale/es.po +++ b/lims/locale/es.po @@ -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" diff --git a/lims/message.xml b/lims/message.xml index 83fe9060..a213d632 100644 --- a/lims/message.xml +++ b/lims/message.xml @@ -529,6 +529,9 @@ * Matrices: + + Missing typification for additional analysis: + Missing typification for additional analysis "%(additional)s" of analysis "%(analysis)s". diff --git a/lims/view/typification_copy_error_form.xml b/lims/view/typification_copy_error_form.xml new file mode 100644 index 00000000..0636651e --- /dev/null +++ b/lims/view/typification_copy_error_form.xml @@ -0,0 +1,4 @@ + +
+ +