94 lines
2.7 KiB
PHP
94 lines
2.7 KiB
PHP
<?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 : '';
|
|
}
|
|
}
|