Commit da457105 by Yvon

a quick solution to compute meal voucher amount before sending it to tpe if…

a quick solution to compute meal voucher amount before sending it to tpe if pos_payment_terminal can be made dependant on pos_meal_voucher
parent 96d233f9
...@@ -28,7 +28,9 @@ ...@@ -28,7 +28,9 @@
'summary': 'Manage Payment Terminal device from POS front end', 'summary': 'Manage Payment Terminal device from POS front end',
'author': "Aurélien DUMAINE,Akretion,Odoo Community Association (OCA)", 'author': "Aurélien DUMAINE,Akretion,Odoo Community Association (OCA)",
'license': 'AGPL-3', 'license': 'AGPL-3',
'depends': ['point_of_sale'], # We want to make sure that payment_terminal proper code will be called after the amount update by making payment_terminal dependant from meal_voucher
# A cleaner solution may be to create a new module that will depend on pos_payement_terminal and pos_meal_voucher
'depends': ['point_of_sale','pos_meal_voucher'],
'data': [ 'data': [
'pos_payment_terminal_view.xml', 'pos_payment_terminal_view.xml',
'security/security.xml', 'security/security.xml',
......
...@@ -48,7 +48,7 @@ odoo.define('pos_payment_terminal.pos_payment_terminal', function (require) { ...@@ -48,7 +48,7 @@ odoo.define('pos_payment_terminal.pos_payment_terminal', function (require) {
}, },
get_data_send: function(order, line, currency_iso) { get_data_send: function(order, line, currency_iso) {
var data = { var data = {
'amount' : order.get_due(line), 'amount' : round_pr(Math.max(0,line.get_amount()), this.pos.currency.rounding),
'currency_iso' : currency_iso, 'currency_iso' : currency_iso,
'payment_mode' : line.cashregister.journal.payment_mode, 'payment_mode' : line.cashregister.journal.payment_mode,
'wait_terminal_answer' : this.wait_terminal_answer(), 'wait_terminal_answer' : this.wait_terminal_answer(),
......
...@@ -314,8 +314,7 @@ odoo.define("pos_meal_voucher.screens", function (require) { ...@@ -314,8 +314,7 @@ odoo.define("pos_meal_voucher.screens", function (require) {
// if user choose card meal voucher // if user choose card meal voucher
if(order.selected_paymentline.is_meal_voucher() && order.selected_paymentline.is_dematerialized_meal_voucher()){ if(order.selected_paymentline.is_meal_voucher() && order.selected_paymentline.is_dematerialized_meal_voucher()){
// update selected (last) payment line & order with meal voucher data function compute_order_meal_voucher_amount() {
function update_order_meal_voucher_data(issuer = '') {
var total_eligible = order.get_total_meal_voucher_eligible(); var total_eligible = order.get_total_meal_voucher_eligible();
var total_received = order.get_total_meal_voucher_received(); var total_received = order.get_total_meal_voucher_received();
var max_amount = self.pos.config.max_meal_voucher_amount; var max_amount = self.pos.config.max_meal_voucher_amount;
...@@ -326,14 +325,23 @@ odoo.define("pos_meal_voucher.screens", function (require) { ...@@ -326,14 +325,23 @@ odoo.define("pos_meal_voucher.screens", function (require) {
// Check how much is still possible to pay with meal voucher // Check how much is still possible to pay with meal voucher
// The selected line is "by default" set to the rest to pay of the order // The selected line is "by default" set to the rest to pay of the order
const max_curent_amount = current_max-total_received +order.selected_paymentline.get_amount(); return current_max-total_received +order.selected_paymentline.get_amount();
}
// We can't wait confirm function in this.gui.show_popup to be asynchronously called
// to update paymentline with proper amount because this amount will be sent in the interval
// to payment terminal.
// We ensure payment_terminal proper code is called after the amount update by making
// payment_terminal dependant from meal_voucher
const max_curent_amount = compute_order_meal_voucher_amount();
order.selected_paymentline.set_amount(max_curent_amount); order.selected_paymentline.set_amount(max_curent_amount);
order.selected_paymentline.set_meal_voucher_issuer(issuer);
// update selected (last) payment line & order with meal voucher data
function update_order_meal_voucher_data(amount,issuer = '') {
order.selected_paymentline.set_meal_voucher_issuer(issuer);
paymentScreen.order_changes(); paymentScreen.order_changes();
paymentScreen.render_paymentlines(); paymentScreen.render_paymentlines();
paymentScreen.$(".paymentline.selected .edit").text(paymentScreen.format_currency_no_symbol(max_curent_amount)); paymentScreen.$(".paymentline.selected .edit").text(paymentScreen.format_currency_no_symbol(amount));
} }
// If required by the config, ask for the meal voucher issuer // If required by the config, ask for the meal voucher issuer
...@@ -357,14 +365,14 @@ odoo.define("pos_meal_voucher.screens", function (require) { ...@@ -357,14 +365,14 @@ odoo.define("pos_meal_voucher.screens", function (require) {
'selectData': select_data, 'selectData': select_data,
confirm: function(value) { confirm: function(value) {
let issuer = value; let issuer = value;
update_order_meal_voucher_data(issuer) update_order_meal_voucher_data(max_curent_amount,issuer)
}, },
cancel: function(value) { cancel: function(value) {
self.remove_selected_paymentline(order); self.remove_selected_paymentline(order);
}, },
}); });
} else { } else {
update_order_meal_voucher_data(); update_order_meal_voucher_data(max_curent_amount);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment