64 lines
2.1 KiB
PHP
64 lines
2.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace MonetaPhpShop\receipt;
|
|
|
|
/**
|
|
* Ñòàâêè ÍÄÑ èç íàñòðîåê PHPShop, êîòîðûõ íåò â ïåðå÷íå êàññû: ïîçèöèè ñ íèìè óõîäÿò â ÷åê
|
|
* «áåç ÍÄÑ» ({@see Vat::fromPercent()}) — ìîäóëü ñòàâêó íå óãàäûâàåò, íî ìåð÷àíò äîëæåí îá ýòîì
|
|
* çíàòü. Èñòî÷íèê ïðåäóïðåæäåíèÿ â íàñòðîéêàõ ìîäóëÿ.
|
|
*
|
|
* Ïðîâåðÿåòñÿ òîëüêî òî, ÷òî ìîäóëü äåéñòâèòåëüíî áåð¸ò èç PHPShop: ïðè ôèñêàëèçàöèè,
|
|
* âêëþ÷¸ííîì ÍÄÑ ìàãàçèíà è íàñòðîéêå «èç PHPShop» ó òîâàðîâ èëè äîñòàâêè.
|
|
*/
|
|
final class VatRateWarnings
|
|
{
|
|
private function __construct() {}
|
|
|
|
/**
|
|
* @param string $systemPercent ñèñòåìíàÿ ñòàâêà PHPShop (`nds`)
|
|
* @param array<int, array{0: string, 1: string}> $deliveries ñïîñîáû äîñòàâêè: [íàçâàíèå, «Çíà÷åíèå ÍÄÑ»
|
|
* (`ofd_nds`, ïóñòî — ñèñòåìíàÿ ñòàâêà)]
|
|
*
|
|
* @return array<int, string> íåðàñïîçíàííûå ñòàâêè: `ñèñòåìíàÿ ñòàâêà PHPShop (òîâàðû): 23`
|
|
*/
|
|
public static function find(
|
|
bool $fiscalization,
|
|
bool $vatEnabled,
|
|
VatSetting $goodsVat,
|
|
VatSetting $deliveryVat,
|
|
string $systemPercent,
|
|
array $deliveries
|
|
): array {
|
|
if (!$fiscalization || !$vatEnabled) {
|
|
return [];
|
|
}
|
|
|
|
$warnings = [];
|
|
if ($goodsVat->getFixed() === null && Vat::tryFromPercent($systemPercent) === null) {
|
|
$warnings[] = 'ñèñòåìíàÿ ñòàâêà PHPShop (òîâàðû): ' . self::shown($systemPercent);
|
|
}
|
|
if ($deliveryVat->getFixed() === null) {
|
|
foreach ($deliveries as [$name, $percent]) {
|
|
$percent = (trim($percent) !== '') ? $percent : $systemPercent;
|
|
if (Vat::tryFromPercent($percent) === null) {
|
|
$warnings[] = 'äîñòàâêà «' . $name . '»: ' . self::shown($percent);
|
|
}
|
|
}
|
|
}
|
|
|
|
return $warnings;
|
|
}
|
|
|
|
/**
|
|
* Çíà÷åíèå äëÿ ñîîáùåíèÿ: ïóñòîå — ñëîâîì, èíà÷å êàê ââ¸ë ìåð÷àíò.
|
|
*/
|
|
public static function shown(string $percent): string
|
|
{
|
|
$percent = trim($percent);
|
|
|
|
return ($percent === '') ? 'íå çàäàíà' : $percent . '%';
|
|
}
|
|
}
|