diff options
Diffstat (limited to 'httemplate/edit/process')
-rw-r--r-- | httemplate/edit/process/change-cust_pkg.html | 59 | ||||
-rw-r--r-- | httemplate/edit/process/cust_pay-no_auto_apply.cgi | 48 | ||||
-rwxr-xr-x | httemplate/edit/process/cust_pay.cgi | 1 |
3 files changed, 83 insertions, 25 deletions
diff --git a/httemplate/edit/process/change-cust_pkg.html b/httemplate/edit/process/change-cust_pkg.html index 96175e1e4..046a9795c 100644 --- a/httemplate/edit/process/change-cust_pkg.html +++ b/httemplate/edit/process/change-cust_pkg.html @@ -41,34 +41,43 @@ if ( $cgi->param('locationnum') == -1 ) { } my $error; -if ( $cgi->param('delay') ) { - my $date = parse_datetime($cgi->param('start_date')); - if (!$date) { - $error = "Invalid change date '".$cgi->param('start_date')."'."; - } elsif ( $date < time ) { - $error = "Change date ".$cgi->param('start_date')." is in the past."; - } else { - # schedule the change - $change{'start_date'} = $date; - $error = $cust_pkg->change_later(\%change); - } -} else { - # special case: if there's a package change scheduled, and it matches - # the parameters the user requested this time, then change to the existing - # future package. - if ( $cust_pkg->change_to_pkgnum ) { - my $change_to = FS::cust_pkg->by_key($cust_pkg->change_to_pkgnum); - if ( $change_to->pkgpart == $change{'pkgpart'} and - $change_to->locationnum == $change{'locationnum'} ) { - - %change = ( 'cust_pkg' => $change_to ); +my $now = time; +if (defined($cgi->param('contract_end'))) { + $change{'contract_end'} = parse_datetime($cgi->param('contract_end')); +} +unless ($error) { + if ( $cgi->param('delay') ) { + my $date = parse_datetime($cgi->param('start_date')); + if (!$date) { + $error = "Invalid change date '".$cgi->param('start_date')."'."; + } elsif ( $date < $now ) { + $error = "Change date ".$cgi->param('start_date')." is in the past."; + } else { + # schedule the change + $change{'start_date'} = $date; + $error = $cust_pkg->change_later(\%change); + } + } else { + # special case: if there's a package change scheduled, and it matches + # the parameters the user requested this time, then change to the existing + # future package. + if ( $cust_pkg->change_to_pkgnum ) { + my $change_to = FS::cust_pkg->by_key($cust_pkg->change_to_pkgnum); + if ( + $change_to->pkgpart == $change{'pkgpart'} and + $change_to->locationnum == $change{'locationnum'} and + $change_to->quantity == $change{'quantity'} and + $change_to->contract_end == $change{'contract_end'} + ) { + %change = ( 'cust_pkg' => $change_to ); + } } - } - # do a package change right now - my $pkg_or_error = $cust_pkg->change( \%change ); - $error = ref($pkg_or_error) ? '' : $pkg_or_error; + # do a package change right now + my $pkg_or_error = $cust_pkg->change( \%change ); + $error = ref($pkg_or_error) ? '' : $pkg_or_error; + } } </%init> diff --git a/httemplate/edit/process/cust_pay-no_auto_apply.cgi b/httemplate/edit/process/cust_pay-no_auto_apply.cgi new file mode 100644 index 000000000..ccbd2d7b5 --- /dev/null +++ b/httemplate/edit/process/cust_pay-no_auto_apply.cgi @@ -0,0 +1,48 @@ +<%doc> +Quick process for toggling no_auto_apply field in cust_pay. + +Requires paynum and no_auto_apply ('Y' or '') in cgi. + +Requires 'Apply payment' acl. +</%doc> + +% if ($error) { + +<P STYLE="color: #FF0000"><% emt($error) %></P> + +% } else { + +<P STYLE="font-weight: bold;"><% emt($message) %></P> +<P><% emt('Please wait while the page reloads.') %></P> +<SCRIPT TYPE="text/javascript"> +window.top.location.reload(); +</SCRIPT> + +% } + +<%init> +die "access denied" + unless $FS::CurrentUser::CurrentUser->access_right('Apply payment'); + +my $paynum = $cgi->param('paynum'); +my $noauto = $cgi->param('no_auto_apply'); + +my $error = ''; +my $message = ''; +my $cust_pay = qsearchs('cust_pay',{ paynum => $paynum }); +if ($cust_pay) { + if (($noauto eq 'Y') || (defined($noauto) && (length($noauto) == 0))) { + $cust_pay->no_auto_apply($noauto); + $error = $cust_pay->replace; + $message = $noauto ? + q(Payment will not be automatically applied to open invoices, must be applied manually) : + q(Payment will be automatically applied to open invoices the next time this customer's payments are processed); + } else { + $error = 'no_auto_apply not specified'; + } +} else { + $error .= 'Payment could not be found in database'; +} + + +</%init> diff --git a/httemplate/edit/process/cust_pay.cgi b/httemplate/edit/process/cust_pay.cgi index a002fa181..56d3f2ff1 100755 --- a/httemplate/edit/process/cust_pay.cgi +++ b/httemplate/edit/process/cust_pay.cgi @@ -50,6 +50,7 @@ else { my $new = new FS::cust_pay ( { $field => $linknum, _date => $_date, + no_auto_apply => ($cgi->param('apply') eq 'never') ? 'Y' : '', map { $_, scalar($cgi->param($_)); } qw( paid payby payinfo paybatch |