Revision 91ab1ef6
Von Sven Schöling vor etwa 17 Jahren hinzugefügt
SL/Common.pm | ||
---|---|---|
154 | 154 |
return $employees; |
155 | 155 |
} |
156 | 156 |
|
157 |
sub retrieve_customers_or_vendors { |
|
158 |
$main::lxdebug->enter_sub(); |
|
159 |
|
|
160 |
my ($self, $myconfig, $form, $order_by, $order_dir, $is_vendor, $allow_both) = @_; |
|
161 |
|
|
162 |
my $dbh = $form->dbconnect($myconfig); |
|
163 |
|
|
164 |
my (@filter_values, $filter); |
|
165 |
if ($form->{"name"}) { |
|
166 |
$filter .= " AND (TABLE.name ILIKE ?)"; |
|
167 |
push(@filter_values, '%' . $form->{"name"} . '%'); |
|
168 |
} |
|
169 |
if (!$form->{"obsolete"}) { |
|
170 |
$filter .= " AND NOT TABLE.obsolete"; |
|
171 |
} |
|
172 |
substr($filter, 1, 3) = "WHERE" if ($filter); |
|
173 |
|
|
174 |
$order_by =~ s/[^a-zA-Z_]//g; |
|
175 |
$order_dir = $order_dir ? "ASC" : "DESC"; |
|
176 |
|
|
177 |
my (@queries, @query_parameters); |
|
178 |
|
|
179 |
if ($allow_both || !$is_vendor) { |
|
180 |
my $c_filter = $filter; |
|
181 |
$c_filter =~ s/TABLE/c/g; |
|
182 |
push(@queries, qq|SELECT |
|
183 |
c.id, c.name, 0 AS customer_is_vendor, |
|
184 |
c.street, c.zipcode, c.city, |
|
185 |
ct.cp_greeting, ct.cp_title, ct.cp_givenname, ct.cp_name |
|
186 |
FROM customer c |
|
187 |
LEFT JOIN contacts ct ON (c.id = ct.cp_cv_id) |
|
188 |
$c_filter|); |
|
189 |
push(@query_parameters, @filter_values); |
|
190 |
} |
|
191 |
|
|
192 |
if ($allow_both || $is_vendor) { |
|
193 |
my $v_filter = $filter; |
|
194 |
$v_filter =~ s/TABLE/v/g; |
|
195 |
push(@queries, qq|SELECT |
|
196 |
v.id, v.name, 1 AS customer_is_vendor, |
|
197 |
v.street, v.zipcode, v.city, |
|
198 |
ct.cp_greeting, ct.cp_title, ct.cp_givenname, ct.cp_name |
|
199 |
FROM vendor v |
|
200 |
LEFT JOIN contacts ct ON (v.id = ct.cp_cv_id) |
|
201 |
$v_filter|); |
|
202 |
push(@query_parameters, @filter_values); |
|
203 |
} |
|
204 |
|
|
205 |
my $query = join(" UNION ", @queries) . " ORDER BY $order_by $order_dir"; |
|
206 |
my $sth = $dbh->prepare($query); |
|
207 |
$sth->execute(@query_parameters) || $form->dberror($query . " (" . join(", ", @query_parameters) . ")"); |
|
208 |
my $customers = []; |
|
209 |
while (my $ref = $sth->fetchrow_hashref()) { |
|
210 |
push(@{$customers}, $ref); |
|
211 |
} |
|
212 |
$sth->finish(); |
|
213 |
$dbh->disconnect(); |
|
214 |
|
|
215 |
$main::lxdebug->leave_sub(); |
|
216 |
|
|
217 |
return $customers; |
|
218 |
} |
|
219 |
|
|
157 | 220 |
sub retrieve_delivery_customer { |
158 | 221 |
$main::lxdebug->enter_sub(); |
159 | 222 |
|
Auch abrufbar als: Unified diff
Um die Benutzung des Template Systems mal ein wenig zu foerdern.
Die bin/mozilla/oe.pl noch einmal umgeschrieben, so dass jetzt noch mehr Funktionen ins Frontend ausgelagert sind.
Ein neues Highlight ist die template/generic/multibox.html, die es erlaubt aus wenigen Steuerkommandos ein HTML-Eingabefeld zu erstellen, was bei kleinen Datenmengen als Dropdownbox erscheint, udn bei grossen asl Textfeld, mit dazugehörigem Popup-Button, um eine Auswahlliste aufzumachen. Saemtliche Funktionen lassen sich ueber Perlfunktionsreferenzen wieder zurück ins Backend leiten, und dort wieder mit komplexer Logik füllen. Dokumentation ist im Template direkt enthalten.
Die Customer/Vendor Eingabe macht auch gleich Gebrauch davon und erzeugt bei zu grosser Anzahl ein Textfeld, und daneben einen Suchbutton, der die passenden Kunden in einer Liste anzeigt.
Der "Kundendetails"-Button wurde von "?" umbenannt in "D" (immernoch gruselig)
Auf Wunsch von Moritz habe ich die display_row von bin/mozilla/oe.pl wieder verlagert in die bin/mozilla/io.pl, und dafuer die Version in bin/mozilla/invoice_io.pl deaktiviert.