diff --git a/addons/pos_sale/i18n/pos_sale.pot b/addons/pos_sale/i18n/pos_sale.pot index 9cb722ebaf6..ffa05f77d1e 100644 --- a/addons/pos_sale/i18n/pos_sale.pot +++ b/addons/pos_sale/i18n/pos_sale.pot @@ -560,3 +560,12 @@ msgstr "" #, python-format msgid "Yes" msgstr "" + +#. module: pos_sale +#. openerp-web +#: code:addons/pos_sale/static/src/js/OrderManagementScreen/SaleOrderManagementScreen.js:0 +#, python-format +msgid "" +"You have tried to charge a down payment of %s but only %s remains to be " +"paid, %s will be applied to the purchase order line." +msgstr "" \ No newline at end of file diff --git a/addons/pos_sale/models/sale_order.py b/addons/pos_sale/models/sale_order.py index e4ed57333e1..b69e26bf154 100644 --- a/addons/pos_sale/models/sale_order.py +++ b/addons/pos_sale/models/sale_order.py @@ -34,7 +34,6 @@ class SaleOrder(models.Model): total_pos_paid = sum(sale_order.order_line.filtered(lambda l: not l.display_type).mapped('pos_order_line_ids.price_subtotal_incl')) sale_order.amount_unpaid = sale_order.amount_total - (total_invoice_paid + total_pos_paid) - class SaleOrderLine(models.Model): _inherit = 'sale.order.line' diff --git a/addons/pos_sale/static/src/js/OrderManagementScreen/SaleOrderFetcher.js b/addons/pos_sale/static/src/js/OrderManagementScreen/SaleOrderFetcher.js index 6a11f17a618..b469f62255e 100644 --- a/addons/pos_sale/static/src/js/OrderManagementScreen/SaleOrderFetcher.js +++ b/addons/pos_sale/static/src/js/OrderManagementScreen/SaleOrderFetcher.js @@ -61,12 +61,12 @@ class SaleOrderFetcher extends EventBus { return sale_orders; } async _getOrderIdsForCurrentPage(limit, offset) { - const domain = [["currency_id", "=", this.pos.globalState.currency.id]]; - if (this.searchDomain) { - domain.push(...this.searchDomain); - } + const domain = [["currency_id", "=", this.pos.globalState.currency.id]].concat( + this.searchDomain || [] + ); + this.pos.globalState.set_synch("connecting"); - const res = await this.orm.searchRead( + const saleOrders = await this.orm.searchRead( "sale.order", domain, [ @@ -80,8 +80,9 @@ class SaleOrderFetcher extends EventBus { ], { offset, limit } ); + this.pos.globalState.set_synch("connected"); - return res; + return saleOrders; } nextPage() { diff --git a/addons/pos_sale/static/src/js/OrderManagementScreen/SaleOrderManagementScreen.js b/addons/pos_sale/static/src/js/OrderManagementScreen/SaleOrderManagementScreen.js index 63a7a441c4b..ed2ddaec298 100644 --- a/addons/pos_sale/static/src/js/OrderManagementScreen/SaleOrderManagementScreen.js +++ b/addons/pos_sale/static/src/js/OrderManagementScreen/SaleOrderManagementScreen.js @@ -259,6 +259,24 @@ export class SaleOrderManagementScreen extends ControlButtonsMixin(IndependentTo down_payment = (down_payment * parse.float(payload)) / 100; } + if (down_payment > sale_order.amount_unpaid) { + const errorBody = sprintf( + this.env._t( + "You have tried to charge a down payment of %s but only %s remains to be paid, %s will be applied to the purchase order line." + ), + this.env.pos.format_currency(down_payment), + this.env.pos.format_currency(sale_order.amount_unpaid), + sale_order.amount_unpaid > 0 + ? this.env.pos.format_currency(sale_order.amount_unpaid) + : this.env.pos.format_currency(0) + ); + await this.popup.add(ErrorPopup, { + title: "Error amount too high", + body: errorBody, + }); + down_payment = sale_order.amount_unpaid > 0 ? sale_order.amount_unpaid : 0; + } + const new_line = new Orderline( {}, { @@ -298,6 +316,7 @@ export class SaleOrderManagementScreen extends ControlButtonsMixin(IndependentTo "fiscal_position_id", "amount_total", "amount_untaxed", + "amount_unpaid", "picking_ids", ] ); diff --git a/addons/pos_sale/static/src/js/OrderManagementScreen/SaleOrderRow.js b/addons/pos_sale/static/src/js/OrderManagementScreen/SaleOrderRow.js index 3257274d9cf..945b4f01031 100644 --- a/addons/pos_sale/static/src/js/OrderManagementScreen/SaleOrderRow.js +++ b/addons/pos_sale/static/src/js/OrderManagementScreen/SaleOrderRow.js @@ -1,7 +1,5 @@ /** @odoo-module */ - import { Component } from "@odoo/owl"; -import utils from "web.utils"; /** * @props {models.Order} order @@ -42,14 +40,7 @@ export class SaleOrderRow extends Component { * @returns {boolean} */ get showAmountUnpaid() { - const isFullAmountUnpaid = utils.float_is_zero( - Math.abs(this.order.amount_total - this.order.amount_unpaid), - this.env.pos.currency.decimal_places - ); - return ( - !isFullAmountUnpaid && - !utils.float_is_zero(this.order.amount_unpaid, this.env.pos.currency.decimal_places) - ); + return this.order.amount_total != this.order.amount_unpaid; } get amountUnpaidRepr() { return this.env.pos.format_currency(this.order.amount_unpaid);