4 unless $FS::CurrentUser::CurrentUser->access_right('Post payment batch');
6 my $param = $cgi->Vars;
7 warn Dumper($param) if $DEBUG;
9 #my $paybatch = $param->{'paybatch'};
10 my $paybatch = time2str('webbatch-%Y/%m/%d-%T'. "-$$-". rand() * 2**32, time);
14 #while ( exists($param->{"custnum$row"}) ) {
15 my @invrows = grep(/^invnum\d+\.\d+$/, keys %$param);
16 foreach my $row ( map /^custnum(\d+)$/, keys %$param ) {
17 my $custnum = $param->{"custnum$row"};
19 if ( $custnum =~ /^(\d+)$/ and $1 <= 2147483647 ) {
20 $cust_main = qsearchs({
21 'table' => 'cust_main',
22 'hashref' => { 'custnum' => $1 },
23 'extra_sql' => ' AND '. $FS::CurrentUser::CurrentUser->agentnums_sql,
26 if ( length($custnum) and !$cust_main ) { # not found, try agent_custid
27 $cust_main = qsearchs({
28 'table' => 'cust_main',
29 'hashref' => { 'agent_custid' => $custnum },
30 'extra_sql' => ' AND '. $FS::CurrentUser::CurrentUser->agentnums_sql,
33 $custnum = $cust_main->custnum if $cust_main;
34 # if !$cust_main, then this will throw an error on batch_insert
36 my $cust_pay = new FS::cust_pay {
37 'custnum' => $custnum,
38 'paid' => $param->{"paid$row"},
40 'payinfo' => $param->{"payinfo$row"},
41 '_date' => $param->{"_date$row"},
42 'discount_term' => $param->{"discount_term$row"},
43 'paybatch' => $paybatch,
44 'no_auto_apply' => exists($param->{"no_auto_apply$row"}) ? 'Y' : '',
46 if $param->{"custnum$row"}
47 || $param->{"paid$row"}
48 || $param->{"payinfo$row"};
52 # payment applications, if any
53 my @cust_bill_pay = ();
54 foreach my $app ( sort {$a <=> $b} map /^invnum$row\.(\d+)$/, @invrows ) {
55 # for ( my $app = 0; exists($param->{"invnum$row.$app"}); $app++ ) {
56 next if !$param->{"invnum$row.$app"};
57 push @cust_bill_pay, new FS::cust_bill_pay {
58 'invnum' => $param->{"invnum$row.$app"},
59 'amount' => $param->{"amount$row.$app"}
62 $cust_pay->set('apply_to', \@cust_bill_pay) if scalar(@cust_bill_pay) > 0;
64 push @cust_pay, $cust_pay;
68 my @errors = FS::cust_pay->batch_insert(@cust_pay);
69 my $num_errors = scalar(grep $_, @errors);
71 % if ( $num_errors ) {
73 % $cgi->param('error', "$num_errors error". ($num_errors>1 ? 's' : '').
74 % ' - Batch not processed, correct and resubmit'
78 % $cgi->param('error'. $erow++, shift @errors) while @errors;
80 % my $query = $m->scomp('/elements/create_uri_query');
82 <% $cgi->redirect($p."batch-cust_pay.html?$query")
88 <% $cgi->redirect(popurl(3). "search/cust_pay.html?magic=paybatch;paybatch=$paybatch") %>