Vereinfachung.
[kivitendo-erp.git] / lxo-import / blz.php
1 <html>
2 <LINK REL="stylesheet" HREF="../css/lx-office-erp.css" TYPE="text/css" TITLE="Lx-Office stylesheet">
3 <body>
4 <?
5 /*
6 BLZimport mit Browser nach Lx-Office ERP
7 Holger Lindemann <hli@lx-system.de>
8 */
9
10
11 function ende($nr) {
12         echo "Abbruch: $nr<br>";
13         echo "Fehlende oder falsche Daten.";
14         exit(1);
15 }
16
17 if (!$_SESSION["db"]) {
18         $conffile="../config/authentication.pl";
19         if (!is_file($conffile)) {
20                 ende(4);
21         }
22 }
23 require ("import_lib.php");
24
25 function l2u($str) {
26         return iconv("ISO-8859-1", "UTF-8",$str);
27 }
28
29 if (!anmelden()) ende(5);
30 /* get DB instance */
31 $db=$_SESSION["db"]; //new myDB($login);
32
33
34 /* display help */
35 if ($_POST["ok"]=="Hilfe") {
36         echo "<br>Die erste Zeile enth&auml;lt keine Feldnamen der Daten.<br>";
37         echo "Die Datenfelder haben eine feste Breite.<br><br>"; 
38         echo "Die Daten k&ouml;nnen hier bezogen werden:<br>";
39         echo "<a http='http://www.bundesbank.de/zahlungsverkehr/zahlungsverkehr_bankleitzahlen_download.php'>";
40         echo "http://www.bundesbank.de/zahlungsverkehr/zahlungsverkehr_bankleitzahlen_download.php</a>";
41         exit(0);
42 } else if ($_POST) {
43         $test=$_POST["test"];
44
45         clearstatcache ();
46
47         /* no data? */
48         if (empty($_FILES["Datei"]["name"]))
49                 ende (2);
50
51         /* copy file */
52         if (!move_uploaded_file($_FILES["Datei"]["tmp_name"],"blz.txt")) {
53                 echo "Upload von Datei fehlerhaft.";
54                 echo $_FILES["Datei"]["error"], "<br>";
55                 ende (2);
56         } 
57
58         /* check if file is really there */
59         if (!file_exists("blz.txt")) 
60                 ende(3);
61
62         $sqlins="INSERT INTO blz_data (blz,fuehrend,bezeichnung,plz,ort,kurzbez,pan,bic,pzbm,nummer,aekz,bl,folgeblz) ";
63         $sqlins.="VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s',%d,'%s','%s','%s')";
64         $teststr="<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%d</td><td>%s</td><td>%s</td><td>%s</td></tr>\n";
65         $sqldel="delete from blz_data";
66         $ok="true";
67         $cnt=0;
68         $f=fopen("blz.txt","r");
69         if ($test) echo "Testdurchlauf <br><table>\n";
70         $i=0;
71         $start=time();
72         $rs = $db->getAll("SELECT current_setting('server_encoding')");
73         $srvencoding = $rs[0]['current_setting'];
74         $rs = $db->getAll("SELECT current_setting('client_encoding')");
75         $cliencoding = $rs[0]['current_setting'];
76         echo "SRV: $srvencoding - - CLI: $cliencoding<br>";
77         //Datenfile ist immer Latin!!
78         //zwei Möglichkeiten der Zeichenwandlung. Was ist besser??
79         if ($f) {
80                 //Cliententcoding nicht umstellen:
81                 //if (!$test) { $rc=$db->query("BEGIN");};
82                 //Cliententcoding auf Latin:
83                 if (!$test) { $rc=$db->query("BEGIN"); if ($cliencoding=="UTF8") $db->query("SET CLIENT_ENCODING TO 'latin-9'"); };
84                 if (!$test) $rc=$db->query($sqldel);
85                 while (($zeile=fgets($f,256)) != FALSE) {
86                         $cnt++;
87                         if (!$test) {
88                                 //Client nicht umgestellt, Zeichen wandeln
89                                 /*$sql=sprintf($sqlins,substr($zeile,0,8),substr($zeile,8,1),l2u(substr($zeile,9,58)),substr($zeile,67,5),
90                                                 l2u(substr($zeile,72,35)),l2u(substr($zeile,107,27)),substr($zeile,134,5),substr($zeile,139,11),
91                                                 substr($zeile,150,2),substr($zeile,152,6),substr($zeile,158,1),substr($zeile,159,1),
92                                                 substr($zeile,160,8));*/
93                                 //Client umgestellt + und auch bei nicht UTF-Client:
94                                 $sql=sprintf($sqlins,substr($zeile,0,8),substr($zeile,8,1),substr($zeile,9,58),substr($zeile,67,5),
95                                                 substr($zeile,72,35),substr($zeile,107,27),substr($zeile,134,5),substr($zeile,139,11),
96                                                 substr($zeile,150,2),substr($zeile,152,6),substr($zeile,158,1),substr($zeile,159,1),
97                                                 substr($zeile,160,8));
98                                 $rc=$db->query($sql);
99                                 if ($cnt % 10 == 0) { 
100                                         if ($cnt % 1000 == 0) { $x=time()-$start; echo sprintf("%dsec %6d<br>",$x,$cnt); }
101                                         else if ($cnt % 100 == 0) { echo "!"; }
102                                         else { echo '.'; }
103                                         flush(); 
104                                 }
105                         } else {
106                                 echo sprintf($teststr,substr($zeile,0,8),substr($zeile,8,1),l2u(substr($zeile,9,58)),substr($zeile,67,5),
107                                                 l2u(substr($zeile,72,35)),l2u(substr($zeile,107,27)),substr($zeile,134,5),substr($zeile,139,11),
108                                                 substr($zeile,150,2),substr($zeile,152,6),substr($zeile,158,1),substr($zeile,159,1),
109                                                 substr($zeile,160,8));
110                                 $rc=true;
111                         }
112                         if (!$rc) { 
113                                 $ok=false;
114                                 break;
115                         }
116                         $i++;
117                 }
118                 if ($ok) {
119                         $rc=$db->query("COMMIT");
120                         echo "<br>$i Daten erfolgreich importierti<br>";
121                         if ($cliencoding=="UTF8") $db->query("SET CLIENT_ENCODING TO 'UTF8'");
122                         $stop=time();
123                         echo $stop-$start." Sekunden";
124                 } else {
125                         $rc=$db->query("ROLLBACK");
126                         ende(6);
127                 }
128         } else {
129                 ende(4);
130         }
131         echo "</table>";
132 } else {
133 ?>
134
135 <p class="listtop">BLZ-Import f&uuml;r die ERP<p>
136 Achtung!! Die bestehenden BLZ-Daten werden zun&auml;chst gel&ouml;scht.
137 <br>
138 <form name="import" method="post" enctype="multipart/form-data" action="blz.php">
139 <input type="hidden" name="MAX_FILE_SIZE" value="20000000">
140 <input type="hidden" name="login" value="<?= $login ?>">
141 <table>
142 <tr><td><input type="submit" name="ok" value="Hilfe"></td><td></td></tr>
143 <tr><td>Test</td><td><input type="checkbox" name="test" value="1">ja</td></tr>
144 <tr><td>Daten</td><td><input type="file" name="Datei"></td></tr>
145 <tr><td></td><td><input type="submit" name="ok" value="Import"></td></tr>
146 </table>
147 </form>
148 <? }; ?>