summaryrefslogtreecommitdiff
path: root/httemplate/search/elements/cust_pay_or_refund.html
diff options
context:
space:
mode:
Diffstat (limited to 'httemplate/search/elements/cust_pay_or_refund.html')
-rwxr-xr-xhttemplate/search/elements/cust_pay_or_refund.html456
1 files changed, 0 insertions, 456 deletions
diff --git a/httemplate/search/elements/cust_pay_or_refund.html b/httemplate/search/elements/cust_pay_or_refund.html
deleted file mode 100755
index fccb9ee..0000000
--- a/httemplate/search/elements/cust_pay_or_refund.html
+++ /dev/null
@@ -1,456 +0,0 @@
-<%doc>
-
-Examples:
-
- include( 'elements/cust_pay_or_refund.html',
- 'thing' => 'pay',
- 'amount_field' => 'paid',
- 'name_singular' => 'payment',
- 'name_verb' => 'paid',
- )
-
- include( 'elements/cust_pay_or_refund.html',
- 'thing' => 'refund',
- 'amount_field' => 'refund',
- 'name_singular' => 'refund',
- 'name_verb' => 'refunded',
- )
-
- include( 'elements/cust_pay_or_refund.html',
- 'thing' => 'pay_pending',
- 'amount_field' => 'paid',
- 'name_singular' => 'pending payment',
- 'name_verb' => 'pending',
- 'disable_link' => 1,
- 'disable_by' => 1,
- 'html_init' => '',
- 'addl_header' => [],
- 'addl_fields' => [],
- 'redirect_empty' => $redirect_empty,
- )
-
- include( 'elements/cust_pay_or_refund.html',
- 'table' => 'h_cust_pay',
- 'amount_field' => 'paid',
- 'name_singular' => 'payment',
- 'name_verb' => 'paid',
- 'pre_header' => [ 'Transaction', 'By' ],
- 'pre_fields' => [ 'history_action', 'history_user' ],
- )
-
-</%doc>
-<% include( 'search.html',
- 'title' => $title,
- 'name_singular' => $name_singular,
- 'query' => $sql_query,
- 'count_query' => $count_query,
- 'count_addl' => \@count_addl,
- 'redirect_empty' => $opt{'redirect_empty'},
- 'header' => \@header,
- 'fields' => \@fields,
- 'sort_fields' => \@sort_fields,
- 'align' => $align,
- 'links' => \@links,
- 'color' => \@color,
- 'style' => \@style,
- )
-%>
-<%init>
-
-my %opt = @_;
-
-my $curuser = $FS::CurrentUser::CurrentUser;
-
-die "access denied"
- unless $curuser->access_right('Financial reports');
-
-my $table = $opt{'table'} || 'cust_'.$opt{'thing'};
-
-my $amount_field = $opt{'amount_field'};
-my $name_singular = $opt{'name_singular'};
-
-my $unapplied = $cgi->param('unapplied');
-my $title = '';
-$title = 'Unapplied ' if $unapplied;
-$title .= "\u$name_singular Search Results";
-
-my $link = '';
-if ( ( $curuser->access_right('View invoices') #XXX for now
- || $curuser->access_right('View customer payments')
- )
- && ! $opt{'disable_link'}
- )
-{
-
- my $key;
- my $q = '';
- if ( $table eq 'cust_pay_void' ) {
- $key = 'paynum';
- $q .= 'void=1;';
- } elsif ( $table eq /^cust_(\w+)$/ ) {
- $key = $1.'num';
- }
-
- if ( $key ) {
- $q .= "$key=";
- $link = [ "${p}view/$table.html?$q", $key ]
- }
-}
-
-my $cust_link = sub {
- my $cust_thing = shift;
- $cust_thing->cust_main_custnum
- ? [ "${p}view/cust_main.cgi?", 'custnum' ]
- : '';
-};
-
-# only valid for $table == 'cust_pay' atm
-my $tax_names = '';
-if ( $cgi->param('tax_names') ) {
- if ( dbh->{Driver}->{Name} eq 'Pg' ) {
-
- $tax_names = "
- array_to_string(
- array(
- SELECT itemdesc
- FROM cust_bill_pay
- LEFT JOIN cust_bill_pay_pkg USING ( billpaynum )
- LEFT JOIN cust_bill_pkg USING ( billpkgnum )
- WHERE cust_bill_pkg.pkgnum = 0
- AND cust_bill_pay.paynum = cust_pay.paynum
- ), '|'
- ) AS tax_names"
- ;
-
- } elsif ( dbh->{Driver}->{Name} =~ /^mysql/i ) {
-
- $tax_names = "GROUP_CONCAT(itemdesc SEPARATOR '|') AS tax_names";
-
- } else {
-
- warn "warning: unknown database type ". dbh->{Driver}->{Name}.
- "omitting tax name information from report.";
-
- }
-}
-
-my @header = ();
-my @fields = ();
-my @sort_fields = ();
-my $align = '';
-my @links = ();
-if ( $opt{'pre_header'} ) {
- push @header, @{ $opt{'pre_header'} };
- $align .= 'c' x scalar(@{ $opt{'pre_header'} });
- push @links, map '', @{ $opt{'pre_header'} };
- push @fields, @{ $opt{'pre_fields'} };
- push @sort_fields, @{ $opt{'pre_fields'} };
-}
-
-push @header, "\u$name_singular",
- 'Amount',
-;
-$align .= 'rr';
-push @links, '', '';
-push @fields, 'payby_payinfo_pretty',
- sub { sprintf('$%.2f', shift->$amount_field() ) },
-;
-push @sort_fields, '', $amount_field;
-
-if ( $unapplied ) {
- push @header, 'Unapplied';
- $align .= 'r';
- push @links, '';
- push @fields, sub { sprintf('$%.2f', shift->unapplied_amount) };
- push @sort_fields, '';
-}
-
-push @header, 'Date';
-$align .= 'r';
-push @links, '';
-push @fields, sub { time2str('%b %d %Y', shift->_date ) };
-push @sort_fields, '_date';
-
-unless ( $opt{'disable_by'} ) {
- push @header, 'By';
- $align .= 'c';
- push @links, '';
- push @fields, sub { my $o = shift->otaker;
- $o = 'auto billing' if $o eq 'fs_daily';
- $o = 'customer self-service' if $o eq 'fs_selfservice';
- $o;
- };
-}
-
-if ( $tax_names ) {
- push @header, ('Tax names', 'Tax province');
- $align .= 'cc';
- push @links, ('','');
- push @fields, sub { join (' + ', map { /^(.*?)(, \w\w)?$/; $1 }
- split('\|', shift->tax_names)
- );
- };
- push @fields, sub { join (' + ', map { if (/^(?:.*)(?:, )(\w\w)$/){ $1 }
- else { () }
- }
- split('\|', shift->tax_names)
- );
- };
-}
-
-push @header, FS::UI::Web::cust_header();
-$align .= FS::UI::Web::cust_aligns();
-push @links, map { $_ ne 'Cust. Status' ? $cust_link : '' }
- FS::UI::Web::cust_header();
-my @color = ( ( map '', @fields ), FS::UI::Web::cust_colors() );
-my @style = ( ( map '', @fields ), FS::UI::Web::cust_styles() );
-push @fields, \&FS::UI::Web::cust_fields;
-
-push @header, @{ $opt{'addl_header'} }
- if $opt{'addl_header'};
-push @fields, @{ $opt{'addl_fields'} }
- if $opt{'addl_fields'};
-
-my( $count_query, $sql_query, @count_addl );
-if ( $cgi->param('magic') ) {
-
- my @search = ();
- my @select = (
- "$table.*",
- FS::UI::Web::cust_sql_fields(),
- 'cust_main.custnum AS cust_main_custnum',
- );
- push @select, $tax_names if $tax_names;
-
- my $orderby;
- if ( $cgi->param('magic') eq '_date' ) {
-
- if ( $cgi->param('agentnum') && $cgi->param('agentnum') =~ /^(\d+)$/ ) {
- push @search, "agentnum = $1"; # $search{'agentnum'} = $1;
- my $agent = qsearchs('agent', { 'agentnum' => $1 } );
- die "unknown agentnum $1" unless $agent;
- $title = $agent->agent. " $title";
- }
-
- if ( $cgi->param('custnum') =~ /^(\d+)$/ ) {
- push @search, "custnum = $1";
- }
-
- if ( $cgi->param('payby') ) {
- $cgi->param('payby') =~
- /^(CARD|CHEK|BILL|PREP|CASH|WEST|MCRD)(-(VisaMC|Amex|Discover|Maestro))?$/
- or die "illegal payby ". $cgi->param('payby');
- push @search, "$table.payby = '$1'";
- if ( $3 ) {
-
- my $cardtype = $3;
-
- my $search;
- if ( $cardtype eq 'VisaMC' ) {
- #avoid posix regexes for portability
- $search =
- " ( ( substring($table.payinfo from 1 for 1) = '4' ".
- " AND substring($table.payinfo from 1 for 4) != '4936' ".
- " AND substring($table.payinfo from 1 for 6) ".
- " NOT SIMILAR TO '49030[2-9]' ".
- " AND substring($table.payinfo from 1 for 6) ".
- " NOT SIMILAR TO '49033[5-9]' ".
- " AND substring($table.payinfo from 1 for 6) ".
- " NOT SIMILAR TO '49110[1-2]' ".
- " AND substring($table.payinfo from 1 for 6) ".
- " NOT SIMILAR TO '49117[4-9]' ".
- " AND substring($table.payinfo from 1 for 6) ".
- " NOT SIMILAR TO '49118[1-2]' ".
- " )".
- " OR substring($table.payinfo from 1 for 2) = '51' ".
- " OR substring($table.payinfo from 1 for 2) = '52' ".
- " OR substring($table.payinfo from 1 for 2) = '53' ".
- " OR substring($table.payinfo from 1 for 2) = '54' ".
- " OR substring($table.payinfo from 1 for 2) = '54' ".
- " OR substring($table.payinfo from 1 for 2) = '55' ".
- " OR substring($table.payinfo from 1 for 2) = '36' ". #Diner's int'l processed as Visa/MC inside US
- " ) ";
- } elsif ( $cardtype eq 'Amex' ) {
- $search =
- " ( substring($table.payinfo from 1 for 2 ) = '34' ".
- " OR substring($table.payinfo from 1 for 2 ) = '37' ".
- " ) ";
- } elsif ( $cardtype eq 'Discover' ) {
- $search =
- " ( substring($table.payinfo from 1 for 4 ) = '6011' ".
- " OR substring($table.payinfo from 1 for 2 ) = '65' ".
- " OR substring($table.payinfo from 1 for 3 ) = '622' ". #China Union Pay processed as Discover outside CN
- " ) ";
- } elsif ( $cardtype eq 'Maestro' ) {
- $search =
- " ( substring($table.payinfo from 1 for 2 ) = '63' ".
- " OR substring($table.payinfo from 1 for 2 ) = '67' ".
- " OR substring($table.payinfo from 1 for 6 ) = '564182' ".
- " OR substring($table.payinfo from 1 for 4 ) = '4936' ".
- " OR substring($table.payinfo from 1 for 6 ) ".
- " SIMILAR TO '49030[2-9]' ".
- " OR substring($table.payinfo from 1 for 6 ) ".
- " SIMILAR TO '49033[5-9]' ".
- " OR substring($table.payinfo from 1 for 6 ) ".
- " SIMILAR TO '49110[1-2]' ".
- " OR substring($table.payinfo from 1 for 6 ) ".
- " SIMILAR TO '49117[4-9]' ".
- " OR substring($table.payinfo from 1 for 6 ) ".
- " SIMILAR TO '49118[1-2]' ".
- " ) ";
- } else {
- die "unknown card type $cardtype";
- }
-
- my $masksearch = $search;
- $masksearch =~ s/$table\.payinfo/$table.paymask/gi;
-
- push @search,
- "( $search OR ( $table.paymask IS NOT NULL AND $masksearch ) )";
-
- }
- }
-
- if ( $cgi->param('payinfo') ) {
- $cgi->param('payinfo') =~ /^\s*(\d+)\s*$/
- or die "illegal payinfo ". $cgi->param('payinfo');
- push @search, "$table.payinfo = '$1'";
- }
-
- if ( $cgi->param('usernum') =~ /^(\d+)$/ ) {
- push @search, "$table.usernum = $1";
- }
-
- #for cust_pay_pending... statusNOT=done
- if ( $cgi->param('statusNOT') =~ /^(\w+)$/ ) {
- push @search, "status != '$1'";
- }
-
- my($beginning, $ending) = FS::UI::Web::parse_beginning_ending($cgi);
- push @search, "_date >= $beginning ",
- "_date <= $ending";
-
- if ( $table eq 'cust_pay_void' ) {
- my($v_beginning, $v_ending) =
- FS::UI::Web::parse_beginning_ending($cgi, 'void');
- push @search, "void_date >= $v_beginning ",
- "void_date <= $v_ending";
- }
-
- push @search, FS::UI::Web::parse_lt_gt($cgi, $amount_field );
-
- $orderby = '_date';
-
- } elsif ( $cgi->param('magic') eq 'paybatch' ) {
-
- $cgi->param('paybatch') =~ /^([\w\/\:\-\.]+)$/
- or die "illegal paybatch: ". $cgi->param('paybatch');
-
- push @search, "paybatch = '$1'";
-
- $orderby = "LOWER(company || ' ' || last || ' ' || first )";
-
- } else {
- die "unknown search magic: ". $cgi->param('magic');
- }
-
- #unapplied payment/refund
- if ( $unapplied ) {
- push @select, '(' . "FS::$table"->unapplied_sql . ') AS unapplied_amount';
- push @search, "FS::$table"->unapplied_sql . ' > 0';
-
- }
-
- #for the history search
- if ( $cgi->param('history_action') =~ /^([\w,]+)$/ ) {
- my @history_action = split(/,/, $1);
- push @search, 'history_action IN ('.
- join(',', map "'$_'", @history_action ). ')';
- }
-
- if ( $cgi->param('history_date_beginning')
- || $cgi->param('history_date_ending') ) {
- my($h_beginning, $h_ending) =
- FS::UI::Web::parse_beginning_ending($cgi, 'history_date');
- push @search, "history_date >= $h_beginning ",
- "history_date <= $h_ending";
- }
-
- #here is the agent virtualization
- push @search, $curuser->agentnums_sql;
-
- my $addl_from = ' LEFT JOIN cust_main USING ( custnum ) ';
- my $group_by = '';
-
- if ( $cgi->param('tax_names') ) {
- if ( dbh->{Driver}->{Name} eq 'Pg' ) {
-
- 0;#twiddle thumbs
-
- } elsif ( dbh->{Driver}->{Name} =~ /^mysql/i ) {
-
- $addl_from .= "LEFT JOIN cust_bill_pay USING ( paynum )
- LEFT JOIN cust_bill_pay_pkg USING ( billpaynum )
- LEFT JOIN cust_bill_pkg USING ( billpkgnum ) AS tax_names";
- $group_by .= "GROUP BY $table.*,cust_main_custnum,".
- FS::UI::Web::cust_sql_fields();
- push @search,
- "( cust_bill_pkg.pkgnum = 0 OR cust_bill_pkg.pkgnum is NULL )";
-
- } else {
-
- warn "warning: unknown database type ". dbh->{Driver}->{Name}.
- "omitting tax name information from report.";
-
- }
- }
-
- my $search = ' WHERE '. join(' AND ', @search);
-
- $count_query = "SELECT COUNT(*), SUM($amount_field) ";
- $count_query .= ', SUM(' . "FS::$table"->unapplied_sql . ') '
- if $unapplied;
- $count_query .= "FROM $table $addl_from".
- "$search $group_by";
-
- @count_addl = ( '$%.2f total '.$opt{name_verb} );
- push @count_addl, '$%.2f unapplied' if $unapplied;
-
- $sql_query = {
- 'table' => $table,
- 'select' => join(', ', @select),
- 'hashref' => {},
- 'extra_sql' => "$search $group_by",
- 'order_by' => "ORDER BY $orderby",
- 'addl_from' => $addl_from,
- };
-
-} else {
-
- #hmm... is this still used?
-
- $cgi->param('payinfo') =~ /^\s*(\d+)\s*$/ or die "illegal payinfo";
- my $payinfo = $1;
-
- $cgi->param('payby') =~ /^(\w+)$/ or die "illegal payby";
- my $payby = $1;
-
- $count_query = "SELECT COUNT(*), SUM($amount_field) FROM $table".
- " WHERE payinfo = '$payinfo' AND payby = '$payby'".
- " AND ". $curuser->agentnums_sql;
- @count_addl = ( '$%.2f total '.$opt{name_verb} );
-
- $sql_query = {
- 'table' => $table,
- 'hashref' => { 'payinfo' => $payinfo,
- 'payby' => $payby },
- 'extra_sql' => $curuser->agentnums_sql.
- " ORDER BY _date",
- };
-
-}
-
-# for consistency
-$title = join('',map {ucfirst} split(/\b/,$title));
-
-</%init>