/**
  * @param $item
  * @param $product
  */
 public function addPictures($item, Product $product)
 {
     $result = [];
     foreach ($product->getPictures() as $pictureUrl) {
         $result[] = $pictureUrl;
     }
     if (count($result) > 0) {
         $item->PictureDetails = new PictureDetailsType();
         $item->PictureDetails->GalleryType = GalleryTypeCodeType::C_GALLERY;
         $item->PictureDetails->PictureURL = $result;
     }
 }
 public function __construct($data)
 {
     parent::__construct($data);
     $this->productType = $data['productType'];
     $this->msrp = $data['price'];
 }
 /**
  * @param Product $product
  * @return \DTS\eBaySDK\Trading\Types\AddFixedPriceItemResponseType
  */
 public function post(Product $product)
 {
     $request = new AddFixedPriceItemRequestType();
     $request = $this->addAuthToRequest($request);
     $item = new ItemType();
     $item->ListingType = ListingTypeCodeType::C_FIXED_PRICE_ITEM;
     // Renew the item every 30 days until the user cancels it
     $item->ListingDuration = ListingDurationCodeType::C_GTC;
     $item->InventoryTrackingMethod = 'SKU';
     $item->Title = $product->getTitle();
     $item->Description = $product->getDescription();
     // Mandatory when InvntoryTrackingMethod is set to SKU
     $item->SKU = $product->getSku();
     $item->HitCounter = HitCounterCodeType::C_HIDDEN_STYLE;
     if ($product->hasVariations()) {
         $this->addVariationsData($item, $product);
     } else {
         $item->StartPrice = new AmountType(['value' => $product->getPrice()]);
         $item->Quantity = $product->getQuantity();
     }
     $item->Country = $this->store->getStoreData('country');
     $item->Location = $this->store->getStoreData('location');
     if ($this->store->hasStoreData('postCode')) {
         $item->PostalCode = $this->store->getStoreData('postCode');
     }
     $item->Currency = $product->getCurrency();
     $item->PrimaryCategory = new CategoryType();
     $item->PrimaryCategory->CategoryID = $product->getCategory();
     $item->CategoryMappingAllowed = true;
     // Condition (should be brand new)
     $item->ConditionID = 1000;
     // Add brand information as item specific information
     $item->ItemSpecifics = new NameValueListArrayType();
     if ($product->getBrand()) {
         $brand = new NameValueListType();
         $brand->Name = 'Brand';
         $brand->Value[] = $product->getBrand();
         $item->ItemSpecifics->NameValueList[] = $brand;
     }
     if ($product->getWeight()) {
         // Add details for the shipping
         // NOTE: doesn't seem to work
         $item->ShippingPackageDetails = new ShipPackageDetailsType();
         $item->ShippingPackageDetails->MeasurementUnit = MeasurementSystemCodeType::C_ENGLISH;
         $totalOz = $product->getWeight() * 0.035274;
         $weightMajor = intval(floor($totalOz / 16));
         $weightMinor = intval(floor($totalOz - $weightMajor * 16));
         $item->ShippingPackageDetails->WeightMajor = new MeasureType(['unit' => 'lbs', 'value' => $weightMajor]);
         $item->ShippingPackageDetails->WeightMinor = new MeasureType(['unit' => 'oz', 'value' => $weightMinor]);
     }
     // Add pictures
     $this->addPictures($item, $product);
     // Add payement
     $item->PaymentMethods = $this->store->getPaymentOptions();
     $item->PayPalEmailAddress = $this->store->getPaypalEmail();
     $item->DispatchTimeMax = $this->store->getStoreData('dispatchTime');
     // Add shipping options and return policy
     $this->addShippingOptions($item, $product->getShippingOptions());
     $this->addReturnPolicy($item, $product->getReturnPolicy());
     $request->Item = $item;
     $response = $this->service->addFixedPriceItem($request);
     if ($response->Ack == 'Failure') {
         $this->handleError($response);
     }
     return $response;
 }
 /**
  * @param $eBayProduct
  * @param Product $product
  * @return array
  */
 private function separateVariations($eBayProduct, Product $product)
 {
     $foundVariations = [];
     $newVariations = [];
     // Find variations that are to be updated and separate the new ones
     foreach ($product->getVariationOptions() as $option) {
         $found = false;
         foreach ($eBayProduct->Variations->Variation as $ebayVariation) {
             if ($ebayVariation->SKU === $option['sku']) {
                 $ebayVariation->Quantity = $option['quantity'];
                 if (array_key_exists('price', $option) && $ebayVariation->StartPrice->value != $option['price']) {
                     $ebayVariation->StartPrice = new AmountType(array('value' => doubleval($option['price'])));
                 }
                 $foundVariations[] = $ebayVariation;
                 $found = true;
                 break;
             }
         }
         if (!$found) {
             $newVariations[] = $option;
         }
     }
     return ['new' => $newVariations, 'found' => $foundVariations];
 }