diff --git a/htdocs/comm/remx.php b/htdocs/comm/remx.php
index 80a2f2b97e0..c48ee73099a 100644
--- a/htdocs/comm/remx.php
+++ b/htdocs/comm/remx.php
@@ -173,13 +173,13 @@ if ($_socid > 0)
/*
- * Liste avoir restant dus
+ * Liste remises fixes restant en cours
*/
$sql = "SELECT rc.rowid, rc.amount_ht,".$db->pdate("rc.datec")." as dc, rc.description,";
$sql.= " u.code, u.rowid as user_id";
$sql.= " FROM ".MAIN_DB_PREFIX."societe_remise_except as rc, ".MAIN_DB_PREFIX."user as u";
$sql.= " WHERE rc.fk_soc =". $objsoc->id;
- $sql.= " AND u.rowid = rc.fk_user AND fk_facture IS NULL";
+ $sql.= " AND u.rowid = rc.fk_user AND rc.fk_facture IS NULL";
$sql.= " ORDER BY rc.datec DESC";
$resql=$db->query($sql);
@@ -226,13 +226,15 @@ if ($_socid > 0)
*/
$sql = "SELECT rc.rowid, rc.amount_ht,".$db->pdate("rc.datec")." as dc, rc.description, rc.fk_facture,";
$sql.= " u.code, u.rowid as user_id,";
- $sql.= " f.facnumber";
+ $sql.= " f.rowid, f.facnumber";
$sql.= " FROM ".MAIN_DB_PREFIX."societe_remise_except as rc";
$sql.= " , ".MAIN_DB_PREFIX."user as u";
+ $sql.= " , ".MAIN_DB_PREFIX."facturedet as fc";
$sql.= " , ".MAIN_DB_PREFIX."facture as f";
$sql.= " WHERE rc.fk_soc =". $objsoc->id;
- $sql.= " AND fk_facture = f.rowid";
- $sql.= " AND u.rowid = rc.fk_user AND fk_facture IS NOT NULL";
+ $sql.= " AND rc.fk_facture = fc.rowid";
+ $sql.= " AND fc.fk_facture = f.rowid";
+ $sql.= " AND rc.fk_user = u.rowid";
$sql.= " ORDER BY rc.datec DESC";
$resql=$db->query($sql);
@@ -257,7 +259,7 @@ if ($_socid > 0)
$var = !$var;
print "
";
print '| '.dolibarr_print_date($obj->dc).' | ';
- print ''.img_object($langs->trans("ShowBill"),'bill').' '.$obj->facnumber.' | ';
+ print ''.img_object($langs->trans("ShowBill"),'bill').' '.$obj->facnumber.' | ';
print ''.$obj->description.' | ';
print ''.price($obj->amount_ht).' | ';
print ''.$obj->code.' | ';
diff --git a/htdocs/facture.class.php b/htdocs/facture.class.php
index e5f39cc24a5..6e3f18cb862 100644
--- a/htdocs/facture.class.php
+++ b/htdocs/facture.class.php
@@ -392,7 +392,9 @@ class Facture extends CommonObject
/*
* Lignes
*/
- $sql = 'SELECT l.rowid, l.fk_product, l.description, l.price, l.qty, l.tva_taux, l.remise, l.remise_percent, l.subprice,';
+ // \todo Mettre ce code dans fonction fetch_lines qui charge tableau $this->lignes
+ $sql = 'SELECT l.rowid, l.fk_product, l.description, l.price, l.qty, l.tva_taux, ';
+ $sql.= ' l.remise, l.remise_percent, l.fk_remise_except, l.subprice,';
$sql.= ' '.$this->db->pdate('l.date_start').' as date_start,'.$this->db->pdate('l.date_end').' as date_end,';
$sql.= ' l.info_bits, l.total_ht, l.total_tva, l.total_ttc, l.fk_code_ventilation, l.fk_export_compta,';
$sql.= ' p.label as label, p.description as product_desc';
@@ -409,7 +411,7 @@ class Facture extends CommonObject
{
$objp = $this->db->fetch_object($result2);
$faclig = new FactureLigne($this->db);
- $faclig->rowid = $objp->rowid;
+ $faclig->rowid = $objp->rowid;
$faclig->desc = $objp->description; // Description ligne
$faclig->libelle = $objp->label; // Label produit
$faclig->product_desc = $objp->product_desc; // Description produit
@@ -419,6 +421,7 @@ class Facture extends CommonObject
$faclig->tva_taux = $objp->tva_taux;
$faclig->remise = $objp->remise;
$faclig->remise_percent = $objp->remise_percent;
+ $faclig->fk_remise_except = $objp->fk_remise_except;
$faclig->produit_id = $objp->fk_product;
$faclig->date_start = $objp->date_start;
$faclig->date_end = $objp->date_end;
@@ -897,47 +900,26 @@ class Facture extends CommonObject
/*
* Tope les lignes de remises fixes avec id des lignes de facture au montant négatif
*/
-/* TODO Toper les lignes de remises fixes avec id des lignes de facture au montant négatif.
-
- while ($i < $nurmx && $remise_a_decrementee && ! $error)
- {
- $obj = $this->db->fetch_object($resql);
- $avoir=$obj->amount;
-
- // On met à jour avoir comme affecté à facture
+ foreach($this->lignes as $i => $line)
+ {
+ if (($this->lignes[$i]->info_bits & 2) == 2)
+ {
+ // Ligne de remis
+ dolibarr_syslog("Facture.class::set_valid top remises de ligne ".$this->lignes[$i]->fk_remise_except." comme utilisee");
+
+ // On met à jour ligne de remise comme utilisée
$sql = 'UPDATE '.MAIN_DB_PREFIX.'societe_remise_except';
- $sql.= ' SET fk_facture = '.$this->id.',';
- $sql.= " amount_ht = '".price2num(min($remise_a_decrementee,$avoir))."'";
- $sql.= ' WHERE rowid ='.$obj->rowid;
- dolibarr_syslog("Societe::set_valid Mise a jour avoir sql=$sql");
- if (! $this->db->query($sql))
+ $sql.= ' SET fk_facture = '.$this->lignes[$i]->rowid;
+ $sql.= ' WHERE rowid ='.$this->lignes[$i]->fk_remise_except;
+ $resql=$this->db->query($sql);
+ if (! $resql)
{
+ $this->error=$this->db->error().' sql='.$sql;
+ dolibarr_syslog("Facture.class::set_valid Error ".$this->error);
$error++;
}
-
- if ($remise_a_decrementee < $avoir)
- {
- // L'avoir n'a pas été complètement consommée, on insère ligne du reste
- $sql = 'INSERT INTO '.MAIN_DB_PREFIX.'societe_remise_except';
- $sql.= ' (fk_soc, datec, amount_ht, fk_user, fk_facture, description) ';
- $sql.= ' VALUES ';
- $sql.= ' ('.$this->socidp;
- $sql.= ' ,'.$obj->datec;
- $sql.= " ,'".price2num($avoir - $remise_a_decrementee)."'";
- $sql.= ' ,'.$user->id;
- $sql.= ' ,null';
- $sql.= " ,'".addslashes($obj->description)."'";
- $sql.= ')';
- if (! $this->db->query( $sql))
- {
- $error++;
- }
- }
-
- $remise_a_decrementee-=min($remise_a_decrementee,$avoir);
- $i++;
}
-*/
+ }
// On vérifie si la facture était une provisoire
if ($facref == 'PROV')
diff --git a/mysql/migration/2.0.0-2.1.0.sql b/mysql/migration/2.0.0-2.1.0.sql
index ad2ffce81e3..c9043e70b15 100644
--- a/mysql/migration/2.0.0-2.1.0.sql
+++ b/mysql/migration/2.0.0-2.1.0.sql
@@ -323,7 +323,7 @@ ALTER TABLE llx_facture ADD INDEX idx_facture_fk_facture (fk_facture);
ALTER TABLE llx_facture ADD CONSTRAINT fk_facture_fk_facture FOREIGN KEY (fk_facture) REFERENCES llx_facture (rowid);
ALTER TABLE llx_societe_remise_except DROP FOREIGN KEY fk_societe_remise_fk_facture;
-ALTER TABLE llx_societe_remise_except ADD CONSTRAINT fk_societe_remise_fk_facture FOREIGN KEY (fk_facture) REFERENCES llx_facture_det (rowid);
+ALTER TABLE llx_societe_remise_except ADD CONSTRAINT fk_societe_remise_fk_facture FOREIGN KEY (fk_facture) REFERENCES llx_facturedet (rowid);
-- drop table llx_societe_remise_except;
-- create table llx_societe_remise_except
diff --git a/mysql/tables/llx_societe_remise_except.key.sql b/mysql/tables/llx_societe_remise_except.key.sql
index 8f45b069a84..840b00352e5 100644
--- a/mysql/tables/llx_societe_remise_except.key.sql
+++ b/mysql/tables/llx_societe_remise_except.key.sql
@@ -32,7 +32,7 @@ ALTER TABLE llx_societe_remise_except ADD INDEX idx_societe_remise_except_fk_fac
ALTER TABLE llx_societe_remise_except ADD CONSTRAINT fk_societe_remise_fk_user FOREIGN KEY (fk_user) REFERENCES llx_user (rowid);
ALTER TABLE llx_societe_remise_except ADD CONSTRAINT fk_societe_remise_fk_soc FOREIGN KEY (fk_soc) REFERENCES llx_societe (idp);
-ALTER TABLE llx_societe_remise_except ADD CONSTRAINT fk_societe_remise_fk_facture FOREIGN KEY (fk_facture) REFERENCES llx_facture (rowid);
+ALTER TABLE llx_societe_remise_except ADD CONSTRAINT fk_societe_remise_fk_facture FOREIGN KEY (fk_facture) REFERENCES llx_facturedet (rowid);