RT#36813: Monthly Recurring Total [change_to_pkgnum handling]
[freeside.git] / httemplate / view / cust_main / billing.html
index 2f164df..f7ea68a 100644 (file)
@@ -19,7 +19,7 @@
   <TD><B><% $balance %></B></TD>
 </TR>
 
-% #54: just an arbitrary number i pulled out of my goober.  in reality we'd want
+% #54: just an arbitrary number i pulled out of my goober.  ideally we'd like
 % # to consider e.g. a histogram of num_ncancelled_packages for the entire
 % # customer base, and compare it to a graph of the overhead for generating this
 % # information.  (and optimize it better, we could get it more from SQL)
 %       'hashref'   => { 'custnum' => $cust_main->custnum, },
 %       'extra_sql' => 'AND ( cancel IS NULL OR cancel = 0 )
 %                       AND freq = '. dbh->quote($freq),
+%       'order_by'  => 'ORDER BY pkgnum', # to ensure old pkgs come before change_to_pkg
 %     }) or next;
 % 
 %     my $freq_pretty = $cust_pkg[0]->part_pkg->freq_pretty;
 %
 %     my $amount = 0;
+%     my $skip_pkg = {};
 %     foreach my $cust_pkg (@cust_pkg) {
 %       my $part_pkg = $cust_pkg->part_pkg;
 %       next if $cust_pkg->susp
 %                 || $cust_pkg->option('no_suspend_bill')
 %               );
 %
+%       #pkg change handling
+%       next if $skip_pkg->{$cust_pkg->pkgnum};
+%       if ($cust_pkg->change_to_pkgnum) {
+%         #if change is on or before next bill date, use new pkg
+%         next if $cust_pkg->expire <= $cust_pkg->bill;
+%         #if change is after next bill date, use old (this) pkg
+%         $skip_pkg->{$cust_pkg->change_to_pkgnum} = 1;
+%       }
+%
+%       my $pkg_amount = 0;
+%
 %       #add recurring amounts for this package and its billing add-ons
 %       foreach my $l_part_pkg ( $part_pkg->self_and_bill_linked ) {
-%         $amount += $l_part_pkg->option('recur_fee');
+%         $pkg_amount += $l_part_pkg->base_recur($cust_pkg);
 %       }
 %
 %       #subtract amounts for any active discounts
 %       foreach my $cust_pkg_discount ( $cust_pkg->cust_pkg_discount_active ) {
 %         my $discount = $cust_pkg_discount->discount;
 %         #and only one of these for each
-%         $amount -= $discount->amount;
-%         $amount -= $amount * $discount->percent/100;
+%         $pkg_amount -= $discount->amount;
+%         $pkg_amount -= $amount * $discount->percent/100;
 %       }
 %
+%       $pkg_amount *= ( $cust_pkg->quantity || 1 );
+%
+%       $amount += $pkg_amount;
+%
 %     }
    
       <TR>