/** * Export the missing attribtues to plentymarkets and save the mapping */ protected function doExport() { // Repository $Repository = Shopware()->Models()->getRepository('Shopware\\Models\\Article\\Configurator\\Group'); // Chunk configuration $chunk = 0; $size = PlentymarketsConfig::getInstance()->getInitialExportChunkSize(PlentymarketsExportController::DEFAULT_CHUNK_SIZE); do { PlentymarketsLogger::getInstance()->message('Export:Initial:Attribute', 'Chunk: ' . ($chunk + 1)); $Groups = $Repository->findBy(array(), null, $size, $chunk * $size); /** @var Shopware\Models\Article\Configurator\Group $Attribute */ foreach ($Groups as $Attribute) { $Request_SetItemAttributes = new PlentySoapRequest_SetItemAttributes(); $Object_SetItemAttribute = new PlentySoapObject_SetItemAttribute(); $Object_SetItemAttribute->BackendName = sprintf('%s (Sw %d)', $Attribute->getName(), $Attribute->getId()); $Object_SetItemAttribute->FrontendLang = 'de'; $Object_SetItemAttribute->FrontendName = $Attribute->getName(); $Object_SetItemAttribute->Position = $Attribute->getPosition(); try { $attributeIdAdded = PlentymarketsMappingController::getAttributeGroupByShopwareID($Attribute->getId()); } catch (PlentymarketsMappingExceptionNotExistant $E) { if (isset($this->PLENTY_name2ID[strtolower($Object_SetItemAttribute->BackendName)])) { $attributeIdAdded = $this->PLENTY_name2ID[strtolower($Object_SetItemAttribute->BackendName)]; } else { $Request_SetItemAttributes->Attributes[] = $Object_SetItemAttribute; $Response = PlentymarketsSoapClient::getInstance()->SetItemAttributes($Request_SetItemAttributes); if (!$Response->Success) { throw new PlentymarketsExportException('The item attribute »' . $Object_SetItemAttribute->BackendName . '« could not be created', 2911); } $attributeIdAdded = (int) $Response->ResponseMessages->item[0]->SuccessMessages->item[0]->Value; } // Add the mapping PlentymarketsMappingController::addAttributeGroup($Attribute->getId(), $attributeIdAdded); $this->exportAttributeTranslations($Attribute->getId(), $attributeIdAdded); } // Values /** @var Shopware\Models\Article\Configurator\Option $AttributeValue */ foreach ($Attribute->getOptions() as $AttributeValue) { $Request_SetItemAttributes = new PlentySoapRequest_SetItemAttributes(); $Object_SetItemAttribute = new PlentySoapObject_SetItemAttribute(); $Object_SetItemAttribute->Id = $attributeIdAdded; $Object_SetItemAttributeValue = new PlentySoapObject_SetItemAttributeValue(); $Object_SetItemAttributeValue->BackendName = sprintf('%s (Sw %d)', $AttributeValue->getName(), $AttributeValue->getId()); $Object_SetItemAttributeValue->FrontendName = $AttributeValue->getName(); $Object_SetItemAttributeValue->Position = $AttributeValue->getPosition(); $Object_SetItemAttribute->Values[] = $Object_SetItemAttributeValue; $Request_SetItemAttributes->Attributes[] = $Object_SetItemAttribute; try { PlentymarketsMappingController::getAttributeOptionByShopwareID($AttributeValue->getId()); } catch (PlentymarketsMappingExceptionNotExistant $E) { // Workaround $checknameValue = strtolower(str_replace(',', '.', $Object_SetItemAttributeValue->BackendName)); if (isset($this->PLENTY_idAndValueName2ID[$attributeIdAdded][$checknameValue])) { PlentymarketsMappingController::addAttributeOption($AttributeValue->getId(), $this->PLENTY_idAndValueName2ID[$attributeIdAdded][$checknameValue]); } else { $Response = PlentymarketsSoapClient::getInstance()->SetItemAttributes($Request_SetItemAttributes); if (!$Response->Success) { throw new PlentymarketsExportException('The item attribute option »' . $Object_SetItemAttributeValue->BackendName . '« could not be created', 2912); } foreach ($Response->ResponseMessages->item[0]->SuccessMessages->item as $MessageItem) { if ($MessageItem->Key == 'AttributeValueID') { PlentymarketsMappingController::addAttributeOption($AttributeValue->getId(), $MessageItem->Value); $this->exportAttributeValuesTranslations($attributeIdAdded, $AttributeValue->getId(), $MessageItem->Value); } } } } } } ++$chunk; } while (!empty($Groups) && count($Groups) == $size); }
/** * Generates "reverse mapping" * * @param array $article */ public function map($article) { $details = $article['details']; $details[] = $article['mainDetail']; foreach ($details as $detail) { foreach ($detail['configuratorOptions'] as $option) { try { // Mapping for the Group -> plentymarkets Attribute if (!isset(self::$mapping['group'][$option['groupId']])) { $plentyGroupId = PlentymarketsMappingController::getAttributeGroupByShopwareID($option['groupId']); } else { $plentyGroupId = self::$mapping['group'][$option['groupId']]; } } catch (PlentymarketsMappingExceptionNotExistant $E) { // Name auslesen $group = Shopware()->Db()->fetchRow(' SELECT name FROM s_article_configurator_groups WHERE id = ? ', array($option['groupId'])); // $plentyGroupId = $this->groupName2plentyId[$group['name']]; // PlentymarketsMappingController::addAttributeGroup($option['groupId'], $plentyGroupId); } try { // Mapping for the Group -> plentymarkets Attribute if (!isset(self::$mapping['option'][$option['id']])) { $plentyOptionId = PlentymarketsMappingController::getAttributeOptionByShopwareID($option['id']); } else { $plentyOptionId = self::$mapping['option'][$option['id']]; } } catch (PlentymarketsMappingExceptionNotExistant $E) { // $plentyOptionId = $this->groupId2optionName2plentyId[$plentyGroupId][$option['name']]; // PlentymarketsMappingController::addAttributeOption($option['id'], $plentyOptionId); // } self::$mapping['group'][$option['groupId']] = $plentyGroupId; self::$mapping['option'][$option['id']] = $plentyOptionId; } } }