summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FS/FS/rate.pm35
-rw-r--r--FS/FS/rate_detail.pm5
-rwxr-xr-xhttemplate/browse/part_pkg.cgi8
-rw-r--r--httemplate/edit/elements/rate_detail.html8
-rw-r--r--httemplate/edit/process/rate_detail.html16
-rw-r--r--httemplate/edit/rate.cgi10
6 files changed, 55 insertions, 27 deletions
diff --git a/FS/FS/rate.pm b/FS/FS/rate.pm
index d26d11697..9b90dd28b 100644
--- a/FS/FS/rate.pm
+++ b/FS/FS/rate.pm
@@ -54,6 +54,8 @@ it may still be processed under a different pricing addon package), or be
marked as 'skipped', or throw a fatal error, depending on the setting of
the 'ignore_unrateable' package option.
+Deprecated; we now find the default detail by its lack of regionnum.
+
=item
=back
@@ -347,7 +349,11 @@ sub dest_detail {
});
}
- return $self->default_detail unless $rate_prefix;
+ if ( !$rate_prefix ) {
+ # then this call doesn't match any known region; just return the
+ # appropriate anywhere rate
+ return $self->default_detail($cdrtypenum) || $self->default_detail('');
+ }
$regionnum = $rate_prefix->regionnum;
@@ -365,7 +371,14 @@ sub dest_detail {
%hash,
'cdrtypenum' => $cdrtypenum
});
- # find all rates maching ratenum, regionnum and null cdrtypenum
+ # failing that, return the global default for this plan with the correct
+ # cdrtypenum (skips weektime processing)
+ if ( !@details and $cdrtypenum ) {
+ my $detail = $self->default_detail($cdrtypenum);
+ return $detail if $detail;
+ }
+ # failing that, find all rates maching ratenum, regionnum and null cdrtypenum
+ # (these can have weektime stuff)
if ( !@details and $cdrtypenum ) {
@details = qsearch( 'rate_detail', {
%hash,
@@ -391,7 +404,7 @@ sub dest_detail {
return $_ if $_->ratetimenum eq '';
}
# if still nothing, return the global default rate for this plan
- return $self->default_detail;
+ return $self->default_detail('');
}
=item rate_detail
@@ -400,16 +413,24 @@ Returns all region-specific details (see L<FS::rate_detail>) for this rate.
=back
-=item default_detail
+=item default_detail [ CDRTYPENUM ]
-Returns the default rate detail, if there is one.
+Returns the default rate detail for CDRTYPENUM (or for null CDR type, if not
+specified).
=cut
sub default_detail {
my $self = shift;
- $self->default_detailnum ?
- FS::rate_detail->by_key($self->default_detailnum) : ''
+ my $cdrtypenum = shift || '';
+# $self->default_detailnum ?
+# FS::rate_detail->by_key($self->default_detailnum) : ''
+ qsearchs( 'rate_detail', {
+ ratenum => $self->ratenum,
+ cdrtypenum => $cdrtypenum,
+ dest_regionnum => '',
+ orig_regionnum => '',
+ }) || '';
}
=head1 SUBROUTINES
diff --git a/FS/FS/rate_detail.pm b/FS/FS/rate_detail.pm
index fcd9f58b4..893335401 100644
--- a/FS/FS/rate_detail.pm
+++ b/FS/FS/rate_detail.pm
@@ -132,6 +132,7 @@ sub check {
|| $self->ut_foreign_key('ratenum', 'rate', 'ratenum')
|| $self->ut_foreign_keyn('orig_regionnum', 'rate_region', 'regionnum' )
|| $self->ut_foreign_keyn('dest_regionnum', 'rate_region', 'regionnum' )
+ || $self->ut_foreign_keyn('cdrtypenum', 'cdr_type', 'cdrtypenum' )
|| $self->ut_number('min_included')
#|| $self->ut_money('min_charge')
@@ -194,6 +195,8 @@ sub dest_regionname {
my $self = shift;
my $dest_region = $self->dest_region;
$dest_region ? $dest_region->regionname : 'Global default';
+ # should be 'Anywhere' or something, to indicate that it's the
+ # cross-region default
}
=item dest_prefixes_short
@@ -230,7 +233,7 @@ associated with this rate plan.
sub rate_time_name {
my $self = shift;
- $self->ratetimenum ? $self->rate_time->ratetimename : '(default)';
+ $self->ratetimenum ? $self->rate_time->ratetimename : '(any time)';
}
=item classname
diff --git a/httemplate/browse/part_pkg.cgi b/httemplate/browse/part_pkg.cgi
index 07f104e55..1e8b51030 100755
--- a/httemplate/browse/part_pkg.cgi
+++ b/httemplate/browse/part_pkg.cgi
@@ -88,6 +88,14 @@ if ( $cgi->param('missing_recur_fee') ) {
)";
}
+if ( $cgi->param('ratenum') =~ /^(\d+)$/ ) {
+ push @where, "EXISTS( SELECT 1 FROM part_pkg_option
+ WHERE optionname LIKE '%ratenum'
+ AND optionvalue = '$1'
+ AND part_pkg_option.pkgpart = part_pkg.pkgpart
+ )";
+}
+
if ( $cgi->param('family') =~ /^(\d+)$/ ) {
$family_pkgpart = $1;
push @where, "family_pkgpart = $1";
diff --git a/httemplate/edit/elements/rate_detail.html b/httemplate/edit/elements/rate_detail.html
index 7b5ec314a..32dd502ce 100644
--- a/httemplate/edit/elements/rate_detail.html
+++ b/httemplate/edit/elements/rate_detail.html
@@ -61,18 +61,18 @@ with row headers showing the region name and prefixes.
% $row++;
% }# foreach @rate_region
% if ( !$opt{regionnum} ) {
-%# global default
+% # global default for this cdrtypenum
<TR>
<TD COLSPAN=2 STYLE="padding-top: 10px">
<B>Global default</B> (for calls not matching any prefix)
</TD>
<TD STYLE="padding-top: 10px">
-% # default rate: set a null region
+% # default rate: set a null region for this cdr type
<B>
<& .detail_box,
- detail => $rate->default_detail,
+ detail => $rate->default_detail($cdrtypenum),
ratetimenum => '',
- cdrtypenum => '',
+ cdrtypenum => $cdrtypenum,
regionnum => '',
ratenum => $rate->ratenum
&>
diff --git a/httemplate/edit/process/rate_detail.html b/httemplate/edit/process/rate_detail.html
index f8a744418..4020ce9e2 100644
--- a/httemplate/edit/process/rate_detail.html
+++ b/httemplate/edit/process/rate_detail.html
@@ -2,7 +2,7 @@
'table' => 'rate_detail',
'popup_reload' => 'Rate changed', #a popup "parent reload" for now
#someday change the individual element and go away instead
- 'noerror_callback' => $set_default_detail
+ #'noerror_callback' => $set_default_detail
&>
<%init>
@@ -12,19 +12,11 @@ die "access denied"
my $set_default_detail = sub {
my ($cgi, $rate_detail) = @_;
- if (!$rate_detail->dest_regionnum) {
+ if (!$rate_detail->dest_regionnum and !$rate_detail->cdrtypenum) {
# then this is a global default rate
+ # default_detailnum is no longer used, but maintain it anyway (and point
+ # it at the one with null cdrtypenum)
my $rate = $rate_detail->rate;
- if ($rate->default_detailnum) {
- if ($rate->default_detailnum == $rate_detail->ratedetailnum) {
- return;
- } else {
- # there's somehow an existing default rate. remove it.
- my $old_default = $rate->default_detail;
- my $error = $old_default->delete;
- die "$error (removing old default rate)\n" if $error;
- }
- }
$rate->set('default_detailnum' => $rate_detail->ratedetailnum);
my $error = $rate->replace;
die "$error (setting default rate)\n" if $error;
diff --git a/httemplate/edit/rate.cgi b/httemplate/edit/rate.cgi
index 1b052d62d..5bfc108c1 100644
--- a/httemplate/edit/rate.cgi
+++ b/httemplate/edit/rate.cgi
@@ -1,7 +1,11 @@
-<% include("/elements/header.html","$action Rate plan", menubar(
+<& /elements/header.html,
+ "$action Rate plan",
+ menubar(
'View all rate plans' => "${p}browse/rate.cgi",
- ))
-%>
+ 'View packages that use this plan' => "${p}browse/part_pkg.cgi?ratenum="
+ . $rate->ratenum,
+ )
+&>
<% include('/elements/progress-init.html',
'OneTrueForm',