summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre Masereel <pim@odoo.com>2021-05-12 16:15:48 +0000
committerPierre Masereel <pim@odoo.com>2021-05-16 17:50:51 +0000
commitaf5a88e84fb1c05c4be38930373165f28a06f4f0 (patch)
tree12ba0fec84236a930214282358614b0172b3a345
parent068bf17499ff00e4245cb1f471a16a06f0bdc903 (diff)
[FIX] point_of_sale: rounding issue with cash rounding
The method that computs what is due and the change of an order is based on the selected payment line which is wrong, because if you add and remove a payment line, none will be seleced, that lead to issue in this case because a change is computed, and it won't match the invoices because an amount_return is sent to server. To reproduce you can follow this simply procedure: - set rounding half-up to 0.05 - create a product at 0.98 - open POS and create an order with the product - go to payment screen - add cash payment (1€ auto filled) - add bank payment (It'll autofill -0.02 not really a problem) - remove the bank payment => It'll show 0.02 due (it is caused because of no payment method is selected) - Set a customer and check the invoice => unbalanced (0.02 probably because it is set in amount_return of the request) closes odoo/odoo#70825 Signed-off-by: pimodoo <pimodoo@users.noreply.github.com>
-rw-r--r--addons/point_of_sale/static/src/js/models.js6
1 files changed, 4 insertions, 2 deletions
diff --git a/addons/point_of_sale/static/src/js/models.js b/addons/point_of_sale/static/src/js/models.js
index 30f131cba62..eedae8d9a8c 100644
--- a/addons/point_of_sale/static/src/js/models.js
+++ b/addons/point_of_sale/static/src/js/models.js
@@ -3316,8 +3316,10 @@ exports.Order = Backbone.Model.extend({
get_rounding_applied: function() {
if(this.pos.config.cash_rounding) {
const only_cash = this.pos.config.only_round_cash_method;
- const has_cash = this.selected_paymentline ? this.selected_paymentline.payment_method.is_cash_count == true: false;
- if (!only_cash || (only_cash && has_cash)) {
+ const paymentlines = this.get_paymentlines();
+ const last_line = paymentlines ? paymentlines[paymentlines.length-1]: false;
+ const last_line_is_cash = last_line ? last_line.payment_method.is_cash_count == true: false;
+ if (!only_cash || (only_cash && last_line_is_cash)) {
var remaining = this.get_total_with_tax() - this.get_total_paid();
var total = round_pr(remaining, this.pos.cash_rounding[0].rounding);
var sign = total > 0 ? 1.0 : -1.0;