[freeside-commits] freeside/httemplate/search cust_bill_pkg_discount.html, NONE, 1.1 report_cust_bill_pkg_discount.html, NONE, 1.1 report_cust_pkg_discount.html, NONE, 1.1 cust_pkg_discount.html, NONE, 1.1

Ivan,,, ivan at wavetail.420.am
Fri Feb 5 18:54:12 PST 2010


Update of /home/cvs/cvsroot/freeside/httemplate/search
In directory wavetail.420.am:/tmp/cvs-serv1107/httemplate/search

Added Files:
	cust_bill_pkg_discount.html report_cust_bill_pkg_discount.html 
	report_cust_pkg_discount.html cust_pkg_discount.html 
Log Message:
discount reporting, RT#6679

--- NEW FILE: cust_bill_pkg_discount.html ---
<% include( 'elements/search.html',
                 'title'       => 'Discounts',
                 'name'        => 'discounts',
                 'query'       => $query,
                 'count_query' => $count_query,
                 'count_addl'  => [ $money_char. '%.2f total', ],
                 'header'      => [
                   #'#',
                   'Discount',
                   'Amount',
                   'Months',
                   'Package',
                   'Invoice',
                   'Date',
                   FS::UI::Web::cust_header(),
                 ],
                 'fields'      => [
                   #'billpkgdiscountnum',
                   sub { $_[0]->cust_pkg_discount->discount->description },
                   sub { sprintf($money_char.'%.2f', shift->amount ) },
                   sub { my $m = shift->months;
                         $m =~ /\./ ? sprintf('%.2f', $m) : $m;
                       },
                   'pkg',#sub { $_[0]->cust_bill_pkg->cust_pkg->part_pkg->pkg },
                   'invnum',
                   sub { time2str('%b %d %Y', shift->_date ) },
                   \&FS::UI::Web::cust_fields,
                 ],
                 'links'       => [
                   #'',
                   '', #link to customer discount???
                   '',
                   '',
                   '',
                   $ilink,
                   $ilink,
                   ( map { $_ ne 'Cust. Status' ? $clink : '' }
                         FS::UI::Web::cust_header()
                   ),
                 ],
                 #'align' => 'rlrrrc'.FS::UI::Web::cust_aligns(),
                 'align' => 'lrrlrr'.FS::UI::Web::cust_aligns(),
                 'color' => [ 
                              #'',
                              '',
                              '',
                              '',
                              '',
                              '',
                              '',
                              FS::UI::Web::cust_colors(),
                            ],
                 'style' => [ 
                              #'',
                              '',
                              '',
                              '',
                              '',
                              '',
                              '',
                              FS::UI::Web::cust_styles(),
                            ],
           )
%>
<%init>

#a little false laziness below w/cust_bill_pkg.cgi

die "access denied"
  unless $FS::CurrentUser::CurrentUser->access_right('Financial reports');

my $conf = new FS::Conf;

#here is the agent virtualization
my $agentnums_sql =
  $FS::CurrentUser::CurrentUser->agentnums_sql( 'table' => 'cust_main' );

my @where = ( $agentnums_sql );

my($beginning, $ending) = FS::UI::Web::parse_beginning_ending($cgi);
push @where, "_date >= $beginning",
             "_date <= $ending";

if ( $cgi->param('agentnum') =~ /^(\d+)$/ ) {
  push @where, "cust_main.agentnum = $1";
}

# #classnum
# # not specified: all classes
# # 0: empty class
# # N: classnum
# my $use_override = $cgi->param('use_override');
# if ( $cgi->param('classnum') =~ /^(\d+)$/ ) {
#   my $comparison = '';
#   if ( $1 == 0 ) {
#     $comparison = "IS NULL";
#   } else {
#     $comparison = "= $1";
#   }
# 
#   if ( $use_override ) {
#     push @where, "(
#       part_pkg.classnum $comparison AND pkgpart_override IS NULL OR
#       override.classnum $comparison AND pkgpart_override IS NOT NULL
#     )";
#   } else {
#     push @where, "part_pkg.classnum $comparison";
#   }
# }

my $count_query = "SELECT COUNT(*), SUM(amount)";

my $join_cust =  '      JOIN cust_bill_pkg USING ( billpkgnum )
                        JOIN cust_bill USING ( invnum ) 
                   LEFT JOIN cust_main USING ( custnum ) ';

my $join_pkg = ' LEFT JOIN cust_pkg USING ( pkgnum )
                 LEFT JOIN part_pkg USING ( pkgpart ) ';
                 #LEFT JOIN part_pkg AS override
                 #  ON pkgpart_override = override.pkgpart ';

my $where = ' WHERE '. join(' AND ', @where);

$count_query .= " FROM cust_bill_pkg_discount $join_cust $join_pkg $where";

my @select = (
               'cust_bill_pkg_discount.*',
               #'cust_bill_pkg.*',
               'cust_bill.invnum',
               'cust_bill._date',
             );
push @select, 'part_pkg.pkg';
push @select, 'cust_main.custnum',
              FS::UI::Web::cust_sql_fields();

my $query = {
  'table'     => 'cust_bill_pkg_discount',
  'addl_from' => "$join_cust $join_pkg",
  'hashref'   => {},
  'select'    => join(', ', @select ),
  'extra_sql' => $where,
  'order_by'  => 'ORDER BY _date, billpkgdiscountnum',
};

my $ilink = [ "${p}view/cust_bill.cgi?", 'invnum' ];
my $clink = [ "${p}view/cust_main.cgi?", 'custnum' ];

my $conf = new FS::Conf;
my $money_char = $conf->config('money_char') || '$';

</%init>

--- NEW FILE: report_cust_pkg_discount.html ---
<% include('/elements/header.html', 'Package discount report' ) %>

<FORM ACTION="cust_pkg_discount.html" METHOD="GET">


<TABLE>

  <TR>
    <TD>Discount status</TD>
    <TD>
      <SELECT NAME="status">
        <OPTION VALUE="active">Active
        <OPTION VALUE="expired">Expired
        <OPTION VALUE="">(all)
      </SELECT>
    </TD>
  </TR>

  <% include( '/elements/tr-select-otaker.html',
                'label'   => 'Discounts by employee: ',
                'otakers' => \@otakers,
            )
  %>

  <% include( '/elements/tr-select-agent.html',
                 'curr_value'    => scalar( $cgi->param('agentnum') ),
                 'label'         => 'for agent: ',
                 'disable_empty' => 0,
             )
  %>

</TABLE>

<BR>
<INPUT TYPE="submit" VALUE="Get Report">

</FORM>

<% include('/elements/footer.html') %>
<%init>

die "access denied"
  unless $FS::CurrentUser::CurrentUser->access_right('Financial reports');

my $sth = dbh->prepare("SELECT DISTINCT otaker FROM cust_pkg_discount")
  or die dbh->errstr;
$sth->execute or die $sth->errstr;
my @otakers = map { $_->[0] } @{$sth->fetchall_arrayref};

</%init>

--- NEW FILE: report_cust_bill_pkg_discount.html ---
<% include('/elements/header.html', 'Discount report' ) %>

<FORM ACTION="cust_bill_pkg_discount.html" METHOD="GET">


<TABLE>

  <% include( '/elements/tr-select-otaker.html',
                'label'   => 'Discounts by employee: ',
                'otakers' => \@otakers,
            )
  %>

  <% include( '/elements/tr-select-agent.html',
                 'curr_value'    => scalar( $cgi->param('agentnum') ),
                 'label'         => 'for agent: ',
                 'disable_empty' => 0,
             )
  %>

  <% include( '/elements/tr-input-beginning_ending.html' ) %>

  <% include( '/elements/tr-input-lessthan_greaterthan.html',
                'label' => 'Amount',
		'field' => 'amount',
            )
  %>

</TABLE>

<BR>
<INPUT TYPE="submit" VALUE="Get Report">

</FORM>

<% include('/elements/footer.html') %>
<%init>

die "access denied"
  unless $FS::CurrentUser::CurrentUser->access_right('Financial reports');

my $sth = dbh->prepare("SELECT DISTINCT otaker FROM cust_pkg_discount")
  or die dbh->errstr;
$sth->execute or die $sth->errstr;
my @otakers = map { $_->[0] } @{$sth->fetchall_arrayref};

</%init>

--- NEW FILE: cust_pkg_discount.html ---
<% include( 'elements/search.html',
                  'title'       => 'Package discounts', 
                  'name'        => 'discounts',
                  'query'       => $query,
                  'count_query' => $count_query,
                  #'redirect'    => $link,
                  'header'      => [ 'Status',
                                     'Discount',
                                     'Months used',
                                     'Employee',
                                     'Package',
                                     FS::UI::Web::cust_header(
                                     #  $cgi->param('cust_fields')
                                     ),
                                   ],
                  'fields'      => [
                                     sub { ucfirst( shift->status ) },
                                     sub { shift->discount->description },
                                     sub { my $m = shift->months_used;
                                           $m =~ /\./ ? sprintf('%.2f',$m) : $m;
                                         },
                                     'otaker',
                                     'pkg',
                                     \&FS::UI::Web::cust_fields,
                                   ],
                  'links'       => [
                                     '',
                                     '',
                                     '',
                                     '',
                                     '',
                                     ( map { $_ ne 'Cust. Status' ? $clink : ''}
                                           FS::UI::Web::cust_header()
                                     ),
                                   ],
                  'align'       => 'clrll'. FS::UI::Web::cust_aligns(),
                  'color'       => [ 
                                     '',
                                     '',
                                     '',
                                     '',
                                     '',
                                     FS::UI::Web::cust_colors(),
                                   ],
                 'style'        => [ 
                                     '',
                                     '',
                                     '',
                                     '',
                                     '',
                                     FS::UI::Web::cust_styles(),
                                   ],
           )
%>
<%init>

die "access denied"
  unless $FS::CurrentUser::CurrentUser->access_right('Financial reports');

#my $conf = new FS::Conf;

#here is the agent virtualization
my $agentnums_sql =
  $FS::CurrentUser::CurrentUser->agentnums_sql( 'table' => 'cust_main' );

my @where = ( $agentnums_sql );

#status
if ( $cgi->param('status') eq 'active' ) {
  push @where, "     (    cust_pkg_discount.disabled IS NULL
                       OR cust_pkg_discount.disabled != 'Y'  )
                 AND ( months IS NULL OR months_used < months ) ";
                       #XXX also end date
} elsif ( $cgi->param('status') eq 'expired' ) {
  push @where, "    (      cust_pkg_discount.disabled IS NOT NULL
                      AND  cust_pkg_discount.disabled = 'Y'       )
                 OR ( months IS NOT NULL AND months_used >= months )
               ";     #XXX also end date
}

#otaker
if ( $cgi->param('otaker') && $cgi->param('otaker') =~ /^([\w\.\-]+)$/ ) {
  push @where, "cust_pkg_discount.otaker = '$1'";
}

#agent
if ( $cgi->param('agentnum') =~ /^(\d+)$/ ) {
  push @where, "cust_main.agentnum = $1";
}

my $count_query = "SELECT COUNT(*), SUM(amount)";

my $join = ' LEFT JOIN discount  USING ( discountnum )
             LEFT JOIN cust_pkg  USING ( pkgnum )
             LEFT JOIN part_pkg  USING ( pkgpart )
             LEFT JOIN cust_main USING ( custnum ) ';

my $where = ' WHERE '. join(' AND ', @where);

$count_query .= " FROM cust_pkg_discount $join $where";

my @select = (
               'cust_pkg_discount.*',
               'part_pkg.pkg',
             );
push @select, 'cust_main.custnum',
              FS::UI::Web::cust_sql_fields();

my $query = {
  'table'     => 'cust_pkg_discount',
  'addl_from' => $join,
  'hashref'   => {},
  'select'    => join(', ', @select ),
  'extra_sql' => $where,
  'order_by'  => 'ORDER BY pkgdiscountnum',
};

my $clink = [ "${p}view/cust_main.cgi?", 'custnum' ];

my $conf = new FS::Conf;

</%init>



More information about the freeside-commits mailing list