Jump to content

Problème avec Mail Alert et la gestion des stocks avancée pour les déclinaisons


Recommended Posts

Bonjour.

Je suis sous Prestashop 1.6.1.24.

Depuis ma migration du stock en "gestion avancée des stocks", j'ai un problème avec le module "Mail Alert" concernant les déclinaisons :

Pour un produit donné avec au moins une déclinaison en rupture de stock, celui-ci m'envoie systématiquement un email de rupture de stock sur la déclinaison dès qu'il y a un changement d'état sur une commande avec ce produit, ou bien une modification de la description de la fiche produit, par exemple.

Comment peut-on régler ça pour que l'email d'alerte soit envoyé uniquement lors du passage du stock à 0 pour la déclinaison donnée ?

Link to comment
Share on other sites

Décrochez le module de ActionProductCoverage

Ce hook ne se déclenche que lorsqu'on est en stock avancés mais déconne pas mal^^

	public function hookActionProductCoverage($params)
	{
		// if not advanced stock management, nothing to do
		if (!Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT'))
			return;

		// retrieves informations
		$id_product = (int)$params['id_product'];
		$id_product_attribute = (int)$params['id_product_attribute'];
		$warehouse = $params['warehouse'];
		$product = new Product($id_product);

		if (!Validate::isLoadedObject($product))
			return;

		if (!$product->advanced_stock_management)
			return;

		// sets warehouse id to get the coverage
		if (!Validate::isLoadedObject($warehouse))
			$id_warehouse = 0;
		else
			$id_warehouse = (int)$warehouse->id;

		// coverage of the product
		$warning_coverage = (int)Configuration::getGlobalValue('MA_PRODUCT_COVERAGE');

		$coverage = StockManagerFactory::getManager()->getProductCoverage($id_product, $id_product_attribute, $warning_coverage, $id_warehouse);

		// if we need to send a notification
		if ($product->active == 1 &&
			($coverage < $warning_coverage) && !empty($this->merchant_mails) &&
			Configuration::getGlobalValue('MA_MERCHANT_COVERAGE'))
		{
			$context = Context::getContext();
			$id_lang = (int)$context->language->id;
			$id_shop = (int)$context->shop->id;
			$iso = Language::getIsoById($id_lang);
			$product_name = Product::getProductName($id_product, $id_product_attribute, $id_lang);
			$template_vars = array(
				'{current_coverage}' => $coverage,
				'{warning_coverage}' => $warning_coverage,
				'{product}' => pSQL($product_name)
			);

			if (file_exists(dirname(__FILE__).'/mails/'.$iso.'/productcoverage.txt') &&
				file_exists(dirname(__FILE__).'/mails/'.$iso.'/productcoverage.html'))
			{
				// Send 1 email by merchant mail, because Mail::Send doesn't work with an array of recipients
				$merchant_mails = explode(self::__MA_MAIL_DELIMITOR__, $this->merchant_mails);
				foreach ($merchant_mails as $merchant_mail)
				{
					Mail::Send(
						$id_lang,
						'productcoverage',
						Mail::l('Stock coverage', $id_lang),
						$template_vars,
						$merchant_mail,
						null,
						(string)Configuration::get('PS_SHOP_EMAIL'),
						(string)Configuration::get('PS_SHOP_NAME'),
						null,
						null,
						dirname(__FILE__).'/mails/',
						null,
						$id_shop
					);
				}
			}
		}
	}

 

Link to comment
Share on other sites

Merci pour votre réponse.

Je viens de dégreffer le module de ActionProductCoverage.

Malheureusement, le comportement est toujours le même. Je reçois plusieurs emails de "rupture de stock" pour toutes les déclinaisons à stock 0 pour un même produit.

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...