Source code for workload

# Part of Open eObs. See LICENSE file for full copyright and licensing details.
# -*- coding: utf-8 -*-
"""
Shows the pending :class:`activities<activity.nh_clinical_activity>` by
proximity interval.
"""
from openerp.osv import orm, fields
import logging
from openerp import tools
_logger = logging.getLogger(__name__)


[docs]class nh_clinical_workload(orm.Model): """ Extends :class:`activity<activity.nh_activity>`, categorising each pending activity by distance from when the activity is scheduled for, including overdue activities. """ _name = "nh.activity.workload" _inherits = {'nh.activity': 'activity_id'} _description = "Workload" _auto = False _table = "nh_activity_workload" def _proximity_intervals(self, cr, uid, context=None): settings_pool = self.pool['nh.clinical.settings'] workload_pool = self.pool['nh.clinical.settings.workload'] bucket_ids = settings_pool.get_setting(cr, uid, 'workload_bucket_period') buckets = workload_pool.read(cr, uid, bucket_ids) pi_copy = [(pi.get('sequence'), pi.get('name')) for pi in buckets] return pi_copy _columns = { 'activity_id': fields.many2one('nh.activity', 'Activity', required=1, ondelete='restrict'), 'proximity_interval': fields.selection( _proximity_intervals, method=True, readonly=True, string='Proximity Interval'), 'summary': fields.text('Summary'), 'state': fields.text('State'), 'user_id': fields.many2one('res.users', 'Assigned to'), 'date_scheduled': fields.datetime('Scheduled Date'), 'data_model': fields.text('Data Model'), 'patient_other_id': fields.text('Hospital Number'), 'nhs_number': fields.text('NHS Number'), 'initial': fields.text('Patient Name Initial'), 'family_name': fields.text('Patient Family Name'), 'ward_id': fields.many2one('nh.clinical.location', 'Parent Location') } def init(self, cr): sql_pool = self.pool['nh.clinical.sql'] settings_pool = self.pool['nh.clinical.settings'] workload_pool = self.pool['nh.clinical.settings.workload'] bucket_ids = settings_pool.get_setting(cr, 1, 'workload_bucket_period') buckets = workload_pool.read(cr, 1, bucket_ids) view = sql_pool.get_workload(buckets) tools.drop_view_if_exists(cr, self._table) cr.execute( """create or replace view {table} as ({workload})""".format( table=self._table, workload=view)) def _get_groups(self, cr, uid, ids, domain, read_group_order=None, access_rights_uid=None, context=None): settings_pool = self.pool['nh.clinical.settings'] workload_pool = self.pool['nh.clinical.settings.workload'] bucket_ids = settings_pool.get_setting(cr, uid, 'workload_bucket_period') buckets = workload_pool.read(cr, uid, bucket_ids) groups = [(pi.get('sequence'), pi.get('name')) for pi in buckets] fold = {pi[0]: False for pi in groups} groups.reverse() return groups, fold _group_by_full = {'proximity_interval': _get_groups}