Funktion für zufällige temporäre Dateinamen (ohne gleich eine Datei zu öffnen).
[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 1;