X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_pkg%2Fagent.pm;h=62cf185ed087fde55b4cdc0b9ad96cd7957910cc;hb=6959e1e35908df64676d9626711e70b66715575d;hp=70ad2adf6900aa817f6fa03b3781fdabc7354889;hpb=7c4b45d5b4dd70e91c187e7f82fa305c2e420dab;p=freeside.git diff --git a/FS/FS/part_pkg/agent.pm b/FS/FS/part_pkg/agent.pm index 70ad2adf6..62cf185ed 100644 --- a/FS/FS/part_pkg/agent.pm +++ b/FS/FS/part_pkg/agent.pm @@ -19,16 +19,8 @@ $me = '[FS::part_pkg::agent]'; %info = ( 'name' => 'Wholesale bulk billing, for master customers of an agent.', 'shortname' => 'Wholesale bulk billing for agent.', - + 'inherit_fields' => [qw( prorate global_Mixin)], 'fields' => { - 'setup_fee' => { 'name' => 'Setup fee for this package', - 'default' => 0, - }, - 'recur_fee' => { 'name' => 'Base recurring fee for this package', - 'default' => 0, - }, - - #'recur_method' => { 'name' => 'Recurring fee method', # #'type' => 'radio', # #'options' => \%recur_method, @@ -38,12 +30,20 @@ $me = '[FS::part_pkg::agent]'; 'cutoff_day' => { 'name' => 'Billing Day (1 - 28)', 'default' => '1', }, + 'add_full_period'=> { 'name' => 'When prorating first month, also bill '. + 'for one full period after that', + 'type' => 'checkbox', + }, + + 'no_pkg_prorate' => { 'name' => 'Disable prorating bulk packages (charge full price for packages active only a portion of the month)', + 'type' => 'checkbox', + }, + }, - #'fieldorder' => [qw( setup_fee recur_fee recur_method cutoff_day ) ], - 'fieldorder' => [qw( setup_fee recur_fee cutoff_day ) ], + 'fieldorder' => [qw( cutoff_day add_full_period no_pkg_prorate ) ], - 'weight' => 51, + 'weight' => 52, ); @@ -59,17 +59,17 @@ 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 $prorate_sdate = $$sdate; - my $total_agent_charge = 0; warn "$me billing for agent packages from ". time2str('%x', $last_bill). - " to ". time2str('%x', $$sdate). - "prorated to". time2str('%x', $prorate_sdate ). - "\n" + " to ". time2str('%x', $$sdate). "\n" if $DEBUG; + my $prorate_ratio = ( $$sdate - $last_bill ) + / ( $self->add_freq($last_bill) - $last_bill ); + #almost always just one, #unless you have multiple agents with same master customer0 my @agents = qsearch('agent', { 'agent_custnum' => $cust_pkg->custnum } ); @@ -106,16 +106,20 @@ sub calc_recur { if $DEBUG; my $pkg_details = $cust_main->name_short. ': '; #name? + + my $part_pkg = $cust_pkg->part_pkg; + # + something to identify package... primary service probably + # no... package def for now + $pkg_details .= $part_pkg->pkg. ': '; my $pkg_charge = 0; - my $part_pkg = $cust_pkg->part_pkg; #option to not fallback? via options above my $pkg_setup_fee = $part_pkg->setup_cost || $part_pkg->option('setup_fee'); my $pkg_base_recur = - $part_pkg->recur_cost || $part_pkg->base_recur_permonth; + $part_pkg->recur_cost || $part_pkg->base_recur_permonth($cust_pkg); my $pkg_start = $cust_pkg->get('setup'); if ( $pkg_start < $last_bill ) { @@ -128,17 +132,23 @@ sub calc_recur { my $pkg_end = $cust_pkg->get('cancel'); $pkg_end = ( !$pkg_end || $pkg_end > $$sdate ) ? $$sdate : $pkg_end; - my $recur_charge += $pkg_base_recur * ( $pkg_end - $pkg_start ) - / ( $prorate_sdate - $last_bill ); + + my $pkg_recur_charge = $prorate_ratio * $pkg_base_recur; + $pkg_recur_charge *= ( $pkg_end - $pkg_start ) + / ( $$sdate - $last_bill ) + unless $self->option('no_pkg_prorate'); + + my $recur_charge += $pkg_recur_charge; $pkg_details .= $money_char. sprintf('%.2f', $recur_charge ). - ' ('. time2str('%x', $pkg_start). - ' - '. time2str('%x', $pkg_end ). ')' + ' ('. time2str($date_format, $pkg_start). + ' - '. time2str($date_format, $pkg_end ). ')' if $recur_charge; $pkg_charge += $recur_charge; - push @$details, $pkg_details; + push @$details, $pkg_details + if $pkg_charge; $total_agent_charge += $pkg_charge; } #foreach $cust_pkg @@ -153,6 +163,8 @@ sub calc_recur { } +sub can_discount { 0; } + sub hide_svc_detail { 1; }