summaryrefslogtreecommitdiff
path: root/FS/FS/cdr.pm
diff options
context:
space:
mode:
authormark <mark>2010-04-27 05:38:28 +0000
committermark <mark>2010-04-27 05:38:28 +0000
commit70c24f77f50484dd9e7486dd52332e276254476a (patch)
tree3a0bc92fd84c1bbce649eb4c867332e190103643 /FS/FS/cdr.pm
parent37591b61f8ad6fc5c5acb2fd8f520d2dbe4f1539 (diff)
RT#7046: inbound rate for rate plan billing
Diffstat (limited to 'FS/FS/cdr.pm')
-rw-r--r--FS/FS/cdr.pm33
1 files changed, 28 insertions, 5 deletions
diff --git a/FS/FS/cdr.pm b/FS/FS/cdr.pm
index b9a4e41..36797b7 100644
--- a/FS/FS/cdr.pm
+++ b/FS/FS/cdr.pm
@@ -14,6 +14,7 @@ use FS::cdr_type;
use FS::cdr_calltype;
use FS::cdr_carrier;
use FS::cdr_batch;
+use FS::cdr_termination;
@ISA = qw(FS::Record);
@EXPORT_OK = qw( _cdr_date_parser_maker _cdr_min_parser_maker );
@@ -386,11 +387,33 @@ error, otherwise returns false.
=cut
sub set_status_and_rated_price {
- my($self, $status, $rated_price, $svcnum) = @_;
- $self->freesidestatus($status);
- $self->rated_price($rated_price);
- $self->svcnum($svcnum) if $svcnum;
- $self->replace();
+ my($self, $status, $rated_price, $svcnum, %opt) = @_;
+ if($opt{'inbound'}) {
+ my $term = qsearchs('cdr_termination', {
+ acctid => $self->acctid,
+ termpart => 1 # inbound
+ });
+ my $error;
+ if($term) {
+ warn "replacing existing cdr status (".$self->acctid.")\n" if $term;
+ $error = $term->delete;
+ return $error if $error;
+ }
+ $term = FS::cdr_termination->new({
+ acctid => $self->acctid,
+ termpart => 1,
+ rated_price => $rated_price,
+ status => $status,
+ svcnum => $svcnum,
+ });
+ return $term->insert;
+ }
+ else {
+ $self->freesidestatus($status);
+ $self->rated_price($rated_price);
+ $self->svcnum($svcnum) if $svcnum;
+ return $self->replace();
+ }
}
=item calldate_unix