public function map($okProduct) { $bfProduct = BfObjectFactory::getInstance("BfProduct", $this->bfVersion); $bfProductFieldsValidators = BfObjectFactory::getValidators("BfProduct", $this->bfVersion); $bfObjectFiller = new BfObjectFiller($bfProduct, $bfProductFieldsValidators, $this->logger); $productAvailability = new OkProductAvailability(); $productAvailability->setLeadtimeToShip($okProduct->leadtime_to_ship); $productAvailability->setQuantity($okProduct->quantity); $bfObjectFiller->putIntoIfValid("MasterProductId", BfDataFormatter::prefixKey($okProduct->sku, $this->idPrefix)); $bfObjectFiller->putIntoIfValid("InternalName", $okProduct->products_products_model); $bfObjectFiller->putIntoIfValid("ProductName", BfDataFormatter::formatName($okProduct->products_description_products_name)); $bfObjectFiller->putIntoIfValid("SalesPitch", $okProduct->products_description_products_informations); if ($okProduct->products_description_products_description == "") { $longDescription = _("No description available"); } else { $longDescription = $okProduct->products_description_products_description; } $bfObjectFiller->putIntoIfValid("LongDescription", $longDescription); $bfObjectFiller->putIntoIfValid("DeliveryInfo", $productAvailability->getStatus()); $discoDate = $productAvailability->getDiscoDate(); if ($discoDate != "") { $bfObjectFiller->putIntoIfValid("DiscoDate", $discoDate); } $bfObjectFiller->putIntoIfValid("PlpLabel", $okProduct->products_products_model); $bfObjectFiller->putIntoIfValid("PdpLabel", $okProduct->products_products_model); $bfObjectFiller->putIntoIfValid("ProductWeight", $okProduct->products_products_weight); $bfObjectFiller->putIntoIfValid("Returnable", "Y"); $bfObjectFiller->putIntoIfValid("Taxable", "Y"); $bfObjectFiller->putIntoIfValid("ChargeShipping", "Y"); $bfObjectFiller->putIntoIfValid("ManufacturerId", BfDataFormatter::prefixKey($okProduct->products_manufacturers_id, $this->idPrefix)); $bfObjectFiller->putIntoIfValid("ProductPrice->ListPrice->Price", BfDataFormatter::formatToDecimal3($okProduct->regular_price)); $bfObjectFiller->putIntoIfValid("ProductPrice->ListPrice->Currency", "EUR"); $bfObjectFiller->putIntoIfValid("ProductPrice->SalesPrice->Price", BfDataFormatter::formatToDecimal3($okProduct->final_price)); $bfObjectFiller->putIntoIfValid("ProductPrice->SalesPrice->Currency", "EUR"); // On prend seulement le premier id de catégorie pour l'instant $okCategoryTree = explode(",", $okProduct->categories_categories_id); $bfObjectFiller->putIntoIfValid("ProductCategoryMember->Category[0]->CategoryId", $okCategoryTree[0]); $bfObjectFiller->putIntoIfValid("ProductCategoryMember->Category[1]->CategoryId", $this->taxCategory); $bfObjectFiller->putIntoIfValid("ProductCategoryMember->Category[2]->CategoryId", $this->viewAllowCategory); $viewAllowTruDate = $productAvailability->getViewAllowThruDate(); if ($viewAllowTruDate != "") { $bfObjectFiller->putIntoIfValid("ProductCategoryMember->Category[2]->ThruDate", $viewAllowTruDate); } $imageUrl = new ImageUrl($okProduct->products_products_image); $bfObjectFiller->putIntoIfValid("ProductImage->PlpSmallImage->Url", $imageUrl->getSquareUrl()); $bfObjectFiller->putIntoIfValid("ProductImage->PdpThumbnailImage->Url", $imageUrl->getThumbnailUrl()); $bfObjectFiller->putIntoIfValid("ProductImage->PdpLargeImage->Url", $imageUrl->getSquareUrl()); $bfObjectFiller->putIntoIfValid("ProductImage->PdpDetailImage->Url", $imageUrl->getHiResUrl()); $bfObjectFiller->putIntoIfValid("ProductGoodIdentification->Sku", $okProduct->sku); $bfObjectFiller->putIntoIfValid("ProductGoodIdentification->Isbn", $okProduct->products_help_ean); $bfObjectFiller->putIntoIfValid("ProductGoodIdentification->ManuId", $okProduct->products_help_marque_ref); $bfObjectFiller->putIntoIfValid("ProductInventory->BigfishInventoryTotal", $okProduct->gros_products_info_gros_products_stock); $bfObjectFiller->putIntoIfValid("ProductInventory->BigfishInventoryWarehouse", $okProduct->gros_products_info_gros_products_stock); $bfProductValidator = new BfProductValidator($this->logger); if (false == $bfProductValidator->isComplete($bfProduct)) { throw new XmlItemMapperException(sprintf("Incomplete product <%s>", $okProduct->sku)); } return $bfProduct; }
public function testMapSuccess() { $okProductsArray = $this->getOkProducts(__DIR__ . "/Data/okProducts.csv", 50); $productAvailability = new OkProductAvailability(); // Create special case for coverage $okProductsArray[1]->products_description_products_description = ""; foreach ($okProductsArray as $index => $okProduct) { $bfProduct = $this->xmlItemMapper->map($okProduct); $productAvailability->setLeadtimeToShip($okProduct->leadtime_to_ship); $productAvailability->setQuantity($okProduct->quantity); $this->assertEquals($productAvailability->getStatus(), $bfProduct->DeliveryInfo); if ($productAvailability->getDiscoDate() != "") { $this->assertEquals(date(OkProductAvailability::DISCO_DATE_FORMAT), $bfProduct->DiscoDate); } else { $this->assertEquals("", $bfProduct->DiscoDate); } $this->assertEquals(BfDataFormatter::prefixKey($okProduct->sku, $this->idPrefix), $bfProduct->MasterProductId); $this->assertEquals($okProduct->products_products_model, $bfProduct->InternalName); $this->assertEquals(BfDataFormatter::formatName($okProduct->products_description_products_name), $bfProduct->ProductName); $this->assertEquals($okProduct->products_description_products_informations, $bfProduct->SalesPitch); if ($okProduct->products_description_products_description == "") { $this->assertEquals(_("No description available"), $bfProduct->LongDescription); } else { $this->assertEquals($okProduct->products_description_products_description, $bfProduct->LongDescription); } $this->assertEquals($okProduct->products_products_model, $bfProduct->PlpLabel); $this->assertEquals($okProduct->products_products_model, $bfProduct->PdpLabel); $this->assertEquals($okProduct->products_products_weight, $bfProduct->ProductWeight); $this->assertEquals("Y", $bfProduct->Returnable); $this->assertEquals("Y", $bfProduct->Taxable); $this->assertEquals("Y", $bfProduct->ChargeShipping); $this->assertEquals(BfDataFormatter::prefixKey($okProduct->products_manufacturers_id, $this->idPrefix), $bfProduct->ManufacturerId); $this->assertEquals(BfDataFormatter::formatToDecimal3($okProduct->regular_price), (double) $bfProduct->ProductPrice->ListPrice->Price); $this->assertEquals("EUR", $bfProduct->ProductPrice->ListPrice->Currency); $this->assertEquals(BfDataFormatter::formatToDecimal3($okProduct->final_price), (double) $bfProduct->ProductPrice->SalesPrice->Price); $this->assertEquals("EUR", $bfProduct->ProductPrice->SalesPrice->Currency); $okCategoryTree = explode(",", $okProduct->categories_categories_id); $this->assertEquals($okCategoryTree[0], $bfProduct->ProductCategoryMember->Category[0]->CategoryId); $this->assertEquals($this->taxCategory, $bfProduct->ProductCategoryMember->Category[1]->CategoryId); $this->assertEquals($this->viewAllowCategory, $bfProduct->ProductCategoryMember->Category[2]->CategoryId); if ($productAvailability->getViewAllowThruDate() != "") { $this->assertEquals(OkProductAvailability::VIEW_ALLOW_EXPIRE_DATE, $bfProduct->ProductCategoryMember->Category[2]->ThruDate); } else { $this->assertEquals("", $bfProduct->ProductCategoryMember->Category[2]->ThruDate); } $imageUrl = new ImageUrl($okProduct->products_products_image); $this->assertEquals($imageUrl->getSquareUrl(), $bfProduct->ProductImage->PlpSmallImage->Url); $this->assertEquals($imageUrl->getThumbnailUrl(), $bfProduct->ProductImage->PdpThumbnailImage->Url); $this->assertEquals($imageUrl->getSquareUrl(), $bfProduct->ProductImage->PdpLargeImage->Url); $this->assertEquals($imageUrl->getHiResUrl(), $bfProduct->ProductImage->PdpDetailImage->Url); $this->assertEquals($okProduct->sku, $bfProduct->ProductGoodIdentification->Sku); $this->assertEquals($okProduct->products_help_ean, $bfProduct->ProductGoodIdentification->Isbn); $this->assertEquals($okProduct->products_help_marque_ref, $bfProduct->ProductGoodIdentification->ManuId); $this->assertEquals($okProduct->quantity, $bfProduct->ProductInventory->BigfishInventoryTotal); $this->assertEquals($okProduct->quantity, $bfProduct->ProductInventory->BigfishInventoryWarehouse); } }