diff --git a/htdocs/commande/commande.class.php b/htdocs/commande/commande.class.php index bdfdff374eb456f8629f35ff59e9e4aec614d691..8e2718790595880d8eec8602eba6fdab1c849028 100644 --- a/htdocs/commande/commande.class.php +++ b/htdocs/commande/commande.class.php @@ -656,7 +656,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, 0, $price_base_type); + $tabprice = calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type, $info_bits); $total_ht = $tabprice[0]; $total_tva = $tabprice[1]; $total_ttc = $tabprice[2]; @@ -1827,9 +1827,10 @@ class Commande extends CommonObject * \param qty Quantit� * \param remise_percent Pourcentage de remise de la ligne * \param tva_tx Taux TVA + * \param info_bits Miscellanous informations on line * \return int < 0 si erreur, > 0 si ok */ - function updateline($rowid, $desc, $pu, $qty, $remise_percent=0, $txtva, $price_base_type='HT') + function updateline($rowid, $desc, $pu, $qty, $remise_percent=0, $txtva, $price_base_type='HT', $info_bits=0) { dolibarr_syslog("Commande::UpdateLine $rowid, $desc, $pu, $qty, $remise_percent, $txtva"); include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php'); @@ -1849,7 +1850,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, 0, $price_base_type); + $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type, $info_bits); $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 47b96f7ffb0120d04a31f9815a2a60375183d5df..a2cfe225cdb87f2be50db4ee8e75c39b1defca71 100644 --- a/htdocs/compta/facture.php +++ b/htdocs/compta/facture.php @@ -798,7 +798,8 @@ if (($_POST['action'] == 'addligne' || $_POST['action'] == 'addligne_predef') && $prod->fetch($_POST['idprod']); $tva_tx = get_default_tva($mysoc,$fac->client,$prod->tva_tx); - + $tva_npr = get_default_npr($mysoc,$fac->client,$prod->tva_tx); + // On defini prix unitaire if ($conf->global->PRODUIT_MULTIPRICES == 1) { @@ -834,9 +835,13 @@ if (($_POST['action'] == 'addligne' || $_POST['action'] == 'addligne_predef') && else { $pu_ht=$_POST['pu']; - $tva_tx=$_POST['tva_tx']; + $tva_tx=eregi_replace('\*','',$_POST['tva_tx']); + $tva_npr=eregi('\*',$_POST['tva_tx'])?1:0; $desc=$_POST['dp_desc']; } + + $info_bit=0; + if ($tva_npr) $info_bit |= 0x01; // Insere ligne $result = $fac->addline( @@ -850,7 +855,7 @@ if (($_POST['action'] == 'addligne' || $_POST['action'] == 'addligne_predef') && $date_start, $date_end, 0, - '', + $info_bit, '', $price_base_type, $pu_ttc @@ -888,6 +893,14 @@ if ($_POST['action'] == 'updateligne' && $user->rights->facture->creer && $_POST $date_end=$_POST['date_endyear'].'-'.$_POST['date_endmonth'].'-'.$_POST['date_endday']; } + // Define info_bits + $info_bits=0; + if (eregi('\*',$_POST['tva_tx'])) $info_bits |= 0x01; + + // Define vat_rate + $vat_rate=$_POST['tva_tx']; + $vat_rate=eregi_replace('\*','',$vat_rate); + $result = $fac->updateline($_POST['rowid'], $_POST['desc'], $_POST['price'], @@ -895,7 +908,9 @@ if ($_POST['action'] == 'updateligne' && $user->rights->facture->creer && $_POST $_POST['remise_percent'], $date_start, $date_end, - $_POST['tva_tx'] + $vat_rate, + 'HT', + $info_bits ); if ($_REQUEST['lang_id']) @@ -2405,7 +2420,7 @@ else } print "</td>\n"; } - print '<td align="right">'.vatrate($objp->tva_taux).'%</td>'; + print '<td align="right">'.vatrate($objp->tva_taux).'%'.($objp->info_bits & 1?' *':'').'</td>'; print '<td align="right">'.price($objp->subprice)."</td>\n"; print '<td align="right">'; if (($objp->info_bits & 2) != 2) @@ -2507,10 +2522,7 @@ else } print '</td>'; print '<td align="right">'; - if(! $soc->tva_assuj) - print '<input type="hidden" name="tva_tx" value="0">0%'; - else - print $html->select_tva('tva_tx',$objp->tva_taux,$mysoc,$soc); + print $html->select_tva('tva_tx',$objp->tva_taux,$mysoc,$soc,'',$objp->info_bits); print '</td>'; print '<td align="right"><input size="6" type="text" class="flat" name="price" value="'.price($objp->subprice,0,'',0).'"></td>'; print '<td align="right">'; @@ -2591,10 +2603,8 @@ else } print '</td>'; print '<td align="right">'; - if (! $soc->tva_assuj) - print '<input type="hidden" name="tva_tx" value="0">0%'; - else - $html->select_tva('tva_tx',$conf->defaulttx,$mysoc,$soc); + + $html->select_tva('tva_tx',$conf->defaulttx,$mysoc,$soc); print '</td>'; print '<td align="right"><input type="text" name="pu" size="6"></td>'; print '<td align="right"><input type="text" name="qty" value="'.($fac->type==2?'-1':'1').'" size="2"></td>'; diff --git a/htdocs/compta/facture/facture-rec.class.php b/htdocs/compta/facture/facture-rec.class.php index d5475e8a383df058ed9cb914fae56c9069edd873..f52e52d66a271fb43ece7156d79f8bdfff7d627c 100644 --- a/htdocs/compta/facture/facture-rec.class.php +++ b/htdocs/compta/facture/facture-rec.class.php @@ -358,7 +358,7 @@ class FactureRec extends Facture /** * \brief Ajoute une ligne de facture */ - function addline($facid, $desc, $pu, $qty, $txtva, $fk_product='NULL', $remise_percent=0, $price_base_type='HT') + function addline($facid, $desc, $pu, $qty, $txtva, $fk_product='NULL', $remise_percent=0, $price_base_type='HT', $info_bits=0) { include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php'); @@ -376,7 +376,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, 0, $price_base_type); + $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type, $info_bits); $total_ht = $tabprice[0]; $total_tva = $tabprice[1]; $total_ttc = $tabprice[2]; diff --git a/htdocs/contrat/contrat.class.php b/htdocs/contrat/contrat.class.php index 1421e193c933bb16d49f504231dcd31b70ca4dfa..fccab983c9c763d0d580cfc4491329739997c02e 100644 --- a/htdocs/contrat/contrat.class.php +++ b/htdocs/contrat/contrat.class.php @@ -670,7 +670,7 @@ class Contrat extends CommonObject $pu = price2num($pu,'MU'); $txtva = price2num($txtva,'MU'); - dolibarr_syslog("Contrat::addline $desc, $pu, $qty, $txtva, $fk_product, $remise_percent, $date_start, $date_end, $price_base_type"); + dolibarr_syslog("Contrat::addline $desc, $pu, $qty, $txtva, $fk_product, $remise_percent, $date_start, $date_end, $price_base_type, $info_bits"); if ($this->statut == 0) { @@ -693,7 +693,7 @@ class Contrat 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, 0, $price_base_type); + $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type, $info_bits); $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 7734f4c92d1ca691f081b39e93c2ca24a7303943..12a8a1a11d6bf85d99a402081089fcd200b8bbbb 100644 --- a/htdocs/facture.class.php +++ b/htdocs/facture.class.php @@ -46,57 +46,58 @@ class Facture extends CommonObject var $element='facture'; var $table_element='facture'; - var $table; - var $tabledetail; - var $id; - //! Id client - var $socid; - //! Objet societe client (� charger par fetch_client) - var $client; - var $number; - var $author; - var $date; - var $ref; - var $ref_client; - //! 0=Facture normale, 1=Facture remplacement, 2=Facture avoir, 3=Facture r�currente - var $type; - var $amount; - var $remise; - var $tva; - var $total; - var $note; - var $note_public; - //! 0=brouillon, - //! 1=valid�e, - //! 2=class�e pay�e partiellement (close_code='discount_vat','badcustomer') ou compl�tement (close_code=null), - //! 3=class�e abandonn�e et aucun paiement n'a eu lieu (close_code='badcustomer','abandon' ou 'replaced') - var $statut; - //! 1 si facture pay�e COMPLETEMENT, 0 sinon (ce champ ne devrait plus servir car insuffisant) - var $paye; - //! id facture source si facture de remplacement ou avoir - var $fk_facture_source; - //! Fermeture apres paiement partiel: discount_vat, bad_customer, abandon - //! Fermeture alors que aucun paiement: replaced (si remplac�), abandon - var $close_code; - //! Commentaire si mis a paye sans paiement complet - var $close_note; - var $propalid; - var $projetid; - var $date_lim_reglement; - var $cond_reglement_id; - var $cond_reglement_code; - var $mode_reglement_id; - var $mode_reglement_code; - var $modelpdf; - var $products=array(); - var $lignes=array(); - //! Pour board - var $nbtodo; - var $nbtodolate; - var $specimen; - //! Numero d'erreur de 512 � 1023 - var $errno = 0; - /** + var $table; + var $tabledetail; + var $id; + //! Id client + var $socid; + //! Objet societe client (� charger par fetch_client) + var $client; + var $number; + var $author; + var $date; + var $ref; + var $ref_client; + //! 0=Facture normale, 1=Facture remplacement, 2=Facture avoir, 3=Facture r�currente + var $type; + var $amount; + var $remise; + var $tva; + var $total; + var $note; + var $note_public; + //! 0=brouillon, + //! 1=valid�e, + //! 2=class�e pay�e partiellement (close_code='discount_vat','badcustomer') ou compl�tement (close_code=null), + //! 3=class�e abandonn�e et aucun paiement n'a eu lieu (close_code='badcustomer','abandon' ou 'replaced') + var $statut; + //! 1 si facture pay�e COMPLETEMENT, 0 sinon (ce champ ne devrait plus servir car insuffisant) + var $paye; + //! id facture source si facture de remplacement ou avoir + var $fk_facture_source; + //! Fermeture apres paiement partiel: discount_vat, bad_customer, abandon + //! Fermeture alors que aucun paiement: replaced (si remplac�), abandon + var $close_code; + //! Commentaire si mis a paye sans paiement complet + var $close_note; + var $propalid; + var $projetid; + var $date_lim_reglement; + var $cond_reglement_id; + var $cond_reglement_code; + var $mode_reglement_id; + var $mode_reglement_code; + var $modelpdf; + var $products=array(); + var $lignes=array(); + //! Pour board + var $nbtodo; + var $nbtodolate; + var $specimen; + //! Numero d'erreur de 512 � 1023 + var $errno = 0; + + /** \brief Constructeur de la classe \param DB handler acc�s base de donn�es \param socid id societe ('' par defaut) @@ -1337,7 +1338,7 @@ class Facture 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($facid, $desc, $pu_ht, $qty, $txtva, $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($facid, $desc, $pu_ht, $qty, $txtva, $fk_product=0, $remise_percent=0, $date_start='', $date_end='', $ventil=0, $info_bits=0, $fk_remise_except='', $price_base_type='HT', $pu_ttc=0) { dolibarr_syslog("Facture::Addline facid=$facid,desc=$desc,pu_ht=$pu_ht,qty=$qty,txtva=$txtva,fk_product=$fk_product,remise_percent=$remise_percent,date_start=$date_start,date_end=$date_end,ventil=$ventil,info_bits=$info_bits,fk_remise_except=$fk_remise_except,price_base_type=$price_base_type,pu_ttc=$pu_ttc", LOG_DEBUG); include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php'); @@ -1369,7 +1370,7 @@ 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, 0, $price_base_type); + $tabprice = calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type, $info_bits); $total_ht = $tabprice[0]; $total_tva = $tabprice[1]; $total_ttc = $tabprice[2]; @@ -1443,97 +1444,100 @@ 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 (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 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, $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'); + /** + * \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 (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 tva_tx Taux TVA + * \param price_base_type HT ou TTC + * \param info_bits Miscellanous informations + * \return int < 0 si erreur, > 0 si ok + */ + function updateline($rowid, $desc, $pu, $qty, $remise_percent=0, $date_start, $date_end, $txtva, $price_base_type='HT', $info_bits=0) + { + include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php'); - if ($this->brouillon) - { - $this->db->begin(); + dolibarr_syslog("Facture::UpdateLine $rowid, $desc, $pu, $qty, $remise_percent, $date_start, $date_end, $txtva, $price_base_type, $info_bits", LOG_DEBUG); - // Nettoyage param�tres - $remise_percent=price2num($remise_percent); - $qty=price2num($qty); - if (! $qty) $qty=1; - $pu = price2num($pu); - $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, $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; - $remise = 0; - if ($remise_percent > 0) - { - $remise = round(($pu * $remise_percent / 100),2); - $price = ($pu - $remise); - } - $price = price2num($price); + if ($this->brouillon) + { + $this->db->begin(); - // Mise a jour ligne en base - $ligne=new FactureLigne($this->db); - $ligne->rowid=$rowid; - $ligne->fetch($rowid); - - $ligne->desc=$desc; - $ligne->qty=$qty; - $ligne->tva_tx=$txtva; - $ligne->remise_percent=$remise_percent; - $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) - { - // Mise a jour info denormalisees au niveau facture - $this->update_price($this->id); - $this->db->commit(); - return $result; - } - else - { - $this->db->rollback(); - return -1; - } - } - else - { - $this->error="Facture::UpdateLine Invoice statut makes operation forbidden"; - return -2; - } - } + // Nettoyage param�tres + $remise_percent=price2num($remise_percent); + $qty=price2num($qty); + if (! $qty) $qty=1; + $pu = price2num($pu); + $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, $remise_percent, $txtva, 0, $price_base_type, $info_bits); + $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; + $remise = 0; + if ($remise_percent > 0) + { + $remise = round(($pu * $remise_percent / 100),2); + $price = ($pu - $remise); + } + $price = price2num($price); + + // Mise a jour ligne en base + $ligne=new FactureLigne($this->db); + $ligne->rowid=$rowid; + $ligne->fetch($rowid); + + $ligne->desc=$desc; + $ligne->qty=$qty; + $ligne->tva_tx=$txtva; + $ligne->remise_percent=$remise_percent; + $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; + $ligne->info_bits=$info_bits; + + // A ne plus utiliser + $ligne->price=$price; + $ligne->remise=$remise; + + $result=$ligne->update(); + if ($result > 0) + { + // Mise a jour info denormalisees au niveau facture + $this->update_price($this->id); + $this->db->commit(); + return $result; + } + else + { + $this->db->rollback(); + return -1; + } + } + else + { + $this->error="Facture::UpdateLine Invoice statut makes operation forbidden"; + return -2; + } + } /** * \brief Supprime une ligne facture de la base @@ -3108,7 +3112,7 @@ class FactureLigne $sql.= ",total_ttc=".price2num($this->total_ttc).""; $sql.= " WHERE rowid = ".$this->rowid; - dolibarr_syslog("FactureLigne::update sql=$sql"); + dolibarr_syslog("FactureLigne::update sql=".$sql); $resql=$this->db->query($sql); if ($resql) @@ -3119,7 +3123,7 @@ class FactureLigne else { $this->error=$this->db->error(); - dolibarr_syslog("FactureLigne::update Error ".$this->error); + dolibarr_syslog("FactureLigne::update Error ".$this->error, LOG_ERR); $this->db->rollback(); return -2; } diff --git a/htdocs/fourn/fournisseur.commande.class.php b/htdocs/fourn/fournisseur.commande.class.php index 8a8f61a4e67f343e44040f4a3fac40c1fc5117f1..969873dd93b6a8ac17d48f7f65801baea99d1f68 100644 --- a/htdocs/fourn/fournisseur.commande.class.php +++ b/htdocs/fourn/fournisseur.commande.class.php @@ -1244,9 +1244,10 @@ class CommandeFournisseur extends Commande * \param qty Quantit� * \param remise_percent Pourcentage de remise de la ligne * \param tva_tx Taux TVA + * \param info_bits Miscellanous informations * \return int < 0 si erreur, > 0 si ok */ - function updateline($rowid, $desc, $pu, $qty, $remise_percent=0, $txtva, $price_base_type='HT') + function updateline($rowid, $desc, $pu, $qty, $remise_percent=0, $txtva, $price_base_type='HT', $info_bits=0) { dolibarr_syslog("CommandeFournisseur::UpdateLine $rowid, $desc, $pu, $qty, $remise_percent, $txtva"); include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php'); @@ -1266,7 +1267,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, $price_base_type); + $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $price_base_type, $info_bits); $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 177185ec432f73533f33d9efacad0406aab99e84..c412dfff8c85b1ba8c97d160e4c76ade59a12cbc 100644 --- a/htdocs/fourn/fournisseur.facture.class.php +++ b/htdocs/fourn/fournisseur.facture.class.php @@ -458,9 +458,10 @@ class FactureFournisseur extends Facture * \param qty Quantit� * \param idproduct Id produit * \param price_base_type HT ou TTC + * \param info_bits Miscellanous informations of line * \return int <0 si ko, >0 si ok */ - function updateline($id, $label, $pu, $tauxtva, $qty=1, $idproduct=0, $price_base_type='HT') + function updateline($id, $label, $pu, $tauxtva, $qty=1, $idproduct=0, $price_base_type='HT', $info_bits=0) { include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php'); @@ -474,7 +475,7 @@ class FactureFournisseur 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, 0, $tauxtva, 0, $price_base_type); + $tabprice = calcul_price_total($qty, $pu, 0, $tauxtva, 0, $price_base_type, $info_bits); $total_ht = $tabprice[0]; $total_tva = $tabprice[1]; $total_ttc = $tabprice[2]; diff --git a/htdocs/html.form.class.php b/htdocs/html.form.class.php index cc0cb509e44328b9e87c33dcbba3205285ea9040..ed23314eac2157883eed6e0b3cc1e70aadc235a6 100644 --- a/htdocs/html.form.class.php +++ b/htdocs/html.form.class.php @@ -2176,22 +2176,29 @@ class Form /** * \brief Selection du taux de tva � appliquer * \param name Nom champ html - * \param defaulttx For�age du taux tva pr�-s�lectionn�. Mettre '' pour aucun forcage. + * \param selectedrate For�age du taux tva pr�-s�lectionn�. Mettre '' pour aucun forcage. * \param societe_vendeuse Objet soci�t� vendeuse * \param societe_acheteuse Objet soci�t� acheteuse * \param taux_produit Taux par defaut du produit vendu + * \param info_bits Miscellanous information on line * \remarks Si vendeur non assujeti � TVA, TVA par d�faut=0. Fin de r�gle. * Si le (pays vendeur = pays acheteur) alors la TVA par d�faut=TVA du produit vendu. Fin de r�gle. * Si (vendeur et acheteur dans Communaut� europ�enne) et bien vendu = moyen de transports neuf (auto, bateau, avion), TVA par d�faut=0 (La TVA doit �tre pay� par l'acheteur au centre d'impots de son pays et non au vendeur). Fin de r�gle. * Si (vendeur et acheteur dans Communaut� europ�enne) et bien vendu autre que transport neuf alors la TVA par d�faut=TVA du produit vendu. Fin de r�gle. * Sinon la TVA propos�e par d�faut=0. Fin de r�gle. */ - function select_tva($name='tauxtva', $defaulttx='', $societe_vendeuse='', $societe_acheteuse='', $taux_produit='') + function select_tva($name='tauxtva', $selectedrate='', $societe_vendeuse='', $societe_acheteuse='', $taux_produit='', $info_bits=0) { global $langs,$conf,$mysoc; $txtva=array(); $libtva=array(); + $nprtva=array(); + + // Define defaultnpr and defaultttx + $defaultnpr=($info_bits & 0x01); + $defaultnpr=(eregi('\*',$selectedrate) ? 1 : $defaultnpr); + $defaulttx=eregi_replace('\*','',$selectedrate); //print $societe_vendeuse."-".$societe_acheteuse; if (is_object($societe_vendeuse) && ! $societe_vendeuse->pays_code) @@ -2232,8 +2239,9 @@ class Form for ($i = 0; $i < $num; $i++) { $obj = $this->db->fetch_object($resql); - $txtva[$i] = $obj->taux; - $libtva[$i] = $obj->taux.'%'.($obj->recuperableonly ? ' *':''); + $txtva[$i] = $obj->taux; + $libtva[$i] = $obj->taux.'%'; + $nprtva[$i] = $obj->recuperableonly; } } else @@ -2250,6 +2258,7 @@ class Form if ($defaulttx < 0 || strlen($defaulttx) == 0) { $defaulttx=get_default_tva($societe_vendeuse,$societe_acheteuse,$taux_produit); + $defaultnpr=get_default_npr($societe_vendeuse,$societe_acheteuse,$taux_produit); } // Si taux par defaut n'a pu etre d�termin�, on prend dernier de la liste. // Comme ils sont tri�s par ordre croissant, dernier = plus �lev� = taux courant @@ -2267,16 +2276,21 @@ class Form for ($i = 0 ; $i < $nbdetaux ; $i++) { - print '<option value="'.$txtva[$i].'"'; - if ($txtva[$i] == $defaulttx) + //print "xxxxx".$txtva[$i]."-".$nprtva[$i]; + print '<option value="'.$txtva[$i]; + print $nprtva[$i] ? '*': ''; + print '"'; + if ($txtva[$i] == $defaulttx && $nprtva[$i] == $defaultnpr) { print ' selected="true"'; } - print '>'.vatrate($libtva[$i]).'</option>'; + print '>'.vatrate($libtva[$i]); + print $nprtva[$i] ? ' *': ''; + print '</option>'; $this->tva_taux_value[$i] = $txtva[$i]; $this->tva_taux_libelle[$i] = $libtva[$i]; - + $this->tva_taux_npr[$i] = $nprtva[$i]; } print '</select>'; } diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php index 9c57ace04aae9cde9c95051ebd00b9522524cfde..3d75564b8a031c91fedb37ab8906a6de90f84695 100644 --- a/htdocs/install/upgrade2.php +++ b/htdocs/install/upgrade2.php @@ -988,7 +988,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,'HT'); + $result=calcul_price_total($qty,$pu,$remise_percent,$txtva,$remise_percent_global,'HT',$info_bits); $total_ht = $result[0]; $total_tva = $result[1]; $total_ttc = $result[2]; @@ -1094,7 +1094,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,'HT'); + $result=calcul_price_total($qty,$pu,$remise_percent,$txtva,$remise_percent_global,'HT',$info_bits); $total_ht = $result[0]; $total_tva = $result[1]; $total_ttc = $result[2]; @@ -1199,7 +1199,7 @@ function migrate_price_contrat($db,$langs,$conf) //$contratligne->fetch($rowid); Non requis car le update_total ne met a jour que chp redefinis $contratligne->rowid=$rowid; - $result=calcul_price_total($qty,$pu,$remise_percent,$txtva,$remise_percent_global,'HT'); + $result=calcul_price_total($qty,$pu,$remise_percent,$txtva,$remise_percent_global,'HT',$info_bits); $total_ht = $result[0]; $total_tva = $result[1]; $total_ttc = $result[2]; @@ -1302,7 +1302,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,'HT'); + $result=calcul_price_total($qty,$pu,$remise_percent,$txtva,$remise_percent_global,'HT',$info_bits); $total_ht = $result[0]; $total_tva = $result[1]; $total_ttc = $result[2]; diff --git a/htdocs/lib/functions.inc.php b/htdocs/lib/functions.inc.php index 347d4d45cd73b37d2ca7c634255beb75d011276d..313bc383bac733398545aece100ad71da1ab1dbb 100644 --- a/htdocs/lib/functions.inc.php +++ b/htdocs/lib/functions.inc.php @@ -1893,6 +1893,26 @@ function get_default_tva($societe_vendeuse, $societe_acheteuse, $taux_produit) } +/** + \brief Fonction qui renvoie si tva doit etre tva percue r�cup�rable + \remarks Si vendeur non assujeti a TVA, TVA par d�faut=0. Fin de r�gle. + Si le (pays vendeur = pays acheteur) alors TVA par d�faut=TVA du produit vendu. Fin de r�gle. + Si (vendeur et acheteur dans Communaut� europ�enne) et (bien vendu = moyen de transports neuf comme auto, bateau, avion) alors TVA par d�faut=0 (La TVA doit �tre pay� par acheteur au centre d'impots de son pays et non au vendeur). Fin de r�gle. + Si (vendeur et acheteur dans Communaut� europ�enne) et (acheteur = particulier ou entreprise sans num TVA intra) alors TVA par d�faut=TVA du produit vendu. Fin de r�gle. + Si (vendeur et acheteur dans Communaut� europ�enne) et (acheteur = entreprise avec num TVA) intra alors TVA par d�faut=0. Fin de r�gle. + Sinon TVA propos�e par d�faut=0. Fin de r�gle. + \param societe_vendeuse Objet soci�t� vendeuse + \param societe_acheteuse Objet soci�t� acheteuse + \param taux_produit Taux par defaut du produit vendu + \return float 0 or 1 + */ +function get_default_npr($societe_vendeuse, $societe_acheteuse, $taux_produit) +{ + + return 0; +} + + /** \brief Renvoie oui ou non dans la langue choisie \param yesno Variable pour test si oui ou non diff --git a/htdocs/lib/price.lib.php b/htdocs/lib/price.lib.php index 4ae0c6757474a8285f9ea7a0a68d4514ee9527a4..28d7b3e1a987a5722849010c319b56be1509ce51 100644 --- a/htdocs/lib/price.lib.php +++ b/htdocs/lib/price.lib.php @@ -35,15 +35,16 @@ \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 info_bits Miscellanous informations on line \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') +function calcul_price_total($qty, $pu, $remise_percent_ligne, $txtva, $remise_percent_global=0, $price_base_type='HT', $info_bits=0) { global $conf; $result=array(); - //dolibarr_syslog("price.lib::calcul_price_total $qty, $pu, $remise_percent_ligne, $txtva, $price_base_type"); + //dolibarr_syslog("price.lib::calcul_price_total $qty, $pu, $remise_percent_ligne, $txtva, $price_base_type $info_bits"); if ($price_base_type == 'HT') { // On travaille par defaut en partant du prix HT diff --git a/htdocs/propal.class.php b/htdocs/propal.class.php index e0747c0d874d119d93ffc3bf1b1d56b8747da17b..d1dfa0190efa644784cc8805886e6806cddc5941 100644 --- a/htdocs/propal.class.php +++ b/htdocs/propal.class.php @@ -296,7 +296,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, 0, $price_base_type); + $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type, $info_bits); $total_ht = $tabprice[0]; $total_tva = $tabprice[1]; $total_ttc = $tabprice[2]; @@ -375,11 +375,11 @@ class Propal extends CommonObject * \param price_base_type HT ou TTC * \return int 0 en cas de succ�s */ - function updateline($rowid, $pu, $qty, $remise_percent=0, $txtva, $desc='', $price_base_type='HT') + function updateline($rowid, $pu, $qty, $remise_percent=0, $txtva, $desc='', $price_base_type='HT', $info_bits=0) { global $conf; - dolibarr_syslog("Propal::UpdateLine $rowid, $pu, $qty, $remise_percent, $txtva, $desc, $price_base_type"); + dolibarr_syslog("Propal::UpdateLine $rowid, $pu, $qty, $remise_percent, $txtva, $desc, $price_base_type, $info_bits"); include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php'); if ($this->statut == 0) @@ -405,7 +405,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, 0, $price_base_type); + $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type, $info_bits); $total_ht = $tabprice[0]; $total_tva = $tabprice[1]; $total_ttc = $tabprice[2];