Bei Einkaufs-/Verkaufsmasken sowie bei Debitoren- und Kreditorenbuchungen wird ein...
[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 sub save_license {
39   $main::lxdebug->enter_sub();
40
41   my ($self, $myconfig, $form) = @_;
42
43   $dbh = $form->dbconnect($myconfig);
44
45   $query =
46     qq| INSERT INTO license (licensenumber) VALUES ('$form->{licensenumber}')|;
47   $sth = $dbh->prepare($query);
48   $sth->execute || $form->dberror($query);
49   $sth->finish();
50
51   $query =
52     qq|SELECT l.id FROM license l WHERE l.licensenumber = '$form->{licensenumber}'|;
53   $sth = $dbh->prepare($query);
54   $sth->execute || $form->dberror($query);
55   ($license_id) = $sth->fetchrow_array;
56   $sth->finish();
57
58   # save license
59   $query = qq|UPDATE license SET
60               validuntil = '$form->{validuntil}',
61               licensenumber = '$form->{licensenumber}',
62               parts_id = $form->{parts_id},
63               customer_id = $form->{customer_id},
64               comment = '$form->{comment}',
65               quantity = $form->{quantity}
66               WHERE id=$license_id|;
67   $sth = $dbh->prepare($query);
68   $sth->execute || $form->dberror($query);
69   $sth->finish();
70
71   if ($form->{own_product}) {
72     $form->update_balance($dbh, "parts", "onhand", qq|id = ?|,
73                           1, $form->{parts_id});
74   }
75
76   $dbh->disconnect();
77
78   $main::lxdebug->leave_sub();
79
80   return $license_id;
81 }
82
83 sub get_customers {
84   $main::lxdebug->enter_sub();
85
86   my ($self, $myconfig, $form) = @_;
87
88   my $ref;
89   my $dbh = $form->dbconnect($myconfig);
90
91   my $f     = $dbh->quote('%' . $form->{"customer_name"} . '%');
92   my $query = qq|SELECT * FROM customer WHERE name ilike $f|;
93   my $sth   = $dbh->prepare($query);
94   $sth->execute || $form->dberror($query);
95   $form->{"all_customers"} = [];
96   while ($ref = $sth->fetchrow_hashref(NAME_lc)) {
97     push(@{ $form->{"all_customers"} }, $ref);
98   }
99   $sth->finish();
100   $dbh->disconnect();
101   $main::lxdebug->leave_sub();
102 }
103
104 sub search {
105   $main::lxdebug->enter_sub();
106
107   my ($self, $myconfig, $form) = @_;
108   my ($ref, $sth, $f, $s, $query);
109   my $dbh = $form->dbconnect($myconfig);
110
111   if ($form->{"partnumber"} || $form->{"description"}) {
112     $f = "(parts_id IN (SELECT id FROM parts WHERE ";
113     if ($form->{"partnumber"}) {
114       $f .=
115         "(partnumber ILIKE "
116         . $dbh->quote('%' . $form->{"partnumber"} . '%') . ")";
117     }
118     if ($form->{"description"}) {
119       $f .= " AND " if ($form->{"partnumber"});
120       $f .=
121         "(description ILIKE "
122         . $dbh->quote('%' . $form->{"description"} . '%') . ")";
123     }
124     $f .= "))";
125   }
126
127   if ($form->{"customer_name"}) {
128     $f .= " AND " if ($f);
129     $f .=
130       "(l.customer_id IN (SELECT id FROM customer WHERE name ILIKE "
131       . $dbh->quote('%' . $form->{"customer_name"} . '%') . "))";
132   }
133
134   if (!$form->{"all"} && $form->{"expiring_in"}) {
135     $f .= " AND " if ($f);
136     $f .=
137       "(validuntil < now() + "
138       . $dbh->quote("" . $form->{"expiring_in"} . " months") . ")";
139   }
140
141   if (!$form->{"show_expired"}) {
142     $f .= " AND " if ($f);
143     $f .= "(validuntil >= now())";
144   }
145
146   if ($f) {
147     $f = "WHERE (inventory_accno_id notnull) AND $f";
148   } else {
149     $f = "WHERE (inventory_accno_id notnull)";
150   }
151
152   if ($form->{"sortby"} eq "partnumber") {
153     $s = "p.partnumber";
154   } elsif ($form->{"sortby"} eq "description") {
155     $s = "p.description";
156   } elsif ($form->{"sortby"} eq "name") {
157     $s = "c.name";
158   } elsif ($form->{"sortby"} eq "validuntil") {
159     $s = "l.validuntil";
160   } else {
161     $s = "l.validuntil";
162   }
163   if ($form->{"sortasc"}) {
164     $s .= " ASC";
165   } else {
166     $s .= " DESC";
167   }
168
169   $query =
170       "SELECT l.*, p.partnumber, p.description, c.name, a.invnumber "
171     . "FROM license l "
172     . "LEFT JOIN parts p ON (p.id = l.parts_id) "
173     . "LEFT JOIN customer c ON (c.id = l.customer_id) "
174     . "LEFT JOIN ar a ON "
175     . "(a.id = (SELECT i.trans_id FROM invoice i WHERE i.id = "
176     . "(SELECT li.trans_id FROM licenseinvoice li WHERE li.license_id = l.id))) "
177     . "$f ORDER BY $s";
178
179   $sth = $dbh->prepare($query);
180   $sth->execute() || $form->dberror($query);
181   $form->{"licenses"} = [];
182   while ($ref = $sth->fetchrow_hashref(NAME_lc)) {
183     push(@{ $form->{"licenses"} }, $ref);
184   }
185
186   $sth->finish();
187   $dbh->disconnect();
188   $main::lxdebug->leave_sub();
189 }
190
191 sub get_license {
192   $main::lxdebug->enter_sub();
193
194   my ($self, $myconfig, $form) = @_;
195   my ($ref, $sth, $query);
196   my $dbh = $form->dbconnect($myconfig);
197
198   $query =
199       "SELECT l.*, p.partnumber, p.description, c.name, c.street, "
200     . "c.zipcode, c.city, c.country, c.contact, c.phone, c.fax, c.homepage, "
201     . "c.email, c.notes, c.customernumber, c.language, a.invnumber "
202     . "FROM license l "
203     . "LEFT JOIN parts p ON (p.id = l.parts_id) "
204     . "LEFT JOIN customer c ON (c.id = l.customer_id) "
205     . "LEFT JOIN ar a ON "
206     . "(a.id = (SELECT i.trans_id FROM invoice i WHERE i.id = "
207     . "(SELECT li.trans_id FROM licenseinvoice li WHERE li.license_id = l.id))) "
208     . "LEFT JOIN invoice i ON "
209     . "(i.id = "
210     . "(SELECT li.trans_id FROM licenseinvoice li WHERE li.license_id = l.id)) "
211     . "WHERE l.id = "
212     . $form->{"id"};
213   $sth = $dbh->prepare($query);
214   $sth->execute() || $form->dberror($query);
215   $form->{"license"} = $sth->fetchrow_hashref(NAME_lc);
216   $sth->finish();
217   $dbh->disconnect();
218   $main::lxdebug->leave_sub();
219 }
220
221 1;