less busywork for freeside-prepaidd
[freeside.git] / bin / artera.import
1 #!/usr/bin/perl -w
2
3 use strict;
4
5 use Text::CSV_XS;
6 use FS::UID qw(adminsuidsetup);
7 use FS::Record qw(qsearchs);
8 use FS::svc_external;
9 use FS::svc_domain;
10 use FS::svc_acct;
11
12 $FS::svc_Common::noexport_hack = 1;
13
14 my $svcpart = 30;
15
16 my $user = shift
17   or die 'Usage:\n\n  artera.import user <artera_active_orders.csv';
18 adminsuidsetup $user;
19
20 ##
21
22 my $csv = new Text::CSV_XS;
23
24 my $header = scalar(<>);
25
26 my( $num, $linked ) = ( 0, 0 );
27
28 while (<>) {
29   my $status = $csv->parse($_)
30     or die $csv->error_input;
31   my($serial, $keycode, $name, $ordernum, $email) = $csv->fields();
32   #warn join(" - ", $serial, $keycode, $name, $ordernum, $email ). "\n";
33
34   $email =~ /^([^@]+)\@([^@]+)$/
35     or die $email;
36   my($username, $domain) = ( $1, $2 );
37   my $svc_domain = qsearchs('svc_domain', { 'domain'  => $domain } );
38   my $cust_svc = '';
39   if ( $svc_domain ) {
40     my $svc_acct = qsearchs('svc_acct', {
41       'username' => $username,
42       'domsvc'   => $svc_domain->svcnum,
43     } );
44     $cust_svc = $svc_acct->cust_svc
45       if $svc_acct;
46   #} else {
47   #  warn "can't find domain $domain\n";
48   }
49
50   my $exist = qsearchs('svc_external', { 'id' => $serial } );
51   next if $exist;
52
53   my $svc_external = new FS::svc_external { 
54     'svcpart' => $svcpart,
55     'pkgnum'  => ( $cust_svc ? $cust_svc->pkgnum : '' ),
56     'id'      => $serial,
57     'title'   => $keycode,
58   };
59   #my $error = $svc_external->check;
60   my $error = $svc_external->insert;
61   if ( $cust_svc && $error =~ /^Already/ ) {
62     warn $error;
63     $svc_external->pkgnum('');
64     $error = $svc_external->insert;
65   }
66   warn $error if $error;
67
68   $num++;
69   $linked++ if $cust_svc;
70   #print "$num imported, $linked linked\n";
71
72 }
73
74 print "$num imported, $linked linked\n";
75