Jump to content

Problème validation de commande - Etat de commande invalide


Recommended Posts

Bonjour à tous,

 

Suite à la remarque d'un client, (problème que je n'avais pas auparavant), qui semblerait être apparu par magie,

il semblerait que je rencontre un problème de page blanche avec marqué "État de commande invalideaprès la validation de commande.

 

Ce problème semble arriver après la validation d'une commande :

- Par virement bancaire ;

- Par chèque.

Une validation "au comptant à la livraison" ne semble pas être touché par ce problème.

 

Pour résumer :

- Ajouter panier - Ok ;

- Sélection moyen de paiement "Virement bancaire" - Ok ;

- Récapitulatif de commande - Ok ;

- Clic "Je confirme ma commande" - PB - Génération d'une page blanche en FO avec "État de commande invalide"

 

Pour information :

- Dans le BO - La commande semble bien présente avec les détails

- Le client reçois bien l'email de type "bankwire" 

- Le client n'a pas de confirmation de commande ?

 

Je reste disponible pour vous communiquer les informations de mon site par MP.

 

Merci par avance pour votre aide.

Alzerha

 

 

post-780394-0-85214400-1435508905_thumb.png

post-780394-0-04962000-1435508907_thumb.png

post-780394-0-42230000-1435513892_thumb.png

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

Bonjour,

 

Il faudrait activer l'affichage des erreurs pour savoir :

 

http://doc.prestashop.com/pages/viewpage.action?pageId=15925413

 

3pom

 

 

J'ai réaliser la manipulation, j'ai les codes qui s'affichent sur la page d'accueil :

 

 Notice: Undefined offset: 13 in /homepages/28/d556324270/htdocs/classes/Manufacturer.php on line 213

Notice: Undefined offset: 16 in /homepages/28/d556324270/htdocs/classes/Manufacturer.php on line 213

Notice: Undefined offset: 5 in /homepages/28/d556324270/htdocs/classes/Manufacturer.php on line 213

Notice: Undefined offset: 6 in /homepages/28/d556324270/htdocs/classes/Manufacturer.php on line 213

Notice: Undefined offset: 11 in /homepages/28/d556324270/htdocs/classes/Manufacturer.php on line 213

Notice: Undefined offset: 14 in /homepages/28/d556324270/htdocs/classes/Manufacturer.php on line 213

Notice: Undefined index: yoffset in /homepages/28/d556324270/htdocs/modules/trustedshops/classes/TSCommon.php on line 1378

Notice: Undefined index: jscode in /homepages/28/d556324270/htdocs/modules/trustedshops/classes/TSCommon.php on line 1379

 

Cependant sur la page validation de commande. Aucun code, simplement banche blanche avec "Etat de commande invalide" de marqué.

Link to comment
Share on other sites

Ok, vous devez avoir un override de PayementModule vous avez un fichier dans /override/classes/ qui s'appelle PaymentModule.php ?

 

Si oui vous pouvez coller son contenu.

 

Dans le dossier /override/classes/ je n'ai qu'un fichier "index.php"

Le reste sont des dossiers : cache / controller / db / exception / helper / log / module / order / pdf / range / shop / stock / tax / tree / webservice

Ces dossiers contiennent tous un fichier "index.php" à l’intérieur.

 

Dois-je coller le continue d'un fichier ou dossier ?

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

Non si il devait être à un endroit c'est dans /override/classes/

 

Avez-vous supprimé des Etats de commandes ?

 

Vous pouvez coller votre fichier /modules/bankwire/bankwire.php

 

Merci

 

De souvenir je n'ai rien supprimé dans les Etats de commandes. J'ai édité certains paramètre uniquement via le BO.

Un screen des "états" à été édité dans mon premier message de post.

 

Voici ci-dessous le code du fichier "bankwire.php" 

<?php
/*
* 2007-2015 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to [email protected] so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
*  @author PrestaShop SA <[email protected]>
*  @copyright  2007-2015 PrestaShop SA
*  @license    http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*/

if (!defined('_PS_VERSION_'))
	exit;

class BankWire extends PaymentModule
{
	private $_html = '';
	private $_postErrors = array();

	public $details;
	public $owner;
	public $address;
	public $extra_mail_vars;
	public function __construct()
	{
		$this->name = 'bankwire';
		$this->tab = 'payments_gateways';
		$this->version = '1.0.7';
		$this->author = 'PrestaShop';
		$this->controllers = array('payment', 'validation');
		$this->is_eu_compatible = 1;

		$this->currencies = true;
		$this->currencies_mode = 'checkbox';

		$config = Configuration::getMultiple(array('BANK_WIRE_DETAILS', 'BANK_WIRE_OWNER', 'BANK_WIRE_ADDRESS'));
		if (!empty($config['BANK_WIRE_OWNER']))
			$this->owner = $config['BANK_WIRE_OWNER'];
		if (!empty($config['BANK_WIRE_DETAILS']))
			$this->details = $config['BANK_WIRE_DETAILS'];
		if (!empty($config['BANK_WIRE_ADDRESS']))
			$this->address = $config['BANK_WIRE_ADDRESS'];

		$this->bootstrap = true;
		parent::__construct();

		$this->displayName = $this->l('Bank wire');
		$this->description = $this->l('Accept payments for your products via bank wire transfer.');
		$this->confirmUninstall = $this->l('Are you sure about removing these details?');
		if (!isset($this->owner) || !isset($this->details) || !isset($this->address))
			$this->warning = $this->l('Account owner and account details must be configured before using this module.');
		if (!count(Currency::checkPaymentCurrencies($this->id)))
			$this->warning = $this->l('No currency has been set for this module.');

		$this->extra_mail_vars = array(
										'{bankwire_owner}' => Configuration::get('BANK_WIRE_OWNER'),
										'{bankwire_details}' => nl2br(Configuration::get('BANK_WIRE_DETAILS')),
										'{bankwire_address}' => nl2br(Configuration::get('BANK_WIRE_ADDRESS'))
										);
	}

	public function install()
	{
		if (!parent::install() || !$this->registerHook('payment') || ! $this->registerHook('displayPaymentEU') || !$this->registerHook('paymentReturn')
		|| !$this->registerHook('advancedPaymentApi'))
			return false;
		return true;
	}

	public function uninstall()
	{
		if (!Configuration::deleteByName('BANK_WIRE_DETAILS')
				|| !Configuration::deleteByName('BANK_WIRE_OWNER')
				|| !Configuration::deleteByName('BANK_WIRE_ADDRESS')
				|| !parent::uninstall())
			return false;
		return true;
	}

	private function _postValidation()
	{
		if (Tools::isSubmit('btnSubmit'))
		{
			if (!Tools::getValue('BANK_WIRE_DETAILS'))
				$this->_postErrors[] = $this->l('Account details are required.');
			elseif (!Tools::getValue('BANK_WIRE_OWNER'))
				$this->_postErrors[] = $this->l('Account owner is required.');
		}
	}

	private function _postProcess()
	{
		if (Tools::isSubmit('btnSubmit'))
		{
			Configuration::updateValue('BANK_WIRE_DETAILS', Tools::getValue('BANK_WIRE_DETAILS'));
			Configuration::updateValue('BANK_WIRE_OWNER', Tools::getValue('BANK_WIRE_OWNER'));
			Configuration::updateValue('BANK_WIRE_ADDRESS', Tools::getValue('BANK_WIRE_ADDRESS'));
		}
		$this->_html .= $this->displayConfirmation($this->l('Settings updated'));
	}

	private function _displayBankWire()
	{
		return $this->display(__FILE__, 'infos.tpl');
	}

	public function getContent()
	{
		if (Tools::isSubmit('btnSubmit'))
		{
			$this->_postValidation();
			if (!count($this->_postErrors))
				$this->_postProcess();
			else
				foreach ($this->_postErrors as $err)
					$this->_html .= $this->displayError($err);
		}
		else
			$this->_html .= '<br />';

		$this->_html .= $this->_displayBankWire();
		$this->_html .= $this->renderForm();

		return $this->_html;
	}

	public function hookPayment($params)
	{
		if (!$this->active)
			return;
		if (!$this->checkCurrency($params['cart']))
			return;

		$this->smarty->assign(array(
			'this_path' => $this->_path,
			'this_path_bw' => $this->_path,
			'this_path_ssl' => Tools::getShopDomainSsl(true, true).__PS_BASE_URI__.'modules/'.$this->name.'/'
		));
		return $this->display(__FILE__, 'payment.tpl');
	}

	public function hookDisplayPaymentEU($params)
	{
		if (!$this->active)
			return;

		if (!$this->checkCurrency($params['cart']))
			return;

		if (isset($params['adv_pay_api']) && $params['adv_pay_api'] === true)
		{
			$payment_options = new PaymentOption();
			$payment_options->cta_text = $this->l('Pay by Bank Wire');
			$payment_options->logo = Media::getMediaPath(dirname(__FILE__).'/bankwire.jpg');
			$payment_options->action = $this->context->link->getModuleLink($this->name, 'validation', array(), true);
		}
		else
			$payment_options = array(
				'cta_text' => $this->l('Pay by Bank Wire'),
				'logo' => Media::getMediaPath(dirname(__FILE__).'/bankwire.jpg'),
				'action' => $this->context->link->getModuleLink($this->name, 'validation', array(), true)
			);

		return $payment_options;
	}

	public function hookAdvancedPaymentApi($params)
	{
		$params['adv_pay_api'] = true;
		return $this->hookDisplayPaymentEU($params);
	}

	public function hookPaymentReturn($params)
	{
		if (!$this->active)
			return;

		$state = $params['objOrder']->getCurrentState();
		if (in_array($state, array(Configuration::get('PS_OS_BANKWIRE'), Configuration::get('PS_OS_OUTOFSTOCK'), Configuration::get('PS_OS_OUTOFSTOCK_UNPAID'))))
		{
			$this->smarty->assign(array(
				'total_to_pay' => Tools::displayPrice($params['total_to_pay'], $params['currencyObj'], false),
				'bankwireDetails' => Tools::nl2br($this->details),
				'bankwireAddress' => Tools::nl2br($this->address),
				'bankwireOwner' => $this->owner,
				'status' => 'ok',
				'id_order' => $params['objOrder']->id
			));
			if (isset($params['objOrder']->reference) && !empty($params['objOrder']->reference))
				$this->smarty->assign('reference', $params['objOrder']->reference);
		}
		else
			$this->smarty->assign('status', 'failed');
		return $this->display(__FILE__, 'payment_return.tpl');
	}

	public function checkCurrency($cart)
	{
		$currency_order = new Currency($cart->id_currency);
		$currencies_module = $this->getCurrency($cart->id_currency);

		if (is_array($currencies_module))
			foreach ($currencies_module as $currency_module)
				if ($currency_order->id == $currency_module['id_currency'])
					return true;
		return false;
	}

	public function renderForm()
	{
		$fields_form = array(
			'form' => array(
				'legend' => array(
					'title' => $this->l('Contact details'),
					'icon' => 'icon-envelope'
				),
				'input' => array(
					array(
						'type' => 'text',
						'label' => $this->l('Account owner'),
						'name' => 'BANK_WIRE_OWNER',
						'required' => true
					),
					array(
						'type' => 'textarea',
						'label' => $this->l('Details'),
						'name' => 'BANK_WIRE_DETAILS',
						'desc' => $this->l('Such as bank branch, IBAN number, BIC, etc.'),
						'required' => true
					),
					array(
						'type' => 'textarea',
						'label' => $this->l('Bank address'),
						'name' => 'BANK_WIRE_ADDRESS',
						'required' => true
					),
				),
				'submit' => array(
					'title' => $this->l('Save'),
				)
			),
		);

		$helper = new HelperForm();
		$helper->show_toolbar = false;
		$helper->table = $this->table;
		$lang = new Language((int)Configuration::get('PS_LANG_DEFAULT'));
		$helper->default_form_language = $lang->id;
		$helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0;
		$this->fields_form = array();
		$helper->id = (int)Tools::getValue('id_carrier');
		$helper->identifier = $this->identifier;
		$helper->submit_action = 'btnSubmit';
		$helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name;
		$helper->token = Tools::getAdminTokenLite('AdminModules');
		$helper->tpl_vars = array(
			'fields_value' => $this->getConfigFieldsValues(),
			'languages' => $this->context->controller->getLanguages(),
			'id_language' => $this->context->language->id
		);

		return $helper->generateForm(array($fields_form));
	}

	public function getConfigFieldsValues()
	{
		return array(
			'BANK_WIRE_DETAILS' => Tools::getValue('BANK_WIRE_DETAILS', Configuration::get('BANK_WIRE_DETAILS')),
			'BANK_WIRE_OWNER' => Tools::getValue('BANK_WIRE_OWNER', Configuration::get('BANK_WIRE_OWNER')),
			'BANK_WIRE_ADDRESS' => Tools::getValue('BANK_WIRE_ADDRESS', Configuration::get('BANK_WIRE_ADDRESS')),
		);
	}
}
Edited by Alzerha (see edit history)
Link to comment
Share on other sites

Le fichier semble bon, vous pouvez faire une recherche dans ta table configuration de la base de donnée et cherchez :

 

PS_OS_BANKWIRE

PS_OS_OUTOFSTOCK

PS_OS_OUTOFSTOCK_UNPAID

 

Voir si vous avez bien les valeurs.

 

Elles arrivent avec quel status final les commandes quand vous avez une page blanche.

 

Etant un peu perdu, avez vous la démarche pour réaliser la recherche dans la table de configuration de la BDD ?

Faut-il aller sur phpMyAdmin et rechercher la table "ps_configuration" ou est-ce autre chose ?

 

Edit via phpMyAdmin :

PS_OS_BANKWIRE - Value 10

PS_OS_OUTOFSTOCK -  Value 9

PS_OS_OUTOFSTOCK_UNPAID - Value 16

 

Pour l'état, les commandes arrivent bien avec l'état "En attente de virement bancaire" par défaut dans le BO de commande.

Mon problème est surtout le message sur le FO qui apparaît je ne sais pas pourquoi...

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

La je sèche un peu ...

 

Donc on va éliminer les causes :

 

Vous allez dans le BO commande état En attente de virement et vous me dites ce qu'il y a de coché ?

 

Merci tout de même du temps consacré au problème !

 

Je ne pense pas que cela vienne des états, car il semblerait que j'ai le même problème avec le module "Paiement par Chèque".

 

Pour les cases cochées de l'état :

Envoyer un e-mail au client lorsque la commande change d'état. - Coché 

Envoi d'email type - Bankwire

Link to comment
Share on other sites

Le problème vient bien des cases cochés selon les Etats :

 

Si vous allez dans langue -> traduction -> traduire les messages d'erreurs vous recherchez État de commande invalide

 

Vous aurez un seul nom : Invalid new order status

 

Ce nom apparait seulement dans le fichier /classes/order/OrderHistory.php

 

Donc c'est bien au changement de status que le bug apparait

 

Vous êtes sur quel version de PS ? Est ce que l'article que vous achetez est en stock ? Qu'avez vous de coché pour le status En attente de réapprovisionnement

 

En effet.

 

Je suis sur la dernière version de PS : 1.6.0.14

Non, tous mes articles ne sont pas en stock, fonctionnant uniquement en "pré-commande".

 

Dans l'état "En attente de réapprovisionnement"  j'ai juste la case :  Marquer la commande associée comme payée.

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

Ok, et quelle est la version du module banwire ?

 

Virement bancaire v1.0.7 - par PrestaShop

 

J'ai le souvenir d'avoir mis à jour ce module il y a pas si longtemps je crois bien..

 

Pour information, j'ai changé la quantité des produits, pour les passer "en stock" ! Le problème semble réglé via ma commande fictive.

Il y a donc un problème uniquement lorsque de produit est de quantité 0 ou inférieur.

 

On s'approche !

Link to comment
Share on other sites

Bonjour,

 

J'ai un peu survolé votre discussion et je ne maîtrise pas bien les versions 1.6 mais y a un truc qui me semble bizarre dans les infos données :

 

 

PS_OS_OUTOFSTOCK_UNPAID - Value 16

 

Ce statut renverrait donc à l'id numéro 16, or dans le screen il n'y a que 13 statuts définis... j'imagine donc que c'est pas normal...

 

 

Ceci étant dit, perso je me souviens avoir supprimé ce changement de statut automatique pour l'attente de réappro.

C'était source de comportements parfois inattendus, donc par ma part je préférais attendre d'avoir reçu le paiement pour ensuite passer manuellement au statut "attente de réappro" (et puis ça permet aussi de pas oublier de passer ses commandes chez les fournisseurs ^_^)

 

Le code à supprimer/commenter pour pouvoir passer en manuel est détaillé ici : https://www.prestashop.com/forums/topic/237308-probleme-statue-de-commande/?do=findComment&comment=1777839

 

NB: Appliquer cette modif peut peut-être résoudre le problème dans le cas présent mais je vérifierais quand-même cette histoire de statuts qui semblent incomplets (je ne connais pas la liste des statuts par défaut d'une version 1.6.0.14)

 

A+

Zebx

Link to comment
Share on other sites

Bien vu ! Quand j'ai posé la question pour moi il était crée :)

 

 

Alzerha il y a deux status en 1.6.0.14 En attente de réapprovisionnement (non payé) && En attente de réapprovisionnement

 

Donc il faut que tu crée le status En attente de réapprovisionnement (non payé), et ensuite dans ta base de donnée tu passes l'id à 14 de PS_OS_OUTOFSTOCK_UNPAID

 

En effet, j'ai du mal comprendre. Cela m'avait un peu surpris quand j'ai marqué l'ID mais ne connaissant pas les états par défaut également il serait bizarre de pouvoir supprimer un état essentiel au bon fonctionnement de PS... :x

 

Ai-je une possibilité via le remplacement d'un fichier, de remettre les états par défaut ?

Car il semblerait qu'il y en ai au minimum 16 ! Donc autant tout rajouter et être tranquille... En espérant que cela règle le problème...

post-780394-0-36093200-1435573586_thumb.png

Link to comment
Share on other sites

Voici les états sur une installation clean 1.6.0.14

 

attachicon.gifCapture d'écran de 2015-06-29 10:00:30.png

 

Normalement vous ne pouvez pas les supprimer, il est possible que l'installation de la boutique a rencontré un problème, ou sinon un bug avec le module payplug

 

C'est une installation direct en 0.14 ou une mise à jours d'une autre version ?

 

3pom

 

Oui, je ne disais bien que je n'avais pas touché grand chose officiellement..

Je ne pense pas qu'il y ai un problème d'installation, car je n'avais pas ce problème il y a quelques mois.

Il s'agit d'une mise à jour, j'ai commencé en version 1.6, mais je ne sais plus laquelle (Shop commencé en janvier 2015 - de souvenir 1.6.0.9)

 

Je vais installer une installation à blanc en 1.6.0.9 voir ce que j'ai dans les états à l'origine..

Je joints dans ce message un screen des états d'origine qui semblent correspondre à mon installation.

 

Je pense qu'il s'agit d'un problème du module Payplug qui a remplacé l'état par défaut.

Je l'ai désinstallé/supprimé, mais cela ne corrige rien.

post-780394-0-79551200-1435573656_thumb.png

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

Problème résolu semble t-il !

 

Il s'agissait bien d'un problème j'imagine de la mise à jour en 1.6.0.14 et des nouveaux états de commande en conflits je suppose avec le module Payplug qui avait crée un état n°13.

 

N'utilisant plus Payplug, j'ai donc remis les 13 états comme par défaut sur version 1.6.0.14 (Cf screen).

J'ai du également changé dans la base de données la valeur, initialement 16 de PS_OS_OUTOFSTOCK_UNPAID à la valeur 13 afin de faire correspondre l'ID à l'état.

 

Merci à okom3pom pour ses explications et à Zebx pour son coup d’œil remarquable !

post-780394-0-56187000-1435575549_thumb.png

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

  • 2 months later...
  • 2 months later...
  • 3 years later...

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