Anscheinend gab es irgendwo im Upgrade-Pfad Unstimmigkeiten, sodass nicht alle Datenb...
[kivitendo-erp.git] / SL / Common.pm
1 #====================================================================
2 # LX-Office ERP
3 # Copyright (C) 2004
4 # Based on SQL-Ledger Version 2.1.9
5 # Web http://www.lx-office.org
6 #
7 #====================================================================
8
9 package Common;
10
11 use Time::HiRes qw(gettimeofday);
12
13 sub unique_id {
14   my ($a, $b) = gettimeofday();
15   return "${a}-${b}-${$}";
16 }
17
18 sub tmpname {
19   return "/tmp/lx-office-tmp-" . unique_id();
20 }
21
22 sub retrieve_parts {
23   $main::lxdebug->enter_sub();
24
25   my ($self, $myconfig, $form, $order_by, $order_dir) = @_;
26
27   my $dbh = $form->dbconnect($myconfig);
28
29   my (@filter_values, $filter);
30   if ($form->{"partnumber"}) {
31     $filter .= " AND (partnumber ILIKE ?)";
32     push(@filter_values, '%' . $form->{"partnumber"} . '%');
33   }
34   if ($form->{"description"}) {
35     $filter .= " AND (description ILIKE ?)";
36     push(@filter_values, '%' . $form->{"description"} . '%');
37   }
38   substr($filter, 1, 3) = "WHERE" if ($filter);
39
40   $order_by =~ s/[^a-zA-Z_]//g;
41   $order_dir = $order_dir ? "ASC" : "DESC";
42
43   my $query = "SELECT id, partnumber, description FROM parts $filter ORDER BY $order_by $order_dir";
44   my $sth = $dbh->prepare($query);
45   $sth->execute(@filter_values) || $form->dberror($query . " (" . join(", ", @filter_values) . ")");
46   my $parts = [];
47   while (my $ref = $sth->fetchrow_hashref()) {
48     push(@{$parts}, $ref);
49   }
50   $sth->finish();
51   $dbh->disconnect();
52
53   $main::lxdebug->leave_sub();
54
55   return $parts;
56 }
57
58 sub retrieve_projects {
59   $main::lxdebug->enter_sub();
60
61   my ($self, $myconfig, $form, $order_by, $order_dir) = @_;
62
63   my $dbh = $form->dbconnect($myconfig);
64
65   my (@filter_values, $filter);
66   if ($form->{"projectnumber"}) {
67     $filter .= " AND (projectnumber ILIKE ?)";
68     push(@filter_values, '%' . $form->{"projectnumber"} . '%');
69   }
70   if ($form->{"description"}) {
71     $filter .= " AND (description ILIKE ?)";
72     push(@filter_values, '%' . $form->{"description"} . '%');
73   }
74   substr($filter, 1, 3) = "WHERE" if ($filter);
75
76   $order_by =~ s/[^a-zA-Z_]//g;
77   $order_dir = $order_dir ? "ASC" : "DESC";
78
79   my $query = "SELECT id, projectnumber, description FROM project $filter ORDER BY $order_by $order_dir";
80   my $sth = $dbh->prepare($query);
81   $sth->execute(@filter_values) || $form->dberror($query . " (" . join(", ", @filter_values) . ")");
82   my $projects = [];
83   while (my $ref = $sth->fetchrow_hashref()) {
84     push(@{$projects}, $ref);
85   }
86   $sth->finish();
87   $dbh->disconnect();
88
89   $main::lxdebug->leave_sub();
90
91   return $projects;
92 }
93
94 sub retrieve_employees {
95   $main::lxdebug->enter_sub();
96
97   my ($self, $myconfig, $form, $order_by, $order_dir) = @_;
98
99   my $dbh = $form->dbconnect($myconfig);
100
101   my (@filter_values, $filter);
102   if ($form->{"name"}) {
103     $filter .= " AND (name ILIKE ?)";
104     push(@filter_values, '%' . $form->{"name"} . '%');
105   }
106   substr($filter, 1, 3) = "WHERE" if ($filter);
107
108   $order_by =~ s/[^a-zA-Z_]//g;
109   $order_dir = $order_dir ? "ASC" : "DESC";
110
111   my $query = "SELECT id, name FROM employee $filter ORDER BY $order_by $order_dir";
112   my $sth = $dbh->prepare($query);
113   $sth->execute(@filter_values) || $form->dberror($query . " (" . join(", ", @filter_values) . ")");
114   my $employees = [];
115   while (my $ref = $sth->fetchrow_hashref()) {
116     push(@{$employees}, $ref);
117   }
118   $sth->finish();
119   $dbh->disconnect();
120
121   $main::lxdebug->leave_sub();
122
123   return $employees;
124 }
125
126 sub retrieve_delivery_customer {
127   $main::lxdebug->enter_sub();
128
129   my ($self, $myconfig, $form, $order_by, $order_dir) = @_;
130
131   my $dbh = $form->dbconnect($myconfig);
132
133   my (@filter_values, $filter);
134   if ($form->{"name"}) {
135     $filter .= " (name ILIKE '%$form->{name}%') AND";
136     push(@filter_values, '%' . $form->{"name"} . '%');
137   }
138   #substr($filter, 1, 3) = "WHERE" if ($filter);
139
140   $order_by =~ s/[^a-zA-Z_]//g;
141   $order_dir = $order_dir ? "ASC" : "DESC";
142
143   my $query = "SELECT id, name, customernumber, (street || ', ' || zipcode || city) as address FROM customer WHERE $filter business_id=(SELECT id from business WHERE description='Endkunde') ORDER BY $order_by $order_dir";
144   my $sth = $dbh->prepare($query);
145   $sth->execute() || $form->dberror($query . " (" . join(", ", @filter_values) . ")");
146   my $delivery_customers = [];
147   while (my $ref = $sth->fetchrow_hashref()) {
148     push(@{$delivery_customers}, $ref);
149   }
150   $sth->finish();
151   $dbh->disconnect();
152
153   $main::lxdebug->leave_sub();
154
155   return $delivery_customers;
156 }
157
158 sub retrieve_vendor {
159   $main::lxdebug->enter_sub();
160
161   my ($self, $myconfig, $form, $order_by, $order_dir) = @_;
162
163   my $dbh = $form->dbconnect($myconfig);
164
165   my (@filter_values, $filter);
166   if ($form->{"name"}) {
167     $filter .= " (name ILIKE '%$form->{name}%') AND";
168     push(@filter_values, '%' . $form->{"name"} . '%');
169   }
170   #substr($filter, 1, 3) = "WHERE" if ($filter);
171
172   $order_by =~ s/[^a-zA-Z_]//g;
173   $order_dir = $order_dir ? "ASC" : "DESC";
174
175   my $query = "SELECT id, name, customernumber, (street || ', ' || zipcode || city) as address FROM customer WHERE $filter business_id=(SELECT id from business WHERE description='Händler') ORDER BY $order_by $order_dir";
176   my $sth = $dbh->prepare($query);
177   $sth->execute() || $form->dberror($query . " (" . join(", ", @filter_values) . ")");
178   my $vendors = [];
179   while (my $ref = $sth->fetchrow_hashref()) {
180     push(@{$vendors}, $ref);
181   }
182   $sth->finish();
183   $dbh->disconnect();
184
185   $main::lxdebug->leave_sub();
186
187   return $vendors;
188 }
189
190 sub mkdir_with_parents {
191   $main::lxdebug->enter_sub();
192
193   my ($full_path) = @_;
194
195   my $path = "";
196
197   $full_path =~ s|/+|/|;
198
199   foreach my $part (split(m|/|, $full_path)) {
200     $path .= "/" if ($path);
201     $path .= $part;
202
203     die("Could not create directory '$path' because a file exists with " .
204         "the same name.\n") if (-f $path);
205
206     if (! -d $path) {
207       mkdir($path, 0770) || die("Could not create the directory '$path'. " .
208                                 "OS error: $!\n");
209     }
210   }
211
212   $main::lxdebug->leave_sub();
213 }
214
215 sub webdav_folder {
216   $main::lxdebug->enter_sub();
217
218   my ($form) = @_;
219
220   return $main::lxdebug->leave_sub()
221     unless ($main::webdav && $form->{id});
222
223   my ($path, $number);
224
225   $form->{WEBDAV} = {};
226
227   if ($form->{type} eq "sales_quotation") {
228     ($path, $number) = ("angebote", $form->{quonumber});
229   } elsif ($form->{type} eq "sales_order") {
230     ($path, $number) = ("bestellungen", $form->{ordnumber});
231   } elsif ($form->{type} eq "request_quotation") {
232     ($path, $number) = ("anfragen", $form->{quonumber});
233   } elsif ($form->{type} eq "purchase_order") {
234     ($path, $number) = ("lieferantenbestellungen", $form->{ordnumber});
235   } elsif ($form->{type} eq "credit_note") {
236     ($path, $number) = ("gutschriften", $form->{invnumber});
237   } elsif ($form->{vc} eq "customer") {
238     ($path, $number) = ("rechnungen", $form->{invnumber});
239   } else {
240     ($path, $number) = ("einkaufsrechnungen", $form->{invnumber});
241   }
242
243   return $main::lxdebug->leave_sub() unless ($path && $number);
244
245   $path = "webdav/${path}/${number}";
246
247   if (!-d $path) {
248     mkdir_with_parents($path);
249
250   } else {
251     my $base_path = substr($ENV{'SCRIPT_NAME'}, 1);
252     $base_path =~ s|[^/]+$||;
253
254     foreach my $file (<$path/*>) {
255       my $fname = $file;
256       $fname =~ s|.*/||;
257       $form->{WEBDAV}{$fname} =
258         ($ENV{"HTTPS"} ? "https://" : "http://") .
259         $ENV{'SERVER_NAME'} . "/" . $base_path . $file;
260     }
261   }
262
263   $main::lxdebug->leave_sub();
264 }
265
266 1;