feat: moneta 2.0, MONETA.Assistant payment module for PHPShop 6.7+
This commit is contained in:
@@ -0,0 +1,194 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace MonetaPhpShop\order;
|
||||
|
||||
use InvalidArgumentException;
|
||||
use MonetaPhpShop\Money;
|
||||
|
||||
/**
|
||||
* Ñíèìîê çàêàçà PHPShop (`phpshop_orders`) — òî, ÷òî ìîäóëþ íóæíî äëÿ ôîðìû è êîëáýêîâ.
|
||||
* Ñòðîêè â êîäèðîâêå âèòðèíû (cp1251).
|
||||
*/
|
||||
final class Order
|
||||
{
|
||||
/**
|
||||
* Àíîíèìíîìó ïîêóïàòåëþ áåç email ÿäðî ïîäñòàâëÿåò `guest@<äîìåí>`
|
||||
* (`PHPShopDone::send_to_order()`) — ýòî íå àäðåñ ïîêóïàòåëÿ.
|
||||
*/
|
||||
private const GUEST_EMAIL_PREFIX = 'guest@';
|
||||
|
||||
/** @var int */
|
||||
private $id;
|
||||
|
||||
/** @var string */
|
||||
private $uid;
|
||||
|
||||
/** @var Money */
|
||||
private $amount;
|
||||
|
||||
/** @var int */
|
||||
private $statusId;
|
||||
|
||||
/** @var bool */
|
||||
private $paid;
|
||||
|
||||
/** @var int */
|
||||
private $paymentMethodId;
|
||||
|
||||
/** @var string */
|
||||
private $email;
|
||||
|
||||
/** @var string */
|
||||
private $phone;
|
||||
|
||||
/** @var string */
|
||||
private $customerName;
|
||||
|
||||
/** @var int */
|
||||
private $userId;
|
||||
|
||||
/** @var array<string, mixed> */
|
||||
private $cart;
|
||||
|
||||
/** @var float */
|
||||
private $discountPercent;
|
||||
|
||||
/** @var int */
|
||||
private $deliveryMethodId;
|
||||
|
||||
private function __construct() {}
|
||||
|
||||
/**
|
||||
* @param array<string, mixed> $row ñòðîêà `phpshop_orders`
|
||||
* @param array<string, mixed> $details ðàñïàêîâàííîå ïîëå `orders`: `['Cart' => ..., 'Person' => ...]`
|
||||
*/
|
||||
public static function fromRow(array $row, array $details): self
|
||||
{
|
||||
$id = (int) ($row['id'] ?? 0);
|
||||
$uid = (string) ($row['uid'] ?? '');
|
||||
if (($id <= 0) || ($uid === '')) {
|
||||
throw new InvalidArgumentException('Ñòðîêà çàêàçà áåç id èëè uid.');
|
||||
}
|
||||
|
||||
$person = isset($details['Person']) && is_array($details['Person']) ? $details['Person'] : [];
|
||||
$cart = isset($details['Cart']) && is_array($details['Cart']) ? $details['Cart'] : [];
|
||||
|
||||
$order = new self();
|
||||
$order->id = $id;
|
||||
$order->uid = $uid;
|
||||
$order->amount = Money::fromFloat((float) ($row['sum'] ?? 0));
|
||||
$order->statusId = (int) ($row['statusi'] ?? 0);
|
||||
$order->paid = (int) ($row['paid'] ?? 0) === 1;
|
||||
$order->paymentMethodId = (int) ($person['order_metod'] ?? 0);
|
||||
$order->email = self::email((string) ($person['mail'] ?? ''));
|
||||
$order->phone = trim((string) ($row['tel'] ?? ''));
|
||||
$order->customerName = trim((string) ($row['fio'] ?? ''));
|
||||
$order->userId = (int) ($row['user'] ?? 0);
|
||||
$order->cart = $cart;
|
||||
$order->discountPercent = (float) ($person['discount'] ?? 0);
|
||||
$order->deliveryMethodId = (int) ($person['dostavka_metod'] ?? 0);
|
||||
|
||||
return $order;
|
||||
}
|
||||
|
||||
public function getId(): int
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Íîìåð çàêàçà, êîòîðûé âèäèò ïîêóïàòåëü (`4-36`).
|
||||
*/
|
||||
public function getUid(): string
|
||||
{
|
||||
return $this->uid;
|
||||
}
|
||||
|
||||
/**
|
||||
* Èòîã çàêàçà (`phpshop_orders.sum`): òîâàðû ñî ñêèäêàìè, áîíóñû è äîñòàâêà óæå ó÷òåíû ÿäðîì.
|
||||
*/
|
||||
public function getAmount(): Money
|
||||
{
|
||||
return $this->amount;
|
||||
}
|
||||
|
||||
public function getStatusId(): int
|
||||
{
|
||||
return $this->statusId;
|
||||
}
|
||||
|
||||
public function isPaidFlag(): bool
|
||||
{
|
||||
return $this->paid;
|
||||
}
|
||||
|
||||
public function getPaymentMethodId(): int
|
||||
{
|
||||
return $this->paymentMethodId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Email ïîêóïàòåëÿ èëè ïóñòàÿ ñòðîêà (ãîñòåâîé `guest@...` íå ñ÷èòàåòñÿ).
|
||||
*/
|
||||
public function getEmail(): string
|
||||
{
|
||||
return $this->email;
|
||||
}
|
||||
|
||||
public function getPhone(): string
|
||||
{
|
||||
return $this->phone;
|
||||
}
|
||||
|
||||
public function getCustomerName(): string
|
||||
{
|
||||
return $this->customerName;
|
||||
}
|
||||
|
||||
/**
|
||||
* ID ïîêóïàòåëÿ PHPShop (`phpshop_shopusers.id`), 0 — íåò.
|
||||
*/
|
||||
public function getUserId(): int
|
||||
{
|
||||
return $this->userId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Êîðçèíà çàêàçà êàê å¸ õðàíèò ÿäðî (`Cart`: `cart`, `dostavka`, `sum`...) — äëÿ ÷åêà.
|
||||
*
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
public function getCart(): array
|
||||
{
|
||||
return $this->cart;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ñêèäêà ïîêóïàòåëÿ â ïðîöåíòàõ (`Person.discount`): ÿäðî ïðèìåíÿåò å¸ êî âñåì òîâàðàì,
|
||||
* êðîìå òîâàðîâ ñ ïðîìî-öåíîé.
|
||||
*/
|
||||
public function getDiscountPercent(): float
|
||||
{
|
||||
return $this->discountPercent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ñïîñîá äîñòàâêè (`phpshop_delivery.id`), 0 — íå âûáðàí.
|
||||
*/
|
||||
public function getDeliveryMethodId(): int
|
||||
{
|
||||
return $this->deliveryMethodId;
|
||||
}
|
||||
|
||||
private static function email(string $raw): string
|
||||
{
|
||||
$email = trim($raw);
|
||||
if (($email === '') || stripos($email, self::GUEST_EMAIL_PREFIX) === 0) {
|
||||
return '';
|
||||
}
|
||||
|
||||
return (filter_var($email, FILTER_VALIDATE_EMAIL) !== false) ? $email : '';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user