diff --git a/.vscode/ftp-kr.sync.cache.json b/.vscode/ftp-kr.sync.cache.json
index bbd47711..901533b3 100644
--- a/.vscode/ftp-kr.sync.cache.json
+++ b/.vscode/ftp-kr.sync.cache.json
@@ -1129,10 +1129,16 @@
},
".htaccess": {
"type": "-",
- "size": 3651,
+ "size": 3670,
"lmtime": 0,
"modified": true
},
+ ".htaccess.2025-05-22-1747946145": {
+ "type": "-",
+ "size": 3651,
+ "lmtime": 0,
+ "modified": false
+ },
"image_log.json": {
"type": "-",
"size": 128703,
@@ -1626,8 +1632,8 @@
},
"import-product.php": {
"type": "-",
- "size": 22539,
- "lmtime": 1744926713383,
+ "size": 27503,
+ "lmtime": 1748716588148,
"modified": false
},
"index.php": {
diff --git a/import-product.php b/import-product.php
index ce3efbbf..951150a7 100644
--- a/import-product.php
+++ b/import-product.php
@@ -3,6 +3,180 @@
include(dirname(__FILE__) . '/config/config.inc.php');
include(dirname(__FILE__) . '/init.php');
+libxml_use_internal_errors(true);
+$xmlString = file_get_contents( 'https://amz.com.pl/bazy-produktow-export/produkty-amz.xml' );
+if ( !$xmlString ) {
+ die("Error: Cannot load XML file.");
+}
+$xmlString = preg_replace( '/(<\/?)(\w+):([^>]*>)/', '$1$2_$3', $xmlString );
+// replace '-' with '_' in XML tags
+$xml = simplexml_load_string( $xmlString, 'SimpleXMLElement', LIBXML_NOCDATA );
+if ( !$xml )
+{
+ die("Error: Cannot parse XML");
+}
+
+$products_array = [];
+
+// pętla po produktach data -> post
+foreach ( $xml -> post as $productData )
+{
+ $product_tmp = (array)$productData;
+ $title = $product_tmp['Nazwaproduktu'];
+ $title_md5 = md5( $title );
+
+ if ( strpos( $product_tmp['Dostępnerozmiaryjeślidotyczy:untitled_3'], '|' ) !== false )
+ {
+ $products_array[$title_md5]['ean'] = $product_tmp['KodEAN-13'];
+ $products_array[$title_md5]['title'] = $title;
+ $products_array[$title_md5]['price'] = floatval( str_replace( ',', '', $product_tmp['CenaBRUTTO'] ) ) / 1.23; // cena netto
+ }
+ else
+ {
+ $combination_tmp['ean'] = $product_tmp['KodEAN-13'];
+ $combination_tmp['price'] = floatval( str_replace( ',', '', $product_tmp['CenaBRUTTO'] ) ) / 1.23; // cena netto
+
+ if ( isset( $products_array[$title_md5] ) )
+ $products_array[$title_md5]['combinations'][] = $combination_tmp;
+ else
+ {
+ $products_array[$title_md5]['ean'] = $product_tmp['KodEAN-13'];
+ $products_array[$title_md5]['title'] = $title;
+ $products_array[$title_md5]['price'] = floatval( str_replace( ',', '', $product_tmp['CenaBRUTTO'] ) ) / 1.23; // cena netto
+ }
+ }
+}
+
+foreach ( $products_array as $product )
+{
+ if ( !count( $product['combinations'] ) )
+ $price = $product['price'];
+ else
+ $price = 0; // jeśli są kombinacje, to cena jest 0
+
+ $reference = $product['ean'];
+ $id_tax_rules_group = 1 ; // ID grupy reguł podatkowych
+ $active = 1; // Ustawienie produktu jako nieaktywny
+ $sql = 'UPDATE `' . _DB_PREFIX_ . 'product`
+ SET `price` = ' . (float)$price . ',
+ `id_tax_rules_group` = ' . (int)$id_tax_rules_group . ',
+ `active` = ' . (int)$active . '
+ WHERE `reference` = \'' . pSQL($reference) . '\'';
+ $result = Db::getInstance()->execute($sql);
+
+ $result = Db::getInstance()->executeS('SELECT id_product FROM `' . _DB_PREFIX_ . 'product` WHERE `reference` = \'' . pSQL($reference) . '\'');
+
+ // $id_product może być tablicą
+ if ( is_array( $result ) )
+ {
+ foreach ( $result as $id )
+ {
+ // update materac_product_shop where id_product = id_product
+ $sql_shop = 'UPDATE `' . _DB_PREFIX_ . 'product_shop`
+ SET `price` = ' . (float)$price . ',
+ `id_tax_rules_group` = ' . (int)$id_tax_rules_group . ',
+ `active` = ' . (int)$active . '
+ WHERE `id_product` = ' . $id['id_product'];
+ $result_shop = Db::getInstance()->execute($sql_shop);
+ echo "Zaktualizowano produkt z referencją $reference, id_product: " . $id['id_product'] . ", cena: $price, id_tax_rules_group: $id_tax_rules_group, active: $active
";
+ }
+ }
+ else
+ {
+ // update materac_product_shop where id_product = id_product
+ $sql_shop = 'UPDATE `' . _DB_PREFIX_ . 'product_shop`
+ SET `price` = ' . (float)$price . ',
+ `id_tax_rules_group` = ' . (int)$id_tax_rules_group . ',
+ `active` = ' . (int)$active . '
+ WHERE `id_product` = ' . (int)$result;
+ $result_shop = Db::getInstance()->execute($sql_shop);
+ if ( !$result_shop )
+ echo "Zaktualizowano produkt z referencją $reference, id_product: $result, cena: $price, id_tax_rules_group: $id_tax_rules_group, active: $active
";
+ }
+
+ // update materac_product_attribute by reference
+ foreach ( $product['combinations'] as $combination )
+ {
+ $sql_combination = 'UPDATE `' . _DB_PREFIX_ . 'product_attribute`
+ SET `price` = ' . (float)$combination['price'] . '
+ WHERE `reference` = \'' . pSQL($combination['ean']) . '\'';
+ $result_combination = Db::getInstance()->execute($sql_combination);
+
+ // get id_product_attribute from materac_product_attribute where reference = KodEAN-13
+ $id_product_attribute = Db::getInstance()->getValue('SELECT id_product_attribute FROM `' . _DB_PREFIX_ . 'product_attribute` WHERE `reference` = \'' . pSQL($combination['ean']) . '\'');
+ if ( !$result_combination )
+ {
+ echo "Error: Cannot update product attribute with reference " . $combination['ean'] . "
";
+ continue;
+ }
+
+ // update materac_product_attribute_shop where id_product_attribute = id_product_attribute
+ $sql_combination_shop = 'UPDATE `' . _DB_PREFIX_ . 'product_attribute_shop`
+ SET `price` = ' . (float)$combination['price'] . '
+ WHERE `id_product_attribute` = ' . (int)$id_product_attribute;
+ $result_combination_shop = Db::getInstance()->execute($sql_combination_shop);
+ }
+ echo "Zaktualizowano kombinacje dla produktu z referencją $reference
";
+}
+
+exit;
+
+ // if ( strpos( $product_tmp['Dostępnerozmiaryjeślidotyczy:untitled_3'], '|' ) !== false )
+ // continue;
+
+ // // update price, id_tax_rules_group, active in materac_product where reference = KodEAN-13
+ // $reference = $product_tmp['KodEAN-13'];
+ // $price = floatval( str_replace( ',', '', $product_tmp['CenaBRUTTO'] ) ) / 1.23; // cena netto
+ // $id_tax_rules_group = 62; // ID grupy reguł podatkowych
+ // $active = 0; // Ustawienie produktu jako aktywnego
+ // $sql = 'UPDATE `' . _DB_PREFIX_ . 'product`
+ // SET `price` = ' . 0 . ',
+ // `id_tax_rules_group` = ' . (int)$id_tax_rules_group . ',
+ // `active` = ' . (int)$active . '
+ // WHERE `reference` = \'' . pSQL($reference) . '\'';
+
+ // $result = Db::getInstance()->execute($sql);
+ // // get id_product from materac_product where reference = KodEAN-13
+ // $id_product = Db::getInstance()->getValue('SELECT id_product FROM `' . _DB_PREFIX_ . 'product` WHERE `reference` = \'' . pSQL($reference) . '\'');
+
+ // if ( !$result )
+ // {
+ // echo "Error: Cannot update product with reference $reference";
+ // continue;
+ // }
+
+ // // update materac_product_shop where id_product = id_product
+ // $sql_shop = 'UPDATE `' . _DB_PREFIX_ . 'product_shop`
+ // SET `price` = ' . 0 . ',
+ // `id_tax_rules_group` = ' . (int)$id_tax_rules_group . ',
+ // `active` = ' . (int)$active . '
+ // WHERE `id_product` = ' . (int)$id_product;
+ // $result_shop = Db::getInstance()->execute($sql_shop);
+ // if ( !$result_shop )
+ // {
+ // echo "Error: Cannot update product shop with id_product $id_product";
+ // continue;
+ // }
+ // echo "Zaktualizowano produkt z referencją $reference, id_product: $id_product, cena: $price, id_tax_rules_group: $id_tax_rules_group, active: $active
";
+
+ // /// update materac_product_attribute by reference
+ // $sql_combination = 'UPDATE `' . _DB_PREFIX_ . 'product_attribute`
+ // SET `price` = ' . (float)$price . '
+ // WHERE `reference` = \'' . pSQL($reference) . '\'';
+ // $result_combination = Db::getInstance()->execute($sql_combination);
+ // if ( !$result_combination )
+ // {
+ // echo "Error: Cannot update product attribute with reference $reference";
+ // continue;
+ // }
+ // }
+
+ // echo '
';
+ // print_r( $products_array );
+
+ // // exit;
+ // exit;
+
// Pobierz aktualny język kontekstu (ustaw odpowiedni ID języka, np. 1 dla polskiego)
$id_lang = Context::getContext()->language->id;
@@ -524,49 +698,32 @@ foreach ($productsBySymbol as $symbol => $products)
}
else
{
- if ( $config['update_price'] == true and $mainProduct ->id != 35873 )
+ if ( $config['update_price'] == true )
{
- // $mainProduct->price = floatval(str_replace(',','',$mainProductData->price));
- // $description = (string)$mainProductData->description;
- // $description = str_replace("\n", "
", $description);
- // $mainProduct->description = createMultiLangField($description);
- // $mainProduct->update();
-
- // update price new price is old brutto price / 1.23
- // get price brutto from db
- // $oldPrice = Db::getInstance()->getValue('SELECT price FROM '._DB_PREFIX_.'product WHERE id_product = '.(int)$mainProduct->id);
- // $newPrice = floatval(str_replace(',', '', $mainProductData->price)) / 1.23; // assuming old price is brutto
- // // update price in product table
- // Db::getInstance()->update('product', ['price' => $newPrice], 'id_product = '.(int)$mainProduct->id);
- // // update price in product_shop table
- // Db::getInstance()->update('product_shop', ['price' => $newPrice], 'id_product = '.(int)$mainProduct->id);
- // echo "Zaktualizowałem cenę produktu: " . (string)$mainProductData->title . " na " . $newPrice . "
";
-
- // // do the same with combinations
- // // get all combinations for the product from db
- // $combinations = Db::getInstance()->executeS('SELECT id_product_attribute FROM '._DB_PREFIX_.'product_attribute WHERE id_product = '.(int)$mainProduct->id);
- // foreach ($combinations as $combination) {
- // // get old price from db
- // $oldCombinationPrice = Db::getInstance()->getValue('SELECT price FROM '._DB_PREFIX_.'product_attribute WHERE id_product_attribute = '.(int)$combination['id_product_attribute']);
- // $newCombinationPrice = floatval(str_replace(',', '', $oldCombinationPrice)) / 1.23; // assuming old price is brutto
- // // update price in product_attribute table
- // Db::getInstance()->update('product_attribute', ['price' => $newCombinationPrice], 'id_product_attribute = '.(int)$combination['id_product_attribute']);
- // // // update price in product_attribute_shop table
- // Db::getInstance()->update('product_attribute_shop', ['price' => $newCombinationPrice], 'id_product_attribute = '.(int)$combination['id_product_attribute']);
- // echo "Zaktualizowałem cenę kombinacji: " . (string)$mainProductData->title . " na " . $newCombinationPrice . "
";
- // }
+ $mainProduct->price = floatval(str_replace(',','',$mainProductData->price));
+ $description = (string)$mainProductData->description;
+ $description = str_replace("\n", "
", $description);
+ $mainProduct->description = createMultiLangField($description);
+ $mainProduct->update();
}
if ( $config['update_tax_id'] == true )
{
- // Update tax ID in product column id_tax_rules_group, value 62, table materac_product
- Db::getInstance()->update('product', ['id_tax_rules_group' => 62], 'id_product = '.(int)$mainProduct->id );
- // also table materac_product_shop
- Db::getInstance()->update('product_shop', ['id_tax_rules_group' => 62], 'id_product = '.(int)$mainProduct->id );
+ // check actual tax ID
+ $currentTaxId = Db::getInstance()->getValue('SELECT id_tax_rules_group FROM '._DB_PREFIX_.'product WHERE id_product = '.(int)$mainProduct->id);
+ if ($currentTaxId == 62) {
+ // echo 'Produkt już ma ustawiony ID podatku 62: ' . (string)$mainProductData->title . '
';
+ } else {
+ // Update tax ID in product column id_tax_rules_group, value 62, table materac_product
+ Db::getInstance()->update('product', ['id_tax_rules_group' => 62], 'id_product = '.(int)$mainProduct->id);
+ // also table materac_product_shop
+ Db::getInstance()->update('product_shop', ['id_tax_rules_group' => 62], 'id_product = '.(int)$mainProduct->id . ' AND id_shop = 1');
+ echo 'Zaktualizowano ID podatku dla produktu: ' . (string)$mainProductData->title . '
';
- // change product to active by db
- Db::getInstance()->update('product', ['active' => 1], 'id_product = '.(int)$mainProduct->id);
- Db::getInstance()->update('product_shop', ['active' => 1], 'id_product = '.(int)$mainProduct->id );
+ // change product to active by db
+ Db::getInstance()->update('product', ['active' => 1], 'id_product = '.(int)$mainProduct->id);
+ Db::getInstance()->update('product_shop', ['active' => 1], 'id_product = '.(int)$mainProduct->id . ' AND id_shop = 1');
+ }
}
}