Jump to content

Welcome, Guest!

By registering with us, you'll be able to discuss, share and private message with other members of our community.

  • 0
smarterweb

customized products bug in cart

Question

in TB 1.0.3: when you add say 3 text fields for customization in BO product and you add to cart, the sub-total line in cart shows the wrong price. however the total shows the correct amount: 0_1515707933857_2018-01-12 10_58_22-Order - My Store.jpg

Share this post


Link to post
Share on other sites

13 answers to this question

Recommended Posts

  • 0

I have confirmed your issue. Lets hope they can find a solution for it soon. As a matter of fact I found another error on doing so. When I try to decrease the number of items, I get this... 0_1515787546238_Capture.PNG

Share this post


Link to post
Share on other sites
  • 0

The problem lies in classes/Cart.php, when I take the one from ps1.6.1.17 it works fine. So...more looking into it.

Share this post


Link to post
Share on other sites
  • 0

Might be something minor just like the Webservice issue that was fixed the other day.

Share this post


Link to post
Share on other sites
  • 0

This seems to have fixed it for me, give it a try...

Replace the function in /classes/Cart.php, protected function updateCustomizationQuantity, with the following code.. ``` protected function _updateCustomizationQuantity($quantityChange, $idCustomization, $idProduct, $idProductAttribute, $idAddressDelivery, $operator = 'up') { // Link customization to product combination when it is first added to cart if (empty($idCustomization)) { $customization = $this->getProductCustomization($idProduct, null, true); foreach ($customization as $field) { if ($field['quantity'] == 0) { Db::getInstance()->execute(' UPDATE '._DB_PREFIX_.'customization SET quantity = '.(int) $quantityChange.', id_product_attribute = '.(int) $idProductAttribute.', id_address_delivery = '.(int) $idAddressDelivery.', in_cart = 1 WHERE id_customization = '.(int) $field['idcustomization']); } } }

    /* Deletion */
    if (!empty($idCustomization) && (int) $quantityChange < 1) {
        return $this->_deleteCustomization((int) $idCustomization, (int) $idProduct, (int) $idProductAttribute);
    }

    /* Quantity update */
    if (!empty($idCustomization)) {
        $result = Db::getInstance()->getRow('SELECT `quantity` FROM `'._DB_PREFIX_.'customization` WHERE `id_customization` = '.(int) $idCustomization);
        if ($result && Db::getInstance()->NumRows()) {
            if ($operator == 'down' && (int)$result['quantity'] - (int) $quantityChange < 1) {
                return Db::getInstance()->execute('DELETE FROM `'._DB_PREFIX_.'customization` WHERE `id_customization` = '.(int) $idCustomization);
            }

            return Db::getInstance()->execute('
                UPDATE `'._DB_PREFIX_.'customization`
                SET
                    `quantity` = `quantity` '.($operator == 'up' ? '+ ' : '- ').(int) $quantityChange.',
                    `id_address_delivery` = '.(int) $idAddressDelivery.',
                    `in_cart` = 1
                WHERE `id_customization` = '.(int) $idCustomization);
        } else {
            Db::getInstance()->execute('
                UPDATE `'._DB_PREFIX_.'customization`
                SET `id_address_delivery` = '.(int) $idAddressDelivery.',
                `in_cart` = 1
                WHERE `id_customization` = '.(int) $idCustomization);
        }
    }
    // refresh cache of static::_products
    $this->_products = $this->getProducts(true);
    $this->update();

    return true;
}

``` if this works for everyone, I'll make a pull request for it..

Share this post


Link to post
Share on other sites
  • 0

It seems like it works for me, I dont understand I guess what you're saying. I can add, and delete items in the cart with no issue. If this fix isn't the correct solution, at least we know the function causing the issue, and you can fix it. I made a video about it, but cant seem to share it here anymore. ;( Maybe this will work.. https://vimeo.com/250966125

Share this post


Link to post
Share on other sites
  • 0

@mdekker I've commented on few lines in github on Cart.php. Check them when you have time, because I believe they might help.

Share this post


Link to post
Share on other sites
  • 0

How about this one, it only changes two lines from the original 1.0.x file ``` protected function updateCustomizationQuantity($quantityChange, $idCustomization, $idProduct, $idProductAttribute, $idAddressDelivery, $operator = 'up') { // Link customization to product combination when it is first added to cart if (empty($idCustomization) && $operator === 'up') { $customization = $this->getProductCustomization($idProduct, null, true); foreach ($customization as $field) { if ((int) $field['quantity'] === 0) { Db::getInstance()->update( 'customization', [ 'quantity' => (int) $quantityChange, 'idproduct' => (int) $idProduct, 'idproductattribute' => (int) $idProductAttribute, 'idaddressdelivery' => (int) $idAddressDelivery, 'incart' => true, ], 'id_customization = '.(int) $field['idcustomization'] ); } } }

    /* Quantity update */
    if (!empty($idCustomization)) {
        $result = (int) Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue(
            (new DbQuery())
                ->select('`quantity`')
                ->from('customization')
                ->where('`id_customization` = '.(int) $idCustomization)
        );

        if ($operator === 'down' && ((int) $result - (int) $quantityChange) < 1) {
            return Db::getInstance()->delete('customization', '`id_customization` = '.(int) $idCustomization);
        }

        return Db::getInstance()->update(
            'customization',
            [
                'quantity'            => ['type' => 'sql', 'value' => '`quantity` '.($operator === 'up' ? '+' : '-').(int) $quantityChange],
                'id_address_delivery' => (int) $idAddressDelivery,
                'in_cart'             => true,
            ],
            '`id_customization` = '.(int) $idCustomization
        );
    }
    // refresh cache of static::_products
    $this->_products = $this->getProducts(true);
    $this->update();

    return true;
}

```

Share this post


Link to post
Share on other sites
  • 0

yes, for me this fixes the problem with wrong sub totals in cart and also when you delete the customized product from the cart, it removes the product completely (as intended I guess...)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...