summaryrefslogtreecommitdiff
path: root/FS/FS/cdr/telapi_sms.pm
blob: 28c4c4b018b404a483210f2f71eb62ba147af43e (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
package FS::cdr::telapi_sms;
use base qw( FS::cdr );

use strict;
use vars qw( @ISA %info $CDR_TYPES );
use FS::Record qw( qsearch );
use FS::cdr qw( _cdr_date_parser_maker _cdr_min_parser_maker );

%info = (
  'name'          => 'telapi_sms',
  'weight'        => 601,
  'header'        => 1,
  'type'          => 'csv',
  'import_fields' => [
    _cdr_date_parser_maker('startdate'),  # date gmt
    'src',                                # source
    'dst',                                # destination
    'clid',                               # direction
    sub {
      my($cdr, $cdrtypename, $conf, $param) = @_;
      return unless length($cdrtypename);
      _init_cdr_types();
      die "no matching cdrtypenum for $cdrtypename"
        unless defined $CDR_TYPES->{$cdrtypename};
      $cdr->cdrtypenum($CDR_TYPES->{$cdrtypename});
    },                                    # type
    skip(1),                              # cost
  ],
);

sub skip { map {''} (1..$_[0]) }

sub _init_cdr_types {
  unless ($CDR_TYPES) {
    $CDR_TYPES = {};
    foreach my $cdr_type ( qsearch('cdr_type') ) {
      die "multiple cdr_types with same cdrtypename".$cdr_type->cdrtypename
        if defined $CDR_TYPES->{$cdr_type->cdrtypename};
      $CDR_TYPES->{$cdr_type->cdrtypename} = $cdr_type->cdrtypenum;
    }
  }
}

1;