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