From 24fa2bd61810b01e2beb5927a6f33fe702d368d0 Mon Sep 17 00:00:00 2001 From: Rodolphe Quiedeville Date: Tue, 1 Mar 2005 11:00:21 +0000 Subject: [PATCH] Ajout fonction AddFacture --- htdocs/bon-prelevement.class.php | 430 +++++++++++++++++++++++-------- 1 file changed, 319 insertions(+), 111 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,45 +449,208 @@ class BonPrelevement */ function Generate() { + $result = -1; + /* + * En-tete Emetteur + */ + $this->EnregEmetteur(); - $nbfactures = sizeof($this->factures); - + /* + * 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 EnregDestinataire($rowid, $client_nom, $rib_banque, $rib_guichet, $rib_number, $amount) + { + fputs ($this->file, "06"); + 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 Destinataire C2 + + fputs ($this->file, substr($client->nom. " ",0,24)); + + // Domiciliation facultative D1 + + fputs ($this->file, substr(" ",0,24)); + + // Zone Réservée D2 + + fputs ($this->file, substr(" ",0,8)); + + // Code Guichet D3 + + fputs ($this->file, $rib_guichet); + + // Numero de compte D4 + + fputs ($this->file, substr("000000000000000".$rib_number, -11)); + + // Zone E Montant + + $montant = (round($amount,2) * 100); + + fputs ($this->file, substr("000000000000000".$montant, -16)); + + // Libellé F + + fputs ($this->file, substr("*".$this->ref.$rowid." ",0,13)); + fputs ($this->file, substr(" ",0,18)); + + // Code établissement G1 + + fputs ($this->file, $rib_banque); + + // Zone Réservée G2 + + fputs ($this->file, substr(" ",0,5)); + + fputs ($this->file, "\n"); + } + + + /* + * Enregistrements destinataires + * + * + */ + + function EnregDestinataireVersion1($fac) + { + fputs ($this->file, "06"); + 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 Destinataire C2 + + fputs ($this->file, substr($fac->client->nom. " ",0,24)); + + // Reference de la remise créancier D1 + + fputs ($this->file, substr(" ",0,24)); + + // Zone Réservée D2 + + fputs ($this->file, substr(" ",0,8)); + + // Code Guichet D3 + + fputs ($this->file, $fac->client->bank_account->code_guichet); + + // Numero de compte D4 + + fputs ($this->file, substr("000000000000000".$fac->client->bank_account->number, -11)); + + // Zone E Montant + + $montant = (round($fac->total_ttc,2) * 100); + + fputs ($this->file, substr("000000000000000".$montant, -16)); + + // Libellé F + + fputs ($this->file, substr("*".$fac->ref." ",0,13)); + fputs ($this->file, substr(" ",0,18)); + + // Code établissement G1 + + fputs ($this->file, $fac->client->bank_account->code_banque); + + // Zone Réservée G2 + + fputs ($this->file, substr(" ",0,5)); + + fputs ($this->file, "\n"); + } + /* * * */ - function EnregEmetteur() { fputs ($this->file, "03"); @@ -445,71 +713,11 @@ class BonPrelevement } /* - * Enregistrements destinataires - * + * Pied de page * */ - function EnregDestinataire($fac) - { - fputs ($this->file, "06"); - 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 Destinataire C2 - - fputs ($this->file, substr($fac->client->nom. " ",0,24)); - - // Reference de la remise créancier D1 - - fputs ($this->file, substr(" ",0,24)); - - // Zone Réservée D2 - - fputs ($this->file, substr(" ",0,8)); - - // Code Guichet D3 - - fputs ($this->file, $fac->client->bank_account->code_guichet); - - // Numero de compte D4 - - fputs ($this->file, substr("000000000000000".$fac->client->bank_account->number, -11)); - - // Zone E Montant - - $montant = (round($fac->total_ttc,2) * 100); - - fputs ($this->file, substr("000000000000000".$montant, -16)); - - // Libellé F - - fputs ($this->file, substr("*".$fac->ref." ",0,13)); - fputs ($this->file, substr(" ",0,18)); - - // Code établissement G1 - - fputs ($this->file, $fac->client->bank_account->code_banque); - - // Zone Réservée G2 - - fputs ($this->file, substr(" ",0,5)); - - fputs ($this->file, "\n"); - } - - - function EnregTotal($total) { fputs ($this->file, "08");