Version Notes
- Add default tax attribute.
- Add support multisites stores category mapping.
- Removed skipped field warnings
- Fix some bugs...etc.
- Delete old not relevant products
- Set is anchor category property to yes
- Sort imported categories by name
- Added method to set categories, subcategories without products to inactive
Download this release
Release Info
Developer | IceShop |
Extension | ice_import |
Version | 1.3.0 |
Comparing to | |
See all releases |
Code changes from version 1.2.0 to 1.3.0
- app/code/community/Capacitywebsolutions/Importproduct/Model/Convert/Adapter/Product.php +194 -71
- app/code/community/Capacitywebsolutions/Importproduct/Model/Observer.php +81 -15
- app/code/community/Capacitywebsolutions/Importproduct/Model/System/Config/Categoryactivity.php +0 -0
- app/code/community/Capacitywebsolutions/Importproduct/Model/System/Config/Defaulttax.php +19 -0
- app/code/community/Capacitywebsolutions/Importproduct/Model/System/Config/Imageimport.php +0 -0
- app/code/community/Capacitywebsolutions/Importproduct/Model/System/Config/Lockproddetails.php +0 -0
- app/code/community/Capacitywebsolutions/Importproduct/etc/config.xml +20 -1
- app/code/community/Capacitywebsolutions/Importproduct/etc/system.xml +9 -0
- app/code/community/Capacitywebsolutions/Importproduct/sql/importproduct_setup/mysql4-install-0.1.0.php +15 -5
- package.xml +11 -5
app/code/community/Capacitywebsolutions/Importproduct/Model/Convert/Adapter/Product.php
CHANGED
@@ -23,18 +23,40 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
23 |
}
|
24 |
|
25 |
public function saveRow(array $importData) {
|
26 |
-
|
27 |
// separate import data to eav & static
|
28 |
$sortedProductData = $this->_mapAttributes($importData);
|
29 |
$productData = $sortedProductData['productData'];
|
30 |
$iceimportAttributes = $sortedProductData['iceimportAttributes'];
|
31 |
$failedAttributes = $sortedProductData['failedAttributes'];
|
|
|
|
|
|
|
|
|
|
|
32 |
|
33 |
-
if (
|
34 |
-
|
|
|
35 |
}
|
36 |
-
|
37 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
if (empty($iceimportAttributes['websites'])) {
|
39 |
$message = Mage::helper('catalog')->__('Skip import row, required field "%s" not defined', 'website');
|
40 |
Mage::throwException($message);
|
@@ -95,7 +117,7 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
95 |
Mage::throwException($message);
|
96 |
}
|
97 |
$unspscPath = $iceimportAttributes['unspsc_path'];
|
98 |
-
|
99 |
// set in / out of stock
|
100 |
$isInStock = 0;
|
101 |
if (!empty($iceimportAttributes['is_in_stock'])) {
|
@@ -139,10 +161,9 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
139 |
$productData['int']['visibility'] = $visibilityValue;
|
140 |
|
141 |
// set product image
|
142 |
-
// TODO change 'icecat_url' to 'image' before production
|
143 |
$productImage = '';
|
144 |
-
if (!empty($iceimportAttributes['
|
145 |
-
$productImage = $iceimportAttributes['
|
146 |
}
|
147 |
|
148 |
// init general attributes query
|
@@ -157,7 +178,7 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
157 |
stock_name = 'Default';
|
158 |
SELECT @attribute_set_id := `attribute_set_id` FROM `" . $this->_tablePrefix . "eav_attribute_set`
|
159 |
WHERE attribute_set_name = :attribute_set AND entity_type_id =
|
160 |
-
|
161 |
|
162 |
SELECT @price_id := `attribute_id` FROM `" . $this->_tablePrefix . "eav_attribute` WHERE
|
163 |
`attribute_code` = 'price' AND entity_type_id = @product_entity_type_id;
|
@@ -170,7 +191,11 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
170 |
`attribute_code` = 'is_active' AND entity_type_id = @category_entity_type_id;
|
171 |
SELECT @include_nav_bar_id := `attribute_id` FROM `" . $this->_tablePrefix . "eav_attribute` WHERE
|
172 |
`attribute_code` = 'include_in_menu' AND entity_type_id = @category_entity_type_id;
|
|
|
|
|
173 |
";
|
|
|
|
|
174 |
$this->_connRes->query($initAttributes, array(':attribute_set' => $iceimportAttributes['attribute_set']));
|
175 |
|
176 |
$prodIdFetch = $this->_connRes->fetchRow("SELECT entity_id FROM `" . $this->_tablePrefix . "catalog_product_entity` WHERE sku = :sku limit 1" , array(
|
@@ -183,12 +208,17 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
183 |
if('import_price_stock' == Mage::getStoreConfig('importprod_root/importprod/import_only_prices_stock',
|
184 |
$storeId)) {
|
185 |
$this->_corePriceStock($websiteId, $productId, $price, $qty, $sku, $isInStock);
|
|
|
186 |
return true;
|
187 |
}
|
188 |
} else {
|
189 |
$productId = null;
|
190 |
}
|
191 |
-
|
|
|
|
|
|
|
|
|
192 |
// get category id
|
193 |
$categoriesToActiveConf = Mage::getStoreConfig('importprod_root/importprod/category_active',
|
194 |
$storeId);
|
@@ -204,6 +234,7 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
204 |
|
205 |
// if new product then ovewrride product id from null to id
|
206 |
$productId = $this->_coreSave($productData, $productId, $storeId, $sku, $categoryId);
|
|
|
207 |
// add product image to queue
|
208 |
if (Mage::getStoreConfig('importprod_root/importprod/import_images')) {
|
209 |
$this->_addImageToQueue($productId, $productImage);
|
@@ -211,17 +242,60 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
211 |
|
212 |
// add price & stock
|
213 |
$this->_corePriceStock($websiteId, $productId, $price, $qty, $sku, $isInStock);
|
214 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
215 |
return true;
|
216 |
-
|
217 |
}
|
218 |
|
219 |
protected function _coreSave(array $entityData, $productId = null, $storeId = 0, $sku, $categoryId) {
|
220 |
-
|
221 |
if ($productId === null) {
|
222 |
// add product to store
|
223 |
-
$coreSaveProduct = "INSERT INTO `" . $this->_tablePrefix . "catalog_product_entity` (`entity_type_id`, `attribute_set_id`, `type_id`, `sku`) VALUES
|
224 |
-
(@product_entity_type_id, @attribute_set_id, 'simple', :sku);
|
225 |
SELECT @product_id := LAST_INSERT_ID();
|
226 |
";
|
227 |
$this->_connRes->query($coreSaveProduct, array(':sku' => $sku));
|
@@ -280,12 +354,11 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
280 |
";
|
281 |
|
282 |
try{
|
283 |
-
$this->_connRes->query($coreSaveSQL, $bindArray);
|
284 |
} catch(Exception $e) {
|
285 |
echo $e->getMessage();
|
286 |
}
|
287 |
return $productId;
|
288 |
-
|
289 |
}
|
290 |
|
291 |
protected function _corePriceStock($website =0, $productId =false, $price =0.00, $qty =0.00, $sku =false, $isInStock =0) {
|
@@ -368,65 +441,70 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
368 |
// check if product exists
|
369 |
$categoryId = $this->_getCategoryIdByUnspsc($unspsc);
|
370 |
if (!empty($categoryId)) {
|
371 |
-
//
|
372 |
-
$
|
373 |
-
|
374 |
-
'
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
388 |
}
|
389 |
-
|
390 |
-
|
391 |
-
$
|
392 |
-
|
|
|
|
|
393 |
$activeSetter = "INSERT INTO `" . $this->_tablePrefix . "catalog_category_entity_int` (`entity_type_id`, `attribute_id`, `store_id`, `entity_id`, `value`) VALUES ";
|
394 |
}
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
399 |
}
|
400 |
$activeSetter = substr($activeSetter, 0, -2);
|
401 |
$activeSetter .= "
|
402 |
ON DUPLICATE KEY UPDATE
|
403 |
`value` = 1
|
404 |
";
|
405 |
-
|
|
|
|
|
406 |
}
|
407 |
return $categoryId;
|
408 |
} else {
|
409 |
-
// merge unspcs to current name in unspcs & name path's
|
410 |
-
$nameArray = explode('/', $categories);
|
411 |
-
$unspscArray = explode('/', $unspscPath);
|
412 |
-
|
413 |
-
if (count($nameArray) != count($unspscArray)) {
|
414 |
-
$message = Mage::helper('catalog')->__('Skip import row, @categories data is invaled');
|
415 |
-
Mage::throwException($message);
|
416 |
-
}
|
417 |
-
|
418 |
-
$categoryMergedArray = array(
|
419 |
-
array(
|
420 |
-
'unspsc' => 'default_root',
|
421 |
-
'name' => 'Default category'
|
422 |
-
)
|
423 |
-
);
|
424 |
-
|
425 |
-
for($i = 0; $i < count($unspscArray); $i++) {
|
426 |
-
$categoryMergedArray[] = array('name' =>$nameArray[$i],
|
427 |
-
'unspsc' =>$unspscArray[$i]);
|
428 |
-
}
|
429 |
|
|
|
|
|
430 |
// get max created parrent category
|
431 |
$categoryCreateArray = array();
|
432 |
for ($i = count($categoryMergedArray) -1; $i >= 0; $i--) {
|
@@ -443,6 +521,30 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
443 |
}
|
444 |
}
|
445 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
446 |
protected function _getCategoryIdByUnspsc($unspcs) {
|
447 |
if ($unspcs == 'default_root') {
|
448 |
return Mage::app()->getStore(1)->getRootCategoryId();
|
@@ -486,6 +588,8 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
486 |
VALUES
|
487 |
(@category_entity_type_id, @category_active_id, 0, @catId, :category_active),
|
488 |
(@category_entity_type_id, @category_active_id, :store, @catId, :category_active),
|
|
|
|
|
489 |
(@category_entity_type_id, @include_nav_bar_id, 0, @catId, 1),
|
490 |
(@category_entity_type_id, @include_nav_bar_id, :store, @catId, 1);
|
491 |
|
@@ -507,6 +611,7 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
507 |
));
|
508 |
|
509 |
$categoryIdFetch = $this->_connRes->fetchRow('SELECT @catId AS category_id');
|
|
|
510 |
return $categoryIdFetch['category_id'];
|
511 |
}
|
512 |
|
@@ -516,7 +621,6 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
516 |
$iceAttributes = array();
|
517 |
foreach ($importData as $attribute => $value) {
|
518 |
// map iceimport attributes
|
519 |
-
// TODO change 'icecat_url' to 'image' before production
|
520 |
if ($attribute == 'type' ||
|
521 |
$attribute == 'sku' ||
|
522 |
$attribute == 'attribute_set' ||
|
@@ -529,14 +633,13 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
529 |
$attribute == 'store' ||
|
530 |
$attribute == 'websites' ||
|
531 |
$attribute == 'is_in_stock' ||
|
532 |
-
$attribute == '
|
533 |
$attribute == 'unspsc_path') {
|
534 |
|
535 |
$iceAttributes[$attribute] = $value;
|
536 |
unset($importData[$attribute]);
|
537 |
|
538 |
}
|
539 |
-
// TODO change 'image' to 'icecat_url' to skip liste before production
|
540 |
// skip some attributes
|
541 |
if ($attribute == 'supplier_product_code' ||
|
542 |
$attribute == 'supplier' ||
|
@@ -548,7 +651,7 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
548 |
$attribute == 'icecat_category_id' ||
|
549 |
$attribute == 'icecat_vendor_id' ||
|
550 |
$attribute == 'icecat_quality' ||
|
551 |
-
$attribute == '
|
552 |
$attribute == 'icecat_thumbnail_img' ||
|
553 |
$attribute == 'icecat_low_res_img' ||
|
554 |
$attribute == 'icecat_high_res_img' ||
|
@@ -558,7 +661,6 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
558 |
$attribute == 'tax4' ||
|
559 |
$attribute == 'min_quantity' ||
|
560 |
$attribute == 'loms' ||
|
561 |
-
$attribute == 'tax_rate' ||
|
562 |
$attribute == 'image_label' ||
|
563 |
$attribute == 'links_title' ||
|
564 |
$attribute == 'small_image_label' ||
|
@@ -756,9 +858,30 @@ class Capacitywebsolutions_Importproduct_Model_Convert_Adapter_Product extends M
|
|
756 |
)
|
757 |
);
|
758 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
759 |
|
760 |
-
|
761 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
762 |
}
|
|
|
763 |
}
|
764 |
|
23 |
}
|
24 |
|
25 |
public function saveRow(array $importData) {
|
26 |
+
|
27 |
// separate import data to eav & static
|
28 |
$sortedProductData = $this->_mapAttributes($importData);
|
29 |
$productData = $sortedProductData['productData'];
|
30 |
$iceimportAttributes = $sortedProductData['iceimportAttributes'];
|
31 |
$failedAttributes = $sortedProductData['failedAttributes'];
|
32 |
+
|
33 |
+
//Init session values to count total products and determine the last call of saveRow method
|
34 |
+
$session = Mage::getSingleton("core/session");
|
35 |
+
$import_total = $session->getData("import_total");
|
36 |
+
$counter = $session->getData("counter");
|
37 |
|
38 |
+
if (!isset($counter)) {
|
39 |
+
$session->setData("counter",1);
|
40 |
+
$counter = $session->getData("counter");
|
41 |
}
|
42 |
+
|
43 |
+
if (!isset($import_total)) {
|
44 |
+
$batchId = Mage::getSingleton('core/app')->getRequest()->getPost('batch_id', 0);
|
45 |
+
$batchModel = Mage::getModel('dataflow/batch')->load($batchId);
|
46 |
+
$batchImportModel = $batchModel->getBatchImportModel();
|
47 |
+
$importIds = $batchImportModel->getIdCollection();
|
48 |
+
$import_total = count($importIds);
|
49 |
+
$session->setData("import_total",(int)$import_total);
|
50 |
+
} else if(isset($counter) && isset($import_total)) {
|
51 |
+
if($counter < $import_total) {
|
52 |
+
$session->setData("counter",(int)++$counter);
|
53 |
+
}
|
54 |
+
}
|
55 |
+
|
56 |
+
// mark product ice_import generic
|
57 |
+
$productData['varchar']['is_iceimport'] =1;
|
58 |
+
|
59 |
+
// set website id
|
60 |
if (empty($iceimportAttributes['websites'])) {
|
61 |
$message = Mage::helper('catalog')->__('Skip import row, required field "%s" not defined', 'website');
|
62 |
Mage::throwException($message);
|
117 |
Mage::throwException($message);
|
118 |
}
|
119 |
$unspscPath = $iceimportAttributes['unspsc_path'];
|
120 |
+
|
121 |
// set in / out of stock
|
122 |
$isInStock = 0;
|
123 |
if (!empty($iceimportAttributes['is_in_stock'])) {
|
161 |
$productData['int']['visibility'] = $visibilityValue;
|
162 |
|
163 |
// set product image
|
|
|
164 |
$productImage = '';
|
165 |
+
if (!empty($iceimportAttributes['image'])) {
|
166 |
+
$productImage = $iceimportAttributes['image'];
|
167 |
}
|
168 |
|
169 |
// init general attributes query
|
178 |
stock_name = 'Default';
|
179 |
SELECT @attribute_set_id := `attribute_set_id` FROM `" . $this->_tablePrefix . "eav_attribute_set`
|
180 |
WHERE attribute_set_name = :attribute_set AND entity_type_id =
|
181 |
+
@product_entity_type_id;
|
182 |
|
183 |
SELECT @price_id := `attribute_id` FROM `" . $this->_tablePrefix . "eav_attribute` WHERE
|
184 |
`attribute_code` = 'price' AND entity_type_id = @product_entity_type_id;
|
191 |
`attribute_code` = 'is_active' AND entity_type_id = @category_entity_type_id;
|
192 |
SELECT @include_nav_bar_id := `attribute_id` FROM `" . $this->_tablePrefix . "eav_attribute` WHERE
|
193 |
`attribute_code` = 'include_in_menu' AND entity_type_id = @category_entity_type_id;
|
194 |
+
SELECT @category_is_anchor_id := `attribute_id` FROM `" . $this->_tablePrefix . "eav_attribute` WHERE
|
195 |
+
`attribute_code` = 'is_anchor' AND entity_type_id = @category_entity_type_id;
|
196 |
";
|
197 |
+
|
198 |
+
|
199 |
$this->_connRes->query($initAttributes, array(':attribute_set' => $iceimportAttributes['attribute_set']));
|
200 |
|
201 |
$prodIdFetch = $this->_connRes->fetchRow("SELECT entity_id FROM `" . $this->_tablePrefix . "catalog_product_entity` WHERE sku = :sku limit 1" , array(
|
208 |
if('import_price_stock' == Mage::getStoreConfig('importprod_root/importprod/import_only_prices_stock',
|
209 |
$storeId)) {
|
210 |
$this->_corePriceStock($websiteId, $productId, $price, $qty, $sku, $isInStock);
|
211 |
+
$query = $this->_connRes->query('INSERT INTO iceimport_imported_product_ids (product_id, product_sku) VALUES (:prod_id, :sku)',array(':prod_id' => $productId,':sku' => $sku));
|
212 |
return true;
|
213 |
}
|
214 |
} else {
|
215 |
$productId = null;
|
216 |
}
|
217 |
+
$defaulttaxConf = (int)Mage::getStoreConfig('importprod_root/importprod/default_tax',$storeId);
|
218 |
+
|
219 |
+
if( !empty($defaulttaxConf) ) {
|
220 |
+
$productData['int']['tax_class_id'] = $defaulttaxConf;
|
221 |
+
}
|
222 |
// get category id
|
223 |
$categoriesToActiveConf = Mage::getStoreConfig('importprod_root/importprod/category_active',
|
224 |
$storeId);
|
234 |
|
235 |
// if new product then ovewrride product id from null to id
|
236 |
$productId = $this->_coreSave($productData, $productId, $storeId, $sku, $categoryId);
|
237 |
+
|
238 |
// add product image to queue
|
239 |
if (Mage::getStoreConfig('importprod_root/importprod/import_images')) {
|
240 |
$this->_addImageToQueue($productId, $productImage);
|
242 |
|
243 |
// add price & stock
|
244 |
$this->_corePriceStock($websiteId, $productId, $price, $qty, $sku, $isInStock);
|
245 |
+
|
246 |
+
$query = $this->_connRes->query('INSERT INTO iceimport_imported_product_ids (product_id, product_sku) VALUES (:prod_id, :sku)',array(':prod_id' => $productId,':sku' => $sku));
|
247 |
+
|
248 |
+
// Check if this is last imported product
|
249 |
+
// Do category sort and set categories without products to inactive
|
250 |
+
if (isset($counter) && isset($import_total) && ($counter==$import_total)) {
|
251 |
+
$catCollection = Mage::getModel('catalog/category')
|
252 |
+
->getCollection()
|
253 |
+
->addAttributeToSort('name', 'ASC');
|
254 |
+
$position = 1;
|
255 |
+
|
256 |
+
foreach ($catCollection as $category) {
|
257 |
+
|
258 |
+
$query = $this->_connRes->query("UPDATE `". $this->_tablePrefix . "catalog_category_entity` SET position = :position WHERE entity_id = :cat_id ", array(
|
259 |
+
':position'=>$position,
|
260 |
+
':cat_id'=> $category->getId()
|
261 |
+
));
|
262 |
+
|
263 |
+
$query = "SELECT COUNT(*) FROM `" . $this->_tablePrefix . "catalog_category_product` WHERE category_id = :cat_id ";
|
264 |
+
$cat_products = $this->_connRes->fetchRow($query,array(
|
265 |
+
':cat_id'=> $category->getId()
|
266 |
+
));
|
267 |
+
|
268 |
+
if ($cat_products['COUNT(*)'] == 0) {
|
269 |
+
$query = "SELECT `entity_id` FROM `" . $this->_tablePrefix . "catalog_category_entity` WHERE parent_id = :cat_id";
|
270 |
+
$child_cat = $this->_connRes->fetchAll($query,array(
|
271 |
+
':cat_id'=> $category->getId()
|
272 |
+
));
|
273 |
+
|
274 |
+
if (isset($child_cat) && count($child_cat) > 0) {
|
275 |
+
//Count child categories products and set them to inactive if they have no
|
276 |
+
$this->CountChildProd($child_cat);
|
277 |
+
} else {
|
278 |
+
$this->_connRes->query("UPDATE `" . $this->_tablePrefix . "catalog_category_entity_int`
|
279 |
+
SET `value` = 0 WHERE `attribute_id` = @category_active_id AND entity_id = :cat_id",array(
|
280 |
+
':cat_id'=> $category->getId()
|
281 |
+
));
|
282 |
+
}
|
283 |
+
}
|
284 |
+
$position++;
|
285 |
+
}
|
286 |
+
|
287 |
+
$session->unsetData('import_total');
|
288 |
+
$session->unsetData('counter');
|
289 |
+
}
|
290 |
+
|
291 |
return true;
|
|
|
292 |
}
|
293 |
|
294 |
protected function _coreSave(array $entityData, $productId = null, $storeId = 0, $sku, $categoryId) {
|
|
|
295 |
if ($productId === null) {
|
296 |
// add product to store
|
297 |
+
$coreSaveProduct = "INSERT INTO `" . $this->_tablePrefix . "catalog_product_entity` (`entity_type_id`, `attribute_set_id`, `type_id`, `sku`, `created_at`) VALUES
|
298 |
+
(@product_entity_type_id, @attribute_set_id, 'simple', :sku, NOW());
|
299 |
SELECT @product_id := LAST_INSERT_ID();
|
300 |
";
|
301 |
$this->_connRes->query($coreSaveProduct, array(':sku' => $sku));
|
354 |
";
|
355 |
|
356 |
try{
|
357 |
+
$query = $this->_connRes->query($coreSaveSQL, $bindArray);
|
358 |
} catch(Exception $e) {
|
359 |
echo $e->getMessage();
|
360 |
}
|
361 |
return $productId;
|
|
|
362 |
}
|
363 |
|
364 |
protected function _corePriceStock($website =0, $productId =false, $price =0.00, $qty =0.00, $sku =false, $isInStock =0) {
|
441 |
// check if product exists
|
442 |
$categoryId = $this->_getCategoryIdByUnspsc($unspsc);
|
443 |
if (!empty($categoryId)) {
|
444 |
+
// merge categories by unspsc
|
445 |
+
$categoryMergedArray = $this->_categoryMapper($categories, $unspscPath);
|
446 |
+
foreach ($categoryMergedArray as $category) {
|
447 |
+
$categoryName = $category['name'];
|
448 |
+
$categoryUnspsc = $category['unspsc'];
|
449 |
+
$categoryTreeId = $this->_getCategoryIdByUnspsc($categoryUnspsc);
|
450 |
+
// check category name to current store
|
451 |
+
$categoryBindArray = array(
|
452 |
+
':store_id' => $storeId,
|
453 |
+
':category_id' => $categoryTreeId
|
454 |
+
);
|
455 |
+
$nameCheckerFetch = $this->_connRes->fetchRow("SELECT value_id FROM `" . $this->_tablePrefix . "catalog_category_entity_varchar` WHERE
|
456 |
+
store_id = :store_id AND entity_id = :category_id AND attribute_id = @category_name_id
|
457 |
+
", $categoryBindArray);
|
458 |
+
$nameChecker = $nameCheckerFetch['value_id'];
|
459 |
+
if (!$nameChecker) {
|
460 |
+
// add category name to current store
|
461 |
+
$categoryBindArray[':category_name'] = $categoryName;
|
462 |
+
if (!empty($categoryBindArray[':category_id'])){
|
463 |
+
$this->_connRes->query("
|
464 |
+
INSERT INTO `" . $this->_tablePrefix . "catalog_category_entity_varchar` (`entity_type_id`, `attribute_id`, `store_id`, `entity_id`, `value`) VALUES
|
465 |
+
(@category_entity_type_id, @category_name_id, :store_id, :category_id, :category_name)
|
466 |
+
", $categoryBindArray);
|
467 |
+
}
|
468 |
+
}
|
469 |
}
|
470 |
+
if (1 == $categoryActive) {
|
471 |
+
// get current path of category
|
472 |
+
$categoryPath = $this->_connRes->fetchRow("SELECT path FROM `" . $this->_tablePrefix . "catalog_category_entity` WHERE entity_id = :entity_id",
|
473 |
+
array(':entity_id' => $categoryId));
|
474 |
+
$categoryPathArray = explode('/', $categoryPath['path']);
|
475 |
+
if ($categoryPathArray) {
|
476 |
$activeSetter = "INSERT INTO `" . $this->_tablePrefix . "catalog_category_entity_int` (`entity_type_id`, `attribute_id`, `store_id`, `entity_id`, `value`) VALUES ";
|
477 |
}
|
478 |
+
|
479 |
+
$falseCounter = 0;
|
480 |
+
foreach($categoryPathArray as $categoryId) {
|
481 |
+
$category = Mage::getModel('catalog/category')->load($categoryId);
|
482 |
+
$cid = $category->getId();
|
483 |
+
if (!empty($cid)) {
|
484 |
+
if (!empty($categoryId)) {
|
485 |
+
$activeSetter .= "(@category_entity_type_id, @category_active_id, :store_id, " . $categoryId . ", 1),
|
486 |
+
(@category_entity_type_id, @category_active_id, 0, " . $categoryId . ", 1), ";
|
487 |
+
} else {
|
488 |
+
$falseCounter++;
|
489 |
+
}
|
490 |
+
} else {
|
491 |
+
$falseCounter++;
|
492 |
+
}
|
493 |
}
|
494 |
$activeSetter = substr($activeSetter, 0, -2);
|
495 |
$activeSetter .= "
|
496 |
ON DUPLICATE KEY UPDATE
|
497 |
`value` = 1
|
498 |
";
|
499 |
+
if ($falseCounter < count($categoryPathArray)) {
|
500 |
+
$this->_connRes->query($activeSetter, array(':store_id' => $storeId));
|
501 |
+
}
|
502 |
}
|
503 |
return $categoryId;
|
504 |
} else {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
505 |
|
506 |
+
// merge unspcs to current name in unspcs & name path's
|
507 |
+
$categoryMergedArray = $this->_categoryMapper($categories, $unspscPath);
|
508 |
// get max created parrent category
|
509 |
$categoryCreateArray = array();
|
510 |
for ($i = count($categoryMergedArray) -1; $i >= 0; $i--) {
|
521 |
}
|
522 |
}
|
523 |
|
524 |
+
protected function _categoryMapper($categoryPath, $unspscPath) {
|
525 |
+
$nameArray = explode('/', $categoryPath);
|
526 |
+
$unspscArray = explode('/', $unspscPath);
|
527 |
+
|
528 |
+
if (count($nameArray) != count($unspscArray)) {
|
529 |
+
$message = Mage::helper('catalog')->__('Skip import row, @categories data is invaled');
|
530 |
+
Mage::throwException($message);
|
531 |
+
}
|
532 |
+
|
533 |
+
$categoryMergedArray = array(
|
534 |
+
array(
|
535 |
+
'unspsc' => 'default_root',
|
536 |
+
'name' => 'Default category'
|
537 |
+
)
|
538 |
+
);
|
539 |
+
|
540 |
+
for($i = 0; $i < count($unspscArray); $i++) {
|
541 |
+
$categoryMergedArray[] = array('name' =>$nameArray[$i],
|
542 |
+
'unspsc' =>$unspscArray[$i]);
|
543 |
+
}
|
544 |
+
|
545 |
+
return $categoryMergedArray;
|
546 |
+
}
|
547 |
+
|
548 |
protected function _getCategoryIdByUnspsc($unspcs) {
|
549 |
if ($unspcs == 'default_root') {
|
550 |
return Mage::app()->getStore(1)->getRootCategoryId();
|
588 |
VALUES
|
589 |
(@category_entity_type_id, @category_active_id, 0, @catId, :category_active),
|
590 |
(@category_entity_type_id, @category_active_id, :store, @catId, :category_active),
|
591 |
+
(@category_entity_type_id, @category_is_anchor_id, 0, @catId, 1),
|
592 |
+
(@category_entity_type_id, @category_is_anchor_id, :store, @catId, 1),
|
593 |
(@category_entity_type_id, @include_nav_bar_id, 0, @catId, 1),
|
594 |
(@category_entity_type_id, @include_nav_bar_id, :store, @catId, 1);
|
595 |
|
611 |
));
|
612 |
|
613 |
$categoryIdFetch = $this->_connRes->fetchRow('SELECT @catId AS category_id');
|
614 |
+
|
615 |
return $categoryIdFetch['category_id'];
|
616 |
}
|
617 |
|
621 |
$iceAttributes = array();
|
622 |
foreach ($importData as $attribute => $value) {
|
623 |
// map iceimport attributes
|
|
|
624 |
if ($attribute == 'type' ||
|
625 |
$attribute == 'sku' ||
|
626 |
$attribute == 'attribute_set' ||
|
633 |
$attribute == 'store' ||
|
634 |
$attribute == 'websites' ||
|
635 |
$attribute == 'is_in_stock' ||
|
636 |
+
$attribute == 'image' ||
|
637 |
$attribute == 'unspsc_path') {
|
638 |
|
639 |
$iceAttributes[$attribute] = $value;
|
640 |
unset($importData[$attribute]);
|
641 |
|
642 |
}
|
|
|
643 |
// skip some attributes
|
644 |
if ($attribute == 'supplier_product_code' ||
|
645 |
$attribute == 'supplier' ||
|
651 |
$attribute == 'icecat_category_id' ||
|
652 |
$attribute == 'icecat_vendor_id' ||
|
653 |
$attribute == 'icecat_quality' ||
|
654 |
+
$attribute == 'icecat_url' ||
|
655 |
$attribute == 'icecat_thumbnail_img' ||
|
656 |
$attribute == 'icecat_low_res_img' ||
|
657 |
$attribute == 'icecat_high_res_img' ||
|
661 |
$attribute == 'tax4' ||
|
662 |
$attribute == 'min_quantity' ||
|
663 |
$attribute == 'loms' ||
|
|
|
664 |
$attribute == 'image_label' ||
|
665 |
$attribute == 'links_title' ||
|
666 |
$attribute == 'small_image_label' ||
|
858 |
)
|
859 |
);
|
860 |
}
|
861 |
+
|
862 |
+
// Count child categories products and set them inactive if they have no
|
863 |
+
public function CountChildProd($child_cat) {
|
864 |
+
foreach ($child_cat as $cat) {
|
865 |
+
$query = "SELECT `entity_id` FROM `" . $this->_tablePrefix . "catalog_category_entity` WHERE parent_id = :cat_id";
|
866 |
+
$child_cat = $this->_connRes->fetchAll($query,array(
|
867 |
+
':cat_id'=> $cat['entity_id']
|
868 |
+
));
|
869 |
|
870 |
+
$query = "SELECT COUNT(*) FROM `" . $this->_tablePrefix . "catalog_category_product` WHERE category_id = :cat_id ";
|
871 |
+
$cat_products = $this->_connRes->fetchRow($query,array(
|
872 |
+
':cat_id'=> $cat['entity_id']
|
873 |
+
));
|
874 |
+
|
875 |
+
if ($cat_products['COUNT(*)'] == 0 && empty($child_cat)) {
|
876 |
+
$this->_connRes->query("UPDATE `" . $this->_tablePrefix . "catalog_category_entity_int`
|
877 |
+
SET `value` = 0 WHERE `attribute_id` = @category_active_id AND entity_id = :cat_id",array(
|
878 |
+
':cat_id'=> $cat['entity_id']
|
879 |
+
));
|
880 |
+
} else if (!empty($child_cat)) {
|
881 |
+
$this->CountChildProd($child_cat);
|
882 |
+
}
|
883 |
+
}
|
884 |
}
|
885 |
+
|
886 |
}
|
887 |
|
app/code/community/Capacitywebsolutions/Importproduct/Model/Observer.php
CHANGED
@@ -1,5 +1,4 @@
|
|
1 |
<?php
|
2 |
-
/*m@rk*/
|
3 |
class Capacitywebsolutions_Importproduct_Model_Observer
|
4 |
{
|
5 |
|
@@ -13,15 +12,7 @@ class Capacitywebsolutions_Importproduct_Model_Observer
|
|
13 |
* @access publc
|
14 |
*/
|
15 |
public function load() {
|
16 |
-
|
17 |
-
/*
|
18 |
-
// test load
|
19 |
-
$con = mysql_connect('localhost', 'test', 'test');
|
20 |
-
$db = mysql_select_db('catch');
|
21 |
-
$query = mysql_query("INSERT INTO detect (event, time) VALUES ('load called', NOW())");
|
22 |
-
*/
|
23 |
-
|
24 |
-
|
25 |
$profileId = 3;
|
26 |
$logFileName= 'test.log';
|
27 |
$recordCount = 0;
|
@@ -44,15 +35,19 @@ class Capacitywebsolutions_Importproduct_Model_Observer
|
|
44 |
$profile->run();
|
45 |
|
46 |
$batchModel = Mage::getSingleton('dataflow/batch');
|
|
|
47 |
if ($batchModel->getId()) {
|
48 |
if ($batchModel->getAdapter()) {
|
49 |
-
$batchId = $batchModel->getId();
|
50 |
$batchImportModel = $batchModel->getBatchImportModel();
|
51 |
$importIds = $batchImportModel->getIdCollection();
|
52 |
|
53 |
$batchModel = Mage::getModel('dataflow/batch')->load($batchId);
|
|
|
54 |
$adapter = Mage::getModel($batchModel->getAdapter());
|
|
|
55 |
foreach ($importIds as $importId) {
|
|
|
56 |
$recordCount++;
|
57 |
try{
|
58 |
$batchImportModel->load($importId);
|
@@ -76,6 +71,27 @@ class Capacitywebsolutions_Importproduct_Model_Observer
|
|
76 |
|
77 |
}
|
78 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
79 |
// download & set product images
|
80 |
$queueList = $adapter->getImageQueue();
|
81 |
if (count($queueList) > 0) {
|
@@ -84,13 +100,10 @@ class Capacitywebsolutions_Importproduct_Model_Observer
|
|
84 |
$queueId = $queue['queue_id'];
|
85 |
$productId = $queue['entity_id'];
|
86 |
$imageUrl = $queue['image_url'];
|
87 |
-
// TODO remove hardcode
|
88 |
-
$imageUrl = 'http://magento17.batavi.org/media/download.jpg';
|
89 |
|
90 |
$preImageName = explode('/', $imageUrl);
|
91 |
$imageName = array_pop($preImageName);
|
92 |
if (file_exists($mediaDir . DS . $imageName)) {
|
93 |
-
// TODO remove rand()
|
94 |
$imageName = rand() .'_'. time() . $imageName;
|
95 |
}
|
96 |
|
@@ -110,6 +123,58 @@ class Capacitywebsolutions_Importproduct_Model_Observer
|
|
110 |
}
|
111 |
}
|
112 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
113 |
|
114 |
$processes = Mage::getSingleton('index/indexer')->getProcessesCollection();
|
115 |
$processes->walk('reindexAll');
|
@@ -120,7 +185,8 @@ class Capacitywebsolutions_Importproduct_Model_Observer
|
|
120 |
|
121 |
}
|
122 |
}
|
123 |
-
|
|
|
124 |
echo 'Import Completed';
|
125 |
Mage::log("Import Completed",null,$logFileName);
|
126 |
|
1 |
<?php
|
|
|
2 |
class Capacitywebsolutions_Importproduct_Model_Observer
|
3 |
{
|
4 |
|
12 |
* @access publc
|
13 |
*/
|
14 |
public function load() {
|
15 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
$profileId = 3;
|
17 |
$logFileName= 'test.log';
|
18 |
$recordCount = 0;
|
35 |
$profile->run();
|
36 |
|
37 |
$batchModel = Mage::getSingleton('dataflow/batch');
|
38 |
+
|
39 |
if ($batchModel->getId()) {
|
40 |
if ($batchModel->getAdapter()) {
|
41 |
+
$batchId = $batchModel->getId();
|
42 |
$batchImportModel = $batchModel->getBatchImportModel();
|
43 |
$importIds = $batchImportModel->getIdCollection();
|
44 |
|
45 |
$batchModel = Mage::getModel('dataflow/batch')->load($batchId);
|
46 |
+
|
47 |
$adapter = Mage::getModel($batchModel->getAdapter());
|
48 |
+
|
49 |
foreach ($importIds as $importId) {
|
50 |
+
|
51 |
$recordCount++;
|
52 |
try{
|
53 |
$batchImportModel->load($importId);
|
71 |
|
72 |
}
|
73 |
|
74 |
+
// delete old products
|
75 |
+
$db_res = Mage::getSingleton('core/resource')->getConnection('core_write');
|
76 |
+
$tablePrefix = '';
|
77 |
+
$tPrefix = (array)Mage::getConfig()->getTablePrefix();
|
78 |
+
if (!empty($tPrefix)) {
|
79 |
+
$tablePrefix = $tPrefix[0];
|
80 |
+
}
|
81 |
+
|
82 |
+
try{
|
83 |
+
$db_res->query("SELECT @is_iceimport_id := `attribute_id` FROM " . $tablePrefix . "eav_attribute WHERE attribute_code = 'is_iceimport'");
|
84 |
+
$db_res->query("DELETE cpe FROM " . $tablePrefix . "catalog_product_entity AS cpe
|
85 |
+
JOIN " . $tablePrefix . "catalog_product_entity_varchar AS cpev ON cpe.entity_id = cpev.entity_id AND cpev.value = 1 AND cpev.attribute_id = @is_iceimport_id
|
86 |
+
LEFT JOIN iceimport_imported_product_ids AS iip ON cpe.entity_id = iip.product_id
|
87 |
+
WHERE iip.product_id IS NULL");
|
88 |
+
$db_res->query('DELETE FROM iceimport_imported_product_ids');
|
89 |
+
|
90 |
+
} catch (Exception $e) {
|
91 |
+
throw new Exception($e->getMessage());
|
92 |
+
}
|
93 |
+
|
94 |
+
|
95 |
// download & set product images
|
96 |
$queueList = $adapter->getImageQueue();
|
97 |
if (count($queueList) > 0) {
|
100 |
$queueId = $queue['queue_id'];
|
101 |
$productId = $queue['entity_id'];
|
102 |
$imageUrl = $queue['image_url'];
|
|
|
|
|
103 |
|
104 |
$preImageName = explode('/', $imageUrl);
|
105 |
$imageName = array_pop($preImageName);
|
106 |
if (file_exists($mediaDir . DS . $imageName)) {
|
|
|
107 |
$imageName = rand() .'_'. time() . $imageName;
|
108 |
}
|
109 |
|
123 |
}
|
124 |
}
|
125 |
}
|
126 |
+
// sort category in abc
|
127 |
+
|
128 |
+
$catCollection = Mage::getModel('catalog/category')
|
129 |
+
->getCollection()
|
130 |
+
->addAttributeToSort('name', 'ASC');
|
131 |
+
$position =1;
|
132 |
+
foreach($catCollection as $category) {
|
133 |
+
$catSource = Mage::getModel('catalog/category')->load($category->getId());
|
134 |
+
$catSource->setData('position', $position);
|
135 |
+
$catSource->save();
|
136 |
+
$query = "SELECT COUNT(*) FROM `" . $this->_tablePrefix . "catalog_category_product` WHERE category_id = :cat_id ";
|
137 |
+
$cat_products = $db_res->fetchRow($query,array(
|
138 |
+
':cat_id'=> $category->getId()
|
139 |
+
));
|
140 |
+
|
141 |
+
if ($cat_products['COUNT(*)'] == 0) {
|
142 |
+
$query = "SELECT `entity_id` FROM `" . $this->_tablePrefix . "catalog_category_entity` WHERE parent_id = :cat_id";
|
143 |
+
$child_cat = $db_res->fetchAll($query,array(
|
144 |
+
':cat_id'=> $category->getId()
|
145 |
+
));
|
146 |
+
$cat_prod = 0;
|
147 |
+
|
148 |
+
if (isset($child_cat) && count($child_cat) > 0) {
|
149 |
+
|
150 |
+
foreach ($child_cat as $cat) {
|
151 |
+
$query = "SELECT COUNT(*) FROM `" . $this->_tablePrefix . "catalog_category_product` WHERE category_id = :cat_id ";
|
152 |
+
$cat_products = $db_res->fetchRow($query,array(
|
153 |
+
':cat_id'=> $cat['entity_id']
|
154 |
+
));
|
155 |
+
|
156 |
+
if ($cat_products['COUNT(*)'] != 0) {
|
157 |
+
$cat_prod = 1;
|
158 |
+
}
|
159 |
+
|
160 |
+
}
|
161 |
+
|
162 |
+
if ($cat_prod == 0) {
|
163 |
+
$db_res->query("UPDATE `" . $this->_tablePrefix . "catalog_category_entity_int`
|
164 |
+
SET `value` = 0 WHERE `attribute_id` = @category_active_id AND entity_id = :cat_id",array(
|
165 |
+
':cat_id'=> $category->getId()
|
166 |
+
));
|
167 |
+
}
|
168 |
+
} else {
|
169 |
+
$db_res->query("UPDATE `" . $this->_tablePrefix . "catalog_category_entity_int`
|
170 |
+
SET `value` = 0 WHERE `attribute_id` = @category_active_id AND entity_id = :cat_id",array(
|
171 |
+
':cat_id'=> $category->getId()
|
172 |
+
));
|
173 |
+
}
|
174 |
+
}
|
175 |
+
$position++;
|
176 |
+
}
|
177 |
+
|
178 |
|
179 |
$processes = Mage::getSingleton('index/indexer')->getProcessesCollection();
|
180 |
$processes->walk('reindexAll');
|
185 |
|
186 |
}
|
187 |
}
|
188 |
+
|
189 |
+
unset($db_res);
|
190 |
echo 'Import Completed';
|
191 |
Mage::log("Import Completed",null,$logFileName);
|
192 |
|
app/code/community/Capacitywebsolutions/Importproduct/Model/System/Config/Categoryactivity.php
CHANGED
File without changes
|
app/code/community/Capacitywebsolutions/Importproduct/Model/System/Config/Defaulttax.php
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Capacitywebsolutions_Importproduct_Model_System_Config_Defaulttax
|
4 |
+
{
|
5 |
+
public function toOptionArray()
|
6 |
+
{
|
7 |
+
$collection = Mage::getModel('tax/class')->getCollection();
|
8 |
+
$paramsArray = array();
|
9 |
+
$paramsArray['0'] = 'None';
|
10 |
+
|
11 |
+
foreach ($collection as $product) {
|
12 |
+
$tax = $product->getData();
|
13 |
+
$paramsArray[$tax['class_id']] = $tax['class_name'];
|
14 |
+
}
|
15 |
+
|
16 |
+
return $paramsArray;
|
17 |
+
}
|
18 |
+
}
|
19 |
+
?>
|
app/code/community/Capacitywebsolutions/Importproduct/Model/System/Config/Imageimport.php
CHANGED
File without changes
|
app/code/community/Capacitywebsolutions/Importproduct/Model/System/Config/Lockproddetails.php
CHANGED
File without changes
|
app/code/community/Capacitywebsolutions/Importproduct/etc/config.xml
CHANGED
@@ -6,6 +6,24 @@
|
|
6 |
</Capacitywebsolutions_Importproduct>
|
7 |
</modules>
|
8 |
<global>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
<models>
|
10 |
<catalog>
|
11 |
<rewrite>
|
@@ -37,8 +55,9 @@
|
|
37 |
<use>core_read</use>
|
38 |
</connection>
|
39 |
</importproduct_setup_read>
|
40 |
-
</resources>
|
41 |
</global>
|
|
|
42 |
<adminhtml>
|
43 |
<acl>
|
44 |
<resources>
|
6 |
</Capacitywebsolutions_Importproduct>
|
7 |
</modules>
|
8 |
<global>
|
9 |
+
<events>
|
10 |
+
<controller_action_predispatch_adminhtml_profile_batchfinish>
|
11 |
+
<observers>
|
12 |
+
<Capacitywebsolutions_Importproduct>
|
13 |
+
<class>Capacitywebsolutions_Importproduct/Observer</class>
|
14 |
+
<method>sortCategory</method>
|
15 |
+
</Capacitywebsolutions_Importproduct>
|
16 |
+
</observers>
|
17 |
+
</controller_action_predispatch_adminhtml_profile_batchfinish>
|
18 |
+
<controller_action_postdispatch_adminhtml_profile_batchFinish>
|
19 |
+
<observers>
|
20 |
+
<Capacitywebsolutions_Importproduct>
|
21 |
+
<class>Capacitywebsolutions_Importproduct/Observer</class>
|
22 |
+
<method>sortCategory</method>
|
23 |
+
</Capacitywebsolutions_Importproduct>
|
24 |
+
</observers>
|
25 |
+
</controller_action_postdispatch_adminhtml_profile_batchFinish>
|
26 |
+
</events>
|
27 |
<models>
|
28 |
<catalog>
|
29 |
<rewrite>
|
55 |
<use>core_read</use>
|
56 |
</connection>
|
57 |
</importproduct_setup_read>
|
58 |
+
</resources>
|
59 |
</global>
|
60 |
+
|
61 |
<adminhtml>
|
62 |
<acl>
|
63 |
<resources>
|
app/code/community/Capacitywebsolutions/Importproduct/etc/system.xml
CHANGED
@@ -46,6 +46,15 @@
|
|
46 |
<show_in_website>1</show_in_website>
|
47 |
<show_in_store>1</show_in_store>
|
48 |
</import_images>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
49 |
</fields>
|
50 |
</importprod>
|
51 |
</groups>
|
46 |
<show_in_website>1</show_in_website>
|
47 |
<show_in_store>1</show_in_store>
|
48 |
</import_images>
|
49 |
+
<default_tax translate="label">
|
50 |
+
<label>Default tax for product</label>
|
51 |
+
<frontend_type>select</frontend_type>
|
52 |
+
<source_model>importproduct/system_config_defaulttax</source_model>
|
53 |
+
<sort_order>40</sort_order>
|
54 |
+
<show_in_default>1</show_in_default>
|
55 |
+
<show_in_website>1</show_in_website>
|
56 |
+
<show_in_store>1</show_in_store>
|
57 |
+
</default_tax>
|
58 |
</fields>
|
59 |
</importprod>
|
60 |
</groups>
|
app/code/community/Capacitywebsolutions/Importproduct/sql/importproduct_setup/mysql4-install-0.1.0.php
CHANGED
@@ -8,10 +8,10 @@
|
|
8 |
$attributeGroupId = $installer->getDefaultAttributeGroupId($entityTypeId, $attributeSetId);
|
9 |
|
10 |
$installer->addAttribute('catalog_category', 'unspsc', array(
|
11 |
-
'type'
|
12 |
-
'label'
|
13 |
-
'input'
|
14 |
-
'global'
|
15 |
'visible' => true,
|
16 |
'required' => false,
|
17 |
'user_defined' => false,
|
@@ -29,7 +29,11 @@
|
|
29 |
$attributeId = $installer->getAttributeId($entityTypeId, 'unspsc');
|
30 |
|
31 |
$installer->run("
|
32 |
-
|
|
|
|
|
|
|
|
|
33 |
(`entity_type_id`, `attribute_id`, `entity_id`, `value`)
|
34 |
SELECT '{$entityTypeId}', '{$attributeId}', `entity_id`, '1'
|
35 |
FROM `{$installer->getTable('catalog_category_entity')}`;
|
@@ -44,6 +48,12 @@
|
|
44 |
UNIQUE KEY (`entity_id`, `image_url`),
|
45 |
CONSTRAINT `FK_CAP_PRD_IMG_QUEUE_ENTT_ID_CAT_PRD_ENTT_ENTT_ID` FOREIGN KEY (`entity_id`) REFERENCES `{$installer->getTable('catalog_product_entity')}` (`entity_id`) ON DELETE CASCADE
|
46 |
)ENGINE=InnoDB CHARSET=utf8 COMMENT='Table to manage product image import';
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
");
|
48 |
|
49 |
$installer->endSetup();
|
8 |
$attributeGroupId = $installer->getDefaultAttributeGroupId($entityTypeId, $attributeSetId);
|
9 |
|
10 |
$installer->addAttribute('catalog_category', 'unspsc', array(
|
11 |
+
'type' => 'varchar',
|
12 |
+
'label' => 'unspsc',
|
13 |
+
'input' => 'text',
|
14 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
|
15 |
'visible' => true,
|
16 |
'required' => false,
|
17 |
'user_defined' => false,
|
29 |
$attributeId = $installer->getAttributeId($entityTypeId, 'unspsc');
|
30 |
|
31 |
$installer->run("
|
32 |
+
|
33 |
+
DROP TABLE IF EXISTS `iceimport_imported_product_ids`;
|
34 |
+
DROP TABLE IF EXISTS `{$installer->getTable('capacity_product_image_queue')}`;
|
35 |
+
|
36 |
+
INSERT IGNORE INTO `{$installer->getTable('catalog_category_entity_varchar')}`
|
37 |
(`entity_type_id`, `attribute_id`, `entity_id`, `value`)
|
38 |
SELECT '{$entityTypeId}', '{$attributeId}', `entity_id`, '1'
|
39 |
FROM `{$installer->getTable('catalog_category_entity')}`;
|
48 |
UNIQUE KEY (`entity_id`, `image_url`),
|
49 |
CONSTRAINT `FK_CAP_PRD_IMG_QUEUE_ENTT_ID_CAT_PRD_ENTT_ENTT_ID` FOREIGN KEY (`entity_id`) REFERENCES `{$installer->getTable('catalog_product_entity')}` (`entity_id`) ON DELETE CASCADE
|
50 |
)ENGINE=InnoDB CHARSET=utf8 COMMENT='Table to manage product image import';
|
51 |
+
|
52 |
+
CREATE TABLE IF NOT EXISTS `iceimport_imported_product_ids` (
|
53 |
+
`product_id` int(11) NOT NULL,
|
54 |
+
`product_sku` varchar(255) DEFAULT NULL,
|
55 |
+
KEY `pi_idx` (`product_id`)
|
56 |
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8
|
57 |
");
|
58 |
|
59 |
$installer->endSetup();
|
package.xml
CHANGED
@@ -1,18 +1,24 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>ice_import</name>
|
4 |
-
<version>1.
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://opensource.org/licenses/osl-3.0.php">OSL v.3</license>
|
7 |
<channel>community</channel>
|
8 |
<extends/>
|
9 |
<summary>Import categories & products</summary>
|
10 |
<description>This extension can use to import products with categories, multiple images and custom options from CSV file.</description>
|
11 |
-
<notes>-
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
<authors><author><name>Iceshop</name><user>Iceshop</user><email>support@iceshop.nl</email></author></authors>
|
13 |
-
<date>
|
14 |
-
<time>
|
15 |
-
<contents><target name="magecommunity"><dir name="Capacitywebsolutions"><dir name="Importproduct"><dir name="etc"><file name="config.xml" hash="c59424e1f6806af1c50f322a84c262a9"/><file name="system.xml" hash="0f76e79143ac01dc948a1c4c5315c072"/></dir><dir name="Model"><dir name="Convert"><dir name="Adapter"><file name="Product.php" hash="
|
16 |
<compatible/>
|
17 |
<dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
|
18 |
</package>
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>ice_import</name>
|
4 |
+
<version>1.3.0</version>
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://opensource.org/licenses/osl-3.0.php">OSL v.3</license>
|
7 |
<channel>community</channel>
|
8 |
<extends/>
|
9 |
<summary>Import categories & products</summary>
|
10 |
<description>This extension can use to import products with categories, multiple images and custom options from CSV file.</description>
|
11 |
+
<notes>- Add default tax attribute.
 - Add support multisites stores category mapping.
|
12 |
+
- Removed skipped field warnings
|
13 |
+
- Fix some bugs...etc.
|
14 |
+
- Delete old not relevant products
|
15 |
+
- Set is anchor category property to yes
|
16 |
+
- Sort imported categories by name
|
17 |
+
- Added method to set categories, subcategories without products to inactive </notes>
|
18 |
<authors><author><name>Iceshop</name><user>Iceshop</user><email>support@iceshop.nl</email></author></authors>
|
19 |
+
<date>2013-03-29</date>
|
20 |
+
<time>10:55:42</time>
|
21 |
+
<contents><target name="magecommunity"><dir name="Capacitywebsolutions"><dir name="Importproduct"><dir name="etc"><file name="config.xml" hash="c59424e1f6806af1c50f322a84c262a9"/><file name="system.xml" hash="0f76e79143ac01dc948a1c4c5315c072"/></dir><dir name="Model"><dir name="Convert"><dir name="Adapter"><file name="Product.php" hash="b14683db8316b3bfa88a663abc42e7df"/></dir></dir><dir name="System"><dir name="Config"><file name="Categoryactivity.php" hash="2ddc7588dd1d038661f0017c8ff397a6"/><file name="Imageimport.php" hash="8b29e7bbf67d82a06f04ad9a63df26a0"/><file name="Lockproddetails.php" hash="32a823c0c914348585702536732fed3e"/><file name="Defaulttax.php" hash="32a823c0c914348585702536732fed3e"/></dir></dir><file name="Observer.php" hash="cf7944e708df4fca8fbb218f8828b305"/></dir><dir name="sql"><dir name="importproduct_setup"><file name="mysql4-install-0.1.0.php" hash="61102e9caee6f92ebba4230d391b922d"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Capacitywebsolutions_Importproduct.xml" hash="02cb79dd6ed129ce3aa5305e1bfb4bbf"/></dir></target></contents>
|
22 |
<compatible/>
|
23 |
<dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
|
24 |
</package>
|