From 1eadcf7ea710b34029c29c5bd3b6e82bc25af1b9 Mon Sep 17 00:00:00 2001 From: Gerhard Jungwirth Date: Mon, 19 May 2014 15:15:01 +0200 Subject: [PATCH] MT#3955 API callcosts: filter by subscriber_id --- .../Panel/Controller/API/CustomerZoneCosts.pm | 6 +++++- .../Controller/API/CustomerZoneCostsItem.pm | 1 + lib/NGCP/Panel/Role/API/CustomerZoneCosts.pm | 13 +++++++++++++ lib/NGCP/Panel/Utils/Contract.pm | 16 +++------------- 4 files changed, 22 insertions(+), 14 deletions(-) diff --git a/lib/NGCP/Panel/Controller/API/CustomerZoneCosts.pm b/lib/NGCP/Panel/Controller/API/CustomerZoneCosts.pm index e84afbb676..95f57c4295 100644 --- a/lib/NGCP/Panel/Controller/API/CustomerZoneCosts.pm +++ b/lib/NGCP/Panel/Controller/API/CustomerZoneCosts.pm @@ -85,13 +85,17 @@ sub GET :Allow { my $query_string = $self->query_param_string($c); return unless $query_string; my (@embedded, @links); + my $error_flag = 0; for my $dev ($field_devs->search({}, {order_by => {-asc => 'me.id'}})->all) { - push @embedded, $self->hal_from_item($c, $dev); + my $hal = $self->hal_from_item($c, $dev); + $error_flag = 1 unless $hal; + push @embedded, $hal; push @links, Data::HAL::Link->new( relation => 'ngcp:'.$self->resource_name, href => sprintf('%s%d?%s', $self->dispatch_path, $dev->id, $query_string), ); } + last if $error_flag; push @links, Data::HAL::Link->new( relation => 'curies', diff --git a/lib/NGCP/Panel/Controller/API/CustomerZoneCostsItem.pm b/lib/NGCP/Panel/Controller/API/CustomerZoneCostsItem.pm index dfac04ab93..9b4678dc8a 100644 --- a/lib/NGCP/Panel/Controller/API/CustomerZoneCostsItem.pm +++ b/lib/NGCP/Panel/Controller/API/CustomerZoneCostsItem.pm @@ -52,6 +52,7 @@ sub GET :Allow { last unless $self->resource_exists($c, deviceprofile => $field_dev); my $hal = $self->hal_from_item($c, $field_dev); + last unless $hal; my $response = HTTP::Response->new(HTTP_OK, undef, HTTP::Headers->new( (map { # XXX Data::HAL must be able to generate links with multiple relations diff --git a/lib/NGCP/Panel/Role/API/CustomerZoneCosts.pm b/lib/NGCP/Panel/Role/API/CustomerZoneCosts.pm index ddcd229227..55ef7aa0ac 100644 --- a/lib/NGCP/Panel/Role/API/CustomerZoneCosts.pm +++ b/lib/NGCP/Panel/Role/API/CustomerZoneCosts.pm @@ -52,6 +52,7 @@ sub hal_from_item { ); my $resource = $self->resource_from_item($c, $item); + return unless $resource; $hal->resource($resource); return $hal; } @@ -62,12 +63,24 @@ sub resource_from_item { my %resource; my ($stime, $etime, $subscriber_id) = $self->get_query_params($c); + my $subscriber_uuid; + if ($subscriber_id) { + my $subscriber = $c->model('DB')->resultset('voip_subscribers')->find({ id => $subscriber_id }); + unless ($subscriber) { + $self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Invalid subscriber_id. Subscriber not found."); + $c->log->debug("invalid subscriber"); + return; + } + $subscriber_uuid = $subscriber->uuid; + $c->log->debug("filtering by subscriber $subscriber_uuid"); + } my $zonecalls = NGCP::Panel::Utils::Contract::get_contract_zonesfees( c => $c, contract_id => $item->id, stime => $stime, etime => $etime, + subscriber_uuid => $subscriber_uuid, ); $resource{customer_id} = int($item->id); diff --git a/lib/NGCP/Panel/Utils/Contract.pm b/lib/NGCP/Panel/Utils/Contract.pm index d44d4090d4..ef7686ae25 100644 --- a/lib/NGCP/Panel/Utils/Contract.pm +++ b/lib/NGCP/Panel/Utils/Contract.pm @@ -293,12 +293,10 @@ sub get_contract_calls_rs{ sub get_contract_zonesfees_rs { my %params = @_; my $c = $params{c}; - my $provider_id = $params{provider_id}; - my $client_contact_id = $params{client_contact_id}; - my $client_contract_id = $params{client_contract_id}; my $stime = $params{stime}; my $etime = $params{etime}; my $contract_id = $params{contract_id}; + my $subscriber_uuid = $params{subscriber_uuid}; # should not be neccessary, done before # $stime ||= NGCP::Panel::Utils::DateTime::current_local()->truncate( to => 'month' ); @@ -315,9 +313,8 @@ sub get_contract_zonesfees_rs { # GROUP BY b.zone my $zonecalls_rs_out = $c->model('DB')->resultset('cdr')->search( { -# source_user_id => { 'in' => [ map {$_->uuid} @{$contract->{subscriber}} ] }, 'call_status' => 'ok', - 'source_user_id' => { '!=' => '0' }, + 'source_user_id' => ($subscriber_uuid || { '!=' => '0' }), start_time => [ -and => { '>=' => $stime->epoch}, @@ -342,7 +339,7 @@ sub get_contract_zonesfees_rs { my $zonecalls_rs_in = $c->model('DB')->resultset('cdr')->search( { 'call_status' => 'ok', - #'destination_user_id' => { '!=' => '0' }, + 'destination_user_id' => ($subscriber_uuid || { '!=' => '0' }), start_time => [ -and => { '>=' => $stime->epoch}, @@ -371,13 +368,6 @@ sub get_contract_zonesfees_rs { sub get_contract_zonesfees { my %params = @_; - my $c = $params{c}; - my $provider_id = $params{provider_id}; - my $client_contact_id = $params{client_contact_id}; - my $client_contract_id = $params{client_contract_id}; - my $stime = $params{stime}; - my $etime = $params{etime}; - my $contract_id = $params{contract_id}; my ($zonecalls_rs_in, $zonecalls_rs_out) = get_contract_zonesfees_rs(%params);