default to a session cookie instead of setting an explicit timeout, weird timezone...
[freeside.git] / FS / bin / freeside-compliance_solutions-import
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5 use FS::UID qw( adminsuidsetup );
6 use Spreadsheet::ParseXLSX;
7 use FS::part_pkg_taxproduct;
8
9 my $user = shift or die &usage;
10 my $filename = shift or die &usage;
11
12 my $dbh = adminsuidsetup($user);
13 $FS::UID::AutoCommit = 0;
14 $FS::UID::AutoCommit = 0;
15
16 my $parser = Spreadsheet::ParseXLSX->new;
17 my $workbook = $parser->parse($filename);
18
19 ###
20 # Import Product Codes
21 ###
22
23 my %category = (
24   'C' => 'COMPUTER',
25   'G' => 'GENERAL MERCHANDISE',
26   'N' => 'NON-TAXABLE AND EXEMPT',
27   'S' => 'SATELLITE',
28   'T' => 'TELECOM',
29   'V' => 'VOIP',
30   'W' => 'WIRELESS',
31 );
32
33 my $num_prodcode = 0;
34 my %prodcode2desc = ();
35
36 my $product_sheet = $workbook->worksheet('Product Codes');
37 my( $prod_min, $prod_max ) = $product_sheet->row_range();
38
39 foreach my $prod_rownum ( $prod_min+1 .. $prod_max ) {
40   my $product_code = $product_sheet->get_cell($prod_rownum, 0)->value;
41   my $product_desc = $product_sheet->get_cell($prod_rownum, 1)->value;
42
43   #print "$product_code: $product_desc\n";
44
45   my $part_pkg_taxproduct = new FS::part_pkg_taxproduct {
46     data_vendor => 'compliance_solutions',
47     taxproduct  => $product_code,
48     description => join(' : ', $category{ substr($product_code,0,1) },
49                                $product_desc,
50                        ),
51   };
52   my $error = $part_pkg_taxproduct->insert;
53   if ( $error ) {
54     $dbh->rollback;# or die dbh->errstr;
55     die $error;
56   }
57
58   $prodcode2desc{ $product_code } = $part_pkg_taxproduct->description;
59
60   $num_prodcode++;
61
62 }
63
64 ###
65 # Import Service Codes
66 ###
67
68 my $num_servcode = 0;
69
70 my $service_sheet = $workbook->worksheet('Service Codes');
71 my( $serv_min, $serv_max ) = $service_sheet->row_range();
72
73 foreach my $serv_rownum ( $serv_min+1 .. $serv_max ) {
74   my $product_code = $service_sheet->get_cell($serv_rownum, 0)->value;
75   my $service_code = $service_sheet->get_cell($serv_rownum, 1)->value;
76   my $service_desc = $service_sheet->get_cell($serv_rownum, 2)->value;
77
78   my $part_pkg_taxproduct = new FS::part_pkg_taxproduct {
79     data_vendor => 'compliance_solutions',
80     taxproduct  => $product_code. sprintf('%03d', $service_code),
81     description => join(' : ', $prodcode2desc{ $product_code },
82                                $service_desc,
83                        ),
84   };
85   my $error = $part_pkg_taxproduct->insert;
86   if ( $error ) {
87     $dbh->rollback;# or die dbh->errstr;
88     die $error;
89   }
90   $num_servcode++;
91
92 }
93
94 print "Imported $num_prodcode product codes and $num_servcode service codes\n";
95
96 $dbh->commit;
97
98 sub usage {
99   "Usage: \n  freeside-compliance_solutions-import username \"products and services.xlsx\"\n"
100 }
101
102 1;