RT#27710: Credit voiding
[freeside.git] / httemplate / search / cust_credit_void.html
diff --git a/httemplate/search/cust_credit_void.html b/httemplate/search/cust_credit_void.html
new file mode 100755 (executable)
index 0000000..18731d1
--- /dev/null
@@ -0,0 +1,141 @@
+<& elements/search.html,
+                 'title'       => $title,
+                 'name'        => emt('credits'),
+                 'query'       => $sql_query,
+                 'count_query' => $count_query,
+                 'header'      => \@header,
+                 'fields'      => \@fields,
+                 'sort_fields' => \@sort_fields,
+                 'align' => $align,
+                 'links' => \@links,
+                 'color' => \@color,
+                 'style' => \@style,
+&>
+<%init>
+
+die "access denied"
+  unless $FS::CurrentUser::CurrentUser->access_right('Financial reports');
+
+my $money_char = FS::Conf->new->config('money_char') || '$';
+
+my $title = emt('Voided Credit Search Results');
+
+my $clink = sub {
+  my $cust_bill = shift;
+  $cust_bill->cust_main_custnum
+    ? [ "${p}view/cust_main.cgi?", 'custnum' ]
+    : '';
+};
+
+my %void_access_users;
+
+my (@header, @fields, @sort_fields, $align, @links, @color, @style);
+$align = '';
+
+#amount
+push @header, emt('Amount');
+push @fields, sub { $money_char .sprintf('%.2f', shift->amount) };
+push @sort_fields, 'amount';
+$align .= 'r';
+push @links, '';
+push @color, '';
+push @style, '';
+
+push @header, emt('Void Date'),
+              emt('Void By'),
+              emt('Void Reason'),
+              emt('Date'), 
+              emt('By'),
+              emt('Reason'),
+              FS::UI::Web::cust_header(),
+              ;
+push @fields, sub { time2str('%b %d %Y', shift->void_date ) },
+              'void_access_user_name',
+              'void_reason',
+              sub { time2str('%b %d %Y', shift->_date ) },
+              'otaker',
+              'reason',
+              \&FS::UI::Web::cust_fields,
+              ;
+push @sort_fields, 'void_date',
+                   'void_usernum',                #not ideal, but at least groups them together
+                   'void_reasonnum, void_reason', #ditto
+                   '_date',
+                   'usernum',                     #ditto
+                   'reasonnum, reason',           #ditto 
+                   FS::UI::Web::cust_sort_fields();
+$align .= 'rllrll'.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 = '';
+
+# note that cgi field is usernum, but we're actually searching void_usernum
+# because true laziness with tr-select-user in report_cust_credit_void.html
+if ( $cgi->param('usernum') =~ /^(\d+)$/ ) {
+  push @search, "cust_credit_void.void_usernum = $1";
+}
+
+if ( $cgi->param('agentnum') && $cgi->param('agentnum') =~ /^(\d+)$/ ) {
+  push @search, "agentnum = $1";
+  my $agent = qsearchs('agent', { 'agentnum' => $1 } );
+  die "unknown agentnum $1" unless $agent;
+  $title = $agent->agent. " $title";
+}
+
+my($beginning, $ending) = FS::UI::Web::parse_beginning_ending($cgi);
+push @search, "void_date >= $beginning ",
+              "void_date <= $ending";
+
+push @search, FS::UI::Web::parse_lt_gt($cgi, 'amount' );
+
+#here is the agent virtualization
+push @search, $FS::CurrentUser::CurrentUser->agentnums_sql(table=>'cust_main');
+
+my @select = (
+    'cust_credit_void.*',
+    'cust_main.custnum as cust_main_custnum',
+    FS::UI::Web::cust_sql_fields(),
+);
+
+my $where = 'WHERE '. join(' AND ', @search);
+
+my $count_query = 'SELECT COUNT(*), SUM(amount) ';
+$count_query .= 'FROM cust_credit_void'. 
+                  $addl_from. FS::UI::Web::join_cust_main('cust_credit_void').
+                  $where;
+
+my $sql_query   = {
+  'table'     => 'cust_credit_void',
+  'select'    => join(', ',@select),
+  'hashref'   => {},
+  'extra_sql' => $where,
+  'addl_from' => $addl_from. FS::UI::Web::join_cust_main('cust_credit_void')
+};
+
+</%init>