RT# 75095 - fixed ooma format to import all charges, and unified import process to...
authorChristopher Burger <burgerc@freeside.biz>
Tue, 6 Feb 2018 15:36:31 +0000 (10:36 -0500)
committerChristopher Burger <burgerc@freeside.biz>
Tue, 6 Feb 2018 15:36:31 +0000 (10:36 -0500)
FS/FS/cust_main/Import_Charges.pm
FS/FS/cust_main/import_charges/gcet.pm [new file with mode: 0644]
FS/FS/cust_main/import_charges/ooma.pm [new file with mode: 0644]
FS/FS/cust_main/import_charges/simple.pm [new file with mode: 0644]
httemplate/misc/cust_main-import_charges.cgi

index bff2ec2..3d2031d 100644 (file)
@@ -8,6 +8,48 @@ use FS::UID qw( dbh );
 use FS::CurrentUser;
 use FS::Record qw( qsearchs );
 use FS::cust_main;
+use FS::Conf;
+
+my $DEBUG = '';
+
+my %import_charges_info;
+foreach my $INC ( @INC ) {
+  warn "globbing $INC/FS/cust_main/import_charges/[a-z]*.pm\n" if $DEBUG;
+  foreach my $file ( glob("$INC/FS/cust_main/import_charges/[a-z]*.pm") ) {
+    warn "attempting to load import charges format info from $file\n" if $DEBUG;
+    $file =~ /\/(\w+)\.pm$/ or do {
+      warn "unrecognized file in $INC/FS/cust_main/import_charges/: $file\n";
+      next;
+    };
+    my $mod = $1;
+    my $info = eval "use FS::cust_main::import_charges::$mod; ".
+                    "\\%FS::cust_main::import_charges::$mod\::info;";
+    if ( $@ ) {
+      die "error using FS::cust_main::import_charges::$mod (skipping): $@\n" if $@;
+      next;
+    }
+    unless ( keys %$info ) {
+      warn "no %info hash found in FS::cust_main::import_charges::$mod, skipping\n";
+      next;
+    }
+    warn "got import charges format info from FS::cust_main::import_charges::$mod: $info\n" if $DEBUG;
+    if ( exists($info->{'disabled'}) && $info->{'disabled'} ) {
+      warn "skipping disabled import charges format FS::cust_main::import_charges::$mod" if $DEBUG;
+      next;
+    }
+    $import_charges_info{$mod} = $info;
+  }
+}
+
+tie my %import_formats, 'Tie::IxHash',
+  map  { $_ => $import_charges_info{$_}->{'name'} }
+  sort { $import_charges_info{$a}->{'weight'} <=> $import_charges_info{$b}->{'weight'} }
+  grep { exists($import_charges_info{$_}->{'fields'}) }
+  keys %import_charges_info;
+
+sub import_formats {
+  %import_formats;
+}
 
 =head1 NAME
 
@@ -65,20 +107,10 @@ sub batch_charge {
 
   my @fields;
   my %charges;
-  if ( $format eq 'simple' ) {
-    @fields = qw( custnum agent_custid amount pkg );
-  } elsif ( $format eq 'ooma' ) {
-    #below is gcet file.
-    #@fields = ( 'userfield1', 'userfield2', 'userfield3', 'userfield4', 'userfield5', 'userfield6', 'userfield7', 'userfield8', 'userfield9', 'userfield10', 'amount', 'userfield12', 'userfield13', 'userfield14', 'userfield15', 'userfield16', 'userfield17', 'userfield18', 'pkg', 'userfield20', 'custnum', 'userfield22', 'userfield23', 'userfield24', 'userfield25', );
-    @fields = ( 'userfield1', 'userfield2', 'userfield3', 'userfield4', 'userfield5', 'userfield6', 'userfield7', 'userfield8', 'amount', 'userfield10', 'userfield11', 'userfield12', 'userfield13', 'userfield14', 'userfield15', 'userfield16', 'pkg', 'userfield18', 'custnum', 'userfield20', 'userfield21', 'userfield22', 'userfield23', 'userfield24', 'userfield25', );
-
-  ##should charges to charge be a config option?
-    %charges = (
-      'DISABILITY ACCESS/ENHANCED 911 SERVICES SURCHARGE' => '1',
-      'FEDERAL TRS FUND'                                  => '1',
-      'FEDERAL UNIVERSAL SERVICE FUND'                    => '1',
-      'STATE SALES TAX'                                   => '1',
-    );
+
+  if ( $import_charges_info{$format} ) {
+    @fields = @{$import_charges_info{$format}->{'fields'}};
+    %charges = %{$import_charges_info{$format}->{'charges'}};
   } else {
     die "unknown format $format";
   }
diff --git a/FS/FS/cust_main/import_charges/gcet.pm b/FS/FS/cust_main/import_charges/gcet.pm
new file mode 100644 (file)
index 0000000..83f9565
--- /dev/null
@@ -0,0 +1,26 @@
+package FS::cust_main::import_charges::gcet;
+
+use strict;
+use base qw( FS::cust_main::Import_Charges );
+use vars qw ( %info );
+
+# gcet fields.
+my @fields = ( 'userfield1', 'userfield2', 'userfield3', 'userfield4', 'userfield5', 'userfield6', 'userfield7', 'userfield8', 'userfield9', 'userfield10', 'amount', 'userfield12', 'userfield13', 'userfield14', 'userfield15', 'userfield16', 'userfield17', 'userfield18', 'pkg', 'userfield20', 'custnum', 'userfield22', 'userfield23', 'userfield24', 'userfield25', );
+# hash of charges (pkg) to charge.  if empty charge them all.
+# '911 services' => '1',
+my $charges = {
+  'DISABILITY ACCESS/ENHANCED 911 SERVICES SURCHARGE' => '1',
+  'FEDERAL TRS FUND'                                  => '1',
+  'FEDERAL UNIVERSAL SERVICE FUND'                    => '1',
+  'STATE SALES TAX'                                   => '1',
+};
+
+%info = (
+  'fields'   => [@fields],
+  'charges'  => $charges,
+  'name'     => 'Gcet',
+  'weight'   => '30',
+  'disabled' => '1',
+);
+
+1;
\ No newline at end of file
diff --git a/FS/FS/cust_main/import_charges/ooma.pm b/FS/FS/cust_main/import_charges/ooma.pm
new file mode 100644 (file)
index 0000000..a43def2
--- /dev/null
@@ -0,0 +1,21 @@
+package FS::cust_main::import_charges::ooma;
+
+use strict;
+use base qw( FS::cust_main::Import_Charges );
+use vars qw ( %info );
+
+# ooma fields
+my @fields =  ('userfield1', 'userfield2', 'userfield3', 'userfield4', 'userfield5', 'userfield6', 'userfield7', 'userfield8', 'amount', 'userfield10', 'userfield11', 'userfield12', 'userfield13', 'userfield14', 'userfield15', 'userfield16', 'pkg', 'userfield18', 'custnum', 'userfield20', 'userfield21', 'userfield22', 'userfield23', 'userfield24', 'userfield25', );
+# hash of charges (pkg) to charge.  if empty charge them all.
+# '911 services' => '1',
+my $charges = {};
+
+%info = (
+  'fields'   => [@fields],
+  'charges'  => $charges,
+  'name'     => 'Ooma',
+  'weight'   => '10',
+  'disabled' => '',    
+);
+
+1;
\ No newline at end of file
diff --git a/FS/FS/cust_main/import_charges/simple.pm b/FS/FS/cust_main/import_charges/simple.pm
new file mode 100644 (file)
index 0000000..e039328
--- /dev/null
@@ -0,0 +1,21 @@
+package FS::cust_main::import_charges::simple;
+
+use strict;
+use base qw( FS::cust_main::Import_Charges );
+use vars qw ( %info );
+
+# simple field format
+my @fields =  ('custnum', 'agent_custid', 'amount', 'pkg');
+# hash of charges (pkg) to charge.  if empty charge them all.
+# '911 services' => '1',
+my $charges = {};
+
+%info = (
+  'fields'   => [@fields],
+  'charges'  => $charges,
+  'name'     => 'Simple',
+  'weight'   => '1',
+  'disabled' => '',
+);
+
+1;
\ No newline at end of file
index 4eacce1..215cc4c 100644 (file)
@@ -28,9 +28,9 @@ Import a CSV file containing customer charges.
   <TH ALIGN="right">Format</TH>
   <TD>
     <SELECT NAME="format">
-      <OPTION VALUE="simple">Simple
-      <OPTION VALUE="ooma">Ooma
-<!--      <OPTION VALUE="extended" SELECTED>Extended -->
+%       foreach my $format ( keys %formats ) {
+         <OPTION VALUE="<% $format %>"><% $formats{$format} %></OPTION>
+%       }
     </SELECT>
   </TD>
 </TR>
@@ -94,6 +94,8 @@ Field information:
 die "access denied"
   unless $FS::CurrentUser::CurrentUser->access_right('Import');
 
+  tie my %formats, 'Tie::IxHash', FS::cust_main::Import_Charges->import_formats;
+
   my $custbatch = time2str('webimport-%Y/%m/%d-%T'. "-$$-". rand() * 2**32, time);
 
 </%init>