From 56f1ba6e1b262927012aeff97183716a2f719981 Mon Sep 17 00:00:00 2001
From: Laurent Destailleur <eldy@users.sourceforge.net>
Date: Thu, 4 Jun 2009 21:29:19 +0000
Subject: [PATCH] Add TODO to refuse delete if there is payments

---
 htdocs/facture.class.php                   |   3 +
 htdocs/fourn/fournisseur.facture.class.php | 117 +++++++++++----------
 2 files changed, 67 insertions(+), 53 deletions(-)

diff --git a/htdocs/facture.class.php b/htdocs/facture.class.php
index 00b0ce7242a..bfac3642630 100644
--- a/htdocs/facture.class.php
+++ b/htdocs/facture.class.php
@@ -936,6 +936,9 @@ class Facture extends CommonObject
 
 		dol_syslog("Facture::delete rowid=".$rowid, LOG_DEBUG);
 
+		// TODO Test if there is at least on payment. If yes, refuse to delete.
+
+		$error=0;
 		$this->db->begin();
 
 		$sql = 'DELETE FROM '.MAIN_DB_PREFIX.'fa_pr WHERE fk_facture = '.$rowid;
diff --git a/htdocs/fourn/fournisseur.facture.class.php b/htdocs/fourn/fournisseur.facture.class.php
index 397920642ca..daf88572c6e 100644
--- a/htdocs/fourn/fournisseur.facture.class.php
+++ b/htdocs/fourn/fournisseur.facture.class.php
@@ -21,19 +21,19 @@
  */
 
 /**
-		\file       htdocs/fourn/fournisseur.facture.class.php
-		\ingroup    fournisseur,facture
-		\brief      Fichier de la classe des factures fournisseurs
-		\version    $Id$
-*/
+ \file       htdocs/fourn/fournisseur.facture.class.php
+ \ingroup    fournisseur,facture
+ \brief      Fichier de la classe des factures fournisseurs
+ \version    $Id$
+ */
 
 include_once(DOL_DOCUMENT_ROOT."/facture.class.php");
 
 
 /**
-		\class      FactureFournisseur
-		\brief      Classe permettant la gestion des factures fournisseurs
-*/
+ \class      FactureFournisseur
+ \brief      Classe permettant la gestion des factures fournisseurs
+ */
 
 class FactureFournisseur extends Facture
 {
@@ -359,6 +359,15 @@ class FactureFournisseur extends Facture
 	 */
 	function delete($rowid)
 	{
+		global $user,$langs,$conf;
+
+		if (! $rowid) $rowid=$this->id;
+
+		dol_syslog("FactureFournisseur::delete rowid=".$rowid, LOG_DEBUG);
+
+		// TODO Test if there is at least on payment. If yes, refuse to delete.
+
+		$error=0;
 		$this->db->begin();
 
 		$sql = 'DELETE FROM '.MAIN_DB_PREFIX.'facture_fourn_det WHERE fk_facture_fourn = '.$rowid.';';
@@ -366,21 +375,23 @@ class FactureFournisseur extends Facture
 		$resql = $this->db->query($sql);
 		if ($resql)
 		{
-				$sql = 'DELETE FROM '.MAIN_DB_PREFIX.'facture_fourn WHERE rowid = '.$rowid;
-				dol_syslog("FactureFournisseur sql=".$sql, LOG_DEBUG);
-				$resql2 = $this->db->query($sql);
-				if ($resql2)
-				{
-					$this->db->commit();
-					return 1;
-				}
-				else
-				{
-					$this->db->rollback();
-					$this->error=$this->db->lasterror();
-					dol_syslog("FactureFournisseur::delete ".$this->error, LOG_ERR);
-					return -1;
-				}
+			$sql = 'DELETE FROM '.MAIN_DB_PREFIX.'facture_fourn WHERE rowid = '.$rowid;
+			dol_syslog("FactureFournisseur sql=".$sql, LOG_DEBUG);
+			$resql2 = $this->db->query($sql);
+			if (! $resql2) $error++;
+
+			if (! $error)
+			{
+				$this->db->commit();
+				return 1;
+			}
+			else
+			{
+				$this->db->rollback();
+				$this->error=$this->db->lasterror();
+				dol_syslog("FactureFournisseur::delete ".$this->error, LOG_ERR);
+				return -1;
+			}
 		}
 		else
 		{
@@ -395,9 +406,9 @@ class FactureFournisseur extends Facture
 	/**
 	 *      \brief      Tag la facture comme payee completement
 	 *      \param      user        Objet utilisateur qui modifie l'etat
-     *      \return     int         <0 si ko, >0 si ok
+	 *      \return     int         <0 si ko, >0 si ok
 	 */
-    function set_payed($user)
+	function set_payed($user)
 	{
 		$sql = 'UPDATE '.MAIN_DB_PREFIX.'facture_fourn';
 		$sql.= ' SET paye = 1';
@@ -408,16 +419,16 @@ class FactureFournisseur extends Facture
 		{
 			$this->error=$this->db->error();
 			dol_print_error($this->db);
-            return -1;
+			return -1;
 		}
-        return 1;
+		return 1;
 	}
 
 
 	/**
 	 *      \brief      Set invoice status as validate
 	 *      \param      user        Objet utilisateur qui valide la facture
-     *      \return     int         <0 si ko, >0 si ok
+	 *      \return     int         <0 si ko, >0 si ok
 	 */
 	function set_valid($user)
 	{
@@ -426,8 +437,8 @@ class FactureFournisseur extends Facture
 		$this->db->begin();
 
 		$sql = "UPDATE ".MAIN_DB_PREFIX."facture_fourn";
-    $sql.= " SET fk_statut = 1, fk_user_valid = ".$user->id;
-    $sql.= " WHERE rowid = ".$this->id;
+		$sql.= " SET fk_statut = 1, fk_user_valid = ".$user->id;
+		$sql.= " WHERE rowid = ".$this->id;
 
 		dol_syslog("FactureFournisseur::set_valid sql=".$sql, LOG_DEBUG);
 		$resql = $this->db->query($sql);
@@ -479,30 +490,30 @@ class FactureFournisseur extends Facture
 		{
 			$this->error=$this->db->error();
 			$this->db->rollback();
-            return -1;
+			return -1;
 		}
 	}
 
 
 	/**
-	* 		\brief     	Ajoute une ligne de facture (associ� � aucun produit/service pr�d�fini)
-	* 		\param    	desc            Description de la ligne
-	* 		\param    	pu              Prix unitaire (HT ou TTC selon price_base_type)
-	* 		\param    	txtva           Taux de tva forc�, sinon -1
-	* 		\param    	qty             Quantit�
-	*		\param    	fk_product      Id du produit/service pred�fini
-	* 		\param    	remise_percent  Pourcentage de remise de la ligne
-	* 		\param    	date_start      Date de debut de validit� du service
-	* 		\param    	date_end        Date de fin de validit� du service
-	* 		\param    	ventil          Code de ventilation comptable
-	* 		\param    	info_bits		Bits de type de lignes
-	* 		\param    	price_base_type HT ou TTC
-	* 		\param		type			Type of line (0=product, 1=service)
-	* 		\remarks	Les parametres sont deja cens� etre juste et avec valeurs finales a l'appel
-	*					de cette methode. Aussi, pour le taux tva, il doit deja avoir ete d�fini
-	*					par l'appelant par la methode get_default_tva(societe_vendeuse,societe_acheteuse,taux_produit)
-	*					et le desc doit deja avoir la bonne valeur (a l'appelant de gerer le multilangue)
-	*/
+	 * 		\brief     	Ajoute une ligne de facture (associ� � aucun produit/service pr�d�fini)
+	 * 		\param    	desc            Description de la ligne
+	 * 		\param    	pu              Prix unitaire (HT ou TTC selon price_base_type)
+	 * 		\param    	txtva           Taux de tva forc�, sinon -1
+	 * 		\param    	qty             Quantit�
+	 *		\param    	fk_product      Id du produit/service pred�fini
+	 * 		\param    	remise_percent  Pourcentage de remise de la ligne
+	 * 		\param    	date_start      Date de debut de validit� du service
+	 * 		\param    	date_end        Date de fin de validit� du service
+	 * 		\param    	ventil          Code de ventilation comptable
+	 * 		\param    	info_bits		Bits de type de lignes
+	 * 		\param    	price_base_type HT ou TTC
+	 * 		\param		type			Type of line (0=product, 1=service)
+	 * 		\remarks	Les parametres sont deja cens� etre juste et avec valeurs finales a l'appel
+	 *					de cette methode. Aussi, pour le taux tva, il doit deja avoir ete d�fini
+	 *					par l'appelant par la methode get_default_tva(societe_vendeuse,societe_acheteuse,taux_produit)
+	 *					et le desc doit deja avoir la bonne valeur (a l'appelant de gerer le multilangue)
+	 */
 	function addline($desc, $pu, $txtva, $qty, $fk_product=0, $remise_percent=0, $date_start='', $date_end='', $ventil=0, $info_bits='', $price_base_type='HT', $type=0)
 	{
 		dol_syslog("FactureFourn::Addline $desc,$pu,$qty,$txtva,$fk_product,$remise_percent,$date_start,$date_end,$ventil,$info_bits,$price_base_type,$type", LOG_DEBUG);
@@ -732,7 +743,7 @@ class FactureFournisseur extends Facture
 
 	/**
 	 *    	\brief      Renvoie nom clicable (avec eventuellement le picto)
-     *		\param		withpicto		0=Pas de picto, 1=Inclut le picto dans le lien, 2=Picto seul
+	 *		\param		withpicto		0=Pas de picto, 1=Inclut le picto dans le lien, 2=Picto seul
 	 *		\param		option			Sur quoi pointe le lien
 	 * 		\param		max				Max length of shown ref
 	 * 		\return		string			Chaine avec URL
@@ -755,9 +766,9 @@ class FactureFournisseur extends Facture
 
 
 	/**
-	*		\brief		Initialise la facture avec valeurs fictives aleatoire
-	*					Sert a generer une facture pour l'aperu des modeles ou demo
-	*/
+	 *		\brief		Initialise la facture avec valeurs fictives aleatoire
+	 *					Sert a generer une facture pour l'aperu des modeles ou demo
+	 */
 	function initAsSpecimen()
 	{
 		global $user,$langs,$conf;
-- 
GitLab