[FIX] point_of_sale: missing tax mapping in receipt

Activate units of measure
Create taxes:
- [TAXE] not included in price (i.e. 15%)
- [TAXI] included in price (i.e 15%)
Have a fiscal position mapping [TAXE] to [TAXI]
Have a product [PROD]:
- Price 10$
- Tax [TAXE]
- Unit: g
- Purchase Unit: kg
In point of sale settings:
- Add the fiscal position as default
- Display tax included prices
Start a pos session, add [PROD] to order, confirm and print receipt

The price on order screen and receipt will be wrong, it will take into
account the price excluded tax on top of the correct price
(final price 11.50, should be 10.30)

opw-2688375

closes odoo/odoo#93321

X-original-commit: ff61382c3865a159bb92f873bf82b8ab48426730
Signed-off-by: Grazioso Andrea (agr) <agr@odoo.com>
This commit is contained in:
Andrea Grazioso (agr-odoo)
2022-06-10 18:07:04 +02:00
parent 663db10fe9
commit 385fb2bb97
+15 -21
View File
@@ -1572,6 +1572,19 @@ class Orderline extends PosModel {
var rounding = this.pos.currency.rounding;
return round_pr(this.get_unit_price() * this.get_quantity() * (1 - this.get_discount()/100), rounding);
}
get_taxes_after_fp(taxes_ids){
var self = this;
var taxes = this.pos.taxes;
var product_taxes = [];
_(taxes_ids).each(function(el){
var tax = _.detect(taxes, function(t){
return t.id === el;
});
product_taxes.push.apply(product_taxes, self._map_tax_fiscal_position(tax, self.order));
});
product_taxes = _.uniq(product_taxes, function(tax) { return tax.id; });
return product_taxes;
}
get_display_price_one(){
var rounding = this.pos.currency.rounding;
var price_unit = this.get_unit_price();
@@ -1580,15 +1593,7 @@ class Orderline extends PosModel {
} else {
var product = this.get_product();
var taxes_ids = this.tax_ids || product.taxes_id;
var taxes = this.pos.taxes;
var product_taxes = [];
_(taxes_ids).each(function(el){
product_taxes.push(_.detect(taxes, function(t){
return t.id === el;
}));
});
var product_taxes = this.get_taxes_after_fp(taxes_ids);
var all_taxes = this.compute_all(product_taxes, price_unit, 1, this.pos.currency.rounding);
return round_pr(all_taxes.total_included * (1 - this.get_discount()/100), rounding);
@@ -1851,25 +1856,14 @@ class Orderline extends PosModel {
}
}
get_all_prices(qty = this.get_quantity()){
var self = this;
var price_unit = this.get_unit_price() * (1.0 - (this.get_discount() / 100.0));
var taxtotal = 0;
var product = this.get_product();
var taxes_ids = this.tax_ids || product.taxes_id;
taxes_ids = _.filter(taxes_ids, t => t in this.pos.taxes_by_id);
var taxes = this.pos.taxes;
var taxdetail = {};
var product_taxes = [];
_(taxes_ids).each(function(el){
var tax = _.detect(taxes, function(t){
return t.id === el;
});
product_taxes.push.apply(product_taxes, self._map_tax_fiscal_position(tax, self.order));
});
product_taxes = _.uniq(product_taxes, function(tax) { return tax.id; });
var product_taxes = this.get_taxes_after_fp(taxes_ids);
var all_taxes = this.compute_all(product_taxes, price_unit, qty, this.pos.currency.rounding);
var all_taxes_before_discount = this.compute_all(product_taxes, this.get_unit_price(), qty, this.pos.currency.rounding);