kalenislims/lims_planning_automatic/laboratory.py

70 lines
2.6 KiB
Python

# This file is part of lims_planning_automatic module for Tryton.
# The COPYRIGHT file at the top level of this repository contains
# the full copyright notices and license terms.
from datetime import date
from trytond.model import fields
from trytond.pool import Pool, PoolMeta
from trytond.transaction import Transaction
class Laboratory(metaclass=PoolMeta):
__name__ = 'lims.laboratory'
automatic_planning = fields.Boolean('Automatic Planning')
automatic_planning_simplified = fields.Boolean(
'Simplified Automatic Planning')
class NotebookRule(metaclass=PoolMeta):
__name__ = 'lims.rule'
def _exec_add_service(self, line, typification):
notebook_lines = super()._exec_add_service(line, typification)
self._automatic_plan(notebook_lines)
return notebook_lines
def _exec_sheet_add_service(self, line, typification):
notebook_lines = super()._exec_sheet_add_service(line, typification)
self._automatic_plan(notebook_lines)
return notebook_lines
def _automatic_plan(self, notebook_lines):
pool = Pool()
EntryDetailAnalysis = pool.get('lims.entry.detail.analysis')
NotebookLine = pool.get('lims.notebook.line')
AnalysisSheet = pool.get('lims.analysis_sheet')
Planification = pool.get('lims.planification')
if not notebook_lines:
return
today = date.today()
entries = []
sheet_id = Transaction().context.get('lims_analysis_sheet', None)
if sheet_id:
sheet = AnalysisSheet(sheet_id)
nlines_same_sheet, nlines_other_sheet = [], []
for nl in notebook_lines:
if nl.get_analysis_sheet_template() == sheet.template.id:
nlines_same_sheet.append(nl)
else:
nlines_other_sheet.append(nl)
if nlines_same_sheet: # no need to plan
NotebookLine.write(nlines_same_sheet, {'start_date': today})
analysis_details = [nl.analysis_detail
for nl in nlines_same_sheet]
EntryDetailAnalysis.write(analysis_details,
{'state': 'planned'})
sheet.create_lines(nlines_same_sheet)
entries = list(set(nl.sample.entry for nl in nlines_other_sheet))
else:
entries = list(set(nl.sample.entry for nl in notebook_lines))
if entries:
Planification.automatic_plan(entries=entries)
def _add_service_to_sheet(self, notebook_lines):
# overwritten by _automatic_plan when calling _exec_sheet_add_service
return