7e40c48a70ad233ae1ab5189eb06c0d1f79be732
[freeside.git] / httemplate / edit / process / router.cgi
1 <%
2
3 use FS::UID qw(dbh);
4
5 my $dbh = dbh;
6 local $FS::UID::AutoCommit=0;
7
8 sub check {
9   my $error = shift;
10   if($error) {
11     $cgi->param('error', $error);
12     print $cgi->redirect(popurl(3) . "edit/router.cgi?". $cgi->query_string);
13     $dbh->rollback;
14     exit;
15   }
16 }
17
18 my $error = '';
19 my $routernum  = $cgi->param('routernum');
20 my $routername = $cgi->param('routername');
21 my $old = qsearchs('router', { routernum => $routernum });
22 my @old_psr;
23
24 my $new = new FS::router {
25   map {
26     ($_, scalar($cgi->param($_)));
27   } fields('router')
28 };
29
30 if($old) {
31   $error = $new->replace($old);
32 } else {
33   $error = $new->insert;
34   $routernum = $new->routernum;
35 }
36
37 check($error);
38
39 if ($old) {
40   @old_psr = $old->part_svc_router;
41   foreach $psr (@old_psr) {
42     if($cgi->param('svcpart_'.$psr->svcpart) eq 'ON') {
43       # do nothing
44     } else {
45       $error = $psr->delete;
46     }
47   }
48   check($error);
49 }
50
51 foreach($cgi->param) {
52   if($cgi->param($_) eq 'ON' and /^svcpart_(\d+)$/) {
53     my $svcpart = $1;
54     if(grep {$_->svcpart == $svcpart} @old_psr) {
55       # do nothing
56     } else {
57       my $new_psr = new FS::part_svc_router { svcpart   => $svcpart,
58                                               routernum => $routernum };
59       $error = $new_psr->insert;
60     }
61     check($error);
62   }
63 }
64
65
66 # Yay, everything worked!
67 $dbh->commit or die $dbh->errstr;
68 print $cgi->redirect(popurl(3). "browse/router.cgi");
69
70 %>