set($vats); } } /** * Устанавливает массив ставок НДС * * @param Vat[] $vats Массив ставок НДС * @return $this * @throws AtolTooFewVatsException Слишком мало ставок НДС * @throws AtolTooManyVatsException Слишком много ставок НДС */ public function set(array $vats) { if ($this->validateCount($vats)) { $this->vats = $vats; } return $this; } /** * Добавляет новую ставку НДС в массив * * @param Vat $vat Объект ставки НДС * @return $this * @throws AtolTooFewVatsException Слишком мало ставок НДС * @throws AtolTooManyVatsException Слишком много ставок НДС */ public function add(Vat $vat) { if ($this->validateCount()) { $this->vats[] = $vat; } return $this; } /** * Возвращает массив ставок НДС * * @return Vat[] */ public function get() { return $this->vats; } /** * @inheritDoc */ public function jsonSerialize() { $result = []; foreach ($this->get() as $vat) { $result[] = $vat->jsonSerialize(); } return $result; } /** * Проверяет количество налоговых ставок * * @param Vat[]|null $vats Если передать массив, то проверит количество его элементов. * Иначе проверит количество уже присвоенных элементов. * @return bool true если всё хорошо, иначе выбрасывает исключение * @throws AtolTooFewVatsException Слишком мало ставок НДС * @throws AtolTooManyVatsException Слишком много ставок НДС */ protected function validateCount(?array $vats = null) { return empty($vats) ? $this->checkCount($this->vats) : $this->checkCount($vats); } /** * Проверяет количество элементов в указанном массиве * * @param array|null $elements * @return bool true если всё хорошо, иначе выбрасывает исключение * @throws AtolTooFewVatsException Слишком мало ставок НДС * @throws AtolTooManyVatsException Слишком много ставок НДС */ protected function checkCount(?array $elements = null) { $min_count = SellSchema::get()->receipt->properties->vats->minItems; $max_count = SellSchema::get()->receipt->properties->vats->maxItems; if (empty($elements) || count($elements) < $min_count) { throw new AtolTooFewVatsException($min_count); } elseif (count($elements) >= $max_count) { throw new AtolTooManyVatsException($max_count); } else { return true; } } }