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