X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=httemplate%2Fedit%2Fprocess%2Fchange-cust_pkg.html;h=0e87ad85940cfbdcc6131181e5af2037155e2997;hb=020e2df25391da9028dfbd9962b554ac20f54f38;hp=96175e1e4572b81d0f7f806da51e872a022b17ca;hpb=8caec1039528538d542a941d58374d6045415527;p=freeside.git diff --git a/httemplate/edit/process/change-cust_pkg.html b/httemplate/edit/process/change-cust_pkg.html index 96175e1e4..0e87ad859 100644 --- a/httemplate/edit/process/change-cust_pkg.html +++ b/httemplate/edit/process/change-cust_pkg.html @@ -40,35 +40,58 @@ if ( $cgi->param('locationnum') == -1 ) { $change{'cust_location'} = $cust_location; } -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."; +$change{waive_setup} = ''; + +if ( $cgi->param('setup_discountnum') =~ /^(-?\d+)$/ ) { + if ( $1 == -2 ) { + $change{waive_setup} = 'Y'; } else { - # schedule the change - $change{'start_date'} = $date; - $error = $cust_pkg->change_later(\%change); + $change{setup_discountnum} = $1; + $change{setup_discountnum_amount} = $cgi->param('setup_discountnum_amount'); + $change{setup_discountnum_percent} = $cgi->param('setup_discountnum_percent'); } -} 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 $error; +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'} and + $change_to->waive_setup == $change{'waive_setup'} and + !$usagechanged + ) { + %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; + } }