- $data->{amounts}->{ $chart->id } ||= { taxkey => $taxkey->taxkey_id, tax_id => $taxkey->tax_id, amount => 0 };
- $data->{amounts}->{ $chart->id }->{amount} += $linetotal;
- $data->{amounts}->{ $chart->id }->{amount} -= $tax_amount if $self->taxincluded;
+ unless ($data->{allow_optional_items} && $item->optional) {
+ if ($taxkey->tax->chart_id) {
+ $data->{taxes_by_chart_id}->{ $taxkey->tax->chart_id } ||= 0;
+ $data->{taxes_by_chart_id}->{ $taxkey->tax->chart_id } += $tax_amount;
+ $data->{taxes_by_tax_id}->{ $taxkey->tax_id } ||= 0;
+ $data->{taxes_by_tax_id}->{ $taxkey->tax_id } += $tax_amount;
+ } elsif ($tax_amount) {
+ die "tax_amount != 0 but no chart_id for taxkey " . $taxkey->id . " tax " . $taxkey->tax->id;
+ }