mirror of
https://github.com/Dolibarr/dolibarr.git
synced 2025-12-24 18:31:29 +01:00
This is to be more portable, to solve problem when database server time differs from PHP server and to prepare for TZ support.
553 lines
15 KiB
PHP
553 lines
15 KiB
PHP
<?php
|
|
/* Copyright (C) 2002 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
|
* Copyright (C) 2004-2006 Laurent Destailleur <eldy@users.sourceforge.net>
|
|
*
|
|
* 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$
|
|
* $Source$
|
|
*/
|
|
|
|
/**
|
|
\file htdocs/don.class.php
|
|
\ingroup don
|
|
\brief Fichier de la classe des dons
|
|
\version $Revision$
|
|
*/
|
|
|
|
|
|
/**
|
|
\class Don
|
|
\brief Classe permettant la gestion des dons
|
|
*/
|
|
|
|
class Don
|
|
{
|
|
var $db;
|
|
var $error;
|
|
var $element='don';
|
|
var $table_element='don';
|
|
|
|
var $id;
|
|
var $date;
|
|
var $amount;
|
|
var $prenom;
|
|
var $nom;
|
|
var $societe;
|
|
var $adresse;
|
|
var $cp;
|
|
var $ville;
|
|
var $pays;
|
|
var $email;
|
|
var $public;
|
|
var $projetid;
|
|
var $modepaiement;
|
|
var $modepaiementid;
|
|
var $note;
|
|
var $statut;
|
|
|
|
var $projet;
|
|
|
|
/**
|
|
* \brief Constructeur
|
|
* \param DB Handler d'accès base
|
|
*/
|
|
function Don($DB)
|
|
{
|
|
global $langs;
|
|
|
|
$this->db = $DB ;
|
|
$this->modepaiementid = 0;
|
|
|
|
$langs->load("donations");
|
|
$this->labelstatut[0]=$langs->trans("DonationStatusPromiseNotValidated");
|
|
$this->labelstatut[1]=$langs->trans("DonationStatusPromiseValidated");
|
|
$this->labelstatut[2]=$langs->trans("DonationStatusPayed");
|
|
$this->labelstatutshort[0]=$langs->trans("DonationStatusPromiseNotValidatedShort");
|
|
$this->labelstatutshort[1]=$langs->trans("DonationStatusPromiseValidatedShort");
|
|
$this->labelstatutshort[2]=$langs->trans("DonationStatusPayedShort");
|
|
}
|
|
|
|
|
|
/**
|
|
* \brief Retourne le libellé du statut d'un don (brouillon, validée, abandonnée, payée)
|
|
* \param mode 0=libellé long, 1=libellé court, 2=Picto + Libellé court, 3=Picto, 4=Picto + Libellé long
|
|
* \return string Libelle
|
|
*/
|
|
function getLibStatut($mode=0)
|
|
{
|
|
return $this->LibStatut($this->statut,$mode);
|
|
}
|
|
|
|
/**
|
|
* \brief Renvoi le libellé d'un statut donné
|
|
* \param statut Id statut
|
|
* \param mode 0=libellé long, 1=libellé court, 2=Picto + Libellé court, 3=Picto, 4=Picto + Libellé long, 5=Libellé court + Picto
|
|
* \return string Libellé du statut
|
|
*/
|
|
function LibStatut($statut,$mode=0)
|
|
{
|
|
global $langs;
|
|
|
|
if ($mode == 0)
|
|
{
|
|
return $this->labelstatut[$statut];
|
|
}
|
|
if ($mode == 1)
|
|
{
|
|
return $this->labelstatutshort[$statut];
|
|
}
|
|
if ($mode == 2)
|
|
{
|
|
if ($statut == 0) return img_picto($this->labelstatut[$statut],'statut0').' '.$this->labelstatutshort[$statut];
|
|
if ($statut == 1) return img_picto($this->labelstatut[$statut],'statut1').' '.$this->labelstatutshort[$statut];
|
|
if ($statut == 2) return img_picto($this->labelstatut[$statut],'statut6').' '.$this->labelstatutshort[$statut];
|
|
}
|
|
if ($mode == 3)
|
|
{
|
|
$prefix='Short';
|
|
if ($statut == 0) return img_picto($this->labelstatut[$statut],'statut0');
|
|
if ($statut == 1) return img_picto($this->labelstatut[$statut],'statut1');
|
|
if ($statut == 2) return img_picto($this->labelstatut[$statut],'statut6');
|
|
}
|
|
if ($mode == 4)
|
|
{
|
|
if ($statut == 0) return img_picto($this->labelstatut[$statut],'statut0').' '.$this->labelstatut[$statut];
|
|
if ($statut == 1) return img_picto($this->labelstatut[$statut],'statut1').' '.$this->labelstatut[$statut];
|
|
if ($statut == 2) return img_picto($this->labelstatut[$statut],'statut6').' '.$this->labelstatut[$statut];
|
|
}
|
|
if ($mode == 5)
|
|
{
|
|
$prefix='Short';
|
|
if ($statut == 0) return $this->labelstatutshort[$statut].' '.img_picto($this->labelstatut[$statut],'statut0');
|
|
if ($statut == 1) return $this->labelstatutshort[$statut].' '.img_picto($this->labelstatut[$statut],'statut1');
|
|
if ($statut == 2) return $this->labelstatutshort[$statut].' '.img_picto($this->labelstatut[$statut],'statut6');
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* \brief Initialise le don avec valeurs fictives aléatoire
|
|
* Sert à générer une recu de don pour l'aperu des modèles ou demo
|
|
*/
|
|
function initAsSpecimen()
|
|
{
|
|
global $user,$langs;
|
|
|
|
// Charge tableau des id de société socids
|
|
$socids = array();
|
|
$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."societe WHERE client=1 LIMIT 10";
|
|
$resql = $this->db->query($sql);
|
|
if ($resql)
|
|
{
|
|
$num_socs = $this->db->num_rows($resql);
|
|
$i = 0;
|
|
while ($i < $num_socs)
|
|
{
|
|
$i++;
|
|
|
|
$row = $this->db->fetch_row($resql);
|
|
$socids[$i] = $row[0];
|
|
}
|
|
}
|
|
|
|
// Initialise paramètres
|
|
$this->id=0;
|
|
$this->ref = 'SPECIMEN';
|
|
$this->specimen=1;
|
|
$this->nom = 'Doe';
|
|
$this->prenom = 'John';
|
|
$this->socid = $socids[$socid];
|
|
$this->date = time();
|
|
$this->amount = 100;
|
|
$this->public = 1;
|
|
$this->societe = 'The Company';
|
|
$this->adresse = 'Twist road';
|
|
$this->cp = '99999';
|
|
$this->ville = 'Town';
|
|
$this->note_public='SPECIMEN';
|
|
$this->email='email@email.com';
|
|
$this->note='';
|
|
$this->statut=1;
|
|
}
|
|
|
|
|
|
/*
|
|
*
|
|
*/
|
|
function print_error_list()
|
|
{
|
|
$num = sizeof($this->error);
|
|
for ($i = 0 ; $i < $num ; $i++)
|
|
{
|
|
print "<li>" . $this->error[$i];
|
|
}
|
|
}
|
|
|
|
/*
|
|
*
|
|
*
|
|
*/
|
|
function check($minimum=0)
|
|
{
|
|
$err = 0;
|
|
|
|
if (strlen(trim($this->societe)) == 0)
|
|
{
|
|
if ((strlen(trim($this->nom)) + strlen(trim($this->prenom))) == 0)
|
|
{
|
|
$error_string[$err] = "Vous devez saisir vos nom et prénom ou le nom de votre société.";
|
|
$err++;
|
|
}
|
|
}
|
|
|
|
if (strlen(trim($this->adresse)) == 0)
|
|
{
|
|
$error_string[$err] = "L'adresse saisie est invalide";
|
|
$err++;
|
|
}
|
|
|
|
if (strlen(trim($this->cp)) == 0)
|
|
{
|
|
$error_string[$err] = "Le code postal saisi est invalide";
|
|
$err++;
|
|
}
|
|
|
|
if (strlen(trim($this->ville)) == 0)
|
|
{
|
|
$error_string[$err] = "La ville saisie est invalide";
|
|
$err++;
|
|
}
|
|
|
|
if (strlen(trim($this->email)) == 0)
|
|
{
|
|
$error_string[$err] = "L'email saisi est invalide";
|
|
$err++;
|
|
}
|
|
|
|
$this->amount = trim($this->amount);
|
|
|
|
$map = range(0,9);
|
|
for ($i = 0; $i < strlen($this->amount) ; $i++)
|
|
{
|
|
if (!isset($map[substr($this->amount, $i, 1)] ))
|
|
{
|
|
$error_string[$err] = "Le montant du don contient un/des caractère(s) invalide(s)";
|
|
$err++;
|
|
$amount_invalid = 1;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (! $amount_invalid)
|
|
{
|
|
if ($this->amount == 0)
|
|
{
|
|
$error_string[$err] = "Le montant du don est null";
|
|
$err++;
|
|
}
|
|
else
|
|
{
|
|
if ($this->amount < $minimum && $minimum > 0)
|
|
{
|
|
$error_string[$err] = "Le montant minimum du don est de $minimum";
|
|
$err++;
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($err)
|
|
{
|
|
$this->error = $error_string;
|
|
return 0;
|
|
}
|
|
else
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* \brief Création du don en base
|
|
* \param user Objet utilisateur qui crée le don
|
|
* \return int Id don crée si ok, <0 si ko
|
|
*/
|
|
function create($user)
|
|
{
|
|
$this->date = $this->db->idate($this->date);
|
|
|
|
$sql = "INSERT INTO ".MAIN_DB_PREFIX."don (datec, amount, fk_paiement,prenom, nom, societe,adresse, cp, ville, pays, public,";
|
|
if ($this->projetid)
|
|
{
|
|
$sql .= " fk_don_projet,";
|
|
}
|
|
$sql .= " note, fk_user_author, datedon, email)";
|
|
$sql .= " VALUES (".$this->db->idate(mktime()).",".price2num($this->amount).", $this->modepaiementid,'$this->prenom','$this->nom','$this->societe','$this->adresse', '$this->cp','$this->ville','$this->pays',$this->public, ";
|
|
if ($this->projetid)
|
|
{
|
|
$sql .= " $this->projetid,";
|
|
}
|
|
$sql .= " '$this->note', ".$user->id.", '$this->date','$this->email')";
|
|
|
|
$result = $this->db->query($sql);
|
|
if ($result)
|
|
{
|
|
return $this->db->last_insert_id(MAIN_DB_PREFIX."don");
|
|
}
|
|
else
|
|
{
|
|
dolibarr_print_error($this->db);
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* \brief Mise à jour du don
|
|
* \param user Objet utilisateur qui met à jour le don
|
|
* \return int >0 si ok, <0 si ko
|
|
*/
|
|
function update($user)
|
|
{
|
|
|
|
$this->date = $this->db->idate($this->date);
|
|
|
|
$sql = "UPDATE ".MAIN_DB_PREFIX."don SET ";
|
|
$sql .= "amount = " . $this->amount;
|
|
$sql .= ",fk_paiement = ".$this->modepaiementid;
|
|
$sql .= ",prenom = '".$this->prenom ."'";
|
|
$sql .= ",nom='".$this->nom."'";
|
|
$sql .= ",societe='".$this->societe."'";
|
|
$sql .= ",adresse='".$this->adresse."'";
|
|
$sql .= ",cp='".$this->cp."'";
|
|
$sql .= ",ville='".$this->ville."'";
|
|
$sql .= ",pays='".$this->pays."'";
|
|
$sql .= ",public=".$this->public;
|
|
if ($this->projetid) { $sql .= ",fk_don_projet=".$this->projetid; }
|
|
$sql .= ",note='".$this->note."'";
|
|
$sql .= ",datedon='".$this->date."'";
|
|
$sql .= ",email='".$this->email."'";
|
|
$sql .= ",fk_statut=".$this->statut;
|
|
|
|
$sql .= " WHERE rowid = $this->id";
|
|
|
|
$result = $this->db->query($sql);
|
|
if ($result)
|
|
{
|
|
return 1;
|
|
}
|
|
else
|
|
{
|
|
dolibarr_print_error($this->db);
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
/*
|
|
* \brief Suppression du don de la base
|
|
* \param rowid id du don à supprimer
|
|
*/
|
|
function delete($rowid)
|
|
{
|
|
|
|
$sql = "DELETE FROM ".MAIN_DB_PREFIX."don WHERE rowid = $rowid AND fk_statut = 0;";
|
|
|
|
if ( $this->db->query( $sql) )
|
|
{
|
|
if ( $this->db->affected_rows() )
|
|
{
|
|
return 1;
|
|
}
|
|
else
|
|
{
|
|
return -1;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
dolibarr_print_error($this->db);
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
/*
|
|
* \brief Charge l'objet don en mémoire depuis la base de donnée
|
|
* \param rowid Id du don à charger
|
|
* \return int <0 si ko, >0 si ok
|
|
*/
|
|
function fetch($rowid)
|
|
{
|
|
$sql = "SELECT d.rowid, ".$this->db->pdate("d.datec")." as datec,";
|
|
$sql.= " ".$this->db->pdate("d.datedon")." as datedon,";
|
|
$sql.= " d.prenom, d.nom, d.societe, d.amount, p.libelle as projet, d.fk_statut, d.adresse, d.cp, d.ville, d.pays, d.public, d.amount, d.fk_paiement, d.note, cp.libelle, d.email, d.fk_don_projet";
|
|
$sql.= " FROM ".MAIN_DB_PREFIX."c_paiement as cp, ".MAIN_DB_PREFIX."don as d";
|
|
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."don_projet as p";
|
|
$sql.= " ON p.rowid = d.fk_don_projet";
|
|
$sql.= " WHERE cp.id = d.fk_paiement AND d.rowid = ".$rowid;
|
|
|
|
if ( $this->db->query( $sql) )
|
|
{
|
|
if ($this->db->num_rows())
|
|
{
|
|
|
|
$obj = $this->db->fetch_object();
|
|
|
|
$this->id = $obj->rowid;
|
|
$this->ref = $obj->rowid;
|
|
$this->datec = $obj->datec;
|
|
$this->date = $obj->datedon;
|
|
$this->prenom = stripslashes($obj->prenom);
|
|
$this->nom = stripslashes($obj->nom);
|
|
$this->societe = stripslashes($obj->societe);
|
|
$this->statut = $obj->fk_statut;
|
|
$this->adresse = stripslashes($obj->adresse);
|
|
$this->cp = stripslashes($obj->cp);
|
|
$this->ville = stripslashes($obj->ville);
|
|
$this->email = stripslashes($obj->email);
|
|
$this->pays = stripslashes($obj->pays);
|
|
$this->projet = $obj->projet;
|
|
$this->projetid = $obj->fk_don_projet;
|
|
$this->public = $obj->public;
|
|
$this->modepaiementid = $obj->fk_paiement;
|
|
$this->modepaiement = $obj->libelle;
|
|
$this->amount = $obj->amount;
|
|
$this->commentaire = stripslashes($obj->note);
|
|
}
|
|
return 1;
|
|
}
|
|
else
|
|
{
|
|
dolibarr_print_error($this->db);
|
|
return -1;
|
|
}
|
|
|
|
}
|
|
|
|
/*
|
|
* \brief Valide une promesse de don
|
|
* \param rowid id du don à modifier
|
|
* \param userid utilisateur qui valide la promesse
|
|
*
|
|
*/
|
|
function valid_promesse($rowid, $userid)
|
|
{
|
|
|
|
$sql = "UPDATE ".MAIN_DB_PREFIX."don SET fk_statut = 1, fk_user_valid = $userid WHERE rowid = $rowid AND fk_statut = 0;";
|
|
|
|
if ( $this->db->query( $sql) )
|
|
{
|
|
if ( $this->db->affected_rows() )
|
|
{
|
|
return 1;
|
|
}
|
|
else
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
dolibarr_print_error($this->db);
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
/*
|
|
* \brief Classe le don comme payé, le don a été recu
|
|
* \param rowid id du don à modifier
|
|
* \param modepaiementd mode de paiement
|
|
*/
|
|
function set_paye($rowid, $modepaiement='')
|
|
{
|
|
$sql = "UPDATE ".MAIN_DB_PREFIX."don SET fk_statut = 2";
|
|
|
|
if ($modepaiement)
|
|
{
|
|
$sql .= ", fk_paiement=$modepaiement";
|
|
}
|
|
$sql .= " WHERE rowid = $rowid AND fk_statut = 1;";
|
|
|
|
if ( $this->db->query( $sql) )
|
|
{
|
|
if ( $this->db->affected_rows() )
|
|
{
|
|
return 1;
|
|
}
|
|
else
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
dolibarr_print_error($this->db);
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
* \brief Classe le don comme encaissé
|
|
* \param rowid id du don à modifier
|
|
*
|
|
*/
|
|
function set_encaisse($rowid)
|
|
{
|
|
|
|
$sql = "UPDATE ".MAIN_DB_PREFIX."don SET fk_statut = 3 WHERE rowid = $rowid AND fk_statut = 2;";
|
|
|
|
if ( $this->db->query( $sql) )
|
|
{
|
|
if ( $this->db->affected_rows() )
|
|
{
|
|
return 1;
|
|
}
|
|
else
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
dolibarr_print_error($this->db);
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* \brief Somme des dons
|
|
* \param param 1=promesses de dons validées , 2=xxx, 3=encaissés
|
|
*/
|
|
function sum_donations($param)
|
|
{
|
|
$result=0;
|
|
|
|
$sql = "SELECT sum(amount) as total";
|
|
$sql.= " FROM ".MAIN_DB_PREFIX."don";
|
|
$sql.= " WHERE fk_statut = ".$param;
|
|
|
|
$resql=$this->db->query($sql);
|
|
if ($resql)
|
|
{
|
|
$obj = $this->db->fetch_object($resql);
|
|
$result=$obj->total;
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
}
|
|
?>
|