diff --git a/addons/base_calendar/base_calendar.py b/addons/base_calendar/base_calendar.py index ea6973ff86f..82bc9c1850f 100644 --- a/addons/base_calendar/base_calendar.py +++ b/addons/base_calendar/base_calendar.py @@ -683,41 +683,63 @@ class calendar_alarm_manager(osv.osv): return all_notif def do_mail_reminder(self,cr,uid,alert,context=None): + print 'in Do mail reminder' if context is None: context = {} + res = False + event = self.pool.get("crm.meeting").browse(cr,uid,alert['event_id'],context=context) alarm = self.pool.get("calendar.alarm").browse(cr,uid,alert['alarm_id'],context=context) if alarm.type == 'email': - mail_id = [] - mail_pool = self.pool.get('mail.mail') + mail_ids = [] data_pool = self.pool.get('ir.model.data') - template_pool = self.pool.get('email.template') - local_context = {} + mail_pool = self.pool.get('mail.mail') + template_pool = self.pool.get('email.template') + local_context = context and context.copy() or {} + color = { + 'needs-action' : 'grey', + 'accepted' :'green', + 'tentative' :'#FFFF00', + 'declined':'red' + } for attendee in event.attendee_ids: - dummy,template_id = data_pool.get_object_reference(cr, uid, 'base_calendar', "crm_email_template_meeting_reminder") + dummy,template_id = data_pool.get_object_reference(cr, uid, 'base_calendar', 'crm_email_template_meeting_reminder') dummy,act_id = data_pool.get_object_reference(cr, uid, 'base_calendar', "view_crm_meeting_calendar") body = template_pool.browse(cr, uid, template_id, context=context).body_html - if attendee.email: # and tools.config.get('email_from', False): + + #mail_from = tools.config.get('email_from',event.user_id.email) + if attendee.email: local_context['att_obj'] = attendee + local_context['color'] = color local_context['action_id'] = self.pool.get('ir.actions.act_window').search(cr, uid, [('view_id','=',act_id)], context=context)[0] local_context['dbname'] = cr.dbname local_context['base_url'] = self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url', default='http://localhost:8069', context=context) - vals = template_pool.generate_email(cr, uid, template_id, event.id, context=local_context) + vals = template_pool.generate_email(cr, uid, template_id, attendee.ref.id, context=local_context) + vals['model'] = None #We don't want to have the mail in the tchatter while in queue! vals['auto_delete'] = True #We don't need mail after it has been sended ! - vals['recipient_ids'] = [(4,attendee.partner_id.id),] #We don't need mail after it has been sended ! - - if not attendee.partner_id.opt_out: - mail_id.append(mail_pool.create(cr, uid, vals, context=context)) - - if mail_id: - for mail in mail_pool.browse(cr,uid,mail_id,context=context): - print "REMINDER SENDED ... EMAIL : ",mail.id + if (vals['email_to']== attendee.partner_id.email): + vals['email_to'] = '' + vals['recipient_ids'] = [(4,attendee.partner_id.id),] + + if not attendee.partner_id.opt_out: + mail_ids.append(mail_pool.create(cr, uid, vals, context=local_context)) + else: + print "attendee no email or mail from not found", attendee.email + print 'Mail ids : ',mail_ids + if mail_ids: + try: + res = mail_pool.send(cr, uid, mail_ids, context=local_context) + print "REMINDER SENDED ... EMAIL : ",mail_ids + except Exception as e: + print e else: print "SHOULD BE AN MAIL ALARM :( FOR EVENT %s / ALARM %s" % (alert['event_id'],alert['alarm_id']) + + return res def do_notif_reminder(self,cr,uid,alert,context=None): alarm = self.pool.get("calendar.alarm").browse(cr,uid,alert['alarm_id'],context=context) @@ -1577,7 +1599,7 @@ class crm_meeting(osv.Model): if isinstance(ids, (str, int, long)): ids = [ids] res = False - + new_id = False # Special write of complex IDS for event_id in ids[:]: @@ -1634,19 +1656,23 @@ class crm_meeting(osv.Model): print values if values.get('date', False): + print 'Id notified (ids|new_id) : ',ids,"|",new_id + the_id = new_id or (ids and int(ids[0])); + print "Date has been changed !!!! --> SEND MAIL" if attendees_create: - attendees_create = attendees_create[ids[0]] + attendees_create = attendees_create[the_id] mail_to_ids = list(set(attendees_create['old_attendee_ids']) - set(attendees_create['removed_attendee_ids'])) print 'xxxToSend to ', mail_to_ids else: - mail_to_ids = [att.id for att in self.browse(cr,uid,int(ids[0]),context=context).attendee_ids] + + mail_to_ids = [att.id for att in self.browse(cr,uid,the_id,context=context).attendee_ids] print 'yyyToSend to ', mail_to_ids if mail_to_ids: current_user = self.pool.get('res.users').browse(cr, uid, uid, context=context) if self.pool.get('calendar.attendee')._send_mail_to_attendees(cr, uid, mail_to_ids, template_xmlid='crm_email_template_meeting_changedate',email_from=current_user.email, context=context): - self.message_post(cr, uid, int(ids[0]), body=_("A email has been send to specify that the date has been changed !"),subtype="base_calendar.subtype_invitation", context=context) + self.message_post(cr, uid, the_id, body=_("A email has been send to specify that the date has been changed !"),subtype="base_calendar.subtype_invitation", context=context) else: print 'Send mail return false' return res or True and False diff --git a/addons/base_calendar/base_calendar_data.xml b/addons/base_calendar/base_calendar_data.xml index d8d052c2e32..89ca318fc15 100644 --- a/addons/base_calendar/base_calendar_data.xml +++ b/addons/base_calendar/base_calendar_data.xml @@ -100,7 +100,7 @@ - + diff --git a/addons/base_calendar/static/src/js/base_calendar.js b/addons/base_calendar/static/src/js/base_calendar.js index 4ff0f9ce0f7..73cb0025d2e 100644 --- a/addons/base_calendar/static/src/js/base_calendar.js +++ b/addons/base_calendar/static/src/js/base_calendar.js @@ -18,6 +18,7 @@ openerp.base_calendar = function(instance) { console.log(result); _.each(result, function(res) { setTimeout(function() { + //If notification not already displayed, we add button and action on it if (!($.find(".eid_"+res.event_id)).length) { res.title = "" + res.title + ""; res.message += "

\ @@ -26,37 +27,30 @@ openerp.base_calendar = function(instance) { a = self.do_notify(res.title,res.message,true); $(".link2event").on('click', function() { - self.getMyNotifBox(this).find('.ui-notify-close').trigger("click"); self.rpc("/web/action/load", { action_id: "base_calendar.action_crm_meeting_notify", }).then( function(r) { r.res_id = res.event_id; - return self.action_manager.do_action(r); + return self.action_manager.do_action(r); }); }); - a.element.find(".link2recall").on('click',function() { self.getMyNotifBox(this).find('.ui-notify-close').trigger("click"); }); a.element.find(".link2showed").on('click',function() { - //alert('Mark event -' + res.event_id + 'as notified !') + self.getMyNotifBox(this).find('.ui-notify-close').trigger("click"); self.rpc("/calendar/NextNotify", { type: "UPDATE" - }) + }); }); - } + //If notification already displayed in the past, we remove the css attribute which hide this notification else if (self.getMyNotifBox($.find(".eid_"+res.event_id)).attr("style") !== ""){ self.getMyNotifBox($.find(".eid_"+res.event_id)).attr("style",""); } - else { - console.log("Already displayed !"); - } - //send http as done - console.log("DONE EACH RESULT"); - },res.timer * 100); + },res.timer * 1000); }); } ); @@ -65,11 +59,11 @@ openerp.base_calendar = function(instance) { var self= this; self.get_next_event(); setInterval(function(){ - console.log("IN TIMER"); self.get_next_event(); }, 5 * 60 * 1000 ); }, + //Override the show_application of addons/web/static/src/js/chrome.js show_application: function() { this._super(); this.check_notifications();