/* © 2020 Le Filament () License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). */ odoo.define('vracoop_pos_free_balance_v2.container_balance', function (require) { "use strict"; var chrome = require('point_of_sale.chrome'); var gui = require('point_of_sale.gui'); var models = require('point_of_sale.models'); var screens = require('point_of_sale.screens'); var popups = require('point_of_sale.popups'); var container = require('pos_container.container'); var models_and_db = require('pos_container.models_and_db'); var core = require('web.core'); var rpc = require('web.rpc'); var utils = require('web.utils'); var QWeb = core.qweb; var _t = core._t; var round_pr = utils.round_precision; var action_button_classes = []; screens.ScreenWidget.include({ show: function(){ var self = this; if (this.pos.config.is_balance_free) { var queue = this.pos.proxy_queue; var container = this.gui.get_current_screen_param('container'); // format price var scale_screen = this.gui.screen_instances['balancescale']; var price = scale_screen.format_price(scale_screen.get_product_price()); // Problème de tare if (container) { // format tare var tare = this.format_tare(container); queue.schedule(function () { return self.pos.proxy.scale_read_data_price_tare(price, tare).then(function (scale_answer) { self.set_weight(scale_answer.weight); if ((scale_answer.error === '30' || scale_answer.error === '31') && scale_answer.weight !== 0) { self.set_weight(0); self.pos.proxy.reset_tare(); } }); }, {duration: 500, repeat: true}); } else { queue.schedule(function () { return self.pos.proxy.scale_read_data_price(price).then(function (scale_answer) { self.set_weight(scale_answer.weight); // self.set_price(scale_answer.price); if ((scale_answer.error === '30' || scale_answer.error === '31') && scale_answer.weight !== 0) { self.set_weight(0); } }); }, {duration: 500, repeat: true}); } } this._super(); }, format_tare: function (container) { var tare = (Math.abs(container.weight) * 1000).toString(); tare = ("0000" + tare).slice(-4); return tare; }, set_weight: function(weight){ var scale_screen = this.gui.screen_instances['balancescale']; scale_screen.weight = weight; scale_screen.$('.weight').text(scale_screen.get_product_weight_string()); scale_screen.$('.computed-price').text(scale_screen.format_currency(scale_screen.get_product_price() * 0)); scale_screen.$('.weight-brut').text('0.000 kg'); var container_text = '0.000 kg' scale_screen.$('.tare-container').text(container_text); }, set_price: function (price) { var scale_screen = this.gui.screen_instances['balancescale']; scale_screen.price = price; scale_screen.$('.computed-price').text(scale_screen.format_currency(0)); }, barcode_container_action: function(code){ var self = this; if (this.pos.config.is_balance_free){ if (self.pos.scan_container(code)) { var order = this.pos.get_order(); var selected_orderline = order.get_selected_orderline(); var container = selected_orderline.get_container(); // Vérfification: est-ce qu'un container vient d'être utilisé dans l'heure if (self.pos.scan_container_check(code)){ var transaction = self.pos.scan_container_check(code); this.gui.show_popup('doublon-barcode',{ title: _t('Contenu déjà enregistré récemment:'), transaction: transaction, confirm: function(){ var transaction = self.pos.scan_container_check(code) self.delete_selected_transaction(transaction, code); self.gui.show_screen('products-balance', {container: container}); }, }); } else { self.gui.show_screen('products-balance', {container: container}); } } else { self.gui.show_screen('balancecontainerscale', {barcode: code.base_code}); } } else { this._super(code); } }, delete_selected_transaction: function(transaction, barcode){ var self = this; if (!transaction.id){ self.deleted_transaction(transaction.container_ean13) } else { rpc.query({ model: 'pos.transaction', method: 'unlink', args: [transaction.id], }).then(function(){ self.deleted_transaction(transaction.container_ean13); },function(err,ev){ ev.preventDefault(); var error_body = _t('Your Internet connection is probably down.'); if (err.data) { var except = err.data; error_body = except.arguments && except.arguments[0] || except.message || error_body; } self.gui.show_popup('error',{ 'title': _t('Error: Could not Save Changes'), 'body': error_body, }); } ); } }, deleted_transaction: function(barcode){ var self = this; this.pos.db.remove_transactions([barcode]); }, close: function(){ this._super(); this.pos.proxy_queue.clear(); }, }); var BalanceScaleScreenWidget = screens.ScaleScreenWidget.extend({ template: 'BalanceScaleScreenWidget', next_screen: 'confirmation', previous_screen: 'products-balance', init: function(parent, options){ this._super(parent, options); this.weight_container = 0; this.weight_brut = 0; this.weight = 0; }, set_weight: function(weight){ var container = this.get_container(); this.weight = weight; this.weight_container = container.weight; this.weight_brut = container.weight + this.weight; this.$('.weight').text(this.get_product_weight_string()); this.$('.computed-price').text(this.get_computed_price_string()); this.$('.weight-brut').text(this.get_product_weight_string_brut()); }, show: function(){ var self = this; var queue = this.pos.proxy_queue; this.set_weight(0); this.renderElement(); var container = this.gui.get_current_screen_param('container'); queue.schedule(function () { return self.pos.proxy.reset_weight().then(function () { self.set_weight(0); self.set_price(0); }); }, {duration: 500}); // format price var price = this.format_price(this.get_product_price()); if (container) { // format tare var tare = this.format_tare(container); queue.schedule(function () { return self.pos.proxy.scale_read_data_price_tare(price, tare).then(function (scale_answer) { self.set_weight(scale_answer.weight); self.set_price(scale_answer.price); if ((scale_answer.error === '30' || scale_answer.error === '31') && scale_answer.weight !== 0) { self.gui.show_screen(self.next_screen); // add product *after* switching screen to scroll properly self.order_product(); self.pos.proxy.reset_tare(); } }); }, {duration: 500, repeat: true}); } else { queue.schedule(function () { return self.pos.proxy.scale_read_data_price(price).then(function (scale_answer) { self.set_weight(scale_answer.weight); self.set_price(scale_answer.price); if ((scale_answer.error === '30' || scale_answer.error === '31') && scale_answer.weight !== 0) { self.gui.show_screen(self.next_screen); self.create_transaction(); self.order_product(); } }); }, {duration: 500, repeat: true}); } // this._super(); var self = this; this.$('.next,.add-transaction').click(function(){ self.create_transaction(); }); $("#pos-header-text-peser").removeClass('oe_hidden'); }, get_container: function(){ return this.gui.get_current_screen_param('container'); }, ////////////////////////////// // Ajout fonction Toledo? set_price: function (price) { if (!price) { this.$('.computed-price').text(this.get_computed_price_string()); } else { this.price = price; //this.$('.price').text(this.format_currency(price)); this.$('.computed-price').text(this.format_currency(price)); } }, get_price: function () { return this.price; }, format_tare: function (container) { var tare = (Math.abs(container.weight) * 1000).toString(); tare = ("0000" + tare).slice(-4); return tare; }, format_price: function (product_price) { var price = (product_price * 1000).toString(); price = ("000000" + price).slice(-6); return price; }, // FIN ////////////////////////////// get_current_container_weight: function(){ var container = this.get_container(); if (container){ return (this.weight_container || 0).toFixed(3) + ' kg'; } else{ '' } }, get_current_container_name: function(){ var container = this.get_container(); if (container){ return container.name; } else{ '' } }, get_product_weight_string: function(){ var product = this.get_product(); var defaultstr = (this.weight || 0).toFixed(3) + ' kg'; if(!product || !this.pos){ return defaultstr; } var unit_id = product.uom_id; if(!unit_id){ return defaultstr; } var unit = this.pos.units_by_id[unit_id[0]]; var weight = round_pr(this.weight || 0, unit.rounding); var weightstr = weight.toFixed(Math.ceil(Math.log(1.0/unit.rounding) / Math.log(10) )); weightstr += ' ' + unit.name; return weightstr; }, get_product_weight_string_brut: function(){ var product = this.get_product(); var defaultstr = (this.weight + this.weight_container || 0).toFixed(3) + ' kg'; if(!product || !this.pos){ return defaultstr; } var unit_id = product.uom_id; if(!unit_id){ return defaultstr; } var unit = this.pos.units_by_id[unit_id[0]]; var weight = round_pr(this.weight + this.weight_container || 0, unit.rounding); var weightstr = weight.toFixed(Math.ceil(Math.log(1.0/unit.rounding) / Math.log(10) )); weightstr += ' ' + unit.name; return weightstr; }, hide: function(){ this._super(); $("#pos-header-text-peser").addClass('oe_hidden'); }, create_transaction: function(){ var self = this; var fields = {}; var container = this.get_container(); var product = this.get_product(); var qrcode = ''; var ean13 = ''; var ean13_verif = ''; fields['qrcode'] = qrcode.concat('https://qr.mayam.fr/', container.barcode); fields['container_ean13'] = container.barcode; fields['product_id'] = this.get_product().id; // var product_id = (this.get_product().id).toString(); var product_id = ("00000" + product.default_code.toString()).slice(-5); var weight_str = (this.weight * 1000).toString(); weight_str = ("00000" + weight_str).slice(-5); ean13 = ean13.concat(26,product_id,weight_str,4); var weight_brut_str = (this.weight_brut * 1000).toString(); weight_brut_str = ("00000" + weight_brut_str).slice(-5); ean13_verif = ean13_verif.concat(26,'00999',weight_brut_str,4); var ean13_digit = this.pos.barcode_reader.barcode_parser.sanitize_ean(ean13); var ean13_verif_digit = this.pos.barcode_reader.barcode_parser.sanitize_ean(ean13_verif); fields['ean13'] = ean13_digit; fields['ean13_verif'] = ean13_verif_digit; fields['balance_id'] = this.pos.get_balance_id(); var today = new Date(); var date = today.getFullYear() + '-' + (today.getMonth()+1) + '-' + today.getDate(); var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds(); var date_time = date + ' ' + time; fields['write_date'] = date_time; fields['weight_net'] = this.weight; var pricelist = this._get_active_pricelist(); fields['price_product'] = (product ? product.get_price(pricelist, this.weight) : 0) || 0; fields['price_net'] = (fields['weight_net'] * fields['price_product']).toFixed(2); fields.name = product.display_name; this.pos.push_transaction(fields).then( this.pushed_transaction(fields["ean13"]) ); }, pushed_transaction: function(barcode){ var self = this; // Remise à zero du poids à l'écran // this.set_weight(0); // this.renderElement(); var product = this.get_product(); this.gui.show_screen('confirmation',{product: product}); }, }); gui.define_screen({ 'name':'balancescale', 'widget': BalanceScaleScreenWidget, 'condition': function(){ return this.pos.config.is_balance_free; }, }); /* -------- The Product Screen BALANCE -------- */ var ProductBalanceScreenWidget = screens.ScreenWidget.extend({ template:'ProductBalanceScreenWidget', previous_screen: 'presentation', start: function(){ var self = this; var queue = this.pos.proxy_queue; var container = this.gui.get_current_screen_param('container'); queue.schedule(function () { return self.pos.proxy.reset_weight().then(function () { self.set_weight(0); self.set_price(0); }); }, {duration: 500}); // format price var scale_screen = this.gui.screen_instances['balancescale']; var price = scale_screen.format_price(scale_screen.get_product_price()); // var price = this.format_price(this.get_product_price()); if (container) { // format tare var tare = this.format_tare(container); queue.schedule(function () { return self.pos.proxy.scale_read_data_price_tare(price, tare).then(function (scale_answer) { self.set_weight(scale_answer.weight); self.set_price(scale_answer.price); if ((scale_answer.error === '30' || scale_answer.error === '31') && scale_answer.weight !== 0) { self.set_weight(0); } }); }, {duration: 500, repeat: true}); } else { queue.schedule(function () { return self.pos.proxy.scale_read_data_price(price).then(function (scale_answer) { self.set_weight(scale_answer.weight); self.set_price(scale_answer.price); if ((scale_answer.error === '30' || scale_answer.error === '31') && scale_answer.weight !== 0) { self.set_weight(0); } }); }, {duration: 500, repeat: true}); } // this._super(); this.actionpad = new screens.ActionpadWidget(this,{}); this.actionpad.replace(this.$('.placeholder-ActionpadWidget')); this.numpad = new screens.NumpadWidget(this,{}); this.numpad.replace(this.$('.placeholder-NumpadWidget')); this.order_widget = new screens.OrderWidget(this,{ numpad_state: this.numpad.state, }); this.order_widget.replace(this.$('.placeholder-OrderWidget')); this.product_list_widget = new screens.ProductListWidget(this,{ click_product_action: function(product){ self.click_product(product); }, product_list: this.pos.db.get_product_by_category(0) }); this.product_list_widget.replace(this.$('.placeholder-ProductListWidget')); this.product_categories_widget = new screens.ProductCategoriesWidget(this,{ product_list_widget: this.product_list_widget, }); this.product_categories_widget.replace(this.$('.placeholder-ProductCategoriesWidget')); this.action_buttons = {}; var classes = action_button_classes; for (var i = 0; i < classes.length; i++) { var classe = classes[i]; if ( !classe.condition || classe.condition.call(this) ) { var widget = new classe.widget(this,{}); widget.appendTo(this.$('.control-buttons')); this.action_buttons[classe.name] = widget; } } if (_.size(this.action_buttons)) { this.$('.control-buttons').removeClass('oe_hidden'); } var self = this; var scale_screen = this.gui.screen_instances['balancescale']; scale_screen.$el.removeClass('oe_hidden'); this.product_categories_widget.reset_category(); this.numpad.state.reset(); // Ajout de la fonctionnalité Pesée sans contenant if (this.pos.config.allow_without_container){ $("#add-new-container").removeClass('oe_hidden'); } else { $("#add-new-container").addClass('oe_hidden'); } this.$('.add-new-container').click(function(){ self.gui.show_screen('balancecontainerscale', {barcode: 'CONTAINER'}); }); this.$('.back').click(function(){ self.gui.show_screen('presentation', {container: null}); }); // Ajout pour le pb de tare var container = this.gui.get_current_screen_param('container'); if (container) { this.pos.proxy.reset_tare(); } // Ajout pour le pb de tare $("#pos-header-text-prod").removeClass('oe_hidden'); }, hide: function(){ this._super(); $("#pos-header-text-prod").addClass('oe_hidden'); $("#add-new-container").addClass('oe_hidden'); var screen = this.gui.screen_instances['products-balance']; }, set_weight: function(weight){ this.weight = weight; var scale_screen = this.gui.screen_instances['balancescale']; var container = this.gui.get_current_screen_param('container'); if (container) { scale_screen.weight_container = container.weight; scale_screen.weight_brut = container.weight + scale_screen.weight; } scale_screen.weight = weight; scale_screen.$('.weight').text(scale_screen.get_product_weight_string()); scale_screen.$('.computed-price').text(scale_screen.format_currency(scale_screen.get_product_price() * 0)); scale_screen.$('.weight-brut').text(scale_screen.get_product_weight_string_brut()); if (container){ var container_text = (container.weight || 0).toFixed(3) + ' kg'; } else{ var container_text = '' } scale_screen.$('.tare-container').text(container_text); }, set_price: function (price) { var scale_screen = this.gui.screen_instances['balancescale']; scale_screen.price = price; scale_screen.$('.computed-price').text(scale_screen.format_currency(0)); }, click_product: function(product) { var scale_screen = this.gui.screen_instances['balancescale']; if (scale_screen.weight != 0) { this.create_transaction(product); } }, order_product: function(product, container){ // Replace the orderline if the product is the placeholder // container product. if (container){ var order = this.pos.get_order(); order.add_product(product,{ quantity: this.weight, price: 0.0 }); var orderline = order.get_selected_orderline(); orderline.set_container(container); var old_orderline = this.gui.get_current_screen_param( 'old_orderline'); if (old_orderline){ order.remove_orderline(old_orderline); } orderline.set_quantity(this.weight); orderline.set_gross_weight(this.weight + container.weight); orderline.set_tare_mode('AUTO'); orderline.trigger('change', orderline); } else { this.pos.get_order().add_product(product,{ quantity: this.weight }); } }, show: function(reset){ this._super(); if (reset) { this.product_categories_widget.reset_category(); this.numpad.state.reset(); } if (this.pos.config.iface_vkeyboard && this.chrome.widget.keyboard) { this.chrome.widget.keyboard.connect($(this.el.querySelector('.searchbox input'))); } }, create_transaction: function(product){ var self = this; var fields = {}; var container = this.gui.get_current_screen_param('container'); var scale_screen = this.gui.screen_instances['balancescale']; var qrcode = ''; var ean13 = ''; var ean13_verif = ''; if (container){ fields['qrcode'] = qrcode.concat('https://qr.mayam.fr/', container.barcode); fields['container_ean13'] = container.barcode; } fields['product_id'] = product.id; // var product_id = (this.get_product().id).toString(); var product_id = ("00000" + product.default_code.toString()).slice(-5); var weight_str = (scale_screen.weight * 1000).toString(); weight_str = ("00000" + weight_str).slice(-5); ean13 = ean13.concat(26,product_id,weight_str,4); var weight_brut_str = (scale_screen.weight_brut * 1000).toString(); weight_brut_str = ("00000" + weight_brut_str).slice(-5); ean13_verif = ean13_verif.concat(26,'00999',weight_brut_str,4); var ean13_digit = this.pos.barcode_reader.barcode_parser.sanitize_ean(ean13); var ean13_verif_digit = this.pos.barcode_reader.barcode_parser.sanitize_ean(ean13_verif); fields['ean13'] = ean13_digit; fields['ean13_verif'] = ean13_verif_digit; fields['balance_id'] = this.pos.get_balance_id(); var today = new Date(); var date = today.getFullYear() + '-' + (today.getMonth()+1) + '-' + today.getDate(); var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds(); var date_time = date + ' ' + time; fields['write_date'] = date_time; fields['weight_net'] = scale_screen.weight; if(container){ fields['weight_tare'] = container.weight; } else{ fields['weight_tare'] = 0.0; } var pricelist = scale_screen._get_active_pricelist(); fields['price_product'] = (product ? product.get_price(pricelist, scale_screen.weight) : 0) || 0; fields['price_net'] = (fields['weight_net'] * fields['price_product']).toFixed(2); fields.name = product.display_name; this.pos.push_transaction(fields).then( this.pushed_transaction(fields["ean13"], product, container, fields) ); }, pushed_transaction: function(barcode, product, container, transaction){ var self = this; // Add product on order this.order_product(product, container); // Push order var order = this.pos.get_order(); order.initialize_validation_date(); order.finalized = true; this.pos.push_order(order); this.pos.add_new_order(); this.gui.show_screen( 'confirmation', {product: product, container: container, transaction: transaction}); }, close: function(){ this._super(); if(this.pos.config.iface_vkeyboard && this.chrome.widget.keyboard){ this.chrome.widget.keyboard.hide(); } this.pos.proxy_queue.clear(); }, }); gui.define_screen({ 'name':'products-balance', 'widget': ProductBalanceScreenWidget, 'condition': function(){ return this.pos.config.is_balance_free; }, }); /*--------------------------------------*\ | THE SCALE SCREEN FREE | | BALANCE CONTAINER | \*======================================*/ // The free balance container scale screen // displays the weight of // a new container on the electronic scale. var BalanceContainerScaleScreenWidget = screens.ScaleScreenWidget.extend({ template: 'BalanceContainerScaleScreenWidget', next_screen: 'presentation', previous_screen: 'presentation', init: function(parent, options){ this._super(parent, options); }, show: function(){ var self = this; var queue = this.pos.proxy_queue; var priceStr = '001000'; // bizerba doesn't accept '000000' as unit price this.renderElement(); queue.schedule(function () { return self.pos.proxy.reset_weight().then(function () { self.set_weight(0); }); }, {duration: 500}); queue.schedule(function () { return self.pos.proxy.scale_read_data_price(priceStr).then(function (scale_answer) { self.set_weight(scale_answer.weight); if ((scale_answer.error === '30' || scale_answer.error === '31') && scale_answer.weight !== 0) { self.gui.show_screen(self.next_screen); if (self.pos.config.is_comptoir) { self.create_container(); } } }); }, {duration: 500, repeat: true}); this._super(); var self = this; this.$('.next,.add-container').click(function(){ self.create_container(); }); if(this.pos.config.iface_vkeyboard && this.chrome.widget.keyboard){ this.chrome.widget.keyboard.connect($(this.el.querySelector('.container-name input'))); } $("#pos-header-text-peser").removeClass('oe_hidden'); $("#pos-topheader-scale-cont").removeClass('oe_hidden'); }, hide: function(){ this._super(); $("#pos-header-text-peser").addClass('oe_hidden'); $("#pos-topheader-scale-cont").addClass('oe_hidden'); }, get_product: function(){ return this.pos.get_container_product(); }, create_container: function(){ if (this.weight != 0) { var self = this; var fields = {}; fields['weight'] = this.weight; fields.barcode = this.gui.get_current_screen_param('barcode') || false; fields.name = fields.name || _t('Container'); this.pos.push_container(fields).then( this.pushed_container(fields["barcode"],fields) ); } }, pushed_container: function(barcode,container){ var self = this; if (this.pos.config.is_comptoir) { self.gui.show_screen(self.next_screen); } else{ self.gui.show_popup('confirm-pesee',{ 'title': _t('Merci'), 'body': _t('Contenant ajouté, vous pouvez vous servir'), confirm: function(){ self.gui.show_screen(self.next_screen); }, }); } }, close: function(){ this._super(); if (this.pos.config.iface_vkeyboard && this.chrome.widget.keyboard) { this.chrome.widget.keyboard.hide(); } }, }); gui.define_screen({ 'name':'balancecontainerscale', 'widget': BalanceContainerScaleScreenWidget, 'condition': function(){ return this.pos.config.is_balance_free; }, }); var ConfirmPopupWidgetPesee = popups.extend({ template: 'ConfirmPopupWidgetPesee', }); gui.define_popup({name:'confirm-pesee', widget: ConfirmPopupWidgetPesee}); // The initial screen that allows you to scan container var PresentationScreenWidget = screens.ScreenWidget.extend({ template: 'PresentationScreenWidget', next_screen: 'products-balance', // Ignore products, discounts, and client barcodes barcode_product_action: function(code){}, barcode_discount_action: function(code){}, barcode_client_action: function(code){}, init: function(parent, options) { this._super(parent, options); this.transactions = []; this.editing = false; }, // this method shows the screen and sets up all the widget related to this screen. Extend this method // if you want to alter the behavior of the screen. show: function(){ this._super(); var self = this; var scale_screen = this.gui.screen_instances['balancescale']; scale_screen.$el.removeClass('oe_hidden'); var screen = this.gui.screen_instances['products-balance']; screen.$el.removeClass('oe_hidden'); $("#pos-header-text-selec").removeClass('oe_hidden'); $("#pos-header-text-confirm").addClass('oe_hidden'); $("#add-new-container").addClass('oe_hidden'); // Ajout de la fonctionnalité Pesée sans contenant if (this.pos.config.allow_without_container){ this.$('.bypass-container').removeClass('oe_hidden'); } else { this.$('.bypass-container').addClass('oe_hidden'); } this.$('.bypass-container').click(function(){ self.gui.show_screen('products-balance'); }); }, // this methods hides the screen. It's not a good place to put your cleanup stuff as it is called on the // POS initialization. hide: function(){ this._super(); var screen = this.gui.screen_instances['products-balance']; screen.$el.addClass('oe_hidden'); $("#pos-header-text-selec").addClass('oe_hidden'); if (this.pos.config.allow_without_container){ $("#add-new-container").removeClass('oe_hidden'); } }, }); gui.define_screen({ 'name': 'presentation', 'widget': PresentationScreenWidget, 'condition': function(){ return this.pos.config.is_balance_free; }, }); // Screen confirmation de la pesée var ConfirmationScreen = screens.ScreenWidget.extend({ template: 'ConfirmationScreen', next_screen: 'presentation', // previous_screen: 'presentation', show: function(){ this._super(); var self = this; this.renderElement(); var scale_screen = this.gui.screen_instances['balancescale']; scale_screen.$el.removeClass('oe_hidden'); this.$('.next,.back-presentation').click(function(){ // self.set_weight(0); self.set_price(0); self.pos.proxy.reset_tare(); self.gui.show_screen('presentation', {container: null}); }); $("#pos-header-text-confirm").removeClass('oe_hidden'); var container = this.gui.get_current_screen_param('container'); if (container) { this.pos.proxy.reset_tare(); } // A remettre // setTimeout(function(){ // self.set_price(0); // self.pos.proxy.reset_tare(); // self.gui.show_screen('presentation'); // }, 5000); // A remettre }, set_weight: function(weight){ var scale_screen = this.gui.screen_instances['balancescale']; var container = this.gui.get_current_screen_param('container'); if (container){ var container_weight = container.weight; } else{ var container_weight = 0.0 } scale_screen.weight_container = container_weight; scale_screen.weight = weight; scale_screen.weight_brut = container_weight + scale_screen.weight; scale_screen.$('.weight').text(scale_screen.get_product_weight_string()); scale_screen.$('.computed-price').text(scale_screen.get_computed_price_string()); scale_screen.$('.weight-brut').text(scale_screen.get_product_weight_string_brut()); if (container){ var container_text = (container.weight || 0).toFixed(3) + ' kg'; } else{ var container_text = '' } scale_screen.$('.tare-container').text(container_text); }, set_price: function (price) { var scale_screen = this.gui.screen_instances['balancescale']; scale_screen.price = price; scale_screen.$('.computed-price').text(scale_screen.format_currency(0)); }, _get_active_pricelist: function(){ var current_order = this.pos.get_order(); var current_pricelist = this.pos.default_pricelist; if (current_order) { current_pricelist = current_order.pricelist; } return current_pricelist; }, get_product_name: function(){ var product = this.gui.get_current_screen_param('product'); return (product ? product.display_name : undefined) || 'Unnamed Product'; }, get_product_price: function(){ var product = this.gui.get_current_screen_param('product'); var pricelist = this._get_active_pricelist(); return (product ? product.get_price(pricelist, 1) : 0) || 0; }, get_product_uom: function(){ var product = this.gui.get_current_screen_param('product'); if(product){ return this.pos.units_by_id[product.uom_id[0]].name; }else{ return ''; } }, }); gui.define_screen({ 'name': 'confirmation', 'widget': ConfirmationScreen, 'condition': function(){ return this.pos.config.is_balance_free; }, }); // Add the Presentation to the GUI, and set it as the default screen chrome.Chrome.include({ build_widgets: function(){ this._super(); if (this.pos.config.is_balance_free) { this.gui.set_startup_screen('presentation'); } }, build_chrome: function() { this._super(); var self = this; if (this.pos.config.is_balance_free) { this.$('.pos-topheader').addClass('oe_hidden'); this.$('.close-button-bls').click(function(){ self.click_close(); }); } else { this.$('.pos-topheader-title').addClass('oe_hidden'); } }, click_close: function() { var self = this; clearTimeout(this.confirmed); this.gui.close(); }, }); gui.Gui.include({ show_saved_screen: function(order,options) { this._super(); options = options || {}; this.close_popup(); this.show_screen(this.startup_screen); }, }); // We need to modify the OrderSelector to hide itself when we're on // the floor plan ? chrome.OrderSelectorWidget.include({ hide: function(){ this.$el.addClass('oe_invisible'); }, show: function(){ this.$el.removeClass('oe_invisible'); }, renderElement: function(){ var self = this; this._super(); if (this.pos.config.is_balance_free) { if (this.pos.get_order()) { this.$el.removeClass('oe_invisible'); } else { this.$el.addClass('oe_invisible'); } } }, }); var CheckBarcodePopupDoublon = popups.extend({ template:'CheckBarcodePopupDoublon', show: function(options){ var self = this; options = options || {}; this.name = options.transaction.name ; this.weight_net = options.transaction.weight_net.toFixed(3) ; this.price_product = options.transaction.price_product.toFixed(2); this.price_net = options.transaction.price_net; this._super(options); this.renderElement(); }, }); gui.define_popup({name:'doublon-barcode', widget: CheckBarcodePopupDoublon}); return { ProductBalanceScreenWidget: ProductBalanceScreenWidget, BalanceContainerScaleScreenWidget: BalanceContainerScaleScreenWidget, PresentationScreenWidget: PresentationScreenWidget, BalanceScaleScreenWidget: BalanceScaleScreenWidget, CheckBarcodePopupDoublon: CheckBarcodePopupDoublon, ConfirmPopupWidgetPesee: ConfirmPopupWidgetPesee, ConfirmationScreen: ConfirmationScreen, }; });