[ 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-bt.php,v 1.5 2005/11/08 14:16:07 rodolphe Exp $ 19 * $Source: /cvsroot/dolibarr/dolibarr/htdocs/telephonie/script/import-cdr-bt.php,v $ 20 * 21 * Script d'import des CDR BT 22 */ 23 24 require ("../../master.inc.php"); 25 26 $opt = getopt("f:"); 27 28 $file = $opt['f']; 29 $id_fourn = 2; 30 31 if (strlen($file) == 0) 32 { 33 print "Usage :\n php import-cdr-bt.php -f <filename>\n"; 34 exit; 35 } 36 37 /* 38 * Traitement 39 * 40 */ 41 42 $files = array(); 43 44 if (is_dir($file)) 45 { 46 $handle=opendir($file); 47 48 if ($handle) 49 { 50 $i = 0 ; 51 $var=True; 52 53 while (($xfile = readdir($handle))!==false) 54 { 55 if (is_file($file.$xfile) ) 56 { 57 if (substr($xfile, -4) == ".csv") 58 { 59 $files[$i] = $file.$xfile; 60 dolibarr_syslog($file.$xfile." ajouté"); 61 $i++; 62 } 63 else 64 { 65 dolibarr_syslog($file.$xfile." ignoré"); 66 } 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 * Renommage des fichiers 90 * 91 */ 92 $datetime = time(); 93 $month = strftime("%m", $datetime); 94 $year = strftime("%y", $datetime); 95 96 if ($month == 1) 97 { 98 $month = "12"; 99 $year = substr("00".($year - 1), -2) ; 100 } 101 else 102 { 103 $month = substr("00".($month - 1), -2) ; 104 } 105 $newfiles = array(); 106 $j = 0; 107 foreach ($files as $xfile) 108 { 109 if (is_readable($xfile)) 110 { 111 dolibarr_syslog("Traitement de ".basename($xfile)); 112 $newname = str_replace(".csv","-$month$year.csv",$xfile); 113 if (substr($xfile,-9) <> "-$month$year.csv") 114 { 115 if (rename($xfile, $newname)) 116 { 117 dolibarr_syslog("Renomme en ".$newname); 118 $newfiles[$j] = $newname; 119 $j++; 120 } 121 else 122 { 123 print "Erreur de renommage de $xfile\n"; 124 exit; 125 } 126 } 127 else 128 { 129 $newfiles[$j] = $xfile; 130 $j++; 131 } 132 } 133 } 134 135 /* 136 * Vérification du fournisseur 137 * 138 */ 139 140 $sql = "SELECT f.rowid, f.nom"; 141 $sql .= " FROM ".MAIN_DB_PREFIX."telephonie_fournisseur as f"; 142 $sql .= " WHERE f.rowid = ".$id_fourn; 143 144 if ($db->query($sql)) 145 { 146 $num = $db->num_rows(); 147 148 if ($num == 1) 149 { 150 $row = $db->fetch_row(); 151 dolibarr_syslog ("Import fichier ".$file); 152 dolibarr_syslog("Fournisseur [".$row[0]."] ".$row[1]); 153 } 154 else 155 { 156 dolibarr_syslog("Erreur Fournisseur inexistant : ".$id_fourn); 157 exit ; 158 } 159 } 160 else 161 { 162 dolibarr_syslog("Erreur recherche fournisseur"); 163 exit ; 164 } 165 166 167 /* 168 * Charge les ID de lignes 169 * 170 */ 171 172 $sql = "SELECT ligne, rowid "; 173 $sql .= " FROM ".MAIN_DB_PREFIX."telephonie_societe_ligne"; 174 175 $resql = $db->query($sql); 176 177 if ($resql) 178 { 179 $num = $db->num_rows($resql); 180 dolibarr_syslog ($num . " lignes chargées"); 181 $i = 0; 182 $ligneids = array(); 183 184 while ($i < $num) 185 { 186 $row = $db->fetch_row($resql); 187 $ligneids[$row[0]] = $row[1]; 188 $i++; 189 } 190 } 191 else 192 { 193 dolibarr_syslog("Erreur chargement des lignes"); 194 dolibarr_syslog($sql); 195 exit ; 196 } 197 198 199 $line_inserted_total = 0; 200 foreach ($newfiles as $xfile) 201 { 202 if (is_readable($xfile)) 203 { 204 if ( _verif($db, $xfile) == 0) 205 { 206 dolibarr_syslog("Lecture du fichier $xfile"); 207 208 $error = 0; 209 $line = 0; 210 $line_inserted = 0; 211 $hf = fopen ($xfile, "r"); 212 $line = 0; 213 214 if ($db->query("BEGIN")) 215 { 216 while (!feof($hf) ) 217 { 218 $cont = fgets($hf, 1024); 219 220 if (strlen(trim($cont)) > 0) 221 { 222 // 297400910,2005-03-23 08:08:08,Appels Mob.-ORANGE,0680301933, 106, .3445 223 // 297400910,2005-03-23 09:24:36,Appels Mob.-ORANGE,0675621805, 5, .0162 224 // 297400910,2005-03-23 09:36:55,Appels Mob.-ORANGE,0680301933, 57, .1852 225 226 $tabline = explode(",", $cont); 227 if (sizeof($tabline) == 6) 228 { 229 $index = $line; 230 $ligne = "0".$tabline[0]; 231 $date = substr($tabline[1],0,10); 232 233 //Retournment de la date 234 $date = substr($date, 8,2)."/".substr($date, 5,2)."/".substr($date, 0,4); 235 236 $heure = substr($tabline[1],11,8); 237 238 $numero = $tabline[3]; 239 $tarif = $tabline[2]; 240 241 $h = floor(trim($tabline[4]) / 3600); 242 $m = floor((trim($tabline[4]) - ($h * 3600)) / 60); 243 $s = (trim($tabline[4]) - ( ($h * 3600 ) + ($m * 60) ) ); 244 245 if ($h > 0) 246 { 247 $dt = $h . " h " . substr("00".$m, -2) ."mn" . substr("00".$s, -2); 248 } 249 else 250 { 251 if ($m > 0) 252 { 253 $dt = substr("00".$m,-2) ."mn" . substr("00".$s, -2); 254 } 255 else 256 { 257 $dt = "00mn".substr("00".$s, -2); 258 } 259 } 260 261 $duree_text = $dt; 262 $tarif_fourn = "NONE"; 263 $montant = trim($tabline[5]); 264 $duree_secondes = trim($tabline[4]); 265 266 if ($ligneids[$ligne] > 0) 267 { 268 $sql = "INSERT INTO ".MAIN_DB_PREFIX."telephonie_import_cdr"; 269 270 $sql .= "(idx,fk_ligne,ligne,date,heure,num,dest,dureetext,tarif,montant,duree"; 271 $sql .= ", fichier, fk_fournisseur)"; 272 273 $sql .= " VALUES ("; 274 $sql .= "$index"; 275 $sql .= ",'".$ligneids[$ligne]."'"; 276 $sql .= ",'".$ligne."'"; 277 $sql .= ",'".ereg_replace('"','',$date)."'"; 278 $sql .= ",'".ereg_replace('"','',$heure)."'"; 279 $sql .= ",'".ereg_replace('"','',$numero)."'"; 280 $sql .= ",'".addslashes(ereg_replace('"','',$tarif))."'"; 281 $sql .= ",'".ereg_replace('"','',$duree_text)."'"; 282 $sql .= ",'".ereg_replace('"','',$tarif_fourn)."'"; 283 $sql .= ",".ereg_replace(',','.',$montant); 284 $sql .= ",".$duree_secondes; 285 $sql .= ",'".basename($xfile)."'"; 286 $sql .= " ,".$id_fourn; 287 $sql .= ")"; 288 289 if(ereg("^[0-9]+$", $duree_secondes)) 290 { 291 if ($db->query($sql)) 292 { 293 $line_inserted++; 294 $line_inserted_total++; 295 } 296 else 297 { 298 dolibarr_syslog("Erreur de traitement de ligne $index"); 299 dolibarr_syslog($db->error()); 300 dolibarr_syslog($sql); 301 $error++; 302 } 303 } 304 else 305 { 306 print "Ligne : $cont ignorée\n"; 307 $error++; 308 } 309 } 310 else 311 { 312 dolibarr_syslog("Ligne : $ligne ignorée!"); 313 $error++; 314 } 315 } 316 else 317 { 318 dolibarr_syslog("Mauvais format de fichier ligne $line ".sizeof($tabline)); 319 dolibarr_syslog($cont); 320 $error++; 321 } 322 } 323 $line++; 324 } 325 if ($line <> $line_inserted) 326 { 327 dolibarr_syslog($line."/".$line_inserted." lignes traitées/insert effectués"); 328 } 329 330 if ($error == 0) 331 { 332 $db->query("COMMIT"); 333 } 334 else 335 { 336 $db->query("ROLLBACK"); 337 dolibarr_syslog("ROLLBACK"); 338 } 339 } 340 fclose($hf); 341 } 342 } 343 else 344 { 345 print "Erreur lecture : $xfile"; 346 dolibarr_syslog($xfile . " not readable"); 347 } 348 } 349 350 dolibarr_syslog($line_inserted_total." insert effectués total"); 351 352 /* 353 * Fin 354 * 355 */ 356 357 function _verif($db, $file) 358 { 359 $result = 0; 360 /* 361 * Vérifie que le fichier n'a pas déjà été chargé 362 * 363 */ 364 365 $sql = "SELECT count(fichier)"; 366 $sql .= " FROM ".MAIN_DB_PREFIX."telephonie_import_cdr"; 367 $sql .= " WHERE fichier = '".basename($file)."'"; 368 369 if ($db->query($sql)) 370 { 371 $num = $db->num_rows(); 372 373 if ($num == 1) 374 { 375 $row = $db->fetch_row(); 376 if ($row[0] > 0) 377 { 378 dolibarr_syslog ("Fichier ".$file." déjà chargé dans import-log"); 379 $result = -1; 380 } 381 } 382 else 383 { 384 dolibarr_syslog("Erreur vérif du fichier"); 385 $result = -1; 386 } 387 } 388 else 389 { 390 dolibarr_syslog("Erreur SQL vérification du fichier"); 391 $result = -1; 392 } 393 394 /* 395 * Vérifie que le fichier n'a pas déjà été traité 396 * 397 */ 398 399 $sql = "SELECT count(fichier_cdr)"; 400 $sql .= " FROM ".MAIN_DB_PREFIX."telephonie_communications_details"; 401 $sql .= " WHERE fichier_cdr = '".basename($file)."'"; 402 403 if ($db->query($sql)) 404 { 405 $num = $db->num_rows(); 406 407 if ($num == 1) 408 { 409 $row = $db->fetch_row(); 410 if ($row[0] > 0) 411 { 412 dolibarr_syslog ("Fichier ".$file." déjà traité"); 413 $result = -1; 414 } 415 } 416 else 417 { 418 dolibarr_syslog("Erreur vérif du fichier dans les comm"); 419 $result = -1; 420 } 421 } 422 else 423 { 424 dolibarr_syslog("Erreur SQL vérification du fichier dans les comm"); 425 dolibarr_syslog($sql); 426 $result = -1; 427 } 428 429 return $result; 430 } 431 432 433 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 |
![]() |