19.0 vanilla

This commit is contained in:
Ernad Husremovic 2026-03-09 09:32:12 +01:00
parent 79f83631d5
commit 73afc09215
6267 changed files with 1534193 additions and 1130106 deletions

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo noupdate="1">
<record id="default_confirmation_template" model="ir.config_parameter">
<field name="key">sale.default_confirmation_template</field>
<field name="value" ref="sale.mail_template_sale_confirmation"/>
</record>
<record id="default_invoice_email_template" model="ir.config_parameter">
<field name="key">sale.default_invoice_email_template</field>
<field name="value" ref="account.email_template_edi_invoice"/>
</record>
<record id="async_emails" model="ir.config_parameter">
<field name="key">sale.async_emails</field>
<field name="value">False</field>
</record>
</odoo>

View file

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo noupdate="1">
<record id="send_invoice_cron" model="ir.cron">
<field name="name">automatic invoicing: send ready invoice</field>
<field name="model_id" ref="payment.model_payment_transaction"/>
<field name="state">code</field>
<field name="code">model._cron_send_invoice()</field>
<field name="user_id" ref="base.user_root"/>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="active">False</field>
</record>
<record id="send_pending_emails_cron" model="ir.cron">
<field name="name">Sales: Send pending emails</field>
<field name="model_id" ref="model_sale_order"/>
<field name="state">code</field>
<field name="code">model._cron_send_pending_emails()</field>
<field name="user_id" ref="base.user_root"/>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="active">False</field>
</record>
</odoo>

View file

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<!-- Activities -->
<record id="mail_act_sale_upsell" model="mail.activity.type">
<field name="name">Order Upsell</field>
<field name="icon">fa-line-chart</field>
<field name="res_model">sale.order</field>
</record>
</data>
</odoo>

View file

@ -14,6 +14,12 @@
<field name="default" eval="False"/>
<field name="description">Quotation confirmed</field>
</record>
<record id="mt_order_viewed" model="mail.message.subtype">
<field name="name">Quotation Viewed</field>
<field name="res_model">sale.order</field>
<field name="internal" eval="True"/>
<field name="default" eval="True"/>
</record>
<!-- Salesteam-related subtypes for messaging / Chatter -->
<record id="mt_salesteam_order_sent" model="mail.message.subtype">
@ -24,24 +30,33 @@
<field name="parent_id" ref="sale.mt_order_sent"/>
<field name="relation_field">team_id</field>
</record>
<record id="mt_salesteam_order_viewed" model="mail.message.subtype">
<field name="name">Quotation Viewed</field>
<field name="sequence">25</field>
<field name="res_model">crm.team</field>
<field name="default" eval="True"/>
<field name="parent_id" ref="sale.mt_order_viewed"/>
<field name="relation_field">team_id</field>
</record>
<record id="mt_salesteam_order_confirmed" model="mail.message.subtype">
<field name="name">Sales Order Confirmed</field>
<field name="sequence">21</field>
<field name="sequence">30</field>
<field name="res_model">crm.team</field>
<field name="default" eval="True"/>
<field name="parent_id" ref="sale.mt_order_confirmed"/>
<field name="relation_field">team_id</field>
</record>
<record id="mt_salesteam_invoice_created" model="mail.message.subtype">
<field name="name">Invoice Created</field>
<field name="sequence">22</field>
<record id="mt_salesteam_invoice_paid" model="mail.message.subtype">
<field name="name">Invoice Paid</field>
<field name="sequence">35</field>
<field name="res_model">crm.team</field>
<field name="parent_id" ref="account.mt_invoice_created"/>
<field name="default" eval="True"/>
<field name="parent_id" ref="account.mt_invoice_paid"/>
<field name="relation_field">team_id</field>
</record>
<record id="mt_salesteam_invoice_confirmed" model="mail.message.subtype">
<field name="name">Invoice Confirmed</field>
<field name="sequence">23</field>
<record id="mt_salesteam_invoice_posted" model="mail.message.subtype">
<field name="name">Invoice Posted</field>
<field name="sequence">40</field>
<field name="res_model">crm.team</field>
<field name="parent_id" ref="account.mt_invoice_validated"/>
<field name="relation_field">team_id</field>

View file

@ -4,9 +4,10 @@
<record id="email_template_edi_sale" model="mail.template">
<field name="name">Sales: Send Quotation</field>
<field name="model_id" ref="sale.model_sale_order"/>
<field name="subject">{{ object.company_id.name }} {{ object.state in ('draft', 'sent') and (ctx.get('proforma') and 'Proforma' or 'Quotation') or 'Order' }} (Ref {{ object.name or 'n/a' }})</field>
<field name="subject">{{ object.company_id.name }} {{ object.state in ('draft', 'sent') and 'Quotation' or 'Order' }} (Ref {{ object.name or 'n/a' }})</field>
<field name="email_from">{{ (object.user_id.email_formatted or object.company_id.email_formatted or user.email_formatted) }}</field>
<field name="partner_to">{{ object.partner_id.id }}</field>
<field name="partner_to" eval="False"/>
<field name="use_default_to" eval="True"/>
<field name="description">Used by salespeople when they send quotations or proforma to prospects</field>
<field name="body_html" type="html">
<div style="margin: 0px; padding: 0px;">
@ -14,34 +15,71 @@
<t t-set="doc_name" t-value="'quotation' if object.state in ('draft', 'sent') else 'order'"/>
Hello,
<br/><br/>
Your
<t t-if="ctx.get('proforma')">
Pro forma invoice for <t t-out="doc_name or ''">quotation</t> <span style="font-weight: bold;" t-out="object.name or ''">S00052</span>
<t t-if="object.origin">
(with reference: <t t-out="object.origin or ''"></t> )
</t>
amounting in <span style="font-weight: bold;" t-out="format_amount(object.amount_total, object.pricelist_id.currency_id) or ''">$ 10.00</span> is available.
Your <t t-out="doc_name or ''">quotation</t> <span style="font-weight: bold;" t-out="object.name or ''"></span>
<t t-if="object.origin">
(with reference: <t t-out="object.origin or ''">S00052</t> )
</t>
<t t-else="">
<t t-out="doc_name or ''">quotation</t> <span style="font-weight: bold;" t-out="object.name or ''"></span>
<t t-if="object.origin">
(with reference: <t t-out="object.origin or ''">S00052</t> )
amounting in <span style="font-weight: bold;" t-out="format_amount(object.amount_total, object.currency_id) or ''">$ 10.00</span> is ready for review.
<br/>
<t t-set="documents" t-value="object._get_product_documents()"/>
<t t-if="documents">
<br/>
<t t-if="len(documents)>1">
Here are some additional documents that may interest you:
</t>
amounting in <span style="font-weight: bold;" t-out="format_amount(object.amount_total, object.pricelist_id.currency_id) or ''">$ 10.00</span> is ready for review.
<t t-else="">
Here is an additional document that may interest you:
</t>
<ul style="margin-bottom: 0;">
<t t-foreach="documents" t-as="document">
<li style="font-size: 13px;">
<a t-out="document.ir_attachment_id.name"
t-att-href="object.get_portal_url('/document/' + str(document.id))"
t-att-target="target"/>
</li>
</t>
</ul>
</t>
<br/><br/>
<br/>
Do not hesitate to contact us if you have any questions.
<t t-if="not is_html_empty(object.user_id.signature)">
<br/><br/>
<t t-out="object.user_id.signature or ''">--<br/>Mitchell Admin</t>
<div>--<br/><t t-out="object.user_id.signature or ''">Mitchell Admin</t></div>
</t>
<br/><br/>
</p>
</div>
</field>
<field name="report_template" ref="action_report_saleorder"/>
<field name="report_name">{{ (object.name or '').replace('/','_') }}</field>
<field name="lang">{{ object.partner_id.lang }}</field>
<field name="report_template_ids" eval="[(4, ref('sale.action_report_saleorder'))]"/>
<field name="auto_delete" eval="True"/>
</record>
<record id="email_template_proforma" model="mail.template">
<field name="name">Sales: Send Proforma</field>
<field name="model_id" ref="sale.model_sale_order"/>
<field name="subject">{{ object.company_id.name }} {{ object.state in ('draft', 'sent') and 'Proforma' or 'Order'}} (Ref {{ object.name or 'n/a' }})</field>
<field name="email_from">{{ (object.user_id.email_formatted or object.company_id.email_formatted or user.email_formatted) }}</field>
<field name="partner_to" eval="False"/>
<field name="use_default_to" eval="True"/>
<field name="description">Used by salespeople when they send proforma to prospects</field>
<field name="body_html" type="html">
<div style="margin: 0px; padding: 0px;">
<p style="margin: 0px; padding: 0px; font-size: 13px;">
<t t-set="doc_name" t-value="'quotation' if object.state in ('draft', 'sent') else 'order'"/>
Hello,
<br/><br/>
Your Pro forma invoice for <t t-out="doc_name or ''">quotation</t> <span style="font-weight: bold;" t-out="object.name or ''">S00052</span>
<t t-if="object.origin">
(with reference: <t t-out="object.origin or ''"></t> )
</t>
amounting in <span style="font-weight: bold;" t-out="format_amount(object.amount_total, object.currency_id) or ''">$ 10.00</span> is available.
<br/><br/>
Do not hesitate to contact us if you have any questions.
<t t-if="not is_html_empty(object.user_id.signature)">
<div>--<br/><t t-out="object.user_id.signature or ''">Mitchell Admin</t></div>
</t>
</p>
</div>
</field>
<field name="report_template_ids" eval="[(4, ref('sale.action_report_pro_forma_invoice'))]"/>
<field name="auto_delete" eval="True"/>
</record>
@ -50,59 +88,97 @@
<field name="model_id" ref="sale.model_sale_order"/>
<field name="subject">{{ object.company_id.name }} {{ (object.get_portal_last_transaction().state == 'pending') and 'Pending Order' or 'Order' }} (Ref {{ object.name or 'n/a' }})</field>
<field name="email_from">{{ (object.user_id.email_formatted or object.company_id.email_formatted or user.email_formatted) }}</field>
<field name="partner_to">{{ object.partner_id.id }}</field>
<field name="partner_to" eval="False"/>
<field name="use_default_to" eval="True"/>
<field name="description">Sent to customers on order confirmation</field>
<field name="body_html" type="html">
<div style="margin: 0px; padding: 0px;">
<p style="margin: 0px; padding: 0px; font-size: 12px;">
Hello,
<br/><br/>
<t t-set="transaction" t-value="object.get_portal_last_transaction()"/>
<t t-set="tx_sudo" t-value="object.get_portal_last_transaction()"/>
Your order <span style="font-weight:bold;" t-out="object.name or ''">S00049</span> amounting in <span style="font-weight:bold;" t-out="format_amount(object.amount_total, object.currency_id) or ''">$ 10.00</span>
<t t-if="object.state == 'sale' or (transaction and transaction.state in ('done', 'authorized'))">
<t t-if="object.state == 'sale' or (tx_sudo and tx_sudo.state in ('done', 'authorized'))">
has been confirmed.<br/>
Thank you for your trust!
</t>
<t t-elif="transaction and transaction.state == 'pending'">
<t t-elif="tx_sudo and tx_sudo.state == 'pending'">
is pending. It will be confirmed when the payment is received.
<t t-if="object.reference">
Your payment reference is <span style="font-weight:bold;" t-out="object.reference or ''"></span>.
</t>
</t>
<br/><br/>
<br/>
<t t-set="documents" t-value="object._get_product_documents()"/>
<t t-if="documents">
<br/>
<t t-if="len(documents)>1">
Here are some additional documents that may interest you:
</t>
<t t-else="">
Here is an additional document that may interest you:
</t>
<ul style="margin-bottom: 0;">
<t t-foreach="documents" t-as="document">
<li style="font-size: 13px;">
<a t-out="document.ir_attachment_id.name"
t-att-href="object.get_portal_url('/document/' + str(document.id))"
t-att-target="target"/>
</li>
</t>
</ul>
</t>
<br/>
Do not hesitate to contact us if you have any questions.
<t t-if="not is_html_empty(object.user_id.signature)">
<br/><br/>
<t t-out="object.user_id.signature or ''">--<br/>Mitchell Admin</t>
<div>--<br/><t t-out="object.user_id.signature or ''">Mitchell Admin</t></div>
</t>
<br/><br/>
</p>
<t t-if="hasattr(object, 'website_id') and object.website_id">
<div style="margin: 0px; padding: 0px;">
<table width="100%" style="color: #454748; font-size: 12px; border-collapse: collapse;">
<table width="100%" style="color: #454748; font-size: 12px; border-collapse: collapse; white-space: nowrap;">
<tr style="border-bottom: 2px solid #dee2e6;">
<td style="width: 150px;"><span style="font-weight:bold;">Products</span></td>
<td></td>
<td width="15%" align="center"><span style="font-weight:bold;">Quantity</span></td>
<td width="20%" align="right"><span style="font-weight:bold;">
<t t-if="object.user_id.has_group('account.group_show_line_subtotals_tax_excluded')">
VAT Excl.
</t>
<t t-else="">
VAT Incl.
</t>
</span></td>
<td width="20%" align="right">
<span style="font-weight:bold;">
<t t-if="hasattr(object, 'website_id') and object.website_id.show_line_subtotals_tax_selection == 'tax_excluded'">
Tax Excl.
</t>
<t t-else="">
Tax Incl.
</t>
</span>
</td>
</tr>
</table>
<t t-set="current_subtotal" t-value="0"/>
<t t-foreach="object.order_line" t-as="line">
<t t-if="(not hasattr(line, 'is_delivery') or not line.is_delivery) and line.display_type in ['line_section', 'line_note']">
<t
t-set="line_subtotal"
t-value="
line.price_subtotal
if hasattr(object, 'website_id') and object.website_id.show_line_subtotals_tax_selection == 'tax_excluded'
else line.price_total
"
/>
<t t-set="current_subtotal" t-value="current_subtotal + line_subtotal"/>
<t
t-if="(not hasattr(line, 'is_delivery') or not line.is_delivery) and (
line.display_type in ['line_section', 'line_subsection', 'line_note']
or line.product_type == 'combo'
)"
>
<table width="100%" style="color: #454748; font-size: 12px; border-collapse: collapse;">
<t t-set="loop_cycle_number" t-value="loop_cycle_number or 0" />
<tr t-att-style="'background-color: #f2f2f2' if loop_cycle_number % 2 == 0 else 'background-color: #ffffff'">
<t t-set="loop_cycle_number" t-value="loop_cycle_number + 1" />
<td colspan="4">
<t t-if="line.display_type == 'line_section'">
<span style="font-weight:bold;" t-out="line.name or ''">Taking care of Trees Course</span>
<t t-if="line.display_type in ('line_section', 'line_subsection') or line.product_type == 'combo'">
<span t-att-style="'font-weight:bold;' if line.display_type == 'line_subsection' else 'font-weight:bolder;'" t-out="line.name or ''">Taking care of Trees Course</span>
<t t-set="current_section" t-value="line"/>
<t t-set="current_subtotal" t-value="0"/>
</t>
<t t-elif="line.display_type == 'line_note'">
<i t-out="line.name or ''">Taking care of Trees Course</i>
@ -117,12 +193,16 @@
<tr t-att-style="'background-color: #f2f2f2' if loop_cycle_number % 2 == 0 else 'background-color: #ffffff'">
<t t-set="loop_cycle_number" t-value="loop_cycle_number + 1" />
<td style="width: 150px;">
<img t-attf-src="/web/image/product.product/{{ line.product_id.id }}/image_128" style="width: 64px; height: 64px; object-fit: contain;" alt="Product image"></img>
<img
t-attf-src="/web/image/product.product/{{ line.product_id.id }}/image_128"
t-attf-style="width: 64px; height: {{hasattr(object, 'website_id') and object.website_id and object.website_id._get_product_image_ratio_height() or '64px'}}; object-fit: cover; object-position: center;"
alt="Product image"
/>
</td>
<td align="left" t-out="line.product_id.name or ''"> Taking care of Trees Course</td>
<td width="15%" align="center" t-out="line.product_uom_qty or ''">1</td>
<td width="20%" align="right"><span style="font-weight:bold;">
<t t-if="object.user_id.has_group('account.group_show_line_subtotals_tax_excluded')">
<td width="20%" align="right"><span style="font-weight:bold; white-space: nowrap;">
<t t-if="hasattr(object, 'website_id') and object.website_id.show_line_subtotals_tax_selection == 'tax_excluded'">
<t t-out="format_amount(line.price_reduce_taxexcl, object.currency_id) or ''">$ 10.00</t>
</t>
<t t-else="">
@ -132,10 +212,33 @@
</tr>
</table>
</t>
<t
t-if="current_section and (
line_last
or object.order_line[line_index+1].display_type in ('line_section', 'line_subsection')
or object.order_line[line_index+1].product_type == 'combo'
or (
line.combo_item_id
and not object.order_line[line_index+1].combo_item_id
)
) and not line.is_downpayment"
>
<t t-set="current_section" t-value="None"/>
<table width="100%" style="color: #454748; font-size: 12px; border-collapse: collapse;">
<t t-set="loop_cycle_number" t-value="loop_cycle_number or 0"/>
<tr t-att-style="'background-color: #f2f2f2' if loop_cycle_number % 2 == 0 else 'background-color: #ffffff'">
<t t-set="loop_cycle_number" t-value="loop_cycle_number + 1"/>
<td style="width: 100%" align="right">
<span style="font-weight: bold;">Subtotal:</span>
<span t-out="format_amount(current_subtotal, object.currency_id) or ''">$ 10.00</span>
</td>
</tr>
</table>
</t>
</t>
</div>
<div style="margin: 0px; padding: 0px;" t-if="hasattr(object, 'carrier_id') and object.carrier_id">
<table width="100%" style="color: #454748; font-size: 12px; border-spacing: 0px 4px;" align="right">
<table width="100%" style="color: #454748; font-size: 12px; border-spacing: 0px 4px; white-space: nowrap;" align="right">
<tr>
<td style="width: 60%"/>
<td style="width: 30%; border-top: 1px solid #dee2e6;" align="right"><span style="font-weight:bold;">Delivery:</span></td>
@ -143,22 +246,22 @@
</tr>
<tr>
<td style="width: 60%"/>
<td style="width: 30%;" align="right"><span style="font-weight:bold;">SubTotal:</span></td>
<td style="width: 30%;" align="right"><span style="font-weight:bold;">Untaxed Amount:</span></td>
<td style="width: 10%;" align="right" t-out="format_amount(object.amount_untaxed, object.currency_id) or ''">$ 10.00</td>
</tr>
</table>
</div>
<div style="margin: 0px; padding: 0px;" t-else="">
<table width="100%" style="color: #454748; font-size: 12px; border-spacing: 0px 4px;" align="right">
<table width="100%" style="color: #454748; font-size: 12px; border-spacing: 0px 4px; white-space: nowrap;" align="right">
<tr>
<td style="width: 60%"/>
<td style="width: 30%; border-top: 1px solid #dee2e6;" align="right"><span style="font-weight:bold;">SubTotal:</span></td>
<td style="width: 30%; border-top: 1px solid #dee2e6;" align="right"><span style="font-weight:bold;">Untaxed Amount:</span></td>
<td style="width: 10%; border-top: 1px solid #dee2e6;" align="right" t-out="format_amount(object.amount_untaxed, object.currency_id) or ''">$ 10.00</td>
</tr>
</table>
</div>
<div style="margin: 0px; padding: 0px;">
<table width="100%" style="color: #454748; font-size: 12px; border-spacing: 0px 4px;" align="right">
<table width="100%" style="color: #454748; font-size: 12px; border-spacing: 0px 4px; white-space: nowrap;" align="right">
<tr>
<td style="width: 60%"/>
<td style="width: 30%;" align="right"><span style="font-weight:bold;">Taxes:</span></td>
@ -186,18 +289,18 @@
<tr>
<td>
<span style="font-weight:bold;">Payment Method:</span>
<t t-if="transaction.token_id">
<t t-out="transaction.token_id.display_name or ''"></t>
<t t-if="tx_sudo.token_id">
<t t-out="tx_sudo.token_id.display_name or ''"></t>
</t>
<t t-else="">
<t t-out="transaction.provider_id.sudo().name or ''"></t>
<t t-out="tx_sudo.provider_id.sudo().name or ''"></t>
</t>
(<t t-out="format_amount(transaction.amount, object.currency_id) or ''">$ 10.00</t>)
(<t t-out="format_amount(tx_sudo.amount, object.currency_id) or ''">$ 10.00</t>)
</td>
</tr>
</table>
</div>
<div t-if="object.partner_shipping_id and not object.only_services" style="margin: 0px; padding: 0px;">
<div t-if="hasattr(object, 'only_services') and object.partner_shipping_id and not object.only_services" style="margin: 0px; padding: 0px;">
<table width="100%" style="color: #454748; font-size: 12px;">
<tr>
<td>
@ -234,39 +337,61 @@
</div>
</t>
</div></field>
<field name="report_template" ref="action_report_saleorder"/>
<field name="report_name">{{ (object.name or '').replace('/','_') }}</field>
<field name="lang">{{ object.partner_id.lang }}</field>
<field name="report_template_ids" eval="[(4, ref('sale.action_report_saleorder'))]"/>
<field name="auto_delete" eval="True"/>
</record>
<record id="sale.mail_template_sale_cancellation" model="mail.template">
<field name="name">Sales: Order Cancellation</field>
<record id="mail_template_sale_payment_executed" model="mail.template">
<field name="name">Sales: Payment Done</field>
<field name="model_id" ref="sale.model_sale_order"/>
<field name="subject">{{ object.company_id.name }} {{ object.type_name }} Cancelled (Ref {{ object.name or 'n/a' }})</field>
<field name="email_from">{{ (object.user_id.email_formatted or object.company_id.email_formatted or user.email_formatted) }}</field>
<field name="partner_to">{{ object.partner_id.id }}</field>
<field name="description">Sent automatically to customers when you cancel an order</field>
<field name="subject">{{ object.company_id.name }} {{ (object.get_portal_last_transaction().state == 'pending') and 'Pending Order' or 'Order' }} (Ref {{ object.name or 'n/a' }})</field>
<field name="email_from">{{ (object.user_id.email_formatted or user.email_formatted) }}</field>
<field name="partner_to" eval="False"/>
<field name="use_default_to" eval="True"/>
<field name="description">Sent to customers when a payment is received but doesn't immediately confirm their order</field>
<field name="body_html" type="html">
<div style="margin: 0px; padding: 0px;">
<p style="margin: 0px; padding: 0px; font-size: 13px;">
<t t-set="doc_name" t-value="object.type_name"/>
Dear <t t-out="object.partner_id.name or ''">user</t>,
<p style="margin: 0px; padding: 0px; font-size: 12px;">
<t t-set="transaction_sudo" t-value="object.get_portal_last_transaction()"/>
Hello,
<br/><br/>
Please be advised that your
<t t-out="doc_name or ''">quotation</t> <strong t-out="object.name or ''">S00052</strong>
<t t-if="object.origin">
(with reference: <t t-out="object.origin or ''">S00052</t> )
A payment with reference
<span style="font-weight:bold;" t-out="transaction_sudo.reference or ''">SOOO49</span>
amounting
<span style="font-weight:bold;" t-out="format_amount(transaction_sudo.amount, object.currency_id) or ''">$ 10.00</span>
for your order
<span style="font-weight:bold;" t-out="object.name or ''">S00049</span>
<t t-if="transaction_sudo and transaction_sudo.state == 'pending'">
is pending.
<br/>
<t t-if="object.currency_id.compare_amounts(object.amount_paid + transaction_sudo.amount, object.amount_total) >= 0 and object.state in ('draft', 'sent')">
Your order will be confirmed once the payment is confirmed.
</t>
<t t-else="">
Once confirmed,
<span style="font-weight:bold;" t-out="format_amount(object.amount_total - object.amount_paid - transaction_sudo.amount, object.currency_id) or ''">$ 10.00</span>
will remain to be paid.
</t>
</t>
<t t-else="">
has been confirmed.
<t t-if="object.currency_id.compare_amounts(object.amount_paid, object.amount_total) &lt; 0">
<br/>
<span style="font-weight:bold;" t-out="format_amount(object.amount_total - object.amount_paid, object.currency_id) or ''">$ 10.00</span>
remains to be paid.
</t>
</t>
has been cancelled. Therefore, you should not be charged further for this order.
If any refund is necessary, this will be executed at best convenience.
<br/><br/>
Do not hesitate to contact us if you have any questions.
Thank you for your trust!
<br/>
Do not hesitate to contact us if you have any questions.
<t t-if="not is_html_empty(object.user_id.signature)">
<div>--<br/><t t-out="object.user_id.signature or ''">Mitchell Admin</t></div>
</t>
</p>
</div>
</field>
<field name="lang">{{ object.partner_id.lang }}</field>
<field name="report_template_ids" eval="[(4, ref('sale.action_report_saleorder'))]"/>
<field name="auto_delete" eval="True"/>
</record>

View file

@ -125,109 +125,48 @@
<field name="expense_policy">cost</field>
</record>
<record id="product.product_attribute_2" model="product.attribute">
<field name="display_type">color</field>
</record>
<record id="product.product_attribute_3" model="product.attribute">
<field name="display_type">select</field>
</record>
<record id="product.product_attribute_value_3" model="product.attribute.value">
<field name="html_color">#FFFFFF</field>
</record>
<record id="product.product_attribute_value_4" model="product.attribute.value">
<field name="html_color">#000000</field>
</record>
<record id="product_attribute_value_7" model="product.attribute.value">
<field name="name">Custom</field>
<field name="attribute_id" ref="product.product_attribute_1"/>
<field name="is_custom">True</field>
<field name="sequence">3</field>
</record>
<record id="product.product_4_attribute_1_product_template_attribute_line" model="product.template.attribute.line">
<field name="value_ids" eval="[(4,ref('product_attribute_value_7'))]"/>
</record>
<!--
Handle automatically created product.template.attribute.value.
Check "product.product_4_attribute_1_value_2" for more information about this
-->
<function model="ir.model.data" name="_update_xmlids">
<value model="base" eval="[{
'xml_id': 'sale.product_4_attribute_1_value_3',
'record': obj().env.ref('product.product_4_attribute_1_product_template_attribute_line').product_template_value_ids[2],
'noupdate': True,
}]"/>
</function>
<function model="ir.model.data" name="_update_xmlids">
<value model="base" eval="[{
'xml_id': 'sale.product_product_4e',
'record': obj().env.ref('product.product_product_4_product_template')._get_variant_for_combination(obj().env.ref('sale.product_4_attribute_1_value_3') + obj().env.ref('product.product_4_attribute_2_value_1')),
'noupdate': True,
}, {
'xml_id': 'sale.product_product_4f',
'record': obj().env.ref('product.product_product_4_product_template')._get_variant_for_combination(obj().env.ref('sale.product_4_attribute_1_value_3') + obj().env.ref('product.product_4_attribute_2_value_2')),
'noupdate': True,
},]"/>
</function>
<record id="product_product_4e" model="product.product">
<record id="product.product_product_4e" model="product.product">
<field name="default_code">DESK0005</field>
<field name="weight">0.01</field>
</record>
<record id="product_product_4f" model="product.product">
<record id="product.product_product_4f" model="product.product">
<field name="default_code">DESK0006</field>
<field name="weight">0.01</field>
</record>
<record id="product_template_attribute_exclusion_1" model="product.template.attribute.exclusion">
<field name="product_tmpl_id" ref="product.product_product_4_product_template" />
<field name="value_ids" eval="[(6,0,[ref('product.product_4_attribute_2_value_2')])]"/>
</record>
<record id="product_template_attribute_exclusion_2" model="product.template.attribute.exclusion">
<field name="product_tmpl_id" ref="product.product_product_11_product_template" />
<field name="value_ids" eval="[(6,0,[ref('product.product_11_attribute_1_value_1')])]"/>
</record>
<!--
The "Customizable Desk's Aluminium" attribute value will excude:
- The "Customizable Desk's Black" attribute
- The "Office Chair's Steel" attribute
-->
<record id="product.product_4_attribute_1_value_2" model="product.template.attribute.value">
<field name="exclude_for" eval="[(6,0,[ref('sale.product_template_attribute_exclusion_1') ,ref('sale.product_template_attribute_exclusion_2')])]" />
</record>
<record id="product_template_attribute_exclusion_3" model="product.template.attribute.exclusion">
<field name="product_tmpl_id" ref="product.product_product_11_product_template" />
<field name="value_ids" eval="[(6,0,[ref('product.product_11_attribute_1_value_2')])]"/>
</record>
<!--
The "Customizable Desk's Steel" attribute value will excude:
- The "Office Chair's Aluminium" attribute
-->
<record id="product.product_4_attribute_1_value_1" model="product.template.attribute.value">
<field name="exclude_for" eval="[(6,0,[ref('sale.product_template_attribute_exclusion_3')])]" />
</record>
<record id="advance_product_0" model="product.product">
<field name="name">Deposit</field>
<field name="categ_id" ref="product.product_category_3"/>
<field name="categ_id" eval="ref('product.product_category_services', raise_if_not_found=False)"/>
<field name="type">service</field>
<field name="list_price">150.0</field>
<field name="invoice_policy">order</field>
<field name="standard_price">100.0</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="company_id" eval="[]"/>
<field name="image_1920" type="base64" file="sale/static/img/advance_product_0-image.jpg"/>
<field name="taxes_id" eval="[]"/>
<field name="supplier_taxes_id" eval="[]"/>
</record>
<record id="product_product_1_product_template" model="product.template">
<field name="name">Chair floor protection</field>
<field name="categ_id" ref="product.product_category_office"/>
<field name="list_price">12.0</field>
<field name="weight">0.01</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="description_sale">Office chairs can harm your floor: protect it</field>
<field name="image_1920" type="base64" file="sale/static/img/floor_protection-image.jpg"/>
</record>
<record id="product.product_product_4_product_template" model="product.template">
<field name="optional_product_ids" eval="[Command.set([ref('product.product_product_11_product_template')])]"/>
</record>
<record id="product.product_product_11_product_template" model="product.template">
<field name="optional_product_ids" eval="[Command.set([ref('product_product_1_product_template')])]"/>
</record>
<record id="product.product_product_13_product_template" model="product.template">
<field name="optional_product_ids" eval="[Command.set([ref('product.product_product_11_product_template')])]"/>
</record>
</odoo>

View file

@ -1,26 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo noupdate="1">
<!-- TODO remove as it is already the fallback in _find_mail_template -->
<record id="default_confirmation_template" model="ir.config_parameter">
<field name="key">sale.default_confirmation_template</field>
<field name="value" ref="sale.mail_template_sale_confirmation"/>
</record>
<record id="default_invoice_email_template" model="ir.config_parameter">
<field name="key">sale.default_invoice_email_template</field>
<field name="value" ref="account.email_template_edi_invoice"/>
</record>
<record id="send_invoice_cron" model="ir.cron">
<field name="name">automatic invoicing: send ready invoice</field>
<field name="model_id" ref="payment.model_payment_transaction" />
<field name="state">code</field>
<field name="code">model._cron_send_invoice()</field>
<field name="user_id" ref="base.user_root" />
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
</record>
</odoo>

View file

@ -1,31 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo noupdate="1">
<!-- Enable EUR currency since it's the currency on the company, pricelist and Sale Orders
If the currency is not enabled, you cannot pay the demo SO's with a payment link bc the currency
is disabled.
-->
<function model="res.currency" name="action_unarchive">
<value model="res.currency" search="[('id', '=', obj().env.ref('product.list0').currency_id.id), ('active', '=', False)]"/>
</function>
<!-- We want to activate pay and sign by default for easier demoing. -->
<record id="base.main_company" model="res.company">
<field name="portal_confirmation_pay" eval="True"/>
</record>
<record id="base.user_demo" model="res.users">
<field eval="[(4, ref('sales_team.group_sale_salesman'))]" name="groups_id"/>
<field eval="[(4, ref('sales_team.group_sale_salesman'))]" name="group_ids"/>
</record>
<record model="crm.team" id="sales_team.team_sales_department">
<field name="use_quotations" eval="True"/>
<field name="invoiced_target">250000</field>
</record>
<record model="crm.team" id="sales_team.crm_team_1">
<field name="use_quotations" eval="True"/>
<field name="invoiced_target">40000</field>
</record>
@ -38,7 +27,6 @@
<field name="partner_invoice_id" ref="base.res_partner_2"/>
<field name="partner_shipping_id" ref="base.res_partner_2"/>
<field name="user_id" ref="base.user_demo"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="team_id" ref="sales_team.team_sales_department"/>
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
<field name="medium_id" ref="utm.utm_medium_email"/>
@ -72,7 +60,6 @@
<field name="partner_invoice_id" ref="base.res_partner_address_13"/>
<field name="partner_shipping_id" ref="base.res_partner_address_13"/>
<field name="user_id" ref="base.user_admin"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="team_id" ref="sales_team.team_sales_department"/>
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
<field name="medium_id" ref="utm.utm_medium_email"/>
@ -100,7 +87,6 @@
<field name="partner_invoice_id" ref="base.res_partner_4"/>
<field name="partner_shipping_id" ref="base.res_partner_4"/>
<field name="user_id" ref="base.user_admin"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="team_id" ref="sales_team.team_sales_department"/>
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
<field name="medium_id" ref="utm.utm_medium_email"/>
@ -125,7 +111,6 @@
<field name="partner_invoice_id" ref="base.res_partner_address_25"/>
<field name="partner_shipping_id" ref="base.res_partner_address_25"/>
<field name="user_id" ref="base.user_admin"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="team_id" ref="sales_team.team_sales_department"/>
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
<field name="medium_id" ref="utm.utm_medium_email"/>
@ -164,7 +149,6 @@
<field name="partner_invoice_id" ref="base.res_partner_2"/>
<field name="partner_shipping_id" ref="base.res_partner_2"/>
<field name="user_id" ref="base.user_demo"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="team_id" ref="sales_team.crm_team_1"/>
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
<field name="medium_id" ref="utm.utm_medium_email"/>
@ -183,7 +167,6 @@
<field name="partner_invoice_id" ref="base.res_partner_18"/>
<field name="partner_shipping_id" ref="base.res_partner_18"/>
<field name="user_id" ref="base.user_admin"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="team_id" ref="sales_team.crm_team_1"/>
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
<field name="medium_id" ref="utm.utm_medium_email"/>
@ -202,7 +185,6 @@
<field name="partner_invoice_id" ref="base.res_partner_address_11"/>
<field name="partner_shipping_id" ref="base.res_partner_address_11"/>
<field name="user_id" ref="base.user_admin"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="team_id" ref="sales_team.team_sales_department"/>
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
<field name="medium_id" ref="utm.utm_medium_email"/>
@ -240,7 +222,6 @@
<field name="partner_invoice_id" ref="base.res_partner_address_25"/>
<field name="partner_shipping_id" ref="base.res_partner_address_25"/>
<field name="user_id" ref="base.user_demo"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="team_id" ref="sales_team.crm_team_1"/>
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
<field name="medium_id" ref="utm.utm_medium_email"/>
@ -268,7 +249,6 @@
<field name="partner_invoice_id" ref="base.res_partner_address_25"/>
<field name="partner_shipping_id" ref="base.res_partner_address_25"/>
<field name="user_id" ref="base.user_demo"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="team_id" ref="sales_team.crm_team_1"/>
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
<field name="medium_id" ref="utm.utm_medium_email"/>
@ -295,7 +275,6 @@
<field name="partner_invoice_id" ref="base.res_partner_address_25"/>
<field name="partner_shipping_id" ref="base.res_partner_address_25"/>
<field name="user_id" ref="base.user_demo"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="team_id" ref="sales_team.crm_team_1"/>
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
<field name="medium_id" ref="utm.utm_medium_email"/>
@ -324,7 +303,6 @@
<field name="partner_invoice_id" ref="base.res_partner_address_25"/>
<field name="partner_shipping_id" ref="base.res_partner_address_25"/>
<field name="user_id" ref="base.user_demo"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="team_id" ref="sales_team.crm_team_1"/>
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
<field name="medium_id" ref="utm.utm_medium_email"/>
@ -351,7 +329,6 @@
<field name="partner_invoice_id" ref="base.res_partner_address_25"/>
<field name="partner_shipping_id" ref="base.res_partner_address_25"/>
<field name="user_id" ref="base.user_demo"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="team_id" ref="sales_team.crm_team_1"/>
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
<field name="medium_id" ref="utm.utm_medium_email"/>
@ -378,7 +355,6 @@
<field name="partner_invoice_id" ref="base.res_partner_address_25"/>
<field name="partner_shipping_id" ref="base.res_partner_address_25"/>
<field name="user_id" ref="base.user_demo"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="team_id" ref="sales_team.crm_team_1"/>
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
<field name="medium_id" ref="utm.utm_medium_email"/>
@ -403,7 +379,6 @@
<field name="partner_invoice_id" ref="base.res_partner_address_25"/>
<field name="partner_shipping_id" ref="base.res_partner_address_25"/>
<field name="user_id" ref="base.user_demo"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="team_id" ref="sales_team.team_sales_department"/>
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
<field name="medium_id" ref="utm.utm_medium_email"/>
@ -430,7 +405,6 @@
<field name="partner_invoice_id" ref="base.res_partner_address_25"/>
<field name="partner_shipping_id" ref="base.res_partner_address_25"/>
<field name="user_id" ref="base.user_demo"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="team_id" ref="sales_team.team_sales_department"/>
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
<field name="medium_id" ref="utm.utm_medium_email"/>
@ -457,7 +431,6 @@
<field name="partner_invoice_id" ref="base.res_partner_address_25"/>
<field name="partner_shipping_id" ref="base.res_partner_address_25"/>
<field name="user_id" ref="base.user_demo"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="team_id" ref="sales_team.team_sales_department"/>
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
<field name="medium_id" ref="utm.utm_medium_email"/>
@ -484,7 +457,6 @@
<field name="partner_invoice_id" ref="base.res_partner_address_25"/>
<field name="partner_shipping_id" ref="base.res_partner_address_25"/>
<field name="user_id" ref="base.user_demo"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="team_id" ref="sales_team.team_sales_department"/>
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
<field name="medium_id" ref="utm.utm_medium_email"/>
@ -511,7 +483,6 @@
<field name="partner_invoice_id" ref="base.res_partner_address_25"/>
<field name="partner_shipping_id" ref="base.res_partner_address_25"/>
<field name="user_id" ref="base.user_demo"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="team_id" ref="sales_team.team_sales_department"/>
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
<field name="medium_id" ref="utm.utm_medium_email"/>
@ -538,11 +509,9 @@
<field name="partner_invoice_id" ref="base.partner_demo_portal"/>
<field name="partner_shipping_id" ref="base.partner_demo_portal"/>
<field name="user_id" ref="base.user_admin"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="state">sent</field>
<field name="team_id" ref="sales_team.team_sales_department"/>
<field name="date_order" eval="(DateTime.today() - relativedelta(months=1)).strftime('%Y-%m-%d %H:%M')"/>
<field name="message_partner_ids" eval="[(4, ref('base.partner_demo_portal'))]"/>
<field name="tag_ids" eval="[(4, ref('sales_team.categ_oppor4'))]"/>
</record>
@ -572,10 +541,8 @@
<field name="partner_invoice_id" ref="base.partner_demo_portal"/>
<field name="partner_shipping_id" ref="base.partner_demo_portal"/>
<field name="user_id" ref="base.user_admin"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="team_id" ref="sales_team.team_sales_department"/>
<field name="date_order" eval="(DateTime.today() - relativedelta(months=1)).strftime('%Y-%m-%d %H:%M')"/>
<field name="message_partner_ids" eval="[(4, ref('base.partner_demo_portal'))]"/>
</record>
<record id="portal_sale_order_line_4" model="sale.order.line">
@ -683,7 +650,8 @@ Alright, thanks for the clarification. I will confirm the order as soon as I get
<record id="sale_activity_3" model="mail.activity">
<field name="res_id" ref="sale.sale_order_4"/>
<field name="res_model_id" ref="sale.model_sale_order"/>
<field name="activity_type_id" ref="sale.mail_act_sale_upsell"/>
<field name="activity_type_id" ref="mail.mail_activity_data_todo"/>
<field name="summary">Upsell</field>
<field name="date_deadline" eval="(DateTime.today() + relativedelta(days=5)).strftime('%Y-%m-%d %H:%M')"/>
<field name="create_uid" ref="base.user_admin"/>
<field name="user_id" ref="base.user_admin"/>
@ -693,6 +661,7 @@ Alright, thanks for the clarification. I will confirm the order as soon as I get
<field name="res_model_id" ref="sale.model_sale_order"/>
<field name="activity_type_id" ref="mail.mail_activity_data_email"/>
<field name="date_deadline" eval="DateTime.today().strftime('%Y-%m-%d %H:%M')"/>
<field name="summary">Follow up on previous email</field>
<field name="create_uid" ref="base.user_demo"/>
<field name="user_id" ref="base.user_demo"/>
</record>
@ -719,13 +688,15 @@ Alright, thanks for the clarification. I will confirm the order as soon as I get
<field name="res_model_id" ref="sale.model_sale_order"/>
<field name="activity_type_id" ref="mail.mail_activity_data_email"/>
<field name="date_deadline" eval="(DateTime.today() + relativedelta(days=5)).strftime('%Y-%m-%d %H:%M')"/>
<field name="summary">Confirm order via email</field>
<field name="create_uid" ref="base.user_demo"/>
<field name="user_id" ref="base.user_demo"/>
</record>
<record id="sale_activity_9" model="mail.activity">
<field name="res_id" ref="sale.sale_order_16"/>
<field name="res_model_id" ref="sale.model_sale_order"/>
<field name="activity_type_id" ref="sale.mail_act_sale_upsell"/>
<field name="activity_type_id" ref="mail.mail_activity_data_todo"/>
<field name="summary">Upsell</field>
<field name="date_deadline" eval="DateTime.today().strftime('%Y-%m-%d %H:%M')"/>
<field name="create_uid" ref="base.user_demo"/>
<field name="user_id" ref="base.user_demo"/>

View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="sale_tour" model="web_tour.tour">
<field name="name">sale_tour</field>
<field name="sequence">20</field>
<field name="rainbow_man_message"><![CDATA[
<b>Congratulations</b>, your first quotation is sent!<br>Check your email to validate the quote.
]]></field>
</record>
</odoo>