diff --git a/pos_product_template/static/src/js/ppt.js b/pos_product_template/static/src/js/ppt.js index b5318ce0..218673ef 100644 --- a/pos_product_template/static/src/js/ppt.js +++ b/pos_product_template/static/src/js/ppt.js @@ -16,21 +16,33 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ******************************************************************************/ - -openerp.pos_product_template = function (instance) { - module = instance.point_of_sale; - var QWeb = instance.web.qweb; - var _t = instance.web._t; - -/* ******************************************************** -Overload: point_of_sale.ProductListWidget - -- The overload will: - - display only product template; - - Add an extra behaviour on click on a template, if template has many - variant, displaying an extra scren to select the variant; -*********************************************************** */ - module.ProductListWidget = module.ProductListWidget.extend({ +odoo.define("pos_product_template.pos_product_template", function(require){ + "use strict"; + + var screens = require("point_of_sale.screens"); + var popups = require("point_of_sale.popups"); + var models = require('point_of_sale.models'); + var chrome = require('point_of_sale.chrome'); + var gui = require('point_of_sale.gui'); + var PosDB = require("point_of_sale.DB"); + var PosBaseWidget = require('point_of_sale.BaseWidget'); + + var core = require('web.core'); + var utils = require('web.utils'); + + var QWeb = core.qweb; + var _t = core._t; + + /* ******************************************************** + Overload: point_of_sale.ProductListWidget + + - The overload will: + - display only product template; + - Add an extra behaviour on click on a template, if template has many + variant, displaying an extra scren to select the variant; + *********************************************************** */ + var _render_product_ = screens.ProductListWidget.prototype.render_product; + screens.ProductListWidget.include({ init: function(parent, options) { this._super(parent,options); @@ -47,7 +59,8 @@ Overload: point_of_sale.ProductListWidget } else{ // Display for selection all the variants of a template - self.pos.pos_widget.screen_selector.show_popup('select-variant-popup', product.product_tmpl_id); + //self.pos.pos_widget.screen_selector.show_popup('select-variant-popup', product.product_tmpl_id); + self.gui.show_popup('select-variant-popup', product.product_tmpl_id); } }; }, @@ -67,71 +80,68 @@ Overload: point_of_sale.ProductListWidget } this._super(product_list); }, - }); - - var _render_product_ = module.ProductListWidget.prototype.render_product; - module.ProductListWidget.prototype.render_product = function(product){ - self = this; - - if (product.product_variant_count == 1){ - // Normal Display - return _render_product_.call(this, product); - } - else{ - var cached = this.product_cache.get_node(product.id); - if(!cached){ - var image_url = this.get_product_image_url(product); - var product_html = QWeb.render('Template',{ - widget: this, - product: product, - image_url: this.get_product_image_url(product), - }); - var product_node = document.createElement('div'); - product_node.innerHTML = product_html; - product_node = product_node.childNodes[1]; - this.product_cache.cache_node(product.id,product_node); - return product_node; + + render_product: function(product){ + self = this; + + if (product.product_variant_count == 1){ + // Normal Display + return _render_product_.call(this, product); } - return cached; - } - }; - - -/* ******************************************************** -Overload: point_of_sale.PosWidget - -- Add a new PopUp 'SelectVariantPopupWidget'; -*********************************************************** */ - module.PosWidget = module.PosWidget.extend({ - + else{ + var cached = this.product_cache.get_node(product.id); + if(!cached){ + var image_url = this.get_product_image_url(product); + var product_html = QWeb.render('Template',{ + widget: this, + product: product, + image_url: this.get_product_image_url(product), + }); + var product_node = document.createElement('div'); + product_node.innerHTML = product_html; + product_node = product_node.childNodes[1]; + this.product_cache.cache_node(product.id,product_node); + return product_node; + } + return cached; + } + }, + }); + + /* ******************************************************** + Overload: point_of_sale.PosWidget + + - Add a new PopUp 'SelectVariantPopupWidget'; + ************************************************************/ + chrome.Chrome.include({ /* Overload Section */ build_widgets: function(){ this._super(); - this.select_variant_popup = new module.SelectVariantPopupWidget(this, {}); + this.select_variant_popup = new SelectVariantPopupWidget(this, {}); this.select_variant_popup.appendTo($(this.$el)); - this.screen_selector.popup_set['select-variant-popup'] = this.select_variant_popup; + // Hide the popup because all pop up are displayed at the // beginning by default this.select_variant_popup.hide(); }, }); - -/* ******************************************************** -Define : pos_product_template.SelectVariantPopupWidget -- This widget that display a pop up to select a variant of a Template; -*********************************************************** */ - module.SelectVariantPopupWidget = module.PopUpWidget.extend({ + /* ******************************************************** + Define : pos_product_template.SelectVariantPopupWidget + + - This widget that display a pop up to select a variant of a Template; + ***********************************************************/ + var SelectVariantPopupWidget = popups.extend({ template:'SelectVariantPopupWidget', start: function(){ var self = this; // Define Variant Widget - this.variant_list_widget = new module.VariantListWidget(this,{}); + this.variant_list_widget = new VariantListWidget(this,{}); this.variant_list_widget.replace(this.$('.placeholder-VariantListWidget')); // Define Attribute Widget - this.attribute_list_widget = new module.AttributeListWidget(this,{}); + this.attribute_list_widget = new AttributeListWidget(this,{}); this.attribute_list_widget.replace(this.$('.placeholder-AttributeListWidget')); // Add behaviour on Cancel Button @@ -163,17 +173,21 @@ Define : pos_product_template.SelectVariantPopupWidget attribute_list.push(this.pos.db.get_product_attribute_by_id(attribute_ids[i])); } this.attribute_list_widget.set_attribute_list(attribute_list, template); - this._super(); + + if(this.$el){ + this.$el.removeClass('oe_hidden'); + } }, }); + gui.define_popup({name:'select-variant-popup', widget: SelectVariantPopupWidget}); -/* ******************************************************** -Define: pos_product_template.VariantListWidget - -- This widget will display a list of Variants; -- This widget has some part of code that come from point_of_sale.ProductListWidget; -*********************************************************** */ - module.VariantListWidget = module.PosBaseWidget.extend({ + /* ******************************************************** + Define: pos_product_template.VariantListWidget + + - This widget will display a list of Variants; + - This widget has some part of code that come from point_of_sale.ProductListWidget; + ***********************************************************/ + var VariantListWidget = PosBaseWidget.extend({ template:'VariantListWidget', init: function(parent, options) { @@ -189,7 +203,7 @@ Define: pos_product_template.VariantListWidget self.pos_widget.screen_selector.set_current_screen('scale',{product: variant}); }else{ self.__parentedParent.hide(); - self.pos.get('selectedOrder').addProduct(variant); + self.pos.get('selectedOrder').add_product(variant); } }; }, @@ -213,14 +227,14 @@ Define: pos_product_template.VariantListWidget }, filter_variant: function(){ - value_list = [] + var value_list = [] for (var item in this.filters){ value_list.push(parseInt(this.filters[item])); } this.filter_variant_list = []; - for (index in this.variant_list){ - variant = this.variant_list[index]; - found = true; + for (var index in this.variant_list){ + var variant = this.variant_list[index]; + var found = true; for (var i = 0; i < value_list.length; i++){ found = found && (variant.attribute_value_ids.indexOf(value_list[i]) != -1); } @@ -267,13 +281,14 @@ Define: pos_product_template.VariantListWidget }, }); - -/* ******************************************************** -Define: pos_product_template.AttributeListWidget - - - This widget will display a list of Attribute; -*********************************************************** */ - module.AttributeListWidget = module.PosBaseWidget.extend({ + + + /* ******************************************************** + Define: pos_product_template.AttributeListWidget + + - This widget will display a list of Attribute; + ***********************************************************/ + var AttributeListWidget = PosBaseWidget.extend({ template:'AttributeListWidget', init: function(parent, options) { @@ -281,12 +296,12 @@ Define: pos_product_template.AttributeListWidget this.attribute_list = []; this.product_template = null; this.click_set_attribute_handler = function(event){ - /*TODO: Refactor this function with elegant DOM manipulation */ + //TODO: Refactor this function with elegant DOM manipulation // remove selected item parent = this.parentElement.parentElement.parentElement; parent.children[0].classList.remove('selected'); for (var i = 0 ; i < parent.children[1].children[0].children.length; i ++){ - elem = parent.children[1].children[0].children[i]; + var elem = parent.children[1].children[0].children[i]; elem.children[0].classList.remove('selected'); } // add selected item @@ -294,12 +309,12 @@ Define: pos_product_template.AttributeListWidget self.__parentedParent.variant_list_widget.set_filter(this.dataset['attributeId'], this.dataset['attributeValueId']); }; this.click_reset_attribute_handler = function(event){ - /*TODO: Refactor this function with elegant DOM manipulation */ + //TODO: Refactor this function with elegant DOM manipulation // remove selected item parent = this.parentElement; parent.children[0].classList.remove('selected'); for (var i = 0 ; i < parent.children[1].children[0].children.length; i ++){ - elem = parent.children[1].children[0].children[i]; + var elem = parent.children[1].children[0].children[i]; elem.children[0].classList.remove('selected'); } // add selected item @@ -357,8 +372,7 @@ Define: pos_product_template.AttributeListWidget value_node = value_node.childNodes[1]; return value_node; }, - - + renderElement: function() { var self = this; var el_html = openerp.qweb.render(this.template, {widget: this}); @@ -374,26 +388,24 @@ Define: pos_product_template.AttributeListWidget for(var i = 0, len = this.attribute_list.length; i < len; i++){ var attribute_node = this.render_attribute(this.attribute_list[i]); attribute_node.querySelector('.attribute-name').addEventListener('click', this.click_reset_attribute_handler); -// attribute_node.addEventListener('click', this.click_reset_attribute_handler); list_container.appendChild(attribute_node); }; }, }); - - -/* ******************************************************** -Overload: point_of_sale.PosDB - -- Add to local storage Product Templates Data. -- Link Product Variants to Product Templates. -- Add an extra field 'is_primary_variant' on product object. the product - will be display on product list, only if it is the primary variant; - Otherwise, the product will be displayed only on Template Screen. -- Add an extra field 'product_variant_count' on product object that - indicates the number of variant of the template of the product. -*********************************************************** */ - module.PosDB = module.PosDB.extend({ + + /* ******************************************************** + Overload: point_of_sale.PosDB + + - Add to local storage Product Templates Data. + - Link Product Variants to Product Templates. + - Add an extra field 'is_primary_variant' on product object. the product + will be display on product list, only if it is the primary variant; + Otherwise, the product will be displayed only on Template Screen. + - Add an extra field 'product_variant_count' on product object that + indicates the number of variant of the template of the product. + ********************************************************** */ + PosDB.include({ init: function(options){ this.template_by_id = {}; this.product_attribute_by_id = {}; @@ -429,12 +441,12 @@ Overload: point_of_sale.PosDB attribute_by_template_id: function(template_id){ - template = this.template_by_id[template_id]; + var template = this.template_by_id[template_id]; return this.attribute_by_attribute_value_ids(template.attribute_value_ids); }, attribute_by_attribute_value_ids: function(value_ids){ - attribute_ids = []; + var attribute_ids = []; for (var i = 0; i < value_ids.length; i++){ var value = this.product_attribute_value_by_id[value_ids[i]]; if (attribute_ids.indexOf(value.attribute_id[0])==-1){ @@ -480,7 +492,6 @@ Overload: point_of_sale.PosDB }, }); - /* ******************************************************** Overload: point_of_sale.PosModel @@ -488,8 +499,8 @@ Overload: point_of_sale.PosModel - Load 'name' field of model product.product; - Load product.template model; *********************************************************** */ - var _initialize_ = module.PosModel.prototype.initialize; - module.PosModel.prototype.initialize = function(session, attributes){ + var _initialize_ = models.PosModel.prototype.initialize; + models.PosModel.prototype.initialize = function(session, attributes){ self = this; // Add the load of the field product_product.name // that is the name of the template @@ -506,7 +517,7 @@ Overload: point_of_sale.PosModel } // Load Product Template - model = { + var model = { model: 'product.template', fields: [ 'name', @@ -558,4 +569,5 @@ Overload: point_of_sale.PosModel return _initialize_.call(this, session, attributes); }; -}; + +}); diff --git a/pos_product_template/view/view.xml b/pos_product_template/view/view.xml index 169b3db8..3ac23345 100644 --- a/pos_product_template/view/view.xml +++ b/pos_product_template/view/view.xml @@ -27,7 +27,7 @@ -