Files
PHPShop/moneta/class/order/PaymentEligibility.php
T

77 lines
2.4 KiB
PHP

<?php
declare(strict_types=1);
namespace MonetaPhpShop\order;
use MonetaPhpShop\ModuleInfo;
use MonetaPhpShop\protocol\AssistantProtocol;
use MonetaPhpShop\Settings;
/**
* Ìîæíî ëè ñåé÷àñ îïëàòèòü çàêàç ÷åðåç Ìîíåòó. Îäíî ïðàâèëî äëÿ êíîïêè îïëàòû
* è äëÿ Check URL, ÷òîáû ôîðìà íå âûäàâàëàñü òàì, ãäå ïðîâåðî÷íûé çàïðîñ îòêàæåò.
*
* Çíà÷åíèÿ êîíñòàíò — êîäû ïðè÷èí äëÿ æóðíàëà ìîäóëÿ; íå ïåðåèìåíîâûâàòü.
*/
final class PaymentEligibility
{
public const PAYABLE = 'payable';
public const NOT_CONFIGURED = 'not_configured';
public const OTHER_PAYMENT_METHOD = 'other_payment_method';
public const ALREADY_PAID = 'already_paid';
public const CANCELLED = 'cancelled';
public const AWAITING_STATUS = 'awaiting_status';
public const UNSUPPORTED_CURRENCY = 'unsupported_currency';
public const ZERO_AMOUNT = 'zero_amount';
/** Ñòàòóñ PHPShop «Àííóëèðîâàí» (`PHPShopOrderFunction::changeStatus()` âîçâðàùàåò òîâàð íà ñêëàä). */
public const STATUS_CANCELLED = 1;
private function __construct() {}
/**
* @param string $shopCurrency ISO-êîä âàëþòû çàêàçà èç PHPShop (`getDefaultValutaIso(true)`)
*/
public static function check(Settings $settings, Order $order, string $shopCurrency): string
{
if (!$settings->isConfigured()) {
return self::NOT_CONFIGURED;
}
if ($order->getPaymentMethodId() !== ModuleInfo::PAYMENT_METHOD_ID) {
return self::OTHER_PAYMENT_METHOD;
}
if (self::isPaid($settings, $order)) {
return self::ALREADY_PAID;
}
if ($order->getStatusId() === self::STATUS_CANCELLED) {
return self::CANCELLED;
}
if (!$settings->isPayableRightAfterCheckout() && $order->getStatusId() !== $settings->getPayableStatus()) {
return self::AWAITING_STATUS;
}
if (AssistantProtocol::normalizeCurrency($shopCurrency) === null) {
return self::UNSUPPORTED_CURRENCY;
}
if (!$order->getAmount()->isPositive()) {
return self::ZERO_AMOUNT;
}
return self::PAYABLE;
}
/**
* Îïëà÷åí: ôëàã `paid` ÿäðà èëè ñòàòóñ «ïîñëå îïëàòû» èç íàñòðîåê ìîäóëÿ.
*/
public static function isPaid(Settings $settings, Order $order): bool
{
return $order->isPaidFlag() || ($order->getStatusId() === $settings->getPaidStatus());
}
}