feat(import-product): Enhance XML import functionality and update product prices
This commit is contained in:
12
.vscode/ftp-kr.sync.cache.json
vendored
12
.vscode/ftp-kr.sync.cache.json
vendored
@@ -1129,10 +1129,16 @@
|
|||||||
},
|
},
|
||||||
".htaccess": {
|
".htaccess": {
|
||||||
"type": "-",
|
"type": "-",
|
||||||
"size": 3651,
|
"size": 3670,
|
||||||
"lmtime": 0,
|
"lmtime": 0,
|
||||||
"modified": true
|
"modified": true
|
||||||
},
|
},
|
||||||
|
".htaccess.2025-05-22-1747946145": {
|
||||||
|
"type": "-",
|
||||||
|
"size": 3651,
|
||||||
|
"lmtime": 0,
|
||||||
|
"modified": false
|
||||||
|
},
|
||||||
"image_log.json": {
|
"image_log.json": {
|
||||||
"type": "-",
|
"type": "-",
|
||||||
"size": 128703,
|
"size": 128703,
|
||||||
@@ -1626,8 +1632,8 @@
|
|||||||
},
|
},
|
||||||
"import-product.php": {
|
"import-product.php": {
|
||||||
"type": "-",
|
"type": "-",
|
||||||
"size": 22539,
|
"size": 27503,
|
||||||
"lmtime": 1744926713383,
|
"lmtime": 1748716588148,
|
||||||
"modified": false
|
"modified": false
|
||||||
},
|
},
|
||||||
"index.php": {
|
"index.php": {
|
||||||
|
|||||||
@@ -3,6 +3,180 @@
|
|||||||
include(dirname(__FILE__) . '/config/config.inc.php');
|
include(dirname(__FILE__) . '/config/config.inc.php');
|
||||||
include(dirname(__FILE__) . '/init.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<br>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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<br>";
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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'] . "<br>";
|
||||||
|
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<br>";
|
||||||
|
}
|
||||||
|
|
||||||
|
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<br>";
|
||||||
|
|
||||||
|
// /// 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 '<pre>';
|
||||||
|
// print_r( $products_array );
|
||||||
|
|
||||||
|
// // exit;
|
||||||
|
// exit;
|
||||||
|
|
||||||
// Pobierz aktualny język kontekstu (ustaw odpowiedni ID języka, np. 1 dla polskiego)
|
// Pobierz aktualny język kontekstu (ustaw odpowiedni ID języka, np. 1 dla polskiego)
|
||||||
$id_lang = Context::getContext()->language->id;
|
$id_lang = Context::getContext()->language->id;
|
||||||
|
|
||||||
@@ -524,49 +698,32 @@ foreach ($productsBySymbol as $symbol => $products)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( $config['update_price'] == true and $mainProduct ->id != 35873 )
|
if ( $config['update_price'] == true )
|
||||||
{
|
{
|
||||||
// $mainProduct->price = floatval(str_replace(',','',$mainProductData->price));
|
$mainProduct->price = floatval(str_replace(',','',$mainProductData->price));
|
||||||
// $description = (string)$mainProductData->description;
|
$description = (string)$mainProductData->description;
|
||||||
// $description = str_replace("\n", "<br>", $description);
|
$description = str_replace("\n", "<br>", $description);
|
||||||
// $mainProduct->description = createMultiLangField($description);
|
$mainProduct->description = createMultiLangField($description);
|
||||||
// $mainProduct->update();
|
$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 "<p>Zaktualizowałem cenę produktu: " . (string)$mainProductData->title . " na " . $newPrice . "</p>";
|
|
||||||
|
|
||||||
// // 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 "<p>Zaktualizowałem cenę kombinacji: " . (string)$mainProductData->title . " na " . $newCombinationPrice . "</p>";
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( $config['update_tax_id'] == true )
|
if ( $config['update_tax_id'] == true )
|
||||||
{
|
{
|
||||||
// Update tax ID in product column id_tax_rules_group, value 62, table materac_product
|
// check actual tax ID
|
||||||
Db::getInstance()->update('product', ['id_tax_rules_group' => 62], 'id_product = '.(int)$mainProduct->id );
|
$currentTaxId = Db::getInstance()->getValue('SELECT id_tax_rules_group FROM '._DB_PREFIX_.'product WHERE id_product = '.(int)$mainProduct->id);
|
||||||
// also table materac_product_shop
|
if ($currentTaxId == 62) {
|
||||||
Db::getInstance()->update('product_shop', ['id_tax_rules_group' => 62], 'id_product = '.(int)$mainProduct->id );
|
// echo '<p>Produkt już ma ustawiony ID podatku 62: ' . (string)$mainProductData->title . '</p>';
|
||||||
|
} 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 '<p>Zaktualizowano ID podatku dla produktu: ' . (string)$mainProductData->title . '</p>';
|
||||||
|
|
||||||
// change product to active by db
|
// change product to active by db
|
||||||
Db::getInstance()->update('product', ['active' => 1], 'id_product = '.(int)$mainProduct->id);
|
Db::getInstance()->update('product', ['active' => 1], 'id_product = '.(int)$mainProduct->id);
|
||||||
Db::getInstance()->update('product_shop', ['active' => 1], 'id_product = '.(int)$mainProduct->id );
|
Db::getInstance()->update('product_shop', ['active' => 1], 'id_product = '.(int)$mainProduct->id . ' AND id_shop = 1');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user