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

@ -18,37 +18,36 @@
<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>
<field name="name">Sale</field>
<field name="position">left</field>
<field name="text_color">#FFFFFF</field>
<field name="bg_color">#0CA725</field>
<field name="sequence">3</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>
<field name="name">Sold out</field>
<field name="position">left</field>
<field name="text_color">#FFFFFF</field>
<field name="bg_color">#d9534f</field>
<field name="sequence">1</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>
<field name="name">Out of stock</field>
<field name="position">left</field>
<field name="text_color">#FFFFFF</field>
<field name="bg_color">#ffc107</field>
<field name="sequence">2</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>
<field name="name">New!</field>
<field name="position">left</field>
<field name="text_color">#FFFFFF</field>
<field name="bg_color">#0275d8</field>
<field name="sequence">4</field>
</record>
<record id="sales_team.salesteam_website_sales" model="crm.team">
@ -57,11 +56,42 @@
<record model="website" id="website.default_website">
<field name="salesteam_id" ref="sales_team.salesteam_website_sales"/>
<field name="salesperson_id" ref="base.user_admin"/>
</record>
<record model="product.pricelist" id="product.list0">
<field name="selectable" eval="True" />
<field name="website_id" eval="False"/>
<record id="delivery.free_delivery_carrier" model="delivery.carrier" forcecreate="False">
<field name="is_published" eval="True"/>
</record>
<!-- Generic steps used to generate new specific steps -->
<record id="website_sale.checkout_step_cart" model="website.checkout.step">
<field name="name">Order</field>
<field name="sequence">0</field>
<field name="step_href">/shop/cart</field>
<field name="back_button_label">Back to cart</field>
</record>
<record id="website_sale.checkout_step_delivery" model="website.checkout.step">
<field name="name">Address</field>
<field name="sequence">250</field>
<field name="step_href">/shop/checkout</field>
<field name="main_button_label">Checkout</field>
<field name="back_button_label">Back to address</field>
</record>
<record id="website_sale.checkout_step_extra" model="website.checkout.step">
<field name="name">Extra Info</field>
<field name="sequence">500</field>
<field name="step_href">/shop/extra_info</field>
<field name="main_button_label">Confirm</field>
<field name="back_button_label">Back to extra info</field>
</record>
<record id="website_sale.checkout_step_payment" model="website.checkout.step">
<field name="name">Payment</field>
<field name="sequence">999</field>
<field name="step_href">/shop/payment</field>
<field name="main_button_label">Confirm</field>
</record>
</data>
@ -70,7 +100,7 @@
<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="user_ids" 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>
@ -83,16 +113,16 @@
<field name="state">code</field>
<field name="code">
DynamicFilter = model.env['website.snippet.filter']
response = DynamicFilter._get_products('latest_sold', model.env.context)
response = DynamicFilter._get_products('latest_sold')
</field>
</record>
<record id="dynamic_snippet_latest_viewed_products_action" model="ir.actions.server">
<field name="name">Recently Viewed Products</field>
<field name="name">Recently Viewed Products (per user)</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)
res_products = DynamicFilter._get_products('latest_viewed')
for data in res_products:
data['_latest_viewed'] = True
response = res_products
@ -104,8 +134,7 @@ response = res_products
<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)
response = DynamicFilter._get_products('accessories', product_template_id=request.params.get('productTemplateId'))
</field>
</record>
<record id="dynamic_snippet_recently_sold_with_action" model="ir.actions.server">
@ -114,8 +143,7 @@ response = DynamicFilter._get_products('accessories', model.env.context)
<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)
response = DynamicFilter._get_products('recently_sold_with', product_template_id=request.params.get('productTemplateId'))
</field>
</record>
<record id="dynamic_snippet_alternative_products" model="ir.actions.server">
@ -124,8 +152,16 @@ response = DynamicFilter._get_products('recently_sold_with', model.env.context)
<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)
response = DynamicFilter._get_products('alternative_products', product_template_id=request.params.get('productTemplateId'))
</field>
</record>
<record id="dynamic_snippet_category_list" model="ir.actions.server">
<field name="name">Category List</field>
<field name="model_id" ref="model_product_public_category"/>
<field name="state">code</field>
<field name="code">
DynamicFilter = model.env['website.snippet.filter']
response = DynamicFilter._prepare_category_list_data(parent_id=request.params.get('parentId'))
</field>
</record>
<!-- Dynamic Filter -->
@ -145,7 +181,8 @@ response = DynamicFilter._get_products('alternative_products', model.env.context
<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>
<field name="name">Recently Viewed Products (per user)</field>
<field name="help">The building block will remain empty until the user visits a product page.</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"/>
@ -168,6 +205,12 @@ response = DynamicFilter._get_products('alternative_products', model.env.context
<field name="name">Alternative Products</field>
<field name="product_cross_selling">True</field>
</record>
<record id="dynamic_filter_category_list" model="website.snippet.filter">
<field name="action_server_id" ref="website_sale.dynamic_snippet_category_list"/>
<field name="field_names">id,name,cover_image</field>
<field name="name">Category List</field>
<field name="limit" eval="10"/>
</record>
<function model="ir.model.fields" name="formbuilder_whitelist">
<value>sale.order</value>

View file

@ -5,7 +5,23 @@
<field name="salesteam_id" ref="sales_team.salesteam_website_sales"/>
</record>
<record id="product.product_attribute_2" model="product.attribute">
<record id="product.pa_color" model="product.attribute">
<field name="preview_variants">hover</field>
</record>
<record id="product.pa_legs" model="product.attribute">
<field name="preview_variants">visible</field>
</record>
<record id="product.pa_options" model="product.attribute">
<field name="visibility">hidden</field>
</record>
<record id="product.pa_size" model="product.attribute">
<field name="preview_variants">visible</field>
</record>
<record id="product.pa_fabric" model="product.attribute">
<field name="preview_variants">visible</field>
<field name="is_thumbnail_visible" eval="True"/>
</record>
<record id="product.pa_shoe_size" model="product.attribute">
<field name="visibility">hidden</field>
</record>
@ -57,36 +73,39 @@
<record id="product.product_order_01" model="product.product">
<field name="is_published" eval="True"/>
</record>
<record id="product.office_combo" 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">
<section class="s_text_image pt80 pb80 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>
<h2 class="h3-fs">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=""/>
<img src="/website/static/src/img/snippets_demo/s_text_image.webp" class="img img-fluid mx-auto rounded" 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">
<section class="s_text_image pt80 pb80 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=""/>
<img src="/website_sale/static/src/img/carpentry.jpg" class="img img-fluid mx-auto rounded" alt=""/>
</div>
<div class="pt16 pb16 col-lg-6">
<h2>Locally handmade</h2>
<h2 class="h3-fs">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>
<p><a href="/contactus" class="mb-2 btn btn-primary o_translate_inline">Contact Us</a></p>
</div>
</div>
</div>
@ -115,70 +134,285 @@
<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"/>
<field name="cover_image" 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="sequence">22</field>
<field name="image_1920" type="base64" file="website_sale/static/src/img/categories/furnitures.jpg"/>
<field name="cover_image" 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="sequence">29</field>
<field name="image_1920" type="base64" file="website_sale/static/src/img/categories/boxes.jpg"/>
<field name="cover_image" 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="sequence">35</field>
<field name="image_1920" type="base64" file="website_sale/static/src/img/categories/drawers.jpg"/>
<field name="cover_image" 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="sequence">40</field>
<field name="image_1920" type="base64" file="website_sale/static/src/img/categories/cabinets.jpg"/>
<field name="cover_image" 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="sequence">45</field>
<field name="image_1920" type="base64" file="website_sale/static/src/img/categories/bins.jpg"/>
<field name="cover_image" 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="sequence">49</field>
<field name="image_1920" type="base64" file="website_sale/static/src/img/categories/lamps.jpg"/>
<field name="cover_image" type="base64" file="website_sale/static/src/img/categories/lamps.jpg"/>
</record>
<record id="services" model="product.public.category">
<record id="public_category_services" model="product.public.category">
<field name="name">Services</field>
<field name="sequence">25</field>
<field name="sequence">55</field>
<field name="image_1920" type="base64" file="website_sale/static/src/img/warranty.jpg"/>
<field name="cover_image" 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="sequence">59</field>
<field name="image_1920" type="base64" file="product/static/img/product_product_43-image.jpg"/>
<field name="cover_image" type="base64" file="product/static/img/product_product_43-image.jpg"/>
</record>
<!-- subcategories -->
<!-- subcategories for desks -->
<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"/>
<field name="cover_image" type="base64" file="website_sale/static/src/img/categories/desk_components.jpg"/>
</record>
<record id="public_category_desks_office" model="product.public.category">
<field name="parent_id" eval="ref('public_category_desks')"/>
<field name="name">Office Desks</field>
<field name="sequence">17</field>
</record>
<record id="public_category_desks_gaming" model="product.public.category">
<field name="parent_id" eval="ref('public_category_desks')"/>
<field name="name">Gaming Desks</field>
<field name="sequence">18</field>
</record>
<record id="public_category_desks_glass" model="product.public.category">
<field name="parent_id" eval="ref('public_category_desks')"/>
<field name="name">Glass Desks</field>
<field name="sequence">19</field>
</record>
<record id="public_category_desks_standing" model="product.public.category">
<field name="parent_id" eval="ref('public_category_desks')"/>
<field name="name">Standing Desks</field>
<field name="sequence">20</field>
</record>
<record id="public_category_desks_foldable" model="product.public.category">
<field name="parent_id" eval="ref('public_category_desks')"/>
<field name="name">Foldable Desks</field>
<field name="sequence">21</field>
</record>
<!-- subcategories for furnitures -->
<record id="public_category_furnitures_sofas" model="product.public.category">
<field name="parent_id" eval="ref('public_category_furnitures')"/>
<field name="name">Sofas</field>
<field name="sequence">23</field>
</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">24</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">25</field>
</record>
<record id="public_category_furnitures_recliners" model="product.public.category">
<field name="parent_id" eval="ref('public_category_furnitures')"/>
<field name="name">Recliners</field>
<field name="sequence">26</field>
</record>
<record id="public_category_furnitures_beds" model="product.public.category">
<field name="parent_id" eval="ref('public_category_furnitures')"/>
<field name="name">Beds</field>
<field name="sequence">27</field>
</record>
<record id="public_category_furnitures_wardrobes" model="product.public.category">
<field name="parent_id" eval="ref('public_category_furnitures')"/>
<field name="name">Wardrobes</field>
<field name="sequence">28</field>
</record>
<!-- subcategories for boxes -->
<record id="public_category_boxes_vintage" model="product.public.category">
<field name="parent_id" eval="ref('public_category_boxes')"/>
<field name="name">Vintage Boxes</field>
<field name="sequence">30</field>
</record>
<record id="public_category_boxes_rustic" model="product.public.category">
<field name="parent_id" eval="ref('public_category_boxes')"/>
<field name="name">Rustic Boxes</field>
<field name="sequence">31</field>
</record>
<record id="public_category_boxes_luxury" model="product.public.category">
<field name="parent_id" eval="ref('public_category_boxes')"/>
<field name="name">Luxury Boxes</field>
<field name="sequence">32</field>
</record>
<record id="public_category_boxes_stackable" model="product.public.category">
<field name="parent_id" eval="ref('public_category_boxes')"/>
<field name="name">Stackable Boxes</field>
<field name="sequence">33</field>
</record>
<record id="public_category_boxes_collapsible" model="product.public.category">
<field name="parent_id" eval="ref('public_category_boxes')"/>
<field name="name">Collapsible Boxes</field>
<field name="sequence">34</field>
</record>
<!-- subcategories for drawers -->
<record id="public_category_drawers_nightstand" model="product.public.category">
<field name="parent_id" eval="ref('public_category_drawers')"/>
<field name="name">Nightstand Drawers</field>
<field name="sequence">36</field>
</record>
<record id="public_category_drawers_underbed" model="product.public.category">
<field name="parent_id" eval="ref('public_category_drawers')"/>
<field name="name">Under-bed Drawers</field>
<field name="sequence">37</field>
</record>
<record id="public_category_drawers_file" model="product.public.category">
<field name="parent_id" eval="ref('public_category_drawers')"/>
<field name="name">File Drawers</field>
<field name="sequence">38</field>
</record>
<record id="public_category_drawers_kitchen" model="product.public.category">
<field name="parent_id" eval="ref('public_category_drawers')"/>
<field name="name">Kitchen Drawer Units</field>
<field name="sequence">39</field>
</record>
<!-- subcategories for cabinets -->
<record id="public_category_cabinets_kitchen" model="product.public.category">
<field name="parent_id" eval="ref('public_category_cabinets')"/>
<field name="name">Kitchen Cabinets</field>
<field name="sequence">41</field>
</record>
<record id="public_category_cabinets_bathroom" model="product.public.category">
<field name="parent_id" eval="ref('public_category_cabinets')"/>
<field name="name">Bathroom Cabinets</field>
<field name="sequence">42</field>
</record>
<record id="public_category_cabinets_storage" model="product.public.category">
<field name="parent_id" eval="ref('public_category_cabinets')"/>
<field name="name">Storage Cabinets</field>
<field name="sequence">43</field>
</record>
<record id="public_category_cabinets_medicine" model="product.public.category">
<field name="parent_id" eval="ref('public_category_cabinets')"/>
<field name="name">Medicine Cabinets</field>
<field name="sequence">44</field>
</record>
<!-- subcategories for bins -->
<record id="public_category_bins_laundry" model="product.public.category">
<field name="parent_id" eval="ref('public_category_bins')"/>
<field name="name">Laundry Bins</field>
<field name="sequence">46</field>
</record>
<record id="public_category_bins_toy" model="product.public.category">
<field name="parent_id" eval="ref('public_category_bins')"/>
<field name="name">Toy Bins</field>
<field name="sequence">47</field>
</record>
<record id="public_category_bins_storage" model="product.public.category">
<field name="parent_id" eval="ref('public_category_bins')"/>
<field name="name">Food Storage Bins</field>
<field name="sequence">48</field>
</record>
<!-- subcategories for lamps -->
<record id="public_category_lamps_desk" model="product.public.category">
<field name="parent_id" eval="ref('public_category_lamps')"/>
<field name="name">Desk Lamps</field>
<field name="sequence">50</field>
</record>
<record id="public_category_lamps_ceiling" model="product.public.category">
<field name="parent_id" eval="ref('public_category_lamps')"/>
<field name="name">Ceiling Lamps</field>
<field name="sequence">51</field>
</record>
<record id="public_category_lamps_chandelier" model="product.public.category">
<field name="parent_id" eval="ref('public_category_lamps')"/>
<field name="name">Chandeliers</field>
<field name="sequence">52</field>
</record>
<record id="public_category_lamps_touch" model="product.public.category">
<field name="parent_id" eval="ref('public_category_lamps')"/>
<field name="name">Touch Lamps</field>
<field name="sequence">53</field>
</record>
<!-- subcategories for services -->
<record id="public_category_services_design_and_planning" model="product.public.category">
<field name="parent_id" eval="ref('public_category_services')"/>
<field name="name">Design and Planning</field>
<field name="sequence">55</field>
</record>
<record id="public_category_services_delivery_and_installation" model="product.public.category">
<field name="parent_id" eval="ref('public_category_services')"/>
<field name="name">Delivery and Installation</field>
<field name="sequence">56</field>
</record>
<record id="public_category_services_repair_and_maintenance" model="product.public.category">
<field name="parent_id" eval="ref('public_category_services')"/>
<field name="name">Repair and Maintenance</field>
<field name="sequence">57</field>
</record>
<record id="public_category_services_relocation_and_moving" model="product.public.category">
<field name="parent_id" eval="ref('public_category_services')"/>
<field name="name">Relocation and Moving</field>
<field name="sequence">58</field>
</record>
<!-- subcategories for lamps -->
<record id="public_category_multimedia_virtual_design" model="product.public.category">
<field name="parent_id" eval="ref('public_category_multimedia')"/>
<field name="name">Virtual Design Tools</field>
<field name="sequence">60</field>
</record>
<record id="public_category_multimedia_augmented_reality" model="product.public.category">
<field name="parent_id" eval="ref('public_category_multimedia')"/>
<field name="name">Augmented Reality Tools</field>
<field name="sequence">61</field>
</record>
<record id="public_category_multimedia_education" model="product.public.category">
<field name="parent_id" eval="ref('public_category_multimedia')"/>
<field name="name">Education Tools</field>
<field name="sequence">62</field>
</record>
<record id="product.product_product_1_product_template" model="product.template">
<field name="public_categ_ids" eval="[(6,0,[ref('public_category_services')])]"/>
</record>
<record id="product.product_product_2_product_template" model="product.template">
<field name="public_categ_ids" eval="[(6,0,[ref('public_category_services')])]"/>
</record>
<record id="public_category_furnitures_chairs" model="product.public.category">
<field name="parent_id" eval="ref('public_category_furnitures')"/>
@ -192,10 +426,10 @@
</record>
<record id="product.product_product_1_product_template" model="product.template">
<field name="public_categ_ids" eval="[(6,0,[ref('services')])]"/>
<field name="public_categ_ids" eval="[(6,0,[ref('public_category_services')])]"/>
</record>
<record id="product.product_product_2_product_template" model="product.template">
<field name="public_categ_ids" eval="[(6,0,[ref('services')])]"/>
<field name="public_categ_ids" eval="[(6,0,[ref('public_category_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')])]"/>
@ -243,7 +477,7 @@
<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">
<record id="product.product_template_acoustic_bloc_screens" 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">
@ -268,17 +502,17 @@
<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>
<!-- Since we are adding pricelists, we activate the feature -->
<record id="base.group_user" model="res.groups">
<field name="implied_ids" eval="[(4, ref('product.group_product_pricelist'))]"/>
</record>
<record id="list_christmas" model="product.pricelist">
<field name="name">Christmas</field>
<field name="selectable" eval="False" />
@ -323,12 +557,6 @@
<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)"/>
@ -336,7 +564,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.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>
@ -344,10 +571,7 @@
<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>
@ -357,7 +581,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.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>
@ -365,10 +588,7 @@
<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>
@ -378,7 +598,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.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'))]"/>
@ -387,10 +606,7 @@
<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>
@ -400,7 +616,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.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>
@ -408,10 +623,7 @@
<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>
@ -421,7 +633,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.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>
@ -429,10 +640,8 @@
<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>
@ -442,7 +651,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.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>
@ -450,10 +658,7 @@
<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>
@ -464,7 +669,6 @@
<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>
@ -472,10 +676,7 @@
<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>
@ -485,7 +686,6 @@
<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'))]"/>
@ -494,10 +694,7 @@
<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>
@ -507,26 +704,19 @@
<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>
@ -537,7 +727,6 @@
<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'))]"/>
@ -545,10 +734,8 @@
<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>
@ -559,17 +746,13 @@
<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>
@ -580,7 +763,6 @@
<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')"/>
@ -589,10 +771,7 @@
<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>
@ -603,16 +782,12 @@
<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>
@ -623,7 +798,6 @@
<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>
@ -631,10 +805,8 @@
<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>
@ -645,17 +817,14 @@
<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>
@ -667,17 +836,14 @@
<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>
@ -693,18 +859,23 @@
<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="categ_id" ref="product.product_category_services"/>
<field name="invoice_policy">delivery</field>
<field name="public_categ_ids" eval="[(6, 0, [ref('website_sale.services')])]"/>
<field name="public_categ_ids" eval="[(6, 0, [ref('website_sale.public_category_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')])]"/>
<field name="attribute_id" ref="product.pa_duration"/>
<field
name="value_ids"
eval="[Command.set([
ref('product.pav_duration_year_1'),
ref('product.pav_duration_year_2'),
ref('product.pav_duration_year_3'),
])]"/>
</record>
<!-- Handle automatically created product.template.attribute.value -->
@ -717,7 +888,13 @@
'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,
}]"/>
},
{
'xml_id': 'website_sale.product_1_attribute_3_value_3',
'record': obj().env.ref('website_sale.product_1_attribute_3_product_template_attribute_line').product_template_value_ids[2],
'noupdate': True,
},
]"/>
</function>
<function model="ir.model.data" name="_update_xmlids">
@ -729,7 +906,13 @@
'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,
},]"/>
},
{
'xml_id': 'website_sale.product_product_1c',
'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_3')),
'noupdate': True,
},
]"/>
</function>
<record id="product_product_1" model="product.product">
@ -743,11 +926,16 @@
<field name="price_extra">18.00</field>
</record>
<record id="delivery.delivery_carrier" model="delivery.carrier">
<field name="is_published" eval="False" />
</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="summary">Schedule phone meeting with client</field>
<field name="create_uid" ref="base.user_demo"/>
<field name="user_id" ref="base.user_demo"/>
</record>
@ -779,4 +967,162 @@
<field name="user_id" ref="base.user_demo"/>
</record>
<record id="sale.product_product_1_product_template" model="product.template">
<field name="website_sequence">9985</field>
<field name="is_published" eval="True"/>
</record>
<record id="product.desk_organizer_product_template" model="product.template">
<field name="is_published" eval="True"/>
</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'),
ref('website_sale.product_product_1_product_template'),
])]"
/>
</record>
<!-- Products' secondary images -->
<record id="product_delivery_01_extra_image" model="product.image">
<field name="name">Office Chair - Context View</field>
<field name="sequence">10</field>
<field name="product_variant_id" ref="product.product_delivery_01"/>
<field name="image_1920" type="base64" file="website_sale/static/src/img/products_demo/table02_02.jpg"/>
</record>
<record id="product_delivery_01_extra_image_2" model="product.image">
<field name="name">Office Chair - Context View</field>
<field name="sequence">10</field>
<field name="product_variant_id" ref="product.product_delivery_01"/>
<field name="image_1920" type="base64" file="website_sale/static/src/img/products_demo/product_product_3-image_02.jpg"/>
</record>
<record id="product_product_16_extra_image" model="product.image">
<field name="name">Drawer Black - Context View</field>
<field name="sequence">10</field>
<field name="product_variant_id" ref="product.product_product_16"/>
<field name="image_1920" type="base64" file="website_sale/static/src/img/products_demo/product_product_16-image_02.jpg"/>
</record>
<record id="product_delivery_02_extra_image" model="product.image">
<field name="name">Office Lamp - Context View</field>
<field name="sequence">10</field>
<field name="product_variant_id" ref="product.product_delivery_02"/>
<field name="image_1920" type="base64" file="website_sale/static/src/img/products_demo/product_lamp_02.jpg"/>
</record>
<record id="product_product_4_extra_image" model="product.image">
<field name="name">Customizable Desk Steel - Context View</field>
<field name="sequence">10</field>
<field name="product_variant_id" ref="product.product_product_4"/>
<field name="image_1920" type="base64" file="website_sale/static/src/img/products_demo/table02_02.jpg"/>
</record>
<record id="product_product_1_product_template_extra_image" model="product.image">
<field name="name">Chair floor protection - Context View</field>
<field name="sequence">10</field>
<field name="product_tmpl_id" ref="sale.product_product_1_product_template"/>
<field name="image_1920" type="base64" file="website_sale/static/src/img/products_demo/floor_protection-image_02.jpg"/>
</record>
<record id="consu_delivery_03_extra_image" model="product.image">
<field name="name">Four Person Desk - Context View</field>
<field name="sequence">10</field>
<field name="product_variant_id" ref="product.consu_delivery_03"/>
<field name="image_1920" type="base64" file="website_sale/static/src/img/products_demo/product_product_d03_image_02.jpg"/>
</record>
<record id="desk_organizer_extra_image" model="product.image">
<field name="name">Desk Organizer - Context View</field>
<field name="sequence">10</field>
<field name="product_variant_id" ref="product.desk_organizer"/>
<field name="image_1920" type="base64" file="website_sale/static/src/img/products_demo/desk_organizer_02.jpg"/>
</record>
<record id="product_product_24_extra_image" model="product.image">
<field name="name">Individual Workplace - Context View</field>
<field name="sequence">10</field>
<field name="product_variant_id" ref="product.product_product_24"/>
<field name="image_1920" type="base64" file="website_sale/static/src/img/products_demo/product_product_24-image_02.jpg"/>
</record>
<record id="product_product_12_extra_image" model="product.image">
<field name="name">Office Chair Black - Context View</field>
<field name="sequence">10</field>
<field name="product_variant_id" ref="product.product_product_12"/>
<field name="image_1920" type="base64" file="website_sale/static/src/img/products_demo/product_product_12-image_02.jpg"/>
</record>
<record id="product_product_27_extra_image" model="product.image">
<field name="name">Drawer - Context View</field>
<field name="sequence">10</field>
<field name="product_variant_id" ref="product.product_product_27"/>
<field name="image_1920" type="base64" file="website_sale/static/src/img/products_demo/product_product_27-image_02.jpg"/>
</record>
<record id="consu_delivery_02_extra_image" model="product.image">
<field name="name">Large Meeting Table - Context View</field>
<field name="sequence">10</field>
<field name="product_variant_id" ref="product.consu_delivery_02"/>
<field name="image_1920" type="base64" file="website_sale/static/src/img/products_demo/product_product_46-image_02.jpg"/>
</record>
<record id="product_product_10_extra_image" model="product.image">
<field name="name">Cabinet Width Doors - Context View</field>
<field name="sequence">10</field>
<field name="product_variant_id" ref="product.product_product_10"/>
<field name="image_1920" type="base64" file="website_sale/static/src/img/products_demo/product_product_10-image_02.jpg"/>
</record>
<record id="product_product_7_extra_image" model="product.image">
<field name="name">Storage Box - Context View</field>
<field name="sequence">10</field>
<field name="product_variant_id" ref="product.product_product_7"/>
<field name="image_1920" type="base64" file="website_sale/static/src/img/products_demo/product_product_7-image_02.jpg"/>
</record>
<record id="product_product_9_extra_image" model="product.image">
<field name="name">Pedal Bin - Context View</field>
<field name="sequence">10</field>
<field name="product_variant_id" ref="product.product_product_9"/>
<field name="image_1920" type="base64" file="website_sale/static/src/img/products_demo/product_product_9-image_02.jpg"/>
</record>
<record id="product_product_6_extra_image" model="product.image">
<field name="name">Large Cabinet - Context View</field>
<field name="sequence">10</field>
<field name="product_variant_id" ref="product.product_product_6"/>
<field name="image_1920" type="base64" file="website_sale/static/src/img/products_demo/product_product_6-image_02.jpg"/>
</record>
<record id="product_product_5_extra_image" model="product.image">
<field name="name">Corner Desk Right Sit - Context View</field>
<field name="sequence">10</field>
<field name="product_variant_id" ref="product.product_product_5"/>
<field name="image_1920" type="base64" file="website_sale/static/src/img/products_demo/product_product_5-image_02.jpg"/>
</record>
<record id="consu_delivery_01_extra_image" model="product.image">
<field name="name">Two-Seat Sofa - Context View</field>
<field name="sequence">10</field>
<field name="product_variant_id" ref="product.consu_delivery_01"/>
<field name="image_1920" type="base64" file="website_sale/static/src/img/products_demo/product_product_d01_image_02.jpg"/>
</record>
<record id="product_product_3_extra_image" model="product.image">
<field name="name">Desk Combination - Context View</field>
<field name="sequence">10</field>
<field name="product_variant_id" ref="product.product_product_3"/>
<field name="image_1920" type="base64" file="website_sale/static/src/img/products_demo/product_product_3-image_02.jpg"/>
</record>
<!-- Products' tertiary images -->
<record id="product_product_4_extra_image_1" model="product.image">
<field name="name">Customizable Desk Steel - Detail View</field>
<field name="sequence">11</field>
<field name="product_variant_id" ref="product.product_product_4"/>
<field name="image_1920" type="base64" file="website_sale/static/src/img/products_demo/table02_03.webp"/>
</record>
</odoo>

View file

@ -4,8 +4,6 @@
<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>

View file

@ -6,7 +6,8 @@
<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="partner_to" eval="False"/>
<field name="use_default_to" eval="True"/>
<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;">
@ -30,7 +31,7 @@
<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>
<t t-out="int(line.product_uom_qty) or ''">10000</t> <t t-out="line.product_uom_id.name or ''">Units</t>
</td>
</tr>
</table>
@ -38,9 +39,9 @@
<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 }}"
<a t-attf-href="{{ object.get_base_url() }}/shop/cart?id={{ object.id }}&amp;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;">
t-attf-style="background-color: {{object.user_id.company_id.email_secondary_color or '#875A7B'}}; padding: 8px 16px 8px 16px; text-decoration: none; color: {{object.user_id.company_id.email_primary_color or '#FFFFFF'}}; border-radius: 5px; font-size:13px;">
Resume order
</a>
</div>
@ -53,7 +54,6 @@
</tbody>
</table>
</field>
<field name="lang">{{ object.partner_id.lang }}</field>
<field name="auto_delete" eval="False"/>
</record>
</data>

View file

@ -1,302 +1,119 @@
<?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">
<!-- Template for Dynamic Snippet -->
<template
id="dynamic_filter_template_product_product_products_item"
name="Generic Product Template (customizable)"
>
<t
t-foreach="records"
t-as="data"
data-number-of-elements="4"
data-number-of-elements-sm="2"
>
<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>
<t t-set="product" t-value="record"/>
<t t-set="product_template_id" t-value="record.id if not record.is_product_variant else record.product_tmpl_id.id"/>
<t t-set="product_id" t-value="record.id if record.is_product_variant else record.product_variant_id.id"/>
<div
class="oe_product_cart o_carousel_product_card d-flex"
role="article"
t-att-aria-label="product.display_name"
t-att-data-add2cart-rerender="data.get('_add2cart_rerender')"
>
<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"/>
<!-- Image -->
<div t-attf-class="oe_product_image position-relative flex-grow-0 overflow-hidden">
<a
t-att-href="product.website_url"
t-attf-class="oe_product_image_link position-relative"
contenteditable="false"
t-att-title="product.display_name"
>
<span
role="img"
t-attf-alt="{{product.display_name}} image"
class="oe_product_image_img_wrapper d-flex h-100 justify-content-center align-items-center"
>
<span
class="oe_product_image_img h-100 w-100"
t-attf-style="background-image: url({{data['image_512']}});"
/>
</span>
</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 t-if="is_sample" class="o_ribbon_right small text-bg-primary">Sample</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')">
<button t-if="data.get('_latest_viewed')"
class="btn o_carousel_product_remove js_remove rounded-pill lh-1"
t-att-data-product-id="product_id"
t-att-data-product-selected="record.is_product_variant"
t-att-data-product-template-id="product_template_id"
title="Remove from recently viewed"
>
<i class="oi oi-close" role="presentation"/>
</button>
<div class="o_wsale_product_information flex-grow-1 flex-shrink-1">
<div class="o_wsale_product_info_attributes_wrapper">
<div class="o_wsale_product_information_text">
<!-- Product Name -->
<h2 class="o_wsale_products_item_title h6 text-break">
<a
class="text-decoration-none"
t-att-href="product.website_url"
t-att-content="data.get('display_name')"
t-att-title="data.get('display_name')"
t-out="data.get('display_name')"
/>
</h2>
<!-- Description -->
<div class="oe_subdescription_wrapper">
<div
class="oe_subdescription text-muted small"
contenteditable="false"
>
<div t-field="product.description_sale"/>
</div>
</div>
<!-- Rating -->
<div
t-if="is_view_active('website_sale.product_comment')"
class="o_wsale_product_rating_wrapper"
>
<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 class="o_wsale_product_sub justify-content-between gap-2">
<!-- Price(s) -->
<div class="product_price" aria-label="Price information">
<t t-call="website_sale.price_dynamic_filter_template_product_product"></t>
</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"/>
<!-- Actions -->
<div class="o_wsale_product_btn">
<div class="o_wsale_product_action_row">
<t t-if="product._website_show_quick_add()">
<button
type="button"
class="o_wsale_product_btn_primary btn js_add_cart"
title="Add to Cart"
t-att-data-product-id="product.id if product.is_product_variant else product.product_variant_id.id"
t-att-data-product-selected="product.is_product_variant"
t-att-data-product-template-id="product.id if not product.is_product_variant else product.product_tmpl_id.id"
t-att-data-product-type="product.type"
t-att-data-show-quantity="is_view_active('website_sale.product_quantity')"
>
<!-- Avoid whitespaces undesired gaps -->
<i class="fa fa-shopping-cart fa-fw" role="presentation"/><span class="o_label small ms-1">Add to Cart</span>
</button>
</div>
</t>
</div>
</div>
</div>
@ -304,103 +121,31 @@
</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 t-if="not data.get('prevent_zero_price_sale') and not data.get('is_sample')">
<span t-out="data['price']"
class="mb-0 fw-bold"
name="product_price"
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"/>
<del
t-if="data.get('has_discounted_price')"
aria-label="Original price"
t-attf-class="text-muted me-1 mb-0"
style="white-space: nowrap;"
>
<small
t-out="data['list_price']"
t-options="{'widget': 'monetary', 'display_currency': website.currency_id}"
/>
</del>
</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>
<asset id="website_sale.s_dynamic_snippet_products_000_scss" name="Dynamic snippet products 000 SCSS">
<bundle>web.assets_frontend</bundle>
<path>website_sale/static/src/snippets/s_dynamic_snippet_products/000.scss</path>
</asset>
</odoo>

View file

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="dynamic_filter_template_product_public_category_default">
<t t-foreach="records" t-as="category">
<t t-set="is_parent" t-value="category['id'] == parentCategoryId"/>
<div
t-if="not is_parent or includeParent"
name="category_item"
class="s_dynamic_category_item position-relative bg-black overflow-hidden oe_unremovable oe_unmovable"
t-att-data-category-id="category['id']"
t-attf-style="grid-row: span {{ 4 if is_parent else size }}; grid-column: span {{ 2 if is_parent and colSpanTwo else 1 }}"
role="article"
>
<div class="overflow-hidden">
<img
name="category_image"
loading="lazy"
t-att-src="category['cover_image']"
alt="Category Image"
class="o_category_image img-fluid position-absolute w-100 h-100 object-fit-cover"
/>
<div t-if="category.get('unpublished')" class="o_ribbon_right small text-bg-light">Unpublished</div>
</div>
<div
name="category_overlay"
t-attf-class="p-3 bg-black-25 position-relative w-100 h-100 d-flex flex-column justify-content-between {{alignmentClass}}"
>
<h3 class="h4" t-out="category['name']"/>
<a
name="category_button"
role="button"
t-attf-href="/shop/category/{{category['id']}}"
class="s_dynamic_category_button btn btn-primary align-self-start oe_unremovable"
t-out="buttonText"
/>
</div>
</div>
</t>
</template>
<template
id="dynamic_filter_template_product_public_category_clickable_items"
inherit_id="website_sale.dynamic_filter_template_product_public_category_default"
primary="True"
>
<div name="category_item" position="attributes">
<attribute name="class" add="opacity-trigger-hover" separator=" "/>
</div>
<div name="category_overlay" position="attributes">
<attribute name="t-attf-class" add="z-0" separator=" "/>
</div>
<h3 class="h4" position="before">
<span
class="o_category_filter position-absolute start-0 top-0 end-0 bottom-0 bg-black-25 transition-base z-n1"
aria-hidden="true"
/>
</h3>
<h3 class="h4" position="attributes">
<attribute name="class" add="mb-0" separator=" "/>
</h3>
<img name="category_image" position="attributes">
<attribute name="class" add="transition-base" separator=" "/>
</img>
<a name="category_button" position="attributes">
<attribute
name="class"
add="stretched-link h-0 p-0 opacity-0 o_not_editable o_not-animable"
separator=" "
/>
</a>
<a name="category_button" position="after">
<p class="s_dynamic_category_arrow position-absolute end-0 bottom-0 mb-3 me-3">
<i class="oi oi-arrow-right fa-lg"/>
</p>
</a>
</template>
</odoo>

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="test_01_admin_shop_tour" model="web_tour.tour">
<field name="name">test_01_admin_shop_tour</field>
<field name="sequence">130</field>
</record>
</odoo>