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; } if(Tools::getValue("action") == 'getSaleExport') { $this->getSaleExport(); } if(Tools::isSubmit('submitExport')) { $id_lang = Tools::getValue('export_id_lang', $cookie->id_lang); if ($id_category = (int) Tools::getValue('export_category')) { $this->getSaleExport($id_category, $id_lang); } elseif (Tools::getValue('date_start') && Tools::getValue('date_end')) { $date_start = Tools::getValue('date_start'); $date_end = Tools::getValue('date_end'); $this->getSaleExportsByDate($date_start, $date_end, $id_lang); } else { HelperFormBootstrap::displayErrors($this->l('Vous devez choisir une vente ou une période')); } } } public function _displayHeader($helperForm) { global $currentIndex; $helperForm->_select2 = true; $helperForm->_dateTimePicker = true; $helperForm->_inputSwitch = true; $helperForm->_inputMask = true; $helperForm->_css .= ' #content .bootstrap-datetimepicker-widget tr th { border-radius :0px !important; } '; $this->html .= $helperForm->renderStyle(); $helperForm->_js .= ' '; } public function _displayAfterContent($helperForm, $option_sales,$option_select_langs) { global $cookie; $this->html .= '

'.$this->l('Export').'


'; $input = array( 'type' => 'select2', 'name' => 'export_category', 'id' => 'export_category', 'label' => $this->l('Select a category to export:'), 'label-class' => 'col-md-12', 'input-class' => 'col-md-12', 'select-class' => 'col-md-12', 'options' => $option_sales ); $this->html .= $helperForm->generateInput($input). '
'; $this->html .='
'; $input = array( 'type' => 'simpleDate', 'period' => true, 'class-from' => 'col-md-6', 'class-to' => 'col-md-6', 'label' => 'Du :', 'label-to' => 'Au :', 'id' => 'date_start', 'id-to' => 'date_end', 'name' => 'date_start', 'name-to' => 'date_end', 'before' => '', 'before-to' => '', ); $this->html .= $helperForm->generateInput($input). '

Format : AAAA-MM-JJ


'; $input = array( 'type' => 'select', 'name' => 'export_id_lang', 'id' => 'export_id_lang', 'label' => $this->l('Select a language:'), 'label-class' => 'col-md-12 text-center', 'input-class' => 'col-md-12', 'options' => $option_select_langs ); $this->html .= $helperForm->generateInput($input). '
'; $this->html .= '
'; } public function _displayContent($helperForm,$option_sales) { global $cookie; $this->html .= '

'.$this->l('Inventory Tracking').'

'; if(count($option_sales) > 1) { $input = array( 'type' => 'select2', 'name' => 'category', 'id' => 'category', 'label' => $this->l('Ventes :'), 'label-class' => 'text-left col-md-12', 'input-class' => 'col-md-12', 'select-class' => 'col-md-12', 'options' => $option_sales ); $this->html .= $helperForm->generateInput($input). '
'; } else { $this->html .= '

Aucune vente !

'; } $this->html .= '
'; if(!empty($this->category)) { $this->html .= $this->getFormOrderForm($this->category); } if( Tools::getIsset('action') && Tools::getValue('action') == 'getStats') { $this->html .= $this->getStatsArray(); } $this->html .= '
'; } public function display() { global $currentIndex, $cookie; $helperForm = new HelperFormBootstrap(); $option_sales = array(); $option_sales[] = array( 'value' => 0, 'label' => 'Selectionner une vente' ); $categories = 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 c.id_category DESC LIMIT 3000 '); $ids = array(); foreach ($categories as $key => $category) { $ids[] = (int)$category['id_category']; } $extrafields = Category::getSalesInfosWithDate($ids); foreach ($categories as $category) { $option_sales[] = array( 'value' => $category['id_category'], 'label' => '#'.$category['id_category'].(isset($extrafields[(int) $category['id_category']])?' ('.date("d/m/Y",strtotime($extrafields[(int) $category['id_category']]['date_start'])).')':'').' - '.$category['name'].(isset($extrafields[(int) $category['id_category']])?' - '.$extrafields[(int) $category['id_category']]['sales'][1]:'') ); } $option_select_langs = array(); foreach (Language::getLanguages(false) as $key => $value) { $option_select_langs[$key] = array( 'value' =>$value['id_lang'], 'label' => $value['name'] ); if($value['id_lang'] == 2){ $option_select_langs[$key]['selected'] = 1; } } //krsort($categories); $this->_postProcess(); $this->_displayHeader($helperForm); $this->html .= $this->getFormOrderFormInfo(); $this->_displayContent($helperForm, $option_sales); $this->_displayAfterContent($helperForm, $option_sales,$option_select_langs); $this->html .= '
' .(Tools::getValue('id')?'':'') .$helperForm->renderScript(); echo $this->html; } public function getStatsArray() { global $cookie; if (!Tools::getIsset('id')) { return false; } $lang_id = Tools::getValue('lang','fr'); // GET INFO FOR STAT $date_from = new DateManager(Tools::getValue('from')); $date_to = new DateManager(Tools::getValue('to')); $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); $arrayProduct = array(); foreach($products as $product) $array_product[$product['id_product']] = $arrayProduct[$product['id_product']] = new Product($product['id_product']); $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]['supplier_reference'] = $current_product->supplier_reference; } $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; foreach ($bestsales_extract as $key => $bestsalesProduct) { $stats->addToStats('bestsale_'.$i.'_product', $bestsalesProduct['name']); $stats->addToStats('bestsale_'.$i.'_ref', $bestsalesProduct['supplier_reference']); $stats->addToStats('bestsale_'.$i.'_quantity', $bestsalesProduct['quantiy']); $stats->addToStats('bestsale_'.$i.'_ca', $bestsalesProduct['total_ht']); $i++; } $stats->loadDataForSubCategory(); $html = '

'.$this->l('Rapport Stats').' Vente : '.$stats->data_stats['name'].'

'; $html.= '
'; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; for ($i=1; $i <= 3; $i++) { $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $html.= ''; } $html.= '
'.$stats->lang['date_start'].''.$stats->data_stats['date_start'].'
'.$stats->lang['date_end'].''.$stats->data_stats['date_end'].'
'.$stats->lang['duration'].''.$stats->data_stats['duration'].'
STATS VENTES
'.$stats->lang['nb_ref'].''.$stats->data_stats['nb_ref'].'
'.$stats->lang['nb_quantity_start'].''.$stats->data_stats['nb_quantity_start'].'
'.$stats->lang['nb_order_simple'].''.$stats->data_stats['nb_order_simple'].'
'.$stats->lang['nb_order_multi'].''.$stats->data_stats['nb_order_multi'].'
'.$stats->lang['nb_order_total'].''.$stats->data_stats['nb_order_total'].'
'.$stats->lang['taux_multi'].''.$stats->data_stats['taux_multi'].'
'.$stats->lang['quantity_sale'].''.$stats->data_stats['quantity_sale'].'
'.$stats->lang['percent_sale'].''.$stats->data_stats['percent_sale'].'
'.$stats->lang['percent_out_of_stock'].''.$stats->data_stats['percent_out_of_stock'].'
'.$stats->lang['ca_ttc'].''.Tools::displayPrice($stats->data_stats['ca_ttc']).'
'.$stats->lang['total_bdc_ht'].''.Tools::displayPrice($stats->data_stats['total_bdc_ht']).'
'.$stats->lang['marge'].''.$stats->data_stats['marge'].'
BEST SELLERS
'.$stats->lang['bestsale_'.$i.'_product'].''.$stats->data_stats['bestsale_'.$i.'_product'].' - '.$stats->data_stats['bestsale_'.$i.'_ref'].'
'.$stats->lang['bestsale_'.$i.'_quantity'].''.$stats->data_stats['bestsale_'.$i.'_quantity'].'
'.$stats->lang['bestsale_'.$i.'_ca'].''.Tools::displayPrice($stats->data_stats['bestsale_'.$i.'_ca']).'
'; $html.= ''; $html.= ''; $html.= ''; $html.= ''; $i = 0; foreach ($stats->data_subcategories as $key => $subcategories) { foreach ($subcategories as $key_2 => $subcategory) { if ($i % 4 == 0) { $html.= ''; } else { $html.= ''; } $html.= ''; if ($key_2 == 'total_amount_wholesale_price') { $html.= ''; } else { $html.= ''; } $html.= ''; $i++; } } $html.= '
SOUS CATEGORIES
'.$stats->lang[$key_2].''.Tools::displayPrice($subcategory).''.$subcategory.'
'; return $html; } 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 = '


'.( count($export_list) > 0 ? '

Ou

':'' ).'
'; //
//
//

'.$this->l('Date d\'import').'

// Du //
// Au // '.( count($export_list) > 0 ? '
// Ou //
// '.$this->l('depuis la génération du dernier bon').' : '.$old_date->getDate('STR') : '').' //
//

'.$this->l('Selection du type de fichier').'

// '.$this->l('Bon de commande').' //
// '.$this->l('Etat de la vente').' //
// '.$this->l('Stats de la vente').' //
// '.$this->l('BDC Logistique').' //
// '.$this->l('Exporter la Vente (ne tient pas compte de la date)').' //

'.$this->l('Selection de la langue').'

// '.$this->l('Français').' //
// '.$this->l('Anglais').' // '; // $html .= '

// '.$this->l('Obtenir le fichier').' //
'; $html .= '
'; if($export_list && count($export_list) > 0) { $html .= ' '; foreach($export_list as $export){ $html .=' '; } $html .= '
'.$this->l('ID').''.$this->l('Date de d\'export').''.$this->l('A partir de').''.$this->l('Jusqu\'a').''.$this->l('Exporter à nouveau').'
'.$export['id_order_form'].' '.$export['date_add'].' '.$export['from'].''.$export['to'].' '; // $html .=' FR EN
'; } else { $html .= '

'.$this->l('Il n\'y a pas d\'anciens exports de bon de commande').'

'; } $html .= '
'; return $html; } public function getSaleExportsByDate($date_start,$date_end,$id_lang) { $order_states = explode(',', Configuration::get('PS_IT_OF_ORDER_STATES')); $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 .' 23:59:59" 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){ $this->html .= '

Choisir une plage moins grande.
Export > 20000 produits

'; exit; }; $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', 'ean13', 'id_product', 'id_product_attribute', 'position', 'poids', 'stock_initial', 'quantity_sold', 'quantity', 'product_name', 'combination', 'NC8', 'Pays de fabrication', // 'location', // 'brand', '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 .= '

Erreur produit: '.serialize($product).' ce produit ne figure pas dans l\'export

'; } 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[] = 'https://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[] = 'https://static.bebeboutik.com/img/p/'.implode('/', $link_image) .'/'. $img['id_image'].'.jpg'; // $c_images[] = 'http://static.bebeboutik.com/'.(int) $p->id.'-'.$img['id_image'].'.jpg'; } $names = array_unique($v['name']); sort($names, SORT_STRING); $quantity_sold = (int) Db::getInstance()->getValue(' SELECT SUM(d.`product_quantity` - d.`product_quantity_reinjected`) 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` oh WHERE o.`id_order` = oh.`id_order` ORDER BY `id_order_history` DESC LIMIT 1 ) IN ("'.implode('","', $order_states).'") '); // $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 // '); $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'], $v['ean13'], $p->id, $k, $p->position, str_replace('.', ',', $p->weight), ($v['qty']+$quantity_sold), $quantity_sold, $v['qty'], $p->name[$id_lang], implode(' - ', $names), $customs['nc8'], $customs['id_country'], // $v['location'], // $v['brand'], str_replace('.', ',', $p->getPrice(TRUE, (int) $k, 2, NULL, FALSE, FALSE)), str_replace('.', ',', $p->getPrice(TRUE, (int) $k, 2)), str_replace('.', ',', Tools::ps_round($p->wholesale_price, 2)), str_replace('.', ',', Tools::ps_round(($quantity_sold * $p->wholesale_price),2)), // $p->active, $p->description_short[$id_lang], $p->description[$id_lang], $p->description_more[$id_lang], $p->videos[$id_lang], $p->description_delivery[$id_lang], count($c_images) > 0? implode(', ', $c_images): implode(', ', $images), $categorie_0, $categorie_1, $categorie_2, // implode(', ', $categories), // implode(', ', $categories_title), ), ';', '"'); } } else { $quantity_sold = (int) Db::getInstance()->getValue(' SELECT SUM(d.`product_quantity` - d.`product_quantity_reinjected`) 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` = 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).'") '); // $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 // '); $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->ean13, $p->id, 0, $p->position, str_replace('.', ',', $p->weight), ($p->quantity+$quantity_sold), $quantity_sold, $p->quantity, $p->name[$id_lang], '', $customs['nc8'], $customs['id_country'], // $p->location, // $p->manufacturer_name, 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 .= '

'.$this->l('Export complete.').' '.$this->l('Click here to download the file').'

'; } public function getSaleExport($id_category=0,$id_lang=0) { global $link, $cookie; require_once(_PS_ROOT_DIR_.'/modules/privatesales/Sale.php'); set_time_limit(300); if($id_category == 0){ $id_category = (int)Tools::getValue('id'); } if($id_lang == 0) { $id_lang = $cookie->id_lang; } $order_states = explode(',', Configuration::get('PS_IT_OF_ORDER_STATES')); $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].'-'.$id_category.'.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', 'ean13', 'id_product', 'id_product_attribute', 'position', 'poids', 'stock_initial', 'quantity_sold', 'quantity', 'product_name', 'combination', 'NC8', 'Pays de fabrication', 'public_price_wt', 'price_wt', 'wholesale_price', 'BDC HT', 'id_TVA', 'description_short', 'bon_a_savoir', 'plus', 'videos', 'livraison', 'images', 'nb_images', 'categories', 'sous-categories', 'sous-sous-categories', ), ';', '"'); foreach($products as $product) { $p = new Product((int) $product, $id_lang); if(!Validate::isLoadedObject($p)) { $this->html .= '

Erreur produit: '.serialize($product).' ce produit ne figure pas dans l\'export

'; } else { $position = Db::getInstance()->getValue(' SELECT `position` FROM `'._DB_PREFIX_.'category_product` WHERE `id_category` = '.(int) $id_category.' AND id_product = '. (int) $p->id . ' '); $p->position = $position; $categories = array(); foreach(Db::getInstance()->ExecuteS(' SELECT `id_category` FROM `'._DB_PREFIX_.'category_product` WHERE `id_product` = '.(int) $p->id.' ') as $cat) { $categories[] = (int) $cat['id_category']; } sort($categories); $categories_title = array(); foreach ($categories as $category) { $title = Db::getInstance()->getValue(' SELECT `name` FROM `'._DB_PREFIX_.'category_lang` WHERE `id_category` = '.(int) $category.' AND id_lang = '. $id_lang . ' '); $categories_title[(int) $category] = $title; } $categorie_0 = ''; $categorie_1 = ''; $categorie_2 = ''; foreach ($categories as $key => $cat) { if ($key == 0) { $categorie_0 = $categories_title[$cat]; } elseif ($key == 1) { $categorie_1 = $categories_title[$cat]; } elseif ($key == 2) { $categorie_2 = $categories_title[$cat]; } } $combinations = array(); foreach($p->getAttributeCombinaisons($id_lang) as $combi) { if(!isset($combinations[$combi['id_product_attribute']])) { $combinations[$combi['id_product_attribute']] = array( 'qty' => $combi['quantity'], 'name' => array($combi['attribute_name']), 'ean13' => $combi['ean13'], 'location' => empty($combi['location'])? $p->location: $combi['location'], 'brand' => $p->manufacturer_name, 'supplier_reference' => empty($combi['supplier_reference'])? $p->supplier_reference: $combi['supplier_reference'], ); } else { $combinations[$combi['id_product_attribute']]['name'][] = $combi['attribute_name']; } } $images = array(); foreach(Db::getInstance()->ExecuteS(' SELECT i.`id_image`, l.`legend` FROM `'._DB_PREFIX_.'image` i LEFT JOIN `'._DB_PREFIX_.'image_lang` l ON l.`id_image` = i.`id_image` WHERE l.`id_lang` = '.(int) $id_lang.' AND i.`id_product` = '.(int) $p->id.' ') as $img) { $link_image = str_split($img['id_image']); $images[] = 'https://static.bebeboutik.com/img/p/'.implode('/', $link_image) .'/'. $img['id_image'].'.jpg'; } $customs = Db::getInstance()->getRow(' SELECT `nc8`, `id_country` FROM `'._DB_PREFIX_.'product_customs` WHERE `id_product` = '.(int) $p->id ); if(count($combinations) > 0) { foreach($combinations as $k => $v) { $c_images = array(); foreach(Db::getInstance()->ExecuteS(' SELECT i.`id_image`, l.`legend` FROM `'._DB_PREFIX_.'image` i LEFT JOIN `'._DB_PREFIX_.'image_lang` l ON l.`id_image` = i.`id_image` LEFT JOIN `'._DB_PREFIX_.'product_attribute_image` a ON a.`id_image` = i.`id_image` WHERE l.`id_lang` = '.(int) $id_lang.' AND a.`id_product_attribute` = '.(int) $k.' ORDER BY i.`position` ') as $img) { $link_image = str_split($img['id_image']); $c_images[] = 'https://static.bebeboutik.com/img/p/'.implode('/', $link_image) .'/'. $img['id_image'].'.jpg'; } $quantity_sold = (int) Db::getInstance()->getValue(' SELECT SUM(d.`product_quantity` - d.`product_quantity_reinjected`) 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` oh WHERE o.`id_order` = oh.`id_order` ORDER BY `id_order_history` DESC LIMIT 1 ) IN ("'.implode('","', $order_states).'") '); // $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 // '); $names = array_unique($v['name']); sort($names, SORT_STRING); fputcsv($f, array( $v['supplier_reference'], $v['ean13'], $p->id, $k, $p->position, str_replace('.', ',', $p->weight), ($v['qty']+$quantity_sold), $quantity_sold, $v['qty'], $p->name[$id_lang], implode(' - ', $names), $customs['nc8'], $customs['id_country'], str_replace('.', ',', $p->getPrice(TRUE, (int) $k, 2, NULL, FALSE, FALSE)), str_replace('.', ',', $p->getPrice(TRUE, (int) $k, 2)), str_replace('.', ',', Tools::ps_round($p->wholesale_price, 2)), str_replace('.', ',', Tools::ps_round(($quantity_sold * $p->wholesale_price),2)), $p->id_tax_rules_group, // $p->active, $p->description_short[$id_lang], $p->description[$id_lang], $p->description_more[$id_lang], $p->videos[$id_lang], $p->description_delivery[$id_lang], count($c_images) > 0? implode(', ', $c_images): implode(', ', $images), count($c_images) > 0? count($c_images): count($images), $categorie_0, $categorie_1, $categorie_2, ), ';', '"'); } } else { $quantity_sold = (int) Db::getInstance()->getValue(' SELECT SUM(d.`product_quantity` - d.`product_quantity_reinjected`) 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` = 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).'") '); // $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 // '); fputcsv($f, array( $p->supplier_reference, $p->ean13, $p->id, 0, $p->position, str_replace('.', ',', $p->weight), ($p->quantity+$quantity_sold), $quantity_sold, $p->quantity, $p->name[$id_lang], '', $customs['nc8'], $customs['id_country'], 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], $p->description_more[$id_lang], $p->videos[$id_lang], $p->description_delivery[$id_lang], implode(', ', $images), count($images), $categorie_0, $categorie_1, $categorie_2, ), ';', '"'); } } } fclose($f); $this->html .= '

'.$this->l('Export complete.').' '.$this->l('Click here to download the file').'

'; } } public function getFormOrderFormInfo() { global $cookie; $html = ''; $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 .= '
'.$this->l('Informations Sauvegardé').'
'; } $html .= ' '; return $html; } 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; } } ?>