+ $main::lxdebug->leave_sub(2);
+
+ return ($accno_id, $accno);
+}
+
+sub retrieve_accounts {
+ $main::lxdebug->enter_sub(2);
+
+ my ($self, $myconfig, $form, $parts_id, $index) = @_;
+
+ my ($query, $sth, $dbh);
+
+ $form->{"taxzone_id"} *= 1;
+
+ $dbh = $form->get_standard_dbh($myconfig);
+
+ my $transdate = "";
+ if ($form->{type} eq "invoice") {
+ if (($form->{vc} eq "vendor") || !$form->{deliverydate}) {
+ $transdate = $form->{invdate};
+ } else {
+ $transdate = $form->{deliverydate};
+ }
+ } elsif (($form->{type} eq "credit_note") || ($form->{script} eq 'ir.pl')) {
+ $transdate = $form->{invdate};
+ } else {
+ $transdate = $form->{transdate};
+ }
+
+ if ($transdate eq "") {
+ $transdate = "current_date";
+ } else {
+ $transdate = $dbh->quote($transdate);
+ }
+
+ $query =
+ qq|SELECT | .
+ qq| p.inventory_accno_id AS is_part, | .
+ qq| bg.inventory_accno_id, | .
+ qq| bg.income_accno_id_$form->{taxzone_id} AS income_accno_id, | .
+ qq| bg.expense_accno_id_$form->{taxzone_id} AS expense_accno_id, | .
+ qq| c1.accno AS inventory_accno, | .
+ qq| c2.accno AS income_accno, | .
+ qq| c3.accno AS expense_accno | .
+ qq|FROM parts p | .
+ qq|LEFT JOIN buchungsgruppen bg ON p.buchungsgruppen_id = bg.id | .
+ qq|LEFT JOIN chart c1 ON bg.inventory_accno_id = c1.id | .
+ qq|LEFT JOIN chart c2 ON bg.income_accno_id_$form->{taxzone_id} = c2.id | .
+ qq|LEFT JOIN chart c3 ON bg.expense_accno_id_$form->{taxzone_id} = c3.id | .
+ qq|WHERE p.id = ?|;
+ my $ref = selectfirst_hashref_query($form, $dbh, $query, $parts_id);
+
+ return $main::lxdebug->leave_sub(2) if (!$ref);
+
+ $ref->{"inventory_accno_id"} = undef unless ($ref->{"is_part"});
+
+ my %accounts;
+ foreach my $type (qw(inventory income expense)) {
+ next unless ($ref->{"${type}_accno_id"});
+ ($accounts{"${type}_accno_id"}, $accounts{"${type}_accno"}) =
+ $self->follow_account_chain($form, $dbh, $transdate,
+ $ref->{"${type}_accno_id"},
+ $ref->{"${type}_accno"});
+ }
+
+ map({ $form->{"${_}_accno_$index"} = $accounts{"${_}_accno"} }
+ qw(inventory income expense));
+
+ my $inc_exp = $form->{"vc"} eq "customer" ? "income" : "expense";
+ my $accno_id = $accounts{"${inc_exp}_accno_id"};
+
+ $query =
+ qq|SELECT c.accno, t.taxdescription AS description, t.rate, t.taxnumber | .
+ qq|FROM tax t | .
+ qq|LEFT JOIN chart c ON c.id = t.chart_id | .
+ qq|WHERE t.id IN | .
+ qq| (SELECT tk.tax_id | .
+ qq| FROM taxkeys tk | .
+ qq| WHERE tk.chart_id = ? AND startdate <= | . quote_db_date($transdate) .
+ qq| ORDER BY startdate DESC LIMIT 1) |;
+ $ref = selectfirst_hashref_query($form, $dbh, $query, $accno_id);
+
+ unless ($ref) {
+ $main::lxdebug->leave_sub(2);
+ return;
+ }
+
+ $form->{"taxaccounts_$index"} = $ref->{"accno"};
+ if ($form->{"taxaccounts"} !~ /$ref->{accno}/) {
+ $form->{"taxaccounts"} .= "$ref->{accno} ";
+ }
+ map({ $form->{"$ref->{accno}_${_}"} = $ref->{$_}; }
+ qw(rate description taxnumber));
+
+# $main::lxdebug->message(0, "formvars: rate " . $form->{"$ref->{accno}_rate"} .
+# " description " . $form->{"$ref->{accno}_description"} .
+# " taxnumber " . $form->{"$ref->{accno}_taxnumber"} .
+# " || taxaccounts_$index " . $form->{"taxaccounts_$index"} .
+# " || taxaccounts " . $form->{"taxaccounts"});
+
+ $main::lxdebug->leave_sub(2);