/** * @param array $data * * @return \Generated\Shared\Transfer\ProductAbstractTransfer|\Generated\Shared\Transfer\ProductConcreteTransfer */ protected function generateTypedProduct(array &$data) { if (empty($data[self::PRODUCT_ABSTRACT_REFERENCE])) { $product = new ProductAbstractTransfer(); } else { $product = new ProductConcreteTransfer(); $product->setProductAbstractSku($data[self::PRODUCT_ABSTRACT_REFERENCE]); } unset($data[self::PRODUCT_ABSTRACT_REFERENCE]); unset($data[self::BUNDLED_PRODUCTS_REFERENCES]); //@todo handle bundle creation return $product; }
/** * @param \Generated\Shared\Transfer\WishlistTransfer $wishlist * * @return void */ public function expandProductDetails(WishlistTransfer $wishlist) { foreach ($wishlist->getItems() as $item) { $productData = $this->productClient->getProductAbstractFromStorageByIdForCurrentLocale($item->getIdProductAbstract()); foreach ($productData['product_concrete_collection'] as $product) { if ($product['sku'] !== $item->getSku()) { continue; } $productConcrete = new ProductConcreteTransfer(); $productConcrete->setName($product['name']); $productConcrete->setSku($product['sku']); $productConcrete->setAttributes($product['attributes']); $item->setProductConcrete($productConcrete); } } }
/** * @param \Generated\Shared\Transfer\ProductConcreteTransfer $productConcreteTransfer * * @return bool */ public function writeProduct(ProductConcreteTransfer $productConcreteTransfer) { $this->productStatement->execute([':sku' => $productConcreteTransfer->getSku(), ':isActive' => (int) $productConcreteTransfer->getIsActive(), ':attributes' => json_encode($productConcreteTransfer->getAttributes()), ':productAbstractSku' => $productConcreteTransfer->getProductAbstractSku()]); foreach ($productConcreteTransfer->getLocalizedAttributes() as $localizedAttributes) { $this->attributesStatement->execute([':productSku' => $productConcreteTransfer->getSku(), ':name' => $localizedAttributes->getName(), ':attributes' => json_encode($localizedAttributes->getAttributes()), ':fkLocale' => $this->localeTransfer->getIdLocale()]); } return true; }
/** * @param string $concreteSku * * @throws \Spryker\Zed\Product\Business\Exception\MissingProductException * * @return \Generated\Shared\Transfer\ProductConcreteTransfer */ public function getProductConcrete($concreteSku) { $localeTransfer = $this->localeFacade->getCurrentLocale(); $productConcreteQuery = $this->productQueryContainer->queryProductWithAttributesAndProductAbstract($concreteSku, $localeTransfer->getIdLocale()); $productConcreteQuery->select([self::COL_ID_PRODUCT_CONCRETE, self::COL_ABSTRACT_SKU, self::COL_ID_PRODUCT_ABSTRACT, self::COL_NAME]); $productConcrete = $productConcreteQuery->findOne(); if (!$productConcrete) { throw new MissingProductException(sprintf('Tried to retrieve a product concrete with sku %s, but it does not exist.', $concreteSku)); } $productConcreteTransfer = new ProductConcreteTransfer(); $productConcreteTransfer->setSku($concreteSku)->setIdProductConcrete($productConcrete[self::COL_ID_PRODUCT_CONCRETE])->setProductAbstractSku($productConcrete[self::COL_ABSTRACT_SKU])->setIdProductAbstract($productConcrete[self::COL_ID_PRODUCT_ABSTRACT])->setName($productConcrete[self::COL_NAME]); return $productConcreteTransfer; }
/** * @group ProductCategory * * @return void */ public function testCreateAttributeTypeCreatesAndReturnsId() { $abstractSku = 'AnAbstractTestProduct'; $concreteSku = 'ATestProduct'; $categoryName = 'ATestCategory'; $localeName = 'ABCDE'; $abstractName = 'abstractName'; $categoryKey = '100TEST'; $locale = $this->localeFacade->createLocale($localeName); $productAbstractTransfer = new ProductAbstractTransfer(); $productAbstractTransfer->setSku($abstractSku); $productAbstractTransfer->setAttributes([]); $localizedAttributes = new LocalizedAttributesTransfer(); $localizedAttributes->setAttributes([]); $localizedAttributes->setLocale($locale); $localizedAttributes->setName($abstractName); $productAbstractTransfer->addLocalizedAttributes($localizedAttributes); $idProductAbstract = $this->productFacade->createProductAbstract($productAbstractTransfer); $productConcreteTransfer = new ProductConcreteTransfer(); $productConcreteTransfer->setSku($concreteSku); $productConcreteTransfer->setAttributes([]); $productConcreteTransfer->addLocalizedAttributes($localizedAttributes); $productConcreteTransfer->setIsActive(true); $this->productFacade->createProductConcrete($productConcreteTransfer, $idProductAbstract); $categoryTransfer = new CategoryTransfer(); $categoryTransfer->setName($categoryName); $categoryTransfer->setCategoryKey($categoryKey); $idCategory = $this->categoryFacade->createCategory($categoryTransfer, $locale); $categoryNodeTransfer = new NodeTransfer(); $categoryNodeTransfer->setFkCategory($idCategory); $categoryNodeTransfer->setIsRoot(true); $this->categoryFacade->createCategoryNode($categoryNodeTransfer, $locale, false); $this->productCategoryFacade->createProductCategoryMapping($abstractSku, $categoryName, $locale); $this->assertTrue($this->productCategoryFacade->hasProductCategoryMapping($abstractSku, $categoryName, $locale)); }
/** * @group Product * * @return void */ public function testGetAbstractSkuFromProductConcrete() { $this->assertFalse($this->productFacade->hasProductConcrete(self::SKU_PRODUCT_CONCRETE)); $productAbstract = new ProductAbstractTransfer(); $productAbstract->setSku(self::SKU_PRODUCT_ABSTRACT); $productAbstract->setAttributes([]); $productAbstract->addLocalizedAttributes($this->createLocalizedAttributesTransfer()); $idProductAbstract = $this->productFacade->createProductAbstract($productAbstract); $productConcrete = new ProductConcreteTransfer(); $productConcrete->setSku(self::SKU_PRODUCT_CONCRETE); $productConcrete->setAttributes([]); $productConcrete->addLocalizedAttributes($this->createLocalizedAttributesTransfer()); $productConcrete->setIsActive(true); $this->productFacade->createProductConcrete($productConcrete, $idProductAbstract); $this->assertTrue($this->productFacade->hasProductConcrete(self::SKU_PRODUCT_CONCRETE)); $this->assertEquals($this->productFacade->getAbstractSkuFromProductConcrete(self::SKU_PRODUCT_CONCRETE), self::SKU_PRODUCT_ABSTRACT); }
/** * @param \Generated\Shared\Transfer\ItemTransfer $wishlistItemTransfer * @param int $idWishlist * @param \Generated\Shared\Transfer\ProductConcreteTransfer $productConcreteTransfer * * @return \Orm\Zed\Wishlist\Persistence\SpyWishlistItem */ protected function createNewWishlistItem(ItemTransfer $wishlistItemTransfer, $idWishlist, ProductConcreteTransfer $productConcreteTransfer) { $wishlistItemEntity = new SpyWishlistItem(); $wishlistItemEntity->setGroupKey($wishlistItemTransfer->getGroupKey()); $wishlistItemEntity->setFkProduct($productConcreteTransfer->getIdProductConcrete()); $wishlistItemEntity->setFkProductAbstract($productConcreteTransfer->getIdProductAbstract()); $wishlistItemEntity->setFkWishlist($idWishlist); $wishlistItemEntity->setQuantity($wishlistItemTransfer->getQuantity()); $wishlistItemEntity->setAddedAt(new \DateTime()); $wishlistItemEntity->save(); return $wishlistItemEntity; }
/** * @return \PHPUnit_Framework_MockObject_MockObject|\Spryker\Zed\Wishlist\Dependency\Facade\WishlistToProductInterface */ protected function getProductFacadeMock() { $productFacadeMock = $this->getMockBuilder(WishlistToProductBridge::class)->disableOriginalConstructor()->getMock(); $productConcrete = new ProductConcreteTransfer(); $productConcrete->setIdProductAbstract(1); $productConcrete->setIdProductConcrete(1); $productFacadeMock->expects($this->any())->method('getProductConcrete')->will($this->returnValue($productConcrete)); return $productFacadeMock; }
/** * @return void */ public function testExpandItemsMustAddTaxSetToAllCartItemsIfPRoductHasTaxSet() { $changeTransfer = $this->getChangeTransfer(); $productTaxRate = 19; $productConcreteTransfer = new ProductConcreteTransfer(); $productConcreteTransfer->setTaxRate($productTaxRate); $productManager = $this->getProductManager($productConcreteTransfer); $result = $productManager->expandItems($changeTransfer); $changedItemTransfer = $result->getItems()[0]; $this->assertSame($productConcreteTransfer->getTaxRate(), $changedItemTransfer->getTaxRate()); }