diff --git a/lims_device_maintenance/locale/es.po b/lims_device_maintenance/locale/es.po
index 139917f..5fa969a 100644
--- a/lims_device_maintenance/locale/es.po
+++ b/lims_device_maintenance/locale/es.po
@@ -10,6 +10,14 @@ msgctxt "field:lims.lab.device.maintenance,activity:"
msgid "Activity"
msgstr "Actividad"
+msgctxt "field:lims.lab.device.maintenance,asset:"
+msgid "Asset"
+msgstr "Activo"
+
+msgctxt "field:lims.lab.device.maintenance,asset_name:"
+msgid "Asset"
+msgstr "Activo"
+
msgctxt "field:lims.lab.device.maintenance,color:"
msgid "Color"
msgstr "Color"
@@ -26,10 +34,18 @@ msgctxt "field:lims.lab.device.maintenance,device:"
msgid "Device"
msgstr "Equipo"
+msgctxt "field:lims.lab.device.maintenance,lot:"
+msgid "Lot"
+msgstr "Lote"
+
msgctxt "field:lims.lab.device.maintenance,notice_date:"
msgid "Notice Date"
msgstr "Fecha de aviso"
+msgctxt "field:lims.lab.device.maintenance,product:"
+msgid "Product"
+msgstr "Producto"
+
msgctxt "field:lims.lab.device.maintenance,responsible:"
msgid "Responsible User"
msgstr "Usuario responsable"
@@ -50,6 +66,10 @@ msgctxt "field:lims.lab.device.maintenance.program,activity:"
msgid "Activity"
msgstr "Actividad"
+msgctxt "field:lims.lab.device.maintenance.program,asset:"
+msgid "Asset"
+msgstr "Activo"
+
msgctxt "field:lims.lab.device.maintenance.program,detail_frequence:"
msgid "Frequence"
msgstr "Frecuencia"
@@ -83,6 +103,10 @@ msgctxt "field:lims.lab.device.maintenance.program,latest_date:"
msgid "Latest scheduled date"
msgstr "Última fecha programada"
+msgctxt "field:lims.lab.device.maintenance.program,lot:"
+msgid "Lot"
+msgstr "Lote"
+
msgctxt "field:lims.lab.device.maintenance.program,notice_days:"
msgid "Days to notify"
msgstr "Días para el aviso"
@@ -91,6 +115,10 @@ msgctxt "field:lims.lab.device.maintenance.program,only_workdays:"
msgid "Allow working days only"
msgstr "Permitir solamente días laborables"
+msgctxt "field:lims.lab.device.maintenance.program,product:"
+msgid "Product"
+msgstr "Producto"
+
msgctxt "field:lims.lab.device.maintenance.program,responsible:"
msgid "Responsible User"
msgstr "Usuario responsable"
@@ -214,6 +242,14 @@ msgctxt "selection:ir.cron,method:"
msgid "Device Maintenance Calendar Notice"
msgstr "Aviso de Calendario de mantenimiento de Equipo"
+msgctxt "selection:lims.lab.device.maintenance,asset:"
+msgid "Device"
+msgstr "Equipo"
+
+msgctxt "selection:lims.lab.device.maintenance,asset:"
+msgid "Product"
+msgstr "Producto"
+
msgctxt "selection:lims.lab.device.maintenance,state:"
msgid "Discarded"
msgstr "Descartado"
@@ -230,6 +266,14 @@ msgctxt "selection:lims.lab.device.maintenance,state:"
msgid "Pending"
msgstr "Pendiente"
+msgctxt "selection:lims.lab.device.maintenance.program,asset:"
+msgid "Device"
+msgstr "Equipo"
+
+msgctxt "selection:lims.lab.device.maintenance.program,asset:"
+msgid "Product"
+msgstr "Producto"
+
msgctxt ""
"selection:lims.lab.device.maintenance.program,detail_frequence_selection:"
msgid "Days"
diff --git a/lims_device_maintenance/maintenance.py b/lims_device_maintenance/maintenance.py
index cba9b2b..ebeaaa2 100644
--- a/lims_device_maintenance/maintenance.py
+++ b/lims_device_maintenance/maintenance.py
@@ -40,8 +40,30 @@ class LabDeviceMaintenanceProgram(EventCreator, ModelSQL, ModelView):
'Device Maintenance Program'
__name__ = 'lims.lab.device.maintenance.program'
- device = fields.Many2One('lims.lab.device', 'Device', required=True,
- ondelete='CASCADE', select=True)
+ asset = fields.Selection([
+ ('device', 'Device'),
+ ('product', 'Product'),
+ ], 'Asset', select=True, required=True)
+ device = fields.Many2One('lims.lab.device', 'Device',
+ select=True, depends=['asset'],
+ states={
+ 'required': Eval('asset') == 'device',
+ 'invisible': Eval('asset') != 'device',
+ })
+ product = fields.Many2One('product.product', 'Product',
+ domain=[('type', 'in', ['goods', 'assets'])],
+ depends=['asset'],
+ states={
+ 'required': Eval('asset') == 'product',
+ 'invisible': Eval('asset') != 'product',
+ })
+ lot = fields.Many2One('stock.lot', 'Lot',
+ domain=[('product', '=', Eval('product'))],
+ depends=['asset', 'product'],
+ states={
+ 'required': Eval('asset') == 'product',
+ 'invisible': Eval('asset') != 'product',
+ })
activity = fields.Many2One('lims.lab.device.maintenance.activity',
'Activity', required=True)
responsible = fields.Many2One('res.user', 'Responsible User')
@@ -78,19 +100,38 @@ class LabDeviceMaintenanceProgram(EventCreator, ModelSQL, ModelView):
'WHERE frequency = \'yearly\'')
table_h.drop_column('frequency')
+ @staticmethod
+ def default_asset():
+ return 'device'
+
def get_rec_name(self, name):
- return '%s - %s' % (self.activity.rec_name, self.device.description)
+ asset_name = (self.product.rec_name
+ if self.asset == 'product'
+ else self.device.description)
+ return '%s - %s' % (self.activity.rec_name, asset_name)
@classmethod
def get_latest_date(cls, programs, name):
- Maintenance = Pool().get('lims.lab.device.maintenance')
+ pool = Pool()
+ Maintenance = pool.get('lims.lab.device.maintenance')
+
result = {}
for p in programs:
- latest_maintenance = Maintenance.search([
- ('device', '=', p.device),
+ clause = [
('activity', '=', p.activity),
('state', '=', 'pending'),
- ], order=[('date', 'DESC')], limit=1)
+ ]
+ if p.asset == 'product':
+ clause.extend([
+ ('product', '=', p.product),
+ ('lot', '=', p.lot),
+ ])
+ else:
+ clause.extend([
+ ('device', '=', p.device),
+ ])
+ latest_maintenance = Maintenance.search(clause,
+ order=[('date', 'DESC')], limit=1)
result[p.id] = (latest_maintenance and
latest_maintenance[0].date or None)
return result
@@ -115,7 +156,10 @@ class LabDeviceMaintenanceProgram(EventCreator, ModelSQL, ModelView):
Maintenance = pool.get('lims.lab.device.maintenance')
maintenance = Maintenance()
+ maintenance.asset = program.asset
maintenance.device = program.device
+ maintenance.product = program.product
+ maintenance.lot = program.lot
maintenance.activity = program.activity
maintenance.responsible = program.responsible
maintenance.date = schedule_info['scheduled_date'].date()
@@ -133,8 +177,35 @@ class LabDeviceMaintenance(Workflow, ModelSQL, ModelView):
_states = {'readonly': Eval('state') != 'draft'}
_depends = ['state']
- device = fields.Many2One('lims.lab.device', 'Device', required=True,
+ asset = fields.Selection([
+ ('device', 'Device'),
+ ('product', 'Product'),
+ ], 'Asset', select=True, required=True,
states=_states, depends=_depends)
+ device = fields.Many2One('lims.lab.device', 'Device',
+ select=True, depends=['asset', 'state'],
+ states={
+ 'required': Eval('asset') == 'device',
+ 'invisible': Eval('asset') != 'device',
+ 'readonly': Eval('state') != 'draft',
+ })
+ product = fields.Many2One('product.product', 'Product',
+ domain=[('type', 'in', ['goods', 'assets'])],
+ depends=['asset', 'state'],
+ states={
+ 'required': Eval('asset') == 'product',
+ 'invisible': Eval('asset') != 'product',
+ 'readonly': Eval('state') != 'draft',
+ })
+ lot = fields.Many2One('stock.lot', 'Lot',
+ domain=[('product', '=', Eval('product'))],
+ depends=['asset', 'product', 'state'],
+ states={
+ 'required': Eval('asset') == 'product',
+ 'invisible': Eval('asset') != 'product',
+ 'readonly': Eval('state') != 'draft',
+ })
+ asset_name = fields.Function(fields.Char('Asset'), 'get_asset_name')
activity = fields.Many2One('lims.lab.device.maintenance.activity',
'Activity', required=True, states=_states, depends=_depends)
date = fields.Date('Date', required=True, states=_states, depends=_depends)
@@ -173,12 +244,23 @@ class LabDeviceMaintenance(Workflow, ModelSQL, ModelView):
},
})
+ @staticmethod
+ def default_asset():
+ return 'device'
+
@staticmethod
def default_state():
return 'draft'
+ def get_asset_name(self, name=None):
+ asset_name = (self.product.rec_name
+ if self.asset == 'product'
+ else self.device.description)
+ return asset_name
+
def get_rec_name(self, name):
- return '%s - %s' % (self.activity.rec_name, self.device.description)
+ asset_name = self.get_asset_name()
+ return '%s - %s' % (self.activity.rec_name, asset_name)
def get_color(self, name):
if self.state in ('done', 'discarded'):
diff --git a/lims_device_maintenance/view/lab_device_maintenance_calendar_calendar.xml b/lims_device_maintenance/view/lab_device_maintenance_calendar_calendar.xml
index 20bcfe6..7c8c0a0 100644
--- a/lims_device_maintenance/view/lab_device_maintenance_calendar_calendar.xml
+++ b/lims_device_maintenance/view/lab_device_maintenance_calendar_calendar.xml
@@ -1,6 +1,6 @@