- my $tax = SL::DB::Manager::Tax->find_by(id => $params{tax_id})
- // croak "Can't find tax with id " . $params{tax_id};
+
+ my $ct = $chart->get_active_taxkey($self->deliverydate // $self->transdate);
+ my $chart_tax = ref $ct eq 'SL::DB::TaxKey' ? $ct->tax : undef;
+
+ my $tax = defined($params{tax_id}) ? SL::DB::Manager::Tax->find_by(id => $params{tax_id}) # 1. user param
+ : ref $chart_tax eq 'SL::DB::Tax' ? $chart_tax # automatic tax
+ : SL::DB::Manager::Tax->find_by(taxkey => 0, rate => 0.00); # no tax
+
+ die "No valid tax found. User input:" . $params{tax_id} unless ref $tax eq 'SL::DB::Tax';