Creating new plugin
This commit is contained in:
@@ -0,0 +1,144 @@
|
||||
<?php
|
||||
|
||||
if (!defined('_PS_VERSION_')) {
|
||||
exit;
|
||||
}
|
||||
|
||||
class AdminEksportHistoriiController extends ModuleAdminController
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->bootstrap = true;
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
public function initContent()
|
||||
{
|
||||
if (Tools::isSubmit('submitExportHistory')) {
|
||||
$this->processExport();
|
||||
return;
|
||||
}
|
||||
|
||||
parent::initContent();
|
||||
|
||||
$this->content = $this->renderExportForm();
|
||||
|
||||
$this->context->smarty->assign([
|
||||
'content' => $this->content,
|
||||
]);
|
||||
}
|
||||
|
||||
protected function renderExportForm()
|
||||
{
|
||||
$action = self::$currentIndex . '&token=' . $this->token;
|
||||
$action = Tools::safeOutput($action);
|
||||
|
||||
$html = '
|
||||
<div class="panel">
|
||||
<h3><i class="icon-download"></i> ' . $this->l('Eksport historii zamówień') . '</h3>
|
||||
<form method="post" action="' . $action . '" class="form-horizontal">
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-lg-2">
|
||||
' . $this->l('Data od') . '
|
||||
</label>
|
||||
<div class="col-lg-3">
|
||||
<input type="date" name="date_from" class="form-control" required="required" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-lg-2">
|
||||
' . $this->l('Data do') . '
|
||||
</label>
|
||||
<div class="col-lg-3">
|
||||
<input type="date" name="date_to" class="form-control" required="required" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="panel-footer">
|
||||
<button type="submit" name="submitExportHistory" class="btn btn-primary">
|
||||
<i class="icon-download"></i> ' . $this->l('Eksport do Excel (CSV)') . '
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
';
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* CSV
|
||||
*/
|
||||
public function processExport()
|
||||
{
|
||||
$date_from = Tools::getValue('date_from');
|
||||
$date_to = Tools::getValue('date_to');
|
||||
|
||||
if (empty($date_from) || empty($date_to)) {
|
||||
die($this->l('Obie daty są wymagane.'));
|
||||
}
|
||||
|
||||
// początek / koniec dnia
|
||||
$date_from .= ' 00:00:00';
|
||||
$date_to .= ' 23:59:59';
|
||||
|
||||
// Zapytanie SQL: zamówienia + klient + produkty
|
||||
$sql = new DbQuery();
|
||||
$sql->select('
|
||||
o.id_order AS order_id,
|
||||
c.id_customer AS client_id,
|
||||
c.email,
|
||||
c.firstname AS first_name,
|
||||
c.lastname AS last_name,
|
||||
od.product_id,
|
||||
od.product_name
|
||||
');
|
||||
$sql->from('orders', 'o');
|
||||
$sql->innerJoin('customer', 'c', 'c.id_customer = o.id_customer');
|
||||
$sql->innerJoin('order_detail', 'od', 'od.id_order = o.id_order');
|
||||
$sql->where('o.date_add BETWEEN "' . pSQL($date_from) . '" AND "' . pSQL($date_to) . '"');
|
||||
$sql->orderBy('o.id_order ASC');
|
||||
|
||||
$rows = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
|
||||
|
||||
$filename = 'orders_export_' . date('Y-m-d_His') . '.csv';
|
||||
|
||||
header('Content-Type: text/csv; charset=utf-8');
|
||||
header('Content-Disposition: attachment; filename="' . $filename . '"');
|
||||
header('Cache-Control: no-store, no-cache, must-revalidate');
|
||||
header('Pragma: no-cache');
|
||||
|
||||
$output = fopen('php://output', 'w');
|
||||
|
||||
fprintf($output, chr(0xEF) . chr(0xBB) . chr(0xBF));
|
||||
|
||||
fputcsv(
|
||||
$output,
|
||||
['order_id', 'client_id', 'email', 'first_name', 'last_name', 'product_id', 'product_name'],
|
||||
';'
|
||||
);
|
||||
|
||||
if (!empty($rows)) {
|
||||
foreach ($rows as $row) {
|
||||
fputcsv(
|
||||
$output,
|
||||
[
|
||||
$row['order_id'],
|
||||
$row['client_id'],
|
||||
$row['email'],
|
||||
$row['first_name'],
|
||||
$row['last_name'],
|
||||
$row['product_id'],
|
||||
$row['product_name'],
|
||||
],
|
||||
';'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
fclose($output);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
80
modules/eksporthistorii/eksporthistorii.php
Normal file
80
modules/eksporthistorii/eksporthistorii.php
Normal file
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
|
||||
if (!defined('_PS_VERSION_')) {
|
||||
exit;
|
||||
}
|
||||
|
||||
class EksportHistorii extends Module
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->name = 'eksporthistorii';
|
||||
$this->tab = 'administration';
|
||||
$this->version = '1.0.0';
|
||||
$this->author = 'Custom';
|
||||
$this->need_instance = 0;
|
||||
$this->bootstrap = true;
|
||||
|
||||
parent::__construct();
|
||||
|
||||
$this->displayName = $this->l('Eksport historii zamówień');
|
||||
$this->description = $this->l('Eksport historii zamówień do pliku Excel (CSV).');
|
||||
}
|
||||
|
||||
public function install()
|
||||
{
|
||||
return parent::install()
|
||||
&& $this->installTab();
|
||||
}
|
||||
|
||||
public function uninstall()
|
||||
{
|
||||
return $this->uninstallTab()
|
||||
&& parent::uninstall();
|
||||
}
|
||||
|
||||
/**
|
||||
* Dodanie zakładki jako podmenu w "Zamówienia"
|
||||
*/
|
||||
protected function installTab()
|
||||
{
|
||||
// rodzic: Orders / Zamówienia
|
||||
$id_parent = (int) Tab::getIdFromClassName('AdminParentOrders');
|
||||
|
||||
$tab = new Tab();
|
||||
$tab->active = 1;
|
||||
$tab->class_name = 'AdminEksportHistorii';
|
||||
$tab->name = [];
|
||||
|
||||
foreach (Language::getLanguages(false) as $lang) {
|
||||
$tab->name[$lang['id_lang']] = 'Eksport historii';
|
||||
}
|
||||
|
||||
$tab->id_parent = $id_parent;
|
||||
$tab->module = $this->name;
|
||||
|
||||
return (bool) $tab->add();
|
||||
}
|
||||
|
||||
/**
|
||||
* Usunięcie zakładki przy deinstalacji
|
||||
*/
|
||||
protected function uninstallTab()
|
||||
{
|
||||
// Usuwamy naszą aktualną zakładkę
|
||||
$id_tab = (int) Tab::getIdFromClassName('AdminEksportHistorii');
|
||||
if ($id_tab) {
|
||||
$tab = new Tab($id_tab);
|
||||
$tab->delete();
|
||||
}
|
||||
|
||||
// Sprzątamy ewentualną starą zakładkę (ze starego modułu)
|
||||
$old_id_tab = (int) Tab::getIdFromClassName('AdminEksportowanieIstorii');
|
||||
if ($old_id_tab) {
|
||||
$old_tab = new Tab($old_id_tab);
|
||||
$old_tab->delete();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
34
modules/eksporthistorii/index.php
Normal file
34
modules/eksporthistorii/index.php
Normal file
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
/**
|
||||
* 2007-2020 PrestaShop SA and Contributors
|
||||
*
|
||||
* NOTICE OF LICENSE
|
||||
*
|
||||
* This source file is subject to the Academic Free License 3.0 (AFL-3.0)
|
||||
* that is bundled with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* https://opensource.org/licenses/AFL-3.0
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@prestashop.com so we can send you a copy immediately.
|
||||
*
|
||||
* DISCLAIMER
|
||||
*
|
||||
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
|
||||
* versions in the future. If you wish to customize PrestaShop for your
|
||||
* needs please refer to https://www.prestashop.com for more information.
|
||||
*
|
||||
* @author PrestaShop SA <contact@prestashop.com>
|
||||
* @copyright 2007-2020 PrestaShop SA and Contributors
|
||||
* @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0)
|
||||
* International Registered Trademark & Property of PrestaShop SA
|
||||
*/
|
||||
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
|
||||
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
|
||||
|
||||
header('Cache-Control: no-store, no-cache, must-revalidate');
|
||||
header('Cache-Control: post-check=0, pre-check=0', false);
|
||||
header('Pragma: no-cache');
|
||||
|
||||
header('Location: ../');
|
||||
exit;
|
||||
Reference in New Issue
Block a user