summaryrefslogtreecommitdiff
path: root/FS/FS/cdr/amcom.pm
blob: 4fb94ee7fdaa9f02de49acdcd0e13c0ecca8fe0c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package FS::cdr::amcom;

use strict;
use base qw( FS::cdr );
use vars qw( %info );
use DateTime;
use FS::Record qw( qsearchs );
use FS::cdr_type;

my ($tmp_mday, $tmp_mon, $tmp_year);

%info = (
  'name'          => 'Amcom',
  'weight'        => 500,
  'header'        => 1,
  'type'          => 'csv',
  'sep_char'      => ',',
  'disabled'      => 0,

  #listref of what to do with each field from the CDR, in order
  'import_fields' => [

    sub {         # 1. Field Type (must be "DCR", yes, "DCR")
      my ($cdr, $field, $conf, $hashref) = @_;
      $hashref->{skiprow} = 1 unless $field eq 'DCR';
    },
    'accountcode',# 2. BWGroupID (centrex group)
    sub {         # 3. BWGroupNumber
      my ($cdr, $field) = @_; #, $conf, $hashref) = @_;

        if ($cdr->accountcode eq '' && $field =~ /^(1800|1300)/){
	$cdr->charged_party($field);
	$cdr->accountcode($field);
	}
    },
    'uniqueid',   # 4. Record ID
    sub {	   # 5. Call Category (LOCAL, NATIONAL, FREECALL, MOBILE)
      my ($cdr, $data) = @_;
      $data ||= 'none';

      my $cdr_type = qsearchs('cdr_type', { 'cdrtypename' => $data } );
      $cdr->set('cdrtypenum', $cdr_type->cdrtypenum) if $cdr_type;      
      $cdr->set('dcontext', $data);  
    },
    sub {         # 6. Start Date (DDMMYYYY
      my ($cdr, $date) = @_;
      $date =~ /^(\d{2})(\d{2})(\d{4})$/
        or die "unparseable date: $date";
      ($tmp_mday, $tmp_mon, $tmp_year) = ($1, $2, $3);
    },
    sub {         # 7. Start Time (HHMMSS)
      my ($cdr, $time) = @_;
      $time =~ /^(\d{2})(\d{2})(\d{2})$/
        or die "unparseable time: $time";
      my $dt = DateTime->new(
        year    => $tmp_year,
        month   => $tmp_mon,
        day     => $tmp_mday,
        hour    => $1,
        minute  => $2,
        second  => $3,
	time_zone => 'local',
      );
      $cdr->set('startdate', $dt->epoch);
    },
    sub {         # 8. Duration (seconds, 3 decimals)
      my ($cdr, $seconds) = @_;
      $cdr->set('duration', sprintf('%.0f', $seconds));
      $cdr->set('billsec', sprintf('%.0f', $seconds));
    },
    'src',        # 9. Calling Number
    'dst',        # 10. Called Number
    'upstream_src_regionname',  # 11. Calling Party Zone
    'upstream_dst_regionname',  # 12. Called Party Zone
    'upstream_price',           # 13. Call Cost
    '',                         # 14. Call Cost 2 (seems to be the same?)
    '',           # 15. Service Provider ID
    ('') x 4,     # 16-20. Reserved fields
  ],
);

1;