better error message for missing tables
[freeside.git] / httemplate / misc / catchall.cgi
1 <!-- mason kludge -->
2 <%
3
4 my $conf = new FS::Conf;
5
6 my($svc_domain, $svcnum, $pkgnum, $svcpart, $part_svc);
7 if ( $cgi->param('error') ) {
8   $svc_domain = new FS::svc_domain ( {
9     map { $_, scalar($cgi->param($_)) } fields('svc_domain')
10   } );
11   $svcnum = $svc_domain->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   my($query) = $cgi->keywords;
18   if ( $query =~ /^(\d+)$/ ) { #editing
19     $svcnum=$1;
20     $svc_domain=qsearchs('svc_domain',{'svcnum'=>$svcnum})
21       or die "Unknown (svc_domain) svcnum!";
22
23     my($cust_svc)=qsearchs('cust_svc',{'svcnum'=>$svcnum})
24       or die "Unknown (cust_svc) svcnum!";
25
26     $pkgnum=$cust_svc->pkgnum;
27     $svcpart=$cust_svc->svcpart;
28   
29     $part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart});
30     die "No part_svc entry!" unless $part_svc;
31
32   } else { 
33
34     die "Invalid (svc_domain) svcnum!";
35
36   }
37 }
38
39 my %email;
40 if ($pkgnum) {
41
42   #find all possible user svcnums (and emails)
43
44   #starting with that currently attached
45   if ($svc_domain->catchall) {
46     my($svc_acct)=qsearchs('svc_acct',{'svcnum'=>$svc_domain->catchall});
47     $email{$svc_domain->catchall} = $svc_acct->email;
48   }
49
50   #and including the rest for this customer
51   my($u_part_svc,@u_acct_svcparts);
52   foreach $u_part_svc ( qsearch('part_svc',{'svcdb'=>'svc_acct'}) ) {
53     push @u_acct_svcparts,$u_part_svc->getfield('svcpart');
54   }
55
56   my($cust_pkg)=qsearchs('cust_pkg',{'pkgnum'=>$pkgnum});
57   my($custnum)=$cust_pkg->getfield('custnum');
58   my($i_cust_pkg);
59   foreach $i_cust_pkg ( qsearch('cust_pkg',{'custnum'=>$custnum}) ) {
60     my($cust_pkgnum)=$i_cust_pkg->getfield('pkgnum');
61     my($acct_svcpart);
62     foreach $acct_svcpart (@u_acct_svcparts) {   #now find the corresponding 
63                                               #record(s) in cust_svc ( for this
64                                               #pkgnum ! )
65       my($i_cust_svc);
66       foreach $i_cust_svc ( qsearch('cust_svc',{'pkgnum'=>$cust_pkgnum,'svcpart'=>$acct_svcpart}) ) {
67         my($svc_acct)=qsearchs('svc_acct',{'svcnum'=>$i_cust_svc->getfield('svcnum')});
68         $email{$svc_acct->getfield('svcnum')}=$svc_acct->email;
69       }  
70     }
71   }
72
73 } else {
74
75   my($svc_acct)=qsearchs('svc_acct',{'svcnum'=>$svc_domain->catchall});
76   $email{$svc_domain->catchall} = $svc_acct->email;
77 }
78
79 # add an absence of a catchall
80 $email{''} = "(none)";
81
82 my $p1 = popurl(1);
83 print header("Domain Catchall Edit", '');
84
85 print qq!<FONT SIZE="+1" COLOR="#ff0000">Error: !, $cgi->param('error'),
86       "</FONT>"
87   if $cgi->param('error');
88
89 print qq!<FORM ACTION="${p1}process/catchall.cgi" METHOD=POST>!;
90
91 #display
92
93         #formatting
94         print "<PRE>";
95
96 #svcnum
97 print qq!<INPUT TYPE="hidden" NAME="svcnum" VALUE="$svcnum">!;
98 print qq!Service #<FONT SIZE=+1><B>!, $svcnum ? $svcnum : " (NEW)", "</B></FONT>";
99
100 #pkgnum
101 print qq!<INPUT TYPE="hidden" NAME="pkgnum" VALUE="$pkgnum">!;
102  
103 #svcpart
104 print qq!<INPUT TYPE="hidden" NAME="svcpart" VALUE="$svcpart">!;
105
106 my($domain,$catchall)=(
107   $svc_domain->domain,
108   $svc_domain->catchall,
109 );
110
111 print qq!<INPUT TYPE="hidden" NAME="domain" VALUE="$domain">!;
112
113 #catchall
114 print qq!\n\nMail to <I>(anything)</I>@<B>$domain</B> forwards to <SELECT NAME="catchall" SIZE=1>!;
115 foreach $_ (keys %email) {
116   print "<OPTION", $_ eq $catchall ? " SELECTED" : "",
117         qq! VALUE="$_">$email{$_}!;
118 }
119 print "</SELECT>";
120
121         #formatting
122         print "</PRE>\n";
123
124 print qq!<CENTER><INPUT TYPE="submit" VALUE="Submit"></CENTER>!;
125
126 print <<END;
127
128     </FORM>
129   </BODY>
130 </HTML>
131 END
132
133 %>