diff --git a/addons/base_calendar/base_calendar.py b/addons/base_calendar/base_calendar.py index 6720b4d3e4a..6e2152be9a2 100644 --- a/addons/base_calendar/base_calendar.py +++ b/addons/base_calendar/base_calendar.py @@ -409,8 +409,8 @@ property or property parameter."), attende_obj = self.browse(cr, uid, ids, context=context) action_id = self.pool.get('ir.actions.act_window').search(cr, uid, [('res_model','=','crm.meeting')], context=context) base_url = self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url', default='http://localhost:8069', context=context) - for attende in attende_obj: - base_url += '/meeting/meeting_invitation?db=%s&debug=&token=%s&action=%s' % (cr.dbname, ids[0],action_id[0]); + if action_id: + base_url += '/meeting/meeting_invitation?db=%s&debug=&token=%s&action=%s' % (cr.dbname, ids,action_id[0]); return base_url def _send_mail(self, cr, uid, ids, mail_to, email_from=tools.config.get('email_from', False), context=None): @@ -420,8 +420,9 @@ property or property parameter."), @return: True """ company = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.name - for att in self.browse(cr, uid, ids, context=context): - res_obj = att.ref + mail_id = [] + for attendee in self.browse(cr, uid, ids, context=context): + res_obj = attendee.ref if res_obj: att = {} att_info = [] @@ -430,8 +431,6 @@ property or property parameter."), for att2 in self.browse(cr, uid, other_invitation_ids): att_info.append(att2.user_id and att2.user_id.name or att2.partner_id and att2.partner_id.name or att2.email) - att[att2.user_id and att2.user_id.name or att2.partner_id and att2.partner_id.name or att2.email] = att2.email - tz = context.get('tz', pytz.timezone('UTC')) allday = False date = fields.datetime.context_timestamp(cr, uid, datetime.strptime(res_obj.date, tools.DEFAULT_SERVER_DATETIME_FORMAT), context=context) @@ -444,42 +443,39 @@ property or property parameter."), time = date.strftime('%B-%d-%Y') + " at (" + date.strftime('%H-%M') + " To " + duration.strftime('%H-%M') + ")" else : time = date.strftime('%B-%d-%Y') + " at " + date.strftime('%H-%M') + " To \n" + date_deadline.strftime('%B-%d-%Y') + " at " + date_deadline.strftime('%H-%M') - footer = self.meeting_invitation(cr, uid, ids, context=context) - map = '' + footer = self.meeting_invitation(cr, uid, attendee.id, context=context) + map_url = '' if res_obj.location: - map_url = "http://maps.google.com/maps?oi=map&q=" + '+' + str(res_obj.location), - map = """ (View Map)""" % map_url - for user in att: - body_vals = {'user': user, - 'name': res_obj.name, - 'responsible': res_obj.user_id and res_obj.user_id.name or 'OpenERP User', - 'company': company, - 'description': res_obj.description or '-', - 'attendees': ', ' .join(att_info), - 'time': time, - 'tz': tz, - 'location': res_obj.location or '-', - 'map' : map or '', - 'organizer': res_obj.organizer, - 'url' : footer, - } - body_id = self.pool.get('email.template').search(cr, uid, [('subject', '=', 'Meeting Invitation')], context=context) - body = self.pool.get('email.template').browse(cr, uid, body_id[0], context=context).body_html % body_vals - if att[user] and email_from: - ics_file = self.get_ics_file(cr, uid, res_obj, context=context) - vals = {'email_from': email_from, - 'email_to': att[user], - 'state': 'outgoing', - 'subject': sub, - 'body_html': body, - 'auto_delete': True} + map_url = """ (View Map)""" % res_obj.location + body_vals = {'user':attendee.user_id and attendee.user_id.name, + 'name': res_obj.name, + 'responsible': res_obj.user_id and res_obj.user_id.name or 'OpenERP User', + 'company': company, + 'description': res_obj.description or '-', + 'attendees': ', ' .join(att_info), + 'time': time, + 'tz': tz, + 'location': res_obj.location or '-', + 'map' : map_url or '', + 'organizer': res_obj.organizer, + 'url' : footer} + body_id = self.pool.get('email.template').search(cr, uid, [('subject', '=', 'Meeting Invitation')], context=context) + body = self.pool.get('email.template').browse(cr, uid, body_id[0], context=context).body_html % body_vals + if attendee.email and email_from: + ics_file = self.get_ics_file(cr, uid, res_obj, context=context) + vals = {'email_from': email_from, + 'email_to': attendee.email, + 'state': 'outgoing', + 'subject': sub, + 'body_html': body, + 'auto_delete': True} if ics_file: vals['attachment_ids'] = [(0,0,{'name': 'invitation.ics', - 'datas_fname': 'invitation.ics', - 'datas': str(ics_file).encode('base64')})] - mail_id= self.pool.get('mail.mail').create(cr, uid, vals, context=context) - self.pool.get('mail.mail').send(cr, uid, [mail_id], context=context) - return True + 'datas_fname': 'invitation.ics', + 'datas': str(ics_file).encode('base64')})] + mail_id.append(self.pool.get('mail.mail').create(cr, uid, vals, context=context)) + self.pool.get('mail.mail').send(cr, uid, mail_id, context=context) + return True def onchange_user_id(self, cr, uid, ids, user_id, *args, **argv): """ @@ -523,14 +519,9 @@ property or property parameter."), context = {} meeting_obj = self.pool.get('crm.meeting') for vals in self.browse(cr, uid, ids, context=context): - if vals.ref and vals.ref.user_id: - mod_obj = self.pool[vals.ref._name] - res=mod_obj.read(cr,uid,[vals.ref.id],['duration','class'],context) - defaults = {'user_id': vals.user_id.id, 'organizer_id': vals.ref.user_id.id,'duration':res[0]['duration'],'class':res[0]['class']} - mod_obj.copy(cr, uid, vals.ref.id, default=defaults, context=context) meeting_id = meeting_obj.search(cr, uid, [('attendee_ids','=',vals.id)],context = context) if meeting_id: - meeting_obj.message_post(cr, uid, meeting_id, body=_(("%s has Accept the meeting") % (vals.cn)), context=context) + meeting_obj.message_post(cr, uid, meeting_id, body=_(("%s Accept Invitation") % (vals.cn)), context=context) self.write(cr, uid, vals.id, {'state': 'accepted'}, context) return True @@ -546,11 +537,13 @@ property or property parameter."), """ if context is None: context = {} - meeting_obj = self.pool.get('crm.meeting') - vals=self.browse(cr, uid, ids, context=context)[0] - meeting_id = meeting_obj.search(cr, uid, [('attendee_ids','=',vals.id)],context = context) - meeting_obj.message_post(cr, uid, meeting_id, body=_(("%s has Reject the meeting") % (vals.cn)), context=context) - return self.write(cr, uid, ids, {'state': 'declined'}, context) + meeting_obj = self.pool.get('crm.meeting') + for vals in self.browse(cr, uid, ids, context=context): + meeting_id = meeting_obj.search(cr, uid, [('attendee_ids','=',vals.id)],context = context) + if meeting_id: + meeting_obj.message_post(cr, uid, meeting_id, body=_(("%s Reject Invitation") % (vals.cn)), context=context) + self.write(cr, uid, vals.id, {'state': 'declined'}, context) + return True def create(self, cr, uid, vals, context=None): """ diff --git a/addons/base_calendar/security/calendar_security.xml b/addons/base_calendar/security/calendar_security.xml index dbc493c73f4..5fa6fcc8e85 100644 --- a/addons/base_calendar/security/calendar_security.xml +++ b/addons/base_calendar/security/calendar_security.xml @@ -5,5 +5,11 @@ Survey / User + + Show Only Personal Invitation + + + [('user_id','=',user.id)] +