32a5360d98999e4c992633b12c0cf16c1842eae3
[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 = ( grep { $_->cust_svc->svcpart == $svcpart } 
20                   qsearch( $svcdb, \%search )
21               )[0];
22   eidiot("$link_field not found!") unless $svc_x;
23   $svcnum = $svc_x->svcnum;
24 }
25
26 my $old = qsearchs('cust_svc',{'svcnum'=>$svcnum});
27 die "svcnum not found!" unless $old;
28 my $conf = new FS::Conf;
29 my($error, $new);
30 if ( $old->pkgnum && ! $conf->exists('legacy_link-steal') ) {
31   $error = "svcnum $svcnum already linked to package ". $old->pkgnum;
32 } else {
33   $new = new FS::cust_svc ({
34     'svcnum' => $svcnum,
35     'pkgnum' => $pkgnum,
36     'svcpart' => $svcpart,
37   });
38
39   $error = $new->replace($old);
40 }
41
42 unless ($error) {
43   #no errors, so let's view this customer.
44   my $custnum = $new->cust_pkg->custnum;
45   print $cgi->redirect(popurl(3). "view/cust_main.cgi?$custnum".
46                        "#cust_pkg$pkgnum" );
47 } else {
48 %>
49 <!-- mason kludge -->
50 <%
51   idiot($error);
52 }
53
54 %>