diff options
author | Mark Wells <mark@freeside.biz> | 2012-08-14 17:02:47 -0700 |
---|---|---|
committer | Mark Wells <mark@freeside.biz> | 2012-08-14 17:02:47 -0700 |
commit | 00938b30a69411a743aa01db5e27100818a3c82b (patch) | |
tree | 378d531b00f90c6d8b12998eba792ed3970a22ab /httemplate | |
parent | 08ac47123e098939db3d94cc136ff02f174e8dd0 (diff) |
unsuspend fees, #6587
Diffstat (limited to 'httemplate')
-rw-r--r-- | httemplate/browse/reason.html | 17 | ||||
-rw-r--r-- | httemplate/edit/reason.html | 116 | ||||
-rwxr-xr-x | httemplate/elements/tr-select-reason.html | 57 |
3 files changed, 143 insertions, 47 deletions
diff --git a/httemplate/browse/reason.html b/httemplate/browse/reason.html index fe285be4a..14e97bf2f 100644 --- a/httemplate/browse/reason.html +++ b/httemplate/browse/reason.html @@ -17,14 +17,17 @@ 'header' => [ '#', ucfirst($classname) . ' Reason Type', ucfirst($classname) . ' Reason', + ($class eq 'S' ? 'Unsuspension Fee' : ()), ], 'fields' => [ 'reasonnum', sub { shift->reasontype->type }, 'reason', + $unsuspend_pkg_comment, ], 'links' => [ $link, $link, '', + $unsuspend_pkg_link, ], ) %> @@ -50,4 +53,18 @@ my $count_query = 'SELECT COUNT(*) FROM reason LEFT JOIN reason_type on ' . my $link = [ $p."edit/reason.html?class=$class&reasonnum=", 'reasonnum' ]; +my ($unsuspend_pkg_comment, $unsuspend_pkg_link); +if ( $class eq 'S' ) { + $unsuspend_pkg_comment = sub { + my $pkgpart = shift->unsuspend_pkgpart or return ''; + my $part_pkg = FS::part_pkg->by_key($pkgpart) or return ''; + $part_pkg->pkg_comment; + }; + + my $unsuspend_pkg_link = sub { + my $pkgpart = shift->unsuspend_pkgpart or return ''; + [ $p."edit/part_pkg.cgi?", $pkgpart ]; + }; +} + </%init> diff --git a/httemplate/edit/reason.html b/httemplate/edit/reason.html index 620a2ea15..78d044755 100644 --- a/httemplate/edit/reason.html +++ b/httemplate/edit/reason.html @@ -1,50 +1,78 @@ -% -% $cgi->param('class') =~ /^(\w)$/ or die "illegal class"; -% my $class=$1; -% -% my $classname = $FS::reason_type::class_name{$class}; -% -% my (@types) = qsearch( 'reason_type', { 'class' => $class } ); -% -% unless (scalar(@types)) { -% print $cgi->redirect( "reason_type.html?class=$class" ); -% } -<% include( 'elements/edit.html', - 'name' => ucfirst($classname) . ' Reason', - 'table' => 'reason', - 'labels' => { - 'reasonnum' => ucfirst($classname) . ' Reason', - 'reason_type' => ucfirst($classname) . ' Reason type', - 'reason' => ucfirst($classname) . ' Reason', - 'disabled' => 'Disabled', - 'class' => '', - }, - 'fields' => [ - { 'field' => 'reason_type', - 'type' => 'select', - #XXX use something more sane than a hashref - #then fix tr-select.html - 'value' => { 'vcolumn' => 'typenum', - 'ccolumn' => 'type', - 'values' => \@types, - }, - }, - 'reason', - { 'field' => 'class', - 'type' => 'hidden', - 'value' => $class, - }, - { 'field' => 'disabled', - 'type' => 'checkbox', - 'value' => 'Y' - }, - ], - 'viewall_url' => $p . "browse/reason.html?class=$class", - ) -%> +<& elements/edit.html, + 'menubar'=> [ "View all $classname Reasons" => + $p.'browse/reason.html?class='.$class, + "View $classname Reason Types" => + $p.'browse/reason_type.html?class='.$class, + ], + 'name' => ucfirst($classname) . ' Reason', + + 'table' => 'reason', + 'labels' => { + 'reasonnum' => $classname . ' Reason', + 'reason_type' => $classname . ' Reason type', + 'reason' => $classname . ' Reason', + 'disabled' => 'Disabled', + 'class' => '', + 'unsuspend_pkgpart' => 'Unsuspension fee', + 'unsuspend_hold' => 'Delay until next bill', + }, + 'fields' => \@fields, +&> <%init> die "access denied" unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); +$cgi->param('class') =~ /^(\w)$/ or die "illegal class"; +my $class=$1; + +my $classname = ucfirst($FS::reason_type::class_name{$class}); + +my (@types) = qsearch( 'reason_type', { 'class' => $class } ); + +unless (scalar(@types)) { + print $cgi->redirect( "reason_type.html?class=$class" ); +} + +my @fields = ( + { 'field' => 'reason_type', + 'type' => 'select-table', + 'table' => 'reason_type', + 'name_col' => 'type', + 'value_col' => 'typenum', + 'hashref' => { 'class' => $class }, + 'disable_empty' => 1, +# #then fix tr-select.html +# +# 'value' => { 'vcolumn' => 'typenum', +# 'ccolumn' => 'type', +# 'values' => \@types, +# }, +# # that wasn't so hard...did this do something else that I'm missing? + }, + 'reason', + { 'field' => 'class', + 'type' => 'hidden', + 'value' => $class, + }, + { 'field' => 'disabled', + 'type' => 'checkbox', + 'value' => 'Y' + }, +); + +push @fields, + { 'field' => 'unsuspend_pkgpart', + 'type' => 'select-part_pkg', + 'hashref' => { 'disabled' => '', + 'freq' => 0 }, # one-time charges only + }, + { 'field' => 'unsuspend_hold', + 'type' => 'checkbox', + 'value' => 'Y', + }, + if ( $class eq 'S' ); + + + </%init> diff --git a/httemplate/elements/tr-select-reason.html b/httemplate/elements/tr-select-reason.html index 5a79d68ef..c1df10b94 100755 --- a/httemplate/elements/tr-select-reason.html +++ b/httemplate/elements/tr-select-reason.html @@ -32,8 +32,15 @@ Example: <SCRIPT TYPE="text/javascript"> function sh_add<% $func_suffix %>() { + var hints = <% encode_json(\@hints) %>; + var select_reason = document.getElementById('<% $id %>'); - if (document.getElementById('<% $id %>').selectedIndex == 0){ +% if ( $class eq 'S' ) { + document.getElementById('<% $id %>_hint').innerHTML = + hints[select_reason.selectedIndex]; +% } + + if (select_reason.selectedIndex == 0){ <% $controlledbutton ? $controlledbutton.'.disabled = true;' : ';' %> }else{ <% $controlledbutton ? $controlledbutton.'.disabled = false;' : ';' %> @@ -41,8 +48,8 @@ Example: %if ($curuser->access_right($add_access_right)){ - if (document.getElementById('<% $id %>').selectedIndex == - (document.getElementById('<% $id %>').length - 1)) { + if (select_reason.selectedIndex == + (select_reason.length - 1)) { document.getElementById('new<% $id %>').disabled = false; document.getElementById('new<% $id %>').style.display = 'inline'; document.getElementById('new<% $id %>Label').style.display = 'inline'; @@ -113,6 +120,13 @@ Example: </TR> % } +% if ( $class eq 'S' ) { +<TR> + <TD COLSPAN=2 ALIGN="center" id="<% $id %>_hint"> + </TD> +</TR> +% } + <TR> <TD ALIGN="right"> <P id="new<% $id %>Label" style="display:<% $display %>"><% mt('New Reason') |h %></P> @@ -184,6 +198,43 @@ my @reasons = qsearch({ order_by => 'ORDER BY reason_type.type ASC, reason.reason ASC', }); +my @hints; +if ( $class eq 'S' ) { + my $conf = FS::Conf->new; + @hints = ( '' ); + foreach my $reason (@reasons) { + 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, + '<FONT COLOR="#ff0000">Unsuspend pkg #'.$reason->unsuspend_pkgpart. + ' not found.</FONT>'; + } + } else { #no unsuspend_pkgpart + push @hints, ''; + } + } + push @hints, ''; # for the "new reason" case + @hints = map {'<FONT SIZE="-1">'.$_.'</FONT>'} @hints; +} + + my $curuser = $FS::CurrentUser::CurrentUser; </%init> |