<& /elements/header-popup.html, mt($title) &> <& /elements/error.html &>

<% emt(ucfirst($method)." [_1]", $part_pkg->pkg_comment(cust_pkg=>$cust_pkg) ) %>
% for ( @unprovision_warning ) { <% $_ |h %>
% }
% 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' ) { % % #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) { % foreach my $uncancel_svc (@uncancel_svcs) { % my $uncancel_curr_value = $uncancel_svc->{'uncancel_svcnum'}; % my $uncancel_disabled = ''; % my $uncancel_postfix = ''; % 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; % $uncancel_postfix = '(' . emt('Cannot be reprovisioned') . ')'; % } <& /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', 'postfix' => $uncancel_postfix, &> % } % } % } % 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')) { % } % 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, } &> % }
 
<% emt("Re-provision the following services") %>
% 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 % }

>
<%init> 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') ) { $pkgnum = $cgi->param('pkgnum'); $reasonnum = $cgi->param('reasonnum'); $date = str2time($cgi->param('date')); } elsif ( $cgi->param('pkgnum') =~ /^(\d+)$/ ) { $pkgnum = $1; $reasonnum = ''; } else { die "illegal query ". $cgi->keywords; } $cgi->param('method') =~ /^(\w+)$/ or die 'illegal method'; my $method = $1; my($class, $submit, $right); if ($method eq 'cancel') { $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/; my $cust_pkg = qsearchs('cust_pkg', {'pkgnum' => $pkgnum}) or die "Unknown pkgnum: $pkgnum"; my $part_pkg = $cust_pkg->part_pkg; my @unprovision_warning = (); unless ( $method =~ /^(resume|uncancel)$/ ) { my @services_w_export = map { my @l = $_->label; $l[0]. ': '. $l[1]; } grep $_->part_svc->export_svc, $cust_pkg->cust_svc; if ( @services_w_export ) { my $actioned = ($method =~ /^(suspend|adjourn)$/) ? 'suspended' : 'unprovisioned'; push @unprovision_warning, 'NOTE: This package has '. @services_w_export. ' '. PL( 'service', @services_w_export ). " that will be $actioned"; if ( @services_w_export < 10 ) { $unprovision_warning[0] .= ':'; push @unprovision_warning, @services_w_export; } else { $unprovision_warning[0] .= '.'; } } } $date ||= $cust_pkg->get($method); $date ||= time;