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