Explorar o código

[ADD] Insercion de productos en el orderline

Rodney Elpidio Enciso Arias %!s(int64=6) %!d(string=hai) anos
pai
achega
c530a3352c
Modificáronse 2 ficheiros con 241 adicións e 5 borrados
  1. 183 4
      static/src/js/widget.js
  2. 58 1
      static/src/xml/view.xml

+ 183 - 4
static/src/js/widget.js

@@ -117,12 +117,191 @@ function pos_customize_product_pack_widget(instance, module){
         renderElement: function(){
             var self = this;
             this._super();
-            var ProductPackList = [];
             $("button", this.$el).click(function(e){
-                var product = self.pos.get('selectedOrder').selected_orderline.product;
-                console.log(product);
-                console.log(self.model_product);
+                var order = self.pos.get('selectedOrder');
+                var selectedline = self.pos.get('selectedOrder').selected_orderline;
+                var product = self.pos.get('selectedOrder').selected_orderline.product;                
+                if(product.description == false){
+                    var ProductPackList = [];
+                    ProductPackList.push({
+                        product_parent_id : product.id,
+                        product_id : self.model_product.id,
+                        product_name : ' ■ Sin ' + self.model_product.name,
+                    });
+                }else{
+                    var ProductPackList = product.description;
+                    ProductPackList.push({
+                        product_parent_id : product.id,
+                        product_id : self.model_product.id,
+                        product_name : ' ■ Sin ' + self.model_product.name,
+                    });
+                }
+                product.description = ProductPackList; 
+                self.pos_widget.screen_selector.set_current_screen('products');
+                return self.pos_widget.order_widget.rerender_orderline(selectedline);
             });
         }
     });
+
+
+    // **************************************************************************
+
+    var OrderWidgetSuper = module.OrderWidget;
+    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){
+            console.log(orderline);
+            var prueba = [{id:'algo',name:'algo1'}];
+            var el_str  = openerp.qweb.render('Orderline',{widget:this, line:orderline, list:prueba});
+            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);
+
+        },
+    });
+
+
+    // **************************************************************************
 };

+ 58 - 1
static/src/xml/view.xml

@@ -30,8 +30,65 @@
     <t t-name="PackModalButton">
         <span class="control-button order-pack-modal">
             <i class="fa fa-print"></i>
-            Quitar Ingrediente
+            Ingredientes
         </span>
     </t>
 
+    <t t-name="Orderline">
+        <li t-attf-class="orderline #{ line.selected ? 'selected' : '' }">
+            <span class="product-name">
+                <t t-esc="line.get_product().display_name"/>
+            </span>
+            <span class="price">
+                <t t-esc="widget.format_currency(line.get_display_price())"/>
+            </span>
+            <ul class="info-list">
+                <t t-if="line.get_quantity_str() !== '1' || line.selected ">
+                    <li class="info">
+                        <em>
+                            <t t-esc="line.get_quantity_str()" />
+                        </em>
+                        <t t-esc="line.get_unit().name" />
+                        at
+                        <t t-esc="widget.format_currency(line.get_unit_price(),'Product Price')" />
+                        /
+                        <t t-esc="line.get_unit().name" />
+                    </li>
+                </t>
+                <t t-if="line.get_discount_str() !== '0'">
+                    <li class="info">
+                        With a
+                        <em>
+                            <t t-esc="line.get_discount_str()" />%
+                        </em>
+                        discount
+                    </li>
+                </t>
+                <div class="container">
+                    <br/>
+                    <t t-="line.get_product().description !== false">
+                        <table>
+                            <tbody>
+                                <t t-foreach="line.get_product().description" t-as="item">
+                                    <tr>
+                                        <td>
+                                            <t t-esc="item.product_name"/>        
+                                        </td>
+                                    </tr>
+                                </t>
+                                <!-- <t t-foreach="list" t-as="item">
+                                    <tr>
+                                        <td>
+                                            <t t-esc="item.name"/>        
+                                        </td>
+                                    </tr>
+                                </t> -->
+                            </tbody>
+                        </table>  
+                    </t>
+                </div>
+            </ul>
+        </li>
+    </t>
+
 </templates>