You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

521 lines
35 KiB

<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!-- Customizing templates related to product-->
<template id="boec_tic" inherit_id="website_sale.variants">
<xpath expr="//label[contains(@t-attf-class, 'css_attribute_color')]"
position="inside">
<span>
<img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/242518/check-icn.svg"
alt="Checked Icon"/>
</span>
</xpath>
</template>
<template id="boec_radio_variant" inherit_id="website_sale.variants">
<xpath expr="//li[hasclass('js_attribute_value')]" position="replace">
<li class="list-inline-item" style="margin: 0;">
<label class="col-form-label">
<div>
<div class="btn btn-size">
<input type="radio"
t-attf-class="js_variant_change radio_input #{ptal.attribute_id.create_variant}"
t-att-checked="ptav in combination"
t-att-name="'ptal-%s' % ptal.id"
t-att-value="ptav.id"
t-att-data-value_id="ptav.id"
t-att-data-value_name="ptav.name"
t-att-data-attribute_name="ptav.attribute_id.name"
t-att-data-is_custom="ptav.is_custom"
t-att-data-is_single_and_custom="single_and_custom"/>
<span t-field="ptav.name"/>
<span class="badge badge-pill badge-secondary"
t-if="ptav.price_extra">
<!-- see note above about price_extra -->
<t t-esc="ptav.price_extra > 0 and '+' or '-'"/>
<span t-esc="abs(ptav.price_extra)"
class="variant_price_extra"
style="white-space: nowrap;"
t-options='{
"widget": "monetary",
"from_currency": product.currency_id,
"display_currency": (pricelist or product).currency_id
}'/>
</span>
</div>
</div>
</label>
</li>
</xpath>
</template>
<template id="boec_arrow" inherit_id="website_sale.shop_product_carousel">
<xpath expr="//span[hasclass('oi-chevron-left')]" position="replace">
<svg width="15%" height="15%" viewBox="0 0 11 20">
<path style="fill:none;stroke-width: 1px;stroke: #000;"
d="M9.554,1.001l-8.607,8.607l8.607,8.606"/>
</svg>
</xpath>
<xpath expr="//span[hasclass('oi-chevron-right')]" position="replace">
<svg width="15%" height="15%" viewBox="0 0 11 20" version="1.1">
<path style="fill:none;stroke-width: 1px;stroke: #000;"
d="M1.054,18.214l8.606,-8.606l-8.606,-8.607"/>
</svg>
</xpath>
</template>
<template id="boec_product_view" name="Boec Product View"
inherit_id="website_sale.product">
<xpath expr="//section[@id='product_detail']" position="replace">
<section
t-attf-class="container py-4 oe_website_sale #{'discount' if combination_info['has_discounted_price'] else ''}"
id="product_detail"
t-att-data-view-track="view_track and '1' or '0'"
t-att-data-product-tracking-info="'product_tracking_info' in combination_info and json.dumps(combination_info['product_tracking_info'])">
<section class="Shop_details">
<div class="wrapper gap3">
<div class="container">
<div class="row">
<nav aria-label="breadcrumb " class="brd">
<ol class="breadcrumb">
<li class="breadcrumb-item">
<a href="/">Home</a>
</li>
<i class="material-icons">&#xe315;</i>
<li class="breadcrumb-item">
<a href="/shop">Shop</a>
</li>
<i class="material-icons">&#xe315;</i>
<li class="breadcrumb-item active"
aria-current="page">
<span t-field="product.name"/>
</li>
</ol>
</nav>
</div>
<div class="ff">
<div class="container">
<div class="slider">
<t t-set="product_images"
t-value="product_variant._get_images() if product_variant else product._get_images()"/>
<div id="o-carousel-product"
class="carousel slide"
data-ride="carousel"
data-interval="0">
<div class="carousel-outer position-relative">
<div class="carousel-inner h-100">
<t t-foreach="product_images"
t-as="product_image">
<div t-attf-class="carousel-item h-100#{' active' if product_image_first else ''}">
<div t-if="product_image._name == 'product.image' and product_image.embed_code"
class="d-flex align-items-center justify-content-center h-100 embed-responsive embed-responsive-16by9">
<t t-raw="product_image.embed_code"/>
</div>
<div t-else=""
t-field="product_image.image_1920"
class="d-flex align-items-center justify-content-center h-100"
t-options='{"widget": "image", "preview_image": "image_1024", "class": "product_detail_img mh-100", "alt-field": "name", "zoom": product_image.can_image_1024_be_zoomed and "image_1920", "itemprop": "image"}'/>
</div>
</t>
</div>
<t t-if="len(product_images) > 1">
<a class="carousel-control-prev"
href="#o-carousel-product"
role="button"
data-slide="prev">
<svg width="15%"
height="15%"
viewBox="0 0 11 20">
<path style="fill:none;stroke-width: 1px;stroke: #000;"
d="M9.554,1.001l-8.607,8.607l8.607,8.606"/>
</svg>
</a>
<a class="carousel-control-next"
href="#o-carousel-product"
role="button"
data-slide="next">
<svg width="15%"
height="15%"
viewBox="0 0 11 20"
version="1.1">
<path style="fill:none;stroke-width: 1px;stroke: #000;"
d="M1.054,18.214l8.606,-8.606l-8.606,-8.607"/>
</svg>
</a>
</t>
</div>
<div t-ignore="True"
class="sync2 d-md-block text-center">
<ol t-if="len(product_images) > 1"
class="carousel-indicators d-inline-block position-static mx-auto my-0">
<t t-foreach="product_images"
t-as="product_image">
<li t-attf-class="d-inline-block m-1 align-top {{'active' if product_image_first else ''}}"
data-target="#o-carousel-product"
t-att-data-slide-to="str(product_image_index)">
<div class="item"
t-field="product_image.image_128"
t-options='{"widget": "image", "qweb_img_responsive": False, "class": "o_image_64_contain", "alt-field": "name"}'/>
<i t-if="product_image._name == 'product.image' and product_image.embed_code"
class="fa fa-2x fa-play-circle-o o_product_video_thumb"/>
</li>
</t>
</ol>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="preview_details">
<div class="container">
<div class="wrapper">
<h3 class="p_head">
<span t-field="product.name"/>
</h3>
<span itemprop="url" style="display:none;"
t-esc="product.website_url"/>
<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="nw">
<div class="price">
<t t-call="website_sale.product_price"/>
</div>
</div>
<p t-field="product.description_sale"
class="abt"
placeholder="A short description that will also appear on documents."/>
<div class="p_c" style="text-align: center;">
<div class="js_product js_main_product mb-3">
<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="website_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>
<p t-if="True"
class="css_not_available_msg alert alert-warning">
This
combination does
not exist.
</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'}} align-items-center mb-2 me-auto">
<div class="css_quantity input-group"
contenteditable="false">
<div class="input-group-prepend">
<a t-attf-href="#"
class="btn btn-minus js_add_cart_json"
aria-label="Remove one"
title="Remove one">
<i class="fa fa-minus"/>
</a>
</div>
<input type="text"
class="form-control input-number"
data-min="1"
name="add_qty"
t-att-value="add_qty or 1"
style="border: 0px;"/>
<div class="input-group-append">
<a t-attf-href="#"
class="btn btn-minus float_left js_add_cart_json"
aria-label="Add one"
title="Add one">
<i class="fa fa-plus"/>
</a>
</div>
</div>
<a role="button"
id="add_to_cart"
t-attf-class="btn btn-primary js_check_product a-submit flex-grow-1 #{'btn-lg' if ctaSizeBig else ''}"
href="#">
<i class="fa fa-shopping-cart me-2"/>
<span style="font-weight: bold">
Add To Cart
</span>
</a>
</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>
</div>
<div class="add_to" style="text-align: center;">
<!--Wish List-->
<t t-set="product_variant"
t-value="product_variant or product._create_first_product_variant()"/>
<t t-set="in_wish"
t-value="product_variant and product_variant._is_in_wishlist()"/>
<button t-if="product_variant" type="button"
role="button"
class="btn btn-link mt16 o_add_wishlist_dyn"
t-att-disabled='in_wish or None'
t-att-data-product-template-id="product.id"
t-att-data-product-product-id="product_variant.id"
data-action="o_wishlist">
<span class="fa fa-heart" role="img"
aria-label="Add to wishlist"/>
Add to Wishlist
</button>
<!--Comparison-->
<t t-set="product_variant"
t-value="product_variant or product._create_first_product_variant()"/>
<button t-if="product_variant" type="button"
role="button"
class="d-none d-md-inline-block btn btn-link mt16 o_add_compare_dyn"
aria-label="Compare"
t-att-data-product-product-id="product_variant.id"
data-action="o_comparelist">
<span class="fas fa-exchange-alt"/>
Add to Compare
</button>
</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>
</div>
</section>
<div class="container" style="text-align: center;">
<div>
<div id="product_attributes_simple">
<hr t-if="sum([(1 if len(l.value_ids)==1 else 0) for l in product.attribute_line_ids])"/>
<p class="text-muted">
<t t-set="single_value_attributes"
t-value="product.valid_product_template_attribute_line_ids._prepare_single_value_for_display()"/>
<t t-foreach="single_value_attributes"
t-as="attribute">
<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>
<br/>
</t>
</p>
</div>
</div>
<div class="types">
<ul>
<t t-if="product.public_categ_ids">
<li>Categories:
<span t-esc="product.public_categ_ids.name"/>
</li>
</t>
</ul>
</div>
<div class="description">
<nav>
<div class="nav nav-tabs" id="nav-tab"
role="tablist">
<button class="nav-link active"
id="nav-home-tab" data-bs-toggle="tab"
data-bs-target="#nav-home"
type="button" role="tab"
aria-controls="nav-home"
aria-selected="true">
Description
</button>
<button class="nav-link" id="nav-profile-tab"
data-bs-toggle="tab"
data-bs-target="#nav-profile"
type="button" role="tab"
aria-controls="nav-profile"
aria-selected="false">Customer Reviews
</button>
<button class="nav-link" id="nav-contact-tab"
data-bs-toggle="tab"
data-bs-target="#nav-contact"
type="button" role="tab"
aria-controls="nav-contact"
aria-selected="false">Additional
information
</button>
</div>
</nav>
<div class="tab-content" id="nav-tabContent">
<div class="tab-pane fade show active" id="nav-home"
role="tabpanel"
aria-labelledby="nav-home-tab">
<div class="bt">
<section id="product_full_spec">
<t t-set="categories"
t-value="product.valid_product_template_attribute_line_ids._prepare_categories_for_display()"/>
<t t-if="categories">
<h3 class="text-center mb32">
Specifications for
<t t-esc="product.name"/>
</h3>
<div class="row">
<div class='col-lg-8 offset-lg-2'
id='product_specifications'>
<table class='table table-striped table-sm table-hover'>
<t t-foreach="categories"
t-as="category">
<t t-if="len(categories) > 1">
<tr class="clickable"
data-toggle="collapse"
t-att-data-target="'.o_ws_category_%d' % category.id">
<th class="text-left"
t-att-colspan="2">
<span t-if="category"
t-field="category.name"/>
<span t-else="">
Uncategorized
</span>
</th>
</tr>
</t>
<tr t-foreach="categories[category].filtered(lambda l: len(l.value_ids) > 1)"
t-as="ptal"
t-att-class="'collapse show o_ws_category_%d' % category.id">
<td>
<span t-field="ptal.attribute_id.name"/>
</td>
<td>
<t t-foreach="ptal.value_ids"
t-as="pav">
<span t-field="pav.name"/>
<t t-if="not pav_last">
or
</t>
</t>
</td>
</tr>
<t t-set="single_value_attributes"
t-value="categories[category]._prepare_single_value_for_display()"/>
<tr t-foreach="single_value_attributes"
t-as="attribute"
t-att-class="'collapse show o_ws_category_%d' % category.id">
<td>
<span t-field="attribute.name"/>
</td>
<td>
<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>
</t>
</section>
</div>
</div>
<div class="tab-pane fade" id="nav-profile"
role="tabpanel"
aria-labelledby="nav-profile-tab">
<div class="top">
<div class="o_shop_discussion_rating">
<section class="container mt16 mb16">
<div class="row">
<div class="col-lg-8 offset-lg-2">
<t t-call="portal.message_thread">
<t t-set="object"
t-value="product"/>
<t t-set="display_rating"
t-value="True"/>
</t>
</div>
</div>
</section>
</div>
</div>
</div>
<div class="tab-pane fade" id="nav-contact"
role="tabpanel"
aria-labelledby="nav-contact-tab">
<p class="top">
Terms and Conditions
</p>
<div class="bt">
30-day money-back guarantee
<br/>
Shipping: 2-3 Business Days
<br/>
<a class="text-muted" href="/shop/terms">
Read more...
</a>
</div>
</div>
</div>
</div>
</div>
<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_layout="website.product_page_image_layout">
<t t-set="image_cols"
t-value="website._get_product_page_proportions()"/>
<div t-attf-class="col-lg-#{image_cols[1]} mt-md-4"
id="product_details">
<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>
</section>
</xpath>
</template>
</odoo>