% include( 'elements/process.html',
#'debug' => 1,
'table' => 'part_event',
'viewall_dir' => 'browse',
'process_m2name' =>
{
'link_table' => 'part_event_condition',
'num_col' => 'eventpart',
'name_col' => 'conditionname',
'names_list' => [ FS::part_event_condition->all_conditionnames() ],
'param_style' => 'name_colN values',
'args_callback' => sub { # FS/FS/m2name_Common.pm
my( $object, $prefix, $params, $listref ) = @_;
#warn "$object $prefix $params $listref\n";
my $cond = $object->conditionname;
my %option_fields = $object->option_fields;
push @$listref, map {
my $field = $_;
my $cgi_field = "$prefix$cond.$field";
my $value = $params->{$cgi_field};
my $info = $option_fields{$_};
$info = { label=>$info, type=>'text' }
unless ref($info);
if ( $info->{'type'} =~
/^(select|checkbox)-?multiple$/
or $info->{'type'} =~ /^select/
&& $info->{'multiple'}
)
{
#special processing for compound fields
$value = { map { $_ => 1 }
split(/\0/, $value)
};
} elsif ( $info->{'type'} eq 'freq' ) {
$value = '0' if !length($value) and !$info->{'allow_blank'};
$value = '0' if $value =~ /[^\d]/;
$value .= $params->{$cgi_field.'_units'} if length($value);
}
#warn "value of $cgi_field is $value\n";
( $field => $value );
}
keys %option_fields;
},
},
'args_callback' => sub {
my( $cgi, $object ) = @_;
my $prefix = $object->action.'.';
map { my $option = $_;
#my $value = scalar( $cgi->param( "$prefix$option" ) );
my $value = join(',', $cgi->param( "$prefix$option" ) );
if ( $option eq 'reasonnum' && $value == -1 ) {
my $reason_prefix = $object->action . '_' . $option . '_new_';
my $new_reason = FS::reason->new;
foreach ( qw( reason_type reason unsuspend pkgpart
unsuspend_hold unused_credit ) ) {
$new_reason->set($_, $cgi->param("$reason_prefix$_"));
}
warn Dumper $new_reason;
my $error = $new_reason->insert;
die "error creating reason: $error" if $error;
$value = $new_reason->reasonnum;
}
( $option => $value );
}
@{ $object->option_fields_listref || [] };
},
'precheck_callback' => sub {
my $cgi = shift;
my $action = $cgi->param('action') or return;
my %actionfields = map { $_ =~ /^$action\.(.*)/; $1 => scalar($cgi->param($_)) }
grep { /^$action\./ } $cgi->param;
if ( exists($actionfields{'reasonnum'}) and
length($actionfields{'reasonnum'}) == 0 ) {
return 'Reason required';
}
if ( $cgi->param('_initialize') ) {
$cgi->param('disabled', 'Y');
}
my $balance_age_rx = qr/^(condition.+)\.balance_age\.age$/;
foreach my $param ( keys %{ $cgi->Vars() } ){
next unless ( $param =~ /$balance_age_rx/ );
next unless $cgi->param($1) eq 'balance_age';
my $errstr = FS::part_event::Condition::balance_age->
check_options( { age => scalar($cgi->param($param)),
age_units => scalar($cgi->param("${param}_units")),
}
);
return $errstr if $errstr;
}
return '';
},
'noerror_callback' => sub {
my ($cgi, $new) = @_;
if ( $cgi->param('_initialize') ) {
my $job = new FS::queue {
'job' => 'FS::part_event::process_initialize'
};
my $error = $job->insert('eventpart' => $new->eventpart);
warn "error queueing job: $error\n" if $error; # can't do anything else
}
},
'agent_virt' => 1,
'agent_null_right' => 'Edit global billing events',
)
%>
<%init>
die "access denied"
unless $FS::CurrentUser::CurrentUser->access_right('Edit billing events')
|| $FS::CurrentUser::CurrentUser->access_right('Edit global billing events');
%init>