diff options
author | Ivan Kohler <ivan@freeside.biz> | 2014-05-15 14:59:34 -0700 |
---|---|---|
committer | Ivan Kohler <ivan@freeside.biz> | 2014-05-15 14:59:34 -0700 |
commit | 1bea3acc9951c272bd9f5f872d3262c9380e067f (patch) | |
tree | 99e6a28e7d89b577cacc39884f523a18296ac68a | |
parent | 747fee2b23da71a4c124d610850bc55f71fcaa3c (diff) |
agent-virtualize VoIP rates, RT#29183
-rw-r--r-- | FS/FS/AccessRight.pm | 3 | ||||
-rw-r--r-- | FS/FS/Schema.pm | 5 | ||||
-rw-r--r-- | FS/FS/part_pkg/voip_cdr.pm | 14 | ||||
-rw-r--r-- | FS/FS/part_pkg/voip_sqlradacct.pm | 5 | ||||
-rw-r--r-- | FS/FS/rate.pm | 15 | ||||
-rw-r--r-- | httemplate/browse/rate.cgi | 26 | ||||
-rwxr-xr-x | httemplate/edit/part_pkg.cgi | 10 | ||||
-rw-r--r-- | httemplate/edit/rate.cgi | 16 | ||||
-rw-r--r-- | httemplate/elements/menu.html | 28 | ||||
-rw-r--r-- | httemplate/elements/select-rate.html | 19 |
10 files changed, 90 insertions, 51 deletions
diff --git a/FS/FS/AccessRight.pm b/FS/FS/AccessRight.pm index 9903541c4..a5eef2f2f 100644 --- a/FS/FS/AccessRight.pm +++ b/FS/FS/AccessRight.pm @@ -357,6 +357,9 @@ tie my %rights, 'Tie::IxHash', 'Bulk edit package definitions', + 'Edit CDR rates', + #{ rightname=>'Edit global CDR rates', global=>1, }, + 'Edit fee definitions', { rightname=>'Edit global fee definitions', global=>1 }, diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm index 86acbbf55..9f30f804a 100644 --- a/FS/FS/Schema.pm +++ b/FS/FS/Schema.pm @@ -3309,8 +3309,9 @@ sub tables_hashref { 'rate' => { 'columns' => [ - 'ratenum', 'serial', '', '', '', '', - 'ratename', 'varchar', '', $char_d, '', '', + 'ratenum', 'serial', '', '', '', '', + 'ratename', 'varchar', '', $char_d, '', '', + 'agentnum', 'int', 'NULL', '', '', '', ], 'primary_key' => 'ratenum', 'unique' => [], diff --git a/FS/FS/part_pkg/voip_cdr.pm b/FS/FS/part_pkg/voip_cdr.pm index ba5e711bc..d7bf16d96 100644 --- a/FS/FS/part_pkg/voip_cdr.pm +++ b/FS/FS/part_pkg/voip_cdr.pm @@ -12,7 +12,7 @@ use FS::cdr; use FS::detail_format; #use FS::rate; #use FS::rate_prefix; -#use FS::rate_detail; +#use FS::rate_detail; #for ::granularities $DEBUG = 0; @@ -108,19 +108,13 @@ tie my %accountcode_tollfree_field, 'Tie::IxHash', }, 'ratenum' => { 'name' => 'Rate plan', - 'type' => 'select', - 'select_table' => 'rate', - 'select_key' => 'ratenum', - 'select_label' => 'ratename', + 'type' => 'select-rate', }, 'intrastate_ratenum' => { 'name' => 'Optional alternate intrastate rate plan', - 'type' => 'select', - 'select_table' => 'rate', - 'select_key' => 'ratenum', - 'select_label' => 'ratename', + 'type' => 'select-rate', 'disable_empty' => 0, - 'empty_label' => '', + 'empty_label' => ' ', }, 'calls_included' => { 'name' => 'Number of calls included at no usage charge', }, diff --git a/FS/FS/part_pkg/voip_sqlradacct.pm b/FS/FS/part_pkg/voip_sqlradacct.pm index b856b5cda..00ed3f69d 100644 --- a/FS/FS/part_pkg/voip_sqlradacct.pm +++ b/FS/FS/part_pkg/voip_sqlradacct.pm @@ -19,10 +19,7 @@ $DEBUG = 1; 'inherit_fields' => [ 'global_Mixin' ], 'fields' => { 'ratenum' => { 'name' => 'Rate plan', - 'type' => 'select', - 'select_table' => 'rate', - 'select_key' => 'ratenum', - 'select_label' => 'ratename', + 'type' => 'select-rate', }, }, 'fieldorder' => [qw( ratenum ignore_unrateable )], diff --git a/FS/FS/rate.pm b/FS/FS/rate.pm index 49ac938fd..88e93b6f1 100644 --- a/FS/FS/rate.pm +++ b/FS/FS/rate.pm @@ -3,6 +3,7 @@ package FS::rate; use strict; use vars qw( @ISA $DEBUG ); use FS::Record qw( qsearch qsearchs dbh fields ); +#use FS::agent; #causes a weird dep loop in freeside-cdrrated, only needed for v3-style manual FK-checking, so, probably not bother use FS::rate_detail; @ISA = qw(FS::Record); @@ -35,10 +36,18 @@ FS::Record. The following fields are currently supported: =over 4 -=item ratenum - primary key +=item ratenum + +primary key =item ratename +Rate name + +=item agentnum + +Optional agent (see L<FS::agent>) for agent-virtualized rates. + =back =head1 METHODS @@ -254,15 +263,13 @@ and replace methods. =cut -# the check method should currently be supplied - FS::Record contains some -# data checking routines - sub check { my $self = shift; my $error = $self->ut_numbern('ratenum') || $self->ut_text('ratename') + #|| $self->ut_foreign_keyn('agentnum', 'agent', 'agentnum') ; return $error if $error; diff --git a/httemplate/browse/rate.cgi b/httemplate/browse/rate.cgi index 0c425a5d1..ea59a0c5b 100644 --- a/httemplate/browse/rate.cgi +++ b/httemplate/browse/rate.cgi @@ -1,12 +1,6 @@ <% include( 'elements/browse.html', 'title' => 'Rate plans', - 'menubar' => [ 'Regions and Prefixes' => - $p.'browse/rate_region.html', - 'Time Periods' => - $p.'browse/rate_time.html', - 'CDR Types' => - $p.'edit/cdr_type.cgi', - ], + 'menubar' => \@menubar, 'html_init' => $html_init, 'name' => 'rate plans', 'query' => { 'table' => 'rate', @@ -17,6 +11,9 @@ 'header' => [ '#', 'Rate plan', 'Rates' ], 'fields' => [ 'ratenum', 'ratename', $rates_sub ], 'links' => [ $link, $link, '' ], + 'agent_virt' => 1, + 'agent_pos' => 1, + 'agent_null_right' => 'Configuration', #'Edit global CDR rates', 'really_disable_download' => 1 ) %> @@ -63,7 +60,20 @@ my $link = [ $p.'edit/rate.cgi?ratenum=', 'ratenum' ]; </%once> <%init> +my $curuser = $FS::CurrentUser::CurrentUser; + die "access denied" - unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); + unless $curuser->access_right('Edit CDR rates') + #|| $curuser->access_right('Edit global CDR rates') + || $curuser->access_right('Configuration'); + +my @menubar; +if ( $curuser->access_right('Configuration') ) { #, 'Edit global CDR rates') ) { + push @menubar, + 'Regions and Prefixes' => $p.'browse/rate_region.html', + 'Time Periods' => $p.'browse/rate_time.html', + 'CDR Types' => $p.'edit/cdr_type.cgi', + ; +} </%init> diff --git a/httemplate/edit/part_pkg.cgi b/httemplate/edit/part_pkg.cgi index 829bf834a..e91f8cb28 100755 --- a/httemplate/edit/part_pkg.cgi +++ b/httemplate/edit/part_pkg.cgi @@ -884,7 +884,15 @@ my $html_bottom = sub { ? ' CHECKED' : '' ). '>'; - + + } elsif ( $href->{$field}{'type'} eq 'select-rate' ) { + + $html .= include('/elements/select-rate.html', + map { $_ => $href->{$field}{$_} } + grep { $_ !~ /^(name|type)$/ } + keys %{ $href->{$field} } + ); + } elsif ( $href->{$field}{'type'} =~ /^select/ ) { $html .= '<SELECT'; diff --git a/httemplate/edit/rate.cgi b/httemplate/edit/rate.cgi index 1abfb0d32..652c1a68c 100644 --- a/httemplate/edit/rate.cgi +++ b/httemplate/edit/rate.cgi @@ -13,9 +13,19 @@ <FORM NAME="OneTrueForm"> <INPUT TYPE="hidden" NAME="ratenum" VALUE="<% $rate->ratenum %>"> -Rate plan -<INPUT TYPE="text" NAME="ratename" SIZE=32 VALUE="<% $rate->ratename %>"> -<BR><BR> +<TABLE CLASS="fsinnerbox"> + +<& /elements/tr-select-agent.html, + disable_empty => ! $FS::CurrentUser::CurrentUser->access_right('Configuration'), #, 'Edit global CDR rates' + empty_label => '(global)', +&> + +<TR> + <TD>Rate plan</TD> + <TD><INPUT TYPE="text" NAME="ratename" SIZE=32 VALUE="<% $rate->ratename %>"></TD> +</TR> +</TABLE> +<BR> <INPUT TYPE="hidden" NAME="preserve_rate_detail" VALUE="1"> diff --git a/httemplate/elements/menu.html b/httemplate/elements/menu.html index c03dba5d4..0b74b2105 100644 --- a/httemplate/elements/menu.html +++ b/httemplate/elements/menu.html @@ -603,15 +603,19 @@ tie my %config_sales, 'Tie::IxHash', 'Sales People' => [ $fsurl.'browse/sales.html', 'Sales people bring in new business.' ], ; -tie my %config_billing_rates, 'Tie::IxHash', - 'Rate plans' => [ $fsurl.'browse/rate.cgi', 'Manage rate plans' ], - 'Regions and prefixes' => [ $fsurl.'browse/rate_region.html', 'Manage regions and prefixes' ], - 'Usage classes' => [ $fsurl.'browse/usage_class.html', 'Usage classes define groups of usage for taxation.' ], - 'Time periods' => [ $fsurl.'browse/rate_time.html', 'Time periods define days and hours for rate plans' ], - 'Edit rates with Excel' => [ $fsurl.'misc/rate_edit_excel.html', 'Download and edit rates with Excel, then upload changes.' ], #"Edit with Excel" ? - 'separator' => '', #its a separator! - 'Tiering plans' => [ $fsurl.'browse/rate_tier.html', 'Rating tiers' ], -; +tie my %config_billing_rates, 'Tie::IxHash'; +$config_billing_rates{'Rate plans'} = [ $fsurl.'browse/rate.cgi', 'Manage rate plans' ] + if $curuser->access_right('Edit CDR rates') + #|| $curuser->access_right('Edit global CDR rates') + || $curuser->access_right('Configuration'); +if ( $curuser->access_right('Configuration') ) { + $config_billing_rates{'Regions and prefixes'} = [ $fsurl.'browse/rate_region.html', 'Manage regions and prefixes' ]; + $config_billing_rates{'Usage classes'} = [ $fsurl.'browse/usage_class.html', 'Usage classes define groups of usage for taxation.' ]; + $config_billing_rates{'Time periods'} = [ $fsurl.'browse/rate_time.html', 'Time periods define days and hours for rate plans' ]; + $config_billing_rates{'Edit rates with Excel'} = [ $fsurl.'misc/rate_edit_excel.html', 'Download and edit rates with Excel, then upload changes.' ]; #"Edit with Excel" ? + $config_billing_rates{'separator'} = ''; #its a separator! + $config_billing_rates{'Tiering plans'} = [ $fsurl.'browse/rate_tier.html', 'Rating tiers' ]; +} tie my %config_billing, 'Tie::IxHash'; # 'Payment gateways' => [ $fsurl.'browse/payment_gateway.html', 'Credit card and electronic check processors' ]; @@ -623,7 +627,11 @@ if ( $curuser->access_right('Configuration') ) { $config_billing{'Invoice configurations'} = [ $fsurl.'browse/invoice_conf.html', 'Adjust invoice settings for special-purpose notices' ]; $config_billing{'Invoice templates'} = [ $fsurl.'browse/invoice_template.html', 'Edit templates for HTML, plaintext and typeset invoices' ]; $config_billing{'Prepaid cards'} = [ $fsurl.'search/prepay_credit.html', 'View outstanding cards, generate new cards' ]; - $config_billing{'Call rates and regions'} = [ \%config_billing_rates, 'Manage rate plans, regions and prefixes for VoIP and call billing' ]; +} +$config_billing{'Call rates and regions'} = [ \%config_billing_rates, 'Manage rate plans, regions and prefixes for VoIP and call billing' ] + if keys %config_billing_rates; + +if ( $curuser->access_right('Configuration') ) { my $config_taxes_name = 'Locales and tax rates'. ( $conf->exists('enable_taxproducts') diff --git a/httemplate/elements/select-rate.html b/httemplate/elements/select-rate.html index 83a7add06..4f2a1b2ec 100644 --- a/httemplate/elements/select-rate.html +++ b/httemplate/elements/select-rate.html @@ -1,9 +1,10 @@ -<% include( '/elements/select-table.html', - 'table' => 'rate', - 'name_col' => 'ratename', - 'empty_label' => 'Select rate plan', - #'hashref' => { 'disabled' => '' }, - 'order_by' => ' ORDER BY ratenum', #ratename ? - @_, - ) -%> +<& /elements/select-table.html, + 'table' => 'rate', + 'name_col' => 'ratename', + 'empty_label' => 'Select rate plan', + #'hashref' => { 'disabled' => '' }, + 'order_by' => ' ORDER BY ratenum', #ratename ? + 'agent_virt' => 1, + 'agent_null_right' => 'Configuration', #'Edit global CDR rates' + @_, +&> |