[ Index ]
 

Code source de Dolibarr 2.0.1

Accédez au Source d'autres logiciels libres

Classes | Fonctions | Variables | Constantes | Tables

title

Body

[fermer]

/scripts/ -> prelevement.php (source)

   1  <?PHP
   2  /* Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
   3   * Copyright (C) 2005 Laurent Destailleur  <eldy@users.sourceforge.net>
   4   *
   5   * This program is free software; you can redistribute it and/or modify
   6   * it under the terms of the GNU General Public License as published by
   7   * the Free Software Foundation; either version 2 of the License, or
   8   * (at your option) any later version.
   9   *
  10   * This program is distributed in the hope that it will be useful,
  11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13   * GNU General Public License for more details.
  14   *
  15   * You should have received a copy of the GNU General Public License
  16   * along with this program; if not, write to the Free Software
  17   * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  18   *
  19   * $Id: prelevement.php,v 1.5 2005/10/18 14:03:06 eldy Exp $
  20   * $Source: /cvsroot/dolibarr/dolibarr/scripts/prelevement.php,v $
  21   *
  22   * Script de prelevement
  23   */
  24  
  25  require_once ("../htdocs/master.inc.php");
  26  require_once(DOL_DOCUMENT_ROOT."/bon-prelevement.class.php");
  27  require_once (DOL_DOCUMENT_ROOT."/facture.class.php");
  28  require_once (DOL_DOCUMENT_ROOT."/societe.class.php");
  29  require_once(DOL_DOCUMENT_ROOT."/paiement.class.php");
  30  
  31  $error = 0;
  32  
  33  $datetimeprev = time();
  34  
  35  $month = strftime("%m", $datetimeprev);
  36  $year = strftime("%Y", $datetimeprev);
  37  
  38  $user = new user($db, PRELEVEMENT_USER);
  39  
  40  /*
  41   *
  42   * Lectures des factures
  43   *
  44   */
  45  
  46  $factures = array();
  47  $factures_prev = array();
  48  
  49  if (!$error)
  50  {
  51    
  52    $sql = "SELECT f.rowid, pfd.rowid as pfdrowid, f.fk_soc";
  53    $sql .= ", pfd.code_banque, pfd.code_guichet, pfd.number, pfd.cle_rib";
  54    $sql .= ", pfd.amount";
  55    $sql .= ", s.nom";
  56    $sql .= " FROM ".MAIN_DB_PREFIX."facture as f";
  57    $sql .= " , ".MAIN_DB_PREFIX."societe as s";
  58    $sql .= " , ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd";
  59  
  60    $sql .= " WHERE f.rowid = pfd.fk_facture";
  61    $sql .= " AND s.idp = f.fk_soc";
  62    $sql .= " AND f.fk_statut = 1";
  63    $sql .= " AND f.paye = 0";
  64    $sql .= " AND pfd.traite = 0";
  65    $sql .= " AND f.total_ttc > 0";
  66    $sql .= " AND f.fk_mode_reglement = 3";
  67    
  68    if ( $db->query($sql) )
  69      {
  70        $num = $db->num_rows();
  71        $i = 0;
  72        
  73        while ($i < $num)
  74      {
  75        $row = $db->fetch_row();
  76        
  77        $factures[$i] = $row;
  78        
  79        $i++;
  80      }            
  81        $db->free();
  82        dolibarr_syslog("$i factures à prélever");
  83      }
  84    else
  85      {
  86        $error = 1;
  87        dolibarr_syslog("Erreur -1");
  88        dolibarr_syslog($db->error());
  89      }
  90  }
  91  
  92  /*
  93   *
  94   * Verif des clients
  95   *
  96   */
  97  
  98  if (!$error)
  99  {
 100    /*
 101     * Vérification des RIB
 102     *
 103     */
 104    $i = 0;
 105    dolibarr_syslog("Début vérification des RIB");
 106  
 107    if (sizeof($factures) > 0)
 108      {      
 109        foreach ($factures as $fac)
 110      {
 111        $fact = new Facture($db);
 112        
 113        if ($fact->fetch($fac[0]) == 1)
 114          {
 115            $soc = new Societe($db);
 116            if ($soc->fetch($fact->socidp) == 1)
 117          {
 118            if ($soc->verif_rib() == 1)
 119              {
 120                $factures_prev[$i] = $fac;
 121                /* second tableau necessaire pour bon-prelevement */
 122                $factures_prev_id[$i] = $fac[0];
 123                $i++;
 124              }
 125            else
 126              {
 127                dolibarr_syslog("Erreur de RIB societe $fact->socidp $soc->nom");
 128              }
 129          }
 130            else
 131          {
 132            dolibarr_syslog("Impossible de lire la société");
 133          }
 134          }
 135        else
 136          {
 137            dolibarr_syslog("Impossible de lire la facture");
 138          }
 139      }
 140      }
 141    else
 142      {
 143        dolibarr_syslog("Aucune factures a traiter");
 144      }
 145  }
 146  
 147  /*
 148   *
 149   *
 150   *
 151   */
 152  
 153  dolibarr_syslog(sizeof($factures_prev)." factures seront prélevées");
 154  
 155  if (sizeof($factures_prev) > 0)
 156  {
 157    /*
 158     * Ouverture de la transaction
 159     *
 160     */
 161  
 162    if (!$db->query("BEGIN"))
 163      {
 164        $error++;
 165      } 
 166  
 167    /*
 168     * Traitements
 169     *
 170     */
 171    
 172    if (!$error)
 173      {
 174        $ref = "T".substr($year,-2).$month;
 175        
 176        /*
 177         *
 178         *
 179         */
 180        $sql = "SELECT count(*) FROM ".MAIN_DB_PREFIX."prelevement_bons";
 181        $sql .= " WHERE ref LIKE '$ref%'";
 182        
 183        if ($db->query($sql))
 184      {      
 185        $row = $db->fetch_row();
 186      }
 187        else
 188      {
 189        $error++;
 190        dolibarr_syslog("Erreur recherche reference");
 191      }
 192  
 193        $ref = $ref . substr("00".($row[0]+1), -2);
 194  
 195        $filebonprev = $ref;
 196     
 197        /*
 198         * Creation du bon de prelevement
 199         *
 200         */
 201        
 202        $sql = "INSERT INTO ".MAIN_DB_PREFIX."prelevement_bons (ref,datec)";
 203        $sql .= " VALUES ('".$ref."',now())";
 204        
 205        if ($db->query($sql))
 206      {      
 207        $prev_id = $db->last_insert_id(MAIN_DB_PREFIX."prelevement_bons");
 208  
 209        $bonprev = new BonPrelevement($db, DOL_DATA_ROOT."/prelevement/bon/".$filebonprev);
 210        $bonprev->id = $prev_id;
 211      }
 212        else
 213      {
 214        $error++;
 215        dolibarr_syslog("Erreur création du bon de prelevement");
 216      }
 217        
 218      }
 219    
 220    /*
 221     *
 222     *
 223     *
 224     */
 225    if (!$error)
 226      {      
 227        dolibarr_syslog("Début génération des paiements");
 228        dolibarr_syslog("Nombre de factures ".sizeof($factures_prev));
 229        
 230        if (sizeof($factures_prev) > 0)
 231      {
 232        foreach ($factures_prev as $fac)
 233          {
 234            $fact = new Facture($db);
 235            $fact->fetch($fac[0]);
 236  
 237            $pai = new Paiement($db);
 238  
 239            $pai->amounts = array();
 240            $pai->amounts[$fac[0]] = $fact->total_ttc;
 241            $pai->datepaye = $db->idate($datetimeprev);
 242            $pai->paiementid = 3; // prélèvement
 243            $pai->num_paiement = $ref;
 244  
 245            if ($pai->create($user, 1) == -1)  // on appelle en no_commit
 246          {
 247            $error++;
 248            dolibarr_syslog("Erreur creation paiement facture ".$fac[0]);
 249          }
 250            else
 251          {
 252            /* 
 253             * Validation du paiement 
 254             */
 255            $pai->valide();
 256  
 257            /*
 258             * Ajout d'une ligne de prélèvement
 259             *
 260             *
 261             * $fac[3] : banque 
 262             * $fac[4] : guichet
 263             * $fac[5] : number
 264             * $fac[6] : cle rib
 265             * $fac[7] : amount
 266             * $fac[8] : client nom
 267             * $fac[2] : client id
 268             */
 269  
 270            $ri = $bonprev->AddFacture($fac[0], $fac[2], $fac[8], $fac[7], 
 271                           $fac[3], $fac[4], $fac[5], $fac[6]); 
 272            if ($ri <> 0)
 273              {
 274                $error++;
 275              }
 276  
 277            /*
 278             * Mise à jour des demandes
 279             *
 280             */
 281            $sql = "UPDATE ".MAIN_DB_PREFIX."prelevement_facture_demande";
 282            $sql .= " SET traite = 1";
 283            $sql .= ", date_traite=now()";
 284            $sql .= ", fk_prelevement_bons = ".$prev_id;
 285            $sql .= " WHERE rowid=".$fac[1];
 286            
 287            if ($db->query($sql))
 288              {      
 289  
 290              }
 291            else
 292              {
 293                $error++;
 294                dolibarr_syslog("Erreur mise a jour des demandes");
 295                dolibarr_syslog($db->error());
 296              }
 297  
 298          }
 299          }
 300      }
 301    
 302        dolibarr_syslog("Fin des paiements");
 303      }
 304  
 305    if (!$error)
 306      {
 307        /*
 308         * Bon de Prelevement
 309         *
 310         *
 311         */
 312  
 313        dolibarr_syslog("Debut prelevement");
 314        dolibarr_syslog("Nombre de factures ".sizeof($factures_prev));
 315  
 316        if (sizeof($factures_prev) > 0)
 317      {
 318        $bonprev->date_echeance = $datetimeprev;      
 319        $bonprev->reference_remise = $ref;
 320  
 321  
 322        $bonprev->numero_national_emetteur = PRELEVEMENT_NUMERO_NATIONAL_EMETTEUR;
 323        $bonprev->raison_sociale = PRELEVEMENT_RAISON_SOCIALE; 
 324  
 325        $bonprev->emetteur_code_etablissement = PRELEVEMENT_CODE_BANQUE;
 326        $bonprev->emetteur_code_guichet       = PRELEVEMENT_CODE_GUICHET;
 327        $bonprev->emetteur_numero_compte      = PRELEVEMENT_NUMERO_COMPTE;
 328  
 329        
 330        $bonprev->factures = $factures_prev_id;
 331        
 332        $bonprev->generate();  
 333      }
 334        dolibarr_syslog( $filebonprev ) ;
 335        dolibarr_syslog("Fin prelevement");
 336      }
 337  
 338    /*
 339     * Mise à jour du total
 340     *
 341     */
 342  
 343    $sql = "UPDATE ".MAIN_DB_PREFIX."prelevement_bons";
 344    $sql .= " SET amount = ".ereg_replace(",",".",$bonprev->total);
 345    $sql .= " WHERE rowid = ".$prev_id;
 346  
 347    if (!$db->query($sql))
 348      {
 349        $error++;
 350        dolibarr_syslog("Erreur mise à jour du total");
 351        dolibarr_syslog($sql);
 352      }
 353  
 354    /*
 355     * Rollback ou Commit
 356     *
 357     */
 358    if (!$error)
 359      {
 360        $db->query("COMMIT");
 361        dolibarr_syslog("COMMIT");
 362      }
 363    else
 364      {
 365        $db->query("ROLLBAK");
 366        dolibarr_syslog("ROLLBACK");
 367      }
 368  }
 369  
 370  $db->close();
 371  
 372  // FIN
 373  ?>


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