diff --git a/src/app/code/community/AvS/FastSimpleImport/Model/Import/Entity/Product/Type/Configurable.php b/src/app/code/community/AvS/FastSimpleImport/Model/Import/Entity/Product/Type/Configurable.php index 933c9bf2..118d8bc9 100644 --- a/src/app/code/community/AvS/FastSimpleImport/Model/Import/Entity/Product/Type/Configurable.php +++ b/src/app/code/community/AvS/FastSimpleImport/Model/Import/Entity/Product/Type/Configurable.php @@ -125,6 +125,47 @@ protected function _isSkuNew($sku) return !isset($oldSkus[$sku]); } + /** + * Array of SKU to array of super attribute values for all products. + * + * @return Mage_ImportExport_Model_Import_Entity_Product_Type_Configurable + */ + protected function _loadSkuSuperAttributeValues($bunch, $newSku, $oldSku) + { + if ($this->_superAttributes) { + $attrSetIdToName = $this->_entityModel->getAttrSetIdToName(); + $allowProductTypes = array(); + + foreach ($bunch as $rowData){ + if (!empty($rowData['_super_products_sku'])) { + if (isset($newSku[$rowData['_super_products_sku']])) { + $productIdArray[] = $newSku[$rowData['_super_products_sku']]; + } elseif (isset($oldSku[$rowData['_super_products_sku']])) { + $productIdArray[] = $oldSku[$rowData['_super_products_sku']]; + } + } + } + foreach (Mage::getConfig() + ->getNode('global/catalog/product/type/configurable/allow_product_types')->children() as $type) { + $allowProductTypes[] = $type->getName(); + } + foreach (Mage::getResourceModel('catalog/product_collection') + ->addFieldToFilter('type_id', $allowProductTypes) + ->addFieldToFilter ('entity_id', array('in' => $productIdArray)) + ->addAttributeToSelect(array_keys($this->_superAttributes)) as $product) { + $attrSetName = $attrSetIdToName[$product->getAttributeSetId()]; + $data = array_intersect_key( + $product->getData(), + $this->_superAttributes + ); + foreach ($data as $attrCode => $value) { + $attrId = $this->_superAttributes[$attrCode]['id']; + $this->_skuSuperAttributeValues[$attrSetName][$product->getId()][$attrId] = $value; + } + } + } + return $this; + } /** * Save product type specific data. @@ -149,7 +190,6 @@ public function saveData() if ($this->_entityModel->getBehavior() == Mage_ImportExport_Model_Import::BEHAVIOR_APPEND) { $this->_loadSkuSuperData(); } - $this->_loadSkuSuperAttributeValues(); while ($bunch = $this->_entityModel->getNextBunch()) { $superAttributes = array( @@ -159,6 +199,9 @@ public function saveData() 'super_link' => array(), 'relation' => array() ); + + $this->_loadSkuSuperAttributeValues($bunch, $newSku, $oldSku); + foreach ($bunch as $rowNum => $rowData) { if (!$this->_entityModel->isRowAllowedToImport($rowData, $rowNum)) { continue;