1 # @tag: fix_acc_trans_ap_taxkey_bug
2 # @description: Korrektur falscher Steuerschlüssel in acc_trans bei Eingangsrechnungen
3 # @depends: release_2_6_0
7 die "This script cannot be run from the command line." unless $::form;
11 die $dbup_locale->text("Database update error:") . "<br>$msg<br>" . $DBI::errstr;
18 if (!$dbh->do($query)) {
19 mydberror($query) unless $may_fail;
29 -- Einige Felder zum Debuggen:
30 ap.id, c.accno, c.description AS chartdescription,
31 -- Felder, die zum eigentlichen Vergleich und zum spaeteren Update
33 ac.acc_trans_id, ac.taxkey AS actual_taxkey,
34 -- Zum Rechnungsdatum gueltigen Steuerschluessel fuer Konto auslesen:
37 WHERE (tk.chart_id = c.id)
38 AND (tk.startdate <= ap.transdate)
39 ORDER BY tk.startdate DESC
40 LIMIT 1) AS wanted_taxkey
42 LEFT JOIN ap ON (ac.trans_id = ap.id)
43 LEFT JOIN chart c ON (ac.chart_id = c.id)
45 -- Nur Einkaufsrechnungen, aber keine Kreditorenbuchungen betrachten.
48 -- Nur Eintraege betrachten, die Konten bebuchen, die fuer die
49 -- jeweils aktuelle Rechnung in der dazugehoerigen Buchungsgruppe
50 -- angesprochen werden. Die Buchungsgruppen sind all diejenigen,
51 -- die in der Rechnung in mindestens einer Position ueber die
52 -- Parts verlinkt sind.
54 -- Teil 1: Aufwandskonto der Buchungsgruppe fuer die in der
55 -- aktuellen Rechnung ausgewaehlte Steuerzone
58 WHEN ap.taxzone_id = 0 THEN bg.expense_accno_id_0
59 WHEN ap.taxzone_id = 1 THEN bg.expense_accno_id_1
60 WHEN ap.taxzone_id = 2 THEN bg.expense_accno_id_2
61 ELSE bg.expense_accno_id_3
64 LEFT JOIN parts p ON (i.parts_id = p.id)
65 LEFT JOIN buchungsgruppen bg ON (p.buchungsgruppen_id = bg.id)
66 WHERE (i.trans_id = ap.id)
70 -- Teil 2: Inventarkonto der Buchungsgruppe fuer Nicht-Dienstleistungen
71 SELECT bg.inventory_accno_id
73 LEFT JOIN parts p ON (i.parts_id = p.id)
74 LEFT JOIN buchungsgruppen bg ON (p.buchungsgruppen_id = bg.id)
75 WHERE (i.trans_id = ap.id)
76 AND (COALESCE(p.inventory_accno_id, 0) <> 0)
80 WHERE the_query.actual_taxkey <> the_query.wanted_taxkey
86 WHERE acc_trans_id = ?
89 my $h_find = $dbh->prepare($q_find) || mydberror($q_find);
90 my $h_change = $dbh->prepare($q_change) || mydberror($q_change);
92 $h_find->execute() || mydberror($q_find);
96 while (my $ref = $h_find->fetchrow_hashref()) {
97 # $::lxdebug->dump(0, "ref", $ref);
98 $h_change->execute($ref->{wanted_taxkey}, $ref->{acc_trans_id}) || mydberror($q_change);
105 print $dbup_locale->text('Number of entries changed: #1', $num_changed) . "<br/>\n";