Files
PHPShop/moneta/class/receipt/VatRateWarnings.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 . '%';
}
}