<% 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 .= $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');