[freeside-commits] freeside/httemplate/edit/elements rate_detail.html, NONE, 1.1

Mark Wells mark at wavetail.420.am
Thu Jul 22 12:42:57 PDT 2010


Update of /home/cvs/cvsroot/freeside/httemplate/edit/elements
In directory wavetail.420.am:/tmp/cvs-serv21719

Added Files:
	rate_detail.html 
Log Message:
cdr rating by day and time, part 2, RT#4763

--- NEW FILE: rate_detail.html ---
<%doc>
<% include('/edit/elements/rate_detail.html',
    # required
    'ratenum'     => '1',
    
    # optional
    'regionnum'   => '25',
    # or
    'countrycode' => '237',
) %>

If regionnum is specified, this produces column headers plus 
one row of rate details for that region (in all time periods).
Otherwise, there's one row for each region in the specified 
countrycode (or each region anywhere, if there is no countrycode),
with row headers showing the region name and prefixes.

</%doc>
<% include('/elements/table-grid.html') %>
<TR>
% my $col = 0;
% foreach (@header) {
%   my $hlink = $hlinks[$col];
  <TH CLASS   = "grid",
      BGCOLOR = "#cccccc">
  <% $hlink ? qq!<A HREF="$hlink">$_</A>! : $_ %>
  </TH>
%   $col++;
% } #foreach @header
</TR><TR>
% my $row = 0;
% foreach my $r (@rows) {
%   $col = 0;
%   if ( !$opt{'regionnum'} ) {
%     $region = $r;
%     foreach ($r->regionname, $r->prefixes_short) {
  <TD>
    <A HREF="<% $p.'edit/rate_region.cgi?'.$r->regionnum %>"><% $_ %></A>
  </TD>
%     }
%   }
%   elsif ( !$opt{'ratenum'} ) {
%     $rate = $r;
  <TD>
    <A HREF="<% $p.'edit/rate.cgi?'.$r->ratenum %>"><% $r->ratename %></A>
  </TD>
%   }
%   foreach my $rate_time (@rate_time, '') {
  <TD>
%     my $detail = $details[$row][$col];
%     if($detail) {
      <TABLE CLASS="inv" STYLE="border:none">
      <TR><TD><% edit_link($detail) %><% $money_char.$detail->min_charge %>
              <% $detail->sec_granularity ? ' / minute':' / call' %>
      <% $edit_hint %></A>
      </TD></TR>
      <% granularity_detail($detail) %>
      <% min_included_detail($detail) %>
      <% conn_charge_detail($detail) %>
      <TR><TD><% $rate_time ? delete_link($detail) : '' %></TD></TR>
    </TABLE>
%     }
%     else { #!$detail
    <% add_link($rate, $region, $rate_time) %>
%     }
%     $col++;
  </TD>
%   } # foreach @rate_time
</TR>
%   $row++;
% }# foreach @rate_region
</TABLE>

<%once>

tie my %granularity, 'Tie::IxHash', FS::rate_detail::granularities();
tie my %conn_secs,   'Tie::IxHash', FS::rate_detail::conn_secs();

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

sub small {
  '<FONT SIZE="-1">'.shift.'</FONT>'
}
my $edit_hint = small('(edit)');

sub edit_link {
  my $rate_detail = shift;
  my $ratedetailnum = $rate_detail->ratedetailnum;
  '<A HREF="javascript:void(0);" onclick="'.
  include( '/elements/popup_link_onclick.html',
             'action'      => "${p}edit/rate_detail.html?$ratedetailnum",
             'actionlabel' => 'Edit rate',
             'height'      => 420,
             #default# 'width'       => 540,
             #default# 'color'       => '#333399',
         ) . '">'
}

sub add_link {
  my ($rate, $region, $rate_time) = @_;
  '<A HREF="javascript:void(0);" onclick="'.
  include( '/elements/popup_link_onclick.html',
             'action'      => "${p}edit/rate_detail.html?ratenum=".
                                  $rate->ratenum.
                               ';dest_regionnum='.
                                  $region->regionnum.
                               ($rate_time ? 
                                 ';ratetimenum='.$rate_time->ratetimenum :
                                 ''),
             'actionlabel' => 'Add rate',
             'height'      => 420,
             ).'">'.small('(add)').'</A>'
}

sub delete_link {
  my $rate_detail = shift;
  my $ratedetailnum = $rate_detail->ratedetailnum;
  my $onclick = include( '/elements/popup_link_onclick.html',
             'action'      => "${p}misc/delete-rate_detail.html?$ratedetailnum",
             'actionlabel' => 'Delete rate',
             'width'       => 510,
             'height'      => 315,
             'frame'       => 'top',
             );
  $onclick = "if(confirm('Delete this rate?')) { $onclick }";
  qq!<A HREF="javascript:void(0);" onclick="$onclick">!.small('(delete)').'</A>'
}

sub granularity_detail {
  my $rate_detail = shift;
  if($rate_detail->sec_granularity != 60 && $rate_detail->sec_granularity > 0) {
    '<TR><TD>'.
    small('in '.$granularity{$rate_detail->sec_granularity}.' increments').
    '</TD></TR>';
  }
  else { '' }
}

sub min_included_detail {
  my $rate_detail = shift;
  if($rate_detail->min_included) {
    '<TR><TD>'.
    small( $rate_detail->min_included . 
            ($rate_detail->sec_granularity ? 
             ' minutes included' : 
             ' calls included') ).
    '</TD></TR>'
  }
  else { '' }
}

sub conn_charge_detail {
  my $rate_detail = shift;
  if($rate_detail->conn_charge > 0) {
  #return '' unless $rate_detail->conn_charge > 0 || $rate_detail->conn_sec;
    '<TR><TD>'.
    small( $money_char. $rate_detail->conn_charge.
      ' for '.$conn_secs{$rate_detail->conn_sec}
    ).
    '</TD></TR>'
  }
  else { '' }
}

</%once>
<%init>

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

my %opt = @_;
my $ratenum = $opt{'ratenum'} || '';
my $regionnum = $opt{'regionnum'} || '';

# either of these, if the $opt isn't passed, will be set to the 
# correct object when generating each row.
my $rate = qsearchs('rate', { 'ratenum' => $ratenum } ) if $ratenum;
my $region = qsearchs('rate_region', { 'regionnum' => $regionnum }) if $regionnum;

my @rate_time = qsearch('rate_time', {});
my @header = (
  map( { $_->ratetimename } @rate_time ),
  'Default rate');
my @hlinks = map( {$p.'edit/rate_time.cgi?'.$_->ratetimenum} @rate_time ), '';
my @rtns = ( map( { $_->ratetimenum } @rate_time ), '' );

my @details;
my @rows;
if ( $ratenum ) {
  if ( $regionnum ) {
    @rows = qsearch('rate_region', 
                      { ratenum => $ratenum, regionnum => $regionnum });
  }
  else {
    my $where = '';
    if ( $opt{'countrycode'} ) {
      $where = "WHERE 0 < ( 
                    SELECT COUNT(*) FROM rate_prefix
                    WHERE rate_prefix.regionnum = rate_region.regionnum
                    AND countrycode = '$opt{countrycode}' 
                )";
    }
    @rows = qsearch({ table     => 'rate_region',
                      hashref   => { },
                      extra_sql => $where,
                    });
    die "no region found" if !@rows;

    unshift @header, 'Region', 'Prefix(es)';
    unshift @hlinks, '', '';
  }
  foreach my $region (@rows) {
     push @details, [ map { qsearchs('rate_detail', 
                                      { 'ratenum'        => $ratenum,
                                        'dest_regionnum' => $region->regionnum,
                                        'ratetimenum'    => $_ } ) or ''
                          } @rtns
                    ];
  }
}
elsif ( $regionnum ) {
  @rows = qsearch('rate', {}) or die "no rate plans found";
  unshift @header, 'Rate plan';
  unshift @hlinks, '';
  foreach my $rate (@rows) {
    push @details, [ map { qsearchs('rate_detail',
                                     { 'ratenum'        => $rate->ratenum,
                                       'dest_regionnum' => $regionnum,
                                       'ratetimenum'    => $_ } ) or ''
                         } @rtns
                   ];
  }
}
else {
  die "no ratenum or regionnum specified";
}

</%init>



More information about the freeside-commits mailing list