feat: moneta 2.0, MONETA.Assistant payment module for PHPShop 6.7+
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace MonetaPhpShop\host;
|
||||
|
||||
/**
|
||||
* Ñòàâêè ÍÄÑ èç íàñòðîåê PHPShop: âêëþ÷¸í ëè ÍÄÑ ìàãàçèíà (`nds_enabled`), ñèñòåìíàÿ ñòàâêà
|
||||
* (`nds`) è «Çíà÷åíèå ÍÄÑ» ñïîñîáîâ äîñòàâêè (`phpshop_delivery.ofd_nds`). Ñòàâêà ó òîâàðà
|
||||
* â ÿäðå PHPShop íå õðàíèòñÿ.
|
||||
*/
|
||||
final class HostVatRates
|
||||
{
|
||||
/** @var Database */
|
||||
private $database;
|
||||
|
||||
public function __construct(Database $database)
|
||||
{
|
||||
$this->database = $database;
|
||||
}
|
||||
|
||||
public function isEnabled(): bool
|
||||
{
|
||||
return !empty(self::systemParam('nds_enabled'));
|
||||
}
|
||||
|
||||
public function systemPercent(): string
|
||||
{
|
||||
return self::systemParam('nds');
|
||||
}
|
||||
|
||||
/**
|
||||
* «Çíà÷åíèå ÍÄÑ» ñïîñîáà äîñòàâêè êàê ââ¸ë ìåð÷àíò; ïóñòî — ó äîñòàâêè ñâîåé ñòàâêè íåò.
|
||||
*/
|
||||
public function deliveryPercent(int $deliveryId): string
|
||||
{
|
||||
$table = self::deliveryTable();
|
||||
if ($deliveryId <= 0 || $table === null) {
|
||||
return '';
|
||||
}
|
||||
|
||||
return trim((string) $this->database->fetchValue(
|
||||
'SELECT ofd_nds FROM `' . $table . '` WHERE id = ? LIMIT 1',
|
||||
[$deliveryId],
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Âêëþ÷¸ííûå ñïîñîáû äîñòàâêè (áåç ïàïîê): [íàçâàíèå â cp1251, «Çíà÷åíèå ÍÄÑ»].
|
||||
*
|
||||
* @return array<int, array{0: string, 1: string}>
|
||||
*/
|
||||
public function enabledDeliveries(): array
|
||||
{
|
||||
$table = self::deliveryTable();
|
||||
if ($table === null) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$deliveries = [];
|
||||
$rows = $this->database->fetchAll(
|
||||
'SELECT city, ofd_nds FROM `' . $table . "` WHERE enabled = '1' AND (is_folder IS NULL OR is_folder <> '1')"
|
||||
. ' ORDER BY num, id',
|
||||
);
|
||||
foreach ($rows as $row) {
|
||||
$deliveries[] = [
|
||||
HostCharset::fromDatabase((string) ($row['city'] ?? '')),
|
||||
trim((string) ($row['ofd_nds'] ?? '')),
|
||||
];
|
||||
}
|
||||
|
||||
return $deliveries;
|
||||
}
|
||||
|
||||
private static function deliveryTable(): ?string
|
||||
{
|
||||
$table = $GLOBALS['SysValue']['base']['delivery'] ?? null;
|
||||
|
||||
// Èìÿ òàáëèöû èä¸ò â SQL: ÿâíûé êëàññ, à íå \w — ñì. OperationRepository::table().
|
||||
return (is_string($table) && preg_match('/\A[0-9A-Za-z_]+\z/', $table) === 1) ? $table : null;
|
||||
}
|
||||
|
||||
private static function systemParam(string $name): string
|
||||
{
|
||||
$system = $GLOBALS['PHPShopSystem'] ?? null;
|
||||
if (!is_object($system) || !method_exists($system, 'getParam')) {
|
||||
return '';
|
||||
}
|
||||
$value = $system->getParam($name);
|
||||
|
||||
return is_scalar($value) ? (string) $value : '';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user