umm.. right.. really do some on-demand stuff
[freeside.git] / bin / import-optigold.pl
index 1284d85..c23bf60 100755 (executable)
@@ -27,6 +27,7 @@ my $extension = '.htm';
 #my $d_dbuser = 'freeside';
 my $d_dbuser = 'enet';
 #my $d_dbuser = 'ivan';
+#my $d_dbuser = 'freesideimport';
 
 #my $agentnum = 1;
 my $agentnum = 13;
@@ -34,7 +35,7 @@ my $legacy_domain_svcnum = 1;
 my $legacy_ppp_svcnum = 2;
 my $legacy_email_svcnum = 3;
 #my $legacy_broadband_svcnum = 4;
-my $legacy_broadband_svcnum = 14;
+#my $legacy_broadband_svcnum = 14;
 #my $previous_credit_reasonnum = 1;
 my $previous_credit_reasonnum = 1220;
 
@@ -209,6 +210,41 @@ sub payby {
   $payby_map{ shift->{billing_type} };
 }
 
+sub payinfo {
+  my $hash = shift;
+  my $payby = payby($hash);
+  my $info;
+  my $cc =
+    $hash->{'credit_card_number_1'}.
+    $hash->{'credit_card_number_2'}.
+    $hash->{'credit_card_number_3'}.
+    $hash->{'credit_card_number_4'};
+  my $bank = 
+    $hash->{'bank_account_number'}.
+    '@'.
+    $hash->{'bank_transit_number'};
+  if ($payby eq 'CARD') {
+    $info = $cc;
+  }elsif ($payby eq 'CHEK') {
+    $info = $bank;
+  }elsif ($payby eq 'BILL') {
+    $info = $hash->{'blanket_purchase_order_number'};
+    $bank =~ s/[^\d\@]//g;
+    $cc =~ s/\D//g;
+    if ( $bank =~ /^\d+\@\d{9}/) {
+      $info = $bank;
+      $payby = 'DCHK';
+    }
+    if ( $cc =~ /^\d{13,16}/ ) {
+      $info = $cc;
+      $payby = 'DCRD';
+    }
+  }else{
+    die "unexpected payby";
+  }
+  ($info, $payby);
+}
+
 sub ut_name_fixup {
   my ($object, $field) = (shift, shift);
   my $value = $object->getfield($field);
@@ -332,6 +368,30 @@ svc_acct  => { 'stable'  => 'cust',
                    'domsvc'       => sub{ $legacy_domain_svcnum },
                    'status'       => 'status',
                  },
+#               'fixup'   => sub { my $svc_acct = shift;
+#                                  my $row = shift;
+#                                  my $id = $row->{'master_account'}
+#                                           ? 'slave:'. $row->{'customer_id'}
+#                                           : $row->{'login'};
+#                                  my $status = $svc_acct->status;
+#                                  if ( $status ne 'Current'
+#                                    && $status ne 'On Hold' )
+#                                  {
+#                                    $cancel{$id} =
+#                                      str2time($row->{termination_date});
+#                                    warn "not creating (cancelled) svc_acct for " .
+#                                      $svc_acct->username. "\n";
+#                                    return 1
+#                                  }
+#                                  $susp{$id} = str2time($row->{hold_date})
+#                                    if $status eq 'On Hold';
+#                                  $adjo{$id} = str2time($row->{hold_date})
+#                                    if ( $status eq 'Current' &&
+#                                         $row->{hold_date} );
+#                                  $bill{$id} =
+#                                    str2time($row->{expiration_date});
+#                                  '';
+#                                },
                'fixup'   => sub { my $svc_acct = shift;
                                   my $row = shift;
                                   my $id = $row->{'master_account'}
@@ -343,8 +403,6 @@ svc_acct  => { 'stable'  => 'cust',
                                   {
                                     $cancel{$id} =
                                       str2time($row->{termination_date});
-                                    warn "not creating (cancelled) svc_acct for " .
-                                      $svc_acct->username. "\n";
                                     return 1
                                   }
                                   $susp{$id} = str2time($row->{hold_date})
@@ -354,14 +412,25 @@ svc_acct  => { 'stable'  => 'cust',
                                          $row->{hold_date} );
                                   $bill{$id} =
                                     str2time($row->{expiration_date});
-                                  '';
-                                },
-               'skey'    => sub { my $svc_acct = shift;
-                                  my $row = shift;
-                                  my $id = $row->{'master_account'}
-                                    ? 'slave:'. $row->{'customer_id'}
-                                    : $row->{'login'};
+                                  my $object =
+                                    qsearchs( 'svc_acct', 
+                                              { 'username' => $row->{'login'} }
+                                            );
+                                  unless( $object ) {
+                                    warn "can't find svc_acct for legacy ppp ".
+                                      $row->{'login'}, "\n";
+                                    return 1;
+                                  }
+                                  
+                                  $object_map{svc_acct}{$id} = $object->svcnum;
+                                  return 1;
                                 },
+#               'skey'    => sub { my $svc_acct = shift;
+#                                  my $row = shift;
+#                                  my $id = $row->{'master_account'}
+#                                    ? 'slave:'. $row->{'customer_id'}
+#                                    : $row->{'login'};
+#                                },
              },
 cust_main => { 'stable'  => 'cust',
                'mapping' =>
@@ -397,69 +466,6 @@ cust_main => { 'stable'  => 'cust',
                    'ship_zip'     => sub { or_b('zip_code', shift) },
                    'ship_daytime' => sub { or_p('phone', shift) },
                    'ship_fax'     => sub { or_p('fax', shift) },
-                   'payby'        => \&payby,
-                   'payinfo'      => sub { my $hash = shift;
-                                           my $payby = payby($hash);
-                                           if ($payby eq 'CARD') {
-                                             $hash->{'credit_card_number_1'}.
-                                             $hash->{'credit_card_number_2'}.
-                                             $hash->{'credit_card_number_3'}.
-                                             $hash->{'credit_card_number_4'};
-                                           }elsif ($payby eq 'CHEK') {
-                                             $hash->{'bank_account_number'}.
-                                             '@'.
-                                             $hash->{'bank_transit_number'};
-                                           }elsif ($payby eq 'BILL') {
-                                             $hash->{'blanket_purchase_order_number'};
-                                           }else{
-                                             die "unexpected payby";
-                                           }
-                                         },
-                   'paycvv'       => sub { my $hash = shift;
-                                           my $payby = payby($hash);
-                                           if ($payby eq 'CARD') {
-                                             $hash->{'credit_card_cvv_number'};
-                                           }else{
-                                             '';
-                                           }
-                                         },
-                   'paydate'      => sub { my $hash = shift;
-                                           my $payby = payby($hash);
-                                           if ($payby eq 'CARD') {
-                                             '20'.
-                                             $hash->{'credit_card_exp_date_2'}.
-                                             '-'.
-                                             substr(
-                                               $hash->{'credit_card_exp_date_1'},
-                                               0,
-                                               2,
-                                             ).
-                                             '-01';
-                                           }else{
-                                             '2037-12-01';
-                                           }
-                                         },
-                   'payname'      => sub { my $hash = shift;
-                                           my $payby = payby($hash);
-                                           if ($payby eq 'CARD') {
-                                             $hash->{'credit_card_name'};
-                                           }elsif ($payby eq 'CHEK') {
-                                             $hash->{'bank_name'};
-                                           }else{
-                                             '';
-                                           }
-                                         },
-                   'paytype'      => sub { my $hash = shift;
-                                           my $payby = payby($hash);
-                                           if ($payby eq 'CHEK') {
-                                             $hash->{'bank_account_to_debit'}
-                                               ? 'Personal '.
-                                                 $hash->{bank_account_to_debit}
-                                               : '';
-                                           }else{
-                                             '';
-                                           }
-                                         },
                    'tax'          => sub { shift->{taxable} eq '' ? 'Y' : '' },
                    'refnum'       => sub { $referrals{shift->{'referred_from'}}
                                            || 1
@@ -473,6 +479,42 @@ cust_main => { 'stable'  => 'cust',
                                   ut_name_fixup($cust_main, 'first');
                                   ut_name_fixup($cust_main, 'company');
                                   ut_name_fixup($cust_main, 'last');
+
+                                  my ($info, $payby) = payinfo($row);
+                                  $cust_main->payby($payby);
+                                  $cust_main->payinfo($info);
+
+                                  $cust_main->paycvv(
+                                      $row->{'credit_card_cvv_number'}
+                                  )
+                                    if ($payby eq 'CARD' or $payby eq 'DCRD');
+
+                                  $cust_main->paydate('20'.
+                                      $row->{'credit_card_exp_date_2'}.  '-'.
+                                      substr(
+                                        $row->{'credit_card_exp_date_1'},
+                                        0,
+                                        2,
+                                      ).
+                                      '-01'
+                                  )
+                                    if ($payby eq 'CARD' or $payby eq 'DCRD');
+
+                                  my $payname = '';
+                                  $payname = $row->{'credit_card_name'}
+                                    if ($payby eq 'CARD' or $payby eq 'DCRD');
+                                  $payname = $row->{'bank_name'}
+                                    if ($payby eq 'CHEK' or $payby eq 'DCHK');
+                                  $cust_main->payname($payname);
+
+                                  $cust_main->paytype(
+                                      $row->{'bank_account_to_debit'}
+                                        ? 'Personal '.
+                                          $row->{bank_account_to_debit}
+                                        : ''
+                                  )
+                                    if ($payby eq 'CHEK' or $payby eq 'DCHK');
+
                                   $cust_main->payby('BILL')
                                     if ($cust_main->payby eq 'CHEK' && 
                                         $cust_main->payinfo !~ /^\d+\@\d{9}$/);
@@ -484,6 +526,8 @@ cust_main => { 'stable'  => 'cust',
                                   ut_text_fixup($cust_main, 'address1');
                                   ut_state_fixup($cust_main, 'state');
                                   ut_zip_fixup($cust_main, 'zip');
+
+
                                   '';
                                 },
                'skey'    => sub { my $object = shift;
@@ -610,10 +654,24 @@ svc_acct  => { 'stable'  => 'email',
                    'svcpart'      => sub{ $legacy_email_svcnum },
                    'domsvc'       => sub{ $legacy_domain_svcnum },
                  },
-               'fixup'   => sub { my $object = shift;
+#               'fixup'   => sub { my ($object, $row) = (shift,shift);
+#                                  my ($sd,$sm,$sy) = split '/',
+#                                                     $row->{shut_off_date}
+#                                    if $row->{shut_off_date};
+#                                  if ($sd && $sm && $sy) {
+#                                    my ($cd, $cm, $cy) = (localtime)[3,4,5];
+#                                    $cy += 1900; $cm++;
+#                                    return 1 if $sy < $cy;
+#                                    return 1 if ($sy == $cy && $sm < $cm);
+#                                    return 1 if ($sy == $cy && $sm == $cm && $sd <= $cd);
+#                                  }
+#                                  return 1 if $object_map{'cust_main'}{$object->username};
+#                                  '';
+#                                },
+               'fixup'   => sub { my ($object, $row) = (shift,shift);
                                   my ($sd,$sm,$sy) = split '/',
-                                                     $object->{shut_off_date}
-                                    if $object->{shut_off_date};
+                                                     $row->{shut_off_date}
+                                    if $row->{shut_off_date};
                                   if ($sd && $sm && $sy) {
                                     my ($cd, $cm, $cy) = (localtime)[3,4,5];
                                     $cy += 1900; $cm++;
@@ -622,12 +680,22 @@ svc_acct  => { 'stable'  => 'email',
                                     return 1 if ($sy == $cy && $sm == $cm && $sd <= $cd);
                                   }
                                   return 1 if $object_map{'cust_main'}{$object->username};
-                                  '';
-                                },
-               'skey'    => sub { my $object = shift;
-                                  my $href = shift;
-                                  'email:'. $href->{'email_customer_id'};
+                                  my $svc_acct =
+                                    qsearchs( 'svc_acct', 
+                                              { 'username' => $row->{'login'} }
+                                            );
+                                  unless( $svc_acct ) {
+                                    warn "can't find svc_acct for email ".
+                                      $row->{'login'}. "\n";
+                                    return 1;
+                                  }
+                                  $object_map{svc_acct}{'email:'.$row->{'email_customer_id'}} = $svc_acct->svcnum;
+                                  return 1;
                                 },
+#               'skey'    => sub { my $object = shift;
+#                                  my $href = shift;
+#                                  'email:'. $href->{'email_customer_id'};
+#                                },
                'wrapup'   => sub { for my $id (keys %{$object_map{'cust_pkg'}}){
                                      next unless $id =~ /^email:(\d+)/;
                                      my $custid = $1;
@@ -636,14 +704,14 @@ svc_acct  => { 'stable'  => 'email',
                                                  $object_map{'svc_acct'}{$id} }
                                        );
                                      unless ($cust_svc) {
-                                       warn "can't find legacy ppp $id\n";
+                                       warn "can't find legacy email $id\n";
                                        next;
                                      }
 
                                      $cust_svc->
                                        pkgnum($cust_pkg_map{$custid});
                                      my $error = $cust_svc->replace;
-                                     warn "error linking legacy ppp $id: $error\n";
+                                     warn "error linking legacy email $id: $error\n";
                                    }
                                  },
              },
@@ -663,7 +731,7 @@ while ( @tables ) {
   my ($id)      = $href->{'id'};
   my ($skey)    = $href->{'skey'};
 
-  $d_dbh->do("delete from $table");   #XXX FIXME!
+  #$d_dbh->do("delete from $table");
 
   my $s_sth = $s_dbh->prepare("select count(*) from $stable");
   $s_sth->execute or die $s_sth->errstr;