screens.js 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. function ep_pos_screens(instance,module)
  2. {
  3. var QWeb = instance.web.qweb;
  4. var _t = instance.web._t;
  5. var round_di = instance.web.round_decimals;
  6. var round_pr = instance.web.round_precision;
  7. module.PaymentScreenWidget=module.PaymentScreenWidget.extend(
  8. {
  9. init:function(parent,options)
  10. {
  11. var self=this;
  12. this._super(parent,options);
  13. this.line_click_handler = function(event){
  14. var node = this;
  15. self.pos.get('selectedOrder').curr_input_selected=false;
  16. while(node && !node.classList.contains('paymentline')){
  17. node = node.parentNode;
  18. }
  19. if(node){
  20. self.pos.get('selectedOrder').selectPaymentline(node.line);
  21. }
  22. };
  23. },
  24. findWithAttr: function(array, attr, value)
  25. {
  26. for(var i = 0; i < array.length; i += 1)
  27. {
  28. if(array[i][attr] === value)
  29. return i;
  30. }
  31. },
  32. format_foreign: function(amount,currency,precision)
  33. {
  34. var decimals = currency.decimals;
  35. if (precision && (typeof this.pos.dp[precision]) !== undefined) {
  36. decimals = this.pos.dp[precision];
  37. }
  38. if (typeof amount === 'number') {
  39. amount = round_di(amount,decimals).toFixed(decimals);
  40. amount = openerp.instances[this.session.name].web.format_value(round_di(amount, decimals), { type: 'float', digits: [69, decimals]});
  41. }
  42. if (currency.position === 'after') {
  43. return amount + ' ' + (currency.symbol || '');
  44. } else {
  45. return (currency.symbol || '') + ' ' + amount;
  46. }
  47. },
  48. set_foreign_values: function()
  49. {
  50. var self=this;
  51. var currentOrder=self.pos.get('selectedOrder');
  52. var currency_id=currentOrder.foreign_currency.id;
  53. var name=currentOrder.foreign_currency.name;
  54. var rate_silent=currentOrder.foreign_currency.rate_silent;
  55. var decimals=currentOrder.foreign_currency.decimals;
  56. if (self.pos.config.display_conversion)
  57. // '1 '+self.pos.currency.name+' = '+
  58. self.$('#conversion_rate').html('Cambio de ' + name + ' = ' + rate_silent + ' ');
  59. self.$('#currency_value_label').html('Total en '+ name + ':');
  60. self.$('#foreign_input_label').html('Pagado en '+ name + ':');
  61. self.$('#currency_value').html(self.format_foreign(currentOrder.currency_total,currentOrder.foreign_currency));
  62. self.$('#foreign_change_label').html('Cambio en ' + name + ':');
  63. self.$('#foreign_change_value').html(self.format_foreign(0,currentOrder.foreign_currency));
  64. },
  65. show: function()
  66. {
  67. this._super();
  68. var self = this;
  69. if (self.pos.config.multi_currency_enable)
  70. {
  71. currentOrder=self.pos.get('selectedOrder');
  72. self.$('#curr_input').focus(function(e){
  73. if (this.value!='')
  74. $(this).select();
  75. if(self.numpad_state){
  76. self.numpad_state.reset();
  77. }
  78. currentOrder.curr_input_selected=true;
  79. e.stopImmediatePropagation();
  80. });
  81. self.$('#toggle_multi_currency').change(function(e)
  82. {
  83. if (self.pos.currency_list.length==0)
  84. {
  85. self.pos_widget.screen_selector.show_popup('error',{
  86. message: 'No Foreign Currency found !',
  87. comment: 'No foreign currencies have been defined. Either set the parameter to fetch from master or define them manually in the POS session configuration.'
  88. });
  89. return false;
  90. }
  91. currentOrder.multi_currency_checked=self.$('#toggle_multi_currency').prop("checked");
  92. if (currentOrder.multi_currency_checked)
  93. {
  94. self.$('#multi_currency').show();
  95. self.$('#foreign_change_div').show();
  96. self.$('#curr_input').focus();
  97. if (self.$('#curr_input').val()!='')
  98. self.$('#curr_input').select();
  99. currentOrder.curr_input_selected=true;
  100. if(self.numpad_state){
  101. self.numpad_state.reset();
  102. }
  103. }
  104. else
  105. {
  106. self.$('#multi_currency').hide();
  107. self.$('#foreign_change_div').hide();
  108. currentOrder.curr_input_selected=false;
  109. self.focus_selected_line();
  110. }
  111. e.stopImmediatePropagation();
  112. });
  113. self.$('#toggle_multi_currency').prop("checked",currentOrder.multi_currency_checked);
  114. if(currentOrder.multi_currency_checked && currentOrder.foreign_currency)
  115. {
  116. self.$('#curr_input').trigger('keyup');
  117. }
  118. var foreign_decimals=currentOrder.foreign_currency.decimals;
  119. var foreign_currency_rate=currentOrder.foreign_currency.rate_silent;
  120. // Modificacion
  121. currentOrder.currency_total=round_di(currentOrder.getTotalTaxIncluded()/foreign_currency_rate,foreign_decimals).toFixed(foreign_decimals);
  122. self.set_foreign_values();
  123. if (currentOrder.currency_paid==0)
  124. self.$('#curr_input').val('');
  125. else
  126. self.$('#curr_input').val(currentOrder.currency_paid);
  127. self.$('#curr_input').keyup(function(e)
  128. {
  129. currentOrder.currency_paid=self.$('#curr_input').val();
  130. var line = currentOrder.selected_paymentline;
  131. if (line==undefined)
  132. {
  133. self.pos_widget.screen_selector.show_popup('error',{
  134. message: 'No Payment Line selected !',
  135. comment: 'Please selected the payment line you would like the converted currency to display'
  136. });
  137. return false;
  138. }
  139. converted_value=round_di(this.value*currentOrder.foreign_currency.rate_silent,self.pos.currency.decimals).toFixed(self.pos.currency.decimals);
  140. line.set_amount(converted_value);
  141. self.$('.paymentline.selected input').val(converted_value);
  142. e.stopImmediatePropagation();
  143. });
  144. self.$("#currency_selection").change(function(e)
  145. {
  146. var currentOrder=self.pos.get('selectedOrder');
  147. var selected_currency=parseInt($(this).val());
  148. selected_id=self.findWithAttr(self.pos.currency_list, 'id', selected_currency);
  149. currentOrder.foreign_currency=$.extend({}, self.pos.currency_list[selected_id]);
  150. var foreign_currency_rate=currentOrder.foreign_currency.rate_silent;
  151. currentOrder.currency_total=round_di(currentOrder.getTotalTaxIncluded()/foreign_currency_rate,foreign_decimals).toFixed(foreign_decimals);
  152. self.$('#curr_input').val(0);
  153. var line = currentOrder.selected_paymentline;
  154. if (line==undefined)
  155. {
  156. self.$('.paymentline input').val(0);
  157. return false;
  158. }
  159. line.set_amount(0);
  160. self.$('.paymentline.selected input').val(0);
  161. self.set_foreign_values();
  162. e.stopImmediatePropagation();
  163. });
  164. self.$("#currency_selection").val(currentOrder.foreign_currency.id);
  165. self.$('#toggle_multi_currency').trigger('change');
  166. }
  167. },
  168. add_paymentline: function(line){
  169. this._super(line);
  170. this.pos.get('selectedOrder').curr_input_selected=false;
  171. },
  172. set_value: function(val) {
  173. var self=this;
  174. var curr_input_selected=this.pos.get('selectedOrder').curr_input_selected;
  175. if (curr_input_selected)
  176. {
  177. var foreign_decimals=currentOrder.foreign_currency.decimals;
  178. value=round_di(val,foreign_decimals).toFixed(foreign_decimals);
  179. self.$('#curr_input').val(value);
  180. self.$('#curr_input').trigger('keyup');
  181. }
  182. else
  183. {
  184. var selected_line =this.pos.get('selectedOrder').selected_paymentline;
  185. if(selected_line){
  186. selected_line.set_amount(val);
  187. selected_line.node.querySelector('input').value = selected_line.amount.toFixed(2);
  188. }
  189. }
  190. },
  191. update_payment_summary: function()
  192. {
  193. this._super();
  194. var self=this;
  195. var currentOrder=self.pos.get('selectedOrder');
  196. if(self.pos.config.multi_currency_enable && currentOrder.foreign_currency)
  197. {
  198. var paidTotal = currentOrder.getPaidTotal();
  199. var dueTotal = currentOrder.getTotalTaxIncluded();
  200. var remaining = dueTotal > paidTotal ? dueTotal - paidTotal : 0;
  201. var change = paidTotal > dueTotal ? paidTotal - dueTotal : 0;
  202. var fc=currentOrder.foreign_currency;
  203. var rate=fc.rate_silent;
  204. var decimals=fc.decimals;
  205. var converted_value=round_di(change/rate,decimals).toFixed(decimals);
  206. currentOrder.currency_change=converted_value;
  207. self.$('#foreign_change_value').html(self.format_foreign(converted_value,fc));
  208. }
  209. },
  210. get_currency_selection:function()
  211. {
  212. var self=this;
  213. var currentOrder=this.pos.get('selectedOrder');
  214. return currentOrder.pos.currency_list[0];
  215. },
  216. });
  217. }