diff --git a/htdocs/comm/propal.php b/htdocs/comm/propal.php index f6870cbd595..5406ba72a26 100644 --- a/htdocs/comm/propal.php +++ b/htdocs/comm/propal.php @@ -461,9 +461,7 @@ if (empty($reshook)) $array_options = $lines[$i]->array_options; } - $tva_tx=get_default_tva($mysoc, $object->thirdparty); - - $result = $object->addline($desc, $lines[$i]->subprice, $lines[$i]->qty, $tva_tx, $lines[$i]->localtax1_tx, $lines[$i]->localtax2_tx, $lines[$i]->fk_product, $lines[$i]->remise_percent, 'HT', 0, $lines[$i]->info_bits, $product_type, $lines[$i]->rang, $lines[$i]->special_code, $fk_parent_line, $lines[$i]->fk_fournprice, $lines[$i]->pa_ht, $label, $date_start, $date_end, $array_options, $lines[$i]->fk_unit); + $result = $object->addline($desc, $lines[$i]->subprice, $lines[$i]->qty, $lines[$i]->tva_tx, $lines[$i]->localtax1_tx, $lines[$i]->localtax2_tx, $lines[$i]->fk_product, $lines[$i]->remise_percent, 'HT', 0, $lines[$i]->info_bits, $product_type, $lines[$i]->rang, $lines[$i]->special_code, $fk_parent_line, $lines[$i]->fk_fournprice, $lines[$i]->pa_ht, $label, $date_start, $date_end, $array_options, $lines[$i]->fk_unit); if ($result > 0) { $lineid = $result; @@ -747,6 +745,8 @@ if (empty($reshook)) // If prices fields are update $tva_tx = get_default_tva($mysoc, $object->thirdparty, $prod->id); $tva_npr = get_default_npr($mysoc, $object->thirdparty, $prod->id); + if (empty($tva_tx)) $tva_npr=0; + $pu_ht = $prod->price; $pu_ttc = $prod->price_ttc; $price_min = $prod->price_min; @@ -867,8 +867,8 @@ if (empty($reshook)) $date_end = dol_mktime(GETPOST('date_end' . $predef . 'hour'), GETPOST('date_end' . $predef . 'min'), GETPOST('date_end' . $predef . 'sec'), GETPOST('date_end' . $predef . 'month'), GETPOST('date_end' . $predef . 'day'), GETPOST('date_end' . $predef . 'year')); // Local Taxes - $localtax1_tx = get_localtax($tva_tx, 1, $object->thirdparty); - $localtax2_tx = get_localtax($tva_tx, 2, $object->thirdparty); + $localtax1_tx = get_localtax($tva_tx, 1, $object->thirdparty, $tva_npr); + $localtax2_tx = get_localtax($tva_tx, 2, $object->thirdparty, $tva_npr); $info_bits = 0; if ($tva_npr) diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index 460b574c246..5a45d884e09 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -239,9 +239,10 @@ class Propal extends CommonObject $productdesc = $prod->description; $tva_tx = get_default_tva($mysoc,$this->client,$prod->id); - // local taxes - $localtax1_tx = get_default_localtax($mysoc,$this->client,1,$prod->tva_tx); - $localtax2_tx = get_default_localtax($mysoc,$this->client,2,$prod->tva_tx); + $tva_npr = get_default_npr($mysoc,$this->client,$prod->id); + if (empty($tva_tx)) $tva_npr=0; + $localtax1_tx = get_localtax($tva_tx,1,$mysoc,$this->client,$tva_npr); + $localtax2_tx = get_localtax($tva_tx,2,$mysoc,$this->client,$tva_npr); // multiprix if($conf->global->PRODUIT_MULTIPRICES && $this->client->price_level) @@ -262,7 +263,8 @@ class Propal extends CommonObject $line->remise_percent=$remise_percent; $line->tva_tx=$tva_tx; $line->fk_unit=$prod->fk_unit; - + if ($tva_npr) $line->info_bits = 1; + $this->lines[]=$line; } } diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index d7b2bab080a..d8ac0b6d63d 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -643,6 +643,8 @@ if (empty($reshook)) // Update if prices fields are defined $tva_tx = get_default_tva($mysoc, $object->thirdparty, $prod->id); $tva_npr = get_default_npr($mysoc, $object->thirdparty, $prod->id); + if (empty($tva_tx)) $tva_npr=0; + $pu_ht = $prod->price; $pu_ttc = $prod->price_ttc; $price_min = $prod->price_min; diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index 915e8a1e08c..9302c702ff1 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -1382,8 +1382,11 @@ class Commande extends CommonOrder $prod->fetch($idproduct); $tva_tx = get_default_tva($mysoc,$this->client,$prod->id); - $localtax1_tx=get_localtax($tva_tx,1,$this->client); - $localtax2_tx=get_localtax($tva_tx,2,$this->client); + $tva_npr = get_default_npr($mysoc,$this->client,$prod->id); + if (empty($tva_tx)) $tva_npr=0; + $localtax1_tx=get_localtax($tva_tx,1,$this->client,$mysoc,$tva_npr); + $localtax2_tx=get_localtax($tva_tx,2,$this->client,$mysoc,$tva_npr); + // multiprix if($conf->global->PRODUIT_MULTIPRICES && $this->client->price_level) $price = $prod->multiprices[$this->client->price_level]; diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php index d922ce35d96..8f6f9f204ac 100644 --- a/htdocs/compta/facture.php +++ b/htdocs/compta/facture.php @@ -1314,6 +1314,8 @@ if (empty($reshook)) // Update if prices fields are defined $tva_tx = get_default_tva($mysoc, $object->thirdparty, $prod->id); $tva_npr = get_default_npr($mysoc, $object->thirdparty, $prod->id); + if (empty($tva_tx)) $tva_npr=0; + $pu_ht = $prod->price; $pu_ttc = $prod->price_ttc; $price_min = $prod->price_min; @@ -1330,6 +1332,7 @@ if (empty($reshook)) { if (isset($prod->multiprices_tva_tx[$object->thirdparty->price_level])) $tva_tx=$prod->multiprices_tva_tx[$object->thirdparty->price_level]; if (isset($prod->multiprices_recuperableonly[$object->thirdparty->price_level])) $tva_npr=$prod->multiprices_recuperableonly[$object->thirdparty->price_level]; + if (empty($tva_tx)) $tva_npr=0; } } elseif (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) @@ -1413,6 +1416,7 @@ if (empty($reshook)) $pu_ttc = price2num(GETPOST('price_ttc'), 'MU'); $tva_npr = (preg_match('/\*/', $tva_tx) ? 1 : 0); $tva_tx = str_replace('*', '', $tva_tx); + if (empty($tva_tx)) $tva_npr=0; $label = (GETPOST('product_label') ? GETPOST('product_label') : ''); $desc = $product_desc; $type = GETPOST('type'); @@ -1424,8 +1428,8 @@ if (empty($reshook)) $buyingprice = price2num(GETPOST('buying_price' . $predef) != '' ? GETPOST('buying_price' . $predef) : ''); // If buying_price is '0', we must keep this value // Local Taxes - $localtax1_tx = get_localtax($tva_tx, 1, $object->thirdparty, $mysoc); - $localtax2_tx = get_localtax($tva_tx, 2, $object->thirdparty, $mysoc); + $localtax1_tx = get_localtax($tva_tx, 1, $object->thirdparty, $mysoc, $tva_npr); + $localtax2_tx = get_localtax($tva_tx, 2, $object->thirdparty, $mysoc, $tva_npr); $info_bits = 0; if ($tva_npr) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index c66bbb6d1c2..7c761ccb40f 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -484,8 +484,10 @@ class Facture extends CommonInvoice $res=$prod->fetch($_facrec->lines[$i]->fk_product); } $tva_tx = get_default_tva($mysoc,$soc,$prod->id); - $localtax1_tx=get_localtax($tva_tx,1,$soc); - $localtax2_tx=get_localtax($tva_tx,2,$soc); + $tva_npr = get_default_npr($mysoc,$soc,$prod->id); + if (empty($tva_tx)) $tva_npr=0; + $localtax1_tx=get_localtax($tva_tx,1,$soc,$mysoc,$tva_npr); + $localtax2_tx=get_localtax($tva_tx,2,$soc,$mysoc,$tva_npr); $result_insert = $this->addline( $_facrec->lines[$i]->desc, @@ -496,7 +498,7 @@ class Facture extends CommonInvoice $localtax2_tx, $_facrec->lines[$i]->fk_product, $_facrec->lines[$i]->remise_percent, - '','',0,0,'','HT',0, + '','',0,$tva_npr,'','HT',0, $_facrec->lines[$i]->product_type, $_facrec->lines[$i]->rang, $_facrec->lines[$i]->special_code, diff --git a/htdocs/contrat/card.php b/htdocs/contrat/card.php index 37ec345295b..babda9eff3c 100644 --- a/htdocs/contrat/card.php +++ b/htdocs/contrat/card.php @@ -458,6 +458,8 @@ if (empty($reshook)) $tva_tx = get_default_tva($mysoc,$object->thirdparty,$prod->id); $tva_npr = get_default_npr($mysoc,$object->thirdparty,$prod->id); + if (empty($tva_tx)) $tva_npr=0; + $pu_ht = $prod->price; $pu_ttc = $prod->price_ttc; $price_min = $prod->price_min; @@ -518,8 +520,8 @@ if (empty($reshook)) $fk_unit= GETPOST('units', 'alpha'); } - $localtax1_tx=get_localtax($tva_tx,1,$object->thirdparty); - $localtax2_tx=get_localtax($tva_tx,2,$object->thirdparty); + $localtax1_tx=get_localtax($tva_tx,1,$object->thirdparty,$mysoc,$tva_npr); + $localtax2_tx=get_localtax($tva_tx,2,$object->thirdparty,$mysoc,$tva_npr); // ajout prix achat $fk_fournprice = $_POST['fournprice']; diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index be1bfc0c7fc..482acbbab46 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -4083,6 +4083,7 @@ class Form { $defaulttx=get_default_tva($societe_vendeuse,$societe_acheteuse,$idprod); $defaultnpr=get_default_npr($societe_vendeuse,$societe_acheteuse,$idprod); + if (empty($defaulttx)) $defaultnpr=0; } // Si taux par defaut n'a pu etre determine, on prend dernier de la liste. diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index c9917e5852d..2b987ec1cbd 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -3317,14 +3317,15 @@ function price2num($amount,$rounding='',$alreadysqlnb=0) * Return localtax rate for a particular vat, when selling a product with vat $vatrate, from a $thirdparty_buyer to a $thirdparty_seller * Note: This function applies same rules than get_default_tva * - * @param float $vatrate Vat rate. Can be '8.5' or '8.5 (8.5NPR)' for example + * @param float $vatrate Vat rate. Can be '8.5' or '8.5 (VATCODEX)' for example * @param int $local Local tax to search and return (1 or 2 return only tax rate 1 or tax rate 2) * @param Societe $thirdparty_buyer Object of buying third party * @param Societe $thirdparty_seller Object of selling third party + * @param int $vatnpr If vat rate is NPR or not * @return mixed 0 if not found, localtax rate if found * @see get_default_tva */ -function get_localtax($vatrate, $local, $thirdparty_buyer="", $thirdparty_seller="") +function get_localtax($vatrate, $local, $thirdparty_buyer="", $thirdparty_seller="", $vatnpr=0) { global $db, $conf, $mysoc; @@ -3433,7 +3434,8 @@ function get_localtax($vatrate, $local, $thirdparty_buyer="", $thirdparty_seller $sql .= " FROM ".MAIN_DB_PREFIX."c_tva as t, ".MAIN_DB_PREFIX."c_country as c"; $sql .= " WHERE t.fk_pays = c.rowid AND c.code = '".$thirdparty_seller->country_code."'"; $sql .= " AND t.taux = ".((float) $vatratecleaned)." AND t.active = 1"; - if ($vatratecode) $sql.= " AND t.code ='".$vatratecode."'"; + if ($vatratecode) $sql.= " AND t.code ='".$vatratecode."'"; // If we have the code, we use it in priority + else $sql.= " AND t.recuperableonly ='".$npr."'"; dol_syslog("get_localtax", LOG_DEBUG); $resql=$db->query($sql); diff --git a/htdocs/fourn/class/fournisseur.product.class.php b/htdocs/fourn/class/fournisseur.product.class.php index 4865eac6951..e13528c0382 100644 --- a/htdocs/fourn/class/fournisseur.product.class.php +++ b/htdocs/fourn/class/fournisseur.product.class.php @@ -190,7 +190,6 @@ class ProductFournisseur extends Product if ($delivery_time_days != '' && ! is_numeric($delivery_time_days)) $delivery_time_days = ''; if ($price_base_type == 'TTC') { - //$ttx = get_default_tva($fourn,$mysoc,$this->id); // We must use the VAT rate defined by user and not calculate it $ttx = $tva_tx; $buyprice = $buyprice/(1+($ttx/100)); } diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index 50df02b1bff..a0cf8bc11bb 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -340,12 +340,13 @@ if (empty($reshook)) $desc = $productsupplier->description; if (trim($product_desc) != trim($desc)) $desc = dol_concatdesc($desc, $product_desc); - $tva_tx = get_default_tva($object->thirdparty, $mysoc, $productsupplier->id, GETPOST('idprodfournprice')); $type = $productsupplier->type; - - // Local Taxes - $localtax1_tx= get_localtax($tva_tx, 1,$mysoc,$object->thirdparty); - $localtax2_tx= get_localtax($tva_tx, 2,$mysoc,$object->thirdparty); + + $tva_tx = get_default_tva($object->thirdparty, $mysoc, $productsupplier->id, GETPOST('idprodfournprice')); + $tva_npr = get_default_npr($object->thirdparty, $mysoc, $productsupplier->id, GETPOST('idprodfournprice')); + if (empty($tva_tx)) $tva_npr=0; + $localtax1_tx= get_localtax($tva_tx, 1, $mysoc, $object->thirdparty, $tva_npr); + $localtax2_tx= get_localtax($tva_tx, 2, $mysoc, $object->thirdparty, $tva_npr); $result=$object->addline( $desc, @@ -361,7 +362,7 @@ if (empty($reshook)) 'HT', $pu_ttc, $type, - '', + $tva_npr, '', $date_start, $date_end, diff --git a/htdocs/fourn/facture/card.php b/htdocs/fourn/facture/card.php index 4b07e7aa639..e7b766e1777 100644 --- a/htdocs/fourn/facture/card.php +++ b/htdocs/fourn/facture/card.php @@ -706,17 +706,17 @@ if (empty($reshook)) $desc = $productsupplier->description; if (trim($product_desc) != trim($desc)) $desc = dol_concatdesc($desc, $product_desc); - $tvatx=get_default_tva($object->thirdparty, $mysoc, $productsupplier->id, $_POST['idprodfournprice']); - $npr = get_default_npr($object->thirdparty, $mysoc, $productsupplier->id, $_POST['idprodfournprice']); - - $localtax1_tx= get_localtax($tvatx, 1, $mysoc,$object->thirdparty); - $localtax2_tx= get_localtax($tvatx, 2, $mysoc,$object->thirdparty); + $tva_tx=get_default_tva($object->thirdparty, $mysoc, $productsupplier->id, $_POST['idprodfournprice']); + $tva_npr = get_default_npr($object->thirdparty, $mysoc, $productsupplier->id, $_POST['idprodfournprice']); + if (empty($tva_tx)) $tva_npr=0; + $localtax1_tx= get_localtax($tva_tx, 1, $mysoc, $object->thirdparty, $tva_npr); + $localtax2_tx= get_localtax($tva_tx, 2, $mysoc, $object->thirdparty, $tva_npr); $type = $productsupplier->type; $price_base_type = 'HT'; // TODO Save the product supplier ref into database into field ref_supplier (must rename field ref into ref_supplier first) - $result=$object->addline($desc, $productsupplier->fourn_pu, $tvatx, $localtax1_tx, $localtax2_tx, $qty, $idprod, $remise_percent, $date_start, $date_end, 0, $npr, $price_base_type, $type, -1, 0, $array_options, $productsupplier->fk_unit); + $result=$object->addline($desc, $productsupplier->fourn_pu, $tva_tx, $localtax1_tx, $localtax2_tx, $qty, $idprod, $remise_percent, $date_start, $date_end, 0, $tva_npr, $price_base_type, $type, -1, 0, $array_options, $productsupplier->fk_unit); } if ($idprod == -2 || $idprod == 0) { @@ -763,7 +763,7 @@ if (empty($reshook)) $price_base_type = 'HT'; } - $result=$object->addline($product_desc, $ht, $tva_tx, $localtax1_tx, $localtax2_tx, $qty, 0, $remise_percent, $date_start, $date_end, 0, $npr, $price_base_type, $type, -1, 0, $array_options, $fk_unit); + $result=$object->addline($product_desc, $ht, $tva_tx, $localtax1_tx, $localtax2_tx, $qty, 0, $remise_percent, $date_start, $date_end, 0, $tva_npr, $price_base_type, $type, -1, 0, $array_options, $fk_unit); } //print "xx".$tva_tx; exit; diff --git a/htdocs/product/card.php b/htdocs/product/card.php index c66984028cb..c269e560a4c 100644 --- a/htdocs/product/card.php +++ b/htdocs/product/card.php @@ -568,8 +568,10 @@ if (empty($reshook)) $desc = $object->description; $tva_tx = get_default_tva($mysoc, $soc, $object->id); - $localtax1_tx = get_localtax($tva_tx, 1, $soc); - $localtax2_tx = get_localtax($tva_tx, 2, $soc); + $tva_npr = get_default_npr($mysoc, $soc, $object->id); + if (empty($tva_tx)) $tva_npr=0; + $localtax1_tx = get_localtax($tva_tx, 1, $soc, $mysoc, $tva_npr); + $localtax2_tx = get_localtax($tva_tx, 2, $soc, $mysoc, $tva_npr); $pu_ht = $object->price; $pu_ttc = $object->price_ttc; diff --git a/htdocs/product/fournisseurs.php b/htdocs/product/fournisseurs.php index 0fe2769803d..2665ae8fd1e 100644 --- a/htdocs/product/fournisseurs.php +++ b/htdocs/product/fournisseurs.php @@ -423,7 +423,9 @@ if ($id > 0 || $ref) $mysoc2->name='Fictive seller with same country'; $mysoc2->tva_assuj=1; $default_vat=get_default_tva($mysoc2, $mysoc, $object->id, 0); - + $default_npr=get_default_npr($mysoc2, $mysoc, $object->id, 0); + if (empty($default_vat)) $default_npr=$default_vat; + print ''.$langs->trans("VATRateForSupplierProduct").''; print ''; //print $form->load_tva('tva_tx',$object->tva_tx,$supplier,$mysoc); // Do not use list here as it may be any vat rates for any country @@ -432,6 +434,7 @@ if ($id > 0 || $ref) $tmpproductsupplier=new ProductFournisseur($db); $tmpproductsupplier->fetch_product_fournisseur_price($rowid, 1); $default_vat=$tmpproductsupplier->fourn_tva_tx; + $default_npr=$tmpproductsupplier->fourn_tva_npr; } else { diff --git a/htdocs/supplier_proposal/card.php b/htdocs/supplier_proposal/card.php index 2a64fa5d4c5..cf5e75f0669 100644 --- a/htdocs/supplier_proposal/card.php +++ b/htdocs/supplier_proposal/card.php @@ -344,9 +344,7 @@ if (empty($reshook)) $array_option = $lines[$i]->array_options; } - $tva_tx=get_default_tva($mysoc, $object->thirdparty); - - $result = $object->addline($desc, $lines[$i]->subprice, $lines[$i]->qty, $tva_tx, $lines[$i]->localtax1_tx, $lines[$i]->localtax2_tx, $lines[$i]->fk_product, $lines[$i]->remise_percent, 'HT', 0, $lines[$i]->info_bits, $product_type, $lines[$i]->rang, $lines[$i]->special_code, $fk_parent_line, $lines[$i]->fk_fournprice, $lines[$i]->pa_ht, $label, $array_option); + $result = $object->addline($desc, $lines[$i]->subprice, $lines[$i]->qty, $lines[$i]->tva_tx, $lines[$i]->localtax1_tx, $lines[$i]->localtax2_tx, $lines[$i]->fk_product, $lines[$i]->remise_percent, 'HT', 0, $lines[$i]->info_bits, $product_type, $lines[$i]->rang, $lines[$i]->special_code, $fk_parent_line, $lines[$i]->fk_fournprice, $lines[$i]->pa_ht, $label, $array_option); if ($result > 0) { $lineid = $result; @@ -561,7 +559,8 @@ if (empty($reshook)) // If prices fields are update $tva_tx = get_default_tva($mysoc, $object->thirdparty, $prod->id); $tva_npr = get_default_npr($mysoc, $object->thirdparty, $prod->id); - + if (empty($tva_tx)) $tva_npr=0; + //On garde le prix indiqué dans l'input pour la demande de prix fournisseur //$pu_ht = $prod->price; $pu_ht = price2num($price_ht, 'MU'); diff --git a/htdocs/supplier_proposal/class/supplier_proposal.class.php b/htdocs/supplier_proposal/class/supplier_proposal.class.php index 54a578a1e61..2350d8d5be1 100644 --- a/htdocs/supplier_proposal/class/supplier_proposal.class.php +++ b/htdocs/supplier_proposal/class/supplier_proposal.class.php @@ -191,9 +191,10 @@ class SupplierProposal extends CommonObject $productdesc = $prod->description; $tva_tx = get_default_tva($mysoc,$this->client,$prod->id); - // local taxes - $localtax1_tx = get_default_localtax($mysoc,$this->client,1,$prod->tva_tx); - $localtax2_tx = get_default_localtax($mysoc,$this->client,2,$prod->tva_tx); + $tva_npr = get_default_npr($mysoc,$this->client,$prod->id); + if (empty($tva_tx)) $tva_npr=0; + $localtax1_tx = get_localtax($tva_tx,1,$mysoc,$this->client,$tva_npr); + $localtax2_tx = get_localtax($tva_tx,2,$mysoc,$this->client,$tva_npr); // multiprix if($conf->global->PRODUIT_MULTIPRICES && $this->client->price_level)