[ 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/compta/prelevement/ -> rejet-prelevement.class.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: rejet-prelevement.class.php,v 1.22 2005/11/30 11:10:50 rodolphe Exp $
  19   * $Source: /cvsroot/dolibarr/dolibarr/htdocs/compta/prelevement/rejet-prelevement.class.php,v $
  20   *
  21   */
  22  
  23  /*
  24    \file       htdocs/compta/prelevement/prelevement.class.php
  25    \ingroup    prelevement
  26    \brief      Fichier de la classe des prelevements
  27    \version    $Revision: 1.22 $
  28  */
  29  
  30  
  31  /*!
  32    \class Prelevement
  33    \brief      Classe permettant la gestion des prelevements
  34  */
  35  
  36  class RejetPrelevement
  37  {
  38    var $id;
  39    var $db;
  40  
  41  
  42    /**
  43     *    \brief  Constructeur de la classe
  44     *    \param  DB          Handler accès base de données
  45     *    \param  user        Utilisateur
  46     */
  47    function RejetPrelevement($DB, $user)
  48    {
  49      $this->db = $DB ;
  50      $this->user = $user;
  51  
  52      $this->motifs = array();
  53      $this->motifs[0] = "Non renseigné";
  54      $this->motifs[1] = "Provision insuffisante";
  55      $this->motifs[2] = "Tirage contesté";
  56      $this->motifs[3] = "Pas de bon à payer";
  57      $this->motifs[4] = "Opposition sur compte";
  58      $this->motifs[5] = "RIB inexploitable";
  59      $this->motifs[6] = "Compte soldé";
  60  
  61    }
  62  
  63    function create($user, $id, $motif, $date_rejet, $bonid, $facturation=0)
  64    {
  65      $error = 0;
  66      $this->id = $id;
  67      $this->bon_id = $bonid;
  68      
  69      dolibarr_syslog("RejetPrelevement::Create id $id");
  70      
  71      $facs = $this->_get_list_factures();
  72      
  73      $this->db->begin();
  74  
  75  
  76      /* Insert la ligne de rejet dans la base */
  77      
  78      $sql = "INSERT INTO ".MAIN_DB_PREFIX."prelevement_rejet ";
  79      $sql .= " (fk_prelevement_lignes, date_rejet";
  80      $sql .= " , motif , fk_user_creation, date_creation, afacturer)";
  81      $sql .= " VALUES (".$id;
  82      $sql .= " ,'".$this->db->idate($date_rejet)."'";
  83      $sql .= " ,".$motif.",". $user->id.", now(),".$facturation.");";
  84      
  85      $result=$this->db->query($sql);
  86      
  87      if (!$result)
  88        {
  89      dolibarr_syslog("RejetPrelevement::create Erreur 4");
  90      dolibarr_syslog("RejetPrelevement::create Erreur 4 $sql");
  91      $error++;
  92        }
  93      
  94      /* Tag la ligne de prev comme rejetée */
  95      
  96      $sql = " UPDATE ".MAIN_DB_PREFIX."prelevement_lignes ";
  97      $sql .= " SET statut = 3";
  98      $sql .= " WHERE rowid=".$id;
  99      
 100      if (! $this->db->query($sql))
 101        {
 102      dolibarr_syslog("RejetPrelevement::create Erreur 5");
 103      $error++;
 104        }
 105      
 106      
 107      for ($i = 0 ; $i < sizeof($facs) ; $i++)
 108        {      
 109      $fac = new Facture($this->db);
 110      $fac->fetch($facs[$i]);
 111      
 112      /* Emet un paiement négatif */
 113  
 114      $pai = new Paiement($this->db);
 115  
 116      $pai->amounts = array();
 117      // On remplace la virgule éventuelle par un point sinon
 118      // certaines install de PHP renvoie uniquement la partie
 119      // entiere negative
 120  
 121      $pai->amounts[$facs[$i]] = ereg_replace(",",".",($fac->total_ttc * -1));
 122      $pai->datepaye = $this->db->idate($date_rejet);
 123      $pai->paiementid = 3; // prélèvement
 124      $pai->num_paiement = "Rejet";
 125  
 126      if ($pai->create($this->user, 1) == -1)  // on appelle en no_commit
 127        {
 128          $error++;
 129          dolibarr_syslog("RejetPrelevement::Create Erreur creation paiement facture ".$facs[$i]);
 130        }       
 131    
 132      /* Valide le paiement */
 133  
 134      if ($pai->valide() <> 0)
 135        {
 136          $error++;
 137          dolibarr_syslog("RejetPrelevement::Create Erreur validation du paiement");
 138        }
 139  
 140      /* Tag la facture comme impayée */
 141      dolibarr_syslog("RejetPrelevement::Create set_unpayed fac ".$fac->ref);
 142      $fac->set_unpayed($fac->id, $user);
 143  
 144      /* Envoi un email à l'emetteur de la demande de prev */
 145      $this->_send_email($fac);
 146        }
 147  
 148      if ($error == 0)
 149        {
 150      dolibarr_syslog("RejetPrelevement::Create Commit");
 151      $this->db->commit();
 152        }
 153      else
 154        {
 155      dolibarr_syslog("RejetPrelevement::Create Rollback");
 156      $this->db->rollback();
 157        }
 158  
 159    }
 160  
 161      /**
 162       *      \brief      Envoi mail
 163       *
 164       */
 165      function _send_email($fac)
 166      {
 167          $userid = 0;
 168      
 169          $sql = "SELECT fk_user_demande";
 170          $sql .= " FROM ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd";
 171          $sql .= " WHERE pfd.fk_prelevement_bons = ".$this->bon_id;
 172          $sql .= " AND pfd.fk_facture = ".$fac->id;
 173      
 174          $resql=$this->db->query($sql);
 175          if ($resql)
 176          {
 177              $num = $this->db->num_rows($resql);
 178              if ($num > 0)
 179              {
 180                  $row = $this->db->fetch_row($resql);
 181                  $userid = $row[0];
 182              }
 183          }
 184          else
 185          {
 186              dolibarr_syslog("RejetPrelevement::_send_email Erreur lecture user");
 187          }
 188      
 189          if ($userid > 0)
 190          {
 191              $emuser = new User($this->db, $userid);
 192              $emuser->fetch();
 193      
 194              $soc = new Societe($this->db);
 195              $soc->fetch($fac->socidp);
 196      
 197              require_once (DOL_DOCUMENT_ROOT."/lib/CMailFile.class.php");
 198      
 199              $subject = "Prélèvement rejeté";
 200              $sendto = $emuser->fullname." <".$emuser->email.">";
 201              $from = $this->user->fullname." <".$this->user->email.">";
 202      
 203              $arr_file = array();
 204              $arr_mime = array();
 205              $arr_name = array();
 206      
 207              $message = "Bonjour,\n";
 208              $message .= "\nLe prélèvement de la facture ".$fac->ref." pour le compte de la société ".$soc->nom." d'un montant de ".price($fac->total_ttc)." a été rejeté par la banque.";
 209              $message .= "\n\n--\n".$this->user->fullname;
 210      
 211              $mailfile = new CMailFile($subject,$sendto,$from,$message,
 212                                        $arr_file,$arr_mime,$arr_name);
 213              $mailfile->errors_to = $this->user->email;
 214      
 215              $result=$mailfile->sendfile();
 216              if ($result)
 217              {
 218                  dolibarr_syslog("RejetPrelevement::_send_email email envoyé");
 219              }
 220              else
 221              {
 222                  dolibarr_syslog("RejetPrelevement::_send_email Erreur envoi email");
 223              }
 224          }
 225          else
 226          {
 227              dolibarr_syslog("RejetPrelevement::_send_email Userid invalide");
 228          }
 229      }
 230  
 231  
 232    /**
 233     *    \brief      Recupére la liste des factures concernées
 234     */
 235    function _get_list_factures()
 236    {
 237      $arr = array();
 238      /*
 239       * Renvoie toutes les factures associée à un prélèvement
 240       *
 241       */
 242        
 243      $sql = "SELECT f.rowid as facid";
 244  
 245      $sql .= " FROM ".MAIN_DB_PREFIX."prelevement_facture as pf";
 246      $sql .= " , ".MAIN_DB_PREFIX."facture as f";
 247  
 248      $sql .= " WHERE pf.fk_prelevement_lignes = ".$this->id;
 249  
 250      $sql .= " AND pf.fk_facture = f.rowid";
 251  
 252      $result=$this->db->query($sql);
 253      if ($result)
 254        {
 255      $num = $this->db->num_rows();
 256  
 257      if ($num)
 258        {
 259          $i = 0;
 260          while ($i < $num)
 261            {
 262          $row = $this->db->fetch_row();
 263          $arr[$i] = $row[0];
 264          $i++;
 265            }
 266        }
 267      $this->db->free();
 268        }
 269      else
 270        {
 271      dolibarr_syslog("RejetPrelevement Erreur");
 272        }
 273  
 274      return $arr;
 275  
 276    }
 277  
 278    
 279  
 280    /**
 281     *    \brief      Recupére l'objet prelevement
 282     *    \param      rowid       id de la facture a récupérer
 283     */
 284    function fetch($rowid)
 285    {
 286  
 287      $sql = "SELECT ".$this->db->pdate("pr.date_rejet")." as dr";
 288      $sql .= ", motif";
 289      $sql .= " FROM ".MAIN_DB_PREFIX."prelevement_rejet as pr";
 290      $sql .= " WHERE pr.fk_prelevement_lignes =".$rowid;
 291        
 292  
 293      if ($this->db->query($sql))
 294        {
 295      if ($this->db->num_rows())
 296        {
 297          $obj = $this->db->fetch_object();
 298            
 299          $this->id             = $rowid;
 300          $this->date_rejet     = $obj->dr;
 301          $this->motif          = $this->motifs[$obj->motif];
 302  
 303          $this->db->free();
 304          
 305          return 0;
 306        }
 307      else
 308        {
 309          dolibarr_syslog("RejetPrelevement::Fetch Erreur rowid=$rowid numrows=0");
 310          return -1;
 311        }
 312        }
 313      else
 314        {
 315      dolibarr_syslog("RejetPrelevement::Fetch Erreur rowid=$rowid");
 316      return -2;
 317        }
 318    }
 319  
 320  }
 321  
 322  ?>


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