mirror of
https://github.com/Kalenis/kalenislims.git
synced 2023-12-14 07:13:04 +01:00
lims_analysis_sheet: add planifications by professional
This commit is contained in:
parent
9fb7a6ab9e
commit
e397bfb406
7 changed files with 410 additions and 3 deletions
|
@ -33,6 +33,9 @@ def register():
|
||||||
planification.RelateTechniciansStart,
|
planification.RelateTechniciansStart,
|
||||||
planification.RelateTechniciansResult,
|
planification.RelateTechniciansResult,
|
||||||
planification.RelateTechniciansDetail4,
|
planification.RelateTechniciansDetail4,
|
||||||
|
planification.PlanificationProfessional,
|
||||||
|
planification.PlanificationProfessionalContext,
|
||||||
|
planification.PlanificationProfessionalLine,
|
||||||
notebook.NotebookLine,
|
notebook.NotebookLine,
|
||||||
notebook.AddControlStart,
|
notebook.AddControlStart,
|
||||||
notebook.RepeatAnalysisStart,
|
notebook.RepeatAnalysisStart,
|
||||||
|
|
|
@ -203,6 +203,62 @@ msgctxt "field:lims.notebook.line,analysis_sheet:"
|
||||||
msgid "Analysis Sheet"
|
msgid "Analysis Sheet"
|
||||||
msgstr "Hoja de análisis"
|
msgstr "Hoja de análisis"
|
||||||
|
|
||||||
|
msgctxt "field:lims.planification.professional,name:"
|
||||||
|
msgid "Name"
|
||||||
|
msgstr "Nombre"
|
||||||
|
|
||||||
|
msgctxt "field:lims.planification.professional,samples:"
|
||||||
|
msgid "# Samples"
|
||||||
|
msgstr "Cant. Muestras"
|
||||||
|
|
||||||
|
msgctxt "field:lims.planification.professional,samples_qty:"
|
||||||
|
msgid "# Samples"
|
||||||
|
msgstr "Cant. Muestras"
|
||||||
|
|
||||||
|
msgctxt "field:lims.planification.professional,sheets_process:"
|
||||||
|
msgid "# Sheets in process"
|
||||||
|
msgstr "Cant. Hojas en Proceso"
|
||||||
|
|
||||||
|
msgctxt "field:lims.planification.professional,sheets_queue:"
|
||||||
|
msgid "# Sheets in queue"
|
||||||
|
msgstr "Cant. Hojas en Cola"
|
||||||
|
|
||||||
|
msgctxt "field:lims.planification.professional.context,from_date:"
|
||||||
|
msgid "From Date"
|
||||||
|
msgstr "Desde la fecha"
|
||||||
|
|
||||||
|
msgctxt "field:lims.planification.professional.context,laboratory:"
|
||||||
|
msgid "Laboratory"
|
||||||
|
msgstr "Laboratorio"
|
||||||
|
|
||||||
|
msgctxt "field:lims.planification.professional.context,to_date:"
|
||||||
|
msgid "To Date"
|
||||||
|
msgstr "Hasta la fecha"
|
||||||
|
|
||||||
|
msgctxt "field:lims.planification.professional.line,date:"
|
||||||
|
msgid "Date"
|
||||||
|
msgstr "Fecha"
|
||||||
|
|
||||||
|
msgctxt "field:lims.planification.professional.line,laboratory:"
|
||||||
|
msgid "Laboratory"
|
||||||
|
msgstr "Laboratorio"
|
||||||
|
|
||||||
|
msgctxt "field:lims.planification.professional.line,professional:"
|
||||||
|
msgid "Professional"
|
||||||
|
msgstr "Profesional"
|
||||||
|
|
||||||
|
msgctxt "field:lims.planification.professional.line,samples_qty:"
|
||||||
|
msgid "# Samples"
|
||||||
|
msgstr "Cant. Muestras"
|
||||||
|
|
||||||
|
msgctxt "field:lims.planification.professional.line,state:"
|
||||||
|
msgid "State"
|
||||||
|
msgstr "Estado"
|
||||||
|
|
||||||
|
msgctxt "field:lims.planification.professional.line,template:"
|
||||||
|
msgid "Template"
|
||||||
|
msgstr "Plantilla"
|
||||||
|
|
||||||
msgctxt "field:lims.planification.relate_technicians.detail4,fraction:"
|
msgctxt "field:lims.planification.relate_technicians.detail4,fraction:"
|
||||||
msgid "Fraction"
|
msgid "Fraction"
|
||||||
msgstr "Fracción"
|
msgstr "Fracción"
|
||||||
|
@ -324,6 +380,14 @@ msgctxt "model:ir.action,name:act_analysis_sheet_list"
|
||||||
msgid "Analysis Sheets"
|
msgid "Analysis Sheets"
|
||||||
msgstr "Hojas de análisis"
|
msgstr "Hojas de análisis"
|
||||||
|
|
||||||
|
msgctxt "model:ir.action,name:act_planification_professional_form"
|
||||||
|
msgid "Planifications by Professional"
|
||||||
|
msgstr "Planificaciones por Profesional"
|
||||||
|
|
||||||
|
msgctxt "model:ir.action,name:act_planification_professional_line_form"
|
||||||
|
msgid "Planifications by Professional - Sheets"
|
||||||
|
msgstr "Planificaciones por Profesional - Hojas"
|
||||||
|
|
||||||
msgctxt "model:ir.action,name:act_template_analysis_sheet_list"
|
msgctxt "model:ir.action,name:act_template_analysis_sheet_list"
|
||||||
msgid "Analysis Sheet Templates"
|
msgid "Analysis Sheet Templates"
|
||||||
msgstr "Plantillas de Hoja de análisis"
|
msgstr "Plantillas de Hoja de análisis"
|
||||||
|
@ -416,6 +480,10 @@ msgctxt "model:ir.ui.menu,name:menu_analysis_sheet_list"
|
||||||
msgid "Analysis Sheets"
|
msgid "Analysis Sheets"
|
||||||
msgstr "Hojas de análisis"
|
msgstr "Hojas de análisis"
|
||||||
|
|
||||||
|
msgctxt "model:ir.ui.menu,name:menu_planification_professional"
|
||||||
|
msgid "Planifications by Professional"
|
||||||
|
msgstr "Planificaciones por Profesional"
|
||||||
|
|
||||||
msgctxt "model:ir.ui.menu,name:menu_template_analysis_sheet_list"
|
msgctxt "model:ir.ui.menu,name:menu_template_analysis_sheet_list"
|
||||||
msgid "Analysis Sheet Templates"
|
msgid "Analysis Sheet Templates"
|
||||||
msgstr "Plantillas de Hoja de análisis"
|
msgstr "Plantillas de Hoja de análisis"
|
||||||
|
@ -452,6 +520,18 @@ msgctxt "model:lims.analysis_sheet.results_verification.start,name:"
|
||||||
msgid "Results Verification"
|
msgid "Results Verification"
|
||||||
msgstr "Verificación de resultados"
|
msgstr "Verificación de resultados"
|
||||||
|
|
||||||
|
msgctxt "model:lims.planification.professional,name:"
|
||||||
|
msgid "Planification Professional"
|
||||||
|
msgstr "Planificaciones por Profesional"
|
||||||
|
|
||||||
|
msgctxt "model:lims.planification.professional.context,name:"
|
||||||
|
msgid "Planification Professional Context"
|
||||||
|
msgstr "Planificaciones por Profesional Contexto"
|
||||||
|
|
||||||
|
msgctxt "model:lims.planification.professional.line,name:"
|
||||||
|
msgid "Planification Professional Line"
|
||||||
|
msgstr "Planificaciones por Profesional Línea"
|
||||||
|
|
||||||
msgctxt "model:lims.planification.relate_technicians.detail4,name:"
|
msgctxt "model:lims.planification.relate_technicians.detail4,name:"
|
||||||
msgid "Fraction Detail"
|
msgid "Fraction Detail"
|
||||||
msgstr "Detalle de fracción"
|
msgstr "Detalle de fracción"
|
||||||
|
@ -788,6 +868,22 @@ msgctxt "selection:lims.interface,export_file_type:"
|
||||||
msgid "Text File"
|
msgid "Text File"
|
||||||
msgstr "Archivo de texto"
|
msgstr "Archivo de texto"
|
||||||
|
|
||||||
|
msgctxt "selection:lims.planification.professional.line,state:"
|
||||||
|
msgid "Active"
|
||||||
|
msgstr "Activo"
|
||||||
|
|
||||||
|
msgctxt "selection:lims.planification.professional.line,state:"
|
||||||
|
msgid "Done"
|
||||||
|
msgstr "Realizado"
|
||||||
|
|
||||||
|
msgctxt "selection:lims.planification.professional.line,state:"
|
||||||
|
msgid "Draft"
|
||||||
|
msgstr "Borrador"
|
||||||
|
|
||||||
|
msgctxt "selection:lims.planification.professional.line,state:"
|
||||||
|
msgid "Validated"
|
||||||
|
msgstr "Validada"
|
||||||
|
|
||||||
msgctxt "selection:lims.planification.relate_technicians.result,grouping:"
|
msgctxt "selection:lims.planification.relate_technicians.result,grouping:"
|
||||||
msgid "Analysis sheet"
|
msgid "Analysis sheet"
|
||||||
msgstr "Hoja de análisis"
|
msgstr "Hoja de análisis"
|
||||||
|
|
|
@ -1,17 +1,21 @@
|
||||||
# This file is part of lims_analysis_sheet module for Tryton.
|
# This file is part of lims_analysis_sheet module for Tryton.
|
||||||
# The COPYRIGHT file at the top level of this repository contains
|
# The COPYRIGHT file at the top level of this repository contains
|
||||||
# the full copyright notices and license terms.
|
# the full copyright notices and license terms.
|
||||||
from datetime import datetime
|
from datetime import datetime, time
|
||||||
|
from collections import defaultdict
|
||||||
|
from sql import Column, Literal
|
||||||
|
|
||||||
from trytond.model import ModelView, ModelSQL, fields
|
from trytond.model import ModelView, ModelSQL, fields
|
||||||
from trytond.wizard import Wizard, StateTransition, StateView, Button
|
from trytond.wizard import Wizard, StateTransition, StateView, Button
|
||||||
from trytond.pool import Pool, PoolMeta
|
from trytond.pool import Pool, PoolMeta
|
||||||
from trytond.pyson import Eval, Equal, Bool
|
from trytond.pyson import Eval, Equal, Bool, If
|
||||||
from trytond.transaction import Transaction
|
from trytond.transaction import Transaction
|
||||||
|
|
||||||
__all__ = ['Planification', 'SearchAnalysisSheetStart',
|
__all__ = ['Planification', 'SearchAnalysisSheetStart',
|
||||||
'SearchAnalysisSheetNext', 'SearchAnalysisSheet', 'RelateTechniciansStart',
|
'SearchAnalysisSheetNext', 'SearchAnalysisSheet', 'RelateTechniciansStart',
|
||||||
'RelateTechniciansResult', 'RelateTechniciansDetail4', 'RelateTechnicians']
|
'RelateTechniciansResult', 'RelateTechniciansDetail4', 'RelateTechnicians',
|
||||||
|
'PlanificationProfessional', 'PlanificationProfessionalContext',
|
||||||
|
'PlanificationProfessionalLine']
|
||||||
|
|
||||||
|
|
||||||
class Planification(metaclass=PoolMeta):
|
class Planification(metaclass=PoolMeta):
|
||||||
|
@ -598,3 +602,229 @@ class RelateTechnicians(metaclass=PoolMeta):
|
||||||
details.append(x[0])
|
details.append(x[0])
|
||||||
|
|
||||||
return PlanificationServiceDetail.browse(details)
|
return PlanificationServiceDetail.browse(details)
|
||||||
|
|
||||||
|
|
||||||
|
class PlanificationProfessional(ModelSQL, ModelView):
|
||||||
|
'Planification Professional'
|
||||||
|
__name__ = 'lims.planification.professional'
|
||||||
|
|
||||||
|
name = fields.Char('Name')
|
||||||
|
sheets_queue = fields.Function(fields.Integer('# Sheets in queue'),
|
||||||
|
'get_professional')
|
||||||
|
sheets_process = fields.Function(fields.Integer('# Sheets in process'),
|
||||||
|
'get_professional')
|
||||||
|
samples_qty = fields.Function(fields.Integer('# Samples'),
|
||||||
|
'get_professional')
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def __setup__(cls):
|
||||||
|
super(PlanificationProfessional, cls).__setup__()
|
||||||
|
cls._order.insert(0, ('name', 'ASC'))
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def table_query(cls):
|
||||||
|
pool = Pool()
|
||||||
|
Professional = pool.get('lims.laboratory.professional')
|
||||||
|
Party = pool.get('party.party')
|
||||||
|
professional = Professional.__table__()
|
||||||
|
party = Party.__table__()
|
||||||
|
columns = []
|
||||||
|
for fname, field in cls._fields.items():
|
||||||
|
if hasattr(field, 'set'):
|
||||||
|
continue
|
||||||
|
if fname == 'name':
|
||||||
|
column = Column(party, 'name').as_(fname)
|
||||||
|
else:
|
||||||
|
column = Column(professional, fname).as_(fname)
|
||||||
|
columns.append(column)
|
||||||
|
return professional.join(
|
||||||
|
party, condition=professional.party == party.id).select(*columns)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_professional(cls, records, name):
|
||||||
|
pool = Pool()
|
||||||
|
Sheet = pool.get('lims.analysis_sheet')
|
||||||
|
|
||||||
|
res = defaultdict(int)
|
||||||
|
clause = [('state', 'in', ['draft', 'active'])]
|
||||||
|
|
||||||
|
context = Transaction().context
|
||||||
|
if context.get('laboratory'):
|
||||||
|
clause.append(('laboratory', '=', context.get('laboratory')))
|
||||||
|
if context.get('from_date'):
|
||||||
|
clause.append(('date', '>=', datetime.combine(
|
||||||
|
context.get('from_date'), time(0, 0))))
|
||||||
|
if context.get('to_date'):
|
||||||
|
clause.append(('date', '<=', datetime.combine(
|
||||||
|
context.get('to_date'), time(23, 59))))
|
||||||
|
|
||||||
|
sheets = Sheet.search(clause)
|
||||||
|
for sheet in sheets:
|
||||||
|
if name == 'sheets_queue' and sheet.state == 'draft':
|
||||||
|
res[sheet.professional.id] += 1
|
||||||
|
if name == 'sheets_process' and sheet.state == 'active':
|
||||||
|
res[sheet.professional.id] += 1
|
||||||
|
if name == 'samples_qty':
|
||||||
|
res[sheet.professional.id] += sheet.samples_qty
|
||||||
|
return res
|
||||||
|
|
||||||
|
def get_rec_name(self, name):
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
|
||||||
|
class PlanificationProfessionalContext(ModelView):
|
||||||
|
'Planification Professional Context'
|
||||||
|
__name__ = 'lims.planification.professional.context'
|
||||||
|
laboratory = fields.Many2One('lims.laboratory', 'Laboratory')
|
||||||
|
from_date = fields.Date("From Date",
|
||||||
|
domain=[
|
||||||
|
If(Eval('to_date') & Eval('from_date'),
|
||||||
|
('from_date', '<=', Eval('to_date')),
|
||||||
|
()),
|
||||||
|
],
|
||||||
|
depends=['to_date'])
|
||||||
|
to_date = fields.Date("To Date",
|
||||||
|
domain=[
|
||||||
|
If(Eval('from_date') & Eval('to_date'),
|
||||||
|
('to_date', '>=', Eval('from_date')),
|
||||||
|
()),
|
||||||
|
],
|
||||||
|
depends=['from_date'])
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def default_laboratory(cls):
|
||||||
|
return Transaction().context.get('laboratory')
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def default_from_date(cls):
|
||||||
|
return Transaction().context.get('from_date')
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def default_to_date(cls):
|
||||||
|
return Transaction().context.get('to_date')
|
||||||
|
|
||||||
|
|
||||||
|
class PlanificationProfessionalLine(ModelSQL, ModelView):
|
||||||
|
'Planification Professional Line'
|
||||||
|
__name__ = 'lims.planification.professional.line'
|
||||||
|
|
||||||
|
template = fields.Many2One('lims.template.analysis_sheet', 'Template')
|
||||||
|
laboratory = fields.Many2One('lims.laboratory', 'Laboratory')
|
||||||
|
professional = fields.Many2One('lims.laboratory.professional',
|
||||||
|
'Professional')
|
||||||
|
date = fields.DateTime('Date')
|
||||||
|
state = fields.Selection([
|
||||||
|
('draft', 'Draft'),
|
||||||
|
('active', 'Active'),
|
||||||
|
('validated', 'Validated'),
|
||||||
|
('done', 'Done'),
|
||||||
|
], 'State')
|
||||||
|
samples_qty = fields.Function(fields.Integer('# Samples'),
|
||||||
|
'get_samples_qty')
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def __setup__(cls):
|
||||||
|
super(PlanificationProfessionalLine, cls).__setup__()
|
||||||
|
cls._order.insert(0, ('date', 'ASC'))
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def table_query(cls):
|
||||||
|
pool = Pool()
|
||||||
|
Sheet = pool.get('lims.analysis_sheet')
|
||||||
|
Compilation = pool.get('lims.interface.compilation')
|
||||||
|
sheet = Sheet.__table__()
|
||||||
|
compilation = Compilation.__table__()
|
||||||
|
|
||||||
|
context = Transaction().context
|
||||||
|
where = Literal(True)
|
||||||
|
if context.get('laboratory'):
|
||||||
|
where &= sheet.laboratory == context.get('laboratory')
|
||||||
|
if context.get('from_date'):
|
||||||
|
where &= compilation.date_time >= datetime.combine(
|
||||||
|
context.get('from_date'), time(0, 0))
|
||||||
|
if context.get('to_date'):
|
||||||
|
where &= compilation.date_time <= datetime.combine(
|
||||||
|
context.get('to_date'), time(23, 59))
|
||||||
|
|
||||||
|
columns = []
|
||||||
|
for fname, field in cls._fields.items():
|
||||||
|
if hasattr(field, 'set'):
|
||||||
|
continue
|
||||||
|
if fname == 'date':
|
||||||
|
column = Column(compilation, 'date_time').as_(fname)
|
||||||
|
else:
|
||||||
|
column = Column(sheet, fname).as_(fname)
|
||||||
|
columns.append(column)
|
||||||
|
return sheet.join(compilation,
|
||||||
|
condition=sheet.compilation == compilation.id).select(*columns,
|
||||||
|
where=where)
|
||||||
|
|
||||||
|
def get_samples_qty(self, name):
|
||||||
|
pool = Pool()
|
||||||
|
Sheet = pool.get('lims.analysis_sheet')
|
||||||
|
|
||||||
|
sheet = Sheet(self.id)
|
||||||
|
return sheet.samples_qty
|
||||||
|
|
||||||
|
|
||||||
|
class PlanificationProfessionalSample(ModelSQL, ModelView):
|
||||||
|
'Planification Professional Sample'
|
||||||
|
__name__ = 'lims.planification.professional.sample'
|
||||||
|
|
||||||
|
template = fields.Many2One('lims.template.analysis_sheet', 'Template')
|
||||||
|
laboratory = fields.Many2One('lims.laboratory', 'Laboratory')
|
||||||
|
professional = fields.Many2One('lims.laboratory.professional',
|
||||||
|
'Professional')
|
||||||
|
date = fields.DateTime('Date')
|
||||||
|
state = fields.Selection([
|
||||||
|
('draft', 'Draft'),
|
||||||
|
('active', 'Active'),
|
||||||
|
('validated', 'Validated'),
|
||||||
|
('done', 'Done'),
|
||||||
|
], 'State')
|
||||||
|
samples_qty = fields.Function(fields.Integer('# Samples'),
|
||||||
|
'get_samples_qty')
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def __setup__(cls):
|
||||||
|
super(PlanificationProfessionalLine, cls).__setup__()
|
||||||
|
cls._order.insert(0, ('date', 'ASC'))
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def table_query(cls):
|
||||||
|
pool = Pool()
|
||||||
|
Sheet = pool.get('lims.analysis_sheet')
|
||||||
|
Compilation = pool.get('lims.interface.compilation')
|
||||||
|
sheet = Sheet.__table__()
|
||||||
|
compilation = Compilation.__table__()
|
||||||
|
|
||||||
|
context = Transaction().context
|
||||||
|
where = Literal(True)
|
||||||
|
if context.get('laboratory'):
|
||||||
|
where &= sheet.laboratory == context.get('laboratory')
|
||||||
|
if context.get('from_date'):
|
||||||
|
where &= compilation.date_time >= datetime.combine(
|
||||||
|
context.get('from_date'), time(0, 0))
|
||||||
|
if context.get('to_date'):
|
||||||
|
where &= compilation.date_time <= datetime.combine(
|
||||||
|
context.get('to_date'), time(23, 59))
|
||||||
|
|
||||||
|
columns = []
|
||||||
|
for fname, field in cls._fields.items():
|
||||||
|
if hasattr(field, 'set'):
|
||||||
|
continue
|
||||||
|
if fname == 'date':
|
||||||
|
column = Column(compilation, 'date_time').as_(fname)
|
||||||
|
else:
|
||||||
|
column = Column(sheet, fname).as_(fname)
|
||||||
|
columns.append(column)
|
||||||
|
return sheet.join(compilation,
|
||||||
|
condition=sheet.compilation == compilation.id).select(*columns,
|
||||||
|
where=where)
|
||||||
|
|
||||||
|
def get_samples_qty(self, name):
|
||||||
|
pool = Pool()
|
||||||
|
Sheet = pool.get('lims.analysis_sheet')
|
||||||
|
|
||||||
|
sheet = Sheet(self.id)
|
||||||
|
return sheet.samples_qty
|
||||||
|
|
|
@ -58,5 +58,59 @@
|
||||||
<field name="name">planification_relate_technicians_detail4_list</field>
|
<field name="name">planification_relate_technicians_detail4_list</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
<!-- Planification Professional -->
|
||||||
|
|
||||||
|
<record model="ir.ui.view" id="planification_professional_view_list">
|
||||||
|
<field name="model">lims.planification.professional</field>
|
||||||
|
<field name="type">tree</field>
|
||||||
|
<field name="name">planification_professional_list</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record model="ir.action.act_window" id="act_planification_professional_form">
|
||||||
|
<field name="name">Planifications by Professional</field>
|
||||||
|
<field name="res_model">lims.planification.professional</field>
|
||||||
|
<field name="context_model">lims.planification.professional.context</field>
|
||||||
|
</record>
|
||||||
|
<record model="ir.action.act_window.view"
|
||||||
|
id="act_planification_professional_form_view1">
|
||||||
|
<field name="sequence" eval="10"/>
|
||||||
|
<field name="view" ref="planification_professional_view_list"/>
|
||||||
|
<field name="act_window" ref="act_planification_professional_form"/>
|
||||||
|
</record>
|
||||||
|
<menuitem parent="lims.lims_planification_menu" action="act_planification_professional_form"
|
||||||
|
id="menu_planification_professional" name="Planifications by Professional"
|
||||||
|
sequence="5"/>
|
||||||
|
|
||||||
|
<record model="ir.ui.view" id="planification_professional_line_view_list">
|
||||||
|
<field name="model">lims.planification.professional.line</field>
|
||||||
|
<field name="type">tree</field>
|
||||||
|
<field name="name">planification_professional_line_list</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record model="ir.action.act_window" id="act_planification_professional_line_form">
|
||||||
|
<field name="name">Planifications by Professional - Sheets</field>
|
||||||
|
<field name="res_model">lims.planification.professional.line</field>
|
||||||
|
<field name="context_model">lims.planification.professional.context</field>
|
||||||
|
<field name="domain" eval="[('professional', 'in', Eval('active_ids', [])), ('state', 'in', ['draft', 'active'])]"
|
||||||
|
pyson="1"/>
|
||||||
|
</record>
|
||||||
|
<record model="ir.action.act_window.view"
|
||||||
|
id="act_planification_professional_line_form_view1">
|
||||||
|
<field name="sequence" eval="10"/>
|
||||||
|
<field name="view" ref="planification_professional_line_view_list"/>
|
||||||
|
<field name="act_window" ref="act_planification_professional_line_form"/>
|
||||||
|
</record>
|
||||||
|
<record model="ir.action.keyword" id="act_planification_professional_line_form_keyword">
|
||||||
|
<field name="keyword">tree_open</field>
|
||||||
|
<field name="model">lims.planification.professional,-1</field>
|
||||||
|
<field name="action" ref="act_planification_professional_line_form"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record model="ir.ui.view" id="planification_professional_context_view_form">
|
||||||
|
<field name="model">lims.planification.professional.context</field>
|
||||||
|
<field name="type">form</field>
|
||||||
|
<field name="name">planification_professional_context_form</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
</data>
|
</data>
|
||||||
</tryton>
|
</tryton>
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<form col="6">
|
||||||
|
<label name="from_date"/>
|
||||||
|
<field name="from_date"/>
|
||||||
|
<label name="to_date"/>
|
||||||
|
<field name="to_date"/>
|
||||||
|
<label name="laboratory"/>
|
||||||
|
<field name="laboratory" widget="selection"/>
|
||||||
|
</form>
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<tree>
|
||||||
|
<field name="laboratory" expand="1"/>
|
||||||
|
<field name="template" expand="1"/>
|
||||||
|
<field name="date" widget="date"/>
|
||||||
|
<field name="state"/>
|
||||||
|
<field name="samples_qty"/>
|
||||||
|
</tree>
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<tree keyword_open="1">
|
||||||
|
<field name="name" expand="1"/>
|
||||||
|
<field name="sheets_queue"/>
|
||||||
|
<field name="sheets_process"/>
|
||||||
|
<field name="samples_qty"/>
|
||||||
|
</tree>
|
Loading…
Reference in a new issue