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