fix several UI nits in FCC 477 report configuration, #24047
[freeside.git] / httemplate / browse / part_pkg.cgi
index bb5bc52..1eb55c8 100755 (executable)
@@ -10,7 +10,7 @@
                  'agent_virt'            => 1,
                  'agent_null_right'      => [ $edit, $edit_global ],
                  'agent_null_right_link' => $edit_global,
-                 'agent_pos'             => 6,
+                 'agent_pos'             => 7, #5?
                  'query'                 => { 'select'    => $select,
                                               'table'     => 'part_pkg',
                                               'hashref'   => \%hash,
@@ -108,6 +108,14 @@ my $count_cust_pkg = "
     WHERE cust_pkg.pkgpart = part_pkg.pkgpart
       AND $agentnums_sql
 ";
+my $count_cust_pkg_cancel = "
+  SELECT COUNT(*) FROM cust_pkg LEFT JOIN cust_main USING ( custnum )
+    LEFT JOIN cust_pkg AS cust_pkg_next
+      ON (cust_pkg.pkgnum = cust_pkg_next.change_pkgnum)
+    WHERE cust_pkg.pkgpart = part_pkg.pkgpart
+      AND $agentnums_sql
+      AND cust_pkg.cancel IS NOT NULL AND cust_pkg.cancel != 0
+";
 
 $select = "
 
@@ -128,13 +136,25 @@ $select = "
   ( $count_cust_pkg
       AND ( cancel IS NULL OR cancel = 0 )
       AND susp IS NOT NULL AND susp != 0
+      AND setup IS NOT NULL AND setup != 0
   ) AS num_suspended,
 
   ( $count_cust_pkg
-      AND cancel IS NOT NULL AND cancel != 0
+      AND ( cancel IS NULL OR cancel = 0 )
+      AND susp IS NOT NULL AND susp != 0
+      AND ( setup IS NULL OR setup = 0 )
+  ) AS num_on_hold,
+
+  ( $count_cust_pkg_cancel
+      AND (cust_pkg_next.pkgnum IS NULL
+           OR cust_pkg_next.pkgpart != cust_pkg.pkgpart)
   ) AS num_cancelled
 
 ";
+# About the num_cancelled expression: packages that were changed, but 
+# kept the same pkgpart, are considered "moved", not "canceled" (because
+# this is the part_pkg UI).  We could show the count of those but it's 
+# probably not interesting.
 
 my $html_init = qq!
     One or more service definitions are grouped together into a package 
@@ -241,10 +261,10 @@ push @fields, sub {
     ],
     [
       { data =>$money_char.
-               sprintf('%.2f', $part_pkg->option('setup_fee') ),
+               sprintf('%.2f ', $part_pkg->option('setup_fee') ),
         align=>'right'
       },
-      { data => ( ( $is_recur ? ' setup' : ' one-time' ).
+      { data => ( ( $is_recur ? '   setup' : '   one-time' ).
                   ( $part_pkg->option('recur_fee') == 0
                       && $part_pkg->setup_show_zero
                     ? ' (printed on invoices)'
@@ -257,7 +277,7 @@ push @fields, sub {
     [
       { data=>(
           $is_recur
-            ? $money_char. sprintf('%.2f ', $part_pkg->option('recur_fee'))
+            ? $money_char. sprintf('%.2f', $part_pkg->option('recur_fee'))
             : $part_pkg->freq_pretty
         ),
         align=> ( $is_recur ? 'right' : 'center' ),
@@ -265,7 +285,7 @@ push @fields, sub {
       },
       ( $is_recur
         ?  { data => ( $is_recur
-               ? $part_pkg->freq_pretty.
+               ? '   '. $part_pkg->freq_pretty.
                  ( $part_pkg->option('recur_fee') == 0
                      && $part_pkg->recur_show_zero
                    ? ' (printed on invoices)'
@@ -277,6 +297,20 @@ push @fields, sub {
         : ()
       ),
     ],
+    (
+      map { my $amount = $_->amount / ($_->target_info->{multiplier} || 1);
+            my $label = $_->target_info->{label};
+            [
+              { data    => "Plus $money_char". $_->price. ' '.
+                           ( $_->action eq 'increment' ? 'per' : 'for' ).
+                           " $amount $label",
+                align   => 'center', #left?
+                colspan => 2,
+              },
+            ];
+          }
+        $part_pkg->part_pkg_usageprice
+    ),
     ( map { my $dst_pkg = $_->dst_pkg;
             [
               { data => 'Supplemental:  '.
@@ -333,6 +367,51 @@ push @fields, sub {
 #    $part_pkg->freq_pretty; #.'<BR>'
 };
 
+push @header, 'Cost&nbsp;tracking';
+$align .= 'r'; #?
+push @fields, sub {
+  my $part_pkg = shift;
+  #(my $plan = $plan_labels{$part_pkg->plan} ) =~ s/ /&nbsp;/g;
+  my $is_recur = ( $part_pkg->freq ne '0' );
+
+  [
+    [
+      { data => '&nbsp;', # $plan,
+        align=>'center',
+        colspan=>2,
+      },
+    ],
+    [
+      { data =>$money_char.
+               sprintf('%.2f ', $part_pkg->setup_cost ),
+        align=>'right'
+      },
+      { data => ( $is_recur ? '&nbsp;setup' : '&nbsp;one-time' ),
+        align=>'left',
+      },
+    ],
+    [
+      { data=>(
+          $is_recur
+            ? $money_char. sprintf('%.2f', $part_pkg->recur_cost)
+            : '(no&nbsp;recurring)' #$part_pkg->freq_pretty
+        ),
+        align=> ( $is_recur ? 'right' : 'center' ),
+        colspan=> ( $is_recur ? 1 : 2 ),
+      },
+      ( $is_recur
+        ?  { data => ( $is_recur
+                         ? '&nbsp;'. $part_pkg->freq_pretty
+                         : ''
+                     ),
+             align=>'left',
+           }
+        : ()
+      ),
+    ],
+  ];
+};
+
 ###
 # Agent goes here if displayed
 ###
@@ -368,6 +447,7 @@ if ( $acl_edit_global ) {
 #if ( $cgi->param('active') ) {
   push @header, 'Customer<BR>packages';
   my %col = (
+    'on hold'         => '7E0079', #purple!
     'not yet billed'  => '009999', #teal? cyan?
     'active'          => '00CC00',
     'suspended'       => 'FF9900',
@@ -383,10 +463,11 @@ if ( $acl_edit_global ) {
                               my $label = $_;
                               if ( $magic eq 'active' && $part_pkg->freq == 0 ) {
                                 $magic = 'inactive';
-                                #$label = 'one-time charge',
-                                $label = 'charge',
+                                #$label = 'one-time charge';
+                                $label = 'charge';
                               }
                               $label= 'not yet billed' if $magic eq 'not_yet_billed';
+                              $label= 'on hold' if $magic eq 'on_hold';
                           
                               [
                                 {
@@ -411,7 +492,7 @@ if ( $acl_edit_global ) {
                                             ),
                                 },
                               ],
-                            } (qw( not_yet_billed active suspended cancelled ))
+                            } (qw( on_hold not_yet_billed active suspended cancelled ))
                           ),
                       ($acl_config ? 
                         [ {},