|
@@ -63,6 +63,7 @@ function pos_customize_product_pack_widget(instance, module){
|
|
|
var self = this;
|
|
|
var data = [];
|
|
|
var product = self.pos.get('selectedOrder').selected_orderline.product;
|
|
|
+
|
|
|
var product_pack = product.pack_line_ids;
|
|
|
var pack_lines = this.pos.product_pack_lines || [];
|
|
|
|
|
@@ -83,15 +84,15 @@ function pos_customize_product_pack_widget(instance, module){
|
|
|
var nuevoArray = [];
|
|
|
var lookup = {};
|
|
|
|
|
|
- for (var i in arr) {
|
|
|
- lookup[arr[i][prop]] = arr[i];
|
|
|
- }
|
|
|
+ for (var i in arr) {
|
|
|
+ lookup[arr[i][prop]] = arr[i];
|
|
|
+ }
|
|
|
|
|
|
- for (i in lookup) {
|
|
|
- nuevoArray.push(lookup[i]);
|
|
|
- }
|
|
|
+ for (i in lookup) {
|
|
|
+ nuevoArray.push(lookup[i]);
|
|
|
+ }
|
|
|
|
|
|
- return nuevoArray;
|
|
|
+ return nuevoArray;
|
|
|
}
|
|
|
|
|
|
data = eliminarObjetosDuplicados(data, 'id');
|
|
@@ -120,7 +121,8 @@ function pos_customize_product_pack_widget(instance, module){
|
|
|
var order = self.pos.get('selectedOrder');
|
|
|
var selectedline = self.pos.get('selectedOrder').selected_orderline;
|
|
|
var product = self.pos.get('selectedOrder').selected_orderline.product;
|
|
|
- if(!$.isArray(product.description)){
|
|
|
+
|
|
|
+ if(selectedline.pack_lines.length == 0){
|
|
|
var ProductPackList = [];
|
|
|
ProductPackList.push({
|
|
|
order : selectedline.order.uid,
|
|
@@ -129,24 +131,10 @@ function pos_customize_product_pack_widget(instance, module){
|
|
|
product_id : self.model_product.id,
|
|
|
product_name : ' ■ Sin ---> ' + self.model_product.name,
|
|
|
});
|
|
|
- }else{
|
|
|
|
|
|
- // function eliminarObjetosDuplicados(arr, prop) {
|
|
|
- // var nuevoArray = [];
|
|
|
- // var lookup = {};
|
|
|
-
|
|
|
- // for (var i in arr) {
|
|
|
- // lookup[arr[i][prop]] = arr[i];
|
|
|
- // }
|
|
|
-
|
|
|
- // for (i in lookup) {
|
|
|
- // nuevoArray.push(lookup[i]);
|
|
|
- // }
|
|
|
-
|
|
|
- // return nuevoArray;
|
|
|
- // }
|
|
|
+ }else{
|
|
|
|
|
|
- var ProductPackList = product.description;
|
|
|
+ var ProductPackList = selectedline.pack_lines;
|
|
|
ProductPackList.push({
|
|
|
order : selectedline.order.uid,
|
|
|
line_id : selectedline.id,
|
|
@@ -155,172 +143,29 @@ function pos_customize_product_pack_widget(instance, module){
|
|
|
product_name : ' ■ Sin ---> ' + self.model_product.name,
|
|
|
});
|
|
|
|
|
|
- // ProductPackList = eliminarObjetosDuplicados(ProductPackList, 'product_id');
|
|
|
+ }
|
|
|
|
|
|
+ function eliminarObjetosDuplicados(arr, prop) {
|
|
|
+ var nuevoArray = [];
|
|
|
+ var lookup = {};
|
|
|
+
|
|
|
+ for (var i in arr) {
|
|
|
+ lookup[arr[i][prop]] = arr[i];
|
|
|
+ }
|
|
|
+
|
|
|
+ for (i in lookup) {
|
|
|
+ nuevoArray.push(lookup[i]);
|
|
|
+ }
|
|
|
+
|
|
|
+ return nuevoArray;
|
|
|
}
|
|
|
- product.description = ProductPackList;
|
|
|
+
|
|
|
+ ProductPackList = eliminarObjetosDuplicados(ProductPackList, 'product_id');
|
|
|
+
|
|
|
+ selectedline.pack_lines = ProductPackList;
|
|
|
self.pos_widget.screen_selector.set_current_screen('products');
|
|
|
return self.pos_widget.order_widget.rerender_orderline(selectedline);
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
-
|
|
|
-
|
|
|
- // **************************************************************************
|
|
|
-
|
|
|
- module.OrderWidget = module.PosBaseWidget.extend({
|
|
|
- template:'OrderWidget',
|
|
|
- init: function(parent, options) {
|
|
|
- var self = this;
|
|
|
- this._super(parent,options);
|
|
|
- this.editable = false;
|
|
|
- this.pos.bind('change:selectedOrder', this.change_selected_order, this);
|
|
|
- this.line_click_handler = function(event){
|
|
|
- if(!self.editable){
|
|
|
- return;
|
|
|
- }
|
|
|
- self.pos.get('selectedOrder').selectLine(this.orderline);
|
|
|
- self.pos_widget.numpad.state.reset();
|
|
|
- };
|
|
|
- this.client_change_handler = function(event){
|
|
|
- self.update_summary();
|
|
|
- }
|
|
|
- this.bind_order_events();
|
|
|
- },
|
|
|
- enable_numpad: function(){
|
|
|
- this.disable_numpad(); //ensure we don't register the callbacks twice
|
|
|
- this.numpad_state = this.pos_widget.numpad.state;
|
|
|
- if(this.numpad_state){
|
|
|
- this.numpad_state.reset();
|
|
|
- this.numpad_state.bind('set_value', this.set_value, this);
|
|
|
- }
|
|
|
-
|
|
|
- },
|
|
|
- disable_numpad: function(){
|
|
|
- if(this.numpad_state){
|
|
|
- this.numpad_state.unbind('set_value', this.set_value);
|
|
|
- this.numpad_state.reset();
|
|
|
- }
|
|
|
- },
|
|
|
- set_editable: function(editable){
|
|
|
- this.editable = editable;
|
|
|
- if(editable){
|
|
|
- this.enable_numpad();
|
|
|
- }else{
|
|
|
- this.disable_numpad();
|
|
|
- this.pos.get('selectedOrder').deselectLine();
|
|
|
- }
|
|
|
- },
|
|
|
- set_value: function(val) {
|
|
|
- var order = this.pos.get('selectedOrder');
|
|
|
- if (this.editable && order.getSelectedLine()) {
|
|
|
- var mode = this.numpad_state.get('mode');
|
|
|
- if( mode === 'quantity'){
|
|
|
- order.getSelectedLine().set_quantity(val);
|
|
|
- }else if( mode === 'discount'){
|
|
|
- order.getSelectedLine().set_discount(val);
|
|
|
- }else if( mode === 'price'){
|
|
|
- order.getSelectedLine().set_unit_price(val);
|
|
|
- }
|
|
|
- }
|
|
|
- },
|
|
|
- change_selected_order: function() {
|
|
|
- this.bind_order_events();
|
|
|
- this.renderElement();
|
|
|
- },
|
|
|
- bind_order_events: function() {
|
|
|
-
|
|
|
- var order = this.pos.get('selectedOrder');
|
|
|
- order.unbind('change:client', this.client_change_handler);
|
|
|
- order.bind('change:client', this.client_change_handler);
|
|
|
-
|
|
|
- var lines = order.get('orderLines');
|
|
|
- lines.unbind();
|
|
|
- lines.bind('add', function(){
|
|
|
- this.numpad_state.reset();
|
|
|
- this.renderElement(true);
|
|
|
- },this);
|
|
|
- lines.bind('remove', function(line){
|
|
|
- this.remove_orderline(line);
|
|
|
- this.numpad_state.reset();
|
|
|
- this.update_summary();
|
|
|
- },this);
|
|
|
- lines.bind('change', function(line){
|
|
|
- this.rerender_orderline(line);
|
|
|
- this.update_summary();
|
|
|
- },this);
|
|
|
- },
|
|
|
- render_orderline: function(orderline){
|
|
|
- var el_str = openerp.qweb.render('Orderline',{widget:this, line:orderline});
|
|
|
- var el_node = document.createElement('div');
|
|
|
- el_node.innerHTML = _.str.trim(el_str);
|
|
|
- el_node = el_node.childNodes[0];
|
|
|
- el_node.orderline = orderline;
|
|
|
- el_node.addEventListener('click',this.line_click_handler);
|
|
|
-
|
|
|
- orderline.node = el_node;
|
|
|
- return el_node;
|
|
|
- },
|
|
|
- remove_orderline: function(order_line){
|
|
|
- if(this.pos.get('selectedOrder').get('orderLines').length === 0){
|
|
|
- order_line.product.description = false;
|
|
|
- this.renderElement();
|
|
|
- }else{
|
|
|
- order_line.product.description = false;
|
|
|
- order_line.node.parentNode.removeChild(order_line.node);
|
|
|
- }
|
|
|
- },
|
|
|
- rerender_orderline: function(order_line){
|
|
|
- var node = order_line.node;
|
|
|
- var replacement_line = this.render_orderline(order_line);
|
|
|
- node.parentNode.replaceChild(replacement_line,node);
|
|
|
- },
|
|
|
- // overriding the openerp framework replace method for performance reasons
|
|
|
- replace: function($target){
|
|
|
- this.renderElement();
|
|
|
- var target = $target[0];
|
|
|
- target.parentNode.replaceChild(this.el,target);
|
|
|
- },
|
|
|
- renderElement: function(scrollbottom){
|
|
|
- this.pos_widget.numpad.state.reset();
|
|
|
-
|
|
|
- var order = this.pos.get('selectedOrder');
|
|
|
- var orderlines = order.get('orderLines').models;
|
|
|
-
|
|
|
- var el_str = openerp.qweb.render('OrderWidget',{widget:this, order:order, orderlines:orderlines});
|
|
|
-
|
|
|
- var el_node = document.createElement('div');
|
|
|
- el_node.innerHTML = _.str.trim(el_str);
|
|
|
- el_node = el_node.childNodes[0];
|
|
|
-
|
|
|
-
|
|
|
- var list_container = el_node.querySelector('.orderlines');
|
|
|
- for(var i = 0, len = orderlines.length; i < len; i++){
|
|
|
- var orderline = this.render_orderline(orderlines[i]);
|
|
|
- list_container.appendChild(orderline);
|
|
|
- }
|
|
|
-
|
|
|
- if(this.el && this.el.parentNode){
|
|
|
- this.el.parentNode.replaceChild(el_node,this.el);
|
|
|
- }
|
|
|
- this.el = el_node;
|
|
|
- this.update_summary();
|
|
|
-
|
|
|
- if(scrollbottom){
|
|
|
- this.el.querySelector('.order-scroller').scrollTop = 100 * orderlines.length;
|
|
|
- }
|
|
|
- },
|
|
|
- update_summary: function(){
|
|
|
- var order = this.pos.get('selectedOrder');
|
|
|
- var total = order ? order.getTotalTaxIncluded() : 0;
|
|
|
- var taxes = order ? total - order.getTotalTaxExcluded() : 0;
|
|
|
-
|
|
|
- this.el.querySelector('.summary .total > .value').textContent = this.format_currency(total);
|
|
|
- this.el.querySelector('.summary .total .subentry .value').textContent = this.format_currency(taxes);
|
|
|
-
|
|
|
- },
|
|
|
- });
|
|
|
-
|
|
|
-
|
|
|
- // **************************************************************************
|
|
|
};
|