<% local $FS::UID::AutoCommit=0; sub check { my $error = shift; if($error) { $cgi->param('error', $error); print $cgi->redirect(popurl(3) . "edit/router.cgi?". $cgi->query_string); dbh->rollback; exit; } } my $error = ''; my $routernum = $cgi->param('routernum'); my $routername = $cgi->param('routername'); my $old = qsearchs('router', { routernum => $routernum }); my @old_psr; my $new = new FS::router { map { ($_, scalar($cgi->param($_))); } fields('router') }; if($old) { $error = $new->replace($old); } else { $error = $new->insert; $routernum = $new->routernum; } check($error); if ($old) { @old_psr = $old->part_svc_router; foreach my $psr (@old_psr) { if($cgi->param('svcpart_'.$psr->svcpart) eq 'ON') { # do nothing } else { $error = $psr->delete; } } check($error); } foreach($cgi->param) { if($cgi->param($_) eq 'ON' and /^svcpart_(\d+)$/) { my $svcpart = $1; if(grep {$_->svcpart == $svcpart} @old_psr) { # do nothing } else { my $new_psr = new FS::part_svc_router { svcpart => $svcpart, routernum => $routernum }; $error = $new_psr->insert; } check($error); } } # Yay, everything worked! dbh->commit or die dbh->errstr; print $cgi->redirect(popurl(3). "browse/router.cgi"); %>