From 41063e7cf2756a1c850b7c0094fa4fe7cf95930a Mon Sep 17 00:00:00 2001
From: Laurent Destailleur <eldy@destailleur.fr>
Date: Tue, 28 Mar 2017 12:55:20 +0200
Subject: [PATCH] Fix: trigger for delete must be before delete of element

---
 htdocs/commande/class/commande.class.php      |  6 +-
 .../class/companybankaccount.class.php        | 68 ++++++++++---------
 2 files changed, 37 insertions(+), 37 deletions(-)

diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php
index 13a3dab037d..e87923beb8c 100644
--- a/htdocs/commande/class/commande.class.php
+++ b/htdocs/commande/class/commande.class.php
@@ -3102,6 +3102,8 @@ class Commande extends CommonOrder
 
         $error = 0;
 
+        dol_syslog(get_class($this) . "::delete ".$this->id, LOG_DEBUG);
+        
         $this->db->begin();
 
         if (! $error && ! $notrigger)
@@ -3117,7 +3119,6 @@ class Commande extends CommonOrder
         {
         	// Delete order details
         	$sql = 'DELETE FROM '.MAIN_DB_PREFIX."commandedet WHERE fk_commande = ".$this->id;
-        	dol_syslog(get_class($this)."::delete", LOG_DEBUG);
         	if (! $this->db->query($sql) )
         	{
         		$error++;
@@ -3126,7 +3127,6 @@ class Commande extends CommonOrder
 
         	// Delete order
         	$sql = 'DELETE FROM '.MAIN_DB_PREFIX."commande WHERE rowid = ".$this->id;
-        	dol_syslog(get_class($this)."::delete", LOG_DEBUG);
         	if (! $this->db->query($sql) )
         	{
         		$error++;
@@ -3184,7 +3184,6 @@ class Commande extends CommonOrder
 
         if (! $error)
         {
-        	dol_syslog(get_class($this)."::delete $this->id by $user->id", LOG_DEBUG);
         	$this->db->commit();
         	return 1;
         }
@@ -3192,7 +3191,6 @@ class Commande extends CommonOrder
         {
 	        foreach($this->errors as $errmsg)
 	        {
-		        dol_syslog(get_class($this)."::delete ".$errmsg, LOG_ERR);
 		        $this->error.=($this->error?', '.$errmsg:$errmsg);
 	        }
 	        $this->db->rollback();
diff --git a/htdocs/societe/class/companybankaccount.class.php b/htdocs/societe/class/companybankaccount.class.php
index 64205c62363..72f237999f8 100644
--- a/htdocs/societe/class/companybankaccount.class.php
+++ b/htdocs/societe/class/companybankaccount.class.php
@@ -235,47 +235,49 @@ class CompanyBankAccount extends Account
     /**
      *  Delete a rib from database
      *
-     *	@param		User		$user		User deleting
+     *	@param		User	$user		User deleting
      *	@param  	int		$notrigger	1=Disable triggers
-     *  @return		int		<0 if KO, >0 if OK
+     *  @return		int		            <0 if KO, >0 if OK
      */
     function delete(User $user = null, $notrigger=0)
     {
         global $conf;
-	$error = 0;
-        $sql = "DELETE FROM ".MAIN_DB_PREFIX."societe_rib";
-        $sql.= " WHERE rowid  = ".$this->id;
-        dol_syslog(get_class($this)."::delete", LOG_DEBUG);
-        $result = $this->db->query($sql);
-        if ($result)
-	{
+        
+        $error = 0;
+        
+        dol_syslog(get_class($this) . "::delete ".$this->id, LOG_DEBUG);
+        
+        $this->db->begin();
+        
+        if (! $error && ! $notrigger)
+        {
+            // Call trigger
+            $result=$this->call_trigger('COMAPNY_RIB_DELETE',$user);
+            if ($result < 0) $error++;
+            // End call triggers
+        }
 
-		if (! $notrigger)
-		{
-			// Call trigger
-			$result=$this->call_trigger('COMPANY_RIB_CREATE',$user);
-			if ($result < 0) $error++;
-			// End call triggers
-			
-			if(! $error )
-			{
-				return 1;
-			}
-			else
-			{
-				return -1;
-			}
-		}
-		else
-		{
-			return 1;
-		}
-	
+        if (! $error)
+        {
+            $sql = "DELETE FROM " . MAIN_DB_PREFIX . "societe_rib";
+            $sql .= " WHERE rowid  = " . $this->id;
+            
+            if (! $this->db->query($sql))
+        	{
+        		$error++;
+        		$this->errors[]=$this->db->lasterror();
+        	}
+        }
+        
+        if (! $error)
+        {
+            $this->db->commit();
+            return 1;
         }
         else
-	{
-            dol_print_error($this->db);
-            return -1;
+        {
+            $this->db->rollback();
+            return -1*$error;
         }
     }
 
-- 
GitLab