From 575cd55ea74fe2f61e2ef31c5565ef37d30ca4cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Marr=C3=B3?= Date: Thu, 5 Mar 2020 01:24:51 -0300 Subject: [PATCH] Update to 5.4 --- lims/COPYRIGHT | 4 +- lims/analysis.py | 23 +++--- lims/entry.py | 28 ++++---- lims/locale/override/es.po | 4 -- lims/message.xml | 2 +- lims/notebook.py | 9 +-- lims/planification.py | 30 +++++--- lims/results_report.py | 8 +-- lims/sample.py | 70 +++++++++++-------- lims/tryton.cfg | 2 +- lims/view/stock_move_list.xml | 6 -- lims/view/stock_shipment_in_form.xml | 2 +- lims_account_invoice/COPYRIGHT | 4 +- lims_account_invoice/message.xml | 2 +- lims_account_invoice/tryton.cfg | 2 +- lims_administrative_task/COPYRIGHT | 4 +- lims_administrative_task/message.xml | 2 +- lims_administrative_task/task.xml | 27 +++++++ lims_administrative_task/tryton.cfg | 2 +- lims_analysis_sheet/interface.py | 2 +- lims_analysis_sheet/message.xml | 2 +- lims_analysis_sheet/tryton.cfg | 2 +- .../view/analysis_sheet_form.xml | 7 +- lims_analytic/COPYRIGHT | 4 +- lims_analytic/tryton.cfg | 2 +- lims_device_maintenance/maintenance.xml | 22 ++++++ lims_device_maintenance/message.xml | 2 +- lims_device_maintenance/tryton.cfg | 2 +- lims_digital_sign/COPYRIGHT | 4 +- lims_digital_sign/message.xml | 2 +- lims_digital_sign/tryton.cfg | 2 +- lims_industry/COPYRIGHT | 4 +- lims_industry/industry.py | 6 +- lims_industry/message.xml | 2 +- lims_industry/sample.py | 5 +- lims_industry/tryton.cfg | 2 +- lims_instrument/COPYRIGHT | 4 +- lims_instrument/message.xml | 2 +- lims_instrument/tryton.cfg | 2 +- lims_instrument_custom_set/COPYRIGHT | 4 +- lims_instrument_custom_set/tryton.cfg | 2 +- lims_instrument_generic_form/COPYRIGHT | 4 +- lims_instrument_generic_form/tryton.cfg | 2 +- lims_instrument_generic_service/COPYRIGHT | 4 +- lims_instrument_generic_service/tryton.cfg | 2 +- lims_interface/COPYRIGHT | 4 +- lims_interface/interface.py | 12 ++-- lims_interface/tryton.cfg | 2 +- lims_production/COPYRIGHT | 4 +- lims_production/message.xml | 2 +- lims_production/production.py | 2 +- lims_production/stock.py | 3 +- lims_production/tryton.cfg | 2 +- lims_project/COPYRIGHT | 4 +- lims_project/message.xml | 2 +- lims_project/project.py | 4 +- lims_project/tryton.cfg | 2 +- lims_project_interlaboratory/COPYRIGHT | 4 +- lims_project_interlaboratory/tryton.cfg | 2 +- lims_project_study_plan/COPYRIGHT | 4 +- lims_project_study_plan/message.xml | 2 +- lims_project_study_plan/project.py | 24 +++---- lims_project_study_plan/tryton.cfg | 2 +- lims_project_tas/COPYRIGHT | 4 +- lims_project_tas/message.xml | 2 +- lims_project_tas/tryton.cfg | 2 +- lims_project_water/COPYRIGHT | 4 +- lims_project_water/message.xml | 2 +- lims_project_water/tryton.cfg | 2 +- lims_sale/COPYRIGHT | 4 +- lims_sale/configuration.xml | 2 + lims_sale/sale.py | 10 +-- lims_sale/sample.py | 3 + lims_sale/tryton.cfg | 2 +- lims_sale_industry/COPYRIGHT | 4 +- lims_sale_industry/message.xml | 2 +- lims_sale_industry/sale.py | 12 ++-- lims_sale_industry/sample.py | 3 + lims_sale_industry/tryton.cfg | 2 +- setup.py | 23 +++--- 80 files changed, 278 insertions(+), 215 deletions(-) diff --git a/lims/COPYRIGHT b/lims/COPYRIGHT index 2fc7779..b2263a0 100644 --- a/lims/COPYRIGHT +++ b/lims/COPYRIGHT @@ -1,5 +1,5 @@ -Copyright (C) 2017-2018 Ignacio Parszyk -Copyright (C) 2013-2018 Sebastián Marró +Copyright (C) 2017-2020 Ignacio Parszyk +Copyright (C) 2013-2020 Sebastián Marró Copyright (C) 2013-2016 Luis Falcon This program is free software: you can redistribute it and/or modify diff --git a/lims/analysis.py b/lims/analysis.py index dd178e3..79b5a81 100644 --- a/lims/analysis.py +++ b/lims/analysis.py @@ -2,6 +2,7 @@ # This file is part of lims module for Tryton. # The COPYRIGHT file at the top level of this repository contains # the full copyright notices and license terms. +import sys import logging import operator from datetime import datetime @@ -176,7 +177,7 @@ class Typification(ModelSQL, ModelView): def search_views_field(cls, name, clause): return [(name[:-5],) + tuple(clause[1:])] - @fields.depends('analysis') + @fields.depends('analysis', '_parent_analysis.state') def on_change_with_valid_readonly(self, name=None): if self.analysis and self.analysis.state == 'disabled': return True @@ -191,7 +192,7 @@ class Typification(ModelSQL, ModelView): method = methods[0] self.method = method - @fields.depends('analysis') + @fields.depends('analysis', '_parent_analysis.methods') def on_change_with_method_domain(self, name=None): methods = [] if self.analysis and self.analysis.methods: @@ -1491,7 +1492,6 @@ class Analysis(Workflow, ModelSQL, ModelView): class AnalysisIncluded(ModelSQL, ModelView): 'Included Analysis' __name__ = 'lims.analysis.included' - _rec_name = 'included_analysis' analysis = fields.Many2One('lims.analysis', 'Analysis', required=True, ondelete='CASCADE', select=True) @@ -1560,7 +1560,7 @@ class AnalysisIncluded(ModelSQL, ModelView): laboratory = laboratories[0] self.laboratory = laboratory - @fields.depends('included_analysis') + @fields.depends('included_analysis', '_parent_included_analysis.type') def on_change_with_analysis_type(self, name=None): res = '' if self.included_analysis: @@ -1873,7 +1873,6 @@ class AnalysisIncluded(ModelSQL, ModelView): class AnalysisLaboratory(ModelSQL, ModelView): 'Analysis - Laboratory' __name__ = 'lims.analysis-laboratory' - _rec_name = 'laboratory' analysis = fields.Many2One('lims.analysis', 'Analysis', ondelete='CASCADE', select=True, required=True) @@ -1915,12 +1914,11 @@ class AnalysisLabMethod(ModelSQL): class AnalysisDevice(DeactivableMixin, ModelSQL, ModelView): 'Analysis Device' __name__ = 'lims.analysis.device' - _rec_name = 'device' analysis = fields.Many2One('lims.analysis', 'Analysis', required=True, ondelete='CASCADE', select=True) laboratory = fields.Many2One('lims.laboratory', 'Laboratory', - required=True, depends=['_parent_analysis.laboratory_domain'], + required=True, depends=['analysis'], domain=[('id', 'in', Eval('_parent_analysis', {}).get('laboratory_domain', [Eval('laboratory')]))]) device = fields.Many2One('lims.lab.device', 'Device', required=True, @@ -2264,11 +2262,14 @@ class CreateAnalysisProduct(Wizard): template.type = 'service' template.list_price = Decimal('1.0') template.cost_price = Decimal('1.0') - template.salable = True + try: + template.salable = True + template.sale_uom = uom + template.accounts_category = True + template.account_category = config_.analysis_product_category.id + except AttributeError: + pass template.default_uom = uom - template.sale_uom = uom - template.account_category = config_.analysis_product_category.id - template.accounts_category = True template.save() diff --git a/lims/entry.py b/lims/entry.py index c1c703d..281ab8d 100644 --- a/lims/entry.py +++ b/lims/entry.py @@ -265,17 +265,14 @@ class Entry(Workflow, ModelSQL, ModelView): for c in self.party.addresses: if (c.report_contact_default and c not in a_report_contacts): - value = ReportContacts(**ReportContacts.default_get( - list(ReportContacts._fields.keys()))) - value.contact = c - report_contacts.append(value) + report_contact = ReportContacts() + report_contact.contact = c + report_contacts.append(report_contact) if (c.acknowledgment_contact_default and c not in a_acknowledgment_contacts): - value = AcknowledgmentContacts( - **AcknowledgmentContacts.default_get( - list(AcknowledgmentContacts._fields.keys()))) - value.contact = c - acknowledgment_contacts.append(value) + acknowledgment_contact = AcknowledgmentContacts() + acknowledgment_contact.contact = c + acknowledgment_contacts.append(acknowledgment_contact) self.email_report = email self.single_sending_report = single_sending @@ -325,16 +322,15 @@ class Entry(Workflow, ModelSQL, ModelView): for c in self.invoice_party.addresses: if (c.invoice_contact_default and c not in a_invoice_contacts): - value = InvoiceContacts(**InvoiceContacts.default_get( - list(InvoiceContacts._fields.keys()))) - value.contact = c - invoice_contacts.append(value) + invoice_contact = InvoiceContacts() + invoice_contact.contact = c + invoice_contacts.append(invoice_contact) self.invoice_contacts = invoice_contacts self.report_contacts = report_contacts self.acknowledgment_contacts = acknowledgment_contacts - @fields.depends('party') + @fields.depends('party', '_parent_party.relations') def on_change_with_invoice_party_domain(self, name=None): Config = Pool().get('lims.configuration') @@ -961,7 +957,7 @@ class EntryDetailAnalysis(ModelSQL, ModelView): return Transaction().context.get('service') return None - @fields.depends('service') + @fields.depends('service', '_parent_service.id') def on_change_with_service_view(self, name=None): if self.service: return self.service.id @@ -999,7 +995,7 @@ class EntryDetailAnalysis(ModelSQL, ModelView): def default_report(): return True - @fields.depends('analysis') + @fields.depends('analysis', '_parent_analysis.type') def on_change_with_analysis_type(self, name=None): if self.analysis: return self.analysis.type diff --git a/lims/locale/override/es.po b/lims/locale/override/es.po index dab4201..753d18c 100644 --- a/lims/locale/override/es.po +++ b/lims/locale/override/es.po @@ -13,7 +13,3 @@ msgstr "Direcciones y contactos" msgctxt "model:ir.ui.menu,name:party.menu_address_form" msgid "Addresses" msgstr "Direcciones y contactos" - -msgctxt "view:party.address:party." -msgid "Addresses" -msgstr "Direcciones y contactos" diff --git a/lims/message.xml b/lims/message.xml index e37773e..5d8d181 100644 --- a/lims/message.xml +++ b/lims/message.xml @@ -1,6 +1,6 @@ - + Quantification limit must be greater than Detection limit diff --git a/lims/notebook.py b/lims/notebook.py index a326aaa..b42527e 100644 --- a/lims/notebook.py +++ b/lims/notebook.py @@ -827,7 +827,8 @@ class NotebookLine(ModelSQL, ModelView): clause[2:3]) return [('id', 'in', [x[0] for x in cursor.fetchall()])] - @fields.depends('method', 'party') + @fields.depends('method', 'party', + '_parent_method.results_estimated_waiting') def on_change_with_results_estimated_waiting(self, name=None): LabMethodWaitingTime = Pool().get('lims.lab.method.results_waiting') if self.method: @@ -864,7 +865,7 @@ class NotebookLine(ModelSQL, ModelView): relativedelta(days=estimated_waiting)) return date - @fields.depends('analysis') + @fields.depends('analysis', '_parent_analysis.methods') def on_change_with_method_domain(self, name=None): methods = [] if self.analysis and self.analysis.methods: @@ -2559,7 +2560,7 @@ class NotebookLoadResultsFormulaProcess(ModelView): comments = fields.Text('Comments') comments_copy = fields.Boolean('Field copy') - @fields.depends('formula', 'variables') + @fields.depends('formula', 'variables', '_parent_formula.formula') def on_change_with_result(self, name=None): if not self.formula or not self.variables: return None @@ -2576,7 +2577,7 @@ class NotebookLoadResultsFormulaProcess(ModelView): return str(value) - @fields.depends('formula') + @fields.depends('formula', '_parent_formula.formula') def on_change_with_formula_formula(self, name=None): if self.formula: formula = self.formula.formula diff --git a/lims/planification.py b/lims/planification.py index 2eccb09..b8afaf3 100644 --- a/lims/planification.py +++ b/lims/planification.py @@ -172,7 +172,8 @@ class Planification(Workflow, ModelSQL, ModelView): def default_laboratory(): return Transaction().context.get('laboratory', None) - @fields.depends('laboratory', 'state') + @fields.depends('laboratory', 'state', + methods=['_get_analysis_domain']) def on_change_with_analysis_domain(self, name=None): if not self.laboratory or self.state != 'draft': return [] @@ -838,7 +839,7 @@ class FractionReagent(ModelSQL, ModelView): def get_reagent_domain(self, name=None): return self.default_reagent_domain() - @fields.depends('product') + @fields.depends('product', '_parent_product.quantity') def on_change_with_quantity(self, name=None): pool = Pool() Location = pool.get('stock.location') @@ -853,7 +854,7 @@ class FractionReagent(ModelSQL, ModelView): product = Product(self.product.id) return product.quantity or 0 - @fields.depends('product') + @fields.depends('product', '_parent_product.default_uom') def on_change_with_default_uom(self, name=None): if self.product: return self.product.default_uom.id @@ -1700,7 +1701,7 @@ class AddFractionControlStart(ModelView): generate_repetition = fields.Boolean('Generate repetition', states={'readonly': Eval('type') == 'exist'}, depends=['type']) - @fields.depends('planification', 'type') + @fields.depends('planification', 'type', '_parent_planification.analysis') def on_change_with_fraction_domain(self, name=None): cursor = Transaction().connection.cursor() pool = Pool() @@ -1748,7 +1749,9 @@ class AddFractionControlStart(ModelView): 'WHERE nl.id IN (' + notebook_lines_ids + ')') return [x[0] for x in cursor.fetchall()] - @fields.depends('type', 'original_fraction', 'concentration_level') + @fields.depends('type', 'original_fraction', 'concentration_level', + '_parent_original_fraction.label', + '_parent_concentration_level.description') def on_change_with_label(self, name=None): Date = Pool().get('ir.date') if self.type == 'exist': @@ -2121,7 +2124,8 @@ class AddFractionRMBMZStart(ModelView): return False return True - @fields.depends('planification', 'type', 'rm_bmz_type') + @fields.depends('planification', 'type', 'rm_bmz_type', + '_parent_planification.analysis') def on_change_with_fraction_domain(self, name=None): cursor = Transaction().connection.cursor() pool = Pool() @@ -2209,7 +2213,9 @@ class AddFractionRMBMZStart(ModelView): return [x[0] for x in cursor.fetchall()] @fields.depends('type', 'rm_bmz_type', 'reference_fraction', - 'product_type', 'matrix', 'concentration_level') + 'product_type', 'matrix', 'concentration_level', + '_parent_reference_fraction.label', + '_parent_concentration_level.description') def on_change_with_label(self, name=None): Date = Pool().get('ir.date') if self.rm_bmz_type == 'exist': @@ -2758,7 +2764,7 @@ class AddFractionBREStart(ModelView): concentration_level_invisible = fields.Boolean( 'Concentration level invisible') - @fields.depends('planification', 'type') + @fields.depends('planification', 'type', '_parent_planification.analysis') def on_change_with_fraction_domain(self, name=None): pool = Pool() Analysis = pool.get('lims.analysis') @@ -3115,7 +3121,7 @@ class AddFractionMRTStart(ModelView): concentration_level_invisible = fields.Boolean( 'Concentration level invisible') - @fields.depends('planification', 'type') + @fields.depends('planification', 'type', '_parent_planification.analysis') def on_change_with_fraction_domain(self, name=None): pool = Pool() Analysis = pool.get('lims.analysis') @@ -4357,7 +4363,8 @@ class CreateFractionControlStart(ModelView): (self.product_type.id,)) return [x[0] for x in cursor.fetchall()] - @fields.depends('type', 'product_type', 'matrix') + @fields.depends('type', 'product_type', 'matrix', + '_parent_product_type.code', '_parent_matrix.code') def on_change_with_label(self, name=None): label = '' if self.type == 'coi': @@ -5285,7 +5292,8 @@ class ReplaceTechnicianStart(ModelView): 'lims.laboratory.professional', None, 'Substitute domain'), 'on_change_with_substitute_domain') - @fields.depends('technician_replaced', 'planification') + @fields.depends('technician_replaced', 'planification', + '_parent_planification.laboratory') def on_change_with_substitute_domain(self, name=None): pool = Pool() UserLaboratory = pool.get('lims.user-laboratory') diff --git a/lims/results_report.py b/lims/results_report.py index a43bb99..cd9f095 100644 --- a/lims/results_report.py +++ b/lims/results_report.py @@ -1221,19 +1221,19 @@ class GenerateResultsReportResultMan(ModelView): reports_details = fields.One2Many('lims.results_report.version.detail', None, 'Reports details') - @fields.depends('report') + @fields.depends('report', '_parent_report.party') def on_change_with_party(self, name=None): if self.report: return self.report.party.id return None - @fields.depends('report') + @fields.depends('report', '_parent_report.notebook') def on_change_with_notebook(self, name=None): if self.report and self.report.notebook: return self.report.notebook.id return None - @fields.depends('report') + @fields.depends('report', '_parent_report.report_grouper') def on_change_with_report_grouper(self, name=None): if self.report: return self.report.report_grouper @@ -1257,7 +1257,7 @@ class GenerateResultsReportResultMan(ModelView): return version[0].report_type return None - @fields.depends('report') + @fields.depends('report', '_parent_report.cie_fraction_type') def on_change_with_cie_fraction_type(self, name=None): if self.report: with Transaction().set_context(_check_access=False): diff --git a/lims/sample.py b/lims/sample.py index 662677a..1cc53b9 100644 --- a/lims/sample.py +++ b/lims/sample.py @@ -809,7 +809,9 @@ class Service(ModelSQL, ModelView): }) @fields.depends('analysis', 'fraction', 'typification_domain', - 'laboratory') + 'laboratory', '_parent_fraction.id', + methods=['on_change_with_laboratory_domain', + 'on_change_with_method_domain', '_on_change_with_device_domain']) def on_change_analysis(self): Laboratory = Pool().get('lims.laboratory') laboratory = None @@ -834,7 +836,7 @@ class Service(ModelSQL, ModelView): def default_analysis_domain(): return Transaction().context.get('analysis_domain', []) - @fields.depends('fraction') + @fields.depends('fraction', '_parent_fraction.id') def on_change_with_analysis_domain(self, name=None): if Transaction().context.get('analysis_domain'): return Transaction().context.get('analysis_domain') @@ -844,13 +846,13 @@ class Service(ModelSQL, ModelView): def default_typification_domain(): return Transaction().context.get('typification_domain', []) - @fields.depends('fraction') + @fields.depends('fraction', '_parent_fraction.id') def on_change_with_typification_domain(self, name=None): if Transaction().context.get('typification_domain'): return Transaction().context.get('typification_domain') return [] - @fields.depends('analysis') + @fields.depends('analysis', '_parent_analysis.type') def on_change_with_analysis_type(self, name=None): if self.analysis: return self.analysis.type @@ -862,7 +864,7 @@ class Service(ModelSQL, ModelView): return Transaction().context.get('fraction') return None - @fields.depends('fraction') + @fields.depends('fraction', '_parent_fraction.id') def on_change_with_fraction_view(self, name=None): if self.fraction: return self.fraction.id @@ -874,7 +876,7 @@ class Service(ModelSQL, ModelView): return Transaction().context.get('sample') return None - @fields.depends('fraction') + @fields.depends('fraction', '_parent_fraction.sample') def on_change_with_sample(self, name=None): if self.fraction: result = self.get_fraction_field((self,), ('sample',)) @@ -887,7 +889,7 @@ class Service(ModelSQL, ModelView): return Transaction().context.get('entry') return None - @fields.depends('fraction') + @fields.depends('fraction', '_parent_fraction.entry') def on_change_with_entry(self, name=None): if self.fraction: result = self.get_fraction_field((self,), ('entry',)) @@ -900,14 +902,15 @@ class Service(ModelSQL, ModelView): return Transaction().context.get('party') return None - @fields.depends('fraction') + @fields.depends('fraction', '_parent_fraction.party') def on_change_with_party(self, name=None): if self.fraction: result = self.get_fraction_field((self,), ('party',)) return result['party'][self.id] return None - @fields.depends('analysis', 'laboratory') + @fields.depends('analysis', 'laboratory', + methods=['_on_change_with_device_domain']) def on_change_laboratory(self): device = None if self.analysis and self.laboratory: @@ -956,7 +959,8 @@ class Service(ModelSQL, ModelView): return [] return [x[0] for x in res] - @fields.depends('analysis', 'laboratory') + @fields.depends('analysis', 'laboratory', + methods=['_on_change_with_device_domain']) def on_change_with_device_domain(self, name=None): return self._on_change_with_device_domain(self.analysis, self.laboratory) @@ -1433,7 +1437,7 @@ class Fraction(ModelSQL, ModelView): def default_analysis_domain(): return Transaction().context.get('analysis_domain', []) - @fields.depends('sample') + @fields.depends('sample', '_parent_sample.id') def on_change_with_analysis_domain(self, name=None): if Transaction().context.get('analysis_domain'): return Transaction().context.get('analysis_domain') @@ -1445,7 +1449,7 @@ class Fraction(ModelSQL, ModelView): def default_typification_domain(): return Transaction().context.get('typification_domain', []) - @fields.depends('sample') + @fields.depends('sample', '_parent_sample.id') def on_change_with_typification_domain(self, name=None): if Transaction().context.get('typification_domain'): return Transaction().context.get('typification_domain') @@ -1457,7 +1461,7 @@ class Fraction(ModelSQL, ModelView): def default_product_type(): return Transaction().context.get('product_type', None) - @fields.depends('sample') + @fields.depends('sample', '_parent_sample.product_type') def on_change_with_product_type(self, name=None): if Transaction().context.get('product_type'): return Transaction().context.get('product_type') @@ -1469,7 +1473,7 @@ class Fraction(ModelSQL, ModelView): def default_matrix(): return Transaction().context.get('matrix', None) - @fields.depends('sample') + @fields.depends('sample', '_parent_sample.matrix') def on_change_with_matrix(self, name=None): if Transaction().context.get('matrix'): return Transaction().context.get('matrix') @@ -1557,7 +1561,7 @@ class Fraction(ModelSQL, ModelView): return [('type', clause[1], res_type)] return [] - @fields.depends('sample') + @fields.depends('sample', '_parent_sample.id') def on_change_with_sample_view(self, name=None): if self.sample: return self.sample.id @@ -1569,7 +1573,7 @@ class Fraction(ModelSQL, ModelView): return Transaction().context.get('entry') return None - @fields.depends('sample') + @fields.depends('sample', '_parent_sample.entry') def on_change_with_entry(self, name=None): if self.sample: result = self.get_sample_field((self,), ('entry',)) @@ -1582,7 +1586,7 @@ class Fraction(ModelSQL, ModelView): return Transaction().context.get('party') return None - @fields.depends('sample') + @fields.depends('sample', '_parent_sample.party') def on_change_with_party(self, name=None): if self.sample: result = self.get_sample_field((self,), ('party',)) @@ -1594,7 +1598,7 @@ class Fraction(ModelSQL, ModelView): return Transaction().context.get('label', '') @fields.depends('sample', 'special_type', 'con_original_fraction', - 'services', 'create_date') + 'services', 'create_date', '_parent_sample.label') def on_change_with_label(self, name=None): type = self.special_type if type == 'con': @@ -1651,7 +1655,7 @@ class Fraction(ModelSQL, ModelView): return Transaction().context.get('package_type') return None - @fields.depends('sample') + @fields.depends('sample', '_parent_sample.package_type') def on_change_with_package_type(self, name=None): if self.sample: result = self.get_sample_field((self,), ('package_type',)) @@ -1662,7 +1666,7 @@ class Fraction(ModelSQL, ModelView): def default_size(): return Transaction().context.get('size', None) - @fields.depends('sample') + @fields.depends('sample', '_parent_sample.size') def on_change_with_size(self, name=None): if self.sample: result = self.get_sample_field((self,), ('size',)) @@ -1675,7 +1679,7 @@ class Fraction(ModelSQL, ModelView): return Transaction().context.get('size_uom') return None - @fields.depends('sample') + @fields.depends('sample', '_parent_sample.size_uom') def on_change_with_size_uom(self, name=None): if self.sample: result = self.get_sample_field((self,), ('size_uom',)) @@ -1688,7 +1692,7 @@ class Fraction(ModelSQL, ModelView): return Transaction().context.get('fraction_state') return None - @fields.depends('sample') + @fields.depends('sample', '_parent_sample.package_state') def on_change_with_fraction_state(self, name=None): if self.sample: result = self.get_sample_field((self,), ('fraction_state',)) @@ -1734,7 +1738,7 @@ class Fraction(ModelSQL, ModelView): return True return False - @fields.depends('confirmed', 'type') + @fields.depends('confirmed', 'type', '_parent_type.cie_fraction_type') def on_change_with_cie_fraction_type_available(self, name=None): if not self.confirmed and self.type and self.type.cie_fraction_type: return True @@ -1755,7 +1759,7 @@ class Fraction(ModelSQL, ModelView): def load_services(cls, fractions): pass - @fields.depends('confirmed', 'sample') + @fields.depends('confirmed', 'sample', '_parent_sample.entry') def on_change_with_button_confirm_available(self, name=None): if (not self.confirmed and self.sample and self.sample.entry and (self.sample.entry.state == 'ongoing')): @@ -2440,7 +2444,9 @@ class Sample(ModelSQL, ModelView): for sample in samples: sample.warn_duplicated_label() - @fields.depends('product_type', 'matrix', 'zone') + @fields.depends('product_type', 'matrix', 'zone', + '_parent_product_type.restricted_entry', + '_parent_matrix.restricted_entry', '_parent_zone.restricted_entry') def on_change_with_restricted_entry(self, name=None): return (self.product_type and self.product_type.restricted_entry and self.matrix and self.matrix.restricted_entry and @@ -2596,7 +2602,7 @@ class Sample(ModelSQL, ModelView): return Transaction().context.get('entry') return None - @fields.depends('entry') + @fields.depends('entry', '_parent_entry.id') def on_change_with_entry_view(self, name=None): if self.entry: return self.entry.id @@ -2617,7 +2623,7 @@ class Sample(ModelSQL, ModelView): if party.entry_zone: return party.entry_zone.id - @fields.depends('entry') + @fields.depends('entry', '_parent_entry.party') def on_change_with_party(self, name=None): if self.entry: result = self.get_entry_field((self,), ('party',)) @@ -2873,7 +2879,7 @@ class DuplicateSampleFromEntryStart(ModelView): date = fields.DateTime('Date', required=True) labels = fields.Text('Labels') - @fields.depends('sample') + @fields.depends('sample', '_parent_sample.date') def on_change_with_date(self, name=None): if self.sample: return self.sample.date @@ -4623,7 +4629,9 @@ class CreateSampleStart(ModelView): return typified_analysis + typified_sets_groups + additional_analysis - @fields.depends('product_type', 'matrix', 'zone') + @fields.depends('product_type', 'matrix', 'zone', + '_parent_product_type.restricted_entry', + '_parent_matrix.restricted_entry', '_parent_zone.restricted_entry') def on_change_with_restricted_entry(self, name=None): return (self.product_type and self.product_type.restricted_entry and self.matrix and self.matrix.restricted_entry and @@ -4644,7 +4652,9 @@ class CreateSampleStart(ModelView): self.fraction_type.default_fraction_state): self.fraction_state = self.fraction_type.default_fraction_state - @fields.depends('fraction_type', 'storage_location') + @fields.depends('fraction_type', 'storage_location', + '_parent_fraction_type.max_storage_time', + '_parent_storage_location.storage_time') def on_change_with_storage_time(self, name=None): if self.fraction_type and self.fraction_type.max_storage_time: return self.fraction_type.max_storage_time diff --git a/lims/tryton.cfg b/lims/tryton.cfg index a7608b3..9d53aed 100644 --- a/lims/tryton.cfg +++ b/lims/tryton.cfg @@ -1,5 +1,5 @@ [tryton] -version=5.2.0 +version=5.4.0 depends: carrier party_relationship diff --git a/lims/view/stock_move_list.xml b/lims/view/stock_move_list.xml index dd6e571..e3dc284 100644 --- a/lims/view/stock_move_list.xml +++ b/lims/view/stock_move_list.xml @@ -1,14 +1,8 @@ - - - - diff --git a/lims/view/stock_shipment_in_form.xml b/lims/view/stock_shipment_in_form.xml index 18eb523..360dbd2 100644 --- a/lims/view/stock_shipment_in_form.xml +++ b/lims/view/stock_shipment_in_form.xml @@ -1,7 +1,7 @@ diff --git a/lims_account_invoice/COPYRIGHT b/lims_account_invoice/COPYRIGHT index fcbf448..2962fb5 100644 --- a/lims_account_invoice/COPYRIGHT +++ b/lims_account_invoice/COPYRIGHT @@ -1,5 +1,5 @@ -Copyright (C) 2017-2018 Ignacio Parszyk -Copyright (C) 2015-2018 Sebastián Marró +Copyright (C) 2017-2020 Ignacio Parszyk +Copyright (C) 2015-2020 Sebastián Marró Copyright (C) 2015 Bruno M. Villasanti Copyright (C) 2015-2016 Luis Falcon diff --git a/lims_account_invoice/message.xml b/lims_account_invoice/message.xml index c31e95c..f28d035 100644 --- a/lims_account_invoice/message.xml +++ b/lims_account_invoice/message.xml @@ -1,6 +1,6 @@ - + Invoice Contacts field must have a value diff --git a/lims_account_invoice/tryton.cfg b/lims_account_invoice/tryton.cfg index 603660e..854656c 100644 --- a/lims_account_invoice/tryton.cfg +++ b/lims_account_invoice/tryton.cfg @@ -1,5 +1,5 @@ [tryton] -version=5.2.0 +version=5.4.0 depends: lims account_invoice diff --git a/lims_administrative_task/COPYRIGHT b/lims_administrative_task/COPYRIGHT index 00db70a..52bc74c 100644 --- a/lims_administrative_task/COPYRIGHT +++ b/lims_administrative_task/COPYRIGHT @@ -1,5 +1,5 @@ -Copyright (C) 2019 Ignacio Parszyk -Copyright (C) 2019 Sebastián Marró +Copyright (C) 2019-2020 Ignacio Parszyk +Copyright (C) 2019-2020 Sebastián Marró This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lims_administrative_task/message.xml b/lims_administrative_task/message.xml index 1515c9f..5ef5d4e 100644 --- a/lims_administrative_task/message.xml +++ b/lims_administrative_task/message.xml @@ -1,6 +1,6 @@ - + You can not delete task "%(task)s" because it is not in draft state diff --git a/lims_administrative_task/task.xml b/lims_administrative_task/task.xml index 4ea1f64..5dff46c 100644 --- a/lims_administrative_task/task.xml +++ b/lims_administrative_task/task.xml @@ -256,5 +256,32 @@ + + + + pending + + + + reject + + + + ongoing + + + + standby + + + + discard + + + + do + + + diff --git a/lims_administrative_task/tryton.cfg b/lims_administrative_task/tryton.cfg index 93e38b1..ba6e5da 100644 --- a/lims_administrative_task/tryton.cfg +++ b/lims_administrative_task/tryton.cfg @@ -1,5 +1,5 @@ [tryton] -version=5.2.0 +version=5.4.0 depends: lims xml: diff --git a/lims_analysis_sheet/interface.py b/lims_analysis_sheet/interface.py index cbcff7f..4bdb863 100644 --- a/lims_analysis_sheet/interface.py +++ b/lims_analysis_sheet/interface.py @@ -32,7 +32,7 @@ class TemplateAnalysisSheet(ModelSQL, ModelView): pending_fractions = fields.Function(fields.Integer('Pending fractions'), 'get_pending_fractions') - @fields.depends('interface') + @fields.depends('interface', '_parent_interface.name') def on_change_with_name(self, name=None): if self.interface: return self.interface.name diff --git a/lims_analysis_sheet/message.xml b/lims_analysis_sheet/message.xml index 7bfa6c6..eec43d3 100644 --- a/lims_analysis_sheet/message.xml +++ b/lims_analysis_sheet/message.xml @@ -1,6 +1,6 @@ - + Compilation already in use by another Analysis Sheet diff --git a/lims_analysis_sheet/tryton.cfg b/lims_analysis_sheet/tryton.cfg index 0fc0bb4..db1d721 100644 --- a/lims_analysis_sheet/tryton.cfg +++ b/lims_analysis_sheet/tryton.cfg @@ -1,5 +1,5 @@ [tryton] -version=5.2.0 +version=5.4.0 depends: lims lims_interface diff --git a/lims_analysis_sheet/view/analysis_sheet_form.xml b/lims_analysis_sheet/view/analysis_sheet_form.xml index 1e0f851..fd5ebb0 100644 --- a/lims_analysis_sheet/view/analysis_sheet_form.xml +++ b/lims_analysis_sheet/view/analysis_sheet_form.xml @@ -16,9 +16,10 @@