Jump to content

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')),
);
}
}
 

 

 

Link to comment
Share on other sites

  • 2 weeks later...

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

Link to comment
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 

Link to comment
Share on other sites

  • 2 weeks later...
  • 11 months later...

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é  :)

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