removed <!-- $Id$ --> from all files to fix any redirects, whew
[freeside.git] / httemplate / edit / svc_forward.cgi
1 <%
2
3 my $conf = new FS::Conf;
4 my $mydomain = $conf->config('domain');
5
6 my($svcnum, $pkgnum, $svcpart, $part_svc, $svc_forward);
7 if ( $cgi->param('error') ) {
8   $svc_forward = new FS::svc_forward ( {
9     map { $_, scalar($cgi->param($_)) } fields('svc_forward')
10   } );
11   $svcnum = $svc_forward->svcnum;
12   $pkgnum = $cgi->param('pkgnum');
13   $svcpart = $cgi->param('svcpart');
14   $part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart});
15   die "No part_svc entry!" unless $part_svc;
16 } else {
17
18   my($query) = $cgi->keywords;
19
20   if ( $query =~ /^(\d+)$/ ) { #editing
21     $svcnum=$1;
22     $svc_forward=qsearchs('svc_forward',{'svcnum'=>$svcnum})
23       or die "Unknown (svc_forward) svcnum!";
24
25     my($cust_svc)=qsearchs('cust_svc',{'svcnum'=>$svcnum})
26       or die "Unknown (cust_svc) svcnum!";
27
28     $pkgnum=$cust_svc->pkgnum;
29     $svcpart=$cust_svc->svcpart;
30   
31     $part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart});
32     die "No part_svc entry!" unless $part_svc;
33
34   } else { #adding
35
36     $svc_forward = new FS::svc_forward({});
37
38     foreach $_ (split(/-/,$query)) { #get & untaint pkgnum & svcpart
39       $pkgnum=$1 if /^pkgnum(\d+)$/;
40       $svcpart=$1 if /^svcpart(\d+)$/;
41     }
42     $part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart});
43     die "No part_svc entry!" unless $part_svc;
44
45     $svcnum='';
46
47     #set fixed and default fields from part_svc
48     foreach my $part_svc_column (
49       grep { $_->columnflag } $part_svc->all_part_svc_column
50     ) {
51       $svc_forward->setfield( $part_svc_column->columnname,
52                               $part_svc_column->columnvalue,
53                             );
54     }
55   }
56
57 }
58 my $action = $svc_forward->svcnum ? 'Edit' : 'Add';
59
60 my %email;
61 if ($pkgnum) {
62
63   #find all possible user svcnums (and emails)
64
65   #starting with those currently attached
66   if ( $svc_forward->srcsvc ) {
67     my $svc_acct = qsearchs( 'svc_acct', { 'svcnum' => $svc_forward->srcsvc } );
68     $email{$svc_forward->srcsvc} = $svc_acct->email;
69   }
70   if ( $svc_forward->dstsvc ) {
71     my $svc_acct = qsearchs( 'svc_acct', { 'svcnum' => $svc_forward->dstsvc } );
72     $email{$svc_forward->dstsvc} = $svc_acct->email;
73   }
74
75   #and including the rest for this customer
76   my($u_part_svc,@u_acct_svcparts);
77   foreach $u_part_svc ( qsearch('part_svc',{'svcdb'=>'svc_acct'}) ) {
78     push @u_acct_svcparts,$u_part_svc->getfield('svcpart');
79   }
80
81   my($cust_pkg)=qsearchs('cust_pkg',{'pkgnum'=>$pkgnum});
82   my($custnum)=$cust_pkg->getfield('custnum');
83   my($i_cust_pkg);
84   foreach $i_cust_pkg ( qsearch('cust_pkg',{'custnum'=>$custnum}) ) {
85     my($cust_pkgnum)=$i_cust_pkg->getfield('pkgnum');
86     my($acct_svcpart);
87     foreach $acct_svcpart (@u_acct_svcparts) {   #now find the corresponding 
88                                               #record(s) in cust_svc ( for this
89                                               #pkgnum ! )
90       foreach my $i_cust_svc (
91         qsearch( 'cust_svc', { 'pkgnum'  => $cust_pkgnum,
92                                'svcpart' => $acct_svcpart } )
93       ) {
94         my $svc_acct =
95           qsearchs( 'svc_acct', { 'svcnum' => $i_cust_svc->svcnum } );
96         $email{$svc_acct->svcnum} = $svc_acct->email;
97       }  
98     }
99   }
100
101 } elsif ( $action eq 'Edit' ) {
102
103   my($svc_acct)=qsearchs('svc_acct',{'svcnum'=>$svc_forward->srcsvc});
104   $email{$svc_forward->srcsvc} = $svc_acct->email;
105
106   $svc_acct=qsearchs('svc_acct',{'svcnum'=>$svc_forward->dstsvc});
107   $email{$svc_forward->dstsvc} = $svc_acct->email;
108
109 } else {
110   die "\$action eq Add, but \$pkgnum is null!\n";
111 }
112
113 my($srcsvc,$dstsvc,$dst)=(
114   $svc_forward->srcsvc,
115   $svc_forward->dstsvc,
116   $svc_forward->dst,
117 );
118
119 #display
120
121 my $p1 = popurl(1);
122 print header("Mail Forward $action", '',
123       " onLoad=\"visualize()\"");
124
125 %>
126
127 <SCRIPT>
128 function visualize(what){
129     if (document.getElementById) {
130       document.getElementById('dother').style.visibility = '<%= $dstsvc ? 'hidden' : 'visible' %>';
131     }
132 }
133 function fixup(what){
134     if (document.getElementById) {
135       if (document.getElementById('dother').style.visibility == 'hidden') {
136         what.dst.value='';
137       }
138     }
139 }
140 </SCRIPT>
141
142 <%
143
144 print qq!<FONT SIZE="+1" COLOR="#ff0000">Error: !, $cgi->param('error'),
145       "</FONT>"
146   if $cgi->param('error');
147
148 print qq!<FORM ACTION="${p1}process/svc_forward.cgi" onSubmit="fixup(this)" METHOD=POST>!;
149
150 #svcnum
151 print qq!<INPUT TYPE="hidden" NAME="svcnum" VALUE="$svcnum">!;
152 print qq!Service #<FONT SIZE=+1><B>!, $svcnum ? $svcnum : " (NEW)", "</B></FONT>";
153 print qq!<BR>!;
154
155 #pkgnum
156 print qq!<INPUT TYPE="hidden" NAME="pkgnum" VALUE="$pkgnum">!;
157  
158 #svcpart
159 print qq!<INPUT TYPE="hidden" NAME="svcpart" VALUE="$svcpart">!;
160
161 #srcsvc
162 print qq!\n\nMail to <SELECT NAME="srcsvc" SIZE=1>!;
163 foreach $_ (keys %email) {
164   print "<OPTION", $_ eq $srcsvc ? " SELECTED" : "",
165         qq! VALUE="$_">$email{$_}!;
166 }
167 print "</SELECT>";
168
169 #dstsvc
170 print qq! forwards to <SELECT NAME="dstsvc" SIZE=1 onChange="changed(this)">!;
171 foreach $_ (keys %email) {
172   print "<OPTION", $_ eq $dstsvc ? " SELECTED" : "",
173         qq! VALUE="$_">$email{$_}!;
174 }
175 print "<OPTION", 0 eq $dstsvc ? " SELECTED" : "",
176       qq! VALUE="0">(other)!;
177 print "</SELECT> mailbox.";
178
179 %>
180
181 <SCRIPT>
182 var selectchoice = null;
183 function changed(what) {
184   selectchoice = what.options[what.selectedIndex].value;
185   if (selectchoice == "0") {
186     if (document.getElementById) {
187       document.getElementById('dother').style.visibility = "visible";
188     }
189   }else{
190     if (document.getElementById) {
191       document.getElementById('dother').style.visibility = "hidden";
192     }
193   }
194 }
195 if (document.getElementById) {
196     document.write("<DIV ID=\"dother\" STYLE=\"visibility: hidden\">");
197 }
198 </SCRIPT>
199
200 <%
201 print qq! Other destination: <INPUT TYPE="text" NAME="dst" VALUE="$dst">!;
202 %>
203
204 <SCRIPT>
205 if (document.getElementById) {
206     document.write("</DIV>");
207 }
208 </SCRIPT>
209
210 <CENTER><INPUT TYPE="submit" VALUE="Submit"></CENTER>
211 </FORM>
212
213 <TAG onLoad="
214     if (document.getElementById) {
215       document.getElementById('dother').style.visibility = '<%= $dstsvc ? 'hidden' : 'visible' %>';
216       document.getElementById('dlabel').style.visibility = '<%= $dstsvc ? 'hidden' : 'visible' %>';
217     }
218 ">
219
220
221   </BODY>
222 </HTML>