lims: add "Edit Sample Services" wizard

This commit is contained in:
Adri?n Bernardi 2019-11-15 20:45:56 -03:00
parent 0f2d8ff1e8
commit 80e7686d67
5 changed files with 197 additions and 9 deletions

View File

@ -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,

View File

@ -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"

View File

@ -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'

View File

@ -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">

View File

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