203857f82e4cd4bfec69f74db3a36ba9544799da
[kivitendo-erp.git] / sql / Pg-upgrade / Pg-upgrade-2.2.0.28-2.2.0.29.pl
1 #!/usr/bin/perl
2
3 die("This script cannot be run from the command line.") unless ($main::form);
4
5 sub mydberror {
6   my ($msg) = @_;
7   die($dbup_locale->text("Database update error:") .
8       "<br>$msg<br>" . $DBI::errstr);
9 }
10
11 sub myshowerror {
12   my ($msg) = @_;
13
14   print($main::form->parse_html_template2("dbupgrade/units_error",
15                                           { "message" => $msg }));
16   return 2;
17 }
18
19 sub fix_skr03 {
20   my $query;
21
22   $query =
23     "UPDATE chart " .
24     "SET link = 'AP_amount:IC_cogs', pos_ustva = 91 " .
25     "WHERE accno = '3559'";
26   $dbh->do($query) || mydberror($query);
27
28   $dbh->commit();
29   $dbh->begin_work();
30 }
31
32 sub fix_skr04 {
33   my $query;
34
35   $query =
36     "UPDATE chart " .
37     "SET link = 'AP_amount:IC_cogs', pos_ustva = 91 " .
38     "WHERE accno = '5559'";
39   $dbh->do($query) || mydberror($query);
40
41   $dbh->commit();
42   $dbh->begin_work();
43 }
44
45 sub create_standard_buchungsgruppen_skr03 {
46   my $query;
47
48   $query = "SELECT COUNT(*) FROM buchungsgruppen " .
49     "WHERE description = 'Standard 16%'";
50   my ($count) = $dbh->selectrow_array($query);
51
52   if (!$count) {
53     $query =
54       "INSERT INTO buchungsgruppen " .
55       "(description, inventory_accno_id, " .
56       " income_accno_id_0, expense_accno_id_0, " .
57       " income_accno_id_1, expense_accno_id_1, " .
58       " income_accno_id_2, expense_accno_id_2, " .
59       " income_accno_id_3, expense_accno_id_3) " .
60       "VALUES " .
61       "('Standard 16%', " .
62       # 3980: Bestand Waren
63       " (SELECT id FROM chart WHERE accno = '3980'), " .
64       # 8400: Erlöse 16% USt.
65       # 3400: Wareneingang 16% Vorsteuer
66       " (SELECT id FROM chart WHERE accno = '8400'), " .
67       " (SELECT id FROM chart WHERE accno = '3400'), " .
68       # 8320: Erlöse aus im and.EG-Land steuerpfl.Lieferungen
69       # 3550: Steuerfreier innergem.Erwerb
70       " (SELECT id FROM chart WHERE accno = '8320'), " .
71       " (SELECT id FROM chart WHERE accno = '3550'), " .
72       # 8315: Erlös Inland stpfl.EG-Lieferung 16%
73       # 3425: Innergem.Erwerb 16% VorSt u. Ust
74       " (SELECT id FROM chart WHERE accno = '8315'), " .
75       " (SELECT id FROM chart WHERE accno = '3425'), " .
76       # 8120: Steuerfreie Umsätze §4Nr.1a UstG
77       # 3559: Steuerfreie Einfuhren
78       " (SELECT id FROM chart WHERE accno = '8120'), " .
79       " (SELECT id FROM chart WHERE accno = '3559'))";
80     $dbh->do($query) || mydberror($query);
81   }
82
83   $query = "SELECT COUNT(*) FROM buchungsgruppen " .
84     "WHERE description = 'Standard 7%'";
85   my ($count) = $dbh->selectrow_array($query);
86
87   if (!$count) {
88     $query =
89       "INSERT INTO buchungsgruppen " .
90       "(description, inventory_accno_id, " .
91       " income_accno_id_0, expense_accno_id_0, " .
92       " income_accno_id_1, expense_accno_id_1, " .
93       " income_accno_id_2, expense_accno_id_2, " .
94       " income_accno_id_3, expense_accno_id_3) " .
95       "VALUES " .
96       "('Standard 7%', " .
97       # 3980: Bestand Waren
98       " (SELECT id FROM chart WHERE accno = '3980'), " .
99       # 8300: Erlöse 7% USt.
100       # 3300: Wareneingang 7% Vorsteuer
101       " (SELECT id FROM chart WHERE accno = '8300'), " .
102       " (SELECT id FROM chart WHERE accno = '3300'), " .
103       # 8125: Steuerfrei innergem. Lieferungen §41bUStG
104       # 3550: Steuerfreier innergem.Erwerb
105       " (SELECT id FROM chart WHERE accno = '8125'), " .
106       " (SELECT id FROM chart WHERE accno = '3550'), " .
107       # 8310: Erlöse Inland stpfl. EG-Lieferung7%
108       # 3420: Innergemein.Erwerb 7% VorSt u. Ust
109       " (SELECT id FROM chart WHERE accno = '8310'), " .
110       " (SELECT id FROM chart WHERE accno = '3420'), " .
111       # 8120: Steuerfreie Umsätze §4Nr.1a UstG
112       # 3559: Steuerfreie Einfuhren
113       " (SELECT id FROM chart WHERE accno = '8120'), " .
114       " (SELECT id FROM chart WHERE accno = '3559'))";
115     $dbh->do($query) || mydberror($query);
116   }
117
118   return 1;
119 }
120
121 sub create_standard_buchungsgruppen_skr04 {
122   my $query;
123
124   $query = "SELECT COUNT(*) FROM buchungsgruppen " .
125     "WHERE description = 'Standard 16%'";
126   my ($count) = $dbh->selectrow_array($query);
127
128   if (!$count) {
129     $query =
130       "INSERT INTO buchungsgruppen " .
131       "(description, inventory_accno_id, " .
132       " income_accno_id_0, expense_accno_id_0, " .
133       " income_accno_id_1, expense_accno_id_1, " .
134       " income_accno_id_2, expense_accno_id_2, " .
135       " income_accno_id_3, expense_accno_id_3) " .
136       "VALUES " .
137       "('Standard 16%', " .
138       # 1140: Bestand Waren
139       " (SELECT id FROM chart WHERE accno = '1140'), " .
140       # 4400: Erlöse 16% USt.
141       # 5400: Wareneingang 16% Vorsteuer
142       " (SELECT id FROM chart WHERE accno = '4400'), " .
143       " (SELECT id FROM chart WHERE accno = '5400'), " .
144       # 4125: Steuerfrei innergem. Lieferungen §41bUStG
145       # 5550: Steuerfreier innergem.Erwerb
146       " (SELECT id FROM chart WHERE accno = '4125'), " .
147       " (SELECT id FROM chart WHERE accno = '5550'), " .
148       # 4315: Erlös Inland stpfl.EG-Lieferung 16%
149       # 5425: Innergem.Erwerb 16% VorSt u. Ust
150       " (SELECT id FROM chart WHERE accno = '4315'), " .
151       " (SELECT id FROM chart WHERE accno = '5425'), " .
152       # 4150: Sonstige steuerfreie Umsätze §42-7UStG
153       # 5559: Steuerfreie Einfuhren
154       " (SELECT id FROM chart WHERE accno = '4150'), " .
155       " (SELECT id FROM chart WHERE accno = '5559'))";
156     $dbh->do($query) || mydberror($query);
157   }
158
159   $query = "SELECT COUNT(*) FROM buchungsgruppen " .
160     "WHERE description = 'Standard 7%'";
161   my ($count) = $dbh->selectrow_array($query);
162
163   if (!$count) {
164     $query =
165       "INSERT INTO buchungsgruppen " .
166       "(description, inventory_accno_id, " .
167       " income_accno_id_0, expense_accno_id_0, " .
168       " income_accno_id_1, expense_accno_id_1, " .
169       " income_accno_id_2, expense_accno_id_2, " .
170       " income_accno_id_3, expense_accno_id_3) " .
171       "VALUES " .
172       "('Standard 7%', " .
173       # 1140: Bestand Waren
174       " (SELECT id FROM chart WHERE accno = '1140'), " .
175       # 4300: Erlöse 7%USt
176       # 5300: Wareneingang 7% Vorsteuer
177       " (SELECT id FROM chart WHERE accno = '4300'), " .
178       " (SELECT id FROM chart WHERE accno = '5300'), " .
179       # 4125: Steuerfrei innergem. Lieferungen §41bUStG
180       # 5550: Steuerfreier innergem.Erwerb
181       " (SELECT id FROM chart WHERE accno = '4125'), " .
182       " (SELECT id FROM chart WHERE accno = '5550'), " .
183       # 4310: Erlöse Inland stpfl. EG-Lieferung7%
184       # 5420: Innergemein.Erwerb 7% VorSt u. Ust
185       " (SELECT id FROM chart WHERE accno = '4310'), " .
186       " (SELECT id FROM chart WHERE accno = '5420'), " .
187       # 4150: Sonstige steuerfreie Umsätze §42-7UStG
188       # 5559; Steuerfreie Einfuhren
189       " (SELECT id FROM chart WHERE accno = '4150'), " .
190       " (SELECT id FROM chart WHERE accno = '5559'))";
191     $dbh->do($query) || mydberror($query);
192   }
193
194   return 1;
195 }
196
197 sub create_standard_buchungsgruppen {
198   my $form = $main::form;
199
200   my $query = "SELECT coa FROM defaults";
201   my ($coa) = $dbh->selectrow_array($query);
202
203   if ($coa eq "Germany-DATEV-SKR03EU") {
204     fix_skr03();
205     return create_standard_buchungsgruppen_skr03();
206
207   } elsif ($coa eq "Germany-DATEV-SKR04EU") {
208     fix_skr04();
209     return create_standard_buchungsgruppen_skr04();
210   }
211
212   print($form->parse_html_template2("dbupgrade/std_buchungsgruppen_unknown_coa", { "coa" => $coa }));
213
214   return 1;
215 }
216
217 return create_standard_buchungsgruppen();