Charset & "use utf8" bei UTF-8-encodierten Datenbankupgradescripten gefixt
[kivitendo-erp.git] / sql / Pg-upgrade2 / SKR04-3804-addition.pl
1 # @tag: SKR04-3804-addition
2 # @description: Konto 3804 zu SKR04 hinzufügen: Umsatzsteuer 19% für Steuerschlüssel 13 (Umsatzsteuer aus EG-Erwerb)
3 # @depends:
4 # @charset: UTF-8
5
6 use utf8;
7 use strict;
8
9 die("This script cannot be run from the command line.") unless ($main::form);
10
11 sub mydberror {
12   my ($msg) = @_;
13   die($dbup_locale->text("Database update error:") . "<br>$msg<br>" . $DBI::errstr);
14 }
15
16 sub do_query {
17   my ($query, $may_fail) = @_;
18
19   if (!$dbh->do($query)) {
20     mydberror($query) unless ($may_fail);
21     $dbh->rollback();
22     $dbh->begin_work();
23   }
24 }
25
26
27 sub do_update {
28
29   # 1. Überprüfen ob Kontenrahmen SKR04 ist, wenn nicht alles überspringen
30   my ($kontenrahmen) = $dbh->selectrow_array("select coa from defaults");
31
32   unless ( $kontenrahmen eq 'Germany-DATEV-SKR04EU' ) {
33     print "Kontenrahmen ist nicht SKR04, &uuml;berspringen<br>";
34     return 1;
35   };
36
37   # Mandant hat SKR04, erst prüfen wir, ob in der Vergangenheit Buchungen mit
38   # taxkey 13 erfolgt sind (Fall "EU ohne USt. ID), diese sind wahrscheinlich
39   # mit der falschen MwSt (16%) gebucht worden, wenn dies nicht manuell
40   # geändert worden ist
41
42   my ($anzahl_buchungen) = $dbh->selectrow_array("select count (*) from acc_trans where taxkey=13 and transdate >= '2007-01-01';");
43   if ( $anzahl_buchungen > 0 ) {
44     if ($main::form->{bookings_exist} ) {
45       # Benutzer hat Meldung bestätigt
46       print "Buchungen nach dem 01.01.2007 existierten, Upgrade &uuml;berspringen";
47       return 1;  
48     } else {
49       # Meldung anzeigen und auf Rückgabe warten
50       print_past_booking_warning();
51       return 2;
52     };
53   } else {  # es gibt keine Buchungen mit taxkey 13 nach 01.01.2007
54   
55     # prüfen ob Konto 3804 schon existiert
56     my ($konto_existiert) = $dbh->selectrow_array("select count (*) from chart where accno = '3804'");
57     if ( $konto_existiert ) {
58       # 3804 existiert, wir gehen davon aus, daß der Benutzer das Konto schon selber angelegt hat und
59       # ordnungsgemäß benutzt
60
61       if ($main::form->{account_exists} ) {
62       # Benutzer hat Meldung bestätigt
63         print "Konto existiert, Upgrade &uuml;berspringen\n";
64         return 1;  
65       } else {
66         # Meldung anzeigen und auf Rückgabe warten
67         print_3804_already_exists();
68         return 2;
69       };
70     } else {
71
72     # noch keine Buchungen mit taxkey 13 und Konto 3804 existiert noch nicht,
73     # also legen wir es an und machen noch die nötigen Einstellungen in tax und
74     # taxkeys
75
76         my $insert_chart = <<SQL;
77 INSERT INTO chart (
78   accno, description,
79   charttype,   category,  link,
80   taxkey_id, pos_eur
81   )
82 SELECT
83   '3804','Umsatzsteuer aus EG-Erwerb 19%',
84   'A','I','AR_tax:IC_taxpart:IC_taxservice',
85   0, (select pos_eur from chart where accno = '3803')
86 WHERE EXISTS ( -- update only for SKR04, aber eigentlich schon überprüft
87     SELECT coa FROM defaults
88     WHERE defaults.coa='Germany-DATEV-SKR04EU'
89 );
90 SQL
91
92         do_query($insert_chart);
93
94         my $konto_anlegen = $dbh->prepare($insert_chart) || mydberror($insert_chart);
95
96
97         # 13-1 (16%) korrigieren:
98         my $edit_taxkey_13 = qq|UPDATE tax SET taxdescription = 'Steuerpflichtige EG-Lieferung zum vollen Steuersatz', rate = '0.16', chart_id = (select id FROM chart where accno = '3803'), taxnumber = 3803 WHERE taxkey = '13'|;
99         do_query($edit_taxkey_13);
100
101         # Sicherstellen, daß 3803 die richtige Bezeichnung hat
102         my $update_3803 = qq|update chart set description = 'Umsatzsteuer aus EG-Erwerb 16%' where accno = '3803'|;
103         do_query($update_3803);
104
105         # Zweiter  Eintrag für taxkey 13 in key: 19%
106         my $insert_taxkey_13_2 = qq|INSERT INTO tax ( taxkey, taxdescription, rate, chart_id, taxnumber ) VALUES ('13', 'Steuerpflichtige EG-Lieferung zum vollen Steuersatz', '0.19', (select id from chart where accno = '3804'), '3804')|;
107
108         do_query($insert_taxkey_13_2);
109
110         # alle Konten finden, bei denen 3803 das Steuerautomatikkonto ist,
111         # und dort den zweiten Eintrag ab 1.1.2007 für 19% einstellen
112         my $sth_query  = $dbh->prepare(qq|select c.id from chart c join taxkeys t on (c.id = t.chart_id) where tax_id = (select id from tax where taxnumber = '3803')|);
113         my $sth_insert = $dbh->prepare(qq|INSERT INTO taxkeys ( taxkey_id, chart_id, tax_id, pos_ustva, startdate )
114                                                        VALUES (13, ?, (select id from tax where taxkey = 13 and rate = '0.19'),
115             (select pos_ustva from taxkeys where tax_id = (select id from tax where taxnumber = '3803') and pos_ustva > 0 limit 1),
116             '01.01.2007')|);
117         $sth_query->execute();
118
119         while (my $ref = $sth_query->fetchrow_hashref()) {
120           $sth_insert->execute($ref->{id});
121         }
122         $sth_query->finish();
123         $sth_insert->finish();
124
125       }; # end code update
126   }; # end check if 3804 exists
127
128 }; # end do_update
129
130 sub print_past_booking_warning {
131   print $main::form->parse_html_template("dbupgrade/SKR04_3804_update");
132 };
133 sub print_3804_already_exists {
134   print $main::form->parse_html_template("dbupgrade/SKR04_3804_already_exists");
135 };
136
137 return do_update();