-<% include( 'elements/search.html',
+<& elements/search.html,
'title' => $title,
- 'name' => 'credits',
+ 'name' => emt('credits'),
'query' => $sql_query,
'count_query' => $count_query,
'count_addl' => \@count_addl,
- #'redirect' => $link,
'header' => \@header,
'fields' => \@fields,
+ 'sort_fields' => \@sort_fields,
'align' => $align,
'links' => \@links,
'color' => \@color,
'style' => \@style,
- )
-%>
+&>
<%init>
die "access denied"
my $money_char = FS::Conf->new->config('money_char') || '$';
-my $title = 'Credit Search Results';
-#my( $count_query, $sql_query );
+my $title = emt('Credit Search Results');
my $unapplied = $cgi->param('unapplied');
-$title = "Unapplied $title" if $unapplied;
+$title = emt("Unapplied $title") if $unapplied;
my $clink = sub {
my $cust_bill = shift;
$cust_bill->cust_main_custnum
: '';
};
-my (@header, @fields, $align, @links, @color, @style);
+my (@header, @fields, @sort_fields, $align, @links, @color, @style);
$align = '';
#amount
-push @header, 'Amount';
+push @header, emt('Amount');
push @fields, sub { $money_char .sprintf('%.2f', shift->amount) };
+push @sort_fields, 'amount';
$align .= 'r';
push @links, '';
push @color, '';
# unapplied amount
if ($unapplied) {
- push @header, 'Unapplied';
+ push @header, emt('Unapplied');
push @fields, sub { $money_char .sprintf('%.2f', shift->unapplied_amount) };
+ push @sort_fields, '';
$align .= 'r';
push @links, '';
push @color, '';
push @style, '';
}
-push @header, 'Date',
- 'By',
- 'Reason',
- FS::UI::Web::cust_header(),
+push @header, emt('Date'),
+ emt('By'),
+ emt('Reason'),
;
push @fields, sub { time2str('%b %d %Y', shift->_date ) },
'otaker',
'reason',
- \&FS::UI::Web::cust_fields,
;
-$align .= 'rll'.FS::UI::Web::cust_aligns(),
+push @sort_fields, '_date', 'otaker', 'reason';
+$align .= 'rll';
push @links, '',
'',
'',
- ( map { $_ ne 'Cust. Status' ? $clink : '' }
- FS::UI::Web::cust_header()
- ),
;
push @color, '',
'',
'',
- FS::UI::Web::cust_colors(),
;
push @style, '',
'',
'',
- FS::UI::Web::cust_styles(),
;
+# insert customer email after 'Reason' if this is a commission report
+if ( $cgi->param('commission_salesnum') or $cgi->param('commission_agentnum') ) {
+ my $sub_customer_email = sub {
+ my $cust_credit = shift;
+ my $cust_event = $cust_credit->cust_event or return '';
+ my $cust_X = $cust_event->cust_X or return '';
+ my $cust_main = $cust_X->cust_main or return '';
+ my ($email) = $cust_main->invoicing_list_emailonly;
+ return encode_entities("<$email>") if length($email);
+ '';
+ };
+ push @header, '';
+ push @fields, $sub_customer_email;
+ push @sort_fields, '';
+ $align .= 'l';
+ push @links, '';
+ push @color, '';
+ push @style, '';
+}
+
+# cust fields
+push @header, FS::UI::Web::cust_header();
+push @fields, \&FS::UI::Web::cust_fields;
+push @sort_fields, FS::UI::Web::cust_sort_fields;
+$align .= FS::UI::Web::cust_aligns();
+push @links, map { $_ ne 'Cust. Status' ? $clink : '' }
+ FS::UI::Web::cust_header();
+push @color, FS::UI::Web::cust_colors();
+push @style, FS::UI::Web::cust_styles();
+
+
my @search = ();
+my $addl_from = '';
if ( $cgi->param('usernum') =~ /^(\d+)$/ ) {
push @search, "cust_credit.usernum = $1";
$title = $agent->agent. " $title";
}
+if ( $cgi->param('credbatch') =~ /^([\w\-\/\.\:]+)$/ ) {
+ push @search, "cust_credit.credbatch = '$1'";
+}
+
+# commission_salesnum
+if ( $cgi->param('commission_salesnum') =~ /^(\d+)$/ ) {
+ push @search, "commission_salesnum = $1";
+}
+
+# commission agentnum
+if ( $cgi->param('commission_agentnum') =~ /^(\d+)$/ ) {
+ push @search, "commission_agentnum = $1";
+}
+
+# commission_classnum
+if ( grep { $_ eq 'commission_classnum' } $cgi->param ) {
+ $cgi->param('commission_classnum') =~ /^(\d*)$/ or die 'guru meditation #13';
+ my $classnum = $1;
+ push @search, "part_pkg.classnum ". ( $classnum ? " = $classnum"
+ : " IS NULL " );
+
+ $addl_from .=
+ ' LEFT JOIN cust_pkg ON ( commission_pkgnum = cust_pkg.pkgnum ) '.
+ ' LEFT JOIN part_pkg USING ( pkgpart ) ';
+}
+
+if ( $cgi->param('refnum') && $cgi->param('refnum') =~ /^(\d+)$/ ) {
+ push @search, "refnum = $1";
+ my $part_referral = qsearchs('part_referral', { 'refnum' => $1 } );
+ die "unknown refnum $1" unless $part_referral;
+ $title = $part_referral->referral. " $title";
+}
+
+
+# cust_classnum (false laziness w/ elements/cust_main_dayranges.html, elements/cust_pay_or_refund.html, prepaid_income.html, cust_bill_pay.html, cust_bill_pkg.html, cust_bill_pkg_referral.html, unearned_detail.html, cust_credit_refund.html, cust_main::Search::search_sql)
+if ( grep { $_ eq 'cust_classnum' } $cgi->param ) {
+ my @classnums = grep /^\d*$/, $cgi->param('cust_classnum');
+ push @search, 'COALESCE( cust_main.classnum, 0) IN ( '.
+ join(',', map { $_ || '0' } @classnums ).
+ ' )'
+ if @classnums;
+}
+
if ( $unapplied ) {
push @search, FS::cust_credit->unapplied_sql . ' > 0';
}
push @search, FS::UI::Web::parse_lt_gt($cgi, 'amount' );
#here is the agent virtualization
-push @search, $FS::CurrentUser::CurrentUser->agentnums_sql;
+push @search, $FS::CurrentUser::CurrentUser->agentnums_sql(table=>'cust_main');
my @select = (
'cust_credit.*',
my $count_query = 'SELECT COUNT(*), SUM(amount) ';
$count_query .= ', SUM(' . FS::cust_credit->unapplied_sql . ') ' if $unapplied;
-$count_query .= 'FROM cust_credit LEFT JOIN cust_main USING ( custnum ) '.
+$count_query .= 'FROM cust_credit'.
+ $addl_from. FS::UI::Web::join_cust_main('cust_credit').
$where;
my @count_addl = ( $money_char.'%.2f total credited (gross)' );
'select' => join(', ',@select),
'hashref' => {},
'extra_sql' => $where,
- 'addl_from' => 'LEFT JOIN cust_main USING ( custnum )',
+ 'addl_from' => $addl_from. FS::UI::Web::join_cust_main('cust_credit')
};
</%init>