lims_device_maintenance: refactor the wizard to generate calendar

This commit is contained in:
Adrián Bernardi 2020-03-24 21:15:09 -03:00
parent dfedaadb3e
commit c98a6d3887
6 changed files with 54 additions and 45 deletions

View File

@ -46,6 +46,16 @@ msgctxt "field:lims.lab.device.maintenance.generate.start,end_date:"
msgid "End Date"
msgstr "Fecha de finalización"
msgctxt ""
"field:lims.lab.device.maintenance.generate.start,maintenance_program:"
msgid "Maintenance Program"
msgstr "Programa de mantenimiento"
msgctxt ""
"field:lims.lab.device.maintenance.generate.start,maintenance_program_domain:"
msgid "Maintenance Program domain"
msgstr "Dominio para Programa de mantenimiento"
msgctxt "field:lims.lab.device.maintenance.generate.start,maintenances:"
msgid "Maintenances"
msgstr "Mantenimientos"
@ -190,10 +200,6 @@ msgctxt "selection:lims.lab.device.maintenance.program,frequency:"
msgid "Yearly"
msgstr "Anual"
msgctxt "view:lims.lab.device.maintenance.program:"
msgid "Generate Calendar"
msgstr "Generar Calendario"
msgctxt "view:lims.lab.device.maintenance:"
msgid "Comments"
msgstr "Observaciones"

View File

@ -60,13 +60,6 @@ class LabDeviceMaintenanceProgram(ModelSQL, ModelView):
latest_date = fields.Function(fields.Date('Latest scheduled date'),
'get_latest_date')
@classmethod
def __setup__(cls):
super(LabDeviceMaintenanceProgram, cls).__setup__()
cls._buttons.update({
'generate_maintenance': {},
})
def get_rec_name(self, name):
return '%s - %s' % (self.activity.rec_name, self.device.description)
@ -84,12 +77,6 @@ class LabDeviceMaintenanceProgram(ModelSQL, ModelView):
latest_maintenance[0].date or None)
return result
@classmethod
@ModelView.button_action(
'lims_device_maintenance.wizard_device_generate_maintenance_calendar')
def generate_maintenance(cls, programs):
pass
class LabDeviceMaintenance(Workflow, ModelSQL, ModelView):
'Device Maintenance Calendar'
@ -209,6 +196,14 @@ class LabDeviceGenerateMaintenanceStart(ModelView):
start_date = fields.Date('Start Date', required=True)
end_date = fields.Date('End Date', required=True)
maintenance_program = fields.Many2Many(
'lims.lab.device.maintenance.program', None, None,
'Maintenance Program', required=True,
domain=[('id', 'in', Eval('maintenance_program_domain'))],
depends=['maintenance_program_domain'])
maintenance_program_domain = fields.One2Many(
'lims.lab.device.maintenance.program',
None, 'Maintenance Program domain')
maintenances = fields.One2Many('lims.lab.device.maintenance',
None, 'Maintenances')
@ -225,23 +220,41 @@ class LabDeviceGenerateMaintenance(Wizard):
])
generate = StateTransition()
open = StateAction(
'lims_device_maintenance.act_lab_device_maintenance_calendar_list')
'lims_device_maintenance.act_lab_device_maintenance_calendar_related')
def default_start(self, fields):
Date = Pool().get('ir.date')
today = Date.today()
return {
'start_date': today,
'end_date': today,
}
def transition_generate(self):
pool = Pool()
MaintenanceProgram = pool.get('lims.lab.device.maintenance.program')
Maintenance = pool.get('lims.lab.device.maintenance')
Date = pool.get('ir.date')
program = MaintenanceProgram(Transaction().context['active_id'])
device_id = Transaction().context['active_id']
programs = MaintenanceProgram.search([
('device', '=', device_id),
])
today = Date.today()
defaults = {
'start_date': today,
'end_date': today,
'maintenance_program_domain': [p.id for p in programs],
}
return defaults
def transition_generate(self):
Maintenance = Pool().get('lims.lab.device.maintenance')
new_maintenances = []
for program in self.start.maintenance_program:
new_maintenances.extend(self._get_new_maintenances(program))
maintenances = Maintenance.create(new_maintenances)
if maintenances:
Maintenance.pending(maintenances)
self.start.maintenances = maintenances
return 'open'
return 'end'
def _get_new_maintenances(self, program):
new_maintenances = []
for date in self._get_dates(self.start.start_date,
program.frequency, self.start.end_date):
@ -257,13 +270,7 @@ class LabDeviceGenerateMaintenance(Wizard):
maintenance['notice_date'] = (date +
relativedelta.relativedelta(days=-program.notice_days))
new_maintenances.append(maintenance)
maintenances = Maintenance.create(new_maintenances)
if maintenances:
Maintenance.pending(maintenances)
self.start.maintenances = maintenances
return 'open'
return 'end'
return new_maintenances
def _get_dates(self, start_date, frequency, end_date):
dates = []

View File

@ -101,13 +101,6 @@
<field name="name">lab_device_maintenance_program_list</field>
</record>
<!-- Device Maintenance Program Buttons -->
<record model="ir.model.button" id="device_maintenance_program_generate_maintenance_button">
<field name="name">generate_maintenance</field>
<field name="model" search="[('model', '=', 'lims.lab.device.maintenance.program')]"/>
</record>
<!-- Wizard Generate Device Maintenance Calendar -->
<record model="ir.ui.view"
@ -120,6 +113,11 @@
<field name="name">Generate Maintenance Calendar</field>
<field name="wiz_name">lims.lab.device.maintenance.generate</field>
</record>
<record model="ir.action.keyword" id="wizard_device_generate_maintenance_calendar_keyword">
<field name="keyword">form_action</field>
<field name="model">lims.lab.device,-1</field>
<field name="action" ref="wizard_device_generate_maintenance_calendar"/>
</record>
<!-- Device Maintenance Calendar -->

View File

@ -4,4 +4,5 @@
<field name="start_date"/>
<label name="end_date"/>
<field name="end_date"/>
<field name="maintenance_program" colspan="4"/>
</form>

View File

@ -14,6 +14,4 @@
<label name="latest_date"/>
<field name="latest_date"/>
</group>
<button name="generate_maintenance" colspan="4"
string="Generate Calendar"/>
</form>

View File

@ -5,5 +5,4 @@
<field name="responsible"/>
<field name="notice_days"/>
<field name="latest_date"/>
<button name="generate_maintenance" string="Generate Calendar"/>
</tree>