Initial commit: Sale packages

This commit is contained in:
Ernad Husremovic 2025-08-29 15:20:49 +02:00
commit 14e3d26998
6469 changed files with 2479670 additions and 0 deletions

View file

@ -0,0 +1,193 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<record id="menu_shop" model="website.menu">
<field name="name">Shop</field>
<field name="url">/shop</field>
<field name="parent_id" ref="website.main_menu"/>
<field name="sequence" type="int">20</field>
</record>
<record id="action_open_website" model="ir.actions.act_url">
<field name="name">Website Shop</field>
<field name="target">self</field>
<field name="url">/shop</field>
</record>
<record id="base.open_menu" model="ir.actions.todo">
<field name="action_id" ref="action_open_website"/>
<field name="state">open</field>
</record>
<record id="product_attribute_brand" model="product.attribute">
<field name="name">Brand</field>
<field name="sequence">0</field>
</record>
<record id="website_sale.sale_ribbon" model="product.ribbon">
<field name="html">Sale</field>
<field name="html_class">o_ribbon_left</field>
<field name="bg_color">rgb(40, 167, 69)</field>
<field name="text_color">white</field>
</record>
<record id="website_sale.sold_out_ribbon" model="product.ribbon">
<field name="html">Sold out</field>
<field name="html_class">o_ribbon_left</field>
<field name="bg_color">rgb(220, 53, 69)</field>
<field name="text_color">white</field>
</record>
<record id="website_sale.out_of_stock_ribbon" model="product.ribbon">
<field name="html">Out of stock</field>
<field name="html_class">o_ribbon_left</field>
<field name="bg_color">rgb(255, 193, 7)</field>
<field name="text_color">black</field>
</record>
<record id="website_sale.new_ribbon" model="product.ribbon">
<field name="html">New!</field>
<field name="html_class">o_ribbon_left</field>
<field name="bg_color">rgb(0, 123, 255)</field>
<field name="text_color">white</field>
</record>
<record id="sales_team.salesteam_website_sales" model="crm.team">
<field name="active" eval="True"/>
</record>
<record model="website" id="website.default_website">
<field name="salesteam_id" ref="sales_team.salesteam_website_sales"/>
</record>
<record model="product.pricelist" id="product.list0">
<field name="selectable" eval="True" />
<field name="website_id" eval="False"/>
</record>
</data>
<data>
<!-- Filters for Dynamic Filter -->
<record id="dynamic_snippet_newest_products_filter" model="ir.filters">
<field name="name">Newest Products</field>
<field name="model_id">product.product</field>
<field name="user_id" eval="False" />
<field name="domain">[('website_published', '=', True)]</field>
<field name="context">{'display_default_code': False, 'add2cart_rerender': False}</field>
<field name="sort">["create_date desc"]</field>
<field name="action_id" ref="website.action_website"/>
</record>
<!-- Action Server for Dynamic Filter -->
<record id="dynamic_snippet_latest_sold_products_action" model="ir.actions.server">
<field name="name">Recently Sold Products</field>
<field name="model_id" ref="model_product_product"/>
<field name="state">code</field>
<field name="code">
DynamicFilter = model.env['website.snippet.filter']
response = DynamicFilter._get_products('latest_sold', model.env.context)
</field>
</record>
<record id="dynamic_snippet_latest_viewed_products_action" model="ir.actions.server">
<field name="name">Recently Viewed Products</field>
<field name="model_id" ref="model_product_product"/>
<field name="state">code</field>
<field name="code">
DynamicFilter = model.env['website.snippet.filter']
res_products = DynamicFilter._get_products('latest_viewed', model.env.context)
for data in res_products:
data['_latest_viewed'] = True
response = res_products
</field>
</record>
<record id="dynamic_snippet_accessories_action" model="ir.actions.server">
<field name="name">Product Accessories</field>
<field name="model_id" ref="model_product_product"/>
<field name="state">code</field>
<field name="code">
DynamicFilter = model.env['website.snippet.filter']
model.env.context['product_template_id'] = request.params.get('productTemplateId')
response = DynamicFilter._get_products('accessories', model.env.context)
</field>
</record>
<record id="dynamic_snippet_recently_sold_with_action" model="ir.actions.server">
<field name="name">Products Recently Sold With</field>
<field name="model_id" ref="model_product_product"/>
<field name="state">code</field>
<field name="code">
DynamicFilter = model.env['website.snippet.filter']
model.env.context['product_template_id'] = request.params.get('productTemplateId')
response = DynamicFilter._get_products('recently_sold_with', model.env.context)
</field>
</record>
<record id="dynamic_snippet_alternative_products" model="ir.actions.server">
<field name="name">Alternative Products</field>
<field name="model_id" ref="model_product_product"/>
<field name="state">code</field>
<field name="code">
DynamicFilter = model.env['website.snippet.filter']
model.env.context['product_template_id'] = request.params.get('productTemplateId')
response = DynamicFilter._get_products('alternative_products', model.env.context)
</field>
</record>
<!-- Dynamic Filter -->
<record id="dynamic_filter_newest_products" model="website.snippet.filter">
<field name="filter_id" ref="website_sale.dynamic_snippet_newest_products_filter"/>
<field name="field_names">display_name,description_sale,image_512</field>
<field name="limit" eval="16"/>
<field name="name">Newest Products</field>
</record>
<record id="dynamic_filter_latest_sold_products" model="website.snippet.filter">
<field name="action_server_id" ref="website_sale.dynamic_snippet_latest_sold_products_action"/>
<field name="field_names">display_name,description_sale,image_512</field>
<field name="limit" eval="16"/>
<field name="name">Recently Sold Products</field>
</record>
<record id="dynamic_filter_latest_viewed_products" model="website.snippet.filter">
<field name="action_server_id" ref="website_sale.dynamic_snippet_latest_viewed_products_action"/>
<field name="field_names">display_name,description_sale,image_512</field>
<field name="limit" eval="16"/>
<field name="name">Recently Viewed Products</field>
</record>
<record id="dynamic_filter_cross_selling_accessories" model="website.snippet.filter">
<field name="action_server_id" ref="website_sale.dynamic_snippet_accessories_action"/>
<field name="field_names">display_name,description_sale,image_512</field>
<field name="limit" eval="16"/>
<field name="name">Accessories for Product</field>
<field name="product_cross_selling">True</field>
</record>
<record id="dynamic_filter_cross_selling_recently_sold_with" model="website.snippet.filter">
<field name="action_server_id" ref="website_sale.dynamic_snippet_recently_sold_with_action"/>
<field name="field_names">display_name,description_sale,image_512</field>
<field name="limit" eval="16"/>
<field name="name">Products Recently Sold With Product</field>
<field name="product_cross_selling">True</field>
</record>
<record id="dynamic_filter_cross_selling_alternative_products" model="website.snippet.filter">
<field name="action_server_id" ref="website_sale.dynamic_snippet_alternative_products"/>
<field name="field_names">display_name,description_sale,image_512</field>
<field name="limit" eval="16"/>
<field name="name">Alternative Products</field>
<field name="product_cross_selling">True</field>
</record>
<function model="ir.model.fields" name="formbuilder_whitelist">
<value>sale.order</value>
<value eval="[
'client_order_ref',
]"/>
</function>
<record id="base.model_res_partner" model="ir.model">
<field name="website_form_key">create_customer</field>
<field name="website_form_access">True</field>
<field name="website_form_label">Create a Customer</field>
</record>
<function model="ir.model.fields" name="formbuilder_whitelist">
<value>res.partner</value>
<value eval="[
'name', 'phone', 'email',
'city', 'zip', 'street', 'street2', 'state_id', 'country_id',
'vat', 'company_name'
]"/>
</function>
</data>
</odoo>

View file

@ -0,0 +1,782 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo noupdate="1">
<record model="website" id="website.website2">
<field name="salesteam_id" ref="sales_team.salesteam_website_sales"/>
</record>
<record id="product.product_attribute_2" model="product.attribute">
<field name="visibility">hidden</field>
</record>
<record id="product.product_product_24" model="product.product">
<field name="is_published" eval="True"/>
</record>
<record id="product.product_product_5" model="product.product">
<field name="is_published" eval="True"/>
</record>
<record id="product.product_product_12" model="product.product">
<field name="is_published" eval="True"/>
</record>
<record id="product.product_product_10" model="product.product">
<field name="is_published" eval="True"/>
</record>
<record id="product.product_product_13" model="product.product">
<field name="is_published" eval="True"/>
</record>
<record id="product.product_product_25" model="product.product">
<field name="is_published" eval="True"/>
</record>
<record id="product.consu_delivery_02" model="product.product">
<field name="is_published" eval="True"/>
</record>
<record id="product.product_delivery_01" model="product.product">
<field name="is_published" eval="True"/>
</record>
<record id="product.product_product_3" model="product.product">
<field name="is_published" eval="True"/>
</record>
<record id="product.product_product_22" model="product.product">
<field name="is_published" eval="True"/>
</record>
<record id="product.consu_delivery_03" model="product.product">
<field name="is_published" eval="True"/>
</record>
<record id="product.product_product_27" model="product.product">
<field name="is_published" eval="True"/>
</record>
<record id="product.product_delivery_02" model="product.product">
<field name="is_published" eval="True"/>
</record>
<record id="product.product_product_16" model="product.product">
<field name="is_published" eval="True"/>
</record>
<record id="product.consu_delivery_01" model="product.product">
<field name="is_published" eval="True"/>
</record>
<record id="product.product_order_01" model="product.product">
<field name="is_published" eval="True"/>
</record>
<record id="product.product_product_4" model="product.product">
<field name="is_published" eval="True"/>
<field name="website_sequence">9950</field>
<field name="website_description" type="html">
<section class="s_text_image pt32 pb32 o_colored_level o_cc o_cc1" data-snippet="s_text_image" data-name="Text - Image">
<div class="container">
<div class="row align-items-center">
<div class="pt16 pb16 col-lg-6">
<h2>Ergonomic</h2>
<p>Press a button and watch your desk glide effortlessly from sitting to standing height in seconds.</p>
<p>The minimum height is 65 cm, and for standing work the maximum height position is 125 cm.</p>
</div>
<div class="pt16 pb16 col-lg-6">
<img src="/website/static/src/img/snippets_demo/s_text_image.jpg" class="img img-fluid mx-auto" alt=""/>
</div>
</div>
</div>
</section>
<section class="s_text_image pt32 pb32 o_colored_level o_cc o_cc1" data-snippet="s_image_text" data-name="Image - Text">
<div class="container">
<div class="row align-items-center">
<div class="pt16 pb16 col-lg-6">
<img src="/website_sale/static/src/img/carpentry.jpg" class="img img-fluid mx-auto" alt=""/>
</div>
<div class="pt16 pb16 col-lg-6">
<h2>Locally handmade</h2>
<p>We pay special attention to detail, which is why our desks are of a superior quality.</p>
<p>Looking for a custom bamboo stain to match existing furniture? Contact us for a quote.</p>
<p><a href="/contactus" class="mb-2 btn btn-primary">Contact Us</a></p>
</div>
</div>
</div>
</section>
</field>
</record>
<record id="product.product_product_6" model="product.product">
<field name="is_published" eval="True"/>
</record>
<record id="product.product_product_7" model="product.product">
<field name="is_published" eval="True"/>
</record>
<record id="product.product_product_8" model="product.product">
<field name="is_published" eval="True"/>
</record>
<record id="product.product_product_9" model="product.product">
<field name="is_published" eval="True"/>
</record>
<record id="product.product_product_11" model="product.product">
<field name="is_published" eval="True"/>
<field name="accessory_product_ids" eval="[(6, 0, [ref('product.product_product_7')])]"/>
</record>
<record id="item1" model="product.pricelist.item">
<field name="base">list_price</field>
<field name="applied_on">1_product</field>
<field name="pricelist_id" ref="product.list0"/>
<field name="product_tmpl_id" ref="product.product_product_4_product_template"/>
<field name="price_discount">20</field>
<field name="min_quantity">2</field>
<field name="compute_price">formula</field>
</record>
<!-- product.public.category -->
<record id="public_category_desks" model="product.public.category">
<field name="name">Desks</field>
<field name="sequence">15</field>
<field name="image_1920" type="base64" file="website_sale/static/src/img/categories/desks.jpg"/>
</record>
<record id="public_category_furnitures" model="product.public.category">
<field name="name">Furnitures</field>
<field name="sequence">17</field>
<field name="image_1920" type="base64" file="website_sale/static/src/img/categories/furnitures.jpg"/>
</record>
<record id="public_category_boxes" model="product.public.category">
<field name="name">Boxes</field>
<field name="sequence">20</field>
<field name="image_1920" type="base64" file="website_sale/static/src/img/categories/boxes.jpg"/>
</record>
<record id="public_category_drawers" model="product.public.category">
<field name="name">Drawers</field>
<field name="sequence">21</field>
<field name="image_1920" type="base64" file="website_sale/static/src/img/categories/drawers.jpg"/>
</record>
<record id="public_category_cabinets" model="product.public.category">
<field name="name">Cabinets</field>
<field name="sequence">22</field>
<field name="image_1920" type="base64" file="website_sale/static/src/img/categories/cabinets.jpg"/>
</record>
<record id="public_category_bins" model="product.public.category">
<field name="name">Bins</field>
<field name="sequence">23</field>
<field name="image_1920" type="base64" file="website_sale/static/src/img/categories/bins.jpg"/>
</record>
<record id="public_category_lamps" model="product.public.category">
<field name="name">Lamps</field>
<field name="sequence">24</field>
<field name="image_1920" type="base64" file="website_sale/static/src/img/categories/lamps.jpg"/>
</record>
<record id="services" model="product.public.category">
<field name="name">Services</field>
<field name="sequence">25</field>
<field name="image_1920" type="base64" file="website_sale/static/src/img/warranty.jpg"/>
</record>
<record id="public_category_multimedia" model="product.public.category">
<field name="name">Multimedia</field>
<field name="sequence">26</field>
<field name="image_1920" type="base64" file="product/static/img/product_product_43-image.jpg"/>
</record>
<!-- subcategories -->
<record id="public_category_desks_components" model="product.public.category">
<field name="parent_id" eval="ref('public_category_desks')"/>
<field name="name">Components</field>
<field name="sequence">16</field>
<field name="image_1920" type="base64" file="website_sale/static/src/img/categories/desk_components.jpg"/>
</record>
<record id="public_category_furnitures_chairs" model="product.public.category">
<field name="parent_id" eval="ref('public_category_furnitures')"/>
<field name="name">Chairs</field>
<field name="sequence">18</field>
</record>
<record id="public_category_furnitures_couches" model="product.public.category">
<field name="parent_id" eval="ref('public_category_furnitures')"/>
<field name="name">Couches</field>
<field name="sequence">19</field>
</record>
<record id="product.product_product_1_product_template" model="product.template">
<field name="public_categ_ids" eval="[(6,0,[ref('services')])]"/>
</record>
<record id="product.product_product_2_product_template" model="product.template">
<field name="public_categ_ids" eval="[(6,0,[ref('services')])]"/>
</record>
<record id="product.product_product_3_product_template" model="product.template">
<field name="public_categ_ids" eval="[(6,0,[ref('public_category_desks_components')])]"/>
</record>
<record id="product.consu_delivery_03_product_template" model="product.template">
<field name="public_categ_ids" eval="[(6,0,[ref('public_category_desks')])]"/>
</record>
<record id="product.product_product_4_product_template" model="product.template">
<field name="public_categ_ids" eval="[(6,0,[ref('public_category_desks')])]"/>
</record>
<record id="product.product_product_5_product_template" model="product.template">
<field name="public_categ_ids" eval="[(6,0,[ref('public_category_desks')])]"/>
</record>
<record id="product.product_product_6_product_template" model="product.template">
<field name="public_categ_ids" eval="[(6,0,[ref('public_category_cabinets')])]"/>
</record>
<record id="product.product_product_7_product_template" model="product.template">
<field name="public_categ_ids" eval="[(6,0,[ref('public_category_boxes')])]"/>
</record>
<record id="product.product_product_8_product_template" model="product.template">
<field name="public_categ_ids" eval="[(6,0,[ref('public_category_desks')])]"/>
</record>
<record id="product.product_product_9_product_template" model="product.template">
<field name="public_categ_ids" eval="[(6,0,[ref('public_category_bins')])]"/>
</record>
<record id="product.product_product_10_product_template" model="product.template">
<field name="public_categ_ids" eval="[(6,0,[ref('public_category_cabinets')])]"/>
</record>
<record id="product.product_product_11_product_template" model="product.template">
<field name="website_sequence">9990</field>
<field name="public_categ_ids" eval="[(6,0,[ref('public_category_furnitures_chairs')])]"/>
</record>
<record id="product.product_product_12_product_template" model="product.template">
<field name="public_categ_ids" eval="[(6,0,[ref('public_category_furnitures_chairs')])]"/>
</record>
<record id="product.product_product_13_product_template" model="product.template">
<field name="public_categ_ids" eval="[(6,0,[ref('public_category_desks')])]"/>
</record>
<record id="product.product_product_16_product_template" model="product.template">
<field name="public_categ_ids" eval="[(6,0,[ref('public_category_drawers')])]"/>
</record>
<record id="product.product_product_20_product_template" model="product.template">
<field name="public_categ_ids" eval="[(6,0,[ref('public_category_desks_components')])]"/>
</record>
<record id="product.product_product_22_product_template" model="product.template">
<field name="public_categ_ids" eval="[(6,0,[ref('public_category_desks_components')])]"/>
</record>
<record id="product.product_product_25_product_template" model="product.template">
<field name="public_categ_ids" eval="[(6,0,[ref('public_category_desks_components')])]"/>
</record>
<record id="product.product_product_27_product_template" model="product.template">
<field name="public_categ_ids" eval="[(6,0,[ref('public_category_drawers')])]"/>
</record>
<record id="product.product_order_01_product_template" model="product.template">
<field name="public_categ_ids" eval="[(6,0,[ref('public_category_multimedia')])]"/>
</record>
<record id="product.consu_delivery_01_product_template" model="product.template">
<field name="public_categ_ids" eval="[(6,0,[ref('public_category_furnitures_couches')])]"/>
</record>
<record id="product.consu_delivery_02_product_template" model="product.template">
<field name="public_categ_ids" eval="[(6,0,[ref('public_category_desks')])]"/>
</record>
<record id="product.consu_delivery_03_product_template" model="product.template">
<field name="public_categ_ids" eval="[(6,0,[ref('public_category_desks')])]"/>
</record>
<record id="product.product_delivery_01_product_template" model="product.template">
<field name="public_categ_ids" eval="[(6,0,[ref('public_category_furnitures_chairs')])]"/>
</record>
<record id="product.product_delivery_02_product_template" model="product.template">
<field name="public_categ_ids" eval="[(6,0,[ref('public_category_lamps')])]"/>
</record>
<record model="product.pricelist" id="product.list0">
<field name="selectable" eval="True" />
<field name="sequence">3</field>
</record>
<record id="benelux" model="res.country.group">
<field name="name">BeNeLux</field>
<field name="country_ids" eval="[(6,0,[
ref('base.be'),ref('base.lu'),ref('base.nl')])]"/>
</record>
<record id="list_christmas" model="product.pricelist">
<field name="name">Christmas</field>
<field name="selectable" eval="False" />
<field name="website_id" ref="website.default_website" />
<field name="country_group_ids" eval="[(6,0,[ref('base.europe')])]" />
<field name="sequence">20</field>
</record>
<record id="item_christmas" model="product.pricelist.item">
<field name="pricelist_id" ref="list_christmas"/>
<field name="compute_price">formula</field>
<field name="base">list_price</field>
<field name="price_discount">20</field>
</record>
<record id="list_benelux" model="product.pricelist">
<field name="name">Benelux</field>
<field name="selectable" eval="False" />
<field name="website_id" ref="website.default_website" />
<field name="country_group_ids" eval="[(6,0,[ref('benelux')])]" />
<field name="sequence">2</field>
</record>
<record id="item_benelux" model="product.pricelist.item">
<field name="pricelist_id" ref="list_benelux"/>
<field name="compute_price">percentage</field>
<field name="base">list_price</field>
<field name="percent_price">10</field>
<field name="currency_id" ref="base.EUR"/>
</record>
<record id="list_europe" model="product.pricelist">
<field name="name">EUR</field>
<field name="selectable" eval="True" />
<field name="website_id" ref="website.default_website" />
<field name="country_group_ids" eval="[(6,0,[ref('base.europe')])]" />
<field name="sequence">3</field>
<field name="currency_id" ref="base.EUR"/>
</record>
<record id="item_europe" model="product.pricelist.item">
<field name="pricelist_id" ref="list_europe"/>
<field name="compute_price">formula</field>
<field name="base">list_price</field>
</record>
<record id="item_us" model="product.pricelist.item">
<field name="pricelist_id" ref="product.list0"/>
<field name="compute_price">formula</field>
<field name="base">list_price</field>
</record>
<!-- Add demo-data for pretty website sales graph (for the sales dashboard) -->
<record id="website_sale_order_1" model="sale.order">
<field name="create_date" eval="datetime.now() - timedelta(days=8)"/>
<field name="partner_id" ref="base.res_partner_3"/>
<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.salesteam_website_sales"/>
<field name="date_order" eval="(datetime.now()-relativedelta(days=7)).strftime('%Y-%m-%d %H:%M:%S')"/>
<field name="state">sale</field>
</record>
<record id="website_sale_order_line_1" model="sale.order.line">
<field name="order_id" ref="website_sale_order_1"/>
<field name="name" model="sale.order.line" eval="obj().env.ref('product.product_product_6').get_product_multiline_description_sale()"/>
<field name="product_id" ref="product.product_product_6"/>
<field name="product_uom_qty">1</field>
<field name="product_uom" ref="uom.product_uom_unit"/>
<field name="price_unit">599.0</field>
</record>
<record id="website_sale_order_2" model="sale.order">
<field name="create_date" eval="datetime.now() - timedelta(days=8)"/>
<field name="partner_id" ref="base.res_partner_3"/>
<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.salesteam_website_sales"/>
<field name="date_order" eval="(datetime.now()-relativedelta(days=6)).strftime('%Y-%m-%d %H:%M:%S')"/>
<field name="state">sale</field>
</record>
<record id="website_sale_order_line_2" model="sale.order.line">
<field name="order_id" ref="website_sale_order_2"/>
<field name="name" model="sale.order.line" eval="obj().env.ref('product.product_product_4').get_product_multiline_description_sale()"/>
<field name="product_id" ref="product.product_product_4"/>
<field name="product_uom_qty">1</field>
<field name="product_uom" ref="uom.product_uom_unit"/>
<field name="price_unit">900</field>
</record>
<record id="website_sale_order_3" model="sale.order">
<field name="create_date" eval="datetime.now() - timedelta(days=8)"/>
<field name="partner_id" ref="base.res_partner_3"/>
<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.salesteam_website_sales"/>
<field name="date_order" eval="(datetime.now()-relativedelta(days=5)).strftime('%Y-%m-%d %H:%M:%S')"/>
<field name="tag_ids" eval="[(4, ref('sales_team.categ_oppor2'))]"/>
<field name="state">sale</field>
</record>
<record id="website_sale_order_line_3" model="sale.order.line">
<field name="order_id" ref="website_sale_order_3"/>
<field name="name" model="sale.order.line" eval="obj().env.ref('product.product_product_4').get_product_multiline_description_sale()"/>
<field name="product_id" ref="product.product_product_4"/>
<field name="product_uom_qty">1</field>
<field name="product_uom" ref="uom.product_uom_unit"/>
<field name="price_unit">750</field>
</record>
<record id="website_sale_order_4" model="sale.order">
<field name="create_date" eval="datetime.now() - timedelta(days=8)"/>
<field name="partner_id" ref="base.res_partner_3"/>
<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.salesteam_website_sales"/>
<field name="date_order" eval="(datetime.now()-relativedelta(days=4)).strftime('%Y-%m-%d %H:%M:%S')"/>
<field name="state">sale</field>
</record>
<record id="website_sale_order_line_4" model="sale.order.line">
<field name="order_id" ref="website_sale_order_4"/>
<field name="name" model="sale.order.line" eval="obj().env.ref('product.product_product_8').get_product_multiline_description_sale()"/>
<field name="product_id" ref="product.product_product_8"/>
<field name="product_uom_qty">1</field>
<field name="product_uom" ref="uom.product_uom_unit"/>
<field name="price_unit">1199.0</field>
</record>
<record id="website_sale_order_5" model="sale.order">
<field name="create_date" eval="datetime.now() - timedelta(days=8)"/>
<field name="partner_id" ref="base.res_partner_3"/>
<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.salesteam_website_sales"/>
<field name="date_order" eval="(datetime.now()-relativedelta(days=3)).strftime('%Y-%m-%d %H:%M:%S')"/>
<field name="state">sale</field>
</record>
<record id="website_sale_order_line_5" model="sale.order.line">
<field name="order_id" ref="website_sale_order_5"/>
<field name="name" model="sale.order.line" eval="obj().env.ref('product.product_product_4').get_product_multiline_description_sale()"/>
<field name="product_id" ref="product.product_product_4"/>
<field name="product_uom_qty">3</field>
<field name="product_uom" ref="uom.product_uom_unit"/>
<field name="price_unit">349.0</field>
</record>
<record id="website_sale_order_6" model="sale.order">
<field name="create_date" eval="datetime.now() - timedelta(days=8)"/>
<field name="partner_id" ref="base.res_partner_3"/>
<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.salesteam_website_sales"/>
<field name="date_order" eval="(datetime.now()-relativedelta(days=2)).strftime('%Y-%m-%d %H:%M:%S')"/>
<field name="state">sale</field>
</record>
<record id="website_sale_order_line_6" model="sale.order.line">
<field name="order_id" ref="website_sale_order_6"/>
<field name="name" model="sale.order.line" eval="obj().env.ref('product.product_product_8').get_product_multiline_description_sale()"/>
<field name="product_id" ref="product.product_product_8"/>
<field name="product_uom_qty">1</field>
<field name="product_uom" ref="uom.product_uom_unit"/>
<field name="price_unit">1599.00</field>
</record>
<record id="website_sale_order_7" model="sale.order">
<field name="create_date" eval="datetime.now() - timedelta(days=8)"/>
<field name="partner_id" ref="base.res_partner_3"/>
<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="website_id" ref="website.default_website"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="team_id" ref="sales_team.salesteam_website_sales"/>
<field name="date_order" eval="(datetime.now()-relativedelta(days=1)).strftime('%Y-%m-%d %H:%M:%S')"/>
<field name="state">sale</field>
</record>
<record id="website_sale_order_line_7" model="sale.order.line">
<field name="order_id" ref="website_sale_order_7"/>
<field name="name" model="sale.order.line" eval="obj().env.ref('product.product_product_8').get_product_multiline_description_sale()"/>
<field name="product_id" ref="product.product_product_8"/>
<field name="product_uom_qty">1</field>
<field name="product_uom" ref="uom.product_uom_unit"/>
<field name="price_unit">1349.00</field>
</record>
<record id="website_sale_order_8" model="sale.order">
<field name="partner_id" ref="base.res_partner_3"/>
<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="website_id" ref="website.default_website"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="team_id" ref="sales_team.salesteam_website_sales"/>
<field name="date_order" eval="datetime.now()"/>
<field name="tag_ids" eval="[(4, ref('sales_team.categ_oppor1'))]"/>
<field name="state">sale</field>
</record>
<record id="website_sale_order_line_8" model="sale.order.line">
<field name="order_id" ref="website_sale_order_8"/>
<field name="name" model="sale.order.line" eval="obj().env.ref('product.product_product_8').get_product_multiline_description_sale()"/>
<field name="product_id" ref="product.product_product_8"/>
<field name="product_uom_qty">1</field>
<field name="product_uom" ref="uom.product_uom_unit"/>
<field name="price_unit">1799.00</field>
</record>
<record id="website_sale_order_9" model="sale.order">
<field name="partner_id" ref="base.res_partner_3"/>
<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="website_id" ref="website.default_website"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="team_id" ref="sales_team.salesteam_website_sales"/>
<field name="date_order" eval="(datetime.now()-relativedelta(hours=2)).strftime('%Y-%m-%d %H:%M:%S')"/>
</record>
<record id="website_sale_order_line_9" model="sale.order.line">
<field name="order_id" ref="website_sale_order_9"/>
<field name="name" model="sale.order.line" eval="obj().env.ref('product.product_product_25').get_product_multiline_description_sale()"/>
<field name="product_id" ref="product.product_product_25"/>
<field name="product_uom_qty">1</field>
<field name="product_uom" ref="uom.product_uom_unit"/>
<field name="price_unit">295.00</field>
</record>
<record id="website_sale_order_line_10" model="sale.order.line">
<field name="order_id" ref="website_sale_order_9"/>
<field name="name" model="sale.order.line" eval="obj().env.ref('product.product_product_12').get_product_multiline_description_sale()"/>
<field name="product_id" ref="product.product_product_12"/>
<field name="product_uom_qty">1</field>
<field name="product_uom" ref="uom.product_uom_unit"/>
<field name="price_unit">120.50</field>
</record>
<!-- Active Carts -->
<record id="website_sale_order_10" model="sale.order">
<field name="partner_id" ref="base.res_partner_3"/>
<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="website_id" ref="website.default_website"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="team_id" ref="sales_team.salesteam_website_sales"/>
<field name="date_order" eval="datetime.now()"/>
<field name="tag_ids" eval="[(4, ref('sales_team.categ_oppor5'))]"/>
</record>
<record id="website_sale_order_line_11" model="sale.order.line">
<field name="order_id" ref="website_sale_order_10"/>
<field name="name" model="sale.order.line" eval="obj().env.ref('product.product_product_11').get_product_multiline_description_sale()"/>
<field name="product_id" ref="product.product_product_11"/>
<field name="product_uom_qty">2</field>
<field name="product_uom" ref="uom.product_uom_unit"/>
<field name="price_unit">33</field>
</record>
<!-- Abandoned Carts -->
<record id="website_sale_order_11" model="sale.order">
<field name="partner_id" ref="base.res_partner_3"/>
<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="website_id" ref="website.default_website"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="team_id" ref="sales_team.salesteam_website_sales"/>
<field name="date_order" eval="(datetime.now()-timedelta(hours=1)).strftime('%Y-%m-%d %H:%M:%S')"/>
</record>
<record id="website_sale_order_line_12" model="sale.order.line">
<field name="order_id" ref="website_sale_order_11"/>
<field name="name" model="sale.order.line" eval="obj().env.ref('product.product_product_9').get_product_multiline_description_sale()"/>
<field name="product_id" ref="product.product_product_9"/>
<field name="product_uom_qty">1</field>
<field name="product_uom" ref="uom.product_uom_unit"/>
<field name="price_unit">47.0</field>
</record>
<!-- Payments to Capture -->
<record id="website_sale_order_13" model="sale.order">
<field name="partner_id" ref="base.res_partner_3"/>
<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="website_id" ref="website.default_website"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="team_id" ref="sales_team.salesteam_website_sales"/>
<field name="payment_term_id" ref="account.account_payment_term_immediate"/>
<field name="date_order" eval="(datetime.now()-timedelta(hours=1)).strftime('%Y-%m-%d %H:%M:%S')"/>
<field name="state">sent</field>
</record>
<record id="website_sale_order_line_14" model="sale.order.line">
<field name="order_id" ref="website_sale_order_13"/>
<field name="name" model="sale.order.line" eval="obj().env.ref('product.product_product_8').get_product_multiline_description_sale()"/>
<field name="product_id" ref="product.product_product_8"/>
<field name="product_uom_qty">1</field>
<field name="product_uom" ref="uom.product_uom_unit"/>
<field name="price_unit">1799.0</field>
</record>
<!-- Order to Invoice -->
<record id="website_sale_order_14" model="sale.order">
<field name="partner_id" ref="base.res_partner_3"/>
<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="website_id" ref="website.default_website"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="team_id" ref="sales_team.salesteam_website_sales"/>
</record>
<record id="website_sale_order_line_15" model="sale.order.line">
<field name="order_id" ref="website_sale_order_14"/>
<field name="name" model="sale.order.line" eval="obj().env.ref('product.product_product_16').get_product_multiline_description_sale()"/>
<field name="product_id" ref="product.product_product_16"/>
<field name="product_uom_qty">1</field>
<field name="product_uom" ref="uom.product_uom_unit"/>
<field name="price_unit">25.0</field>
</record>
<record id="website_sale_order_16" model="sale.order">
<field name="create_date" eval="datetime.now() - relativedelta(months=1)"/>
<field name="partner_id" ref="base.res_partner_3"/>
<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="website_id" ref="website.default_website"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="team_id" ref="sales_team.salesteam_website_sales"/>
<field name="date_order" eval="datetime.now()-relativedelta(months=1)"/>
<field name="state">sale</field>
</record>
<record id="website_sale_order_line_16" model="sale.order.line">
<field name="order_id" ref="website_sale_order_16"/>
<field name="name" model="sale.order.line" eval="obj().env.ref('product.product_product_8').get_product_multiline_description_sale()"/>
<field name="product_id" ref="product.product_product_8"/>
<field name="product_uom_qty">2</field>
<field name="product_uom" ref="uom.product_uom_unit"/>
<field name="price_unit">1799.0</field>
</record>
<record id="website_sale_order_17" model="sale.order">
<field name="create_date" eval="datetime.now() - relativedelta(months=1, days=2)"/>
<field name="partner_id" ref="base.res_partner_3"/>
<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="website_id" ref="website.default_website"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="team_id" ref="sales_team.salesteam_website_sales"/>
<field name="date_order" eval="datetime.now()-relativedelta(months=1, days=2)"/>
</record>
<record id="website_sale_order_line_17" model="sale.order.line">
<field name="order_id" ref="website_sale_order_17"/>
<field name="name" model="sale.order.line" eval="obj().env.ref('product.product_product_9').get_product_multiline_description_sale()"/>
<field name="product_id" ref="product.product_product_9"/>
<field name="product_uom_qty">7</field>
<field name="product_uom" ref="uom.product_uom_unit"/>
<field name="price_unit">47.0</field>
<field name="invoice_status">to invoice</field>
</record>
<record id="website_sale_order_18" model="sale.order">
<field name="create_date" eval="datetime.now() - relativedelta(months=2)"/>
<field name="partner_id" ref="base.res_partner_3"/>
<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="website_id" ref="website.default_website"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="team_id" ref="sales_team.salesteam_website_sales"/>
<field name="date_order" eval="datetime.now()-relativedelta(months=2)"/>
</record>
<record id="website_sale_order_line_18" model="sale.order.line">
<field name="order_id" ref="website_sale_order_18"/>
<field name="name" model="sale.order.line" eval="obj().env.ref('product.product_product_9').get_product_multiline_description_sale()"/>
<field name="product_id" ref="product.product_product_9"/>
<field name="product_uom_qty">3</field>
<field name="product_uom" ref="uom.product_uom_unit"/>
<field name="price_unit">47.0</field>
<field name="invoice_status">to invoice</field>
</record>
<!-- action_confirm for confirmation date -->
<function model="sale.order" name="action_confirm" eval="[[ref('website_sale_order_14')]]"/>
<record id="product_product_1_product_template" model="product.template">
<field name="name">Warranty</field>
<field name="list_price">20.0</field>
<field name="website_sequence">9980</field>
<field name="is_published" eval="True"/>
<field name="type">service</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="description_sale">Warranty, issued to the purchaser of an article by its manufacturer, promising to repair or replace it if necessary within a specified period of time.</field>
<field name="categ_id" ref="product.product_category_3"/>
<field name="invoice_policy">delivery</field>
<field name="public_categ_ids" eval="[(6, 0, [ref('website_sale.services')])]"/>
<field name="image_1920" type="base64" file="website_sale/static/src/img/warranty.jpg"/>
</record>
<record id="product_1_attribute_3_product_template_attribute_line" model="product.template.attribute.line">
<field name="product_tmpl_id" ref="website_sale.product_product_1_product_template"/>
<field name="attribute_id" ref="product.product_attribute_3"/>
<field name="value_ids" eval="[(6,0,[ref('product.product_attribute_value_5'), ref('product.product_attribute_value_6')])]"/>
</record>
<!-- Handle automatically created product.template.attribute.value -->
<function model="ir.model.data" name="_update_xmlids">
<value model="base" eval="[{
'xml_id': 'website_sale.product_1_attribute_3_value_1',
'record': obj().env.ref('website_sale.product_1_attribute_3_product_template_attribute_line').product_template_value_ids[0],
'noupdate': True,
}, {
'xml_id': 'website_sale.product_1_attribute_3_value_2',
'record': obj().env.ref('website_sale.product_1_attribute_3_product_template_attribute_line').product_template_value_ids[1],
'noupdate': True,
}]"/>
</function>
<function model="ir.model.data" name="_update_xmlids">
<value model="base" eval="[{
'xml_id': 'website_sale.product_product_1',
'record': obj().env.ref('website_sale.product_product_1_product_template')._get_variant_for_combination(obj().env.ref('website_sale.product_1_attribute_3_value_1')),
'noupdate': True,
}, {
'xml_id': 'website_sale.product_product_1b',
'record': obj().env.ref('website_sale.product_product_1_product_template')._get_variant_for_combination(obj().env.ref('website_sale.product_1_attribute_3_value_2')),
'noupdate': True,
},]"/>
</function>
<record id="product_product_1" model="product.product">
<field name="default_code">SERV_125889</field>
</record>
<record id="product_product_1b" model="product.product">
<field name="default_code">SERV_125890</field>
</record>
<record id="website_sale.product_1_attribute_3_value_2" model="product.template.attribute.value">
<field name="price_extra">18.00</field>
</record>
<record id="website_sale_activity_1" model="mail.activity">
<field name="res_id" ref="website_sale.website_sale_order_3"/>
<field name="res_model_id" ref="sale.model_sale_order"/>
<field name="activity_type_id" ref="mail.mail_activity_data_call"/>
<field name="date_deadline" eval="(DateTime.today() + relativedelta(days=5)).strftime('%Y-%m-%d %H:%M')" />
<field name="create_uid" ref="base.user_demo"/>
<field name="user_id" ref="base.user_demo"/>
</record>
<record id="website_sale_activity_2" model="mail.activity">
<field name="res_id" ref="website_sale.website_sale_order_8"/>
<field name="res_model_id" ref="sale.model_sale_order"/>
<field name="activity_type_id" ref="mail.mail_activity_data_todo"/>
<field name="date_deadline" eval="(DateTime.today() + relativedelta(days=5)).strftime('%Y-%m-%d %H:%M')" />
<field name="summary">Follow-up on satisfaction</field>
<field name="create_uid" ref="base.user_demo"/>
<field name="user_id" ref="base.user_demo"/>
</record>
<record id="website_sale_activity_3" model="mail.activity">
<field name="res_id" ref="website_sale.website_sale_order_9"/>
<field name="res_model_id" ref="sale.model_sale_order"/>
<field name="activity_type_id" ref="mail.mail_activity_data_todo"/>
<field name="date_deadline" eval="(DateTime.today() + relativedelta(days=5)).strftime('%Y-%m-%d %H:%M')" />
<field name="summary">Confirm quote</field>
<field name="create_uid" ref="base.user_demo"/>
<field name="user_id" ref="base.user_demo"/>
</record>
<record id="website_sale_activity_5" model="mail.activity">
<field name="res_id" ref="website_sale.website_sale_order_11"/>
<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">Send updated pricelist</field>
<field name="create_uid" ref="base.user_demo"/>
<field name="user_id" ref="base.user_demo"/>
</record>
</odoo>

View file

@ -0,0 +1,8 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<data noupdate="1">
<record id="digest.digest_digest_default" model="digest.digest">
<field name="kpi_website_sale_total">True</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="ir_cron_send_availability_email" model="ir.cron">
<field name="name">eCommerce: send email to customers about their abandoned cart</field>
<field name="interval_number">1</field>
<field name="interval_type">hours</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
<field name="model_id" ref="model_website"/>
<field name="code">model._send_abandoned_cart_email()</field>
<field name="state">code</field>
</record>
</odoo>

View file

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<record id="mail_template_sale_cart_recovery" model="mail.template">
<field name="name">Ecommerce: Cart Recovery</field>
<field name="model_id" ref="sale.model_sale_order"/>
<field name="subject">You left items in your cart!</field>
<field name="email_from">{{ (object.user_id.email_formatted or object.company_id.email_formatted or user.email_formatted or '') }}</field>
<field name="partner_to">{{ object.partner_id.id }}</field>
<field name="description">If the setting is set, sent to authenticated visitors who abandoned their cart</field>
<field name="body_html" type="html">
<table border="0" cellpadding="0" cellspacing="0" width="590" style="padding: 0px; background-color: white; color: #454748; border-collapse:separate;">
<tbody>
<!-- CONTENT -->
<tr>
<td align="center" style="min-width: 590px;">
<table border="0" cellpadding="0" cellspacing="0" width="590" style="min-width: 590px; background-color: white; padding: 0px 0px 0px 0px; border-collapse:separate;">
<tr><td valign="top" style="font-size: 13px;">
<h1 style="color:#A9A9A9;">THERE'S SOMETHING IN YOUR CART.</h1>
Would you like to complete your purchase?<br/><br/>
<t t-if="object.order_line">
<t t-foreach="object.website_order_line" t-as="line">
<hr/>
<table width="100%">
<tr>
<td style="padding: 10px; width:150px;">
<img t-attf-src="/web/image/product.product/{{ line.product_id.id }}/image_128" style="width: 100px; height: 100px; object-fit: contain;" alt="Product image"></img>
</td>
<td>
<strong t-out="line.product_id.display_name or ''">[FURN_7800] Desk Combination</strong><br/><t t-out="line.name or ''">[FURN_7800] Desk Combination Desk combination, black-brown: chair + desk + drawer.</t>
</td>
<td width="100px" align="right">
<t t-out="int(line.product_uom_qty) or ''">10000</t> <t t-out="line.product_uom.name or ''">Units</t>
</td>
</tr>
</table>
</t>
<hr/>
</t>
<div style="text-align: center; padding: 16px 0px 16px 0px; font-size: 14px;">
<a t-attf-href="{{ object.get_base_url() }}/shop/cart?access_token={{ object.access_token }}"
target="_blank"
style="background-color: #875A7B; padding: 8px 16px 8px 16px; text-decoration: none; color: #fff; border-radius: 5px; font-size:13px;">
Resume order
</a>
</div>
<t t-set="company" t-value="object.company_id or object.user_id.company_id or user.company_id"/>
<div style="text-align: center;"><strong>Thank you for shopping with <t t-out="company.name or ''">My Company (San Francisco)</t>!</strong></div>
</td></tr>
</table>
</td>
</tr>
</tbody>
</table>
</field>
<field name="lang">{{ object.partner_id.lang }}</field>
<field name="auto_delete" eval="False"/>
</record>
</data>
</odoo>

View file

@ -0,0 +1,406 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- Templates for Dynamic Snippet -->
<template id="dynamic_filter_template_product_product_add_to_cart" name="Classic Card">
<t t-foreach="records" t-as="data" data-thumb="/website_sale/static/src/img/snippets_options/product_add_to_cart.svg">
<t t-set="record" t-value="data['_record']"/>
<div class="o_carousel_product_card card h-100 w-100" t-att-data-add2cart-rerender="data.get('_add2cart_rerender')">
<div t-if="is_sample" class="h5 o_ribbon_right bg-primary text-uppercase">Sample</div>
<input type="hidden" name="product-id" t-att-data-product-id="record.id"/>
<a class="o_carousel_product_img_link o_dynamic_product_hovered overflow-hidden" t-att-href="record.website_url">
<img class="card-img-top o_img_product_square o_img_product_cover h-auto" loading="lazy" t-att-src="data['image_512']"
t-att-alt="record.display_name"/>
</a>
<i t-if="data.get('_latest_viewed')" class="fa fa-trash o_carousel_product_remove js_remove"/>
<div class="o_carousel_product_card_body card-body d-flex flex-wrap">
<a t-att-href="record.website_url" class="text-decoration-none d-block w-100">
<div class="h6 card-title mb-0" t-field="record.display_name"/>
</a>
<div class="mt-2">
<t t-if="is_view_active('website_sale.product_comment')" t-call="portal_rating.rating_widget_stars_static">
<t t-set="rating_avg" t-value="record.rating_avg"/>
<t t-set="rating_count" t-value="record.rating_count"/>
</t>
</div>
<div class="w-100 d-flex flex-wrap flex-md-column flex-lg-row align-items-center align-self-end justify-content-between mt-3">
<div class="py-2">
<t t-call="website_sale.price_dynamic_filter_template_product_product"/>
</div>
<div class="o_dynamic_snippet_btn_wrapper" t-if="record._website_show_quick_add()">
<button type="button" role="button" class="btn btn-primary js_add_cart ms-auto" title="Add to Cart">
<i class="fa fa-fw fa-shopping-cart"/>
</button>
</div>
</div>
</div>
</div>
</t>
</template>
<template id="dynamic_filter_template_product_product_view_detail" name="Classic Card - Detailed">
<t t-foreach="records" t-as="data" data-number-of-elements="3" data-thumb="/website_sale/static/src/img/snippets_options/product_view_detail.svg">
<t t-set="record" t-value="data['_record']" data-arrow-position="bottom"/>
<div class="o_carousel_product_card card h-100 w-100" t-att-data-add2cart-rerender="data.get('_add2cart_rerender')">
<div t-if="is_sample" class="h5 o_ribbon_right bg-primary text-uppercase">Sample</div>
<a class="o_carousel_product_img_link o_dynamic_product_hovered overflow-hidden" t-att-href="record.website_url">
<img class="card-img-top o_img_product_square o_img_product_cover h-auto" loading="lazy" t-att-src="data['image_512']" t-att-alt="record.display_name"/>
</a>
<div class="o_carousel_product_card_body card-body d-flex flex-column justify-content-between">
<div class="card-title h5" t-field="record.display_name"/>
<div class="card-text flex-grow-1 text-muted h6" t-field="record.description_sale"/>
<div class="mt-2">
<t t-if="is_view_active('website_sale.product_comment')" t-call="portal_rating.rating_widget_stars_static">
<t t-set="rating_avg" t-value="record.rating_avg"/>
<t t-set="rating_count" t-value="record.rating_count"/>
</t>
</div>
<div class="d-flex justify-content-between flex-wrap flex-md-column flex-lg-row align-items-center align-self-end w-100 mt-2 pt-3 border-top">
<div class="pb-2">
<t t-call="website_sale.price_dynamic_filter_template_product_product"/>
</div>
<a class="btn btn-primary" t-att-href="record.website_url">
View product
</a>
</div>
</div>
</div>
</t>
</template>
<template id="dynamic_filter_template_product_product_mini_image" name="Image only">
<t t-foreach="records" t-as="data" data-number-of-elements="4" data-number-of-elements-sm="1" data-thumb="/website_sale/static/src/img/snippets_options/product_image_only.svg">
<t t-set="record" t-value="data['_record']"/>
<div class="card h-100 border-0 w-100 rounded-0 bg-transparent" t-att-data-url="record.website_url">
<div t-if="is_sample" class="h5 o_ribbon_right bg-primary text-uppercase">Sample</div>
<a class="o_carousel_product_img_link o_dynamic_product_hovered overflow-hidden" t-att-href="record.website_url">
<img class="card-img-top h-auto o_img_product_square o_img_product_cover rounded" loading="lazy" t-att-src="data['image_512']" t-att-alt="record.display_name"/>
</a>
</div>
</t>
</template>
<template id="dynamic_filter_template_product_product_mini_price" name="Image with price">
<t t-foreach="records" t-as="data" data-thumb="/website_sale/static/src/img/snippets_options/product_image_with_price.svg">
<t t-set="record" t-value="data['_record']"/>
<div class="card h-100 border-0 w-100 rounded-0 bg-transparent o_dynamic_product_hovered" t-att-data-url="record.website_url">
<div t-if="is_sample" class="h5 o_ribbon_right bg-primary text-uppercase">Sample</div>
<a class="o_carousel_product_img_link o_dynamic_product_hovered overflow-hidden" t-att-href="record.website_url">
<img class="card-img-top h-auto o_img_product_square o_img_product_cover rounded" loading="lazy" t-att-src="data['image_512']" t-att-alt="record.display_name"/>
</a>
<div class="o_carousel_product_card_body mt-2 d-flex justify-content-between">
<t t-if="is_view_active('website_sale.product_comment')" t-call="portal_rating.rating_widget_stars_static">
<t t-set="rating_style_compressed" t-value="true"/>
<t t-set="rating_avg" t-value="record.rating_avg"/>
<t t-set="rating_count" t-value="record.rating_count"/>
</t>
<div class="ms-auto">
<t t-call="website_sale.price_dynamic_filter_template_product_product"/>
</div>
</div>
</div>
</t>
</template>
<template id="dynamic_filter_template_product_product_mini_name" name="Image with name">
<t t-foreach="records" t-as="data" data-thumb="/website_sale/static/src/img/snippets_options/product_image_with_name.svg">
<t t-set="record" t-value="data['_record']"/>
<div class="card h-100 border-0 w-100 rounded-0 bg-transparent o_dynamic_product_hovered" t-att-data-url="record.website_url">
<div t-if="is_sample" class="h5 o_ribbon_right bg-primary text-uppercase">Sample</div>
<a class="o_carousel_product_img_link overflow-hidden" t-att-href="record.website_url">
<img class="card-img-top h-auto o_img_product_square o_img_product_cover rounded" loading="lazy" t-att-src="data['image_512']" t-att-alt="record.display_name"/>
</a>
<div class="h6 text-center mt-2 p-2" t-field="record.display_name"/>
<div class="text-center">
<t t-if="is_view_active('website_sale.product_comment')" t-call="portal_rating.rating_widget_stars_static">
<t t-set="rating_avg" t-value="record.rating_avg"/>
<t t-set="rating_count" t-value="record.rating_count"/>
</t>
</div>
</div>
</t>
</template>
<template id="dynamic_filter_template_product_product_centered" name="Centered Product">
<t t-foreach="records" t-as="data" data-arrow-position="bottom" data-thumb="/website_sale/static/src/img/snippets_options/product_centered.svg">
<t t-set="record" t-value="data['_record']"/>
<div class="o_carousel_product_card card w-100" t-att-data-add2cart-rerender="data.get('_add2cart_rerender')">
<div t-if="is_sample" class="h5 o_ribbon_right bg-primary text-uppercase">Sample</div>
<input type="hidden" name="product-id" t-att-data-product-id="record.id"/>
<a class="o_carousel_product_img_link position-absolute mx-auto" t-att-href="record.website_url">
<img class="card-img-top" loading="lazy" t-att-src="data['image_512']" t-att-alt="record.display_name"/>
</a>
<div class="o_carousel_product_card_body card-body d-flex flex-column justify-content-between">
<div class="card-title h5 text-center" t-field="record.display_name"/>
<div class="text-center">
<div class="h5">
<t t-call="website_sale.price_dynamic_filter_template_product_product"/>
</div>
<div class="h6 mb-0">
<t t-if="is_view_active('website_sale.product_comment')">
<t t-call="portal_rating.rating_widget_stars_static">
<t t-set="rating_avg" t-value="record.rating_avg"/>
<t t-set="rating_count" t-value="record.rating_count"/>
</t>
</t>
</div>
</div>
</div>
<div class="o_carousel_product_card_footer d-flex align-items-center justify-content-center pb-4">
<a class="btn btn-primary d-block" t-att-href="record.website_url">
View Product
</a>
</div>
</div>
</t>
</template>
<template id="dynamic_filter_template_product_product_borderless_1" name="Borderless Product n°1">
<t t-foreach="records" t-as="data" data-thumb="/website_sale/static/src/img/snippets_options/product_borderless_1.svg">
<t t-set="record" t-value="data['_record']"/>
<div class="o_carousel_product_card bg-transparent w-100 card border-0">
<div t-if="is_sample" class="h5 o_ribbon_right bg-primary text-uppercase">Sample</div>
<input type="hidden" name="product-id" t-att-data-product-id="record.id"/>
<a class="o_carousel_product_img_link o_dynamic_product_hovered stretched-link" t-att-href="record.website_url">
<div class="overflow-hidden rounded">
<img class="card-img-top o_img_product_square o_img_product_cover h-auto" loading="lazy" t-att-src="data['image_512']"
t-att-alt="record.display_name"/>
</div>
</a>
<div class="o_carousel_product_card_body d-flex flex-wrap flex-column justify-content-between h-100 p-3">
<div class="h6 card-title" t-field="record.display_name"/>
<div>
<t t-if="is_view_active('website_sale.product_comment')" t-call="portal_rating.rating_widget_stars_static">
<t t-set="rating_avg" t-value="record.rating_avg"/>
<t t-set="rating_count" t-value="record.rating_count"/>
</t>
<div class="mt-2">
<t t-call="website_sale.price_dynamic_filter_template_product_product"/>
</div>
</div>
</div>
</div>
</t>
</template>
<template id="dynamic_filter_template_product_product_borderless_2" name="Borderless Product n°2">
<t t-foreach="records" t-as="data" data-thumb="/website_sale/static/src/img/snippets_options/product_borderless_2.svg">
<t t-set="record" t-value="data['_record']"/>
<div class="o_carousel_product_card card w-100 border-0 bg-transparent" t-att-data-add2cart-rerender="data.get('_add2cart_rerender')">
<div t-if="is_sample" class="h5 o_ribbon_right bg-primary text-uppercase">Sample</div>
<input type="hidden" name="product-id" t-att-data-product-id="record.id"/>
<a class="o_carousel_product_img_link o_dynamic_product_hovered" t-att-href="record.website_url">
<div class="overflow-hidden rounded">
<img class="card-img-top o_img_product_square o_img_product_cover h-auto" loading="lazy" t-att-src="data['image_512']"
t-att-alt="record.display_name"/>
</div>
</a>
<div class="o_carousel_product_card_body h-100 p-3 d-flex flex-column justify-content-between">
<div class="d-flex justify-content-between align-items-center flex-wrap mb-2">
<div class="h5 mb-0 me-4">
<t t-call="website_sale.price_dynamic_filter_template_product_product"/>
</div>
<div class="h6 mb-0">
<t t-if="is_view_active('website_sale.product_comment')">
<t t-call="portal_rating.rating_widget_stars_static">
<t t-set="rating_style_compressed" t-value="true"/>
<t t-set="rating_avg" t-value="record.rating_avg"/>
<t t-set="rating_count" t-value="record.rating_count"/>
</t>
</t>
</div>
</div>
<div class="card-title h6 flex-grow-1 w-100 mt-2 mb-3" t-field="record.display_name"/>
<div class="text-end o_dynamic_snippet_btn_wrapper" t-if="record._website_show_quick_add()">
<button type="button" role="button" class="btn btn-primary js_add_cart w-100" title="Add to Cart">
Add to Cart
</button>
</div>
</div>
</div>
</t>
</template>
<template id="dynamic_filter_template_product_product_banner" name="Large Banner">
<t t-foreach="records" t-as="data" data-number-of-elements="1" data-number-of-elements-sm="1" data-thumb="/website_sale/static/src/img/snippets_options/product_banner.svg">
<t t-set="record" t-value="data['_record']"/>
<div class="o_carousel_product_card card w-100" t-att-data-add2cart-rerender="data.get('_add2cart_rerender')">
<div t-if="is_sample" class="h5 o_ribbon_right bg-primary text-uppercase">Sample</div>
<input type="hidden" name="product-id" t-att-data-product-id="record.id"/>
<div class="row flex-row-reverse">
<div class="col-lg-6 d-flex align-items-center justify-content-center justify-content-lg-end o_wrap_product_img position-relative">
<img class="img img-fluid position-absolute o_img_product_cover w-100 h-100" loading="lazy" t-att-src="data['image_512']" t-att-alt="record.display_name"/>
</div>
<div class="col-lg-6 px-5 d-flex align-items-center">
<div class="o_carousel_product_card_body card-body p-5">
<div class="card-title h1" t-field="record.display_name"/>
<div class="d-flex align-items-center my-4">
<div class="h4 mb-0 me-3">
<t t-call="website_sale.price_dynamic_filter_template_product_product"/>
</div>
<t t-if="is_view_active('website_sale.product_comment')" t-call="portal_rating.rating_widget_stars_static">
<t t-set="rating_avg" t-value="record.rating_avg"/>
<t t-set="rating_count" t-value="record.rating_count"/>
</t>
</div>
<div class="card-text text-muted" t-field="record.description_sale"/>
<div class="mt-4">
<button t-if="record._website_show_quick_add()" type="button" role="button" class="btn btn-primary js_add_cart mt-1" title="Add to Cart">
Add to Cart
</button>
<a class="btn btn-link me-1 mt-1" t-att-href="record.website_url">
View Product
</a>
</div>
</div>
</div>
</div>
</div>
</t>
</template>
<template id="dynamic_filter_template_product_product_horizontal_card" name="Horizontal Card">
<t t-foreach="records" t-as="data"
data-number-of-elements="3"
data-number-of-elements-sm="1"
data-row-per-slide="2"
data-arrow-position="bottom"
data-extra-classes="o_carousel_multiple_rows"
data-thumb="/website_sale/static/src/img/snippets_options/product_horizontal_card.svg">
<t t-set="record" t-value="data['_record']"/>
<div class="o_carousel_product_card card w-100 border-0 bg-light p-3" t-att-data-add2cart-rerender="data.get('_add2cart_rerender')">
<div t-if="is_sample" class="h5 o_ribbon_right bg-primary text-uppercase">Sample</div>
<input type="hidden" name="product-id" t-att-data-product-id="record.id"/>
<div class="row h-100 p-0">
<div class="col-lg-4 position-static">
<a class="stretched-link o_dynamic_product_hovered" t-att-href="record.website_url">
<img class="img img-fluid mx-auto o_img_product_square" loading="lazy" t-att-src="data['image_512']" t-att-alt="record.display_name"/>
</a>
</div>
<div class="o_carousel_product_card_body col-lg-8 d-flex flex-column justify-content-between">
<div>
<div class="card-title h6" t-field="record.display_name"/>
</div>
<div>
<div class="mb-1">
<t t-if="is_view_active('website_sale.product_comment')" t-call="portal_rating.rating_widget_stars_static">
<t t-set="rating_avg" t-value="record.rating_avg"/>
<t t-set="rating_count" t-value="record.rating_count"/>
</t>
</div>
<div class="d-flex align-items-center flex-wrap">
<div class="my-2">
<t t-call="website_sale.price_dynamic_filter_template_product_product"/>
</div>
<div t-if="record._website_show_quick_add()" class="o_dynamic_snippet_btn_wrapper ms-auto">
<button type="button" role="button" class="btn btn-primary js_add_cart" title="Add to Cart">
<i class="fa fa-fw fa-shopping-cart"/>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</t>
</template>
<template id="dynamic_filter_template_product_product_horizontal_card_2" name="Horizontal Card width covered image">
<t t-foreach="records" t-as="data"
data-row-per-slide="2"
data-arrow-position="bottom"
data-number-of-elements="2"
data-number-of-elements-sm="1"
data-extra-classes="o_carousel_multiple_rows"
data-thumb="/website_sale/static/src/img/snippets_options/product_horizontal_card_2.svg">
<t t-set="record" t-value="data['_record']"/>
<div class="o_carousel_product_card card w-100 border-0 o_dynamic_product_hovered o_cc o_cc5">
<div t-if="is_sample" class="h5 o_ribbon_right bg-primary text-uppercase">Sample</div>
<input type="hidden" name="product-id" t-att-data-product-id="record.id"/>
<a class="stretched-link" t-att-href="record.website_url">
<img class="img img-fluid position-absolute w-100 h-100 o_img_product_cover" loading="lazy" t-att-src="data['image_512']" t-att-alt="record.display_name"/>
</a>
<div class="o_carousel_product_card_body d-flex flex-column justify-content-between h-100 bg-black-50 p-3 position-relative">
<div class="mb-3">
<div class="card-title h5" t-field="record.display_name"/>
<t t-if="is_view_active('website_sale.product_comment')" t-call="portal_rating.rating_widget_stars_static">
<t t-set="rating_avg" t-value="record.rating_avg"/>
<t t-set="rating_count" t-value="record.rating_count"/>
</t>
</div>
<div class="card-text h6 flex-grow-1" t-field="record.description_sale"/>
<div class="d-flex justify-content-between align-items-center flex-wrap mt-3">
<div class="h5 mb-0 me-2">
<t t-call="website_sale.price_dynamic_filter_template_product_product"/>
</div>
<div t-if="record._website_show_quick_add()" class="o_dynamic_snippet_btn_wrapper">
<button type="button" role="button" class="btn btn-primary js_add_cart" title="Add to Cart">
Add to Cart
</button>
</div>
</div>
</div>
</div>
</t>
</template>
<template id="dynamic_filter_template_product_product_card_group" name="Card group">
<t t-foreach="records" t-as="data"
data-row-per-slide="2"
data-number-of-elements="2"
data-number-of-elements-sm="1"
data-arrow-position="bottom"
data-extra-classes="o_card_group rounded"
data-thumb="/website_sale/static/src/img/snippets_options/product_card_group.svg">
<t t-set="record" t-value="data['_record']"/>
<div class="o_carousel_product_card card w-100 rounded-0 border-top-0 border-start-0" t-att-data-url="record.website_url">
<div t-if="is_sample" class="h5 o_ribbon_right bg-primary text-uppercase">Sample</div>
<input type="hidden" name="product-id" t-att-data-product-id="record.id"/>
<div class="o_carousel_product_card_body card-body justify-content-between h-100 p-3">
<div class="row h-100">
<div class="col-8 d-flex flex-column">
<div class="card-title h5" t-field="record.display_name"/>
<div class="card-text h6 text-muted" t-field="record.description_sale"/>
<div class="d-flex justify-content-between align-items-center flex-wrap w-100 mt-auto">
<div class="h5 text-primary mb-0 me-2">
<t t-call="website_sale.price_dynamic_filter_template_product_product"/>
</div>
<t t-if="is_view_active('website_sale.product_comment')" t-call="portal_rating.rating_widget_stars_static">
<t t-set="rating_avg" t-value="record.rating_avg"/>
<t t-set="rating_count" t-value="record.rating_count"/>
</t>
</div>
</div>
<div class="col-4 position-static">
<div class="overflow-hidden position-static">
<a class="stretched-link o_dynamic_product_hovered" t-att-href="record.website_url">
<img class="img img-fluid o_img_product_square o_img_product_cover h-auto" loading="lazy" t-att-src="data['image_512']" t-att-alt="record.display_name"/>
</a>
</div>
</div>
</div>
</div>
</div>
</t>
</template>
<template id="price_dynamic_filter_template_product_product" name="Dynamic Product Filter Price">
<t t-set="record_price" t-value="record._get_contextual_price_tax_selection()"/>
<t t-if="not website.prevent_zero_price_sale or record_price">
<span t-esc="record_price" class="fw-bold"
t-options="{'widget': 'monetary', 'display_currency': website.currency_id}"/>
<del t-if="data.get('has_discounted_price')" class="text-danger ms-1 h6" style="white-space: nowrap;"
t-esc="data['list_price']"
t-options="{'widget': 'monetary', 'display_currency': website.currency_id}"/>
</t>
<t t-else="">
<span t-field="website.prevent_zero_price_sale_text"/>
</t>
</template>
<!-- Assets -->
<record id="website_sale.s_dynamic_snippet_products_000_scss" model="ir.asset">
<field name="name">Dynamic snippet products 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="path">website_sale/static/src/snippets/s_dynamic_snippet_products/000.scss</field>
</record>
</data>
</odoo>