MT#58337 show destination call costs/zones in invoice callist

invoices support call direction for the summary and zone
costs, however the detailed call list (available to customer
invoices only) always shows *source* costs and zone details.

this is fixed accordingly. in&out call directions implies a
slow OR query, and is not supported, as noted in the
documentation.

Change-Id: Ib4a8a8f535a9f170b1f3ca9a6b9be36c033d439e
mr12.0
Rene Krenn 2 years ago
parent c826fccb29
commit 9d8ac1785f

@ -332,18 +332,19 @@ sub get_contract_calls_rs {
my %params = @_;
my($c,$contract_id,$stime,$etime,$call_direction,$category) = @params{qw/c contract_id stime etime call_direction category/};
my $target;
if ($call_direction) {
if ($call_direction eq "in") {
$target = 'destination';
} elsif ($call_direction eq "out") {
$target = 'source';
}
}
return unless $target;
$stime ||= NGCP::Panel::Utils::DateTime::current_local()->truncate( to => 'month' );
$etime ||= $stime->clone->add( months => 1 );
my $q = {
'call_status' => 'ok',
'start_time' =>
[ -and =>
{ '>=' => $stime->epoch},
{ '<=' => $etime->epoch},
],
};
my $contract = $c->model('DB')->resultset('contracts')->find({ id => $contract_id });
my $class;
$class = $contract->product()->class() if $contract;
@ -367,16 +368,26 @@ sub get_contract_calls_rs {
}
$category = 'carrier' if $category eq 'peer';
$category = 'customer' if $category eq 'did';
my $q = {
'call_status' => 'ok',
'start_time' =>
[ -and =>
{ '>=' => $stime->epoch},
{ '<=' => $etime->epoch},
],
$target . '_' . $contract_type . '_id' => $contract_id,
};
my @cols = ();
push(@cols,qw/source_user source_domain source_cli destination_user_in/);
#push(@cols,NGCP::Panel::Utils::CallList::get_suppression_id_colnames());
push(@cols,qw/start_time duration call_type/);
push(@cols,'source_' . $category . '_cost');
my @colnames = @cols;
push(@cols,'source_' . $category . '_billing_zones_history.zone');
push(@cols,'source_' . $category . '_billing_zones_history.detail');
push(@colnames,qw/zone zone_detail/);
push(@cols,$target . '_' . $category . '_cost');
push(@cols,$target . '_' . $category . '_billing_zones_history.zone');
push(@cols,$target . '_' . $category . '_billing_zones_history.detail');
push(@colnames,qw/cost zone zone_detail/);
my $calls_rs = $c->model('DB')->resultset('cdr')->search($q,{
select => \@cols,
@ -388,26 +399,26 @@ sub get_contract_calls_rs {
if ($call_direction) {
if ($call_direction eq "in") {
$calls_rs = $calls_rs->search({
'destination_' . $contract_type . '_id' => $contract_id,
});
#$calls_rs = $calls_rs->search({
# 'destination_' . $contract_type . '_id' => $contract_id,
#});
#suppression rs decoration at last, after any "select =>"
return NGCP::Panel::Utils::CallList::call_list_suppressions_rs($c,$calls_rs,NGCP::Panel::Utils::CallList::SUPPRESS_IN);
} elsif ($call_direction eq "out") {
$calls_rs = $calls_rs->search({
'source_' . $contract_type . '_id' => $contract_id,
});
#$calls_rs = $calls_rs->search({
# 'source_' . $contract_type . '_id' => $contract_id,
#});
#suppression rs decoration at last, after any "select =>"
return NGCP::Panel::Utils::CallList::call_list_suppressions_rs($c,$calls_rs,NGCP::Panel::Utils::CallList::SUPPRESS_OUT);
} elsif ($call_direction eq "in_out") {
$calls_rs = $calls_rs->search({
-or => [
{ 'source_' . $contract_type . '_id' => $contract_id },
{ 'destination_' . $contract_type . '_id' => $contract_id },
],
});
#suppression rs decoration at last, after any "select =>"
return NGCP::Panel::Utils::CallList::call_list_suppressions_rs($c,$calls_rs,NGCP::Panel::Utils::CallList::SUPPRESS_INOUT);
#} elsif ($call_direction eq "in_out") {
# $calls_rs = $calls_rs->search({
# -or => [
# { 'source_' . $contract_type . '_id' => $contract_id },
# { 'destination_' . $contract_type . '_id' => $contract_id },
# ],
# });
# #suppression rs decoration at last, after any "select =>"
# return NGCP::Panel::Utils::CallList::call_list_suppressions_rs($c,$calls_rs,NGCP::Panel::Utils::CallList::SUPPRESS_INOUT);
}
}

@ -124,24 +124,26 @@ sub create_invoice {
my $calllist = [];
if ($tmpl->category eq 'customer') {
my $calllist_rs = NGCP::Panel::Utils::Contract::get_contract_calls_rs(
c => $c,
contract_id => $contract->id,
stime => $stime,
etime => $etime,
call_direction => $tmpl->call_direction,
category => $tmpl->category,
);
$calllist = [ map {
my $call = {$_->get_inflated_columns};
$call->{start_time} = $call->{start_time}->epoch;
$call->{destination_user_in} =~s/%23/#/g;
#$call->{destination_user_in} = encode_entities($call->{destination_user_in}, '<>&"#');
$call->{source_customer_cost} += 0.0; # make sure it's a number
$call->{source_reseller_cost} += 0.0 if exists $call->{source_reseller_cost};
$call->{source_carrier_cost} += 0.0 if exists $call->{source_carrier_cost};
NGCP::Panel::Utils::CallList::suppress_cdr_fields($c,$call,$_);
} $calllist_rs->all ];
if (my $calllist_rs = NGCP::Panel::Utils::Contract::get_contract_calls_rs(
c => $c,
contract_id => $contract->id,
stime => $stime,
etime => $etime,
call_direction => $tmpl->call_direction,
category => $tmpl->category,
)) {
$calllist = [ map {
my $call = {$_->get_inflated_columns};
$call->{start_time} = $call->{start_time}->epoch;
$call->{destination_user_in} =~s/%23/#/g;
#$call->{destination_user_in} = encode_entities($call->{destination_user_in}, '<>&"#');
$call->{cost} += 0.0; # make sure it's a number
#$call->{source_customer_cost} += 0.0; # make sure it's a number
#$call->{source_reseller_cost} += 0.0 if exists $call->{source_reseller_cost};
#$call->{source_carrier_cost} += 0.0 if exists $call->{source_carrier_cost};
NGCP::Panel::Utils::CallList::suppress_cdr_fields($c,$call,$_);
} $calllist_rs->all ];
}
}
my $invoice_amounts = get_invoice_amounts(

@ -140,7 +140,7 @@
<line x1="62.37" y1="170.1" x2="538.65" y2="170.1" style="stroke:#000000;stroke-width:1;" />
<!--{ [% calllist(fontfamily='Verdana', fontsize=8, startx=62.37, starty=184.275, offsety=14, miny=113.4, maxy=737, calls=calls, fields=[{name='start_time',dx=0,date_format='%Y-%m-%d %H:%M:%S'},{name='duration',dx=141.175,timestamp2time=1,anchor='end'},{name='destination_user_in',dx=28.35,prefix='+',masklen=10,mask='xxx'},{name='zone',dx=113.4},{name='source_customer_cost',dx=192.78,money_cents=1,comma='.',anchor='end',money_signs=5}]) -%] }-->
<!--{ [% calllist(fontfamily='Verdana', fontsize=8, startx=62.37, starty=184.275, offsety=14, miny=113.4, maxy=737, calls=calls, fields=[{name='start_time',dx=0,date_format='%Y-%m-%d %H:%M:%S'},{name='duration',dx=141.175,timestamp2time=1,anchor='end'},{name='destination_user_in',dx=28.35,prefix='+',masklen=10,mask='xxx'},{name='zone',dx=113.4},{name='cost',dx=192.78,money_cents=1,comma='.',anchor='end',money_signs=5}]) -%] }-->
</g>

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Loading…
Cancel
Save