Newer
Older
/* Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2005-2009 Regis Houssin <regis@dolibarr.fr>
* Copyright (C) 2010-2011 Juanjo Menent <jmenent@2byte.es>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* $Id$
*/
\file htdocs/compta/prelevement/class/rejet-prelevement.class.php
\ingroup prelevement
\brief File of class to manage standing orders rejects
\version $Revision$
*/
\class RejetPrelevement
\brief Class to manage standing orders rejects
*/
* Class constructor
* @param DB Database Handler access
* @param user User
*/
function RejetPrelevement($DB, $user)
{
global $langs;
$this->db = $DB ;
$this->user = $user;
$this->motifs = array();
$this->facturer = array();
$this->motifs[0] = $langs->trans("StatusMotif0");
$this->motifs[1] = $langs->trans("StatusMotif1");
$this->motifs[2] = $langs->trans("StatusMotif2");
$this->motifs[3] = $langs->trans("StatusMotif3");
$this->motifs[4] = $langs->trans("StatusMotif4");
$this->motifs[5] = $langs->trans("StatusMotif5");
$this->motifs[6] = $langs->trans("StatusMotif6");
$this->motifs[7] = $langs->trans("StatusMotif7");
$this->motifs[8] = $langs->trans("StatusMotif8");
$this->facturer[0]=$langs->trans("NoInvoiceRefused");
$this->facturer[1]=$langs->trans("InvoiceRefused");
}
function create($user, $id, $motif, $date_rejet, $bonid, $facturation=0)
{
global $langs;
$error = 0;
$this->id = $id;
$this->bon_id = $bonid;
dol_syslog("RejetPrelevement::Create id $id");
$facs = $this->_get_list_factures();
$this->db->begin();
// Insert refused line into database
$sql = "INSERT INTO ".MAIN_DB_PREFIX."prelevement_rejet (";
$sql.= "fk_prelevement_lignes";
$sql.= ", date_rejet";
$sql.= ", motif";
$sql.= ", fk_user_creation";
$sql.= ", date_creation";
$sql.= ", afacturer";
$sql.= ") VALUES (";
$sql.= $id;
$sql.= ", '".$this->db->idate($date_rejet)."'";
$sql.= ", ".$motif;
$sql.= ", ".$user->id;
$sql.= ", ".$this->db->idate(mktime());
$sql.= ", ".$facturation;
$sql.= ")";
$result=$this->db->query($sql);
if (!$result)
{
dol_syslog("RejetPrelevement::create Erreur 4");
dol_syslog("RejetPrelevement::create Erreur 4 $sql");
$error++;
}
// Tag the line to refused
$sql = " UPDATE ".MAIN_DB_PREFIX."prelevement_lignes ";
$sql.= " SET statut = 3";
$sql.= " WHERE rowid = ".$id;
if (! $this->db->query($sql))
{
dol_syslog("RejetPrelevement::create Erreur 5");
$error++;
}
for ($i = 0 ; $i < sizeof($facs) ; $i++)
{
$fac = new Facture($this->db);
$fac->fetch($facs[$i]);
// Make a negative payment
$pai = new Paiement($this->db);
$pai->amounts = array();
/*
* We replace the comma with a point otherwise some
* PHP installs sends only the part integer negative
*/
$pai->amounts[$facs[$i]] = price2num($fac->total_ttc * -1);
$pai->datepaye = $date_rejet;
$pai->paiementid = 3; // type of payment: withdrawal
$pai->num_paiement = $langs->trans("StatusRefused");
if ($pai->create($this->user, 1) == -1) // we call with no_commit
$error++;
dol_syslog("RejetPrelevement::Create Erreur creation paiement facture ".$facs[$i]);
// Payment validation
$error++;
dol_syslog("RejetPrelevement::Create Erreur validation du paiement");
// Tag invoice as unpaid
dol_syslog("RejetPrelevement::Create set_unpaid fac ".$fac->ref);
$fac->set_unpaid($fac->id, $user);
// Send email to sender of the standing order request
$this->_send_email($fac);
}
if ($error == 0)
{
dol_syslog("RejetPrelevement::Create Commit");
$this->db->commit();
}
else
{
dol_syslog("RejetPrelevement::Create Rollback");
$this->db->rollback();
}
}
/**
* Envoi mail
* @param fac Invoice object
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
*/
function _send_email($fac)
{
global $langs;
$userid = 0;
$sql = "SELECT fk_user_demande";
$sql.= " FROM ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd";
$sql.= " WHERE pfd.fk_prelevement_bons = ".$this->bon_id;
$sql.= " AND pfd.fk_facture = ".$fac->id;
$resql=$this->db->query($sql);
if ($resql)
{
$num = $this->db->num_rows($resql);
if ($num > 0)
{
$row = $this->db->fetch_row($resql);
$userid = $row[0];
}
}
else
{
dol_syslog("RejetPrelevement::_send_email Erreur lecture user");
}
if ($userid > 0)
{
$emuser = new User($this->db);
$emuser->fetch($userid);
$soc = new Societe($this->db);
$soc->fetch($fac->socid);
require_once(DOL_DOCUMENT_ROOT."/lib/CMailFile.class.php");
$subject = $langs->trans("InfoRejectSubject");
$sendto = $emuser->getFullName($langs)." <".$emuser->email.">";
$from = $this->user->getFullName($langs)." <".$this->user->email.">";
$msgishtml=0;
$arr_file = array();
$arr_mime = array();
$arr_name = array();
$facref = $fac->ref;
$socname = $soc->nom;
$amount = price($fac->total_ttc);
$userinfo = $this->user->getFullName($langs);
$message = $langs->trans("InfoRejectMessage",$facref,$socname, $amount, $userinfo);
$mailfile = new CMailFile($subject,$sendto,$from,$message,
$arr_file,$arr_mime,$arr_name,
Laurent Destailleur
committed
'', '', 0, $msgishtml,$this->user->email);
$result=$mailfile->sendfile();
if ($result)
{
dol_syslog("RejetPrelevement::_send_email email envoye");
}
else
{
dol_syslog("RejetPrelevement::_send_email Erreur envoi email");
}
}
else
{
dol_syslog("RejetPrelevement::_send_email Userid invalide");
}
}
/**
* Retrieve the list of invoices
*/
function _get_list_factures()
{
global $conf;
$arr = array();
//Returns all invoices of a withdrawal
$sql = "SELECT f.rowid as facid";
$sql.= " FROM ".MAIN_DB_PREFIX."prelevement_facture as pf";
$sql.= ", ".MAIN_DB_PREFIX."facture as f";
$sql.= " WHERE pf.fk_prelevement_lignes = ".$this->id;
$sql.= " AND pf.fk_facture = f.rowid";
$sql.= " AND f.entity = ".$conf->entity;
$resql=$this->db->query($sql);
if ($resql)
{
$i = 0;
while ($i < $num)
{
$row = $this->db->fetch_row($resql);
$arr[$i] = $row[0];
$i++;
}
}
$this->db->free($resql);
}
else
{
dol_syslog("RejetPrelevement Erreur");
}
return $arr;
}
/**
* Retrieve withdrawal object
* @param rowid id of invoice to retrieve
*/
function fetch($rowid)
{
$sql = "SELECT pr.date_rejet as dr, motif, afacturer";
$sql.= " FROM ".MAIN_DB_PREFIX."prelevement_rejet as pr";
$sql.= " WHERE pr.fk_prelevement_lignes =".$rowid;
$resql=$this->db->query($sql);
if ($resql)
{
if ($this->db->num_rows($resql))
{
$obj = $this->db->fetch_object($resql);
$this->id = $rowid;
$this->date_rejet = $this->db->jdate($obj->dr);
$this->motif = $this->motifs[$obj->motif];
$this->invoicing = $this->facturer[$obj->afacturer];
$this->db->free($resql);
return 0;
}
else
{
dol_syslog("RejetPrelevement::Fetch Erreur rowid=$rowid numrows=0");
return -1;
}
}
else
{
dol_syslog("RejetPrelevement::Fetch Erreur rowid=$rowid");
return -2;
}
}