RT#17599: display cancelled services from history [display unprovisionable services...
[freeside.git] / httemplate / view / cust_main / packages / status.html
index accdb45..97011c3 100644 (file)
       </TR>
 %   }
 %
-% } else {
+% } else { # not canceled
 %
 %   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->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
-
-        <% pkg_status_row( $cust_pkg, emt('Suspended'), 'susp', 'color'=>'FF9900', %opt ) %>
-%       my $cpr = $cust_pkg->last_cust_pkg_reason('susp');
+%       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_status_row_noauto( $cust_pkg, %opt ) %>
 
+    <% pkg_status_row_separate_bill( $cust_pkg, %opt ) %>
+
     <% pkg_status_row_discount( $cust_pkg, %opt ) %>
 
-%   unless ( $cust_pkg->order_date eq $cust_pkg->get('susp') ) { #on hold
-%     unless ( $cust_pkg->get('setup') ) { 
-        <% pkg_status_row_colspan( $cust_pkg, emt('Never billed'), '', %opt ) %>
-%     } else { 
+%   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 ) {
+%   # Status changes for suspended packages: can unsuspend, future-unsuspend,
+%   # or future-change. If this package is a future change or is supplemental
+%   # disable them all.
+%   if ( !$supplemental && ! $opt{no_links} && !$change_from ) {
       <TR>
         <TD COLSPAN=<%$opt{colspan}%>>
           <FONT SIZE=-1>
 %           }
 %           if ( $curuser->access_right('Unsuspend customer package') ) { 
 %             if ( $cust_pkg->order_date eq $cust_pkg->get('susp') ) { #on hold
-                (&nbsp;<% pkg_link('misc/unsusp_pkg', emt('Start bililng now'), $cust_pkg) %>&nbsp;)
+                (&nbsp;<% pkg_unhold_link($cust_pkg) %>&nbsp;)
 %             } else {
                 (&nbsp;<% pkg_unsuspend_link($cust_pkg) %>&nbsp;)
                 (&nbsp;<% pkg_resume_link($cust_pkg) %>&nbsp;)
 %     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(
           </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_if($cust_pkg, emt('Un-cancelled'), 'uncancel', %opt ) %>
 
+%         if ( !$opt{no_links}
+%               and !$change_from
+%               and !$supplemental # can be changed from its main package
+%               and $curuser->access_right('Change package start date') )
+%         {
+
+        <TR>
+          <TD COLSPAN=<%$opt{colspan}%>>
+            <FONT SIZE=-1>
+            (&nbsp;<% pkg_change_start_link($cust_pkg) %>&nbsp;)
+            </FONT>
+          </TD>
+        </TR>
+%         }
+          
 %       } 
 %
 %     } else { #setup
 
           <% 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} ) { 
+%     # Status changes for active recurring packages. If it has a future
+%     # package change scheduled, let that be modified. If it's supplemental,
+%     # then that's the only allowed action. Otherwise allow suspend, future
+%     # suspend, do-not-suspend, and immediate and future cancel.
+%     if ( $part_pkg->freq and ! $opt{no_links} ) { 
 
         <TR>
           <TD COLSPAN=<%$opt{colspan}%>>
 %               }
 %           }
 
+%           if ( !$supplemental ) {
 %           # 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 ( $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 ( $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;)
+%               }
 %             }
-%             if ( $curuser->access_right('Cancel customer package later') ) { 
-                (&nbsp;<% pkg_expire_link($cust_pkg) %>&nbsp;)
-%             } 
 %           }
 
             <FONT>
@@ -401,6 +441,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_
@@ -432,10 +476,11 @@ sub pkg_status_row_changed {
     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(cust_pkg=>$old, nopartpkg=>1)
-         ),
+#      emt("Changed from [_1]: [_2]",
+#             $cust_pkg->change_pkgnum,
+#             $part_pkg->pkg_comment(cust_pkg=>$old, nopartpkg=>1)
+#         ),
+      '',
       '',
       'size'    => '-1',
       'align'   => 'right',
@@ -478,16 +523,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 {
@@ -495,21 +541,35 @@ sub pkg_status_row_discount {
 
   my $html;
 
+  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 );
 
@@ -582,6 +642,7 @@ sub pkg_suspend_link {
              'actionlabel' => emt('Suspend'),
              'color'       => '#FF9900',
              'cust_pkg'    => shift,
+             'height'      => 420,
          )
 }
 
@@ -592,6 +653,7 @@ sub pkg_adjourn_link {
              'actionlabel' => emt('Adjourn'),
              'color'       => '#CC6600',
              'cust_pkg'    => shift,
+             'height'      => 445,
          )
 }
 
@@ -618,6 +680,18 @@ sub pkg_resume_link {
          )
 }
 
+sub pkg_unhold_link {
+  include( '/elements/popup_link-cust_pkg.html',
+             'action'      => $p. 'misc/unhold_pkg.html',
+             'label'       => emt('Start billing'),
+             'actionlabel' => emt('Start billing'),
+             'color'       => '#00CC00',
+             'width'       => 510,
+             'height'      => 310,
+             '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'),     @_ ); }
@@ -641,6 +715,8 @@ sub pkg_uncancel_link {
              'actionlabel' => emt('Un-cancel'),
              #'color'       =>  #?
              'cust_pkg'    => shift,
+             'width'       => 960,
+             'height'      => 740,
          )
 }
 
@@ -657,7 +733,7 @@ sub pkg_expire_link {
 sub pkg_change_later_link {
   my $cust_pkg = shift;
   include( '/elements/popup_link-cust_pkg.html',
-    'action'      => $p . 'misc/change_pkg.cgi?',
+    'action'      => $p . 'misc/change_pkg.cgi',
     'label'       => emt('Reschedule'),
     'actionlabel' => emt('Edit scheduled change for'),
     'cust_pkg'    => $cust_pkg,
@@ -666,6 +742,18 @@ sub pkg_change_later_link {
   )
 }
 
+sub pkg_change_start_link {
+  my $cust_pkg = shift;
+  include( '/elements/popup_link-cust_pkg.html',
+    'action'      => $p . 'misc/change_pkg_start.html',
+    'label'       => emt('Set start date'),
+    'actionlabel' => emt('Set start of billing for'),
+    'cust_pkg'    => $cust_pkg,
+    'width'       => 510,
+    'height'      => 310,
+  )
+}
+
 sub svc_recharge_link {
   include( '/elements/popup_link-cust_svc.html',
              'action'      => $p. 'misc/recharge_svc.html',