[IMP] Improve and Fix some bug with the templates's mail. MySelf is by default green in the function create_attendees.
bzr revid: jke@openerp.com-20131219133316-pec8qp4ybwt2w4k0
This commit is contained in:
parent
306dd6e397
commit
3e5bb533dd
|
@ -77,16 +77,6 @@ class calendar_attendee(osv.osv):
|
||||||
_name = 'calendar.attendee'
|
_name = 'calendar.attendee'
|
||||||
_description = 'Attendee information'
|
_description = 'Attendee information'
|
||||||
|
|
||||||
# def _get_address(self, name=None, email=None):
|
|
||||||
# """
|
|
||||||
# Gives email information in ical CAL-ADDRESS type format.
|
|
||||||
# @param name: name for CAL-ADDRESS value
|
|
||||||
# @param email: email address for CAL-ADDRESS value
|
|
||||||
# """
|
|
||||||
# if name and email:
|
|
||||||
# name += ':'
|
|
||||||
# return (name or '') + (email and ('MAILTO:' + email) or '')
|
|
||||||
|
|
||||||
def _compute_data(self, cr, uid, ids, name, arg, context=None):
|
def _compute_data(self, cr, uid, ids, name, arg, context=None):
|
||||||
"""
|
"""
|
||||||
Compute data on function fields for attendee values.
|
Compute data on function fields for attendee values.
|
||||||
|
@ -214,6 +204,66 @@ class calendar_attendee(osv.osv):
|
||||||
"""
|
"""
|
||||||
res = False
|
res = False
|
||||||
|
|
||||||
|
mail_ids = []
|
||||||
|
data_pool = self.pool.get('ir.model.data')
|
||||||
|
mailmess_pool = self.pool.get('mail.message')
|
||||||
|
mail_pool = self.pool.get('mail.mail')
|
||||||
|
template_pool = self.pool.get('email.template')
|
||||||
|
local_context = context.copy()
|
||||||
|
color = {
|
||||||
|
'needsAction' : 'grey',
|
||||||
|
'accepted' :'green',
|
||||||
|
'tentative' :'#FFFF00',
|
||||||
|
'declined':'red'
|
||||||
|
}
|
||||||
|
|
||||||
|
if not isinstance(ids, (tuple, list)):
|
||||||
|
ids = [ids]
|
||||||
|
|
||||||
|
for attendee in self.browse(cr, uid, ids, context=context):
|
||||||
|
dummy,template_id = data_pool.get_object_reference(cr, uid, 'base_calendar',template_xmlid)
|
||||||
|
dummy,act_id = data_pool.get_object_reference(cr, uid, 'base_calendar', "view_crm_meeting_calendar")
|
||||||
|
|
||||||
|
if attendee.email and email_from:
|
||||||
|
ics_file = self.get_ics_file(cr, uid, attendee.event_id, context=context)
|
||||||
|
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)
|
||||||
|
mail_id = template_pool.send_mail(cr, uid, template_id, attendee.id, context=local_context)
|
||||||
|
|
||||||
|
|
||||||
|
vals = {}
|
||||||
|
if ics_file:
|
||||||
|
vals['attachment_ids'] = [(0,0,{'name': 'invitation.ics',
|
||||||
|
'datas_fname': 'invitation.ics',
|
||||||
|
'datas': str(ics_file).encode('base64')})]
|
||||||
|
vals['model'] = None #We don't want to have the mail in the tchatter while in queue!
|
||||||
|
the_mailmess = mail_pool.browse(cr,uid,mail_id,context=context).mail_message_id
|
||||||
|
mailmess_pool.write(cr,uid,[the_mailmess.id],vals,context=context)
|
||||||
|
mail_ids.append(mail_id)
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# if not attendee.partner_id.opt_out:
|
||||||
|
# if 'partner_to' in vals:
|
||||||
|
# del vals['partner_to'] #hack between mail.mail and template.mail -> tde
|
||||||
|
|
||||||
|
if mail_ids:
|
||||||
|
try:
|
||||||
|
res = mail_pool.send(cr, uid, mail_ids, context=context)
|
||||||
|
except Exception as e:
|
||||||
|
print e
|
||||||
|
|
||||||
|
return res
|
||||||
|
|
||||||
|
def ORI_send_mail_to_attendees(self, cr, uid, ids, email_from=tools.config.get('email_from', False), template_xmlid='crm_email_template_meeting_invitation', context=None):
|
||||||
|
"""
|
||||||
|
Send mail for event invitation to event attendees.
|
||||||
|
@param email_from: email address for user sending the mail
|
||||||
|
"""
|
||||||
|
res = False
|
||||||
|
|
||||||
mail_id = []
|
mail_id = []
|
||||||
data_pool = self.pool.get('ir.model.data')
|
data_pool = self.pool.get('ir.model.data')
|
||||||
mail_pool = self.pool.get('mail.mail')
|
mail_pool = self.pool.get('mail.mail')
|
||||||
|
@ -256,7 +306,7 @@ class calendar_attendee(osv.osv):
|
||||||
if not attendee.partner_id.opt_out:
|
if not attendee.partner_id.opt_out:
|
||||||
if 'partner_to' in vals:
|
if 'partner_to' in vals:
|
||||||
del vals['partner_to'] #hack between mail.mail and template.mail -> tde
|
del vals['partner_to'] #hack between mail.mail and template.mail -> tde
|
||||||
mail_id.append(mail_pool.create(cr, uid, vals, context=context))
|
mail_id.append(mail_pool.create(cr, SUPERUSER_ID, vals, context=context))
|
||||||
|
|
||||||
|
|
||||||
if mail_id:
|
if mail_id:
|
||||||
|
@ -1061,12 +1111,17 @@ class crm_meeting(osv.Model):
|
||||||
if partner.id in attendees:
|
if partner.id in attendees:
|
||||||
continue
|
continue
|
||||||
access_token = self.new_invitation_token(cr, uid, event, partner.id)
|
access_token = self.new_invitation_token(cr, uid, event, partner.id)
|
||||||
att_id = self.pool.get('calendar.attendee').create(cr, uid, {
|
values = {
|
||||||
'partner_id': partner.id,
|
'partner_id': partner.id,
|
||||||
'event_id': event.id,
|
'event_id': event.id,
|
||||||
'access_token': access_token,
|
'access_token': access_token,
|
||||||
'email': partner.email,
|
'email': partner.email,
|
||||||
}, context=context)
|
}
|
||||||
|
|
||||||
|
if partner.id == current_user.partner_id.id:
|
||||||
|
values['state']='accepted'
|
||||||
|
|
||||||
|
att_id = self.pool.get('calendar.attendee').create(cr, uid,values, context=context)
|
||||||
# if partner.email:
|
# if partner.email:
|
||||||
# mail_to = mail_to + " " + partner.email
|
# mail_to = mail_to + " " + partner.email
|
||||||
|
|
||||||
|
|
|
@ -118,49 +118,51 @@
|
||||||
<field name="object">crm.meeting</field>
|
<field name="object">crm.meeting</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|
||||||
<record id="crm_email_template_meeting_invitation" model="email.template">
|
<record id="crm_email_template_meeting_invitation" model="email.template">
|
||||||
<field name="name">Meeting Invitation</field>
|
<field name="name">Meeting Invitation</field>
|
||||||
<field name="email_from">${object.user_id.email or ''}</field>
|
<field name="email_from">${object.event_id.user_id.email or ''}</field>
|
||||||
<field name="subject">${object.name}</field>
|
<field name="subject">${object.event_id.name}</field>
|
||||||
<field name="email_to" >${ctx['att_obj'].email}</field>
|
<field name="model_id" ref="base_calendar.model_calendar_attendee"/>
|
||||||
<field name="model_id" ref="base_calendar.model_crm_meeting"/>
|
|
||||||
<!--
|
|
||||||
<field name="email_to" >${(ctx['att_obj'].partner_id and ctx['att_obj'].partner_id.email and ctx['att_obj'].partner_id.email==ctx['att_obj'].email and '' or ctx['att_obj'].email|safe)}</field>
|
|
||||||
<field name="partner_to">${ctx['att_obj'].partner_id and ctx['att_obj'].partner_id.email and ctx['att_obj'].partner_id.email==ctx['att_obj'].email and ctx['att_obj'].partner_id.email or False }</field>
|
|
||||||
del vals['partner_to'] #Hack between email_template and mail_mail -> See tde
|
|
||||||
-->
|
|
||||||
|
|
||||||
|
|
||||||
|
<field name="email_to" >${('' if object.partner_id and object.partner_id.email and object.partner_id.email==object.email else object.email|safe)}</field>
|
||||||
|
<field name="partner_to">${object.partner_id and object.partner_id.email and object.partner_id.email==object.email and object.partner_id.id or False }</field>
|
||||||
<field name="auto_delete" eval="True"/>
|
<field name="auto_delete" eval="True"/>
|
||||||
|
|
||||||
<field name="body_html"><![CDATA[
|
<field name="body_html"><![CDATA[
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
|
||||||
<title>${object.name}</title>
|
<title>${object.event_id.name}</title>
|
||||||
|
<style>
|
||||||
|
span.oe_mail_footer_access {
|
||||||
|
display:block;
|
||||||
|
text-align:center;
|
||||||
|
color:grey;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div style="border-radius: 2px; max-width: 1200px; height: auto;margin-left: auto;margin-right: auto;background-color:#f9f9f9;">
|
<div style="border-radius: 2px; max-width: 1200px; height: auto;margin-left: auto;margin-right: auto;background-color:#f9f9f9;">
|
||||||
<div style="height:auto;text-align: center;font-size : 30px;color: #8A89BA;">
|
<div style="height:auto;text-align: center;font-size : 30px;color: #8A89BA;">
|
||||||
<strong>${object.name}</strong>
|
<strong>${object.event_id.name}</strong>
|
||||||
</div>
|
</div>
|
||||||
<div style="height: 50px;text-align: left;font-size : 14px;border-collapse: separate;margin-top:10px">
|
<div style="height: 50px;text-align: left;font-size : 14px;border-collapse: separate;margin-top:10px">
|
||||||
<strong style="margin-left:12px">Hello ${ctx['att_obj'].cn}</strong> ,<br/><p style="margin-left:12px">${object.user_id.partner_id.name} invited you for the ${object.name} meeting of ${object.user_id.company_id.name}.</p>
|
<strong style="margin-left:12px">Hello ${object.cn}</strong> ,<br/><p style="margin-left:12px">${object.event_id.user_id.partner_id.name} invited you for the ${object.event_id.name} meeting of ${object.event_id.user_id.company_id.name}.</p>
|
||||||
</div>
|
</div>
|
||||||
<div style="height: auto;margin-left:12px;margin-top:30px;">
|
<div style="height: auto;margin-left:12px;margin-top:30px;">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<div style="border-top-left-radius:3px;border-top-right-radius:3px;font-size:12px;border-collapse:separate;text-align:center;font-weight:bold;color:#ffffff;width:130px;min-height: 18px;border-color:#ffffff;background:#8a89ba;padding-top: 4px;">${object.get_interval(object.date, 'dayname')}</div>
|
<div style="border-top-left-radius:3px;border-top-right-radius:3px;font-size:12px;border-collapse:separate;text-align:center;font-weight:bold;color:#ffffff;width:130px;min-height: 18px;border-color:#ffffff;background:#8a89ba;padding-top: 4px;">${object.event_id.get_interval(object.event_id.date, 'dayname')}</div>
|
||||||
<div style="font-size:48px;min-height:auto;font-weight:bold;text-align:center;color: #5F5F5F;background-color: #E1E2F8;width: 130px;">
|
<div style="font-size:48px;min-height:auto;font-weight:bold;text-align:center;color: #5F5F5F;background-color: #E1E2F8;width: 130px;">
|
||||||
${object.get_interval(object.date,'day')}
|
${object.event_id.get_interval(object.event_id.date,'day')}
|
||||||
</div>
|
</div>
|
||||||
<div style='font-size:12px;text-align:center;font-weight:bold;color:#ffffff;background-color:#8a89ba'>${object.get_interval(object.date, 'month')}</div>
|
<div style='font-size:12px;text-align:center;font-weight:bold;color:#ffffff;background-color:#8a89ba'>${object.event_id.get_interval(object.event_id.date, 'month')}</div>
|
||||||
<div style="border-collapse:separate;color:#8a89ba;text-align:center;width: 128px;font-size:12px;border-bottom-right-radius:3px;font-weight:bold;border:1px solid;border-bottom-left-radius:3px;">${object.get_interval(object.date, 'time')}</div>
|
<div style="border-collapse:separate;color:#8a89ba;text-align:center;width: 128px;font-size:12px;border-bottom-right-radius:3px;font-weight:bold;border:1px solid;border-bottom-left-radius:3px;">${object.event_id.get_interval(object.event_id.date, 'time')}</div>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<table cellspacing="0" cellpadding="0" border="0" style="margin-top: 15px; margin-left: 10px;font-size: 16px;">
|
<table cellspacing="0" cellpadding="0" border="0" style="margin-top: 15px; margin-left: 10px;font-size: 16px;">
|
||||||
% if object.location:
|
% if object.event_id.location:
|
||||||
<tr style=" height: 30px;">
|
<tr style=" height: 30px;">
|
||||||
<td style="vertical-align:top;">
|
<td style="vertical-align:top;">
|
||||||
<div style="height: 25px; width: 120px; background : # CCCCCC; font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif;">
|
<div style="height: 25px; width: 120px; background : # CCCCCC; font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif;">
|
||||||
|
@ -169,14 +171,14 @@
|
||||||
</td>
|
</td>
|
||||||
<td colspan="1" style="vertical-align:top;">
|
<td colspan="1" style="vertical-align:top;">
|
||||||
<div style = "font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 14px" >
|
<div style = "font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 14px" >
|
||||||
: ${object.location}
|
: ${object.event_id.location}
|
||||||
<span style= "color:#A9A9A9; ">(<a href="http://maps.google.com/maps?oi=map&q=${object.location}">View Map</a>)
|
<span style= "color:#A9A9A9; ">(<a href="http://maps.google.com/maps?oi=map&q=${object.event_id.location}">View Map</a>)
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
% endif
|
% endif
|
||||||
% if object.description :
|
% if object.event_id.description :
|
||||||
<tr style=" height:auto;">
|
<tr style=" height:auto;">
|
||||||
<td style="vertical-align:top;">
|
<td style="vertical-align:top;">
|
||||||
<div style="height:auto; width: 120px; background : # CCCCCC; font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif;">
|
<div style="height:auto; width: 120px; background : # CCCCCC; font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif;">
|
||||||
|
@ -185,11 +187,25 @@
|
||||||
</td>
|
</td>
|
||||||
<td colspan="3" style="vertical-align:text-top;">
|
<td colspan="3" style="vertical-align:text-top;">
|
||||||
<div style="font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif;">
|
<div style="font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif;">
|
||||||
: ${object.description or ''}
|
: ${object.event_id.description}
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
% endif
|
% endif
|
||||||
|
% if not object.event_id.allday and object.event_id.duration:
|
||||||
|
<tr style=" height:auto;">
|
||||||
|
<td style="vertical-align:top;">
|
||||||
|
<div style="height:auto; width: 120px; background : # CCCCCC; font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif;">
|
||||||
|
Duration
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td colspan="3" style="vertical-align:text-top;">
|
||||||
|
<div style="font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif;">
|
||||||
|
: ${('%dH%02d' % (object.event_id.duration,(object.event_id.duration*60)%60))}
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
% endif
|
||||||
<tr style=" height: 30px;">
|
<tr style=" height: 30px;">
|
||||||
<td style="height: 25px;width: 120px; background : # CCCCCC; font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif;">
|
<td style="height: 25px;width: 120px; background : # CCCCCC; font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif;">
|
||||||
<div>
|
<div>
|
||||||
|
@ -197,13 +213,13 @@
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td colspan="3">
|
<td colspan="3">
|
||||||
: <div style='display:inline-block; border-radius: 50%; width:10px; height:10px;background:grey;'></div>
|
:
|
||||||
<span style="margin-left:5px">You</span>
|
% for attendee in object.event_id.attendee_ids:
|
||||||
|
<div style='display:inline-block; border-radius: 50%; width:10px; height:10px;background:${ctx["color"][attendee.state]};'></div>
|
||||||
% for attendee in object.attendee_ids:
|
% if attendee.cn != object.cn:
|
||||||
% if attendee.cn != ctx['att_obj'].cn:
|
<span style="margin-left:5px">${attendee.cn}</span>
|
||||||
<div style='display:inline-block; border-radius: 50%; width:10px; height:10px;background:${ctx['color'][attendee.state]};'></div>
|
% else:
|
||||||
<span style="margin-left:5px">${attendee.cn}</span>
|
<span style="margin-left:5px">You</span>
|
||||||
% endif
|
% endif
|
||||||
% endfor
|
% endfor
|
||||||
</td>
|
</td>
|
||||||
|
@ -213,56 +229,65 @@
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div style="height: auto;width:300px; margin:0 auto;padding-top:20px;">
|
<div style="height: auto;width:450px; margin:0 auto;padding-top:20px;padding-bottom:40px;">
|
||||||
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#8A89BA;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="${ctx['base_url']}/meeting_invitation/accept?db=${ctx['dbname']}&token=${ctx['att_obj'].access_token}&action=${ctx['action_id']}&id=${object.id}">Accept</a>
|
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#8A89BA;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="${ctx['base_url']}/meeting_invitation/accept?db=${ctx['dbname']}&token=${object.access_token}&action=${ctx['action_id']}&id=${object.event_id.id}">Accept</a>
|
||||||
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#808080;text-decoration: none;color:#FFFFFF;" href="${ctx['base_url']}/meeting_invitation/decline?db=${ctx['dbname']}&token=${ctx['att_obj'].access_token}&action=${ctx['action_id']}&id=${object.id}">Decline</a>
|
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#808080;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="${ctx['base_url']}/meeting_invitation/decline?db=${ctx['dbname']}&token=${object.access_token}&action=${ctx['action_id']}&id=${object.event_id.id}">Decline</a>
|
||||||
</div>
|
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#D8D8D8;text-decoration: none;color:#FFFFFF;" href="${ctx['base_url']}/meeting_invitation/view?db=${ctx['dbname']}&token=${object.access_token}&action=${ctx['action_id']}&id=${object.event_id.id}">View</a>
|
||||||
<div style="padding-top:10px;">
|
</div>
|
||||||
</br> Sent by ${object.user_id.name} from ${object.user_id.company_id.name}. View this meeting detail <a href="${ctx['base_url']}/meeting_invitation/view?db=${ctx['dbname']}&token=${ctx['att_obj'].access_token}&action=${ctx['action_id']}&id=${object.id}">directly in OpenERP.</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
]]></field>
|
]]>
|
||||||
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="crm_email_template_meeting_changedate" model="email.template">
|
<record id="crm_email_template_meeting_changedate" model="email.template">
|
||||||
<field name="name">Meeting Invitation </field>
|
<field name="name">Meeting Invitation</field>
|
||||||
<field name="email_from">${object.user_id.email or ''}</field>
|
<field name="email_from">${object.event_id.user_id.email or ''}</field>
|
||||||
<field name="subject">${object.name} - Date updated</field>
|
<field name="subject">${object.event_id.name} - Date has been updated</field>
|
||||||
<field name="email_to" >${ctx['att_obj'].email}</field>
|
<field name="model_id" ref="base_calendar.model_calendar_attendee"/>
|
||||||
<field name="model_id" ref="base_calendar.model_crm_meeting"/>
|
|
||||||
|
|
||||||
|
<field name="email_to" >${('' if object.partner_id and object.partner_id.email and object.partner_id.email==object.email else object.email|safe)}</field>
|
||||||
|
<field name="partner_to">${object.partner_id and object.partner_id.email and object.partner_id.email==object.email and object.partner_id.id or False }</field>
|
||||||
<field name="auto_delete" eval="True"/>
|
<field name="auto_delete" eval="True"/>
|
||||||
<field name="body_html"><![CDATA[
|
|
||||||
|
<field name="body_html"><![CDATA[
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
|
||||||
<title>${object.name}</title>
|
<title>${object.event_id.name}</title>
|
||||||
|
<style>
|
||||||
|
span.oe_mail_footer_access {
|
||||||
|
display:block;
|
||||||
|
text-align:center;
|
||||||
|
color:grey;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div style="border-radius: 2px; max-width: 1200px; height: auto;margin-left: auto;margin-right: auto;background-color:#f9f9f9;">
|
<div style="border-radius: 2px; max-width: 1200px; height: auto;margin-left: auto;margin-right: auto;background-color:#f9f9f9;">
|
||||||
<div style="height:auto;text-align: center;font-size : 30px;color: #8A89BA;">
|
<div style="height:auto;text-align: center;font-size : 30px;color: #8A89BA;">
|
||||||
<strong>${object.name}</strong>
|
<strong>${object.event_id.name}</strong>
|
||||||
</div>
|
</div>
|
||||||
<div style="height: 50px;text-align: left;font-size : 14px;border-collapse: separate;margin-top:10px">
|
<div style="height: 50px;text-align: left;font-size : 14px;border-collapse: separate;margin-top:10px">
|
||||||
<strong style="margin-left:12px">Hello ${ctx['att_obj'].cn}</strong> ,<br/>
|
<strong style="margin-left:12px">Hello ${object.cn}</strong> ,<br/>
|
||||||
<p style="margin-left:12px">The date of the meeting has been changed...<br/>The meeting created by ${object.user_id.partner_id.name} is now scheduled for : ${object.date}.</p>
|
<p style="margin-left:12px">The date of the meeting has been changed...<br/>
|
||||||
|
The meeting created by ${object.event_id.user_id.partner_id.name} is now scheduled for : ${object.event_id.date}.</p>
|
||||||
</div>
|
</div>
|
||||||
<div style="height: auto;margin-left:12px;margin-top:30px;">
|
<div style="height: auto;margin-left:12px;margin-top:30px;">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<div style="border-top-left-radius:3px;border-top-right-radius:3px;font-size:12px;border-collapse:separate;text-align:center;font-weight:bold;color:#ffffff;width:130px;min-height: 18px;border-color:#ffffff;background:#8a89ba;padding-top: 4px;">${object.get_interval(object.date, 'dayname')}</div>
|
<div style="border-top-left-radius:3px;border-top-right-radius:3px;font-size:12px;border-collapse:separate;text-align:center;font-weight:bold;color:#ffffff;width:130px;min-height: 18px;border-color:#ffffff;background:#8a89ba;padding-top: 4px;">${object.event_id.get_interval(object.event_id.date, 'dayname')}</div>
|
||||||
<div style="font-size:48px;min-height:auto;font-weight:bold;text-align:center;color: #5F5F5F;background-color: #E1E2F8;width: 130px;">
|
<div style="font-size:48px;min-height:auto;font-weight:bold;text-align:center;color: #5F5F5F;background-color: #E1E2F8;width: 130px;">
|
||||||
${object.get_interval(object.date,'day')}
|
${object.event_id.get_interval(object.event_id.date,'day')}
|
||||||
</div>
|
</div>
|
||||||
<div style='font-size:12px;text-align:center;font-weight:bold;color:#ffffff;background-color:#8a89ba'>${object.get_interval(object.date, 'month')}</div>
|
<div style='font-size:12px;text-align:center;font-weight:bold;color:#ffffff;background-color:#8a89ba'>${object.event_id.get_interval(object.event_id.date, 'month')}</div>
|
||||||
<div style="border-collapse:separate;color:#8a89ba;text-align:center;width: 128px;font-size:12px;border-bottom-right-radius:3px;font-weight:bold;border:1px solid;border-bottom-left-radius:3px;">${object.get_interval(object.date, 'time')}</div>
|
<div style="border-collapse:separate;color:#8a89ba;text-align:center;width: 128px;font-size:12px;border-bottom-right-radius:3px;font-weight:bold;border:1px solid;border-bottom-left-radius:3px;">${object.event_id.get_interval(object.event_id.date, 'time')}</div>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<table cellspacing="0" cellpadding="0" border="0" style="margin-top: 15px; margin-left: 10px;font-size: 16px;">
|
<table cellspacing="0" cellpadding="0" border="0" style="margin-top: 15px; margin-left: 10px;font-size: 16px;">
|
||||||
% if object.location:
|
% if object.event_id.location:
|
||||||
<tr style=" height: 30px;">
|
<tr style=" height: 30px;">
|
||||||
<td style="vertical-align:top;">
|
<td style="vertical-align:top;">
|
||||||
<div style="height: 25px; width: 120px; background : # CCCCCC; font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif;">
|
<div style="height: 25px; width: 120px; background : # CCCCCC; font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif;">
|
||||||
|
@ -271,14 +296,14 @@
|
||||||
</td>
|
</td>
|
||||||
<td colspan="1" style="vertical-align:top;">
|
<td colspan="1" style="vertical-align:top;">
|
||||||
<div style = "font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 14px" >
|
<div style = "font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 14px" >
|
||||||
: ${object.location}
|
: ${object.event_id.location}
|
||||||
<span style= "color:#A9A9A9; ">(<a href="http://maps.google.com/maps?oi=map&q=${object.location}">View Map</a>)
|
<span style= "color:#A9A9A9; ">(<a href="http://maps.google.com/maps?oi=map&q=${object.event_id.location}">View Map</a>)
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
% endif
|
% endif
|
||||||
% if object.description :
|
% if object.event_id.description :
|
||||||
<tr style=" height:auto;">
|
<tr style=" height:auto;">
|
||||||
<td style="vertical-align:top;">
|
<td style="vertical-align:top;">
|
||||||
<div style="height:auto; width: 120px; background : # CCCCCC; font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif;">
|
<div style="height:auto; width: 120px; background : # CCCCCC; font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif;">
|
||||||
|
@ -287,11 +312,25 @@
|
||||||
</td>
|
</td>
|
||||||
<td colspan="3" style="vertical-align:text-top;">
|
<td colspan="3" style="vertical-align:text-top;">
|
||||||
<div style="font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif;">
|
<div style="font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif;">
|
||||||
: ${object.description or ''}
|
: ${object.event_id.description}
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
% endif
|
% endif
|
||||||
|
% if not object.event_id.allday and object.event_id.duration:
|
||||||
|
<tr style=" height:auto;">
|
||||||
|
<td style="vertical-align:top;">
|
||||||
|
<div style="height:auto; width: 120px; background : # CCCCCC; font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif;">
|
||||||
|
Duration
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td colspan="3" style="vertical-align:text-top;">
|
||||||
|
<div style="font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif;">
|
||||||
|
: ${('%dH%02d' % (object.event_id.duration,(object.event_id.duration*60)%60))}
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
% endif
|
||||||
<tr style=" height: 30px;">
|
<tr style=" height: 30px;">
|
||||||
<td style="height: 25px;width: 120px; background : # CCCCCC; font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif;">
|
<td style="height: 25px;width: 120px; background : # CCCCCC; font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif;">
|
||||||
<div>
|
<div>
|
||||||
|
@ -299,13 +338,13 @@
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td colspan="3">
|
<td colspan="3">
|
||||||
: <div style='display:inline-block; border-radius: 50%; width:10px; height:10px;background:grey;'></div>
|
:
|
||||||
<span style="margin-left:5px">You</span>
|
% for attendee in object.event_id.attendee_ids:
|
||||||
|
<div style='display:inline-block; border-radius: 50%; width:10px; height:10px;background:${ctx["color"][attendee.state]};'></div>
|
||||||
% for attendee in object.attendee_ids:
|
% if attendee.cn != object.cn:
|
||||||
% if attendee.cn != ctx['att_obj'].cn:
|
<span style="margin-left:5px">${attendee.cn}</span>
|
||||||
<div style='display:inline-block; border-radius: 50%; width:10px; height:10px;background:${ctx['color'][attendee.state]};'></div>
|
% else:
|
||||||
<span style="margin-left:5px">${attendee.cn}</span>
|
<span style="margin-left:5px">You</span>
|
||||||
% endif
|
% endif
|
||||||
% endfor
|
% endfor
|
||||||
</td>
|
</td>
|
||||||
|
@ -315,55 +354,64 @@
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div style="height: auto;width:300px; margin:0 auto;padding-top:20px;">
|
<div style="height: auto;width:450px; margin:0 auto;padding-top:20px;padding-bottom:40px;">
|
||||||
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#8A89BA;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="${ctx['base_url']}/meeting_invitation/accept?db=${ctx['dbname']}&token=${ctx['att_obj'].access_token}&action=${ctx['action_id']}&id=${object.id}">Accept</a>
|
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#8A89BA;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="${ctx['base_url']}/meeting_invitation/accept?db=${ctx['dbname']}&token=${object.access_token}&action=${ctx['action_id']}&id=${object.event_id.id}">Accept</a>
|
||||||
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#808080;text-decoration: none;color:#FFFFFF;" href="${ctx['base_url']}/meeting_invitation/decline?db=${ctx['dbname']}&token=${ctx['att_obj'].access_token}&action=${ctx['action_id']}&id=${object.id}">Decline</a>
|
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#808080;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="${ctx['base_url']}/meeting_invitation/decline?db=${ctx['dbname']}&token=${object.access_token}&action=${ctx['action_id']}&id=${object.event_id.id}">Decline</a>
|
||||||
</div>
|
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#D8D8D8;text-decoration: none;color:#FFFFFF;" href="${ctx['base_url']}/meeting_invitation/view?db=${ctx['dbname']}&token=${object.access_token}&action=${ctx['action_id']}&id=${object.event_id.id}">View</a>
|
||||||
<div style="padding-top:10px;">
|
</div>
|
||||||
</br> Sent by ${object.user_id.name} from ${object.user_id.company_id.name}. View this meeting detail <a href="${ctx['base_url']}/meeting_invitation/view?db=${ctx['dbname']}&token=${ctx['att_obj'].access_token}&action=${ctx['action_id']}&id=${object.id}">directly in OpenERP.</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
]]></field>
|
]]>
|
||||||
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="crm_email_template_meeting_reminder" model="email.template">
|
<record id="crm_email_template_meeting_reminder" model="email.template">
|
||||||
<field name="name">Meeting Invitation</field>
|
<field name="name">Meeting Invitation</field>
|
||||||
<field name="email_from">${object.user_id.email or ''}</field>
|
<field name="email_from">${object.event_id.user_id.email or ''}</field>
|
||||||
<field name="subject">${object.name}</field>
|
<field name="subject">${object.event_id.name} - Reminder</field>
|
||||||
<field name="email_to" >${ctx['att_obj'].email}</field>
|
<field name="model_id" ref="base_calendar.model_calendar_attendee"/>
|
||||||
<field name="model_id" ref="base_calendar.model_crm_meeting"/>
|
|
||||||
|
|
||||||
|
<field name="email_to" >${('' if object.partner_id and object.partner_id.email and object.partner_id.email==object.email else object.email|safe)}</field>
|
||||||
|
<field name="partner_to">${object.partner_id and object.partner_id.email and object.partner_id.email==object.email and object.partner_id.id or False }</field>
|
||||||
<field name="auto_delete" eval="True"/>
|
<field name="auto_delete" eval="True"/>
|
||||||
|
|
||||||
<field name="body_html"><![CDATA[
|
<field name="body_html"><![CDATA[
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
|
||||||
<title>${object.name}</title>
|
<title>${object.event_id.name}</title>
|
||||||
|
<style>
|
||||||
|
span.oe_mail_footer_access {
|
||||||
|
display:block;
|
||||||
|
text-align:center;
|
||||||
|
color:grey;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div style="border-radius: 2px; max-width: 1200px; height: auto;margin-left: auto;margin-right: auto;background-color:#f9f9f9;">
|
<div style="border-radius: 2px; max-width: 1200px; height: auto;margin-left: auto;margin-right: auto;background-color:#f9f9f9;">
|
||||||
<div style="height:auto;text-align: center;font-size : 30px;color: #8A89BA;">
|
<div style="height:auto;text-align: center;font-size : 30px;color: #8A89BA;">
|
||||||
<strong>${object.name}</strong>
|
<strong>${object.event_id.name}</strong>
|
||||||
</div>
|
</div>
|
||||||
<div style="height: 50px;text-align: left;font-size : 14px;border-collapse: separate;margin-top:10px">
|
<div style="height: 50px;text-align: left;font-size : 14px;border-collapse: separate;margin-top:10px">
|
||||||
<strong style="margin-left:12px">Hello ${ctx['att_obj'].cn}</strong> ,<br/><p style="margin-left:12px">${object.user_id.partner_id.name} invited you for the ${object.name} meeting of ${object.user_id.company_id.name}.</p>
|
<strong style="margin-left:12px">Hello ${object.cn}</strong> ,<br/>
|
||||||
|
<p style="margin-left:12px">this it a rmeinder for the event below : </p>
|
||||||
</div>
|
</div>
|
||||||
<div style="height: auto;margin-left:12px;margin-top:30px;">
|
<div style="height: auto;margin-left:12px;margin-top:30px;">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<div style="border-top-left-radius:3px;border-top-right-radius:3px;font-size:12px;border-collapse:separate;text-align:center;font-weight:bold;color:#ffffff;width:130px;min-height: 18px;border-color:#ffffff;background:#8a89ba;padding-top: 4px;">${object.get_interval(object.date, 'dayname')}</div>
|
<div style="border-top-left-radius:3px;border-top-right-radius:3px;font-size:12px;border-collapse:separate;text-align:center;font-weight:bold;color:#ffffff;width:130px;min-height: 18px;border-color:#ffffff;background:#8a89ba;padding-top: 4px;">${object.event_id.get_interval(object.event_id.date, 'dayname')}</div>
|
||||||
<div style="font-size:48px;min-height:auto;font-weight:bold;text-align:center;color: #5F5F5F;background-color: #E1E2F8;width: 130px;">
|
<div style="font-size:48px;min-height:auto;font-weight:bold;text-align:center;color: #5F5F5F;background-color: #E1E2F8;width: 130px;">
|
||||||
${object.get_interval(object.date,'day')}
|
${object.event_id.get_interval(object.event_id.date,'day')}
|
||||||
</div>
|
</div>
|
||||||
<div style='font-size:12px;text-align:center;font-weight:bold;color:#ffffff;background-color:#8a89ba'>${object.get_interval(object.date, 'month')}</div>
|
<div style='font-size:12px;text-align:center;font-weight:bold;color:#ffffff;background-color:#8a89ba'>${object.event_id.get_interval(object.event_id.date, 'month')}</div>
|
||||||
<div style="border-collapse:separate;color:#8a89ba;text-align:center;width: 128px;font-size:12px;border-bottom-right-radius:3px;font-weight:bold;border:1px solid;border-bottom-left-radius:3px;">${object.get_interval(object.date, 'time')}</div>
|
<div style="border-collapse:separate;color:#8a89ba;text-align:center;width: 128px;font-size:12px;border-bottom-right-radius:3px;font-weight:bold;border:1px solid;border-bottom-left-radius:3px;">${object.event_id.get_interval(object.event_id.date, 'time')}</div>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<table cellspacing="0" cellpadding="0" border="0" style="margin-top: 15px; margin-left: 10px;font-size: 16px;">
|
<table cellspacing="0" cellpadding="0" border="0" style="margin-top: 15px; margin-left: 10px;font-size: 16px;">
|
||||||
% if object.location:
|
% if object.event_id.location:
|
||||||
<tr style=" height: 30px;">
|
<tr style=" height: 30px;">
|
||||||
<td style="vertical-align:top;">
|
<td style="vertical-align:top;">
|
||||||
<div style="height: 25px; width: 120px; background : # CCCCCC; font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif;">
|
<div style="height: 25px; width: 120px; background : # CCCCCC; font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif;">
|
||||||
|
@ -372,14 +420,14 @@
|
||||||
</td>
|
</td>
|
||||||
<td colspan="1" style="vertical-align:top;">
|
<td colspan="1" style="vertical-align:top;">
|
||||||
<div style = "font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 14px" >
|
<div style = "font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 14px" >
|
||||||
: ${object.location}
|
: ${object.event_id.location}
|
||||||
<span style= "color:#A9A9A9; ">(<a href="http://maps.google.com/maps?oi=map&q=${object.location}">View Map</a>)
|
<span style= "color:#A9A9A9; ">(<a href="http://maps.google.com/maps?oi=map&q=${object.event_id.location}">View Map</a>)
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
% endif
|
% endif
|
||||||
% if object.description :
|
% if object.event_id.description :
|
||||||
<tr style=" height:auto;">
|
<tr style=" height:auto;">
|
||||||
<td style="vertical-align:top;">
|
<td style="vertical-align:top;">
|
||||||
<div style="height:auto; width: 120px; background : # CCCCCC; font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif;">
|
<div style="height:auto; width: 120px; background : # CCCCCC; font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif;">
|
||||||
|
@ -388,11 +436,25 @@
|
||||||
</td>
|
</td>
|
||||||
<td colspan="3" style="vertical-align:text-top;">
|
<td colspan="3" style="vertical-align:text-top;">
|
||||||
<div style="font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif;">
|
<div style="font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif;">
|
||||||
: ${object.description or ''}
|
: ${object.event_id.description}
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
% endif
|
% endif
|
||||||
|
% if not object.event_id.allday and object.event_id.duration:
|
||||||
|
<tr style=" height:auto;">
|
||||||
|
<td style="vertical-align:top;">
|
||||||
|
<div style="height:auto; width: 120px; background : # CCCCCC; font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif;">
|
||||||
|
Duration
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td colspan="3" style="vertical-align:text-top;">
|
||||||
|
<div style="font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif;">
|
||||||
|
: ${('%dH%02d' % (object.event_id.duration,(object.event_id.duration*60)%60))}
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
% endif
|
||||||
<tr style=" height: 30px;">
|
<tr style=" height: 30px;">
|
||||||
<td style="height: 25px;width: 120px; background : # CCCCCC; font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif;">
|
<td style="height: 25px;width: 120px; background : # CCCCCC; font-family: Lucica Grande', Ubuntu, Arial, Verdana, sans-serif;">
|
||||||
<div>
|
<div>
|
||||||
|
@ -400,13 +462,13 @@
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td colspan="3">
|
<td colspan="3">
|
||||||
: <div style='display:inline-block; border-radius: 50%; width:10px; height:10px;background:grey;'></div>
|
:
|
||||||
<span style="margin-left:5px">You</span>
|
% for attendee in object.event_id.attendee_ids:
|
||||||
|
<div style='display:inline-block; border-radius: 50%; width:10px; height:10px;background:${ctx["color"][attendee.state]};'></div>
|
||||||
% for attendee in object.attendee_ids:
|
% if attendee.cn != object.cn:
|
||||||
% if attendee.cn != ctx['att_obj'].cn:
|
<span style="margin-left:5px">${attendee.cn}</span>
|
||||||
<div style='display:inline-block; border-radius: 50%; width:10px; height:10px;background:${ctx['color'][attendee.state]};'></div>
|
% else:
|
||||||
<span style="margin-left:5px">${attendee.cn}</span>
|
<span style="margin-left:5px">You</span>
|
||||||
% endif
|
% endif
|
||||||
% endfor
|
% endfor
|
||||||
</td>
|
</td>
|
||||||
|
@ -415,18 +477,13 @@
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div style="height: auto;width:300px; margin:0 auto;padding-top:20px;">
|
|
||||||
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#8A89BA;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="${ctx['base_url']}/meeting_invitation/accept?db=${ctx['dbname']}&token=${ctx['att_obj'].access_token}&action=${ctx['action_id']}&id=${object.id}">Accept</a>
|
|
||||||
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#808080;text-decoration: none;color:#FFFFFF;" href="${ctx['base_url']}/meeting_invitation/decline?db=${ctx['dbname']}&token=${ctx['att_obj'].access_token}&action=${ctx['action_id']}&id=${object.id}">Decline</a>
|
|
||||||
</div>
|
|
||||||
<div style="padding-top:10px;">
|
|
||||||
</br> Sent by ${object.user_id.name} from ${object.user_id.company_id.name}. View this meeting detail <a href="${ctx['base_url']}/meeting_invitation/view?db=${ctx['dbname']}&token=${ctx['att_obj'].access_token}&action=${ctx['action_id']}&id=${object.id}">directly in OpenERP.</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
]]></field>
|
]]>
|
||||||
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
</data>
|
</data>
|
||||||
</openerp>
|
</openerp>
|
||||||
|
|
|
@ -87,7 +87,7 @@
|
||||||
<menuitem id="menu_calendar_google_main" parent="base.menu_administration" name="Google Calendar"/>
|
<menuitem id="menu_calendar_google_main" parent="base.menu_administration" name="Google Calendar"/>
|
||||||
<menuitem id="menu_calendar_google_config" name="API credentials" parent="google_calendar.menu_calendar_google_main" action="action_config_settings_google_calendar"/>
|
<menuitem id="menu_calendar_google_config" name="API credentials" parent="google_calendar.menu_calendar_google_main" action="action_config_settings_google_calendar"/>
|
||||||
-->
|
-->
|
||||||
<menuitem id="menu_calendar_google_tech_config" name="Calendar" parent="base.menu_custom" groups="base.group_no_one" action="action_config_settings_google_calendar"/>
|
<menuitem id="menu_calendar_google_tech_config" name="API Credentials" parent="base_calendar.menu_calendar_configuration" groups="base.group_no_one" action="action_config_settings_google_calendar"/>
|
||||||
|
|
||||||
</data>
|
</data>
|
||||||
</openerp>
|
</openerp>
|
||||||
|
|
Loading…
Reference in New Issue