+%
+%
+%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");
+%
+%