summaryrefslogtreecommitdiff
path: root/httemplate/misc/process/batch-cust_pay.cgi
blob: 1105af943b39c4f2895141e02616a42b6c480d92 (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
<%init>
my $DEBUG = 0;
die "access denied"
  unless $FS::CurrentUser::CurrentUser->access_right('Post payment batch');

my $param = $cgi->Vars;
warn Dumper($param) if $DEBUG;

#my $paybatch = $param->{'paybatch'};
my $paybatch = time2str('webbatch-%Y/%m/%d-%T'. "-$$-". rand() * 2**32, time);

my @cust_pay = ();
#my $row = 0;
#while ( exists($param->{"custnum$row"}) ) {
for ( my $row = 0; exists($param->{"custnum$row"}); $row++ ) {
  my $custnum = $param->{"custnum$row"};
  my $cust_main;
  if ( $custnum =~ /^(\d+)$/ and $1 <= 2147483647 ) {
    $cust_main = qsearchs({ 
      'table'     => 'cust_main',
      'hashref'   => { 'custnum' => $1 },
      'extra_sql' => ' AND '. $FS::CurrentUser::CurrentUser->agentnums_sql,
    });
  }
  if ( length($custnum) and !$cust_main ) { # not found, try agent_custid
    $cust_main = qsearchs({ 
      'table'     => 'cust_main',
      'hashref'   => { 'agent_custid' => $custnum },
      'extra_sql' => ' AND '. $FS::CurrentUser::CurrentUser->agentnums_sql,
    });
  }
  $custnum = $cust_main->custnum if $cust_main;
  # if !$cust_main, then this will throw an error on batch_insert

  my $cust_pay = new FS::cust_pay {
                    'custnum'        => $custnum,
                    'paid'           => $param->{"paid$row"},
                    'payby'          => 'BILL',
                    'payinfo'        => $param->{"payinfo$row"},
                    'discount_term'  => $param->{"discount_term$row"},
                    'paybatch'       => $paybatch,
                  }
    if    $param->{"custnum$row"}
       || $param->{"paid$row"}
       || $param->{"payinfo$row"};
  next if !$cust_pay;
  #$row++;

  # payment applications, if any
  my @cust_bill_pay = ();
  for ( my $app = 0; exists($param->{"invnum$row.$app"}); $app++ ) {
    next if !$param->{"invnum$row.$app"};
    push @cust_bill_pay, new FS::cust_bill_pay {
                            'invnum'  => $param->{"invnum$row.$app"},
                            'amount'  => $param->{"amount$row.$app"}
                          };
  }
  $cust_pay->set('apply_to', \@cust_bill_pay) if scalar(@cust_bill_pay) > 0;

  push @cust_pay, $cust_pay;

}

my @errors = FS::cust_pay->batch_insert(@cust_pay);
my $num_errors = scalar(grep $_, @errors);
</%init>
%  if ( $num_errors ) {
%
%    $cgi->param('error', "$num_errors error". ($num_errors>1 ? 's' : '').
%                         ' - Batch not processed, correct and resubmit'
%               );
%
%    my $erow=0;
%    $cgi->param('error'. $erow++, shift @errors) while @errors;
%    
%    my $query = $m->scomp('/elements/create_uri_query');
%
<% $cgi->redirect($p."batch-cust_pay.html?$query")

  %>
% } else {
%
%    
<% $cgi->redirect(popurl(3). "search/cust_pay.html?magic=paybatch;paybatch=$paybatch") %>
% }