first commit
This commit is contained in:
297
modules/ps_cashondelivery/ps_cashondelivery.php
Normal file
297
modules/ps_cashondelivery/ps_cashondelivery.php
Normal file
@@ -0,0 +1,297 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright since 2007 PrestaShop SA and Contributors
|
||||
* PrestaShop is an International Registered Trademark & Property of PrestaShop SA
|
||||
*
|
||||
* NOTICE OF LICENSE
|
||||
*
|
||||
* This source file is subject to the Academic Free License version 3.0
|
||||
* that is bundled with this package in the file LICENSE.md.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* https://opensource.org/licenses/AFL-3.0
|
||||
* 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 license@prestashop.com so we can send you a copy immediately.
|
||||
*
|
||||
* @author PrestaShop SA and Contributors <contact@prestashop.com>
|
||||
* @copyright Since 2007 PrestaShop SA and Contributors
|
||||
* @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0
|
||||
*/
|
||||
if (!defined('_PS_VERSION_')) {
|
||||
exit;
|
||||
}
|
||||
|
||||
if (file_exists(__DIR__ . '/vendor/autoload.php')) {
|
||||
require_once __DIR__ . '/vendor/autoload.php';
|
||||
}
|
||||
|
||||
use PrestaShop\PrestaShop\Core\Payment\PaymentOption;
|
||||
|
||||
class Ps_Cashondelivery extends PaymentModule
|
||||
{
|
||||
const HOOKS = [
|
||||
'displayOrderConfirmation',
|
||||
'paymentOptions',
|
||||
];
|
||||
|
||||
const CONFIG_OS_CASH_ON_DELIVERY = 'PS_OS_COD_VALIDATION';
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->name = 'ps_cashondelivery';
|
||||
$this->tab = 'payments_gateways';
|
||||
$this->author = 'PrestaShop';
|
||||
$this->version = '2.0.1';
|
||||
$this->need_instance = 1;
|
||||
$this->ps_versions_compliancy = ['min' => '1.7.6.0', 'max' => _PS_VERSION_];
|
||||
$this->controllers = ['validation'];
|
||||
$this->currencies = false;
|
||||
|
||||
parent::__construct();
|
||||
|
||||
$this->displayName = $this->trans('Cash on delivery (COD)', [], 'Modules.Cashondelivery.Admin');
|
||||
$this->description = $this->trans('Accept cash payments on delivery to make it easy for customers to purchase on your store.', [], 'Modules.Cashondelivery.Admin');
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function install()
|
||||
{
|
||||
return parent::install()
|
||||
&& (bool) $this->registerHook(static::HOOKS)
|
||||
&& $this->installOrderState();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array{cookie: Cookie, cart: Cart, altern: int} $params
|
||||
*
|
||||
* @return array|PaymentOption[] Should always returns an array to avoid issue
|
||||
*/
|
||||
public function hookPaymentOptions(array $params)
|
||||
{
|
||||
if (empty($params['cart'])) {
|
||||
return [];
|
||||
}
|
||||
|
||||
/** @var Cart $cart */
|
||||
$cart = $params['cart'];
|
||||
|
||||
if ($cart->isVirtualCart()) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$cashOnDeliveryOption = new PaymentOption();
|
||||
$cashOnDeliveryOption->setModuleName($this->name);
|
||||
$cashOnDeliveryOption->setCallToActionText($this->trans('Pay by Cash on Delivery', [], 'Modules.Cashondelivery.Shop'));
|
||||
$cashOnDeliveryOption->setAction($this->context->link->getModuleLink($this->name, 'validation', [], true));
|
||||
$cashOnDeliveryOption->setAdditionalInformation($this->fetch('module:ps_cashondelivery/views/templates/hook/paymentOptions-additionalInformation.tpl'));
|
||||
|
||||
return [$cashOnDeliveryOption];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array{cookie: Cookie, cart: Cart, altern: int, order: Order, objOrder: Order} $params
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function hookDisplayOrderConfirmation(array $params)
|
||||
{
|
||||
/** @var Order $order */
|
||||
$order = (isset($params['objOrder'])) ? $params['objOrder'] : $params['order'];
|
||||
|
||||
if (!Validate::isLoadedObject($order) || $order->module !== $this->name) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$this->context->smarty->assign([
|
||||
'shop_name' => $this->context->shop->name,
|
||||
'total' => $this->context->getCurrentLocale()->formatPrice($params['order']->getOrdersTotalPaid(), (new Currency($params['order']->id_currency))->iso_code),
|
||||
'reference' => $order->reference,
|
||||
'contact_url' => $this->context->link->getPageLink('contact', true),
|
||||
]);
|
||||
|
||||
return $this->fetch('module:ps_cashondelivery/views/templates/hook/displayOrderConfirmation.tpl');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function installOrderState()
|
||||
{
|
||||
if (Configuration::getGlobalValue(Ps_Cashondelivery::CONFIG_OS_CASH_ON_DELIVERY)) {
|
||||
$orderState = new OrderState((int) Configuration::getGlobalValue(Ps_Cashondelivery::CONFIG_OS_CASH_ON_DELIVERY));
|
||||
|
||||
if (Validate::isLoadedObject($orderState) && $this->name === $orderState->module_name) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return $this->createOrderState(
|
||||
static::CONFIG_OS_CASH_ON_DELIVERY,
|
||||
[
|
||||
'en' => 'Awaiting Cash On Delivery validation',
|
||||
'bs' => 'Čeka validaciju Plaćanje po dostavi',
|
||||
'ca' => 'Esperant la validació del pagament contra reemborsament',
|
||||
'da' => 'Afventer godkendelse af levering pr. efterkrav',
|
||||
'de' => 'Warten auf Zahlungseingang Nachnahme',
|
||||
'et' => 'Ootab sularaha kauba kättesaamisel kinnitust',
|
||||
'es' => 'En espera de validación por contra reembolso.',
|
||||
'mx' => 'En espera de validación por pago contra entrega',
|
||||
'fr' => 'En attente de paiement à la livraison',
|
||||
'qc' => 'En attente de paiement à la livraison',
|
||||
'gl' => 'Agardando a validación do Pago Contra Reembolso',
|
||||
'hr' => 'Awaiting cod validation',
|
||||
'id' => 'Awaiting cod validation',
|
||||
'it' => 'In attesa verifica contrassegno',
|
||||
'lv' => 'Gaida skaidrās naudas apmaksas apstiprinājumu',
|
||||
'hu' => 'Awaiting cod validation',
|
||||
'nl' => 'Wachten op bevestiging (rembours)',
|
||||
'no' => 'Awaiting cod validation',
|
||||
'pl' => 'Oczekiwanie na płatność przy odbiorze',
|
||||
'br' => 'Aguardando validação de pagamento na entrega',
|
||||
'pt' => 'Awaiting cod validation',
|
||||
'ro' => 'In asteptarea confirmarii platii la livrare',
|
||||
'sq' => 'Në pritje të pagesës gjatë dorëzimit',
|
||||
'sk' => 'Čaká sa na potvrdenie platby dobierkou',
|
||||
'sr' => 'Čeka se potvrda keširanja pri isporuci',
|
||||
'fi' => 'Odottaa maksuvahvistusta',
|
||||
'sv' => 'Väntar på postförskott validering',
|
||||
'tr' => 'Kapıda ödeme onayı bekleniyor',
|
||||
'lt' => 'Awaiting cod validation',
|
||||
'si' => 'Čaka potrdilo za plačilo po povzetju',
|
||||
'vn' => 'Chờ xác nhận thanh toán COD',
|
||||
'cs' => 'Čeká se na potvrzení dobírky',
|
||||
'el' => 'Αναμονή επικύρωσης Αντικαταβολής',
|
||||
'ru' => 'Ожидается подтверждение оплаты наличными',
|
||||
'uk' => 'Очікується платіж післяплатою',
|
||||
'bg' => 'В очакване на валидиране на плащане при доставка',
|
||||
'mk' => 'Awaiting cod validation',
|
||||
'he' => 'Awaiting cod validation',
|
||||
'fa' => 'Awaiting cod validation',
|
||||
'hi' => 'Awaiting Cash On Delivery validation',
|
||||
'bn' => 'Awaiting cod validation',
|
||||
'ar' => 'بإنتظار المصادقة على الدفع عند الإستلام',
|
||||
'ja' => '代金引換払い確認待ち',
|
||||
'zh' => '接受远程付费',
|
||||
'tw' => '等待貨到付款驗證',
|
||||
'ko' => '배송시 현금 지불 확인 대기',
|
||||
],
|
||||
true === (bool) version_compare(_PS_VERSION_, '1.7.7.0', '>=') ? '#4169E1' : '#34219E'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create custom OrderState used for payment
|
||||
*
|
||||
* @param string $configurationKey Configuration key used to store OrderState identifier
|
||||
* @param array $nameByLangIsoCode An array of name for all languages, default is en
|
||||
* @param string $color Color of the label
|
||||
* @param bool $isLogable consider the associated order as validated
|
||||
* @param bool $isPaid set the order as paid
|
||||
* @param bool $isInvoice allow a customer to download and view PDF versions of his/her invoices
|
||||
* @param bool $isShipped set the order as shipped
|
||||
* @param bool $isDelivery show delivery PDF
|
||||
* @param bool $isPdfDelivery attach delivery slip PDF to email
|
||||
* @param bool $isPdfInvoice attach invoice PDF to email
|
||||
* @param bool $isSendEmail send an email to the customer when his/her order status has changed
|
||||
* @param string $template Only letters, numbers and underscores are allowed. Email template for both .html and .txt
|
||||
* @param bool $isHidden hide this status in all customer orders
|
||||
* @param bool $isUnremovable Disallow delete action for this OrderState
|
||||
* @param bool $isDeleted Set OrderState deleted
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function createOrderState(
|
||||
$configurationKey,
|
||||
array $nameByLangIsoCode,
|
||||
$color,
|
||||
$isLogable = false,
|
||||
$isPaid = false,
|
||||
$isInvoice = false,
|
||||
$isShipped = false,
|
||||
$isDelivery = false,
|
||||
$isPdfDelivery = false,
|
||||
$isPdfInvoice = false,
|
||||
$isSendEmail = false,
|
||||
$template = '',
|
||||
$isHidden = false,
|
||||
$isUnremovable = true,
|
||||
$isDeleted = false
|
||||
) {
|
||||
$tabNameByLangId = [];
|
||||
|
||||
foreach ($nameByLangIsoCode as $langIsoCode => $name) {
|
||||
foreach (Language::getLanguages(false) as $language) {
|
||||
if (Tools::strtolower($language['iso_code']) === $langIsoCode) {
|
||||
$tabNameByLangId[(int) $language['id_lang']] = $name;
|
||||
} elseif (isset($nameByLangIsoCode['en'])) {
|
||||
$tabNameByLangId[(int) $language['id_lang']] = $nameByLangIsoCode['en'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$orderState = new OrderState();
|
||||
$orderState->module_name = $this->name;
|
||||
$orderState->name = $tabNameByLangId;
|
||||
$orderState->color = $color;
|
||||
$orderState->logable = $isLogable;
|
||||
$orderState->paid = $isPaid;
|
||||
$orderState->invoice = $isInvoice;
|
||||
$orderState->shipped = $isShipped;
|
||||
$orderState->delivery = $isDelivery;
|
||||
$orderState->pdf_delivery = $isPdfDelivery;
|
||||
$orderState->pdf_invoice = $isPdfInvoice;
|
||||
$orderState->send_email = $isSendEmail;
|
||||
$orderState->hidden = $isHidden;
|
||||
$orderState->unremovable = $isUnremovable;
|
||||
$orderState->template = $template;
|
||||
$orderState->deleted = $isDeleted;
|
||||
$result = (bool) $orderState->add();
|
||||
|
||||
if (false === $result) {
|
||||
$this->_errors[] = sprintf(
|
||||
'Failed to create OrderState %s',
|
||||
$configurationKey
|
||||
);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
$result = (bool) Configuration::updateGlobalValue($configurationKey, (int) $orderState->id);
|
||||
|
||||
if (false === $result) {
|
||||
$this->_errors[] = sprintf(
|
||||
'Failed to save OrderState %s to Configuration',
|
||||
$configurationKey
|
||||
);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
$orderStateImgPath = $this->getLocalPath() . 'views/img/orderstate/' . $configurationKey . '.gif';
|
||||
|
||||
if (false === (bool) Tools::file_exists_cache($orderStateImgPath)) {
|
||||
$this->_errors[] = sprintf(
|
||||
'Failed to find icon file of OrderState %s',
|
||||
$configurationKey
|
||||
);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if (false === (bool) Tools::copy($orderStateImgPath, _PS_ORDER_STATE_IMG_DIR_ . $orderState->id . '.gif')) {
|
||||
$this->_errors[] = sprintf(
|
||||
'Failed to copy icon of OrderState %s',
|
||||
$configurationKey
|
||||
);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user