From 5dab76a9a8af30696294dab2ab0a81f1ddc68029 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Bernardi?= Date: Fri, 27 Nov 2020 18:25:45 -0300 Subject: [PATCH] lims: add some indexes to improve performance --- lims/analysis.py | 4 ++-- lims/notebook.py | 10 ++++++---- lims/planification.py | 16 +++++++++------- lims_instrument/resultsimport.py | 15 ++++++++------- 4 files changed, 25 insertions(+), 20 deletions(-) diff --git a/lims/analysis.py b/lims/analysis.py index 9a21dcd8..1e897e9f 100644 --- a/lims/analysis.py +++ b/lims/analysis.py @@ -783,7 +783,7 @@ class Analysis(Workflow, ModelSQL, ModelView): __name__ = 'lims.analysis' _rec_name = 'description' - code = fields.Char('Code', required=True, + code = fields.Char('Code', required=True, select=True, states={'readonly': Eval('state') != 'draft'}, depends=['state']) description = fields.Char('Description', required=True, translate=True, states={'readonly': Bool(Equal(Eval('state'), 'disabled'))}, @@ -883,7 +883,7 @@ class Analysis(Workflow, ModelSQL, ModelView): product = fields.Many2One('product.product', 'Product') automatic_acquisition = fields.Boolean('Automatic acquisition', states={'readonly': Bool(Equal(Eval('state'), 'disabled'))}, - depends=['state']) + depends=['state'], select=True) order = fields.Integer('Order', states={ 'invisible': Not(And( Bool(Equal(Eval('type'), 'analysis')), diff --git a/lims/notebook.py b/lims/notebook.py index 68940f9c..1dd785ca 100644 --- a/lims/notebook.py +++ b/lims/notebook.py @@ -773,9 +773,10 @@ class NotebookLine(ModelSQL, ModelView): service = fields.Many2One('lims.service', 'Service', readonly=True, ondelete='CASCADE', select=True) analysis = fields.Many2One('lims.analysis', 'Analysis', required=True, - readonly=True) + readonly=True, select=True) repetition = fields.Integer('Repetition', readonly=True) - start_date = fields.Date('Start date', states={'readonly': True}) + start_date = fields.Date('Start date', states={'readonly': True}, + select=True) end_date = fields.Date('End date', states={ 'readonly': Or(~Bool(Eval('start_date')), Bool(Eval('accepted'))), }, depends=['start_date', 'accepted']) @@ -868,12 +869,13 @@ class NotebookLine(ModelSQL, ModelView): analysis_order = fields.Function(fields.Integer('Order'), 'get_analysis_order') dilution_factor = fields.Float('Dilution factor') - accepted = fields.Boolean('Accepted') + accepted = fields.Boolean('Accepted', select=True) acceptance_date = fields.DateTime('Acceptance date', states={'readonly': True}) not_accepted_message = fields.Text('Message', readonly=True, states={'invisible': Not(Bool(Eval('not_accepted_message')))}) - annulled = fields.Boolean('Annulled', states={'readonly': True}) + annulled = fields.Boolean('Annulled', states={'readonly': True}, + select=True) annulment_date = fields.DateTime('Annulment date', states={'readonly': True}) results_report = fields.Many2One('lims.results_report', 'Results Report', diff --git a/lims/planification.py b/lims/planification.py index 80ec83a5..c8898ff0 100644 --- a/lims/planification.py +++ b/lims/planification.py @@ -615,9 +615,10 @@ class PlanificationDetail(ModelSQL, ModelView): planification = fields.Many2One('lims.planification', 'Planification', ondelete='CASCADE', select=True, required=True) - fraction = fields.Many2One('lims.fraction', 'Fraction', required=True) + fraction = fields.Many2One('lims.fraction', 'Fraction', required=True, + select=True) service_analysis = fields.Many2One('lims.analysis', 'Service', - required=True) + required=True, select=True) fraction_type = fields.Function(fields.Many2One('lims.fraction.type', 'Fraction type'), 'get_fraction_field', searcher='search_fraction_field') @@ -731,8 +732,8 @@ class PlanificationServiceDetail(ModelSQL, ModelView): staff_responsible = fields.Many2Many( 'lims.planification.service_detail-laboratory.professional', 'detail', 'professional', 'Laboratory professionals') - is_control = fields.Boolean('Is Control') - is_replanned = fields.Boolean('Is Replanned') + is_control = fields.Boolean('Is Control', select=True) + is_replanned = fields.Boolean('Is Replanned', select=True) planned_service = fields.Many2One('lims.analysis', 'Planned service') repetition = fields.Function(fields.Integer('Repetition'), 'get_repetition') @@ -859,8 +860,9 @@ class LabProfessionalMethod(ModelSQL, ModelView): __name__ = 'lims.lab.professional.method' professional = fields.Many2One('lims.laboratory.professional', - 'Professional', required=True) - method = fields.Many2One('lims.lab.method', 'Method', required=True) + 'Professional', required=True, select=True) + method = fields.Many2One('lims.lab.method', 'Method', required=True, + select=True) state = fields.Selection([ ('training', 'Training'), ('qualified', 'Qualified'), @@ -869,7 +871,7 @@ class LabProfessionalMethod(ModelSQL, ModelView): type = fields.Selection([ ('preparation', 'Preparation'), ('analytical', 'Analytical'), - ], 'Type', sort=False) + ], 'Type', sort=False, select=True) requalification_history = fields.One2Many( 'lims.lab.professional.method.requalification', 'professional_method', 'Trainings/Qualifications/Requalifications') diff --git a/lims_instrument/resultsimport.py b/lims_instrument/resultsimport.py index d19d676b..56fb307f 100644 --- a/lims_instrument/resultsimport.py +++ b/lims_instrument/resultsimport.py @@ -354,13 +354,14 @@ class NotebookLoadResultsFile(Wizard): ('converted_result_modifier', 'not in', ['d', 'nd', 'pos', 'neg', 'ni', 'abs', 'pre']), ] - line = NotebookLine.search(clause) - if line: - data = raw_results[f[1]][analysis][rep] - res = self.get_results(line[0], data) - if res: - NotebookLine.write([line[0]], res) - lines.append(line[0]) + line = NotebookLine.search(clause, limit=1) + if not line: + continue + data = raw_results[f[1]][analysis][rep] + res = self.get_results(line[0], data) + if res: + NotebookLine.write([line[0]], res) + lines.append(line[0]) if lines: self.result.result_lines = [l.id for l in lines]