From dfb7539e9866817721728a09704ebf06c2b9106e Mon Sep 17 00:00:00 2001 From: "Rifakat Haradwala (Open ERP)" Date: Thu, 31 Mar 2011 14:33:50 +0530 Subject: [PATCH 1/3] [IMP]: improvements bzr revid: rha@tinyerp.com-20110331090350-uud2kept28bs1xv0 --- addons/crm/crm.py | 4 ++-- addons/crm/security/ir.model.access.csv | 4 ++-- addons/email/email_message.py | 7 ++++--- addons/email/security/ir.model.access.csv | 2 +- addons/project_mailgate/project_mailgate.py | 4 ++-- 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/addons/crm/crm.py b/addons/crm/crm.py index 687cd836d1a..59f6b47e0bf 100644 --- a/addons/crm/crm.py +++ b/addons/crm/crm.py @@ -308,8 +308,8 @@ class crm_case(object): return {'value': {'phone': address.phone}} def _history(self, cr, uid, cases, keyword, history=False, subject=None, email=False, details=None, email_from=False, message_id=False, attach=[], context=None): - mailgate_pool = self.pool.get('email.thread') - return mailgate_pool.history(cr, uid, cases, keyword, history=history,\ + thread_pool = self.pool.get('email.thread') + return thread_pool.history(cr, uid, cases, keyword, history=history,\ subject=subject, email=email, \ details=details, email_from=email_from,\ message_id=message_id, attach=attach, \ diff --git a/addons/crm/security/ir.model.access.csv b/addons/crm/security/ir.model.access.csv index 26d86830af2..c780baefb10 100644 --- a/addons/crm/security/ir.model.access.csv +++ b/addons/crm/security/ir.model.access.csv @@ -28,13 +28,13 @@ "access_res_partner_address_manager","res.partner.address.crm.user.manager","base.model_res_partner_address","base.group_sale_manager",1,0,0,0 "access_res_partner_category_manager","res.partner.category.crm.manager","base.model_res_partner_category","base.group_sale_manager",1,0,0,0 "email_email_message_manager","email.email.message.manager","email.model_email_message","base.group_sale_manager",1,0,0,0 -"email_thread_manager","email.mailgate.thread.manager","email.model_email_thread","base.group_sale_manager",1,1,1,1 +"email_thread_manager","email.thread.manager","email.model_email_thread","base.group_sale_manager",1,1,1,1 "access_calendar_attendee_crm_user","calendar.attendee.crm.user","model_calendar_attendee","base.group_sale_salesman",1,1,1,0 "access_calendar_attendee_crm_manager","calendar.attendee.crm.manager","model_calendar_attendee","base.group_sale_manager",1,1,1,1 "access_res_partner","res.partner.crm.user","base.model_res_partner","base.group_sale_salesman",1,1,1,0 "access_res_partner_address","res.partner.address.crm.user","base.model_res_partner_address","base.group_sale_salesman",1,1,1,0 "access_res_partner_category","res.partner.category.crm.user","base.model_res_partner_category","base.group_sale_salesman",1,1,1,0 -"email_mailgate_thread","email.mailgate.thread","email.model_email_thread","base.group_sale_salesman",1,1,1,1 +"email_mailgate_thread","email.thread","email.model_email_thread","base.group_sale_salesman",1,1,1,1 "email_gateway_email_message_user","email.email.message.user","email.model_email_message","base.group_sale_salesman",1,1,1,1 "access_crm_case_categ_manager","crm.case.categ manager","model_crm_case_categ","base.group_sale_manager",1,1,1,1 "access_base_action_rule_manager","base.action.rule manager","model_base_action_rule","base.group_sale_manager",1,1,1,1 diff --git a/addons/email/email_message.py b/addons/email/email_message.py index f7d622966eb..b4c1363c4bb 100644 --- a/addons/email/email_message.py +++ b/addons/email/email_message.py @@ -210,7 +210,7 @@ class email_message(osv.osv): msg_vals = { 'subject': subject, 'model': model or '', - 'date': time.strftime('%Y-%m-%d'), + 'date': time.strftime('%Y-%m-%d %H:%M:%S'), 'user_id': uid, 'body': body, 'email_from': email_from, @@ -266,7 +266,7 @@ class email_message(osv.osv): self.write(cr, uid, ids, {'state':'outgoing'}, context) for message in self.browse(cr, uid, ids, context): try: - res = self.send_email(cr, uid, ids, auto_commit=True, context=context) + res = self.send_email(cr, uid, [message.id], auto_commit=True, context=context) if res: self.write(cr, uid, [message.id], {'state':'sent', 'message_id': res}, context) else: @@ -313,6 +313,7 @@ class email_message(osv.osv): else: raise osv.except_osv(_('Error !'), _('No messages in outgoing or exception state!')) + #if auto_selete=True then delete that sent messages as well as attachments sent_emails = self.search(cr, uid, [('state','=','sent'), ('auto_delete','=',True)], context=context) if sent_emails: for sent in self.browse(cr, uid, sent_emails, context): @@ -328,7 +329,7 @@ class email_message(osv.osv): logger.notifyChannel("email-template", netsvc.LOG_ERROR, _("Sending of Mail %s failed. Probable Reason:Could not login to server\nError: %s") % (message.id, error)) self.write(cr, uid, [message.id], {'state':'exception'}, context) return False - return True + return res # OLD Code. # def send_all_mail(self, cr, uid, ids=None, context=None): # if ids is None: diff --git a/addons/email/security/ir.model.access.csv b/addons/email/security/ir.model.access.csv index f4dad0d8765..0c374e15761 100644 --- a/addons/email/security/ir.model.access.csv +++ b/addons/email/security/ir.model.access.csv @@ -1,3 +1,3 @@ "id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" "access_email_message","email.message","model_email_message",,1,0,0,0 -"access_mailgate_thread","mailgate.thread","model_email_thread",,1,0,0,0 +"access_mailgate_thread","email.thread","model_email_thread",,1,0,0,0 diff --git a/addons/project_mailgate/project_mailgate.py b/addons/project_mailgate/project_mailgate.py index 23a97af7fc5..a50b15bd9e5 100644 --- a/addons/project_mailgate/project_mailgate.py +++ b/addons/project_mailgate/project_mailgate.py @@ -107,8 +107,8 @@ class project_tasks(osv.osv): return res def _history(self, cr, uid, cases, keyword, history=False, subject=None, email=False, details=None, email_from=False, message_id=False, attach=[], context=None): - mailgate_pool = self.pool.get('email.thread') - return mailgate_pool.history(cr, uid, cases, keyword, history=history,\ + thread_pool = self.pool.get('email.thread') + return thread_pool.history(cr, uid, cases, keyword, history=history,\ subject=subject, email=email, \ details=details, email_from=email_from,\ message_id=message_id, attach=attach, \ From 8cce4b4bb64cf847225682b7379dd5eadd740d33 Mon Sep 17 00:00:00 2001 From: "Rifakat Haradwala (Open ERP)" Date: Thu, 31 Mar 2011 19:07:17 +0530 Subject: [PATCH 2/3] [IMP] email_message.py: changes in send_email() bzr revid: rha@tinyerp.com-20110331133717-15n3ap88cgx0334o --- addons/email/email_message.py | 57 +++++++++++++++++------------------ 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/addons/email/email_message.py b/addons/email/email_message.py index 7c249529c1d..655c7edde95 100644 --- a/addons/email/email_message.py +++ b/addons/email/email_message.py @@ -85,7 +85,7 @@ class email_message_common(osv.osv_memory): 'body_html': fields.text('HTML', help="Contains HTML version of email"), 'smtp_server_id':fields.many2one('ir.mail_server', 'SMTP Server'), } - _rec_name='subject' + _rec_name = 'subject' _sql_constraints = [] email_message_common() @@ -256,34 +256,29 @@ class email_message(osv.osv): ids = [] if context is None: context = {} - attachment_obj = self.pool.get('ir.attachment') - smtp_server_obj = self.pool.get('ir.mail_server') if not ids: filters = [('state', '=', 'outgoing')] if 'filters' in context: filters.extend(context['filters']) ids = self.search(cr, uid, filters, context=context) - self.send_email(cr, uid, [message.id], auto_commit=True, context=context) - self.write(cr, uid, ids, {'state':'outgoing'}, context) - for message in self.browse(cr, uid, ids, context): - try: - res = self.send_email(cr, uid, [message.id], auto_commit=True, context=context) - if res: - self.write(cr, uid, [message.id], {'state':'sent', 'message_id': res}, context) - else: - self.write(cr, uid, [message.id], {'state':'exception'}, context) - except Exception, error: - logger = netsvc.Logger() - logger.notifyChannel("email-template", netsvc.LOG_ERROR, _("Sending of Mail %s failed. Probable Reason:Could not login to server\nError: %s") % (message.id, error)) - self.write(cr, uid, [message.id], {'state':'exception'}, context) - return ids + try: + res = self.send_email(cr, uid, ids, auto_commit=True, context=context) + except Exception, error: + logger = netsvc.Logger() + msg = _("Sending of Mail failed. Error: %s") % (error) + logger.notifyChannel("email", netsvc.LOG_ERROR, msg) + return False + return res def send_email(self, cr, uid, ids, auto_commit=False, context=None): + """ + send email message + """ if context is None: context = {} - attachment = [] smtp_server_obj = self.pool.get('ir.mail_server') attachment_pool = self.pool.get('ir.attachment') + self.write(cr, uid, ids, {'state':'outgoing'}, context) for message in self.browse(cr, uid, ids, context): try: smtp_server = message.smtp_server_id @@ -293,9 +288,10 @@ class email_message(osv.osv): smtp_server = smtp_server_obj.browse(cr, uid, smtp_ids, context)[0] attachments = [] for attach in message.attachment_ids: - attachments.append((attach.datas_fname ,base64.b64decode(attach.datas))) + attachments.append((attach.datas_fname, base64.b64decode(attach.datas))) if message.state in ['outgoing', 'exception']: - msg = smtp_server_obj.pack_message(cr, uid, message.subject, message.body, + msg = smtp_server_obj.pack_message(cr, uid, message.email_from, + message.email_to and message.email_to.split(',') or [], message.subject, message.body, email_cc=message.email_cc and message.email_cc.split(',') or [], email_bcc=message.email_bcc and message.email_bcc.split(',') or [], reply_to=message.reply_to, @@ -313,18 +309,21 @@ class email_message(osv.osv): smtp_user=smtp_server and smtp_server.smtp_user or None, smtp_password=smtp_server and smtp_server.smtp_pass or None, ssl=smtp_server and smtp_server.smtp_ssl or False, - tsl=smtp_server and smtp_server.smtp_tsl, + tls=smtp_server and smtp_server.smtp_tls, debug=message.debug) + if res: + self.write(cr, uid, [message.id], {'state':'sent', 'message_id': res}, context) + else: + self.write(cr, uid, [message.id], {'state':'exception'}, context) else: raise osv.except_osv(_('Error !'), _('No messages in outgoing or exception state!')) - #if auto_selete=True then delete that sent messages as well as attachments - sent_emails = self.search(cr, uid, [('state','=','sent'), ('auto_delete','=',True)], context=context) - if sent_emails: - for sent in self.browse(cr, uid, sent_emails, context): - if sent.attachment_ids: - attachment_pool.unlink(cr, uid, [attachment.id for attachment in sent.attachment_ids], context=context) - self.unlink(cr, uid, sent.id, context=context) + #if auto_delete=True then delete that sent messages as well as attachments + message_data = self.read(cr, uid, message.id, ['state', 'auto_delete', 'attachment_ids']) + if message_data['state'] == 'sent' and message_data['auto_delete'] == True: + self.unlink(cr, uid, [message.id], context=context) + if message_data['attachment_ids']: + attachment_pool.unlink(cr, uid, message_data['attachment_ids'], context=context) if auto_commit == True: cr.commit() @@ -334,7 +333,7 @@ class email_message(osv.osv): logger.notifyChannel("email-template", netsvc.LOG_ERROR, _("Sending of Mail %s failed. Probable Reason:Could not login to server\nError: %s") % (message.id, error)) self.write(cr, uid, [message.id], {'state':'exception'}, context) return False - return res + return True # OLD Code. # def send_all_mail(self, cr, uid, ids=None, context=None): # if ids is None: From faa13b7332e5a8917c028474c1fdbc47921d622c Mon Sep 17 00:00:00 2001 From: "Rifakat Haradwala (Open ERP)" Date: Fri, 1 Apr 2011 18:51:59 +0530 Subject: [PATCH 3/3] [IMP] email.message: fix context problem for attachment in schedule_with_attach() bzr revid: rha@tinyerp.com-20110401132159-h4mdo4k8zxrgagkz --- addons/email/email_message.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/email/email_message.py b/addons/email/email_message.py index 655c7edde95..4f4978ee6a4 100644 --- a/addons/email/email_message.py +++ b/addons/email/email_message.py @@ -243,6 +243,8 @@ class email_message(osv.osv): 'res_model':'email.message', 'res_id': email_msg_id, } + if context.has_key('default_type'): + del context['default_type'] attachment_ids.append(attachment_obj.create(cr, uid, attachment_data, context)) self.write(cr, uid, email_msg_id, { 'attachment_ids': [[6, 0, attachment_ids]] }, context)