Beispiel #1
0
 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()
 {
     $okProductsUpdatesArray = $this->getOkProductsUpdates(50);
     $productAvailability = new OkProductAvailability();
     // Create specials cases for coverage
     $okProductsUpdatesArray[1]->products_description_products_description = "";
     $okProductsUpdatesArray[2]->leadtime_to_ship = 0;
     $okProductsUpdatesArray[2]->quantity = 0;
     foreach ($okProductsUpdatesArray as $index => $okProductUpdate) {
         $bfProductsUpdate = $this->xmlItemMapper->map($okProductUpdate);
         $productAvailability->setLeadtimeToShip($okProductUpdate->leadtime_to_ship);
         $productAvailability->setQuantity($okProductUpdate->quantity);
         $this->assertEquals($productAvailability->getStatus(), $bfProductsUpdate->DeliveryInfo);
         if ($productAvailability->getDiscoDate() != "") {
             $this->assertEquals(date(OkProductAvailability::DISCO_DATE_FORMAT), $bfProductsUpdate->DiscoDate);
         } else {
             $this->assertEquals("", $bfProductsUpdate->DiscoDate);
         }
         $this->assertEquals(BfDataFormatter::prefixKey($okProductUpdate->sku, $this->idPrefix), $bfProductsUpdate->MasterProductId);
         $this->assertEquals("", $bfProductsUpdate->ProductId);
         if ($okProductUpdate->products_description_products_description == "") {
             $this->assertEquals(_("No description available"), $bfProductsUpdate->LongDescription);
         } else {
             $this->assertEquals($okProductUpdate->products_description_products_description, $bfProductsUpdate->LongDescription);
         }
         $this->assertEquals(BfDataFormatter::formatToDecimal3($okProductUpdate->regular_price), (double) $bfProductsUpdate->ProductPrice->ListPrice->Price);
         $this->assertEquals("EUR", $bfProductsUpdate->ProductPrice->ListPrice->Currency);
         $this->assertEquals(BfDataFormatter::formatToDecimal3($okProductUpdate->final_price), (double) $bfProductsUpdate->ProductPrice->SalesPrice->Price);
         $this->assertEquals("EUR", $bfProductsUpdate->ProductPrice->SalesPrice->Currency);
         $okCategoryTree = explode(",", $okProductUpdate->categories_categories_id);
         $this->assertEquals($okCategoryTree[0], $bfProductsUpdate->ProductCategoryMember->Category[0]->CategoryId);
         $this->assertEquals($this->taxCategory, $bfProductsUpdate->ProductCategoryMember->Category[1]->CategoryId);
         $this->assertEquals($this->viewAllowCategory, $bfProductsUpdate->ProductCategoryMember->Category[2]->CategoryId);
         if ($productAvailability->getViewAllowThruDate() != "") {
             $this->assertEquals(OkProductAvailability::VIEW_ALLOW_EXPIRE_DATE, $bfProductsUpdate->ProductCategoryMember->Category[2]->ThruDate);
         } else {
             $this->assertEquals("", $bfProductsUpdate->ProductCategoryMember->Category[2]->ThruDate);
         }
         $stockValue = str_pad($okProductUpdate->quantity, 10, "0", STR_PAD_LEFT);
         $this->assertEquals($stockValue, $bfProductsUpdate->ProductInventory->BigfishInventoryTotal);
         $this->assertEquals($stockValue, $bfProductsUpdate->ProductInventory->BigfishInventoryWarehouse);
     }
 }
 public function map($okProductUpdate)
 {
     $bfProductUpdate = BfObjectFactory::getInstance("BfProductUpdate", $this->bfVersion);
     $bfProductUpdateFieldsValidators = BfObjectFactory::getValidators("BfProductUpdate", $this->bfVersion);
     $bfObjectFiller = new BfObjectFiller($bfProductUpdate, $bfProductUpdateFieldsValidators, $this->logger);
     $productAvailability = new OkProductAvailability();
     $productAvailability->setLeadtimeToShip($okProductUpdate->leadtime_to_ship);
     $productAvailability->setQuantity($okProductUpdate->quantity);
     $bfObjectFiller->putIntoIfValid("MasterProductId", BfDataFormatter::prefixKey($okProductUpdate->sku, $this->idPrefix));
     if ($okProductUpdate->products_description_products_description == "") {
         $longDescription = _("No description available");
     } else {
         $longDescription = $okProductUpdate->products_description_products_description;
     }
     $bfObjectFiller->putIntoIfValid("LongDescription", $longDescription);
     $bfObjectFiller->putIntoIfValid("DeliveryInfo", $productAvailability->getStatus());
     $discoDate = $productAvailability->getDiscoDate();
     if ($discoDate != "") {
         $bfObjectFiller->putIntoIfValid("DiscoDate", $discoDate);
     }
     $bfObjectFiller->putIntoIfValid("ProductPrice->ListPrice->Price", BfDataFormatter::formatToDecimal3($okProductUpdate->regular_price));
     $bfObjectFiller->putIntoIfValid("ProductPrice->ListPrice->Currency", "EUR");
     $bfObjectFiller->putIntoIfValid("ProductPrice->SalesPrice->Price", BfDataFormatter::formatToDecimal3($okProductUpdate->final_price));
     $bfObjectFiller->putIntoIfValid("ProductPrice->SalesPrice->Currency", "EUR");
     // On prend seulement le premier id de catégorie pour l'instant
     $okCategoryTree = explode(",", $okProductUpdate->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);
     }
     $bfObjectFiller->putIntoIfValid("ProductInventory->BigfishInventoryTotal", $okProductUpdate->quantity);
     $bfObjectFiller->putIntoIfValid("ProductInventory->BigfishInventoryWarehouse", $okProductUpdate->quantity);
     $bfProductValidator = new BfProductValidator($this->logger);
     if (false == $bfProductValidator->isComplete($bfProductUpdate)) {
         throw new XmlItemMapperException(sprintf("Incomplete product update <%s>", $okProductUpdate->sku));
     }
     return $bfProductUpdate;
 }
 public function testMapProduct_ProductAvailabilityOptions()
 {
     $okProductsArray = $this->getOkProducts(__DIR__ . "/Data/availability-import-data-01.csv", 50);
     $productAvailability = new OkProductAvailability();
     foreach ($okProductsArray as $index => $okProduct) {
         $bfProduct = $this->xmlItemMapper->map($okProduct);
         $productAvailability->setLeadtimeToShip($okProduct->leadtime_to_ship);
         $productAvailability->setQuantity($okProduct->quantity);
         // Disco Date
         if ($productAvailability->isInactive() || $productAvailability->isOutOfStock()) {
             $this->assertEquals(date("Y-m-d 00:00:00"), $bfProduct->DiscoDate, 0, 10);
         } else {
             $this->assertEquals("", $bfProduct->DiscoDate);
         }
         // ViewAllow Category
         if ($productAvailability->isInactive()) {
             $this->assertEquals(date("2015-01-01 00:00:00"), $bfProduct->ProductCategoryMember->Category[2]->ThruDate);
             // disabled
         } else {
             $this->assertEquals("", $bfProduct->ProductCategoryMember->Category[2]->ThruDate);
             // enabled
         }
     }
 }