bebeboutik/modules/bulkupdate/AdminBulkUpdate.php

2260 lines
114 KiB
PHP
Raw Normal View History

2016-01-04 12:49:26 +01:00
<?php
if(!defined('_PS_VERSION_')) {
2016-01-27 15:59:19 +01:00
exit;
2016-01-04 12:49:26 +01:00
}
2016-04-11 11:31:57 +02:00
include_once(_PS_ROOT_DIR_.'/modules/privatesales/Sale.php');
2016-01-04 12:49:26 +01:00
class AdminBulkUpdate extends AdminTab {
2016-01-27 15:59:19 +01:00
public $_html = '';
public function postProcess() {
global $cookie;
2016-01-27 15:59:19 +01:00
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')) {
2016-01-27 15:59:19 +01:00
$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();
2016-01-04 12:49:26 +01:00
foreach($products_a as $id_product => $data) {
2016-01-27 15:59:19 +01:00
$_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
2016-01-27 15:59:19 +01:00
|| 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) {
2016-01-27 15:59:19 +01:00
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 .'
2016-01-27 15:59:19 +01:00
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 .'
2016-01-27 15:59:19 +01:00
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) .'"
2016-01-27 15:59:19 +01:00
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>';
2016-04-20 11:37:50 +02:00
} 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
2016-04-20 11:37:50 +02:00
$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';
2016-04-20 11:37:50 +02:00
foreach(glob(dirname(__FILE__).'/*.csv') as $filename) {
if ($fname == $filename) {
unlink($filename);
}
2016-04-20 11:37:50 +02:00
}
$f = fopen(dirname(__FILE__).'/'.$fname, 'w');
2016-04-20 11:37:50 +02:00
// uft8 sans bom pour accent
$BOM = "\xEF\xBB\xBF"; // UTF-8 BOM
2016-04-20 11:37:50 +02:00
fwrite($f, $BOM); // NEW LINE
fputcsv($f, array(
'Ordre',
'Pays de provenance',
'Marque',
'Mois',
'Référence fournisseur',
'Produit',
'Nomenclature',
'NGP9',
'Pays dorigine',
'Valeur',
'Régime',
'Masse',
'Unité supplémentaire',
'Nature de transaction',
'Mode de transport',
'Département '
), ';', '"');
2016-04-25 16:50:51 +02:00
$pos = 0;
2016-04-20 11:37:50 +02:00
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`
2016-04-20 11:37:50 +02:00
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'];
}
}
2016-04-25 16:50:51 +02:00
$quantity_sold = 0;
2016-04-20 11:37:50 +02:00
if(count($combinations) > 0) {
foreach($combinations as $k => $v) {
2016-04-25 16:50:51 +02:00
$quantity_sold += (int) Db::getInstance()->getValue('
2016-04-20 11:37:50 +02:00
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`
2016-04-20 11:37:50 +02:00
ORDER BY `date_add` DESC LIMIT 1
2016-04-20 11:59:02 +02:00
) NOT IN (1,6,8,9,10,11,14,15,18)
2016-04-20 11:37:50 +02:00
');
2016-04-25 16:50:51 +02:00
/*if ($quantity_sold == 0) {
2016-04-20 11:37:50 +02:00
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
2016-04-25 16:50:51 +02:00
), ';', '"');*/
2016-04-20 11:37:50 +02:00
}
} else {
2016-04-25 16:50:51 +02:00
$quantity_sold += (int) Db::getInstance()->getValue('
2016-04-20 11:37:50 +02:00
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`
2016-04-20 11:37:50 +02:00
ORDER BY `date_add` DESC LIMIT 1
) NOT IN (1,6,8,9,10,11,14,15,18)
');
2016-04-25 16:50:51 +02:00
/*if ($quantity_sold == 0) {
2016-04-20 11:37:50 +02:00
continue;
}
fputcsv($f, array(
2016-04-25 16:50:51 +02:00
//$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
), ';', '"');*/
2016-04-20 11:37:50 +02:00
}
2016-04-25 16:50:51 +02:00
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
), ';', '"');
2016-04-20 11:37:50 +02:00
}
}
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
2016-04-20 11:37:50 +02:00
// Seulement les expeditions vers Espagne et Belgique
$orders = Db::getInstance()->ExecuteS('
2016-04-25 17:16:29 +02:00
SELECT DISTINCT od.`id_order_detail`, od.`product_id`, psc.`id_sale`, a.`id_country` as country_exp
2016-04-20 11:37:50 +02:00
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
2016-06-10 10:22:26 +02:00
o.date_add >= "'.$date_start.' 00:00:00"
AND o.date_add <= "'.$date_end.' 23:59:59"
2016-04-20 11:37:50 +02:00
AND a.`id_country` IN (3,6)
AND
2016-06-10 10:22:26 +02:00
(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
)
))
2016-06-10 11:55:09 +02:00
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
2016-06-10 10:22:26 +02:00
-- 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`
2016-06-10 10:22:26 +02:00
-- ORDER BY `date_add` DESC LIMIT 1
-- ) NOT IN (1,6,8,9,10,11,14,15,18)
2016-04-20 11:37:50 +02:00
ORDER BY od.`product_id` ASC
');
2016-04-25 17:16:29 +02:00
2016-04-20 11:37:50 +02:00
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();
2016-04-25 17:16:29 +02:00
$row_properties = array();
2016-04-20 11:37:50 +02:00
$by_sale = array();
foreach($orders as $order) {
$products[] = $order['product_id'];
$orders_detail[] = $order['id_order_detail'];
2016-04-25 17:16:29 +02:00
if (!isset($row_properties[(int)$order['product_id']])) {
2016-04-20 11:37:50 +02:00
$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);
}
2016-04-25 17:16:29 +02:00
$country_exp = Country::getNameById((int)$id_lang,(int)$order['country_exp']);
$row_properties[(int)$order['product_id']] = array(
2016-04-20 11:37:50 +02:00
'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'],
2016-04-25 17:16:29 +02:00
'country_exp' => $country_exp
2016-04-20 11:37:50 +02:00
);
}
}
2016-04-20 11:59:02 +02:00
2016-04-20 11:37:50 +02:00
$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';
2016-04-20 11:37:50 +02:00
foreach(glob(dirname(__FILE__).'/*.csv') as $filename) {
if ($fname == $filename) {
unlink($filename);
}
2016-04-20 11:37:50 +02:00
}
$f = fopen(dirname(__FILE__).'/'.$fname, 'w');
2016-04-20 11:37:50 +02:00
// uft8 sans bom pour accent
$BOM = "\xEF\xBB\xBF"; // UTF-8 BOM
2016-04-20 11:37:50 +02:00
fwrite($f, $BOM); // NEW LINE
fputcsv($f, array(
'Ordre',
'Pays de provenance',
'Marque',
'Mois',
'Référence fournisseur',
'Produit',
'Nomenclature',
'NGP9',
2016-04-25 17:16:29 +02:00
'Pays de destination',
2016-04-27 12:08:22 +02:00
'Pays d\'origine',
2016-04-20 11:37:50 +02:00
'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`
2016-04-20 11:37:50 +02:00
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'];
}
}
2016-04-25 16:50:51 +02:00
$quantity_sold = 0;
2016-04-20 11:37:50 +02:00
if(count($combinations) > 0) {
foreach($combinations as $k => $v) {
2016-04-25 16:50:51 +02:00
$quantity_sold += (int) Db::getInstance()->getValue('
2016-04-20 11:37:50 +02:00
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]).')
');
2016-04-25 16:50:51 +02:00
/*if ($quantity_sold == 0) {
2016-04-20 11:37:50 +02:00
continue;
}
$names = array_unique($v['name']);
sort($names, SORT_STRING);
$products_detail[] = array(
'position' => $p->position,
2016-04-25 17:16:29 +02:00
'sale_country' => $row_properties[$p->id]['country'],
'sale_name' => $row_properties[$p->id]['name'],
'sale_month' => $row_properties[$p->id]['month'],
2016-04-20 11:37:50 +02:00
'supplier_reference' => $v['supplier_reference'],
'product_name' => $p->name[$id_lang].' - '.implode(' ', $names),
'nc8' => $customs['nc8'],
'NGP9' => '',
2016-04-25 16:50:51 +02:00
'id_country' => $customs['id_country'],
2016-04-20 11:37:50 +02:00
'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,
2016-04-25 17:16:29 +02:00
'sale_date' => $row_properties[$p->id]['date'],
'id_sale' => $row_properties[$p->id]['id_sale'],
2016-04-25 16:50:51 +02:00
);*/
2016-04-20 11:37:50 +02:00
}
} else {
2016-04-25 16:50:51 +02:00
$quantity_sold += (int) Db::getInstance()->getValue('
2016-04-20 11:37:50 +02:00
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]).')
');
2016-04-25 16:50:51 +02:00
/* if ($quantity_sold == 0) {
2016-04-20 11:37:50 +02:00
continue;
}
2016-04-20 11:37:50 +02:00
$products_detail[] = array(
'position' => $p->position,
2016-04-25 17:16:29 +02:00
'sale_country' => $row_properties[$p->id]['country'],
'sale_name' => $row_properties[$p->id]['name'],
'sale_month' => $row_properties[$p->id]['month'],
2016-04-20 11:37:50 +02:00
'supplier_reference' => $p->supplier_reference,
'product_name' => $p->name[$id_lang],
'nc8' => $customs['nc8'],
'NGP9' => '',
2016-04-25 16:50:51 +02:00
'id_country' => $customs['id_country'],
2016-04-20 11:37:50 +02:00
'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,
2016-04-25 17:16:29 +02:00
'sale_date' => $row_properties[$p->id]['date'],
'id_sale' => $row_properties[$p->id]['id_sale'],
2016-04-25 16:50:51 +02:00
);*/
2016-04-20 11:37:50 +02:00
}
2016-04-25 16:50:51 +02:00
if ($quantity_sold == 0) {
continue;
}
$products_detail[] = array(
'position' => $p->position,
2016-04-25 17:16:29 +02:00
'sale_country' => $row_properties[$p->id]['country'],
'sale_name' => $row_properties[$p->id]['name'],
'sale_month' => $row_properties[$p->id]['month'],
2016-04-25 16:50:51 +02:00
'supplier_reference' => $p->supplier_reference,
'product_name' => $p->name[$id_lang],
'nc8' => $customs['nc8'],
'NGP9' => '',
2016-04-25 17:16:29 +02:00
'country_exp' => $row_properties[$p->id]['country_exp'],
2016-04-27 12:08:22 +02:00
'product_country' => $customs['id_country'],
2016-04-27 18:04:42 +02:00
'value' => str_replace('.', ',', ($quantity_sold * Product::getPriceStatic($p->id, false, NULL, 2))),
2016-04-25 16:50:51 +02:00
'regime' => 21,
'weight' => str_replace('.', ',', Tools::ps_round(($p->weight * $quantity_sold),2)),
'quantity_sold' => $quantity_sold,
'transaction_type' => 11,
'transport' => 3,
'department' => 31,
2016-04-25 17:16:29 +02:00
'sale_date' => $row_properties[$p->id]['date'],
'id_sale' => $row_properties[$p->id]['id_sale'],
2016-04-25 16:50:51 +02:00
);
2016-04-20 11:37:50 +02:00
}
}
foreach ($products_detail as $key => $row) {
$id_sale[$key] = (int)$row['id_sale'];
$sale_date[$key] = (int)$row['sale_date'];
2016-04-20 11:37:50 +02:00
}
array_multisort($sale_date, SORT_ASC, $id_sale, SORT_DESC, $products_detail);
2016-04-25 16:50:51 +02:00
$pos = 0;
2016-04-20 11:37:50 +02:00
foreach ($products_detail as $key => $product_d) {
2016-04-25 16:50:51 +02:00
$pos++;
2016-04-20 11:37:50 +02:00
fputcsv($f, array(
2016-04-25 16:50:51 +02:00
//$product_d['position'],
$pos,
2016-04-20 11:37:50 +02:00
$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'],
2016-04-25 17:16:29 +02:00
$product_d['country_exp'],
2016-04-27 12:08:22 +02:00
$product_d['product_country'],
2016-04-20 11:37:50 +02:00
$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;
}
2016-01-27 15:59:19 +01:00
} elseif(Tools::isSubmit('submitExport')) {
set_time_limit(300);
$id_lang = Tools::getValue('id_lang', $cookie->id_lang);
2016-04-20 11:37:50 +02:00
if ($id_category = (int) Tools::getValue('category')) {
2016-01-27 15:59:19 +01:00
$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);
2016-04-11 11:31:57 +02:00
$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);
}
}
2016-01-27 15:59:19 +01:00
$f = fopen(dirname(__FILE__).'/'.$fname, 'w');
2016-01-27 15:59:19 +01:00
// uft8 sans bom pour accent
$BOM = "\xEF\xBB\xBF"; // UTF-8 BOM
2016-01-27 15:59:19 +01:00
fwrite($f, $BOM); // NEW LINE
fputcsv($f, array(
'supplier_reference',
'id_product',
'id_product_attribute',
'position',
'poids',
'quantity',
'product_name',
'combination',
'ean13',
2016-04-15 12:05:25 +02:00
'NC8',
'Pays de fabrication',
2016-04-11 11:31:57 +02:00
// 'location',
// 'brand',
2016-01-27 15:59:19 +01:00
'quantity_sold',
'public_price_wt',
'price_wt',
'wholesale_price',
2016-04-11 11:31:57 +02:00
'BDC HT',
2016-01-27 15:59:19 +01:00
'id_TVA',
2016-04-11 11:31:57 +02:00
// 'active',
2016-01-27 15:59:19 +01:00
'description_short',
2016-06-08 17:44:21 +02:00
'bon_a_savoir',
'plus',
'videos',
'livraison',
2016-01-27 15:59:19 +01:00
'images',
'nb_images',
'categories',
2016-04-11 11:31:57 +02:00
'sous-categories',
'sous-sous-categories',
// 'categories_title',
2016-01-27 15:59:19 +01:00
), ';', '"');
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 . '
');
2016-01-27 15:59:19 +01:00
$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'];
}
2016-04-11 11:31:57 +02:00
sort($categories);
2016-01-27 15:59:19 +01:00
$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 . '
');
2016-04-11 11:31:57 +02:00
$categories_title[(int) $category] = $title;
}
$categorie_0 = '';
$categorie_1 = '';
$categorie_2 = '';
foreach ($categories as $key => $cat) {
if ($key == 0) {
2016-04-13 12:22:55 +02:00
$categorie_0 = $categories_title[$cat];
2016-04-11 11:31:57 +02:00
} elseif ($key == 1) {
2016-04-13 12:22:55 +02:00
$categorie_1 = $categories_title[$cat];
2016-04-11 11:31:57 +02:00
} elseif ($key == 2) {
2016-04-13 12:22:55 +02:00
$categorie_2 = $categories_title[$cat];
2016-04-11 11:31:57 +02:00
}
2016-01-27 15:59:19 +01:00
}
$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']);
2016-01-27 15:59:19 +01:00
$images[] = 'http://static.bebeboutik.com/img/p/'.implode('/', $link_image) .'/'. $img['id_image'].'.jpg';
}
2016-04-20 11:37:50 +02:00
$customs = Db::getInstance()->getRow('
SELECT `nc8`, `id_country`
FROM `'._DB_PREFIX_.'product_customs`
2016-04-20 11:37:50 +02:00
WHERE `id_product` = '.(int) $p->id
);
2016-01-27 15:59:19 +01:00
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.'
2016-04-15 12:38:31 +02:00
ORDER BY i.`position`
2016-01-27 15:59:19 +01:00
') 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';
}
2016-04-20 15:58:47 +02:00
$quantity_sold = (int) Db::getInstance()->getValue('
2016-04-13 12:22:55 +02:00
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
2016-04-20 15:58:47 +02:00
');
/*$quantity_sold = (int) Db::getInstance()->getValue('
2016-04-20 11:37:50 +02:00
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`
2016-04-20 11:37:50 +02:00
ORDER BY `date_add` DESC LIMIT 1
) NOT IN (1,6,8,9,10,11,14,15,18)
2016-04-20 15:58:47 +02:00
');*/
2016-04-13 12:22:55 +02:00
2016-01-27 15:59:19 +01:00
$names = array_unique($v['name']);
sort($names, SORT_STRING);
fputcsv($f, array(
$v['supplier_reference'],
$p->id,
$k,
$p->position,
2016-04-13 12:22:55 +02:00
str_replace('.', ',', $p->weight),
2016-01-27 15:59:19 +01:00
$v['qty'],
$p->name[$id_lang],
implode(' - ', $names),
$v['ean13'],
2016-04-15 12:05:25 +02:00
$customs['nc8'],
$customs['id_country'],
2016-04-11 11:31:57 +02:00
// $v['location'],
// $v['brand'],
2016-04-13 12:22:55 +02:00
$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)),
2016-01-04 12:49:26 +01:00
$p->id_tax_rules_group,
2016-04-11 11:31:57 +02:00
// $p->active,
2016-01-27 15:59:19 +01:00
$p->description_short[$id_lang],
$p->description[$id_lang],
2016-06-08 17:44:21 +02:00
$p->description_more[$id_lang],
$p->videos[$id_lang],
$p->description_delivery[$id_lang],
2016-01-27 15:59:19 +01:00
count($c_images) > 0? implode(', ', $c_images): implode(', ', $images),
count($c_images) > 0? count($c_images): count($images),
2016-04-11 11:31:57 +02:00
$categorie_0,
$categorie_1,
$categorie_2,
//implode(', ', $categories),
//implode(', ', $categories_title),
2016-01-27 15:59:19 +01:00
), ';', '"');
}
} else {
2016-04-20 15:58:47 +02:00
$quantity_sold = (int) Db::getInstance()->getValue('
2016-04-13 12:22:55 +02:00
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
2016-04-20 15:58:47 +02:00
');
/*$quantity_sold = (int) Db::getInstance()->getValue('
2016-04-20 11:37:50 +02:00
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`
2016-04-20 11:37:50 +02:00
ORDER BY `date_add` DESC LIMIT 1
) NOT IN (1,6,8,9,10,11,14,15,18)
2016-04-20 15:58:47 +02:00
');*/
2016-04-13 12:22:55 +02:00
2016-01-27 15:59:19 +01:00
fputcsv($f, array(
$p->supplier_reference,
$p->id,
0,
$p->position,
2016-04-13 12:22:55 +02:00
str_replace('.', ',', $p->weight),
2016-01-27 15:59:19 +01:00
$p->quantity,
$p->name[$id_lang],
'',
$p->ean13,
2016-04-15 12:05:25 +02:00
$customs['nc8'],
$customs['id_country'],
2016-04-11 11:31:57 +02:00
// $p->location,
// $p->manufacturer_name,
2016-04-13 12:22:55 +02:00
$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)),
2016-01-27 15:59:19 +01:00
$p->id_tax_rules_group,
2016-04-11 11:31:57 +02:00
// $p->active,
2016-01-27 15:59:19 +01:00
$p->description_short[$id_lang],
$p->description[$id_lang],
2016-06-08 17:44:21 +02:00
$p->description_more[$id_lang],
$p->videos[$id_lang],
$p->description_delivery[$id_lang],
2016-01-27 15:59:19 +01:00
implode(', ', $images),
count($images),
2016-04-11 11:31:57 +02:00
$categorie_0,
$categorie_1,
$categorie_2,
// implode(', ', $categories),
// implode(', ', $categories_title),
2016-01-27 15:59:19 +01:00
), ';', '"');
}
}
}
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';
2016-01-27 15:59:19 +01:00
foreach(glob(dirname(__FILE__).'/*.csv') as $filename) {
if ($fname == $filename) {
unlink($filename);
}
2016-01-27 15:59:19 +01:00
}
2016-01-27 15:59:19 +01:00
$f = fopen(dirname(__FILE__).'/'.$fname, 'w');
2016-01-27 15:59:19 +01:00
// uft8 sans bom pour accent
$BOM = "\xEF\xBB\xBF"; // UTF-8 BOM
2016-01-27 15:59:19 +01:00
fwrite($f, $BOM); // NEW LINE
fputcsv($f, array(
'supplier_reference',
'id_product',
'id_product_attribute',
'position',
'poids',
'quantity',
'product_name',
'combination',
'ean13',
2016-04-15 12:05:25 +02:00
'NC8',
'Pays de fabrication',
2016-04-11 11:31:57 +02:00
// 'location',
// 'brand',
2016-01-27 15:59:19 +01:00
'quantity_sold',
'public_price_wt',
'price_wt',
'wholesale_price',
2016-04-11 11:31:57 +02:00
'BDC HT',
// 'active',
2016-01-27 15:59:19 +01:00
'description_short',
2016-06-08 17:44:21 +02:00
'bon_a_savoir',
'plus',
'videos',
'livraison',
2016-01-27 15:59:19 +01:00
'images',
'categories',
2016-04-11 11:31:57 +02:00
'sous-categories',
'sous-sous-categories',
// 'categories_title',
2016-01-27 15:59:19 +01:00
), ';', '"');
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 . '
');
2016-01-27 15:59:19 +01:00
$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'];
}
2016-04-11 11:31:57 +02:00
sort($categories);
2016-01-27 15:59:19 +01:00
$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;
}
2016-04-11 11:31:57 +02:00
$categorie_0 = '';
$categorie_1 = '';
$categorie_2 = '';
foreach ($categories as $key => $cat) {
if ($key == 0) {
2016-04-13 12:22:55 +02:00
$categorie_0 = $categories_title[$cat];
2016-04-11 11:31:57 +02:00
} elseif ($key == 1) {
2016-04-13 12:22:55 +02:00
$categorie_1 = $categories_title[$cat];
2016-04-11 11:31:57 +02:00
} elseif ($key == 2) {
2016-04-13 12:22:55 +02:00
$categorie_2 = $categories_title[$cat];
2016-04-11 11:31:57 +02:00
}
}
2016-01-27 15:59:19 +01:00
$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.'
2016-04-15 12:38:31 +02:00
ORDER BY i.`position`
2016-01-27 15:59:19 +01:00
') as $img) {
2016-04-20 11:37:50 +02:00
$link_image = str_split($img['id_image']);
2016-01-27 15:59:19 +01:00
$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);
2016-04-13 12:22:55 +02:00
2016-04-20 15:58:47 +02:00
$quantity_sold = (int) Db::getInstance()->getValue('
2016-04-13 12:22:55 +02:00
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
2016-04-20 15:58:47 +02:00
');
/*$quantity_sold = (int) Db::getInstance()->getValue('
2016-04-20 11:37:50 +02:00
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`
2016-04-20 11:37:50 +02:00
ORDER BY `date_add` DESC LIMIT 1
) NOT IN (1,6,8,9,10,11,14,15,18)
2016-04-20 15:58:47 +02:00
');*/
2016-04-13 12:22:55 +02:00
2016-04-15 12:05:25 +02:00
$customs = Db::getInstance()->getRow('
SELECT `nc8`, `id_country`
FROM `'._DB_PREFIX_.'product_customs`
2016-04-15 12:05:25 +02:00
WHERE `id_product` = '.(int) $p->id
);
2016-01-27 15:59:19 +01:00
fputcsv($f, array(
$v['supplier_reference'],
$p->id,
$k,
$p->position,
2016-04-13 12:22:55 +02:00
str_replace('.', ',', $p->weight),
2016-01-27 15:59:19 +01:00
$v['qty'],
$p->name[$id_lang],
implode(' - ', $names),
$v['ean13'],
2016-04-15 12:05:25 +02:00
$customs['nc8'],
$customs['id_country'],
2016-04-11 11:31:57 +02:00
// $v['location'],
// $v['brand'],
2016-04-13 12:22:55 +02:00
$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)),
2016-04-11 11:31:57 +02:00
// $p->active,
2016-01-27 15:59:19 +01:00
$p->description_short[$id_lang],
$p->description[$id_lang],
2016-06-08 17:44:21 +02:00
$p->description_more[$id_lang],
$p->videos[$id_lang],
$p->description_delivery[$id_lang],
2016-01-27 15:59:19 +01:00
count($c_images) > 0? implode(', ', $c_images): implode(', ', $images),
2016-04-11 11:31:57 +02:00
$categorie_0,
$categorie_1,
$categorie_2,
// implode(', ', $categories),
// implode(', ', $categories_title),
2016-01-27 15:59:19 +01:00
), ';', '"');
}
} else {
2016-04-13 12:22:55 +02:00
2016-04-20 15:58:47 +02:00
$quantity_sold = (int) Db::getInstance()->getValue('
2016-04-13 12:22:55 +02:00
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
2016-04-20 15:58:47 +02:00
');
/*$quantity_sold = (int) Db::getInstance()->getValue('
2016-04-20 11:37:50 +02:00
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`
2016-04-20 11:37:50 +02:00
ORDER BY `date_add` DESC LIMIT 1
) NOT IN (1,6,8,9,10,11,14,15,18)
2016-04-20 15:58:47 +02:00
');*/
2016-04-13 12:22:55 +02:00
2016-04-15 12:05:25 +02:00
$customs = Db::getInstance()->getRow('
SELECT `nc8`, `id_country`
FROM `'._DB_PREFIX_.'product_customs`
2016-04-15 12:05:25 +02:00
WHERE `id_product` = '.(int) $p->id
);
2016-01-27 15:59:19 +01:00
fputcsv($f, array(
$p->supplier_reference,
$p->id,
0,
$p->position,
2016-04-13 12:22:55 +02:00
str_replace('.', ',', $p->weight),
2016-01-27 15:59:19 +01:00
$p->quantity,
$p->name[$id_lang],
'',
$p->ean13,
2016-04-15 12:05:25 +02:00
$customs['nc8'],
$customs['id_country'],
2016-04-11 11:31:57 +02:00
// $p->location,
// $p->manufacturer_name,
2016-04-13 12:22:55 +02:00
$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)),
2016-04-11 11:31:57 +02:00
// $p->active,
2016-01-27 15:59:19 +01:00
$p->description_short[$id_lang],
$p->description[$id_lang],
2016-06-08 17:44:21 +02:00
$p->description_more[$id_lang],
$p->videos[$id_lang],
$p->description_delivery[$id_lang],
2016-01-27 15:59:19 +01:00
implode(', ', $images),
2016-04-11 11:31:57 +02:00
$categorie_0,
$categorie_1,
$categorie_2,
// implode(', ', $categories),
// implode(', ', $categories_title),
2016-01-27 15:59:19 +01:00
), ';', '"');
}
}
}
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;
2016-01-27 15:59:19 +01:00
}
public function display(){
global $cookie;
$output = '<h2>Mise à jour groupée</h2>';
2016-01-27 15:59:19 +01:00
$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>
2016-01-27 15:59:19 +01:00
</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::getSalesInfosWithDate(array((int) $row['id_category']));
$output .= '<option value="'.$row['id_category'].'">'.$row['id_category'].' - '.date("d/m/Y",strtotime($extrafields[(int) $row['id_category']]['date_start'])).' - '.$row['name'].' - '.$extrafields[(int) $row['id_category']]['sales'][1].'</option>';
2016-01-27 15:59:19 +01:00
}
$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>';
}
2016-04-20 11:37:50 +02:00
$output.= '</select>
2016-01-27 15:59:19 +01:00
</div>
<p> </p>
<center><input type="submit" name="submitExport" value="'.$this->l('Export').'" class="button" /></center>
</fieldset>
</form>';
2016-04-20 11:37:50 +02:00
$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>';
2016-04-20 11:37:50 +02:00
2016-01-27 15:59:19 +01:00
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(
2016-01-27 15:59:19 +01:00
{
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;
}
2016-01-27 15:59:19 +01:00
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;
}
2016-04-20 11:37:50 +02:00
}