summaryrefslogtreecommitdiff
path: root/httemplate/edit/process/qual.cgi
blob: 5a4f68be3580fc258cd3c01efa59b3aa463c94a2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
%if ($error) {
%  $cgi->param('error', $error);
%  $dbh->rollback if $oldAutoCommit;
<% $cgi->redirect(popurl(3). 'misc/qual.html?'. $cgi->query_string ) %>
%} else {
%  $dbh->commit or die $dbh->errstr if $oldAutoCommit;
<% header('Qualification entered') %>
  <SCRIPT TYPE="text/javascript">
    window.top.location = '<% popurl(3). "view/qual.cgi?qualnum=$qualnum" %>';
  </SCRIPT>

  </BODY></HTML>
%}
<%init>

my $curuser = $FS::CurrentUser::CurrentUser;

die "access denied"
  unless $curuser->access_right('Qualify service');

# copied from misc/qual.html :(
$cgi->param('custnum') =~ /^(\d+)$/;
my $custnum = $1;
$cgi->param('prospectnum') =~ /^(\d+)$/;
my $prospectnum = $1;
my $cust_or_prospect = $custnum ? "cust" : "prospect";
my $table = $cust_or_prospect . "_main";
my $custnum_or_prospectnum = $custnum ? $custnum : $prospectnum;
my $cust_main_or_prospect_main = qsearchs({
  'table'     => $table,
  'hashref'   => { $cust_or_prospect."num" => $custnum_or_prospectnum },
  'extra_sql' => ' AND '. $FS::CurrentUser::CurrentUser->agentnums_sql,
});
die "neither prospect nor customer specified or found" 
    unless $cust_main_or_prospect_main;

$cgi->param('exportnum') =~ /^(\d+)$/ or die 'illegal exportnum';
my $exportnum = $1;

$cgi->param('phonenum') =~ /^(\d*)$/ or die 'illegal phonenum';
my $phonenum = $1;

$cgi->param('locationnum') =~ /^(\-?\d*)$/
  or die 'illegal locationnum '. $cgi->param('locationnum');
my $locationnum = $1;

my $oldAutoCommit = $FS::UID::AutoCommit;
local $FS::UID::AutoCommit = 0;
my $dbh = dbh;
my $error = '';
my $cust_location;
if ( $locationnum == -1 ) { # adding a new one
  my %location_hash = map { $_ => scalar($cgi->param($_)) }
	qw( address1 address2 city county state zip country geocode );
  $location_hash{$cust_or_prospect."num"} = $custnum_or_prospectnum;
  $location_hash{location_type} = $cgi->param('location_type') 
    if $cgi->param('location_type');
  $location_hash{location_number} = $cgi->param('location_number') 
    if $cgi->param('location_number');
  $location_hash{location_kind} = $cgi->param('location_kind') 
    if $cgi->param('location_kind');
  $cust_location = new FS::cust_location ( { %location_hash } );
  $error = $cust_location->insert;
  die "Unable to insert cust_location: $error" if $error;
}
elsif ( $locationnum eq '' ) { # default service location
    if ( $custnum ) { 
	  $cust_location = new FS::cust_location ( {
		$cust_main_or_prospect_main->location_hash,
		custnum => $custnum,
	  } );
    } elsif ( $prospectnum ) {
	die "a location must be specified explicitly for prospects";
    }
}
elsif ( $locationnum != -2 ) { # -2 = address not required for qual
  $cust_location = qsearchs('cust_location', { 'locationnum' => $locationnum })
    or die 'Invalid locationnum'; 
}

my $export;
if ( $exportnum > 0 ) {
 $export = qsearchs( 'part_export', { 'exportnum' => $exportnum } )
    or die 'Invalid exportnum';
}

die "Nothing to qualify - neither TN nor address specified" 
    unless ( defined $cust_location || $phonenum ne '' );

my $qual;
if ( $locationnum != -2 && $cust_location->locationnum > 0 ) {
    $qual = new FS::qual( { locationnum => $cust_location->locationnum } );
}
else { # a cust_main default service address *OR* address not required
    $qual = new FS::qual( { $cust_or_prospect."num" => $custnum_or_prospectnum } );
}
$qual->phonenum($phonenum) if $phonenum ne '';
$qual->status('N');

if ( $export ) {
    $qual->exportnum($export->exportnum);
    my $qres = $export->qual($qual);
    $error = "Qualification error: $qres" unless ref($qres);
    unless ( $error ) {
	$qual->status($qres->{'status'}) if $qres->{'status'};
	$qual->vendor_qual_id($qres->{'vendor_qual_id'}) 
	    if $qres->{'vendor_qual_id'};
	$error = $qual->insert($qres->{'options'}) if ref($qres->{'options'});
    }
}

unless ( $error || $qual->qualnum ) {
    $error = $qual->insert;
}

my $qualnum;
unless ( $error ) {
    if($qual->qualnum) {
	$qualnum = $qual->qualnum;
    }
    else {
	$error = "Unable to save qualification";
    }
}

</%init>