--- convert.pl 2001/06/12 08:38:53 1.1.1.1 +++ convert.pl 2001/06/19 13:39:05 1.7 @@ -3,10 +3,11 @@ $| = 1; my $debug = 0; -my $raise = 1; +my $raise = 0; my $log = "log"; my $xbase = "./registar"; my $db = "registar"; +my $refresh_timeout = 10; open(LOG, ">$log") || die "can't open log: $!"; @@ -15,7 +16,7 @@ { 'RaiseError' => $raise }) || die $DBI::errstr; my $pgdbh = DBI->connect("DBI:Pg:dbname=$db", "dpavlin", "", { 'RaiseError' => $raise }) || die $DBI::errstr; -# $SIG{'__WARN__'} = sub { }; # inhibit DBI warnings. +$SIG{'__WARN__'} = sub { }; # inhibit DBI warnings. my @tables = (); if (@ARGV > 0) { @@ -44,7 +45,7 @@ # $dt = "NULL"; $dt = undef; } - return $pgdbh->quote($dt); + return $dt; } sub ConvertBool { @@ -56,16 +57,17 @@ sub ConvertString { my $str = join("\n", @_); - $str =~ s/(^[\x00-\x1F]+|[\x00-\x1F]+$)//gs; + $str =~ s/[\x00-\x1F]+//gs; $str =~ s/\s*\x8D?\s*\r?\s*\n\s*/\n/gs; $str =~ s/(^\s+|\s+$)//gs; - $str =~ s/(^"|"$)//g; + $str =~ s/(^["']|["']$)//g; # char recoding #$str =~ s/đ/ð/g; #$str =~ s/č/è/g; #$str =~ s/ý/¾/g; $str =~ tr/{|`~}[\\@^]/¹ð¾èæ©Ð®ÈÆ/; - return $pgdbh->quote($str); +# return $pgdbh->quote($str); + return $str; } sub Progress { @@ -79,10 +81,31 @@ return "$msg\n"; } +sub CondInsert { + my $table = shift @_; + my $name = shift @_; + my $key = shift @_; + my $fields = shift @_; + my @values=@_; # chop argument(s) are values array + my $sql = "SELECT count($name) FROM $table WHERE ($name = ?)"; + my $sth = $pgdbh->prepare($sql); + my $ret = $sth->execute($key); + my ($cnt) = $sth->fetchrow_array(); + return 0 if (!$cnt == 0); + my @valtpl; + for (my $i=0; $i<=$#values; $i++) { push @valtpl,"?" } + $sql = "INSERT INTO $table $fields VALUES (".join(",",@valtpl).")"; + $sth = $pgdbh->prepare($sql); + $ret = $sth->execute(@values); + my $err = $pgdbh->errstr; + print &Log("[$sql] [".join(",",@values)."]".$err) if ($err); + return $ret; +} + sub tblATK { my ($table, $fields, $data) = @_; my $count = 0; - my $sth = $pgdbh->prepare("INSERT INTO atk_inn (sifra, naziv, razno) VALUES (?, ?, ?)"); + my $sth = $pgdbh->prepare("INSERT INTO $table (sifra, naziv, razno) VALUES (?, ?, ?)"); unless ($sth) { print &Log("[$table-prepare] ".$pgdbh->errstr); return 0; @@ -101,7 +124,7 @@ $tmp ||= 0; $tmp = 0 if ($tmp < 0); $count += $tmp; - if (++$refresh >= 20) { + if (++$refresh >= $refresh_timeout) { $refresh = 0; print Progress($count, scalar(@$data)); } @@ -139,7 +162,7 @@ } $tmp = 0 if ($tmp < 0); $count += $tmp; - if (++$refresh >= 20) { + if (++$refresh >= $refresh_timeout) { $refresh = 0; print Progress($count, scalar(@$data)); } @@ -154,61 +177,111 @@ sub tblLijek { my ($table, $fields, $data) = @_; - # ... - return 0; -} - -sub tblProiz { - my ($table, $fields, $data) = @_; my $count = 0; - my $sth = $pgdbh->prepare("INSERT INTO proizvodjaci (sifra, naziv, drzava, zastupnistvo, mjesto, zip, ulica_i_broj, razno, telefon, fax) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + my $sth = $pgdbh->prepare("INSERT INTO lijekovi (sifra, naziv, sif_atk, sif_inn, sif_proizvodjac, pakovanje, sastav_1, sastav_2, sif_nacin_izdavanja, sif_list_fond, sif_trudnoca, sif_dojencad, sif_vozac, sif_droga, cijena, sif_med, razno, glav_razno, djelovanje, indikacije, oprez) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); unless ($sth) { print &Log("[$table-prepare] ".$pgdbh->errstr); return 0; } my $refresh = 0; foreach my $row (@$data) { - my ($sifra, $naziv, $drzava, $zastupnistvo, $zip, $mjesto, - $ulica_i_broj, $razno, $tel, $fax) = @$row; + my ($sifra, $nsifra, $naziv, $sif_proizvodjac, $naz_proizvodjac, + $drzava, $zastupnistvo, $mjesto, $ulica_i_broj, $sif_inn, + $naz_inn, $sif_atk0, $naz_atk0, $sif_atk, $naz_atk, + $pakovanje, $sastav_1, $sastav_2, $sif_nacin_izdavanja, + $naz_nacin_izdavanja, $sif_list_fond, $naz_list_fond, + $sif_trudnoca, $naz_trudnoca, $sif_dojencad, $naz_dojencad, + $sif_vozac, $naz_vozac, $sif_droga, $cijena, $razno, + $sif_med, $glav_razno, $prazno, $djelovanje, $indikacije, + $oprez, $tel, $fax) = @$row; $sifra += 0; # force numeric $naziv = &ConvertString($naziv); + $sif_proizvodjac += 0; # force numeric + $naz_proizvodjac = &ConvertString($naz_proizvodjac); $drzava = &ConvertString($drzava); $zastupnistvo = &ConvertString($zastupnistvo); - $zip = &ConvertString($zip); $mjesto = &ConvertString($mjesto); $ulica_i_broj = &ConvertString($ulica_i_broj); + $sif_inn = &ConvertString($sif_inn); + $naz_inn = &ConvertString($naz_inn); + $sif_atk = &ConvertString($sif_atk); + $naz_atk = &ConvertString($naz_atk); + $pakovanje = &ConvertString($pakovanje); + $sastav_1 = &ConvertString($sastav_1); + $sastav_2 = &ConvertString($sastav_2); + $sif_nacin_izdavanja = &ConvertString($sif_nacin_izdavanja); + $naz_nacin_izdavanja = &ConvertString($naz_nacin_izdavanja); + $sif_list_fond = &ConvertString($sif_list_fond); + $naz_list_fond = &ConvertString($naz_list_fond); + $sif_trudnoca = &ConvertString($sif_trudnoca); + $naz_trudnoca = &ConvertString($naz_trudnoca); + $sif_dojencad = &ConvertString($sif_dojencad); + $naz_dojencad = &ConvertString($naz_dojencad); + $sif_vozac = &ConvertString($sif_vozac); + $naz_vozac = &ConvertString($naz_vozac); + $sif_droga = &ConvertString($sif_droga); + $cijena = &ConvertString($cijena); $razno = &ConvertString($razno); + $sif_med += 0; # force numeric + $glav_razno = &ConvertString($glav_razno); + $djelovanje = &ConvertString($djelovanje); + $indikacije = &ConvertString($indikacije); + $oprez = &ConvertString($oprez); $tel = &ConvertString($tel); $fax = &ConvertString($fax); - my $tmp = $sth->execute($sifra, $naziv, $drzava, - $zastupnistvo, $zip, $mjesto, $ulica_i_broj, - $razno, $tel, $fax); + CondInsert("atk", "sifra", $sif_atk, + "(sifra, naziv, razno)", ($sif_atk, $naz_atk, '')); + CondInsert("inn", "sifra", $sif_inn, + "(sifra, naziv, razno)", ($sif_inn, $naz_inn, '')); + CondInsert("proizvodjaci", "sifra", $sif_proizvodjac, + "(sifra, naziv, drzava, zastupnistvo, mjesto, zip, ulica_i_broj, razno, telefon, fax)", + ($sif_proizvodjac, $naz_proizvodjac, $drzava, $zastupnistvo, $mjesto, '', $ulica_i_broj, '', $tel, $fax)); + CondInsert("nacin_izdavanja", "sifra", $sif_nacin_izdavanja, + "(sifra, opis)", ($sif_nacin_izdavanja, $naz_nacin_izdavanja)); + CondInsert("list_fond", "sifra", $sif_list_fond, + "(sifra, opis)", ($sif_list_fond, $naz_list_fond)); + CondInsert("trudnoca", "sifra", $sif_trudnoca, + "(sifra, opis)", ($sif_trudnoca, $naz_trudnoca)); + CondInsert("dojencad", "sifra", $sif_dojencad, + "(sifra, opis)", ($sif_dojencad, $naz_dojencad)); + CondInsert("vozac", "sifra", $sif_vozac, + "(sifra, opis)", ($sif_vozac, $naz_vozac)); + CondInsert("droga", "sifra", $sif_droga, + "(sifra, opis)", ($sif_droga, '')); + my $tmp = $sth->execute($sifra, $naziv, $sif_atk, $sif_inn, + $sif_proizvodjac, $pakovanje, $sastav_1, $sastav_2, + $sif_nacin_izdavanja, $sif_list_fond, $sif_trudnoca, + $sif_dojencad, $sif_vozac, $sif_droga, $cijena, + $sif_med, $razno, $glav_razno, $djelovanje, + $indikacije, $oprez); unless (defined($tmp)) { print &Log("[$table-execute] ".$pgdbh->errstr); next; } $tmp = 0 if ($tmp < 0); $count += $tmp; - if (++$refresh >= 20) { + if (++$refresh >= $refresh_timeout) { $refresh = 0; print Progress($count, scalar(@$data)); } } $sth->finish(); - return 0; + return $count; } -sub tblVodeca { +sub tblProiz { my ($table, $fields, $data) = @_; my $count = 0; - my $sth = $pgdbh->prepare("INSERT INTO vodeca (sifra, naziv) VALUES (?, ?)"); + my $sth = $pgdbh->prepare("INSERT INTO proizvodjaci (sifra, naziv, drzava, zastupnistvo, mjesto, zip, ulica_i_broj, razno, telefon, fax) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); unless ($sth) { print &Log("[$table-prepare] ".$pgdbh->errstr); return 0; } my $refresh = 0; foreach my $row (@$data) { - my ($sifra, $naziv) = @$row; + my ($sifra, $naziv, $drzava, $zastupnistvo, $zip, $mjesto, + $ulica_i_broj, $razno, $tel, $fax) = @$row; + $sifra += 0; # force numeric $naziv = &ConvertString($naziv); $drzava = &ConvertString($drzava); $zastupnistvo = &ConvertString($zastupnistvo); @@ -219,7 +292,7 @@ $tel = &ConvertString($tel); $fax = &ConvertString($fax); my $tmp = $sth->execute($sifra, $naziv, $drzava, - $zastupnistvo, $zip, $mjesto, $ulica_i_broj, + $zastupnistvo, $mjesto, $zip, $ulica_i_broj, $razno, $tel, $fax); unless (defined($tmp)) { print &Log("[$table-execute] ".$pgdbh->errstr); @@ -227,14 +300,56 @@ } $tmp = 0 if ($tmp < 0); $count += $tmp; - if (++$refresh >= 20) { + if (++$refresh >= $refresh_timeout) { $refresh = 0; print Progress($count, scalar(@$data)); } } $sth->finish(); - # ... - return 0; + return $count; +} + +sub tblVodeca { + my ($table, $fields, $data) = @_; + my $count = 0; + my $refresh = 0; + foreach my $row (@$data) { + my ($sifra, $naziv) = @$row; + $sifra =~ s/^(..)//; + my $code = $1; + $sifra = &ConvertString($sifra); + $naziv = &ConvertString($naziv); + my $tmp = 0; + if ($code eq "06") { + $tmp += CondInsert("nacin_izdavanja", "sifra", $sifra, + "(sifra, opis)", ($sifra, $naziv)); + } elsif ($code eq "07") { + $tmp += CondInsert("list_fond", "sifra", $sifra, + "(sifra, opis)", ($sifra, $naziv)); + } elsif ($code eq "08") { + $tmp += CondInsert("trudnoca", "sifra", $sifra, + "(sifra, opis)", ($sifra, $naziv)); + } elsif ($code eq "09") { + $tmp += CondInsert("dojencad", "sifra", $sifra, + "(sifra, opis)", ($sifra, $naziv)); + } elsif ($code eq "10") { + $tmp += CondInsert("vozac", "sifra", $sifra, + "(sifra, opis)", ($sifra, $naziv)); + } elsif ($code eq "11") { + $tmp += CondInsert("droga", "sifra", $sifra, + "(sifra, opis)", ($sifra, $naziv)); + } else { + # UNKNOWN CODE!!! + print &Log("[WARNING: unknown code \"$code\"]"); + } + $tmp = 0 if ($tmp < 0); + $count += $tmp; + if (++$refresh >= $refresh_timeout) { + $refresh = 0; + print Progress($count, scalar(@$data)); + } + } + return $count; } my (%dbf) = ( @@ -294,5 +409,5 @@ close(LOG); $xbdbh->disconnect(); $pgdbh->disconnect(); -print "Log left in file \"$log\"\n"; +print "Log left in file \"$log\".\n"; exit $?;