Revision d58c5bcc
Von Kivitendo Admin vor mehr als 2 Jahren hinzugefügt
SL/IC.pm | ||
---|---|---|
201 | 201 |
|
202 | 202 |
my %joins = ( |
203 | 203 |
partsgroup => 'LEFT JOIN partsgroup pg ON (pg.id = p.partsgroup_id)', |
204 |
makemodel => 'LEFT JOIN makemodel mm ON (mm.parts_id = p.id)', |
|
204 |
makemodel => "LEFT JOIN LATERAL ( |
|
205 |
SELECT string_agg(mv.vendornumber || ' ' || mv.name, ', ') AS make, |
|
206 |
string_agg(mm.model, ', ') AS model |
|
207 |
FROM makemodel mm |
|
208 |
LEFT JOIN vendor mv ON (mv.id = mm.make) |
|
209 |
WHERE mm.parts_id = p.id |
|
210 |
) mm ON TRUE", |
|
205 | 211 |
pfac => 'LEFT JOIN price_factors pfac ON (pfac.id = p.price_factor_id)', |
206 | 212 |
invoice_oi => |
207 | 213 |
q|LEFT JOIN ( |
... | ... | |
219 | 225 |
SELECT id, name, 'customer' AS cv FROM customer UNION |
220 | 226 |
SELECT id, name, 'vendor' AS cv FROM vendor |
221 | 227 |
) AS cv ON cv.id = apoe.customer_id OR cv.id = apoe.vendor_id|, |
222 |
mv => 'LEFT JOIN vendor AS mv ON mv.id = mm.make', |
|
223 | 228 |
project => 'LEFT JOIN project AS pj ON pj.id = COALESCE(ioi.project_id, apoe.globalproject_id)', |
224 | 229 |
warehouse => 'LEFT JOIN warehouse AS wh ON wh.id = p.warehouse_id', |
225 | 230 |
bin => 'LEFT JOIN bin ON bin.id = p.bin_id', |
226 | 231 |
); |
227 |
my @join_order = qw(partsgroup makemodel mv invoice_oi apoe cv pfac project warehouse bin);
|
|
232 |
my @join_order = qw(partsgroup makemodel invoice_oi apoe cv pfac project warehouse bin); |
|
228 | 233 |
|
229 | 234 |
my %table_prefix = ( |
230 | 235 |
deliverydate => 'apoe.', serialnumber => 'ioi.', |
... | ... | |
405 | 410 |
# all_parts is based upon the assumption that every parameter is named like the column it represents |
406 | 411 |
# unfortunately make would have to match vendor.name which is already taken for vendor.name in bsooqr mode. |
407 | 412 |
# fortunately makemodel doesn't need to be displayed later, so adding a special clause to where_token is sufficient. |
413 |
# the lateral join mm already creates a string consisting of vendornumbers and vendornames in mm.make |
|
414 |
# and the models in mm.make |
|
408 | 415 |
if ($form->{make}) { |
409 |
push @where_tokens, 'mv.name ILIKE ?';
|
|
416 |
push @where_tokens, 'mm.make ILIKE ?';
|
|
410 | 417 |
push @bind_vars, like($form->{make}); |
411 | 418 |
} |
412 | 419 |
if ($form->{model}) { |
... | ... | |
449 | 456 |
$joins_needed{pfac} = 1; |
450 | 457 |
$joins_needed{project} = 1 if grep { $form->{$_} || $form->{"l_$_"} } @project_filters; |
451 | 458 |
$joins_needed{makemodel} = 1 if grep { $form->{$_} || $form->{"l_$_"} } @makemodel_filters; |
452 |
$joins_needed{mv} = 1 if $joins_needed{makemodel}; |
|
453 | 459 |
$joins_needed{cv} = 1 if $bsooqr; |
454 | 460 |
$joins_needed{apoe} = 1 if $joins_needed{project} || $joins_needed{cv} || grep { $form->{$_} || $form->{"l_$_"} } @apoe_filters; |
455 | 461 |
$joins_needed{invoice_oi} = 1 if $joins_needed{project} || $joins_needed{apoe} || grep { $form->{$_} || $form->{"l_$_"} } @invoice_oi_filters; |
Auch abrufbar als: Unified diff
Artikelbericht - Lieferant korrekt anzeigen
Bisher wurde im Bericht nur die Lieferanten-ID angezeigt, und für jeden
Lieferantenartikel gab es eine eigene Artikel-Zeile, wodurch auch die
Gesamtsummen verfälscht wurden.
Per lateral join und string_agg werden jetzt mehrere Lieferantenartikel
in jeweils eine Textzeile für Lieferant und Lieferantenartikelnummer
umgewandelt.
In Bericht aufnehmen: funktioniert nun auch mit mehreren
Lieferantenartikeln, vorher wurden für jeden Lieferantenartikel mehrere
Artikelzeilen angezeigt, jetzt werden diese per Komma getrennt als Text
angezeigt.
Funktioniert auch für die beiden Filter Lieferant und
Lieferantenartikelnr.