@ -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> | 
				
			||||
 | 
				
			|||||