[Résolut] EcoTaxe

  • Posts: 17
  • Thank you received: 1
7 years 2 months ago #278873

Bonjour,

J'aimerez s'avoir si il y a une solution pour mettre une taxe fixe ( pas un % )

J'ai installer le plugin global cart fee qui fonctionne plus ou moins bien.
J'ai modifier le plugin pour qu'iil prenne le nombre de article (identique), Sauf que quand j'ajoute plusieurs articles différents, l'ecotaxe ne fonctionne qu'avec le premier.

Merci pour votre aide,

Cordialement

Last edit: 6 years 11 months ago by tcpinnovation.

Please Log in or Create an account to join the conversation.

  • Posts: 82868
  • Thank you received: 13377
  • MODERATOR
7 years 2 months ago #278876

Bonjour,

En effet, global cart fee est un bon départ pour supporter cela.
Il n'y a pas de raison qu'il ne fonctionne pas avec plusieurs produits dans le panier. Donc cela doit être un soucis avec la façon dont vous avez fait vos modifications.
Il nous faudrait une copie du code du plugin modifié pour pouvoir en dire plus.

Please Log in or Create an account to join the conversation.

  • Posts: 17
  • Thank you received: 1
7 years 2 months ago #278911

Bonjour,
Merci pour t'a réponse,

J'ai modifier la ligne expliquer dans ce poste :
www.hikashop.com/forum/5-support-en-fran...iquer-l-ecotaxe.html

$sum += $p->$value;
en:
$sum += $p->$value*$p->cart_product_quantity;
dans le fichier principal du plugin.

Voici le code du plugin actuellement:
<?php
/**
 *
 */
class plgHikashopGlobal_cart_fee extends hikashopPlugin {
	var $multiple = true;
	var $name = 'global_cart_fee';

	var $pluginConfig = array(
		'name' => array('HIKA_NAME', 'input'),
		'price' => array('PRICE', 'input'),		//if value has a custom field name, you can enter here either + or - to indicate whether the calculated sum should be shown for information purpose only or add itself to the total
		'value' => array('VALUE', 'input'),		//can be the name of a custom field and in that case the system will sum the values of that field
	);


	function onAfterCartProductsLoad(&$cart) {
		$plugins = array();
		$this->listPlugins($this->name, $plugins, false, true);

		if(!count($plugins)){
			return;
		}

		foreach($plugins as $plugin){
			$this->pluginParams($plugin);

			if(isset($cart->additional['global_cart_fee_'.$plugin]))
				continue;

			$additional = new stdClass();
			if(!empty($this->plugin_params->name)){
				$key = strtoupper($this->plugin_params->name);
				if(JText::_($key)!=$key){
					$this->plugin_params->name = JText::_($key);
				}
			}
			$additional->name = $this->plugin_params->name;
			$value = $this->plugin_params->value;

			$firstProduct = reset($cart->products);
			if(isset($firstProduct->$value)){
				$sum = 0;
				foreach($cart->products as $p){
					$sum += $p->$value*$p->cart_product_quantity;
				}
				if($this->plugin_params->price != '+'){
					$currencyHelper = hikashop_get('class.currency');
					$additional->value = $currencyHelper->format($sum,hikashop_getCurrency());
				}else{
					$additional->price_currency_id = hikashop_getCurrency();
					$additional->price_value = $sum;
					$additional->price_value_with_tax = $sum;
				}

			}else{
				$additional->value = $value;
				if(!empty($this->plugin_params->price)){
					$additional->price_currency_id = hikashop_getCurrency();
					$additional->price_value = $this->plugin_params->price;
					$additional->price_value_with_tax = $this->plugin_params->price;
				}else{
					$additional->price_currency_id = 0;
					$additional->price_value = 0;
					$additional->price_value_with_tax = 0;
				}
			}

			$cart->additional['global_cart_fee_'.$plugin] = $additional;
		}
	}
}

Le plugin fonctionne bien, mais il ne prend un compte que le premier article, si mon premier article à 6 en quantité la taxe va augmenter, mais le second, et suivant, ne sont pas prit en compte.


Merci

Please Log in or Create an account to join the conversation.

  • Posts: 82868
  • Thank you received: 13377
  • MODERATOR
7 years 2 months ago #278958

Bonjour,

A cause du code:
$firstProduct = reset($cart->products);
if(isset($firstProduct->$value)){
le plugin ne va utiliser la valeur du champs personnalisé uniquement si le premier produit du panier a ce champs rempli.
Sinon, à part ça, je ne vois pas.

Please Log in or Create an account to join the conversation.

  • Posts: 17
  • Thank you received: 1
7 years 2 months ago #279038

Bonjour,

Merci pour ta réponse, en effet, le bug arrive seulement à ce moment la.

Dans mon cas, tout les produits le champs avec une valeur, j'ai donc supprimé le isset.

EDIT :
Bon, je viens de supprimer la condition. Du coup tout fonctionne bien. Même si mon premier article n'a pas d'ecotaxe le plugin prendra quand même en compte les autres.

Par contre cette modification ne permet plus d'utiliser le plugin pour mettre un valeur fixe (dans la configuration)

Pour le moment j'ai pas réussir à produire d'erreur. Faut voir si les champs vide seront bien gérer.

Je partage le code et le plugin dans son état, cela pourra être utilise à une personne.

<?php
/**
 *
 */
class plgHikashopGlobal_cart_fee extends hikashopPlugin {
	var $multiple = true;
	var $name = 'global_cart_fee';

	var $pluginConfig = array(
		'name' => array('HIKA_NAME', 'input'),
		'price' => array('PRICE', 'input'),		//if value has a custom field name, you can enter here either + or - to indicate whether the calculated sum should be shown for information purpose only or add itself to the total
		'value' => array('VALUE', 'input'),		//can be the name of a custom field and in that case the system will sum the values of that field
	);


	function onAfterCartProductsLoad(&$cart) {
		$plugins = array();
		$this->listPlugins($this->name, $plugins, false, true);

		if(!count($plugins)){
			return;
		}

		foreach($plugins as $plugin){
			$this->pluginParams($plugin);

			if(isset($cart->additional['global_cart_fee_'.$plugin]))
				continue;

			$additional = new stdClass();
			if(!empty($this->plugin_params->name)){
				$key = strtoupper($this->plugin_params->name);
				if(JText::_($key)!=$key){
					$this->plugin_params->name = JText::_($key);
				}
			}
			$additional->name = $this->plugin_params->name;
			$value = $this->plugin_params->value;

			$sum = 0;
			foreach($cart->products as $p){
				$sum += $p->$value;
			}
			if($this->plugin_params->price != '+'){
				$currencyHelper = hikashop_get('class.currency');
				$additional->value = $currencyHelper->format($sum,hikashop_getCurrency());
			}else{
				$additional->price_currency_id = hikashop_getCurrency();
				$additional->price_value = $sum;
				$additional->price_value_with_tax = $sum;
			}

			$cart->additional['global_cart_fee_'.$plugin] = $additional;
		}
	}
}


Merci pour ton aide.

Last edit: 7 years 2 months ago by tcpinnovation.
The following user(s) said Thank You: nicolas

Please Log in or Create an account to join the conversation.

Time to create page: 0.040 seconds
Powered by Kunena Forum