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
4 package SL::DBUpgrade2::fix_acc_trans_ap_taxkey_bug;
9 use parent qw(SL::DBUpgrade2::Base);
17 -- Einige Felder zum Debuggen:
18 ap.id, c.accno, c.description AS chartdescription,
19 -- Felder, die zum eigentlichen Vergleich und zum spaeteren Update
21 ac.acc_trans_id, ac.taxkey AS actual_taxkey,
22 -- Zum Rechnungsdatum gueltigen Steuerschluessel fuer Konto auslesen:
25 WHERE (tk.chart_id = c.id)
26 AND (tk.startdate <= ap.transdate)
27 ORDER BY tk.startdate DESC
28 LIMIT 1) AS wanted_taxkey
30 LEFT JOIN ap ON (ac.trans_id = ap.id)
31 LEFT JOIN chart c ON (ac.chart_id = c.id)
33 -- Nur Einkaufsrechnungen, aber keine Kreditorenbuchungen betrachten.
36 -- Nur Eintraege betrachten, die Konten bebuchen, die fuer die
37 -- jeweils aktuelle Rechnung in der dazugehoerigen Buchungsgruppe
38 -- angesprochen werden. Die Buchungsgruppen sind all diejenigen,
39 -- die in der Rechnung in mindestens einer Position ueber die
40 -- Parts verlinkt sind.
42 -- Teil 1: Aufwandskonto der Buchungsgruppe fuer die in der
43 -- aktuellen Rechnung ausgewaehlte Steuerzone
46 WHEN ap.taxzone_id = 0 THEN bg.expense_accno_id_0
47 WHEN ap.taxzone_id = 1 THEN bg.expense_accno_id_1
48 WHEN ap.taxzone_id = 2 THEN bg.expense_accno_id_2
49 ELSE bg.expense_accno_id_3
52 LEFT JOIN parts p ON (i.parts_id = p.id)
53 LEFT JOIN buchungsgruppen bg ON (p.buchungsgruppen_id = bg.id)
54 WHERE (i.trans_id = ap.id)
58 -- Teil 2: Inventarkonto der Buchungsgruppe fuer Nicht-Dienstleistungen
59 SELECT bg.inventory_accno_id
61 LEFT JOIN parts p ON (i.parts_id = p.id)
62 LEFT JOIN buchungsgruppen bg ON (p.buchungsgruppen_id = bg.id)
63 WHERE (i.trans_id = ap.id)
64 AND (COALESCE(p.inventory_accno_id, 0) <> 0)
68 WHERE the_query.actual_taxkey <> the_query.wanted_taxkey
74 WHERE acc_trans_id = ?
77 my $h_find = $self->dbh->prepare($q_find) || $self->db_error($q_find);
78 my $h_change = $self->dbh->prepare($q_change) || $self->db_error($q_change);
80 $h_find->execute() || $self->db_error($q_find);
84 while (my $ref = $h_find->fetchrow_hashref()) {
85 # $::lxdebug->dump(0, "ref", $ref);
86 $h_change->execute($ref->{wanted_taxkey}, $ref->{acc_trans_id}) || $self->db_error($q_change);
93 # print $::locale->text('Number of entries changed: #1', $num_changed) . "<br/>\n";