From 881b82b9af1a264afbc98bb22adfcfb76fab74db Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Tue, 31 Mar 2015 11:33:44 -0700 Subject: more flexible package suspend/unsuspend fees, #26828 --- httemplate/browse/reason.html | 32 ++++++++---- httemplate/edit/reason.html | 33 +++++++++--- httemplate/elements/tr-select-reason.html | 84 +++++++++++++------------------ httemplate/misc/process/elements/reason | 3 +- httemplate/misc/xmlhttp-reason-hint.html | 83 ++++++++++++++++++++++++++++++ 5 files changed, 170 insertions(+), 65 deletions(-) create mode 100644 httemplate/misc/xmlhttp-reason-hint.html (limited to 'httemplate') diff --git a/httemplate/browse/reason.html b/httemplate/browse/reason.html index 5bb6a3e0c..8af88a950 100644 --- a/httemplate/browse/reason.html +++ b/httemplate/browse/reason.html @@ -65,7 +65,7 @@ my $align = 'rll'; if ( $class eq 'S' ) { push @header, 'Credit unused service', - 'Unsuspension fee', + 'Suspension fee', ; push @fields, sub { @@ -78,17 +78,29 @@ if ( $class eq 'S' ) { }, sub { my $reason = shift; - my $pkgpart = $reason->unsuspend_pkgpart or return ''; - my $part_pkg = FS::part_pkg->by_key($pkgpart) or return ''; - my $text = $part_pkg->pkg_comment; - my $href = $p."edit/part_pkg.cgi?$pkgpart"; - $text = qq!! . encode_entities($text) . "". - ""; - if ( $reason->unsuspend_hold ) { - $text .= ' (on next bill)' + my $feepart = $reason->feepart; + my ($href, $text, $detail); + if ( $feepart ) { + my $part_fee = FS::part_fee->by_key($feepart) or return ''; + $text = $part_fee->itemdesc . ': ' . $part_fee->explanation; + $detail = $reason->fee_on_unsuspend ? 'unsuspension' : 'suspension'; + if ( $reason->fee_hold ) { + $detail = "next bill after $detail"; + } + $detail = "(on $detail)"; + $href = $p."edit/part_fee.html?$feepart"; } else { - $text .= ' (immediately)' + my $pkgpart = $reason->unsuspend_pkgpart; + my $part_pkg = FS::part_pkg->by_key($pkgpart) or return ''; + $text = $part_pkg->pkg_comment; + $href = $p."edit/part_pkg.cgi?$pkgpart"; + $detail = $reason->unsuspend_hold ? + '(on next bill after unsuspension)' : '(on unsuspension)'; } + return '' unless length($text); + + $text = qq!! . encode_entities($text) . " ". + "$detail"; $text .= ''; } ; diff --git a/httemplate/edit/reason.html b/httemplate/edit/reason.html index 3e6645ec8..30168d551 100644 --- a/httemplate/edit/reason.html +++ b/httemplate/edit/reason.html @@ -13,9 +13,12 @@ 'reason' => $classname . ' Reason', 'disabled' => 'Disabled', 'class' => '', - 'unsuspend_pkgpart' => 'Unsuspension fee', - 'unsuspend_hold' => 'Delay until next bill', + 'feepart' => 'Charge a suspension fee', + 'fee_on_unsuspend' => 'When a package is', + 'fee_hold' => 'Delay fee until next bill', 'unused_credit' => 'Credit unused portion of service', + 'unsuspend_pkgpart' => 'Order an unsuspension package', + 'unsuspend_hold' => 'Delay package until next bill', }, 'fields' => \@fields, &> @@ -64,6 +67,28 @@ my @fields = ( if ( $class eq 'S' ) { push @fields, + { 'field' => 'unused_credit', + 'type' => 'checkbox', + 'value' => 'Y', + }, + { 'type' => 'tablebreak-tr-title' }, + { 'field' => 'feepart', + 'type' => 'select-table', + 'table' => 'part_fee', + 'hashref' => { disabled => '' }, + 'name_col' => 'itemdesc', + 'value_col' => 'feepart', + 'empty_label' => 'none', + }, + { 'field' => 'fee_on_unsuspend', + 'type' => 'select', + 'options' => [ '', 'Y' ], + 'labels' => { '' => 'suspended', 'Y' => 'unsuspended' }, + }, + { 'field' => 'fee_hold', + 'type' => 'checkbox', + 'value' => 'Y', + }, { 'field' => 'unsuspend_pkgpart', 'type' => 'select-part_pkg', 'hashref' => { 'disabled' => '', @@ -73,10 +98,6 @@ if ( $class eq 'S' ) { 'type' => 'checkbox', 'value' => 'Y', }, - { 'field' => 'unused_credit', - 'type' => 'checkbox', - 'value' => 'Y', - }, ; } diff --git a/httemplate/elements/tr-select-reason.html b/httemplate/elements/tr-select-reason.html index 70f21c9e5..836dd9bcd 100755 --- a/httemplate/elements/tr-select-reason.html +++ b/httemplate/elements/tr-select-reason.html @@ -35,13 +35,17 @@ Example: % # - no redundant checking of ACLs or parameters % # - form fields are grouped for easy management % # - use the standard select-table widget instead of ad hoc crap +<& /elements/xmlhttp.html, + url => $p . 'misc/xmlhttp-reason-hint.html', + subs => [ 'get_hint' ], +&> + +Currently will provide hints for: +1. suspension events (new-style reconnection fees, notification) +2. unsuspend_pkgpart package info (older reconnection fees) +3. crediting for unused time + +<%init> +my $sub = $cgi->param('sub'); +my ($reasonnum) = $cgi->param('arg'); +# arg is a reasonnum +my $conf = FS::Conf->new; +my $error = ''; +my @hints; +if ( $reasonnum =~ /^\d+$/ ) { + my $reason = FS::reason->by_key($reasonnum); + if ( $reason ) { + # 1. + if ( $reason->feepart ) { # XXX + my $part_fee = FS::part_fee->by_key($reason->feepart); + my $when = ''; + if ( $reason->fee_hold ) { + $when = 'on the next bill after '; + } else { + $when = 'upon '; + } + if ( $reason->fee_on_unsuspend ) { + $when .= 'unsuspension'; + } else { + $when .= 'suspension'; + } + + my $fee_amt = $part_fee->explanation; + push @hints, mt('A fee of [_1] will be charged [_2].', + $fee_amt, $when); + } + # 2. + if ( $reason->unsuspend_pkgpart ) { + my $part_pkg = FS::part_pkg->by_key($reason->unsuspend_pkgpart); + if ( $part_pkg ) { + if ( $part_pkg->option('setup_fee',1) > 0 and + $part_pkg->option('recur_fee',1) == 0 ) { + # the usual case + push @hints, + mt('A [_1] unsuspension fee will apply.', + ($conf->config('money_char') || '$') . + sprintf('%.2f', $part_pkg->option('setup_fee')) + ); + } else { + # oddball cases--not really supported + push @hints, + mt('An unsuspension package will apply: [_1]', + $part_pkg->price_info + ); + } + } else { #no $part_pkg + push @hints, + 'Unsuspend pkg #'.$reason->unsuspend_pkgpart. + ' not found.'; + } + } + # 3. + if ( $reason->unused_credit ) { + push @hints, mt('The customer will be credited for unused time.'); + } + } else { + warn "reasonnum $reasonnum not found; returning no hints\n"; + } +} else { + warn "reason-hint arg '$reasonnum' not a valid reasonnum\n"; +} + +<% join('
', @hints) %> -- cgit v1.2.1