set($vats); } } /** * Устанавливает массив ставок НДС * * @param Vat[] $vats Массив ставок НДС * @return $this * @throws TooManyVatsException Слишком много ставок НДС */ public function set(array $vats): VatArray { if ($this->validateCount($vats)) { $this->vats = $vats; } return $this; } /** * Добавляет новую ставку НДС в массив * * @param Vat $vat Объект ставки НДС * @return $this * @throws TooManyVatsException Слишком много ставок НДС */ public function add(Vat $vat): VatArray { if ($this->validateCount()) { if (isset($this->vats[$vat->getType()])) { $this->vats[$vat->getType()]->addSum($vat->getSum()); } else { $this->vats[$vat->getType()] = $vat; } } return $this; } /** * Возвращает массив ставок НДС * * @return Vat[] */ public function get(): array { 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 TooManyVatsException Слишком много ставок НДС */ protected function validateCount(?array $vats = null): bool { if ((!empty($vats) && count($vats) >= self::MAX_COUNT) || count($this->vats) >= self::MAX_COUNT) { throw new TooManyVatsException(count($vats), self::MAX_COUNT); } return true; } }