clean up package list UI: put actions in a dropdown
[freeside.git] / httemplate / view / cust_main / packages / status.html
index 70b623c..fefeeef 100644 (file)
 
 %   } 
 %
-%   if ( $part_pkg->freq && !$supplemental && !$cust_pkg->change_custnum ) { #?
-
-      <TR>
-        <TD COLSPAN=<%$opt{colspan}%>>
-          <FONT SIZE=-1>
-%           if ( $curuser->access_right('Un-cancel customer package') && ! $opt{no_links} ) { 
-              (&nbsp;<% pkg_uncancel_link($cust_pkg) %>&nbsp;)
-%           } 
-          <FONT>
-        </TD>
-      </TR>
-%   }
 %
-% } else {
+% } else { # not canceled
 %
-%   if ( $cust_pkg->get('susp') ) { #status: suspended
-%     my $cpr = $cust_pkg->last_cust_pkg_reason('susp');
-
-    <% pkg_status_row( $cust_pkg, emt('Suspended'), 'susp', 'color'=>'FF9900', %opt ) %>
+%   if ( $cust_pkg->get('susp') ) { #suspended or on hold
+%
+%     #if ( $cust_pkg->order_date eq $cust_pkg->get('susp') ) # inconsistent with FS::cust_pkg::status
+%     if ( ! $cust_pkg->setup ) { #status: on hold
+
+        <% pkg_status_row( $cust_pkg, emt('On Hold'), '', 'color'=>'7E0079', %opt ) %>
+
+%     } else { #status: suspended
+%       my ($cpr,$susplabel);
+%       if ($cust_pkg->is_status_delay_cancel(%opt)) {
+%         $cpr = $cust_pkg->last_cust_pkg_reason('expire');
+%         $susplabel = 'Suspended (Cancelled)';
+%       } else {
+%         $cpr = $cust_pkg->last_cust_pkg_reason('susp');
+%         $susplabel = 'Suspended';
+%       }
+        <% pkg_status_row( $cust_pkg, emt($susplabel), 'susp', 'color'=>'FF9900', %opt ) %>
+        <% pkg_reason_row( $cust_pkg, $cpr, 'color' => 'FF9900', %opt ) %>
 
-    <% pkg_reason_row( $cust_pkg, $cpr, 'color' => 'FF9900', %opt ) %>
+%     }
 
     <% pkg_status_row_noauto( $cust_pkg, %opt ) %>
 
+    <% pkg_status_row_separate_bill( $cust_pkg, %opt ) %>
+
     <% pkg_status_row_discount( $cust_pkg, %opt ) %>
 
-%   unless ( $cust_pkg->get('setup') ) { 
-      <% pkg_status_row_colspan( $cust_pkg, emt('Never billed'), '', %opt ) %>
-%   } else { 
-      <% pkg_status_row($cust_pkg, emt('Setup'), 'setup', %opt ) %>
-%   } 
+%   if ( $cust_pkg->order_date ne $cust_pkg->get('susp') ) { # not on hold
+%     if ( $cust_pkg->get('setup') ) {
+        <% pkg_status_row($cust_pkg, emt('Setup'), 'setup', %opt ) %>
+%     } else {
+        <% pkg_status_row_colspan( $cust_pkg, emt('Never billed'), '', %opt ) %>
+%     }
+%   }
 
     <% pkg_status_row_if($cust_pkg, emt('Un-cancelled'), 'uncancel', %opt ) %>
 
     <% pkg_status_row_expire($cust_pkg, %opt, curuser=>$curuser) %>
     <% pkg_status_row_if( $cust_pkg, emt('Contract ends'), 'contract_end', %opt ) %>
 
-% if ( !$supplemental && ! $opt{no_links} && !$change_from ) {
-      <TR>
-        <TD COLSPAN=<%$opt{colspan}%>>
-          <FONT SIZE=-1>
-%           if ( $cust_pkg->change_to_pkgnum ) {
-%               # then you can modify the package change
-%               if ( $curuser->access_right('Change customer package') ) {
-                (&nbsp;<% pkg_change_now_link($cust_pkg) %>&nbsp;)
-                (&nbsp;<% pkg_change_later_link($cust_pkg) %>&nbsp;)
-                (&nbsp;<% pkg_unchange_link($cust_pkg) %>&nbsp;)
-                <BR>
-%               }
-%           }
-%           if ( $curuser->access_right('Unsuspend customer package') ) { 
-              (&nbsp;<% pkg_unsuspend_link($cust_pkg) %>&nbsp;)
-              (&nbsp;<% pkg_resume_link($cust_pkg) %>&nbsp;)
-%           }
-%           if ( !$cust_pkg->change_to_pkgnum and
-%                $curuser->access_right('Cancel customer package immediately')
-%           ) {
-              (&nbsp;<% pkg_cancel_link($cust_pkg) %>&nbsp;)
-%           } 
-          </FONT>
-        </TD>
-      </TR>
-%     }
-%
 %   } else { #status: active
 %
 %     if ( $change_from ) { # future change
 %
           <% pkg_status_row_colspan( $cust_pkg, emt('Waiting for package change'), '', %opt ) %>
-          <% pkg_status_row( $cust_pkg,
+          <% pkg_status_row_if( $cust_pkg,
                              emt('Will be activated on'),
                              'start_date',
                              %opt ) %>
 
           <% pkg_status_row_noauto( $cust_pkg, %opt ) %>
 
+          <% pkg_status_row_separate_bill( $cust_pkg, %opt ) %>
+
           <% pkg_status_row_discount( $cust_pkg, %opt ) %>
 
           <% pkg_status_row_if(
 
           <% pkg_status_row_if($cust_pkg, emt('Un-cancelled'), 'uncancel', %opt ) %>
 
-%         if ( !$supplemental && ! $opt{no_links} ) {
-          <TR>
-            <TD COLSPAN=<%$opt{colspan}%>>
-              <FONT SIZE=-1>
-%               if ( $curuser->access_right('Cancel customer package immediately') ) { 
-                  (&nbsp;<% pkg_cancel_link($cust_pkg) %>&nbsp;)
-%               } 
-              </FONT>
-            </TD>
-          </TR>
-%         }
-
-%       } else { 
+%       } else { # recurring package, not yet billed
 
           <% pkg_status_row_colspan($cust_pkg, emt("Not yet billed ($billed_or_prepaid [_1])", myfreq($part_pkg) ), '', %opt ) %>
 
           <% pkg_status_row_noauto( $cust_pkg, %opt ) %>
 
+          <% pkg_status_row_separate_bill( $cust_pkg, %opt ) %>
+
           <% pkg_status_row_discount( $cust_pkg, %opt ) %>
 
           <% pkg_status_row_if($cust_pkg, emt('Start billing'), 'start_date', %opt) %>
 
           <% pkg_status_row_noauto( $cust_pkg, %opt ) %>
 
+          <% pkg_status_row_separate_bill( $cust_pkg, %opt ) %>
+
           <% pkg_status_row_discount( $cust_pkg, %opt ) %>
 
           <% pkg_status_row_if($cust_pkg, emt('Un-cancelled'), 'uncancel', %opt ) %>
 
-%       } else { 
+%       } else { # recurring package
 %
 %         my $num_cust_svc = $cust_pkg->num_cust_svc;
 %         my $summarize = $opt{'cust_pkg-large_pkg_size'} > 0
 
           <% pkg_status_row_noauto( $cust_pkg, %opt ) %>
 
+          <% pkg_status_row_separate_bill( $cust_pkg, %opt ) %>
+
           <% pkg_status_row_discount( $cust_pkg, %opt ) %>
 
           <% pkg_status_row($cust_pkg, emt('Setup'), 'setup', %opt) %>
       <% pkg_status_row_expire($cust_pkg, %opt, curuser=>$curuser) %>
       <% pkg_status_row_if( $cust_pkg, emt('Contract ends'), 'contract_end', %opt ) %>
 
-%     if ( $part_pkg->freq and !$supplemental && ! $opt{no_links} ) { 
-
-        <TR>
-          <TD COLSPAN=<%$opt{colspan}%>>
-            <FONT SIZE=-1>
-% # action links
-%           if ( $change_from ) {
-%               # nothing
-%           } elsif ( $cust_pkg->change_to_pkgnum ) {
-%               # then you can modify the package change
-%               if ( $curuser->access_right('Change customer package') ) {
-                (&nbsp;<% pkg_change_now_link($cust_pkg) %>&nbsp;)
-                (&nbsp;<% pkg_change_later_link($cust_pkg) %>&nbsp;)
-                (&nbsp;<% pkg_unchange_link($cust_pkg) %>&nbsp;)
-                <BR>
-%               }
-%           }
-
-%           # suspension actions--always available
-%           if ( $curuser->access_right('Suspend customer package') ) { 
-              (&nbsp;<% pkg_suspend_link($cust_pkg) %>&nbsp;)
-%           } 
-%           if ( $curuser->access_right('Suspend customer package later') ) { 
-              (&nbsp;<% pkg_adjourn_link($cust_pkg) %>&nbsp;)
-%           } 
-%           if ( $curuser->access_right('Delay suspension events') ) { 
-              (&nbsp;<% pkg_delay_link($cust_pkg) %>&nbsp;)
-%           }
-%
-%           if ( $change_from or $cust_pkg->change_to_pkgnum ) {
-%               # you can't cancel the package while in this state
-%           } else { # the normal case: links to cancel the package
-              <BR>
-%             if ( $curuser->access_right('Cancel customer package immediately') ) { 
-                (&nbsp;<% pkg_cancel_link($cust_pkg) %>&nbsp;)
-%             }
-%             if ( $curuser->access_right('Cancel customer package later') ) { 
-                (&nbsp;<% pkg_expire_link($cust_pkg) %>&nbsp;)
-%             } 
-%           }
-
-            <FONT>
-          </TD>
-        </TR>
-%     }
-%
+
 %   } 
 % } 
 
@@ -387,6 +317,10 @@ sub pkg_status_row_expire {
     } elsif ( $cust_pkg->change_to_pkg->locationnum != $cust_pkg->locationnum )
     {
       $title = mt('Will <b>change location</b> on');
+    } elsif (( $cust_pkg->change_to_pkg->quantity != $cust_pkg->quantity ) ||
+             ( $cust_pkg->change_to_pkg->contract_end != $cust_pkg->contract_end ))
+    {
+      $title = mt('Will change on');
     } else {
       # FS::cust_pkg->change_later should have prevented this, but 
       # just so that we can display _something_
@@ -411,19 +345,22 @@ sub pkg_status_row_changed {
   return '' unless $cust_pkg->change_date;
 
   my $html =
-    pkg_status_row( $cust_pkg, emt('Package changed'), 'change_date', %opt );
+    pkg_status_row( $cust_pkg, emt('Changed'), 'change_date', %opt );
 
   my $old = $cust_pkg->old_cust_pkg;
   if ( $old ) {
     my $part_pkg = $old->part_pkg;
-    $html .= pkg_status_row_colspan( $cust_pkg, 
-                                     emt("Changed from [_1]: [_2]",
-                                            $cust_pkg->change_pkgnum,
-                                            $part_pkg->pkg_comment(nopartpkg => 1) ),
-                                     '',
-                                     'size'    => '-1',
-                                     'align'   => 'right',
-                                   );
+    $html .= pkg_status_row_colspan(
+      $cust_pkg, 
+#      emt("Changed from [_1]: [_2]",
+#             $cust_pkg->change_pkgnum,
+#             $part_pkg->pkg_comment(cust_pkg=>$old, nopartpkg=>1)
+#         ),
+      '',
+      '',
+      'size'    => '-1',
+      'align'   => 'right',
+    );
   }
 
   $html;
@@ -462,16 +399,17 @@ sub pkg_status_row_detached {
 
 sub pkg_status_row_noauto {
   my( $cust_pkg, %opt ) = @_;
-  my $part_pkg = $opt{'part_pkg'};
-  return '' unless $cust_pkg->no_auto || $part_pkg->no_auto;
 
-  #inefficient, should be passed in
-  my $cust_main = $cust_pkg->cust_main;
+  return '' unless ( $cust_pkg->no_auto || $opt{'part_pkg'}->no_auto )
+                && $opt{'has_cust_payby_auto'};
 
-  return '' unless $cust_main->payby =~ /^(CARD|CHEK)$/;
-  my $what = lc(FS::payby->shortname($cust_main->payby));
+  pkg_status_row_colspan( $cust_pkg, emt("No automatic charge"), '');
+}
 
-  pkg_status_row_colspan( $cust_pkg, emt("No automatic $what charge"), '');
+sub pkg_status_row_separate_bill {
+  my $cust_pkg = shift;
+  return '' unless $cust_pkg->separate_bill;
+  pkg_status_row_colspan( $cust_pkg, emt("Invoiced separately") );
 }
 
 sub pkg_status_row_discount {
@@ -479,21 +417,35 @@ sub pkg_status_row_discount {
 
   my $html;
 
-  foreach my $cust_pkg_discount ( $cust_pkg->cust_pkg_discount_active ) {
+  if ( $cust_pkg->waive_setup ) {
+    my $label = '<SPAN STYLE="font-size: small;font-weight: bold">' .
+                 emt('Setup fee waived') .
+                 '</SPAN>';
+    $html .= pkg_status_row_colspan( $cust_pkg, $label, '', %opt );
+  }
+
+  foreach my $cust_pkg_discount (@{ $cust_pkg->{_cust_pkg_discount_active} }) {
 
     my $discount = $cust_pkg_discount->discount;
 
-    my $label = '<B>'.emt('Discount').'</B>: '. $discount->description;
-    if ( $discount->months ) {
+    my $label = '<SPAN STYLE="font-size: small"><B>';
+    if ( $cust_pkg_discount->setuprecur eq 'setup' ) {
+      $label .= emt('Setup Discount');
+    } else {
+      $label .= emt('Recurring Discount');
+    }
+    $label .= '</B>: '. $discount->description;
+    if ( $discount->months > 0 and $cust_pkg_discount->months_used > 0 ) {
       my $remaining = $discount->months - $cust_pkg_discount->months_used;
       $remaining = sprintf('%.2f', $remaining) if $remaining =~ /\./;
-      $label .= emt("([_1] months remaining)",$remaining);
+      $label .= <br> . emt(" ([quant,_1,month,months] remaining)",$remaining);
     }
+    $label .= '</SPAN>';
 
-    $label .= ' <FONT SIZE="-1">('.
-                '<A HREF="../misc/delete-cust_pkg_discount.html?'.
-                  $cust_pkg_discount->pkgdiscountnum.
-                '">'.emt('remove discount').'</A>)</FONT>';
+    #$label .= ' <FONT SIZE="-1">('.
+    #            '<A HREF="../misc/delete-cust_pkg_discount.html?'.
+    #              $cust_pkg_discount->pkgdiscountnum.
+    #            '">'.emt('remove discount').'</A>)</FONT>';
 
     $html .= pkg_status_row_colspan( $cust_pkg, $label, '', %opt );
 
@@ -559,96 +511,8 @@ sub pkg_datestr {
   $strip;
 }
 
-sub pkg_suspend_link {
-  include( '/elements/popup_link-cust_pkg.html',
-             'action'      => $p. 'misc/cancel_pkg.html?method=suspend',
-             'label'       => emt('Suspend now'),
-             'actionlabel' => emt('Suspend'),
-             'color'       => '#FF9900',
-             'cust_pkg'    => shift,
-         )
-}
-
-sub pkg_adjourn_link {
-  include( '/elements/popup_link-cust_pkg.html',
-             'action'      => $p. 'misc/cancel_pkg.html?method=adjourn',
-             'label'       => emt('Suspend later'),
-             'actionlabel' => emt('Adjourn'),
-             'color'       => '#CC6600',
-             'cust_pkg'    => shift,
-         )
-}
-
-sub pkg_delay_link  {
-  my($cust_pkg) = shift;
-  include( '/elements/popup_link-cust_pkg.html',
-             'action'      => $p. 'misc/delay_susp_pkg.html',
-             'label'       => ( $cust_pkg->dundate
-                                  ? emt('Edit suspension delay')
-                                  : emt('Delay suspend')
-                              ),
-             'actionlabel' => emt('Delay suspend for'),
-             'cust_pkg'    => $cust_pkg,
-         )
-}
-
-sub pkg_resume_link {
-  include( '/elements/popup_link-cust_pkg.html',
-             'action'      => $p. 'misc/cancel_pkg.html?method=resume',
-             'label'       => emt('Unsuspend later'),
-             'actionlabel' => emt('Resume'),
-             'color'       => '#00CC00',
-             'cust_pkg'    => shift,
-         )
-}
-
-sub pkg_unsuspend_link { pkg_link('misc/unsusp_pkg',    emt('Unsuspend now'), @_ ); }
 sub pkg_unadjourn_link { pkg_link('misc/unadjourn_pkg', emt('Abort'),     @_ ); }
 sub pkg_unexpire_link  { pkg_link('misc/unexpire_pkg',  emt('Abort'),     @_ ); }
-sub pkg_unchange_link  { pkg_link('misc/do_not_change_pkg',  emt('Abort change'),     @_ ); }
-sub pkg_change_now_link  { pkg_link('misc/change_pkg_now',  emt('Change now'),     @_ ); }
-
-sub pkg_cancel_link {
-  include( '/elements/popup_link-cust_pkg.html',
-             'action'      => $p. 'misc/cancel_pkg.html?method=cancel',
-             'label'       => emt('Cancel now'),
-             'actionlabel' => emt('Cancel'),
-             'color'       => '#ff0000',
-             'cust_pkg'    => shift,
-         )
-}
-
-sub pkg_uncancel_link {
-  include( '/elements/popup_link-cust_pkg.html',
-             'action'      => $p. 'misc/cancel_pkg.html?method=uncancel',
-             'label'       => emt('Un-cancel'),
-             'actionlabel' => emt('Un-cancel'),
-             #'color'       =>  #?
-             'cust_pkg'    => shift,
-         )
-}
-
-sub pkg_expire_link {
-  include( '/elements/popup_link-cust_pkg.html',
-             'action'      => $p. 'misc/cancel_pkg.html?method=expire',
-             'label'       => emt('Cancel later'),
-             'actionlabel' => emt('Expire'),
-             'color'       => '#CC0000',
-             'cust_pkg'    => shift,
-         )
-}
-
-sub pkg_change_later_link {
-  my $cust_pkg = shift;
-  include( '/elements/popup_link-cust_pkg.html',
-    'action'      => $p . 'misc/change_pkg.cgi?',
-    'label'       => emt('Reschedule'),
-    'actionlabel' => emt('Edit scheduled change for'),
-    'cust_pkg'    => $cust_pkg,
-    'width'       => 960,
-    'height'      => 490,
-  )
-}
 
 sub svc_recharge_link {
   include( '/elements/popup_link-cust_svc.html',