diff --git a/classes/stock/Warehouse.php b/classes/stock/Warehouse.php index 45ae87cea..b6c6c3f03 100644 --- a/classes/stock/Warehouse.php +++ b/classes/stock/Warehouse.php @@ -431,4 +431,19 @@ class WarehouseCore extends ObjectModel return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($query); } -} \ No newline at end of file + + /** + * For a given $id_warehouse, returns its name + * @param int $id_warehouse + * @return string name + */ + public static function getWarehouseNameById($id_warehouse) + { + $query = new DbQuery(); + $query->select('name'); + $query->from('warehouse'); + $query->where('id_warehouse = '.(int)$id_warehouse); + return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($query); + } + +} diff --git a/controllers/admin/AdminStockMvtController.php b/controllers/admin/AdminStockMvtController.php index d66756080..71ed46557 100644 --- a/controllers/admin/AdminStockMvtController.php +++ b/controllers/admin/AdminStockMvtController.php @@ -162,7 +162,20 @@ class AdminStockMvtControllerCore extends AdminController array_unshift($warehouses, array('id_warehouse' => -1, 'name' => $this->l('All Warehouses'))); $this->tpl_list_vars['list_warehouses'] = $warehouses; - return parent::renderList(); + // sets toolbar + $this->initToolbar(); + + // renders list + $list = parent::renderList(); + + // if export requested + if (Tools::isSubmit('csv')) + { + $this->renderCSV(); + die; + } + + return $list; } /** @@ -207,4 +220,52 @@ class AdminStockMvtControllerCore extends AdminController } } } -} \ No newline at end of file + + /** + * @see AdminController::initToolbar(); + */ + public function initToolbar() + { + $this->toolbar_btn['export-csv'] = array( + 'short' => 'Export this list as CSV', + 'href' => $this->context->link->getAdminLink('AdminStockMvt').'&csv', + 'desc' => $this->l('Export (CSV)'), + ); + parent::initToolbar(); + unset($this->toolbar_btn['new']); + } + + /** + * Exports CSV + */ + public function renderCSV() + { + if (!$this->_list) + return; + + // header + if ($this->getCurrentWarehouseId() != -1) + $filename = $this->l('stock_mvt').'_'.Warehouse::getWarehouseNameById($this->getCurrentWarehouseId()).'.csv'; + else + $filename = $this->l('stock_mvt').'.csv'; + header('Content-type: text/csv'); + header('Cache-Control: no-store, no-cache'); + header('Content-disposition: attachment; filename="'.$filename); + + // puts keys + $keys = array('id_order', 'id_supply_order', 'firstname', 'lastname', 'quantity', + 'date', 'sign', 'price_te', 'product_name', 'label', 'reference', 'ean13', 'upc'); + echo sprintf("%s\n", implode(';', $keys)); + + // puts rows + foreach ($this->_list as $row) + { + // unsets not needed keys + unset($row['id_stock_mvt'], $row['id_stock'], $row['id_stock_mvt_reason'], + $row['id_employee'], $row['last_wa'], $row['current_wa'], $row['referer'], $row['id_currency'], $row['employee']); + // puts one row + echo sprintf("%s\n", implode(';', array_map(array('CSVCore', 'wrap'), $row))); + } + } + +} diff --git a/controllers/admin/AdminSupplyOrdersController.php b/controllers/admin/AdminSupplyOrdersController.php index 281997c3a..c61417122 100644 --- a/controllers/admin/AdminSupplyOrdersController.php +++ b/controllers/admin/AdminSupplyOrdersController.php @@ -1053,6 +1053,9 @@ class AdminSupplyOrdersControllerCore extends AdminController $this->loadProducts($quantity_threshold); } + /** + * Exports CSV + */ protected function renderCSV() { // exports orders @@ -1813,38 +1816,37 @@ class AdminSupplyOrdersControllerCore extends AdminController // gets products $query = new DbQuery(); - $query->select('s.id_product, - s.id_product_attribute, + $query->select('ps.id_product, + ps.id_product_attribute, ps.product_supplier_reference as supplier_reference, ps.product_supplier_price_te as unit_price_te, ps.id_currency, IFNULL(pa.reference, IFNULL(p.reference, \'\')) as reference, IFNULL(pa.ean13, IFNULL(p.ean13, \'\')) as ean13, IFNULL(pa.upc, IFNULL(p.upc, \'\')) as upc'); - $query->from('stock s'); - $query->innerJoin('product_supplier ps ON - ( - ps.id_product = s.id_product - AND - ps.id_product_attribute = s.id_product_attribute - AND - ps.id_supplier = '.(int)$supply_order->id_supplier.' - )'); + $query->from('product_supplier ps'); + $query->leftJoin('stock s ON + ( + s.id_product = ps.id_product + AND + s.id_product_attribute = ps.id_product_attribute + )'); $query->innerJoin('warehouse_product_location wpl ON ( - wpl.id_product = s.id_product + wpl.id_product = ps.id_product AND - wpl.id_product_attribute = s.id_product_attribute + wpl.id_product_attribute = ps.id_product_attribute AND wpl.id_warehouse = '.(int)$supply_order->id_warehouse.' )'); - $query->leftJoin('product p ON (p.id_product = s.id_product)'); + $query->leftJoin('product p ON (p.id_product = ps.id_product)'); $query->leftJoin('product_attribute pa ON ( - pa.id_product_attribute = s.id_product_attribute + pa.id_product_attribute = ps.id_product_attribute AND - p.id_product = s.id_product + p.id_product = ps.id_product )'); + $query->where('ps.id_supplier = '.(int)$supply_order->id_supplier); // gets items $items = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($query); @@ -1857,10 +1859,10 @@ class AdminSupplyOrdersControllerCore extends AdminController $manager = StockManagerFactory::getManager(); foreach ($items as $item) { - if ($manager->getProductRealQuantities($item['id_product'], $item['id_product_attribute'], $supply_order->id_warehouse, true) < $threshold) + if ($manager->getProductRealQuantities($item['id_product'], $item['id_product_attribute'], $supply_order->id_warehouse, true) <= $threshold) { $product_currency = new Currency($item['id_currency']); - if (!Validate::isLoadedObject($order_currency)) + if (Validate::isLoadedObject($product_currency)) { // sets supply_order_detail $supply_order_detail = new SupplyOrderDetail();