Example #1
0
 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)
Example #2
0
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