Jump to content
Le Sultan

Paramétrer dans le BO le module chèque

Recommended Posts

Bonjour je ny comprends pas grand chose en programmation mais en piochant j'ai peut être arrivé à quelque chose. Sutout si le code n'est pas propre faite moi signe.Merci

 

 

Dans le module chèque j'ai crée deux inputs.

        -somme mini pour faire un chèque

        -somme maxi pour faire un chèque.

Tout fonctionne dans la logique des choses pour une commande qui suit son chemin normalement jusqu'à la validation par le paiement.

Mais il y à un bug: quand est sur sur la page 

CHOISISSEZ VOTRE MÉTHODE DE PAIEMENT

et qu'il choisisse soit :

-DE retourner sur récapitulatif et de supprimer des produits cela fonctionnera très bien

-Par contre si il choisit de supprimer le panier,cela ne fonctionne pas car la méthode de paiement par chèque restera visible quelque soit le montant.pourquoi?, 

Je suis sur 1.6

 

if (!defined('_PS_VERSION_'))
exit;
 
class Cheque extends PaymentModule
{
private $_html = '';
private $_postErrors = array();
 
public $chequeName;
public $address;
public $extra_mail_vars;
public $sommeMini;
public $sommeMaxi;
 
public function __construct()
{
$this->name = 'cheque';
$this->tab = 'payments_gateways';
$this->version = '2.5.4';
$this->author = 'PrestaShop';
$this->controllers = array('payment', 'validation');
 
$this->currencies = true;
$this->currencies_mode = 'checkbox';
 
$config = Configuration::getMultiple(array('CHEQUE_NAME', 'CHEQUE_ADDRESS','somme_Mini','somme_Maxi'));
if (isset($config['CHEQUE_NAME']))
$this->chequeName = $config['CHEQUE_NAME'];
if (isset($config['CHEQUE_ADDRESS']))
$this->address = $config['CHEQUE_ADDRESS'];
if (isset($config['somme_Mini']))
$this->sommeMini = $config['somme_Mini'];
if (isset($config['somme_Maxi']))
$this->sommeMaxi = $config['somme_Maxi'];
 
$this->bootstrap = true;
parent::__construct();
 
$this->displayName = $this->l('Payments by check');
$this->description = $this->l('This module allows you to accept payments by check.');
$this->confirmUninstall = $this->l('Are you sure you want to delete these details?');
 
if ((!isset($this->chequeName) || !isset($this->address) || empty($this->chequeName) || empty($this->address) || empty($this->sommeMini) || empty($this->sommeMaxi)))
$this->warning = $this->l('The "Pay to the order of" and "Address" fields 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(
'{cheque_name}' => Configuration::get('CHEQUE_NAME'),
'{cheque_address}' => Configuration::get('CHEQUE_ADDRESS'),
'{cheque_address_html}' => str_replace("\n", '<br />', Configuration::get('CHEQUE_ADDRESS'))
);
}
 
public function install()
{
if (!parent::install() || !$this->registerHook('payment') || !$this->registerHook('paymentReturn'))
return false;
return true;
}
 
public function uninstall()
{
if (!Configuration::deleteByName('CHEQUE_NAME') || !Configuration::deleteByName('CHEQUE_ADDRESS') || !Configuration::deleteByName('somme_Mini') || !Configuration::deleteByName('somme_Maxi') || !parent::uninstall())
return false;
return true;
}
 
private function _postValidation()
{
if (Tools::isSubmit('btnSubmit'))
{
if (!Tools::getValue('CHEQUE_NAME'))
$this->_postErrors[] = $this->l('The "Pay to the order of" field is required.');
elseif (!Tools::getValue('CHEQUE_ADDRESS'))
$this->_postErrors[] = $this->l('The "Address" field is required.');
}
}
 
private function _postProcess()
{
if (Tools::isSubmit('btnSubmit'))
{
Configuration::updateValue('CHEQUE_NAME', Tools::getValue('CHEQUE_NAME'));
Configuration::updateValue('CHEQUE_ADDRESS', Tools::getValue('CHEQUE_ADDRESS'));
Configuration::updateValue('somme_Mini', Tools::getValue('somme_Mini'));
Configuration::updateValue('somme_Maxi', Tools::getValue('somme_Maxi'));
}
$this->_html .= $this->displayConfirmation($this->l('Settings updated'));
}
 
private function _displayCheque()
{
return $this->display(__FILE__, 'infos.tpl');
}
 
public function getContent()
{
$this->_html = '';
 
if (Tools::isSubmit('btnSubmit'))
{
$this->_postValidation();
if (!count($this->_postErrors))
$this->_postProcess();
else
foreach ($this->_postErrors as $err)
$this->_html .= $this->displayError($err);
}
 
$this->_html .= $this->_displayCheque();
$this->_html .= $this->renderForm();
 
return $this->_html;
}
 
public function hookPayment($params)
{
if (!$this->active)
return;
if (!$this->checkCurrency($params['cart']))
return;
if (($params['cart']->getOrderTotal(true,3))<=$this->sommeMini)
        return;
        if (($params['cart']->getOrderTotal())>=$this->sommeMaxi)
        return;
        {
$this->smarty->assign(array(
'this_path' => $this->_path,
'this_path_cheque' => $this->_path,
'this_path_ssl' => Tools::getShopDomainSsl(true, true).__PS_BASE_URI__.'modules/'.$this->name.'/'
));
return $this->display(__FILE__, 'payment.tpl');
   }
}
 
public function hookPaymentReturn($params)
{
if (!$this->active)
return;
 
$state = $params['objOrder']->getCurrentState();
if (in_array($state, array(Configuration::get('PS_OS_CHEQUE'), 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),
'chequeName' => $this->chequeName,
'chequeAddress' => Tools::nl2br($this->address),
'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((int)($cart->id_currency));
$currencies_module = $this->getCurrency((int)$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('Pay to the order of (name)'),
'name' => 'CHEQUE_NAME',
'required' => true
),
array(
'type' => 'textarea',
'label' => $this->l('Address'),
'desc' => $this->l('Address where the check should be sent to.'),
'name' => 'CHEQUE_ADDRESS',
'required' => true
),
array(
'type' => 'text',
'label' => $this->l('Valeur minimale pour faire un chèque'),
'desc' => $this->l('Valeur minimum d\'achat pour acceptation de paiement par chèque'),
'name' => 'somme_Mini',
'required' => true
 
),
array(
'type' => 'text',
'label' => $this->l('Valeur maximale pour faire un chèque'),
'desc' => $this->l('Valeur maximum d\'achat pour acceptation de paiement par chèque'),
'name' => 'somme_Maxi',
'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(
'CHEQUE_NAME' => Tools::getValue('CHEQUE_NAME', Configuration::get('CHEQUE_NAME')),
'CHEQUE_ADDRESS' => Tools::getValue('CHEQUE_ADDRESS', Configuration::get('CHEQUE_ADDRESS')),
'somme_Mini' => Tools::getValue('somme_Mini', Configuration::get('somme_Mini')),
'somme_Maxi' => Tools::getValue('somme_Maxi', Configuration::get('somme_Maxi')),
);
}
}
 

 

 

Share this post


Link to post
Share on other sites

Salut,

 

Difficile à lire le code comme ça ;) Utilise la balise code de l'éditeur.

 

A+

Edited by DevNet (see edit history)

Share this post


Link to post
Share on other sites

Salut,

 

Difficile à lire le code comme ça ;) Utilise la balise code de l'éditeur.

 

A+

Merci je suis tout nouveau en programmation.Comment faire?

Share this post


Link to post
Share on other sites

Salut,

 

Dès que tu souhaites mettre en avant du code source dans ton message, utilise la méthode 'insérer un extrait de code' depuis l'éditeur, symbole bleu : <>

 

A+

Share this post


Link to post
Share on other sites

Salut,

 

Dès que tu souhaites mettre en avant du code source dans ton message, utilise la méthode 'insérer un extrait de code' depuis l'éditeur, symbole bleu : <>

 

A+

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

	public $cheque1Name;
	public $address;
	public $extra_mail_vars;
	public $sommeMini;
	public $sommeMaxi;
    
	public function __construct()
	{
		$this->name = 'cheque1';
		$this->tab = 'payments_gateways';
		$this->version = '2.5.4';
		$this->author = 'PrestaShop';
		$this->controllers = array('payment', 'validation');

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

		$config = Configuration::getMultiple(array('CHEQUE1_NAME', 'CHEQUE1_ADDRESS','somme_Mini','somme_Maxi'));
		if (isset($config['CHEQUE1_NAME']))
			$this->cheque1Name = $config['CHEQUE1_NAME'];
		if (isset($config['CHEQUE1_ADDRESS']))
			$this->cheque1address = $config['CHEQUE1_ADDRESS'];
		if (isset($config['somme_Mini']))
			$this->sommeMini = $config['somme_Mini'];
		if (isset($config['somme_Maxi']))
			$this->sommeMaxi = $config['somme_Maxi'];

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

		$this->displayName = $this->l('Payments by check');
		$this->description = $this->l('This module allows you to accept payments by check.');
		$this->confirmUninstall = $this->l('Are you sure you want to delete these details?');

		if ((!isset($this->cheque1Name) || !isset($this->cheque1address) || empty($this->cheque1Name) || empty($this->cheque1address) || empty($this->sommeMini) || empty($this->sommeMaxi)))
			$this->warning = $this->l('The "Pay to the order of" and "Address" fields 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(
											'{cheque1_name}' => Configuration::get('CHEQUE1_NAME'),
											'{cheque1_address}' => Configuration::get('CHEQUE1_ADDRESS'),
											'{cheque1_address_html}' => str_replace("\n", '<br />', Configuration::get('CHEQUE1_ADDRESS'))
											);
	}

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

	public function uninstall()
	{
		if (!Configuration::deleteByName('CHEQUE1_NAME') || !Configuration::deleteByName('CHEQUE1_ADDRESS') || !Configuration::deleteByName('somme_Mini') || !Configuration::deleteByName('somme_Maxi') || !parent::uninstall())
			return false;
		return true;
	}

	private function _postValidation()
	{
		if (Tools::isSubmit('btnSubmit'))
		{
			if (!Tools::getValue('CHEQUE1_NAME'))
				$this->_postErrors[] = $this->l('The "Pay to the order of" field is required.');
			elseif (!Tools::getValue('CHEQUE1_ADDRESS'))
				$this->_postErrors[] = $this->l('The "Address" field is required.');
		}
	}
	private function _postProcess()
	{
		if (Tools::isSubmit('btnSubmit'))
		{
			Configuration::updateValue('CHEQUE1_NAME', Tools::getValue('CHEQUE1_NAME'));
			Configuration::updateValue('CHEQUE1_ADDRESS', Tools::getValue('CHEQUE1_ADDRESS'));
			Configuration::updateValue('somme_Mini', Tools::getValue('somme_Mini'));
			Configuration::updateValue('somme_Maxi', Tools::getValue('somme_Maxi'));
		}
		$this->_html .= $this->displayConfirmation($this->l('Settings updated'));
	}

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

	public function getContent()
	{
		$this->_html = '';

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

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

		return $this->_html;
	}

	public function hookPayment($params)
	{
		if (!$this->active)
			return;
		if (!$this->checkCurrency($params['cart']))
			return;
		if (($params['cart']->getOrderTotal(true,3))<=$this->sommeMini)
        	return;
        if (($params['cart']->getOrderTotal())>=$this->sommeMaxi)
        	return;
        {
		$this->smarty->assign(array(
			'this_path' => $this->_path,
			'this_path_cheque1' => $this->_path,
			'this_path_ssl' => Tools::getShopDomainSsl(true, true).__PS_BASE_URI__.'modules/'.$this->name.'/'
		));
		 
		return $this->display(__FILE__, 'payment.tpl');
	    }
	}

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

		$state = $params['objOrder']->getCurrentState();
		if (in_array($state, array(Configuration::get('PS_OS_CHEQUE1'), 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),
				'cheque1Name' => $this->cheque1Name,
				'cheque1Address' => Tools::nl2br($this->cheque1address),
				'status' => 'ok',
				'id_order' => $params['objOrder']->id,
				'date_format' => $this->context->language->date_format_lite
			));
			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((int)($cart->id_currency));
		$currencies_module = $this->getCurrency((int)$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('Pay to the order of (name)'),
						'name' => 'CHEQUE1_NAME',
						'required' => true
					),
					array(
						'type' => 'textarea',
						'label' => $this->l('Address'),
						'desc' => $this->l('Address where the check should be sent to.'),
						'name' => 'CHEQUE1_ADDRESS',
						'required' => true
					),
					array(
						'type' => 'text',
						'label' => $this->l('Valeur minimale pour faire un chèque'),
						'desc' => $this->l('Valeur minimum d\'achat pour acceptation de paiement par chèque'),
						'name' => 'somme_Mini',
						'required' => true

					),
					array(
						'type' => 'text',
						'label' => $this->l('Valeur maximale pour faire un chèque'),
						'desc' => $this->l('Valeur maximum d\'achat pour acceptation de paiement par chèque'),
						'name' => 'somme_Maxi',
						'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(
			'CHEQUE1_NAME' => Tools::getValue('CHEQUE1_NAME', Configuration::get('CHEQUE1_NAME')),
			'CHEQUE1_ADDRESS' => Tools::getValue('CHEQUE1_ADDRESS', Configuration::get('CHEQUE1_ADDRESS')),
			'somme_Mini' => Tools::getValue('somme_Mini', Configuration::get('somme_Mini')),
			'somme_Maxi' => Tools::getValue('somme_Maxi', Configuration::get('somme_Maxi')),
			
		);
	}
}

Ok et merci voila mon code

Share this post


Link to post
Share on other sites

Bonsoir,

 

Pourquoi ne pas utiliser Smarty pour déterminer le montant total du panier lors du passage par ce mode de paiement ? Cela me semble beaucoup plus facile à gérer !

 

Quelque chose comme {if $cart->getOrderTotal(true) < 90} ou {if $cart->getOrderTotal(true) > 150} devrait faire l'affaire non ?

 

Il suffit que les deux input retournent une variable Smarty et le tour est joué ! Cela donnerait :

 {if $cart->getOrderTotal(true) < $MaVarMin} ou {if $cart->getOrderTotal(true) > $MaVarMax}

 

Cyssoo 

Share this post


Link to post
Share on other sites

bonsoir est merci de votre réponse mais pourriez vous m'aider d'avantage en me disant ou intégrer ce code car je suis perdu.Merci beaucoup

Share this post


Link to post
Share on other sites

Yop !

 

Quand je vois la date de ma réponse, j'ai un petit peu l'impression d'être un gros troll...

 

Bon, dans l'idée, il faudrait rajouter cela dans payment.tpl, et encapsuler tout le code du fichier dans la condition.

 

Donc, sur le même principe que cité plus haut :

 

 {if $cart->getOrderTotal(true) < $MaVarMin} ou {if $cart->getOrderTotal(true) > $MaVarMax}

 

//Mon Code

 

{/if}

 

A tester, non testé  :)

Share this post


Link to post
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...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More