auf Original-Version zurückgesetzt
[kivitendo-erp.git] / 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 package SL::DBUpgrade2::acc_trans_constraints;
5
6 use utf8;
7 use strict;
8
9 use parent qw(SL::DBUpgrade2::Base);
10
11 sub run {
12   my ($self) = @_;
13
14   my $query = qq|SELECT count(*) FROM acc_trans WHERE chart_id IS NULL|;
15   my ($no_chart_id) = $self->dbh->selectrow_array($query);
16   $query = qq|SELECT count(*) FROM acc_trans WHERE trans_id IS NULL|;
17   my ($no_trans_id) = $self->dbh->selectrow_array($query);
18
19   $::form->{no_chart_id}=$no_chart_id;
20   $::form->{no_trans_id}=$no_trans_id;
21
22   if ($no_chart_id > 0 or $no_trans_id > 0){
23     #list all invalid transactions where only chart_id is null:
24     $query = qq|SELECT acc.acc_trans_id,
25                   acc.gldate,
26                   acc.transdate,
27                   ABS(acc.amount) AS amount,
28                   acc.trans_id,
29                   acc.source,
30                   gl.reference,
31                   gl.description,
32                   gl.notes,
33                   e.name,
34                   e.login AS user,
35                   p.projectnumber,
36                   p.description AS projectdescription
37                 FROM acc_trans acc
38                 JOIN gl ON (gl.id=acc.trans_id)
39                 LEFT JOIN employee e ON (gl.employee_id=e.id)
40                 LEFT JOIN project p ON (p.id=acc.project_id)
41                 WHERE acc.chart_id IS NULL
42
43                 UNION
44
45                 SELECT acc.acc_trans_id,
46                   acc.gldate,
47                   acc.transdate,
48                   ABS(acc.amount) AS amount,
49                   acc.trans_id,
50                   acc.source,
51                   a.invnumber AS reference,
52                   c.name AS description,
53                   a.notes,
54                   e.name,
55                   e.login AS user,
56                   p.projectnumber,
57                   p.description AS projectdescription
58                 FROM acc_trans acc
59                 JOIN ar a ON (a.id=acc.trans_id)
60                 LEFT JOIN employee e ON (a.employee_id=e.id)
61                 LEFT JOIN customer c ON (a.customer_id=c.id)
62                 LEFT JOIN project p ON (p.id=acc.project_id)
63                 WHERE acc.chart_id IS NULL
64
65                 UNION
66
67                 SELECT acc.acc_trans_id,
68                   acc.gldate,
69                   acc.transdate,
70                   ABS(acc.amount) AS amount,
71                   acc.trans_id,
72                   acc.source,
73                   a.invnumber AS reference,
74                   v.name AS description,
75                   a.notes,
76                   e.name,
77                   e.login AS user,
78                   p.projectnumber,
79                   p.description AS projectdescription
80                 FROM acc_trans acc
81                 JOIN ap a ON (a.id=acc.trans_id)
82                 LEFT JOIN employee e ON (a.employee_id=e.id)
83                 LEFT JOIN vendor v ON (a.vendor_id=v.id)
84                 LEFT JOIN project p ON (p.id=acc.project_id)
85                 WHERE acc.chart_id IS NULL;|;
86
87     my $sth = $self->dbh->prepare($query);
88     $sth->execute || $::form->dberror($query);
89
90     $::form->{NO_CHART_ID} = [];
91     while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
92       push @{ $::form->{NO_CHART_ID} }, $ref;
93     }
94     $sth->finish;
95
96     #List all invalid transactions where trans_id is null:
97     $query = qq|SELECT acc.acc_trans_id,
98                   acc.gldate,
99                   acc.transdate,
100                   ABS(acc.amount) AS amount,
101                   acc.source,
102                   c.accno,
103                   c.description,
104                   c.category,
105                   p.projectnumber,
106                   p.description AS projectdescription
107                 FROM acc_trans acc
108                 LEFT JOIN chart c ON (c.id=acc.chart_id)
109                 LEFT JOIN project p ON (p.id=acc.project_id)
110                 WHERE acc.trans_id IS NULL;|;
111
112     $sth = $self->dbh->prepare($query);
113     $sth->execute || $::form->dberror($query);
114
115     $::form->{NO_TRANS_ID} = [];
116     while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
117       $ref->{category} = ($ref->{category} eq 'A') ? $::locale->text('Account Category A')
118         : ($ref->{category} eq 'E') ? $::locale->text('Account Category E')
119         : ($ref->{category} eq 'L') ? $::locale->text('Account Category L')
120         : ($ref->{category} eq 'I') ? $::locale->text('Account Category I')
121         : ($ref->{category} eq 'Q') ? $::locale->text('Account Category Q')
122         : ($ref->{category} eq 'C') ? $::locale->text('Account Category C')
123         : ($ref->{category} eq 'G') ? $::locale->text('Account Category G')
124         : $::locale->text('Unknown Category') . ': ' . $ref->{category};
125       push @{ $::form->{NO_TRANS_ID} }, $ref;
126     }
127     $sth->finish;
128
129     print_error_message();
130     return 0;
131   }
132
133   $query = qq|ALTER TABLE acc_trans ALTER COLUMN chart_id SET NOT NULL;|;
134   $query .= qq|ALTER TABLE acc_trans ALTER COLUMN trans_id SET NOT NULL;|;
135
136   $self->db_query($query);
137   return 1;
138 }
139
140 sub print_error_message {
141   print $::form->parse_html_template("dbupgrade/acc_trans_constraints");
142 }
143
144 1;