diff --git a/addons/marketing_campaign/marketing_campaign.py b/addons/marketing_campaign/marketing_campaign.py
index 5f6ee90315d..0601b98eaa4 100644
--- a/addons/marketing_campaign/marketing_campaign.py
+++ b/addons/marketing_campaign/marketing_campaign.py
@@ -23,6 +23,7 @@ import time
import base64
from datetime import datetime
from dateutil.relativedelta import relativedelta
+from operator import itemgetter
from osv import fields, osv
import netsvc
@@ -35,6 +36,44 @@ _intervalTypes = {
'years': lambda interval: relativedelta(years=interval),
}
+def dict_map(f, d):
+ return dict((k, f(v)) for k,v in d.items())
+
+def _find_fieldname(model, field):
+ inherit_columns = dict_map(itemgetter(2), model._inherit_fields)
+ all_columns = dict(inherit_columns, **model._columns)
+ for fn in all_columns:
+ if all_columns[fn] is field:
+ return fn
+ raise ValueError('field not found: %r' % (field,))
+
+class selection_converter(object):
+ """Format the selection in the browse record objects"""
+ def __init__(self, value):
+ self._value = value
+ self._str = value
+
+ def set_value(self, cr, uid, _self_again, record, field, lang):
+ # this design is terrible
+ # search fieldname from the field
+ fieldname = _find_fieldname(record._table, field)
+ context = dict(lang=lang.code)
+ fg = record._table.fields_get(cr, uid, [fieldname], context=context)
+ selection = dict(fg[fieldname]['selection'])
+ self._str = selection[self.value]
+
+ @property
+ def value(self):
+ return self._value
+
+ def __str__(self):
+ return self._str
+
+translate_selections = {
+ 'selection': selection_converter,
+}
+
+
class marketing_campaign(osv.osv):
_name = "marketing.campaign"
_description = "Marketing Campaign"
@@ -221,7 +260,7 @@ class marketing_campaign_activity(osv.osv):
required = True, ondelete='cascade', select=1),
'object_id': fields.related('campaign_id','object_id',
type='many2one', relation='ir.model',
- string='Object'),
+ string='Object', readonly=True),
'start': fields.boolean('Start',help= "This activity is launched when the campaign starts."),
'condition': fields.char('Condition', size=256, required=True,
help="Python condition to know if the activity can be launched"),
@@ -313,26 +352,37 @@ marketing_campaign_activity()
class marketing_campaign_transition(osv.osv):
_name = "marketing.campaign.transition"
_description = "Campaign Transition"
- _rec_name = "interval_type"
+
+ _interval_units = [('hours', 'Hour(s)'), ('days', 'Day(s)'),
+ ('months', 'Month(s)'), ('years','Year(s)')]
+
+
+ def _get_name(self, cr, uid, ids, fn, args, context=None):
+ result = dict.fromkeys(ids, False)
+ for tr in self.browse(cr, uid, ids, context=context, fields_process=translate_selections):
+ result[tr.id] = _('After %(interval_nbr)d %(interval_type)s') % tr
+ return result
_columns = {
+ 'name': fields.function(_get_name, method=True, string='Name',
+ type='char', size=128),
'activity_from_id': fields.many2one('marketing.campaign.activity',
- 'Source Activity', select=1),
+ 'Source Activity', select=1),
'activity_to_id': fields.many2one('marketing.campaign.activity',
- 'Destination Activity'),
- 'interval_nbr': fields.integer('Interval No.'),
- 'interval_type': fields.selection([('hours', 'Hours'), ('days', 'Days'),
- ('months', 'Months'),
- ('years','Years')],'Interval Type')
+ 'Destination Activity'),
+ 'interval_nbr': fields.integer('Interval Value', required=True),
+ 'interval_type': fields.selection(_interval_units, 'Interval Unit',
+ required=True),
}
- def default_get(self, cr, uid, fields, context={}):
+ def default_get(self, cr, uid, fields, context=None):
value = super(marketing_campaign_transition, self).default_get(cr, uid,
fields, context)
- if context.has_key('type_id'):
+ if context and 'type_id' in context:
value[context['type_id']] = context['activity_id']
return value
+
marketing_campaign_transition()
class marketing_campaign_workitem(osv.osv):
diff --git a/addons/marketing_campaign/marketing_campaign_view.xml b/addons/marketing_campaign/marketing_campaign_view.xml
index 267b8651bd7..c205b7bab96 100644
--- a/addons/marketing_campaign/marketing_campaign_view.xml
+++ b/addons/marketing_campaign/marketing_campaign_view.xml
@@ -61,7 +61,7 @@
-
+