set($vats); } } /** * Устанавливает массив ставок НДС * * @param Vat[] $vats Массив ставок НДС * @return $this * @throws AtolTooManyVatsException Слишком много ставок НДС */ public function set(array $vats) { if ($this->validateCount($vats)) { $this->vats = $vats; } return $this; } /** * Добавляет новую ставку НДС в массив * * @param Vat $vat Объект ставки НДС * @return $this * @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 array|null $vats Если передать массив, то проверит количество его элементов. * Иначе проверит количество уже присвоенных элементов. * @return bool * @throws AtolTooManyVatsException Слишком много ставок НДС */ protected function validateCount(array $vats = null) { if (($vats && is_array($vats) && count($vats) >= self::MAX_COUNT) || count($this->vats) == self::MAX_COUNT) { throw new AtolTooManyVatsException(self::MAX_COUNT); } return true; } }