lims: add "Edit Sample Services" wizard
This commit is contained in:
parent
0f2d8ff1e8
commit
80e7686d67
|
@ -184,6 +184,7 @@ def register():
|
|||
sample.FractionDischargeRevertResult,
|
||||
sample.CreateSampleStart,
|
||||
sample.CreateSampleService,
|
||||
sample.EditSampleServiceStart,
|
||||
entry.ChangeInvoicePartyStart,
|
||||
entry.ChangeInvoicePartyError,
|
||||
analysis.AddTypificationsStart,
|
||||
|
@ -304,6 +305,7 @@ def register():
|
|||
sample.FractionDischarge,
|
||||
sample.FractionDischargeRevert,
|
||||
sample.CreateSample,
|
||||
sample.EditSampleService,
|
||||
notebook.OpenNotebookLines,
|
||||
analysis.CreateAnalysisProduct,
|
||||
entry.ChangeInvoiceParty,
|
||||
|
|
|
@ -6346,6 +6346,26 @@ msgctxt "field:lims.sample.duplicate.start,sample:"
|
|||
msgid "Sample"
|
||||
msgstr "Muestra"
|
||||
|
||||
msgctxt "field:lims.sample.edit_service.start,analysis_domain:"
|
||||
msgid "Analysis domain"
|
||||
msgstr "Dominio para Análisis"
|
||||
|
||||
msgctxt "field:lims.sample.edit_service.start,id:"
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
|
||||
msgctxt "field:lims.sample.edit_service.start,matrix:"
|
||||
msgid "Matrix"
|
||||
msgstr "Matriz"
|
||||
|
||||
msgctxt "field:lims.sample.edit_service.start,product_type:"
|
||||
msgid "Product type"
|
||||
msgstr "Tipo de producto"
|
||||
|
||||
msgctxt "field:lims.sample.edit_service.start,services:"
|
||||
msgid "Services"
|
||||
msgstr "Servicios"
|
||||
|
||||
msgctxt "field:lims.sample.producer,create_date:"
|
||||
msgid "Create Date"
|
||||
msgstr "Fecha creación"
|
||||
|
@ -7776,6 +7796,10 @@ msgctxt "model:ir.action,name:wiz_control_chart_print"
|
|||
msgid "Control Chart"
|
||||
msgstr "Carta de Control"
|
||||
|
||||
msgctxt "model:ir.action,name:wiz_edit_sample_service"
|
||||
msgid "Edit Sample Services"
|
||||
msgstr "Modificar servicios de muestras"
|
||||
|
||||
msgctxt "model:ir.action,name:wiz_lims_change_invoice_party"
|
||||
msgid "Change Invoice Party"
|
||||
msgstr "Cambiar Entidad facturación"
|
||||
|
@ -8971,6 +8995,10 @@ msgctxt "model:lims.sample.duplicate.start,name:"
|
|||
msgid "Copy Sample"
|
||||
msgstr "Copiar muestra"
|
||||
|
||||
msgctxt "model:lims.sample.edit_service.start,name:"
|
||||
msgid "Edit Sample Services"
|
||||
msgstr "Modificar servicios de muestras"
|
||||
|
||||
msgctxt "model:lims.sample.producer,name:"
|
||||
msgid "Sample Producer"
|
||||
msgstr "Productor de muestra"
|
||||
|
@ -12474,6 +12502,14 @@ msgctxt "wizard_button:lims.sample.duplicate,start,end:"
|
|||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
msgctxt "wizard_button:lims.sample.edit_service,start,confirm:"
|
||||
msgid "Confirm"
|
||||
msgstr "Confirmar"
|
||||
|
||||
msgctxt "wizard_button:lims.sample.edit_service,start,end:"
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
msgctxt "wizard_button:lims.scope_version.add_typifications,start,add:"
|
||||
msgid "Add"
|
||||
msgstr "Agregar"
|
||||
|
|
146
lims/sample.py
146
lims/sample.py
|
@ -21,15 +21,16 @@ __all__ = ['Zone', 'Variety', 'MatrixVariety', 'PackagingIntegrity',
|
|||
'PackagingType', 'FractionType', 'SampleProducer', 'Service',
|
||||
'Fraction', 'Sample', 'DuplicateSampleStart', 'DuplicateSample',
|
||||
'DuplicateSampleFromEntryStart', 'DuplicateSampleFromEntry',
|
||||
'ManageServices', 'CompleteServices', 'FractionsByLocationsStart',
|
||||
'FractionsByLocations', 'CountersampleStorageStart',
|
||||
'CountersampleStorageEmpty', 'CountersampleStorageResult',
|
||||
'CountersampleStorage', 'CountersampleStorageRevertStart',
|
||||
'CountersampleStorageRevertEmpty', 'CountersampleStorageRevertResult',
|
||||
'CountersampleStorageRevert', 'CountersampleDischargeStart',
|
||||
'CountersampleDischargeEmpty', 'CountersampleDischargeResult',
|
||||
'CountersampleDischarge', 'FractionDischargeStart',
|
||||
'FractionDischargeEmpty', 'FractionDischargeResult', 'FractionDischarge',
|
||||
'ManageServices', 'CompleteServices', 'EditSampleServiceStart',
|
||||
'EditSampleService', 'FractionsByLocationsStart', 'FractionsByLocations',
|
||||
'CountersampleStorageStart', 'CountersampleStorageEmpty',
|
||||
'CountersampleStorageResult', 'CountersampleStorage',
|
||||
'CountersampleStorageRevertStart', 'CountersampleStorageRevertEmpty',
|
||||
'CountersampleStorageRevertResult', 'CountersampleStorageRevert',
|
||||
'CountersampleDischargeStart', 'CountersampleDischargeEmpty',
|
||||
'CountersampleDischargeResult', 'CountersampleDischarge',
|
||||
'FractionDischargeStart', 'FractionDischargeEmpty',
|
||||
'FractionDischargeResult', 'FractionDischarge',
|
||||
'FractionDischargeRevertStart', 'FractionDischargeRevertEmpty',
|
||||
'FractionDischargeRevertResult', 'FractionDischargeRevert',
|
||||
'CreateSampleStart', 'CreateSampleService', 'CreateSample',
|
||||
|
@ -3128,6 +3129,133 @@ class CompleteServices(Wizard):
|
|||
service.fraction)
|
||||
|
||||
|
||||
class EditSampleServiceStart(ModelView):
|
||||
'Edit Sample Services'
|
||||
__name__ = 'lims.sample.edit_service.start'
|
||||
|
||||
product_type = fields.Many2One('lims.product.type', 'Product type')
|
||||
matrix = fields.Many2One('lims.matrix', 'Matrix')
|
||||
analysis_domain = fields.Many2Many('lims.analysis', None, None,
|
||||
'Analysis domain')
|
||||
services = fields.One2Many('lims.create_sample.service', None, 'Services',
|
||||
required=True, depends=['analysis_domain', 'product_type', 'matrix'],
|
||||
context={
|
||||
'analysis_domain': Eval('analysis_domain'),
|
||||
'product_type': Eval('product_type'), 'matrix': Eval('matrix'),
|
||||
})
|
||||
|
||||
|
||||
class EditSampleService(Wizard):
|
||||
'Edit Sample Services'
|
||||
__name__ = 'lims.sample.edit_service'
|
||||
|
||||
start = StateView('lims.sample.edit_service.start',
|
||||
'lims.edit_sample_service_start_view_form', [
|
||||
Button('Cancel', 'end', 'tryton-cancel'),
|
||||
Button('Confirm', 'confirm', 'tryton-ok', default=True),
|
||||
])
|
||||
confirm = StateTransition()
|
||||
|
||||
def default_start(self, fields):
|
||||
Sample = Pool().get('lims.sample')
|
||||
|
||||
sample = Sample(Transaction().context['active_id'])
|
||||
if not sample:
|
||||
return {}
|
||||
|
||||
analysis_domain_ids = sample.on_change_with_analysis_domain()
|
||||
services = []
|
||||
for f in sample.fractions:
|
||||
for s in f.services:
|
||||
services.append({
|
||||
'analysis': s.analysis.id,
|
||||
'laboratory': s.laboratory and s.laboratory.id or None,
|
||||
'method': s.method and s.method.id or None,
|
||||
'device': s.device and s.device.id or None,
|
||||
'urgent': s.urgent,
|
||||
'priority': s.priority,
|
||||
'report_date': s.report_date,
|
||||
'divide': s.divide,
|
||||
})
|
||||
|
||||
default = {
|
||||
'product_type': sample.product_type.id,
|
||||
'matrix': sample.matrix.id,
|
||||
'analysis_domain': analysis_domain_ids,
|
||||
'services': services,
|
||||
}
|
||||
return default
|
||||
|
||||
def transition_confirm(self):
|
||||
Sample = Pool().get('lims.sample')
|
||||
|
||||
actual_analysis = [s.analysis.id for s in self.start.services]
|
||||
|
||||
for sample in Sample.browse(Transaction().context['active_ids']):
|
||||
for fraction in sample.fractions:
|
||||
original_analysis = []
|
||||
|
||||
for service in fraction.services:
|
||||
original_analysis.append(service.analysis.id)
|
||||
if service.analysis.id not in actual_analysis:
|
||||
self.delete_service(service)
|
||||
|
||||
for service in self.start.services:
|
||||
if service.analysis.id not in original_analysis:
|
||||
self.create_service(service, fraction)
|
||||
|
||||
return 'end'
|
||||
|
||||
def create_service(self, service, fraction):
|
||||
pool = Pool()
|
||||
Service = pool.get('lims.service')
|
||||
EntryDetailAnalysis = pool.get('lims.entry.detail.analysis')
|
||||
|
||||
service_create = [{
|
||||
'fraction': fraction.id,
|
||||
'sample': fraction.sample.id,
|
||||
'analysis': service.analysis.id,
|
||||
'laboratory': (service.laboratory.id if service.laboratory
|
||||
else None),
|
||||
'method': service.method.id if service.method else None,
|
||||
'device': service.device.id if service.device else None,
|
||||
'urgent': service.urgent,
|
||||
'priority': service.priority,
|
||||
'report_date': service.report_date,
|
||||
'divide': service.divide,
|
||||
}]
|
||||
with Transaction().set_context(manage_service=True):
|
||||
new_service, = Service.create(service_create)
|
||||
|
||||
Service.copy_analysis_comments([new_service])
|
||||
Service.set_confirmation_date([new_service])
|
||||
analysis_detail = EntryDetailAnalysis.search([
|
||||
('service', '=', new_service.id)])
|
||||
if analysis_detail:
|
||||
EntryDetailAnalysis.create_notebook_lines(analysis_detail,
|
||||
fraction)
|
||||
|
||||
EntryDetailAnalysis.write(analysis_detail, {
|
||||
'state': 'unplanned',
|
||||
})
|
||||
|
||||
return new_service
|
||||
|
||||
def delete_service(self, service):
|
||||
pool = Pool()
|
||||
#Service = pool.get('lims.service')
|
||||
NotebookLine = pool.get('lims.notebook.line')
|
||||
with Transaction().set_user(0, set_context=True):
|
||||
#Service.delete([service])
|
||||
notebook_lines = NotebookLine.search([
|
||||
('service', '=', service.id),
|
||||
])
|
||||
NotebookLine.write(notebook_lines, {
|
||||
'annulled': True,
|
||||
'annulment_date': datetime.now(),
|
||||
})
|
||||
|
||||
|
||||
class FractionsByLocationsStart(ModelView):
|
||||
'Fractions by Locations'
|
||||
__name__ = 'lims.fractions_by_locations.start'
|
||||
|
|
|
@ -631,6 +631,24 @@
|
|||
<field name="action" ref="ir.act_module_form"/>
|
||||
</record>
|
||||
|
||||
<!-- Wizard Edit Sample Services -->
|
||||
|
||||
<record model="ir.ui.view" id="edit_sample_service_start_view_form">
|
||||
<field name="model">lims.sample.edit_service.start</field>
|
||||
<field name="type">form</field>
|
||||
<field name="name">sample_edit_services_start_form</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.action.wizard" id="wiz_edit_sample_service">
|
||||
<field name="name">Edit Sample Services</field>
|
||||
<field name="wiz_name">lims.sample.edit_service</field>
|
||||
</record>
|
||||
<record model="ir.action.keyword" id="wiz_edit_sample_service_keyword">
|
||||
<field name="keyword">form_action</field>
|
||||
<field name="model">lims.sample,-1</field>
|
||||
<field name="action" ref="wiz_edit_sample_service"/>
|
||||
</record>
|
||||
|
||||
<!-- Countersamples Storage Report -->
|
||||
|
||||
<record model="ir.ui.view" id="lims_countersample_storage_print_start_view_form">
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0"?>
|
||||
<form>
|
||||
<field name="services" colspan="4"/>
|
||||
</form>
|
Loading…
Reference in New Issue