2260 lines
114 KiB
PHP
2260 lines
114 KiB
PHP
<?php
|
||
if(!defined('_PS_VERSION_')) {
|
||
exit;
|
||
}
|
||
include_once(_PS_ROOT_DIR_.'/modules/privatesales/Sale.php');
|
||
|
||
class AdminBulkUpdate extends AdminTab {
|
||
public $_html = '';
|
||
|
||
public function postProcess() {
|
||
global $cookie;
|
||
|
||
set_time_limit(300);
|
||
|
||
if (Tools::isSubmit('submitUploadProductCustoms')) {
|
||
$process = (int) Tools::getValue('customs_process');
|
||
if(isset($_FILES['csvfile']) && $_FILES['csvfile']['name'] != '') {
|
||
$f = fopen($_FILES['csvfile']['tmp_name'], 'r');
|
||
fgetcsv($f, 0, ';');
|
||
|
||
$products = array();
|
||
|
||
while($line = fgetcsv($f, 0, ';')) {
|
||
if($line[0] == '' || $line[1] == '' || $line[2] == '') {
|
||
continue;
|
||
}
|
||
|
||
$products[(int)$line[0]] = $line;
|
||
}
|
||
if($process == 1) {
|
||
Db::getInstance()->ExecuteS('
|
||
DELETE FROM `'._DB_PREFIX_.'product_customs`
|
||
WHERE `id_product` IN ('.implode(', ', array_keys($products)).')
|
||
');
|
||
|
||
}
|
||
|
||
foreach($products as $line) {
|
||
Db::getInstance()->ExecuteS('
|
||
INSERT INTO `'._DB_PREFIX_.'product_customs` VALUES (
|
||
'.(int) $line[0].',
|
||
"'.pSQL($line[1]).'",
|
||
"'.pSQL($line[2]).'"
|
||
)
|
||
');
|
||
}
|
||
|
||
fclose($f);
|
||
$output .= '<p class="conf">'.$this->l('Product customs updated').'</p>';
|
||
}
|
||
}elseif (Tools::isSubmit('submitUploadQuantities')) {
|
||
$process = (int) Tools::getValue('qty_process');
|
||
if(isset($_FILES['csvfile']) && $_FILES['csvfile']['name'] != '') {
|
||
$f = fopen($_FILES['csvfile']['tmp_name'], 'r');
|
||
fgetcsv($f, 0, ';');
|
||
$ean_ok = TRUE;
|
||
$i = 2;
|
||
while($line = fgetcsv($f, 0, ';')) {
|
||
if(isset($line[4]) && $line[4] != '' && !Validate::isEan13($line[4])) {
|
||
$ean_ok = FALSE;
|
||
break;
|
||
}
|
||
$i++;
|
||
}
|
||
fclose($f);
|
||
|
||
if(!$ean_ok) {
|
||
$output .= '<p class="error">'.$this->l('Invalid EAN13 on line').' '.$i.'</p>';
|
||
return $output.$this->displayForm();
|
||
}
|
||
|
||
$f = fopen($_FILES['csvfile']['tmp_name'], 'r');
|
||
fgetcsv($f, 0, ';');
|
||
$i = 1;
|
||
while($line = fgetcsv($f, 0, ';')) {
|
||
$i++;
|
||
$product = new Product((int) $line[0]);
|
||
if(Validate::isLoadedObject($product)) {
|
||
if((int) $line[1] != 0) {
|
||
if(!Db::getInstance()->getRow('
|
||
SELECT `id_product_attribute`
|
||
FROM `'._DB_PREFIX_.'product_attribute`
|
||
WHERE `id_product` = '.(int) $line[0].'
|
||
AND `id_product_attribute` = '.(int) $line[1].'
|
||
')) {
|
||
$output .= '<p class="error">'.$this->l('Invalid attribute ID for this product ID on line').' '.$i.'</p>';
|
||
continue;
|
||
}
|
||
}
|
||
|
||
if($line[2] != '') {
|
||
$qty = (int) $line[2];
|
||
$old_qty = Product::getQuantity((int) $line[0], (int) $line[1] == 0? NULL: (int) $line[1]);
|
||
|
||
if($process == 0) {
|
||
$product->addStockMvt($qty, 5, (int) $line[1]);
|
||
} else {
|
||
if($qty > $old_qty) {
|
||
$product->addStockMvt($qty - $old_qty, 5, (int) $line[1]);
|
||
} else {
|
||
$product->addStockMvt(-($old_qty - $qty), 5, (int) $line[1]);
|
||
}
|
||
}
|
||
}
|
||
|
||
if(isset($line[4]) && $line[4] != '' && Validate::isEan13($line[4])) {
|
||
if((int) $line[1] != 0) {
|
||
Db::getInstance()->ExecuteS('
|
||
UPDATE `'._DB_PREFIX_.'product_attribute`
|
||
SET `ean13` = "'.pSQL($line[4]).'"
|
||
WHERE `id_product` = '.(int) $line[0].'
|
||
AND `id_product_attribute` = '.(int) $line[1].'
|
||
LIMIT 1
|
||
');
|
||
} else {
|
||
Db::getInstance()->ExecuteS('
|
||
UPDATE `'._DB_PREFIX_.'product`
|
||
SET `ean13` = "'.pSQL($line[4]).'"
|
||
WHERE `id_product` = '.(int) $line[0].'
|
||
LIMIT 1
|
||
');
|
||
}
|
||
|
||
Db::getInstance()->ExecuteS('
|
||
UPDATE `'._DB_PREFIX_.'order_detail`
|
||
SET `product_ean13` = "'.pSQL($line[4]).'"
|
||
WHERE `product_id` = '.(int) $line[0].'
|
||
AND `product_attribute_id` = '.(int) $line[1].'
|
||
');
|
||
}
|
||
|
||
|
||
if(isset($line[5]) && $line[5] != '' && Validate::isReference($line[5])) {
|
||
if((int) $line[1] != 0) {
|
||
Db::getInstance()->ExecuteS('
|
||
UPDATE `'._DB_PREFIX_.'product_attribute`
|
||
SET `location` = "'.pSQL($line[5]).'"
|
||
WHERE `id_product` = '.(int) $line[0].'
|
||
AND `id_product_attribute` = '.(int) $line[1].'
|
||
LIMIT 1
|
||
');
|
||
} else {
|
||
Db::getInstance()->ExecuteS('
|
||
UPDATE `'._DB_PREFIX_.'product`
|
||
SET `location` = "'.pSQL($line[5]).'"
|
||
WHERE `id_product` = '.(int) $line[0].'
|
||
LIMIT 1
|
||
');
|
||
}
|
||
}
|
||
} else {
|
||
$output .= '<p class="warn">'.$this->l('Product #').(int) $line[0].' '.$this->l('not found').'</p>';
|
||
}
|
||
}
|
||
fclose($f);
|
||
$output .= '<p class="conf">'.$this->l('Products updated').'</p>';
|
||
}
|
||
} elseif(Tools::isSubmit('submitUploadCategories')) {
|
||
$f = fopen($_FILES['csvfile']['tmp_name'], 'r');
|
||
fgetcsv($f, 0, ';');
|
||
|
||
$products = array();
|
||
$defaults = array();
|
||
$positions = array();
|
||
|
||
while($line = fgetcsv($f, 0, ';')) {
|
||
if(empty($line[0])) {
|
||
continue;
|
||
}
|
||
|
||
if(!isset($line[1])) {
|
||
continue;
|
||
}
|
||
|
||
if(isset($line[2]) && !empty($line[2]) && (int) $line[2] != 0) {
|
||
$defaults[(int) $line[0]] = (int) $line[2];
|
||
}
|
||
|
||
$categories = array_map('intval', explode(',', $line[1]));
|
||
$products[(int) $line[0]] = $categories;
|
||
foreach($categories as $id_category) {
|
||
$positions[(int) $id_category] = 1;
|
||
}
|
||
}
|
||
|
||
fclose($f);
|
||
|
||
if(Tools::getValue('category_process') == 1) {
|
||
Db::getInstance()->ExecuteS('
|
||
DELETE FROM `'._DB_PREFIX_.'category_product`
|
||
WHERE `id_product` IN ('.implode(', ', array_keys($products)).')
|
||
');
|
||
}
|
||
|
||
foreach(Db::getInstance()->ExecuteS('
|
||
SELECT `id_category`, MAX(`position`) AS `position`
|
||
FROM `'._DB_PREFIX_.'category_product`
|
||
WHERE `id_category` IN ('.implode(', ', array_keys($positions)).')
|
||
GROUP BY `id_category`
|
||
') as $row) {
|
||
$positions[(int) $row['id_category']] = (int) $row['position'];
|
||
}
|
||
|
||
foreach($products as $id_product => $id_categories) {
|
||
foreach($id_categories as $id_category) {
|
||
Db::getInstance()->ExecuteS('
|
||
INSERT INTO `'._DB_PREFIX_.'category_product` VALUES (
|
||
'.(int) $id_category.',
|
||
'.(int) $id_product.',
|
||
'.(int) ++$positions[(int) $id_category].'
|
||
)
|
||
');
|
||
}
|
||
}
|
||
|
||
foreach($defaults as $id_product => $id_category_default) {
|
||
Db::getInstance()->ExecuteS('
|
||
UPDATE `'._DB_PREFIX_.'product`
|
||
SET `id_category_default` = '.(int) $id_category_default.'
|
||
WHERE `id_product` = '.(int) $id_product.'
|
||
LIMIT 1
|
||
');
|
||
|
||
if(!$row = Db::getInstance()->getRow('
|
||
SELECT `id_product`
|
||
FROM `'._DB_PREFIX_.'category_product`
|
||
WHERE `id_product` = '.(int) $id_product.'
|
||
AND `id_category` = '.(int) $id_category_default.'
|
||
')) {
|
||
$pos = (int) Db::getInstance()->getValue('
|
||
SELECT MAX(`position`)
|
||
FROM `'._DB_PREFIX_.'category_product`
|
||
WHERE `id_category` = '.(int) $id_category_default.'
|
||
') + 1;
|
||
Db::getInstance()->ExecuteS('
|
||
INSERT INTO `'._DB_PREFIX_.'category_product` VALUES (
|
||
'.(int) $id_category_default.',
|
||
'.(int) $id_product.',
|
||
'.(int) $pos.'
|
||
)
|
||
');
|
||
}
|
||
}
|
||
|
||
$output .= '<p class="conf">'.$this->l('Products updated').'</p>';
|
||
} elseif(Tools::isSubmit('submitUploadAccessories')) {
|
||
$f = fopen($_FILES['csvfile']['tmp_name'], 'r');
|
||
fgetcsv($f, 0, ';');
|
||
|
||
$products = array();
|
||
|
||
while($line = fgetcsv($f, 0, ';')) {
|
||
if(empty($line[0]) || empty($line[1])) {
|
||
continue;
|
||
}
|
||
|
||
if(!isset($products[(int) $line[0]])) {
|
||
$products[(int) $line[0]] = array();
|
||
}
|
||
$products[(int) $line[0]][] = (int) $line[1];
|
||
}
|
||
|
||
fclose($f);
|
||
|
||
if(Tools::getValue('access_process') == 1) {
|
||
Db::getInstance()->ExecuteS('
|
||
DELETE FROM `'._DB_PREFIX_.'accessory`
|
||
WHERE `id_product_1` IN ('.implode(', ', array_keys($products)).')
|
||
');
|
||
}
|
||
|
||
foreach($products as $id_product_1 => $id_products_2) {
|
||
foreach($id_products_2 as $id_product_2) {
|
||
Db::getInstance()->ExecuteS('
|
||
INSERT INTO `'._DB_PREFIX_.'accessory` VALUES (
|
||
'.(int) $id_product_1.',
|
||
'.(int) $id_product_2.'
|
||
)
|
||
');
|
||
}
|
||
}
|
||
|
||
$output .= '<p class="conf">'.$this->l('Products updated').'</p>';
|
||
}elseif(Tools::isSubmit('submitUploadImages')) {
|
||
$f = fopen($_FILES['csvfile']['tmp_name'], 'r');
|
||
fgetcsv($f, 0, ';');
|
||
|
||
$products = array();
|
||
$products_a = array();
|
||
$products_a_ids = array();
|
||
|
||
while($line = fgetcsv($f, 0, ';')) {
|
||
if(empty($line[0])) {
|
||
continue;
|
||
}
|
||
|
||
if(!isset($line[1])
|
||
|| empty($line[1])) {
|
||
continue;
|
||
}
|
||
|
||
if(isset($line[2]) && !empty($line[2])) {
|
||
if(!isset($products_a[(int) $line[0]])) {
|
||
$products_a[(int) $line[0]] = array(array(), array());
|
||
}
|
||
|
||
$products_a[(int) $line[0]][0] = array_merge($products_a[(int) $line[0]][0], array_map('trim', explode(',', $line[1])));
|
||
$products_a[(int) $line[0]][1][(int) $line[2]] = array_map('trim', explode(',', $line[1]));
|
||
$products_a_ids[] = (int) $line[2];
|
||
} else {
|
||
$products[(int) $line[0]] = array_map('trim', explode(',', $line[1]));
|
||
}
|
||
}
|
||
|
||
fclose($f);
|
||
|
||
if(Tools::getValue('image_process') == 1) {
|
||
if(count($products) > 0) {
|
||
foreach(Db::getInstance()->ExecuteS('
|
||
SELECT `id_image`
|
||
FROM `'._DB_PREFIX_.'image`
|
||
WHERE `id_product` IN ('.implode(', ', array_keys($products)).')
|
||
') as $row) {
|
||
$i = new Image((int) $row['id_image']);
|
||
$i->delete();
|
||
}
|
||
}
|
||
|
||
if(count($products_a_ids) > 0) {
|
||
foreach(Db::getInstance()->ExecuteS('
|
||
SELECT DISTINCT i.`id_image`
|
||
FROM `'._DB_PREFIX_.'image` i
|
||
LEFT JOIN `'._DB_PREFIX_.'product_attribute` a
|
||
ON i.`id_product` = a.`id_product`
|
||
WHERE a.`id_product_attribute` IN ('.implode(', ', $products_a_ids).')
|
||
') as $row) {
|
||
$i = new Image((int) $row['id_image']);
|
||
$i->delete();
|
||
}
|
||
}
|
||
}
|
||
|
||
foreach($products as $id_product => $urls) {
|
||
foreach($urls as $key => $url) {
|
||
$image = new Image();
|
||
$image->id_product = $id_product;
|
||
$image->position = Image::getHighestPosition($id_product) + 1;
|
||
if ($key == 0 && Tools::getValue('image_process') == 1) {
|
||
$image->cover = true;
|
||
} else {
|
||
$image->cover = FALSE;
|
||
}
|
||
$image->legend = self::createMultiLangField(Db::getInstance()->getValue('
|
||
SELECT `name`
|
||
FROM `'._DB_PREFIX_.'product_lang`
|
||
WHERE `id_product` = '.(int) $id_product.'
|
||
AND `id_lang` = 2
|
||
'));
|
||
$image->add();
|
||
self::copyImg($id_product, $image->id, $url, 'products');
|
||
}
|
||
}
|
||
$_id_products = array();
|
||
|
||
foreach($products_a as $id_product => $data) {
|
||
$_id_products[] = $id_product;
|
||
foreach(array_unique($data[0]) as $url) {
|
||
$image = new Image();
|
||
$image->id_product = $id_product;
|
||
$image->position = Image::getHighestPosition($id_product) + 1;
|
||
$image->cover = FALSE;
|
||
$image->legend = self::createMultiLangField(Db::getInstance()->getValue('
|
||
SELECT `name`
|
||
FROM `'._DB_PREFIX_.'product_lang`
|
||
WHERE `id_product` = '.(int) $id_product.'
|
||
AND `id_lang` = 2
|
||
'));
|
||
$image->add();
|
||
self::copyImg($id_product, $image->id, $url, 'products');
|
||
foreach($data[1] as $id_product_attribute => $urls) {
|
||
if(in_array($url, $urls)) {
|
||
Db::getInstance()->ExecuteS('
|
||
INSERT INTO `'._DB_PREFIX_.'product_attribute_image`
|
||
VALUES (
|
||
'.(int) $id_product_attribute.',
|
||
'.(int) $image->id.'
|
||
)
|
||
');
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
$covers = array();
|
||
foreach(Db::getInstance()->ExecuteS('
|
||
SELECT `id_product`
|
||
FROM `'._DB_PREFIX_.'image`
|
||
WHERE `id_product` IN ('.implode(', ', array_merge($_id_products, array_keys($products))).')
|
||
AND `cover` = 1
|
||
') as $row) {
|
||
$covers[] = (int) $row['id_product'];
|
||
}
|
||
|
||
$to_cover = array_diff(array_merge($_id_products, array_keys($products)), $covers);
|
||
|
||
foreach($to_cover as $id_product) {
|
||
Db::getInstance()->ExecuteS('
|
||
UPDATE `'._DB_PREFIX_.'image`
|
||
SET `cover` = 1
|
||
WHERE `id_product` = '.(int) $id_product.'
|
||
LIMIT 1
|
||
');
|
||
}
|
||
|
||
$output .= '<p class="conf">'.$this->l('Products updated').'</p>';
|
||
} elseif(Tools::isSubmit('submitUploadStatus')) {
|
||
$f = fopen($_FILES['csvfile']['tmp_name'], 'r');
|
||
fgetcsv($f, 0, ';');
|
||
|
||
$products_0 = array();
|
||
$products_1 = array();
|
||
|
||
while($line = fgetcsv($f, 0, ';')) {
|
||
if(empty($line[0]) || !isset($line[1])) {
|
||
continue;
|
||
}
|
||
|
||
if((int) $line[1] == 0) {
|
||
$products_0[] = (int) $line[0];
|
||
} else {
|
||
$products_1[] = (int) $line[0];
|
||
}
|
||
}
|
||
|
||
fclose($f);
|
||
|
||
if(count($products_0) > 0) {
|
||
Db::getInstance()->ExecuteS('
|
||
UPDATE `'._DB_PREFIX_.'product`
|
||
SET `active` = 0
|
||
WHERE `id_product` IN ('.implode(', ', $products_0).')
|
||
');
|
||
}
|
||
|
||
if(count($products_1) > 0) {
|
||
Db::getInstance()->ExecuteS('
|
||
UPDATE `'._DB_PREFIX_.'product`
|
||
SET `active` = 1
|
||
WHERE `id_product` IN ('.implode(', ', $products_1).')
|
||
');
|
||
}
|
||
|
||
$output .= '<p class="conf">'.$this->l('Products updated').'</p>';
|
||
} elseif(Tools::isSubmit('submitUploadPrices')) {
|
||
$f = fopen($_FILES['csvfile']['tmp_name'], 'r');
|
||
fgetcsv($f, 0, ';');
|
||
|
||
$products = array();
|
||
$prices = array();
|
||
|
||
if(Tools::getValue('price_process') == 2) {
|
||
while($line = fgetcsv($f, 0, ';')) {
|
||
if(empty($line[0])) {
|
||
continue;
|
||
}
|
||
|
||
$products[] = (int) $line[0];
|
||
}
|
||
} elseif(Tools::getValue('price_process') == 3
|
||
|| Tools::getValue('price_process') == 4){
|
||
while($line = fgetcsv($f, 0, ';')) {
|
||
if(empty($line[0])) {
|
||
continue;
|
||
}
|
||
|
||
$prices[] = array(
|
||
(int) $line[0],
|
||
$line[1]
|
||
);
|
||
}
|
||
}else {
|
||
while($line = fgetcsv($f, 0, ';')) {
|
||
if(empty($line[0])) {
|
||
continue;
|
||
}
|
||
|
||
if(!isset($line[1])) {
|
||
continue;
|
||
}
|
||
|
||
$products[] = (int) $line[0];
|
||
$prices[] = array(
|
||
(int) $line[0],
|
||
(float) $line[1] > 1? (float) $line[1] / 100: (float) $line[1]
|
||
);
|
||
|
||
}
|
||
}
|
||
|
||
fclose($f);
|
||
|
||
if(Tools::getValue('price_process') == 1
|
||
|| Tools::getValue('price_process') == 2) {
|
||
Db::getInstance()->ExecuteS('
|
||
DELETE FROM `'._DB_PREFIX_.'specific_price`
|
||
WHERE `id_product` IN ('.implode(', ', $products).')
|
||
');
|
||
}
|
||
|
||
if(Tools::getValue('price_process') == 1) {
|
||
foreach($prices as $price) {
|
||
if((int) $price[0] != 0) {
|
||
Db::getInstance()->ExecuteS('
|
||
INSERT INTO `'._DB_PREFIX_.'specific_price` VALUES (
|
||
DEFAULT,
|
||
'.(int) $price[0].',
|
||
1,
|
||
0,
|
||
0,
|
||
0,
|
||
0.0,
|
||
1,
|
||
'.(float) $price[1].',
|
||
"percentage",
|
||
"0000-00-00 00:00:00",
|
||
"0000-00-00 00:00:00"
|
||
)
|
||
');
|
||
} else {
|
||
$output .= '<p class="error">ID produit à 0, ligne non traitée : '.serialize($price).'</p>';
|
||
}
|
||
}
|
||
}
|
||
if(Tools::getValue('price_process') == 3) {
|
||
foreach($prices as $price) {
|
||
if((int) $price[0] != 0){
|
||
$price[1] = str_replace(',', '.', $price[1]);
|
||
$price_ht = floatval($price[1]);
|
||
Db::getInstance()->ExecuteS('
|
||
UPDATE `'._DB_PREFIX_.'product`
|
||
SET wholesale_price = '. (float)$price_ht .'
|
||
WHERE id_product ='. (int)$price[0]);
|
||
}else{
|
||
$output .= '<p class="error">ID produit à 0, ligne non traitée : '.serialize($price).'</p>';
|
||
}
|
||
}
|
||
}
|
||
if(Tools::getValue('price_process') == 4) {
|
||
foreach($prices as $price) {
|
||
if((int) $price[0] != 0){
|
||
$price[1] = str_replace(',', '.', $price[1]);
|
||
$price_ht = floatval($price[1] / 1.20);
|
||
Db::getInstance()->ExecuteS('
|
||
UPDATE `'._DB_PREFIX_.'product`
|
||
SET price = '. (float)$price_ht .'
|
||
WHERE id_product ='. (int)$price[0]);
|
||
}else{
|
||
$output .= '<p class="error">ID produit à 0, ligne non traitée : '.serialize($price).'</p>';
|
||
}
|
||
}
|
||
}
|
||
|
||
$output .= '<p class="conf">'.$this->l('Products updated').'</p>';
|
||
} elseif(Tools::isSubmit('submitUploadProductDescriptions')) {
|
||
$id_lang = Tools::getValue('description_process');
|
||
$f = fopen($_FILES['csvfile']['tmp_name'], 'r');
|
||
fgetcsv($f, 0, ';');
|
||
|
||
$products = array();
|
||
|
||
while($line = fgetcsv($f, 0, ';')) {
|
||
if($line[0] == '' || $line[1] == '') {
|
||
continue;
|
||
}
|
||
|
||
$products[] = $line;
|
||
}
|
||
foreach($products as $line) {
|
||
$result = Db::getInstance()->ExecuteS('
|
||
UPDATE `'._DB_PREFIX_.'product_lang`
|
||
SET `description` = "'. pSQL($line[1],true) .'"
|
||
WHERE `id_product` ='. (int) $line[0].'
|
||
AND `id_lang` = '.(int) $id_lang.'
|
||
');
|
||
/*if (!$result) {
|
||
$output .= '<p class="error">ligne non traitée, id_product: '.$line[0].'</p>';
|
||
}*/
|
||
}
|
||
|
||
fclose($f);
|
||
$output .= '<p class="conf">'.$this->l('Products updated').'</p>';
|
||
} elseif(Tools::isSubmit('submitUploadCombinations')) {
|
||
$f = fopen($_FILES['csvfile']['tmp_name'], 'r');
|
||
fgetcsv($f, 0, ';');
|
||
|
||
$products = array();
|
||
|
||
while($line = fgetcsv($f, 0, ';')) {
|
||
if(empty($line[0])) {
|
||
continue;
|
||
}
|
||
|
||
$products[] = (int) $line[0];
|
||
}
|
||
|
||
Db::getInstance()->ExecuteS('
|
||
DELETE FROM `'._DB_PREFIX_.'product_attribute_combination`
|
||
WHERE `id_product_attribute` IN (
|
||
SELECT `id_product_attribute`
|
||
FROM `'._DB_PREFIX_.'product_attribute`
|
||
WHERE `id_product` IN ('.implode(', ', $products).')
|
||
)
|
||
');
|
||
|
||
Db::getInstance()->ExecuteS('
|
||
DELETE FROM `'._DB_PREFIX_.'product_attribute`
|
||
WHERE `id_product` IN ('.implode(', ', $products).')
|
||
');
|
||
|
||
Db::getInstance()->ExecuteS('
|
||
UPDATE `'._DB_PREFIX_.'product`
|
||
SET `quantity` = 0
|
||
WHERE `id_product` IN ('.implode(', ', $products).')
|
||
');
|
||
|
||
fclose($f);
|
||
|
||
$output .= '<p class="conf">'.$this->l('Products updated').'</p>';
|
||
|
||
} elseif(Tools::isSubmit('submitExportDeb')){
|
||
set_time_limit(300);
|
||
$id_lang = Tools::getValue('id_lang', $cookie->id_lang);
|
||
$deb = Tools::getValue('deb', 0);
|
||
|
||
if (!$deb) {
|
||
$output .= '<p class="error">Erreur produit: Vous devez choisir une date</p>';
|
||
}
|
||
if (!Tools::getValue('date_start') || !Tools::getValue('date_end')) {
|
||
$output .= '<p class="error">Erreur produit: Vous devez choisir une date</p>';
|
||
}
|
||
|
||
$date_start = Tools::getValue('date_start');
|
||
$date_end = Tools::getValue('date_end');
|
||
|
||
switch ($deb) {
|
||
case '1':
|
||
// DEB INTRODUCTION
|
||
$ids = Db::getInstance()->ExecuteS('
|
||
SELECT c.id_category
|
||
FROM `'._DB_PREFIX_.'privatesale` p
|
||
LEFT JOIN `'._DB_PREFIX_.'privatesale_category` c ON c.id_sale = p.id_sale
|
||
WHERE date_start BETWEEN "'. $date_start .' 00:00:00" AND "'. $date_end .' 00:00:00"
|
||
ORDER BY date_start ASC
|
||
');
|
||
if (!$ids) {
|
||
$output .= '<p class="error">Erreur produit: Pas de ventes trouvées</p>';
|
||
break;
|
||
}
|
||
|
||
setlocale(LC_TIME, "fr_FR");
|
||
$products = array();
|
||
$category_properties = array();
|
||
foreach($ids as $id) {
|
||
$id_category = $id['id_category'];
|
||
foreach(Category::getProductsWsSold((int)$id_category) as $p) {
|
||
$products[] = $p['id'];
|
||
if (!is_array($category_properties[(int)$p['id']])) {
|
||
$privatesale = Sale::getSaleFromCategory((int) $id_category);
|
||
$country_ps = '';
|
||
if ($privatesale->id_country > 0) {
|
||
$country_ps = Country::getNameById((int)$id_lang,(int)$privatesale->id_country);
|
||
}
|
||
$category_properties[(int)$p['id']] = array(
|
||
'name' => $privatesale->title[(int)$id_lang],
|
||
'country' => $country_ps,
|
||
'month' => strftime("%B", strtotime($privatesale->date_start)),
|
||
'id_country' => (int)$privatesale->id_country
|
||
);
|
||
}
|
||
}
|
||
}
|
||
$products = array_unique($products);
|
||
|
||
if(count($products) > 20000){
|
||
$output .= '<p class="conf">Choisir une plage moins grande. <br /> Export > 20000 produits</p>';
|
||
break;
|
||
};
|
||
|
||
$fname = 'DEB-int-'.date( "Ymd", strtotime($date_start)).'-'.date( "Ymd", strtotime($date_end)).'.csv';
|
||
foreach(glob(dirname(__FILE__).'/*.csv') as $filename) {
|
||
if ($fname == $filename) {
|
||
unlink($filename);
|
||
}
|
||
}
|
||
$f = fopen(dirname(__FILE__).'/'.$fname, 'w');
|
||
|
||
// uft8 sans bom pour accent
|
||
$BOM = "\xEF\xBB\xBF"; // UTF-8 BOM
|
||
fwrite($f, $BOM); // NEW LINE
|
||
|
||
fputcsv($f, array(
|
||
'Ordre',
|
||
'Pays de provenance',
|
||
'Marque',
|
||
'Mois',
|
||
'Référence fournisseur',
|
||
'Produit',
|
||
'Nomenclature',
|
||
'NGP9',
|
||
'Pays d’origine',
|
||
'Valeur',
|
||
'Régime',
|
||
'Masse',
|
||
'Unité supplémentaire',
|
||
'Nature de transaction',
|
||
'Mode de transport',
|
||
'Département '
|
||
), ';', '"');
|
||
$pos = 0;
|
||
foreach($products as $product) {
|
||
$p = new Product((int) $product, $id_lang);
|
||
if(!Validate::isLoadedObject($p)) {
|
||
$output .= '<p class="error">Erreur produit: '.serialize($product).' ce produit ne figure pas dans l\'export</p>';
|
||
} else {
|
||
|
||
$customs = Db::getInstance()->getRow('
|
||
SELECT `nc8`, `id_country`
|
||
FROM `'._DB_PREFIX_.'product_customs`
|
||
WHERE `id_product` = '.(int) $p->id
|
||
);
|
||
if (strtolower($customs['id_country']) == 'france') {
|
||
continue;
|
||
}
|
||
|
||
$ue_countries = array(1,2,3,6,7,9,10,12,13,14,15,16,17,18,19,20,26,36,37);
|
||
if (!in_array($category_properties[$p->id]['id_country'], $ue_countries)) {
|
||
continue;
|
||
}
|
||
/*$country_product = Db::getInstance()->getRow('
|
||
SELECT `id_country`
|
||
FROM `'._DB_PREFIX_.'country_lang`
|
||
WHERE `name` LIKE \''.pSQL(ucfirst(strtolower($customs['id_country']))).'\'
|
||
AND `id_lang` = '.(int)($id_lang)
|
||
);
|
||
if (!in_array((int)$country_product['id_country'], $ue_countries)) {
|
||
continue;
|
||
}*/
|
||
|
||
$position = Db::getInstance()->getValue('
|
||
SELECT `position`
|
||
FROM `'._DB_PREFIX_.'category_product`
|
||
WHERE `id_category` = '.(int) $p->id_category_default.'
|
||
AND id_product = '. (int) $p->id . '
|
||
');
|
||
$p->position = $position;
|
||
|
||
$combinations = array();
|
||
foreach($p->getAttributeCombinaisons($id_lang) as $combi) {
|
||
if(!isset($combinations[$combi['id_product_attribute']])) {
|
||
$combinations[$combi['id_product_attribute']] = array(
|
||
'qty' => $combi['quantity'],
|
||
'name' => array($combi['attribute_name']),
|
||
'ean13' => $combi['ean13'],
|
||
'location' => empty($combi['location'])? $p->location: $combi['location'],
|
||
'brand' => $p->manufacturer_name,
|
||
'supplier_reference' => empty($combi['supplier_reference'])? $p->supplier_reference: $combi['supplier_reference'],
|
||
);
|
||
} else {
|
||
$combinations[$combi['id_product_attribute']]['name'][] = $combi['attribute_name'];
|
||
}
|
||
}
|
||
|
||
$quantity_sold = 0;
|
||
if(count($combinations) > 0) {
|
||
foreach($combinations as $k => $v) {
|
||
|
||
$quantity_sold += (int) Db::getInstance()->getValue('
|
||
SELECT SUM(d.`product_quantity`)
|
||
FROM `'._DB_PREFIX_.'order_detail` d
|
||
LEFT JOIN `'._DB_PREFIX_.'orders` o ON o.`id_order` = d.`id_order`
|
||
WHERE d.`product_id` = '.(int) $p->id.'
|
||
AND d.`product_attribute_id` = '.(int) $k.'
|
||
AND (
|
||
SELECT `id_order_state`
|
||
FROM `'._DB_PREFIX_.'order_history`
|
||
WHERE `id_order`=d.`id_order`
|
||
ORDER BY `date_add` DESC LIMIT 1
|
||
) NOT IN (1,6,8,9,10,11,14,15,18)
|
||
');
|
||
|
||
/*if ($quantity_sold == 0) {
|
||
continue;
|
||
}
|
||
|
||
$names = array_unique($v['name']);
|
||
sort($names, SORT_STRING);
|
||
|
||
fputcsv($f, array(
|
||
$p->position,
|
||
$category_properties[$p->id]['country'],
|
||
$category_properties[$p->id]['name'],
|
||
$category_properties[$p->id]['month'],
|
||
$v['supplier_reference'],
|
||
$p->name[$id_lang].' - '.implode(' ', $names),
|
||
$customs['nc8'],
|
||
'',
|
||
$customs['id_country'],
|
||
str_replace('.', ',', Tools::ps_round(($quantity_sold * $p->wholesale_price),2)),
|
||
11,
|
||
str_replace('.', ',', Tools::ps_round(($p->weight * $quantity_sold),2)),
|
||
$quantity_sold,
|
||
11,
|
||
3,
|
||
31
|
||
), ';', '"');*/
|
||
}
|
||
} else {
|
||
|
||
$quantity_sold += (int) Db::getInstance()->getValue('
|
||
SELECT SUM(d.`product_quantity`)
|
||
FROM `'._DB_PREFIX_.'order_detail` d
|
||
LEFT JOIN `'._DB_PREFIX_.'orders` o ON o.`id_order` = d.`id_order`
|
||
WHERE d.`product_id` = '.(int) $p->id.'
|
||
AND (
|
||
SELECT `id_order_state`
|
||
FROM `'._DB_PREFIX_.'order_history`
|
||
WHERE `id_order`=d.`id_order`
|
||
ORDER BY `date_add` DESC LIMIT 1
|
||
) NOT IN (1,6,8,9,10,11,14,15,18)
|
||
');
|
||
|
||
/*if ($quantity_sold == 0) {
|
||
continue;
|
||
}
|
||
fputcsv($f, array(
|
||
//$p->position,
|
||
$pos,
|
||
$category_properties[$p->id]['country'],
|
||
$category_properties[$p->id]['name'],
|
||
$category_properties[$p->id]['month'],
|
||
$p->supplier_reference,
|
||
$p->name[$id_lang],
|
||
$customs['nc8'],
|
||
'',
|
||
$customs['id_country'],
|
||
str_replace('.', ',', Tools::ps_round(($quantity_sold * $p->wholesale_price),2)),
|
||
11,
|
||
str_replace('.', ',', Tools::ps_round(($p->weight * $quantity_sold),2)),
|
||
$quantity_sold,
|
||
11,
|
||
3,
|
||
31
|
||
), ';', '"');*/
|
||
|
||
}
|
||
if ($quantity_sold == 0) {
|
||
continue;
|
||
}
|
||
$pos++;
|
||
fputcsv($f, array(
|
||
//$p->position,
|
||
$pos,
|
||
$category_properties[$p->id]['country'],
|
||
$category_properties[$p->id]['name'],
|
||
$category_properties[$p->id]['month'],
|
||
$p->supplier_reference,
|
||
$p->name[$id_lang],
|
||
$customs['nc8'],
|
||
'',
|
||
$customs['id_country'],
|
||
str_replace('.', ',', Tools::ps_round(($quantity_sold * $p->wholesale_price),2)),
|
||
11,
|
||
str_replace('.', ',', Tools::ps_round(($p->weight * $quantity_sold),2)),
|
||
$quantity_sold,
|
||
11,
|
||
3,
|
||
31
|
||
), ';', '"');
|
||
}
|
||
}
|
||
fclose($f);
|
||
$output .= '<p class="conf">'.$this->l('Export complete.').' <a onclick="window.open(this.href); return false;" href="http://'.$_SERVER['HTTP_HOST'].__PS_BASE_URI__.'modules/bulkupdate/'.$fname.'">'.$this->l('Click here to download the file').'</a></p>';
|
||
|
||
break;
|
||
case '2':
|
||
// DEB EXPEDITION
|
||
|
||
// Seulement les expeditions vers Espagne et Belgique
|
||
$orders = Db::getInstance()->ExecuteS('
|
||
SELECT DISTINCT od.`id_order_detail`, od.`product_id`, psc.`id_sale`, a.`id_country` as country_exp
|
||
FROM `'._DB_PREFIX_.'order_detail` od
|
||
LEFT JOIN `'._DB_PREFIX_.'orders` o ON (o.`id_order` = od.`id_order`)
|
||
LEFT JOIN `'._DB_PREFIX_.'product_ps_cache` psc ON (psc.`id_product` = od.`product_id`)
|
||
LEFT JOIN `'._DB_PREFIX_.'address` a ON (a.`id_address` = o.`id_address_delivery`)
|
||
WHERE
|
||
o.date_add >= "'.$date_start.' 00:00:00"
|
||
AND o.date_add <= "'.$date_end.' 23:59:59"
|
||
AND a.`id_country` IN (3,6)
|
||
AND
|
||
(o.valid = 1
|
||
OR (
|
||
o.valid = 0
|
||
AND (
|
||
(SELECT h.id_order_state FROM `'._DB_PREFIX_.'order_history` h WHERE h.id_order = o.id_order ORDER BY h.date_add DESC LIMIT 1) = 6
|
||
OR (SELECT h.id_order_state FROM `'._DB_PREFIX_.'order_history` h WHERE h.id_order = o.id_order ORDER BY h.date_add DESC LIMIT 1) = 7
|
||
OR (SELECT h.id_order_state FROM `'._DB_PREFIX_.'order_history` h WHERE h.id_order = o.id_order ORDER BY h.date_add DESC LIMIT 1) = 11
|
||
)
|
||
))
|
||
AND (SELECT h.id_order_state FROM `'._DB_PREFIX_.'order_history` h WHERE h.id_order = o.id_order ORDER BY h.date_add DESC LIMIT 1) != 14
|
||
-- o.`date_add` BETWEEN "'. $date_start .' 00:00:00" AND "'. $date_end .' 00:00:00
|
||
-- AND (
|
||
-- SELECT `id_order_state`
|
||
-- FROM `'._DB_PREFIX_.'order_history`
|
||
-- WHERE `id_order`=od.`id_order`
|
||
-- ORDER BY `date_add` DESC LIMIT 1
|
||
-- ) NOT IN (1,6,8,9,10,11,14,15,18)
|
||
ORDER BY od.`product_id` ASC
|
||
');
|
||
|
||
if (!$orders) {
|
||
$output .= '<p class="error">Erreur produit: Pas de commandes trouvées pour ces dates</p>';
|
||
break;
|
||
}
|
||
|
||
setlocale(LC_TIME, "fr_FR");
|
||
$products = array();
|
||
$orders_detail = array();
|
||
$row_properties = array();
|
||
$by_sale = array();
|
||
foreach($orders as $order) {
|
||
$products[] = $order['product_id'];
|
||
$orders_detail[] = $order['id_order_detail'];
|
||
if (!isset($row_properties[(int)$order['product_id']])) {
|
||
$by_sale[(int)$order['id_sale']] = array();
|
||
|
||
$privatesale = new Sale((int) $order['id_sale']);
|
||
$country_ps = '';
|
||
if ($privatesale->id_country > 0) {
|
||
$country_ps = Country::getNameById((int)$id_lang,(int)$privatesale->id_country);
|
||
}
|
||
$country_exp = Country::getNameById((int)$id_lang,(int)$order['country_exp']);
|
||
$row_properties[(int)$order['product_id']] = array(
|
||
'name' => $privatesale->title[(int)$id_lang],
|
||
'country' => $country_ps,
|
||
'month' => strftime("%B", strtotime($privatesale->date_start)),
|
||
'date' => strtotime($privatesale->date_start),
|
||
'id_sale' => (int) $order['id_sale'],
|
||
'country_exp' => $country_exp
|
||
);
|
||
}
|
||
}
|
||
|
||
$products = array_unique($products);
|
||
if(count($products) > 20000){
|
||
$output .= '<p class="conf">Choisir une plage moins grande. <br /> Export > 20000 produits</p>';
|
||
break;
|
||
};
|
||
|
||
$fname = 'DEB-exp-'.date( "Ymd", strtotime($date_start)).'-'.date( "Ymd", strtotime($date_end)).'.csv';
|
||
foreach(glob(dirname(__FILE__).'/*.csv') as $filename) {
|
||
if ($fname == $filename) {
|
||
unlink($filename);
|
||
}
|
||
}
|
||
$f = fopen(dirname(__FILE__).'/'.$fname, 'w');
|
||
|
||
// uft8 sans bom pour accent
|
||
$BOM = "\xEF\xBB\xBF"; // UTF-8 BOM
|
||
fwrite($f, $BOM); // NEW LINE
|
||
|
||
fputcsv($f, array(
|
||
'Ordre',
|
||
'Pays de provenance',
|
||
'Marque',
|
||
'Mois',
|
||
'Référence fournisseur',
|
||
'Produit',
|
||
'Nomenclature',
|
||
'NGP9',
|
||
'Pays de destination',
|
||
'Pays d\'origine',
|
||
'Valeur',
|
||
'Régime',
|
||
'Masse',
|
||
'Unité supplémentaire',
|
||
'Nature de transaction',
|
||
'Mode de transport',
|
||
'Département '
|
||
), ';', '"');
|
||
|
||
$products_detail = array();
|
||
foreach($products as $product) {
|
||
$p = new Product((int) $product, $id_lang);
|
||
if(!Validate::isLoadedObject($p)) {
|
||
$output .= '<p class="error">Erreur produit: '.serialize($product).' ce produit ne figure pas dans l\'export</p>';
|
||
} else {
|
||
|
||
$customs = Db::getInstance()->getRow('
|
||
SELECT `nc8`, `id_country`
|
||
FROM `'._DB_PREFIX_.'product_customs`
|
||
WHERE `id_product` = '.(int) $p->id
|
||
);
|
||
|
||
$position = Db::getInstance()->getValue('
|
||
SELECT `position`
|
||
FROM `'._DB_PREFIX_.'category_product`
|
||
WHERE `id_category` = '.(int) $p->id_category_default.'
|
||
AND id_product = '. (int) $p->id . '
|
||
');
|
||
$p->position = $position;
|
||
|
||
$combinations = array();
|
||
foreach($p->getAttributeCombinaisons($id_lang) as $combi) {
|
||
if(!isset($combinations[$combi['id_product_attribute']])) {
|
||
$combinations[$combi['id_product_attribute']] = array(
|
||
'qty' => $combi['quantity'],
|
||
'name' => array($combi['attribute_name']),
|
||
'ean13' => $combi['ean13'],
|
||
'location' => empty($combi['location'])? $p->location: $combi['location'],
|
||
'brand' => $p->manufacturer_name,
|
||
'supplier_reference' => empty($combi['supplier_reference'])? $p->supplier_reference: $combi['supplier_reference'],
|
||
);
|
||
} else {
|
||
$combinations[$combi['id_product_attribute']]['name'][] = $combi['attribute_name'];
|
||
}
|
||
}
|
||
|
||
$quantity_sold = 0;
|
||
if(count($combinations) > 0) {
|
||
foreach($combinations as $k => $v) {
|
||
|
||
$quantity_sold += (int) Db::getInstance()->getValue('
|
||
SELECT SUM(d.`product_quantity`)
|
||
FROM `'._DB_PREFIX_.'order_detail` d
|
||
WHERE d.`product_id` = '.(int) $p->id.'
|
||
AND d.`product_attribute_id` = '.(int) $k.'
|
||
AND d.`id_order_detail` IN ('.(count($orders_detail)>1?implode(',',$orders_detail):$orders_detail[0]).')
|
||
');
|
||
|
||
/*if ($quantity_sold == 0) {
|
||
continue;
|
||
}
|
||
|
||
$names = array_unique($v['name']);
|
||
sort($names, SORT_STRING);
|
||
|
||
$products_detail[] = array(
|
||
'position' => $p->position,
|
||
'sale_country' => $row_properties[$p->id]['country'],
|
||
'sale_name' => $row_properties[$p->id]['name'],
|
||
'sale_month' => $row_properties[$p->id]['month'],
|
||
'supplier_reference' => $v['supplier_reference'],
|
||
'product_name' => $p->name[$id_lang].' - '.implode(' ', $names),
|
||
'nc8' => $customs['nc8'],
|
||
'NGP9' => '',
|
||
'id_country' => $customs['id_country'],
|
||
'value' => str_replace('.', ',', ($quantity_sold * $p->wholesale_price)),
|
||
'regime' => 21,
|
||
'weight' => str_replace('.', ',', Tools::ps_round(($p->weight * $quantity_sold),2)),
|
||
'quantity_sold' => $quantity_sold,
|
||
'transaction_type' => 11,
|
||
'transport' => 3,
|
||
'department' => 31,
|
||
'sale_date' => $row_properties[$p->id]['date'],
|
||
'id_sale' => $row_properties[$p->id]['id_sale'],
|
||
);*/
|
||
|
||
}
|
||
} else {
|
||
|
||
$quantity_sold += (int) Db::getInstance()->getValue('
|
||
SELECT SUM(d.`product_quantity`)
|
||
FROM `'._DB_PREFIX_.'order_detail` d
|
||
WHERE d.`product_id` = '.(int) $p->id.'
|
||
AND d.`id_order_detail` IN ('.(count($orders_detail)>1?implode(',',$orders_detail):$orders_detail[0]).')
|
||
');
|
||
|
||
/* if ($quantity_sold == 0) {
|
||
continue;
|
||
}
|
||
|
||
$products_detail[] = array(
|
||
'position' => $p->position,
|
||
'sale_country' => $row_properties[$p->id]['country'],
|
||
'sale_name' => $row_properties[$p->id]['name'],
|
||
'sale_month' => $row_properties[$p->id]['month'],
|
||
'supplier_reference' => $p->supplier_reference,
|
||
'product_name' => $p->name[$id_lang],
|
||
'nc8' => $customs['nc8'],
|
||
'NGP9' => '',
|
||
'id_country' => $customs['id_country'],
|
||
'value' => str_replace('.', ',', ($quantity_sold * $p->wholesale_price)),
|
||
'regime' => 21,
|
||
'weight' => str_replace('.', ',', Tools::ps_round(($p->weight * $quantity_sold),2)),
|
||
'quantity_sold' => $quantity_sold,
|
||
'transaction_type' => 11,
|
||
'transport' => 3,
|
||
'department' => 31,
|
||
'sale_date' => $row_properties[$p->id]['date'],
|
||
'id_sale' => $row_properties[$p->id]['id_sale'],
|
||
);*/
|
||
|
||
}
|
||
if ($quantity_sold == 0) {
|
||
continue;
|
||
}
|
||
$products_detail[] = array(
|
||
'position' => $p->position,
|
||
'sale_country' => $row_properties[$p->id]['country'],
|
||
'sale_name' => $row_properties[$p->id]['name'],
|
||
'sale_month' => $row_properties[$p->id]['month'],
|
||
'supplier_reference' => $p->supplier_reference,
|
||
'product_name' => $p->name[$id_lang],
|
||
'nc8' => $customs['nc8'],
|
||
'NGP9' => '',
|
||
'country_exp' => $row_properties[$p->id]['country_exp'],
|
||
'product_country' => $customs['id_country'],
|
||
'value' => str_replace('.', ',', ($quantity_sold * Product::getPriceStatic($p->id, false, NULL, 2))),
|
||
'regime' => 21,
|
||
'weight' => str_replace('.', ',', Tools::ps_round(($p->weight * $quantity_sold),2)),
|
||
'quantity_sold' => $quantity_sold,
|
||
'transaction_type' => 11,
|
||
'transport' => 3,
|
||
'department' => 31,
|
||
'sale_date' => $row_properties[$p->id]['date'],
|
||
'id_sale' => $row_properties[$p->id]['id_sale'],
|
||
);
|
||
}
|
||
}
|
||
|
||
foreach ($products_detail as $key => $row) {
|
||
$id_sale[$key] = (int)$row['id_sale'];
|
||
$sale_date[$key] = (int)$row['sale_date'];
|
||
}
|
||
array_multisort($sale_date, SORT_ASC, $id_sale, SORT_DESC, $products_detail);
|
||
$pos = 0;
|
||
foreach ($products_detail as $key => $product_d) {
|
||
$pos++;
|
||
fputcsv($f, array(
|
||
//$product_d['position'],
|
||
$pos,
|
||
$product_d['sale_country'],
|
||
$product_d['sale_name'],
|
||
$product_d['sale_month'],
|
||
$product_d['supplier_reference'],
|
||
$product_d['product_name'],
|
||
$product_d['nc8'],
|
||
$product_d['NGP9'],
|
||
$product_d['country_exp'],
|
||
$product_d['product_country'],
|
||
$product_d['value'],
|
||
$product_d['regime'],
|
||
$product_d['weight'],
|
||
$product_d['quantity_sold'],
|
||
$product_d['transaction_type'],
|
||
$product_d['transport'],
|
||
$product_d['department']
|
||
), ';', '"');
|
||
}
|
||
fclose($f);
|
||
$output .= '<p class="conf">'.$this->l('Export complete.').' <a onclick="window.open(this.href); return false;" href="http://'.$_SERVER['HTTP_HOST'].__PS_BASE_URI__.'modules/bulkupdate/'.$fname.'">'.$this->l('Click here to download the file').'</a></p>';
|
||
break;
|
||
default:
|
||
$output .= '<p class="error">Veuillez choisir un type d\'export</p>';
|
||
break;
|
||
}
|
||
|
||
} elseif(Tools::isSubmit('submitExport')) {
|
||
set_time_limit(300);
|
||
$id_lang = Tools::getValue('id_lang', $cookie->id_lang);
|
||
|
||
if ($id_category = (int) Tools::getValue('category')) {
|
||
$c = new Category($id_category, $cookie->id_lang);
|
||
$children = $c->recurseLiteCategTree(5, 0, $id_lang);
|
||
$ids = $this->_recurse_array(array($children));
|
||
$products = array();
|
||
foreach($c->getProductsWs() as $p) {
|
||
$products[] = $p['id'];
|
||
}
|
||
foreach($ids as $id) {
|
||
$sc = new Category($id, $id_lang);
|
||
foreach($sc->getProductsWs() as $p) {
|
||
$products[] = $p['id'];
|
||
}
|
||
}
|
||
$products = array_unique($products);
|
||
|
||
$privatesale = Sale::getSaleFromCategory((int) $id_category);
|
||
$fname = date( "Ymd", strtotime($privatesale->date_start)).'-'.$privatesale->title[(int)$id_lang].'.csv';
|
||
foreach(glob(dirname(__FILE__).'/*.csv') as $filename) {
|
||
if ($fname == $filename) {
|
||
unlink($filename);
|
||
}
|
||
}
|
||
|
||
$f = fopen(dirname(__FILE__).'/'.$fname, 'w');
|
||
|
||
// uft8 sans bom pour accent
|
||
$BOM = "\xEF\xBB\xBF"; // UTF-8 BOM
|
||
fwrite($f, $BOM); // NEW LINE
|
||
|
||
fputcsv($f, array(
|
||
'supplier_reference',
|
||
'id_product',
|
||
'id_product_attribute',
|
||
'position',
|
||
'poids',
|
||
'quantity',
|
||
'product_name',
|
||
'combination',
|
||
'ean13',
|
||
'NC8',
|
||
'Pays de fabrication',
|
||
// 'location',
|
||
// 'brand',
|
||
'quantity_sold',
|
||
'public_price_wt',
|
||
'price_wt',
|
||
'wholesale_price',
|
||
'BDC HT',
|
||
'id_TVA',
|
||
// 'active',
|
||
'description_short',
|
||
'bon_a_savoir',
|
||
'plus',
|
||
'videos',
|
||
'livraison',
|
||
'images',
|
||
'nb_images',
|
||
'categories',
|
||
'sous-categories',
|
||
'sous-sous-categories',
|
||
// 'categories_title',
|
||
), ';', '"');
|
||
foreach($products as $product) {
|
||
$p = new Product((int) $product, $id_lang);
|
||
if(!Validate::isLoadedObject($p)) {
|
||
$output .= '<p class="error">Erreur produit: '.serialize($product).' ce produit ne figure pas dans l\'export</p>';
|
||
} else {
|
||
$position = Db::getInstance()->getValue('
|
||
SELECT `position`
|
||
FROM `'._DB_PREFIX_.'category_product`
|
||
WHERE `id_category` = '.(int) $id_category.'
|
||
AND id_product = '. (int) $p->id . '
|
||
');
|
||
$p->position = $position;
|
||
|
||
$categories = array();
|
||
foreach(Db::getInstance()->ExecuteS('
|
||
SELECT `id_category`
|
||
FROM `'._DB_PREFIX_.'category_product`
|
||
WHERE `id_product` = '.(int) $p->id.'
|
||
') as $cat) {
|
||
$categories[] = (int) $cat['id_category'];
|
||
}
|
||
sort($categories);
|
||
|
||
$categories_title = array();
|
||
foreach ($categories as $category) {
|
||
$title = Db::getInstance()->getValue('
|
||
SELECT `name`
|
||
FROM `'._DB_PREFIX_.'category_lang`
|
||
WHERE `id_category` = '.(int) $category.'
|
||
AND id_lang = '. $id_lang . '
|
||
');
|
||
$categories_title[(int) $category] = $title;
|
||
}
|
||
$categorie_0 = '';
|
||
$categorie_1 = '';
|
||
$categorie_2 = '';
|
||
foreach ($categories as $key => $cat) {
|
||
if ($key == 0) {
|
||
$categorie_0 = $categories_title[$cat];
|
||
} elseif ($key == 1) {
|
||
$categorie_1 = $categories_title[$cat];
|
||
} elseif ($key == 2) {
|
||
$categorie_2 = $categories_title[$cat];
|
||
}
|
||
}
|
||
|
||
$combinations = array();
|
||
foreach($p->getAttributeCombinaisons($id_lang) as $combi) {
|
||
if(!isset($combinations[$combi['id_product_attribute']])) {
|
||
$combinations[$combi['id_product_attribute']] = array(
|
||
'qty' => $combi['quantity'],
|
||
'name' => array($combi['attribute_name']),
|
||
'ean13' => $combi['ean13'],
|
||
'location' => empty($combi['location'])? $p->location: $combi['location'],
|
||
'brand' => $p->manufacturer_name,
|
||
'supplier_reference' => empty($combi['supplier_reference'])? $p->supplier_reference: $combi['supplier_reference'],
|
||
);
|
||
} else {
|
||
$combinations[$combi['id_product_attribute']]['name'][] = $combi['attribute_name'];
|
||
}
|
||
}
|
||
|
||
$images = array();
|
||
foreach(Db::getInstance()->ExecuteS('
|
||
SELECT i.`id_image`, l.`legend`
|
||
FROM `'._DB_PREFIX_.'image` i
|
||
LEFT JOIN `'._DB_PREFIX_.'image_lang` l
|
||
ON l.`id_image` = i.`id_image`
|
||
WHERE l.`id_lang` = '.(int) $id_lang.'
|
||
AND i.`id_product` = '.(int) $p->id.'
|
||
') as $img) {
|
||
$link_image = str_split($img['id_image']);
|
||
$images[] = 'http://static.bebeboutik.com/img/p/'.implode('/', $link_image) .'/'. $img['id_image'].'.jpg';
|
||
}
|
||
|
||
$customs = Db::getInstance()->getRow('
|
||
SELECT `nc8`, `id_country`
|
||
FROM `'._DB_PREFIX_.'product_customs`
|
||
WHERE `id_product` = '.(int) $p->id
|
||
);
|
||
|
||
if(count($combinations) > 0) {
|
||
foreach($combinations as $k => $v) {
|
||
$c_images = array();
|
||
foreach(Db::getInstance()->ExecuteS('
|
||
SELECT i.`id_image`, l.`legend`
|
||
FROM `'._DB_PREFIX_.'image` i
|
||
LEFT JOIN `'._DB_PREFIX_.'image_lang` l
|
||
ON l.`id_image` = i.`id_image`
|
||
LEFT JOIN `'._DB_PREFIX_.'product_attribute_image` a
|
||
ON a.`id_image` = i.`id_image`
|
||
WHERE l.`id_lang` = '.(int) $id_lang.'
|
||
AND a.`id_product_attribute` = '.(int) $k.'
|
||
ORDER BY i.`position`
|
||
') as $img) {
|
||
$link_image = str_split($img['id_image']);
|
||
$c_images[] = 'http://static.bebeboutik.com/img/p/'.implode('/', $link_image) .'/'. $img['id_image'].'.jpg';
|
||
// $c_images[] = 'http://static.bebeboutik.com/'.(int) $p->id.'-'.$img['id_image'].'.jpg';
|
||
}
|
||
|
||
$quantity_sold = (int) Db::getInstance()->getValue('
|
||
SELECT SUM(d.`product_quantity`)
|
||
FROM `'._DB_PREFIX_.'order_detail` d
|
||
LEFT JOIN `'._DB_PREFIX_.'orders` o
|
||
ON o.`id_order` = d.`id_order`
|
||
LEFT JOIN `'._DB_PREFIX_.'order_history` h
|
||
ON h.`id_order` = d.`id_order`
|
||
WHERE d.`product_id` = '.(int) $p->id.'
|
||
AND d.`product_attribute_id` = '.(int) $k.'
|
||
AND h.`id_order_state` = 2
|
||
');
|
||
/*$quantity_sold = (int) Db::getInstance()->getValue('
|
||
SELECT SUM(d.`product_quantity`)
|
||
FROM `'._DB_PREFIX_.'order_detail` d
|
||
LEFT JOIN `'._DB_PREFIX_.'orders` o ON o.`id_order` = d.`id_order`
|
||
WHERE d.`product_id` = '.(int) $p->id.'
|
||
AND d.`product_attribute_id` = '.(int) $k.'
|
||
AND (
|
||
SELECT `id_order_state`
|
||
FROM `'._DB_PREFIX_.'order_history`
|
||
WHERE `id_order`=d.`id_order`
|
||
ORDER BY `date_add` DESC LIMIT 1
|
||
) NOT IN (1,6,8,9,10,11,14,15,18)
|
||
');*/
|
||
|
||
$names = array_unique($v['name']);
|
||
sort($names, SORT_STRING);
|
||
fputcsv($f, array(
|
||
$v['supplier_reference'],
|
||
$p->id,
|
||
$k,
|
||
$p->position,
|
||
str_replace('.', ',', $p->weight),
|
||
$v['qty'],
|
||
$p->name[$id_lang],
|
||
implode(' - ', $names),
|
||
$v['ean13'],
|
||
$customs['nc8'],
|
||
$customs['id_country'],
|
||
// $v['location'],
|
||
// $v['brand'],
|
||
$quantity_sold,
|
||
str_replace('.', ',', $p->getPrice(TRUE, (int) $k, 2, NULL, FALSE, FALSE)),
|
||
str_replace('.', ',', $p->getPrice(TRUE, (int) $k, 2)),
|
||
str_replace('.', ',', Tools::ps_round($p->wholesale_price, 2)),
|
||
str_replace('.', ',', Tools::ps_round(($quantity_sold * $p->wholesale_price),2)),
|
||
$p->id_tax_rules_group,
|
||
// $p->active,
|
||
$p->description_short[$id_lang],
|
||
$p->description[$id_lang],
|
||
$p->description_more[$id_lang],
|
||
$p->videos[$id_lang],
|
||
$p->description_delivery[$id_lang],
|
||
count($c_images) > 0? implode(', ', $c_images): implode(', ', $images),
|
||
count($c_images) > 0? count($c_images): count($images),
|
||
$categorie_0,
|
||
$categorie_1,
|
||
$categorie_2,
|
||
//implode(', ', $categories),
|
||
//implode(', ', $categories_title),
|
||
|
||
), ';', '"');
|
||
}
|
||
} else {
|
||
$quantity_sold = (int) Db::getInstance()->getValue('
|
||
SELECT SUM(d.`product_quantity`)
|
||
FROM `'._DB_PREFIX_.'order_detail` d
|
||
LEFT JOIN `'._DB_PREFIX_.'orders` o
|
||
ON o.`id_order` = d.`id_order`
|
||
LEFT JOIN `'._DB_PREFIX_.'order_history` h
|
||
ON h.`id_order` = d.`id_order`
|
||
WHERE d.`product_id` = '.(int) $p->id.'
|
||
AND h.`id_order_state` = 2
|
||
');
|
||
/*$quantity_sold = (int) Db::getInstance()->getValue('
|
||
SELECT SUM(d.`product_quantity`)
|
||
FROM `'._DB_PREFIX_.'order_detail` d
|
||
LEFT JOIN `'._DB_PREFIX_.'orders` o ON o.`id_order` = d.`id_order`
|
||
WHERE d.`product_id` = '.(int) $p->id.'
|
||
AND (
|
||
SELECT `id_order_state`
|
||
FROM `'._DB_PREFIX_.'order_history`
|
||
WHERE `id_order`=d.`id_order`
|
||
ORDER BY `date_add` DESC LIMIT 1
|
||
) NOT IN (1,6,8,9,10,11,14,15,18)
|
||
');*/
|
||
|
||
fputcsv($f, array(
|
||
$p->supplier_reference,
|
||
$p->id,
|
||
0,
|
||
$p->position,
|
||
str_replace('.', ',', $p->weight),
|
||
$p->quantity,
|
||
$p->name[$id_lang],
|
||
'',
|
||
$p->ean13,
|
||
$customs['nc8'],
|
||
$customs['id_country'],
|
||
// $p->location,
|
||
// $p->manufacturer_name,
|
||
$quantity_sold,
|
||
str_replace('.', ',', $p->getPrice(TRUE, NULL, 2, NULL, FALSE, FALSE)),
|
||
str_replace('.', ',', $p->getPrice(TRUE, NULL, 2)),
|
||
str_replace('.', ',', Tools::ps_round($p->wholesale_price, 2)),
|
||
str_replace('.', ',', Tools::ps_round(($quantity_sold * $p->wholesale_price),2)),
|
||
$p->id_tax_rules_group,
|
||
// $p->active,
|
||
$p->description_short[$id_lang],
|
||
$p->description[$id_lang],
|
||
$p->description_more[$id_lang],
|
||
$p->videos[$id_lang],
|
||
$p->description_delivery[$id_lang],
|
||
implode(', ', $images),
|
||
count($images),
|
||
$categorie_0,
|
||
$categorie_1,
|
||
$categorie_2,
|
||
// implode(', ', $categories),
|
||
// implode(', ', $categories_title),
|
||
), ';', '"');
|
||
}
|
||
}
|
||
}
|
||
fclose($f);
|
||
$output .= '<p class="conf">'.$this->l('Export complete.').' <a onclick="window.open(this.href); return false;" href="http://'.$_SERVER['HTTP_HOST'].__PS_BASE_URI__.'modules/bulkupdate/'.$fname.'">'.$this->l('Click here to download the file').'</a></p>';
|
||
} elseif (Tools::getValue('date_start') && Tools::getValue('date_end')) {
|
||
$date_start = Tools::getValue('date_start');
|
||
$date_end = Tools::getValue('date_end');
|
||
|
||
$ids = Db::getInstance()->ExecuteS('
|
||
SELECT c.id_category
|
||
FROM `'._DB_PREFIX_.'privatesale` p
|
||
LEFT JOIN `'._DB_PREFIX_.'privatesale_category` c ON c.id_sale = p.id_sale
|
||
WHERE date_start BETWEEN "'. $date_start .' 00:00:00" AND "'. $date_end .' 00:00:00"
|
||
ORDER BY c.id_sale DESC
|
||
');
|
||
|
||
$products = array();
|
||
foreach($ids as $id) {
|
||
$id_category = $id['id_category'];
|
||
$sc = new Category($id_category, $id_lang);
|
||
foreach($sc->getProductsWs() as $p) {
|
||
$products[] = $p['id'];
|
||
}
|
||
}
|
||
$products = array_unique($products);
|
||
|
||
if(count($products) > 20000){
|
||
echo $output .= '<p class="conf">Choisir une plage moins grande. <br /> Export > 20000 produits</p>';
|
||
continue;
|
||
};
|
||
|
||
$privatesale = Sale::getSaleFromCategory((int) $id_category);
|
||
$fname = date( "Ymd", strtotime($date_start)).'-'.date( "Ymd", strtotime($date_end)).'.csv';
|
||
foreach(glob(dirname(__FILE__).'/*.csv') as $filename) {
|
||
if ($fname == $filename) {
|
||
unlink($filename);
|
||
}
|
||
}
|
||
|
||
$f = fopen(dirname(__FILE__).'/'.$fname, 'w');
|
||
|
||
// uft8 sans bom pour accent
|
||
$BOM = "\xEF\xBB\xBF"; // UTF-8 BOM
|
||
fwrite($f, $BOM); // NEW LINE
|
||
|
||
fputcsv($f, array(
|
||
'supplier_reference',
|
||
'id_product',
|
||
'id_product_attribute',
|
||
'position',
|
||
'poids',
|
||
'quantity',
|
||
'product_name',
|
||
'combination',
|
||
'ean13',
|
||
'NC8',
|
||
'Pays de fabrication',
|
||
// 'location',
|
||
// 'brand',
|
||
'quantity_sold',
|
||
'public_price_wt',
|
||
'price_wt',
|
||
'wholesale_price',
|
||
'BDC HT',
|
||
// 'active',
|
||
'description_short',
|
||
'bon_a_savoir',
|
||
'plus',
|
||
'videos',
|
||
'livraison',
|
||
'images',
|
||
'categories',
|
||
'sous-categories',
|
||
'sous-sous-categories',
|
||
// 'categories_title',
|
||
), ';', '"');
|
||
foreach($products as $product) {
|
||
$p = new Product((int) $product, $id_lang);
|
||
if(!Validate::isLoadedObject($p)) {
|
||
$output .= '<p class="error">Erreur produit: '.serialize($product).' ce produit ne figure pas dans l\'export</p>';
|
||
} else {
|
||
$position = Db::getInstance()->getValue('
|
||
SELECT `position`
|
||
FROM `'._DB_PREFIX_.'category_product`
|
||
WHERE `id_category` = '.(int) $p->id_category_default.'
|
||
AND id_product = '. (int) $p->id . '
|
||
');
|
||
$p->position = $position;
|
||
|
||
$categories = array();
|
||
foreach(Db::getInstance()->ExecuteS('
|
||
SELECT `id_category`
|
||
FROM `'._DB_PREFIX_.'category_product`
|
||
WHERE `id_product` = '.(int) $p->id.'
|
||
') as $cat) {
|
||
$categories[] = (int) $cat['id_category'];
|
||
}
|
||
sort($categories);
|
||
|
||
$categories_title = array();
|
||
foreach ($categories as $category) {
|
||
$title = Db::getInstance()->getValue('
|
||
SELECT `name`
|
||
FROM `'._DB_PREFIX_.'category_lang`
|
||
WHERE `id_category` = '.(int) $category.'
|
||
AND id_lang = '. $id_lang . '
|
||
');
|
||
$categories_title[] = $title;
|
||
}
|
||
$categorie_0 = '';
|
||
$categorie_1 = '';
|
||
$categorie_2 = '';
|
||
foreach ($categories as $key => $cat) {
|
||
if ($key == 0) {
|
||
$categorie_0 = $categories_title[$cat];
|
||
} elseif ($key == 1) {
|
||
$categorie_1 = $categories_title[$cat];
|
||
} elseif ($key == 2) {
|
||
$categorie_2 = $categories_title[$cat];
|
||
}
|
||
}
|
||
|
||
$combinations = array();
|
||
foreach($p->getAttributeCombinaisons($id_lang) as $combi) {
|
||
if(!isset($combinations[$combi['id_product_attribute']])) {
|
||
$combinations[$combi['id_product_attribute']] = array(
|
||
'qty' => $combi['quantity'],
|
||
'name' => array($combi['attribute_name']),
|
||
'ean13' => $combi['ean13'],
|
||
'location' => empty($combi['location'])? $p->location: $combi['location'],
|
||
'brand' => $p->manufacturer_name,
|
||
'supplier_reference' => empty($combi['supplier_reference'])? $p->supplier_reference: $combi['supplier_reference'],
|
||
);
|
||
} else {
|
||
$combinations[$combi['id_product_attribute']]['name'][] = $combi['attribute_name'];
|
||
}
|
||
}
|
||
|
||
$images = array();
|
||
foreach(Db::getInstance()->ExecuteS('
|
||
SELECT i.`id_image`, l.`legend`
|
||
FROM `'._DB_PREFIX_.'image` i
|
||
LEFT JOIN `'._DB_PREFIX_.'image_lang` l
|
||
ON l.`id_image` = i.`id_image`
|
||
WHERE l.`id_lang` = '.(int) $id_lang.'
|
||
AND i.`id_product` = '.(int) $p->id.'
|
||
ORDER BY i.`position`
|
||
') as $img) {
|
||
$link_image = str_split($img['id_image']);
|
||
$images[] = 'http://static.bebeboutik.com/img/p/'.implode('/', $link_image) .'/'. $img['id_image'].'.jpg';
|
||
}
|
||
|
||
if(count($combinations) > 0) {
|
||
foreach($combinations as $k => $v) {
|
||
$c_images = array();
|
||
foreach(Db::getInstance()->ExecuteS('
|
||
SELECT i.`id_image`, l.`legend`
|
||
FROM `'._DB_PREFIX_.'image` i
|
||
LEFT JOIN `'._DB_PREFIX_.'image_lang` l
|
||
ON l.`id_image` = i.`id_image`
|
||
LEFT JOIN `'._DB_PREFIX_.'product_attribute_image` a
|
||
ON a.`id_image` = i.`id_image`
|
||
WHERE l.`id_lang` = '.(int) $id_lang.'
|
||
AND a.`id_product_attribute` = '.(int) $k.'
|
||
') as $img) {
|
||
$link_image = str_split($img['id_image']);
|
||
$c_images[] = 'http://static.bebeboutik.com/img/p/'.implode('/', $link_image) .'/'. $img['id_image'].'.jpg';
|
||
// $c_images[] = 'http://static.bebeboutik.com/'.(int) $p->id.'-'.$img['id_image'].'.jpg';
|
||
}
|
||
|
||
$names = array_unique($v['name']);
|
||
sort($names, SORT_STRING);
|
||
|
||
$quantity_sold = (int) Db::getInstance()->getValue('
|
||
SELECT SUM(d.`product_quantity`)
|
||
FROM `'._DB_PREFIX_.'order_detail` d
|
||
LEFT JOIN `'._DB_PREFIX_.'orders` o
|
||
ON o.`id_order` = d.`id_order`
|
||
LEFT JOIN `'._DB_PREFIX_.'order_history` h
|
||
ON h.`id_order` = d.`id_order`
|
||
WHERE d.`product_id` = '.(int) $p->id.'
|
||
AND d.`product_attribute_id` = '.(int) $k.'
|
||
AND h.`id_order_state` = 2
|
||
');
|
||
/*$quantity_sold = (int) Db::getInstance()->getValue('
|
||
SELECT SUM(d.`product_quantity`)
|
||
FROM `'._DB_PREFIX_.'order_detail` d
|
||
LEFT JOIN `'._DB_PREFIX_.'orders` o ON o.`id_order` = d.`id_order`
|
||
WHERE d.`product_id` = '.(int) $p->id.'
|
||
AND d.`product_attribute_id` = '.(int) $k.'
|
||
AND (
|
||
SELECT `id_order_state`
|
||
FROM `'._DB_PREFIX_.'order_history`
|
||
WHERE `id_order`=d.`id_order`
|
||
ORDER BY `date_add` DESC LIMIT 1
|
||
) NOT IN (1,6,8,9,10,11,14,15,18)
|
||
');*/
|
||
|
||
$customs = Db::getInstance()->getRow('
|
||
SELECT `nc8`, `id_country`
|
||
FROM `'._DB_PREFIX_.'product_customs`
|
||
WHERE `id_product` = '.(int) $p->id
|
||
);
|
||
|
||
fputcsv($f, array(
|
||
$v['supplier_reference'],
|
||
$p->id,
|
||
$k,
|
||
$p->position,
|
||
str_replace('.', ',', $p->weight),
|
||
$v['qty'],
|
||
$p->name[$id_lang],
|
||
implode(' - ', $names),
|
||
$v['ean13'],
|
||
$customs['nc8'],
|
||
$customs['id_country'],
|
||
// $v['location'],
|
||
// $v['brand'],
|
||
$quantity_sold,
|
||
str_replace('.', ',', $p->getPrice(TRUE, (int) $k, 2, NULL, FALSE, FALSE)),
|
||
str_replace('.', ',', $p->getPrice(TRUE, (int) $k, 2)),
|
||
str_replace('.', ',', Tools::ps_round($p->wholesale_price, 2)),
|
||
str_replace('.', ',', Tools::ps_round(($quantity_sold * $p->wholesale_price),2)),
|
||
// $p->active,
|
||
$p->description_short[$id_lang],
|
||
$p->description[$id_lang],
|
||
$p->description_more[$id_lang],
|
||
$p->videos[$id_lang],
|
||
$p->description_delivery[$id_lang],
|
||
count($c_images) > 0? implode(', ', $c_images): implode(', ', $images),
|
||
$categorie_0,
|
||
$categorie_1,
|
||
$categorie_2,
|
||
// implode(', ', $categories),
|
||
// implode(', ', $categories_title),
|
||
), ';', '"');
|
||
}
|
||
} else {
|
||
|
||
$quantity_sold = (int) Db::getInstance()->getValue('
|
||
SELECT SUM(d.`product_quantity`)
|
||
FROM `'._DB_PREFIX_.'order_detail` d
|
||
LEFT JOIN `'._DB_PREFIX_.'orders` o
|
||
ON o.`id_order` = d.`id_order`
|
||
LEFT JOIN `'._DB_PREFIX_.'order_history` h
|
||
ON h.`id_order` = d.`id_order`
|
||
WHERE d.`product_id` = '.(int) $p->id.'
|
||
AND h.`id_order_state` = 2
|
||
');
|
||
/*$quantity_sold = (int) Db::getInstance()->getValue('
|
||
SELECT SUM(d.`product_quantity`)
|
||
FROM `'._DB_PREFIX_.'order_detail` d
|
||
LEFT JOIN `'._DB_PREFIX_.'orders` o ON o.`id_order` = d.`id_order`
|
||
WHERE d.`product_id` = '.(int) $p->id.'
|
||
AND (
|
||
SELECT `id_order_state`
|
||
FROM `'._DB_PREFIX_.'order_history`
|
||
WHERE `id_order`=d.`id_order`
|
||
ORDER BY `date_add` DESC LIMIT 1
|
||
) NOT IN (1,6,8,9,10,11,14,15,18)
|
||
');*/
|
||
|
||
$customs = Db::getInstance()->getRow('
|
||
SELECT `nc8`, `id_country`
|
||
FROM `'._DB_PREFIX_.'product_customs`
|
||
WHERE `id_product` = '.(int) $p->id
|
||
);
|
||
|
||
fputcsv($f, array(
|
||
$p->supplier_reference,
|
||
$p->id,
|
||
0,
|
||
$p->position,
|
||
str_replace('.', ',', $p->weight),
|
||
$p->quantity,
|
||
$p->name[$id_lang],
|
||
'',
|
||
$p->ean13,
|
||
$customs['nc8'],
|
||
$customs['id_country'],
|
||
// $p->location,
|
||
// $p->manufacturer_name,
|
||
$quantity_sold,
|
||
str_replace('.', ',', $p->getPrice(TRUE, NULL, 2, NULL, FALSE, FALSE)),
|
||
str_replace('.', ',', $p->getPrice(TRUE, NULL, 2)),
|
||
str_replace('.', ',', Tools::ps_round($p->wholesale_price, 2)),
|
||
str_replace('.', ',', Tools::ps_round(($quantity_sold * $p->wholesale_price),2)),
|
||
// $p->active,
|
||
$p->description_short[$id_lang],
|
||
$p->description[$id_lang],
|
||
$p->description_more[$id_lang],
|
||
$p->videos[$id_lang],
|
||
$p->description_delivery[$id_lang],
|
||
implode(', ', $images),
|
||
$categorie_0,
|
||
$categorie_1,
|
||
$categorie_2,
|
||
// implode(', ', $categories),
|
||
// implode(', ', $categories_title),
|
||
), ';', '"');
|
||
}
|
||
}
|
||
}
|
||
fclose($f);
|
||
$output .= '<p class="conf">'.$this->l('Export complete.').' <a onclick="window.open(this.href); return false;" href="http://'.$_SERVER['HTTP_HOST'].__PS_BASE_URI__.'modules/bulkupdate/'.$fname.'">'.$this->l('Click here to download the file').'</a></p>';
|
||
}
|
||
} elseif(Tools::isSubmit('submitExportPositions')) {
|
||
set_time_limit(300);
|
||
if($id_category = (int) Tools::getValue('category')) {
|
||
foreach(glob(dirname(__FILE__).'/*.csv') as $filename) {
|
||
unlink($filename);
|
||
}
|
||
$fname = Tools::passwdGen(10).'.csv';
|
||
$f = fopen(dirname(__FILE__).'/'.$fname, 'w');
|
||
fputcsv($f, array(
|
||
'id_category',
|
||
'id_product',
|
||
'position',
|
||
'name',
|
||
), ';', '"');
|
||
foreach(Db::getInstance()->ExecuteS('
|
||
SELECT *
|
||
FROM `'._DB_PREFIX_.'category_product` cp
|
||
LEFT JOIN `'._DB_PREFIX_.'product_lang` l
|
||
ON cp.`id_product` = l.`id_product`
|
||
WHERE cp.`id_category` = '.(int) $id_category.'
|
||
AND l.`id_lang` = 2
|
||
') as $row) {
|
||
fputcsv($f, array(
|
||
(int) $row['id_category'],
|
||
(int) $row['id_product'],
|
||
(int) $row['position'],
|
||
$row['name'],
|
||
), ';', '"');
|
||
}
|
||
fclose($f);
|
||
$output .= '<p class="conf">'.$this->l('Export complete.').' <a onclick="window.open(this.href); return false;" href="http://'.$_SERVER['HTTP_HOST'].__PS_BASE_URI__.'modules/bulkupdate/'.$fname.'">'.$this->l('Click here to download the file').'</a></p>';
|
||
}
|
||
}
|
||
elseif(Tools::isSubmit('submitUploadPositions')) {
|
||
set_time_limit(300);
|
||
$f = fopen($_FILES['csvfile']['tmp_name'], 'r');
|
||
fgetcsv($f, 0, ';');
|
||
|
||
$products = array();
|
||
|
||
while($line = fgetcsv($f, 0, ';')) {
|
||
if($line[0] == '' || $line[1] == '' || $line[2] == '') {
|
||
continue;
|
||
}
|
||
|
||
$products[] = $line;
|
||
}
|
||
|
||
foreach($products as $line) {
|
||
Db::getInstance()->ExecuteS('
|
||
UPDATE `'._DB_PREFIX_.'category_product`
|
||
SET `position` = '.(int) $line[2].'
|
||
WHERE `id_product` = '.(int) $line[1].'
|
||
AND `id_category` = '.(int) $line[0].'
|
||
');
|
||
}
|
||
|
||
fclose($f);
|
||
$output .= '<p class="conf">'.$this->l('Products updated').'</p>';
|
||
}
|
||
|
||
echo $output;
|
||
|
||
}
|
||
|
||
public function display(){
|
||
global $cookie;
|
||
|
||
$output = '<h2>Mise à jour groupée</h2>';
|
||
$output .= '
|
||
<form action="'.Tools::safeOutput($_SERVER['REQUEST_URI']).'" method="post" enctype="multipart/form-data">
|
||
<fieldset><legend><img src="/modules/bulkupdate/logo.gif" alt="" title="" />'.$this->l('Update categories').'</legend>
|
||
<label>'.$this->l('Action:').'</label>
|
||
<div class="margin-form">
|
||
<input type="radio" id="category_process_0" name="category_process" value="0" /> <label style="float: none;" for="category_process_0">'.$this->l('Update').'</label>
|
||
<input type="radio" id="category_process_1" name="category_process" value="1" /> <label style="float: none;" for="category_process_1">'.$this->l('Replace').'</label>
|
||
</div>
|
||
<p> </p>
|
||
<label>'.$this->l('File:').'</label>
|
||
<div class="margin-form">
|
||
<input type="file" name="csvfile" />
|
||
<p>'.$this->l('Format: id_product;id_category,id_category,...;id_category_default -- the subsequent columns and the first line are ignored').'</p>
|
||
</div>
|
||
<p> </p>
|
||
<center><input type="submit" name="submitUploadCategories" value="'.$this->l('Upload').'" class="button" /></center>
|
||
</fieldset>
|
||
</form>';
|
||
|
||
$output .= '
|
||
<p><br /></p>
|
||
<form action="'.Tools::safeOutput($_SERVER['REQUEST_URI']).'" method="post" enctype="multipart/form-data">
|
||
<fieldset><legend><img src="/modules/bulkupdate/logo.gif" alt="" title="" />'.$this->l('Update prices').'</legend>
|
||
<label>'.$this->l('Action:').'</label>
|
||
<div class="margin-form">
|
||
<input type="radio" id="price_process_1" name="price_process" value="1" /> <label style="float: none;" for="price_process_1">'.$this->l('Réduction').'</label>
|
||
<input type="radio" id="price_process_3" name="price_process" value="3" /> <label style="float: none;" for="price_process_3">'.$this->l('Prix d\'achat HT').'</label>
|
||
<input type="radio" id="price_process_4" name="price_process" value="4" /> <label style="float: none;" for="price_process_4">'.$this->l('Prix public TTC').'</label>
|
||
</div>
|
||
<p> </p>
|
||
<label>'.$this->l('File:').'</label>
|
||
<div class="margin-form">
|
||
<input type="file" name="csvfile" />
|
||
<p>'.$this->l('Format: id_product;montant').'</p>
|
||
<p>'.$this->l('Montant : Pourcentage de remise, Prix HT, Prix TTC en fonction du choix').'</p>
|
||
</div>
|
||
<p> </p>
|
||
<center><input type="submit" name="submitUploadPrices" value="'.$this->l('Upload').'" class="button" /></center>
|
||
</fieldset>
|
||
</form>';
|
||
|
||
// $output .= '
|
||
// <p><br /></p>
|
||
// <form action="'.Tools::safeOutput($_SERVER['REQUEST_URI']).'" method="post" enctype="multipart/form-data">
|
||
// <fieldset><legend><img src="'.$this->_path.'logo.gif" alt="" title="" />'.$this->l('Update status').'</legend>
|
||
// <label>'.$this->l('File:').'</label>
|
||
// <div class="margin-form">
|
||
// <input type="file" name="csvfile" />
|
||
// <p>'.$this->l('Format: id_product;active (0 / 1) -- the subsequent columns and the first line are ignored').'</p>
|
||
// </div>
|
||
// <p> </p>
|
||
// <center><input type="submit" name="submitUploadStatus" value="'.$this->l('Upload').'" class="button" /></center>
|
||
// </fieldset>
|
||
// </form>';
|
||
|
||
$output .= '
|
||
<p><br /></p>
|
||
<form action="'.Tools::safeOutput($_SERVER['REQUEST_URI']).'" method="post" enctype="multipart/form-data">
|
||
<fieldset><legend><img src="/modules/bulkupdate/logo.gif" alt="" title="" />'.$this->l('Update images').'</legend>
|
||
<label>'.$this->l('Action:').'</label>
|
||
<div class="margin-form">
|
||
<input type="radio" id="image_process_0" name="image_process" value="0" /> <label style="float: none;" for="image_process_0">'.$this->l('Update').'</label>
|
||
<input type="radio" id="image_process_1" name="image_process" value="1" /> <label style="float: none;" for="image_process_1">'.$this->l('Replace').'</label>
|
||
</div>
|
||
<p> </p>
|
||
<label>'.$this->l('File:').'</label>
|
||
<div class="margin-form">
|
||
<input type="file" name="csvfile" />
|
||
<p>'.$this->l('Format: id_product;image_url,image_url,... -- the subsequent columns and the first line are ignored').'</p>
|
||
</div>
|
||
<p> </p>
|
||
<center><input type="submit" name="submitUploadImages" value="'.$this->l('Upload').'" class="button" /></center>
|
||
</fieldset>
|
||
</form>';
|
||
|
||
$output .= '
|
||
<p><br /></p>
|
||
<form action="'.Tools::safeOutput($_SERVER['REQUEST_URI']).'" method="post" enctype="multipart/form-data">
|
||
<fieldset><legend><img src="/modules/bulkupdate/logo.gif" alt="" title="" />'.$this->l('Update quantities').'</legend>
|
||
<label>'.$this->l('Quantity process:').'</label>
|
||
<div class="margin-form">
|
||
<input type="radio" id="qty_process_0" name="qty_process" value="0" /> <label style="float: none;" for="qty_process_0">'.$this->l('Update').'</label>
|
||
<input type="radio" id="qty_process_1" name="qty_process" value="1" /> <label style="float: none;" for="qty_process_1">'.$this->l('Replace').'</label>
|
||
</div>
|
||
<p> </p>
|
||
<label>'.$this->l('File:').'</label>
|
||
<div class="margin-form">
|
||
<input type="file" name="csvfile" />
|
||
<p>'.$this->l('Format: id_product;id_product_attribute;quantity -- the subsequent columns and the first line are ignored').'</p>
|
||
</div>
|
||
<p> </p>
|
||
<center><input type="submit" name="submitUploadQuantities" value="'.$this->l('Upload').'" class="button" /></center>
|
||
</fieldset>
|
||
</form>';
|
||
|
||
$langs = Language::getLanguages(false);
|
||
$output .= '
|
||
<p><br /></p>
|
||
<form action="'.Tools::safeOutput($_SERVER['REQUEST_URI']).'" method="post" enctype="multipart/form-data">
|
||
<fieldset><legend><img src="/modules/bulkupdate/logo.gif" alt="" title="" />'.$this->l('Update product descriptions').'</legend>
|
||
<label>'.$this->l('Description process:').'</label>
|
||
<div class="margin-form">';
|
||
foreach ($langs as $key => $value) {
|
||
if ($value['id_lang'] == 2) {
|
||
$output .= '<input type="radio" id="description_process_'.$value['id_lang'].'" name="description_process" value="'.$value['id_lang'].'" checked/> <label style="float: none;" for="description_process_'.$value['id_lang'].'">'.$value['iso_code'].'</label>';
|
||
} else {
|
||
$output .= '<input type="radio" id="description_process_'.$value['id_lang'].'" name="description_process" value="'.$value['id_lang'].'"/> <label style="float: none;" for="description_process_'.$value['id_lang'].'">'.$value['iso_code'].'</label>';
|
||
}
|
||
}
|
||
$output .= '</div>
|
||
<p> </p>
|
||
<label>'.$this->l('File:').'</label>
|
||
<div class="margin-form">
|
||
<input type="file" name="csvfile" />
|
||
<p>'.$this->l('Format: id_product;description; the subsequent columns and the first line are ignored').'</p>
|
||
</div>
|
||
<p> </p>
|
||
<center><input type="submit" name="submitUploadProductDescriptions" value="'.$this->l('Upload').'" class="button" /></center>
|
||
</fieldset>
|
||
</form>';
|
||
|
||
// $output .= '
|
||
// <p><br /></p>
|
||
// <form action="'.Tools::safeOutput($_SERVER['REQUEST_URI']).'" method="post" enctype="multipart/form-data">
|
||
// <fieldset><legend><img src="'.$this->_path.'logo.gif" alt="" title="" />'.$this->l('Update accessories').'</legend>
|
||
// <label>'.$this->l('Accessory process:').'</label>
|
||
// <div class="margin-form">
|
||
// <input type="radio" id="access_process_0" name="access_process" value="0" /> <label style="float: none;" for="access_process_0">'.$this->l('Update').'</label>
|
||
// <input type="radio" id="access_process_1" name="access_process" value="1" /> <label style="float: none;" for="access_process_1">'.$this->l('Replace').'</label>
|
||
// </div>
|
||
// <p> </p>
|
||
// <label>'.$this->l('File:').'</label>
|
||
// <div class="margin-form">
|
||
// <input type="file" name="csvfile" />
|
||
// <p>'.$this->l('Format: id_product_1;id_product_2 -- the subsequent columns and the first line are ignored').'</p>
|
||
// </div>
|
||
// <p> </p>
|
||
// <center><input type="submit" name="submitUploadAccessories" value="'.$this->l('Upload').'" class="button" /></center>
|
||
// </fieldset>
|
||
// </form>';
|
||
|
||
// $output .= '
|
||
// <p><br /></p>
|
||
// <form action="'.Tools::safeOutput($_SERVER['REQUEST_URI']).'" method="post" enctype="multipart/form-data">
|
||
// <fieldset><legend><img src="'.$this->_path.'logo.gif" alt="" title="" />'.$this->l('Update products positions').'</legend>
|
||
// <div class="margin-form">
|
||
// <br />';
|
||
|
||
// if(is_file(dirname(__FILE__).'/ctree.html') && (time() - filectime(dirname(__FILE__).'/ctree.html') < 86400)) {
|
||
// $output .= file_get_contents(dirname(__FILE__).'/ctree.html');
|
||
// } else {
|
||
// $ctree = '
|
||
// <select id="category_positions" name="category">';
|
||
// foreach(Db::getInstance()->ExecuteS('
|
||
// SELECT c.`id_category`, l.`name`
|
||
// FROM `'._DB_PREFIX_.'category_lang` l
|
||
// LEFT JOIN `'._DB_PREFIX_.'category` c
|
||
// ON c.`id_category` = l.`id_category`
|
||
// WHERE l.`id_lang` = '.(int) $cookie->id_lang.'
|
||
// AND c.`id_parent` = 1
|
||
// ') as $row) {
|
||
// $ctree .= '<option label="'.$row['name'].'">'.$row['id_category'].' - '.$row['name'].'</option>';
|
||
|
||
// foreach(Db::getInstance()->ExecuteS('
|
||
// SELECT c.`id_category`, l.`name`
|
||
// FROM `'._DB_PREFIX_.'category_lang` l
|
||
// LEFT JOIN `'._DB_PREFIX_.'category` c
|
||
// ON c.`id_category` = l.`id_category`
|
||
// WHERE l.`id_lang` = '.(int) $cookie->id_lang.'
|
||
// AND c.`id_parent` = '.$row['id_category'].'
|
||
// ') as $srow) {
|
||
// $ctree .= '<option style="padding-left: 30px;" value="'.$srow['id_category'].'">'.$srow['id_category'].' - '.$srow['name'].'</option>';
|
||
|
||
// foreach(Db::getInstance()->ExecuteS('
|
||
// SELECT c.`id_category`, l.`name`
|
||
// FROM `'._DB_PREFIX_.'category_lang` l
|
||
// LEFT JOIN `'._DB_PREFIX_.'category` c
|
||
// ON c.`id_category` = l.`id_category`
|
||
// WHERE l.`id_lang` = '.(int) $cookie->id_lang.'
|
||
// AND c.`id_parent` = '.$srow['id_category'].'
|
||
// ') as $ssrow) {
|
||
// $ctree .= '<option style="padding-left: 60px;" value="'.$ssrow['id_category'].'">'.$ssrow['id_category'].' - '.$ssrow['name'].'</option>';
|
||
|
||
// foreach(Db::getInstance()->ExecuteS('
|
||
// SELECT c.`id_category`, l.`name`
|
||
// FROM `'._DB_PREFIX_.'category_lang` l
|
||
// LEFT JOIN `'._DB_PREFIX_.'category` c
|
||
// ON c.`id_category` = l.`id_category`
|
||
// WHERE l.`id_lang` = '.(int) $cookie->id_lang.'
|
||
// AND c.`id_parent` = '.$ssrow['id_category'].'
|
||
// ') as $sssrow) {
|
||
// $ctree .= '<option style="padding-left: 90px;" value="'.$sssrow['id_category'].'">'.$sssrow['id_category'].' - '.$sssrow['name'].'</option>';
|
||
|
||
// foreach(Db::getInstance()->ExecuteS('
|
||
// SELECT c.`id_category`, l.`name`
|
||
// FROM `'._DB_PREFIX_.'category_lang` l
|
||
// LEFT JOIN `'._DB_PREFIX_.'category` c
|
||
// ON c.`id_category` = l.`id_category`
|
||
// WHERE l.`id_lang` = '.(int) $cookie->id_lang.'
|
||
// AND c.`id_parent` = '.$sssrow['id_category'].'
|
||
// ') as $ssssrow) {
|
||
// $ctree .= '<option style="padding-left: 120px;" value="'.$ssssrow['id_category'].'">'.$ssssrow['id_category'].' - '.$ssssrow['name'].'</option>';
|
||
// }
|
||
// }
|
||
// }
|
||
// }
|
||
// }
|
||
// $ctree .= '</select>';
|
||
// file_put_contents(dirname(__FILE__).'/ctree.html', $ctree);
|
||
// }
|
||
|
||
// $output .= '
|
||
// <p class="text">
|
||
// <input type="text" style="width: 300px;" id="filter_categories" value="" autocomplete="off" placeholder="'.$this->l('Filter by category').'" />
|
||
// </p>
|
||
// <script type="text/javascript">
|
||
// <!--
|
||
// var filter_timeout = null;
|
||
// $("#filter_categories").keyup(function() {
|
||
// clearTimeout(filter_timeout);
|
||
// filter_timeout = setTimeout(function() {
|
||
// $("#category_positions option").css("display", "none");
|
||
// var filter_str = $("#filter_categories").val().toLowerCase();
|
||
// $("#category_positions option").filter(function(index) {
|
||
// return $(this).text().toLowerCase().indexOf(filter_str) >= 0;
|
||
// }).css("display", "block");
|
||
// }, 300);
|
||
// });
|
||
// -->
|
||
// </script>
|
||
// </div>
|
||
// <p> </p>
|
||
// <center><input type="submit" name="submitExportPositions" value="'.$this->l('Export').'" class="button" /></center>
|
||
|
||
// <p> </p>
|
||
// <hr />
|
||
// <p> </p>
|
||
|
||
// <label>'.$this->l('File:').'</label>
|
||
// <div class="margin-form">
|
||
// <input type="file" name="csvfile" />
|
||
// <p>'.$this->l('Format: id_category;id_product;position -- the subsequent columns and the first line are ignored').'</p>
|
||
// </div>
|
||
// <p> </p>
|
||
// <center><input type="submit" name="submitUploadPositions" value="'.$this->l('Upload').'" class="button" /></center>
|
||
// </fieldset>
|
||
// </form>';
|
||
|
||
$output .= '
|
||
<p><br /></p>
|
||
<form action="'.Tools::safeOutput($_SERVER['REQUEST_URI']).'" method="post" enctype="multipart/form-data">
|
||
<fieldset><legend><img src="/modules/bulkupdate/logo.gif" alt="" title="" />'.$this->l('Delete combinations').'</legend>
|
||
<label>'.$this->l('File:').'</label>
|
||
<div class="margin-form">
|
||
<input type="file" name="csvfile" />
|
||
<p>'.$this->l('Format: id_product -- the subsequent columns and the first line are ignored').'</p>
|
||
</div>
|
||
<p> </p>
|
||
<center><input type="submit" name="submitUploadCombinations" value="'.$this->l('Upload').'" class="button" /></center>
|
||
</fieldset>
|
||
</form>';
|
||
|
||
$output .= '
|
||
<p><br /></p>
|
||
<form action="'.Tools::safeOutput($_SERVER['REQUEST_URI']).'" method="post" enctype="multipart/form-data">
|
||
<fieldset><legend><img src="/modules/bulkupdate/logo.gif" alt="" title="" />'.$this->l('Export').'</legend>
|
||
<label>'.$this->l('Select a category to export:').'</label>
|
||
<div class="margin-form">
|
||
<br />
|
||
<select class="chosen-select" id="category" name="category">
|
||
<option value=""></option>
|
||
';
|
||
//$sales_root = (int) Configuration::get('PRIVATESALES_ROOT');
|
||
|
||
foreach(Db::getInstance()->ExecuteS('
|
||
SELECT c.`id_category`, l.`name`
|
||
FROM `'._DB_PREFIX_.'category_lang` l
|
||
LEFT JOIN `'._DB_PREFIX_.'category` c
|
||
ON c.`id_category` = l.`id_category`
|
||
WHERE l.`id_lang` = '.(int) $cookie->id_lang.'
|
||
AND c.`id_parent` = 1
|
||
ORDER BY id_category DESC
|
||
') as $row) {
|
||
$extrafields = Category::getSalesInfos(array((int) $row['id_category']));
|
||
$output .= '<option value="'.$row['id_category'].'">'.$row['id_category'].' - '.$row['name'].' - '.$extrafields[(int) $row['id_category']]['sales'][1].'</option>';
|
||
}
|
||
$output .= '</select>
|
||
</div>
|
||
<p> </p>
|
||
<label>'.$this->l('Par date de début :').'</label>
|
||
<div class="margin-form">
|
||
Du <input type="text" name="date_start">
|
||
au <input type="text" name="date_end">
|
||
<p>Format : AAAA-MM-JJ</p>
|
||
</div>
|
||
<p> </p>
|
||
<label>'.$this->l('Select a language:').'</label>
|
||
<div class="margin-form">
|
||
<select id="id_lang" name="id_lang">
|
||
';
|
||
foreach(Language::getLanguages(FALSE) as $lang) {
|
||
$output .= '<option value="'.$lang['id_lang'].'"'.($cookie->id_lang == $lang['id_lang']? ' selected="selected"': '').'>'.$lang['name'].'</option>';
|
||
}
|
||
|
||
$output.= '</select>
|
||
</div>
|
||
<p> </p>
|
||
<center><input type="submit" name="submitExport" value="'.$this->l('Export').'" class="button" /></center>
|
||
</fieldset>
|
||
</form>';
|
||
|
||
|
||
$output .= '<p><br /></p>
|
||
<form action="'.Tools::safeOutput($_SERVER['REQUEST_URI']).'" method="post" enctype="multipart/form-data">
|
||
<fieldset><legend><img src="/modules/bulkupdate/logo.gif" alt="" title="" />'.$this->l('Export DEB').'</legend>
|
||
<label>'.$this->l('Select a DEB:').'</label>
|
||
<div class="margin-form">
|
||
<select id="deb" name="deb">
|
||
<option value="1">DEB introduction</option>
|
||
<option value="2">DEB expedition</option>
|
||
</select>
|
||
<p>Introduction : selon date des ventes</p>
|
||
<p>Expedition : selon date des commandes</p>
|
||
</div><p> </p>
|
||
<label>'.$this->l('Par date de début :').'</label>
|
||
<div class="margin-form">
|
||
Du <input type="text" name="date_start">
|
||
au <input type="text" name="date_end">
|
||
<p>Format : AAAA-MM-JJ</p>
|
||
</div>
|
||
<center><input type="submit" name="submitExportDeb" value="'.$this->l('Export').'" class="button" /></center>
|
||
</fieldset>
|
||
</form>';
|
||
|
||
$output .= '
|
||
<p><br /></p>
|
||
<form action="'.Tools::safeOutput($_SERVER['REQUEST_URI']).'" method="post" enctype="multipart/form-data">
|
||
<fieldset><legend><img src="/modules/bulkupdate/logo.gif" alt="" title="" />'.$this->l('Update product customs').'</legend>
|
||
<label>'.$this->l('Product customs process:').'</label>
|
||
<div class="margin-form">
|
||
<input type="radio" id="customs_process_0" name="customs_process" value="0" /> <label style="float: none;" for="qty_process_0">'.$this->l('Update').'</label>
|
||
<input type="radio" id="customs_process_1" name="customs_process" value="1" /> <label style="float: none;" for="qty_process_1">'.$this->l('Replace').'</label>
|
||
</div>
|
||
<p> </p>
|
||
<label>'.$this->l('File:').'</label>
|
||
<div class="margin-form">
|
||
<input type="file" name="csvfile" />
|
||
<p>'.$this->l('Format: id_product;nc8;country -- the subsequent columns and the first line are ignored').'</p>
|
||
</div>
|
||
<p> </p>
|
||
<center><input type="submit" name="submitUploadProductCustoms" value="'.$this->l('Upload').'" class="button" /></center>
|
||
</fieldset>
|
||
</form>';
|
||
|
||
|
||
echo '<link type="text/css" rel="stylesheet" href="'._MODULE_DIR_.'bulkupdate/chosen.min.css" />';
|
||
echo '<script type="text/javascript" src="'._MODULE_DIR_.'bulkupdate/chosen.jquery.min.js"></script>';
|
||
echo '<script type="text/javascript">
|
||
$(function() {
|
||
$(".chosen-select").chosen(
|
||
{
|
||
allow_single_deselect:true,
|
||
placeholder_text_single : "Choisir une vente",
|
||
no_results_text : "Aucun résultat",
|
||
enable_split_word_search : true,
|
||
search_contains : true,
|
||
}
|
||
);
|
||
});
|
||
</script>';
|
||
|
||
echo $output;
|
||
}
|
||
|
||
private static function copyImg($id_entity, $id_image=NULL, $url, $entity='products') {
|
||
$tmpfile = tempnam(_PS_TMP_IMG_DIR_, 'ps_import');
|
||
$watermark_types = explode(',', Configuration::get('WATERMARK_TYPES'));
|
||
|
||
switch($entity) {
|
||
default:
|
||
case 'products':
|
||
$imageObj = new Image($id_image);
|
||
$path = $imageObj->getPathForCreation();
|
||
break;
|
||
case 'categories':
|
||
$path = _PS_CAT_IMG_DIR_.(int)($id_entity);
|
||
break;
|
||
}
|
||
|
||
if(copy(str_replace(' ', '%20', trim($url)), $tmpfile)) {
|
||
imageResize($tmpfile, $path.'.jpg');
|
||
$imagesTypes = ImageType::getImagesTypes($entity);
|
||
foreach($imagesTypes AS $k => $imageType) {
|
||
imageResize($tmpfile, $path.'-'.stripslashes($imageType['name']).'.jpg', $imageType['width'], $imageType['height']);
|
||
}
|
||
if(in_array($imageType['id_image_type'], $watermark_types)) {
|
||
Module::hookExec('watermark', array('id_image' => $id_image, 'id_product' => $id_entity));
|
||
}
|
||
} else {
|
||
unlink($tmpfile);
|
||
return false;
|
||
}
|
||
|
||
unlink($tmpfile);
|
||
return true;
|
||
}
|
||
|
||
private static function createMultiLangField($field) {
|
||
$languages = Language::getLanguages(FALSE);
|
||
$res = array();
|
||
foreach($languages AS $lang) {
|
||
$res[$lang['id_lang']] = $field;
|
||
}
|
||
return $res;
|
||
}
|
||
|
||
|
||
private function _recurse_array($array) {
|
||
$result = array();
|
||
foreach($array as $i) {
|
||
$result[] = $i['id'];
|
||
if(count($i['children']) > 0) {
|
||
$result = array_merge($result, $this->_recurse_array($i['children']));
|
||
}
|
||
}
|
||
return $result;
|
||
}
|
||
}
|