[MERGE] Sync with main branch
bzr revid: tde@openerp.com-20130923082728-uo43x67ej7vgxeea
|
After Width: | Height: | Size: 7.0 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 540 KiB |
|
After Width: | Height: | Size: 99 KiB |
|
After Width: | Height: | Size: 67 KiB |
@@ -6,7 +6,7 @@
|
||||
<field eval="[(4, ref('base.group_sale_salesman'))]" name="groups_id"/>
|
||||
</record>
|
||||
|
||||
<!--
|
||||
<!--
|
||||
Resource: product.category
|
||||
-->
|
||||
|
||||
@@ -227,7 +227,7 @@ HDD SH-1</field>
|
||||
</record>
|
||||
|
||||
<record id="product_product_4" model="product.product">
|
||||
<field name="name">PC Assemble SC349</field>
|
||||
<field name="name">iPad Retina Display</field>
|
||||
<field name="default_code">PCSC349</field>
|
||||
<field name="categ_id" ref="product_category_4"/>
|
||||
<field name="public_categ_id" ref="Computer_all_in_one"/>
|
||||
@@ -236,14 +236,13 @@ HDD SH-1</field>
|
||||
<field name="type">consu</field>
|
||||
<field name="uom_id" ref="product_uom_unit"/>
|
||||
<field name="uom_po_id" ref="product_uom_unit"/>
|
||||
<field name="description_sale">19" LCD Monitor
|
||||
Processor Core i5 2.70 Ghz
|
||||
2GB RAM
|
||||
HDD SH-1</field>
|
||||
<field name="description_sale">7.9‑inch (diagonal) LED-backlit, 128Gb
|
||||
Dual-core A5 with quad-core graphics
|
||||
FaceTime HD Camera, 1.2 MP Photos</field>
|
||||
</record>
|
||||
|
||||
<record id="product_product_5" model="product.product">
|
||||
<field name="name">PC Assemble + Custom (PC on Demand)</field>
|
||||
<field name="name">Bose Mini Bluetooth Speaker</field>
|
||||
<field name="default_code">PC-DEM</field>
|
||||
<field name="categ_id" ref="product_category_4"/>
|
||||
<field name="public_categ_id" ref="services"/>
|
||||
@@ -253,9 +252,11 @@ HDD SH-1</field>
|
||||
<field name="uom_id" ref="product_uom_unit"/>
|
||||
<field name="uom_po_id" ref="product_uom_unit"/>
|
||||
<field name="description">Custom computer assembled on order based on customer's requirement.</field>
|
||||
<field name="description_sale">Bose's smallest portable Bluetooth speaker</field>
|
||||
</record>
|
||||
|
||||
<record id="product_product_6" model="product.product">
|
||||
<field name="name">iPad Mini</field>
|
||||
<field name="name">15” LCD Monitor</field>
|
||||
<field name="default_code">LCD15</field>
|
||||
<field name="categ_id" ref="product_category_8"/>
|
||||
@@ -278,7 +279,7 @@ HDD SH-1</field>
|
||||
<field name="uom_po_id" ref="product_uom_unit"/>
|
||||
</record>
|
||||
<record id="product_product_8" model="product.product">
|
||||
<field name="name">USB Keyboard, QWERTY</field>
|
||||
<field name="name">iPod Accessory</field>
|
||||
<field name="default_code">KeyQ</field>
|
||||
<field name="categ_id" ref="product_category_8"/>
|
||||
<field name="public_categ_id" ref="Keyboard_Mouse"/>
|
||||
@@ -311,7 +312,7 @@ HDD SH-1</field>
|
||||
<field name="uom_po_id" ref="product_uom_unit"/>
|
||||
</record>
|
||||
<record id="product_product_11" model="product.product">
|
||||
<field name="name">Mouse, Laser</field>
|
||||
<field name="name">iPod</field>
|
||||
<field name="default_code">M-Las</field>
|
||||
<field name="categ_id" ref="product_category_8"/>
|
||||
<field name="public_categ_id" ref="Keyboard_Mouse"/>
|
||||
|
||||
|
After Width: | Height: | Size: 9.3 KiB |
@@ -7,7 +7,7 @@
|
||||
<div class="oe_span6">
|
||||
<div class="oe_demo oe_picture oe_screenshot">
|
||||
<a href="https://www.openerp.com/saas_master/demo?lang=en_US&module=website">
|
||||
<img src="">
|
||||
<img src="website_home.png">
|
||||
</a>
|
||||
<div class="oe_demo_footer oe_centeralign">Online Demo</div>
|
||||
</div>
|
||||
@@ -45,7 +45,7 @@
|
||||
</div>
|
||||
<div class="oe_span6">
|
||||
<div class="oe_bg_img oe_centered">
|
||||
<img class="oe_picture" src="">
|
||||
<img class="oe_picture oe_screenshot" src="website_edit.png">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -56,7 +56,7 @@
|
||||
<h2 class="oe_slogan">Awsome. Astonishingly Beautiful.</h2>
|
||||
<h3 class="oe_slogan">Professional themes and building blocks</h3>
|
||||
<div class="oe_span6">
|
||||
<img class="oe_picture oe_screenshot" src="">
|
||||
<img class="oe_picture oe_screenshot" src="website_theme.png">
|
||||
</div>
|
||||
<div class="oe_span6">
|
||||
<p class='oe_mt32'>
|
||||
@@ -86,16 +86,16 @@
|
||||
references, "our team" page, blogs, newsletters, etc.
|
||||
</p><p>
|
||||
Traditional eCommerce and CMS have poor backends as it's not their
|
||||
core focus. The OpenERP integration allows you to benefit from the
|
||||
core focus. With the OpenERP integration, you benefit from the
|
||||
best management software to follow-up on your orders, your jobs
|
||||
applicants, your leads, etc.
|
||||
</p><p>
|
||||
You don't need anymore to synchronize your management software and
|
||||
your ecommerce.
|
||||
You don't have to synchronize your management software and
|
||||
your ecommerce. It works out-of-the-box.
|
||||
</p>
|
||||
</div>
|
||||
<div class="oe_span6">
|
||||
<img class="oe_picture oe_screenshot" src="">
|
||||
<img class="oe_picture oe_screenshot" src="website_events.png">
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -106,7 +106,7 @@
|
||||
<h3 class="oe_slogan">Responsive content on all pages</h3>
|
||||
<div class="oe_span6">
|
||||
<div class="oe_bg_img">
|
||||
<img class="oe_picture oe_screenshot" src="">
|
||||
<img class="oe_picture oe_screenshot" src="website_mobile.png">
|
||||
</div>
|
||||
</div>
|
||||
<div class="oe_span6">
|
||||
@@ -139,7 +139,7 @@
|
||||
</div>
|
||||
<div class="oe_span6">
|
||||
<div class="oe_bg_img">
|
||||
<img class="oe_picture oe_screenshot" src="">
|
||||
<img class="oe_picture oe_screenshot" src="website_seo.png">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -182,18 +182,41 @@
|
||||
CSS and our modularity allows to distribute your themes easily.
|
||||
</p><p>
|
||||
The building block approach allows the website to remain clean
|
||||
after the end-users start creating new contents.
|
||||
after the end-users start creating new contents. The template
|
||||
editor allows advanced customization without development.
|
||||
</p>
|
||||
</div>
|
||||
<div class="oe_span6">
|
||||
<div class="oe_row_img oe_centered">
|
||||
<img class="oe_picture" src="">
|
||||
<img class="oe_picture oe_screenshot" src="website_editor.png">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="oe_container">
|
||||
<div class="oe_row">
|
||||
<h2 class="oe_slogan">Fuild Grid Layouting</h2>
|
||||
<h3 class="oe_slogan">Organize building blocks easily</h3>
|
||||
<div class="oe_span6">
|
||||
<div class="oe_row_img oe_centered">
|
||||
<img class="oe_picture oe_screenshot" src="website_grid.png">
|
||||
</div>
|
||||
</div>
|
||||
<div class="oe_span6">
|
||||
<p class='oe_mt32'>
|
||||
Design perfect pages by drag and droping building blocks and scale
|
||||
them to fit the layout you are looking for.
|
||||
</p><p>
|
||||
Building blocks are based on a responsive, mobile friendly fluid
|
||||
grid system that appropriately scales up to 12 columns as the
|
||||
device or viewport size increases.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="oe_container oe_dark">
|
||||
<div class="oe_row">
|
||||
<h2 class="oe_slogan">Fully Integrated With Others Apps</h2>
|
||||
<h3 class="oe_slogan">Get hundreds of open source apps for free</h3>
|
||||
|
||||
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 217 KiB |
|
After Width: | Height: | Size: 93 KiB |
|
After Width: | Height: | Size: 95 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 59 KiB |
@@ -283,32 +283,19 @@ table.editorbar-panel td.selected {
|
||||
|
||||
/* ---- SNIPPET MANIPULATOR ---- */
|
||||
.oe_overlay {
|
||||
display: block;
|
||||
display: none;
|
||||
position: absolute;
|
||||
background: transparent;
|
||||
border-radius: 3px;
|
||||
opacity: 0;
|
||||
transition: opacity 100ms linear;
|
||||
box-sizing: border-box;
|
||||
pointer-events: none;
|
||||
}
|
||||
.oe_overlay.oe_hover {
|
||||
opacity: 1;
|
||||
cursor: pointer;
|
||||
}
|
||||
.oe_overlay.oe_selected, .oe_overlay.oe_active {
|
||||
opacity: 1;
|
||||
.oe_overlay.oe_active {
|
||||
display: block;
|
||||
border-style: dashed;
|
||||
border-width: 1px;
|
||||
box-shadow: 0px 0px 0px 1px rgba(255, 255, 255, 0.3), 0px 0px 0px 1px rgba(255, 255, 255, 0.3) inset;
|
||||
}
|
||||
.oe_overlay.oe_selected {
|
||||
border-color: rgba(0, 153, 255, 0.5);
|
||||
}
|
||||
.oe_overlay .oe_handle {
|
||||
display: none !important;
|
||||
}
|
||||
.oe_overlay.oe_active {
|
||||
border-color: rgba(153, 0, 255, 0.5);
|
||||
}
|
||||
.oe_overlay.oe_active .oe_handle {
|
||||
@@ -356,39 +343,22 @@ table.editorbar-panel td.selected {
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
top: -11px;
|
||||
display: none;
|
||||
z-index: 1002;
|
||||
}
|
||||
.oe_overlay .oe_overlay_options > * {
|
||||
margin: 0 -2px 0 -3px;
|
||||
display: inline-block;
|
||||
}
|
||||
.oe_overlay .oe_overlay_options * {
|
||||
border-radius: 0;
|
||||
}
|
||||
.oe_overlay .oe_overlay_options .btn, .oe_overlay .oe_overlay_options a {
|
||||
pointer-events: auto;
|
||||
cursor: pointer;
|
||||
}
|
||||
.oe_overlay .oe_overlay_options .dropdown {
|
||||
display: inline-block;
|
||||
}
|
||||
.oe_overlay .oe_overlay_options .dropdown-menu {
|
||||
text-align: left;
|
||||
min-width: 180px;
|
||||
}
|
||||
.oe_overlay .oe_overlay_options .oe_label {
|
||||
position: absolute;
|
||||
top: 3px;
|
||||
right: 6px;
|
||||
background: white;
|
||||
font-size: 75%;
|
||||
color: rgba(153, 0, 255, 0.5);
|
||||
padding: 0 5px;
|
||||
}
|
||||
.oe_overlay .oe_overlay_options .dropdown-menu select, .oe_overlay .oe_overlay_options .dropdown-menu input {
|
||||
display: block;
|
||||
}
|
||||
.oe_overlay.oe_active .oe_overlay_options {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.oe_handle {
|
||||
pointer-events: auto;
|
||||
@@ -550,10 +520,16 @@ table.editorbar-panel td.selected {
|
||||
.oe_ace_view_editor .oe_ace_view_editor_title .oe_view_list {
|
||||
width: 50%;
|
||||
height: 32px;
|
||||
font-size: 14px;
|
||||
font-family: "Monaco", "Menlo", "Ubuntu Mono", "Consolas", "source-code-pro", monospace;
|
||||
line-height: normal;
|
||||
}
|
||||
.oe_ace_view_editor .oe_ace_view_editor_title .btn {
|
||||
height: 32px;
|
||||
padding: 0 4px 0 4px;
|
||||
font-size: 14px;
|
||||
font-family: "Monaco", "Menlo", "Ubuntu Mono", "Consolas", "source-code-pro", monospace;
|
||||
line-height: normal;
|
||||
}
|
||||
.oe_ace_view_editor .ace_editor {
|
||||
position: absolute;
|
||||
|
||||
@@ -249,27 +249,18 @@ table.editorbar-panel
|
||||
/* ---- SNIPPET MANIPULATOR ---- */
|
||||
|
||||
.oe_overlay
|
||||
display: block
|
||||
display: none
|
||||
position: absolute
|
||||
background: transparent
|
||||
border-radius: 3px
|
||||
opacity: 0
|
||||
transition: opacity 100ms linear
|
||||
box-sizing: border-box
|
||||
pointer-events: none
|
||||
&.oe_hover
|
||||
opacity: 1
|
||||
cursor: pointer
|
||||
&.oe_selected, &.oe_active
|
||||
opacity: 1
|
||||
&.oe_active
|
||||
display: block
|
||||
border-style: dashed
|
||||
border-width: 1px
|
||||
box-shadow: 0px 0px 0px 1px rgba(255,255,255,0.3), 0px 0px 0px 1px rgba(255,255,255,0.3) inset
|
||||
&.oe_selected
|
||||
border-color: rgba(0, 153, 255, 0.5)
|
||||
.oe_handle
|
||||
display: none !important
|
||||
&.oe_active
|
||||
border-color: rgba(153, 0, 255, 0.5)
|
||||
.oe_handle
|
||||
display: block !important
|
||||
@@ -310,31 +301,17 @@ table.editorbar-panel
|
||||
width: 100%
|
||||
text-align: center
|
||||
top: -11px
|
||||
display: none
|
||||
z-index: 1002
|
||||
> *
|
||||
margin: 0 -2px 0 -3px
|
||||
display: inline-block
|
||||
*
|
||||
border-radius: 0
|
||||
.btn, a
|
||||
pointer-events: auto
|
||||
cursor: pointer
|
||||
.dropdown
|
||||
display: inline-block
|
||||
.dropdown-menu
|
||||
text-align: left
|
||||
min-width: 180px
|
||||
.oe_label
|
||||
position: absolute
|
||||
top: 3px
|
||||
right: 6px
|
||||
background: #fff
|
||||
font-size: 75%
|
||||
color: rgba(153, 0, 255, 0.5)
|
||||
padding: 0 5px
|
||||
.dropdown-menu select,.dropdown-menu input
|
||||
display: block
|
||||
&.oe_active .oe_overlay_options
|
||||
display: block
|
||||
|
||||
.oe_handle
|
||||
pointer-events: auto
|
||||
@@ -460,6 +437,10 @@ $editorbar_height: 40px
|
||||
// TODO Fix => might break with themes
|
||||
$navbar_height: 51px
|
||||
|
||||
@mixin editor-font
|
||||
font-size: 14px
|
||||
font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace
|
||||
line-height: normal
|
||||
.oe_ace_view_editor
|
||||
transition: all 0.2s ease-in
|
||||
-webkit-transition: all 0.2s ease-in
|
||||
@@ -481,9 +462,11 @@ $navbar_height: 51px
|
||||
.oe_view_list
|
||||
width: 50%
|
||||
height: $editorbar_height - 8px
|
||||
@include editor-font
|
||||
.btn
|
||||
height: $editorbar_height - 8px
|
||||
padding: 0 4px 0 4px
|
||||
@include editor-font
|
||||
.ace_editor
|
||||
position: absolute
|
||||
top: $editorbar_height
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
'hidden.bs.modal': 'destroy'
|
||||
},
|
||||
start: function () {
|
||||
document.getElementById("mobile-viewport").src = window.location.href + "?mobile-preview=true";
|
||||
document.getElementById("mobile-viewport").src = window.location.origin + window.location.pathname + "#mobile-preview";
|
||||
this.$el.modal();
|
||||
},
|
||||
});
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
website.seo = {};
|
||||
|
||||
function analyzeKeyword(htmlPage, keyword) {
|
||||
return htmlPage.isInTitle(keyword) ? {
|
||||
return htmlPage.isInTitle(keyword) ? {
|
||||
title: 'keyword-in-title',
|
||||
description: "This keyword is used in the page title",
|
||||
} : htmlPage.isInDescription(keyword) ? {
|
||||
@@ -350,8 +350,6 @@
|
||||
});
|
||||
self.keywordList.appendTo($modal.find('.js_seo_keywords_list'));
|
||||
$modal.modal();
|
||||
// Avoid the 'Edit' button in the background boucing needlessly
|
||||
$modal.on('click', function (e) { e.stopPropagation(); });
|
||||
},
|
||||
suggestImprovements: function () {
|
||||
var tips = [];
|
||||
@@ -410,7 +408,7 @@
|
||||
setTimeout(function () {
|
||||
var title = self.$('input[name=seo_page_title]').val();
|
||||
self.htmlPage.changeTitle(title);
|
||||
}, 1);
|
||||
}, 0);
|
||||
},
|
||||
descriptionChanged: function () {
|
||||
var self = this;
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
website.EditorBar.include({
|
||||
start: function () {
|
||||
var self = this;
|
||||
$("body").on('click', function (event) {
|
||||
$("[data-oe-model]").on('click', function (event) {
|
||||
var tag = event.srcElement.tagName.toLowerCase();
|
||||
var $this = $(event.srcElement);
|
||||
if (!(tag === 'a' || tag === "button") && !$this.parents("a, button").length) {
|
||||
@@ -86,19 +86,19 @@
|
||||
},
|
||||
dom_filter: function (dom) {
|
||||
if (typeof dom === "string") {
|
||||
var exclude = ":not(#oe_manipulators):not(#website-top-navbar):not(.oe_snippet)";
|
||||
var include = "[data-oe-model]";
|
||||
var sdom = dom.split(',');
|
||||
dom = "";
|
||||
_.each(sdom, function (val) {
|
||||
val = val.replace(/^\s+|\s+$/g, '');
|
||||
dom += "body > " + exclude + " " + val + ", ";
|
||||
dom += "body " + include + " " + val + ", ";
|
||||
val = val.split(" ");
|
||||
dom += "body > "+ val.shift() + exclude + val.join(" ") + ", ";
|
||||
dom += "body "+ val.shift() + include + val.join(" ") + ", ";
|
||||
});
|
||||
dom = dom.replace(/,\s*$/g, '');
|
||||
return $(dom);
|
||||
} else {
|
||||
return $(dom).parents("#oe_manipulators, #website-top-navbar").length || $(dom).hasClass("oe_snippet") ? $("") : $(dom);
|
||||
return $(dom).is("[data-oe-model]") || $(dom).parents("[data-oe-model]").length ? $(dom) : $("");
|
||||
}
|
||||
},
|
||||
start: function() {
|
||||
@@ -208,7 +208,7 @@
|
||||
}
|
||||
self.make_active($target);
|
||||
});
|
||||
$("body > :not(:has(#website-top-view)):not(#oe_manipulators)").on('click', function (ev) {
|
||||
$("[data-oe-model]").on('click', function (ev) {
|
||||
if (!snipped_event_flag && self.$active_snipped_id && !self.$active_snipped_id.parents("[data-snippet-id]:first")) {
|
||||
self.make_active(false);
|
||||
}
|
||||
@@ -276,14 +276,14 @@
|
||||
if($target.length && !self.editor_busy) {
|
||||
if($selected_target != $target){
|
||||
if($selected_target && $selected_target.data('overlay')){
|
||||
$selected_target.data('overlay').removeClass('oe_selected');
|
||||
$selected_target.data('overlay').removeClass('oe_hover');
|
||||
}
|
||||
$selected_target = $target;
|
||||
self.create_overlay($target);
|
||||
$target.data('overlay').addClass('oe_selected');
|
||||
$target.data('overlay').addClass('oe_hover');
|
||||
}
|
||||
} else if($selected_target && $selected_target.data('overlay')) {
|
||||
$selected_target.data('overlay').removeClass('oe_selected');
|
||||
$selected_target.data('overlay').removeClass('oe_hover');
|
||||
}
|
||||
});
|
||||
},
|
||||
@@ -861,7 +861,6 @@
|
||||
|
||||
var cursor = $handle.css("cursor")+'-important';
|
||||
$("body").addClass(cursor);
|
||||
self.$overlay.addClass('oe_hover');
|
||||
|
||||
var body_mousemove = function (event){
|
||||
event.preventDefault();
|
||||
@@ -940,10 +939,16 @@
|
||||
var beginCol = Number(beginClass.match(/col-md-([0-9]+)|$/)[1] || 0);
|
||||
var beginOffset = Number(beginClass.match(/col-md-offset-([0-9-]+)|$/)[1] || beginClass.match(/col-lg-offset-([0-9-]+)|$/)[1] || 0);
|
||||
var offset = Number(this.grid.w[0][current].match(/col-md-offset-([0-9-]+)|$/)[1] || 0);
|
||||
|
||||
if (offset < 0) {
|
||||
offset = 0;
|
||||
}
|
||||
var colSize = beginCol - (offset - beginOffset);
|
||||
if (colSize <= 0) {
|
||||
colSize = 1;
|
||||
offset = beginOffset + beginCol - 1;
|
||||
}
|
||||
this.$target.attr("class",this.$target.attr("class").replace(/\s*(col-lg-offset-|col-md-offset-|col-md-)([0-9-]+)/g, ''));
|
||||
|
||||
var colSize = beginCol - (offset - beginOffset);
|
||||
this.$target.addClass('col-md-' + (colSize > 12 ? 12 : colSize));
|
||||
if (offset > 0) {
|
||||
this.$target.addClass('col-md-offset-' + offset);
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button title="Close" type="button" class="close" data-dismiss="modal">×</button>
|
||||
<h2 class="modal-title">Promote <small class="js_seo_page_url"></small></h2>
|
||||
<h4>Get your page efficiently referenced in Google to attract more visitors.</h4>
|
||||
<h3 class="modal-title js_seo_page_url"></h3>
|
||||
<h4 class="text-muted">Get this page efficiently referenced in Google to attract more visitors.</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="js_seo_tips" />
|
||||
|
||||
@@ -73,14 +73,16 @@
|
||||
<t t-name="website.snippet_overlay">
|
||||
<div class="oe_overlay">
|
||||
<div class="oe_overlay_options">
|
||||
<a href="#" class="btn btn-default btn-sm oe_snippet_parent" title="Get Container Block"><span class="glyphicon glyphicon-open"/></a>
|
||||
<div class="dropdown oe_options hidden">
|
||||
<a href="#" data-toggle="dropdown" class="btn btn-default btn-sm" title="Customize">Customize <span class="caret"/></a>
|
||||
<ul class="dropdown-menu" role="menu"></ul>
|
||||
<div class="btn-group">
|
||||
<a href="#" class="btn btn-default btn-sm oe_snippet_parent" title="Get Container Block"><span class="glyphicon glyphicon-open"/></a>
|
||||
<div class="dropdown oe_options hidden btn-group">
|
||||
<a href="#" data-toggle="dropdown" class="btn btn-default btn-sm" title="Customize">Customize <span class="caret"/></a>
|
||||
<ul class="dropdown-menu" role="menu"></ul>
|
||||
</div>
|
||||
<a href="#" class="btn btn-default btn-sm oe_snippet_clone" title="Duplicate"><span class="glyphicon glyphicon-tags"/></a>
|
||||
<a href="#" class="btn btn-default btn-sm oe_snippet_move" title="move"><span class="glyphicon glyphicon-move"/></a>
|
||||
<a href="#" class="btn btn-default btn-sm oe_snippet_remove" title="Remove"><span class="glyphicon glyphicon-remove"/></a>
|
||||
</div>
|
||||
<a href="#" class="btn btn-default btn-sm oe_snippet_clone" title="Duplicate"><span class="glyphicon glyphicon-tags"/></a>
|
||||
<a href="#" class="btn btn-default btn-sm oe_snippet_move" title="move"><span class="glyphicon glyphicon-move"/></a>
|
||||
<a href="#" class="btn btn-default btn-sm oe_snippet_remove" title="Remove"><span class="glyphicon glyphicon-remove"/></a>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
@@ -179,7 +181,7 @@
|
||||
<a href="/page/website.contactus" class="btn btn-success btn-large">Contact us</a>
|
||||
</p>
|
||||
</div>
|
||||
<div class="carousel-image">
|
||||
<div class="carousel-image hidden-xs">
|
||||
<img src="/website/static/src/img/banner/banner_picture.png" alt="Banner OpenERP Image"/>
|
||||
</div>
|
||||
</div>
|
||||
@@ -244,8 +246,8 @@
|
||||
<section class="oe_snippet_body">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<h3 class="mt48">Enterprise Social Network</h3>
|
||||
<div class="col-md-6 mt32">
|
||||
<h3>Enterprise Social Network</h3>
|
||||
<p>
|
||||
Make every employee feel more connected and engaged
|
||||
with twitter-like features for your own company. Follow
|
||||
@@ -258,8 +260,8 @@
|
||||
and business applications.
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<img class="img-responsive shadow mt32 mb32" src="/website/static/src/img/text_image.png"/>
|
||||
<div class="col-md-6 mt16 mb16">
|
||||
<img class="img-responsive shadow" src="/website/static/src/img/text_image.png"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -274,11 +276,11 @@
|
||||
<section class="oe_snippet_body">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<img class="img-responsive shadow mt32 mb32" src="/website/static/src/img/image_text.jpg"/>
|
||||
<div class="col-md-6 mt16 mb16">
|
||||
<img class="img-responsive shadow" src="/website/static/src/img/image_text.jpg"/>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<h3 class="mt48">Manage Your Shops</h3>
|
||||
<div class="col-md-6 mt32">
|
||||
<h3>Manage Your Shops</h3>
|
||||
<p>
|
||||
OpenERP's Point of Sale introduces a super clean
|
||||
interface with no installation required that runs
|
||||
@@ -344,10 +346,10 @@
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-12 text-center mt16 mb32">
|
||||
<h1>
|
||||
OpenERP Project Management<br/>
|
||||
<small>Infinitely flexible. Incredibly easy to use.</small>
|
||||
</h1>
|
||||
<h2>
|
||||
OpenERP Project Management
|
||||
</h2>
|
||||
<h3 class="text-muted">Infinitely flexible. Incredibly easy to use.</h3>
|
||||
</div>
|
||||
<div class="col-md-12 mb16 mt16">
|
||||
<p>
|
||||
@@ -357,7 +359,7 @@
|
||||
minute details, from the customer contract to the
|
||||
billing.
|
||||
</p><p>
|
||||
Organize projects around your own processes. Work
|
||||
Organize projects around <b>your own processes</b>. Work
|
||||
on tasks and issues using the kanban view, schedule
|
||||
tasks using the gantt chart and control deadlines
|
||||
in the calendar view. Every project may have it's
|
||||
@@ -369,6 +371,16 @@
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div t-name="website.snippets.title" data-snippet-id='title' data-category='structure' data-selector-children='.oe_structure, [data-oe-type=html]'>
|
||||
<div class="oe_snippet_thumbnail">Title</div>
|
||||
<div class="oe_snippet_body row">
|
||||
<div class="col-md-12">
|
||||
<h2>Your Website Title</h2>
|
||||
<h3 class="text-muted">Great products for great people</h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div t-name="website.snippets.hr" data-snippet-id='hr' data-category='structure' data-selector-children='.oe_structure, [data-oe-type=html]'>
|
||||
<div class="oe_snippet_thumbnail">
|
||||
<hr style="position: absolute;top: 61px;margin: 0;width: 100%;border-color: #888;"/>
|
||||
@@ -395,7 +407,7 @@
|
||||
<section class="oe_snippet_body dark mt16 mb16">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-12 text-center mt32 mb16">
|
||||
<div class="col-md-12 text-center mt32 mb32">
|
||||
<h2>Work with the hardware you already have...</h2>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
@@ -730,7 +742,6 @@
|
||||
</section>
|
||||
</div>
|
||||
|
||||
|
||||
<div t-name="website.snippets.references" data-snippet-id='references' data-category='business' data-selector-children='.oe_structure, [data-oe-type=html]'>
|
||||
<div class='oe_snippet_thumbnail'>References</div>
|
||||
<section class="oe_snippet_body mb32 mt16">
|
||||
@@ -744,8 +755,8 @@
|
||||
More than 500 happy customers.
|
||||
</h3>
|
||||
</div>
|
||||
<div class="col-md-4 col-md-offset-1">
|
||||
<blockquote class="mt16 mb32" data-snippet-id="quote">
|
||||
<div class="col-md-4 col-md-offset-1 mt16 mb32">
|
||||
<blockquote data-snippet-id="quote">
|
||||
<p>
|
||||
OpenERP provides essential platform for our project management.
|
||||
Things are better organized and more visible with it.
|
||||
@@ -753,8 +764,8 @@
|
||||
<small>John Doe, CEO</small>
|
||||
</blockquote>
|
||||
</div>
|
||||
<div class="col-md-4 col-md-offset-2">
|
||||
<blockquote class="mt16 mb32" data-snippet-id="quote">
|
||||
<div class="col-md-4 col-md-offset-2 mt16 mb32">
|
||||
<blockquote data-snippet-id="quote">
|
||||
<p>
|
||||
OpenERP provides essential platform for our project management.
|
||||
Things are better organized and more visible with it.
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<div id="wrap" t-if="editable">
|
||||
<div class="container">
|
||||
|
||||
<div class="alert alert-info" t-if="theme_changed">
|
||||
<div class="alert alert-info mt32" t-if="theme_changed">
|
||||
<button type="button" class="close" data-dismiss="alert">&times;</button>
|
||||
<p>
|
||||
<h4>Theme Changed!</h4>
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand" href="/page/website.homepage"><em>Open</em><b>ERP</b></a>
|
||||
<a class="navbar-brand" href="/page/website.homepage"><em>Your</em><b>Company</b></a>
|
||||
</div>
|
||||
<div class="collapse navbar-collapse navbar-top-collapse">
|
||||
<ul class="nav navbar-nav navbar-right" id="top_menu">
|
||||
|
||||
@@ -15,6 +15,8 @@ OpenERP E-Commerce
|
||||
'views/website_sale.xml',
|
||||
'security/ir.model.access.csv',
|
||||
'security/website_sale.xml',
|
||||
],
|
||||
'demo': [
|
||||
'website_sale_demo.xml',
|
||||
],
|
||||
'qweb': ['static/src/xml/*.xml'],
|
||||
|
||||
@@ -63,8 +63,7 @@ class Ecommerce(http.Controller):
|
||||
product_obj = request.registry.get('product.template')
|
||||
|
||||
domain = [("sale_ok", "=", True)]
|
||||
if SUPERUSER_ID != request.uid:
|
||||
domain += [('website_published', '=', True)]
|
||||
domain += [('website_published', '=', True)]
|
||||
|
||||
if post.get("search"):
|
||||
domain += ['|', '|', '|',
|
||||
@@ -109,9 +108,14 @@ class Ecommerce(http.Controller):
|
||||
|
||||
request.context['pricelist'] = self.get_pricelist()
|
||||
|
||||
category = None
|
||||
if post.get('category_id') and int(post.get('category_id')):
|
||||
category = category_obj.browse(request.cr, request.uid, int(post.get('category_id')), context=request.context)
|
||||
|
||||
product = product_obj.browse(request.cr, request.uid, product_id, context=request.context)
|
||||
values = {
|
||||
'category_id': post.get('category_id') and int(post.get('category_id')) or None,
|
||||
'category': category,
|
||||
'search': post.get("search"),
|
||||
'categories': self.get_categories(),
|
||||
'category_list': category_list,
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<div class="oe_span6">
|
||||
<div class="oe_demo oe_picture oe_screenshot">
|
||||
<a href="https://www.openerp.com/saas_master/demo?lang=en_US&module=website_sale">
|
||||
<img src="">
|
||||
<img src="website_sale_home.png">
|
||||
</a>
|
||||
<div class="oe_demo_footer oe_centeralign">Online Demo</div>
|
||||
</div>
|
||||
@@ -43,7 +43,7 @@
|
||||
</div>
|
||||
<div class="oe_span6">
|
||||
<div class="oe_bg_img oe_centered">
|
||||
<img class="oe_picture" src="">
|
||||
<img class="oe_picture" src="website_sale_product.png">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
After Width: | Height: | Size: 139 KiB |
|
After Width: | Height: | Size: 102 KiB |
@@ -0,0 +1,2 @@
|
||||
sass:
|
||||
sass -t expanded --unix-newlines --watch website_sale.sass:website_sale.css&
|
||||
@@ -1,34 +1,88 @@
|
||||
.css_product {
|
||||
width: 170px;
|
||||
margin-left: 16px;
|
||||
}
|
||||
.css_product .css_content {
|
||||
height: 174px;
|
||||
margin-bottom: 6px;
|
||||
@charset "utf-8";
|
||||
/* ---- Default Styles Description ---- */
|
||||
.oe_product_image {
|
||||
position: absolute;
|
||||
left: 15px;
|
||||
right: 15px;
|
||||
top: 15px;
|
||||
bottom: 50px;
|
||||
}
|
||||
|
||||
.ellipsis {
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
.oe_product_description {
|
||||
bottom: 0;
|
||||
position: absolute;
|
||||
left: 15px;
|
||||
right: 15px;
|
||||
border-top: 1px solid #dddddd;
|
||||
}
|
||||
.ellipsis .end {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
text-align: right;
|
||||
width: 26px;
|
||||
|
||||
background-size: 100% 100%;
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAABCAMAAACfZeZEAAAABGdBTUEAALGPC/xhBQAAAwBQTFRF////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAAA////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wDWRdwAAAP90Uk5TgsRjMZXhS30YrvDUP3Emow1YibnM9+ggOZxrBtpRRo94gxItwLOoX/vsHdA2yGgL8+TdKUK8VFufmHSGgAQWJNc9tk+rb5KMCA8aM0iwpWV6dwP9+fXuFerm3yMs0jDOysY8wr5FTldeoWKabgEJ8RATG+IeIdsn2NUqLjQ3OgBDumC3SbRMsVKsValZplydZpZpbJOQco2KdYeEe36BDAL8/vgHBfr2CvTyDu8R7esU6RcZ5ecc4+Af3iLcJSjZ1ivT0S/PMs3LNck4x8U7wz7Bv0G9RLtHuEq1TbJQr1OtVqqnWqRdoqBhnmSbZ5mXapRtcJGOc4t2eYiFfH9AS7qYlgAAARlJREFUKM9jqK9fEGS7VNrDI2+F/nyB1Z4Fa5UKN4TbbeLY7FW0Tatkp3jp7mj7vXzl+4yrDsYoVx+JYz7mXXNSp/a0RN25JMcLPP8umzRcTZW77tNyk63tdprzXdmO+2ZdD9MFe56Y9z3LUG96mcX02n/CW71JH6Qmf8px/cw77ZvVzB+BCj8D5vxhn/vXZh6D4uzf1rN+Cc347j79q/zUL25TPrJMfG/5LvuNZP8rixeZz/mf+vU+Vut+5NL5gPOeb/sd1dZbTs03hBuvmV5JuaRyMfk849nEM7qnEk6IHI8/qn049hB35QGHiv0yZXuMdkXtYC3ebrglcqvYxoj1muvC1nDlrzJYGbpcdHHIMo2FwYv+j3QAAOBSfkZYITwUAAAAAElFTkSuQmCC);
|
||||
background: -webkit-gradient(linear, left top, right top, from(rgba(255, 255, 255, 0)), to(white), color-stop(50%, white));
|
||||
background: -moz-linear-gradient(to right, rgba(255, 255, 255, 0), white 50%, white);
|
||||
background: -o-linear-gradient(to right, rgba(255, 255, 255, 0), white 50%, white);
|
||||
background: -ms-linear-gradient(to right, rgba(255, 255, 255, 0), white 50%, white);
|
||||
background: linear-gradient(to right, rgba(255, 255, 255, 0), white 50%, white);
|
||||
.oe_shop_top .oe_product_description {
|
||||
top: 0;
|
||||
bottom: auto;
|
||||
border-top-style: none;
|
||||
}
|
||||
.oe_shop_top .oe_product_image {
|
||||
top: 15px;
|
||||
bottom: 50px;
|
||||
}
|
||||
|
||||
.oe_shop_center .oe_product_description {
|
||||
text-align: center;
|
||||
border-top-style: none;
|
||||
}
|
||||
|
||||
/* Products Options */
|
||||
.oe_product.oe_image_full .oe_product_image {
|
||||
left: 0;
|
||||
right: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
/* ---- Default Styles ---- */
|
||||
.oe_product {
|
||||
border: 1px solid rgba(100, 100, 100, 0.2);
|
||||
}
|
||||
|
||||
.oe_product .oe_product_image img {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
z-index: 4;
|
||||
}
|
||||
|
||||
.oe_product_description {
|
||||
background: rgba(255, 255, 255, 0.8);
|
||||
padding: 5px 0 5px 0;
|
||||
z-index: 5;
|
||||
}
|
||||
|
||||
.oe_subdescription {
|
||||
line-height: 1.2;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
/* ---- Grid Style ---- */
|
||||
.style1 .oe_product .oe_product_image {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
/* ---- Product Sizes ---- */
|
||||
.oe-height-1 {
|
||||
height: 170px;
|
||||
}
|
||||
|
||||
.oe-height-2 {
|
||||
height: 255px;
|
||||
}
|
||||
|
||||
.oe-height-3 {
|
||||
height: 340px;
|
||||
}
|
||||
|
||||
.oe-height-4 {
|
||||
height: 510px;
|
||||
}
|
||||
.ellipsis .fill {
|
||||
background: #fff;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
@charset "utf-8"
|
||||
|
||||
/* ---- Default Styles Description ---- */
|
||||
|
||||
.oe_product_image
|
||||
position: absolute
|
||||
left: 15px
|
||||
right: 15px
|
||||
top: 15px
|
||||
bottom: 50px
|
||||
|
||||
.oe_product_description
|
||||
bottom: 0
|
||||
position: absolute
|
||||
left: 15px
|
||||
right: 15px
|
||||
border-top: 1px solid #dddddd
|
||||
|
||||
|
||||
.oe_shop_top /* Option 1 */
|
||||
.oe_product_description
|
||||
top: 0
|
||||
bottom: auto
|
||||
border-top-style: none
|
||||
.oe_product_image
|
||||
top: 15px
|
||||
bottom: 50px
|
||||
|
||||
.oe_shop_center /* Option 2 */
|
||||
.oe_product_description
|
||||
text-align: center
|
||||
border-top-style: none
|
||||
|
||||
/* Products Options */
|
||||
|
||||
.oe_product.oe_image_full
|
||||
.oe_product_image
|
||||
left: 0
|
||||
right: 0
|
||||
top: 0
|
||||
bottom: 0
|
||||
|
||||
/* ---- Default Styles ---- */
|
||||
|
||||
.oe_product
|
||||
border: 1px solid rgba(100,100,100,0.2)
|
||||
|
||||
.oe_product .oe_product_image img
|
||||
max-width: 100%
|
||||
max-height: 100%
|
||||
z-index: 4
|
||||
|
||||
.oe_product_description
|
||||
background: rgba(255,255, 255, 0.8)
|
||||
padding: 5px 0 5px 0
|
||||
z-index: 5
|
||||
|
||||
.oe_subdescription
|
||||
line-height: 1.2
|
||||
margin-bottom: 4px
|
||||
|
||||
|
||||
/* ---- Grid Style ---- */
|
||||
|
||||
.style1
|
||||
.oe_product .oe_product_image
|
||||
position: absolute
|
||||
left: 0
|
||||
right: 0
|
||||
top: 0
|
||||
bottom: 0
|
||||
|
||||
/* ---- Product Sizes ---- */
|
||||
|
||||
.oe-height-1
|
||||
height: 170px
|
||||
|
||||
.oe-height-2
|
||||
height: 255px
|
||||
|
||||
.oe-height-3
|
||||
height: 340px
|
||||
|
||||
.oe-height-4
|
||||
height: 510px
|
||||
|
||||
|
After Width: | Height: | Size: 194 KiB |
|
After Width: | Height: | Size: 309 KiB |
@@ -64,44 +64,6 @@
|
||||
</li>
|
||||
</xpath>
|
||||
</template>
|
||||
|
||||
<!-- Page Shop -->
|
||||
|
||||
<template id="layout" name="Products Layout">
|
||||
<t t-call="website.layout">
|
||||
<t t-set="head">
|
||||
<script type="text/javascript" src="/website_sale/static/src/js/website_sale.js"></script>
|
||||
<t t-raw="head or ''"/>
|
||||
</t>
|
||||
<t t-set="title">Shop - <t t-raw="title">Categories</t></t>
|
||||
<div id="wrap">
|
||||
<div class="oe_structure"/>
|
||||
<div class="container oe_website_sale">
|
||||
<div class="row">
|
||||
<div class="col-md-12" id="shop_content">
|
||||
<t t-raw="shop_content" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</template>
|
||||
<template id="products_categories" inherit_id="website_sale.layout" inherit_option_id="website_sale.layout" name="Left Product Categories">
|
||||
<xpath expr="//div[@id='shop_content']" position="before">
|
||||
<div class="col-md-3">
|
||||
<ul class="nav nav-pills nav-stacked">
|
||||
<li t-att-class=" '' if category_id else 'active' " class='active'><a href="/shop/">All Products</a></li>
|
||||
<t t-foreach="categories" t-as="category">
|
||||
<t t-call="website_sale.categories_recursive"/>
|
||||
</t>
|
||||
</ul>
|
||||
</div>
|
||||
</xpath>
|
||||
<xpath expr="//div[@id='shop_content']" position="attributes">
|
||||
<attribute name="class">col-md-9</attribute>
|
||||
</xpath>
|
||||
</template>
|
||||
|
||||
<!-- List of categories -->
|
||||
|
||||
<template id="categories_recursive">
|
||||
@@ -118,91 +80,163 @@
|
||||
<!-- Product list -->
|
||||
|
||||
<template id="products" page="True">
|
||||
<t t-call="website_sale.layout">
|
||||
<t t-call="website.layout">
|
||||
<t t-set="head">
|
||||
<script type="text/javascript" src="/website_sale/static/src/js/website_sale.js"></script>
|
||||
<link rel='stylesheet' href='/website_sale/static/src/css/website_sale.css'/>
|
||||
<t t-raw="head or ''"/>
|
||||
</t>
|
||||
<t t-set="title">Product</t>
|
||||
<t t-set="shop_content">
|
||||
<a t-if="editable" t-attf-href="/shop/#{ category_id and ('category/%s/' % category_id) or ''}add_product/" class="btn btn-default pull-right">Create New Product</a>
|
||||
<div t-if="editable" class="clearfix"/>
|
||||
<t t-call="website.pager">
|
||||
<t t-set="classname">pull-left</t>
|
||||
</t>
|
||||
<form t-attf-action="/shop/#{ category_id and ('category/%s/' % category_id) or ''}" method="get" class="pull-right pagination">
|
||||
<input type="text" name="search" class="search-query col-md-2 form-control" placeholder="Search" t-att-value="search or '' or ''"/>
|
||||
</form>
|
||||
<div class="clearfix"/>
|
||||
<div class='row grid grid-align-top'>
|
||||
<t t-foreach="products" t-as="product">
|
||||
<div class="css_product col-md-2 mb16 thumbnail text-center" data-publish="">
|
||||
<t t-call="website.publish"><t t-set="object" t-value="product"/></t>
|
||||
<div class="ellipsis css_content">
|
||||
<a t-attf-href="/shop/product/#{ product.id }/?#{ search and ('search=%s' % search) or ''}#{ category_id and ('&category_id=%s' % category_id) or ''}" style="text-decoration: none; display: block;">
|
||||
<h5 t-field="product.name"> </h5>
|
||||
<img class="img-rounded" t-att-src="product.img('image_small')"/>
|
||||
</a>
|
||||
<small t-field="product.description_sale"></small>
|
||||
<span class="end">&#133;</span><span class="fill"></span>
|
||||
</div>
|
||||
<div>
|
||||
<t t-if="product.product_variant_ids[0].lst_price != product.product_variant_ids[0].price">
|
||||
<small class="text-error" style="text-decoration: line-through;"><t t-esc="product.product_variant_ids[0].lst_price" /> €</small>
|
||||
</t>
|
||||
<b><t t-esc="product.product_variant_ids[0].price" /> €</b>
|
||||
</div>
|
||||
<div class="mb8 mt8">
|
||||
<a t-attf-href="./add_cart/?product_id=#{ product.id }" class="btn btn-default btn-sm btn-success">Add to basket</a>
|
||||
</div>
|
||||
<t t-set="title">Our Products</t>
|
||||
<div id="wrap">
|
||||
<div class="oe_structure"/>
|
||||
<div class="container oe_website_sale">
|
||||
<div class="row">
|
||||
<div class="col-sm-4">
|
||||
<h1>Our Products</h1>
|
||||
</div><div class="col-sm-4 pagination text-center">
|
||||
<a t-if="editable" t-attf-href="/shop/#{ category_id and ('category/%s/' % category_id) or ''}add_product/" class="btn btn-default">New Product</a>
|
||||
</div><div class="col-sm-4">
|
||||
<form t-attf-action="/shop/#{ category_id and ('category/%s/' % category_id) or ''}" method="get" class="pull-right pagination">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon"><span class="glyphicon glyphicon-search"/></span>
|
||||
<input type="text" name="search" class="search-query form-control" placeholder="Search..." t-att-value="search or ''"/>
|
||||
</div>
|
||||
</form>
|
||||
<t t-call="website.pager">
|
||||
<t t-set="classname">pull-left</t>
|
||||
</t>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class='row style_default'>
|
||||
<div class="col-md-12" id="products_grid">
|
||||
<t t-foreach="products" t-as="product">
|
||||
<div t-attf-class="col-md-#{ product.website_sizex } oe_product oe-height-#{ product.website_sizey } #{ product.website_product_class}" t-att-data-publish="product.website_published" data-snippet-id="colmd">
|
||||
|
||||
<div class="oe_product_description">
|
||||
<a t-attf-href="/shop/product/#{ product.id }/?#{ search and ('search=%s' % search) or ''}#{ category_id and ('&category_id=%s' % category_id) or ''}">
|
||||
<b t-field="product.name"/>
|
||||
</a>
|
||||
<!-- This should be an option -->
|
||||
<div t-if="product.description_sale" class="text-muted oe_subdescription">
|
||||
|
||||
<!-- TODO: replace by a smart t-field on field.text: description_sale -->
|
||||
<small t-raw="product.description_sale.replace('\n','<br/>') "/>
|
||||
</div>
|
||||
<div>
|
||||
<b>
|
||||
<t t-if="product.product_variant_ids[0].lst_price != product.product_variant_ids[0].price">
|
||||
<span class="text-danger" style="text-decoration: line-through;">
|
||||
<t t-esc="product.product_variant_ids[0].lst_price" /> €
|
||||
</span>&nbsp;
|
||||
</t>
|
||||
<t t-esc="product.product_variant_ids[0].price" /> €
|
||||
</b>
|
||||
<a t-attf-href="./add_cart/?product_id=#{ product.id }">
|
||||
<span class="icon-shopping-cart"/>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="oe_product_image text-center">
|
||||
<a t-attf-href="/shop/product/#{ product.id }/?#{ search and ('search=%s' % search) or ''}#{ category_id and ('&category_id=%s' % category_id) or ''}">
|
||||
<img class="img" t-att-src="product.img('image')"/>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</t>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<t t-call="website.pager" />
|
||||
</div>
|
||||
</t>
|
||||
</div>
|
||||
<div class="oe_structure mb32"/>
|
||||
</div>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
<!-- product -->
|
||||
|
||||
<template id="product" name="Product">
|
||||
<t t-call="website_sale.layout">
|
||||
<t t-set="title">Product</t>
|
||||
<t t-set="shop_content">
|
||||
<form t-attf-action="/shop/#{ category_id and ('category/%s/' % category_id) or ''}" method="get" class="pull-right">
|
||||
<input type="text" name="search" class="search-query col-md-2 form-control" placeholder="Search..." t-att-value="search or '' or ''"/>
|
||||
</form>
|
||||
<div class="clearfix"/>
|
||||
<div id="product_detail">
|
||||
<t t-call="website.publish"><t t-set="object" t-value="product"/></t>
|
||||
<h1 t-field="product.name">Product Name</h1>
|
||||
<a t-if="len(product.product_variant_ids) <= 1" t-attf-href="./add_cart/?product_id=#{ product.id }" class="btn btn-default btn-sm btn-success pull-right">Add to basket</a>
|
||||
<form t-if="len(product.product_variant_ids) > 1" action="./add_cart/" class="pull-right">
|
||||
<label label-default="label-default" class="radio" t-foreach="product.product_variant_ids" t-as="product">
|
||||
<input type="radio" name="product_id" t-att-value="product.id" t-att-checked="product == product.product_variant_ids[0] or None"/>
|
||||
<t t-esc="product.variants or ''">Standard</t>
|
||||
<span class="badge" t-if="product.price_extra"><t t-esc="product.price_extra > 0 and '+' or ''"/><t t-esc="product.price_extra"/> €</span>
|
||||
</label><br/>
|
||||
<button class="btn btn-sm btn-success">Add to basket</button>
|
||||
</form>
|
||||
<div class="pull-right">
|
||||
<t t-if="product.product_variant_ids[0].lst_price != product.product_variant_ids[0].price">
|
||||
<h5 class="text-error" style="text-decoration: line-through;" title="Price without reduction"><t t-field="product.product_variant_ids[0].lst_price" /> €</h5>
|
||||
<h4><t t-esc="product.product_variant_ids[0].price" /> €</h4>
|
||||
</t>
|
||||
<h4 t-if="product.product_variant_ids[0].lst_price == product.product_variant_ids[0].price"><t t-field="product.product_variant_ids[0].lst_price" /> €</h4>
|
||||
</div>
|
||||
<img class="media-object img-responsive" t-att-src="product.img('image_medium')"/>
|
||||
<div t-field="product.website_description"></div>
|
||||
</div>
|
||||
<t t-call="website.layout">
|
||||
<t t-set="head">
|
||||
<script type="text/javascript" src="/website_sale/static/src/js/website_sale.js"></script>
|
||||
</t>
|
||||
<t t-set="title" t-raw="product.name"/>
|
||||
<div id="wrap">
|
||||
|
||||
<section class="container mt8">
|
||||
<div class="row">
|
||||
<div class="col-sm-5">
|
||||
<ol class="breadcrumb">
|
||||
<li><a href="/shop">Products</a></li>
|
||||
<li t-if="category"><a t-att-href="'/shop/category/%s' % (category_id,)"><t t-field="category.name"/></a></li>
|
||||
<li class="active" t-field="product.name">Product Name</li>
|
||||
</ol>
|
||||
</div><div class="col-sm-3">
|
||||
<t t-call="website.publish"><t t-set="object" t-value="product"/></t>
|
||||
</div><div class="col-sm-3 col-sm-offset-1">
|
||||
<form t-attf-action="/shop/#{ category_id and ('category/%s/' % category_id) or ''}" method="get" class="pull-right">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon"><span class="glyphicon glyphicon-search"/></span>
|
||||
<input type="text" name="search" class="search-query form-control" placeholder="Search..." t-att-value="search or ''"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="container oe_website_sale mb16" id="product_detail">
|
||||
<div class="row">
|
||||
<div class="col-sm-7 col-md-7 col-lg-7">
|
||||
<img class="img" t-att-src="product.img('image')" style="max-height: 500px"/>
|
||||
</div><div class="col-sm-5 col-md-5 col-lg-4 col-lg-offset-1">
|
||||
<h1 t-field="product.name">Product Name</h1>
|
||||
|
||||
<form action="./add_cart/">
|
||||
<input type="hidden" t-if="len(product.product_variant_ids) <= 1" name="product_id" t-att-value="product.id"/>
|
||||
<t t-if="len(product.product_variant_ids) > 1">
|
||||
<label label-default="label-default" class="radio" t-foreach="product.product_variant_ids" t-as="product">
|
||||
<input type="radio" name="product_id" t-att-value="product.id" t-att-checked="product == product.product_variant_ids[0] or None"/>
|
||||
<t t-esc="product.variants or ''">Standard</t>
|
||||
<span class="badge" t-if="product.price_extra">
|
||||
<t t-esc="product.price_extra > 0 and '+' or ''"/><t t-esc="product.price_extra"/> €
|
||||
</span>
|
||||
</label>
|
||||
<br/>
|
||||
</t>
|
||||
<div>
|
||||
<t t-if="product.product_variant_ids[0].lst_price != product.product_variant_ids[0].price">
|
||||
<h5 class="text-error" style="text-decoration: line-through;" title="Price without reduction"><t t-field="product.product_variant_ids[0].lst_price" /> €</h5>
|
||||
<h4><t t-esc="product.product_variant_ids[0].price" /> €</h4>
|
||||
</t>
|
||||
<h4 t-if="product.product_variant_ids[0].lst_price == product.product_variant_ids[0].price">
|
||||
<b><t t-field="product.product_variant_ids[0].lst_price" /> €</b>
|
||||
</h4>
|
||||
</div>
|
||||
<button class="btn btn-primary btn-lg mt8">Add to Cart</button>
|
||||
<hr t-if="product.description_sale"/>
|
||||
<p t-field="product.description_sale" class="text-muted"/>
|
||||
<hr/>
|
||||
<p class="text-muted">
|
||||
30-day money-back guarantee<br/>
|
||||
Free Shipping in U.S.<br/>
|
||||
Buy now, get in 2 days
|
||||
</p>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<div t-field="product.website_description" class="oe_structure" id="product_full_description"/>
|
||||
</div>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
<template id="recommended_products" inherit_id="website_sale.product" inherit_option_id="website_sale.product" name="Recommended Products">
|
||||
<xpath expr="//div[@id='product_detail']" position="inside">
|
||||
<div class="mt32" t-if="product.recommended_products()">
|
||||
<xpath expr="//div[@id='product_full_description']" position="after">
|
||||
<div class="container mt32" t-if="product.recommended_products()">
|
||||
<h3>Customers who have bought this product also bought:</h3>
|
||||
<div class='row mt16' style="margin-left: 15px !important;">
|
||||
<t t-foreach="product.recommended_products()" t-as="product">
|
||||
@@ -223,9 +257,14 @@
|
||||
<!-- Page Shop my cart -->
|
||||
|
||||
<template id="mycart" name="My cart" page="True">
|
||||
<t t-call="website_sale.layout">
|
||||
<t t-set="title">My cart</t>
|
||||
<t t-set="shop_content">
|
||||
<t t-call="website.layout">
|
||||
<t t-set="head">
|
||||
<script type="text/javascript" src="/website_sale/static/src/js/website_sale.js"></script>
|
||||
<t t-raw="head or ''"/>
|
||||
</t>
|
||||
<t t-set="title">Your Cart</t>
|
||||
<div id="wrap">
|
||||
<div class="container oe_website_sale">
|
||||
<div class="col-md-12 oe_mycart">
|
||||
<h1>My Shopping Cart</h1>
|
||||
<table class='table' id="mycart_products">
|
||||
@@ -288,9 +327,31 @@
|
||||
</table>
|
||||
<a t-if="website_sale_order and website_sale_order.order_line" href="/shop/checkout/" class="btn btn-success">Proceed To Payment</a>
|
||||
</div>
|
||||
</t>
|
||||
</div>
|
||||
<div class="oe_structure"/>
|
||||
</div>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
<!-- Page Shop -->
|
||||
|
||||
<template id="products_categories" inherit_option_id="website_sale.products" name="Product Categories">
|
||||
<xpath expr="//div[@id='products_grid']" position="before">
|
||||
<div class="col-md-3">
|
||||
<ul class="nav nav-pills nav-stacked mt16">
|
||||
<li t-att-class=" '' if category_id else 'active' "><a href="/shop/">All Products</a></li>
|
||||
<t t-foreach="categories" t-as="category">
|
||||
<t t-call="website_sale.categories_recursive"/>
|
||||
</t>
|
||||
</ul>
|
||||
</div>
|
||||
</xpath>
|
||||
<xpath expr="//div[@id='products_grid']" position="attributes">
|
||||
<attribute name="class">col-md-9</attribute>
|
||||
</xpath>
|
||||
</template>
|
||||
|
||||
|
||||
<template id="suggested_products_list" inherit_id="website_sale.mycart" inherit_option_id="website_sale.mycart" name="Suggested Products in list view">
|
||||
<xpath expr="//table[@id='mycart_products']" position="after">
|
||||
<table t-if="suggested_products" class='table table-hover table-condensed'>
|
||||
|
||||
@@ -36,6 +36,14 @@ class product_template(osv.osv):
|
||||
'website_description': fields.html('Description for the website'),
|
||||
'suggested_product_id': fields.many2one('product.template', 'Suggested For Product'),
|
||||
'suggested_product_ids': fields.one2many('product.template', 'suggested_product_id', 'Suggested Products'),
|
||||
'website_sizex': fields.selection(map(lambda x: (str(x+1),str(x+1)), range(12)), 'Size X'),
|
||||
'website_sizey': fields.selection(map(lambda x: (str(x+1),str(x+1)), range(6)), 'Size Y'),
|
||||
'website_product_class': fields.selection([('','Default'), ('oe_image_full','Image Full')], 'Size Y'),
|
||||
}
|
||||
_defaults = {
|
||||
'website_sizex': 3,
|
||||
'website_sizey': 2,
|
||||
'website_product_class': '',
|
||||
}
|
||||
|
||||
def recommended_products(self, cr, uid, ids, context=None):
|
||||
|
||||
@@ -1,24 +1,69 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<data noupdate="0">
|
||||
|
||||
<record id="product.product_product_consultant" model="product.product">
|
||||
<field name="website_published" eval="True"/>
|
||||
</record>
|
||||
<record id="product.product_product_1" model="product.product">
|
||||
<field name="website_published" eval="True"/>
|
||||
</record>
|
||||
<record id="product.product_product_2" model="product.product">
|
||||
<field name="website_published" eval="True"/>
|
||||
<field name="image" file="website/static/description/website_edit.png"/>
|
||||
</record>
|
||||
|
||||
<record id="product.product_product_4" model="product.product">
|
||||
<field name="website_published" eval="True"/>
|
||||
<field name="website_product_class">oe_image_full</field>
|
||||
<field name="website_sizex">6</field>
|
||||
<field name="website_sizey">4</field>
|
||||
<field name="website_description" type="html">
|
||||
<section snippet-id="text-image" class="mt16 mb16 dark">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-5 col-md-offset-1 mt64">
|
||||
<h3>Why you'll love an iPad.</h3>
|
||||
<p>
|
||||
Right from the start, there’s a lot to love about
|
||||
iPad. It’s simple yet powerful. Thin and light yet
|
||||
full-featured. It can do just about everything and
|
||||
be just about anything.
|
||||
</p><p>
|
||||
And because it’s so easy to use, it’s easy to love.
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-md-5 mt16 mb16">
|
||||
<img class="img img-responsive" src="/website_sale/static/src/img/ipad_why.png"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section snippet-id="image-text" class="mt16 mb16">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-5 col-md-offset-1">
|
||||
<img class="img img-responsive" src="/website_sale/static/src/img/ipad_experience.png"/>
|
||||
</div>
|
||||
<div class="col-md-6 mt64">
|
||||
<h3>The full iPad experience.</h3>
|
||||
<h4 class="small">There is less of it, but no less to it.</h4>
|
||||
<p>
|
||||
Everything you love about iPad — the beautiful
|
||||
screen, fast and fluid performance, FaceTime and
|
||||
iSight cameras, thousands of amazing apps, 10-hour
|
||||
battery life* — is everything you’ll love about
|
||||
iPad mini, too. And you can hold it in one hand.
|
||||
</p>
|
||||
<p>
|
||||
<a href="http://openerp.com">Learn more »</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</field>
|
||||
</record>
|
||||
<record id="product.product_product_5" model="product.product">
|
||||
<field name="website_published" eval="True"/>
|
||||
<field name="website_sizex">6</field>
|
||||
</record>
|
||||
<record id="product.product_product_6" model="product.product">
|
||||
<field name="website_published" eval="True"/>
|
||||
<field name="website_product_class">oe_image_full</field>
|
||||
</record>
|
||||
<record id="product.product_product_7" model="product.product">
|
||||
<field name="website_published" eval="True"/>
|
||||
|
||||