diff --git a/htdocs/commande/commande.class.php b/htdocs/commande/commande.class.php index 846d7ccc016..6101b293e4d 100644 --- a/htdocs/commande/commande.class.php +++ b/htdocs/commande/commande.class.php @@ -621,7 +621,7 @@ class Commande extends CommonObject * par l'appelant par la methode get_default_tva(societe_vendeuse,societe_acheteuse,taux_produit) * et le desc doit deja avoir la bonne valeur (a l'appelant de gerer le multilangue) */ - function addline($commandeid, $desc, $pu, $qty, $txtva, $fk_product=0, $remise_percent=0, $fk_remise_except=0, $info_bits=0) + function addline($commandeid, $desc, $pu, $qty, $txtva, $fk_product=0, $remise_percent=0, $fk_remise_except=0, $info_bits=0, $price_base_type='HT') { dolibarr_syslog("Commande.class.php::addline this->id=$this->id, $commandeid, $desc, $pu, $qty, $txtva, $fk_product, $remise_percent"); include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php'); @@ -641,7 +641,7 @@ class Commande extends CommonObject // qty, pu, remise_percent et txtva // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva. - $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva); + $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type); $total_ht = $tabprice[0]; $total_tva = $tabprice[1]; $total_ttc = $tabprice[2]; @@ -1805,7 +1805,7 @@ class Commande extends CommonObject * \param tva_tx Taux TVA * \return int < 0 si erreur, > 0 si ok */ - function updateline($rowid, $desc, $pu, $qty, $remise_percent=0, $txtva) + function updateline($rowid, $desc, $pu, $qty, $remise_percent=0, $txtva, $price_base_type='HT') { dolibarr_syslog("Commande::UpdateLine $rowid, $desc, $pu, $qty, $remise_percent, $txtva"); include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php'); @@ -1825,7 +1825,7 @@ class Commande extends CommonObject // qty, pu, remise_percent et txtva // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva. - $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva); + $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type); $total_ht = $tabprice[0]; $total_tva = $tabprice[1]; $total_ttc = $tabprice[2]; diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php index 7ec2964831d..9bb0fe9b84e 100644 --- a/htdocs/compta/facture.php +++ b/htdocs/compta/facture.php @@ -2222,7 +2222,7 @@ else print ''.$langs->trans('PriceUHT').''; print ''.$langs->trans('Qty').''; print ''.$langs->trans('ReductionShort').''; - print ''.$langs->trans('AmountHT').''; + print ''.$langs->trans('TotalHT').''; print ' '; print ' '; print ' '; @@ -2407,7 +2407,7 @@ else } else print ' '; print ''; - print ''; + print ''; print '
'; print '' . "\n"; if ($conf->service->enabled) diff --git a/htdocs/compta/facture/facture-rec.class.php b/htdocs/compta/facture/facture-rec.class.php index 3656b2fde0b..2fda42cfd64 100644 --- a/htdocs/compta/facture/facture-rec.class.php +++ b/htdocs/compta/facture/facture-rec.class.php @@ -283,7 +283,7 @@ class FactureRec extends Facture /** * \brief Ajoute une ligne de facture */ - function addline($facid, $desc, $pu, $qty, $txtva, $fk_product='NULL', $remise_percent=0) + function addline($facid, $desc, $pu, $qty, $txtva, $fk_product='NULL', $remise_percent=0, $price_base_type='HT') { include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php'); @@ -301,7 +301,7 @@ class FactureRec extends Facture // qty, pu, remise_percent et txtva // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva. - $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva); + $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type); $total_ht = $tabprice[0]; $total_tva = $tabprice[1]; $total_ttc = $tabprice[2]; diff --git a/htdocs/facture.class.php b/htdocs/facture.class.php index 5510590c8bf..3801007bf25 100644 --- a/htdocs/facture.class.php +++ b/htdocs/facture.class.php @@ -1308,12 +1308,14 @@ class Facture extends CommonObject if (! $info_bits) $info_bits=0; $pu = price2num($pu); $txtva=price2num($txtva); - + if ($price_base_type=='HT') $pu=$pu; + else $pu=$pu_ttc; + // Calcul du total TTC et de la TVA pour la ligne a partir de // qty, pu, remise_percent et txtva // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva. - $tabprice = calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type, $pu_ttc); + $tabprice = calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type); $total_ht = $tabprice[0]; $total_tva = $tabprice[1]; $total_ttc = $tabprice[2]; @@ -1382,15 +1384,16 @@ class Facture extends CommonObject * \brief Mets à jour une ligne de facture * \param rowid Id de la ligne de facture * \param desc Description de la ligne - * \param pu Prix unitaire + * \param pu Prix unitaire (HT ou TTC selon price_base_type) * \param qty Quantité * \param remise_percent Pourcentage de remise de la ligne - * \param date_start Date de debut de validité du service - * \param date_end Date de fin de validité du service + * \param date_start Date de debut de validité du service + * \param date_end Date de fin de validité du service * \param tva_tx Taux TVA + * \param price_base_type HT ou TTC * \return int < 0 si erreur, > 0 si ok */ - function updateline($rowid, $desc, $pu, $qty, $remise_percent=0, $date_start, $date_end, $txtva) + function updateline($rowid, $desc, $pu, $qty, $remise_percent=0, $date_start, $date_end, $txtva, $price_base_type='HT') { dolibarr_syslog("Facture::UpdateLine $rowid, $desc, $pu, $qty, $remise_percent, $date_start, $date_end, $txtva", LOG_DEBUG); include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php'); @@ -1410,10 +1413,13 @@ class Facture extends CommonObject // qty, pu, remise_percent et txtva // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva. - $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva); - $total_ht = $tabprice[0]; - $total_tva = $tabprice[1]; - $total_ttc = $tabprice[2]; + $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type); + $total_ht = $tabprice[0]; + $total_tva = $tabprice[1]; + $total_ttc = $tabprice[2]; + $pu_ht = $tabprice[3]; + $pu_tva = $tabprice[4]; + $pu_ttc = $tabprice[5]; // Anciens indicateurs: $price, $remise (a ne plus utiliser) $price = $pu; diff --git a/htdocs/fourn/facture/fiche.php b/htdocs/fourn/facture/fiche.php index 2f290079837..4ced48b3433 100644 --- a/htdocs/fourn/facture/fiche.php +++ b/htdocs/fourn/facture/fiche.php @@ -106,13 +106,6 @@ if($_GET['action'] == 'deletepaiement') } } -if ($_POST['action'] == 'modif_libelle') -{ - $sql = 'UPDATE '.MAIN_DB_PREFIX.'facture_fourn set libelle = \''.addslashes($form_libelle).'\' WHERE rowid = '.$_GET['facid']; - $result = $db->query( $sql); -} - - if ($_POST['action'] == 'update' && ! $_POST['cancel']) { $datefacture = $db->idate(mktime(12, 0 , 0, $_POST['remonth'], $_POST['reday'], $_POST['reyear'])); @@ -165,22 +158,23 @@ if ($_POST['action'] == 'add' && $user->rights->fournisseur->facture->creer) for ($i = 1 ; $i < 9 ; $i++) { $label = $_POST['label'.$i]; - $amount = price2num($_POST['amount'.$i]); + $amountht = price2num($_POST['amount'.$i]); $amountttc = price2num($_POST['amountttc'.$i]); - $tauxtva = price2num($_POST['tauxtva'.$i]); + $tauxtva = price2num($_POST['tauxtva'.$i]); $qty = $_POST['qty'.$i]; - - if (strlen($label) > 0 && !empty($amount)) + $fk_product = $_POST['fk_product'.$i]; + if ($label) { + if ($amountht) + { + $price_base='HT'; $amount=$amountht; + } + else + { + $price_base='TTC'; $amount=$amountttc; + } $atleastoneline=1; - $ret=$facfou->addline($label, $amount, $tauxtva, $qty, 1); - if ($ret < 0) $nberror++; - } - else if (strlen($label) > 0 && empty($amount)) - { - $ht = $amountttc / (1 + ($tauxtva / 100)); - $atleastoneline=1; - $ret=$facfou->addline($label, $ht, $tauxtva, $qty, 1); + $ret=$facfou->addline($label, $amount, $tauxtva, $qty, $fk_product, $remise_percent, '', '', '', 0, $price_base); if ($ret < 0) $nberror++; } } @@ -379,8 +373,8 @@ if ($_GET['action'] == 'create' or $_GET['action'] == 'copy') print ''; print ' '.$langs->trans('Label').''; print ''.$langs->trans('PriceUHT').''; + print ''.$langs->trans('VAT').''; print ''.$langs->trans('Qty').''; - print ''.$langs->trans('VATRate').''; print ''.$langs->trans('PriceUTTC').''; print ''; @@ -401,10 +395,10 @@ if ($_GET['action'] == 'create' or $_GET['action'] == 'copy') print ''.$i.''; print ''; print ''; - print ''; print ''; $html->select_tva('tauxtva'.$i,$value_tauxtva,$societe,$mysoc); print ''; + print ''; print ''; } @@ -490,12 +484,11 @@ else print ''; print ''; + print ''; print ''; print ''; print ''; print ''; - print ''; - print ''; print ''; print ''; for ($i = 0 ; $i < sizeof($fac->lignes) ; $i++) @@ -503,15 +496,14 @@ else $var=!$var; // Affichage simple de la ligne print ''; - print ''; - print ''; + print ''; + print ''; + print ''; print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; + print ''; + print ''; + print ''; + print ''; print ''; } @@ -578,11 +570,11 @@ else print ''; print ''; + print dolibarr_print_date($fac->datep,'daytext').''; print ''; print ''; @@ -634,7 +626,7 @@ else $objp = $db->fetch_object($result); $var=!$var; print ''; - print '\n"; + print '\n"; print ''; print ''; @@ -689,12 +681,11 @@ else if ($i == 0) { print ''; + print ''; print ''; print ''; print ''; print ''; - print ''; - print ''; print ''; print ''; print ''; @@ -718,15 +709,14 @@ else print ''; } print ''; + print ''; print ''; print ''; print ''; print ''; - print ''; - print ''; - print ''; + print ''; print ''; print ''; @@ -750,15 +740,14 @@ else print nl2br($fac->lignes[$i]->description); } print ''; - print ''; - print ''; + print ''; + print ''; + print ''; print ''; print ''; - print ''; - print ''; print ''; - print ''; - print ''; + print ''; + print ''; print ''; } @@ -767,12 +756,11 @@ else if ($fac->statut == 0 && $_GET['action'] != 'mod_ligne') { print ''; + print ''; print ''; print ''; print ''; print ''; - print ''; - print ''; print ''; print ''; print ''; @@ -788,6 +776,9 @@ else print ''; print ''; print ''; + print ''; print ''; print ''; - print ''; + print ''; + print ''; print ''; // Ajout de produits/services prédéfinis @@ -813,15 +801,13 @@ else print ''; $var=! $var; print ''; - print ''; print ''; print ''; print ''; - print ''; - print ''; - print ''; + print ''; print ''; print ''; } diff --git a/htdocs/fourn/fournisseur.commande.class.php b/htdocs/fourn/fournisseur.commande.class.php index 089b0102854..b1c36c8bb28 100644 --- a/htdocs/fourn/fournisseur.commande.class.php +++ b/htdocs/fourn/fournisseur.commande.class.php @@ -1224,7 +1224,7 @@ class CommandeFournisseur extends Commande * \param tva_tx Taux TVA * \return int < 0 si erreur, > 0 si ok */ - function updateline($rowid, $desc, $pu, $qty, $remise_percent=0, $txtva) + function updateline($rowid, $desc, $pu, $qty, $remise_percent=0, $txtva, $price_base_type='HT') { dolibarr_syslog("CommandeFournisseur::UpdateLine $rowid, $desc, $pu, $qty, $remise_percent, $txtva"); include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php'); @@ -1244,7 +1244,7 @@ class CommandeFournisseur extends Commande // qty, pu, remise_percent et txtva // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva. - $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva); + $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $price_base_type); $total_ht = $tabprice[0]; $total_tva = $tabprice[1]; $total_ttc = $tabprice[2]; diff --git a/htdocs/fourn/fournisseur.facture.class.php b/htdocs/fourn/fournisseur.facture.class.php index 2030ea13270..401d46516e9 100644 --- a/htdocs/fourn/fournisseur.facture.class.php +++ b/htdocs/fourn/fournisseur.facture.class.php @@ -209,7 +209,7 @@ class FactureFournisseur extends Facture /* * Lignes */ - $sql = 'SELECT f.rowid, f.description, f.pu_ht, f.qty, f.tva_taux, f.tva'; + $sql = 'SELECT f.rowid, f.description, f.pu_ht, f.pu_ttc, f.qty, f.tva_taux, f.tva'; $sql.= ', f.total_ht, f.tva as total_tva, f.total_ttc, f.fk_product'; $sql.= ', p.ref, p.label as label, p.description as product_desc'; //$sql.= ', pf.ref_fourn'; @@ -236,6 +236,7 @@ class FactureFournisseur extends Facture $this->lignes[$i]->libelle = $obj->label; // Label du produit $this->lignes[$i]->product_desc = $obj->product_desc; // Description du produit $this->lignes[$i]->pu_ht = $obj->pu_ht; + $this->lignes[$i]->pu_ttc = $obj->pu_ttc; $this->lignes[$i]->tva_taux = $obj->tva_taux; $this->lignes[$i]->qty = $obj->qty; $this->lignes[$i]->tva = $obj->tva; @@ -367,12 +368,13 @@ class FactureFournisseur extends Facture * \param date_end Date de fin de validité du service * \param ventil Code de ventilation comptable * \param info_bits Bits de type de lignes + * \param price_base HT ou TTC * \remarks Les parametres sont deja censé etre juste et avec valeurs finales a l'appel * de cette methode. Aussi, pour le taux tva, il doit deja avoir ete défini * par l'appelant par la methode get_default_tva(societe_vendeuse,societe_acheteuse,taux_produit) * et le desc doit deja avoir la bonne valeur (a l'appelant de gerer le multilangue) */ - function addline($desc, $pu, $txtva, $qty, $fk_product=0, $remise_percent=0, $date_start='', $date_end='', $ventil=0, $info_bits='', $fk_remise_except='', $price_base_type='HT', $pu_ttc=0) + function addline($desc, $pu, $txtva, $qty, $fk_product=0, $remise_percent=0, $date_start='', $date_end='', $ventil=0, $info_bits='', $price_base_type='HT') { dolibarr_syslog("FactureFourn::Addline $desc,$pu,$qty,$txtva,$fk_product,$remise_percent,$date_start,$date_end,$ventil,$info_bits", LOG_DEBUG); include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php'); @@ -382,23 +384,18 @@ class FactureFournisseur extends Facture // Nettoyage paramètres $txtva=price2num($txtva); - // Calcul du total TTC et de la TVA pour la ligne a partir de - // qty, pu, remise_percent et txtva - // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker - // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva. - $tabprice = calcul_price_total($qty, $pu, 0, $txtva, 0, 'HT', 0); - $total_ht = $tabprice[0]; - $total_tva = $tabprice[1]; - $total_ttc = $tabprice[2]; $sql = 'INSERT INTO '.MAIN_DB_PREFIX.'facture_fourn_det (fk_facture_fourn)'; $sql .= ' VALUES ('.$this->id.');'; + dolibarr_syslog("Fournisseur.facture::addline sql=".$sql); + $resql = $this->db->query($sql); if ($resql) { $idligne = $this->db->last_insert_id(MAIN_DB_PREFIX.'facture_fourn_det'); - $this->updateline($idligne, $desc, $pu, $txtva, $qty, $fk_product); + $this->updateline($idligne, $desc, $pu, $txtva, $qty, $fk_product); + // Mise a jour prix facture $result=$this->update_price($this->id); if ($result > 0) @@ -424,50 +421,60 @@ class FactureFournisseur extends Facture /** * \brief Mets à jour une ligne de facture - * \param id Id de la ligne de facture - * \param label Description de la ligne - * \param puht Prix unitaire - * \param tauxtva Taux tva - * \param qty Quantité - * \param idproduct Id produit - * \return int <0 si ko, >0 si ok + * \param id Id de la ligne de facture + * \param label Description de la ligne + * \param pu Prix unitaire (HT ou TTC selon price_base_type) + * \param tauxtva Taux tva + * \param qty Quantité + * \param idproduct Id produit + * \param price_base_type HT ou TTC + * \return int <0 si ko, >0 si ok */ - function updateline($id, $label, $puht, $tauxtva, $qty=1, $idproduct=0) + function updateline($id, $label, $pu, $tauxtva, $qty=1, $idproduct=0, $price_base_type='HT') { - $puht = price2num($puht); + $pu = price2num($pu); $qty = price2num($qty); - if (is_numeric($puht) && is_numeric($qty)) + // Validation + if (! is_numeric($pu) || ! is_numeric($qty)) return -1; + + // Calcul du total TTC et de la TVA pour la ligne a partir de + // qty, pu, remise_percent et txtva + // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker + // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva. + $tabprice = calcul_price_total($qty, $pu, 0, $tauxtva, 0, $price_base_type); + $total_ht = $tabprice[0]; + $total_tva = $tabprice[1]; + $total_ttc = $tabprice[2]; + $pu_ht = $tabprice[3]; + $pu_tva = $tabprice[4]; + $pu_ttc = $tabprice[5]; + + $sql = 'UPDATE '.MAIN_DB_PREFIX.'facture_fourn_det '; + $sql.= 'SET '; + $sql.= 'description =\''.addslashes($label).'\''; + $sql.= ', pu_ht = ' .price2num($pu_ht); + $sql.= ', pu_ttc= ' .price2num($pu_ttc); + $sql.= ', qty =' .price2num($qty); + $sql.= ', tva_taux=' .price2num($tauxtva); + $sql.= ', total_ht=' .price2num($total_ht); + $sql.= ', tva=' .price2num($total_tva); + $sql.= ', total_ttc='.price2num($total_ttc); + if ($idproduct) $sql.= ', fk_product='.$idproduct; + else $sql.= ', fk_product=null'; + $sql.= ' WHERE rowid = '.$id; + + dolibarr_syslog("Fournisseur.facture::updateline sql=".$sql); + $resql=$this->db->query($sql); + if ($resql) { - $totalht = ($puht * $qty); - $tva = ($totalht * $tauxtva / 100); - $totalttc = $totalht + $tva; - - $sql = 'UPDATE '.MAIN_DB_PREFIX.'facture_fourn_det '; - $sql.= 'SET '; - $sql.= 'description =\''.addslashes($label).'\''; - $sql.= ', pu_ht = ' .price2num($puht); - $sql.= ', qty =' .price2num($qty); - $sql.= ', total_ht=' .price2num($totalht); - $sql.= ', tva=' .price2num($tva); - $sql.= ', tva_taux=' .price2num($tauxtva); - $sql.= ', total_ttc='.price2num($totalttc); - if ($idproduct) $sql.= ', fk_product='.$idproduct; - else $sql.= ', fk_product=null'; - $sql.= ' WHERE rowid = '.$id; - - dolibarr_syslog("Fournisseur.facture::updateline sql=".$sql); - $resql=$this->db->query($sql); - if ($resql) - { - // Mise a jour prix facture - return $this->update_price($this->id); - } - else - { - $this->error=$this->db->error(); - return -1; - } + // Mise a jour prix total facture + return $this->update_price($this->id); + } + else + { + $this->error=$this->db->error(); + return -1; } } @@ -497,6 +504,8 @@ class FactureFournisseur extends Facture */ function update_price($facid) { + global $conf; + $total_ht = 0; $total_tva = 0; $total_ttc = 0; @@ -521,9 +530,9 @@ class FactureFournisseur extends Facture $total_ttc = $total_ttc != '' ? $total_ttc : 0; $sql = 'UPDATE '.MAIN_DB_PREFIX.'facture_fourn SET'; - $sql .= ' total_ht = '. price2num($total_ht); - $sql .= ',total_tva = '.price2num($total_tva); - $sql .= ',total_ttc = '.price2num($total_ttc); + $sql .= ' total_ht = '. price2num($total_ht,'MT'); + $sql .= ',total_tva = '.price2num($total_tva,'MT'); + $sql .= ',total_ttc = '.price2num($total_ttc,'MT'); $sql .= ' WHERE rowid = '.$facid.';'; dolibarr_syslog("Fournisseur.facture::update_price sql=".$sql); $resql2 = $this->db->query($sql); diff --git a/htdocs/html.form.class.php b/htdocs/html.form.class.php index bc6e9a7d00d..1a2060a1e7d 100644 --- a/htdocs/html.form.class.php +++ b/htdocs/html.form.class.php @@ -929,7 +929,7 @@ class Form { $sql.="DISTINCT"; } - $sql.= " p.rowid, p.label, p.ref, p.price, p.duration"; + $sql.= " p.rowid, p.label, p.ref, p.price, p.price_ttc, p.price_base_type, p.duration"; $sql.= " FROM ".MAIN_DB_PREFIX."product as p "; if ($conf->categorie->enabled && ! $user->rights->categorie->voir) { @@ -1005,24 +1005,23 @@ class Form // Multiprix if ($price_level > 1) { - $sql= "SELECT price "; + $sql= "SELECT price, price_ttc, price_base_type "; $sql.= "FROM ".MAIN_DB_PREFIX."product_price "; $sql.= "where fk_product='".$objp->rowid."' and price_level=".$price_level; $sql.= " order by date_price DESC limit 1"; $result2 = $this->db->query($sql) ; $objp2 = $this->db->fetch_object($result2); - if ($objp2->price) - { - $opt.= $objp2->price.' '.$langs->trans("Currency".$conf->monnaie); - } + if ($objp2->price_base_type == 'HT') + $opt.= price2num($objp2->price,'MU').' '.$langs->trans("Currency".$conf->monnaie).' '.$langs->trans("HT"); else - { - $opt.= $objp->price.' '.$langs->trans("Currency".$conf->monnaie); - } + $opt.= price2num($objp2->price_ttc,'MU').' '.$langs->trans("Currency".$conf->monnaie).' '.$langs->trans("TTC"); } else { - $opt.= $objp->price.' '.$langs->trans("Currency".$conf->monnaie); + if ($objp->price_base_type == 'HT') + $opt.= price2num($objp->price,'MU').' '.$langs->trans("Currency".$conf->monnaie).' '.$langs->trans("HT"); + else + $opt.= price2num($objp->price_ttc,'MU').' '.$langs->trans("Currency".$conf->monnaie).' '.$langs->trans("TTC"); } if ($objp->duration) $opt.= ' - '.$objp->duration; diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php index f46abf1d959..3307d42c98c 100644 --- a/htdocs/install/upgrade2.php +++ b/htdocs/install/upgrade2.php @@ -900,7 +900,7 @@ function migrate_price_facture($db,$langs,$conf) $facligne= new FactureLigne($db); $facligne->fetch($rowid); - $result=calcul_price_total($qty,$pu,$remise_percent,$txtva,$remise_percent_global); + $result=calcul_price_total($qty,$pu,$remise_percent,$txtva,$remise_percent_global,'HT'); $total_ht = $result[0]; $total_tva = $result[1]; $total_ttc = $result[2]; @@ -1006,7 +1006,7 @@ function migrate_price_propal($db,$langs,$conf) $propalligne= new PropaleLigne($db); $propalligne->fetch($rowid); - $result=calcul_price_total($qty,$pu,$remise_percent,$txtva,$remise_percent_global); + $result=calcul_price_total($qty,$pu,$remise_percent,$txtva,$remise_percent_global,'HT'); $total_ht = $result[0]; $total_tva = $result[1]; $total_ttc = $result[2]; @@ -1112,7 +1112,7 @@ function migrate_price_commande($db,$langs,$conf) $commandeligne= new CommandeLigne($db); $commandeligne->fetch($rowid); - $result=calcul_price_total($qty,$pu,$remise_percent,$txtva,$remise_percent_global); + $result=calcul_price_total($qty,$pu,$remise_percent,$txtva,$remise_percent_global,'HT'); $total_ht = $result[0]; $total_tva = $result[1]; $total_ttc = $result[2]; diff --git a/htdocs/lib/price.lib.php b/htdocs/lib/price.lib.php index c4a834e3075..dc34ede4b4b 100644 --- a/htdocs/lib/price.lib.php +++ b/htdocs/lib/price.lib.php @@ -35,42 +35,48 @@ facture, propale, commande ou autre depuis: quantité, prix unitaire, remise_percent_ligne, txtva, remise_percent_global \param qty Quantité - \param pu Prix unitaire HT + \param pu Prix unitaire (HT ou TTC selon price_base_type) \param remise_percent_ligne Remise ligne \param txtva Taux tva \param remise_percent_global 0 \param price_base_type HT=on calcule sur le HT, TTC=on calcule sur le TTC - \param pu_ttc Prix unitaire TTC - \return result[0,1,2] (total_ht, total_tva, total_ttc) + \return result[0,1,2,3,4,5] (total_ht, total_tva, total_ttc, pu_ht, pu_tva, pu_ttc) */ -function calcul_price_total($qty, $pu, $remise_percent_ligne, $txtva, $remise_percent_global=0, $price_base_type='HT', $pu_ttc=0) +function calcul_price_total($qty, $pu, $remise_percent_ligne, $txtva, $remise_percent_global=0, $price_base_type='HT') { - $maxdecimalfortotal=2; + global $conf; $result=array(); - if ($price_base_type =='HT') + //dolibarr_syslog("price.lib::calcul_price_total $qty, $pu, $remise_percent_ligne, $txtva, $price_base_type"); + if ($price_base_type == 'HT') { // On travaille par defaut en partant du prix HT $tot_sans_remise = $pu * $qty; $tot_avec_remise_ligne = $tot_sans_remise * ( 1 - ($remise_percent_ligne / 100)); $tot_avec_remise = $tot_avec_remise_ligne * ( 1 - ($remise_percent_global / 100)); - $result[0] = round($tot_avec_remise, $maxdecimalfortotal); - $result[2] = round($tot_avec_remise * ( 1 + ($txtva / 100)), $maxdecimalfortotal); + $result[0] = price2num($tot_avec_remise, 'MT'); + $result[2] = price2num($tot_avec_remise * ( 1 + ($txtva / 100)), 'MT'); $result[1] = $result[2] - $result[0]; + $result[3] = price2num($pu, 'MU'); + $result[5] = price2num($pu * ( 1 + ($txtva / 100)), 'MU'); + $result[4] = $result[5] - $result[3]; } else { // On cacule à l'envers en partant du prix TTC // Utilise pour les produits a prix TTC reglemente (livres, ...) - $tot_sans_remise = $pu_ttc * $qty; + $tot_sans_remise = $pu * $qty; $tot_avec_remise_ligne = $tot_sans_remise * ( 1 - ($remise_percent_ligne / 100)); $tot_avec_remise = $tot_avec_remise_ligne * ( 1 - ($remise_percent_global / 100)); - $result[2] = round($tot_avec_remise, $maxdecimalfortotal); - $result[0] = round($tot_avec_remise / ( 1 + ($txtva / 100)), $maxdecimalfortotal); + $result[2] = price2num($tot_avec_remise, 'MT'); + $result[0] = price2num($tot_avec_remise / ( 1 + ($txtva / 100)), 'MT'); $result[1] = $result[2] - $result[0]; + $result[5] = price2num($pu, 'MU'); + $result[3] = price2num($pu / ( 1 + ($txtva / 100)), 'MU'); + $result[4] = $result[5] - $result[3]; } return $result; diff --git a/htdocs/propal.class.php b/htdocs/propal.class.php index b9ff715d71f..9ddf830b6be 100644 --- a/htdocs/propal.class.php +++ b/htdocs/propal.class.php @@ -267,7 +267,7 @@ class Propal extends CommonObject * par l'appelant par la methode get_default_tva(societe_vendeuse,societe_acheteuse,taux_produit) * et le desc doit deja avoir la bonne valeur (a l'appelant de gerer le multilangue) */ - function addline($propalid, $desc, $pu, $qty, $txtva, $fk_product=0, $remise_percent=0) + function addline($propalid, $desc, $pu, $qty, $txtva, $fk_product=0, $remise_percent=0, $price_base_type='HT') { dolibarr_syslog("Propal.class::addline $propalid, $desc, $pu, $qty, $txtva, $fk_product, $remise_percent"); include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php'); @@ -287,7 +287,7 @@ class Propal extends CommonObject // qty, pu, remise_percent et txtva // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva. - $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva); + $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type); $total_ht = $tabprice[0]; $total_tva = $tabprice[1]; $total_ttc = $tabprice[2]; @@ -359,7 +359,7 @@ class Propal extends CommonObject * \param desc Description * \return int 0 en cas de succès */ - function updateline($rowid, $pu, $qty, $remise_percent=0, $txtva, $desc='') + function updateline($rowid, $pu, $qty, $remise_percent=0, $txtva, $desc='', $price_base_type='HT') { dolibarr_syslog("propal.class.php::UpdateLine $rowid, $pu, $qty, $remise_percent, $txtva, $desc"); include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php'); @@ -379,7 +379,7 @@ class Propal extends CommonObject // qty, pu, remise_percent et txtva // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva. - $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva); + $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type); $total_ht = $tabprice[0]; $total_tva = $tabprice[1]; $total_ttc = $tabprice[2]; diff --git a/mysql/migration/2.1.0-2.2.0.sql b/mysql/migration/2.1.0-2.2.0.sql index 8251c495440..6bedb2a7306 100644 --- a/mysql/migration/2.1.0-2.2.0.sql +++ b/mysql/migration/2.1.0-2.2.0.sql @@ -591,7 +591,8 @@ ALTER TABLE llx_facture_fourn MODIFY total_ht double(16,8) DEFAULT 0; ALTER TABLE llx_facture_fourn MODIFY total_tva double(16,8) DEFAULT 0; ALTER TABLE llx_facture_fourn MODIFY total_ttc double(16,8) DEFAULT 0; -ALTER TABLE llx_facture_fourn_det MODIFY pu_ht double(16,8) DEFAULT 0; +ALTER TABLE llx_facture_fourn_det MODIFY pu_ht double(16,8); +ALTER TABLE llx_facture_fourn_det ADD pu_ttc double(16,8) AFTER pu_ht; ALTER TABLE llx_facture_fourn_det MODIFY qty smallint DEFAULT 1; ALTER TABLE llx_facture_fourn_det MODIFY total_ht double(16,8) DEFAULT 0; ALTER TABLE llx_facture_fourn_det MODIFY tva_taux double(16,8) DEFAULT 0; diff --git a/mysql/tables/llx_facture_fourn_det.sql b/mysql/tables/llx_facture_fourn_det.sql index a2dfc04d5b0..1b920dbce98 100644 --- a/mysql/tables/llx_facture_fourn_det.sql +++ b/mysql/tables/llx_facture_fourn_det.sql @@ -25,10 +25,11 @@ create table llx_facture_fourn_det fk_facture_fourn integer NOT NULL, fk_product integer NULL, description text, - pu_ht double(16,8) DEFAULT 0, + pu_ht double(16,8), + pu_ttc double(16,8), qty smallint DEFAULT 1, - total_ht double(16,8) DEFAULT 0, tva_taux double(16,8) DEFAULT 0, + total_ht double(16,8) DEFAULT 0, tva double(16,8) DEFAULT 0, total_ttc double(16,8) DEFAULT 0
'.$langs->trans('Label').''.$langs->trans('VAT').''.$langs->trans('PriceUHT').''.$langs->trans('PriceUTTC').''.$langs->trans('Qty').''.$langs->trans('TotalHT').''.$langs->trans('VATRate').''.$langs->trans('VAT').''.$langs->trans('TotalTTC').' 
'.$fac->lignes[$i]->description.''.price($fac->lignes[$i]->pu_ht).''.price($fac->lignes[$i]->pu_ht * (1+($fac->lignes[$i]->tva_taux/100))).''.price($fac->lignes[$i]->tva_taux).'%'.price($fac->lignes[$i]->pu_ht,'MU').''.($fac->lignes[$i]->pu_ttc?price($fac->lignes[$i]->pu_ttc,'MU'):' ').''.$fac->lignes[$i]->qty.''.price($fac->lignes[$i]->total_ht).''.price($fac->lignes[$i]->tva_taux).''.price($fac->lignes[$i]->tva).''.price($fac->lignes[$i]->total_ttc).''.img_edit().''.img_delete().''.price($fac->lignes[$i]->total_ht,'MT').''.price($fac->lignes[$i]->total_ttc,'MT').''.img_edit().''.img_delete().'
'.$langs->trans('Date').''; - print dolibarr_print_date($fac->datep,'dayhourtext').'
'.$langs->trans('DateEcheance').''; - print dolibarr_print_date($fac->date_echeance,'dayhourtext'); + print dolibarr_print_date($fac->date_echeance,'daytext'); if (($fac->paye == 0) && ($fac->statut > 0) && $fac->date_echeance < (time() - $conf->facture->fournisseur->warning_delay)) print img_picto($langs->trans("Late"),"warning"); print '
'.img_object($langs->trans('Payment'),'payment').' '.dolibarr_print_date($objp->dp)."'.img_object($langs->trans('Payment'),'payment').' '.dolibarr_print_date($objp->dp,'day')."'.$objp->paiement_type.' '.$objp->num_paiement.''.price($objp->amount).''.$langs->trans('Currency'.$conf->monnaie).'
'.$langs->trans('Label').''.$langs->trans('VAT').''.$langs->trans('PriceUHT').''.$langs->trans('PriceUTTC').''.$langs->trans('Qty').''.$langs->trans('TotalHT').''.$langs->trans('VATRate').''.$langs->trans('VAT').''.$langs->trans('TotalTTC').'  '; + $html->select_tva('tauxtva',$fac->lignes[$i]->tva_taux,$societe,$mysoc); + print ' '; - $html->select_tva('tauxtva',$fac->lignes[$i]->tva_taux,$societe,$mysoc); - print ' '; print '
'.price($fac->lignes[$i]->pu_ht).''.price(price2num($fac->lignes[$i]->pu_ht * (1+($fac->lignes[$i]->tva_taux/100)),'MU')).''.price($fac->lignes[$i]->tva_taux).'%'.price($fac->lignes[$i]->pu_ht,'MU').''.($fac->lignes[$i]->pu_ttc?price($fac->lignes[$i]->pu_ttc,'MU'):' ').''.$fac->lignes[$i]->qty.''.price($fac->lignes[$i]->total_ht).''.price($fac->lignes[$i]->tva_taux).''.price($fac->lignes[$i]->tva).''.price($fac->lignes[$i]->total_ttc).''.img_edit().''.img_delete().''.img_edit().''.img_delete().'
'.$langs->trans('Label').''.$langs->trans('VAT').''.$langs->trans('PriceUHT').''.$langs->trans('PriceUTTC').''.$langs->trans('Qty').''.$langs->trans('TotalHT').''.$langs->trans('VATRate').''.$langs->trans('VAT').''.$langs->trans('TotalTTC').'  '; + $html->select_tva('tauxtva','',$societe,$mysoc); + print ''; print ''; print ''; @@ -797,11 +788,8 @@ else print ''; print ' '; - $html->select_tva('tauxtva','',$societe,$mysoc); - print ''; - print ' '; - print '
 
'; + print ''; $html->select_produits_fournisseurs($fac->socid,'','idprod',$filtre); print '