|
@@ -0,0 +1,255 @@
|
|
|
+function ep_pos_screens(instance,module)
|
|
|
+{
|
|
|
+ var QWeb = instance.web.qweb;
|
|
|
+ var _t = instance.web._t;
|
|
|
+
|
|
|
+ var round_di = instance.web.round_decimals;
|
|
|
+ var round_pr = instance.web.round_precision;
|
|
|
+
|
|
|
+ module.PaymentScreenWidget=module.PaymentScreenWidget.extend(
|
|
|
+ {
|
|
|
+ init:function(parent,options)
|
|
|
+ {
|
|
|
+ var self=this;
|
|
|
+
|
|
|
+ this._super(parent,options);
|
|
|
+ this.line_click_handler = function(event){
|
|
|
+ var node = this;
|
|
|
+ self.pos.get('selectedOrder').curr_input_selected=false;
|
|
|
+ while(node && !node.classList.contains('paymentline')){
|
|
|
+ node = node.parentNode;
|
|
|
+ }
|
|
|
+ if(node){
|
|
|
+ self.pos.get('selectedOrder').selectPaymentline(node.line);
|
|
|
+ }
|
|
|
+ };
|
|
|
+ },
|
|
|
+ findWithAttr: function(array, attr, value)
|
|
|
+ {
|
|
|
+ for(var i = 0; i < array.length; i += 1)
|
|
|
+ {
|
|
|
+ if(array[i][attr] === value)
|
|
|
+ return i;
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ format_foreign: function(amount,currency,precision)
|
|
|
+ {
|
|
|
+ var decimals = currency.decimals;
|
|
|
+
|
|
|
+ if (precision && (typeof this.pos.dp[precision]) !== undefined) {
|
|
|
+ decimals = this.pos.dp[precision];
|
|
|
+ }
|
|
|
+ if (typeof amount === 'number') {
|
|
|
+ amount = round_di(amount,decimals).toFixed(decimals);
|
|
|
+ amount = openerp.instances[this.session.name].web.format_value(round_di(amount, decimals), { type: 'float', digits: [69, decimals]});
|
|
|
+ }
|
|
|
+
|
|
|
+ if (currency.position === 'after') {
|
|
|
+ return amount + ' ' + (currency.symbol || '');
|
|
|
+ } else {
|
|
|
+ return (currency.symbol || '') + ' ' + amount;
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ set_foreign_values: function()
|
|
|
+ {
|
|
|
+ var self=this;
|
|
|
+ var currentOrder=self.pos.get('selectedOrder');
|
|
|
+
|
|
|
+ var currency_id=currentOrder.foreign_currency.id;
|
|
|
+ var name=currentOrder.foreign_currency.name;
|
|
|
+ var rate_silent=currentOrder.foreign_currency.rate_silent;
|
|
|
+ var decimals=currentOrder.foreign_currency.decimals;
|
|
|
+
|
|
|
+ if (self.pos.config.display_conversion)
|
|
|
+ // '1 '+self.pos.currency.name+' = '+
|
|
|
+ self.$('#conversion_rate').html('Cambio de ' + name + ' = ' + rate_silent + ' ');
|
|
|
+
|
|
|
+
|
|
|
+ self.$('#currency_value_label').html('Total en '+ name + ':');
|
|
|
+ self.$('#foreign_input_label').html('Pagado en '+ name + ':');
|
|
|
+ self.$('#currency_value').html(self.format_foreign(currentOrder.currency_total,currentOrder.foreign_currency));
|
|
|
+ self.$('#foreign_change_label').html('Cambio en ' + name + ':');
|
|
|
+ self.$('#foreign_change_value').html(self.format_foreign(0,currentOrder.foreign_currency));
|
|
|
+ },
|
|
|
+
|
|
|
+ show: function()
|
|
|
+ {
|
|
|
+ this._super();
|
|
|
+ var self = this;
|
|
|
+ if (self.pos.config.multi_currency_enable)
|
|
|
+ {
|
|
|
+ currentOrder=self.pos.get('selectedOrder');
|
|
|
+ self.$('#curr_input').focus(function(e){
|
|
|
+ if (this.value!='')
|
|
|
+ $(this).select();
|
|
|
+ if(self.numpad_state){
|
|
|
+ self.numpad_state.reset();
|
|
|
+ }
|
|
|
+ currentOrder.curr_input_selected=true;
|
|
|
+
|
|
|
+ e.stopImmediatePropagation();
|
|
|
+ });
|
|
|
+ self.$('#toggle_multi_currency').change(function(e)
|
|
|
+ {
|
|
|
+ if (self.pos.currency_list.length==0)
|
|
|
+ {
|
|
|
+ self.pos_widget.screen_selector.show_popup('error',{
|
|
|
+ message: 'No Foreign Currency found !',
|
|
|
+ comment: 'No foreign currencies have been defined. Either set the parameter to fetch from master or define them manually in the POS session configuration.'
|
|
|
+ });
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ currentOrder.multi_currency_checked=self.$('#toggle_multi_currency').prop("checked");
|
|
|
+ if (currentOrder.multi_currency_checked)
|
|
|
+ {
|
|
|
+ self.$('#multi_currency').show();
|
|
|
+ self.$('#foreign_change_div').show();
|
|
|
+ self.$('#curr_input').focus();
|
|
|
+ if (self.$('#curr_input').val()!='')
|
|
|
+ self.$('#curr_input').select();
|
|
|
+ currentOrder.curr_input_selected=true;
|
|
|
+ if(self.numpad_state){
|
|
|
+ self.numpad_state.reset();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ self.$('#multi_currency').hide();
|
|
|
+ self.$('#foreign_change_div').hide();
|
|
|
+ currentOrder.curr_input_selected=false;
|
|
|
+ self.focus_selected_line();
|
|
|
+ }
|
|
|
+
|
|
|
+ e.stopImmediatePropagation();
|
|
|
+ });
|
|
|
+
|
|
|
+ self.$('#toggle_multi_currency').prop("checked",currentOrder.multi_currency_checked);
|
|
|
+
|
|
|
+ if(currentOrder.multi_currency_checked && currentOrder.foreign_currency)
|
|
|
+ {
|
|
|
+ self.$('#curr_input').trigger('keyup');
|
|
|
+ }
|
|
|
+ var foreign_decimals=currentOrder.foreign_currency.decimals;
|
|
|
+ var foreign_currency_rate=currentOrder.foreign_currency.rate_silent;
|
|
|
+ // Modificacion
|
|
|
+ currentOrder.currency_total=round_di(currentOrder.getTotalTaxIncluded()/foreign_currency_rate,foreign_decimals).toFixed(foreign_decimals);
|
|
|
+
|
|
|
+ self.set_foreign_values();
|
|
|
+ if (currentOrder.currency_paid==0)
|
|
|
+ self.$('#curr_input').val('');
|
|
|
+ else
|
|
|
+ self.$('#curr_input').val(currentOrder.currency_paid);
|
|
|
+
|
|
|
+ self.$('#curr_input').keyup(function(e)
|
|
|
+ {
|
|
|
+ currentOrder.currency_paid=self.$('#curr_input').val();
|
|
|
+ var line = currentOrder.selected_paymentline;
|
|
|
+ if (line==undefined)
|
|
|
+ {
|
|
|
+ self.pos_widget.screen_selector.show_popup('error',{
|
|
|
+ message: 'No Payment Line selected !',
|
|
|
+ comment: 'Please selected the payment line you would like the converted currency to display'
|
|
|
+ });
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ converted_value=round_di(this.value*currentOrder.foreign_currency.rate_silent,self.pos.currency.decimals).toFixed(self.pos.currency.decimals);
|
|
|
+ line.set_amount(converted_value);
|
|
|
+ self.$('.paymentline.selected input').val(converted_value);
|
|
|
+
|
|
|
+ e.stopImmediatePropagation();
|
|
|
+ });
|
|
|
+
|
|
|
+ self.$("#currency_selection").change(function(e)
|
|
|
+ {
|
|
|
+ var currentOrder=self.pos.get('selectedOrder');
|
|
|
+ var selected_currency=parseInt($(this).val());
|
|
|
+
|
|
|
+ selected_id=self.findWithAttr(self.pos.currency_list, 'id', selected_currency);
|
|
|
+ currentOrder.foreign_currency=$.extend({}, self.pos.currency_list[selected_id]);
|
|
|
+
|
|
|
+ var foreign_currency_rate=currentOrder.foreign_currency.rate_silent;
|
|
|
+
|
|
|
+ currentOrder.currency_total=round_di(currentOrder.getTotalTaxIncluded()/foreign_currency_rate,foreign_decimals).toFixed(foreign_decimals);
|
|
|
+ self.$('#curr_input').val(0);
|
|
|
+
|
|
|
+ var line = currentOrder.selected_paymentline;
|
|
|
+ if (line==undefined)
|
|
|
+ {
|
|
|
+ self.$('.paymentline input').val(0);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ line.set_amount(0);
|
|
|
+ self.$('.paymentline.selected input').val(0);
|
|
|
+
|
|
|
+ self.set_foreign_values();
|
|
|
+
|
|
|
+ e.stopImmediatePropagation();
|
|
|
+ });
|
|
|
+
|
|
|
+ self.$("#currency_selection").val(currentOrder.foreign_currency.id);
|
|
|
+ self.$('#toggle_multi_currency').trigger('change');
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ add_paymentline: function(line){
|
|
|
+ this._super(line);
|
|
|
+ this.pos.get('selectedOrder').curr_input_selected=false;
|
|
|
+ },
|
|
|
+
|
|
|
+ set_value: function(val) {
|
|
|
+
|
|
|
+ var self=this;
|
|
|
+ var curr_input_selected=this.pos.get('selectedOrder').curr_input_selected;
|
|
|
+ if (curr_input_selected)
|
|
|
+ {
|
|
|
+ var foreign_decimals=currentOrder.foreign_currency.decimals;
|
|
|
+ value=round_di(val,foreign_decimals).toFixed(foreign_decimals);
|
|
|
+ self.$('#curr_input').val(value);
|
|
|
+ self.$('#curr_input').trigger('keyup');
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var selected_line =this.pos.get('selectedOrder').selected_paymentline;
|
|
|
+ if(selected_line){
|
|
|
+ selected_line.set_amount(val);
|
|
|
+ selected_line.node.querySelector('input').value = selected_line.amount.toFixed(2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ update_payment_summary: function()
|
|
|
+ {
|
|
|
+ this._super();
|
|
|
+
|
|
|
+ var self=this;
|
|
|
+ var currentOrder=self.pos.get('selectedOrder');
|
|
|
+
|
|
|
+ if(self.pos.config.multi_currency_enable && currentOrder.foreign_currency)
|
|
|
+ {
|
|
|
+ var paidTotal = currentOrder.getPaidTotal();
|
|
|
+ var dueTotal = currentOrder.getTotalTaxIncluded();
|
|
|
+ var remaining = dueTotal > paidTotal ? dueTotal - paidTotal : 0;
|
|
|
+ var change = paidTotal > dueTotal ? paidTotal - dueTotal : 0;
|
|
|
+
|
|
|
+ var fc=currentOrder.foreign_currency;
|
|
|
+ var rate=fc.rate_silent;
|
|
|
+ var decimals=fc.decimals;
|
|
|
+
|
|
|
+ var converted_value=round_di(change/rate,decimals).toFixed(decimals);
|
|
|
+
|
|
|
+ currentOrder.currency_change=converted_value;
|
|
|
+ self.$('#foreign_change_value').html(self.format_foreign(converted_value,fc));
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ get_currency_selection:function()
|
|
|
+ {
|
|
|
+ var self=this;
|
|
|
+ var currentOrder=this.pos.get('selectedOrder');
|
|
|
+ return currentOrder.pos.currency_list[0];
|
|
|
+ },
|
|
|
+ });
|
|
|
+}
|