summaryrefslogtreecommitdiff
path: root/httemplate/browse/rate_region.html
blob: b454a9e7493236302095b259c634bafa34e9bee7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<% include( 'elements/browse.html',
     'title'          => 'Rating Regions and Prefixes',
     'name_singular'  => 'region', #'rate region',
     'menubar'        => [ 'Rate plans' => $p.'browse/rate.cgi' ],
     'html_init'      => $html_init,
     'html_posttotal' => $html_posttotal,
     'query'          => {
                           'select'    => $select,
                           'table'     => 'rate_region',
                           'addl_from' => $join,
                           'extra_sql' => $extra_sql, 
                           'order_by'  => 'ORDER BY LOWER(regionname)',
                         },
     'count_query'    => $count_query,
     'header'         => [ '#',         'Region',  'Country code', 'Prefixes' ],
     'fields'         => [ 'regionnum', 'regionname',   'ccode',   'prefixes' ],
     'links'          => [ $link, $link, $link, $link ],
   )
%>
<%once>

my $edit_url = $p.'edit/rate_region.cgi';

my $link = [ "$edit_url?", 'regionnum' ];

my $html_init =
  'Regions and prefixes for VoIP and call billing.<BR><BR>'.
  qq(<A HREF="$edit_url"><I>Add a new region</I></A><BR><BR>);

#not quite right for the shouldn't-happen multiple countrycode per region case
my $select = 'rate_region.*, ';
my $join = '';
my $group_sql = '';
if ( driver_name =~ /^Pg/ ) {
  my $fromwhere = 'FROM rate_prefix'.
                  ' WHERE rate_prefix.regionnum = rate_region.regionnum';
  my $prefix_sql = " CASE WHEN nxx IS NULL OR nxx = '' ".
                   "   THEN npa ".
                   "   ELSE npa || '-' || nxx ".
                   " END";
  my $prefixes_sql = "SELECT $prefix_sql $fromwhere AND npa IS NOT NULL";
  $select .= "( SELECT countrycode $fromwhere LIMIT 1 ) AS ccode, 
              ARRAY_TO_STRING( ARRAY($prefixes_sql), ',' ) AS prefixes";
} elsif ( driver_name =~ /^mysql/i ) {
  $join = 'LEFT JOIN rate_prefix USING ( regionnum )';
  $select .= "GROUP_CONCAT( DISTINCT countrycode ) AS ccode,
              GROUP_CONCAT( npa ORDER BY npa     ) AS prefixes ";
  $group_sql = 'GROUP BY regionnum, regionname';
} else {
  die 'unknown database '. driver_name;
}

my $base_count_sql = 'SELECT COUNT(*) FROM rate_region';

</%once>
<%init>

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

$cgi->param('dummy', 1);
my $countrycode_filter_change =
  "window.location = '".
  $cgi->self_url. ";countrycode=' + this.options[this.selectedIndex].value;";

my $countrycode = '';
my $extra_sql = $group_sql;
my $count_query = $base_count_sql;
if ( $cgi->param('countrycode') =~ /^(\d+)$/ ) {
  $countrycode = $1;
  my $ccode_sql = '( SELECT countrycode FROM rate_prefix
                       WHERE rate_prefix.regionnum = rate_region.regionnum
                       LIMIT 1
                   )';
  $extra_sql = " WHERE $ccode_sql = '$1' $extra_sql";
  $count_query .= " WHERE $ccode_sql = '$1'";
}

my $html_posttotal = 
  '(show country code: '.
  qq(<SELECT NAME="countrycode" onChange="$countrycode_filter_change">).
  qq(<OPTION VALUE="">(all)).
  join("\n", map { qq(<OPTION VALUE="$_").
                     ($_ eq $countrycode ? ' SELECTED' : '' ).
                     ">$_",
                 }
                 FS::rate_prefix->all_countrycodes
      ).
  '</SELECT>)';

</%init>