[ 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-bt.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-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;


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