diff options
author | Ivan Kohler <ivan@freeside.biz> | 2014-05-05 19:06:37 -0700 |
---|---|---|
committer | Ivan Kohler <ivan@freeside.biz> | 2014-05-05 19:06:37 -0700 |
commit | f7c791eed080d1533aab05c475e1fe23997d98b4 (patch) | |
tree | 2202c50f2d7d1a85143927b797dcbc3b9dc1dd50 /FS | |
parent | fffecdd9ff8380e16fa68cd99a929675b1184738 (diff) |
add option to omit considering late paid invoices from "paid invoices" for purposes of commissions, RT#28963
Diffstat (limited to 'FS')
-rw-r--r-- | FS/FS/part_event/Condition/once_perinv.pm | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/FS/FS/part_event/Condition/once_perinv.pm b/FS/FS/part_event/Condition/once_perinv.pm index 1ee53b812..b1ab90caf 100644 --- a/FS/FS/part_event/Condition/once_perinv.pm +++ b/FS/FS/part_event/Condition/once_perinv.pm @@ -18,6 +18,10 @@ sub option_fields { 'type' => 'checkbox', 'value' => 'Y', }, + 'no_late' => { 'label' => "But don't consider paid bills which were late.", + 'type' => 'checkbox', + 'value' => 'Y', + }, ) } @@ -33,9 +37,31 @@ sub condition { my @cust_bill_pkg = qsearch('cust_bill_pkg', { pkgnum=>$cust_pkg->pkgnum }); - @cust_bill_pkg = grep { ($_->owed_setup + $_->owed_recur) == 0 } - @cust_bill_pkg - if $self->option('paid'); + if ( $self->option('paid') ) { + @cust_bill_pkg = grep { ($_->owed_setup + $_->owed_recur) == 0 } + @cust_bill_pkg; + + if ( $self->option('no_late') ) { + @cust_bill_pkg = grep { + my $cust_bill_pkg = $_; + + my @cust_bill_pay_pkg = (); + push @cust_bill_pay_pkg, $cust_bill_pkg->cust_bill_pay_pkg($_) + for qw( setup recur ); + return 1 unless @cust_bill_pay_pkg; #no payments? must be credits then + #not considering those "late" + + my @cust_pay = sort { $a->_date <=> $b->_date } + map { $_->cust_bill_pay->cust_pay } + @cust_bill_pay_pkg; + + #most recent payment less than due date? okay, we were paid on time + $cust_pay[-1] <= $cust_bill_pkg->cust_bill->due_date; + + } @cust_bill_pkg; + } + + } my %invnum = (); $invnum{$_->invnum} = 1 foreach @cust_bill_pkg; |