fix: update Ojol discount calculation to use priceIncl and correctly handle tax inclusion in POS order lines

This commit is contained in:
Suherdy Yacob 2026-06-15 16:48:09 +07:00
parent 5e80a2669e
commit 34f17dd13b
4 changed files with 23 additions and 3 deletions

View File

@ -28,7 +28,7 @@ patch(PosOrder.prototype, {
const base = super.getTotalDiscount();
const ojolLine = this.lines.find((l) => l.is_ojol_discount);
if (ojolLine) {
return base + Math.abs(ojolLine.price_unit * ojolLine.qty);
return base + Math.abs(ojolLine.priceIncl);
}
return base;
},

View File

@ -2,6 +2,7 @@
import { PosOrder } from "@point_of_sale/app/models/pos_order";
import { patch } from "@web/core/utils/patch";
import { accountTaxHelpers } from "@account/helpers/account_tax";
patch(PosOrder.prototype, {
/**
@ -16,7 +17,7 @@ patch(PosOrder.prototype, {
*/
getOjolDiscount() {
const line = this.getOjolDiscountLine();
return line ? Math.abs(line.price_unit * line.qty) : 0;
return line ? Math.abs(line.priceIncl) : 0;
},
/**
@ -52,17 +53,36 @@ patch(PosOrder.prototype, {
return;
}
const taxes = productTmpl.taxes_id || [];
const desiredTotal = Math.abs(amount);
const company = this.company || this.config.company_id;
const taxDetails = accountTaxHelpers.get_tax_details(taxes, desiredTotal, 1.0, {
precision_rounding: this.currency.rounding,
rounding_method: company?.tax_calculation_rounding_method || "round_per_line",
product: productVariant,
});
let sumPriceIncludedTaxes = 0.0;
for (const taxData of taxDetails.taxes_data) {
if (taxData.tax.price_include) {
sumPriceIncludedTaxes += taxData.tax_amount;
}
}
const finalPriceUnit = -(taxDetails.total_excluded + sumPriceIncludedTaxes);
// Create negative-price discount line
this.models["pos.order.line"].create({
order_id: this,
product_id: productVariant,
product_tmpl_id: productTmpl,
price_unit: -Math.abs(amount),
price_unit: finalPriceUnit,
qty: 1,
discount: 0,
price_type: "manual",
full_product_name: "Diskon Ojol",
is_ojol_discount: true,
tax_ids: (productTmpl.taxes_id || []).map((tax) => ["link", tax]),
});
},
});