2016-01-04 12:49:26 +01:00
< ? php
/*
* To change this template , choose Tools | Templates
* and open the template in the editor .
*/
include_once ( _PS_ROOT_DIR_ . '/modules/privatesales_logistique/classes/OrderForm.php' );
include_once ( _PS_ROOT_DIR_ . '/modules/privatesales_logistique/classes/DateManager.php' );
include_once ( _PS_ROOT_DIR_ . '/modules/privatesales_logistique/classes/MakeStats.php' );
include_once ( _PS_ROOT_DIR_ . '/modules/privatesales_logistique/classes/SaleStats.php' );
/**
* Description of AdminPrivateSalesLogistique
*
* @ author Pierre
*/
class AdminPrivateSalesLogistique extends AdminTab {
2016-09-14 17:42:08 +02:00
2016-01-04 12:49:26 +01:00
public $category ;
public $html = '' ;
2016-09-14 17:42:08 +02:00
public function __construct ()
2016-01-04 12:49:26 +01:00
{
parent :: __construct ();
}
2016-09-14 17:42:08 +02:00
public function _postProcess ()
2016-01-04 12:49:26 +01:00
{
2016-09-14 17:42:08 +02:00
if ( Tools :: isSubmit ( 'changeCategory' ))
2016-01-04 12:49:26 +01:00
{
$this -> category = new Category ( Tools :: getValue ( " id " ));
}
if ( Tools :: getValue ( " actionform " ) == 'delete' )
{
if ( Tools :: getValue ( 'idorderform' ) !== false && Validate :: isLoadedObject ( $order_form = new OrderForm (( int ) Tools :: getValue ( 'idorderform' ))))
{
if ( $order_form -> delete ())
echo 'Suppression effectuée' ;
else
echo 'Erreur durant la suppression' ;
}
else
echo 'Mauvais id de bon de commande' ;
exit ;
}
2016-05-18 16:14:24 +02:00
if ( Tools :: getValue ( " action " ) == 'getSaleExport' ) {
$this -> getSaleExport ();
}
2016-09-14 17:42:08 +02:00
if ( Tools :: isSubmit ( 'submitExport' ))
{
$id_lang = Tools :: getValue ( 'export_id_lang' , $cookie -> id_lang );
if ( $id_category = ( int ) Tools :: getValue ( 'export_category' )) {
2016-09-15 11:14:09 +02:00
$this -> getSaleExport ( $id_category , $id_lang );
2016-09-14 17:42:08 +02:00
} elseif ( Tools :: getValue ( 'date_start' ) && Tools :: getValue ( 'date_end' )) {
2016-09-15 11:14:09 +02:00
2016-09-14 17:42:08 +02:00
$date_start = Tools :: getValue ( 'date_start' );
$date_end = Tools :: getValue ( 'date_end' );
2016-09-15 11:14:09 +02:00
$this -> getSaleExportsByDate ( $date_start , $date_end , $id_lang );
} else {
$this -> html .= '<p class="error">Vous devez choisir une vente ou une période</p>' ;
2016-09-14 17:42:08 +02:00
}
}
2016-01-04 12:49:26 +01:00
}
public function _displayHeader ()
{
global $currentIndex ;
$this -> html .= '
2016-09-14 17:42:08 +02:00
< link rel = " stylesheet " type = " text/css " href = " '.__PS_BASE_URI__.'modules/privatesales_logistique/css/chosen.min.css " />
2016-01-04 12:49:26 +01:00
< link rel = " stylesheet " type = " text/css " href = " '.__PS_BASE_URI__.'modules/privatesales_logistique/css/privatesales_logistique.css " />
< script type = " text/javascript " src = " '.__PS_BASE_URI__.'modules/privatesales_logistique/js/jquery-ui-1.8.20.custom.min.js " ></ script >
< script type = " text/javascript " src = " '.__PS_BASE_URI__.'modules/privatesales_logistique/js/jquery-ui-timepicker-addon.js " ></ script >
2016-09-14 17:42:08 +02:00
< script type = " text/javascript " src = " '.__PS_BASE_URI__.'modules/privatesales_logistique/js/chosen.jquery.min.js " ></ script >
2016-01-04 12:49:26 +01:00
< script type = " text/javascript " src = " '.__PS_BASE_URI__.'modules/privatesales_logistique/js/filtre.js " ></ script >
< style type = " text/css " >
@ import url ( " '.__PS_BASE_URI__.'modules/privatesales/jquery-ui-1.8.20.custom.css " );
#exportorderform { line-height:25px; }
</ style > ' ;
$this -> html .= ' < script >
jQuery ( function () {
2016-09-14 17:42:08 +02:00
$ ( " #category " ) . change ( function (){
2016-01-04 12:49:26 +01:00
current_location = " '. $currentIndex .'&token='.Tools::getAdminTokenLite('AdminPrivateSalesLogistique').' " ;
document . location . href = current_location + " &changeCategory&id= " + $ ( " #category " ) . val ();
});
});
2016-09-14 17:42:08 +02:00
2016-01-04 12:49:26 +01:00
$ ( document ) . ready ( function (){
$ ( " #hasDatepicker_1, #hasDatepicker_2 " ) . datetimepicker ({
prevText : " " ,
nextText : " " ,
showSecond : true ,
timeFormat : " hh:mm:ss " ,
dateFormat : " dd/mm/yy " ,
addSliderAccess : true ,
showButtonPanel : false
});
$ ( " #exportorderform " ) . click ( function (){
var export_last = $ ( " #export_last " ) . is ( " :checked " ), req ;
2016-09-14 17:42:08 +02:00
2016-01-04 12:49:26 +01:00
req = " &id= " + $ ( " #category " ) . val ();
if ( export_last ) {
req += " &last "
}
else {
var from = $ ( " #hasDatepicker_1 " ) . val ();
var to = $ ( " #hasDatepicker_2 " ) . val ();
req += " &from= " + from + " &to= " + to ;
}
2016-09-14 17:42:08 +02:00
2016-01-04 12:49:26 +01:00
var type = $ ( " #export_form input[name=export_type]:checked " ) . val ();
2016-05-18 16:14:24 +02:00
if ( type == 1 || type == 2 || type == 4 ) {
2016-01-04 12:49:26 +01:00
req += " &type= " + type ;
req += " &lang= " + $ ( " input[name=lang]:checked " ) . val ();
$ ( this )
. attr ( " href " , " ../modules/privatesales_logistique/exportOrderForm.php?action=getOrderForm " + req )
. attr ( " target " , " _blank " );
return true ;
2016-05-18 16:14:24 +02:00
} else if ( type == 5 ) {
req += " &type= " + type ;
req += " &lang= " + $ ( " input[name=lang]:checked " ) . val ();
2016-05-18 17:07:19 +02:00
var url_dest = " '. $currentIndex .'&token='.Tools::getAdminTokenLite('AdminPrivateSalesLogistique').'&changeCategory&action=getSaleExport " ;
2016-05-18 16:14:24 +02:00
$ ( this ) . attr ( " href " , url_dest + req );
console . log ( $ ( this ) . attr ( " href " ));
return true ;
2016-01-04 12:49:26 +01:00
} else {
var from = $ ( " #hasDatepicker_1 " ) . val ();
var to = $ ( " #hasDatepicker_2 " ) . val ();
req += " &from= " + from + " &to= " + to ;
req += " &type= " + type ;
var url_dest = " '. $currentIndex .'&token='.Tools::getAdminTokenLite('AdminPrivateSalesLogistique').'&action=getStats " ;
$ ( this )
. attr ( " href " , url_dest + req )
. attr ( " target " , " _blank " );
return true ;
}
});
$ ( " #toggle_form_infos " ) . click ( function (){
$ ( " #form_infos " ) . toggle ();
});
});
2016-09-14 17:42:08 +02:00
</ script >
< 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 ,
}
);
});
2016-01-04 12:49:26 +01:00
</ script > ' ;
}
2016-09-15 11:14:09 +02:00
public function _displayAfterContent ()
2016-09-14 17:42:08 +02:00
{
global $cookie ;
$this -> html .= '
2016-09-15 11:14:09 +02:00
</ fieldset >< p >< br /></ p >
2016-09-14 17:42:08 +02:00
< 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 = " export_category " name = " export_category " >
< option value = " " ></ 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` = 1
ORDER BY id_category DESC
' ) as $row ) {
$extrafields = Category :: getSalesInfosWithDate ( array (( int ) $row [ 'id_category' ]));
$this -> html .= '<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>' ;
}
$this -> html .= ' </ 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 = " export_id_lang " name = " export_id_lang " >
' ;
foreach ( Language :: getLanguages ( FALSE ) as $lang ) {
$this -> html .= '<option value="' . $lang [ 'id_lang' ] . '"' . ( $cookie -> id_lang == $lang [ 'id_lang' ] ? ' selected="selected"' : '' ) . '>' . $lang [ 'name' ] . '</option>' ;
}
$this -> html .= ' </ select >
</ div >
< p > </ p >
< center >< input type = " submit " name = " submitExport " value = " '. $this->l ('Export').' " class = " button " /></ center >
</ fieldset >
</ form >< br />< br /> ' ;
}
2016-01-04 12:49:26 +01:00
public function _displayContent ()
{
global $cookie ;
//$categories = CategoryCore::getCategories($cookie->id_lang,FALSE);
$categories = Category :: getCategories ( $cookie -> id_lang , FALSE , true , ' AND c.id_parent = 1' , ' ORDER BY c.id_category DESC ' , ' LIMIT 500' );
$ids = array ();
foreach ( $categories as $key => $category ) {
foreach ( $category as $key => $data ) {
$ids [] = $data [ 'infos' ][ 'id_category' ];
}
}
$extrafields = Category :: getSalesInfos ( $ids );
krsort ( $categories [ 1 ]);
$this -> html .= ' < fieldset >
< legend >< img src = " ../img/admin/tab-tools.gif " alt = " " /> '.$this->l(' Inventory Tracking ').' </ legend >
< h3 > Ventes :</ h3 > ' ;
if ( count ( $categories ) > 0 )
{
$this -> html .= '<select id="category" name="category" size="5" style="width:400px;height:150px;vertical-align:top;">' ;
foreach ( $categories [ 1 ] as $categorie )
{
$select = " " ;
if ( $this -> category -> id == $categorie [ 'infos' ][ 'id_category' ])
$select = " selected='selected' " ;
2016-09-14 17:42:08 +02:00
2016-01-04 12:49:26 +01:00
$this -> html .= " <option " . $select . " value=' " . $categorie [ 'infos' ][ 'id_category' ] . " '> " . $categorie [ 'infos' ][ 'name' ] . " - " . $extrafields [ $categorie [ 'infos' ][ 'id_category' ]][ 'sales' ][ 1 ] . ' - ' . $categorie [ 'infos' ][ 'id_category' ] . " </option> " ;
}
$this -> html .= '</select> - Filtre : <input type="text" value="" id="filter_sale" size="50"><br/><br/>' ;
}
else
$this -> html .= 'Aucune vente' ;
2016-09-14 17:42:08 +02:00
if ( ! empty ( $this -> category ))
2016-01-04 12:49:26 +01:00
{
$this -> html .= $this -> getFormOrderForm ( $this -> category );
$this -> html .= '<br/><br/>' ;
}
2016-09-14 17:42:08 +02:00
if ( Tools :: getIsset ( 'action' )
2016-01-04 12:49:26 +01:00
&& Tools :: getValue ( 'action' ) == 'getStats' )
{
$this -> html .= $this -> getStatsArray ();
$this -> html .= '<br/><br/>' ;
}
}
2016-09-14 17:42:08 +02:00
public function display ()
2016-01-04 12:49:26 +01:00
{
global $currentIndex ;
$this -> _postProcess ();
$this -> _displayHeader ();
$this -> _displayContent ();
2016-09-15 11:14:09 +02:00
$this -> _displayAfterContent ();
2016-05-18 16:14:24 +02:00
2016-01-04 12:49:26 +01:00
echo $this -> html ;
}
2016-09-14 17:42:08 +02:00
public function getStatsArray ()
2016-01-04 12:49:26 +01:00
{
global $cookie ;
if ( ! Tools :: getIsset ( 'id' )) {
return false ;
}
// GET INFO FOR STAT
$date_from = new DateManager ( Tools :: getValue ( 'from' ));
$date_to = new DateManager ( Tools :: getValue ( 'to' ));
2016-09-14 17:42:08 +02:00
2016-01-04 12:49:26 +01:00
$date_from -> setLangue ( strtoupper ( $lang_id ));
$date_to -> setLangue ( strtoupper ( $lang_id ));
$id_category = Tools :: getValue ( 'id' );
$sale = Sale :: getSaleFromCategory ( $id_category );
$category = new Category ( $id_category , $cookie -> id_lang );
$products = MakeStats :: getProductsByCat ( $id_category );
2016-09-14 17:42:08 +02:00
2016-01-04 12:49:26 +01:00
$arrayProduct = array ();
foreach ( $products as $product )
$array_product [ $product [ 'id_product' ]] = $arrayProduct [ $product [ 'id_product' ]] = new Product ( $product [ 'id_product' ]);
2016-09-14 17:42:08 +02:00
2016-01-04 12:49:26 +01:00
$order_states = explode ( ',' , Configuration :: get ( 'PS_IT_OF_ORDER_STATES' ));
$lines = MakeStats :: getOrdersByIdsProduct ( array_keys ( $arrayProduct ), $order_states , $date_from -> getDate ( 'SQL' ), $date_to -> getDate ( 'SQL' ));
// for stats
$lines_tmp = $lines ;
$lines = MakeStats :: getArrayLines ( $lines );
$stats = new SaleStats ( $sale , $category );
$stats -> loadData ();
$total_sale_product = array ();
$total_bdc_ht = 0 ;
foreach ( $lines_tmp as $key => $order_line ) {
$id_product = $order_line [ 'product_id' ];
$id_product_attribute = $order_line [ 'product_attribute_id' ];
$current_product = $array_product [ $id_product ];
if ( $id_product_attribute != 0 ) {
$combination = new Combination ( $id_product_attribute );
if ( $combination -> wholesale_price == 0 ) {
$wholesale_price = $current_product -> wholesale_price ;
} else {
$wholesale_price = $combination -> wholesale_price ;
}
} else {
$wholesale_price = $current_product -> wholesale_price ;
}
$quantity_to_cmd = $order_line [ 'product_quantity' ] - $order_line [ 'product_quantity_reinjected' ];
$total_sale_ht += $quantity_to_cmd * $wholesale_price ;
if ( ! is_array ( $total_sale_product [( int ) $id_product ]) ){
$total_sale_product [( int ) $id_product ] = array ();
$total_sale_product [( int ) $id_product ][ 'total_ht' ] = 0 ;
$total_sale_product [( int ) $id_product ][ 'quantiy' ] = 0 ;
$total_sale_product [( int ) $id_product ][ 'name' ] = $current_product -> name [ 2 ];
}
$total_sale_product [( int ) $id_product ][ 'total_ht' ] += ( $wholesale_price * $quantity_to_cmd );
$total_sale_product [( int ) $id_product ][ 'quantiy' ] += $quantity_to_cmd ;
}
$stats -> addToStats ( 'total_bdc_ht' , $total_sale_ht );
$bestsales = MakeStats :: orderMultiArray ( $total_sale_product , 'total_ht' );
$bestsales_extract = array_slice ( $bestsales , 0 , 3 );
$i = 1 ;
2016-09-14 17:42:08 +02:00
foreach ( $bestsales_extract as $key => $bestsalesProduct ) {
2016-01-04 12:49:26 +01:00
$stats -> addToStats ( 'bestsale_' . $i . '_product' , $bestsalesProduct [ 'name' ]);
$stats -> addToStats ( 'bestsale_' . $i . '_quantity' , $bestsalesProduct [ 'quantiy' ]);
$stats -> addToStats ( 'bestsale_' . $i . '_ca' , $bestsalesProduct [ 'total_ht' ]);
$i ++ ;
}
$stats -> loadDataForSubCategory ();
$html = '
< style >
. red {
color : red
}
. stats td {
padding : 5 px 10 px ;
}
. stats tr . grey {
background : #f1f1f1
}
. stats tr . blue {
background : #81c4f3;
color : #fff;
}
</ style >
< fieldset style = " font-size:1em; " >
< legend > '.$this->l(' Stats ').' :</ legend > ' ;
2016-09-14 17:42:08 +02:00
2016-01-04 12:49:26 +01:00
$html .= '<h2>Rapport de vente : ' . $stats -> data_stats [ 'name' ] . '</h2>' ;
$html .= '<table class="stats" style="width:45%; float:left">' ;
$html .= '<tr>' ;
$html .= '<td>' . $stats -> lang [ 'date_start' ] . '</td>' ;
$html .= '<td align="right">' . $stats -> data_stats [ 'date_start' ] . '</td>' ;
$html .= '</tr>' ;
$html .= '<tr>' ;
$html .= '<td>' . $stats -> lang [ 'date_end' ] . '</b></td>' ;
$html .= '<td align="right">' . $stats -> data_stats [ 'date_end' ] . '</td>' ;
$html .= '</tr>' ;
$html .= '<tr class="grey">' ;
$html .= '<td>' . $stats -> lang [ 'duration' ] . '</b></td>' ;
$html .= '<td align="right">' . $stats -> data_stats [ 'duration' ] . '</td>' ;
$html .= '</tr>' ;
$html .= ' < tr class = " blue " >
< td colspan = 2 > STATS VENTES </ td >
</ tr > ' ;
$html .= '<tr>' ;
$html .= '<td>' . $stats -> lang [ 'nb_ref' ] . '</td>' ;
$html .= '<td align="right">' . $stats -> data_stats [ 'nb_ref' ] . '</td>' ;
$html .= '</tr>' ;
$html .= '<tr>' ;
$html .= '<td>' . $stats -> lang [ 'nb_quantity_start' ] . '</td>' ;
$html .= '<td align="right">' . $stats -> data_stats [ 'nb_quantity_start' ] . '</td>' ;
$html .= '</tr>' ;
$html .= '<tr class="grey">' ;
$html .= '<td>' . $stats -> lang [ 'nb_order_simple' ] . '</td>' ;
$html .= '<td align="right">' . $stats -> data_stats [ 'nb_order_simple' ] . '</td>' ;
$html .= '</tr>' ;
$html .= '<tr class="grey">' ;
$html .= '<td>' . $stats -> lang [ 'nb_order_multi' ] . '</td>' ;
$html .= '<td align="right">' . $stats -> data_stats [ 'nb_order_multi' ] . '</td>' ;
$html .= '</tr>' ;
$html .= '<tr>' ;
$html .= '<td>' . $stats -> lang [ 'nb_order_total' ] . '</td>' ;
$html .= '<td align="right">' . $stats -> data_stats [ 'nb_order_total' ] . '</td>' ;
$html .= '</tr>' ;
$html .= '<tr>' ;
$html .= '<td>' . $stats -> lang [ 'taux_multi' ] . '</td>' ;
$html .= '<td align="right">' . $stats -> data_stats [ 'taux_multi' ] . '</td>' ;
$html .= '</tr>' ;
$html .= '<tr>' ;
$html .= '<td class="red">' . $stats -> lang [ 'quantity_sale' ] . '</td>' ;
$html .= '<td class="red" align="right">' . $stats -> data_stats [ 'quantity_sale' ] . '</td>' ;
$html .= '<tr class="grey">' ;
$html .= '<td class="red">' . $stats -> lang [ 'percent_sale' ] . '</td>' ;
$html .= '<td class="red" align="right">' . $stats -> data_stats [ 'percent_sale' ] . '</td>' ;
$html .= '</tr>' ;
$html .= '</tr>' ;
$html .= '<tr>' ;
$html .= '<td class="red">' . $stats -> lang [ 'percent_out_of_stock' ] . '</td>' ;
$html .= '<td class="red" align="right">' . $stats -> data_stats [ 'percent_out_of_stock' ] . '</td>' ;
$html .= '</tr>' ;
$html .= '<tr>' ;
$html .= '<td>' . $stats -> lang [ 'ca_ttc' ] . '</td>' ;
$html .= '<td align="right">' . Tools :: displayPrice ( $stats -> data_stats [ 'ca_ttc' ]) . '</td>' ;
$html .= '</tr>' ;
$html .= '<tr>' ;
$html .= '<tr>' ;
$html .= '<td class="red">' . $stats -> lang [ 'total_bdc_ht' ] . '</td>' ;
$html .= '<td class="red" align="right">' . Tools :: displayPrice ( $stats -> data_stats [ 'total_bdc_ht' ]) . '</td>' ;
$html .= '</tr>' ;
$html .= '<tr class="grey">' ;
$html .= '<td>' . $stats -> lang [ 'marge' ] . '</td>' ;
$html .= '<td align="right">' . $stats -> data_stats [ 'marge' ] . '</td>' ;
$html .= '</tr>' ;
$html .= ' < tr class = " blue " >
< td colspan = 2 > BEST SELLERS </ td >
</ tr > ' ;
2016-09-14 17:42:08 +02:00
for ( $i = 1 ; $i <= 3 ; $i ++ ) {
2016-01-04 12:49:26 +01:00
$html .= '<tr class="grey">' ;
$html .= '<td>' . $stats -> lang [ 'bestsale_' . $i . '_product' ] . '</td>' ;
$html .= '<td align="right">' . $stats -> data_stats [ 'bestsale_' . $i . '_product' ] . '</td>' ;
$html .= '</tr>' ;
$html .= '<tr>' ;
$html .= '<td>' . $stats -> lang [ 'bestsale_' . $i . '_quantity' ] . '</td>' ;
$html .= '<td align="right">' . $stats -> data_stats [ 'bestsale_' . $i . '_quantity' ] . '</td>' ;
$html .= '</tr>' ;
$html .= '<tr>' ;
$html .= '<td>' . $stats -> lang [ 'bestsale_' . $i . '_ca' ] . '</td>' ;
$html .= '<td align="right">' . Tools :: displayPrice ( $stats -> data_stats [ 'bestsale_' . $i . '_ca' ]) . '</td>' ;
$html .= '</tr>' ;
}
$html .= '</table>' ;
$html .= '<table class="stats" style="width:45%; float:right">' ;
$html .= '<tr class="blue">' ;
$html .= '<td colspan="2">SOUS CATEGORIES</td>' ;
$html .= '</tr>' ;
$i = 0 ;
foreach ( $stats -> data_subcategories as $key => $subcategories ) {
foreach ( $subcategories as $key_2 => $subcategory ) {
if ( $i % 4 == 0 ) {
$html .= '<tr class="grey">' ;
} else {
$html .= '<tr>' ;
}
$html .= '<td>' . $stats -> lang [ $key_2 ] . '</td>' ;
if ( $key_2 == 'total_amount_wholesale_price' ) {
$html .= '<td>' . Tools :: displayPrice ( $subcategory ) . '</td>' ;
} else {
$html .= '<td>' . $subcategory . '</td>' ;
}
$html .= '</tr>' ;
$i ++ ;
}
}
$html .= ' </ table >
</ fieldset > ' ;
return $html ;
}
2016-09-14 17:42:08 +02:00
2016-01-04 12:49:26 +01:00
public function getFormOrderForm ( $category )
{
global $link , $cookie ;
require_once ( _PS_ROOT_DIR_ . '/modules/privatesales/Sale.php' );
$sale = Sale :: getSaleFromCategory ( $category -> id );
$date = new DateTime ( $sale -> date_start );
$date_end = new DateTime ( $sale -> date_end );
$date_end -> modify ( '+2 hour' );
$date_first_of_month = $date -> format ( 'd/m/Y H:i:s' );
$date_now = $date_end -> format ( 'd/m/Y H:i:s' );
$export_list = OrderForm :: getByCategorie ( $category -> id );
if ( $export_list && count ( $export_list ) > 0 )
{
$old_date = OrderForm :: getLastByCategory ( $category -> id );
$old_date = new DateManager ( $old_date );
}
$html = '
< script type = " text/javascript " >
$ ( function (){
$ ( document ) . ready ( function (){
$ ( " .deleteOrderForm " ) . click ( function (){
var elem = $ ( this );
var id_order_form = $ ( this ) . attr ( " data-order-form " );
if ( confirm ( " '. $this->l ('Êtes vous sur de vouloir supprimer ce bon de commande ?').' " )) {
var link = " '.html_entity_decode(urldecode( $link->getLanguageLinkAdmin ( $cookie->id_lang ))).'&actionform=delete&idorderform= " + id_order_form ;
var popupnow = window . open ( link , " deleteOrderForm " + id_order_form , " height=500, width=500, toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, directories=no, status=no " );
elem . parents ( " tr " ) . first () . remove ();
setTimeout ( function (){
popupnow . close ();
}, 1000 );
}
return false ;
});
});
});
</ script >
< fieldset style = " font-size:1em; " id = " export_form " >
< legend > '.$this->l(' Export ').' :</ legend >
< div style = " width:450px;float:left; " >
< div >
< h4 > '.$this->l(' Date d\ 'import' ) . ' </ h4 >
2016-09-14 17:42:08 +02:00
Du < input type = " text " value = " '. $date_first_of_month .' " size = " 20 " id = " hasDatepicker_1 " style = " text-align:center; " >
2016-01-04 12:49:26 +01:00
< br />
Au < input type = " text " value = " '. $date_now .' " size = " 20 " id = " hasDatepicker_2 " style = " text-align:center; " >
'.( count($export_list) > 0 ? ' < br />
2016-09-14 17:42:08 +02:00
Ou
2016-01-04 12:49:26 +01:00
< br />
< input type = " checkbox " id = " export_last " value = " 1 " > '.$this->l(' depuis la génération du dernier bon ').' : '.$old_date->getDate(' STR ') : ' ').'
< br />
< h4 > '.$this->l(' Selection du type de fichier ').' </ h4 >
< input type = " radio " name = " export_type " value = " 1 " checked > '.$this->l(' Bon de commande ').'
< br />
< input type = " radio " name = " export_type " value = " 2 " > '.$this->l(' Etat de la vente ').'
< br />
< input type = " radio " name = " export_type " value = " 3 " > '.$this->l(' Stats de la vente ').'
2016-04-04 17:23:15 +02:00
< br />
< input type = " radio " name = " export_type " value = " 4 " > '.$this->l(' BDC Logistique ').'
2016-05-18 16:14:24 +02:00
< br />
< input type = " radio " name = " export_type " value = " 5 " > '.$this->l(' Exporter la Vente ( ne tient pas compte de la date ) ').'
2016-01-04 12:49:26 +01:00
< h4 > '.$this->l(' Selection de la langue ').' </ h4 >
< input type = " radio " name = " lang " value = " fr " checked > '.$this->l(' Français ').'
< br />
< input type = " radio " name = " lang " value = " en " > '.$this->l(' Anglais ').'
' ;
2016-09-14 17:42:08 +02:00
2016-01-04 12:49:26 +01:00
$html .= ' < br />< br />
< a href = " " class = " button " id = " exportorderform " > '.$this->l(' Obtenir le fichier ').' </ a >
2016-05-18 16:14:24 +02:00
</ div > ' ;
2016-09-14 17:42:08 +02:00
2016-01-04 12:49:26 +01:00
$html .= '
</ div >
< div style = " width:300px;float:left;padding-left:30px " > ' ;
2016-09-14 17:42:08 +02:00
2016-01-04 12:49:26 +01:00
$html .= $this -> getFormOrderFormInfo ( $category );
2016-09-14 17:42:08 +02:00
2016-01-04 12:49:26 +01:00
$html .= '
</ div >
< div class = " clear " >
< br />< br /> ' ;
if ( $export_list && count ( $export_list ) > 0 )
{
$html .= '
< table class = " table " cellspacing = " 0 " cellpadding = " 0 " >
< thead >< tr >< th > '.$this->l(' ID ').' </ th >< th > '.$this->l(' Date de d\ 'export' ) . '</th><th>' . $this -> l ( 'A partir de' ) . '</th><th>' . $this -> l ( 'Jusqu\'a' ) . '</th><th style="text-align:center;">' . $this -> l ( 'Exporter à nouveau' ) . ' </ th ></ tr ></ thead >
< tbody > ' ;
2016-09-14 17:42:08 +02:00
2016-01-04 12:49:26 +01:00
foreach ( $export_list as $export )
{
$html .= ' < tr >
< td > '.$export[' id_order_form '].' </ td >
< td > '.$export[' date_add '].' </ td >
< td > '.$export[' from '].' </ td >< td > '.$export[' to '].' </ td >
< td style = " text-align:center; " > ' ;
// <a href="../modules/privatesales_logistique/exportOrderForm.php?action=getOrderForm&id_exportorderform='.$export['id_order_form'].'&type=1" title="'.$this->l('Exporter le bon de commande').'"><img src="../img/tmp/tab_mini_AdminSuppliers.gif"></a>
2016-09-14 17:42:08 +02:00
2016-01-04 12:49:26 +01:00
$html .= '
< a href = " ../modules/privatesales_logistique/exportOrderForm.php?action=getOrderForm&id_exportorderform='. $export['id_order_form'] .'&type=1&lang=fr " title = " '. $this->l ('Exporter le bon de commande').' FR " > FR < img src = " ../img/admin/delivery.gif " ></ a >
< a href = " ../modules/privatesales_logistique/exportOrderForm.php?action=getOrderForm&id_exportorderform='. $export['id_order_form'] .'&type=1&lang=en " title = " '. $this->l ('Exporter le bon de commande').' EN " > EN < img src = " ../img/admin/delivery.gif " ></ a >
< a href = " # " title = " '. $this->l ('Supprimer cette extraction').' " class = " deleteOrderForm " data - order - form = " '. $export['id_order_form'] .' " >< img src = " /img/admin/delete.gif " ></ a >
</ td ></ tr > ' ;
}
2016-09-14 17:42:08 +02:00
2016-01-04 12:49:26 +01:00
$html .= ' </ tbody >
</ table > ' ;
}
else
$html .= '<br /><br />' . $this -> l ( 'Il n\'y a pas d\'anciens exports de bon de commande' );
$html .= '
</ div >
</ fieldset > ' ;
return $html ;
}
2016-09-14 17:42:08 +02:00
public function getSaleExportsByDate ( $date_start , $date_end , $id_lang )
{
2017-01-18 11:32:54 +01:00
$order_states = explode ( ',' , Configuration :: get ( 'PS_IT_OF_ORDER_STATES' ));
2016-09-14 17:42:08 +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
2016-09-15 11:14:09 +02:00
WHERE date_start BETWEEN " '. $date_start .' 00:00:00 " AND " '. $date_end .' 23:59:59 "
2016-09-14 17:42:08 +02: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 ){
2016-09-15 11:14:09 +02:00
$this -> html .= '<p class="error">Choisir une plage moins grande. <br /> Export > 20000 produits</p>' ;
exit ;
2016-09-14 17:42:08 +02:00
};
$fname = date ( " Ymd " , strtotime ( $date_start )) . '-' . date ( " Ymd " , strtotime ( $date_end )) . '.csv' ;
foreach ( glob ( dirname ( __FILE__ ) . '/*.csv' ) as $filename ) {
if ( $fname == $filename ) {
unlink ( $filename );
}
}
$f = fopen ( dirname ( __FILE__ ) . '/' . $fname , 'w' );
// uft8 sans bom pour accent
$BOM = " \xEF \xBB \xBF " ; // UTF-8 BOM
fwrite ( $f , $BOM ); // NEW LINE
fputcsv ( $f , array (
'supplier_reference' ,
'id_product' ,
'id_product_attribute' ,
'position' ,
'poids' ,
'quantity' ,
'product_name' ,
'combination' ,
'ean13' ,
'NC8' ,
'Pays de fabrication' ,
// 'location',
// 'brand',
'quantity_sold' ,
'public_price_wt' ,
'price_wt' ,
'wholesale_price' ,
'BDC HT' ,
// 'active',
'description_short' ,
'bon_a_savoir' ,
'plus' ,
'videos' ,
'livraison' ,
'images' ,
'categories' ,
'sous-categories' ,
'sous-sous-categories' ,
// 'categories_title',
), ';' , '"' );
foreach ( $products as $product ) {
$p = new Product (( int ) $product , $id_lang );
if ( ! Validate :: isLoadedObject ( $p )) {
$this -> html .= '<p class="error">Erreur produit: ' . serialize ( $product ) . ' ce produit ne figure pas dans l\'export</p>' ;
} else {
$position = Db :: getInstance () -> getValue ( '
SELECT `position`
FROM `'._DB_PREFIX_.'category_product`
WHERE `id_category` = '.(int) $p->id_category_default.'
AND id_product = '. (int) $p->id . '
' );
$p -> position = $position ;
$categories = array ();
foreach ( Db :: getInstance () -> ExecuteS ( '
SELECT `id_category`
FROM `'._DB_PREFIX_.'category_product`
WHERE `id_product` = '.(int) $p->id.'
' ) as $cat ) {
$categories [] = ( int ) $cat [ 'id_category' ];
}
sort ( $categories );
$categories_title = array ();
foreach ( $categories as $category ) {
$title = Db :: getInstance () -> getValue ( '
SELECT `name`
FROM `'._DB_PREFIX_.'category_lang`
WHERE `id_category` = '.(int) $category.'
AND id_lang = '. $id_lang . '
' );
$categories_title [] = $title ;
}
$categorie_0 = '' ;
$categorie_1 = '' ;
$categorie_2 = '' ;
foreach ( $categories as $key => $cat ) {
if ( $key == 0 ) {
$categorie_0 = $categories_title [ $cat ];
} elseif ( $key == 1 ) {
$categorie_1 = $categories_title [ $cat ];
} elseif ( $key == 2 ) {
$categorie_2 = $categories_title [ $cat ];
}
}
$combinations = array ();
foreach ( $p -> getAttributeCombinaisons ( $id_lang ) as $combi ) {
if ( ! isset ( $combinations [ $combi [ 'id_product_attribute' ]])) {
$combinations [ $combi [ 'id_product_attribute' ]] = array (
'qty' => $combi [ 'quantity' ],
'name' => array ( $combi [ 'attribute_name' ]),
'ean13' => $combi [ 'ean13' ],
'location' => empty ( $combi [ 'location' ]) ? $p -> location : $combi [ 'location' ],
'brand' => $p -> manufacturer_name ,
'supplier_reference' => empty ( $combi [ 'supplier_reference' ]) ? $p -> supplier_reference : $combi [ 'supplier_reference' ],
);
} else {
$combinations [ $combi [ 'id_product_attribute' ]][ 'name' ][] = $combi [ 'attribute_name' ];
}
}
$images = array ();
foreach ( Db :: getInstance () -> ExecuteS ( '
SELECT i . `id_image` , l . `legend`
FROM `'._DB_PREFIX_.'image` i
LEFT JOIN `'._DB_PREFIX_.'image_lang` l
ON l . `id_image` = i . `id_image`
WHERE l . `id_lang` = '.(int) $id_lang.'
AND i . `id_product` = '.(int) $p->id.'
ORDER BY i . `position`
' ) as $img ) {
$link_image = str_split ( $img [ 'id_image' ]);
$images [] = 'http://static.bebeboutik.com/img/p/' . implode ( '/' , $link_image ) . '/' . $img [ 'id_image' ] . '.jpg' ;
}
if ( count ( $combinations ) > 0 ) {
foreach ( $combinations as $k => $v ) {
$c_images = array ();
foreach ( Db :: getInstance () -> ExecuteS ( '
SELECT i . `id_image` , l . `legend`
FROM `'._DB_PREFIX_.'image` i
LEFT JOIN `'._DB_PREFIX_.'image_lang` l
ON l . `id_image` = i . `id_image`
LEFT JOIN `'._DB_PREFIX_.'product_attribute_image` a
ON a . `id_image` = i . `id_image`
WHERE l . `id_lang` = '.(int) $id_lang.'
AND a . `id_product_attribute` = '.(int) $k.'
' ) as $img ) {
$link_image = str_split ( $img [ 'id_image' ]);
$c_images [] = 'http://static.bebeboutik.com/img/p/' . implode ( '/' , $link_image ) . '/' . $img [ 'id_image' ] . '.jpg' ;
// $c_images[] = 'http://static.bebeboutik.com/'.(int) $p->id.'-'.$img['id_image'].'.jpg';
}
$names = array_unique ( $v [ 'name' ]);
sort ( $names , SORT_STRING );
$quantity_sold = ( int ) Db :: getInstance () -> getValue ( '
2017-01-18 11:32:54 +01:00
SELECT SUM ( d . `product_quantity` - d . `product_quantity_reinjected` )
2016-09-14 17:42:08 +02:00
FROM `'._DB_PREFIX_.'order_detail` d
2017-01-18 11:32:54 +01:00
LEFT JOIN `'._DB_PREFIX_.'orders` o ON o . `id_order` = d . `id_order`
2016-09-15 11:14:09 +02:00
WHERE d . `product_id` = '.(int) $p->id.'
2016-09-14 17:42:08 +02:00
AND d . `product_attribute_id` = '.(int) $k.'
2017-01-18 11:32:54 +01:00
AND (
SELECT `id_order_state`
FROM `'._DB_PREFIX_.'order_history` oh
WHERE o . `id_order` = oh . `id_order`
ORDER BY `id_order_history` DESC
LIMIT 1
) IN ( " '.implode(' " , " ', $order_states ).' " )
2016-09-14 17:42:08 +02:00
' );
2017-01-18 11:32:54 +01:00
// $quantity_sold = (int) Db::getInstance()->getValue('
// SELECT SUM(d.`product_quantity`)
// FROM `'._DB_PREFIX_.'order_detail` d
// LEFT JOIN `'._DB_PREFIX_.'orders` o
// ON o.`id_order` = d.`id_order`
// LEFT JOIN `'._DB_PREFIX_.'order_history` h
// ON h.`id_order` = d.`id_order`
// WHERE d.`product_id` = '.(int) $p->id.'
// AND d.`product_attribute_id` = '.(int) $k.'
// AND h.`id_order_state` = 2
// ');
2016-09-14 17:42:08 +02:00
$customs = Db :: getInstance () -> getRow ( '
SELECT `nc8` , `id_country`
FROM `'._DB_PREFIX_.'product_customs`
WHERE `id_product` = ' . ( int ) $p -> id
);
fputcsv ( $f , array (
$v [ 'supplier_reference' ],
$p -> id ,
$k ,
$p -> position ,
str_replace ( '.' , ',' , $p -> weight ),
$v [ 'qty' ],
$p -> name [ $id_lang ],
implode ( ' - ' , $names ),
$v [ 'ean13' ],
$customs [ 'nc8' ],
$customs [ 'id_country' ],
// $v['location'],
// $v['brand'],
$quantity_sold ,
str_replace ( '.' , ',' , $p -> getPrice ( TRUE , ( int ) $k , 2 , NULL , FALSE , FALSE )),
str_replace ( '.' , ',' , $p -> getPrice ( TRUE , ( int ) $k , 2 )),
str_replace ( '.' , ',' , Tools :: ps_round ( $p -> wholesale_price , 2 )),
str_replace ( '.' , ',' , Tools :: ps_round (( $quantity_sold * $p -> wholesale_price ), 2 )),
// $p->active,
$p -> description_short [ $id_lang ],
$p -> description [ $id_lang ],
$p -> description_more [ $id_lang ],
$p -> videos [ $id_lang ],
$p -> description_delivery [ $id_lang ],
count ( $c_images ) > 0 ? implode ( ', ' , $c_images ) : implode ( ', ' , $images ),
$categorie_0 ,
$categorie_1 ,
$categorie_2 ,
// implode(', ', $categories),
// implode(', ', $categories_title),
), ';' , '"' );
}
} else {
$quantity_sold = ( int ) Db :: getInstance () -> getValue ( '
2017-01-18 11:32:54 +01:00
SELECT SUM ( d . `product_quantity` - d . `product_quantity_reinjected` )
2016-09-14 17:42:08 +02:00
FROM `'._DB_PREFIX_.'order_detail` d
2017-01-18 11:32:54 +01:00
LEFT JOIN `'._DB_PREFIX_.'orders` o ON o . `id_order` = d . `id_order`
2016-09-14 17:42:08 +02:00
WHERE d . `product_id` = '.(int) $p->id.'
2017-01-18 11:32:54 +01:00
AND d . `product_attribute_id` = 0
AND (
SELECT `id_order_state`
FROM `'._DB_PREFIX_.'order_history` oh
WHERE o . `id_order` = oh . `id_order`
ORDER BY `id_order_history` DESC
LIMIT 1
) IN ( " '.implode(' " , " ', $order_states ).' " )
2016-09-14 17:42:08 +02:00
' );
2017-01-18 11:32:54 +01:00
// $quantity_sold = (int) Db::getInstance()->getValue('
// SELECT SUM(d.`product_quantity`)
// FROM `'._DB_PREFIX_.'order_detail` d
// LEFT JOIN `'._DB_PREFIX_.'orders` o
// ON o.`id_order` = d.`id_order`
// LEFT JOIN `'._DB_PREFIX_.'order_history` h
// ON h.`id_order` = d.`id_order`
// WHERE d.`product_id` = '.(int) $p->id.'
// AND h.`id_order_state` = 2
// ');
2016-09-14 17:42:08 +02:00
$customs = Db :: getInstance () -> getRow ( '
SELECT `nc8` , `id_country`
FROM `'._DB_PREFIX_.'product_customs`
WHERE `id_product` = ' . ( int ) $p -> id
);
fputcsv ( $f , array (
$p -> supplier_reference ,
$p -> id ,
0 ,
$p -> position ,
str_replace ( '.' , ',' , $p -> weight ),
$p -> quantity ,
$p -> name [ $id_lang ],
'' ,
$p -> ean13 ,
$customs [ 'nc8' ],
$customs [ 'id_country' ],
// $p->location,
// $p->manufacturer_name,
$quantity_sold ,
str_replace ( '.' , ',' , $p -> getPrice ( TRUE , NULL , 2 , NULL , FALSE , FALSE )),
str_replace ( '.' , ',' , $p -> getPrice ( TRUE , NULL , 2 )),
str_replace ( '.' , ',' , Tools :: ps_round ( $p -> wholesale_price , 2 )),
str_replace ( '.' , ',' , Tools :: ps_round (( $quantity_sold * $p -> wholesale_price ), 2 )),
// $p->active,
$p -> description_short [ $id_lang ],
$p -> description [ $id_lang ],
$p -> description_more [ $id_lang ],
$p -> videos [ $id_lang ],
$p -> description_delivery [ $id_lang ],
implode ( ', ' , $images ),
$categorie_0 ,
$categorie_1 ,
$categorie_2 ,
// implode(', ', $categories),
// implode(', ', $categories_title),
), ';' , '"' );
}
}
}
fclose ( $f );
$this -> html .= '<p class="conf">' . $this -> l ( 'Export complete.' ) . ' <a onclick="window.open(this.href); return false;" href="http://' . $_SERVER [ 'HTTP_HOST' ] . __PS_BASE_URI__ . 'modules/privatesales_logistique/' . $fname . '">' . $this -> l ( 'Click here to download the file' ) . '</a></p>' ;
}
2016-09-15 11:14:09 +02:00
2016-09-14 17:42:08 +02:00
public function getSaleExport ( $id_category = 0 , $id_lang = 0 )
2016-05-18 16:14:24 +02:00
{
global $link , $cookie ;
require_once ( _PS_ROOT_DIR_ . '/modules/privatesales/Sale.php' );
set_time_limit ( 300 );
2016-09-14 17:42:08 +02:00
if ( $id_category == 0 ){
$id_category = ( int ) Tools :: getValue ( 'id' );
}
if ( $id_lang == 0 ) {
$id_lang = $cookie -> id_lang ;
}
2017-01-18 11:32:54 +01:00
$order_states = explode ( ',' , Configuration :: get ( 'PS_IT_OF_ORDER_STATES' ));
2016-05-18 16:14:24 +02:00
$sale = Sale :: getSaleFromCategory ( $id_category );
$category = new Category ( $id_category , $cookie -> id_lang );
if ( $category ) {
$c = $category ;
$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 );
$fname = date ( " Ymd " , strtotime ( $sale -> date_start )) . '-' . $sale -> title [( int ) $id_lang ] . '.csv' ;
foreach ( glob ( dirname ( __FILE__ ) . '/*.csv' ) as $filename ) {
if ( $fname == $filename ) {
unlink ( $filename );
}
}
$f = fopen ( dirname ( __FILE__ ) . '/' . $fname , 'w' );
// uft8 sans bom pour accent
2016-09-14 17:42:08 +02:00
$BOM = " \xEF \xBB \xBF " ; // UTF-8 BOM
2016-05-18 16:14:24 +02:00
fwrite ( $f , $BOM ); // NEW LINE
fputcsv ( $f , array (
'supplier_reference' ,
'id_product' ,
'id_product_attribute' ,
'position' ,
'poids' ,
'quantity' ,
'product_name' ,
'combination' ,
'ean13' ,
'NC8' ,
'Pays de fabrication' ,
'quantity_sold' ,
'public_price_wt' ,
'price_wt' ,
'wholesale_price' ,
'BDC HT' ,
'id_TVA' ,
'description_short' ,
2016-06-08 17:44:21 +02:00
'bon_a_savoir' ,
'plus' ,
'videos' ,
'livraison' ,
2016-05-18 16:14:24 +02:00
'images' ,
'nb_images' ,
'categories' ,
'sous-categories' ,
'sous-sous-categories' ,
), ';' , '"' );
foreach ( $products as $product ) {
$p = new Product (( int ) $product , $id_lang );
if ( ! Validate :: isLoadedObject ( $p )) {
2016-09-14 17:42:08 +02:00
$this -> html .= '<p class="error">Erreur produit: ' . serialize ( $product ) . ' ce produit ne figure pas dans l\'export</p>' ;
2016-05-18 16:14:24 +02:00
} 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-09-14 17:42:08 +02:00
' );
2016-05-18 16:14:24 +02: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' ];
}
sort ( $categories );
$categories_title = array ();
foreach ( $categories as $category ) {
$title = Db :: getInstance () -> getValue ( '
SELECT `name`
FROM `'._DB_PREFIX_.'category_lang`
WHERE `id_category` = '.(int) $category.'
AND id_lang = '. $id_lang . '
' );
$categories_title [( int ) $category ] = $title ;
}
$categorie_0 = '' ;
$categorie_1 = '' ;
$categorie_2 = '' ;
foreach ( $categories as $key => $cat ) {
if ( $key == 0 ) {
$categorie_0 = $categories_title [ $cat ];
} elseif ( $key == 1 ) {
$categorie_1 = $categories_title [ $cat ];
} elseif ( $key == 2 ) {
$categorie_2 = $categories_title [ $cat ];
}
}
$combinations = array ();
foreach ( $p -> getAttributeCombinaisons ( $id_lang ) as $combi ) {
if ( ! isset ( $combinations [ $combi [ 'id_product_attribute' ]])) {
$combinations [ $combi [ 'id_product_attribute' ]] = array (
'qty' => $combi [ 'quantity' ],
'name' => array ( $combi [ 'attribute_name' ]),
'ean13' => $combi [ 'ean13' ],
'location' => empty ( $combi [ 'location' ]) ? $p -> location : $combi [ 'location' ],
'brand' => $p -> manufacturer_name ,
'supplier_reference' => empty ( $combi [ 'supplier_reference' ]) ? $p -> supplier_reference : $combi [ 'supplier_reference' ],
);
} else {
$combinations [ $combi [ 'id_product_attribute' ]][ 'name' ][] = $combi [ 'attribute_name' ];
}
}
$images = array ();
foreach ( Db :: getInstance () -> ExecuteS ( '
SELECT i . `id_image` , l . `legend`
FROM `'._DB_PREFIX_.'image` i
LEFT JOIN `'._DB_PREFIX_.'image_lang` l
ON l . `id_image` = i . `id_image`
WHERE l . `id_lang` = '.(int) $id_lang.'
AND i . `id_product` = '.(int) $p->id.'
' ) as $img ) {
$link_image = str_split ( $img [ 'id_image' ]);
$images [] = 'http://static.bebeboutik.com/img/p/' . implode ( '/' , $link_image ) . '/' . $img [ 'id_image' ] . '.jpg' ;
}
$customs = Db :: getInstance () -> getRow ( '
SELECT `nc8` , `id_country`
2016-09-14 17:42:08 +02:00
FROM `'._DB_PREFIX_.'product_customs`
2016-05-18 16:14:24 +02:00
WHERE `id_product` = ' . ( int ) $p -> id
);
if ( count ( $combinations ) > 0 ) {
foreach ( $combinations as $k => $v ) {
$c_images = array ();
foreach ( Db :: getInstance () -> ExecuteS ( '
SELECT i . `id_image` , l . `legend`
FROM `'._DB_PREFIX_.'image` i
LEFT JOIN `'._DB_PREFIX_.'image_lang` l
ON l . `id_image` = i . `id_image`
LEFT JOIN `'._DB_PREFIX_.'product_attribute_image` a
ON a . `id_image` = i . `id_image`
WHERE l . `id_lang` = '.(int) $id_lang.'
AND a . `id_product_attribute` = '.(int) $k.'
ORDER BY i . `position`
' ) as $img ) {
$link_image = str_split ( $img [ 'id_image' ]);
$c_images [] = 'http://static.bebeboutik.com/img/p/' . implode ( '/' , $link_image ) . '/' . $img [ 'id_image' ] . '.jpg' ;
}
$quantity_sold = ( int ) Db :: getInstance () -> getValue ( '
2017-01-18 11:32:54 +01:00
SELECT SUM ( d . `product_quantity` - d . `product_quantity_reinjected` )
2016-05-18 16:14:24 +02:00
FROM `'._DB_PREFIX_.'order_detail` d
2017-01-18 11:32:54 +01:00
LEFT JOIN `'._DB_PREFIX_.'orders` o ON o . `id_order` = d . `id_order`
2016-05-18 16:14:24 +02:00
WHERE d . `product_id` = '.(int) $p->id.'
AND d . `product_attribute_id` = '.(int) $k.'
2017-01-18 11:32:54 +01:00
AND (
SELECT `id_order_state`
FROM `'._DB_PREFIX_.'order_history` oh
WHERE o . `id_order` = oh . `id_order`
ORDER BY `id_order_history` DESC
LIMIT 1
) IN ( " '.implode(' " , " ', $order_states ).' " )
2016-05-18 16:14:24 +02:00
' );
2017-01-18 11:32:54 +01:00
// $quantity_sold = (int) Db::getInstance()->getValue('
// SELECT SUM(d.`product_quantity`)
// FROM `'._DB_PREFIX_.'order_detail` d
// LEFT JOIN `'._DB_PREFIX_.'orders` o
// ON o.`id_order` = d.`id_order`
// LEFT JOIN `'._DB_PREFIX_.'order_history` h
// ON h.`id_order` = d.`id_order`
// WHERE d.`product_id` = '.(int) $p->id.'
// AND d.`product_attribute_id` = '.(int) $k.'
// AND h.`id_order_state` = 2
// ');
2016-05-18 16:14:24 +02:00
$names = array_unique ( $v [ 'name' ]);
sort ( $names , SORT_STRING );
fputcsv ( $f , array (
$v [ 'supplier_reference' ],
$p -> id ,
$k ,
$p -> position ,
str_replace ( '.' , ',' , $p -> weight ),
$v [ 'qty' ],
$p -> name [ $id_lang ],
implode ( ' - ' , $names ),
$v [ 'ean13' ],
$customs [ 'nc8' ],
$customs [ 'id_country' ],
$quantity_sold ,
str_replace ( '.' , ',' , $p -> getPrice ( TRUE , ( int ) $k , 2 , NULL , FALSE , FALSE )),
str_replace ( '.' , ',' , $p -> getPrice ( TRUE , ( int ) $k , 2 )),
str_replace ( '.' , ',' , Tools :: ps_round ( $p -> wholesale_price , 2 )),
str_replace ( '.' , ',' , Tools :: ps_round (( $quantity_sold * $p -> wholesale_price ), 2 )),
$p -> id_tax_rules_group ,
// $p->active,
$p -> description_short [ $id_lang ],
$p -> description [ $id_lang ],
2016-06-08 17:44:21 +02:00
$p -> description_more [ $id_lang ],
$p -> videos [ $id_lang ],
$p -> description_delivery [ $id_lang ],
2016-05-18 16:14:24 +02:00
count ( $c_images ) > 0 ? implode ( ', ' , $c_images ) : implode ( ', ' , $images ),
count ( $c_images ) > 0 ? count ( $c_images ) : count ( $images ),
$categorie_0 ,
$categorie_1 ,
$categorie_2 ,
), ';' , '"' );
}
} else {
$quantity_sold = ( int ) Db :: getInstance () -> getValue ( '
2017-01-18 11:32:54 +01:00
SELECT SUM ( d . `product_quantity` - d . `product_quantity_reinjected` )
2016-05-18 16:14:24 +02:00
FROM `'._DB_PREFIX_.'order_detail` d
2017-01-18 11:32:54 +01:00
LEFT JOIN `'._DB_PREFIX_.'orders` o ON o . `id_order` = d . `id_order`
2016-05-18 16:14:24 +02:00
WHERE d . `product_id` = '.(int) $p->id.'
2017-01-18 11:32:54 +01:00
AND d . `product_attribute_id` = 0
AND (
SELECT `id_order_state`
FROM `'._DB_PREFIX_.'order_history` oh
WHERE o . `id_order` = oh . `id_order`
ORDER BY `id_order_history` DESC
LIMIT 1
) IN ( " '.implode(' " , " ', $order_states ).' " )
2016-05-18 16:14:24 +02:00
' );
2017-01-18 11:32:54 +01:00
// $quantity_sold = (int) Db::getInstance()->getValue('
// SELECT SUM(d.`product_quantity`)
// FROM `'._DB_PREFIX_.'order_detail` d
// LEFT JOIN `'._DB_PREFIX_.'orders` o
// ON o.`id_order` = d.`id_order`
// LEFT JOIN `'._DB_PREFIX_.'order_history` h
// ON h.`id_order` = d.`id_order`
// WHERE d.`product_id` = '.(int) $p->id.'
// AND h.`id_order_state` = 2
// ');
2016-05-18 16:14:24 +02:00
fputcsv ( $f , array (
$p -> supplier_reference ,
$p -> id ,
0 ,
$p -> position ,
str_replace ( '.' , ',' , $p -> weight ),
$p -> quantity ,
$p -> name [ $id_lang ],
'' ,
$p -> ean13 ,
$customs [ 'nc8' ],
$customs [ 'id_country' ],
$quantity_sold ,
str_replace ( '.' , ',' , $p -> getPrice ( TRUE , NULL , 2 , NULL , FALSE , FALSE )),
str_replace ( '.' , ',' , $p -> getPrice ( TRUE , NULL , 2 )),
str_replace ( '.' , ',' , Tools :: ps_round ( $p -> wholesale_price , 2 )),
str_replace ( '.' , ',' , Tools :: ps_round (( $quantity_sold * $p -> wholesale_price ), 2 )),
$p -> id_tax_rules_group ,
$p -> 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-05-18 16:14:24 +02:00
implode ( ', ' , $images ),
count ( $images ),
$categorie_0 ,
$categorie_1 ,
$categorie_2 ,
), ';' , '"' );
}
}
}
fclose ( $f );
$this -> html .= '<p class="conf">' . $this -> l ( 'Export complete.' ) . ' <a onclick="window.open(this.href); return false;" href="http://' . $_SERVER [ 'HTTP_HOST' ] . __PS_BASE_URI__ . 'modules/privatesales_logistique/' . $fname . '">' . $this -> l ( 'Click here to download the file' ) . '</a></p>' ;
}
}
2016-01-04 12:49:26 +01:00
public function getFormOrderFormInfo ()
{
global $cookie ;
$html = '
< div id = " toggle_form_infos " style = " cursor:pointer;text-align:center; " class = " button " > Informations sur le bon de commande </ div > ' ;
$array_lang = array (
'fr' , 'en'
);
$array = array (
'PS_IT_OF_ORGANISATION' => array ( 'form_organisation' , 'Organisation :' ),
'PS_IT_OF_SLOGAN' => array ( 'form_slogan' , 'Slogan :' ),
'PS_IT_OF_EMAIL' => array ( 'form_email' , 'Email :' ),
'PS_IT_OF_TVA' => array ( 'form_tva' , 'TVA :' ),
'PS_IT_OF_ADDRESS' => array ( 'form_address' , 'Adresse partie 1 :' ),
'PS_IT_OF_ADDRESS_2' => array ( 'form_address_2' , 'Adresse partie 2 :' ),
'PS_IT_OF_CP_CITY' => array ( 'form_cp_city' , 'CP et Ville :' ),
'PS_IT_OF_NUMBER_PHONE' => array ( 'form_numero_tel' , 'Numéro de téléphone :' ),
'PS_IT_OF_BAS_PAGE' => array ( 'form_bas_page' , 'Informations bas de page :' , true ),
'PS_IT_OF_BAS_PAGE_BIS' => array ( 'form_bas_page_bis' , 'Informations bas de page Bis:' , true ),
);
if ( Tools :: isSubmit ( 'submitFormInfos' ))
{
foreach ( $array_lang as $lang )
{
foreach ( $array as $k => $arr )
{
if ( isset ( $arr [ 2 ]))
$html_ = true ;
else $html_ = false ;
Configuration :: updateValue ( $k . '_' . $lang , Tools :: getValue ( $arr [ 0 ] . '_' . $lang ), $html_ );
}
}
Configuration :: updateValue ( 'PS_IT_OF_ORDER_STATES' , implode ( ',' , Tools :: getValue ( 'states' , array () )) );
$html .= '<div class="conf">' . $this -> l ( 'Informations Sauvegardé' ) . '</div>' ;
}
$html .= '
< form method = " post " action = " # " id = " form_infos " style = " display:none; " > ' ;
foreach ( $array_lang as $lang )
{
$html .= '<div><strong>' . $lang . ' :</strong></div>' ;
foreach ( $array as $k => $arr )
{
$ { $arr [ 0 ] . '_' . $lang } = Configuration :: get ( $k . '_' . $lang );
$html .= '
< br />
< div >
'.$arr[1].' < br />
' . ( isset ( $arr [ 2 ])
? '<textarea name="' . $arr [ 0 ] . '_' . $lang . '" size="50">' . $ { $arr [ 0 ] . '_' . $lang } . '</textarea>'
: '<input type="text" value="' . $ { $arr [ 0 ] . '_' . $lang } . '" name="' . $arr [ 0 ] . '_' . $lang . '" size="50">' ) . '
</ div > ' ;
}
}
$order_state = OrderState :: getOrderStates ( $cookie -> id_lang );
$order_state_selected = explode ( ',' , Configuration :: get ( 'PS_IT_OF_ORDER_STATES' ));
$html .= '
< br />
< div >
'.$this->l(' Statut des commandes que vous souhaitez traiter ').' : < br />< br />
' ;
foreach ( $order_state as $state )
$html .= '<label for="order_state_' . $state [ 'id_order_state' ] . ' " style= " float : none ; padding : 0 ; font - weight : normal ; display : block ; cursor : pointer ; text - align : left ; width : auto ; " >
< input type = " checkbox " value = " '. $state['id_order_state'] .' " '.(in_array($state[' id_order_state '], $order_state_selected) ? ' checked ' : ' ').' id = " order_state_'. $state['id_order_state'] .' " name = " states[] " > '.$state[' name '].'
</ label > ' ;
$html .= '
</ div >
< br />
< input type = " submit " value = " '. $this->l ('Sauvegarder').' " name = " submitFormInfos " class = " button " >
</ form > ' ;
return $html ;
}
2016-05-18 16:14:24 +02: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-01-04 12:49:26 +01:00
}
?>