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