hello,
They are lot of error with TVA npr and Dolibarr version 3.4.0
When i see the source code, my patches sent in march has removed ... i
don't understand !
The old push request : https://github.com/Dolibarr/dolibarr/pull/805
For exemple, in htdocs/fourn/class/fournisseur.product.class.php the
function "fetch_product_fournisseur_price" is completely broken, npr is
removed !
Sorry but the next in french ...
Je ne comprends pas trop tout ces changements de code dans la version
3.4.0 au niveau de la tva NPR, c'est un bon retour en arrière ....
En pièce jointe les modifications pour la gestion de la npr avec un
patch par fichier modifié et l'explication ci-dessous :
Fichier htdocs/fourn/class/fournisseur.product.class.php
Réintégration de la propriété fourn_tva_npr à partir du champ de base de
donnée "info_bits"
Fichier htdocs/product/fournisseurs.php
Lors de l’édition d'un prix fournisseur existant, le champ tva est complété
Correction de l'appel de la fonction "update_buyprice" (le champ npr
n’était pas au bon endroit)
Ajout de l'argument npr lors de l'appel de la fonction "vatrate" (Pour
l'affichage des prix fournisseurs dans le tableau)
Fichier htdocs/product/price.php
Ajout de l'argument npr lors de l'appel de la fonction "vatrate" pour
l'affichage et ajout pour le formulaire d’édition également
Pour l'instant pas d'autre soucis à signaler. Je continue ma petite
recherche et j'envoie les patchs si il y en a.
Je me permets de parler pas mal en français, mais ce truc tordu qu'est
la tva npr, à mon avis il n'y a qu'en France que ça existe .... et mon
anglais, il faut l'avouer, est déplorable ! :)
diff --git a/htdocs/fourn/class/fournisseur.product.class.php b/htdocs/fourn/class/fournisseur.product.class.php
index 8d5a347..77b38a6 100644
--- a/htdocs/fourn/class/fournisseur.product.class.php
+++ b/htdocs/fourn/class/fournisseur.product.class.php
@@ -296,7 +296,7 @@ class ProductFournisseur extends Product
function fetch_product_fournisseur_price($rowid)
{
$sql = "SELECT pfp.rowid, pfp.price, pfp.quantity, pfp.unitprice, pfp.remise_percent, pfp.remise, pfp.tva_tx, pfp.fk_availability,";
- $sql.= " pfp.fk_soc, pfp.ref_fourn, pfp.fk_product, pfp.charges, pfp.unitcharges"; // , pfp.recuperableonly as fourn_tva_npr"; FIXME this field not exist in llx_product_fournisseur_price
+ $sql.= " pfp.fk_soc, pfp.ref_fourn, pfp.fk_product, pfp.charges, pfp.unitcharges, pfp.info_bits as fourn_tva_npr"; // FIXED recuperableonly doesn't exist, is info_bits field
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as pfp";
$sql.= " WHERE pfp.rowid = ".$rowid;
@@ -320,7 +320,7 @@ class ProductFournisseur extends Product
$this->product_id = $obj->fk_product; // deprecated
$this->fk_product = $obj->fk_product;
$this->fk_availability = $obj->fk_availability;
- //$this->fourn_tva_npr = $obj->fourn_tva_npr; // FIXME this field not exist in llx_product_fournisseur_price
+ $this->fourn_tva_npr = $obj->fourn_tva_npr; // FIXED
return 1;
}
else
diff --git a/htdocs/product/fournisseurs.php b/htdocs/product/fournisseurs.php
index 97011f4..a990f01 100644
--- a/htdocs/product/fournisseurs.php
+++ b/htdocs/product/fournisseurs.php
@@ -158,7 +158,7 @@ if ($action == 'updateprice' && GETPOST('cancel') <> $langs->trans("Cancel"))
if (isset($_POST['ref_fourn_price_id']))
$product->fetch_product_fournisseur_price($_POST['ref_fourn_price_id']);
- $ret=$product->update_buyprice($quantity, $_POST["price"], $user, $_POST["price_base_type"], $supplier, $_POST["oselDispo"], $ref_fourn, $tva_tx, $_POST["charges"], $remise_percent, $npr);
+ $ret=$product->update_buyprice($quantity, $_POST["price"], $user, $_POST["price_base_type"], $supplier, $_POST["oselDispo"], $ref_fourn, $tva_tx, $_POST["charges"], $remise_percent, 0, $npr);
if ($ret < 0)
{
$error++;
@@ -349,11 +349,15 @@ if ($id || $ref)
print '<tr><td class="fieldrequired">'.$langs->trans("VATRateForSupplierProduct").'</td>';
print '<td>';
//print $form->load_tva('tva_tx',$product->tva_tx,$supplier,$mysoc); // Do not use list here as it may be any vat rates for any country
- if (! empty($socid)) // When update
+ if (! empty($product) && ! empty($product->tva_tx)){ // update with already vat
+ $default_vat=$product->tva_tx;
+ $default_npr=($product->fourn_tva_npr==1?'*':'');
+ }else if(! empty($socid)) // When update
{
$default_vat=get_default_tva($supplier, $mysoc, $product->id);
+ $default_npr='';
}
- print '<input type="text" class="flat" size="5" name="tva_tx" value="'.(GETPOST("tva_tx")?vatrate(GETPOST("tva_tx")):($default_vat!=''?vatrate($default_vat):'')).'">';
+ print '<input type="text" class="flat" size="5" name="tva_tx" value="'.(GETPOST("tva_tx")?vatrate(GETPOST("tva_tx")):($default_vat!=''?vatrate($default_vat).$default_npr:'')).'">';
print '</td></tr>';
// Price qty min
@@ -466,7 +470,7 @@ if ($id || $ref)
// VAT rate
print '<td align="right">';
- print vatrate($productfourn->fourn_tva_tx,true);
+ print vatrate($productfourn->fourn_tva_tx,true, $productfourn->fourn_tva_npr);
print '</td>';
// Price for the quantity
diff --git a/htdocs/product/price.php b/htdocs/product/price.php
index 4b27e2f..38e817d 100644
--- a/htdocs/product/price.php
+++ b/htdocs/product/price.php
@@ -285,7 +285,7 @@ if (! empty($conf->global->PRODUIT_MULTIPRICES))
// TVA
if ($i == 1) // We show only price for level 1
{
- print '<tr><td>'.$langs->trans("VATRate").'</td><td>'.vatrate($object->multiprices_tva_tx[1],true).'</td></tr>';
+ print '<tr><td>'.$langs->trans("VATRate").'</td><td>'.vatrate($object->multiprices_tva_tx[1],true, $object->multiprices_recuperableonly[1]).'</td></tr>';
}
print '<tr><td>'.$langs->trans("SellingPrice").' '.$i.'</td>';
@@ -609,12 +609,12 @@ if ($action == 'edit_price' && ($user->rights->produit->creer || $user->rights->
if ($i == 1)
{
print '<tr><td>'.$langs->trans("VATRate").'</td><td>';
- print $form->load_tva("tva_tx_".$i,$object->multiprices_tva_tx["$i"],$mysoc,'',$object->id);
+ print $form->load_tva("tva_tx_".$i,$object->multiprices_tva_tx["$i"],$mysoc,'',$object->id,$object->multiprices_recuperableonly["$i"]);
print '</td></tr>';
}
else
{ // We always use the vat rate of price level 1 (A vat rate does not depends on customer)
- print '<input type="hidden" name="tva_tx_'.$i.'" value="'.$object->multiprices_tva_tx[1].'">';
+ print '<input type="hidden" name="tva_tx_'.$i.'" value="'.$object->multiprices_tva_tx[1].($object->multiprices_recuperableonly[1]==1?'*':'').'">';
}
// Selling price
_______________________________________________
Dolibarr-dev mailing list
Dolibarr-dev@nongnu.org
https://lists.nongnu.org/mailman/listinfo/dolibarr-dev