summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FS/FS/cust_pkg/Import.pm46
-rw-r--r--httemplate/misc/cust_pkg-import.html12
2 files changed, 58 insertions, 0 deletions
diff --git a/FS/FS/cust_pkg/Import.pm b/FS/FS/cust_pkg/Import.pm
index e8c4427..63a9909 100644
--- a/FS/FS/cust_pkg/Import.pm
+++ b/FS/FS/cust_pkg/Import.pm
@@ -211,6 +211,52 @@ sub batch_import {
push @fields, 'locationnum';
}
+ if ( $format =~ /^bulk_(.*)$/ ) {
+
+ $format = $1;
+
+ $opt->{'postinsert_callback'} = sub {
+ my( $record, $param ) = @_;
+
+ my $formatfields = _formatfields;
+ foreach my $svc_x ( grep /^svc/, keys %$formatfields ) {
+
+ my $ff = $formatfields->{$svc_x};
+
+ if ( grep $param->{"$svc_x.$_"}, @$ff ) {
+
+ $param->{'svc_phone.phonenum'} =~ /^\s*(\d+)\s*\-\s*(\d+)\s*$/
+ or return 'Enter a phone number range, with dash as the separator';
+ my($start, $end) = ($1, $2);
+ if ( length($end) < length($start) ) {
+ $end = substr($start, 0, length($start) - length($end) ). $end;
+ }
+
+ foreach my $phonenum ( "$start" .. "$end" ) {
+
+ my $svc = "FS::$svc_x"->new( {
+ 'pkgnum' => $record->pkgnum,
+ 'svcpart' => $record->part_pkg->svcpart($svc_x),
+ map { $_ => $param->{"$svc_x.$_"} } @$ff
+ } );
+
+ $svc->phonenum($phonenum);
+ #$svc->set_default_and_fixed;
+ my $error = $svc->insert;
+ return "error inserting service: $error" if $error;
+
+ }
+
+ }
+
+ }
+
+ return ''; #no error
+
+ };
+
+ }
+
push @fields, ( 'pkgpart', 'discountnum' );
my @date_fields = ();
diff --git a/httemplate/misc/cust_pkg-import.html b/httemplate/misc/cust_pkg-import.html
index 8784dbb..9769941 100644
--- a/httemplate/misc/cust_pkg-import.html
+++ b/httemplate/misc/cust_pkg-import.html
@@ -39,6 +39,9 @@ Import a file containing customer packages.
<OPTION VALUE="svc_phone">Phone service
<OPTION VALUE="svc_phone-agent_custid">Phone service with agent_custid
<OPTION VALUE="svc_phone-locationnum">Phone service with existing location
+ <OPTION VALUE="bulk_svc_phone">Bulk phone service
+ <OPTION VALUE="bulk_svc_phone-agent_custid">Bulk phone service with agent_custid
+ <OPTION VALUE="bulk_svc_phone-locationnum">Bulk phone service with existing location
<OPTION VALUE="svc_external">External service
<OPTION VALUE="svc_external-agent_custid">External service with agent_custid
<OPTION VALUE="svc_external-locationnum">External service with existing location
@@ -108,6 +111,15 @@ Uploaded files can be CSV (comma-separated value) files or Excel spreadsheets.
<b>Phone sevice with existing location</b> format has the following field order: <i>custnum<%$req%>, locationnum, pkgpart<%$req%>, discountnum, start_date, setup, bill, last_bill, susp, adjourn, cancel, expire, countrycode, phonenum, sip_password, pin</i>
<BR><BR>
+<b>Bulk phone sevice</b> format has the following field order: <i>custnum<%$req%>, pkgpart<%$req%>, discountnum, start_date, setup, bill, last_bill, susp, adjourn, cancel, expire, countrycode, start_phonenum-end_phonenum, sip_password, pin</i>
+<BR><BR>
+
+<b>Bulk phone service with agent_custid</b> format has the following field order: <i>agent_custid<%$req%>, pkgpart<%$req%>, discountnum, start_date, setup, bill, last_bill, susp, adjourn, cancel, expire, countrycode, start_phonenum-end_phonenum, sip_password, pin</i>
+<BR><BR>
+
+<b>Bulk phone sevice with existing location</b> format has the following field order: <i>custnum<%$req%>, locationnum, pkgpart<%$req%>, discountnum, start_date, setup, bill, last_bill, susp, adjourn, cancel, expire, countrycode, start_phonenum-end_phonenum, sip_password, pin</i>
+<BR><BR>
+
<b>External sevice</b> format has the following field order: <i>custnum<%$req%>, pkgpart<%$req%>, discountnum, start_date, setup, bill, last_bill, susp, adjourn, cancel, expire, id, title</i>
<BR><BR>