From 24fa2bd61810b01e2beb5927a6f33fe702d368d0 Mon Sep 17 00:00:00 2001
From: Rodolphe Quiedeville <rodolphe@quiedeville.org>
Date: Tue, 1 Mar 2005 11:00:21 +0000
Subject: [PATCH] Ajout fonction AddFacture

---
 htdocs/bon-prelevement.class.php | 356 ++++++++++++++++++++++++-------
 1 file changed, 282 insertions(+), 74 deletions(-)

diff --git a/htdocs/bon-prelevement.class.php b/htdocs/bon-prelevement.class.php
index f26b00c33c5..e77fee6e95d 100644
--- a/htdocs/bon-prelevement.class.php
+++ b/htdocs/bon-prelevement.class.php
@@ -60,6 +60,112 @@ class BonPrelevement
 
       return 1;
     }
+  /*
+   *
+   *
+   *
+   */
+  function AddFacture($facture_id, $client_id, $client_nom, $amount, $code_banque, $code_guichet, $number)
+  {
+    $result = 0;
+    $ligne_id = 0;
+
+    $result = $this->AddLigne($ligne_id, $client_id, $client_nom, 
+			      $amount, $code_banque, $code_guichet, $number);
+    
+    if ($result == 0)
+      {	
+	if ($ligne_id > 0)
+	  {	    
+	    $sql = "INSERT INTO ".MAIN_DB_PREFIX."prelevement_facture ";
+	    $sql .= " (fk_facture,fk_prelevement_lignes)";
+	    $sql .= " VALUES (".$facture_id.",".$ligne_id.")";
+	    
+	    if ($this->db->query($sql))
+	      {      
+		$result = 0;	
+	      }
+	    else
+	      {
+		$result = -1;
+		dolibarr_syslog("BonPrelevement::AddFacture Erreur $result");
+	      }
+	  }
+	else
+	  {
+	    $result = -2;
+	    dolibarr_syslog("BonPrelevement::AddFacture Erreur $result");
+	  }
+      }
+    else
+      {
+	$result = -3;
+	dolibarr_syslog("BonPrelevement::AddFacture Erreur $result");
+      }
+
+    return $result;
+
+  }
+  /*
+   *
+   *
+   */
+  function AddLigne(&$ligne_id, $client_id, $client_nom, $amount, $code_banque, $code_guichet, $number)
+  {
+    $result = -1;
+    $concat = 0;
+
+    if ($concat == 1)
+      {
+	/*
+	 * On aggr�ge les lignes 
+	 */
+	$sql = "SELECT rowid FROM  ".MAIN_DB_PREFIX."prelevement_lignes";
+	$sql .= " WHERE fk_prelevement_bons".$this->id;
+	$sql .= " AND fk_soc       =".$client_id;
+	$sql .= " AND code_banque  ='".$code_banque."'";
+	$sql .= " AND code_guichet ='".$code_guichet."'";
+	$sql .= " AND number       ='".$number."'";
+
+	if ($this->db->query($sql))
+	  {
+	    $num = $this->db->num_rows();
+	  }
+	else
+	  {
+	    $result = -1;
+	  }
+      }
+    else
+      {
+	/*
+	 * Pas de d'agr�gation
+	 */
+	$sql = "INSERT INTO ".MAIN_DB_PREFIX."prelevement_lignes (fk_prelevement_bons";
+	$sql .= " , fk_soc , client_nom ";
+	$sql .= " , amount";
+	$sql .= " , code_banque , code_guichet , number)";
+
+	$sql .= " VALUES (".$this->id;
+	$sql .= ",".$client_id.",'".addslashes($client_nom)."'";
+	$sql .= ",'".ereg_replace(",",".",$amount)."'";
+	$sql .= ", '$code_banque', '$code_guichet', '$number')";
+
+	if ($this->db->query($sql))
+	  {
+	    $ligne_id = $this->db->last_insert_id();
+	    $result = 0;
+	  }
+	else
+	  {
+	    dolibarr_syslog("BonPrelevement::AddLigne Erreur -2");
+	    $result = -2;
+	  }
+
+      }
+
+    return $result; 
+  }
   /*
    *
    *
@@ -73,7 +179,9 @@ class BonPrelevement
     $sql .= " , method_trans, fk_user_trans";
     $sql .= ",".$this->db->pdate("p.date_credit")." as date_credit";
     $sql .= " , fk_user_credit";
-    $sql .= " FROM ".MAIN_DB_PREFIX."prelevement as p";
+
+    $sql .= " FROM ".MAIN_DB_PREFIX."prelevement_bons as p";
+
     $sql .= " WHERE p.rowid=".$rowid;
       
     $result=$this->db->query($sql);
@@ -101,13 +209,13 @@ class BonPrelevement
 	  }
 	else
 	  {
-	    dolibarr_syslog("bon-prelevment::Fetch Erreur aucune ligne retourn�e");
+	    dolibarr_syslog("BonPrelevement::Fetch Erreur aucune ligne retourn�e");
 	    return -1;
 	  }
       }
     else
       {
-	dolibarr_syslog("bon-prelevment::Fetch Erreur ");
+	dolibarr_syslog("BonPrelevement::Fetch Erreur ");
 	dolibarr_syslog($sql);
 	return -2;
       }
@@ -122,16 +230,14 @@ class BonPrelevement
 
     if ($this->db->begin())
       {
-
-
-	$sql = " UPDATE ".MAIN_DB_PREFIX."prelevement ";
+	$sql = " UPDATE ".MAIN_DB_PREFIX."prelevement_bons ";
 	$sql .= " SET credite = 1";
 	$sql .= " WHERE rowid=".$this->id;
       
 	$result=$this->db->query($sql);
 	if (! $result)
 	  {
-	    dolibarr_syslog("bon-prelevment::set_credite Erreur 1");
+	    dolibarr_syslog("bon-prelevement::set_credite Erreur 1");
 	    $error++;
 	  }
 
@@ -157,18 +263,14 @@ class BonPrelevement
 
 	if ($error == 0)
 	  {
-	    /*
-	     * Change le statut des lignes de factures
-	     */
-
-	    $sql = " UPDATE ".MAIN_DB_PREFIX."prelevement_facture ";
-	    $sql .= " SET statut = 1";
-	    $sql .= " WHERE fk_prelevement=".$this->id;
 	    
-	    $result=$this->db->query($sql);
-	    if (!$result)
+	    $sql = " UPDATE ".MAIN_DB_PREFIX."prelevement_lignes ";
+	    $sql .= " SET statut  = 2";
+	    $sql .= " WHERE fk_prelevement_bons=".$this->id;
+	    
+	    if (! $this->db->query($sql))
 	      {
-		dolibarr_syslog("bon-prelevment::set_credite Erreur 3");
+		dolibarr_syslog("BonPrelevement::set_infocredit Erreur 1");
 		$error++;
 	      }
 	  }
@@ -184,8 +286,10 @@ class BonPrelevement
 	  }
 	else
 	  {
+
 	    $this->db->rollback();
-	    dolibarr_syslog("bon-prelevment::set_credite ROLLBACK ");
+	    dolibarr_syslog("BonPrelevement::set_credite ROLLBACK ");
+
 	    return -1;
 	  }
 	
@@ -194,7 +298,7 @@ class BonPrelevement
     else
       {
 	
-	dolibarr_syslog("bon-prelevment::set_credite Ouverture transaction SQL impossible ");
+	dolibarr_syslog("BonPrelevement::set_credite Ouverture transaction SQL impossible ");
 	return -2;
       }
   }
@@ -208,18 +312,16 @@ class BonPrelevement
 
     if ($this->db->begin())
       {
-
-
-	$sql = " UPDATE ".MAIN_DB_PREFIX."prelevement ";
+	$sql = " UPDATE ".MAIN_DB_PREFIX."prelevement_bons ";
 	$sql .= " SET fk_user_credit = ".$user->id;
+	$sql .= " , statut = 2";
 	$sql .= " , date_credit='".$this->db->idate($date)."'";
 	$sql .= " WHERE rowid=".$this->id;
-      
-	$result=$this->db->query($sql);
-	if (! $result)
+      	$sql .= " AND statut = 1";
+
+	if (! $this->db->query($sql))
 	  {
-	    dolibarr_syslog("bon-prelevment::set_infotrans Erreur 1");
-	    dolibarr_syslog($this->db->error());
+	    dolibarr_syslog("BonPrelevement::set_infocredit Erreur 1");
 	    $error++;
 	  }
 
@@ -234,15 +336,17 @@ class BonPrelevement
 	  }
 	else
 	  {
+
 	    $this->db->rollback();
 	    dolibarr_syslog("bon-prelevment::set_infotrans ROLLBACK ");
+
 	    return -1;
 	  }		
       }
     else
       {
 	
-	dolibarr_syslog("bon-prelevment::set_infotrans Ouverture transaction SQL impossible ");
+	dolibarr_syslog("bon-prelevement::set_infocredit Ouverture transaction SQL impossible ");
 	return -2;
       }
   }
@@ -257,17 +361,17 @@ class BonPrelevement
     if ($this->db->begin())
       {
 
-
-	$sql = " UPDATE ".MAIN_DB_PREFIX."prelevement ";
+	$sql = " UPDATE ".MAIN_DB_PREFIX."prelevement_bons ";
 	$sql .= " SET fk_user_trans = ".$user->id;
 	$sql .= " , date_trans='".$this->db->idate($date)."'";
 	$sql .= " , method_trans=".$method;
+	$sql .= " , statut = 1";
 	$sql .= " WHERE rowid=".$this->id;
+      	$sql .= " AND statut = 0";
       
-	$result=$this->db->query($sql);
-	if (! $result)
+	if (! $this->db->query($sql))
 	  {
-	    dolibarr_syslog("bon-prelevment::set_infotrans Erreur 1");
+	    dolibarr_syslog("bon-prelevement::set_infotrans Erreur 1");
 	    dolibarr_syslog($this->db->error());
 	    $error++;
 	  }
@@ -284,14 +388,15 @@ class BonPrelevement
 	else
 	  {
 	    $this->db->rollback();
-	    dolibarr_syslog("bon-prelevment::set_infotrans ROLLBACK ");
+	    dolibarr_syslog("BonPrelevement::set_infotrans ROLLBACK ");
+
 	    return -1;
 	  }		
       }
     else
       {
 	
-	dolibarr_syslog("bon-prelevment::set_infotrans Ouverture transaction SQL impossible ");
+	dolibarr_syslog("BonPrelevement::set_infotrans Ouverture transaction SQL impossible ");
 	return -2;
       }
   }
@@ -344,48 +449,86 @@ class BonPrelevement
    */
   function Generate()
   {
-    $this->EnregEmetteur();
+    $result = -1;
+    /*
+     * En-tete Emetteur
+     */
 
-    $nbfactures = sizeof($this->factures);
+    $this->EnregEmetteur();
 
+    /*
+     * Lignes
+     */
     $this->total = 0;
 
+    $sql = "SELECT rowid, client_nom, code_banque, code_guichet, number, amount";
+    $sql .= " FROM ".MAIN_DB_PREFIX."prelevement_lignes";
+    $sql .= " WHERE fk_prelevement_bons = ".$this->id;
+
+    $i = 0;
+
+    if ($this->db->query($sql))
+      {
+	$num = $this->db->num_rows();
+
+	while ($i < $num)
+	  {
+	    $row = $this->db->fetch_row();
+
+	    $this->EnregDestinataire($row[0], 
+				     $row[1], 
+				     $row[2], 
+				     $row[3], 
+				     $row[4], 
+				     $row[5]);
+
+	    $this->total = $this->total + $row[5];
+
+	    $i++;
+	  }
+      }
+    else
+      {
+	$result = -2;
+      }
+    /*
+    $nbfactures = sizeof($this->factures);
     for ($i = 0 ; $i < $nbfactures ; $i++)
       {
 	$fac = new Facture($this->db);
 	$fac->fetch($this->factures[$i]);
 	$fac->fetch_client();
-
-	$fac->client->rib(); // Set client->bank_account
-
-
-	if ($fac->client->bank_account->verif())
-	  {
+	$fac->client->rib();
+	if ($fac->client->bank_account->verif()) {
 	    $this->total = $this->total + $fac->total_ttc;
-
 	    $this->EnregDestinataire($fac);
-	  }
-	else
-	  {
+	  }else{
 	    print $fac->client->bank_account->error_message;
-	    print $fac->client->nom;
-	  }
+	    print $fac->client->nom; }
       }
+    */
+
+    /*
+     * Pied de page total
+     */
 
     $this->EnregTotal($this->total);
 
     fclose($this->file);
+
+    return $result;
   }
 
 
   /*
+   * Enregistrements destinataires
    *
    *
    */
 
-  function EnregEmetteur()
+  function EnregDestinataire($rowid, $client_nom, $rib_banque, $rib_guichet, $rib_number, $amount)
   {
-    fputs ($this->file, "03");
+    fputs ($this->file, "06");
     fputs ($this->file, "08"); // Pr�l�vement ordinaire
 
     fputs ($this->file, "        "); // Zone R�serv�e B2
@@ -398,60 +541,56 @@ class BonPrelevement
     fputs ($this->file, strftime("%d%m", $this->date_echeance));
     fputs ($this->file, substr(strftime("%y", $this->date_echeance),1));
     
-    // Raison Sociale C2
+    // Raison Sociale Destinataire C2
 
-    fputs ($this->file, substr($this->raison_sociale. "                           ",0,24));
+    fputs ($this->file, substr($client->nom. "                           ",0,24));
 
-    // Reference de la remise cr�ancier D1 sur 7 caract�res
+    // Domiciliation facultative D1
 
-    fputs ($this->file, substr($this->reference_remise. "                           ",0,7));
-
-    // Zone R�serv�e D1-2
- 
-    fputs ($this->file, substr("                                    ",0,17));
+    fputs ($this->file, substr("                                    ",0,24));
 
     // Zone R�serv�e D2
 
-    fputs ($this->file, substr("                             ",0,2));
-    fputs ($this->file, "E");
-    fputs ($this->file, substr("                             ",0,5));
+    fputs ($this->file, substr("                             ",0,8));
     
     // Code Guichet  D3
 
-    fputs ($this->file, $this->emetteur_code_guichet);
+    fputs ($this->file, $rib_guichet);
 
     // Numero de compte D4
 
-    fputs ($this->file, substr("000000000000000".$this->emetteur_numero_compte, -11));
+    fputs ($this->file, substr("000000000000000".$rib_number, -11));
 
-    // Zone R�serv�e E
+    // Zone E Montant
  
-    fputs ($this->file, substr("                                        ",0,16));
+    $montant = (round($amount,2) * 100);
 
-    // Zone R�serv�e F
+    fputs ($this->file, substr("000000000000000".$montant, -16));
+
+    // Libell� F
  
-    fputs ($this->file, substr("                                        ",0,31));
+    fputs ($this->file, substr("*".$this->ref.$rowid."                                   ",0,13));
+    fputs ($this->file, substr("                                        ",0,18));
 
-    // Code �tablissement
+    // Code �tablissement G1
 
-    fputs ($this->file, $this->emetteur_code_etablissement);
+    fputs ($this->file, $rib_banque);
 
-    // Zone R�serv�e G
+    // Zone R�serv�e G2
  
     fputs ($this->file, substr("                                        ",0,5));
 
     fputs ($this->file, "\n");
-
   }
 
+
   /*
    * Enregistrements destinataires
    *
    *
    */
 
-
-  function EnregDestinataire($fac)
+  function EnregDestinataireVersion1($fac)
   {
     fputs ($this->file, "06");
     fputs ($this->file, "08"); // Pr�l�vement ordinaire
@@ -508,6 +647,75 @@ class BonPrelevement
     fputs ($this->file, "\n");
   }
 
+  /*
+   *
+   *
+   */
+  function EnregEmetteur()
+  {
+    fputs ($this->file, "03");
+    fputs ($this->file, "08"); // Pr�l�vement ordinaire
+
+    fputs ($this->file, "        "); // Zone R�serv�e B2
+
+    fputs ($this->file, $this->numero_national_emetteur); // Num�ro National d'emmetteur B3
+
+    // Date d'�ch�ance C1
+
+    fputs ($this->file, "       "); 
+    fputs ($this->file, strftime("%d%m", $this->date_echeance));
+    fputs ($this->file, substr(strftime("%y", $this->date_echeance),1));
+    
+    // Raison Sociale C2
+
+    fputs ($this->file, substr($this->raison_sociale. "                           ",0,24));
+
+    // Reference de la remise cr�ancier D1 sur 7 caract�res
+
+    fputs ($this->file, substr($this->reference_remise. "                           ",0,7));
+
+    // Zone R�serv�e D1-2
+ 
+    fputs ($this->file, substr("                                    ",0,17));
+
+    // Zone R�serv�e D2
+
+    fputs ($this->file, substr("                             ",0,2));
+    fputs ($this->file, "E");
+    fputs ($this->file, substr("                             ",0,5));
+    
+    // Code Guichet  D3
+
+    fputs ($this->file, $this->emetteur_code_guichet);
+
+    // Numero de compte D4
+
+    fputs ($this->file, substr("000000000000000".$this->emetteur_numero_compte, -11));
+
+    // Zone R�serv�e E
+ 
+    fputs ($this->file, substr("                                        ",0,16));
+
+    // Zone R�serv�e F
+ 
+    fputs ($this->file, substr("                                        ",0,31));
+
+    // Code �tablissement
+
+    fputs ($this->file, $this->emetteur_code_etablissement);
+
+    // Zone R�serv�e G
+ 
+    fputs ($this->file, substr("                                        ",0,5));
+
+    fputs ($this->file, "\n");
+
+  }
+
+  /*
+   * Pied de page
+   *
+   */
 
 
   function EnregTotal($total)
-- 
GitLab