Browse Source

[FIX] correcion en el orderlines

Rodney Elpidio Enciso Arias 6 years ago
parent
commit
63ce051bcd
3 changed files with 98 additions and 200 deletions
  1. 55 0
      static/src/js/models.js
  2. 30 185
      static/src/js/widget.js
  3. 13 15
      static/src/xml/view.xml

+ 55 - 0
static/src/js/models.js

@@ -31,5 +31,60 @@ function pos_customize_product_pack_models(instance, module){
             self.product_pack_lines = product_pack_lines;
         },
     });
+
+    var OrderSuper = module.Order;
+    module.Order = module.Order.extend({
+        addProduct: function(product, options){
+            if(this._printed){
+                this.destroy();
+                return this.pos.get('selectedOrder').addProduct(product, options);
+            }
+            options = options || {};
+            var attr = JSON.parse(JSON.stringify(product));
+            attr.pos = this.pos;
+            attr.order = this;
+            var line = new module.Orderline({}, {pos: this.pos, order: this, product: product});
+
+            if(options.quantity !== undefined){
+                line.set_quantity(options.quantity);
+            }
+            if(options.price !== undefined){
+                line.set_unit_price(options.price);
+            }
+            if(options.discount !== undefined){
+                line.set_discount(options.discount);
+            }
+
+            var last_orderline = this.getLastOrderline();
+            if(last_orderline != undefined){
+                var packlines = last_orderline.product.pack_line_ids;
+                if(last_orderline && last_orderline.can_be_merged_with(line) && options.merge !== false && packlines.length == 0){
+                    last_orderline.merge(line);
+                }else{
+                   this.get('orderLines').add(line); 
+                }
+            }else{
+                this.get('orderLines').add(line);
+            }
+            this.selectLine(this.getLastOrderline());
+        },
+    });
+
+    var orderline_id = 1;
+    module.Orderline = module.Orderline.extend({
+        initialize: function(attr,options){
+            this.pos = options.pos;
+            this.order = options.order;
+            this.product = options.product;
+            this.price   = options.product.price;
+            this.set_quantity(1);
+            this.discount = 0;
+            this.discountStr = '0';
+            this.type = 'unit';
+            this.selected = false;
+            this.id       = orderline_id++;
+            this.pack_lines = [];
+        },
+    });
 };
 

+ 30 - 185
static/src/js/widget.js

@@ -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);
-
-        },
-    });
-
-
-    // **************************************************************************
 };

+ 13 - 15
static/src/xml/view.xml

@@ -66,22 +66,20 @@
                 </t>
                 <div class="container">
                     <br/>
-                    <t t-if="line.get_product().description !== false">
-                        <table>
-                            <tbody>
-                                <t t-foreach="line.get_product().description" t-as="item">
-                                    <t t-if="line.order.uid == item.order and line.id == item.line_id">
-                                        <tr>
-                                            <td></td>
-                                            <td>
-                                                <t t-esc="item.product_name"/>
-                                            </td>
-                                        </tr>
-                                    </t>
+                    <table>
+                        <tbody>
+                            <t t-foreach="line.pack_lines" t-as="item">
+                                <t t-if="line.order.uid == item.order and line.id == item.line_id">
+                                    <tr>
+                                        <td></td>
+                                        <td>
+                                            <t t-esc="item.product_name"/>
+                                        </td>
+                                    </tr>
                                 </t>
-                            </tbody>
-                        </table>
-                    </t>
+                            </t>
+                        </tbody>
+                    </table>
                 </div>
             </ul>
         </li>