/** * Sets the variant details */ protected function setVariants() { // No variants if (is_null($this->ItemBase->AttributeValueSets)) { return; } // Internal number cache $numbersUsed = array(); $detailBase = $this->details + $this->data; unset($detailBase['id']); unset($detailBase['attribute']); /** @var PlentySoapObject_ItemAttributeValueSet $AttributeValueSet */ foreach ($this->ItemBase->AttributeValueSets->item as $AttributeValueSet) { // Copy the base details $details = $detailBase; // SKU $sku = sprintf('%s-%s-%s', $this->ItemBase->ItemID, $AttributeValueSet->PriceID, $AttributeValueSet->AttributeValueSetID); // Strip whitespaces $number = trim($AttributeValueSet->ColliNo); try { // Set the details id $details['id'] = PlentymarketsMappingController::getItemVariantByPlentyID($sku); if (PlentymarketsConfig::getInstance()->getItemNumberImportActionID(IMPORT_ITEM_NUMBER) == IMPORT_ITEM_NUMBER) { // If this number does not belong to this item if (!PlentymarketsImportItemHelper::isNumberExistantVariant($number, $details['id'])) { // and check if the number is valid if (!PlentymarketsImportItemHelper::isNumberValid($number)) { throw new PlentymarketsImportItemNumberException('The item variation number »' . $number . '« of item »' . $this->data['name'] . '« with the id »' . $this->ItemBase->ItemID . '« is invalid', 3110); } // check if the number is available anyway if (PlentymarketsImportItemHelper::isNumberExistant($number)) { throw new PlentymarketsImportItemNumberException('The item variation number »' . $number . '« of item »' . $this->data['name'] . '« with the id »' . $this->ItemBase->ItemID . '« is already in use', 3111); } // check if the number is in the internal cache if (isset($numbersUsed[$number])) { throw new PlentymarketsImportItemNumberException('The item variation number »' . $number . '« of item »' . $this->data['name'] . '« with the id »' . $this->ItemBase->ItemID . '« would be assigned twice', 3112); } // Use this number $details['number'] = $number; // Cache the number $numbersUsed[$number] = true; } } } catch (PlentymarketsMappingExceptionNotExistant $e) { // Numbers should be synced if (PlentymarketsConfig::getInstance()->getItemNumberImportActionID(IMPORT_ITEM_NUMBER) == IMPORT_ITEM_NUMBER) { // Nummer ist ungültig oder in Benutzung if (!PlentymarketsImportItemHelper::isNumberValid($number)) { throw new PlentymarketsImportItemNumberException('The item variation number »' . $number . '« of item »' . $this->data['name'] . '« with the id »' . $this->ItemBase->ItemID . '« is invalid', 3110); } // check if the number is available if (PlentymarketsImportItemHelper::isNumberExistant($number)) { throw new PlentymarketsImportItemNumberException('The item variation number »' . $number . '« of item »' . $this->data['name'] . '« with the id »' . $this->ItemBase->ItemID . '« is already in use', 3111); } // check if the number is in the internal cache if (isset($numbersUsed[$number])) { throw new PlentymarketsImportItemNumberException('The item variation number »' . $number . '« of item »' . $this->data['name'] . '« with the id »' . $this->ItemBase->ItemID . '« would be assigned twice', 3112); } // Use this number $details['number'] = $number; // Cache the number $numbersUsed[$number] = true; } else { // A new number is generated $details['number'] = PlentymarketsImportItemHelper::getItemNumber(); } } $shippingTime = PlentymarketsUtils::getShippingTimeByAvailabilityId($AttributeValueSet->Availability); if ($shippingTime) { $details['shippingtime'] = $shippingTime; } $details['additionaltext'] = $AttributeValueSet->AttributeValueSetName; $details['ean'] = $AttributeValueSet->EAN; $details['X_plentySku'] = $sku; $this->variants[$AttributeValueSet->AttributeValueSetID] = $details; } }