Jump to content

[RESOLU] TVA SUR MARGE ? COMMENT FAIRE ?


Recommended Posts

Bonjour à la communauté et merci pour votre partage constant !

 

Je bloque sur un problème... Ma version de prestashop est 1.5.41

 

Je souhaite calculer la tva sur marge au lieu de la tva sur le prix, tva sur marge qui est applicable lorsque l'on ne peut pas récupérer la tva sur le produit acheté au fournisseur (particuliers dans mon cas).

 

tva sur marge = tva% * marge / 100 = tva% * (prix de vente ht - prix d'achat ht) / 100

 

Mais il n'y pas de moyen de configurer prestashop comme ça à ma connaissance... :unsure:

 

Est-ce que quelqu'un à déjà été confronté à ce problème et a finalement trouvé une solution ?

 

 

Merci beaucoup d'avance pour votre aide et la partage de votre expérience 

Edited by fphred (see edit history)
Link to comment
Share on other sites

  • 3 weeks later...

J'ai trouvé la solution, il y a des informations dans 

 

www.prestashop.com/forums/topic/34101-tva-sur-marge-resolu-solution/?hl=%2Btva+%2Bmarge#entry1519850

 

qui concerne une ancienne version de prestashop

 

et 

 

www.prestashop.com/forums/topic/189895-créer-champ-produit-presta-15-override-classe-productphp-et-adminproductsphp/

 

...

 

En fait il y a pleins de fichiers à overrider ou à modifier...

 

Contactez-moi pour plus d'informations... je vous enverrai les fichiers... ce serait trop long à expliquer ici

Link to comment
Share on other sites

Bonjour/Bonsoir,

 

Je suis interessé par plus d'informations et/ou vos fichiers...

Je suis déjà parvenu à ajouter une case à cocher pour la taxe sur la marge, que j'ai placé juste en dessous de la règle de taxe, et le calcul en javascript pour caculer le bon prix de vente HT (en modifiant : admin/themes/default/template/controller/products/prices.tpl et js/price.js)

Mais pour garder l'information de la case coché et ajouter un champ dans la BDD comme le suggère lesdeux liens, ça a pas l'air si évident. Et ce qui parait le plus compliqué c'est de trouver où se fait ensuite le calcul pou l'inscription en base des taxes calculés sur l marge)

 

D'avance merci

Link to comment
Share on other sites

Ok, 

 

J'ai essayé de partager les fichiers mais en afit je ne sais pas comment faire. Quelqu'un le sait ? Je ne comprend pas... My Media devrait fonctionner mais aucune fenetre n'apparait quand je clique sur Search... 

 

Help !?

Link to comment
Share on other sites

bonjour,

merci de répondre si vite !

je ne connais pas trop ce forum, ce sont mes premiers messages...

mais vous pouvez m'envoyer les fichiers par emailemail : mon_pseudo_en_minuscule @ free . fr

 

je pourrai les mettre sur un serveur à moi et proposer le partage !

 

Merci !!

Link to comment
Share on other sites

J'ai enfin réussi...

Il me reste encore un détail, c'est le calcul à partir du prix de vente TTC....

 

Sinon, j'aimerais bien savoir quels sont les si nombreux fichiers à éditer....
Pour ajouter la taxe sur la marge, je n'ai pour ma part modifié que 4 fichiers (price.tpl, price.js, Product.php, AdminProductsController.php) et ajouté un champ aux tables 'product' et 'product_shop'....

Et tout à l'air de fonctionner...

Link to comment
Share on other sites

Bon, je m'en suis sorti. J'ai enfin la TVA sur la marge qui fonctionne sur mon prestashop 1.5.5.0.

 

Je vais vous donner la procédure pour avoir dans l'admin, une case à cocher dans l'onglet Prix d'un produit, et que ça calcule automatiquement la fameuse TVA sur la marge.

J'ai également ajouté le champ "TVA sur la marge" dans le listing des produits :)

La méthode que je donne édite directement les fichiers, libre à vous de les overrider.

Quand la TVA sur la marge est coché, le taux est fixe et de 20% (selon mes besoins), libre à vous encore d'adapter si vous voulez que ça prenne en compte le champ de TVA sélectionné....

Peut-être que ces modifs ne suffisent pas ? Pour l'instant, je n'ai pas encore eu de cas où ça ne fonctionne pas... Le prix est toujours bien calculé dans les cas où je suis passé....

Voilà pour le topo d'intro, place aux modifs :)

 

 

1. Dans la BDD ajouter un champ 'taxe_sur_marge' dans les tables "pss_product" et "pss_product_shop"

`taxe_sur_marge` tinyint(1) unsigned NOT NULL DEFAULT '0'

2. Dans 'js/price.js' modifier 'calcPriceTI()' et 'calcPriceTE()' ainsi :

function calcPriceTI(){
	var taxMarge = $('#taxe_sur_marge').is(':checked');
	var tax = getTax();
	var priceTE = parseFloat(document.getElementById('priceTEReal').value.replace(/,/g, '.'));
	if(taxMarge){
		tax = 20;
		var wholesale_price = parseFloat(document.getElementById('wholesale_price').value.replace(/,/g, '.'));
		margin = parseFloat(priceTE) - parseFloat(wholesale_price);
		var newPrice = parseFloat(priceTE) + (margin * tax / 100);
	}
	else{
		var newPrice = priceTE * ((tax / 100) + 1);
	}
	document.getElementById('priceTI').value = (isNaN(newPrice) == true || newPrice < 0) ? '' :
		ps_round(newPrice, 2);
	document.getElementById('finalPrice').innerHTML = (isNaN(newPrice) == true || newPrice < 0) ? '' :
		ps_round(newPrice, 2).toFixed(2);
	document.getElementById('finalPriceWithoutTax').innerHTML = (isNaN(priceTE) == true || priceTE < 0) ? '' :
		(ps_round(priceTE, 2) + getEcotaxTaxExcluded()).toFixed(2);
	calcReduction();
	$('#priceTI').val((parseFloat($('#priceTI').val()) + getEcotaxTaxIncluded()).toFixed(2));
	$('#finalPrice').html(parseFloat($('#priceTI').val()).toFixed(2));
}

function calcPriceTE(){
	var taxMarge = $('#taxe_sur_marge').is(':checked');
	ecotax_tax_excl =  $('#ecotax').val() / (1 + ecotaxTaxRate);
	var tax = getTax();
	var priceTI = parseFloat(document.getElementById('priceTI').value.replace(/,/g, '.'));
	if(taxMarge){
		var wholesale_price = parseFloat(document.getElementById('wholesale_price').value.replace(/,/g, '.'));
		var margeTTC = priceTI - wholesale_price;
		var margeHT = margeTTC * 0.833;
		var tva = margeHT * 20 / 100;
		var newPrice = ps_round(priceTI - tva,2);
	}
	else{
		var newPrice = ps_round(priceTI - getEcotaxTaxIncluded(), 2) / ((tax / 100) + 1);
	}
	document.getElementById('priceTE').value = (isNaN(newPrice) == true || newPrice < 0) ? '' :
		ps_round(newPrice.toFixed(6), 6);
	document.getElementById('priceTEReal').value = (isNaN(newPrice) == true || newPrice < 0) ? 0 : ps_round(newPrice, 9);
	document.getElementById('finalPrice').innerHTML = (isNaN(newPrice) == true || newPrice < 0) ? '' :
		ps_round(priceTI.toFixed(6), 6);
	document.getElementById('finalPriceWithoutTax').innerHTML = (isNaN(newPrice) == true || newPrice < 0) ? '' :
		ps_round(newPrice.toFixed(6), 6) + getEcotaxTaxExcluded();
	calcReduction();
}

3. Ajouter la checkbox dans 'admin/themes/default/template/controllers/products/prices.tpl' :

A jouter avant '<tr {if !$ps_use_ecotax} style="display:none;"{/if}>' :

<tr>
	<td class="col-left">
		<label>Taxe sur la marge :</label>
	</td>
	<td style="padding-bottom:10px;">
		<input onclick="calcPrice();" type="checkbox" name="taxe_sur_marge" id="taxe_sur_marge" style="padding-top: 5px;" {if $product->taxe_sur_marge}checked="checked"{/if} value="1" />
		<p class="preference_description" style="display: inline;">Cochez pour appliquer la taxe sur la marge</p>
	</td>
</tr>

4. Dans la classe ProductCore 'classes\Product.php' :

 

Dans les déclarations ajouter :

/** @var boolean taxe_sur_marge */
public $taxe_sur_marge = false;

Toujours dans les déclarations dans l'array $definition['fields'] ajouter sous le commentaire /* Shop fields */ :

'taxe_sur_marge' => array('type' => self::TYPE_BOOL, 'shop' => true, 'validate' => 'isBool'),

Dans public static function priceCalculation() éditer ainsi :

$sql = new DbQuery();
$sql->select('product_shop.`price`, product_shop.`ecotax`, product_shop.`taxe_sur_marge`, product_shop.`wholesale_price`');

//////////////////////////////////////////

$array_tmp = array(
	'price' => $row['price'], 
	'wholesale_price' => $row['wholesale_price'], 
	'taxe_sur_marge' => $row['taxe_sur_marge'],
	'ecotax' => $row['ecotax'],
	'attribute_price' => (isset($row['attribute_price']) ? $row['attribute_price'] : null)
);

//////////////////////////////////////////

if ($use_tax){
	if($result['taxe_sur_marge']){
		$pvht = $price;
		$wholesale_price = $result['wholesale_price'];
		$marge =  $pvht-$wholesale_price;
		$newPrice = $pvht + ($marge * 20 / 100);
		$price = $newPrice;
	}
	else{
		$price = $product_tax_calculator->addTaxes($price);
	}
}

5. Dans la classe AdminProductsControllerCore 'controllers/admin/AdminProductsController.php'

 

Dans le __construct() :

--> ajouter juste après "$this->_select .= 'shop.name as shopname, ';" :

$this->_select .= 'a.taxe_sur_marge as taxe_sur_marge, ';

--> ajouter juste avant "if (Configuration::get('PS_STOCK_MANAGEMENT'))" :

$this->fields_list['taxe_sur_marge'] = array(
	'title' => 'Taxe sur Marge',
	'width' => 20,
	'type' => 'bool',
	'align' => 'right',
	'havingFilter' => false,
	'orderby' => false
);

Dans protected function copyFromPost() ajouter à la fin :

$object->taxe_sur_marge = (int)Tools::getValue('taxe_sur_marge');

Dans public function initFormInformations() éditer ainsi :

// prices
array_push($product_props,
	'price', 'wholesale_price', 'id_tax_rules_group', 'unit_price_ratio', 'on_sale', 'taxe_sur_marge',
	'unity', 'minimum_quantity', 'additional_shipping_cost',
	'available_now', 'available_later', 'available_date'
);

RÉSULTAT :

taxe_sur_marge_prestashop_1.5.png

Edited by Mileskabal (see edit history)
  • Like 2
Link to comment
Share on other sites

  • 7 months later...

Bonjour,

 

J'utilise PrestaShop™ 1.6.0.8 et j'ai un problème particulier car je vends à la fois des produits neufs et d'occasions hors en France on n'utilise pas la même règle de TVA pour ces deux types de produits.

 

Il faudrait que je puisse avoir un panier et une facture qui se modifient en fonction de mes différents cas de figures : 

 

1) Produit Neuf vendu en France :
   Prix HT avec prix TTC (TVA à 20%)

 

2) Produit d’Occasion vendu en France : 
    format TVA sur marge (
(Prix de vente TTC - mon Prix d'achat HT) x 0,8333 x 20%) avec indication uniquement du prix TTC et d’une mention "TVA article 297 A du CGI »

 

3 ) Produit neuf ou occasion vendu à l’étranger : 
prix HT = prix TTC avec indication "
Exonération de TVA exportation art 262-I du CGI pour les ventes Hors Union Européenne"

 

Je dois donc pouvoir aussi rentrer un prix d’achat HT, un prix de vente TTC et cocher une case "TVA sur marge" dans le cas d’une montre d’occasion.

 

Merci d'avance pour votre aide.

Link to comment
Share on other sites

  • 2 months later...

 

Bonjour,

 

J'utilise PrestaShop™ 1.6.0.8 et j'ai un problème particulier car je vends à la fois des produits neufs et d'occasions hors en France on n'utilise pas la même règle de TVA pour ces deux types de produits.

 

Il faudrait que je puisse avoir un panier et une facture qui se modifient en fonction de mes différents cas de figures : 

 

1) Produit Neuf vendu en France :

   Prix HT avec prix TTC (TVA à 20%)

 

2) Produit d’Occasion vendu en France : 

    format TVA sur marge ((Prix de vente TTC - mon Prix d'achat HT) x 0,8333 x 20%) avec indication uniquement du prix TTC et d’une mention "TVA article 297 A du CGI »

 

3 ) Produit neuf ou occasion vendu à l’étranger : 

prix HT = prix TTC avec indication "Exonération de TVA exportation art 262-I du CGI pour les ventes Hors Union Européenne"

 

Je dois donc pouvoir aussi rentrer un prix d’achat HT, un prix de vente TTC et cocher une case "TVA sur marge" dans le cas d’une montre d’occasion.

 

Merci d'avance pour votre aide.

 

et .... tu as trouvé la solution?

 

meme problème chez moi !!

merci si tu as des infos

greg

 

Link to comment
Share on other sites

  • 1 year later...

Bonjour tout le monde,

 

Petite correction, dans public static function priceCalculation de la classe Product :

		if ($use_tax){
			if($result['tvamargin']){
				$pvht = $price;
				$wholesale_price = $result['wholesale_price'];
				$marge =  $pvht-$wholesale_price;
				$newPrice = $pvht + ($marge * 21 / 100);
				$price = $newPrice;
			}
			else{
				$price = $product_tax_calculator->addTaxes($price);
			}
		}else{
			if($result['tvamargin']){
				$pvht = $price;
				$wholesale_price = $result['wholesale_price'];
				$marge =  $pvht-$wholesale_price;
				$newPrice = $pvht + ($marge * 21 / 100);
				$price = $newPrice;
			}
		}

Car, dans le cas d'un professionnel intracommunautaire, il doit quand même payer la tva sur la marge car cette dernière n'est pas déductible.

 

Bonne journée ! 

  • Like 1
Link to comment
Share on other sites

  • 9 months later...

Hello, 

 

petit up pour signaler que même si le calcul est bon au niveau du produit en lui-même, 

la TVA  figurant sur la commande n'est pas bonne.

 

En fait il faut :

 

- rajouter le même champs dans la table ps_order_detail

 

- récupérer le champs 'taxe_sur_marge' de la table product dans la fonction getProducts(..) de la classe Cart.

 

- dans la fonction saveTaxCalculator(...) de la classe OrderDetail, il faut changer à cet endroit aussi le calcul du montant de la TVA, pour que ce soit bien inséré dans la table ps_order_detail_tax et donc bien calculé sur la facture

 

Voilà, si quelqu'un a besoin de plus de détail je pourrai expliquer en profondeur.

  • Like 1
Link to comment
Share on other sites

  • 4 months later...

 

Bonjour,

 

J'utilise PrestaShop™ 1.6.0.8 et j'ai un problème particulier car je vends à la fois des produits neufs et d'occasions hors en France on n'utilise pas la même règle de TVA pour ces deux types de produits.

 

Il faudrait que je puisse avoir un panier et une facture qui se modifient en fonction de mes différents cas de figures : 

 

1) Produit Neuf vendu en France :

   Prix HT avec prix TTC (TVA à 20%)

 

2) Produit d’Occasion vendu en France : 

    format TVA sur marge ((Prix de vente TTC - mon Prix d'achat HT) x 0,8333 x 20%) avec indication uniquement du prix TTC et d’une mention "TVA article 297 A du CGI »

 

3 ) Produit neuf ou occasion vendu à l’étranger : 

prix HT = prix TTC avec indication "Exonération de TVA exportation art 262-I du CGI pour les ventes Hors Union Européenne"

 

Je dois donc pouvoir aussi rentrer un prix d’achat HT, un prix de vente TTC et cocher une case "TVA sur marge" dans le cas d’une montre d’occasion.

 

Merci d'avance pour votre aide.

 

 Salut

 

Une solution a t elle été trouvée ? meme cas de figure pour moi !

Link to comment
Share on other sites

  • 8 months later...
On 26/10/2016 at 5:40 AM, samarhxc said:

Hello, 

 

petit up pour signaler que même si le calcul est bon au niveau du produit en lui-même, 

la TVA  figurant sur la commande n'est pas bonne.

 

En fait il faut :

 

- rajouter le même champs dans la table ps_order_detail

 

- récupérer le champs 'taxe_sur_marge' de la table product dans la fonction getProducts(..) de la classe Cart.

 

- dans la fonction saveTaxCalculator(...) de la classe OrderDetail, il faut changer à cet endroit aussi le calcul du montant de la TVA, pour que ce soit bien inséré dans la table ps_order_detail_tax et donc bien calculé sur la facture

 

Voilà, si quelqu'un a besoin de plus de détail je pourrai expliquer en profondeur.

Moi je suis intéressée par le détail, je fais la modif sur 1.6 mais j'ai adapté avec succès jusque là. Je souhaite surtout faire en sorte que la tva soit correcte sur les commades et factures maintenant.

Link to comment
Share on other sites

  • 2 weeks later...
  • 4 weeks later...
Le 28/11/2017 à 7:47 PM, samarhxc a dit :

Salut, 

je suis actuellement en train de migrer vers 1.6, je donnerai les détails quand ce sera terminé.

Salut ! Des nouvelles concernant ta migration ? Tiens-nous au courant ! Merci d'avance !

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...