From a9521fdf892a8ce49cf92812b4cb6965830a3e23 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 20 Aug 2006 03:27:11 +0000 Subject: [PATCH] New: Fin de la gestion des remises fixes. --- htdocs/comm/remx.php | 14 +++-- htdocs/facture.class.php | 58 +++++++------------ mysql/migration/2.0.0-2.1.0.sql | 2 +- .../tables/llx_societe_remise_except.key.sql | 2 +- 4 files changed, 30 insertions(+), 46 deletions(-) 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);