Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision a8da9582

Von Niclas Zimmermann vor mehr als 11 Jahren hinzugefügt

  • ID a8da95826e357e75f78ccfc6b8f2c2523c52723f
  • Vorgänger 6e08e454
  • Nachfolger 0347cf10

Update-Script für constraints in der acc_trans

Fügt NOT-NULL constraints für die Spalten chart_id und trans_id in
der acc_trans hinzu. Falls NULL-Einträge vorhanden sind, wird das
Update mit Fehlermeldung abgebrochen.

Weiterhin wird eine Dependency in add_chart_link_to_acc_trans
hinzugefügt. Hier gab es durch NULL-Werte in acc_trans.chart_id
Probleme.

Unterschiede anzeigen:

locale/de/all
958 958
  'Help'                        => 'Hilfe',
959 959
  'Help Template Variables'     => 'Hilfe zu Dokumenten-Variablen',
960 960
  'Help on column names'        => 'Hilfe zu Spaltennamen',
961
  'Here'                        => 'Hier',
961 962
  'Here\'s an example command line:' => 'Hier ist eine Kommandozeile, die als Beispiel dient:',
962 963
  'Hide Filter'                 => 'Filter verbergen',
963 964
  'Hide by default'             => 'Standardmäßig verstecken',
......
1035 1036
  'Invalid follow-up ID.'       => 'Ungültige Wiedervorlage-ID.',
1036 1037
  'Invalid quantity.'           => 'Die Mengenangabe ist ungültig.',
1037 1038
  'Invalid request type \'#1\'' => 'Ungültiger Request-Typ \'#1\'',
1039
  'Invalid transactions'        => 'Ungültige Buchungen',
1038 1040
  'Invdate'                     => 'Rechnungsdatum',
1039 1041
  'Invdate from'                => 'Rechnungen von',
1040 1042
  'Inventory'                   => 'Inventar',
......
1425 1427
  'Please Check the bank information for each customer:' => 'Bitte überprüfen Sie die Bankinformationen der Kunden:',
1426 1428
  'Please Check the bank information for each vendor:' => 'Bitte überprüfen Sie die Kontoinformationen der Lieferanten:',
1427 1429
  'Please ask your administrator to create warehouses and bins.' => 'Bitten Sie Ihren Administrator, dass er Lager und Lagerplätze anlegt.',
1430
  'Please contact your administrator or a service provider.' => 'Bitte kontaktieren Sie Ihren Administrator oder einen Dienstleister.',
1428 1431
  'Please contact your administrator.' => 'Bitte wenden Sie sich an Ihren Administrator.',
1429 1432
  'Please define a taxkey for the following taxes and run the update again:' => 'Bitte definieren Sie einen Steuerschlüssel für die folgenden Steuern und starten Sie dann das Update erneut:',
1430 1433
  'Please enter a profile name.' => 'Bitte geben Sie einen Profilnamen an.',
......
1977 1980
  'The following old files whose settings have to be merged manually into the new configuration file "config/kivitendo.conf" still exist:' => 'Es existieren noch die folgenden alten Dateien, deren Einstellungen manuell in die neue Konfiguratsdatei "config/kivitendo.conf" migriert werden müssen:',
1978 1981
  'The following transaction contains wrong taxes:' => 'Die folgende Buchung enthält falsche Steuern:',
1979 1982
  'The following transaction contains wrong taxkeys:' => 'Die folgende Buchung enthält falsche Steuerschlüssel:',
1983
  'The following transactions are concerned:' => 'Die folgenden Buchungen sind betroffen:',
1980 1984
  'The following units are unknown.' => 'Die folgenden Einheiten sind unbekannt.',
1981 1985
  'The following units exist already:' => 'Die folgenden Einheiten existieren bereits:',
1982 1986
  'The following users have been migrated into the authentication database:' => 'Die folgenden Benutzer wurden in die Authentifizierungsdatenbank migriert:',
......
2072 2076
  'There are entries in tax where taxkey is NULL.' => 'In der Datenbank sind Steuern ohne Steuerschlüssel vorhanden (in der Tabelle tax Spalte taxkey).',
2073 2077
  'There are four tax zones.'   => 'Es gibt vier Steuerzonen.',
2074 2078
  'There are invalid taxnumbers in use.' => 'Es werden ungültige Steuerautomatik-Konten benutzt.',
2079
  'There are invalid transactions in your database.' => 'Sie haben ungültige Buchungen in Ihrer Datenbank.',
2075 2080
  'There are no entries in the background job history.' => 'Es gibt keine Einträge im Hintergrund-Job-Verlauf.',
2076 2081
  'There are no items in stock.' => 'Dieser Artikel ist nicht eingelagert.',
2077 2082
  'There are no items on your TODO list at the moment.' => 'Ihre Aufgabenliste enthält momentan keine Einträge.',
......
2099 2104
  'This group will be called "Full Access".' => 'Diese Gruppe wird "Vollzugriff" genannt.',
2100 2105
  'This installation uses an unknown chart of accounts ("#1"). This database upgrade cannot create standard buchungsgruppen automatically.' => 'Diese Installation benutzt einen unbekannten Kontenrahmen ("#1"). Dieses Datenbankupgrade kann die Standardbuchungsgruppen nicht automatisch anlegen.',
2101 2106
  'This is a preliminary check for existing sources. Nothing will be created or deleted at this stage!' => 'In diesem Schritt werden bestehende Datenbanken gesucht. Es werden noch keine Änderungen vorgenommen!',
2107
  'This is a very critical problem.' => 'Dieses Problem ist sehr schwerwiegend.',
2102 2108
  'This list is capped at 15 items to keep it fast. If you need a full list, please use reports.' => 'Diese Liste ist auf 15 Zeilen begrenzt. Wenn Sie eine vollständige Liste benötigen, erstellen Sie bitte einen Bericht.',
2103 2109
  'This means that the user has created an AP transaction and chosen a taxkey for sales taxes, or that he has created an AR transaction and chosen a taxkey for input taxes.' => 'Das bedeutet, dass ein Benutzer eine Kreditorenbuchung angelegt und in ihr einen Umsatzsteuer-Steuerschlüssel verwendet oder eine Debitorenbuchung mit Vorsteuer-Steuerschlüssel angelegt hat.',
2104 2110
  'This module can help you identify and correct such entries by analyzing the general ledger and presenting you likely solutions but also allowing you to fix problems yourself.' => 'Dieses Modul kann Ihnen helfen, problematische Einträge im Hauptbuch zu identifizieren und teilweise zu beheben. Dabei werden je nach Problem mögliche Lösungen aufgezeigt, wobei Sie die entscheiden können, welche Probleme automatisch gelöst werden sollen.',
......
2144 2150
  'Transaction has already been cancelled!' => 'Diese Buchung wurde bereits storniert.',
2145 2151
  'Transaction has been split on both the credit and the debit side' => 'Sowohl auf der Soll- als auch auf der Haben-Seite gesplittete Buchung',
2146 2152
  'Transaction posted!'         => 'Buchung verbucht!',
2153
  'Transactions without account:' => 'Buchungen ohne Konto:',
2154
  'Transactions without reference:' => 'Buchungen ohne Referenz:',
2147 2155
  'Transactions, AR transactions, AP transactions' => 'Dialogbuchen, Debitorenrechnungen, Kreditorenrechnungen',
2148 2156
  'Transdate'                   => 'Belegdatum',
2149 2157
  'Transfer'                    => 'Umlagern',
......
2537 2545
  'wrongformat'                 => 'Falsches Format',
2538 2546
  'yearly'                      => 'jährlich',
2539 2547
  'yes'                         => 'ja',
2548
  'you can find professional help.' => 'finden Sie professionelle Hilfe.',
2540 2549
};
2541 2550

  
2542 2551
1;
sql/Pg-upgrade2/acc_trans_constraints.pl
1
# @tag: acc_trans_constraints
2
# @description: Fügt NOT-NULL-Constraints ein für die Spalten
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
sub do_update {
27
  my $query = qq|SELECT count(*) FROM acc_trans WHERE chart_id IS NULL|;
28
  my ($no_chart_id) = $dbh->selectrow_array($query);
29
  $query = qq|SELECT count(*) FROM acc_trans WHERE trans_id IS NULL|;
30
  my ($no_trans_id) = $dbh->selectrow_array($query);
31

  
32
  $form->{no_chart_id}=$no_chart_id;
33
  $form->{no_trans_id}=$no_trans_id;
34

  
35
  if ($no_chart_id > 0 or $no_trans_id > 0){
36
    #list all invalid transactions where only chart_id is null:
37
    $query = qq|SELECT acc.acc_trans_id,
38
                  acc.gldate,
39
                  acc.transdate,
40
                  ABS(acc.amount) AS amount,
41
                  acc.trans_id,
42
                  acc.source,
43
                  gl.reference,
44
                  gl.description,
45
                  gl.notes,
46
                  e.name,
47
                  e.login AS user,
48
                  p.projectnumber,
49
                  p.description AS projectdescription
50
                FROM acc_trans acc
51
                JOIN gl ON (gl.id=acc.trans_id)
52
                LEFT JOIN employee e ON (gl.employee_id=e.id)
53
                LEFT JOIN project p ON (p.id=acc.project_id)
54
                WHERE acc.chart_id IS NULL
55

  
56
                UNION
57

  
58
                SELECT acc.acc_trans_id,
59
                  acc.gldate,
60
                  acc.transdate,
61
                  ABS(acc.amount) AS amount,
62
                  acc.trans_id,
63
                  acc.source,
64
                  a.invnumber AS reference,
65
                  c.name AS description,
66
                  a.notes,
67
                  e.name,
68
                  e.login AS user,
69
                  p.projectnumber,
70
                  p.description AS projectdescription
71
                FROM acc_trans acc
72
                JOIN ar a ON (a.id=acc.trans_id)
73
                LEFT JOIN employee e ON (a.employee_id=e.id)
74
                LEFT JOIN customer c ON (a.customer_id=c.id)
75
                LEFT JOIN project p ON (p.id=acc.project_id)
76
                WHERE acc.chart_id IS NULL
77

  
78
                UNION
79

  
80
                SELECT acc.acc_trans_id,
81
                  acc.gldate,
82
                  acc.transdate,
83
                  ABS(acc.amount) AS amount,
84
                  acc.trans_id,
85
                  acc.source,
86
                  a.invnumber AS reference,
87
                  v.name AS description,
88
                  a.notes,
89
                  e.name,
90
                  e.login AS user,
91
                  p.projectnumber,
92
                  p.description AS projectdescription
93
                FROM acc_trans acc
94
                JOIN ap a ON (a.id=acc.trans_id)
95
                LEFT JOIN employee e ON (a.employee_id=e.id)
96
                LEFT JOIN vendor v ON (a.vendor_id=v.id)
97
                LEFT JOIN project p ON (p.id=acc.project_id)
98
                WHERE acc.chart_id IS NULL;|;
99

  
100
    my $sth = $dbh->prepare($query);
101
    $sth->execute || $main::form->dberror($query);
102

  
103
    $main::form->{NO_CHART_ID} = [];
104
    while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
105
      map {$ref->{$_} = $::locale->{iconv_utf8}->convert($ref->{$_})} keys %$ref;
106
      push @{ $main::form->{NO_CHART_ID} }, $ref;
107
    }
108
    $sth->finish;
109

  
110
    #List all invalid transactions where trans_id is null:
111
    $query = qq|SELECT acc.acc_trans_id,
112
                  acc.gldate,
113
                  acc.transdate,
114
                  ABS(acc.amount) AS amount,
115
                  acc.source,
116
                  c.accno,
117
                  c.description,
118
                  c.category,
119
                  p.projectnumber,
120
                  p.description AS projectdescription
121
                FROM acc_trans acc
122
                LEFT JOIN chart c ON (c.id=acc.chart_id)
123
                LEFT JOIN project p ON (p.id=acc.project_id)
124
                WHERE acc.trans_id IS NULL;|;
125

  
126
    $sth = $dbh->prepare($query);
127
    $sth->execute || $main::form->dberror($query);
128

  
129
    $main::form->{NO_TRANS_ID} = [];
130
    while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
131
      map {$ref->{$_} = $::locale->{iconv_utf8}->convert($ref->{$_})} keys %$ref;
132
      $ref->{category} = ($ref->{category} eq 'A') ? $::locale->text('Account Category A')
133
        : ($ref->{category} eq 'E') ? $::locale->text('Account Category E')
134
        : ($ref->{category} eq 'L') ? $::locale->text('Account Category L')
135
        : ($ref->{category} eq 'I') ? $::locale->text('Account Category I')
136
        : ($ref->{category} eq 'Q') ? $::locale->text('Account Category Q')
137
        : ($ref->{category} eq 'C') ? $::locale->text('Account Category C')
138
        : ($ref->{category} eq 'G') ? $::locale->text('Account Category G')
139
        : $::locale->text('Unknown Category') . ': ' . $ref->{category};
140
      push @{ $main::form->{NO_TRANS_ID} }, $ref;
141
    }
142
    $sth->finish;
143

  
144
    print_error_message();
145
    return 0;
146
  }
147

  
148
  $query = qq|ALTER TABLE acc_trans ALTER COLUMN chart_id SET NOT NULL;|;
149
  $query .= qq|ALTER TABLE acc_trans ALTER COLUMN trans_id SET NOT NULL;|;
150

  
151
  do_query($query);
152
  return 1;
153
}
154

  
155
sub print_error_message {
156
  print $main::form->parse_html_template("dbupgrade/acc_trans_constraints");
157
}
158

  
159
return do_update();
sql/Pg-upgrade2/add_chart_link_to_acc_trans.sql
1 1
-- @tag: add_chart_link_to_acc_trans
2 2
-- @description: Neue Spalte chart_link in der acc_trans
3
-- @depends: release_3_0_0 
3
-- @depends: release_3_0_0 acc_trans_constraints
4 4

  
5 5
--Spalte link in der chart updaten:
6 6
UPDATE chart SET link = '' WHERE link IS NULL;
templates/webpages/dbupgrade/acc_trans_constraints.html
1
[%- USE T8 %]
2
[%- USE L %]
3
[% USE HTML %]<div class="listtop">[% 'Invalid transactions' | $T8 %]</div>
4

  
5
<form name="Form" method="post" action="login.pl">
6
<input type="hidden" name="action" value="login">
7

  
8
<p>[% 'There are invalid transactions in your database.' | $T8 %]</p>
9
<p>[% 'The following transactions are concerned:' | $T8 %]</p>
10

  
11
[% IF no_chart_id %]
12
  <p>[% 'Transactions without account:' | $T8 %]</p>
13
  <table>
14
    <tr>
15
      <th class="listheading">[% 'Database ID' | $T8 %]</th>
16
      <th class="listheading">[% 'Booking Date' | $T8 %]</th>
17
      <th class="listheading">[% 'Invoice Date' | $T8 %]</th>
18
      <th class="listheading">[% 'Amount' | $T8 %]</th>
19
      <th class="listheading">[% 'Buchungsnummer' | $T8 %]</th>
20
      <th class="listheading">[% 'Source' | $T8 %]</th>
21
      <th class="listheading">[% 'Reference / Invoice Number' | $T8 %]</th>
22
      <th class="listheading">[% 'Description' | $T8 %]</th>
23
      <th class="listheading">[% 'Notes' | $T8 %]</th>
24
      <th class="listheading">[% 'Employee' | $T8 %]</th>
25
      <th class="listheading">[% 'User' | $T8 %]</th>
26
      <th class="listheading">[% 'Project Number' | $T8 %]</th>
27
      <th class="listheading">[% 'Project Description' | $T8 %]</th>
28
    </tr>
29

  
30
    [% SET row_odd = '1' %][% FOREACH row = NO_CHART_ID %]
31
    <tr class="listrow[% IF row_odd %]1[% SET row_odd = '0' %][% ELSE %]0[% SET row_odd = '1' %][% END %]">
32
      <td align="left">[% HTML.escape(row.acc_trans_id) %]</td>
33
      <td align="left">[% HTML.escape(row.gldate) %]</td>
34
      <td align="left">[% HTML.escape(row.transdate) %]</td>
35
      <td align="left">[% HTML.escape(row.amount) %]</td>
36
      <td align="left">[% HTML.escape(row.trans_id) %]</td>
37
      <td align="left">[% HTML.escape(row.source) %]</td>
38
      <td align="left">[% HTML.escape(row.reference) %]</td>
39
      <td align="left">[% HTML.escape(row.description) %]</td>
40
      <td align="left">[% HTML.escape(row.notes) %]</td>
41
      <td align="left">[% HTML.escape(row.name) %]</td>
42
      <td align="left">[% HTML.escape(row.user) %]</td>
43
      <td align="left">[% HTML.escape(row.projectnumber) %]</td>
44
      <td align="left">[% HTML.escape(row.projectdescription) %]</td>
45
    </tr>
46
    [% END %]
47
  </table>
48

  
49
[% END %]
50

  
51
[% IF no_trans_id %]
52
  <p>[% 'Transactions without reference:' | $T8 %]</p>
53
  <table>
54
    <tr>
55
      <th class="listheading">[% 'Database ID' | $T8 %]</th>
56
      <th class="listheading">[% 'Booking Date' | $T8 %]</th>
57
      <th class="listheading">[% 'Invoice Date' | $T8 %]</th>
58
      <th class="listheading">[% 'Amount' | $T8 %]</th>
59
      <th class="listheading">[% 'Source' | $T8 %]</th>
60
      <th class="listheading">[% 'Account Number' | $T8 %]</th>
61
      <th class="listheading">[% 'Description' | $T8 %]</th>
62
      <th class="listheading">[% 'Account Type' | $T8 %]</th>
63
      <th class="listheading">[% 'Project Number' | $T8 %]</th>
64
      <th class="listheading">[% 'Project Description' | $T8 %]</th>
65
    </tr>
66

  
67
    [% SET row_odd = '1' %][% FOREACH row = NO_TRANS_ID %]
68
    <tr class="listrow[% IF row_odd %]1[% SET row_odd = '0' %][% ELSE %]0[% SET row_odd = '1' %][% END %]">
69
      <td align="left">[% HTML.escape(row.acc_trans_id) %]</td>
70
      <td align="left">[% HTML.escape(row.gldate) %]</td>
71
      <td align="left">[% HTML.escape(row.transdate) %]</td>
72
      <td align="left">[% HTML.escape(row.amount) %]</td>
73
      <td align="left">[% HTML.escape(row.source) %]</td>
74
      <td align="left">[% HTML.escape(row.accno) %]</td>
75
      <td align="left">[% HTML.escape(row.description) %]</td>
76
      <td align="left">[% HTML.escape(row.category) %]</td>
77
      <td align="left">[% HTML.escape(row.projectnumber) %]</td>
78
      <td align="left">[% HTML.escape(row.projectdescription) %]</td>
79
    </tr>
80
    [% END %]
81
  </table>
82

  
83
[% END %]
84

  
85
<p>[% 'This is a very critical problem.' | $T8 %]</p>
86
<p>[% 'Please contact your administrator or a service provider.' | $T8 %]</p>
87
<p><a href="http://www.kivitendo.de/partner.html" target="_blank">[% 'Here' | $T8 %]</a> [% 'you can find professional help.' | $T8 %]</p>
88

  
89
</form>

Auch abrufbar als: Unified diff