moved out of the Open-ILS tree; these are implementation specific
[Evergreen.git] / Evergreen / src / extras / import / lib_spliter.pl
1 #!/usr/bin/perl -w
2 use strict;
3 use Data::Dumper;
4 use DBI;
5
6 unless (@ARGV) {
7         print <<"       USAGE";
8         Usage:  $0 <db-name> <lib-map-output> < <lib-file>
9         USAGE
10         exit;
11 }
12
13 my %libs;
14 my $lib_map = {};
15 while (<STDIN>) {
16         chomp;
17         my ($policy, $lib, $sys) = split "\t";
18         my ($sys_pol) = split '-', $policy;
19
20         $libs{$sys_pol}{libs} ||= [];
21         $libs{$sys_pol}{name} = $sys;
22         $libs{$sys_pol}{type} = 2;
23         push @{ $libs{$sys_pol}{libs} }, {name => $lib, shortname => $policy, type => 3 };
24 }
25
26 my $dbh = DBI->connect("dbi:Pg:host=localhost;dbname=$ARGV[0]",'postgres');
27
28 $dbh->begin_work;
29
30 my $find_lib_ou = 'select id from actor.org_unit where shortname = ?';
31 for my $sname (keys %libs) {
32         ($libs{$sname}{id}) = $dbh->selectrow_array($find_lib_ou,{},$sname);
33         $lib_map->{$sname} = $libs{$sname}{id};
34         for my $lib (@{ $libs{$sname}{libs} }) {
35                 ($$lib{id}) = $dbh->selectrow_array($find_lib_ou,{},$$lib{shortname});
36                 $lib_map->{$$lib{shortname}} = $$lib{id};
37         }
38 }
39
40 my $find_parent_ou = 'select parent_ou from actor.org_unit where shortname = ?';
41 my $create_lib_ou = 'insert into actor.org_unit (name,shortname,parent_ou,ou_type) VALUES (?,?,?,?)';
42 for my $sname (keys %libs) {
43         unless ($libs{$sname}{id}) {
44                 $dbh->do($create_lib_ou,{},$libs{$sname}{name},$sname, 1,$libs{$sname}{type});
45                 ($libs{$sname}{id}) = $dbh->selectrow_array($find_lib_ou,{},$sname);
46                 $lib_map->{$sname} = $libs{$sname}{id};
47         }
48         ($libs{$sname}{parent_ou}) = $dbh->selectrow_array($find_parent_ou,{},$libs{$sname}{shortname});
49         my $pid = $libs{$sname}{id};
50         for my $lib (@{ $libs{$sname}{libs} }) {
51                 unless ($$lib{id}) {
52                         $dbh->do($create_lib_ou,{},$$lib{name},$$lib{shortname}, $pid,$$lib{type});
53                         ($$lib{id}) = $dbh->selectrow_array($find_lib_ou,{},$$lib{shortname});
54                         $lib_map->{$$lib{shortname}} = $$lib{id};
55                 }
56                 ($$lib{parent_ou}) = $dbh->selectrow_array($find_parent_ou,{},$$lib{shortname});
57         }
58 }
59
60 open FH, ">$ARGV[1]" or die "Can't open $ARGV[1] to write the map file! $!";
61 print FH Data::Dumper->Dump([$lib_map],['lib_map']);
62
63 $dbh->commit;
64