From 3705c4eb8b1bcab7439d8d02d37856a0858b26f1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 9 Sep 2006 12:41:13 +0000 Subject: [PATCH] Uniformisation et simplification du code de gestion des lignes facture, propal, commande pour faciliter dev des avoirs --- htdocs/commande/commande.class.php | 64 +++--- htdocs/facture.class.php | 324 ++++++++++++++------------- htdocs/fichinter/fichinter.class.php | 10 - htdocs/propal.class.php | 100 +++++---- 4 files changed, 258 insertions(+), 240 deletions(-) diff --git a/htdocs/commande/commande.class.php b/htdocs/commande/commande.class.php index 51c743c71d8..023774d3a05 100644 --- a/htdocs/commande/commande.class.php +++ b/htdocs/commande/commande.class.php @@ -406,22 +406,16 @@ class Commande extends CommonObject if ($this->id) { - /* - * Insertion des produits dans la base - */ + /* + * Insertion du detail des produits dans la base + */ for ($i = 0 ; $i < sizeof($this->lines) ; $i++) { - if ($this->propale_id) - { - // On récupère le subprice de la propale - $this->lines[$i]->price = $this->lines[$i]->subprice; - } - $resql = $this->addline( $this->id, - $this->lines[$i]->libelle, + $this->lines[$i]->libelle, // \TODO A virer $this->lines[$i]->desc, - $this->lines[$i]->price, + $this->lines[$i]->subprice, $this->lines[$i]->qty, $this->lines[$i]->tva_tx, $this->lines[$i]->fk_product, @@ -591,17 +585,20 @@ class Commande extends CommonObject /** - * \brief Ajoute une ligne produit prédéfini dans tableau lines + * \brief Ajoute une ligne dans tableau lines * \param idproduct Id du produit à ajouter * \param qty Quantité - * \remise_percent remise_percent Remise ligne en pourcentage + * \remise_percent remise_percent Remise relative effectuée sur le produit + * \return void * \remarks $this->client doit etre chargé + * \TODO Remplacer les appels a cette fonction par generation objet Ligne + * inséré dans tableau $this->products */ function add_product($idproduct, $qty, $remise_percent=0) { global $conf, $mysoc; - if (!$qty) $qty = 1; + if (! $qty) $qty = 1; if ($idproduct > 0) { @@ -615,19 +612,18 @@ class Commande extends CommonObject else $price = $prod->price; - $ligne=new CommandeLigne($this->db); - $ligne->fk_product=$idproduct; - $ligne->desc=$prod->description; - $ligne->qty=$qty; - $ligne->price=$price; - $ligne->remise_percent=$remise_percent; - $ligne->tva_tx=$tva_tx; - $ligne->ref=$prod->ref; - $ligne->libelle=$prod->libelle; - $ligne->product_desc=$prod->description; + $line=new CommandeLigne($this->db); + $line->fk_product=$idproduct; + $line->desc=$prod->description; + $line->qty=$qty; + $line->subprice=$price; + $line->remise_percent=$remise_percent; + $line->tva_tx=$tva_tx; + $line->ref=$prod->ref; + $line->libelle=$prod->libelle; + $line->product_desc=$prod->description; - $i = sizeof($this->lines); - $this->lines[$i] = $ligne; + $this->lines[] = $line; /** POUR AJOUTER AUTOMATIQUEMENT LES SOUSPRODUITS À LA COMMANDE if($conf->global->PRODUIT_SOUSPRODUITS == 1) @@ -2061,21 +2057,23 @@ class CommandeLigne var $rowid; var $fk_facture; var $desc; // Description ligne + var $fk_product; // Id produit prédéfini + var $qty; var $tva_tx; - var $price; var $subprice; - var $remise; var $remise_percent; - var $rang; + var $rang = 0; var $coef; - - var $fk_product; // Id produit prédéfini - - var $info_bits; // Bit 0: 0 si TVA normal - 1 si TVA NPR + var $info_bits = 0; // Bit 0: 0 si TVA normal - 1 si TVA NPR + // Bit 1: 0 ligne normale - 1 si ligne de remise fixe var $total_ht; // Total HT de la ligne toute quantité et incluant la remise ligne var $total_tva; // Total TVA de la ligne toute quantité et incluant la remise ligne var $total_ttc; // Total TTC de la ligne toute quantité et incluant la remise ligne + + // Ne plus utiliser + var $remise; + var $price; // From llx_product var $ref; // Reference produit diff --git a/htdocs/facture.class.php b/htdocs/facture.class.php index 29653d433a3..57dbfba84f4 100644 --- a/htdocs/facture.class.php +++ b/htdocs/facture.class.php @@ -247,31 +247,21 @@ class Facture extends CommonObject $resql=$this->db->query($sql); } - /* - * Produits/services - */ + /* + * Insertion du detail des produits dans la base + */ for ($i = 0 ; $i < sizeof($this->products) ; $i++) { - $prod = new Product($this->db, $this->products[$i]); - $res=$prod->fetch($this->products[$i]); - - $tva_tx = get_default_tva($mysoc,$soc,$prod->tva_tx); - // multiprix - if($conf->global->PRODUIT_MULTIPRICES == 1) - $price = $prod->multiprices[$soc->price_level]; - else - $price = $prod->price; - $resql = $this->addline( $this->id, - $prod->description, - $price, - $this->products_qty[$i], - $tva_tx, - $this->products[$i], - $this->products_remise_percent[$i], - $this->products_date_start[$i], - $this->products_date_end[$i] + $this->products[$i]->desc, + $this->products[$i]->subprice, + $this->products[$i]->qty, + $this->products[$i]->tva_tx, + $this->products[$i]->fk_product, + $this->products[$i]->remise_percent, + $this->products[$i]->date_start, + $this->products[$i]->date_end ); if ($resql < 0) @@ -376,17 +366,22 @@ class Facture extends CommonObject $facture->amount = $this->amount; $facture->remise_absolue = $this->remise_absolue; $facture->remise_percent = $this->remise_percent; + $facture->lignes = $this->lignes; // Tableau des lignes de factures - dolibarr_syslog("Facture::create_clone invertdetail=$invertdetail socidp=".$this->socidp); - - for ($i = 0; $i < sizeof($this->lignes); $i++) + if ($invertdetail) { - if ($this->lignes[$i]) + foreach($facture->lignes as $i => $line) { -//print $this->lignes[$i]->fk_product.",".$this->lignes[$i]->qty.",".$this->lignes[$i]->remise_percent.",".$this->lignes[$i]->date_start.",".$this->lignes[$i]->date_end; - $facture->add_product($this->lignes[$i]->fk_product,$this->lignes[$i]->qty,$this->lignes[$i]->remise_percent,$this->lignes[$i]->date_start,$this->lignes[$i]->date_end); + $facture->lignes[$i]->subprice = -$facture->lignes[$i]->subprice; + $facture->lignes[$i]->price = -$facture->lignes[$i]->price; + $facture->lignes[$i]->total_ht = -$facture->lignes[$i]->total_ht; + $facture->lignes[$i]->total_tva = -$facture->lignes[$i]->total_tva; + $facture->lignes[$i]->total_ttc = -$facture->lignes[$i]->total_ttc; } } + + dolibarr_syslog("Facture::create_clone invertdetail=$invertdetail socidp=".$this->socidp); + $facid = $facture->create($user); @@ -419,7 +414,7 @@ class Facture extends CommonObject * \brief Recupére l'objet facture et ses lignes de factures * \param rowid id de la facture a récupérer * \param societe_id id de societe - * \return int 1 si ok, < 0 si erreur + * \return int >0 si ok, <0 si ko */ function fetch($rowid, $societe_id=0) { @@ -508,79 +503,95 @@ class Facture extends CommonObject /* * Lignes */ - // \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'; - $sql.= ' FROM '.MAIN_DB_PREFIX.'facturedet as l'; - $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON l.fk_product = p.rowid'; - $sql.= ' WHERE l.fk_facture = '.$this->id; - $sql.= ' ORDER BY l.rang'; - $result2 = $this->db->query($sql); - if ($result2) + $result=$this->fetch_lines(); + if ($result < 0) { - $num = $this->db->num_rows($result2); - $i = 0; $total = 0; - while ($i < $num) - { - $objp = $this->db->fetch_object($result2); - $faclig = new FactureLigne($this->db); - $faclig->rowid = $objp->rowid; - $faclig->desc = $objp->description; // Description ligne - $faclig->libelle = $objp->label; // Label produit - $faclig->product_desc = $objp->product_desc; // Description produit - $faclig->qty = $objp->qty; - $faclig->price = $objp->price; - $faclig->subprice = $objp->subprice; - $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->fk_product = $objp->fk_product; - $faclig->date_start = $objp->date_start; - $faclig->date_end = $objp->date_end; - $faclig->date_start = $objp->date_start; - $faclig->date_end = $objp->date_end; - $faclig->info_bits = $objp->info_bits; - $faclig->total_ht = $objp->total_ht; - $faclig->total_tva = $objp->total_tva; - $faclig->total_ttc = $objp->total_ttc; - $faclig->export_compta = $objp->fk_export_compta; - $faclig->code_ventilation = $objp->fk_code_ventilation; - $this->lignes[$i] = $faclig; - $i++; - } - $this->db->free($result2); - $this->db->free($result); - return 1; - } - else - { - dolibarr_syslog('Erreur Facture::Fetch rowid='.$rowid.', Erreur dans fetch des lignes'); - $this->error=$this->db->error(); return -3; } + return 1; } else { - dolibarr_syslog('Erreur Facture::Fetch rowid='.$rowid.' numrows=0 sql='.$sql); + dolibarr_syslog('Facture::Fetch Error rowid='.$rowid.' numrows=0 sql='.$sql); $this->error='Bill with id '.$rowid.' not found sql='.$sql; return -2; } - $this->db->free($result); } else { - dolibarr_syslog('Erreur Facture::Fetch rowid='.$rowid.' Erreur dans fetch de la facture'); + dolibarr_syslog('Facture::Fetch Error rowid='.$rowid.' Erreur dans fetch de la facture'); $this->error=$this->db->error(); return -1; } } + /** + * \brief Recupére les lignes de factures + * \return int 1 si ok, < 0 si erreur + */ + function fetch_lines() + { + $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'; + $sql.= ' FROM '.MAIN_DB_PREFIX.'facturedet as l'; + $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON l.fk_product = p.rowid'; + $sql.= ' WHERE l.fk_facture = '.$this->id; + $sql.= ' ORDER BY l.rang'; + + dolibarr_syslog('Facture::fetch_lines sql='.$sql); + $result = $this->db->query($sql); + if ($result) + { + $num = $this->db->num_rows($result); + $i = 0; + while ($i < $num) + { + $objp = $this->db->fetch_object($result); + $faclig = new FactureLigne($this->db); + $faclig->rowid = $objp->rowid; + $faclig->desc = $objp->description; // Description ligne + $faclig->libelle = $objp->label; // Label produit + $faclig->product_desc = $objp->product_desc; // Description produit + $faclig->qty = $objp->qty; + $faclig->subprice = $objp->subprice; + $faclig->tva_taux = $objp->tva_taux; + $faclig->remise_percent = $objp->remise_percent; + $faclig->fk_remise_except = $objp->fk_remise_except; + $faclig->produit_id = $objp->fk_product; + $faclig->fk_product = $objp->fk_product; + $faclig->date_start = $objp->date_start; + $faclig->date_end = $objp->date_end; + $faclig->date_start = $objp->date_start; + $faclig->date_end = $objp->date_end; + $faclig->info_bits = $objp->info_bits; + $faclig->total_ht = $objp->total_ht; + $faclig->total_tva = $objp->total_tva; + $faclig->total_ttc = $objp->total_ttc; + $faclig->export_compta = $objp->fk_export_compta; + $faclig->code_ventilation = $objp->fk_code_ventilation; + + // Ne plus utiliser + $faclig->price = $objp->price; + $faclig->remise = $objp->remise; + + $this->lignes[$i] = $faclig; + $i++; + } + $this->db->free($result); + return 1; + } + else + { + $this->error=$this->db->error(); + dolibarr_syslog('Facture::fetch_lines: Error '.$this->error); + return -3; + } + } + /** * \brief Ajout en base d'une ligne remise fixe en ligne de facture * \param idremise Id de la remise fixe @@ -612,14 +623,16 @@ class Facture extends CommonObject $facligne->desc=$remise->description; // Description ligne $facligne->tva_tx=$remise->tva_tx; $facligne->subprice=-$remise->amount_ht; - $facligne->price=-$remise->amount_ht; $facligne->fk_product=0; // Id produit prédéfini $facligne->qty=1; - $facligne->remise=0; $facligne->remise_percent=0; $facligne->rang=-1; $facligne->info_bits=2; + // Ne plus utiliser + $facligne->price=-$remise->amount_ht; + $facligne->remise=0; + $tabprice=calcul_price_total($facligne->qty, $facligne->subprice, 0,$facligne->tva_tx); $facligne->total_ht = $tabprice[0]; $facligne->total_tva = $tabprice[1]; @@ -1234,27 +1247,47 @@ class Facture extends CommonObject } /** - * \brief Ajoute un produit dans les tableaux products, products_qty, products_date_start|end - * \param idproduct - * \param qty - * \param remise_percent - * \param date_start - * \param date_end + * \brief Ajoute une ligne dans le tableau products + * \param idproduct Id du produit a ajouter + * \param qty Quantité + * \param remise_percent Remise relative effectuée sur le produit + * \param date_start + * \param date_end + * \return void + * \remarks $this->client doit etre chargé + * \TODO Remplacer les appels a cette fonction par generation objet Ligne + * inséré dans tableau $this->products */ function add_product($idproduct, $qty, $remise_percent, $date_start='', $date_end='') { + global $conf, $mysoc; + + if (! $qty) $qty = 1; + if ($idproduct > 0) { - $i = sizeof($this->products); // On recupere nb de produit deja dans tableau products - $this->products[$i] = $idproduct; // On ajoute a la suite - if (!$qty) - { - $qty = 1 ; - } - $this->products_qty[$i] = $qty; - $this->products_remise_percent[$i] = $remise_percent; - if ($date_start) { $this->products_date_start[$i] = $date_start; } - if ($date_end) { $this->products_date_end[$i] = $date_end; } + $prod=new Product($this->db); + $prod->fetch($idproduct); + + $tva_tx = get_default_tva($mysoc,$this->client,$prod->tva_tx); + // multiprix + if($conf->global->PRODUIT_MULTIPRICES == 1) + $price = $prod->multiprices[$this->client->price_level]; + else + $price = $prod->price; + + $line=new FactureLigne($this->db); + $line->rowid = $idproduct; + $line->fk_product=$idproduct; + $line->desc=$prod->description; + $line->qty = $qty; + $line->subprice=$price; + $line->remise_percent = $remise_percent; + $line->tva_tx=$tva_tx; + if ($date_start) { $line->date_start = $date_start; } + if ($date_end) { $line->date_end = $date_end; } + + $this->products[]=$line; } } @@ -1304,9 +1337,8 @@ class Facture extends CommonObject $total_tva = $tabprice[1]; $total_ttc = $tabprice[2]; - // Anciens indicateurs: $price, $subprice, $remise (a ne plus utiliser) + // Anciens indicateurs: $price, $remise (a ne plus utiliser) $price = $pu; - $subprice = $pu; $remise = 0; if ($remise_percent > 0) { @@ -1319,13 +1351,11 @@ class Facture extends CommonObject $ligne->fk_facture=$facid; $ligne->desc=$desc; - $ligne->price=$price; $ligne->qty=$qty; $ligne->txtva=$txtva; $ligne->fk_product=$fk_product; $ligne->remise_percent=$remise_percent; - $ligne->subprice=$subprice; - $ligne->remise=$remise; + $ligne->subprice=$pu; $ligne->date_start=$date_start; $ligne->date_end=$date_end; $ligne->ventil=$ventil; @@ -1336,6 +1366,10 @@ class Facture extends CommonObject $ligne->total_tva=$total_tva; $ligne->total_ttc=$total_ttc; + // A ne plus utiliser + $ligne->price=$price; + $ligne->remise=$remise; + $result=$ligne->insert(); if ($result > 0) { @@ -1400,9 +1434,8 @@ class Facture extends CommonObject $total_tva = $tabprice[1]; $total_ttc = $tabprice[2]; - // Anciens indicateurs: $price, $subprice, $remise (a ne plus utiliser) + // Anciens indicateurs: $price, $remise (a ne plus utiliser) $price = $pu; - $subprice = $pu; $remise = 0; if ($remise_percent > 0) { @@ -1410,7 +1443,6 @@ class Facture extends CommonObject $price = ($pu - $remise); } $price = price2num($price); - $subprice = price2num($subprice); // Mise a jour ligne en base $ligne=new FactureLigne($this->db); @@ -1418,18 +1450,20 @@ class Facture extends CommonObject $ligne->fetch($rowid); $ligne->desc=$desc; - $ligne->price=$price; $ligne->qty=$qty; $ligne->tva_taux=$txtva; $ligne->remise_percent=$remise_percent; - $ligne->subprice=$subprice; - $ligne->remise=$remise; + $ligne->subprice=$pu; $ligne->date_start=$date_start; $ligne->date_end=$date_end; $ligne->total_ht=$total_ht; $ligne->total_tva=$total_tva; $ligne->total_ttc=$total_ttc; + // A ne plus utiliser + $ligne->price=$price; + $ligne->remise=$remise; + $result=$ligne->update(); if ($result > 0) { @@ -1504,7 +1538,7 @@ class Facture extends CommonObject $tvas=array(); $err=0; - // Liste des lignes factures a sommer + // Liste des lignes factures a sommer (Ne plus utiliser price) $sql = 'SELECT qty, tva_taux, subprice, remise_percent, price,'; $sql.= ' total_ht, total_tva, total_ttc'; $sql.= ' FROM '.MAIN_DB_PREFIX.'facturedet'; @@ -1522,35 +1556,19 @@ class Facture extends CommonObject { $obj = $this->db->fetch_object($resql); - $this->total_ht += $obj->total_ht; - $this->total_tva += ($obj->total_ttc - $obj->total_ht); - $this->total_ttc += $obj->total_ttc; + $this->total_ht += $obj->total_ht; + $this->total_tva += ($obj->total_ttc - $obj->total_ht); + $this->total_ttc += $obj->total_ttc; - // Anciens indicateurs + // Ne plus utiliser amount, ni remise $this->amount_ht += ($obj->price * $obj->qty); $this->total_remise += 0; // Plus de remise globale (toute remise est sur une ligne) $tvas[$obj->tva_taux] += ($obj->total_ttc - $obj->total_ht); - -/* \deprecated car simplifie par les 3 indicateurs total_ht, total_tva et total_ttc sur lignes - $products[$i][0] = $obj->price; - $products[$i][1] = $obj->qty; - $products[$i][2] = $obj->tva_taux; -*/ $i++; } $this->db->free($resql); -/* \deprecated car simplifie par les 3 indicateurs total_ht, total_tva et total_ttc sur lignes - $calculs = calcul_price($products, $this->remise_percent, $this->remise_absolue); - $this->total_remise = $calculs[3]; - $this->amount_ht = $calculs[4]; - $this->total_ht = $calculs[0]; - $this->total_tva = $calculs[1]; - $this->total_ttc = $calculs[2]; - $tvas = $calculs[5]; -*/ - // Met a jour indicateurs sur facture $sql = 'UPDATE '.MAIN_DB_PREFIX.'facture '; $sql .= "SET amount ='".price2num($this->amount_ht)."'"; @@ -2557,29 +2575,31 @@ class FactureLigne // From llx_facturedet var $rowid; + var $fk_facture; // Id facture var $desc; // Description ligne - var $fk_facture; // Id produit prédéfini + var $fk_product; // Id produit prédéfini var $qty; // Quantité (exemple 2) - var $subprice; // P.U. HT (exemple 100) - var $remise; // Montant calculé de la remise % sur PU HT (exemple 20) - // subprice = price + remise - var $remise_percent; // % de la remise ligne (exemple 20%) - var $price; // P.U. HT apres remise % de ligne (exemple 80) var $tva_taux; // Taux tva produit/service (exemple 19.6) - var $fk_code_ventilation = 0; - var $fk_export_compta = 0; + var $subprice; // P.U. HT (exemple 100) + var $remise_percent; // % de la remise ligne (exemple 20%) var $rang = 0; - - var $date_start; - var $date_end; - var $info_bits = 0; // Bit 0: 0 si TVA normal - 1 si TVA NPR // Bit 1: 0 si ligne normal - 1 si bit discount var $total_ht; // Total HT de la ligne toute quantité et incluant la remise ligne var $total_tva; // Total TVA de la ligne toute quantité et incluant la remise ligne var $total_ttc; // Total TTC de la ligne toute quantité et incluant la remise ligne + var $fk_code_ventilation = 0; + var $fk_export_compta = 0; + + var $date_start; + var $date_end; + + // Ne plus utiliser + var $price; // P.U. HT apres remise % de ligne (exemple 80) + var $remise; // Montant calculé de la remise % sur PU HT (exemple 20) + // From llx_product var $ref; // Reference produit var $libelle; // Label produit @@ -2619,10 +2639,8 @@ class FactureLigne $this->fk_facture = $objp->fk_facture; $this->desc = $objp->description; $this->qty = $objp->qty; - $this->price = $objp->price; $this->subprice = $objp->subprice; $this->tva_taux = $objp->tva_taux; - $this->remise = $objp->remise; $this->remise_percent = $objp->remise_percent; $this->fk_remise_except = $objp->fk_remise_except; $this->produit_id = $objp->fk_product; @@ -2637,6 +2655,10 @@ class FactureLigne $this->fk_export_compta = $objp->fk_export_compta; $this->rang = $objp->rang; + // Ne plus utiliser + $this->price = $objp->price; + $this->remise = $objp->remise; + $this->ref = $objp->product_ref; $this->libelle = $objp->product_libelle; $this->product_desc = $objp->product_desc; @@ -2681,20 +2703,20 @@ class FactureLigne // Insertion dans base de la ligne $sql = 'INSERT INTO '.MAIN_DB_PREFIX.'facturedet'; - $sql.= ' (fk_facture, description, price, qty, tva_taux,'; - $sql.= ' fk_product, remise_percent, subprice, remise, fk_remise_except,'; + $sql.= ' (fk_facture, description, qty, tva_taux,'; + $sql.= ' fk_product, remise_percent, subprice, price, remise, fk_remise_except,'; $sql.= ' date_start, date_end, fk_code_ventilation, fk_export_compta, '; $sql.= ' rang,'; $sql.= ' info_bits, total_ht, total_tva, total_ttc)'; $sql.= " VALUES (".$this->fk_facture.","; $sql.= " '".addslashes($this->desc)."',"; - $sql.= " '".price2num($this->price)."',"; $sql.= " '".price2num($this->qty)."',"; $sql.= " '".price2num($this->txtva)."',"; if ($this->fk_product) { $sql.= "'".$this->fk_product."',"; } else { $sql.='null,'; } $sql.= " '".price2num($this->remise_percent)."',"; $sql.= " '".price2num($this->subprice)."',"; + $sql.= " '".price2num($this->price)."',"; $sql.= " '".price2num($this->remise)."',"; if ($this->fk_remise_except) $sql.= $this->fk_remise_except.","; else $sql.= 'null,'; @@ -2742,8 +2764,8 @@ class FactureLigne // Mise a jour ligne en base $sql = "UPDATE ".MAIN_DB_PREFIX."facturedet SET"; $sql.= " description='".addslashes($this->desc)."'"; - $sql.= ",price='".price2num($this->price)."'"; $sql.= ",subprice='".price2num($this->subprice)."'"; + $sql.= ",price='".price2num($this->price)."'"; $sql.= ",remise='".price2num($this->remise)."'"; $sql.= ",remise_percent='".price2num($this->remise_percent)."'"; if ($this->fk_remise_except) $sql.= ",fk_remise_except=".$this->fk_remise_except; diff --git a/htdocs/fichinter/fichinter.class.php b/htdocs/fichinter/fichinter.class.php index 97d14e639ca..fcdde10c94c 100644 --- a/htdocs/fichinter/fichinter.class.php +++ b/htdocs/fichinter/fichinter.class.php @@ -72,16 +72,6 @@ class Fichinter extends CommonObject } - function add_product($idproduct) - { - if ($idproduct > 0) - { - $i = sizeof($this->products); - $this->products[$i] = $idproduct; - } - } - - /* * \brief Crée une fiche intervention en base * diff --git a/htdocs/propal.class.php b/htdocs/propal.class.php index 6f9f7ca8d13..e52d06b6a06 100644 --- a/htdocs/propal.class.php +++ b/htdocs/propal.class.php @@ -74,18 +74,15 @@ class Propal extends CommonObject var $note; var $note_public; - var $date_livraison; + var $date_livraison; var $adresse_livraison_id; var $adresse; - var $products; - var $products_qty; + var $products=array(); var $labelstatut=array(); var $labelstatut_short=array(); - var $product=array(); - // Pour board var $nbtodo; var $nbtodolate; @@ -127,22 +124,43 @@ class Propal extends CommonObject /** - * \brief Ajout d'un produit dans la proposition, en memoire dans l'objet - * \param idproduct Id du produit à ajouter - * \param qty Quantité - * \param remise_percent Remise relative effectuée sur le produit - * \return void + * \brief Ajoute une ligne dans tableau products + * \param idproduct Id du produit à ajouter + * \param qty Quantité + * \param remise_percent Remise relative effectuée sur le produit + * \return void + * \remarks $this->client doit etre chargé + * \TODO Remplacer les appels a cette fonction par generation objet Ligne + * inséré dans tableau $this->products */ function add_product($idproduct, $qty, $remise_percent=0) { + global $conf, $mysoc; + if (! $qty) $qty = 1; if ($idproduct > 0) { - $i = sizeof($this->products); - $this->products[$i] = $idproduct; - $this->products_qty[$i] = $qty; - $this->products_remise_percent[$i] = $remise_percent; + $prod=new Product($this->db); + $prod->fetch($idproduct); + + $tva_tx = get_default_tva($mysoc,$this->client,$prod->tva_tx); + // multiprix + if($conf->global->PRODUIT_MULTIPRICES == 1) + $price = $prod->multiprices[$this->client->price_level]; + else + $price = $prod->price; + + $line=new PropaleLigne($this->db); + $line->rowid = $idproduct; + $line->fk_product=$idproduct; + $line->desc=$prod->description; + $line->qty = $qty; + $line->subprice=$price; + $line->remise_percent = $remise_percent; + $line->tva_tx=$tva_tx; + + $this->products[]=$line; } } @@ -472,34 +490,23 @@ class Propal extends CommonObject */ for ($i = 0 ; $i < sizeof($this->products) ; $i++) { - $prod = new Product($this->db, $this->products[$i]); - if ($prod->fetch($this->products[$i])) + $resql = $this->addline( + $this->id, + $this->products[$i]->desc, + $this->products[$i]->subprice, + $this->products[$i]->qty, + $this->products[$i]->tva_tx, + $this->products[$i]->fk_product, + $this->products[$i]->remise_percent, + $this->products[$i]->date_start, + $this->products[$i]->date_end + ); + + if ($resql < 0) { - $tva_tx = get_default_tva($mysoc,$this->client,$prod->tva_tx); - // multiprix - if($conf->global->PRODUIT_MULTIPRICES == 1) - $price = $prod->multiprices[$this->client->price_level]; - else - $price = $prod->price; - - $resql = $this->addline( - $this->id, - $prod->description, - $price, - $this->products_qty[$i], - $tva_tx, - $this->products[$i], - $this->products_remise_percent[$i], - $this->products_date_start[$i], - $this->products_date_end[$i] - ); - - if ($resql < 0) - { - $this->error=$this->db->error; - dolibarr_print_error($this->db); - break; - } + $this->error=$this->db->error; + dolibarr_print_error($this->db); + break; } } @@ -2008,18 +2015,19 @@ class PropaleLigne var $qty; var $tva_tx; var $subprice; - var $remise; var $remise_percent; - var $price; - var $rang; + var $rang = 0; var $coef; - - var $info_bits; // Bit 0: 0 si TVA normal - 1 si TVA NPR + var $info_bits = 0; // Bit 0: 0 si TVA normal - 1 si TVA NPR // Bit 1: 0 ligne normale - 1 si ligne de remise fixe var $total_ht; // Total HT de la ligne toute quantité et incluant la remise ligne var $total_tva; // Total TVA de la ligne toute quantité et incluant la remise ligne var $total_ttc; // Total TTC de la ligne toute quantité et incluant la remise ligne + // Ne plus utiliser + var $remise; + var $price; + // From llx_product var $ref; // Reference produit var $libelle; // Label produit