This commit addresses an issue in the email templates where event start days were being displayed incorrectly, particularly for events scheduled at specific times in timezones that experienced day shifts during UTC conversion. The previous implementation did not account for the necessary UTC conversion, leading to misaligned event days in the email content. This commit ensures that event start days are accurately calculated based on the appropriate timezone conversion, providing correct and consistent display of event information in the email templates. opw-3458837 closes odoo/odoo#131967 X-original-commit: 1e1781b6242b7b6be8d5a00b1c5270ae572b09b5 Signed-off-by: Arnaud Joset (arj) <arj@odoo.com> Signed-off-by: Pedram Bi Ria (pebr) <pebr@odoo.com>
483 lines
31 KiB
XML
483 lines
31 KiB
XML
<?xml version="1.0"?>
|
|
<odoo>
|
|
<data noupdate="1">
|
|
<record id="calendar_template_meeting_invitation" model="mail.template">
|
|
<field name="name">Calendar: Meeting Invitation</field>
|
|
<field name="model_id" ref="calendar.model_calendar_attendee"/>
|
|
<field name="subject">Invitation to {{ object.event_id.name }}</field>
|
|
<field name="email_from">{{ (object.event_id.user_id.email_formatted or user.email_formatted or '') }}</field>
|
|
<field name="email_to">{{ ('' if object.partner_id.email and object.partner_id.email == object.email else object.email) }}</field>
|
|
<field name="partner_to">{{ object.partner_id.id if object.partner_id.email and object.partner_id.email == object.email else False }}</field>
|
|
<field name="lang">{{ object.partner_id.lang }}</field>
|
|
<field name="description">Invitation email to new attendees</field>
|
|
<field name="body_html" type="html">
|
|
<div>
|
|
<t t-set="colors" t-value="{'needsAction': 'grey', 'accepted': 'green', 'tentative': '#FFFF00', 'declined': 'red'}"/>
|
|
<t t-set="is_online" t-value="'appointment_type_id' in object.event_id and object.event_id.appointment_type_id"/>
|
|
<t t-set="customer" t-value=" object.event_id.find_partner_customer()"/>
|
|
<t t-set="target_responsible" t-value="object.partner_id == object.event_id.partner_id"/>
|
|
<t t-set="target_customer" t-value="object.partner_id == customer"/>
|
|
<t t-set="recurrent" t-value="object.recurrence_id and not ctx.get('calendar_template_ignore_recurrence')"/>
|
|
|
|
<p>
|
|
Hello <t t-out="object.common_name or ''">Wood Corner</t>,<br/><br/>
|
|
|
|
<t t-if="is_online and target_customer">
|
|
Your appointment <strong t-out="object.event_id.appointment_type_id.name or ''">Schedule a Demo</strong> <t t-if="object.event_id.appointment_type_id.category != 'custom'"> with <t t-out="object.event_id.user_id.name or ''">Ready Mat</t></t> has been booked.
|
|
<t t-if="is_online and object.state != 'accepted' and object.event_id.appointment_type_id.resource_manual_confirmation">
|
|
You will receive a mail of confirmation with more details when your appointment will be confirmed.
|
|
</t>
|
|
</t>
|
|
<t t-elif="is_online and target_responsible">
|
|
<t t-if="customer">
|
|
<t t-out="customer.name or ''"></t> scheduled the following appointment <strong t-out="object.event_id.appointment_type_id.name or ''">Schedule a Demo</strong> with you.
|
|
</t>
|
|
<t t-else="">
|
|
Your appointment <strong t-out="object.event_id.appointment_type_id.name or ''">Schedule a Demo</strong> has been booked.
|
|
</t>
|
|
</t>
|
|
<t t-elif="not target_responsible">
|
|
<t t-out="object.event_id.user_id.partner_id.name or ''">Colleen Diaz</t> invited you for the <strong t-out="object.event_id.name or ''">Follow-up for Project proposal</strong> meeting.
|
|
</t>
|
|
<t t-else="">
|
|
Your meeting <strong t-out="object.event_id.name or ''">Follow-up for Project proposal</strong> has been booked.
|
|
</t>
|
|
|
|
</p>
|
|
<div style="text-align: center; padding: 16px 0px 16px 0px;">
|
|
<t t-if="not is_online or object.state != 'accepted'">
|
|
<a t-attf-href="/calendar/meeting/accept?token={{object.access_token}}&id={{object.event_id.id}}"
|
|
style="padding: 5px 10px; color: #FFFFFF; text-decoration: none; background-color: #875A7B; border: 1px solid #875A7B; border-radius: 3px">
|
|
Accept</a>
|
|
<a t-attf-href="/calendar/meeting/decline?token={{object.access_token}}&id={{object.event_id.id}}"
|
|
style="padding: 5px 10px; color: #FFFFFF; text-decoration: none; background-color: #875A7B; border: 1px solid #875A7B; border-radius: 3px">
|
|
Decline</a>
|
|
</t>
|
|
<a t-attf-href="/calendar/meeting/view?token={{object.access_token}}&id={{object.event_id.id}}"
|
|
style="padding: 5px 10px; color: #FFFFFF; text-decoration: none; background-color: #875A7B; border: 1px solid #875A7B; border-radius: 3px"
|
|
><t t-out="'Reschedule' if is_online and target_customer else 'View'">View</t></a>
|
|
</div>
|
|
<table border="0" cellpadding="0" cellspacing="0"><tr>
|
|
<td width="130px;" style="min-width: 130px;">
|
|
<div style="border-top-start-radius: 3px; border-top-end-radius: 3px; font-size: 12px; border-collapse: separate; text-align: center; font-weight: bold; color: #ffffff; min-height: 18px; background-color: #875A7B; border: 1px solid #875A7B;">
|
|
<t t-out="format_datetime(dt=object.event_id.start, tz=object.mail_tz if not object.event_id.allday else None, dt_format='EEEE', lang_code=object.env.lang) or ''">Tuesday</t>
|
|
</div>
|
|
<div style="font-size: 48px; min-height: auto; font-weight: bold; text-align: center; color: #5F5F5F; background-color: #F8F8F8; border: 1px solid #875A7B;">
|
|
<t t-out="format_datetime(dt=object.event_id.start, tz=object.mail_tz if not object.event_id.allday else None, dt_format='d', lang_code=object.env.lang) or ''">4</t>
|
|
</div>
|
|
<div style='font-size: 12px; text-align: center; font-weight: bold; color: #ffffff; background-color: #875A7B;'>
|
|
<t t-out="format_datetime(dt=object.event_id.start, tz=object.mail_tz if not object.event_id.allday else None, dt_format='MMMM y', lang_code=object.env.lang) or ''">May 2021</t>
|
|
</div>
|
|
<div style="border-collapse: separate; color: #5F5F5F; text-align: center; font-size: 12px; border-bottom-end-radius: 3px; font-weight: bold ; border: 1px solid #875A7B; border-bottom-start-radius: 3px;">
|
|
<t t-if="not object.event_id.allday">
|
|
<div>
|
|
<t t-out="format_time(time=object.event_id.start, tz=object.mail_tz, time_format='short', lang_code=object.env.lang) or ''">11:00 AM</t>
|
|
</div>
|
|
<t t-if="object.mail_tz">
|
|
<div style="font-size: 10px; font-weight: normal">
|
|
(<t t-out="object.mail_tz or ''">Europe/Brussels</t>)
|
|
</div>
|
|
</t>
|
|
</t>
|
|
</div>
|
|
</td>
|
|
<td width="20px;"/>
|
|
<td style="padding-top: 5px;">
|
|
<p><strong>Details of the event</strong></p>
|
|
<ul>
|
|
<t t-if="is_online">
|
|
<li>Appointment Type: <t t-out="object.event_id.appointment_type_id.name or ''">Schedule a Demo</t></li>
|
|
</t>
|
|
<t t-if="object.event_id.location">
|
|
<li>Location: <t t-out="object.event_id.location or ''">Bruxelles</t>
|
|
(<a target="_blank" t-attf-href="http://maps.google.com/maps?oi=map&q={{object.event_id.location}}">View Map</a>)
|
|
</li>
|
|
</t>
|
|
<t t-if="recurrent">
|
|
<li>When: <t t-out="object.recurrence_id.name or ''">Every 1 Weeks, for 3 events</t></li>
|
|
</t>
|
|
<t t-if="not object.event_id.allday and object.event_id.duration">
|
|
<li>Duration: <t t-out="('%dH%02d' % (object.event_id.duration,round(object.event_id.duration*60)%60)) or ''">0H30</t></li>
|
|
</t>
|
|
<li>Attendees
|
|
<ul>
|
|
<li t-foreach="object.event_id.attendee_ids" t-as="attendee">
|
|
<div t-attf-style="display: inline-block; border-radius: 50%; width: 10px; height: 10px; background:{{ colors.get(attendee.state) or 'white' }};"> </div>
|
|
<t t-if="attendee.common_name != object.common_name">
|
|
<span style="margin-left:5px" t-out="attendee.common_name or ''">Mitchell Admin</span>
|
|
</t>
|
|
<t t-else="">
|
|
<span style="margin-left:5px">You</span>
|
|
</t>
|
|
</li>
|
|
</ul></li>
|
|
<li t-if="is_online and object.event_id.appointment_type_id.resource_manage_capacity">
|
|
For: <t t-out="object.event_id.resource_total_capacity_reserved"/> people
|
|
</li>
|
|
<li t-if="is_online and object.event_id.appointment_type_id.assign_method != 'time_auto_assign'">
|
|
Resources
|
|
<ul>
|
|
<li t-foreach="object.event_id.appointment_resource_ids" t-as="resource">
|
|
<span style="margin-left:5px" t-out="resource.name or ''">Table 1</span>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<t t-if="object.event_id.videocall_location">
|
|
<li>
|
|
How to Join:
|
|
<t t-if="object.get_base_url() in object.event_id.videocall_location"> Join with Odoo Discuss</t>
|
|
<t t-else=""> Join at</t><br/>
|
|
<a t-att-href="object.event_id.videocall_location" target="_blank" t-out="object.event_id.videocall_location or ''">www.mycompany.com/calendar/join_videocall/xyz</a>
|
|
</li>
|
|
</t>
|
|
<t t-if="not is_html_empty(object.event_id.description)">
|
|
<li>Description of the event:
|
|
<t t-out="object.event_id.description">Internal meeting for discussion for new pricing for product and services.</t></li>
|
|
</t>
|
|
</ul>
|
|
</td>
|
|
</tr></table>
|
|
<br/>
|
|
Thank you,
|
|
<t t-if="object.event_id.user_id.signature">
|
|
<br />
|
|
<t t-out="object.event_id.user_id.signature or ''">--<br/>Mitchell Admin</t>
|
|
</t>
|
|
</div>
|
|
</field>
|
|
<field name="lang">{{ object.partner_id.lang }}</field>
|
|
<field name="auto_delete" eval="True"/>
|
|
</record>
|
|
|
|
<record id="calendar_template_meeting_changedate" model="mail.template">
|
|
<field name="name">Calendar: Date Updated</field>
|
|
<field name="model_id" ref="calendar.model_calendar_attendee"/>
|
|
<field name="subject">{{ object.event_id.name }}: Date updated</field>
|
|
<field name="email_from">{{ (object.event_id.user_id.email_formatted or user.email_formatted or '') }}</field>
|
|
<field name="email_to">{{ ('' if object.partner_id.email and object.partner_id.email == object.email else object.email) }}</field>
|
|
<field name="partner_to">{{ object.partner_id.id if object.partner_id.email and object.partner_id.email == object.email else False }}</field>
|
|
<field name="lang">{{ object.partner_id.lang }}</field>
|
|
<field name="description">Sent to all attendees if the schedule change</field>
|
|
<field name="body_html" type="html">
|
|
<div>
|
|
|
|
<t t-set="colors" t-value="{'needsAction': 'grey', 'accepted': 'green', 'tentative': '#FFFF00', 'declined': 'red'}"/>
|
|
<t t-set="is_online" t-value="'appointment_type_id' in object.event_id and object.event_id.appointment_type_id"/>
|
|
<t t-set="customer" t-value="object.event_id.find_partner_customer()"/>
|
|
<t t-set="target_responsible" t-value="object.partner_id == object.event_id.partner_id"/>
|
|
<t t-set="target_customer" t-value="object.partner_id == customer"/>
|
|
<t t-set="recurrent" t-value="object.recurrence_id and not ctx.get('calendar_template_ignore_recurrence')"/>
|
|
|
|
<p>
|
|
Hello <t t-out="object.common_name or ''">Ready Mat</t>,<br/><br/>
|
|
<t t-if="is_online and target_responsible">
|
|
<t t-if="customer">
|
|
The date of your appointment with <t t-out="customer.name or ''">Jesse Brown</t> has been updated.
|
|
</t>
|
|
<t t-else="">
|
|
Your appointment has been updated.
|
|
</t>
|
|
The appointment <strong t-out="object.event_id.appointment_type_id.name or ''">Schedule a Demo</strong> is now scheduled for
|
|
<t t-out="object.event_id.get_display_time_tz(tz=object.partner_id.tz) or ''">05/04/2021 at (11:00:00 To 11:30:00) (Europe/Brussels)</t>
|
|
</t>
|
|
<t t-elif="is_online and target_customer">
|
|
The date of your appointment with <t t-out="object.event_id.user_id.partner_id.name or ''">Colleen Diaz</t> has been updated.
|
|
The appointment <strong t-out="object.event_id.appointment_type_id.name or ''"></strong> is now scheduled for
|
|
<t t-out="object.event_id.get_display_time_tz(tz=object.partner_id.tz) or ''">05/04/2021 at (11:00:00 To 11:30:00) (Europe/Brussels)</t>.
|
|
</t>
|
|
<t t-else="">
|
|
The date of the meeting has been updated.
|
|
The meeting <strong t-out="object.event_id.name or ''">Follow-up for Project proposal</strong> created by <t t-out="object.event_id.user_id.partner_id.name or ''">Colleen Diaz</t> is now scheduled for
|
|
<t t-out="object.event_id.get_display_time_tz(tz=object.partner_id.tz) or ''">05/04/2021 at (11:00:00 To 11:30:00) (Europe/Brussels)</t>.
|
|
</t>
|
|
</p>
|
|
<div style="text-align: center; padding: 16px 0px 16px 0px;">
|
|
<a t-attf-href="/calendar/meeting/accept?token={{ object.access_token }}&id={{ object.event_id.id }}"
|
|
style="padding: 5px 10px; color: #FFFFFF; text-decoration: none; background-color: #875A7B; border: 1px solid #875A7B; border-radius: 3px">
|
|
Accept</a>
|
|
<a t-attf-href="/calendar/meeting/decline?token={{ object.access_token }}&id={{ object.event_id.id }}"
|
|
style="padding: 5px 10px; color: #FFFFFF; text-decoration: none; background-color: #875A7B; border: 1px solid #875A7B; border-radius: 3px">
|
|
Decline</a>
|
|
<a t-attf-href="/calendar/meeting/view?token={{ object.access_token }}&id={{ object.event_id.id }}"
|
|
style="padding: 5px 10px; color: #FFFFFF; text-decoration: none; background-color: #875A7B; border: 1px solid #875A7B; border-radius: 3px">
|
|
View</a>
|
|
</div>
|
|
<table border="0" cellpadding="0" cellspacing="0"><tr>
|
|
<td width="130px;" style="min-width: 130px;">
|
|
<div style="border-top-start-radius: 3px; border-top-end-radius: 3px; font-size: 12px; border-collapse: separate; text-align: center; font-weight: bold; color: #ffffff; min-height: 18px; background-color: #875A7B; border: 1px solid #875A7B;">
|
|
<t t-out='format_datetime(dt=object.event_id.start, tz=object.mail_tz if not object.event_id.allday else None, dt_format="EEEE", lang_code=object.env.lang) or ""'>Tuesday</t>
|
|
</div>
|
|
<div style="font-size: 48px; min-height: auto; font-weight: bold; text-align: center; color: #5F5F5F; background-color: #F8F8F8; border: 1px solid #875A7B;">
|
|
<t t-out="format_datetime(dt=object.event_id.start, tz=object.mail_tz if not object.event_id.allday else None, dt_format='d', lang_code=object.env.lang) or ''">4</t>
|
|
</div>
|
|
<div style='font-size: 12px; text-align: center; font-weight: bold; color: #ffffff; background-color: #875A7B;'>
|
|
<t t-out='format_datetime(dt=object.event_id.start, tz=object.mail_tz if not object.event_id.allday else None, dt_format="MMMM y", lang_code=object.env.lang) or ""'>May 2021</t>
|
|
</div>
|
|
<div style="border-collapse: separate; color: #5F5F5F; text-align: center; font-size: 12px; border-bottom-end-radius: 3px; font-weight: bold; border: 1px solid #875A7B; border-bottom-start-radius: 3px;">
|
|
<t t-if="not object.event_id.allday">
|
|
<div>
|
|
<t t-out='format_time(time=object.event_id.start, tz=object.mail_tz, time_format="short", lang_code=object.env.lang) or ""'>11:00 AM</t>
|
|
</div>
|
|
<t t-if="object.mail_tz">
|
|
<div style="font-size: 10px; font-weight: normal">
|
|
(<t t-out="object.mail_tz or ''">Europe/Brussels</t>)
|
|
</div>
|
|
</t>
|
|
</t>
|
|
</div>
|
|
</td>
|
|
<td width="20px;"/>
|
|
<td style="padding-top: 5px;">
|
|
<p><strong>Details of the event</strong></p>
|
|
<ul>
|
|
<t t-if="object.event_id.location">
|
|
<li>Location: <t t-out="object.event_id.location or ''">Bruxelles</t>
|
|
(<a target="_blank" t-attf-href="http://maps.google.com/maps?oi=map&q={{ object.event_id.location }}">View Map</a>)
|
|
</li>
|
|
</t>
|
|
<t t-if="recurrent">
|
|
<li>When: <t t-out="object.recurrence_id.name or ''">Every 1 Weeks, for 3 events</t></li>
|
|
</t>
|
|
<t t-if="not object.event_id.allday and object.event_id.duration">
|
|
<li>Duration: <t t-out="('%dH%02d' % (object.event_id.duration,round(object.event_id.duration*60)%60)) or ''">0H30</t></li>
|
|
</t>
|
|
<li>Attendees
|
|
<ul>
|
|
<li t-foreach="object.event_id.attendee_ids" t-as="attendee">
|
|
<div t-attf-style="display: inline-block; border-radius: 50%; width: 10px; height: 10px; background: {{ colors.get(attendee.state) or 'white' }};"> </div>
|
|
<t t-if="attendee.common_name != object.common_name">
|
|
<span style="margin-left:5px" t-out="attendee.common_name or ''">Mitchell Admin</span>
|
|
</t>
|
|
<t t-else="">
|
|
<span style="margin-left:5px">You</span>
|
|
</t>
|
|
</li>
|
|
</ul></li>
|
|
<t t-if="object.event_id.videocall_location">
|
|
<li>
|
|
How to Join:
|
|
<t t-if="object.get_base_url() in object.event_id.videocall_location"> Join with Odoo Discuss</t>
|
|
<t t-else=""> Join at</t><br/>
|
|
<a t-att-href="object.event_id.videocall_location" target="_blank" t-out="object.event_id.videocall_location or ''">www.mycompany.com/calendar/join_videocall/xyz</a>
|
|
</li>
|
|
</t>
|
|
<t t-if="not is_html_empty(object.event_id.description)">
|
|
<li>Description of the event:
|
|
<t t-out="object.event_id.description">Internal meeting for discussion for new pricing for product and services.</t></li>
|
|
</t>
|
|
</ul>
|
|
</td>
|
|
</tr></table>
|
|
<br/>
|
|
Thank you,
|
|
<t t-if="object.event_id.user_id.signature">
|
|
<br />
|
|
<t t-out="object.event_id.user_id.signature or ''">--<br/>Mitchell Admin</t>
|
|
</t>
|
|
</div>
|
|
</field>
|
|
<field name="lang">{{ object.partner_id.lang }}</field>
|
|
<field name="auto_delete" eval="True"/>
|
|
</record>
|
|
|
|
<record id="calendar_template_meeting_reminder" model="mail.template">
|
|
<field name="name">Calendar: Reminder</field>
|
|
<field name="model_id" ref="calendar.model_calendar_attendee"/>
|
|
<field name="subject">{{ object.event_id.name }} - Reminder</field>
|
|
<field name="email_from">{{ (object.event_id.user_id.email_formatted or user.email_formatted or '') }}</field>
|
|
<field name="email_to">{{ ('' if object.partner_id.email and object.partner_id.email == object.email else object.email) }}</field>
|
|
<field name="partner_to">{{ object.partner_id.id if object.partner_id.email and object.partner_id.email == object.email else False }}</field>
|
|
<field name="lang">{{ object.partner_id.lang }}</field>
|
|
<field name="description">Sent to all attendees if a reminder is set</field>
|
|
<field name="body_html" type="html">
|
|
<div>
|
|
<t t-set="colors" t-value="{'needsAction': 'grey', 'accepted': 'green', 'tentative': '#FFFF00', 'declined': 'red'}" />
|
|
<t t-set="is_online" t-value="'appointment_type_id' in object.event_id and object.event_id.appointment_type_id" />
|
|
<t t-set="recurrent" t-value="object.recurrence_id and not ctx.get('calendar_template_ignore_recurrence')" />
|
|
<p>
|
|
Hello <t t-out="object.common_name or ''">Gemini Furniture</t>,<br/><br/>
|
|
This is a reminder for the below event:
|
|
</p>
|
|
<div style="text-align: center; padding: 16px 0px 16px 0px;">
|
|
<a t-attf-href="/calendar/{{ 'recurrence' if recurrent else 'meeting' }}/accept?token={{ object.access_token }}&id={{ object.event_id.id }}"
|
|
style="padding: 5px 10px; color: #FFFFFF; text-decoration: none; background-color: #875A7B; border: 1px solid #875A7B; border-radius: 3px">
|
|
Accept</a>
|
|
<a t-attf-href="/calendar/{{ 'recurrence' if recurrent else 'meeting' }}/decline?token={{ object.access_token }}&id={{ object.event_id.id }}"
|
|
style="padding: 5px 10px; color: #FFFFFF; text-decoration: none; background-color: #875A7B; border: 1px solid #875A7B; border-radius: 3px">
|
|
Decline</a>
|
|
<a t-attf-href="/calendar/meeting/view?token={{ object.access_token }}&id={{ object.event_id.id }}"
|
|
style="padding: 5px 10px; color: #FFFFFF; text-decoration: none; background-color: #875A7B; border: 1px solid #875A7B; border-radius: 3px">
|
|
View</a>
|
|
</div>
|
|
<table border="0" cellpadding="0" cellspacing="0"><tr>
|
|
<td width="130px;" style="min-width: 130px;">
|
|
<div style="border-top-start-radius: 3px; border-top-end-radius: 3px; font-size: 12px; border-collapse: separate; text-align: center; font-weight: bold; color: #ffffff; min-height: 18px; background-color: #875A7B; border: 1px solid #875A7B;">
|
|
<t t-out='format_datetime(dt=object.event_id.start, tz=object.mail_tz if not object.event_id.allday else None, dt_format="EEEE", lang_code=object.env.lang) or ""'>Tuesday</t>
|
|
</div>
|
|
<div style="font-size: 48px; min-height: auto; font-weight: bold; text-align: center; color: #5F5F5F; background-color: #F8F8F8; border: 1px solid #875A7B;">
|
|
<t t-out="format_datetime(dt=object.event_id.start, tz=object.mail_tz if not object.event_id.allday else None, dt_format='d', lang_code=object.env.lang) or ''">4</t>
|
|
</div>
|
|
<div style='font-size: 12px; text-align: center; font-weight: bold; color: #ffffff; background-color: #875A7B;'>
|
|
<t t-out='format_datetime(dt=object.event_id.start, tz=object.mail_tz if not object.event_id.allday else None, dt_format="MMMM y", lang_code=object.env.lang) or ""'>May 2021</t>
|
|
</div>
|
|
<div style="border-collapse: separate; color: #5F5F5F; text-align: center; font-size: 12px; border-bottom-end-radius: 3px; font-weight: bold; border: 1px solid #875A7B; border-bottom-start-radius: 3px;">
|
|
<t t-if="not object.event_id.allday">
|
|
<div>
|
|
<t t-out='format_time(time=object.event_id.start, tz=object.mail_tz, time_format="short", lang_code=object.env.lang) or ""'>11:00 AM</t>
|
|
</div>
|
|
<t t-if="object.mail_tz">
|
|
<div style="font-size: 10px; font-weight: normal">
|
|
(<t t-out="object.mail_tz or ''">Europe/Brussels</t>)
|
|
</div>
|
|
</t>
|
|
</t>
|
|
</div>
|
|
</td>
|
|
<td width="20px;"/>
|
|
<td style="padding-top: 5px;">
|
|
<p><strong>Details of the event</strong></p>
|
|
<ul>
|
|
<t t-if="object.event_id.location">
|
|
<li>Location: <t t-out="object.event_id.location or ''">Bruxelles</t>
|
|
(<a target="_blank" t-attf-href="http://maps.google.com/maps?oi=map&q={{ object.event_id.location }}">View Map</a>)
|
|
</li>
|
|
</t>
|
|
<t t-if="recurrent">
|
|
<li>When: <t t-out="object.recurrence_id.name or ''">Every 1 Weeks, for 3 events</t></li>
|
|
</t>
|
|
<t t-if="not object.event_id.allday and object.event_id.duration">
|
|
<li>Duration: <t t-out="('%dH%02d' % (object.event_id.duration,round(object.event_id.duration*60)%60)) or ''">0H30</t></li>
|
|
</t>
|
|
<li>Attendees
|
|
<ul>
|
|
<li t-foreach="object.event_id.attendee_ids" t-as="attendee">
|
|
<div t-attf-style="display: inline-block; border-radius: 50%; width: 10px; height: 10px; background:{{ colors.get(attendee.state) or 'white' }};"> </div>
|
|
<t t-if="attendee.common_name != object.common_name">
|
|
<span style="margin-left:5px" t-out="attendee.common_name or ''">Mitchell Admin</span>
|
|
</t>
|
|
<t t-else="">
|
|
<span style="margin-left:5px">You</span>
|
|
</t>
|
|
</li>
|
|
</ul></li>
|
|
<t t-if="object.event_id.videocall_location">
|
|
<li>
|
|
How to Join:
|
|
<t t-if="object.get_base_url() in object.event_id.videocall_location"> Join with Odoo Discuss</t>
|
|
<t t-else=""> Join at</t><br/>
|
|
<a t-att-href="object.event_id.videocall_location" target="_blank" t-out="object.event_id.videocall_location or ''">www.mycompany.com/calendar/join_videocall/xyz</a>
|
|
</li>
|
|
</t>
|
|
<t t-if="not is_html_empty(object.event_id.description)">
|
|
<li>Description of the event:
|
|
<t t-out="object.event_id.description">Internal meeting for discussion for new pricing for product and services.</t></li>
|
|
</t>
|
|
</ul>
|
|
</td>
|
|
</tr></table>
|
|
<br/>
|
|
Thank you,
|
|
<t t-if="object.event_id.user_id.signature">
|
|
<br />
|
|
<t t-out="object.event_id.user_id.signature or ''">--<br/>Mitchell Admin</t>
|
|
</t>
|
|
</div>
|
|
</field>
|
|
<field name="lang">{{ object.partner_id.lang }}</field>
|
|
<field name="auto_delete" eval="True"/>
|
|
</record>
|
|
|
|
<record id="calendar_template_meeting_update" model="mail.template">
|
|
<field name="name">Calendar: Event Update</field>
|
|
<field name="model_id" ref="calendar.model_calendar_event"/>
|
|
<field name="subject">{{object.name}}: Event update</field>
|
|
<field name="email_from">{{ (object.user_id.email_formatted or user.email_formatted or '') }}</field>
|
|
<field name="email_to">{{ object._get_attendee_emails() }}</field>
|
|
<field name="lang">{{ object.partner_id.lang }}</field>
|
|
<field name="description">Used to manually notifiy attendees</field>
|
|
<field name="body_html" type="html">
|
|
<div>
|
|
<t t-set="colors" t-value="{'needsAction': 'grey', 'accepted': 'green', 'tentative': '#FFFF00', 'declined': 'red'}" />
|
|
<t t-set="is_online" t-value="'appointment_type_id' in object and object.appointment_type_id" />
|
|
<t t-set="target_responsible" t-value="object.partner_id == object.partner_id" />
|
|
<t t-set="target_customer" t-value="object.partner_id == customer" />
|
|
<t t-set="recurrent" t-value="object.recurrence_id and not ctx.get('calendar_template_ignore_recurrence')" />
|
|
<t t-set="mail_tz" t-value="object._get_mail_tz() or ctx.get('mail_tz')" />
|
|
<div>
|
|
<table border="0" cellpadding="0" cellspacing="0">
|
|
<tr>
|
|
<td width="130px;" style="min-width: 130px;">
|
|
<div style="border-top-start-radius: 3px; border-top-end-radius: 3px; font-size: 12px; border-collapse: separate; text-align: center; font-weight: bold; color: #ffffff; min-height: 18px; background-color: #875A7B; border: 1px solid #875A7B;">
|
|
<t t-out="format_datetime(dt=object.start, tz=mail_tz if not object.allday else None, dt_format='EEEE', lang_code=object.env.lang) ">Tuesday</t>
|
|
</div>
|
|
<div style="font-size: 48px; min-height: auto; font-weight: bold; text-align: center; color: #5F5F5F; background-color: #F8F8F8; border: 1px solid #875A7B;">
|
|
<t t-out="format_datetime(dt=object.start, tz=mail_tz if not object.allday else None, dt_format='d', lang_code=object.env.lang)">4</t>
|
|
</div>
|
|
<div style='font-size: 12px; text-align: center; font-weight: bold; color: #ffffff; background-color: #875A7B;'>
|
|
<t t-out="format_datetime(dt=object.start, tz=mail_tz if not object.allday else None, dt_format='MMMM y', lang_code=object.env.lang)">May 2021</t>
|
|
</div>
|
|
<div style="border-collapse: separate; color: #5F5F5F; text-align: center; font-size: 12px; border-bottom-end-radius: 3px; font-weight: bold; border: 1px solid #875A7B; border-bottom-start-radius: 3px;">
|
|
<t t-if="not object.allday">
|
|
<div>
|
|
<t t-out="format_time(time=object.start, tz=mail_tz, time_format='short', lang_code=object.env.lang)">11:00 AM</t>
|
|
</div>
|
|
<t t-if="mail_tz">
|
|
<div style="font-size: 10px; font-weight: normal">
|
|
(<t t-out="mail_tz"> Europe/Brussels</t>)
|
|
</div>
|
|
</t>
|
|
</t>
|
|
</div>
|
|
</td>
|
|
<td width="20px;"/>
|
|
<td style="padding-top: 5px;">
|
|
<p>
|
|
<strong>Details of the event</strong>
|
|
</p>
|
|
<ul>
|
|
<t t-if="not is_html_empty(object.description)">
|
|
<li>Description:
|
|
<t t-out="object.description">Internal meeting for discussion for new pricing for product and services.</t></li>
|
|
</t>
|
|
<t t-if="object.videocall_location">
|
|
<li>
|
|
How to Join:
|
|
<t t-if="object.get_base_url() in object.videocall_location"> Join with Odoo Discuss</t>
|
|
<t t-else=""> Join at</t><br/>
|
|
<a t-att-href="object.videocall_location" target="_blank" t-out="object.videocall_location or ''">www.mycompany.com/calendar/join_videocall/xyz</a>
|
|
</li>
|
|
</t>
|
|
<t t-if="object.location">
|
|
<li>Location: <t t-out="object.location or ''">Bruxelles</t>
|
|
(<a target="_blank"
|
|
t-attf-href="http://maps.google.com/maps?oi=map&q={{object.location}}">View Map</a>)
|
|
</li>
|
|
</t>
|
|
<t t-if="recurrent">
|
|
<li>When: <t t-out="object.recurrence_id.name or ''">Every 1 Weeks, for 3 events</t></li>
|
|
</t>
|
|
<t t-if="not object.allday and object.duration">
|
|
<li>Duration:
|
|
<t t-out="('%dH%02d' % (object.duration,round(object.duration*60)%60))">0H30</t>
|
|
</li>
|
|
</t>
|
|
</ul>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="user_input">
|
|
<hr/>
|
|
<p placeholder="Enter your message here"><br/></p>
|
|
|
|
</div>
|
|
<t t-if="object.user_id.signature">
|
|
<br />
|
|
<t t-out="object.user_id.signature or ''">--<br/>Mitchell Admin</t>
|
|
</t>
|
|
</div>
|
|
</field>
|
|
</record>
|
|
</data>
|
|
</odoo>
|