1 |
#!/usr/local/bin/perl -w |
2 |
|
3 |
#use strict; |
4 |
|
5 |
# unrolls org.jed to text files |
6 |
|
7 |
my $debug=0; |
8 |
|
9 |
my $sap_dir="/data/sap/tkc/telefoni"; |
10 |
|
11 |
use DBI; |
12 |
my $dbh = DBI->connect("DBI:Pg:dbname=informatika","","") || die DBI::errstr; |
13 |
|
14 |
# clean tables |
15 |
$sql="delete from sap_osobe"; |
16 |
$dbh->do($sql) || die "$sql",$dbh->errstr(); |
17 |
|
18 |
$sql="delete from sap_oj"; |
19 |
$dbh->do($sql) || die "$sql",$dbh->errstr(); |
20 |
|
21 |
my %orgjed_parent; |
22 |
my %orgjed; |
23 |
my %orgjed_sap; |
24 |
|
25 |
my @orgjed_arr; |
26 |
|
27 |
|
28 |
sub initcap { |
29 |
my ($str) = $_[0]; |
30 |
$str=~tr/ðèæÐÈÆ/¹ð¾èæ©Ð®ÈÆ/; # 1250 -> iso8859-2 |
31 |
my ($lower,$upper); |
32 |
$str=~s/ +/ /g; |
33 |
$str=~s/^ +//g; |
34 |
$str=~s/ +$//g; |
35 |
$lower=$upper=$str; |
36 |
$lower=~tr/[A-Z]©ÐÈÆ®/[a-z]¹ðèæ¾/; |
37 |
my $new; |
38 |
for (my $i=0; $i<length($lower); $i++) { |
39 |
my $cl=substr($lower,$i,1); |
40 |
my $cu=substr($upper,$i,1); |
41 |
if ($i==0) { |
42 |
$new.=$cu; |
43 |
} elsif ($cl =~ /[ \.-]/) { |
44 |
$i++; |
45 |
$new.=$cl.substr($upper,$i,1); |
46 |
} else { |
47 |
$new.=$cl; |
48 |
} |
49 |
} |
50 |
return($new); |
51 |
} |
52 |
|
53 |
sub unroll_orgjed { |
54 |
my $foo = $_[0]; |
55 |
my $oj=$orgjed{$foo}; |
56 |
# print $foo,"\t",$orgjed{$foo},"\n"; |
57 |
while (defined($orgjed_parent{$foo}) && $orgjed_parent{$foo} != 1) { |
58 |
$foo=$orgjed_parent{$foo}; |
59 |
$oj="$orgjed{$foo} >> $oj"; |
60 |
} |
61 |
return $oj; |
62 |
} |
63 |
|
64 |
|
65 |
###----------- organizacijske jedinice |
66 |
|
67 |
open(OJ,"$sap_dir/ZRHRTEL2") || die "ZRHRTEL2: $!"; |
68 |
while(<OJ>) { |
69 |
chomp; |
70 |
if (m,^(\d{8})(\d{8})$,) { |
71 |
my($parent,$child) = ($1,$2); |
72 |
$orgjed_parent{$child}=$parent; |
73 |
print "oj: $child -> $parent\n" if ($debug); |
74 |
} else { |
75 |
warn "can't parse ZRHRTEL2 line '$_' if ($debug)"; |
76 |
} |
77 |
} |
78 |
close(OJ); |
79 |
|
80 |
open(OJ,"$sap_dir/ZRHRTEL3") || die "ZRHRTEL3: $!"; |
81 |
while(<OJ>) { |
82 |
chomp; |
83 |
if (m,^(\d{8})(.{12})(.+)$,) { |
84 |
my ($oj_sif,$sap_sif,$naziv) = ($1,$2,$3); |
85 |
$orgjed{$oj_sif}=$naziv; |
86 |
$orgjed_sap{$oj_sif}=$sap_sif; |
87 |
print "$oj_sif..$sap_sif..$naziv\n" if ($debug); |
88 |
push @orgjed_arr,$oj_sif; |
89 |
} else { |
90 |
warn "can't parse ZRHRTEL3 line '$_'" if ($debug); |
91 |
} |
92 |
} |
93 |
close(OJ); |
94 |
|
95 |
##------------------------------------ |
96 |
|
97 |
sub save_sap_oj { |
98 |
my $sap_oj = $_[0]; |
99 |
$sap_name=unroll_orgjed($sap_oj); |
100 |
# $sql="insert into sap_oj values ('$sap_oj','$sap_name')"; |
101 |
$sql="insert into sap_oj (sifra_oj,naziv) select '$sap_oj','$sap_name' where not exists (select sifra_oj from sap_oj where sifra_oj='$sap_oj')"; |
102 |
$dbh->do("$sql") || die $dbh->errstr(); |
103 |
} |
104 |
|
105 |
###----------- osobe |
106 |
|
107 |
open(IN,"$sap_dir/ZRHRTEL1") || die "ZRHRTEL1"; |
108 |
while(<IN>) { |
109 |
chomp; |
110 |
my $bar=$_; |
111 |
my $czs=$bar; |
112 |
$czs=~tr/¹ð¾èæ©Ð®ÈÆ[A-Z]/sdzccsdzcc[a-z]/; |
113 |
|
114 |
if (m,(\d{6})(\d{4})(\d{8})(.{24})(.+),) { |
115 |
my ($sifra,$mt,$orgjed,$ime,$prezime) = ($1,$2,$3,$4,$5); |
116 |
$ime=initcap($ime); |
117 |
$prezime=initcap($prezime); |
118 |
print "$sifra\t$ime $prezime\t$orgjed\n"; |
119 |
save_sap_oj($orgjed); |
120 |
$dbh->do("insert into sap_osobe values ('$sifra','$ime','$prezime','$mt','$orgjed')") || $dbh->do("update sap_osobe set ime='$ime',prezime='$prezime',mt='$mt',sap_oj='$orgjed' where sifra='$sifra'") || die $dbh->errstr(); |
121 |
} else { |
122 |
print "skipped: $_\n"; |
123 |
} |
124 |
} |
125 |
close(IN); |
126 |
|