feat: moneta 2.0, MONETA.Assistant payment module for PHPShop 6.7+

This commit is contained in:
2026-10-27 11:45:22 +03:00
parent 78b7405637
commit f8c12ce44a
82 changed files with 7387 additions and 58 deletions
+93
View File
@@ -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 : '';
}
}