Files

80 lines
2.3 KiB
PHP

<?php
declare(strict_types=1);
namespace MonetaPhpShop\receipt;
/**
* Íàñòðîéêè «ÍÄÑ íà òîâàðû» è «ÍÄÑ íà äîñòàâêó»: ñòàâêà èç PHPShop
* (ïî óìîë÷àíèþ) èëè îäíà ôèêñèðîâàííàÿ ñòàâêà íà âñå ïîçèöèè, âêëþ÷àÿ ðàñ÷¸òíûå —
* èõ ïðè àâàíñå è ïðåäîïëàòå âûáèðàåò ìåð÷àíò, ìîäóëü ñàì íå ïîäñòàâëÿåò.
* Çíà÷åíèÿ õðàíÿòñÿ â íàñòðîéêàõ ìîäóëÿ — íå ïåðåèìåíîâûâàòü.
*/
final class VatSetting
{
/** Ñòàâêà èç PHPShop: ñèñòåìíàÿ ó òîâàðîâ, ñïîñîáà äîñòàâêè ó äîñòàâêè. */
public const PLATFORM = 'platform';
/** Ôèêñèðîâàííûå ñòàâêè: êîä `vat` -> ïîäïèñü â íàñòðîéêàõ. */
public const FIXED_LABELS = [
Vat::NONE => 'Áåç ÍÄÑ',
'vat0' => 'ÍÄÑ 0%',
'vat5' => 'ÍÄÑ 5%',
'vat7' => 'ÍÄÑ 7%',
'vat10' => 'ÍÄÑ 10%',
'vat20' => 'ÍÄÑ 20%',
'vat22' => 'ÍÄÑ 22%',
'vat105' => 'ÍÄÑ 5% (ðàñ÷¸òíàÿ ñòàâêà 5/105)',
'vat107' => 'ÍÄÑ 7% (ðàñ÷¸òíàÿ ñòàâêà 7/107)',
'vat110' => 'ÍÄÑ 10% (ðàñ÷¸òíàÿ ñòàâêà 10/110)',
'vat120' => 'ÍÄÑ 20% (ðàñ÷¸òíàÿ ñòàâêà 20/120)',
'vat122' => 'ÍÄÑ 22% (ðàñ÷¸òíàÿ ñòàâêà 22/122)',
];
/** @var Vat|null */
private $fixed;
private function __construct(?Vat $fixed)
{
$this->fixed = $fixed;
}
/**
* Çíà÷åíèå èç íàñòðîåê; ïóñòîå, {@see self::PLATFORM} èëè íåèçâåñòíîå — ñòàâêà èç PHPShop.
*/
public static function fromSetting(?string $value): self
{
$value = (string) $value;
return new self(isset(self::FIXED_LABELS[$value]) ? Vat::fromCode($value) : null);
}
public static function platform(): self
{
return new self(null);
}
/**
* Ôèêñèðîâàííàÿ ñòàâêà èëè null — áðàòü èç PHPShop.
*/
public function getFixed(): ?Vat
{
return $this->fixed;
}
public function getValue(): string
{
return ($this->fixed !== null) ? $this->fixed->getCode() : self::PLATFORM;
}
/**
* Ïîäïèñè äëÿ âûïàäàþùåãî ñïèñêà: ïåðâûì — ñòàâêà èç PHPShop ñ ïîäïèñüþ `$platformLabel`.
*
* @return array<string, string>
*/
public static function labels(string $platformLabel): array
{
return [self::PLATFORM => $platformLabel] + self::FIXED_LABELS;
}
}