From 67e07f8bd3847b1948e254f03c155ec15c6054d5 Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Tue, 1 Mar 2011 12:27:48 +0530 Subject: [PATCH 1/3] [IMP] email.compose.message wizard:- improve code. bzr revid: ysa@tinyerp.com-20110301065748-2mc5hygt3gcd0p70 --- addons/crm/wizard/email_compose_message.py | 81 +++------------- addons/emails/wizard/email_compose_message.py | 45 ++++++++- .../project/wizard/email_compose_message.py | 94 +++++-------------- .../wizard/email_compose_message.py | 81 ++++------------ 4 files changed, 99 insertions(+), 202 deletions(-) diff --git a/addons/crm/wizard/email_compose_message.py b/addons/crm/wizard/email_compose_message.py index c7e389e3470..d24c06ad70c 100644 --- a/addons/crm/wizard/email_compose_message.py +++ b/addons/crm/wizard/email_compose_message.py @@ -34,73 +34,20 @@ class email_compose_message(osv.osv_memory): if context is None: context = {} result = super(email_compose_message, self).get_value(cr, uid, model, resource_id, context=context) - if model not in email_model: - return result - model_obj = self.pool.get(model) - data = model_obj.browse(cr, uid , resource_id, context) - result.update({ - 'name' : data.name, - 'email_to' : data.email_from, - 'email_from' : data.user_id and data.user_id.address_id and data.user_id.address_id.email or False, - 'description' : '\n' + (tools.ustr(data.user_id.signature or '')), - 'email_cc' : tools.ustr(data.email_cc or '') - }) - if hasattr(data, 'section_id'): - result.update({'reply_to' : data.section_id and data.section_id.reply_to or False}) - return result - - def default_get(self, cr, uid, fields, context=None): - if context is None: - context = {} - result = super(email_compose_message, self).default_get(cr, uid, fields, context=context) - if context.get('active_id',False) and context.get('email_model',False) and context.get('email_model') in email_model: - vals = self.get_value(cr, uid, context.get('email_model'), context.get('active_id'), context) - if 'name' in fields: - result.update({'name' : vals.get('name','')}) - - if 'email_to' in fields: - result.update({'email_to' : vals.get('email_to','')}) - - if 'email_from' in fields: - result.update({'email_from' : vals.get('email_from','')}) - - if 'description' in fields: - result.update({'description' : vals.get('description','')}) - - if 'model' in fields: - result['model'] = context.get('email_model','') - - if 'email_cc' in fields: - result.update({'email_cc' : vals.get('email_cc','')}) - - if 'res_id' in fields: - result['res_id'] = context.get('active_id',0) - - if 'reply_to' in fields: - result['reply_to'] = vals.get('reply_to','') - - return result - - def on_change_referred_doc(self, cr, uid, ids, model, resource_id, context=None): - if context is None: - context = {} - if context.get('mail') == 'reply': - return {'value':{}} - result = super(email_compose_message, self).on_change_referred_doc(cr, uid, ids, model, resource_id, context=context) - value = {} - if not result.get('value'): - result.update({'value':{}}) - if resource_id and model in email_model: - vals = self.get_value(cr, uid, model, resource_id, context) - result['value'].update({ - 'email_from': vals.get('email_from',''), - 'email_to': vals.get('email_to',''), - 'name': vals.get('name',''), - 'description': vals.get('description',''), - 'email_cc': vals.get('email_cc',''), - 'email_bcc': vals.get('email_bcc',''), - 'reply_to': vals.get('reply_to',''), - }) + if model in email_model and resource_id: + model_obj = self.pool.get(model) + data = model_obj.browse(cr, uid , resource_id, context) + result.update({ + 'name' : data.name, + 'email_to' : data.email_from, + 'email_from' : data.user_id and data.user_id.address_id and data.user_id.address_id.email or False, + 'description' : '\n' + (tools.ustr(data.user_id.signature or '')), + 'email_cc' : tools.ustr(data.email_cc or ''), + 'model': model, + 'res_id': resource_id, + }) + if hasattr(data, 'section_id'): + result.update({'reply_to' : data.section_id and data.section_id.reply_to or False}) return result email_compose_message() diff --git a/addons/emails/wizard/email_compose_message.py b/addons/emails/wizard/email_compose_message.py index ba8ffea016d..cc7b31cd7b2 100644 --- a/addons/emails/wizard/email_compose_message.py +++ b/addons/emails/wizard/email_compose_message.py @@ -32,6 +32,32 @@ class email_compose_message(osv.osv_memory): if context is None: context = {} result = super(email_compose_message, self).default_get(cr, uid, fields, context=context) + if context.get('email_model') and context.get('active_id'): + vals = self.get_value(cr, uid, context.get('email_model'), context.get('active_id'), context) + if 'name' in fields and vals: + result.update({'name' : vals.get('name','')}) + + if 'email_to' in fields and vals: + result.update({'email_to' : vals.get('email_to','')}) + + if 'email_from' in fields and vals: + result.update({'email_from' : vals.get('email_from','')}) + + if 'description' in fields and vals: + result.update({'description' : vals.get('description','')}) + + if 'model' in fields and vals: + result.update({'model' : vals.get('model','')}) + + if 'email_cc' in fields and vals: + result.update({'email_cc' : vals.get('email_cc','')}) + + if 'res_id' in fields and vals: + result.update({'res_id' : vals.get('res_id',0)}) + + if 'reply_to' in fields and vals: + result['reply_to'] = vals.get('reply_to','') + message_pool = self.pool.get('email.message') message_id = context.get('message_id', False) if message_id: @@ -136,7 +162,24 @@ class email_compose_message(osv.osv_memory): return {} def on_change_referred_doc(self, cr, uid, ids, model, resource_id, context=None): - return {'value':{}} + if context is None: + context = {} + if context.get('mail') == 'reply': + return {'value':{}} + result = {} + if resource_id and model: + vals = self.get_value(cr, uid, model, resource_id, context) + if vals: + result.update({ + 'email_from': vals.get('email_from',''), + 'email_to': vals.get('email_to',''), + 'name': vals.get('name',''), + 'description': vals.get('description',''), + 'email_cc': vals.get('email_cc',''), + 'email_bcc': vals.get('email_bcc',''), + 'reply_to': vals.get('reply_to',''), + }) + return {'value': result} def on_change_smtp_server(self, cr, uid, ids, smtp_server_id, email_from, context=None): if not email_from and smtp_server_id: diff --git a/addons/project/wizard/email_compose_message.py b/addons/project/wizard/email_compose_message.py index 59b7258eb9d..2796dc602c1 100644 --- a/addons/project/wizard/email_compose_message.py +++ b/addons/project/wizard/email_compose_message.py @@ -30,85 +30,37 @@ class email_compose_message(osv.osv_memory): if context is None: context = {} result = super(email_compose_message, self).get_value(cr, uid, model, resource_id, context=context) - if model != 'project.task': - return result - task_pool = self.pool.get('project.task') - task_data = task_pool.browse(cr, uid, resource_id, context=context) - partner = task_data.partner_id or task_data.project_id.partner_id - - result.update({'email_from': task_data.user_id and task_data.user_id.user_email or False}) - val = { - 'name': task_data.name, - 'user_id': task_data.user_id.name, - 'task_id': "%d/%d" % (task_data.project_id.id, task_data.id), - 'date_start': task_data.date_start, - 'date': task_data.date_end, - 'state': task_data.state - } - header = (task_data.project_id.warn_header or '') % val - footer = (task_data.project_id.warn_footer or '') % val - description = u'%s\n %s\n %s\n\n \n%s' % (header, task_data.description or '', footer, task_data.user_id and task_data.user_id.signature) - result.update({'description': description or False}) - result.update({'email_to': task_data.project_id.user_id and task_data.project_id.user_id.user_email or False}) - if partner and len(partner.address) and 'email_to' in fields: - result.update({'email_to': result.get('email_to',False) and result.get('email_to') + ',' + partner.address[0].email}) - result.update({'name': _("Task '%s' Closed") % task_data.name}) - - return result - - def default_get(self, cr, uid, fields, context=None): - if context is None: - context = {} - result = super(email_compose_message, self).default_get(cr, uid, fields, context=context) - if context.get('active_id',False) and context.get('email_model',False) and context.get('email_model') == 'project.task': + if model == 'project.task' and resource_id: task_pool = self.pool.get('project.task') - task_data = task_pool.browse(cr, uid, context.get('active_id'), context=context) + task_data = task_pool.browse(cr, uid, resource_id, context=context) partner = task_data.partner_id or task_data.project_id.partner_id - if task_data.project_id.warn_manager and (not task_data.project_id.user_id or task_data.project_id.user_id and not task_data.project_id.user_id.user_email) : raise osv.except_osv(_('Error'), _("Please specify the Project Manager or email address of Project Manager.")) elif task_data.project_id.warn_customer and (not partner or not len(partner.address) or (partner and len(partner.address) and not partner.address[0].email)): raise osv.except_osv(_('Error'), _("Please specify the Customer or email address of Customer.")) - vals = self.get_value(cr, uid, context.get('email_model'), context.get('active_id'), context) - if 'email_from' in fields: - result.update({'email_from': vals.get('email_from','')}) - if 'description' in fields: - result.update({'description': vals.get('description','')}) - - if 'email_to' in fields: - result.update({'description': vals.get('description','')}) - - if 'name' in fields: - result.update({'description': vals.get('name','')}) - - if 'model' in fields: - result.update({'model':context.get('email_model')}) - - if 'res_id' in fields: - result.update({'res_id':context.get('active_id')}) - - return result - - def on_change_referred_doc(self, cr, uid, ids, model, resource_id, context=None): - if context is None: - context = {} - if context.get('mail') == 'reply': - return {'value':{}} - result = super(email_compose_message, self).on_change_referred_doc(cr, uid, ids, model, resource_id, context=context) - if not result.get('value'): - result.update({'value':{}}) - if resource_id and model == 'project.task': - vals = self.get_value(cr, uid, model, resource_id, context) - result.get('value',{}).update({ - 'email_from': vals.get('email_from',''), - 'email_to': vals.get('email_to',''), - 'description': vals.get('description',''), - 'name': vals.get('name',''), - 'email_cc': vals.get('email_cc',''), - 'email_bcc': vals.get('email_bcc',''), - 'reply_to': vals.get('reply_to',''), + result.update({'email_from': task_data.user_id and task_data.user_id.user_email or False}) + val = { + 'name': task_data.name, + 'user_id': task_data.user_id.name, + 'task_id': "%d/%d" % (task_data.project_id.id, task_data.id), + 'date_start': task_data.date_start, + 'date': task_data.date_end, + 'state': task_data.state + } + header = (task_data.project_id.warn_header or '') % val + footer = (task_data.project_id.warn_footer or '') % val + description = u'%s\n %s\n %s\n\n \n%s' % (header, task_data.description or '', footer, task_data.user_id and task_data.user_id.signature) + if partner and len(partner.address) and 'email_to' in fields: + result.update({'email_to': result.get('email_to',False) and result.get('email_to') + ',' + partner.address[0].email}) + result.update({ + 'description': description or False, + 'email_to': task_data.project_id.user_id and task_data.project_id.user_id.user_email or False, + 'name': _("Task '%s' Closed") % task_data.name, + 'model': model, + 'res_id': resource_id, }) + return result email_compose_message() diff --git a/addons/project_scrum/wizard/email_compose_message.py b/addons/project_scrum/wizard/email_compose_message.py index 1354196275a..1a639fbd198 100644 --- a/addons/project_scrum/wizard/email_compose_message.py +++ b/addons/project_scrum/wizard/email_compose_message.py @@ -30,72 +30,27 @@ class email_compose_message(osv.osv_memory): if context is None: context = {} result = super(email_compose_message, self).get_value(cr, uid, model, resource_id, context=context) - if model != 'project.scrum.meeting': - return result - meeting_pool = self.pool.get('project.scrum.meeting') - user_pool = self.pool.get('res.users') - meeting = meeting_pool.browse(cr, uid, resource_id, context=context) + if model == 'project.scrum.meeting' and resource_id: + meeting_pool = self.pool.get('project.scrum.meeting') + user_pool = self.pool.get('res.users') + meeting = meeting_pool.browse(cr, uid, resource_id, context=context) - sprint = meeting.sprint_id - user_data = user_pool.browse(cr, uid, uid, context=context) - result.update({'email_from': user_data.address_id and user_data.address_id.email or False}) + sprint = meeting.sprint_id + user_data = user_pool.browse(cr, uid, uid, context=context) + result.update({'email_from': user_data.address_id and user_data.address_id.email or False}) - if sprint.scrum_master_id and sprint.scrum_master_id.user_email: - result.update({'email_to': sprint.scrum_master_id.user_email}) - if sprint.product_owner_id and sprint.product_owner_id.user_email: - result.update({'email_to': result.get('email_to',False) and result.get('email_to') + ',' + sprint.product_owner_id.user_email or sprint.product_owner_id.user_email}) + if sprint.scrum_master_id and sprint.scrum_master_id.user_email: + result.update({'email_to': sprint.scrum_master_id.user_email}) + if sprint.product_owner_id and sprint.product_owner_id.user_email: + result.update({'email_to': result.get('email_to',False) and result.get('email_to') + ',' + sprint.product_owner_id.user_email or sprint.product_owner_id.user_email}) - subject = _("Scrum Meeting : %s") %(meeting.date) - result.update({'name': subject}) - message = _("Hello , \nI am sending you Scrum Meeting : %s for the Sprint '%s' of Project '%s'") %(meeting.date, sprint.name, sprint.project_id.name) - result.update({'description': message}) - return result - - def default_get(self, cr, uid, fields, context=None): - if context is None: - context = {} - result = super(email_compose_message, self).default_get(cr, uid, fields, context=context) - - if context.get('active_id',False) and context.get('email_model',False) and context.get('email_model') == 'project.scrum.meeting': - vals = self.get_value(cr, uid, context.get('email_model'), context.get('active_id'), context) - if 'email_from' in fields: - result.update({'email_from': vals.get('email_from','')}) - - if 'email_to' in fields: - result.update({'email_to': vals.get('email_to','')}) - - if 'name' in fields: - result.update({'name': vals.get('name','')}) - - if 'description' in fields: - result.update({'description': vals.get('description','')}) - - if 'model' in fields: - result.update({'model':context.get('email_model')}) - - if 'res_id' in fields: - result.update({'res_id':context.get('active_id')}) - - return result - - def on_change_referred_doc(self, cr, uid, ids, model, resource_id, context=None): - if context is None: - context = {} - if context.get('mail') == 'reply': - return {'value':{}} - result = super(email_compose_message, self).on_change_referred_doc(cr, uid, ids, model, resource_id, context=context) - if not result.get('value'): - result.update({'value':{}}) - if resource_id and model == 'project.scrum.meeting': - vals = self.get_value(cr, uid, model, resource_id, context) - result.get('value',{}).update({ - 'email_from': vals.get('email_from',''), - 'email_to': vals.get('email_to',''), - 'description': vals.get('description',''), - 'name': vals.get('name',''), - 'email_cc': vals.get('email_cc',''), - 'email_bcc': vals.get('email_bcc',''), - 'reply_to': vals.get('reply_to',''), + subject = _("Scrum Meeting : %s") %(meeting.date) + message = _("Hello , \nI am sending you Scrum Meeting : %s for the Sprint '%s' of Project '%s'") %(meeting.date, sprint.name, sprint.project_id.name) + result.update({ + 'name': subject, + 'description': message, + 'model': model, + 'res_id': resource_id }) return result From 92864126a905fb401ac33ad07da7ebb57f9e5d7c Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Tue, 1 Mar 2011 15:58:52 +0530 Subject: [PATCH 2/3] [IMP] email_template :- create get_template_data method and remove code in on_change and default_get method. make generic method in email.compose.messageg wizard. bzr revid: ysa@tinyerp.com-20110301102852-c35165ydv2xuufb0 --- .../wizard/email_compose_message.py | 91 +++++++++++-------- 1 file changed, 55 insertions(+), 36 deletions(-) diff --git a/addons/email_template/wizard/email_compose_message.py b/addons/email_template/wizard/email_compose_message.py index a95e0e51f31..37e4c3df9f0 100644 --- a/addons/email_template/wizard/email_compose_message.py +++ b/addons/email_template/wizard/email_compose_message.py @@ -26,55 +26,82 @@ import tools class email_compose_message(osv.osv_memory): _name = 'email.compose.message' _inherit = 'email.compose.message' - def default_get(self, cr, uid, fields, context=None): + + def get_template_data(self, cr, uid, res_id, template_id, context=None): if context is None: context = {} - result = super(email_compose_message, self).default_get(cr, uid, fields, context=context) + result = {} template_pool = self.pool.get('email.template') - model_pool = self.pool.get('ir.model') - template_id = context.get('template_id', False) if template_id: template = template_pool.get_email_template(cr, uid, template_id=template_id, context=context) def _get_template_value(field): if not template: return False - if len(context['src_rec_ids']) > 1: # Multiple Mail: Gets original template values for multiple email change + if len(context.get('src_rec_ids',[])) > 1: # Multiple Mail: Gets original template values for multiple email change return getattr(template, field) else: # Simple Mail: Gets computed template values return template_pool.get_template_value(cr, uid, getattr(template, field), template.model, context.get('email_res_id'), context) + result.update({ + 'template_id' : template.id, + 'smtp_server_id' : template.smtp_server_id.id, + 'description' : _get_template_value('description') or False, + 'name' : _get_template_value('subject') or False, + 'attachment_ids' : template_pool.read(cr, uid, template.id, ['attachment_ids'])['attachment_ids'] or [], + 'res_id' : res_id or False, + 'email_to' : _get_template_value('email_to') or False, + 'email_cc' : _get_template_value('email_cc') or False, + 'email_bcc' : _get_template_value('email_bcc') or False, + 'reply_to' : _get_template_value('reply_to') or False, + 'model' : template.model or False, + }) + return result - if 'template_id' in fields: - result['template_id'] = template.id + def default_get(self, cr, uid, fields, context=None): + if context is None: + context = {} + result = super(email_compose_message, self).default_get(cr, uid, fields, context=context) + template_id = context.get('template_id', False) + vals = {} + if template_id and context.get('email_model') and context.get('email_res_id'): + vals = self.get_template_data(cr, uid, context.get('email_res_id'), template_id, context) + else: + result['model'] = context.get('email_model', False) - if 'smtp_server_id' in fields: - result['smtp_server_id'] = template.smtp_server_id.id + if not vals: + return result - if 'attachment_ids' in fields: - result['attachment_ids'] = template_pool.read(cr, uid, template.id, ['attachment_ids'])['attachment_ids'] + if 'template_id' in fields: + result.update({'template_id' : vals.get('template_id', False)}) - if 'model' in fields: - result['model'] = context.get('email_model') + if 'smtp_server_id' in fields: + result.update({'smtp_server_id' : vals.get('smtp_server_id', False)}) - if 'res_id' in fields: - result['res_id'] = context.get('email_res_id') + if 'attachment_ids' in fields: + result.update({'attachment_ids' : vals.get('attachment_ids', False)}) - if 'email_to' in fields: - result['email_to'] = _get_template_value('email_to') + if 'model' in fields: + result.update({'model' : vals.get('model', False)}) - if 'email_cc' in fields: - result['email_cc'] = _get_template_value('email_cc') + if 'res_id' in fields: + result.update({'res_id' : vals.get('res_id', False)}) - if 'email_bcc' in fields: - result['email_bcc'] = _get_template_value('email_bcc') + if 'email_to' in fields: + result.update({'email_to' : vals.get('email_to', False)}) - if 'name' in fields: - result['name'] = _get_template_value('subject') + if 'email_cc' in fields: + result.update({'email_cc' : vals.get('email_cc', False)}) - if 'description' in fields: - result['description'] = _get_template_value('description') + if 'email_bcc' in fields: + result.update({'email_bcc' : vals.get('email_bcc', False)}) - if 'reply_to' in fields: - result['reply_to'] = _get_template_value('reply_to') + if 'name' in fields: + result.update({'name' : vals.get('name', False)}) + + if 'description' in fields: + result.update({'description' : vals.get('description', False)}) + + if 'reply_to' in fields: + result.update({'reply_to' : vals.get('reply_to', False)}) return result @@ -107,18 +134,10 @@ class email_compose_message(osv.osv_memory): context = {} if context.get('mail') == 'reply': return {'value':{}} - email_temp_previ_pool = self.pool.get('email_template.preview') result = self.on_change_referred_doc(cr, uid, [], model, resource_id, context=context) vals = result.get('value',{}) if template_id and resource_id: - email_temp_pool = self.pool.get('email.template') - email_temp_data = email_temp_pool.browse(cr, uid, template_id, context) - vals.update({'smtp_server_id': email_temp_data.smtp_server_id and email_temp_data.smtp_server_id.id or False}) - context.update({'template_id': template_id}) - value = email_temp_previ_pool.on_change_ref(cr, uid, [], resource_id, context) - vals.update(value.get('value',{})) - vals.update({'name': value.get('value',{}).get('subject','')}) - vals.update({'attachment_ids' : email_temp_pool.read(cr, uid, template_id, ['attachment_ids'])['attachment_ids']}) + vals.update(self.get_template_data(cr, uid, resource_id, template_id, context)) else: vals.update({'attachment_ids' : []}) return {'value': vals} From 062c57e4b0f6532ae1e80f2fbf2d0b27e2f020f2 Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Tue, 1 Mar 2011 16:13:05 +0530 Subject: [PATCH 3/3] [REMOVE] fetchmail :- remove server_type in email.message object. bzr revid: ysa@tinyerp.com-20110301104305-qtfqy8fkr8xifime --- addons/fetchmail/fetchmail.py | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/addons/fetchmail/fetchmail.py b/addons/fetchmail/fetchmail.py index e69bbdf87a2..296d592396a 100644 --- a/addons/fetchmail/fetchmail.py +++ b/addons/fetchmail/fetchmail.py @@ -117,7 +117,7 @@ class email_server(osv.osv): context = {} for server in self.browse(cr, uid, ids, context=context): logger.notifyChannel(server.type, netsvc.LOG_INFO, 'fetchmail start checking for new emails on %s' % (server.name)) - context.update({'server_id': server.id, 'server_type': server.type}) + context.update({'server_id': server.id}) try: if server.type == 'imap': imap_server = None @@ -215,22 +215,14 @@ class email_message(osv.osv): _columns = { 'server_id': fields.many2one('email.server', "Mail Server", readonly=True, select=True), - 'server_type':fields.selection([ - ('pop', 'POP Server'), - ('imap', 'IMAP Server'), - ], 'Server Type', select=True, readonly=True), } - _order = 'id desc' def create(self, cr, uid, values, context=None): if context is None: context={} server_id = context.get('server_id',False) - server_type = context.get('server_type',False) if server_id: values['server_id'] = server_id - if server_type: - values['server_type'] = server_type res = super(email_message,self).create(cr, uid, values, context=context) return res @@ -238,11 +230,8 @@ class email_message(osv.osv): if context is None: context={} server_id = context.get('server_id',False) - server_type = context.get('server_type',False) if server_id: values['server_id'] = server_id - if server_type: - values['server_type'] = server_type res = super(email_message,self).write(cr, uid, ids, values, context=context) return res