atol-online/docs/vats.md

129 lines
4.1 KiB
Markdown
Raw Normal View History

2020-01-11 06:30:25 +00:00
# Работа со ставками НДС
[Вернуться к содержанию](readme.md)
---
2020-01-11 06:30:25 +00:00
## Один объект
Объект ставки НДС инициализируется следующим образом:
```php
use AtolOnline\Entities\Vat;
use AtolOnline\Enums\VatTypes;
2020-01-11 06:30:25 +00:00
$vat = new Vat(
VatTypes::VAT10, // тип ставки
123.45 // сумма в рублях, от которой считать ставку
2020-01-11 06:30:25 +00:00
);
```
Для типа и суммы имеются отдельные сеттеры:
2020-01-11 06:30:25 +00:00
```php
$vat->setType(VatTypes::VAT20)
->setSum(100.15); // 123.45 заменится на 100.15
2020-01-11 06:30:25 +00:00
```
Общую сумму, из которой расчитывается размер налога, можно увеличить, используя метод `addSum()`. Указанная в рублях
сумма увеличится на указанные рубли. Для уменьшения суммы следует передать отрицательное число.
2020-01-11 06:30:25 +00:00
```php
$vat->addSum(40) // 100.15 + 40 = 140.15р
->addSum(-15); // 140.15 - 15 = 125.15р
2020-01-11 06:30:25 +00:00
```
Получить установленную сумму можно через геттер `getSum()`:
2020-01-11 06:30:25 +00:00
```php
$vat->getSum(); // 125.15р
2020-01-11 06:30:25 +00:00
```
Размер налога по ставке высчитывается из этой общей суммы. Не смотря на то, что геттер и сеттер работают с рублями, **
расчёты производятся в копейках**. Сделать это можно через `getCalculated()`:
2020-01-11 06:30:25 +00:00
```php
$vat->getCalculated();
// для примера выше это 20% от 125.15р = 25.03р
2020-01-11 06:30:25 +00:00
```
Разберём комплексный пример изменения типа ставки и расчётной суммы:
Объект класса приводится к JSON-строке автоматически или принудительно:
2020-01-11 06:30:25 +00:00
```php
echo $vat;
$json_string = (string)$vat;
```
Чтобы получить те же данные в виде массива, нужно вызвать метод `jsonSerialize()`:
```php
$json_array = $vat->jsonSerialize();
```
<a name="array"></a>
## Массив объектов ставок НДС
> Максимальное количество в массиве - 6.
Массив инициализируется следующим образом:
```php
$vat_array = new AtolOnline\Entities\VatArray();
```
Чтобы задать содержимое массива, используйте метод `set()`:
```php
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)
]);
```
Очистить его можно передачей в сеттер пустого массива:
```php
$vat_array->set([]);
```
Чтобы добавить объект к существующим элементам массива, используйте метод `add()`:
```php
use AtolOnline\{Constants\VatTypes, Entities\Vat};
$vat = new Vat(VatTypes::VAT20, 20);
$vat_array->add($vat);
```
Методы `set()` и `add()` проверяют количество элементов в массиве перед его обновлением.
Выбрасывают исключение `AtolTooManyVatsException` (если в массиве уже максимальное количество объектов).
Чтобы получить содержимое массива, используйте метод `get()`:
```php
$vat_array->get();
```
Объект класса приводится к JSON-строке автоматически или принудительным приведением к `string`:
```php
echo $vat_array;
$json_string = (string)$vat_array;
```
Чтобы получить те же данные в виде массива, нужно вызвать метод `jsonSerialize()`:
```php
$json_array = $vat_array->jsonSerialize();
```
---
[Вернуться к содержанию](readme.md)