Globale Variablen für Druckvorlagen nach %::lx_office_conf verschoben
[kivitendo-erp.git] / SL / LICENSES.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 # SQL-Ledger Accounting
9 # Copyright (c) 2002
10 #
11 #  Author: Philip Reetz
12 #   Email: p.reetz@linet-services.de
13 #     Web: http://www.linet-services.de/
14 #
15 #
16 # This program is free software; you can redistribute it and/or modify
17 # it under the terms of the GNU General Public License as published by
18 # the Free Software Foundation; either version 2 of the License, or
19 # (at your option) any later version.
20 #
21 # This program is distributed in the hope that it will be useful,
22 # but WITHOUT ANY WARRANTY; without even the implied warranty of
23 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
24 # GNU General Public License for more details.
25 # You should have received a copy of the GNU General Public License
26 # along with this program; if not, write to the Free Software
27 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
28 #======================================================================
29 #
30 # Software license module
31 # Backend routines
32 #======================================================================
33
34 package LICENSES;
35
36 use SL::Form;
37
38 use strict;
39
40 sub save_license {
41   $main::lxdebug->enter_sub();
42
43   my ($self, $myconfig, $form) = @_;
44
45   my $dbh = $form->dbconnect($myconfig);
46
47   my $query =
48     qq| INSERT INTO license (licensenumber) VALUES ('$form->{licensenumber}')|;
49   my $sth = $dbh->prepare($query);
50   $sth->execute || $form->dberror($query);
51   $sth->finish();
52
53   $query =
54     qq|SELECT l.id FROM license l WHERE l.licensenumber = '$form->{licensenumber}'|;
55   $sth = $dbh->prepare($query);
56   $sth->execute || $form->dberror($query);
57   my ($license_id) = $sth->fetchrow_array;
58   $sth->finish();
59
60   # save license
61   $query = qq|UPDATE license SET
62               validuntil = '$form->{validuntil}',
63               licensenumber = '$form->{licensenumber}',
64               parts_id = $form->{parts_id},
65               customer_id = $form->{customer_id},
66               comment = '$form->{comment}',
67               quantity = $form->{quantity}
68               WHERE id=$license_id|;
69   $sth = $dbh->prepare($query);
70   $sth->execute || $form->dberror($query);
71   $sth->finish();
72
73   $dbh->disconnect();
74
75   $main::lxdebug->leave_sub();
76
77   return $license_id;
78 }
79
80 sub get_customers {
81   $main::lxdebug->enter_sub();
82
83   my ($self, $myconfig, $form) = @_;
84
85   my $ref;
86   my $dbh = $form->dbconnect($myconfig);
87
88   my $f     = $dbh->quote('%' . $form->{"customer_name"} . '%');
89   my $query = qq|SELECT * FROM customer WHERE name ilike $f|;
90   my $sth   = $dbh->prepare($query);
91   $sth->execute || $form->dberror($query);
92   $form->{"all_customers"} = [];
93   while ($ref = $sth->fetchrow_hashref("NAME_lc")) {
94     push(@{ $form->{"all_customers"} }, $ref);
95   }
96   $sth->finish();
97   $dbh->disconnect();
98   $main::lxdebug->leave_sub();
99 }
100
101 sub search {
102   $main::lxdebug->enter_sub();
103
104   my ($self, $myconfig, $form) = @_;
105   my ($ref, $sth, $f, $s, $query);
106   my $dbh = $form->dbconnect($myconfig);
107
108   if ($form->{"partnumber"} || $form->{"description"}) {
109     $f = "(parts_id IN (SELECT id FROM parts WHERE ";
110     if ($form->{"partnumber"}) {
111       $f .=
112         "(partnumber ILIKE "
113         . $dbh->quote('%' . $form->{"partnumber"} . '%') . ")";
114     }
115     if ($form->{"description"}) {
116       $f .= " AND " if ($form->{"partnumber"});
117       $f .=
118         "(description ILIKE "
119         . $dbh->quote('%' . $form->{"description"} . '%') . ")";
120     }
121     $f .= "))";
122   }
123
124   if ($form->{"customer_name"}) {
125     $f .= " AND " if ($f);
126     $f .=
127       "(l.customer_id IN (SELECT id FROM customer WHERE name ILIKE "
128       . $dbh->quote('%' . $form->{"customer_name"} . '%') . "))";
129   }
130
131   if (!$form->{"all"} && $form->{"expiring_in"}) {
132     $f .= " AND " if ($f);
133     $f .=
134       "(validuntil < now() + "
135       . $dbh->quote("" . $form->{"expiring_in"} . " months") . ")";
136   }
137
138   if (!$form->{"show_expired"}) {
139     $f .= " AND " if ($f);
140     $f .= "(validuntil >= now())";
141   }
142
143   if ($f) {
144     $f = "WHERE (inventory_accno_id notnull) AND $f";
145   } else {
146     $f = "WHERE (inventory_accno_id notnull)";
147   }
148
149   if ($form->{"sortby"} eq "partnumber") {
150     $s = "p.partnumber";
151   } elsif ($form->{"sortby"} eq "description") {
152     $s = "p.description";
153   } elsif ($form->{"sortby"} eq "name") {
154     $s = "c.name";
155   } elsif ($form->{"sortby"} eq "validuntil") {
156     $s = "l.validuntil";
157   } else {
158     $s = "l.validuntil";
159   }
160   if ($form->{"sortasc"}) {
161     $s .= " ASC";
162   } else {
163     $s .= " DESC";
164   }
165
166   $query =
167       "SELECT l.*, p.partnumber, p.description, c.name, a.invnumber "
168     . "FROM license l "
169     . "LEFT JOIN parts p ON (p.id = l.parts_id) "
170     . "LEFT JOIN customer c ON (c.id = l.customer_id) "
171     . "LEFT JOIN ar a ON "
172     . "(a.id = (SELECT i.trans_id FROM invoice i WHERE i.id = "
173     . "(SELECT li.trans_id FROM licenseinvoice li WHERE li.license_id = l.id))) "
174     . "$f ORDER BY $s";
175
176   $sth = $dbh->prepare($query);
177   $sth->execute() || $form->dberror($query);
178   $form->{"licenses"} = [];
179   while ($ref = $sth->fetchrow_hashref("NAME_lc")) {
180     push(@{ $form->{"licenses"} }, $ref);
181   }
182
183   $sth->finish();
184   $dbh->disconnect();
185   $main::lxdebug->leave_sub();
186 }
187
188 sub get_license {
189   $main::lxdebug->enter_sub();
190
191   my ($self, $myconfig, $form) = @_;
192   my ($ref, $sth, $query);
193   my $dbh = $form->dbconnect($myconfig);
194
195   $query =
196       "SELECT l.*, p.partnumber, p.description, c.name, c.street, "
197     . "c.zipcode, c.city, c.country, c.contact, c.phone, c.fax, c.homepage, "
198     . "c.email, c.notes, c.customernumber, c.language, a.invnumber "
199     . "FROM license l "
200     . "LEFT JOIN parts p ON (p.id = l.parts_id) "
201     . "LEFT JOIN customer c ON (c.id = l.customer_id) "
202     . "LEFT JOIN ar a ON "
203     . "(a.id = (SELECT i.trans_id FROM invoice i WHERE i.id = "
204     . "(SELECT li.trans_id FROM licenseinvoice li WHERE li.license_id = l.id))) "
205     . "LEFT JOIN invoice i ON "
206     . "(i.id = "
207     . "(SELECT li.trans_id FROM licenseinvoice li WHERE li.license_id = l.id)) "
208     . "WHERE l.id = "
209     . $form->{"id"};
210   $sth = $dbh->prepare($query);
211   $sth->execute() || $form->dberror($query);
212   $form->{"license"} = $sth->fetchrow_hashref("NAME_lc");
213   $sth->finish();
214   $dbh->disconnect();
215   $main::lxdebug->leave_sub();
216 }
217
218 1;