ACLs
[freeside.git] / httemplate / misc / process / link.cgi
1 %unless ($error) {
2 %  #no errors, so let's view this customer.
3 %  my $custnum = $new->cust_pkg->custnum;
4 <% $cgi->redirect(popurl(3). "view/cust_main.cgi?<%$custnum%>#cust_pkg<%$pkgnum%>" ) %>
5 %} else {
6 % errorpage($error);
7 %}
8 <%init>
9
10 die "access denied"
11   unless $FS::CurrentUser::CurrentUser->access_right('View/link unlinked services');
12
13 my $DEBUG = 0;
14
15 $cgi->param('pkgnum') =~ /^(\d+)$/;
16 my $pkgnum = $1;
17 $cgi->param('svcpart') =~ /^(\d+)$/;
18 my $svcpart = $1;
19 $cgi->param('svcnum') =~ /^(\d*)$/;
20 my $svcnum = $1;
21
22 unless ( $svcnum ) {
23   my $part_svc = qsearchs('part_svc',{'svcpart'=>$svcpart});
24   my $svcdb = $part_svc->getfield('svcdb');
25   $cgi->param('link_field') =~ /^(\w+)$/;
26   my $link_field = $1;
27   my %search = ( $link_field => $cgi->param('link_value') );
28   if ( $cgi->param('link_field2') =~ /^(\w+)$/ ) {
29     $search{$1} = $cgi->param('link_value2');
30   }
31
32   my @svc_x = ( sort { ($a->cust_svc->pkgnum > 0) <=> ($b->cust_svc->pkgnum > 0)
33                        or ($b->cust_svc->svcpart == $svcpart)
34                             <=> ($a->cust_svc->svcpart == $svcpart)
35                      }
36                      qsearch( $svcdb, \%search )
37               );
38
39   if ( $DEBUG ) {
40     warn scalar(@svc_x). " candidate accounts found for linking ".
41          "(svcpart $svcpart):\n";
42     foreach my $svc_x ( @svc_x ) {
43       warn "  ". $svc_x->email.
44            " (svcnum ". $svc_x->svcnum. ",".
45            " pkgnum ".  $svc_x->cust_svc->pkgnum. ",".
46            " svcpart ". $svc_x->cust_svc->svcpart. ")\n";
47     }
48   }
49
50   my $svc_x = $svc_x[0];
51
52   errorpage("$link_field not found!") unless $svc_x;
53
54   $svcnum = $svc_x->svcnum;
55
56 }
57
58 my $old = qsearchs('cust_svc',{'svcnum'=>$svcnum});
59 die "svcnum not found!" unless $old;
60 my $conf = new FS::Conf;
61 my($error, $new);
62 if ( $old->pkgnum && ! $conf->exists('legacy_link-steal') ) {
63   $error = "svcnum $svcnum already linked to package ". $old->pkgnum;
64 } else {
65   $new = new FS::cust_svc { $old->hash };
66   $new->pkgnum($pkgnum);
67   $new->svcpart($svcpart);
68
69   $error = $new->replace($old);
70 }
71
72 </%init>