[ Index ]
 

Code source de Dolibarr 2.0.1

Accédez au Source d'autres logiciels libres

Classes | Fonctions | Variables | Constantes | Tables

title

Body

[fermer]

/htdocs/telephonie/script/ -> import-cdr-ftp.php (source)

   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;


Généré le : Mon Nov 26 12:29:37 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics