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 ;
set_time_limit ( 300 );
2016-05-11 10:13:20 +02:00
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
|| 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>' ;
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
$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 ;
};
2016-04-27 11:11:23 +02:00
$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 ) {
2016-04-27 11:11:23 +02:00
if ( $fname == $filename ) {
unlink ( $filename );
}
2016-04-20 11:37:50 +02:00
}
$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 '
), ';' , '"' );
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`
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`
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`
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
// 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` )
2016-06-10 10:22:26 +02:00
WHERE
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 )
2016-06-10 10:22:26 +02:00
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
)
))
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`
-- 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 ;
};
2016-04-27 11:11:23 +02:00
$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 ) {
2016-04-27 11:11:23 +02:00
if ( $fname == $filename ) {
unlink ( $filename );
}
2016-04-20 11:37:50 +02:00
}
$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' ,
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`
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 ;
}
$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' ];
}
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-27 11:11:23 +02:00
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' ;
2016-04-27 11:11:23 +02:00
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' );
// 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' ,
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 . '
' );
$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' ]);
$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`
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`
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`
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 ;
};
2016-04-27 11:11:23 +02:00
$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 ) {
2016-04-27 11:11:23 +02:00
if ( $fname == $filename ) {
unlink ( $filename );
}
2016-01-27 15:59:19 +01:00
}
2016-04-27 11:11:23 +02:00
2016-01-27 15:59:19 +01:00
$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' ,
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 . '
' );
$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`
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`
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`
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`
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 ;
}
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>' ;
}
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 > ' ;
2016-05-11 10:13:20 +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(' 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 (
{
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 ;
}
2016-04-20 11:37:50 +02:00
}