diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php index 724a8a0743e..d77cf72eca5 100644 --- a/htdocs/compta/facture.php +++ b/htdocs/compta/facture.php @@ -1139,9 +1139,8 @@ else /* - * Confirmation de la suppression de la facture - * - */ + * Confirmation de la suppression de la facture + */ if ($_GET['action'] == 'delete') { $html->form_confirm($_SERVER['PHP_SELF'].'?facid='.$fac->id,$langs->trans('DeleteBill'),$langs->trans('ConfirmDeleteBill'),'confirm_delete'); @@ -1153,7 +1152,7 @@ else */ if ($_GET['action'] == 'valid') { - $numfa = facture_get_num($soc); + $numfa = $fac->getNextNumRef($soc); $html->form_confirm($_SERVER["PHP_SELF"].'?facid='.$fac->id,$langs->trans('ValidateBill'),$langs->trans('ConfirmValidateBill',$numfa),'confirm_valid'); print '
'; } diff --git a/htdocs/compta/facture/facture-rec.class.php b/htdocs/compta/facture/facture-rec.class.php index 93ced228a1d..84b033105bd 100644 --- a/htdocs/compta/facture/facture-rec.class.php +++ b/htdocs/compta/facture/facture-rec.class.php @@ -293,7 +293,7 @@ class FactureRec { $action_notify = 2; // ne pas modifier cette valeur - $numfa = facture_get_num($soc); // définit dans includes/modules/facture + $numfa = $this->getNextNumRef($soc); $sql = "UPDATE ".MAIN_DB_PREFIX."facture set facnumber='$numfa', fk_statut = 1, fk_user_valid = $user->id WHERE rowid = $rowid ;"; $result = $this->db->query( $sql); @@ -342,6 +342,49 @@ class FactureRec } } + /** + * \brief Renvoie la référence de facture suivante non utilisée en fonction du module + * de numérotation actif défini dans FACTURE_ADDON + * \param soc objet societe + * \return string reference libre pour la facture + */ + function getNextNumRef($soc) + { + global $db, $langs; + $langs->load("bills"); + + $dir = DOL_DOCUMENT_ROOT . "/includes/modules/facture/"; + + if (defined("FACTURE_ADDON") && FACTURE_ADDON) + { + $file = FACTURE_ADDON."/".FACTURE_ADDON.".modules.php"; + + // Chargement de la classe de numérotation + $classname = "mod_facture_".FACTURE_ADDON; + require_once($dir.$file); + + $obj = new $classname(); + + $numref = ""; + $numref = $obj->getNumRef($soc,$this); + + if ( $numref != "") + { + return $numref; + } + else + { + dolibarr_print_error($db,"modules_facture::getNextNumRef ".$obj->error); + return ""; + } + } + else + { + print $langs->trans("Error")." ".$langs->trans("Error_FACTURE_ADDON_NotDefined"); + return ""; + } + } + /** * Ajoute un produit dans la facture */ diff --git a/htdocs/facture.class.php b/htdocs/facture.class.php index dd6ca58844b..a131bb845d6 100644 --- a/htdocs/facture.class.php +++ b/htdocs/facture.class.php @@ -56,7 +56,6 @@ class Facture var $paye; var $propalid; var $projetid; - var $prefixe_facture; var $cond_reglement_id; var $cond_reglement_code; var $mode_reglement_id; @@ -82,7 +81,6 @@ class Facture $this->total = 0; $this->propalid = 0; $this->projetid = 0; - $this->prefixe_facture = ''; // utilisé dans le module de numérotation saturne $this->remise_exceptionnelle = 0; $this->products = array(); // Tableau de lignes de factures @@ -806,7 +804,7 @@ class Facture } else { - $numfa = facture_get_num($soc, $this->prefixe_facture); // définit dans includes/modules/facture + $numfa = $this->getNextNumRef($soc); } $this->db->begin(); @@ -1346,11 +1344,54 @@ class Facture } + /** + * \brief Renvoie la référence de facture suivante non utilisée en fonction du module + * de numérotation actif défini dans FACTURE_ADDON + * \param soc objet societe + * \return string reference libre pour la facture + */ + function getNextNumRef($soc) + { + global $db, $langs; + $langs->load("bills"); + + $dir = DOL_DOCUMENT_ROOT . "/includes/modules/facture/"; + + if (defined("FACTURE_ADDON") && FACTURE_ADDON) + { + $file = FACTURE_ADDON."/".FACTURE_ADDON.".modules.php"; + + // Chargement de la classe de numérotation + $classname = "mod_facture_".FACTURE_ADDON; + require_once($dir.$file); + + $obj = new $classname(); + + $numref = ""; + $numref = $obj->getNumRef($soc,$this); + + if ( $numref != "") + { + return $numref; + } + else + { + dolibarr_print_error($db,"modules_facture::getNextNumRef ".$obj->error); + return ""; + } + } + else + { + print $langs->trans("Error")." ".$langs->trans("Error_FACTURE_ADDON_NotDefined"); + return ""; + } + } + /** - * \brief Mets à jour les commentaires - * \param note note - * \return int <0 si erreur, >0 si ok - */ + * \brief Mets à jour les commentaires + * \param note note + * \return int <0 si erreur, >0 si ok + */ function update_note($note) { $sql = 'UPDATE '.MAIN_DB_PREFIX."facture SET note = '".addslashes($note)."'"; diff --git a/htdocs/includes/modules/facture/modules_facture.php b/htdocs/includes/modules/facture/modules_facture.php index 24724c7c1db..3ad78c7c2c0 100644 --- a/htdocs/includes/modules/facture/modules_facture.php +++ b/htdocs/includes/modules/facture/modules_facture.php @@ -55,6 +55,7 @@ class ModelePDFFactures extends FPDF /** * \brief Renvoi la liste des modèles actifs + * \param db Handler de base */ function liste_modeles($db) { @@ -83,8 +84,9 @@ class ModelePDFFactures extends FPDF } -/** \class ModeleNumRefFactures - \brief Classe mère des modèles de numérotation des références de facture +/** + \class ModeleNumRefFactures + \brief Classe mère des modèles de numérotation des références de facture */ class ModeleNumRefFactures @@ -140,52 +142,52 @@ class ModeleNumRefFactures */ function facture_pdf_create($db, $facid, $message="") { - global $langs; - $langs->load("bills"); - - $dir = DOL_DOCUMENT_ROOT . "/includes/modules/facture/"; + global $langs; + $langs->load("bills"); - if (defined("FACTURE_ADDON_PDF") && FACTURE_ADDON_PDF) + $dir = DOL_DOCUMENT_ROOT . "/includes/modules/facture/"; + + if (defined("FACTURE_ADDON_PDF") && FACTURE_ADDON_PDF) { - $file = "pdf_".FACTURE_ADDON_PDF.".modules.php"; + $file = "pdf_".FACTURE_ADDON_PDF.".modules.php"; - $classname = "pdf_".FACTURE_ADDON_PDF; - require_once($dir.$file); + $classname = "pdf_".FACTURE_ADDON_PDF; + require_once($dir.$file); - $obj = new $classname($db); + $obj = new $classname($db); - $obj->message = $message; + $obj->message = $message; - if ( $obj->write_pdf_file($facid) > 0) - { - // Succès de la création de la facture. On génère le fichier meta - facture_meta_create($db, $facid); - - // et on supprime l'image correspondant au preview - facture_delete_preview($db, $facid); - - return 1; - } - else - { - dolibarr_syslog("Erreur dans facture_pdf_create"); - dolibarr_print_error($db,$obj->pdferror()); - return 0; - } + if ( $obj->write_pdf_file($facid) > 0) + { + // Succès de la création de la facture. On génère le fichier meta + facture_meta_create($db, $facid); + + // et on supprime l'image correspondant au preview + facture_delete_preview($db, $facid); + + return 1; + } + else + { + dolibarr_syslog("Erreur dans facture_pdf_create"); + dolibarr_print_error($db,$obj->pdferror()); + return 0; + } } - else + else { - print $langs->trans("Error")." ".$langs->trans("Error_FACTURE_ADDON_PDF_NotDefined"); - return 0; + print $langs->trans("Error")." ".$langs->trans("Error_FACTURE_ADDON_PDF_NotDefined"); + return 0; } } /** - \brief Créé un meta fichier à côté de la facture sur le disque pour faciliter les recherches en texte plein. Pourquoi ? tout simplement parcequ'en fin d'exercice quand je suis avec mon comptable je n'ai pas de connexion internet "rapide" pour retrouver en 2 secondes une facture non payée ou compliquée à gérer ... avec un rgrep c'est vite fait bien fait [eric seigne] - \param db objet base de donnée - \param facid id de la facture à créer - \param message message + \brief Créé un meta fichier à côté de la facture sur le disque pour faciliter les recherches en texte plein. Pourquoi ? tout simplement parcequ'en fin d'exercice quand je suis avec mon comptable je n'ai pas de connexion internet "rapide" pour retrouver en 2 secondes une facture non payée ou compliquée à gérer ... avec un rgrep c'est vite fait bien fait [eric seigne] + \param db Objet base de donnée + \param facid Id de la facture à créer + \param message Message */ function facture_meta_create($db, $facid, $message="") { @@ -239,52 +241,7 @@ ITEM_" . $i . "_DESCRIPTION=\"" . str_replace("\r\n","",nl2br($fac->lignes[$i]-> /** - \brief Renvoie la référence de facture suivante non utilisée en fonction du module - de numérotation actif défini dans FACTURE_ADDON - \param soc objet societe - \param prefixe_additionnel prefixe additionnel - \return string reference libre pour la facture -*/ -function facture_get_num($soc, $prefixe_additionnel='') -{ - global $db, $langs; - $langs->load("bills"); - - $dir = DOL_DOCUMENT_ROOT . "/includes/modules/facture/"; - - if (defined("FACTURE_ADDON") && FACTURE_ADDON) - { - - $file = FACTURE_ADDON."/".FACTURE_ADDON.".modules.php"; - - // Chargement de la classe de numérotation - $classname = "mod_facture_".FACTURE_ADDON; - require_once($dir.$file); - - $obj = new $classname(); - - $numref = ""; - $numref = $obj->getNumRef($soc, $prefixe_additionnel); - - if ( $numref != "") - { - return $numref; - } - else - { - dolibarr_print_error($db,"modules_facture::facture_get_num ".$obj->error); - return ""; - } - } - else - { - print $langs->trans("Error")." ".$langs->trans("Error_FACTURE_ADDON_NotDefined"); - return ""; - } -} - -/** - \brief Supprime l'image de prévisualitation, pour le cas de régénération de facture + \brief Supprime l'image de prévisualitation, pour le cas de régénération de facture \param db objet base de donnée \param facid id de la facture à créer */ @@ -297,20 +254,20 @@ function facture_delete_preview($db, $facid) $fac->fetch_client(); if ($conf->facture->dir_output) - { + { $facref = sanitize_string($fac->ref); $dir = $conf->facture->dir_output . "/" . $facref ; $file = $dir . "/" . $facref . ".pdf.png"; if ( file_exists( $file ) && is_writable( $file ) ) - { + { if ( ! unlink($file) ) - { + { $this->error=$langs->trans("ErrorFailedToOpenFile",$file); return 0; - } } } + } } ?> diff --git a/htdocs/includes/modules/facture/saturne/saturne.modules.php b/htdocs/includes/modules/facture/saturne/saturne.modules.php index 4109d72265f..33bc999b763 100644 --- a/htdocs/includes/modules/facture/saturne/saturne.modules.php +++ b/htdocs/includes/modules/facture/saturne/saturne.modules.php @@ -49,21 +49,22 @@ class mod_facture_saturne extends ModeleNumRefFactures */ function getExample() { - return "PREFIX084"; + return "FA123084"; } /*! \brief Renvoie la référence de facture suivante non utilisée * \param objsoc Objet société - * \param prefixe_additionnel Prefix additionnel + * \param objfac Objet facture * \return string Texte descripif */ - function getNumRef($objsoc=0, $prefixe_additionnel) + function getNumRef($objsoc=0,$objfac) { + $prefix='FA'; $y = strftime("%y",time()); $m = strftime("%m",time()); - return $prefixe_additionnel . $m . substr($y, -1); + return $prefix.$objfac->id . $m . substr($y, -1); } }