diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/calendar/data | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/calendar/data')
| -rw-r--r-- | addons/calendar/data/calendar_cron.xml | 18 | ||||
| -rw-r--r-- | addons/calendar/data/calendar_data.xml | 53 | ||||
| -rw-r--r-- | addons/calendar/data/calendar_demo.xml | 125 | ||||
| -rw-r--r-- | addons/calendar/data/mail_activity_data.xml | 8 | ||||
| -rw-r--r-- | addons/calendar/data/mail_data.xml | 275 |
5 files changed, 479 insertions, 0 deletions
diff --git a/addons/calendar/data/calendar_cron.xml b/addons/calendar/data/calendar_cron.xml new file mode 100644 index 00000000..f195dce4 --- /dev/null +++ b/addons/calendar/data/calendar_cron.xml @@ -0,0 +1,18 @@ +<?xml version="1.0"?> +<odoo> + <data noupdate="1"> + <!-- Scheduler for Event Alarm--> + <record forcecreate="True" id="ir_cron_scheduler_alarm" model="ir.cron"> + <field name="name">Calendar: Event Reminder</field> + <field name="model_id" ref="model_calendar_alarm_manager"/> + <field name="state">code</field> + <field name="code">model.get_next_mail()</field> + <field eval="False" name="active" /> + <field name="user_id" ref="base.user_root" /> + <field name="interval_number">30</field> + <field name="interval_type">minutes</field> + <field name="numbercall">-1</field> + <field eval="False" name="doall" /> + </record> + </data> +</odoo>
\ No newline at end of file diff --git a/addons/calendar/data/calendar_data.xml b/addons/calendar/data/calendar_data.xml new file mode 100644 index 00000000..5c9d3daf --- /dev/null +++ b/addons/calendar/data/calendar_data.xml @@ -0,0 +1,53 @@ +<?xml version="1.0"?> +<odoo> + <data noupdate="1"> + <record id="calendar.subtype_invitation" model="mail.message.subtype"> + <field name="name">Invitation</field> + <field name="res_model">calendar.event</field> + <field name="description" eval="False"/> + <field name="default" eval="False"/> + </record> + <record id="alarm_notif_1" model="calendar.alarm"> + <field name="name">Notification - 15 Minutes</field> + <field name="duration" eval="15" /> + <field name="interval">minutes</field> + <field name="alarm_type">notification</field> + </record> + <record id="alarm_notif_2" model="calendar.alarm"> + <field name="name">Notification - 30 Minutes</field> + <field name="duration" eval="30" /> + <field name="interval">minutes</field> + <field name="alarm_type">notification</field> + </record> + <record id="alarm_notif_3" model="calendar.alarm"> + <field name="name">Notification - 1 Hours</field> + <field name="duration" eval="1" /> + <field name="interval">hours</field> + <field name="alarm_type">notification</field> + </record> + <record id="alarm_notif_4" model="calendar.alarm"> + <field name="name">Notification - 2 Hours</field> + <field name="duration" eval="2" /> + <field name="interval">hours</field> + <field name="alarm_type">notification</field> + </record> + <record id="alarm_notif_5" model="calendar.alarm"> + <field name="name">Notification - 1 Days</field> + <field name="duration" eval="1" /> + <field name="interval">days</field> + <field name="alarm_type">notification</field> + </record> + <record id="alarm_mail_1" model="calendar.alarm"> + <field name="name">Email - 3 Hours</field> + <field name="duration" eval="3" /> + <field name="interval">hours</field> + <field name="alarm_type">email</field> + </record> + <record id="alarm_mail_2" model="calendar.alarm"> + <field name="name">Email - 6 Hours</field> + <field name="duration" eval="6" /> + <field name="interval">hours</field> + <field name="alarm_type">email</field> + </record> + </data> +</odoo>
\ No newline at end of file diff --git a/addons/calendar/data/calendar_demo.xml b/addons/calendar/data/calendar_demo.xml new file mode 100644 index 00000000..b6fd1077 --- /dev/null +++ b/addons/calendar/data/calendar_demo.xml @@ -0,0 +1,125 @@ +<?xml version="1.0"?> +<odoo> + <data noupdate="1"> + + <record id="cal_contact_1" model="calendar.contacts"> + <field name="active" eval="True"/> + <field name="user_id" ref="base.user_admin"/> + <field name="partner_id" ref="base.res_partner_1"/> + </record> + + <record id="cal_contact_2" model="calendar.contacts"> + <field name="active" eval="True"/> + <field name="user_id" ref="base.user_admin"/> + <field name="partner_id" ref="base.partner_demo"/> + </record> + + <record id="categ_meet1" model="calendar.event.type"> + <field name="name">Customer Meeting</field> + </record> + + <record id="categ_meet2" model="calendar.event.type"> + <field name="name">Internal Meeting</field> + </record> + + <record id="categ_meet3" model="calendar.event.type"> + <field name="name">Off-site Meeting</field> + </record> + + <record id="categ_meet4" model="calendar.event.type"> + <field name="name">Open Discussion</field> + </record> + + <record id="categ_meet5" model="calendar.event.type"> + <field name="name">Feedback Meeting</field> + </record> + + <record id="calendar_event_1" model="calendar.event"> + <field name="active" eval="True"/> + <field name="user_id" ref="base.user_admin"/> + <field name="partner_ids" eval="[(6,0,[ref('base.res_partner_1')])]"/> + <field name="name">Follow-up for Project proposal</field> + <field name="description">Meeting to discuss project plan and hash out the details of implementation.</field> + <field name="start" eval="time.strftime('%Y-%m-03 10:20:00')"/> + <field name="categ_ids" eval="[(6,0,[ref('categ_meet1')])]"/> + <field name="stop" eval="time.strftime('%Y-%m-03 16:30:00')"/> + <field name="duration" eval="6.3"/> + <field name="allday" eval="False"/> + </record> + + <record id="calendar_event_2" model="calendar.event"> + <field name="active" eval="True"/> + <field name="user_id" ref="base.user_demo"/> + <field name="partner_ids" eval="[(6,0,[ref('base.partner_root'),ref('base.res_partner_4'),ref('base.res_partner_3')])]"/> + <field name="name">Initial discussion</field> + <field name="description">Discussion with partner for product.</field> + <field name="categ_ids" eval="[(6,0,[ref('categ_meet3')])]"/> + <field name="start" eval="time.strftime('%Y-%m-05 12:00:00')"/> + <field name="stop" eval="time.strftime('%Y-%m-05 19:00:00')"/> + <field name="allday" eval="False"/> + <field name="duration" eval="7.0"/> + </record> + + <record id="calendar_event_3" model="calendar.event"> + <field name="active" eval="True"/> + <field name="partner_ids" eval="[(6,0,[ref('base.partner_admin')])]"/> + <field name="user_id" ref="base.user_admin"/> + <field name="name">Pricing Discussion</field> + <field name="description">Internal meeting for discussion for new pricing for product and services.</field> + <field name="categ_ids" eval="[(6,0,[ref('categ_meet1'), ref('categ_meet2')])]"/> + <field name="start" eval="time.strftime('%Y-%m-12 15:55:05')"/> + <field name="stop" eval="time.strftime('%Y-%m-12 18:55:05')"/> + <field name="duration" eval="3.0"/> + <field name="allday" eval="False"/> + </record> + + <record id="calendar_event_4" model="calendar.event"> + <field name="active" eval="True"/> + <field name="user_id" ref="base.user_demo"/> + <field name="partner_ids" eval="[(6,0,[ref('base.partner_demo'),ref('base.res_partner_1')])]"/> + <field name="name">Requirements review</field> + <field name="categ_ids" eval="[(6,0,[ref('categ_meet3')])]"/> + <field name="start" eval="time.strftime('%Y-%m-20 08:00:00')"/> + <field name="stop" eval="time.strftime('%Y-%m-20 10:30:00')"/> + <field name="duration" eval="2.5"/> + <field name="allday" eval="False"/> + </record> + + <record id="calendar_event_5" model="calendar.event"> + <field name="active" eval="True"/> + <field name="partner_ids" eval="[(6,0,[ref('base.partner_admin'),ref('base.res_partner_12')])]"/> + <field name="user_id" ref="base.user_admin"/> + <field name="name">Changes in Designing</field> + <field name="categ_ids" eval="[(6,0,[ref('categ_meet1')])]"/> + <field name="start" eval="time.strftime('%Y-%m-22')"/> + <field name="stop" eval="time.strftime('%Y-%m-22')"/> + <field name="allday" eval="True"/> + </record> + + <record id="calendar_event_6" model="calendar.event"> + <field name="active" eval="True"/> + <field name="user_id" ref="base.user_demo"/> + <field name="partner_ids" eval="[(6,0,[ref('base.partner_root'),ref('base.res_partner_4'),ref('base.res_partner_1'),ref('base.res_partner_12')])]"/> + <field name="name">Presentation for new Services</field> + <field name="categ_ids" eval="[(6,0,[ref('categ_meet1'), ref('categ_meet2')])]"/> + <field name="start" eval="time.strftime('%Y-%m-18 02:00:00')"/> + <field name="stop" eval="time.strftime('%Y-%m-18 10:30:00')"/> + <field name="duration" eval="8.5"/> + <field name="allday" eval="False"/> + </record> + + <record id="calendar_event_7" model="calendar.event"> + <field name="active" eval="True"/> + <field name="user_id" ref="base.user_demo"/> + <field name="partner_ids" eval="[(6,0,[ref('base.res_partner_4')])]"/> + <field name="name">Presentation of the new Calendar</field> + <field name="categ_ids" eval="[(6,0,[ref('categ_meet1'), ref('categ_meet2')])]"/> + <field name="start" eval="time.strftime('%Y-%m-16')"/> + <field name="stop" eval="time.strftime('%Y-%m-16')"/> + <field name="duration" eval="8.5"/> + <field name="allday" eval="True"/> + </record> + + + </data> +</odoo> diff --git a/addons/calendar/data/mail_activity_data.xml b/addons/calendar/data/mail_activity_data.xml new file mode 100644 index 00000000..a008269f --- /dev/null +++ b/addons/calendar/data/mail_activity_data.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <data noupdate="1"> + <record id="mail.mail_activity_data_meeting" model="mail.activity.type"> + <field name="category">meeting</field> + </record> + </data> +</odoo> diff --git a/addons/calendar/data/mail_data.xml b/addons/calendar/data/mail_data.xml new file mode 100644 index 00000000..64b89533 --- /dev/null +++ b/addons/calendar/data/mail_data.xml @@ -0,0 +1,275 @@ +<?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 '') | safe}</field> + <field name="email_to">${('' if object.partner_id.email and object.partner_id.email == object.email else object.email) | safe}</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="body_html" type="html"> +<div> + % set colors = ctx.get('colors', {}) + % set recurrent = object.recurrence_id and not ctx['ignore_recurrence'] + <p> + Hello ${object.common_name},<br/><br/> + ${object.event_id.user_id.partner_id.name} invited you to the ${object.event_id.name} meeting of ${object.event_id.user_id.company_id.name}. + </p> + <div style="text-align: center; margin: 16px 0px 16px 0px;"> + % set target = 'recurrence' if recurrent else 'meeting' + <a href="/calendar/${target}/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 href="/calendar/${target}/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 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> + % if not recurrent: + <td width="130px;"> + <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; min-height: 18px; background-color: #875A7B; border: 1px solid #875A7B;"> + ${object.event_id.get_interval('dayname', tz=object.partner_id.tz if not object.event_id.allday else None)} + </div> + <div style="font-size: 48px; min-height: auto; font-weight: bold; text-align: center; color: #5F5F5F; background-color: #F8F8F8; border: 1px solid #875A7B;"> + ${object.event_id.get_interval('day', tz=object.partner_id.tz if not object.event_id.allday else None)} + </div> + <div style='font-size: 12px; text-align: center; font-weight: bold; color: #ffffff; background-color: #875A7B;'> + ${object.event_id.get_interval('month', tz=object.partner_id.tz if not object.event_id.allday else None)} + </div> + <div style="border-collapse: separate; color: #5F5F5F; text-align: center; font-size: 12px; border-bottom-right-radius: 3px; font-weight: bold; border: 1px solid #875A7B; border-bottom-left-radius: 3px;"> + ${not object.event_id.allday and object.event_id.get_interval('time', tz=object.partner_id.tz) or ''} + </div> + </td> + <td width="20px;"/> + % endif + <td style="padding-top: 5px;"> + <p><strong>Details of the event</strong></p> + <ul> + % if object.event_id.location: + <li>Location: ${object.event_id.location} + (<a target="_blank" href="http://maps.google.com/maps?oi=map&q=${object.event_id.location}">View Map</a>) + </li> + % endif + % if object.event_id.description : + <li>Description: ${object.event_id.description}</li> + % endif + % if recurrent: + <li>When: ${object.recurrence_id.name}</li> + % endif + % if not object.event_id.allday and object.event_id.duration + <li>Duration: ${('%dH%02d' % (object.event_id.duration,round(object.event_id.duration*60)%60))}</li> + % endif + <li>Attendees + <ul> + % for attendee in object.event_id.attendee_ids: + <li> + <div style="display: inline-block; border-radius: 50%; width: 10px; height: 10px; background:${colors[attendee.state] or 'white'};"> </div> + % if attendee.common_name != object.common_name: + <span style="margin-left:5px">${attendee.common_name}</span> + % else: + <span style="margin-left:5px">You</span> + % endif + </li> + % endfor + </ul></li> + </ul> + </td> + </tr></table> + <br/> + Thank you, + % if object.event_id.user_id.signature: + <br /> + ${object.event_id.user_id.signature | safe} + % endif +</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 '') | safe}</field> + <field name="email_to">${('' if object.partner_id.email and object.partner_id.email == object.email else object.email) | safe}</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="body_html" type="html"> +<div> + % set colors = ctx.get('colors', {}) + % set recurrent = object.recurrence_id and not ctx['ignore_recurrence'] + <p> + Hello ${object.common_name},<br/><br/> + The date of the meeting has been updated. The meeting ${object.event_id.name} created by ${object.event_id.user_id.partner_id.name} is now scheduled for ${object.event_id.get_display_time_tz(tz=object.partner_id.tz)}. + </p> + <div style="text-align: center; margin: 16px 0px 16px 0px;"> + % set target = 'recurrence' if recurrent else 'meeting' + <a href="/calendar/${target}/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 href="/calendar/${target}/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 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> + % if not recurrent: + <td width="130px;"> + <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; min-height: 18px; background-color: #875A7B; border: 1px solid #875A7B;"> + ${object.event_id.get_interval('dayname', tz=object.partner_id.tz if not object.event_id.allday else None)} + </div> + <div style="font-size: 48px; min-height: auto; font-weight: bold; text-align: center; color: #5F5F5F; background-color: #F8F8F8; border: 1px solid #875A7B;"> + ${object.event_id.get_interval('day', tz=object.partner_id.tz if not object.event_id.allday else None)} + </div> + <div style='font-size: 12px; text-align: center; font-weight: bold; color: #ffffff; background-color: #875A7B;'> + ${object.event_id.get_interval('month', tz=object.partner_id.tz if not object.event_id.allday else None)} + </div> + <div style="border-collapse: separate; color: #5F5F5F; text-align: center; font-size: 12px; border-bottom-right-radius: 3px; font-weight: bold; border: 1px solid #875A7B; border-bottom-left-radius: 3px;"> + ${not object.event_id.allday and object.event_id.get_interval('time', tz=object.partner_id.tz) or ''} + </div> + </td> + <td width="20px;"/> + % endif + <td style="padding-top: 5px;"> + <p><strong>Details of the event</strong></p> + <ul> + % if object.event_id.location: + <li>Location: ${object.event_id.location} + (<a target="_blank" href="http://maps.google.com/maps?oi=map&q=${object.event_id.location}">View Map</a>) + </li> + % endif + % if object.event_id.description : + <li>Description: ${object.event_id.description}</li> + % endif + % if recurrent: + <li>When: ${object.recurrence_id.name}</li> + % endif + % if not object.event_id.allday and object.event_id.duration + <li>Duration: ${('%dH%02d' % (object.event_id.duration,round(object.event_id.duration*60)%60))}</li> + % endif + <li>Attendees + <ul> + % for attendee in object.event_id.attendee_ids: + <li> + <div style="display: inline-block; border-radius: 50%; width: 10px; height: 10px; background: ${colors[attendee.state] or 'white'};"> </div> + % if attendee.common_name != object.common_name: + <span style="margin-left:5px">${attendee.common_name}</span> + % else: + <span style="margin-left:5px">You</span> + % endif + </li> + % endfor + </ul></li> + </ul> + </td> + </tr></table> + <br/> + Thank you, + % if object.event_id.user_id.signature: + <br /> + ${object.event_id.user_id.signature | safe} + % endif +</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 '') | safe}</field> + <field name="email_to">${('' if object.partner_id.email and object.partner_id.email == object.email else object.email) | safe}</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="body_html" type="html"> +<div> + % set colors = {'needsAction': 'grey', 'accepted': 'green', 'tentative': '#FFFF00', 'declined': 'red'} + <!-- + In a recurring event case, the object.event_id is always the first event + This makes the event date (and a lot of other information) incorrect + --> + % set event_id = ctx.get('force_event_id') or object.event_id + <p> + Hello ${object.common_name},<br/><br/> + This is a reminder for the below event : + </p> + <div style="text-align: center; margin: 16px 0px 16px 0px;"> + <a 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 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 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;"> + <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; min-height: 18px; background-color: #875A7B; border: 1px solid #875A7B;"> + ${event_id.get_interval('dayname', tz=object.partner_id.tz if not event_id.allday else None)} + </div> + <div style="font-size: 48px; min-height: auto; font-weight: bold; text-align: center; color: #5F5F5F; background-color: #F8F8F8; border: 1px solid #875A7B;"> + ${event_id.get_interval('day', tz=object.partner_id.tz if not event_id.allday else None)} + </div> + <div style='font-size: 12px; text-align: center; font-weight: bold; color: #ffffff; background-color: #875A7B;'> + ${event_id.get_interval('month', tz=object.partner_id.tz if not event_id.allday else None)} + </div> + <div style="border-collapse: separate; color: #5F5F5F; text-align: center; font-size: 12px; border-bottom-right-radius: 3px; font-weight: bold; border: 1px solid #875A7B; border-bottom-left-radius: 3px;"> + ${not event_id.allday and event_id.get_interval('time', tz=object.partner_id.tz) or ''} + </div> + </td> + <td width="20px;"/> + <td style="padding-top: 5px;"> + <p><strong>Details of the event</strong></p> + <ul> + % if object.event_id.location: + <li>Location: ${object.event_id.location} + (<a target="_blank" href="http://maps.google.com/maps?oi=map&q=${object.event_id.location}">View Map</a>) + </li> + % endif + % if object.event_id.description : + <li>Description: ${object.event_id.description}</li> + % endif + % if not object.event_id.allday and object.event_id.duration + <li>Duration: ${('%dH%02d' % (object.event_id.duration,(object.event_id.duration*60)%60))}</li> + % endif + <li>Attendees + <ul> + % for attendee in object.event_id.attendee_ids: + <li> + <div style="display: inline-block; border-radius: 50%; width: 10px; height: 10px; background:${colors[attendee.state] or 'white'};"> </div> + % if attendee.common_name != object.common_name: + <span style="margin-left:5px">${attendee.common_name}</span> + % else: + <span style="margin-left:5px">You</span> + % endif + </li> + % endfor + </ul></li> + </ul> + </td> + </tr></table> + <br/> + Thank you, + % if object.event_id.user_id.signature: + <br /> + ${object.event_id.user_id.signature | safe} + % endif +</div> + </field> + <field name="lang">${object.partner_id.lang}</field> + <field name="auto_delete" eval="True"/> + </record> + </data> +</odoo> |
