RT#17599: display cancelled services from history
[freeside.git] / httemplate / misc / cancel_pkg.html
index 642f0c8..c802897 100755 (executable)
-%# if ( $link eq 'popup' ) { 
-  <% include('/elements/header-popup.html', $title ) %>
-%# } else { 
-%#  <%  include("/elements/header.html", $title, '') %>
-%# } 
-
-<LINK REL="stylesheet" TYPE="text/css" HREF="../elements/calendar-win2k-2.css" TITLE="win2k-2">
-<SCRIPT TYPE="text/javascript" SRC="../elements/calendar_stripped.js"></SCRIPT>
-<SCRIPT TYPE="text/javascript" SRC="../elements/calendar-en.js"></SCRIPT>
-<SCRIPT TYPE="text/javascript" SRC="../elements/calendar-setup.js"></SCRIPT>
-
-% if ( $cgi->param('error') ) { 
-  <FONT SIZE="+1" COLOR="#ff0000">Error: <% $cgi->param('error') %></FONT>
-  <BR><BR>
-% } 
+<& /elements/header-popup.html, mt($title) &>
+
+<& /elements/error.html &>
 
 <FORM NAME="sc_popup" ACTION="<% popurl(1) %>process/cancel_pkg.html" METHOD=POST>
 <INPUT TYPE="hidden" NAME="pkgnum" VALUE="<% $pkgnum %>">
 <INPUT TYPE="hidden" NAME="method" VALUE="<% $method %>">
 
-
-<BR><BR>
-<% ucfirst($method) . " $pkgnum: " .$part_pkg->pkg. ' - ' .$part_pkg->comment %>
-<% ntable("#cccccc", 2) %>
-
-% if ($method eq 'expire' || $method eq 'adjourn') {
-<TR>
-  <TD><% $submit =~ /^(\w*)\s/ %> package on </TD>
-    <TD><INPUT TYPE="text" NAME="date" ID="expire_date" VALUE="<% $date %>">
-        <IMG SRC="<% $p %>images/calendar.png" ID="expire_button" STYLE="cursor:pointer" TITLE="Select date">
-        <BR><I>m/d/y</I>
-    </TD>
-</TR>
-<SCRIPT TYPE="text/javascript">
-  Calendar.setup({
-    inputField: "expire_date",
-    ifFormat:   "%m/%d/%Y",
-    button:     "expire_button",
-    align:      "BR"
-  });
-</SCRIPT>
-%}
+<BR>
+<% emt(ucfirst($method)." [_1]", $part_pkg->pkg_comment(cust_pkg=>$cust_pkg) ) %>
+<table style="background-color: #cccccc; border-spacing: 2; width: 100%">
+
+% my $date_init = 0;
+% if ($method eq 'expire' || $method eq 'adjourn' || $method eq 'resume') {
+%   $submit =~ /^(\w*)\s/;
+  <& /elements/tr-input-date-field.html, {
+      'name'    => 'date',
+      'value'   => $date,
+      'label'   => mt("$1 package on"),
+      'format'  => $date_format,
+  } &>
+%   $date_init = 1;
+% }
+
+% if ($method eq 'uncancel' ) {
 %
-
-<% include('/elements/tr-select-reason.html',
-             'field'          => 'reasonnum',
-             'reason_class'   => $class,
-             #XXX these need to be sticky on errors too...
-             #'curr_value'     => '',
-             'control_button' => 'document.sc_popup.submit',
-          )
-%>
-
+% #XXX customer also requested setup
+% # setup: what usefulness is changing or blanking this?  re-charge setup fee?
+% #        an option that says that would be better if that's what we want to do
+
+% # last_bill: isn't this informational?  what good would editing it do?
+% #            something about invoice display?
+  <& /elements/tr-input-date-field.html, {
+      'name'    => 'last_bill',
+      'value'   => ( $cgi->param('last_bill') || $cust_pkg->get('last_bill') ),
+      'label'   => mt("Last bill date"),
+      'format'  => $date_format,
+  } &>
+
+  <& /elements/tr-input-date-field.html, {
+      'name'    => 'bill',
+      'value'   => ( $cgi->param('bill') || $cust_pkg->get('bill') ),
+      'label'   => mt("Next bill date"),
+      'format'  => $date_format,
+  } &>
+
+  <& /elements/tr-checkbox.html,
+       'label'  => mt("Uncancel even if service reprovisioning fails"),
+       'field'  => 'svc_not_fatal',
+       'value'  => 'Y',
+  &>
+
+%   $date_init = 1;
+%   my @uncancel_svcs = sort { $b->{'reprovisionable'} <=> $a->{'reprovisionable'} }
+%                       sort { $a->{'svcpart'} <=> $b->{'svcpart'} } 
+%                       $cust_pkg->uncancel_svc_summary();
+%   if (@uncancel_svcs) {
+<TR><TD COLSPAN="2">&nbsp;</TD></TR>
+<TR><TH ALIGN="right"><% emt("Re-provision the following services") %></TH><TD></TD>
+%     foreach my $uncancel_svc (@uncancel_svcs) {
+%       my $uncancel_curr_value = $uncancel_svc->{'uncancel_svcnum'};
+%       my $uncancel_disabled = '';
+%       if ($cgi->param('error')) {
+%         $uncancel_curr_value = '' unless grep { $_ == $uncancel_svc->{'_uncancel_svcnum'} } $cgi->param('only_svcnum');
+%       }
+%       unless ($uncancel_svc->{'reprovisionable'}) {
+%         $uncancel_curr_value = '';
+%         $uncancel_disabled = 1;
+%       }
+  <& /elements/tr-checkbox.html,
+       'label'  => $uncancel_svc->{'svc'} . ': ' . $uncancel_svc->{'label'},
+       'field'  => 'only_svcnum',
+       'value'  => $uncancel_svc->{'uncancel_svcnum'},
+       'curr_value' => $uncancel_curr_value,
+       'disabled'   => $uncancel_disabled,
+       'cell_style' => 'font-weight: normal;'
+  &>
+%     }
+%   }
+% }
+
+% unless ( $method eq 'resume' || $method eq 'uncancel' ) {
+  <& /elements/tr-select-reason.html,
+       field          => 'reasonnum',
+       reason_class   => $class,
+       curr_value     => $reasonnum,
+       control_button => "confirm_cancel_pkg_button",
+  &>
+% }
+
+% if (( $method eq 'adjourn' || $method eq 'suspend' ) && $curuser->access_right('Customize billing during suspension')) {
+    <TR><TD COLSPAN=2>
+%   if ( $part_pkg->option('suspend_bill', 1) ) {
+      <& /elements/checkbox.html, name=>'no_suspend_bill', value=>'Y' &>
+      Disable recurring billing while suspended
+%   } else {
+      <& /elements/checkbox.html, name=>'suspend_bill', value=>'Y' &>
+      Continue recurring billing while suspended
+%   }
+    </TD></TR>
+% }
+
+% if ( ( $method eq 'adjourn' || $method eq 'suspend' ) and 
+%      $curuser->access_right('Unsuspend customer package') )  { #later?
+%   my $resume_date = $cgi->param('error') 
+%                     ? str2time($cgi->param('resume_date'))
+%                     : $cust_pkg->get('resume');
+
+  <& /elements/tr-input-date-field.html, {
+      'name'    => 'resume_date',
+      'value'   => $resume_date,
+      'label'   => mt('Unsuspend on'),
+      'format'  => $date_format,
+      'noinit'  => $date_init,
+  } &>
+% }
 </TABLE>
 
 <BR>
-<INPUT TYPE="submit" NAME="submit" VALUE="<% $submit %>" disabled='true'>
+<INPUT TYPE="submit" NAME="submit" ID="confirm_cancel_pkg_button" 
+  VALUE="<% mt($submit) |h %>"
+  <% $method !~ /^(resume|uncancel)$/ ? 'DISABLED' : '' %>>
 
 </FORM>
 </BODY>
 </HTML>
 
 <%init>
-my($method, $pkgnum, $reasonnum, $submit, $cust_pkg, $part_pkg,
-   $date, $curuser, $class); 
-$date = time2str("%m/%d/%Y", time);
+use Date::Parse qw(str2time);
+
+my $conf = new FS::Conf;
+my $date_format = $conf->config('date_format') || '%m/%d/%Y';
+
+my $date;
+
+my($pkgnum, $reasonnum);
 if ( $cgi->param('error') ) {
-  $method        = $cgi->param('method');
-  $pkgnum        = $cgi->param('pkgnum');
-  $reasonnum     = $cgi->param('reasonnum');
-  $date = $cgi->param('date');
+  $pkgnum    = $cgi->param('pkgnum');
+  $reasonnum = $cgi->param('reasonnum');
+  $date      = str2time($cgi->param('date'));
 } elsif ( $cgi->param('pkgnum') =~ /^(\d+)$/ ) {
-  $pkgnum  = $1;
+  $pkgnum    = $1;
+  $reasonnum = '';
 } else {
   die "illegal query ". $cgi->keywords;
 }
 
-$method = $cgi->param('method');
+$cgi->param('method') =~ /^(\w+)$/ or die 'illegal method';
+my $method = $1;
+
+my($class, $submit, $right);
 if ($method eq 'cancel') {
-  $class = 'C';
-  $submit    = "Cancel Now";
-}elsif ($method eq 'expire') {
-  $class = 'C';
-  $submit    = "Cancel Later";
-}elsif ($method eq 'suspend') {
-  $class = 'S';
-  $submit    = "Suspend Now";
-}elsif ($method eq 'adjourn') {
-  $class = 'S';
-  $submit    = "Suspend Later";
-}else{
-  die "illegal query ". $cgi->keywords;
+  $class  = 'C';
+  $submit = 'Cancel Now';
+  $right  = 'Cancel customer package immediately';
+} elsif ($method eq 'expire') {
+  $class  = 'C';
+  $submit = 'Cancel Later';
+  $right  = 'Cancel customer package later';
+} elsif ($method eq 'suspend') {
+  $class  = 'S';
+  $submit = 'Suspend Now';
+  $right  = 'Suspend customer package';
+} elsif ($method eq 'adjourn') {
+  $class  = 'S';
+  $submit = "Suspend Later";
+  $right  = 'Suspend customer package later';
+} elsif ( $method eq 'resume') {
+  $class  = '';
+  $submit = 'Unsuspend Later';
+  $right  = 'Unsuspend customer package'; #later?
+} elsif ( $method eq 'uncancel') {
+  $class  = '';
+  $submit = 'Un-Cancel';
+  $right  = 'Un-cancel customer package'; #later?
+} else {
+  die 'illegal query (unknown method param)';
 }
 
+my $curuser = $FS::CurrentUser::CurrentUser;
+die "access denied" unless $curuser->access_right($right);
+
 my $title = ucfirst($method) . ' Package';
+$title =~ s/Uncancel/Un-cancel/;
 
-$cust_pkg = qsearchs('cust_pkg', {'pkgnum' => $pkgnum});
-die "No such package: $pkgnum" unless $cust_pkg;
+my $cust_pkg = qsearchs('cust_pkg', {'pkgnum' => $pkgnum})
+  or die "Unknown pkgnum: $pkgnum";
 
-$part_pkg = $cust_pkg->part_pkg;
+my $part_pkg = $cust_pkg->part_pkg;
 
-$curuser = $FS::CurrentUser::CurrentUser;
+$date ||= $cust_pkg->get($method);
+$date ||= time;
 
 </%init>
-