Revision c05d3f5b
Von Moritz Bunkus vor fast 2 Jahren hinzugefügt
SL/LiquidityProjection.pm | ||
---|---|---|
318 | 318 |
: $date; |
319 | 319 |
} |
320 | 320 |
|
321 |
sub orders_for_time_period { |
|
322 |
my ($class, %params) = @_; |
|
323 |
|
|
324 |
my $dbh = SL::DB::Order->new->db->dbh; |
|
325 |
|
|
326 |
my @recurring_orders; |
|
327 |
|
|
328 |
# 1. Alle aktiven Konfigurationen für wiederkehrende Rechnungen auslesen. |
|
329 |
|
|
330 |
my $configs = SL::DB::Manager::PeriodicInvoicesConfig->get_all(where => [ active => 1 ]); |
|
331 |
|
|
332 |
my %calc_params; |
|
333 |
$calc_params{start_date} = $params{after}->clone if $params{after}; |
|
334 |
$calc_params{end_date} = $params{before}->clone->add(days => -1) if $params{before}; |
|
335 |
$calc_params{end_date} //= $calc_params{start_date}->clone->add(years => 1); |
|
336 |
|
|
337 |
foreach my $config (@{ $configs }) { |
|
338 |
my @dates = $config->calculate_invoice_dates(%calc_params); |
|
339 |
next unless @dates; |
|
340 |
|
|
341 |
my $order = SL::DB::Order->new(id => $config->oe_id)->load(with_objects => [ qw(customer employee) ]); |
|
342 |
$order->{is_recurring} = 1; |
|
343 |
|
|
344 |
push @recurring_orders, $order; |
|
345 |
} |
|
346 |
|
|
347 |
my @where = ( |
|
348 |
'!customer_id' => undef, |
|
349 |
or => [ quotation => undef, quotation => 0, ], |
|
350 |
or => [ closed => undef, closed => 0, ], |
|
351 |
); |
|
352 |
push @where, (reqdate => { ge => $params{after}->clone }) if $params{after}; |
|
353 |
push @where, (reqdate => { lt => $params{before}->clone }) if $params{before}; |
|
354 |
push @where, '!id' => [ map { $_->id } @recurring_orders ] if @recurring_orders; |
|
355 |
|
|
356 |
# 1. Auslesen aller offenen Aufträge, deren Lieferdatum im |
|
357 |
# gewünschten Bereich liegt |
|
358 |
my $regular_orders = SL::DB::Manager::Order->get_all( |
|
359 |
where => \@where, |
|
360 |
with_objects => [ qw(customer employee) ], |
|
361 |
); |
|
362 |
|
|
363 |
return sort { |
|
364 |
($a->transdate <=> $b->transdate) |
|
365 |
|| ($a->reqdate <=> $b->reqdate) |
|
366 |
|| (lc($a->customer->name) cmp lc($b->customer->name)) |
|
367 |
} (@recurring_orders, @{ $regular_orders }); |
|
368 |
} |
|
369 |
|
|
321 | 370 |
1; |
Auch abrufbar als: Unified diff
Liquiditätsübersicht: Auftragsliste gefixt
Die Links im Tabellenfuß hatten bisher auf die normale Auftragssuche
verwiesen. Problem war aber, dass dabei schlicht nicht exakt
diejenigen Aufträge angezeigt wurden, die für die Liquiditätsübersicht
relevant waren: teils zu viele, teils zu wenige (z.B. nicht diejenigen
der wiederkehrenden Rechnungen).
Die neue Liste ist eine eigene Funktion des
Liquiditätsübersichts-Controllers, die explizit diejenigen Belege
heraussucht, die für die Berechnung herangezogen werden.