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