%if ( $error ) { % $cgi->param('error', $error); <% $cgi->redirect(popurl(2). "part_bill_event.cgi?". $cgi->query_string ) %> %} else { <% $cgi->redirect(popurl(3)."browse/part_bill_event.cgi") %> %} <%init> die "access denied" unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); my $eventpart = $cgi->param('eventpart'); my $old = qsearchs('part_bill_event',{'eventpart'=>$eventpart}) if $eventpart; #s/days/seconds/ $cgi->param('seconds', int( $cgi->param('days') * 86400 ) ); my $error; if ( ! $cgi->param('plan_weight_eventcode') ) { $error = "Must select an action"; } else { $cgi->param('plan_weight_eventcode') =~ /^([\w\-]+):(\d+):(.*)$/s or die "illegal plan_weight_eventcode:". $cgi->param('plan_weight_eventcode'); $cgi->param('plan', $1); $cgi->param('weight', $2); my $eventcode = $3; my $plandata = ''; my $rnum; my $rtype; my $reasonm; my $class = ''; $class='c' if ($eventcode =~ /cancel/); $class='s' if ($eventcode =~ /suspend/); if ($class) { $cgi->param("${class}reason") =~ /^(-?\d+)$/ or $error = "Invalid ${class}reason"; $rnum = $1; if ($rnum == -1) { $cgi->param("new${class}reasonT") =~ /^(\d+)$/ or $error = "Invalid new${class}reasonT"; $rtype = $1; $cgi->param("new${class}reason") =~ /^([\s\w]+)$/ or $error = "Invalid new${class}reason"; $reasonm = $1; } } if ($rnum == -1 && !$error) { my $reason = new FS::reason ({ 'reason' => $reasonm, 'reason_type' => $rtype, }); $error = $reason->insert; unless ($error) { $rnum = $reason->reasonnum; $cgi->param("${class}reason", $rnum); $cgi->param("new${class}reason", ''); $cgi->param("new${class}reasonT", ''); } } while ( $eventcode =~ /%%%(\w+)%%%/ ) { my $field = $1; my $value = join(', ', $cgi->param($field) ); $cgi->param($field, $value); #in case it errors out $eventcode =~ s/%%%$field%%%/$value/; $plandata .= "$field $value\n"; } $cgi->param('eventcode', $eventcode); $cgi->param('plandata', $plandata); unless($error) { if ( $eventpart ) { my $new = new FS::part_bill_event ( { map { $_ => scalar($cgi->param($_)) } fields('part_bill_event'), } ); $new->setfield('reason' => $rnum); $error = $new->replace($old); } else { foreach my $payby ( $cgi->param('payby') ) { my $new = new FS::part_bill_event ( { map { $_ => scalar($cgi->param($_)) } grep { $_ ne 'payby' } fields('part_bill_event') } ); $new->setfield('payby' => $payby); $new->setfield('reason' => $rnum ); $error = $new->insert; last if $error; } } } }