isEnableFractional()) { return $this->getFractionalApi()->decodeCount($count, $unit_id, $cast_default); } return $count; } /** * Метод преобразуют количество из эмулированного для пользователя в реальное от базовой единицы * * @param float|int|string $count Количество для конвертации * @param string $unit_id Единица измерения для конвертации от базовой * @param string|null $cast_default Для бесконечного количества вернуть по умолчанию строку или null * * @return float|int|string */ public function encodeCount(&$count, $unit_id, $cast_default = '') { if($this->isEnableFractional()) { return $this->getFractionalApi()->encodeCount($count, $unit_id, $cast_default); } return $count; } /** * Перевод количества для показа пользователю * * @uses shopZzzfractionalPluginStrategyEmulate::emulateItemsCount() * * @param array $items Массив позиций корзины или заказа * * @return array $items */ public function decodeItemsCount(&$items) { if($this->isEnableFractional()) { return $this->getFractionalApi()->decodeItemsCount($items); } return $items; } /** * Кодирование количества для запись в бд * * @uses shopZzzfractionalPluginStrategyEmulate::emulateItemsCount() * * @param array $items Массив позиций корзины или заказа * * @return array $items */ public function encodeItemsCount(&$items) { if($this->isEnableFractional()) { return $this->getFractionalApi()->encodeItemsCount($items); } return $items; } /** * Добавляет данные дробности для работы с дробями * добавляет вес, единицу измерения, кратность * * @param array $items * * @return array $items */ public function addItemsData(&$items = array()) { if($this->isEnableFractional()) { return $this->getFractionalApi()->addItemsData($items); } return $items; } /** * Конвертация количества в видимое * * @uses shopZzzfractionalPluginStrategyEmulate::emulateItemCount() * @param array $item - Массив данных позиции заказа или корзины * @param null|array|shopProduct $product - Массив или объект продукта, чтобы не делать лишнего запроса, * если не передан, будет получен из $item по product_id * * @return array $item Вернет позицию с преобразованныи количеством и весом */ public function decodeItemCount(&$item, $product = null) { if($this->isEnableFractional()) { return $this->getFractionalApi()->decodeItemCount($item, $product); } return $item; } /** * Приведение количества для запись в бд * * @uses shopZzzfractionalPluginStrategyEmulate::emulateItemCount() * * @param array $item - Массив данных позиции заказа или корзины * @param null|array|shopProduct $product - Массив или объект продукта, чтобы не делать лишнего запроса, * если не передан, будет получен из $item по product_id * * @return array $item Вернет позицию с преобразованныи количеством и весом для записи в бд */ public function encodeItemCount(&$item, $product = null) { if($this->isEnableFractional()) { return $this->getFractionalApi()->encodeItemCount($item, $product); } return $item; } /** * Конвертация количества остатков, артикулов продукта в видимое * * @uses shopZzzfractionalPluginStrategyEmulate::emulateProducts() * * @param array|shopProduct[] $products * * @return array|shopProduct[] $products */ public function decodeProducts(&$products) { if($this->isEnableFractional()) { return $this->getFractionalApi()->decodeProducts($products); } return $products; } /** * Приведение количества остатков, артикулов продукта для запись в бд * * @uses shopZzzfractionalPluginStrategyEmulate::emulateProducts() * * @param array|shopProduct[] $products * * @return array|shopProduct[] $products */ public function encodeProducts(&$products) { if($this->isEnableFractional()) { return $this->getFractionalApi()->encodeProducts($products); } return $products; } /** * Конвертация количества в видимое * * @uses decodeProducts() * * @param array|shopProduct $product * * @return array|shopProduct $product */ public function decodeProduct(&$product) { if($this->isEnableFractional()) { return $this->getFractionalApi()->decodeProduct($product); } return $product; } /** * Приведение количества для запись в бд * * @uses encodeProducts() * * @param array|shopProduct $product * * @return array|shopProduct $product */ public function encodeProduct(&$product) { if($this->isEnableFractional()) { return $this->getFractionalApi()->encodeProduct($product); } return $product; } /** * Конвертация количества в видимое * * @param array $skus * * @return array $skus */ public function decodeSkus(&$skus) { if($this->isEnableFractional()) { return $this->getFractionalApi()->decodeSkus($skus); } return $skus; } /** * Приведение количества для запись в бд * * @param array $skus * * @return array $skus */ public function encodeSkus(&$skus) { if($this->isEnableFractional()) { return $this->getFractionalApi()->encodeSkus($skus); } return $skus; } /** * Конвертация количества в видимое * @see decodeSkus() * * @param array $sku * * @return array $sku */ public function decodeSku(&$sku) { if($this->isEnableFractional()) { return $this->getFractionalApi()->decodeSku($sku); } return $sku; } /** * Приведение количества для запись в бд * @see encodeSkus() * * @param array $sku * * @return array $sku */ public function encodeSku(&$sku) { if($this->isEnableFractional()) { return $this->getFractionalApi()->encodeSku($sku); } return $sku; } /** * @param $count * @param $product_data * @param $error - переменнкая по ссылке возвращает текст ошибки * * @return float|int|string $count */ public function encodeAndCastCountByProduct(&$count, $product_data, &$error = null) { if($this->isEnableFractional()) { return $this->getFractionalApi()->encodeAndCastCountByProduct($count, $product_data, $error); } return $count; } /** * @param $count * @param $product_data * @param $error - переменнкая по ссылке возвращает текст ошибки * * @return float|int|string $count */ public function decodeAndCastCountByProduct(&$count, $product_data, &$error = null) { if($this->isEnableFractional()) { return $this->getFractionalApi()->decodeAndCastCountByProduct($count, $product_data, $error); } return $count; } /** * Приводит количество к кратному для покупки * * @param int|float|string $count Переданное количество * @param array|shopProduct $product_data Данные продукта для вычисления кратности * @param null $error Переменная в которую будет помещено уведомление о кратности * * @return float|int|string $count */ public function castCountByProduct(&$count, $product_data, &$error) { if($this->isEnableFractional()) { return $this->getFractionalApi()->castCountByProduct($count, $product_data, $error); } return $count; } /** * Приводит количество к кратному для покупки при добавлении в корзину * выполняет рповерку наличия на складе, приводит к кратности покупки * * @param int|float|string $quantity Переданное количество * @param int $sku_id Артикул * @param int $product_id ID продукта чтобы не делать лишний запрос в базу через sku_id * @param null $error Переменная в которую будет помещено уведомление о кратности или наличии * * @return float|int|string $quantity */ public function encodeCartAddQuantity(&$quantity, $sku_id, $product_id = null, &$error) { if($this->isEnableFractional()) { return $this->getFractionalApi()->encodeCartAddQuantity($quantity, $sku_id, $product_id, $error); } return $quantity; } /** * Приводит количество к кратному для покупки при изменении количкства в корзине * выполняет проверку наличия на складе, приводит к кратности покупки * * @param int|float|string $quantity Переданное количество * @param int $sku_id Артикул * @param int $product_id ID продукта чтобы не делать лишний запрос в базу через sku_id * @param null $error Переменная в которую будет помещено уведомление о кратности или наличии * * @return int $quantity */ public function encodeCartSaveQuantity(&$quantity, $sku_id, $product_id = null, &$error) { if($this->isEnableFractional()) { return $this->getFractionalApi()->encodeCartSaveQuantity($quantity, $sku_id, $product_id, $error); } return $quantity; } /** * @param null|bool $flag * @return void */ public function setConvert($flag = null) { if($this->isEnableFractional()) { $this->getFractionalApi()->setConvert($flag); } } /** * Устанавливает тип в котором будет возвращено преобразованное количество * * @param string $type * @return void */ public function returnValueType($type = shopZzzfractionalPluginConfig::RETURN_VALUE_TYPE_NUMERIC) { if($this->isEnableFractional()) { $this->getFractionalApi()->returnValueType($type); } } /** * Приводит к строке если стоит конвертация в строку * * @see returnValueType() * @param string|int|float $value * * @return string|int|float $value */ public function castReturnValue(&$value) { if($this->isEnableFractional()) { $this->getFractionalApi()->castReturnValue($value); } return $value; } /** * Возвращает ключ единицы измерения * * @return string ('unit') */ public function unitKey() { if($this->isEnableFractional()) { $this->getFractionalApi()->unitKey(); } return 'unit'; } /** * Возвращает ключ единицы кратности покупки * * @return string ('unit_multiplicity') */ public function multiplicityKey() { if($this->isEnableFractional()) { $this->getFractionalApi()->multiplicityKey(); } return 'unit_multiplicity'; } /** * Возвращает ключ единицы кратности покупки * * @return string ('zzzfractional_weight') */ public function weightKey() { if($this->isEnableFractional()) { $this->getFractionalApi()->weightKey(); } return 'zzzfractional_weight'; } protected function isEnableFractional() { if(static::$enable_zzzfractional_api === null) { static::$enable_zzzfractional_api = (class_exists('shopZzzfractionalPlugin') && shopZzzfractionalPlugin::isOn()); } return static::$enable_zzzfractional_api; } /** * @return shopZzzfractionalPluginStrategyPublicInterface|null */ protected function getFractionalApi() { if(class_exists('shopZzzfractionalPlugin') && shopZzzfractionalPlugin::isOn()) { return wao(new shopZzzfractionalPluginFactory())->getStrategy(); } return null; } }