From: ivan Date: Sat, 30 Jan 2010 23:00:25 +0000 (+0000) Subject: discounts, RT#6679 X-Git-Tag: root_of_svc_elec_features~496 X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=481011e14852aa62181bed0c7ae34b1e37ebff18 discounts, RT#6679 --- diff --git a/httemplate/edit/cust_pkg_discount.html b/httemplate/edit/cust_pkg_discount.html new file mode 100755 index 000000000..22d8c632f --- /dev/null +++ b/httemplate/edit/cust_pkg_discount.html @@ -0,0 +1,75 @@ +<% include('/elements/header-popup.html', "Discount Package") %> + + + +<% include('/elements/error.html') %> + +
+ + +<% ntable('#cccccc') %> + + + Current package  + + <% $curuser->option('show_pkgnum') ? $cust_pkg->pkgnum.': ' : '' %><% $part_pkg->pkg |h %> - <% $part_pkg->comment |h %> + + + +<% include('/elements/tr-select-discount.html', + 'empty_label' => ( $pkgdiscountnum ? '' : 'Select discount' ), + 'onchange' => 'enable_discount_pkg', + ) +%> + + + +
+> + +
+ + + +<%init> + +#some false laziness w/misc/change_pkg.cgi + +my $conf = new FS::Conf; + +my $curuser = $FS::CurrentUser::CurrentUser; + +die "access denied" + unless $curuser->access_right('Discount customer package'); + +my $pkgnum = scalar($cgi->param('pkgnum')); +$pkgnum =~ /^(\d+)$/ or die "illegal pkgnum $pkgnum"; +$pkgnum = $1; + +my $pkgdiscountnum = ''; + +my $cust_pkg = + qsearchs({ + 'table' => 'cust_pkg', + 'addl_from' => 'LEFT JOIN cust_main USING ( custnum )', + 'hashref' => { 'pkgnum' => $pkgnum }, + 'extra_sql' => ' AND '. $curuser->agentnums_sql, + }) or die "unknown pkgnum $pkgnum"; + +#my $cust_main = $cust_pkg->cust_main +# or die "can't get cust_main record for custnum ". $cust_pkg->custnum. +# " ( pkgnum ". cust_pkg->pkgnum. ")"; + +my $part_pkg = $cust_pkg->part_pkg; + + diff --git a/httemplate/edit/process/cust_pkg_discount.html b/httemplate/edit/process/cust_pkg_discount.html new file mode 100644 index 000000000..4a31b922a --- /dev/null +++ b/httemplate/edit/process/cust_pkg_discount.html @@ -0,0 +1,51 @@ +% if ($error) { +% $cgi->param('error', $error); +% $cgi->redirect(popurl(3). 'edit/cust_pkg_discount.html?'. $cgi->query_string ); +% } else { + + <% header("Discount applied") %> + + + + +% } +<%init> + +my $curuser = $FS::CurrentUser::CurrentUser; + +die "access denied" + unless $curuser->access_right('Discount customer package'); + +#this search is really for security wrt agent virt... +#maybe move it to the cust_pkg_discount->insert call? +my $cust_pkg = qsearchs({ + #'select' => 'cust_pkg.*', + 'table' => 'cust_pkg', + 'addl_from' => 'LEFT JOIN cust_main USING ( custnum )', + 'hashref' => { 'pkgnum' => scalar($cgi->param('pkgnum')), }, + 'extra_sql' => ' AND '. $curuser->agentnums_sql, +}); +die 'unknown pkgnum' unless $cust_pkg; + +#XXX something not unlike this for custom discounts +#if ( $cgi->param('locationnum') == -1 ) { +# my $cust_location = new FS::cust_location { +# 'custnum' => $cust_pkg->custnum, +# map { $_ => scalar($cgi->param($_)) } +# qw( address1 address2 city county state zip country ) +# }; +# $change{'cust_location'} = $cust_location; +#} + +my $cust_pkg_discount = new FS::cust_pkg_discount { + 'pkgnum' => $cust_pkg->pkgnum, + 'discountnum' => scalar($cgi->param('discountnum')), + 'months_used' => 0, + 'end_date' => '', #XXX + 'otaker' => $curuser->username, +}; +my $error = $cust_pkg_discount->insert; + + diff --git a/httemplate/misc/delete-cust_pkg_discount.html b/httemplate/misc/delete-cust_pkg_discount.html new file mode 100644 index 000000000..69168af3b --- /dev/null +++ b/httemplate/misc/delete-cust_pkg_discount.html @@ -0,0 +1,30 @@ +% if ( $error ) { +% errorpage($error); +% } else { +% my $frag = "cust_pkg". $cust_pkg->pkgnum; +% my $show = $curuser->default_customer_view =~ /^(jumbo|packages)$/ +% ? '' +% : ';show=packages'; +<% $cgi->redirect($p. "view/cust_main.cgi?custnum=$custnum$show;fragment=$frag#$frag" ) %> +% } +<%init> + +my $curuser = $FS::CurrentUser::CurrentUser; + +#XXX ACL to remove discounts +#die "access denied" +# unless $curuser->access_right('Delete invoices'); + +#untaint pkgdiscountnum +my($query) = $cgi->keywords; +$query =~ /^(\d+)$/ || die "Illegal crednum"; +my $pkgdiscountnum = $1; + +my $cust_pkg_discount = + qsearchs('cust_pkg_discount', {'pkgdiscountnum'=>$pkgdiscountnum}); +my $cust_pkg = $cust_pkg_discount->cust_pkg; +my $custnum = $cust_pkg->custnum; + +my $error = $cust_pkg_discount->delete; + + diff --git a/httemplate/view/cust_main/packages/package.html b/httemplate/view/cust_main/packages/package.html index 33bcd2ad4..3c486dd25 100644 --- a/httemplate/view/cust_main/packages/package.html +++ b/httemplate/view/cust_main/packages/package.html @@ -36,6 +36,15 @@ ( <%pkg_dates_link($cust_pkg)%> ) % } % +% if ( $curuser->access_right('Discount customer package') +% && $part_pkg->can_discount +% && ! scalar($cust_pkg->cust_pkg_discount_active) +% ) +% { +% $br=1; + ( <%pkg_discount_link($cust_pkg)%> ) +% } +% % if ( $curuser->access_right('Customize customer package') ) { % $br=1; ( <%pkg_customize_link($cust_pkg,$part_pkg)%> ) @@ -196,6 +205,19 @@ sub pkg_change_link { sub pkg_dates_link { pkg_link('edit/REAL_cust_pkg', 'Edit dates', @_ ); } +sub pkg_discount_link { + my $cust_pkg = shift or return ''; + #my $part_pkg = shift; + #my $custnum = $cust_pkg->custnum; + include( '/elements/popup_link-cust_pkg.html', + 'action' => $p.'edit/cust_pkg_discount.html', + 'label' => 'Discount', + 'actionlabel' => 'Discount', + 'cust_pkg' => $cust_pkg, + 'width' => 616, + ); +} + sub pkg_customize_link { my $cust_pkg = shift or return ''; my $part_pkg = shift; diff --git a/httemplate/view/cust_main/packages/status.html b/httemplate/view/cust_main/packages/status.html index 40d6438f3..c65eb70e9 100644 --- a/httemplate/view/cust_main/packages/status.html +++ b/httemplate/view/cust_main/packages/status.html @@ -304,6 +304,11 @@ sub pkg_status_row_discount { ' months remaining)' if $discount->months; + $label .= ' ('. + 'remove discount)'; + $html .= pkg_status_row_colspan( $cust_pkg, $label, '', 'colspan' => $opt{'colspan'}, #%opt,