| [ Index ] |
|
Code source de Dolibarr 2.0.1 |
1 <?PHP 2 /* Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org> 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation; either version 2 of the License, or 7 * (at your option) any later version. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write to the Free Software 16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 * 18 * $Id: import-cdr-ftp.php,v 1.7 2005/11/24 09:26:33 rodolphe Exp $ 19 * $Source: /cvsroot/dolibarr/dolibarr/htdocs/telephonie/script/import-cdr-ftp.php,v $ 20 * 21 * Script d'import des CDR 22 */ 23 24 require ("../../master.inc.php"); 25 26 $opt = getopt("f:i:"); 27 28 /* 29 $file = $opt['f']; 30 $id_fourn = $opt['i']; 31 if (strlen($file) == 0 || strlen($id_fourn) == 0) 32 { 33 print "Usage :\n php import-cdr-bt.php -f <filename> -i <id_fournisseur>\n"; 34 exit; 35 } 36 */ 37 $file = DOL_DATA_ROOT."/telephonie/CDR/atraiter/"; 38 $id_fourn = 4; 39 40 /* 41 * Traitement 42 * 43 */ 44 45 $files = array(); 46 47 if (is_dir($file)) 48 { 49 $handle=opendir($file); 50 51 if ($handle) 52 { 53 $i = 0 ; 54 $var=True; 55 56 while (($xfile = readdir($handle))!==false) 57 { 58 if (is_file($file.$xfile) && substr($xfile, -4) == ".csv") 59 { 60 $files[$i] = $file.$xfile; 61 dolibarr_syslog($xfile." ajouté"); 62 $i++; 63 } 64 else 65 { 66 dolibarr_syslog($xfile." ignoré"); 67 } 68 } 69 70 closedir($handle); 71 } 72 else 73 { 74 dolibarr_syslog("Impossible de libre $file"); 75 exit ; 76 } 77 } 78 elseif (is_file($file)) 79 { 80 $files[0] = $file; 81 } 82 else 83 { 84 dolibarr_syslog("Impossible de libre $file"); 85 exit ; 86 } 87 88 /* 89 * Vérification du fournisseur 90 * 91 */ 92 93 $sql = "SELECT f.rowid, f.nom"; 94 $sql .= " FROM ".MAIN_DB_PREFIX."telephonie_fournisseur as f"; 95 $sql .= " WHERE f.rowid = ".$id_fourn; 96 97 if ($db->query($sql)) 98 { 99 $num = $db->num_rows(); 100 101 if ($num == 1) 102 { 103 $row = $db->fetch_row(); 104 dolibarr_syslog ("Import fichier ".$file); 105 dolibarr_syslog("Fournisseur [".$row[0]."] ".$row[1]); 106 } 107 else 108 { 109 dolibarr_syslog("Erreur Fournisseur inexistant : ".$id_fourn); 110 exit ; 111 } 112 } 113 else 114 { 115 dolibarr_syslog("Erreur recherche fournisseur"); 116 exit ; 117 } 118 119 /* 120 * Vérification des fichiers traités 121 * 122 */ 123 $fichiers = array(); 124 $sql = "SELECT distinct(fichier_cdr)"; 125 $sql .= " FROM ".MAIN_DB_PREFIX."telephonie_communications_details"; 126 if ($db->query($sql)) 127 { 128 while ($row = $db->fetch_row($resql)) 129 { 130 array_push($fichiers, $row[0]); 131 } 132 $db->free($resql); 133 } 134 else 135 { 136 dolibarr_syslog("Erreur recherche fournisseur"); 137 } 138 $sql = "SELECT distinct(fichier)"; 139 $sql .= " FROM ".MAIN_DB_PREFIX."telephonie_import_cdr"; 140 if ($db->query($sql)) 141 { 142 while ($row = $db->fetch_row($resql)) 143 { 144 array_push($fichiers, $row[0]); 145 } 146 $db->free($resql); 147 } 148 else 149 { 150 dolibarr_syslog("Erreur recherche fournisseur"); 151 exit ; 152 } 153 /* 154 * Charge les ID de lignes 155 * 156 */ 157 158 $sql = "SELECT ligne, rowid "; 159 $sql .= " FROM ".MAIN_DB_PREFIX."telephonie_societe_ligne"; 160 161 $resql = $db->query($sql); 162 163 if ($resql) 164 { 165 $num = $db->num_rows($resql); 166 dolibarr_syslog ($num . " lignes chargées"); 167 $i = 0; 168 $ligneids = array(); 169 170 while ($i < $num) 171 { 172 $row = $db->fetch_row($resql); 173 $ligneids[$row[0]] = $row[1]; 174 $i++; 175 } 176 } 177 else 178 { 179 dolibarr_syslog("Erreur chargement des lignes"); 180 dolibarr_syslog($sql); 181 exit ; 182 } 183 184 foreach ($files as $xfile) 185 { 186 if (is_readable($xfile)) 187 { 188 if ( _verif($db, $xfile, $fichiers) == 0) 189 { 190 dolibarr_syslog("Lecture du fichier $xfile"); 191 192 $error = 0; 193 $line = 0; 194 $line_inserted = 0; 195 $hf = fopen ($xfile, "r"); 196 $line = 0; 197 198 if ($db->query("BEGIN")) 199 { 200 while (!feof($hf)) 201 { 202 $cont = fgets($hf, 1024); 203 204 if (strlen(trim($cont)) > 0) 205 { 206 207 if ($line == 0) 208 { 209 $headers = array(); 210 $headers = explode(";",$cont); 211 //print_r($headers); 212 } 213 else 214 { 215 $tabline = explode(";", $cont); 216 if (sizeof($tabline) == 24) 217 { 218 //print_r($tabline); 219 $index = $line; 220 $ligne = "0".$tabline[11]; 221 $date = substr($tabline[12],0,10); 222 $date = substr($date, 8,2)."/".substr($date, 5,2)."/".substr($date, 0,4); 223 224 $heure = substr($tabline[12],11,8); 225 if ($tabline[8] == "3") 226 { 227 $numero = "0".$tabline[9]; 228 } 229 230 if ($tabline[8] == "4") 231 { 232 $numero = "00".$tabline[9]; 233 } 234 235 $tarif = $tabline[14]; 236 237 $h = floor(trim($tabline[13]) / 3600); 238 $m = floor((trim($tabline[13]) - ($h * 3600)) / 60); 239 $s = (trim($tabline[13]) - ( ($h * 3600 ) + ($m * 60) ) ); 240 241 if ($h > 0) 242 { 243 $dt = $h . " h " . substr("00".$m, -2) ."mn" . substr("00".$s, -2); 244 } 245 else 246 { 247 if ($m > 0) 248 { 249 $dt = substr("00".$m,-2) ."mn" . substr("00".$s, -2); 250 } 251 else 252 { 253 $dt = "00mn".substr("00".$s, -2); 254 } 255 } 256 257 $duree_text = $dt; 258 $tarif_fourn = "NONE"; 259 $montant = trim($tabline[15]); 260 $duree_secondes = trim($tabline[13]); 261 262 if ($ligneids[$ligne] > 0) 263 { 264 if ($duree_secondes > 0) 265 { 266 $sql = "INSERT INTO ".MAIN_DB_PREFIX."telephonie_import_cdr"; 267 $sql .= "(idx,fk_ligne,ligne,date,heure,num,dest,dureetext,tarif,montant,duree"; 268 $sql .= ", fichier, fk_fournisseur)"; 269 $sql .= " VALUES ("; 270 $sql .= "$index"; 271 $sql .= ",'".$ligneids[$ligne]."'"; 272 $sql .= ",'".$ligne."'"; 273 $sql .= ",'".ereg_replace('"','',$date)."'"; 274 $sql .= ",'".ereg_replace('"','',$heure)."'"; 275 $sql .= ",'".ereg_replace('"','',$numero)."'"; 276 $sql .= ",'".addslashes(ereg_replace('"','',$tarif))."'"; 277 $sql .= ",'".ereg_replace('"','',$duree_text)."'"; 278 $sql .= ",'".ereg_replace('"','',$tarif_fourn)."'"; 279 $sql .= ",".ereg_replace(',','.',$montant); 280 $sql .= ",".$duree_secondes; 281 $sql .= ",'".basename($xfile)."'"; 282 $sql .= " ,".$id_fourn; 283 $sql .= ")"; 284 285 if(ereg("^[0-9]+$", $duree_secondes)) 286 { 287 if ($db->query($sql)) 288 { 289 $line_inserted++; 290 } 291 else 292 { 293 dolibarr_syslog("Erreur de traitement de ligne $index"); 294 dolibarr_syslog($db->error()); 295 dolibarr_syslog($sql); 296 $error++; 297 } 298 } 299 else 300 { 301 print "Ligne : $cont ignorée\n"; 302 $error++; 303 } 304 } 305 } 306 else 307 { 308 dolibarr_syslog("Ligne : $ligne ignorée ! log write in /tmp/$ligne.import"); 309 $fp = fopen("/tmp/$ligne.import","w"); 310 if ($fp) 311 { 312 fwrite($fp, $cont); 313 foreach($tabline as $logtab) 314 { 315 fwrite($fp, $logtab); 316 } 317 fclose($fp); 318 } 319 $error++; 320 } 321 322 } 323 else 324 { 325 dolibarr_syslog("Mauvais format de fichier ligne $line ".sizeof($tabline)); 326 dolibarr_syslog($cont); 327 $error++; 328 } 329 } 330 } 331 $line++; 332 } 333 334 dolibarr_syslog($line." lignes traitées dans le fichier"); 335 dolibarr_syslog($line_inserted." insert effectués"); 336 337 if ($error == 0) 338 { 339 $db->query("COMMIT"); 340 } 341 else 342 { 343 $db->query("ROLLBACK"); 344 dolibarr_syslog("ROLLBACK"); 345 } 346 347 } 348 349 fclose($hf); 350 } 351 } 352 else 353 { 354 print "Erreur lecture : $xfile"; 355 dolibarr_syslog($xfile . " not readable"); 356 } 357 } 358 359 360 function _verif($db, $file, $fichiers) 361 { 362 $result = 0; 363 /* 364 * Vérifie que le fichier n'a pas déjà été chargé 365 * 366 */ 367 if (in_array (basename($file), $fichiers)) 368 { 369 dolibarr_syslog ("Fichier ".basename($file)." déjà chargé/traité"); 370 $result = -1; 371 } 372 373 374 /* 375 $sql = "SELECT count(fichier)"; 376 $sql .= " FROM ".MAIN_DB_PREFIX."telephonie_import_cdr"; 377 $sql .= " WHERE fichier = '".basename($file)."'"; 378 379 if ($db->query($sql)) 380 { 381 $num = $db->num_rows(); 382 383 if ($num == 1) 384 { 385 $row = $db->fetch_row(); 386 if ($row[0] > 0) 387 { 388 dolibarr_syslog ("Fichier ".$file." déjà chargé dans import-log"); 389 $result = -1; 390 } 391 } 392 else 393 { 394 dolibarr_syslog("Erreur vérif du fichier"); 395 $result = -1; 396 } 397 } 398 else 399 { 400 dolibarr_syslog("Erreur SQL vérification du fichier"); 401 $result = -1; 402 } 403 404 $sql = "SELECT count(fichier_cdr)"; 405 $sql .= " FROM ".MAIN_DB_PREFIX."telephonie_communications_details"; 406 $sql .= " WHERE fichier_cdr = '".basename($file)."'"; 407 408 if ($db->query($sql)) 409 { 410 $num = $db->num_rows(); 411 412 if ($num == 1) 413 { 414 $row = $db->fetch_row(); 415 if ($row[0] > 0) 416 { 417 dolibarr_syslog ("Fichier ".$file." déjà traité"); 418 $result = -1; 419 } 420 } 421 else 422 { 423 dolibarr_syslog("Erreur vérif du fichier dans les comm"); 424 $result = -1; 425 } 426 } 427 else 428 { 429 dolibarr_syslog("Erreur SQL vérification du fichier dans les comm"); 430 dolibarr_syslog($sql); 431 $result = -1; 432 } 433 */ 434 return $result; 435 } 436 437 return $error;
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
| Généré le : Mon Nov 26 12:29:37 2007 | par Balluche grâce à PHPXref 0.7 |
|