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
+63
View File
@@ -0,0 +1,63 @@
<?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 . '%';
}
}