/** * Generates a ShopgateCartItem for the checkCart Response * * @param Mage_Catalog_Model_Product $product * @param boolean $isBuyable * @param int $qtyBuyable * @param int|float $priceExclTax * @param int|float $priceInclTax * @param array $errors * @param bool $stockQuantity * * @return ShopgateCartItem */ public function generateShopgateCartItem($product, $isBuyable = false, $qtyBuyable = 0, $priceInclTax = 0, $priceExclTax = 0, $errors = array(), $stockQuantity = false) { $item = new ShopgateCartItem(); $item->setItemNumber($product->getShopgateItemNumber()); $item->setOptions($product->getShopgateOptions()); $item->setInputs($product->getShopgateInputs()); $item->setAttributes($product->getShhopgateAttributes()); $item->setIsBuyable((int) $isBuyable); $item->setQtyBuyable($qtyBuyable); $item->setStockQuantity($stockQuantity); $item->setUnitAmount($priceExclTax); $item->setUnitAmountWithTax($priceInclTax); foreach ($errors as $error) { $item->setError($error['type']); $item->setErrorText($error['message']); } return $item; }
/** * @param $cart * @return array */ protected function _addItems($cart) { $resultItems = array(); foreach ($cart->getItems() as $item) { list($productId, $attributeId) = ShopgateHelper::getProductIdentifiers($item); /** @var ProductCore $product */ $product = new Product($productId); $resultItem = new ShopgateCartItem(); $resultItem->setItemNumber($item->getItemNumber()); $resultItem->setStockQuantity($product->getQuantity($product->id, $attributeId)); $resultItem->setUnitAmount($product->getPrice(false, $attributeId)); $resultItem->setUnitAmountWithTax($product->getPrice(true, $attributeId)); $resultItem->setOptions($item->getOptions()); $resultItem->setAttributes($item->getAttributes()); $resultItem->setInputs($item->getInputs()); /** * validate product */ if (!$this->_validateProduct($product, $attributeId)) { $this->_addItemException($resultItem, ShopgateLibraryException::CART_ITEM_PRODUCT_NOT_FOUND, sprintf('ProductId #%s AttributeId #%s', $productId, $attributeId)); $resultItems[] = $resultItem; continue; } $addItemResult = $this->getPlugin()->getContext()->cart->updateQty($item->getQuantity(), $productId, $attributeId, false, 'up', $this->_deliveryAddress && $this->_deliveryAddress->id ? $this->_deliveryAddress->id : 0); $this->getPlugin()->getContext()->cart->save(); if ($addItemResult != 1) { $resultItem->setIsBuyable(false); $resultItem->setQtyBuyable($product->getQuantity($productId, $attributeId)); /** * add error */ switch ($addItemResult) { case -1: $resultItem->setQtyBuyable($attributeId ? (int) Attribute::getAttributeMinimalQty($attributeId) : (int) $product->minimal_quantity); $minimalQuantity = $attributeId ? (int) Attribute::getAttributeMinimalQty($attributeId) : (int) $product->minimal_quantity; $this->_addItemException($resultItem, ShopgateLibraryException::CART_ITEM_REQUESTED_QUANTITY_UNDER_MINIMUM_QUANTITY, sprintf(Tools::displayError('You must add %d minimum quantity'), $minimalQuantity)); break; default: $this->_addItemException($resultItem, ShopgateLibraryException::CART_ITEM_REQUESTED_QUANTITY_NOT_AVAILABLE, Tools::displayError('There isn\'t enough product in stock.')); break; } } else { $resultItem->setIsBuyable(true); $resultItem->setQtyBuyable((int) $item->getQuantity()); } $resultItems[] = $resultItem; } return $resultItems; }