def get_item_value(self, resource, context, item, column): item_brain, item_resource = item if column == 'checkbox': # checkbox return item_brain.name, False get_property = item_resource.get_property if column == 'sprite': # Status return StatusIcon(get_property('crm_m_status')) # FIXME elif column == 'title': # Title return get_property(column), context.get_link(item_resource) elif column == 'status': # Status return MissionStatus.get_value(get_property('crm_m_status')) elif column == 'mtime': # Last Modified return context.format_datetime(item_brain.mtime) elif column == 'crm_m_amount': value = get_property(column) if value: value = context.format_number(value, curr=u' β¬') return value try: return getattr(item_brain, column) except AttributeError: return get_property(column)
def get_changes(resource, context, form, new=False): root = context.root changes = [] last_comment = resource.get_last_comment() for key, datatype in mission_schema.iteritems(): # Comment is treated separately if key in ('comment', 'subject', 'timestamp'): continue elif key not in form: continue new_value = form[key] if type(new_value) is dict: language = resource.get_edit_languages(context)[0] new_value = new_value[language] if new: old_value = datatype.get_default() else: if key in ('attachment',): if last_comment is None: old_value = None else: old_value = last_comment.get_parameter(key) elif key in ('alert_date', 'alert_time'): old_value = resource.get_property('crm_m_alert') if key == 'alert_date': if old_value is not None: old_value = old_value.date() elif key == 'alert_time': if old_value is not None: old_value = old_value.time() else: old_value = resource.get_property(key) if new_value == old_value: continue # Find widget title for widget in mission_widgets: if widget.name == key: break else: raise ValueError, key title = widget.title.gettext() # Special cases for complex objects if key == 'crm_m_assigned': if old_value: removed = old_value user = root.get_user(old_value) if user is not None: removed = user.get_title() else: removed = u"" if new_value: added = new_value user = root.get_user(new_value) if user is not None: added = user.get_title() else: added = u"" changes.append(CHANGES_LINE.gettext(what=title, removed=removed, added=added)) elif key == 'crm_m_cc': what = title for removed in (set(old_value) - set(new_value)): user = root.get_user(removed) if user is not None: removed = user.get_title() changes.append(CHANGES_LINE.gettext(what=what, removed=removed, added=u"")) # Show title only once what = u"" what = title for added in (set(new_value) - set(old_value)): user = root.get_user(added) if user is not None: added = user.get_title() changes.append(CHANGES_LINE.gettext(what=what, removed=u"", added=added)) # Show title only once what = u"" elif key == 'crm_m_status': if old_value is None: removed = u"" else: removed = MissionStatus.get_value(old_value) added = MissionStatus.get_value(new_value) changes.append(CHANGES_LINE.gettext(what=title, removed=removed, added=added)) elif key == 'attachment': if new_value is not None: # Filename added = unicode(new_value[0], 'utf_8') changes.append(CHANGES_LINE.gettext(what=title, removed=u"", added=added)) elif key == 'alert_date' or key == 'crm_m_deadline': removed = u"" if old_value: removed = context.format_date(old_value) added = u"" if new_value: added = context.format_date(new_value) changes.append(CHANGES_LINE.gettext(what=title, removed=removed, added=added)) elif key == 'alert_time': removed = datatype.encode(old_value) added = datatype.encode(new_value) changes.append(CHANGES_LINE.gettext(what=title, removed=removed, added=added)) else: if old_value is None: old_value = u"" changes.append(CHANGES_LINE.gettext(what=title, removed=old_value, added=new_value)) return changes