@ -1,27 +1,26 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" ?> |
||||
<odoo> |
<odoo> |
||||
<data noupdate="1"> |
<data noupdate="1"> |
||||
|
<!-- Define a menu item for "About us" --> |
||||
<record id="menu_about_sub" model="website.menu"> |
<record id="menu_about_sub" model="website.menu"> |
||||
<field name="name">About us</field> |
<field name="name">About us</field> |
||||
<field name="url">/about</field> |
<field name="url">/about</field> |
||||
<field name="parent_id" ref="website.main_menu"/> |
<field name="parent_id" ref="website.main_menu"/> |
||||
<field name="sequence" type="int">30</field> |
<field name="sequence" type="int">30</field> |
||||
</record> |
</record> |
||||
|
<!-- Define a menu item for "Features" --> |
||||
<record id="menu_feature" model="website.menu"> |
<record id="menu_feature" model="website.menu"> |
||||
<field name="name">Features</field> |
<field name="name">Features</field> |
||||
<field name="url">/feature</field> |
<field name="url">/feature</field> |
||||
<field name="parent_id" ref="website.main_menu"/> |
<field name="parent_id" ref="website.main_menu"/> |
||||
<field name="sequence" type="int">35</field> |
<field name="sequence" type="int">35</field> |
||||
</record> |
</record> |
||||
|
<!-- Define a menu item for "Menu" --> |
||||
<record id="menu_menu" model="website.menu"> |
<record id="menu_menu" model="website.menu"> |
||||
<field name="name">Menu</field> |
<field name="name">Menu</field> |
||||
<field name="url">/menu</field> |
<field name="url">/menu</field> |
||||
<field name="parent_id" ref="website.main_menu"/> |
<field name="parent_id" ref="website.main_menu"/> |
||||
<field name="sequence" type="int">15</field> |
<field name="sequence" type="int">15</field> |
||||
</record> |
</record> |
||||
|
|
||||
|
|
||||
</data> |
</data> |
||||
</odoo> |
</odoo> |
@ -1,7 +1,6 @@ |
|||||
## Module <theme_coffee_shop> |
## Module <theme_coffee_shop> |
||||
|
|
||||
#### 21.02.2023 |
#### 22.01.2024 |
||||
#### Version 16.0.1.0.0 |
#### Version 16.0.1.0.0 |
||||
#### ADD |
#### ADD |
||||
|
|
||||
- Initial commit for Theme Coffee Shop |
- Initial commit for Theme Coffee Shop |
||||
|
Before Width: | Height: | Size: 219 KiB After Width: | Height: | Size: 403 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 288 KiB |
After Width: | Height: | Size: 1.1 MiB |
After Width: | Height: | Size: 207 KiB |
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 638 KiB |
After Width: | Height: | Size: 442 KiB |
After Width: | Height: | Size: 299 KiB |
After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 735 KiB |
Before Width: | Height: | Size: 576 KiB |
Before Width: | Height: | Size: 954 KiB |
Before Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 972 KiB |
Before Width: | Height: | Size: 86 KiB |
Before Width: | Height: | Size: 809 KiB |
Before Width: | Height: | Size: 922 KiB |
Before Width: | Height: | Size: 168 KiB |
Before Width: | Height: | Size: 990 KiB After Width: | Height: | Size: 990 KiB |
Before Width: | Height: | Size: 930 KiB After Width: | Height: | Size: 930 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 165 KiB After Width: | Height: | Size: 165 KiB |
Before Width: | Height: | Size: 1.7 MiB After Width: | Height: | Size: 1.7 MiB |
Before Width: | Height: | Size: 269 KiB After Width: | Height: | Size: 269 KiB |
Before Width: | Height: | Size: 195 KiB After Width: | Height: | Size: 195 KiB |
Before Width: | Height: | Size: 950 KiB After Width: | Height: | Size: 950 KiB |
Before Width: | Height: | Size: 570 KiB After Width: | Height: | Size: 570 KiB |
Before Width: | Height: | Size: 107 KiB After Width: | Height: | Size: 107 KiB |
Before Width: | Height: | Size: 245 KiB After Width: | Height: | Size: 245 KiB |
Before Width: | Height: | Size: 328 KiB After Width: | Height: | Size: 328 KiB |
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 890 KiB After Width: | Height: | Size: 890 KiB |
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 84 KiB |
Before Width: | Height: | Size: 283 KiB After Width: | Height: | Size: 283 KiB |
Before Width: | Height: | Size: 993 KiB After Width: | Height: | Size: 993 KiB |
Before Width: | Height: | Size: 928 KiB After Width: | Height: | Size: 928 KiB |
Before Width: | Height: | Size: 940 KiB After Width: | Height: | Size: 940 KiB |
Before Width: | Height: | Size: 553 KiB After Width: | Height: | Size: 553 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 975 KiB After Width: | Height: | Size: 975 KiB |
Before Width: | Height: | Size: 999 KiB After Width: | Height: | Size: 999 KiB |
Before Width: | Height: | Size: 329 KiB After Width: | Height: | Size: 329 KiB |
Before Width: | Height: | Size: 969 KiB After Width: | Height: | Size: 969 KiB |
Before Width: | Height: | Size: 924 KiB After Width: | Height: | Size: 924 KiB |
Before Width: | Height: | Size: 953 KiB After Width: | Height: | Size: 953 KiB |
Before Width: | Height: | Size: 109 KiB After Width: | Height: | Size: 109 KiB |
Before Width: | Height: | Size: 670 KiB After Width: | Height: | Size: 670 KiB |
Before Width: | Height: | Size: 269 KiB After Width: | Height: | Size: 269 KiB |
Before Width: | Height: | Size: 658 KiB |
Before Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 359 B |
@ -1,63 +0,0 @@ |
|||||
odoo.define("theme_coffee_shop.theme_coffee_shop_template", function (require) { |
|
||||
"use strict"; |
|
||||
var ajax = require('web.ajax'); |
|
||||
|
|
||||
const navicon = document.getElementById('nav-icon'); |
|
||||
const navitem = document.getElementById('nav-item'); |
|
||||
|
|
||||
if(navicon){ |
|
||||
navicon.addEventListener("click",function(e){ |
|
||||
e.preventDefault(); |
|
||||
navitem.classList.toggle('active'); |
|
||||
}) |
|
||||
} |
|
||||
|
|
||||
function functionLike(r) { |
|
||||
r.classList.toggle("fa-solid"); |
|
||||
} |
|
||||
|
|
||||
function fliterclick() { |
|
||||
var x = document.querySelector(".pr-categories"); |
|
||||
if (x.style.display === "none") { |
|
||||
x.style.display = "block"; |
|
||||
} else { |
|
||||
x.style.display = "none"; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
|
|
||||
var acc = document.getElementsByClassName("accordion"); |
|
||||
var i; |
|
||||
|
|
||||
for (i = 0; i < acc.length; i++) { |
|
||||
acc[i].addEventListener("click", function() { |
|
||||
/* Toggle between adding and removing the "active" class, |
|
||||
to highlight the button that controls the panel */ |
|
||||
this.classList.toggle("active"); |
|
||||
|
|
||||
/* Toggle between hiding and showing the active panel */ |
|
||||
var panel = this.nextElementSibling; |
|
||||
if (panel.style.display === "block") { |
|
||||
panel.style.display = "none"; |
|
||||
} else { |
|
||||
panel.style.display = "block"; |
|
||||
} |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
const loginPage=document.querySelectorAll("#login-btn"); |
|
||||
|
|
||||
loginPage.forEach(login=>{ |
|
||||
login.addEventListener('click',e=>{ |
|
||||
e.preventDefault(); |
|
||||
document.querySelector('.login-form-container').classList.toggle('show'); |
|
||||
}) |
|
||||
}) |
|
||||
|
|
||||
document.querySelector(".login-close").onclick=()=>{ |
|
||||
document.querySelector('.login-form-container').classList.toggle('show'); |
|
||||
} |
|
||||
|
|
||||
}); |
|
||||
|
|
||||
|
|
@ -0,0 +1,32 @@ |
|||||
|
/** @odoo-module **/ |
||||
|
|
||||
|
import publicWidget from 'web.public.widget'; |
||||
|
import {generateGMapLink, generateGMapIframe} from 'website.utils'; |
||||
|
|
||||
|
publicWidget.registry.Map_1 = publicWidget.Widget.extend({ |
||||
|
selector: '.s_map.s_map_1', |
||||
|
|
||||
|
/** |
||||
|
* @override |
||||
|
*/ |
||||
|
async start() { |
||||
|
console.log("kkkkk") |
||||
|
const address = await this._rpc({ |
||||
|
route: "/get-company/address", |
||||
|
}); |
||||
|
|
||||
|
const existingIframe = this.el.querySelector('.s_map.s_map_1 iframe'); |
||||
|
if (existingIframe) { |
||||
|
existingIframe.remove(); |
||||
|
} |
||||
|
|
||||
|
if (address) { |
||||
|
const iframeEl = generateGMapIframe(); |
||||
|
iframeEl.setAttribute('src', generateGMapLink({mapType: 'm', mapZoom: "12", name: 'Map', snippet: 's_map', mapAddress: address})); |
||||
|
this.el.querySelector('.s_map_color_filter_1').before(iframeEl); |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
}); |
||||
|
|
||||
|
export default publicWidget.registry.Map_1; |
@ -1,31 +1,135 @@ |
|||||
<?xml version="1.0" encoding="UTF-8" ?> |
<?xml version="1.0" encoding="UTF-8" ?> |
||||
<odoo> |
<odoo> |
||||
|
<!-- This XML defines a new page named "About" for the coffee shop theme --> |
||||
<record id="coffee_about_us" model="website.page"> |
<record id="coffee_about_us" model="website.page"> |
||||
<field name="name">About</field> |
<field name="name">About</field> |
||||
<field name="type">qweb</field> |
<field name="type">qweb</field> |
||||
<field name="key">theme_coffee_shop.coffee_about_us</field> |
<field name="key">theme_coffee_shop.coffee_about_us</field> |
||||
<field name="url">/about</field> |
<field name="url">/about</field> |
||||
<field name="is_published">True</field> |
<field name="is_published">True</field> |
||||
<field name="arch" type="xml"> |
<field name="arch" type="xml"> |
||||
<t name="About" t-name="theme_coffee_shop.coffee_about_us"> |
<t name="About" t-name="theme_coffee_shop.coffee_about_us"> |
||||
<t t-call="website.layout"> |
<t t-call="website.layout"> |
||||
<div id="wrap"> |
<div id="wrap" class="oe_structure oe_empty"> |
||||
<section id="banner" class="banner-imgAbout"> |
<section id="banner" class="banner-imgAbout"> |
||||
<div class="container wrapper"> |
<div class="container wrapper"> |
||||
<div class="banner-content"> |
<div class="banner-content"> |
||||
<div class="banner-text"> |
<div class="banner-text"> |
||||
<p class="banner-head">More than</p> |
<p class="banner-head">More than</p> |
||||
<p class="banner-head">Just Coffee</p> |
<p class="banner-head">Just Coffee</p> |
||||
|
</div> |
||||
</div> |
</div> |
||||
</div> |
</div> |
||||
</div> |
</section> |
||||
</section> |
<section class="s_company_team pt48 pb48"> |
||||
<div class="oe_structure"/> |
<div class="container"> |
||||
</div> |
<div class="row s_nb_column_fixed"> |
||||
|
<div class="col-lg-6 pt24 pb24"> |
||||
|
<div class="row s_col_no_resize s_col_no_bgcolor"> |
||||
|
<div class="col-lg-4 pb16 o_not_editable" contenteditable="false"> |
||||
|
<img alt="" src="/web/image/website.s_company_team_image_1" |
||||
|
class="img-fluid rounded-circle mx-auto o_editable_media" |
||||
|
contenteditable="true"/> |
||||
|
</div> |
||||
|
<div class="col-lg-8"> |
||||
|
<h4>Tony Fred, CEO</h4> |
||||
|
<p> |
||||
|
Founder and chief visionary, Tony is the driving force behind the |
||||
|
company. He loves |
||||
|
to keep his hands full by participating in the development of the |
||||
|
software, |
||||
|
marketing, and customer experience strategies. |
||||
|
</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-6 pt24 pb24"> |
||||
|
<div class="row s_col_no_resize s_col_no_bgcolor"> |
||||
|
<div class="col-lg-4 pb16 o_not_editable" contenteditable="false"> |
||||
|
<img alt="" src="/web/image/website.s_company_team_image_2" |
||||
|
class="img-fluid rounded-circle mx-auto o_editable_media" |
||||
|
contenteditable="true"/> |
||||
|
</div> |
||||
|
<div class="col-lg-8"> |
||||
|
<h4>Mich Stark, COO</h4> |
||||
|
<p>Mich loves taking on challenges. With his multi-year experience as |
||||
|
Commercial Director in the software industry, Mich has helped the |
||||
|
company to get where it is today. Mich is among the best minds. |
||||
|
</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-6 pt24 pb24"> |
||||
|
<div class="row s_col_no_resize s_col_no_bgcolor"> |
||||
|
<div class="col-lg-4 pb16 o_not_editable" contenteditable="false"> |
||||
|
<img alt="" src="/web/image/website.s_company_team_image_3" |
||||
|
class="img-fluid rounded-circle mx-auto o_editable_media" |
||||
|
contenteditable="true"/> |
||||
|
</div> |
||||
|
<div class="col-lg-8"> |
||||
|
<h4>Aline Turner, CTO</h4> |
||||
|
<p>Aline is one of the iconic people in life who can say they love what |
||||
|
they do. She mentors 100+ in-house developers and looks after the |
||||
|
community of thousands of developers. |
||||
|
</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-6 pt24 pb24"> |
||||
|
<div class="row s_col_no_resize s_col_no_bgcolor"> |
||||
|
<div class="col-lg-4 pb16 o_not_editable" contenteditable="false"> |
||||
|
<img alt="" src="/web/image/website.s_company_team_image_4" |
||||
|
class="img-fluid rounded-circle mx-auto o_editable_media" |
||||
|
contenteditable="true"/> |
||||
|
</div> |
||||
|
<div class="col-lg-8"> |
||||
|
<h4>Iris Joe, CFO</h4> |
||||
|
<p>Iris, with her international experience, helps us easily understand |
||||
|
the numbers and improves them. She is determined to drive success |
||||
|
and delivers her professional acumen to bring the company to the |
||||
|
next level. |
||||
|
</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
<section class="s_references pt48 pb32"> |
||||
|
<div class="container"> |
||||
|
<h2 style="text-align: center;">Our References</h2> |
||||
|
<p style="text-align: center;">We are in good company.</p> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-2 pt16 pb16"> |
||||
|
<img src="/web/image/website.s_reference_demo_image_1" |
||||
|
class="img img-fluid mx-auto" alt=""/> |
||||
|
</div> |
||||
|
<div class="col-lg-2 pt16 pb16"> |
||||
|
<img src="/web/image/website.s_reference_demo_image_2" |
||||
|
class="img img-fluid mx-auto" alt=""/> |
||||
|
</div> |
||||
|
<div class="col-lg-2 pt16 pb16"> |
||||
|
<img src="/web/image/website.s_reference_demo_image_3" |
||||
|
class="img img-fluid mx-auto" alt=""/> |
||||
|
</div> |
||||
|
<div class="col-lg-2 pt16 pb16"> |
||||
|
<img src="/web/image/website.s_reference_demo_image_4" |
||||
|
class="img img-fluid mx-auto" alt=""/> |
||||
|
</div> |
||||
|
<div class="col-lg-2 pt16 pb16"> |
||||
|
<img src="/web/image/website.s_reference_demo_image_5" |
||||
|
class="img img-fluid mx-auto" alt=""/> |
||||
|
</div> |
||||
|
<div class="col-lg-2 pt16 pb16"> |
||||
|
<img src="/web/image/website.s_reference_default_image_6" |
||||
|
class="img img-fluid mx-auto" alt=""/> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
</div> |
||||
</t> |
</t> |
||||
</t> |
</t> |
||||
</field> |
</field> |
||||
</record> |
</record> |
||||
|
|
||||
</odoo> |
</odoo> |
@ -1,52 +1,49 @@ |
|||||
<?xml version="1.0" encoding="UTF-8" ?> |
<?xml version="1.0" encoding="UTF-8" ?> |
||||
<odoo> |
<odoo> |
||||
|
<!-- This XML template customizes the appearance and functionality of the cart popover in the website --> |
||||
<template id="coffee_cart_popover" inherit_id="website_sale.cart_popover" |
<template id="coffee_cart_popover" inherit_id="website_sale.cart_popover" |
||||
name="Coffee Cart Popover"> |
name="Coffee Cart Popover"> |
||||
<xpath expr="." position="replace"> |
<xpath expr="." position="replace"> |
||||
<div> |
<div> |
||||
<div class="items-cart"> |
<div class="items-cart"> |
||||
<t t-foreach="website_sale_order.website_order_line" t-as="order_line"> |
<t t-foreach="website_sale_order.website_order_line" |
||||
<div class="item"> |
t-as="order_line"> |
||||
<div class="item-img"> |
<div class="item"> |
||||
<img t-attf-src="data:image/png;base64,{{order_line.product_id.image_1920}}" |
<div class="item-img"> |
||||
alt=""/> |
<img t-attf-src="data:image/png;base64,{{order_line.product_id.image_1920}}" |
||||
|
alt=""/> |
||||
|
</div> |
||||
|
<div class="item-desc"> |
||||
|
<p class="item-cartname"> |
||||
|
<t t-esc="order_line.product_id.name"/> |
||||
|
</p> |
||||
|
<p class="item-cartabout"> |
||||
|
<t t-esc="order_line.product_id.categ_id.name"/> |
||||
|
</p> |
||||
|
<p class="item-rate"> |
||||
|
<t t-esc="order_line.price_unit"/> |
||||
|
</p> |
||||
|
</div> |
||||
</div> |
</div> |
||||
<div class="item-desc"> |
</t> |
||||
<p class="item-cartname"> |
</div> |
||||
<t t-esc="order_line.product_id.name"/> |
<div class="cart-border"/> |
||||
</p> |
<div class="row list-row cart-box-total"> |
||||
<p class="item-cartabout"> |
<p class="list">Subtotal:</p> |
||||
<t t-esc="order_line.product_id.categ_id.name"/> |
<p class="amount"> |
||||
</p> |
<t t-esc="website_sale_order.amount_total"/> |
||||
<p class="item-rate"> |
</p> |
||||
<t t-esc="order_line.price_unit"/> |
</div> |
||||
</p> |
<div class="cart-buttons"> |
||||
</div> |
<a href="/shop/cart" |
||||
|
t-attf-class="nav-link"> |
||||
</div> |
<button class="cartview">View Cart</button> |
||||
</t> |
</a> |
||||
</div> |
<a href="/shop/payment"> |
||||
<div class="cart-border"> |
<button class="cartcheckout">checkout</button> |
||||
</div> |
</a> |
||||
<div class="row list-row cart-box-total"> |
</div> |
||||
<p class="list">Subtotal:</p> |
|
||||
<p class="amount"> |
|
||||
<t t-esc="website_sale_order.amount_total"/> |
|
||||
</p> |
|
||||
</div> |
|
||||
|
|
||||
<div class="cart-buttons"> |
|
||||
<a href="/shop/cart" |
|
||||
t-attf-class="nav-link"> |
|
||||
<button class="cartview">View Cart</button> |
|
||||
</a> |
|
||||
<a href="/shop/payment"> |
|
||||
<button class="cartcheckout">checkout</button> |
|
||||
</a> |
|
||||
|
|
||||
</div> |
</div> |
||||
</div> |
|
||||
|
|
||||
</xpath> |
</xpath> |
||||
</template> |
</template> |
||||
</odoo> |
</odoo> |
||||
|
@ -1,123 +1,75 @@ |
|||||
<?xml version="1.0" encoding="UTF-8" ?> |
<?xml version="1.0" encoding="UTF-8" ?> |
||||
<odoo> |
<odoo> |
||||
|
<!-- Navbar--> |
||||
<template id="header_coffee_shop" |
<template id="header_coffee_shop" |
||||
inherit_id="website.template_header_default" |
inherit_id="website.template_header_default" |
||||
name="Template Header Theme" active="True"> |
name="Template Header Theme" active="True"> |
||||
<xpath expr="//t[@t-call='website.navbar']" position="replace"> |
<xpath expr="//t[@t-call='website.navbar']" position="replace"> |
||||
|
|
||||
<t t-call="website.navbar"> |
<t t-call="website.navbar"> |
||||
|
|
||||
<div id="top_menu_container" |
<div id="top_menu_container" |
||||
class="container justify-content-start justify-content-lg-between"> |
class="container justify-content-start justify-content-lg-between"> |
||||
<div class="logo"> |
<div class="logo"> |
||||
<img src="/theme_coffee_shop/static/src/images/logo.png" |
<img src="/theme_coffee_shop/static/src/images/logo.png" |
||||
alt=""/> |
alt=""/> |
||||
</div> |
</div> |
||||
|
<div id="top_menu_collapse" |
||||
<div id="top_menu_collapse" class="collapse navbar-collapse order-last order-lg-0"> |
class="collapse navbar-collapse order-last order-lg-0"> |
||||
<t t-call="website.navbar_nav"> |
<t t-call="website.navbar_nav"> |
||||
<t t-set="_nav_class" t-valuef="flex-grow"/> |
<t t-set="_nav_class" t-valuef="flex-grow"/> |
||||
<!-- Menu --> |
<!-- Menu --> |
||||
<t t-foreach="website.menu_id.child_id" t-as="submenu"> |
<t t-foreach="website.menu_id.child_id" |
||||
<t t-call="website.submenu"> |
t-as="submenu"> |
||||
<t t-set="item_class" t-valuef="nav-item"/> |
<t t-call="website.submenu"> |
||||
<t t-set="link_class" t-valuef="nav-link"/> |
<t t-set="item_class" t-valuef="nav-item"/> |
||||
</t> |
<t t-set="link_class" t-valuef="nav-link"/> |
||||
</t> |
</t> |
||||
<!-- Cart--> |
</t> |
||||
<t t-call="website_sale.header_cart_link"> |
<!-- Cart --> |
||||
<t t-set="_icon" t-value="True"/> |
<t t-call="website_sale.header_cart_link"> |
||||
<t t-set="_item_class" t-value="'mx-lg-3 '"/> |
<t t-set="_icon" t-value="True"/> |
||||
<t t-set="_link_class" t-value="'nav-link'"/> |
<t t-set="_item_class" t-value="'mx-lg-3 '"/> |
||||
</t> |
<t t-set="_link_class" t-value="'nav-link'"/> |
||||
<!-- Wishlist--> |
</t> |
||||
<t t-call="website_sale_wishlist.header_wishlist_link"> |
<!-- Wishlist --> |
||||
<t t-set="_icon" t-value="True"/> |
<t t-call="website_sale_wishlist.header_wishlist_link"> |
||||
<t t-set="_item_class" t-value="'mx-lg-3'"/> |
<t t-set="_icon" t-value="True"/> |
||||
<t t-set="_link_class" t-value="'nav-link'"/> |
<t t-set="_item_class" t-value="'mx-lg-3'"/> |
||||
</t> |
<t t-set="_link_class" t-value="'nav-link'"/> |
||||
|
</t> |
||||
<!-- Sign In --> |
<!-- Sign In --> |
||||
<t t-call="portal.placeholder_user_sign_in"> |
<t t-call="portal.placeholder_user_sign_in"> |
||||
<t t-set="_item_class" t-valuef="nav-item ms-lg-auto"/> |
<t t-set="_item_class" |
||||
<t t-set="_link_class" t-valuef="nav-link fw-bold"/> |
t-valuef="nav-item ms-lg-auto"/> |
||||
</t> |
<t t-set="_link_class" |
||||
|
t-valuef="nav-link fw-bold"/> |
||||
|
</t> |
||||
<!-- User Dropdown --> |
<!-- User Dropdown --> |
||||
<t t-call="portal.user_dropdown"> |
<t t-call="portal.user_dropdown"> |
||||
<t t-set="_user_name" t-value="true"/> |
<t t-set="_user_name" t-value="true"/> |
||||
<t t-set="_item_class" t-valuef="dropdown ms-lg-auto "/> |
<t t-set="_item_class" |
||||
<t t-set="_link_class" t-valuef="nav-link fw-bold"/> |
t-valuef="dropdown ms-lg-auto "/> |
||||
|
<t t-set="_link_class" |
||||
|
t-valuef="nav-link fw-bold"/> |
||||
</t> |
</t> |
||||
</t> |
</t> |
||||
|
|
||||
</div> |
</div> |
||||
|
|
||||
|
|
||||
<!-- Navbar Toggler --> |
<!-- Navbar Toggler --> |
||||
<t t-call="website.navbar_toggler"> |
<t t-call="website.navbar_toggler"> |
||||
<t t-set="_toggler_class" t-valuef="ms-auto"/> |
<t t-set="_toggler_class" t-valuef="ms-auto"/> |
||||
</t> |
</t> |
||||
|
|
||||
</div> |
</div> |
||||
|
|
||||
|
|
||||
</t> |
</t> |
||||
</xpath> |
</xpath> |
||||
</template> |
</template> |
||||
|
<!-- TEMPLATE FOR WISHLIST AND CART IN HEADER--> |
||||
<!-- TEMPLATE FOR CART IN HEADER--> |
|
||||
<template id="coffee_header_cart_link" name=" Coffee Header Cart Link" |
|
||||
inherit_id="website_sale.header_cart_link"> |
|
||||
<xpath expr="//t" position="replace"> |
|
||||
<t t-nocache="The number of products is dynamic, this rendering cannot be cached." |
|
||||
t-nocache-_icon="_icon" |
|
||||
t-nocache-_text="_text" |
|
||||
t-nocache-_item_class="_item_class" |
|
||||
t-nocache-_link_class="_link_class"> |
|
||||
<t t-set="website_sale_cart_quantity" t-value="request.session['website_sale_cart_quantity'] if 'website_sale_cart_quantity' in request.session else website.sale_get_order().cart_quantity or 0"/> |
|
||||
<t t-set="show_cart" t-value="true"/> |
|
||||
<li t-attf-class="#{_item_class} divider d-none"/> |
|
||||
<li t-attf-class="o_wsale_my_cart align-self-md-start #{not show_cart and 'd-none'} #{_item_class}"> |
|
||||
<a href="/shop/cart" t-attf-class="#{_link_class}"> |
|
||||
<img class="cart-icon" |
|
||||
src="/theme_coffee_shop/static/src/images/cart.png" |
|
||||
alt=""/> |
|
||||
<span t-if="_text">Cart items</span> |
|
||||
<sup class="my_cart_quantity badge text-bg-primary d-none" t-esc="website_sale_cart_quantity" t-att-data-order-id="request.session.get('sale_order_id', '')"/> |
|
||||
<div class="notify"/> |
|
||||
</a> |
|
||||
|
|
||||
</li> |
|
||||
</t> |
|
||||
|
|
||||
</xpath> |
|
||||
</template> |
|
||||
|
|
||||
<!-- TEMPLATE FOR WISHLIST IN HEADER--> |
|
||||
<template id="coffee_header_wishlist_link" |
<template id="coffee_header_wishlist_link" |
||||
name=" Coffee Header Wishlist Link" |
name=" Coffee Header Wishlist Link" |
||||
inherit_id="website_sale_wishlist.header_wishlist_link"> |
inherit_id="website_sale_wishlist.template_header_default"> |
||||
<xpath expr="//t" position="replace"> |
<xpath expr="//t[@t-call='website_sale.header_cart_link']" |
||||
<t t-nocache="The wishlist may vary and depends on the user." |
position="replace"> |
||||
t-nocache-_icon="_icon" |
</xpath> |
||||
t-nocache-_item_class="_item_class" |
<xpath expr="//t[@t-call='website_sale_wishlist.header_wishlist_link']" |
||||
t-nocache-_link_class="_link_class" |
position="replace"> |
||||
t-nocache-_text="_text"> |
|
||||
<t t-set="wishcount" |
|
||||
t-value="len(request.env['product.wishlist'].current())"/> |
|
||||
<t t-set="show_wishes" t-value="True"/> |
|
||||
<li t-attf-class="o_wsale_my_wish #{not show_wishes and 'd-none'} #{_item_class}"> |
|
||||
<a href="/shop/wishlist" t-attf-class="#{_link_class}"> |
|
||||
<img src="/theme_coffee_shop/static/src/images/wishlist.png" |
|
||||
alt=""/> |
|
||||
<span t-if="_text">Wishlist</span> |
|
||||
<div class="notify"/> |
|
||||
</a> |
|
||||
</li> |
|
||||
</t> |
|
||||
</xpath> |
</xpath> |
||||
</template> |
</template> |
||||
|
|
||||
|
|
||||
|
|
||||
</odoo> |
</odoo> |
||||
|
@ -1,280 +0,0 @@ |
|||||
<?xml version="1.0" encoding="UTF-8" ?> |
|
||||
<odoo> |
|
||||
|
|
||||
<!-- SIGN IN FIELDS--> |
|
||||
<template id="coffee_auth_fields" inherit_id="auth_signup.fields" name="Auth Signup/ResetPassword form fields"> |
|
||||
<xpath expr="//t" position="replace"> |
|
||||
|
|
||||
<div class="form-group"> |
|
||||
<input type="text" name="login" t-att-value="login" |
|
||||
id="login" class="login-input form-control form-control-sm" |
|
||||
placeholder="Email" autofocus="autofocus" |
|
||||
autocapitalize="off" required="required" |
|
||||
t-att-readonly="'readonly' if only_passwords else None" |
|
||||
style="margin-bottom: 15px;"/> |
|
||||
</div> |
|
||||
<div class="form-group"> |
|
||||
<input type="text" name="name" t-att-value="name" |
|
||||
id="name" class="login-input" placeholder="Your Name" |
|
||||
style="margin-bottom: 15px;" |
|
||||
required="required" t-att-readonly="'readonly' if only_passwords else None" |
|
||||
t-att-autofocus="'autofocus' if login and not only_passwords else None" /> |
|
||||
</div> |
|
||||
<div class="form-group"> |
|
||||
<input type="password" name="password" id="password" |
|
||||
class="login-input" placeholder="Password" |
|
||||
style="margin-bottom: 15px;" |
|
||||
required="required" t-att-autofocus="'autofocus' if only_passwords else None"/> |
|
||||
</div> |
|
||||
<div class="form-group"> |
|
||||
<input type="password" name="confirm_password" id="confirm_password" |
|
||||
class="login-input" placeholder="Confirm Password" |
|
||||
style="margin-bottom: 15px;" required="required"/> |
|
||||
</div> |
|
||||
|
|
||||
</xpath> |
|
||||
</template> |
|
||||
|
|
||||
|
|
||||
<!-- SIGN UP--> |
|
||||
<template id="coffee_signup" name="Sign up login" inherit_id="auth_signup.signup"> |
|
||||
<xpath expr="//t[@t-call='web.login_layout']" position="replace"> |
|
||||
<t t-call="web.login_layout"> |
|
||||
<section class="login-form-container show"> |
|
||||
<form style="width: 505px;height: auto;" role="form" method="post" t-if="not message"> |
|
||||
<input type="hidden" name="csrf_token" |
|
||||
t-att-value="request.csrf_token()"/> |
|
||||
<i class="fa-solid fa-xmark login-close">X</i> |
|
||||
<div class="form-content"> |
|
||||
<h3 class="login-form-head">Create New Account |
|
||||
</h3> |
|
||||
<div class="form-group"> |
|
||||
<div class="o_login_auth"> |
|
||||
<t t-call="auth_oauth.providers"/> |
|
||||
</div> |
|
||||
</div> |
|
||||
|
|
||||
<div class="form-group"> |
|
||||
<input type="text" name="login" t-att-value="login" |
|
||||
id="login" class="login-input form-control form-control-sm" |
|
||||
placeholder="Email" autofocus="autofocus" |
|
||||
autocapitalize="off" required="required" |
|
||||
t-att-readonly="'readonly' if only_passwords else None" |
|
||||
style="margin-bottom: 15px;"/> |
|
||||
</div> |
|
||||
<div class="form-group"> |
|
||||
<input type="text" name="name" t-att-value="name" |
|
||||
id="name" class="login-input" placeholder="Your Name" |
|
||||
style="margin-bottom: 15px;" |
|
||||
required="required" t-att-readonly="'readonly' if only_passwords else None" |
|
||||
t-att-autofocus="'autofocus' if login and not only_passwords else None" /> |
|
||||
</div> |
|
||||
<div class="form-group"> |
|
||||
<input type="password" name="password" id="password" |
|
||||
class="login-input" placeholder="Password" |
|
||||
style="margin-bottom: 15px;" |
|
||||
required="required" t-att-autofocus="'autofocus' if only_passwords else None"/> |
|
||||
</div> |
|
||||
<div class="form-group"> |
|
||||
<input type="password" name="confirm_password" id="confirm_password" |
|
||||
class="login-input" placeholder="Confirm Password" |
|
||||
style="margin-bottom: 15px;" required="required"/> |
|
||||
</div> |
|
||||
|
|
||||
<t t-set="only_passwords" t-value="bool(token and not invalid_token)"/> |
|
||||
|
|
||||
<input type="hidden" name="redirect" t-att-value="redirect"/> |
|
||||
<input type="hidden" name="token" t-att-value="token"/> |
|
||||
|
|
||||
<button type="submit" class="login-google"> Sign up</button> |
|
||||
<p class="register"> |
|
||||
<a t-attf-href="/web/login?{{ keep_query() }}" class="frgt-text" role="button">Already have an account?</a> |
|
||||
</p> |
|
||||
|
|
||||
</div> |
|
||||
</form> |
|
||||
</section> |
|
||||
</t> |
|
||||
</xpath> |
|
||||
</template> |
|
||||
|
|
||||
<!-- RESET PASSWORD--> |
|
||||
|
|
||||
<template id="coffee_reset" inherit_id="auth_signup.reset_password" name="Reset password"> |
|
||||
<xpath expr="//t[@t-call='web.login_layout']" position="replace"> |
|
||||
<t t-call="web.login_layout"> |
|
||||
<section class="login-form-container show"> |
|
||||
<form style="width: 445px;height: auto;" |
|
||||
role="form" method="post" t-if="not message" > |
|
||||
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/> |
|
||||
<i class="fa-solid fa-xmark login-close">X</i> |
|
||||
<div class="form-content"> |
|
||||
<h3 class="login-form-head">Reset Password |
|
||||
</h3> |
|
||||
|
|
||||
<t t-if="token and not invalid_token"> |
|
||||
<t t-call="auth_signup.fields"> |
|
||||
<t t-set="only_passwords" t-value="1"/> |
|
||||
</t> |
|
||||
</t> |
|
||||
<t t-if="not token"> |
|
||||
<div class="form-group"> |
|
||||
<input type="text" name="login" t-att-value="login" |
|
||||
id="login" class="login-input" placeholder="Your Email" |
|
||||
style="margin-bottom: 15px;" autofocus="autofocus" |
|
||||
required="required" autocapitalize="off"/> |
|
||||
</div> |
|
||||
</t> |
|
||||
<input type="hidden" name="redirect" t-att-value="redirect"/> |
|
||||
<input type="hidden" name="token" t-att-value="token"/> |
|
||||
<button type="submit" class="login-google" style="margin-bottom: 15px;">Reset Password</button> |
|
||||
<p class="register"> |
|
||||
<a t-if="not token" t-attf-href="/web/login?{{ keep_query() }}" class="frgt-text">Back to Login</a> |
|
||||
<a t-if="invalid_token" href="/web/login" class="frgt-text">Back to Login</a> |
|
||||
</p> |
|
||||
|
|
||||
</div> |
|
||||
|
|
||||
</form> |
|
||||
</section> |
|
||||
</t> |
|
||||
</xpath> |
|
||||
</template> |
|
||||
|
|
||||
|
|
||||
<!-- TEMPLATE FOR LOGIN--> |
|
||||
<template id="coffee_user_sign_in" name="User Sign In" inherit_id="portal.user_sign_in"> |
|
||||
<xpath expr="." position="replace"> |
|
||||
<li t-nocache="Profile session and user group can change unrelated to parent caches." |
|
||||
t-nocache-_item_class="_item_class" |
|
||||
t-nocache-_link_class="_link_class" |
|
||||
groups="base.group_public" t-attf-class="#{_item_class} o_no_autohide_item"> |
|
||||
<a t-attf-href="/web/login" t-attf-class="#{_link_class}"> |
|
||||
<span> Log in</span> |
|
||||
<span t-if="request.session.profile_session" class="text-danger fa fa-circle"/> |
|
||||
</a> |
|
||||
</li> |
|
||||
</xpath> |
|
||||
</template> |
|
||||
|
|
||||
|
|
||||
<!-- PROFILE--> |
|
||||
<template id="user_dropdown" name="Portal User Dropdown" inherit_id="portal.user_dropdown"> |
|
||||
<xpath expr="//t" position="replace"> |
|
||||
<t t-nocache="Each user is different regardless of the page visited." |
|
||||
t-nocache-_avatar="_avatar" |
|
||||
t-nocache-_icon="_icon" |
|
||||
t-nocache-_icon_class="_icon_class" |
|
||||
t-nocache-_user_name="_user_name" |
|
||||
t-nocache-_user_name_class="_user_name_class" |
|
||||
t-nocache-_item_class="_item_class" |
|
||||
t-nocache-_link_class="_link_class" |
|
||||
t-nocache-_dropdown_menu_class="_dropdown_menu_class"> |
|
||||
<t t-set="is_connected" t-value="not user_id._is_public()"/> |
|
||||
<li t-if="is_connected" t-attf-class="#{_item_class} o_no_autohide_item"> |
|
||||
<a href="#" role="button" data-bs-toggle="dropdown" t-attf-class="dropdown-toggle #{_link_class}"> |
|
||||
<t t-if="_avatar"> |
|
||||
<t t-set="avatar_source" t-value="image_data_uri(user_id.avatar_256)"/> |
|
||||
<img t-att-src="avatar_source" t-attf-class="rounded-circle o_object_fit_cover #{_avatar_class}" width="24" height="24" alt="" loading="eager"/> |
|
||||
</t> |
|
||||
<i t-if="_icon" t-attf-class="fa fa-1x fa-fw fa-user-circle-o #{_icon_class}"/> |
|
||||
<span t-if="_user_name" t-attf-class="#{_user_name_class}" t-esc="user_id.name[:23] + '...' if user_id.name and len(user_id.name) > 25 else user_id.name"/> |
|
||||
</a> |
|
||||
<div t-attf-class=" dropdown-menu js_usermenu #{_dropdown_menu_class}" role="menu"> |
|
||||
<a groups="base.group_user" href="/web" role="menuitem" class="dropdown-item ps-3 my_coffee" id="o_backend_user_dropdown_link"> |
|
||||
Apps |
|
||||
</a> |
|
||||
<a href="/my/home" role="menuitem" class="dropdown-item ps-3 my_coffee "> |
|
||||
My Account |
|
||||
</a> |
|
||||
<a t-attf-href="/web/session/logout?redirect=/" role="menuitem" id="o_logout" class="dropdown-item ps-3 my_coffee"> |
|
||||
Logout |
|
||||
</a> |
|
||||
</div> |
|
||||
</li> |
|
||||
</t> |
|
||||
</xpath> |
|
||||
</template> |
|
||||
|
|
||||
|
|
||||
<!-- LOGIN--> |
|
||||
<template id="coffee_login" inherit_id="web.login" name="Coffee login"> |
|
||||
<xpath expr="//t[@t-call='web.login_layout']" position="replace"> |
|
||||
|
|
||||
<t t-call="web.login_layout"> |
|
||||
<section class="login-form-container show"> |
|
||||
|
|
||||
<form action="" style="width: 505px;height: auto;" |
|
||||
role="form" t-attf-action="/web/login" method="post" |
|
||||
onsubmit="this.action = '/web/login' + location.hash"> |
|
||||
<input type="hidden" name="csrf_token" |
|
||||
t-att-value="request.csrf_token()"/> |
|
||||
<i class="fa-solid fa-xmark login-close">X</i> |
|
||||
<div class="form-content"> |
|
||||
<h3 class="login-form-head">Welcome to expresoo</h3> |
|
||||
<div class="form-group"> |
|
||||
<div class="o_login_auth"> |
|
||||
<t t-call="auth_oauth.providers"></t> |
|
||||
</div> |
|
||||
<input type="text" |
|
||||
class="login-input" |
|
||||
placeholder="Email" |
|
||||
name="login" |
|
||||
t-att-value="login" |
|
||||
id="login" |
|
||||
required="required" |
|
||||
autofocus="autofocus" |
|
||||
autocapitalize="off" |
|
||||
style="margin-bottom: 15px;"/> |
|
||||
</div> |
|
||||
<div class="form-group"> |
|
||||
<input type="password" |
|
||||
class="login-input" |
|
||||
placeholder="Password" |
|
||||
name="password" |
|
||||
id="password" |
|
||||
required="required" |
|
||||
autocomplete="current-password" |
|
||||
t-att-autofocus="'autofocus' if login else None" |
|
||||
maxlength="4096"/> |
|
||||
</div> |
|
||||
|
|
||||
<div class="password-settings"> |
|
||||
<a t-if="signup_enabled" t-attf-href="/web/signup?{{ keep_query() }}" class="frgt-text">Create an account</a> |
|
||||
<a t-if="reset_password_enabled" t-attf-href="/web/reset_password?{{ keep_query() }}" class="frgt-text">Forgot password?</a> |
|
||||
</div> |
|
||||
|
|
||||
<button type="submit" class="login-google">Login</button> |
|
||||
<br></br> |
|
||||
<t t-if="debug"> |
|
||||
<button type="submit" name="redirect" style="padding-top: 10px;" value="/web/become" class="btn btn-link btn-sm frgt-text">Log in as superuser</button> |
|
||||
</t> |
|
||||
</div> |
|
||||
<input type="hidden" name="redirect" t-att-value="redirect"/> |
|
||||
</form> |
|
||||
|
|
||||
</section> |
|
||||
</t> |
|
||||
</xpath> |
|
||||
|
|
||||
</template> |
|
||||
|
|
||||
|
|
||||
<!--REMOVE 'OR' FROM LOGIN PAGE--> |
|
||||
<template id="remove_or" inherit_id="auth_oauth.providers"> |
|
||||
<xpath expr="//t" position="replace"> |
|
||||
<t t-if="len(providers) > 0"> |
|
||||
<em t-attf-class="d-block d-none text-center text-muted small my-#{len(providers) if len(providers) < 3 else 3}">- or -</em> |
|
||||
<div class="o_auth_oauth_providers list-group mt-1 mb-1 text-start"> |
|
||||
<a t-foreach="providers" t-as="p" class="list-group-item list-group-item-action py-2 my_superlogin" t-att-href="p['auth_link']"> |
|
||||
<i t-att-class="p['css_class']"/> |
|
||||
<t t-esc="p['body']"/> |
|
||||
</a> |
|
||||
</div> |
|
||||
<p class="login-or">Or sign in with Email</p> |
|
||||
</t> |
|
||||
</xpath> |
|
||||
</template> |
|
||||
|
|
||||
|
|
||||
</odoo> |
|
@ -1,76 +1,93 @@ |
|||||
<?xml version="1.0" encoding="UTF-8" ?> |
<?xml version="1.0" encoding="UTF-8" ?> |
||||
<odoo> |
<odoo> |
||||
|
<!-- This XML template inherits from the existing "website_sale.payment" template --> |
||||
<template id="coffee_shop_payment" inherit_id="website_sale.payment" |
<template id="coffee_shop_payment" inherit_id="website_sale.payment" |
||||
name="Coffee Payment"> |
name="Coffee Payment"> |
||||
<xpath expr="." position="replace"> |
<xpath expr="." position="replace"> |
||||
<t t-call="website.layout"> |
<t t-call="website.layout"> |
||||
<t t-set="additional_title">Shop - Select Payment Provider</t> |
<t t-set="additional_title">Shop - Select Payment Provider</t> |
||||
<t t-set="no_footer" t-value="1"/> |
<t t-set="no_footer" t-value="1"/> |
||||
|
<div id="wrap"> |
||||
<div id="wrap"> |
<div class="container oe_website_sale py-2"> |
||||
<div class="container oe_website_sale py-2"> |
<div class="row"> |
||||
<div class="row"> |
<div class='col-12'> |
||||
<div class='col-12'> |
<t t-call="website_sale.wizard_checkout"> |
||||
<t t-call="website_sale.wizard_checkout"> |
<t t-set="step" t-value="40"/> |
||||
<t t-set="step" t-value="40" /> |
</t> |
||||
</t> |
|
||||
</div> |
|
||||
<div class="col-12" t-if="errors"> |
|
||||
<t t-foreach="errors" t-as="error"> |
|
||||
<div class="alert alert-danger" t-if="error" role="alert"> |
|
||||
<h4> |
|
||||
<t t-esc="error[0]" /> |
|
||||
</h4> |
|
||||
<t t-esc="error[1]" /> |
|
||||
</div> |
|
||||
</t> |
|
||||
</div> |
|
||||
<div class="col-12 col-xl-auto order-xl-2"> |
|
||||
<t t-call="website_sale.cart_summary"/> |
|
||||
</div> |
|
||||
<div class="col-12 col-xl order-xl-1 oe_cart"> |
|
||||
<div id='address_on_payment'> |
|
||||
<t t-call="website_sale.address_on_payment"/> |
|
||||
</div> |
</div> |
||||
|
<div class="col-12" t-if="errors"> |
||||
<div class="oe_structure clearfix mt-3" id="oe_structure_website_sale_payment_1"/> |
<t t-foreach="errors" t-as="error"> |
||||
|
<div class="alert alert-danger" |
||||
<t t-if="website_sale_order.amount_total"> |
t-if="error" role="alert"> |
||||
<div t-if="providers or tokens" id="payment_method" class="mt-3"> |
<h4> |
||||
<h3 class="mb24">Pay with </h3> |
<t t-esc="error[0]"/> |
||||
<t t-call="payment.checkout"> |
</h4> |
||||
<t t-set="footer_template_id" t-value="'website_sale.payment_footer'"/> |
<t t-esc="error[1]"/> |
||||
<t t-set="submit_button_label" class="btn-color">Pay Now</t> |
</div> |
||||
</t> |
</t> |
||||
</div> |
</div> |
||||
<div t-else="" class="alert alert-warning"> |
<div class="col-12 col-xl-auto order-xl-2"> |
||||
<strong>No suitable payment option could be found.</strong><br/> |
<t t-call="website_sale.cart_summary"/> |
||||
If you believe that it is an error, please contact the website administrator. |
</div> |
||||
|
<div class="col-12 col-xl order-xl-1 oe_cart"> |
||||
|
<div id='address_on_payment'> |
||||
|
<t t-call="website_sale.address_on_payment"/> |
||||
</div> |
</div> |
||||
</t> |
<div class="oe_structure clearfix mt-3" |
||||
|
id="oe_structure_website_sale_payment_1"/> |
||||
<div t-if="not providers" class="mt-2"> |
<t t-if="website_sale_order.amount_total"> |
||||
|
<div t-if="providers or tokens" |
||||
|
id="payment_method" class="mt-3"> |
||||
|
<h3 class="mb24">Pay with</h3> |
||||
|
<t t-call="payment.checkout"> |
||||
|
<t t-set="footer_template_id" |
||||
|
t-value="'website_sale.payment_footer'"/> |
||||
|
<t t-set="submit_button_label" |
||||
|
class="btn-color">Pay Now |
||||
|
</t> |
||||
|
</t> |
||||
|
</div> |
||||
|
<div t-else="" class="alert alert-warning"> |
||||
|
<strong>No suitable payment option |
||||
|
could be found. |
||||
|
</strong> |
||||
|
<br/> |
||||
|
If you believe that it is an error, |
||||
|
please contact the website |
||||
|
administrator. |
||||
|
</div> |
||||
|
</t> |
||||
|
<div t-if="not providers" class="mt-2"> |
||||
<a role="button" groups="base.group_system" |
<a role="button" groups="base.group_system" |
||||
t-attf-href="/web#action=#{payment_action_id}"> |
t-attf-href="/web#action=#{payment_action_id}"> |
||||
<i class="fa fa-arrow-right"></i> Add payment providers |
<i class="fa fa-arrow-right"/> |
||||
</a> |
Add payment providers |
||||
</div> |
</a> |
||||
<div class="js_payment mt-3" t-if="not website_sale_order.amount_total" id="payment_method" name="o_website_sale_free_cart"> |
</div> |
||||
<form target="_self" action="/shop/payment/validate" method="post"> |
<div class="js_payment mt-3" |
||||
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()" /> |
t-if="not website_sale_order.amount_total" |
||||
<t t-call="website_sale.payment_footer" class="btn-color"> |
id="payment_method" |
||||
<t t-set="submit_button_label" class="btn-color">Confirm Order</t> |
name="o_website_sale_free_cart"> |
||||
</t> |
<form target="_self" |
||||
</form> |
action="/shop/payment/validate" |
||||
|
method="post"> |
||||
|
<input type="hidden" name="csrf_token" |
||||
|
t-att-value="request.csrf_token()"/> |
||||
|
<t t-call="website_sale.payment_footer" |
||||
|
class="btn-color"> |
||||
|
<t t-set="submit_button_label" |
||||
|
class="btn-color">Confirm Order |
||||
|
</t> |
||||
|
</t> |
||||
|
</form> |
||||
|
</div> |
||||
</div> |
</div> |
||||
</div> |
</div> |
||||
</div> |
</div> |
||||
|
<div class="oe_structure" |
||||
|
id="oe_structure_website_sale_payment_2"/> |
||||
</div> |
</div> |
||||
<div class="oe_structure" id="oe_structure_website_sale_payment_2"/> |
</t> |
||||
</div> |
|
||||
</t> |
|
||||
</xpath> |
</xpath> |
||||
</template> |
</template> |
||||
|
</odoo> |
||||
|
|
||||
</odoo> |
|
||||
|
@ -1,67 +1,90 @@ |
|||||
<?xml version="1.0" encoding="UTF-8" ?> |
<?xml version="1.0" encoding="UTF-8" ?> |
||||
<odoo> |
<odoo> |
||||
<template id="coffee_shop_payment_summary" inherit_id="website_sale.cart_summary" |
<!-- Template for cart summary--> |
||||
|
<template id="coffee_shop_payment_summary" |
||||
|
inherit_id="website_sale.cart_summary" |
||||
name="Coffee Payment Total"> |
name="Coffee Payment Total"> |
||||
<xpath expr="." position="replace"> |
<xpath expr="." position="replace"> |
||||
|
|
||||
<div class="card tbl-tbl"> |
<div class="card tbl-tbl"> |
||||
<div class="card-body"> |
<div class="card-body"> |
||||
<div class="toggle_summary d-xl-none"> |
<div class="toggle_summary d-xl-none"> |
||||
<b>Your order: </b> <span id="amount_total_summary" class="monetary_field" t-field="website_sale_order.amount_total" t-options='{"widget": "monetary", "display_currency": website_sale_order.pricelist_id.currency_id}'/> |
<b>Your order:</b> |
||||
<span class='fa fa-chevron-down fa-border float-end' role="img" aria-label="Details" title="Details"></span> |
<span id="amount_total_summary" class="monetary_field" |
||||
</div> |
t-field="website_sale_order.amount_total" |
||||
<div t-if="not website_sale_order or not website_sale_order.website_order_line" class="alert alert-info"> |
t-options='{"widget": "monetary", "display_currency": website_sale_order.pricelist_id.currency_id}'/> |
||||
Your cart is empty! |
<span class='fa fa-chevron-down fa-border float-end' |
||||
</div> |
role="img" aria-label="Details" title="Details"/> |
||||
<div class="toggle_summary_div d-none d-xl-block"> |
</div> |
||||
<table class="table table-striped table-sm" id="cart_products" t-if="website_sale_order and website_sale_order.website_order_line"> |
<div t-if="not website_sale_order or not website_sale_order.website_order_line" |
||||
<thead> |
class="alert alert-info"> |
||||
<h3>Order Summary</h3> |
Your cart is empty! |
||||
</thead> |
</div> |
||||
<tbody> |
<div class="toggle_summary_div d-none d-xl-block"> |
||||
<tr t-foreach="website_sale_order.website_order_line" t-as="line" class="d-none"> |
<table class="table table-striped table-sm" |
||||
<td colspan="2" t-if="not line.product_id.product_tmpl_id"/> |
id="cart_products" |
||||
<t t-else=""> |
t-if="website_sale_order and website_sale_order.website_order_line"> |
||||
<td class='td-img text-center'> |
<thead> |
||||
<span t-if="line._is_not_sellable_line() and line.product_id.image_128"> |
<h3>Order Summary</h3> |
||||
<img t-att-src="image_data_uri(line.product_id.image_128)" class="img o_image_64_max rounded" t-att-alt="line.name_short"/> |
</thead> |
||||
</span> |
<tbody> |
||||
<span t-else="" |
<tr t-foreach="website_sale_order.website_order_line" |
||||
t-field="line.product_id.image_128" |
t-as="line" class="d-none"> |
||||
t-options="{'widget': 'image', 'qweb_img_responsive': False, 'class': 'rounded o_image_64_max'}" |
<td colspan="2" |
||||
/> |
t-if="not line.product_id.product_tmpl_id"/> |
||||
|
<t t-else=""> |
||||
|
<td class='td-img text-center'> |
||||
|
<span t-if="line._is_not_sellable_line() and line.product_id.image_128"> |
||||
|
<img t-att-src="image_data_uri(line.product_id.image_128)" |
||||
|
class="img o_image_64_max rounded" |
||||
|
t-att-alt="line.name_short"/> |
||||
|
</span> |
||||
|
<span t-else="" |
||||
|
t-field="line.product_id.image_128" |
||||
|
t-options="{'widget': 'image', 'qweb_img_responsive': False, 'class': 'rounded o_image_64_max'}" |
||||
|
/> |
||||
|
</td> |
||||
|
<td class='td-product_name'> |
||||
|
<div> |
||||
|
<strong t-field="line.name_short"/> |
||||
|
</div> |
||||
|
</td> |
||||
|
</t> |
||||
|
<td class='td-qty'> |
||||
|
<div t-esc="line.product_uom_qty"/> |
||||
|
<t t-if='line._get_shop_warning(clear=False)'> |
||||
|
<i class='fa fa-warning text-warning' |
||||
|
t-att-title="line._get_shop_warning()" |
||||
|
role="img" |
||||
|
aria-label="Warning"/> |
||||
|
</t> |
||||
</td> |
</td> |
||||
<td class='td-product_name'> |
<td class="text-center td-price text-nowrap"> |
||||
<div> |
<span t-field="line.price_reduce_taxexcl" |
||||
<strong t-field="line.name_short" /> |
t-options="{'widget': 'monetary', 'display_currency': website_sale_order.currency_id}" |
||||
</div> |
groups="account.group_show_line_subtotals_tax_excluded"/> |
||||
|
<span t-field="line.price_reduce_taxinc" |
||||
|
t-options="{'widget': 'monetary', 'display_currency': website_sale_order.currency_id}" |
||||
|
groups="account.group_show_line_subtotals_tax_included"/> |
||||
</td> |
</td> |
||||
</t> |
</tr> |
||||
<td class='td-qty'> |
</tbody> |
||||
<div t-esc="line.product_uom_qty" /> |
</table> |
||||
<t t-if='line._get_shop_warning(clear=False)'> |
<t t-if='website_sale_order'> |
||||
<i class='fa fa-warning text-warning' t-att-title="line._get_shop_warning()" role="img" aria-label="Warning"/> |
<t t-set='warning' |
||||
</t> |
t-value='website_sale_order._get_shop_warning(clear=False)'/> |
||||
</td> |
<div t-if='warning' class="alert alert-warning" |
||||
<td class="text-center td-price"> |
role="alert"> |
||||
<span t-field="line.price_reduce_taxexcl" style="white-space: nowrap;" t-options="{'widget': 'monetary', 'display_currency': website_sale_order.currency_id}" groups="account.group_show_line_subtotals_tax_excluded" /> |
<strong>Warning!</strong> |
||||
<span t-field="line.price_reduce_taxinc" style="white-space: nowrap;" t-options="{'widget': 'monetary', 'display_currency': website_sale_order.currency_id}" groups="account.group_show_line_subtotals_tax_included" /> |
<t t-esc='website_sale_order._get_shop_warning()'/> |
||||
</td> |
</div> |
||||
</tr> |
</t> |
||||
</tbody> |
<t t-call="website_sale.total"> |
||||
</table> |
<t t-set='redirect' |
||||
<t t-if='website_sale_order'> |
t-value="redirect or '/shop/payment'"/> |
||||
<t t-set='warning' t-value='website_sale_order._get_shop_warning(clear=False)' /> |
</t> |
||||
<div t-if='warning' class="alert alert-warning" role="alert"> |
</div> |
||||
<strong>Warning!</strong> <t t-esc='website_sale_order._get_shop_warning()'/> |
|
||||
</div> |
|
||||
</t> |
|
||||
<t t-call="website_sale.total"> |
|
||||
<t t-set='redirect' t-value="redirect or '/shop/payment'"></t> |
|
||||
</t> |
|
||||
</div> |
</div> |
||||
</div> |
</div> |
||||
</div> |
|
||||
</xpath> |
</xpath> |
||||
</template> |
</template> |
||||
</odoo> |
</odoo> |
||||
|
@ -1,117 +1,173 @@ |
|||||
<?xml version="1.0" encoding="UTF-8" ?> |
<?xml version="1.0" encoding="UTF-8" ?> |
||||
<odoo> |
<odoo> |
||||
|
<!-- Template for product page--> |
||||
<template id="coffee_product_page" inherit_id="website_sale.product"> |
<template id="coffee_product_page" inherit_id="website_sale.product"> |
||||
<xpath expr="//div[@id='product_detail_main']" position="replace"> |
<xpath expr="//div[@id='product_detail_main']" position="replace"> |
||||
<div class="row" id="product_detail_main" data-name="Product Page" |
<div class="row" id="product_detail_main" data-name="Product Page" |
||||
t-att-data-image_width="website.product_page_image_width" |
t-att-data-image_width="website.product_page_image_width" |
||||
t-att-data-image_layout="website.product_page_image_layout"> |
t-att-data-image_layout="website.product_page_image_layout"> |
||||
<t t-set="image_cols" t-value="website._get_product_page_proportions()"/> |
<t t-set="image_cols" |
||||
<div t-attf-class="col-lg-#{image_cols[0]} mt-lg-4 o_wsale_product_images position-relative" t-if="website.product_page_image_width != 'none'"> |
t-value="website._get_product_page_proportions()"/> |
||||
<t t-call="website_sale.shop_product_images"/> |
<div t-attf-class="col-lg-#{image_cols[0]} mt-lg-4 o_wsale_product_images position-relative" |
||||
|
t-if="website.product_page_image_width != 'none'"> |
||||
|
<t t-call="website_sale.shop_product_images"/> |
||||
|
</div> |
||||
|
<div t-attf-class="col-lg-#{image_cols[1]} mt-md-4" |
||||
|
id="product_details"> |
||||
|
<div class="pr-descr"> |
||||
|
<t t-set="base_url" t-value="product.get_base_url()"/> |
||||
|
<h1 itemprop="name" t-field="product.name" |
||||
|
class="pr-title">Product Name |
||||
|
</h1> |
||||
|
<div class="pr-price"> |
||||
|
<b> |
||||
|
<t t-call="website_sale.product_price"/> |
||||
|
</b> |
||||
|
<small t-if="combination_info['base_unit_price']" |
||||
|
class="ms-1 text-muted o_base_unit_price_wrapper d-none" |
||||
|
groups="website_sale.group_show_uom_price"> |
||||
|
<t t-call='website_sale.base_unit_price'/> |
||||
|
</small> |
||||
|
</div> |
||||
</div> |
</div> |
||||
|
<span itemprop="url" class="d-none" |
||||
<div t-attf-class="col-lg-#{image_cols[1]} mt-md-4" id="product_details"> |
t-esc="base_url + product.website_url"/> |
||||
<div class="pr-descr"> |
<span itemprop="image" class="d-none" |
||||
<t t-set="base_url" t-value="product.get_base_url()"/> |
t-esc="base_url + website.image_url(product, 'image_1920')"/> |
||||
<h1 itemprop="name" t-field="product.name" class="pr-title">Product Name</h1> |
<t t-if="is_view_active('website_sale.product_comment')"> |
||||
<div class="pr-price"> |
<a href="#o_product_page_reviews" |
||||
<b><t t-call="website_sale.product_price"/></b> |
class="o_product_page_reviews_link text-decoration-none"> |
||||
<small t-if="combination_info['base_unit_price']" |
<t t-call="portal_rating.rating_widget_stars_static"> |
||||
class="ms-1 text-muted o_base_unit_price_wrapper d-none" groups="website_sale.group_show_uom_price"> |
<t t-set="rating_avg" |
||||
<t t-call='website_sale.base_unit_price'/> |
t-value="product.rating_avg"/> |
||||
</small> |
<t t-set="trans_text_plural">%s reviews</t> |
||||
</div> |
<t t-set="trans_text_singular">%s review</t> |
||||
|
<t t-set="rating_count" |
||||
|
t-value="(trans_text_plural if product.rating_count > 1 else trans_text_singular) % product.rating_count"/> |
||||
|
</t> |
||||
|
</a> |
||||
|
</t> |
||||
|
<p t-field="product.description_sale" |
||||
|
class="text-muted my-2" |
||||
|
placeholder="A short description that will also appear on documents."/> |
||||
|
<form t-if="product._is_add_to_cart_possible()" |
||||
|
action="/shop/cart/update" method="POST"> |
||||
|
<input type="hidden" name="csrf_token" |
||||
|
t-att-value="request.csrf_token()"/> |
||||
|
<div class="js_product js_main_product mb-3"> |
||||
|
<div class="d-none"> |
||||
|
<t t-call="website_sale.product_price"/> |
||||
|
<small t-if="combination_info['base_unit_price']" |
||||
|
class="ms-1 text-muted o_base_unit_price_wrapper d-none" |
||||
|
groups="website_sale.group_show_uom_price"> |
||||
|
<t t-call='website_sale.base_unit_price'/> |
||||
|
</small> |
||||
</div> |
</div> |
||||
<span itemprop="url" style="display:none;" t-esc="base_url + product.website_url"/> |
<t t-placeholder="select"> |
||||
<span itemprop="image" style="display:none;" t-esc="base_url + website.image_url(product, 'image_1920')" /> |
<input type="hidden" class="product_id" |
||||
<t t-if="is_view_active('website_sale.product_comment')"> |
name="product_id" |
||||
<a href="#o_product_page_reviews" class="o_product_page_reviews_link text-decoration-none"> |
t-att-value="product_variant.id"/> |
||||
<t t-call="portal_rating.rating_widget_stars_static"> |
<input type="hidden" |
||||
<t t-set="rating_avg" t-value="product.rating_avg"/> |
class="product_template_id" |
||||
<t t-set="trans_text_plural">%s reviews</t> |
name="product_template_id" |
||||
<t t-set="trans_text_singular">%s review</t> |
t-att-value="product.id"/> |
||||
<t t-set="rating_count" t-value="(trans_text_plural if product.rating_count > 1 else trans_text_singular) % product.rating_count"/> |
<input t-if="product.public_categ_ids.ids" |
||||
|
type="hidden" |
||||
|
class="product_category_id" |
||||
|
name="product_category_id" |
||||
|
t-att-value="product.public_categ_ids.ids[0]"/> |
||||
|
<input t-if="product.product_tag_ids.ids" |
||||
|
type="hidden" class="product_tag_id" |
||||
|
name="product_tag_id" |
||||
|
t-att-value="product.product_tag_ids.ids[0]"/> |
||||
|
<t t-if="combination" t-call="sale.variants"> |
||||
|
<t t-set="ul_class" |
||||
|
t-valuef="flex-column"/> |
||||
|
<t t-set="parent_combination" |
||||
|
t-value="None"/> |
||||
</t> |
</t> |
||||
</a> |
<t t-else=""> |
||||
</t> |
<ul class="d-none js_add_cart_variants mb-0" |
||||
<p t-field="product.description_sale" class="text-muted my-2" placeholder="A short description that will also appear on documents." /> |
t-att-data-attribute_exclusions="{'exclusions: []'}"/> |
||||
<form t-if="product._is_add_to_cart_possible()" action="/shop/cart/update" method="POST"> |
|
||||
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()" /> |
|
||||
<div class="js_product js_main_product mb-3"> |
|
||||
<div class="d-none"> |
|
||||
<t t-call="website_sale.product_price"/> |
|
||||
<small t-if="combination_info['base_unit_price']" |
|
||||
class="ms-1 text-muted o_base_unit_price_wrapper d-none" groups="website_sale.group_show_uom_price"> |
|
||||
<t t-call='website_sale.base_unit_price'/> |
|
||||
</small> |
|
||||
</div> |
|
||||
<t t-placeholder="select"> |
|
||||
<input type="hidden" class="product_id" name="product_id" t-att-value="product_variant.id" /> |
|
||||
<input type="hidden" class="product_template_id" name="product_template_id" t-att-value="product.id" /> |
|
||||
<input t-if="product.public_categ_ids.ids" type="hidden" class="product_category_id" name="product_category_id" t-att-value="product.public_categ_ids.ids[0]" /> |
|
||||
<input t-if="product.product_tag_ids.ids" type="hidden" class="product_tag_id" name="product_tag_id" t-att-value="product.product_tag_ids.ids[0]" /> |
|
||||
<t t-if="combination" t-call="sale.variants"> |
|
||||
<t t-set="ul_class" t-valuef="flex-column" /> |
|
||||
<t t-set="parent_combination" t-value="None" /> |
|
||||
</t> |
|
||||
<t t-else=""> |
|
||||
<ul class="d-none js_add_cart_variants mb-0" t-att-data-attribute_exclusions="{'exclusions: []'}"/> |
|
||||
</t> |
|
||||
</t> |
</t> |
||||
<p t-if="True" class="css_not_available_msg alert alert-warning">This combination does not exist.</p> |
</t> |
||||
<div id="o_wsale_cta_wrapper" class="d-flex flex-wrap align-items-center"> |
<p t-if="True" |
||||
<t t-set="hasQuantities" t-value="false"/> |
class="css_not_available_msg alert alert-warning"> |
||||
<t t-set="hasBuyNow" t-value="false"/> |
This combination does not exist. |
||||
<t t-set="ctaSizeBig" t-value="not hasQuantities or not hasBuyNow"/> |
</p> |
||||
|
<div id="o_wsale_cta_wrapper" |
||||
|
class="d-flex flex-wrap align-items-center"> |
||||
|
<t t-set="hasQuantities" t-value="false"/> |
||||
|
<t t-set="hasBuyNow" t-value="false"/> |
||||
|
<t t-set="ctaSizeBig" |
||||
|
t-value="not hasQuantities or not hasBuyNow"/> |
||||
|
|
||||
<div id="add_to_cart_wrap" t-attf-class="{{'d-none' if combination_info['prevent_zero_price_sale'] else 'd-inline-flex'}} mb-2"> |
<div id="add_to_cart_wrap" |
||||
<a role="button" id="add_to_cart" t-attf-class="btn js_check_product a-submit flex-grow-1 #{'btn-lg' if ctaSizeBig else ''} add_to" href="#"> |
t-attf-class="{{'d-none' if combination_info['prevent_zero_price_sale'] else 'd-inline-flex'}} mb-2"> |
||||
<span style="font-weight: bold">ADD TO CART</span> |
<a role="button" id="add_to_cart" |
||||
</a> |
t-attf-class="btn js_check_product a-submit flex-grow-1 #{'btn-lg' if ctaSizeBig else ''} add_to" |
||||
</div> |
href="#"> |
||||
<div id="product_option_block" class="d-flex flex-wrap w-100"/> |
<span class="bold">ADD TO CART</span> |
||||
</div> |
</a> |
||||
<div id="contact_us_wrapper" |
|
||||
t-attf-class="{{'d-flex' if combination_info['prevent_zero_price_sale'] else 'd-none'}} oe_structure oe_structure_solo #{_div_classes}"> |
|
||||
<section class="s_text_block" data-snippet="s_text_block" data-name="Text"> |
|
||||
<div class="container"> |
|
||||
<a t-att-href="website.contact_us_button_url" |
|
||||
class="btn btn-primary btn_cta">Contact Us |
|
||||
</a> |
|
||||
</div> |
|
||||
</section> |
|
||||
</div> |
</div> |
||||
|
<div id="product_option_block" |
||||
|
class="d-flex flex-wrap w-100"/> |
||||
|
</div> |
||||
|
<div id="contact_us_wrapper" |
||||
|
t-attf-class="{{'d-flex' if combination_info['prevent_zero_price_sale'] else 'd-none'}} oe_structure oe_structure_solo #{_div_classes}"> |
||||
|
<section class="s_text_block" |
||||
|
data-snippet="s_text_block" |
||||
|
data-name="Text"> |
||||
|
<div class="container"> |
||||
|
<a t-att-href="website.contact_us_button_url" |
||||
|
class="btn btn-primary btn_cta"> |
||||
|
Contact Us |
||||
|
</a> |
||||
|
</div> |
||||
|
</section> |
||||
</div> |
</div> |
||||
</form> |
|
||||
<p t-elif="not product.active" class="alert alert-warning">This product is no longer available.</p> |
|
||||
<p t-else="" class="alert alert-warning">This product has no valid combination.</p> |
|
||||
<div id="product_attributes_simple"> |
|
||||
<t t-set="single_value_attributes" t-value="product.valid_product_template_attribute_line_ids._prepare_single_value_for_display()"/> |
|
||||
<table t-attf-class="table table-sm text-muted {{'' if single_value_attributes else 'd-none'}}"> |
|
||||
<t t-foreach="single_value_attributes" t-as="attribute"> |
|
||||
<tr> |
|
||||
<td> |
|
||||
<span t-field="attribute.name"/>: |
|
||||
<t t-foreach="single_value_attributes[attribute]" t-as="ptal"> |
|
||||
<span t-field="ptal.product_template_value_ids._only_active().name"/><t t-if="not ptal_last">, </t> |
|
||||
</t> |
|
||||
</td> |
|
||||
</tr> |
|
||||
</t> |
|
||||
</table> |
|
||||
</div> |
|
||||
<div id="o_product_terms_and_share" class="d-flex justify-content-between flex-column flex-md-row align-items-md-end mb-3"> |
|
||||
</div> |
</div> |
||||
|
</form> |
||||
|
<p t-elif="not product.active" class="alert alert-warning"> |
||||
|
This product is no longer available. |
||||
|
</p> |
||||
|
<p t-else="" class="alert alert-warning">This product has |
||||
|
no valid combination. |
||||
|
</p> |
||||
|
<div id="product_attributes_simple"> |
||||
|
<t t-set="single_value_attributes" |
||||
|
t-value="product.valid_product_template_attribute_line_ids._prepare_single_value_for_display()"/> |
||||
|
<table t-attf-class="table table-sm text-muted {{'' if single_value_attributes else 'd-none'}}"> |
||||
|
<t t-foreach="single_value_attributes" |
||||
|
t-as="attribute"> |
||||
|
<tr> |
||||
|
<td> |
||||
|
<span t-field="attribute.name"/>: |
||||
|
<t t-foreach="single_value_attributes[attribute]" |
||||
|
t-as="ptal"> |
||||
|
<span t-field="ptal.product_template_value_ids._only_active().name"/> |
||||
|
<t t-if="not ptal_last">,</t> |
||||
|
</t> |
||||
|
</td> |
||||
|
</tr> |
||||
|
</t> |
||||
|
</table> |
||||
|
</div> |
||||
|
<div id="o_product_terms_and_share" |
||||
|
class="d-flex justify-content-between flex-column flex-md-row align-items-md-end mb-3"> |
||||
</div> |
</div> |
||||
</div> |
</div> |
||||
</xpath> |
</div> |
||||
</template> |
|
||||
|
|
||||
<template id="alternative_products_coffee" name="Alternative Products Coffee" inherit_id="website_sale.alternative_products" active="True"> |
|
||||
<xpath expr="//section[hasclass('s_dynamic_snippet_products')]" position="attributes"> |
|
||||
<attribute name="data-template-key">website_sale.dynamic_filter_template_product_product_borderless_2</attribute> |
|
||||
</xpath> |
</xpath> |
||||
</template> |
</template> |
||||
|
<template id="alternative_products_coffee" |
||||
</odoo> |
name="Alternative Products Coffee" |
||||
|
inherit_id="website_sale.alternative_products" active="True"> |
||||
|
<xpath expr="//section[hasclass('s_dynamic_snippet_products')]" |
||||
|
position="attributes"> |
||||
|
<attribute name="data-template-key"> |
||||
|
website_sale.dynamic_filter_template_product_product_borderless_2 |
||||
|
</attribute> |
||||
|
</xpath> |
||||
|
</template> |
||||
|
</odoo> |
||||
|