Esempio n. 1
0
    protected function _updateCustomizationQuantity($quantity, $id_customization, $id_product, $id_product_attribute, $id_address_delivery, $operator = 'up', $id_cart_product = 0)
    {
        // Link customization to product combination when it is first added to cart
        if (empty($id_customization)) {
            $customization = $this->getProductCustomization($id_product, null, true);
            foreach ($customization as $field) {
                if ($field['quantity'] == 0) {
                    $qty_policy = PP::productQtyPolicy($id_product);
                    $q = PP::normalizeQty($quantity, $qty_policy);
                    Db::getInstance()->execute('
					UPDATE `' . _DB_PREFIX_ . 'customization`
					SET `quantity` = ' . (PP::qtyPolicyLegacy($qty_policy) ? $q : 1) . ',
						`quantity_fractional` = ' . (PP::qtyPolicyLegacy($qty_policy) ? 0 : $q) . ',
						`id_cart_product` = ' . (int) $id_cart_product . ',
						`id_product_attribute` = ' . (int) $id_product_attribute . ',
						`id_address_delivery` = ' . (int) $id_address_delivery . ',
						`in_cart` = 1
					WHERE `id_customization` = ' . (int) $field['id_customization']);
                }
            }
        }
        /* Deletion */
        if (!empty($id_customization) && (int) $quantity < 1) {
            return $this->_deleteCustomization((int) $id_customization, (int) $id_product, (int) $id_product_attribute);
        }
        /* Quantity update */
        if (!empty($id_customization)) {
            $result = Db::getInstance()->getRow('SELECT `quantity` FROM `' . _DB_PREFIX_ . 'customization` WHERE `id_customization` = ' . (int) $id_customization);
            if ($result && Db::getInstance()->NumRows()) {
                if ($operator == 'down' && (int) $result['quantity'] - (int) $quantity < 1) {
                    return Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'customization` WHERE `id_customization` = ' . (int) $id_customization);
                }
                return Db::getInstance()->execute('
					UPDATE `' . _DB_PREFIX_ . 'customization`
					SET
						`quantity` = `quantity` ' . ($operator == 'up' ? '+ ' : '- ') . (int) $quantity . ',
						`id_address_delivery` = ' . (int) $id_address_delivery . '
					WHERE `id_customization` = ' . (int) $id_customization);
            } else {
                Db::getInstance()->execute('
					UPDATE `' . _DB_PREFIX_ . 'customization`
					SET `id_address_delivery` = ' . (int) $id_address_delivery . '
					WHERE `id_customization` = ' . (int) $id_customization);
            }
        }
        // refresh cache of self::_products
        $this->_products = $this->getProducts(true);
        $this->update();
        return true;
    }