[freeside-commits] branch master updated. 73954e6f0f1f31cb33f231bc381ab93ddabd8c02

Ivan ivan at 420.am
Fri Jan 11 18:57:44 PST 2013


The branch, master has been updated
       via  73954e6f0f1f31cb33f231bc381ab93ddabd8c02 (commit)
      from  dd825e780ad1e7d520f5c2d7f99c0f67fe892781 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 73954e6f0f1f31cb33f231bc381ab93ddabd8c02
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Fri Jan 11 18:57:41 2013 -0800

    start of tap3_12_export to generate GSM TAP3.12 tap-out file for partners, RT#20768

diff --git a/FS/FS/cdr/gsm_tap3_12.pm b/FS/FS/cdr/gsm_tap3_12.pm
index d1536c0..4d0917c 100644
--- a/FS/FS/cdr/gsm_tap3_12.pm
+++ b/FS/FS/cdr/gsm_tap3_12.pm
@@ -4,7 +4,7 @@ use base qw( FS::cdr );
 use strict;
 use vars qw( %info );
 use Time::Local;
-#use Data::Dumper;
+use Data::Dumper;
 
 %info = (
   'name'          => 'GSM TAP3 release 12',
@@ -40,6 +40,233 @@ use Time::Local;
   },
 );
 
+#accepts qsearch parameters as a hash or list of name/value pairs, but not
+#old-style qsearch('cdr', { field=>'value' })
+
+use Date::Format;
+sub tap3_12_export {
+  my %qsearch = ();
+  if ( ref($_[0]) eq 'HASH' ) {
+    %qsearch = %{ $_[0] };
+  } else {
+    %qsearch = @_;
+  }
+
+  #if these get huge we might need to get a count and do a paged search
+  my @cdrs = qsearch({ 'table'=>'cdr', %qsearch, 'order_by'=>'calldate ASC' });
+
+  eval "use Convert::ASN1";
+  die $@ if $@;
+
+  my $asn = Convert::ASN1->new;
+  $asn->prepare( _asn_spec() ) or die $asn->error;
+
+  my $TransferBatch = $asn->find('TransferBatch') or die $asn->error;
+
+  my %hash = _TransferBatch(); #static information etc.
+
+  my $utcTimeOffset = '+0300'; #XXX local timezone at least
+
+  my $now = time;
+
+  ###
+  # accountingInfo
+  ###
+
+  ###
+  # batchControlInfo
+  ###
+
+  $hash{batchControlInfo}->{fileCreationTimeStamp}   = { 'localTimeStamp' => time2str('%Y%m%d%H%M%S', $now),
+                                                         'utcTimeOffset'  => $utcTimeOffset,
+                                                       };
+  #XXX what do these do?  do they need to be different from fileCreationTimeStamp?
+  $hash{batchControlInfo}->{transferCutOffTimeStamp} = { 'localTimeStamp' => time2str('%Y%m%d%H%M%S', $now),
+                                                         'utcTimeOffset'  => $utcTimeOffset,
+                                                       };
+
+  $hash{batchControlInfo}->{fileAvailableTimeStamp}  = { 'localTimeStamp' => time2str('%Y%m%d%H%M%S', $now),
+                                                          'utcTimeOffset'  => $utcTimeOffset,
+                                                        };
+
+  #XXX
+  $hash{batchControlInfo}->{sender} = 'MDGTM';
+  $hash{batchControlInfo}->{recipient} = 'GNQHT';
+  $hash{batchControlInfo}->{fileSequenceNumber} = '00178'; #XXX global?  per recipient?
+
+  ###
+  # networkInfo
+  ###
+
+  $hash{networkInfo}->{utcTimeOffsetInfo}[0]{utcTimeOffset} = $utcTimeOffset;
+
+  #XXX receiver entity IDs?  why two?
+  #$hash->{networkInfo}->{recEntityInfo}[0]{recEntityId} = '340010100';
+  #$hash->{networkInfo}->{recEntityInfo}[1]{recEntityId} = '240556000000';
+
+  ###
+  # auditControlInfo
+  ###
+
+  $hash{auditControlInfo}->{callEventDetailsCount} = scalar(@cdrs);
+  $hash{auditControlInfo}->{earliestCallTimeStamp} = { 'localTimeStamp' => time2str('%Y%m%d%H%M%S', $cdrs[0]->calldate_unix),
+                                                       'utcTimeOffset'  => $utcTimeOffset,
+                                                     };
+  $hash{auditControlInfo}->{latestCallTimeStamp}   = { 'localTimeStamp' => time2str('%Y%m%d%H%M%S', $cdrs[-1]->calldate_unix),
+                                                       'utcTimeOffset'  => $utcTimeOffset,
+                                                     };
+
+  my $totalCharge = 0;
+  $totalCharge += $_->rated_price foreach @cdrs;
+  $hash{totalCharge} = sprintf('%.5f', $totalCharge);
+
+  ###
+  # callEventDetails
+  ###
+
+  $hash{callEventDetails} = [
+    map {
+          {
+            'mobileOriginatedCall' => {
+              'locationInformation' => {
+                                         'networkLocation' => {
+                                                                'recEntityCode' => $_->carrierid, #XXX 1
+                                                              }
+                                       },
+              'operatorSpecInformation' => [
+                                             $_->userfield, ##'|Seq: 178 Loc: 1|'
+                                           ],
+              'basicServiceUsedList' => [
+                                          {
+                                            'basicService' => {
+                                                                'serviceCode' => {
+                                                                                   'teleServiceCode' => $_->servicecode, #'11'
+                                                                                 }
+                                                              },
+                                            'chargeInformationList' => [
+                                                                         {
+                                                                           'callTypeGroup' => {
+                                                                                                'callTypeLevel1' => $_->calltypenum,
+                                                                                                'callTypeLevel3' => 0,
+                                                                                                'callTypeLevel2' => 0
+                                                                                              },
+                                                                           'chargeDetailList' => [
+                                                                                                   {
+                                                                                                     'charge'          => $_->rated_price * 100000, #XXX numberOfDecimalPlaces 
+                                                                                                     'chargeType'      => '00',
+                                                                                                     'chargeableUnits' => $_->quantity_able,
+                                                                                                     'chargedUnits'    => $_->quantity,
+                                                                                                   }
+                                                                                                 ],
+                                                                           'chargedItem' => 'D', #XXX or E?  what's this do?
+                                                                           'exchangeRateCode' => 1
+                                                                         }
+                                                                       ]
+                                          }
+                                        ],
+              'basicCallInformation' => {
+                                          'totalCallEventDuration' => $_->duration,
+                                          'destination' => {
+                                                             'calledNumber' => $_->dst,
+                                                             #XXX 'dialledDigits' => '322221350'
+                                                           },
+                                          'callEventStartTimeStamp' => {
+                                                                         'localTimeStamp' => time2str('%Y%m%d%H%M%S', $_->startdate),
+                                                                         'utcTimeOffsetCode' => 1
+                                                                       },
+                                          'chargeableSubscriber' => {
+                                                                      'simChargeableSubscriber' => {
+                                                                                                     'msisdn' => $_->charged_pary, #src
+                                                                                                     'imsi'   => $_->charged_party_imsi,
+                                                                                                   }
+                                                                    }
+                                        }
+            }
+          };
+        }
+      @cdrs
+  ];
+
+
+  ###
+
+
+  my $pdu = $TransferBatch->encode( \%hash );
+
+  return $pdu;
+
+}
+
+sub _TransferBatch {
+          'accountingInfo' => {
+                                'currencyConversionInfo' => [
+                                                              {
+                                                                'numberOfDecimalPlaces' => 5,
+                                                                'exchangeRate' => 152549, #???
+                                                                'exchangeRateCode' => 1
+                                                              }
+                                                            ],
+                                'tapDecimalPlaces' => 5,
+                                'localCurrency' => 'USD'
+                              },
+          'batchControlInfo' => {
+                                  'specificationVersionNumber' => 3,
+                                  'releaseVersionNumber' => 12, #11?
+                                  #'transferCutOffTimeStamp' => {
+                                  #                               'localTimeStamp' => '20121230050222',
+                                  #                               'utcTimeOffset' => '+0300'
+                                  #                             },
+                                  'operatorSpecInformation' => [
+                                                                 '', # XXX '|File proc MTH LUXMA: 1285348027|'
+                                                               ],
+                                  #'recipient' => 'GNQHT',
+                                  #'fileCreationTimeStamp' => {
+                                  #                             'localTimeStamp' => '20121230050222',
+                                  #                             'utcTimeOffset' => '+0300'
+                                  #                           },
+                                  #'sender' => 'MDGTM',
+                                  #'fileSequenceNumber' => '00178',
+                                  #'fileAvailableTimeStamp' => {
+                                  #                              'localTimeStamp' => '20121230035052',
+                                  #                              'utcTimeOffset' => '+0100'
+                                  #                            }
+                                },
+          'networkInfo' => {
+                             'recEntityInfo' => [
+                                                  {
+                                                    'recEntityType' => 1,
+                                                    #'recEntityId' => '340010100',
+                                                    'recEntityCode' => 1
+                                                  },
+                                                  {
+                                                    'recEntityType' => 2,
+                                                    #'recEntityId' => '240556000000',
+                                                    'recEntityCode' => 2
+                                                  }
+                                                ],
+                             'utcTimeOffsetInfo' => [
+                                                      {
+                                                        'utcTimeOffset' => '+0300',
+                                                        'utcTimeOffsetCode' => 1
+                                                      }
+                                                    ]
+                           },
+          'auditControlInfo' => {
+                                  #'callEventDetailsCount' => 4,
+                                  'totalTaxValue' => 0,
+                                  #'earliestCallTimeStamp' => {
+                                  #                             'localTimeStamp' => '20121229102501',
+                                  #                             'utcTimeOffset' => '+0300'
+                                  #                           },
+                                  'totalDiscountValue' => 0,
+                                  #'totalCharge' => 50474,
+                                  #'latestCallTimeStamp' => {
+                                  #                           'localTimeStamp' => '20121229102807',
+                                  #                           'utcTimeOffset' => '+0300'
+                                  #                         }
+                                },
+}
+
 sub _asn_spec {
   <<'END';
 --

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/cdr/gsm_tap3_12.pm |  229 +++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 228 insertions(+), 1 deletions(-)




More information about the freeside-commits mailing list