Add source field to billing fees.

remotes/svn/3.6
Andreas Granig 14 years ago
parent dae8798465
commit d5a5db5098

@ -480,7 +480,7 @@ sub search_fees : Local {
delete $c->session->{feeerr};
}
} else {
foreach my $sf (qw(destination direction zone zone_detail)) {
foreach my $sf (qw(source destination direction zone zone_detail)) {
if(( defined $c->request->params->{'search_'.$sf}
and length $c->request->params->{'search_'.$sf})
or $c->request->params->{'exact_'.$sf})
@ -493,7 +493,7 @@ sub search_fees : Local {
$c->session->{exact_filter} = { %exact };
}
foreach my $sf (qw(destination direction zone zone_detail)) {
foreach my $sf (qw(source destination direction zone zone_detail)) {
# set values for webform
$c->stash->{'exact_'.$sf} = $exact{$sf};
$c->stash->{'search_'.$sf} = $filter{$sf};
@ -527,6 +527,7 @@ sub search_fees : Local {
if(ref $$fee_list{fees} eq 'ARRAY' and @{$$fee_list{fees}}) {
for(@{$$fee_list{fees}}) {
$$_{urlenc_destination} = uri_escape($$_{destination});
$$_{urlenc_source} = uri_escape($$_{source});
}
$c->stash->{fee_list} = $$fee_list{fees};
$c->stash->{total_count} = $$fee_list{total_count};
@ -539,9 +540,6 @@ sub search_fees : Local {
$c->stash->{last_one} = 1;
}
}
foreach(@{$$fee_list{fees}}) {
$$_{destination} = $self->_denormalize_destination($c, $$_{destination});
}
}
return 1;
@ -588,13 +586,12 @@ sub set_fees : Local {
last;
}
@keyval{@elements} = @values;
$keyval{destination} = $self->_normalize_destination($c, $keyval{destination}) || $keyval{destination}
if length $keyval{destination};
unless(defined $keyval{destination}) {
$messages{feeerr} = 'Web.Fees.InvalidDestination';
$c->session->{feeerr}{line} = $line;
last;
}
$keyval{source} |= '';
unless(defined $keyval{direction} && ($keyval{direction} eq 'in' || $keyval{direction} eq 'out')) {
$messages{feeerr} = 'Web.Fees.InvalidDirection';
$c->session->{feeerr}{line} = $line;
@ -673,20 +670,19 @@ sub edit_fee : Local {
my $bilprof = $c->stash->{bilprof} = $c->request->params->{bilprof};
my $destination = $c->stash->{destination} = $c->request->params->{destination};
my $source = $c->stash->{source} = $c->request->params->{source} || '';
my $direction = $c->stash->{direction} = $c->request->params->{direction};
$c->stash->{offset} = $c->request->params->{offset} || 0;
$destination = $self->_normalize_destination($c, $destination) || $destination
if length $destination;
if(ref $c->session->{restore_fee_input} eq 'HASH') {
$c->stash->{fee} = $c->session->{restore_fee_input};
delete $c->session->{restore_fee_input};
} elsif(defined $destination && defined $direction) {
} elsif(defined $source && defined $destination && defined $direction) {
my $fee_list;
return unless $c->model('Provisioning')->call_prov( $c, 'billing', 'search_billing_profile_fees',
{ handle => $bilprof,
filter => {
source => $source,
destination => $destination,
direction => $direction,
},
@ -700,7 +696,6 @@ sub edit_fee : Local {
$c->session->{messages}{feeerr} = 'Web.Fees.DuplicatedDestination';
} else {
$c->stash->{fee} = $$fee_list{fees}[0];
$c->stash->{fee}{destination} = $self->_denormalize_destination($c, $c->stash->{fee}{destination});
}
} else {
$c->session->{messages}{feeerr} = 'Web.Fees.NoSuchDestination';
@ -725,17 +720,23 @@ sub do_edit_fee : Local {
my $bilprof = $c->request->params->{bilprof};
my $offset = $c->request->params->{offset};
$settings{destination} = $c->request->params->{destination};
$settings{destination} = $self->_normalize_destination($c, $settings{destination}) || $settings{destination}
if length $settings{destination};
if(defined $c->request->params->{new_destination}) {
undef $settings{destination};
$settings{destination} = $self->_normalize_destination($c, $c->request->params->{new_destination})
|| $c->request->params->{new_destination}
$settings{destination} = $c->request->params->{new_destination}
if length $c->request->params->{new_destination};
unless(defined $settings{destination}) {
$messages{destination} = 'Web.Fees.InvalidDestination';
}
}
$settings{source} = $c->request->params->{source} || '';
if(defined $c->request->params->{new_source}) {
undef $settings{source};
$settings{source} = $c->request->params->{new_source};
unless(defined $settings{source}) {
$messages{source} = 'Web.Fees.InvalidDestination';
}
}
$settings{direction} = $c->request->params->{new_direction} || $c->request->params->{direction};
unless($settings{direction} &&
@ -787,10 +788,8 @@ sub do_edit_fee : Local {
}
$c->session->{messages} = \%messages;
$settings{destination} = $self->_denormalize_destination($c, $settings{destination})
if defined $settings{destination};
$c->session->{restore_fee_input} = \%settings;
$c->response->redirect("/billing/edit_fee?bilprof=$bilprof&offset=$offset&direction=".$settings{direction}."&destination=".uri_escape($settings{destination}));
$c->response->redirect("/billing/edit_fee?bilprof=$bilprof&offset=$offset&direction=".$settings{direction}."&destination=".uri_escape($settings{destination})."&source=".uri_escape($settings{source}));
return;
}
@ -805,14 +804,14 @@ sub do_delete_fee : Local {
my $bilprof = $c->request->params->{bilprof};
my $destination = $c->request->params->{destination};
my $source = $c->request->params->{source} || '';
my $direction = $c->request->params->{direction};
my $offset = $c->request->params->{offset};
$destination = $self->_normalize_destination($c, $destination) || $destination;
if($c->model('Provisioning')->call_prov( $c, 'billing', 'set_billing_profile_fees',
{ handle => $bilprof,
fees => [ {
source => $source,
destination => $destination,
direction => $direction,
} ],
@ -1030,49 +1029,6 @@ sub do_edit_peaktime : Local {
return;
}
sub _normalize_destination : Private {
my ($self, $c, $destination) = @_;
if($destination =~ /^\d+$/) {
# E.164 number
$destination = '^' . $destination . '.*$';
} elsif($destination =~ /^(?:[a-z0-9]+(?:-[a-z0-9]+)*\.)+[a-z]+$/i
or $destination =~ /^[012]?[0-9]?[0-9](?:\.[012]?[0-9]?[0-9]){3}$/)
{
# domain or IP address
$destination =~ s/\./\\./g;
$destination = '^.*@'. $destination .'$';
} elsif($destination =~ /^.+\@(?:[a-z0-9]+(?:-[a-z0-9]+)*\.)+[a-z]+$/i
or $destination =~ /^.+\@[012]?[0-9]?[0-9](?:\.[012]?[0-9]?[0-9]){3}$/)
{
# SIP URI
$destination =~ s/\./\\./g;
$destination = '^'. $destination .'$';
} else {
return;
}
return $destination;
}
sub _denormalize_destination : Private {
my ($self, $c, $destination) = @_;
my $backup = $destination;
$destination =~ s/\\\././g;
$destination =~ s/\$$//;
$destination =~ s/^\^//;
$destination =~ s/\.\*$//;
$destination =~ s/^\.\*\@//;
if(defined $self->_normalize_destination($c, $destination)) {
return $destination;
} else {
return $backup;
}
}
=head1 BUGS AND LIMITATIONS
=over

@ -60,6 +60,21 @@
<input type="hidden" name="bilprof" value="[% bilprof.handle %]" />
<ul class="cleanlist">
<li class="ui-state-default">
<div class="span-3">
<label class="search_label" for="search_by_source">Source:</label>
</div>
<div class="span-6">
<input type="text" id="search_by_source" name="search_source" title="SQL wildcards allowed"
value="[% search_source %]" />
</div>
<div class="span-6">
<input type="checkbox" class="checkbox" id="exact_source" name="exact_source"
[% IF exact_source %]checked="checked"[% END %] />
<label for="exact_source">exact match</label>
</div>
</li>
<li class="ui-state-default">
<div class="span-3">
<label class="search_label" for="search_by_destination">Destination:</label>
@ -138,24 +153,24 @@
[% IF messages.stfeemsg %]<div class="success">[% messages.stfeemsg %]</div>[% END %]
<ul class="cleanlist">
<li class="ui-state-default">
<div class="span-6">Destination</div>
<div class="span-5">Source</div>
<div class="span-5">Destination</div>
<div class="span-1"><span class="ui-icon ui-icon-transfer-e-w"></span></div>
<div class="span-4">Zone</div>
<div class="span-4 last">Zone Detail</div>
<div class="span-4 last">Zone</div>
</li>
[% FOREACH fee = fee_list %]
<li class="ui-state-default">
<div class="span-6" title="[% fee.destination %]" >[% fee.destination %]</div>
<div class="span-5" title="[% fee.source %]" >[% fee.source %]</div>
<div class="span-5" title="[% fee.destination %]" >[% fee.destination %]</div>
<div class="span-1" title="[% fee.direction%]" >[% fee.direction %]</div>
<div class="span-4" title="[% fee.zone %]" >[% fee.zone %]</div>
<div class="span-4" title="[% fee.zone_detail %]" >[% fee.zone_detail %]</div>
[% UNLESS Catalyst.session.admin.read_only %]
<div class="span-1">
<a href="/billing/edit_fee?bilprof=[% bilprof.handle %]&amp;destination=[% fee.urlenc_destination %]&amp;direction=[% fee.direction %]&amp;offset=[% offset %]"><span class="button-edit">Edit</span></a>
<a href="/billing/edit_fee?bilprof=[% bilprof.handle %]&amp;destination=[% fee.urlenc_destination %]&amp;source=[% fee.urlenc_source %]&amp;direction=[% fee.direction %]&amp;offset=[% offset %]"><span class="button-edit">Edit</span></a>
</div>
<div class="span-1 last">
<a href="/billing/do_delete_fee?bilprof=[% bilprof.handle %]&amp;destination=[% fee.urlenc_destination %]&amp;direction=[% fee.direction %]&amp;offset=[% offset %][% IF last_one %]&amp;last_one=1[% END %]"><span class="button-delete">Delete</span></a>
<a href="/billing/do_delete_fee?bilprof=[% bilprof.handle %]&amp;destination=[% fee.urlenc_destination %]&amp;source=[% fee.urlenc_source %]&amp;direction=[% fee.direction %]&amp;offset=[% offset %][% IF last_one %]&amp;last_one=1[% END %]"><span class="button-delete">Delete</span></a>
</div>
[% ELSE %]
<div class="span-1 last" />

@ -15,17 +15,33 @@
<input type="hidden" name="offset" value="[% offset %]" />
<ul class="cleanlist">
<li class="ui-state-default">
<div class="span-5">Source:</div>
[% IF destination %]
<div class="span-6 last">[% fee.source %]</div>
[% ELSE %]
<div class="span-6">
<input type="text" name="new_source" title="string, empty or POSIX regular expression, e.g.: ^431.+$"
value="[% fee.source %]" />
</div>
<div class="span-5 last">
empty or POSIX regex
</div>
[% END %]
</li>
[% IF messages.source %]<li class="error">[% messages.source %]</li>[% END %]
<li class="ui-state-default">
<div class="span-5">Destination:</div>
[% IF destination %]
<div class="span-6 last">[% fee.destination %]</div>
[% ELSE %]
<div class="span-6">
<input type="text" name="new_destination" title="string, e.g.: 431; or POSIX regular expression, e.g.: ^431.+$"
<input type="text" name="new_destination" title="string, POSIX regular expression, e.g.: ^431.+$"
value="[% fee.destination %]" />
</div>
<div class="span-5 last">
E.164 prefix or SIP domain
POSIX regex
</div>
[% END %]
</li>

Loading…
Cancel
Save