X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_pkg%2Fagent.pm;h=37e7d9d3fa184529147725b5dab72528661a0057;hb=6bab3cf66992f581d35ae57c633a81e8503d5c35;hp=b122ff19ce7cb533fffb5f41d6f96e97f0426452;hpb=026c6c7f4177772e95b263cfa20c8e427426683b;p=freeside.git diff --git a/FS/FS/part_pkg/agent.pm b/FS/FS/part_pkg/agent.pm index b122ff19c..37e7d9d3f 100644 --- a/FS/FS/part_pkg/agent.pm +++ b/FS/FS/part_pkg/agent.pm @@ -36,6 +36,10 @@ $me = '[FS::part_pkg::agent]'; 'type' => 'checkbox', }, + 'display_separate_cust'=> { 'name' => 'Separate customer from package display on invoices', + 'type' => 'checkbox', + }, + }, 'fieldorder' => [qw( cutoff_day add_full_period no_pkg_prorate ) ], @@ -56,6 +60,7 @@ sub calc_recur { my $conf = new FS::Conf; my $money_char = $conf->config('money_char') || '$'; + my $date_format = $conf->config('date_format') || '%m/%d/%Y'; my $total_agent_charge = 0; @@ -96,12 +101,18 @@ sub calc_recur { } $cust_main->all_pkgs; + my $cust_details = 0; + foreach my $cust_pkg ( @cust_pkg ) { warn "$me billing agent charges for pkgnum ". $cust_pkg->pkgnum. "\n" if $DEBUG; - my $pkg_details = $cust_main->name_short. ': '; #name? + my $pkg_details = ''; + + my $cust_location = $cust_pkg->cust_location; + $pkg_details .= $cust_location->locationname. ': ' + if $cust_location->locationname; my $part_pkg = $cust_pkg->part_pkg; @@ -111,6 +122,8 @@ sub calc_recur { my $pkg_charge = 0; + my $quantity = $cust_pkg->quantity || 1; + #option to not fallback? via options above my $pkg_setup_fee = $part_pkg->setup_cost || $part_pkg->option('setup_fee'); @@ -121,14 +134,18 @@ sub calc_recur { if ( $pkg_start < $last_bill ) { $pkg_start = $last_bill; } elsif ( $pkg_setup_fee ) { - $pkg_charge += $pkg_setup_fee; - $pkg_details .= $money_char. sprintf('%.2f setup, ', $pkg_setup_fee ); + $pkg_charge += $quantity * $pkg_setup_fee; + $pkg_details .= $money_char. + sprintf('%.2f setup', $quantity * $pkg_setup_fee ); + $pkg_details .= sprintf(" ($quantity \@ $money_char". '%.2f)', + $pkg_setup_fee ) + if $quantity > 1; + $pkg_details .= ', '; } my $pkg_end = $cust_pkg->get('cancel'); $pkg_end = ( !$pkg_end || $pkg_end > $$sdate ) ? $$sdate : $pkg_end; - my $pkg_recur_charge = $prorate_ratio * $pkg_base_recur; $pkg_recur_charge *= ( $pkg_end - $pkg_start ) / ( $$sdate - $last_bill ) @@ -136,19 +153,33 @@ sub calc_recur { my $recur_charge += $pkg_recur_charge; - $pkg_details .= $money_char. sprintf('%.2f', $recur_charge ). - ' ('. time2str('%x', $pkg_start). - ' - '. time2str('%x', $pkg_end ). ')' - if $recur_charge; + if ( $recur_charge ) { + $pkg_details .= $money_char. + sprintf('%.2f', $quantity * $recur_charge ); + $pkg_details .= sprintf(" ($quantity \@ $money_char". '%.2f)', + $recur_charge ) + if $quantity > 1; + $pkg_details .= ' ('. time2str($date_format, $pkg_start). + ' - '. time2str($date_format, $pkg_end ). ')'; + } + + $pkg_charge += $quantity * $recur_charge; - $pkg_charge += $recur_charge; + if ( $pkg_charge ) { + if ( $self->option('display_separate_cust') ) { + push @$details, $cust_main->name.':' unless $cust_details++; + push @$details, ' '.$pkg_details; + } else { + push @$details, $cust_main->name_short.': '. $pkg_details; + } + }; - push @$details, $pkg_details - if $pkg_charge; $total_agent_charge += $pkg_charge; } #foreach $cust_pkg + push @$details, ' ' if $cust_details; + } #foreach $cust_main } #foreach $agent;