lims: improve the wizard to divide analyzes into different reports

This commit is contained in:
Adrián Bernardi 2021-12-10 18:46:53 -03:00
parent 7c62a3c2a9
commit 21f5c101c5
9 changed files with 63 additions and 236 deletions

View File

@ -177,9 +177,7 @@ def register():
control_tendency.TrendChartData,
module='lims', type_='model')
Pool.register(
results_report.DivideReportsResult,
results_report.DivideReportsDetail,
results_report.DivideReportsProcess,
results_report.DivideReportsStart,
results_report.OpenSamplesPendingReportingStart,
results_report.GenerateReportStart,
certification.DuplicateAnalysisFamilyStart,

View File

@ -1267,57 +1267,17 @@ msgctxt "field:lims.create_sample.start,zone_required:"
msgid "Zone required"
msgstr "Zona requerida"
msgctxt "field:lims.divide_reports.detail,analysis:"
msgid "Analysis"
msgstr "Análisis"
msgctxt "field:lims.divide_reports.detail,analysis_origin:"
msgid "Analysis origin"
msgstr "Análisis origen"
msgctxt "field:lims.divide_reports.detail,detail_id:"
msgid "Detail ID"
msgstr "ID Detalle"
msgctxt "field:lims.divide_reports.detail,laboratory:"
msgid "Laboratory"
msgstr "Laboratorio"
msgctxt "field:lims.divide_reports.detail,report_grouper:"
msgid "Report Grouper"
msgstr "Agrupador de informe"
msgctxt "field:lims.divide_reports.detail,session_id:"
msgid "Session ID"
msgstr "ID Sesión"
msgctxt "field:lims.divide_reports.process,analysis:"
msgid "Analysis"
msgstr "Análisis"
msgctxt "field:lims.divide_reports.process,analysis_detail:"
msgctxt "field:lims.divide_reports.start,analysis_detail:"
msgid "Analysis detail"
msgstr "Detalle de análisis"
msgctxt "field:lims.divide_reports.process,fraction:"
msgid "Fraction"
msgstr "Fracción"
msgctxt "field:lims.divide_reports.start,analysis_detail_domain:"
msgid "Analysis detail domain"
msgstr "Dominio para Detalle de análisis"
msgctxt "field:lims.divide_reports.process,service:"
msgid "Service"
msgstr "Servicio"
msgctxt "field:lims.divide_reports.result,index:"
msgid "Index"
msgstr "Índice"
msgctxt "field:lims.divide_reports.result,services:"
msgid "Services"
msgstr "Servicios"
msgctxt "field:lims.divide_reports.result,total:"
msgid "Total"
msgstr "Total"
msgctxt "field:lims.divide_reports.start,report_grouper:"
msgid "Report Grouper"
msgstr "Agrupador de informe"
msgctxt "field:lims.entry,ack_report_cache:"
msgid "Acknowledgment report cache"
@ -8937,15 +8897,7 @@ msgctxt "model:lims.create_sample.start,name:"
msgid "Create Sample"
msgstr "Crear muestra"
msgctxt "model:lims.divide_reports.detail,name:"
msgid "Analysis Detail"
msgstr "Detalle de análisis"
msgctxt "model:lims.divide_reports.process,name:"
msgid "Divide Reports"
msgstr "Dividir informes"
msgctxt "model:lims.divide_reports.result,name:"
msgctxt "model:lims.divide_reports.start,name:"
msgid "Divide Reports"
msgstr "Dividir informes"
@ -13450,18 +13402,6 @@ msgctxt "view:lims.create_sample.start:"
msgid "Report comments"
msgstr "Observaciones informe"
msgctxt "view:lims.divide_reports.detail:"
msgid "Analysis Detail"
msgstr "Detalle de análisis"
msgctxt "view:lims.divide_reports.process:"
msgid "Divide Reports"
msgstr "Dividir informes"
msgctxt "view:lims.divide_reports.result:"
msgid "Divide Reports"
msgstr "Dividir informes"
msgctxt "view:lims.entry.acknowledgment_contacts:"
msgid "Acknowledgment Contact"
msgstr "Contacto acuse de recibo"
@ -14675,13 +14615,13 @@ msgctxt "wizard_button:lims.create_sample,start,end:"
msgid "Cancel"
msgstr "Cancelar"
msgctxt "wizard_button:lims.divide_reports,process,end:"
msgctxt "wizard_button:lims.divide_reports,start,end:"
msgid "Cancel"
msgstr "Cancelar"
msgctxt "wizard_button:lims.divide_reports,process,next_:"
msgid "Next"
msgstr "Siguiente"
msgctxt "wizard_button:lims.divide_reports,start,ok:"
msgid "Ok"
msgstr "Aceptar"
msgctxt "wizard_button:lims.entry.change_invoice_party,error,end:"
msgid "Cancel"

View File

@ -1940,127 +1940,61 @@ class ResultsLineRepeatAnalysis(NotebookLineRepeatAnalysis):
return super().default_start(fields)
class DivideReportsResult(ModelView):
class DivideReportsStart(ModelView):
'Divide Reports'
__name__ = 'lims.divide_reports.result'
__name__ = 'lims.divide_reports.start'
services = fields.Many2Many('lims.service', None, None, 'Services')
total = fields.Integer('Total')
index = fields.Integer('Index')
class DivideReportsDetail(ModelSQL, ModelView):
'Analysis Detail'
__name__ = 'lims.divide_reports.detail'
detail_id = fields.Integer('Detail ID')
analysis_origin = fields.Char('Analysis origin', readonly=True)
analysis = fields.Many2One('lims.analysis', 'Analysis', readonly=True)
laboratory = fields.Many2One('lims.laboratory', 'Laboratory',
readonly=True)
report_grouper = fields.Integer('Report Grouper')
session_id = fields.Integer('Session ID')
@classmethod
def __register__(cls, module_name):
super().__register__(module_name)
cursor = Transaction().connection.cursor()
cursor.execute('DELETE FROM "' + cls._table + '"')
class DivideReportsProcess(ModelView):
'Divide Reports'
__name__ = 'lims.divide_reports.process'
fraction = fields.Many2One('lims.fraction', 'Fraction', readonly=True)
service = fields.Many2One('lims.service', 'Service', readonly=True)
analysis = fields.Many2One('lims.analysis', 'Analysis', readonly=True)
analysis_detail = fields.One2Many('lims.divide_reports.detail',
None, 'Analysis detail')
analysis_detail = fields.Many2Many('lims.entry.detail.analysis',
None, None, 'Analysis detail',
domain=[('id', 'in', Eval('analysis_detail_domain'))],
depends=['analysis_detail_domain'])
analysis_detail_domain = fields.One2Many('lims.entry.detail.analysis',
None, 'Analysis detail domain')
class DivideReports(Wizard):
'Divide Reports'
__name__ = 'lims.divide_reports'
start_state = 'search'
search = StateTransition()
result = StateView('lims.divide_reports.result',
'lims.lims_divide_reports_result_view_form', [])
next_ = StateTransition()
process = StateView('lims.divide_reports.process',
'lims.lims_divide_reports_process_view_form', [
start = StateView('lims.divide_reports.start',
'lims.lims_divide_reports_start_view_form', [
Button('Cancel', 'end', 'tryton-cancel'),
Button('Next', 'next_', 'tryton-forward', default=True),
Button('Ok', 'ok', 'tryton-ok', default=True),
])
confirm = StateTransition()
ok = StateTransition()
def transition_search(self):
Service = Pool().get('lims.service')
def default_start(self, fields):
EntryDetailAnalysis = Pool().get('lims.entry.detail.analysis')
services = Service.search([
('entry', '=', Transaction().context['active_id']),
('divide', '=', True),
('annulled', '=', False),
])
if services:
self.result.services = services
self.result.total = len(self.result.services)
self.result.index = 0
return 'next_'
return 'end'
default = {
'report_grouper': 0,
'analysis_detail': [],
'analysis_detail_domain': [],
}
def transition_next_(self):
has_prev = (hasattr(self.process, 'analysis_detail') and
getattr(self.process, 'analysis_detail'))
if has_prev:
for detail in self.process.analysis_detail:
detail.save()
context = Transaction().context
model = context.get('active_model', None)
if self.result.index < self.result.total:
service = self.result.services[self.result.index]
self.process.service = service.id
self.process.analysis_detail = None
self.result.index += 1
return 'process'
return 'confirm'
if model == 'lims.entry':
analysis_detail = EntryDetailAnalysis.search([
('entry', 'in', context['active_ids']),
])
default['analysis_detail_domain'] = [e.id for e in analysis_detail]
def default_process(self, fields):
DivideReportsDetail = Pool().get(
'lims.divide_reports.detail')
elif model == 'lims.entry.detail.analysis':
analysis_detail = EntryDetailAnalysis.search([
('id', 'in', context['active_ids']),
])
default['analysis_detail_domain'] = [e.id for e in analysis_detail]
default['analysis_detail'] = default['analysis_detail_domain']
if not self.process.service:
return {}
default = {}
default['fraction'] = self.process.service.fraction.id
default['service'] = self.process.service.id
default['analysis'] = self.process.service.analysis.id
details = DivideReportsDetail.create([{
'detail_id': d.id,
'analysis_origin': d.analysis_origin,
'analysis': d.analysis.id,
'laboratory': d.laboratory.id,
'report_grouper': d.report_grouper,
'session_id': self._session_id,
} for d in self.process.service.analysis_detail])
if details:
default['analysis_detail'] = [d.id for d in details]
return default
def transition_confirm(self):
pool = Pool()
DivideReportsDetail = pool.get(
'lims.divide_reports.detail')
EntryDetailAnalysis = pool.get('lims.entry.detail.analysis')
details = DivideReportsDetail.search([
('session_id', '=', self._session_id),
])
for detail in details:
analysis_detail = EntryDetailAnalysis(detail.detail_id)
analysis_detail.report_grouper = detail.report_grouper
analysis_detail.save()
def transition_ok(self):
EntryDetailAnalysis = Pool().get('lims.entry.detail.analysis')
EntryDetailAnalysis.write(list(self.start.analysis_detail),
{'report_grouper': self.start.report_grouper})
return 'end'

View File

@ -416,25 +416,10 @@
<!-- Wizard Divide Reports -->
<record model="ir.ui.view" id="lims_divide_reports_result_view_form">
<field name="model">lims.divide_reports.result</field>
<record model="ir.ui.view" id="lims_divide_reports_start_view_form">
<field name="model">lims.divide_reports.start</field>
<field name="type">form</field>
<field name="name">service_divide_reports_result_form</field>
</record>
<record model="ir.ui.view" id="lims_divide_reports_process_view_form">
<field name="model">lims.divide_reports.process</field>
<field name="type">form</field>
<field name="name">service_divide_reports_process_form</field>
</record>
<record model="ir.ui.view" id="lims_divide_reports_detail_view_form">
<field name="model">lims.divide_reports.detail</field>
<field name="type">form</field>
<field name="name">service_divide_reports_detail_form</field>
</record>
<record model="ir.ui.view" id="lims_divide_reports_detail_view_list">
<field name="model">lims.divide_reports.detail</field>
<field name="type">tree</field>
<field name="name">service_divide_reports_detail_list</field>
<field name="name">service_divide_reports_start_form</field>
</record>
<record model="ir.action.wizard" id="wiz_lims_divide_reports">
@ -442,19 +427,15 @@
<field name="wiz_name">lims.divide_reports</field>
</record>
<record model="ir.action.keyword" id="lims_divide_reports_keyword">
<record model="ir.action.keyword" id="lims_divide_reports_entry_keyword">
<field name="keyword">form_action</field>
<field name="model">lims.entry,-1</field>
<field name="action" ref="wiz_lims_divide_reports"/>
</record>
<record model="ir.model.field.access" id="access_divide_reports_process_analysis_detail">
<field name="field"
search="[('name', '=', 'analysis_detail'), ('model.model', '=', 'lims.divide_reports.process')]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
<record model="ir.action.keyword" id="lims_divide_reports_detail_keyword">
<field name="keyword">form_action</field>
<field name="model">lims.entry.detail.analysis,-1</field>
<field name="action" ref="wiz_lims_divide_reports"/>
</record>
<!-- Samples Pending Reporting -->

View File

@ -1,11 +0,0 @@
<?xml version="1.0"?>
<form>
<label name="analysis_origin"/>
<field name="analysis_origin"/>
<label name="analysis"/>
<field name="analysis"/>
<label name="laboratory"/>
<field name="laboratory"/>
<label name="report_grouper"/>
<field name="report_grouper"/>
</form>

View File

@ -1,7 +0,0 @@
<?xml version="1.0"?>
<tree editable="1">
<field name="analysis_origin"/>
<field name="analysis"/>
<field name="laboratory"/>
<field name="report_grouper"/>
</tree>

View File

@ -1,10 +0,0 @@
<?xml version="1.0"?>
<form>
<label name="fraction"/>
<field name="fraction"/>
<label name="service"/>
<field name="service"/>
<label name="analysis"/>
<field name="analysis" colspan="3"/>
<field name="analysis_detail" colspan="4"/>
</form>

View File

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

View File

@ -0,0 +1,6 @@
<?xml version="1.0"?>
<form>
<label name="report_grouper"/>
<field name="report_grouper"/>
<field name="analysis_detail" colspan="4"/>
</form>