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