You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

140 lines
4.8 KiB

/*
Copyright (C) 2015-Today GRAP (http://www.grap.coop)
@author: Sylvain LE GAL (https://twitter.com/legalsylvain)
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
*/
"use strict";
openerp.pos_tare = function(instance){
var module = instance.point_of_sale;
var _t = instance.web._t;
/*************************************************************************
Extend : Widget 'PosWidget'
*/
module.PosWidget = module.PosWidget.extend({
build_widgets: function(){
this._super();
// Add a new screen 'TareScreenWidget'
this.tare_screen = new module.TareScreenWidget(this,{});
this.tare_screen.appendTo(this.$('.screens'));
this.screen_selector.add_screen('tare', this.tare_screen);
},
});
/*************************************************************************
Extend : Widget 'ScaleScreenWidget'
*/
module.ScaleScreenWidget = module.ScaleScreenWidget.extend({
next_screen: 'tare',
// Overwrite 'show' function to display TareScreenWidget
show: function(){
this.pos_widget.screen_selector.set_current_screen(this.next_screen,{product: this.get_product()});
},
});
/*************************************************************************
Define : New Widget 'TareScreenWidget'
*/
module.TareScreenWidget = module.ScreenWidget.extend({
template:'TareScreenWidget',
next_screen: 'products',
previous_screen: 'products',
show_leftpane: false,
show: function(){
this._super();
this.renderElement();
var self = this;
// Initialize values
this.net_weight = 0;
this.current_product = this.get_product();
this.$('#product-name').html(this.get_product().display_name);
this.$('#unit-price').html(this.format_currency(this.get_product().price));
// Add a 'next' Button
this.add_action_button({
label: _t('Back'),
icon: '/point_of_sale/static/src/img/icons/png48/go-previous.png',
click: function(){
self.pos_widget.screen_selector.set_current_screen(self.previous_screen);
},
});
this.order_button = this.add_action_button({
label: _t('Order'),
icon: '/point_of_sale/static/src/img/icons/png48/go-next.png',
click: function() { self.order_product_click(); },
});
// Initialize Display
this.onChangeGrossWeightTareWeight();
this.$('#gross-weight').keyup(function(event){
self.onChangeGrossWeightTareWeight(event);
});
this.$('#tare-weight').keyup(function(event){
self.onChangeGrossWeightTareWeight(event);
});
// Focus on Gross Weight
this.$('#gross-weight').focus();
},
sanitize_value: function (input_name){
var res = this.$(input_name)[0].value.replace(',', '.').trim();
if (isNaN(res)){
this.$(input_name).css("background-color", "#F66");
}
else{
this.$(input_name).css("background-color", "#FFF");
}
return res;
},
onChangeGrossWeightTareWeight: function(event){
var gross_weight = this.sanitize_value('#gross-weight');
var tare_weight = this.sanitize_value('#tare-weight');
var ok = false;
if (!isNaN(gross_weight) && (gross_weight !== '') && (parseFloat(gross_weight) !== 0) && !isNaN(tare_weight)){
this.net_weight = gross_weight - tare_weight;
var price = this.get_product().price * this.net_weight;
this.current_net_weight_text = this.net_weight.toFixed(3);
this.current_total_price_text = this.format_currency(price);
ok = true;
}
else{
this.current_net_weight_text = '/';
this.current_total_price_text = '/';
}
this.$('#net-weight').html(this.current_net_weight_text);
this.$('#total-price').html(this.current_total_price_text);
this.order_button.set_disabled(!ok);
},
get_product: function(){
var ss = this.pos_widget.screen_selector;
if(ss){
return ss.get_current_screen_param('product');
}else{
return undefined;
}
},
order_product_click: function(){
this.pos.get('selectedOrder').addProduct(this.current_product,{ quantity:this.net_weight });
this.pos_widget.screen_selector.set_current_screen(this.next_screen);
},
});
};