/**
  * @param \stdClass $jsonObject
  * @param ModelFactoryInterface $factory
  *
  * @return static
  */
 public static function createFromJson(\stdClass $jsonObject, ModelFactoryInterface $factory)
 {
     $productSearchResult = new static();
     $productSearchResult->pageHash = $jsonObject->pageHash;
     $productSearchResult->productCount = $jsonObject->product_count;
     $productSearchResult->rawFacets = $jsonObject->facets;
     foreach ($jsonObject->products as $key => $jsonProduct) {
         $productSearchResult->products[$key] = $factory->createProduct($jsonProduct);
     }
     $productSearchResult->parseFacets($jsonObject->facets, $factory);
     return $productSearchResult;
 }
 /**
  * @param \stdClass $jsonObject
  * @param ModelFactoryInterface $factory
  *
  * @return static
  */
 public static function createFromJson(\stdClass $jsonObject, ModelFactoryInterface $factory)
 {
     $productsEansResult = new static();
     $productsEansResult->pageHash = isset($jsonObject->pageHash) ? $jsonObject->pageHash : null;
     if (isset($jsonObject->eans)) {
         foreach ($jsonObject->eans as $jsonProduct) {
             if (isset($jsonProduct->error_code)) {
                 $productsEansResult->errors[] = $jsonProduct;
                 $productsEansResult->eansNotFound = array_merge($productsEansResult->eansNotFound, $jsonProduct->ean);
                 continue;
             }
             $productsEansResult->products[] = $factory->createProduct($jsonProduct);
         }
     }
     return $productsEansResult;
 }
 /**
  * @param \stdClass $jsonObject
  * @param ModelFactoryInterface $factory
  *
  * @return static
  */
 public static function createFromJson(\stdClass $jsonObject, ModelFactoryInterface $factory)
 {
     $productsResult = new static();
     $productsResult->pageHash = isset($jsonObject->pageHash) ? $jsonObject->pageHash : null;
     if (isset($jsonObject->ids)) {
         foreach ($jsonObject->ids as $key => $jsonProduct) {
             if (isset($jsonProduct->error_code)) {
                 $productsResult->idsNotFound[] = $key;
                 $productsResult->errors[] = $jsonProduct;
                 continue;
             }
             $productsResult->products[$key] = $factory->createProduct($jsonProduct);
         }
     }
     return $productsResult;
 }
 protected static function parseStyles($jsonObject, ModelFactoryInterface $factory)
 {
     $styles = [];
     if (!empty($jsonObject->styles)) {
         foreach ($jsonObject->styles as $style) {
             $styles[] = $factory->createProduct($style);
         }
     }
     return $styles;
 }
 /**
  * parse autocompleted products.
  *
  * @param \stdClass $jsonObject
  * @param ModelFactoryInterface $factory
  *
  * @return Products[]
  */
 protected static function parseProducts(\stdClass $jsonObject, ModelFactoryInterface $factory)
 {
     if (!property_exists($jsonObject, 'products')) {
         return self::NOT_REQUESTED;
     }
     if ($jsonObject->products === null) {
         return array();
     }
     $products = array();
     foreach ($jsonObject->products as $product) {
         $products[] = $factory->createProduct($product);
     }
     return $products;
 }
 protected function parseItems($jsonObject, ModelFactoryInterface $factory)
 {
     $products = array();
     if (!empty($jsonObject->products)) {
         foreach ($jsonObject->products as $productId => $jsonProduct) {
             $products[$productId] = $factory->createProduct($jsonProduct);
         }
     }
     $this->products = $products;
     $vids = array();
     if (!empty($jsonObject->order_lines)) {
         foreach ($jsonObject->order_lines as $index => $jsonItem) {
             if (isset($jsonItem->set_items)) {
                 $item = $factory->createBasketSet($jsonItem, $products);
             } else {
                 $vids[] = $jsonItem->variant_id;
                 $item = $factory->createBasketItem($jsonItem, $products);
             }
             if ($item->hasErrors()) {
                 $this->errors[$index] = $item;
             } else {
                 $this->items[$item->getId()] = $item;
             }
         }
     }
     $vids = array_values(array_unique($vids));
     $this->uniqueVariantCount = count($vids);
 }