[freeside-commits] branch master updated. 58f8f045141e56c38dd47bf7b9f33094236c0d0a

Mark Wells mark at 420.am
Tue May 20 22:52:26 PDT 2014


The branch, master has been updated
       via  58f8f045141e56c38dd47bf7b9f33094236c0d0a (commit)
      from  523a0d904238cd573e4ae6a4a12dfcfea37cd703 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 58f8f045141e56c38dd47bf7b9f33094236c0d0a
Author: Mark Wells <mark at freeside.biz>
Date:   Tue May 20 22:52:20 2014 -0700

    search voided invoices, missing files, #28684

diff --git a/httemplate/search/cust_bill_void.html b/httemplate/search/cust_bill_void.html
new file mode 100644
index 0000000..d99f759
--- /dev/null
+++ b/httemplate/search/cust_bill_void.html
@@ -0,0 +1,169 @@
+<& elements/search.html,
+                 'title'       => emt('Voided Invoice Search Results'),
+                 'name'        => 'voided invoices',
+                 'query'       => $sql_query,
+                 'count_query' => $count_query,
+                 'count_addl'  => $count_addl,
+                 'redirect'    => $link,
+                 'header'      => [ emt('Invoice #'),
+                                    emt('Amount'),
+                                    emt('Date'),
+                                    FS::UI::Web::cust_header(),
+                                    emt('Voided by'),
+                                    emt('Date'),
+                                    emt('Reason'),
+                                  ],
+                 'fields'      => [
+                   'display_invnum',
+                   sub { sprintf($money_char.'%.2f', shift->charged     ) },
+                   sub { time2str('%b %d %Y', shift->_date ) },
+                   \&FS::UI::Web::cust_fields,
+                   'username',
+                   sub { time2str('%b %d %Y', shift->void_date) },
+                   'reason',
+                 ],
+                 'sort_fields' => [
+                   'COALESCE( agent_invid, invnum )',
+                   'charged',
+                   '_date',
+                   FS::UI::Web::cust_sort_fields(),
+                   'username',
+                   'void_date',
+                   'reason',
+                 ],
+                 'align' => 'rrl'.FS::UI::Web::cust_aligns().'lll',
+                 'links' => [
+                   $link,
+                   $link,
+                   $link,
+                   ( map { $_ ne 'Cust. Status' ? $clink : '' }
+                         FS::UI::Web::cust_header()
+                   ),
+                   $link,
+                   $link,
+                 ],
+                 'color' => [ 
+                              '',
+                              '',
+                              '',
+                              FS::UI::Web::cust_colors(),
+                            ],
+                 'style' => [ 
+                              '',
+                              '',
+                              '',
+                              FS::UI::Web::cust_styles(),
+                            ],
+&>
+<%init>
+
+die "access denied"
+  unless $FS::CurrentUser::CurrentUser->access_right('List invoices');
+  # or something else?
+
+my $conf = new FS::Conf;
+my $money_char = $conf->config('money_char') || '$';
+
+my $addl_from =
+  ' LEFT JOIN access_user ON (cust_bill_void.void_usernum = access_user.usernum) '.
+   FS::UI::Web::join_cust_main('cust_bill_void');
+#here is the agent virtualization
+my $agentnums_sql = $FS::CurrentUser::CurrentUser->agentnums_sql;
+
+my( $count_query, $sql_query );
+my $count_addl = '';
+my %search;
+
+if ( $cgi->param('invnum') =~ /^\s*(FS-)?(\d+)\s*$/ ) {
+
+  my $invnum_or_invid = "( invnum = $2 OR agent_invid = $2 )";
+  my $where = "WHERE $invnum_or_invid AND $agentnums_sql";
+  
+  $count_query = "SELECT COUNT(*) FROM cust_bill_void $addl_from $where";
+
+  $sql_query = {
+    'table'     => 'cust_bill_void',
+    'addl_from' => $addl_from,
+    'hashref'   => {},
+    'extra_sql' => $where,
+  };
+
+} else {
+
+  #some false laziness w/cust_bill::re_X
+  my $orderby = 'ORDER BY cust_bill_void._date';
+
+  if ( $cgi->param('agentnum') =~ /^(\d+)$/ ) {
+    $search{'agentnum'} = $1;
+  }
+
+  if ( $cgi->param('refnum') =~ /^(\d+)$/ ) {
+    $search{'refnum'} = $1;
+  }
+
+if ( grep { $_ eq 'cust_classnum' } $cgi->param ) {
+    $search{'cust_classnum'} = [ $cgi->param('cust_classnum') ];
+  }
+
+  if ( $cgi->param('custnum') =~ /^(\d+)$/ ) {
+    $search{'custnum'} = $1;
+  }
+
+  # begin/end/beginning/ending
+  my($beginning, $ending) = FS::UI::Web::parse_beginning_ending($cgi, '');
+  $search{'_date'} = [ $beginning, $ending ]
+    unless $beginning == 0 && $ending == 4294967295;
+
+  ($beginning, $ending) = FS::UI::Web::parse_beginning_ending($cgi, 'void_');
+  $search{'void_date'} = [ $beginning, $ending ]
+    unless $beginning == 0 && $ending == 4294967295;
+
+  if ( $cgi->param('invnum_min') =~ /^\s*(\d+)\s*$/ ) {
+    $search{'invnum_min'} = $1;
+  }
+  if ( $cgi->param('invnum_max') =~ /^\s*(\d+)\s*$/ ) {
+    $search{'invnum_max'} = $1;
+  }
+  #payby
+  if ( $cgi->param('payby') ) {
+    $search{'payby'} = [ $cgi->param('payby') ];
+  }
+
+  #amounts
+  $search{'charged'} = [ FS::UI::Web::parse_lt_gt($cgi, 'charged') ];
+
+  my $extra_sql = FS::cust_bill_void->search_sql_where( \%search );
+  $extra_sql = "WHERE $extra_sql" if $extra_sql;
+
+  unless ( $count_query ) {
+    $count_query = 'SELECT COUNT(*), SUM(charged)';
+    $count_addl = [ $money_char . '%.2f voided' ];
+  }
+  $count_query .=  " FROM cust_bill_void $addl_from $extra_sql";
+
+  $sql_query = {
+    'table'     => 'cust_bill_void',
+    'addl_from' => $addl_from,
+    'hashref'   => {},
+    'select'    => join(', ',
+                     'cust_bill_void.*',
+                     #( map "cust_main.$_", qw(custnum last first company) ),
+                     'cust_main.custnum as cust_main_custnum',
+                     FS::UI::Web::cust_sql_fields(),
+                     'access_user.username',
+                   ),
+    'extra_sql' => $extra_sql,
+    'order_by'  => $orderby,
+  };
+
+}
+my $link  = [ "${p}view/cust_bill_void.html?", 'invnum', ];
+my $clink = sub {
+  my $cust_bill = shift;
+  $cust_bill->cust_main_custnum
+    ? [ "${p}view/cust_main.cgi?", 'custnum' ]
+    : '';
+};
+
+# really don't want the ability to print/spool/email voided invoices
+</%init>
diff --git a/httemplate/search/report_cust_bill_void.html b/httemplate/search/report_cust_bill_void.html
new file mode 100644
index 0000000..cb13b78
--- /dev/null
+++ b/httemplate/search/report_cust_bill_void.html
@@ -0,0 +1,102 @@
+<& /elements/header.html, mt($title, @title_arg) &>
+
+<FORM ACTION="cust_bill_void.html" METHOD="GET">
+<INPUT TYPE="hidden" NAME="magic" VALUE="_date">
+<INPUT TYPE="hidden" NAME="custnum" VALUE="<% $custnum %>">
+
+% unless ( $custnum ) {
+
+  <TABLE BGCOLOR="#cccccc" CELLSPACING=0>
+
+    <TR>
+      <TH CLASS="background" COLSPAN=2 ALIGN="left">
+        <FONT SIZE="+1">Customer search options</FONT>
+      </TH>
+    </TR>
+
+  <& /elements/tr-select-agent.html,
+                 'curr_value'    => scalar( $cgi->param('agentnum') ),
+                 'label'         => emt('Agent'),
+                 'disable_empty' => 0,
+  &>
+
+  <& /elements/tr-select-cust_class.html,
+      label         => mt('Customer Class'),
+      field         => 'cust_classnum',
+      multiple      => 1,
+     'pre_options'  => [ '' => emt('(none)') ],
+     'all_selected' => 1,
+  &>
+
+%   if ( $cust_main ) {
+    <INPUT TYPE="hidden" NAME="payby" VALUE="<% $cust_main->payby %>">
+%   } else {
+    <& /elements/tr-select-payby.html,
+                  label   => emt('Payment method:'),
+                  payby_type   => 'cust',
+                  multiple     => 1,
+                  all_selected => 1,
+    &>
+% }
+
+  </TABLE>
+  <BR>
+
+% }
+
+  <TABLE BGCOLOR="#cccccc" CELLSPACING=0>
+
+    <TR>
+      <TH CLASS="background" COLSPAN=2 ALIGN="left">
+        <FONT SIZE="+1">Invoice search options</FONT>
+      </TH>
+    </TR>
+
+  <& /elements/tr-input-beginning_ending.html &>
+
+  <& /elements/tr-input-lessthan_greaterthan.html,
+                label   => emt('Charged'),
+                field   => 'charged',
+  &>
+
+  <& /elements/tablebreak-tr-title.html,
+      value => 'Void circumstances'
+  &>
+  <& /elements/tr-select-user.html,
+      field => 'void_usernum',
+      label => 'Voided by: ',
+  &>
+  <& /elements/tr-input-beginning_ending.html, prefix => 'void_' &>
+
+  </TABLE>
+<BR>
+<INPUT TYPE="submit" VALUE="<% mt('Get Report') |h %>">
+
+</FORM>
+
+<& /elements/footer.html &>
+<%init>
+
+die "access denied"
+  unless $FS::CurrentUser::CurrentUser->access_right('List invoices');
+
+my $conf = new FS::Conf;
+
+my $title = 'Voided Invoice Report';
+#false laziness w/report_cust_pkg.html
+my @title_arg = ();
+
+my $custnum = '';
+my $cust_main = '';
+if ( $cgi->param('custnum') =~ /^(\d+)$/ ) {
+  $custnum = $1;
+  $cust_main = qsearchs({
+    'table'     => 'cust_main', 
+    'hashref'   => { 'custnum' => $custnum },
+    'extra_sql' => ' AND '. $FS::CurrentUser::CurrentUser->agentnums_sql,
+  }) or die "unknown custnum $custnum";
+  $title .= ': [_1]';
+  push @title_arg, $cust_main->name;
+}
+
+</%init>

-----------------------------------------------------------------------

Summary of changes:
 httemplate/search/cust_bill_void.html              |  169 ++++++++++++++++++++
 ...t_cust_bill.html => report_cust_bill_void.html} |   57 ++------
 2 files changed, 179 insertions(+), 47 deletions(-)
 create mode 100644 httemplate/search/cust_bill_void.html
 copy httemplate/search/{report_cust_bill.html => report_cust_bill_void.html} (63%)




More information about the freeside-commits mailing list