Merge branch 'ticket-14436-excel-format' into develop

This commit is contained in:
David 2018-02-14 18:54:23 +01:00
commit b98a8c9d4a
3 changed files with 96 additions and 29 deletions

View File

@ -484,13 +484,14 @@ class AdminAntWp extends AdminTab
$params['lines'] = $products;
if(!empty($params['lines'])){
$wp = new GenerateWp();
$wp->excludedProducts = $exclude_ids;
$wp->generate($params, $timer_table, $callStartTime);
$filename = str_replace(' ', '_', $filename);
$wp->objWriter->save(__DIR__ .'/'.$filename.'.xlsx');
$timer_table_formatted = implode('<br>', $timer_table);
$duplicated_formatted = '';
if (!empty($this->report[self::DUPLICATED_REFS])) {
$duplicated_formatted = '<hr>Duplications de Reférences<br><p style="color:darkred">' . implode('<br>', $this->report[self::DUPLICATED_REFS]). '</p>';
$duplicated_formatted = '<hr>Duplications de Références<br><p style="color:darkred">' . implode('<br>', $this->report[self::DUPLICATED_REFS]). '</p>';
}
if (!empty($this->report[self::DUPLICATED_REFS_AND_EAN])) {
$duplicated_formatted .= '<hr>Duplications d\'EANs<br><p style="color:darkred">' . implode('<br>', $this->report[self::DUPLICATED_REFS_AND_EAN]) . '</p>';

View File

@ -6,6 +6,7 @@ class GenerateWp
public $objWriter;
public $columns;
public $columns_es;
public $excludedProducts;
public function __construct()
{
@ -72,6 +73,7 @@ class GenerateWp
'AS' => 'Custom code',
'AT' => 'Pays de fabrication',
'AU' => 'Date de la vente');
$this->excludedProducts = array();
}
public static $FORMAT_DARK_BLUE = '214A7B';
@ -380,7 +382,7 @@ class GenerateWp
https://static.bebeboutik.com/img_import/"&AP1&"/"&D'.$i.'&"-11.jpg,
https://static.bebeboutik.com/img_import/"&AP1&"/"&D'.$i.'&"-12.jpg,
https://static.bebeboutik.com/img_import/"&AP1&"/"&D'.$i.'&"-13.jpg",
IF(R'.$i.'=1'.$i.',"https://static.bebeboutik.com/img_import/"&AP1&"/"&D'.$i.'&".jpg,
IF(R'.$i.'=15,"https://static.bebeboutik.com/img_import/"&AP1&"/"&D'.$i.'&".jpg,
https://static.bebeboutik.com/img_import/"&AP1&"/"&D'.$i.'&"-1.jpg,
https://static.bebeboutik.com/img_import/"&AP1&"/"&D'.$i.'&"-2.jpg,
https://static.bebeboutik.com/img_import/"&AP1&"/"&D'.$i.'&"-3.jpg,
@ -442,35 +444,19 @@ class GenerateWp
}
$price = Product::getPriceStatic($row['id_product'],TRUE, NULL, 2, NULL, FALSE, FALSE);
$price2 = Product::getPriceStatic($row['id_product'],TRUE, NULL, 2);
if(isset($row['id_product_attribute'])){
$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`
lEFT JOIN `'._DB_PREFIX_.'order_state_current` sc ON sc.`id_order` = d.`id_order`
WHERE d.`product_id` = '.(int)$row['id_product'].'
AND d.`product_attribute_id` = '.(int)$row['id_product_attribute'].'
AND sc.id_order_state IN ("'.implode('","', $order_states).'")
');
} 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`
lEFT JOIN `'._DB_PREFIX_.'order_state_current` sc ON sc.`id_order` = d.`id_order`
WHERE d.`product_id` = '.(int)$row['id_product'].'
AND d.`product_attribute_id` = 0
AND sc.id_order_state IN ("'.implode('","', $order_states).'")
');
if(isset($row['ean']) && trim($row['ean']) !== ''){
$best_sales = Product::getBestSales(array('ean'=>$row['ean']), $this->excludedProducts, true);
}elseif(isset($row['supplier_ref']) && trim($row['supplier_ref']) !== ''){
$best_sales = Product::getBestSales(array('ean'=>$row['supplier_ref']), $this->excludedProducts, true);
}
if($quantity_sold === 0){
if(count($best_sales) > 0){
$quantity_sold = $best_sales[0]['quantity_sold'];
$total_revenue = Tools::ps_round($quantity_sold * $row['wholesale_price'], 2);
}else{
$quantity_sold = '';
$total_revenue = '';
}else{
$total_revenue = Tools::ps_round(($quantity_sold * $row['wholesale_price']),2);
}
$this->objPHPExcel->setActiveSheetIndex(0)->setCellValue('B'.$i, (String)$row['ean'])
->setCellValue('C'.$i, (String)$row['supplier_ref'])
->setCellValue('D'.$i, (String)$row['supplier_reference'])
@ -677,8 +663,8 @@ class GenerateWp
$this->objPHPExcel->getActiveSheet()
->getStyle('AM5:AM' . $lastLine)
->getFont()->setBold(true);
//Conditionnal formating for column L
$nb_max_char = 64;
//Conditionnal formating for column M
$nb_max_char = 50;
$objConditional1 = new PHPExcel_Style_Conditional();
$objConditional1->setConditionType(PHPExcel_Style_Conditional::CONDITION_EXPRESSION)
->addCondition('M5>'.$nb_max_char);
@ -702,7 +688,7 @@ class GenerateWp
$this->objPHPExcel->getActiveSheet()->getStyle('M5:M'.$lastLine)->setConditionalStyles($conditionalStyles);
$nb_max_char = 17;
//Conditionnal formating for column T
//Conditionnal formating for column U
$objConditional1 = new PHPExcel_Style_Conditional();
$objConditional1->setConditionType(PHPExcel_Style_Conditional::CONDITION_EXPRESSION)
->addCondition('U5>'.$nb_max_char);

View File

@ -307,4 +307,84 @@ class Product extends ProductCore
return $quantity;
}
/**
* Returns quantity sold during the last 5 sales for a single product
* ordered by best to last
* @param array $params array which contains an array with either ean or ref as key ['ean':'012345678901245'] or ['ref':'my-ref']
* @param array $excluded_ids array which contains product exclusions
* @param bool $use_cache set if the function uses the cache
* @return array containing information about the best sales
* output structure :
* [
{
"quantity_sold": "12",
"id_sale": "662",
"product_id": "28624",
"name": "Gigoteuse 70 cm - Jungle Pistache"
},
{
[...]
}
]
*/
public static function getBestSales($params, $excluded_ids, $use_cache = true)
{
$returnedArray = array();
$ean = false;
$ref = false;
if (isset($params['ean'])) {
$ean = $params['ean'];
}
if (isset($params['ref'])) {
$ref = $params['ref'];
}
if (empty($excluded_ids)) {
$excluded_ids = getBraderieProducts();
}
$order_states = explode(',', Configuration::get('PS_IT_OF_ORDER_STATES'));
if ($ref) {
//get related products
$sql = 'SELECT p.id_product, p.reference FROM `' . _DB_PREFIX_ . 'product` p
WHERE p.`supplier_reference` = \'' . pSQL($ref) . '\'
ORDER BY id_product';
testonecho('sql ' . $sql);
}
if ($ean) {
//get related products
$sql = 'SELECT id_product, reference FROM `' . _DB_PREFIX_ . 'product`
WHERE ean13 = \'' . pSQL($ean) . '\'
ORDER BY id_product';
}
$result = Db::getInstance()->ExecuteS($sql, true, $use_cache, __METHOD__);
$product_id_array = array();
if ($result) {
foreach ($result as $row) {
if (!in_array((int)$row['id_product'], $excluded_ids, true)) {
$product_id_array[] = (int)$row['id_product'];
}
}
//get related sales
$sql = 'SELECT SUM(d.`product_quantity` - d.`product_quantity_reinjected`) as quantity_sold, ppc.`id_sale`, d.`product_id`, pl.name
FROM `' . _DB_PREFIX_ . 'order_detail` d
LEFT JOIN `' . _DB_PREFIX_ . 'orders` o ON o.`id_order` = d.`id_order`
lEFT JOIN `' . _DB_PREFIX_ . 'order_state_current` sc ON sc.`id_order` = d.`id_order`
LEFT JOIN `' . _DB_PREFIX_ . 'product_ps_cache` ppc ON ppc.`id_product` = d.`product_id`
LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` pl ON pl.`id_product` = d.`product_id` AND pl.id_lang = 2
WHERE d.`product_id` IN (' . implode(',', $product_id_array) . ')
AND d.`product_attribute_id` = 0
AND sc.`id_order_state` IN ("' . implode('","', $order_states) . '")
GROUP BY ppc.`id_sale`, d.`product_id`
ORDER BY quantity_sold DESC
LIMIT 5';
$returnedArray = Db::getInstance()->ExecuteS($sql, true, $use_cache, __METHOD__);
}
return $returnedArray;
}
}