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'); + } } }