<& elements/edit.html, name_singular => 'schedule', table => 'commission_schedule', viewall_dir => 'browse', fields => [ 'schedulename', { field => 'reasonnum', type => 'select-reason', reason_class => 'R', }, { field => 'basis', type => 'select', options => [ keys %FS::commission_schedule::basis_options ], labels => { %FS::commission_schedule::basis_options }, }, { type => 'tablebreak-tr-title', value => 'Billing cycles' }, { field => 'commissionratenum', type => 'commission_rate', o2m_table => 'commission_rate', m2_label => ' ', m2_error_callback => $m2_error_callback, colspan => 2, }, ], labels => { 'schedulenum' => '', 'schedulename' => 'Name', 'basis' => 'Based on', 'commissionratenum' => '', }, &> <%init> my $m2_error_callback = sub { my ($cgi, $object) = @_; my @rates; foreach my $k ( grep /^commissionratenum\d+/, $cgi->param ) { my $num = $cgi->param($k); my $cycle = $cgi->param($k.'_cycle'); my $amount = $cgi->param($k.'_amount'); my $percent = $cgi->param($k.'_percent'); if ($cycle > 0) { push @rates, FS::commission_rate->new({ 'commissionratenum' => $num, 'cycle' => $cycle, 'amount' => $amount, 'percent' => $percent, }); } } @rates; };