80 lines
2.3 KiB
PHP
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;
|
|
}
|
|
}
|