6.5 KiB
Работа со ставками НДС
Один объект
Объект ставки НДС инициализируется следующим образом:
$vat = new AtolOnline\Entities\Vat();
У объекта ставки должны быть указаны все следующие атрибуты:
- тип ставки (теги ФФД: 1199 для предмета расчёта; 1105, 1104, 1103, 1102, 1107, 1106 для чека) - все типы перечислены в классе
AtolOnline\Constants\VatTypes
(по умолчаниюNONE
) - размер налога (теги ФФД: 1200 для предмета расчёта; 1105, 1104, 1103, 1102, 1107, 1106 для чека)
Все эти атрибуты являются обязательными.
Установить тип ставки НДС можно следующими способами:
// 1 способ - через конструктор
$vat = new AtolOnline\Entities\Vat(
AtolOnline\Constants\VatTypes::VAT20 // тип ставки
);
// 2 способ - через сеттер
$vat = (new AtolOnline\Entities\Vat())
->setType(AtolOnline\Constants\VatTypes::VAT20); // тип ставки
Размер налога высчитывается автоматически из общей суммы. Сумму, от которой нужно расчитать размер налога, можно передать следующими способами:
// 1 способ - через конструктор
$vat = new AtolOnline\Entities\Vat(
AtolOnline\Constants\VatTypes::VAT10, // тип ставки
1234.56 // общая сумма в рублях
);
// 2 способ - через сеттер
$vat = (new AtolOnline\Entities\Vat())
->setType(AtolOnline\Constants\VatTypes::VAT10) // тип ставки
->setSum(150); // общая сумма в рублях
Сумму можно установить и до установки типа ставки. Объект её запомнит и пересчитает итоговый размер налога при смене типа ставки:
$vat = (new AtolOnline\Entities\Vat())
->setSum(150) // общая сумма в рублях
->setType(AtolOnline\Constants\VatTypes::VAT10); // тип ставки
Получить установленную расчётную сумму в рублях можно через геттер getSum()
:
var_dump($vat->getSum());
// double(150)
Получить расчитанный размер налога в рублях можно через геттер getFinalSum()
:
var_dump($vat->getFinalSum());
// double(15): для примера выше это 10% от 150р = 15р
Общую сумму, из которой расчитывается размер налога, можно увеличить, используя метод addSum()
.
Указанная в рублях сумма увеличится и итоговый размер налога пересчитается.
Для уменьшения суммы следует передать отрицательное число.
Разберём комплексный пример изменения типа ставки и расчётной суммы:
use AtolOnline\{Entities\Vat, Constants\VatTypes};
$vat = new Vat(VatTypes::VAT20, 120);
echo "НДС20 от 120р: ";
var_dump($vat->getFinalSum());
echo "НДС10 от 120р: ";
$vat->setType(VatTypes::VAT10);
var_dump($vat->getFinalSum());
$vat->addSum(40);
echo "НДС10 от {$vat->getSum()}р: ";
var_dump($vat->getFinalSum());
$vat->setType(VatTypes::VAT20)->addSum(-20);
echo "НДС20 от {$vat->getSum()}р: ";
var_dump($vat->getFinalSum());
$vat->setType(VatTypes::VAT120);
echo "НДС20/120 от {$vat->getSum()}р: ";
var_dump($vat->getFinalSum());
Результат будет следующим:
НДС20 от 120р:
double(24)
НДС10 от 120р:
double(12)
НДС10 от 160р:
double(16)
НДС20 от 140р:
double(28)
НДС20/120 от 140р:
double(23.33)
Объект класса приводится к JSON-строке автоматически или принудительным приведением к string
:
echo $vat;
$json_string = (string)$vat;
Чтобы получить те же данные в виде массива, нужно вызвать метод jsonSerialize()
:
$json_array = $vat->jsonSerialize();
Массив объектов ставок НДС
Максимальное количество в массиве - 6.
Массив инициализируется следующим образом:
$vat_array = new AtolOnline\Entities\VatArray();
Чтобы задать содержимое массива, используйте метод set()
:
use AtolOnline\{Constants\VatTypes, Entities\Vat};
$vat_array->set([
new Vat(VatTypes::VAT10, 123),
new Vat(VatTypes::VAT110, 53.2),
new Vat(VatTypes::VAT20, 23.99),
new Vat(VatTypes::VAT120, 11.43)
]);
Очистить его можно передачей в сеттер пустого массива:
$vat_array->set([]);
Чтобы добавить объект к существующим элементам массива, используйте метод add()
:
use AtolOnline\{Constants\VatTypes, Entities\Vat};
$vat = new Vat(VatTypes::VAT20, 20);
$vat_array->add($vat);
Методы set()
и add()
проверяют количество элементов в массиве перед его обновлением.
Выбрасывают исключение AtolTooManyVatsException
(если в массиве уже максимальное количество объектов).
Чтобы получить содержимое массива, используйте метод get()
:
$vat_array->get();
Объект класса приводится к JSON-строке автоматически или принудительным приведением к string
:
echo $vat_array;
$json_string = (string)$vat_array;
Чтобы получить те же данные в виде массива, нужно вызвать метод jsonSerialize()
:
$json_array = $vat_array->jsonSerialize();