lims: improve the wizard to divide analyzes into different reports
This commit is contained in:
parent
7c62a3c2a9
commit
21f5c101c5
|
@ -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,
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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'
|
||||
|
||||
|
||||
|
|
|
@ -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 -->
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<form>
|
||||
<field name="services" colspan="4"/>
|
||||
</form>
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0"?>
|
||||
<form>
|
||||
<label name="report_grouper"/>
|
||||
<field name="report_grouper"/>
|
||||
<field name="analysis_detail" colspan="4"/>
|
||||
</form>
|
Loading…
Reference in New Issue