1b7fc3805ad54835571d84a0d3a18197be91800e
[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_rf;
23 my @old_psr;
24
25 my $new = new FS::router {
26     routernum  => $routernum,
27     routername => $routername,
28     svcnum     => 0
29     };
30
31 if($old) {
32   if($old->routername ne $new->routername) {
33     $error = $new->replace($old);
34   } #else do nothing
35 } else {
36   $error = $new->insert;
37   $routernum = $new->routernum;
38 }
39
40 check($error);
41
42 if ($old) {
43   @old_psr = $old->part_svc_router;
44   foreach $psr (@old_psr) {
45     if($cgi->param('svcpart_'.$psr->svcpart) eq 'ON') {
46       # do nothing
47     } else {
48       $error = $psr->delete;
49     }
50   }
51   check($error);
52   @old_rf = $old->router_field;
53   foreach $rf (@old_rf) {
54     if(my $new_val = $cgi->param('rf_'.$rf->routerfieldpart)) {
55       if($new_val ne $rf->value) {
56         my $new_rf = new FS::router_field 
57           { routernum       => $routernum,
58             value           => $new_val,
59             routerfieldpart => $rf->routerfieldpart };
60         $error = $new_rf->replace($rf);
61       } #else do nothing
62     } else {
63       $error = $rf->delete;
64     }
65     check($error);
66   }
67 }
68
69 foreach($cgi->param) {
70   if($cgi->param($_) eq 'ON' and /^svcpart_(\d+)$/) {
71     my $svcpart = $1;
72     if(grep {$_->svcpart == $svcpart} @old_psr) {
73       # do nothing
74     } else {
75       my $new_psr = new FS::part_svc_router { svcpart   => $svcpart,
76                                               routernum => $routernum };
77       $error = $new_psr->insert;
78     }
79     check($error);
80   } elsif($cgi->param($_) ne '' and /^rf_(\d+)$/) {
81     my $part = $1;
82     if(my @x = grep {$_->routerfieldpart == $part} @old_rf) {
83       # already handled all of these
84     } else {
85       my $new_rf = new FS::router_field
86         { routernum       => $routernum,
87           value           => $cgi->param('rf_'.$part),
88           routerfieldpart => $part };
89       $error = $new_rf->insert;
90       check($error);
91     }
92   }
93 }
94
95
96
97 # Yay, everything worked!
98 $dbh->commit or die $dbh->errstr;
99 print $cgi->redirect(popurl(3). "browse/router.cgi");
100
101 %>