[FIX] point_of_sale: align with backend fp mapping

The backend allows to map one source tax to various target taxes. The POS
diverged from this behaviour.

This commit alignes the behaviours and lets the point of sale handle mapping
to multiple taxes the same way the backend does.
This commit is contained in:
David Arnold
2018-09-18 21:18:46 +00:00
parent d704d616f9
commit bc71e85c9f
+25 -14
View File
@@ -1665,20 +1665,26 @@ exports.Orderline = Backbone.Model.extend({
return taxes;
},
_map_tax_fiscal_position: function(tax) {
var self = this;
var current_order = this.pos.get_order();
var order_fiscal_position = current_order && current_order.fiscal_position;
var taxes = [];
if (order_fiscal_position) {
var mapped_tax = _.find(order_fiscal_position.fiscal_position_taxes_by_id, function (fiscal_position_tax) {
var tax_mappings = _.filter(order_fiscal_position.fiscal_position_taxes_by_id, function (fiscal_position_tax) {
return fiscal_position_tax.tax_src_id[0] === tax.id;
});
if (mapped_tax) {
tax = this.pos.taxes_by_id[mapped_tax.tax_dest_id[0]];
if (tax_mappings) {
_.each(tax_mappings, function(tm) {
taxes.push(self.pos.taxes_by_id[tm.tax_dest_id[0]]);
});
}
} else {
taxes.push(tax);
}
return tax;
return taxes;
},
_compute_all: function(tax, base_amount, quantity) {
if (tax.amount_type === 'fixed') {
@@ -1706,13 +1712,18 @@ exports.Orderline = Backbone.Model.extend({
var total_excluded = round_pr(price_unit * quantity, currency_rounding);
var total_included = total_excluded;
var base = total_excluded;
_(taxes).each(function(tax) {
if (!no_map_tax){
tax = self._map_tax_fiscal_position(tax);
}
if (!tax){
return;
}
var taxes_mapped = [];
if (!no_map_tax){
_(taxes).each(function(tax){
_(self._map_tax_fiscal_position(tax)).each(function(tax){
taxes_mapped.push(tax);
});
});
} else {
taxes_mapped = taxes;
}
_(taxes_mapped).each(function(tax) {
if (tax.amount_type === 'group'){
var ret = self.compute_all(tax.children_tax_ids, price_unit, quantity, currency_rounding);
total_excluded = ret.total_excluded;
@@ -2285,12 +2296,12 @@ exports.Order = Backbone.Model.extend({
var taxes = line.get_taxes();
var mapped_included_taxes = [];
_(taxes).each(function(tax) {
var line_tax = line._map_tax_fiscal_position(tax);
if(tax.price_include && tax.id != line_tax.id){
var line_taxes = line._map_tax_fiscal_position(tax);
if(tax.price_include && _.contains(line_taxes, tax)){
mapped_included_taxes.push(tax);
}
})
});
if (mapped_included_taxes.length > 0) {
unit_price = line.compute_all(mapped_included_taxes, unit_price, 1, this.pos.currency.rounding, true).total_excluded;