diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php index e7ddfc98a18..154b9c24afe 100644 --- a/htdocs/compta/facture.php +++ b/htdocs/compta/facture.php @@ -31,7 +31,7 @@ */ require('./pre.inc.php'); -require_once(DOL_DOCUMENT_ROOT ."/includes/modules/facture/modules_facture.php"); +require_once(DOL_DOCUMENT_ROOT.'/includes/modules/facture/modules_facture.php'); require_once(DOL_DOCUMENT_ROOT.'/facture.class.php'); require_once(DOL_DOCUMENT_ROOT.'/discount.class.php'); require_once(DOL_DOCUMENT_ROOT.'/paiement.class.php'); @@ -41,8 +41,7 @@ if ($conf->propal->enabled) require_once(DOL_DOCUMENT_ROOT.'/propal.class.php' if ($conf->contrat->enabled) require_once(DOL_DOCUMENT_ROOT.'/contrat/contrat.class.php'); if ($conf->commande->enabled) require_once(DOL_DOCUMENT_ROOT.'/commande/commande.class.php'); -$user->getrights('facture'); -$user->getrights('banque'); +$user->getrights(); if (! $user->rights->facture->lire) accessforbidden(); @@ -129,6 +128,17 @@ if (($_POST['action'] == 'confirm_deleteproductline' && $_POST['confirm'] == 'ye } } +// Supprime affectation d'un avoir a la facture +if ($_GET['action'] == 'unlinkdiscount') +{ + if ($user->rights->facture->creer) + { + $discount=new DiscountAbsolute($db); + $result=$discount->fetch($_GET["discountid"]); + $discount->unlink_invoice(); + } +} + // Validation if ($_GET['action'] == 'valid') { @@ -214,13 +224,11 @@ if ($_POST['action'] == "setabsolutediscount" && $user->rights->facture->creer) $discount = new DiscountAbsolute($db); $discount->fetch($_POST["remise_id_for_payment"]); - $result=$discount->link_to_invoice(0,$fac->rowid); + $result=$discount->link_to_invoice(0,$_GET['facid']); if ($result < 0) { $mesg='
'.$discount->error.'
'; } - - exit; } } diff --git a/htdocs/discount.class.php b/htdocs/discount.class.php index d1ad304d5b8..b81ad758b86 100644 --- a/htdocs/discount.class.php +++ b/htdocs/discount.class.php @@ -223,15 +223,13 @@ class DiscountAbsolute /** - * \brief Link the discount to a particular invoice line + * \brief Link the discount to a particular invoice line or a particular invoice * \param rowidline Invoice line id * \param rowidinvoice Invoice id * \return int <0 ko, >0 ok */ function link_to_invoice($rowidline,$rowidinvoice) { - dolibarr_syslog("DiscountAbsolute::link_to_invoice Link discount ".$this->id." to invoice line rowid=".$rowidline." or invoice rowid=".$rowidinvoice); - // Check parameters if (! $rowidline && ! $rowidinvoice) { @@ -249,7 +247,7 @@ class DiscountAbsolute if ($rowidinvoice) $sql.=" SET fk_facture = ".$rowidinvoice; $sql.=" WHERE rowid = ".$this->id; - dolibarr_syslog("DiscountAbsolute::link_to_invoice sql=".$sql); + dolibarr_syslog("DiscountAbsolute::link_to_invoice sql=".$sql,LOG_DEBUG); $resql = $this->db->query($sql); if ($resql) { @@ -258,12 +256,40 @@ class DiscountAbsolute else { $this->error=$this->db->error(); - dolibarr_syslog("DiscountAbsolute::link_to_invoice ".$this->error); + dolibarr_syslog("DiscountAbsolute::link_to_invoice ".$this->error,LOG_ERR); return -3; } } + /** + * \brief Link the discount to a particular invoice line or a particular invoice + * \remarks Do not call this if discount is linked to a reconcialiated invoice + * \param rowidline Invoice line id + * \param rowidinvoice Invoice id + * \return int <0 if KO, >0 if OK + */ + function unlink_invoice() + { + $sql ="UPDATE ".MAIN_DB_PREFIX."societe_remise_except"; + $sql.=" SET fk_facture_line = NULL, fk_facture = NULL"; + $sql.=" WHERE rowid = ".$this->id; + + dolibarr_syslog("DiscountAbsolute::unlink_invoice sql=".$sql,LOG_DEBUG); + $resql = $this->db->query($sql); + if ($resql) + { + return 1; + } + else + { + $this->error=$this->db->error(); + dolibarr_syslog("DiscountAbsolute::link_to_invoice ".$this->error,LOG_ERR); + return -3; + } + } + + /** * \brief Renvoie montant TTC des avoirs en cours disponibles * \param fk_soc Filtre sur une societe