class OrderHistoryProc(object): def __init__(self): self.histories = Histories() self.activities = Attributes('Activity') @transactional def getData(self, session, order_item_id=None, batch_id=None, product_item_id=None): entity_name, entity_id = self._getEntityId(order_item_id, batch_id, product_item_id) if entity_name == 'order_item_id': history = self.histories.getHistory(order_item_id) #from reworks import Reworks #rework_data = Reworks().getReworks(order_item_id) elif entity_name == 'batch_id': history = self.histories.getBatchHistory(batch_id) else: # product_item history = self.histories.getProductHistory(product_item_id) history = [odict(todict(h)) for h in history] for s in history: if not isinstance(s.history_date, datetime): s.history_date = datetime(*s.history_date.tuple()[:6]) for attr in ('code', 'name', 'description'): func = getattr(self.activities, 'get%s' % attr.title()) try: setattr(s, 'activity_' + attr, func(s.activity_id)) except: setattr(s, 'activity_' + attr, '') if s.entity_type == 'order_item': s.entity_name = 'Order' elif s.entity_type == 'batch': s.entity_name = 'Batch' else: s.entity_name = 'Product' s.entity_type += '_id' """ # show rework reason in comment if s.activity_id == 'REWORK': for r in rework_data: if not isinstance(r['date'], datetime): r['date'] = datetime(*r['date'].tuple()[:6]) if s.history_date == r['date']: if r['rework_reason']: s.comments += ' %s' % r['rework_reason'] """ s.comments = (s.comments or '').replace('*', '').strip() if s.entity_type == 'batch_id' and s.activity_code == 'entry': s.comments += ''' <a href="batchdetails.py?batch_id=%s">Batch %s Details</a> ''' % (s.batch_id, s.batch_id) s.username = s.user.username or '' # change to string, add bolding s.history_date = '<strong>%s</strong> %s' % (s.history_date.date(), s.history_date.time()) # make 'order entry' and 'start over' activities in bold: s.bold = (s.activity_code == 'entry' and s.entity_type == 'order_item_id' or s.activity_code in ('resend', 'rework', 'aging')) return history def _getEntityId(self, order_item_id, batch_id, product_item_id): """Parse args to determine which entity_id is not None, ensuring that there is only one. Return entity name and value. """ entity_name = '' for name in 'batch_id', 'order_item_id', 'product_item_id': id = eval(name) if id is not None: if entity_name: raise OrderHistoryError('Only one id may be provided') entity_id = id entity_name = name if not entity_name: raise OrderHistoryError('No valid ids were provided') return entity_name, entity_id