Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 031566ec

Von Sven Schöling vor fast 7 Jahren hinzugefügt

  • ID 031566ec011c921c54d114a122181e2418025619
  • Vorgänger ce4ec1a8
  • Nachfolger 2a968d9a

BankTransaction/list: sepa_export_items mit partition_by splitten

Spart eine Doppelschleife

Conflicts:
SL/Controller/BankTransaction.pm

Unterschiede anzeigen:

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