Revision 031566ec
Von Sven Schöling vor fast 7 Jahren hinzugefügt
SL/Controller/BankTransaction.pm | ||
---|---|---|
use SL::DB::SepaExportItem;
|
||
use SL::DBUtils qw(like);
|
||
|
||
use List::UtilsBy qw(partition_by);
|
||
use List::MoreUtils qw(any);
|
||
use List::MoreUtils qw(any none);
|
||
use List::Util qw(max);
|
||
|
||
use Rose::Object::MakeMethods::Generic
|
||
... | ... | |
push @all_open_invoices, map { $_->{is_ar}=0 ; $_ } grep { abs($_->amount - $_->paid) >= 0.01 } @{ $all_open_ap_invoices };
|
||
|
||
my %sepa_exports;
|
||
my %sepa_export_items_by_id = partition_by { $_->ar_id || $_->ap_id } @$all_open_sepa_export_items;
|
||
|
||
# first collect sepa export items to open invoices
|
||
foreach my $open_invoice (@all_open_invoices){
|
||
$open_invoice->{realamount} = $::form->format_amount(\%::myconfig,$open_invoice->amount,2);
|
||
$open_invoice->{skonto_type} = 'without_skonto';
|
||
foreach ( @{$all_open_sepa_export_items}) {
|
||
if (($_->ap_id && $_->ap_id == $open_invoice->id) || ($_->ar_id && $_->ar_id == $open_invoice->id)) {
|
||
my $factor = ($_->ar_id == $open_invoice->id ? 1 : -1);
|
||
#$main::lxdebug->message(LXDebug->DEBUG2(),"sepa_exitem=".$_->id." for invoice ".$open_invoice->id." factor=".$factor);
|
||
$open_invoice->{realamount} = $::form->format_amount(\%::myconfig,$open_invoice->amount*$factor,2);
|
||
$open_invoice->{skonto_type} = $_->payment_type;
|
||
$sepa_exports{$_->sepa_export_id} ||= { count => 0, is_ar => 0, amount => 0, proposed => 0, invoices => [], item => $_ };
|
||
$sepa_exports{$_->sepa_export_id}->{count}++;
|
||
$sepa_exports{$_->sepa_export_id}->{is_ar}++ if $_->ar_id == $open_invoice->id;
|
||
$sepa_exports{$_->sepa_export_id}->{amount} += $_->amount * $factor;
|
||
push @{ $sepa_exports{$_->sepa_export_id}->{invoices} }, $open_invoice;
|
||
}
|
||
foreach (@{ $sepa_export_items_by_id{ $open_invoice->id } || [] }) {
|
||
my $factor = ($_->ar_id == $open_invoice->id ? 1 : -1);
|
||
$open_invoice->{realamount} = $::form->format_sellprice($open_invoice->amount*$factor);
|
||
$open_invoice->{skonto_type} = $_->payment_type;
|
||
$sepa_exports{$_->sepa_export_id} ||= { count => 0, is_ar => 0, amount => 0, proposed => 0, invoices => [], item => $_ };
|
||
$sepa_exports{$_->sepa_export_id}->{count}++;
|
||
$sepa_exports{$_->sepa_export_id}->{is_ar}++ if $_->ar_id == $open_invoice->id;
|
||
$sepa_exports{$_->sepa_export_id}->{amount} += $_->amount * $factor;
|
||
push @{ $sepa_exports{$_->sepa_export_id}->{invoices} }, $open_invoice;
|
||
}
|
||
}
|
||
|
Auch abrufbar als: Unified diff
BankTransaction/list: sepa_export_items mit partition_by splitten
Spart eine Doppelschleife
Conflicts:
SL/Controller/BankTransaction.pm