first commit

This commit is contained in:
2025-08-02 16:30:27 +02:00
commit 23646bfcee
14851 changed files with 1750626 additions and 0 deletions

240
admin/export.php Normal file
View File

@@ -0,0 +1,240 @@
<?php
namespace Admin;
use Export\ExportDataDBFUcto;
use KupShop\AdminBundle\Exception\ExportException;
use KupShop\KupShopBundle\Util\Compat\ServiceContainer;
use KupShop\OrderingBundle\OrdersExcelExport;
use KupShop\OrderingBundle\OrdersItemsExcelExport;
use Query\Operator;
class Export
{
public const EXPORT_TYPES_MAPPING = [
'products_selling' => 'productsSelling',
];
protected $ORDERS_LIMIT = 100000;
protected $handled;
protected $encoding;
protected $format;
protected $params = [];
protected $orderIds = [];
protected $type;
public function setOrderIds($ids)
{
$this->orderIds = $ids;
}
public function setType($type)
{
$this->type = $type;
}
public function setFormat($format)
{
$this->format = $format;
}
public function run()
{
$type = getVal('type', null, $this->type);
$data = getVal('data');
$this->format = getVal('format', null, $this->format);
$this->handled = getVal('what', $data);
$this->encoding = getVal('coding', null, 'utf-8');
$filter = getVal('filter');
if ($filter['date_handled']['to'] ?? false) {
$this->params['dateTo'] = $filter['date_handled']['to'];
} elseif ($filter['date_created']['to'] ?? false) {
$this->params['dateTo'] = $filter['date_created']['to'];
} else {
$this->params['dateTo'] = '';
}
if ($filter['date_handled']['from'] ?? false) {
$this->params['dateFrom'] = $filter['date_handled']['from'];
} elseif ($filter['date_created']['from'] ?? false) {
$this->params['dateFrom'] = $filter['date_created']['from'];
} else {
$this->params['dateFrom'] = '';
}
$this->params['data'] = getVal('data');
$this->params['format'] = $this->format;
if (array_key_exists($type, self::EXPORT_TYPES_MAPPING)) {
$type = self::EXPORT_TYPES_MAPPING[$type];
}
if ($type == 'orders') {
$report = 'Export objednávek: ';
$report .= 'format = '.$this->format.'; ';
$report .= ($this->params['dateFrom'] ? 'datum od = '.$this->params['dateFrom'].'; ' : '');
$report .= ($this->params['dateTo'] ? 'datum do = '.$this->params['dateTo'].'; ' : '');
$report .= (($this->handled == 'Y') ? 'jen vyřízené objednávky; ' : '');
writeDownActivity($report);
}
ini_set('memory_limit', '1024M');
ini_set('max_execution_time', '600');
try {
$method = 'export'.ucfirst($type);
if (method_exists($this, $method)) {
$this->$method();
} else {
$this->applyFallback();
}
} catch (ExportException $e) {
redirect('launch.php?s=board.php&type=export_orders&ErrStr='.urlencode($e->getMessage()));
}
}
protected function getOrderIdsToExport()
{
if (!empty($this->orderIds)) {
return $this->orderIds;
}
$filter = getVal('filter');
$ordersFilterSpecs = ServiceContainer::getService(\KupShop\AdminBundle\Util\Filter\OrdersFilterSpecs::class);
$specs = $ordersFilterSpecs->getSpecs($filter);
$qb = sqlQueryBuilder()->select('o.id')->from('orders', 'o')
->setMaxResults($this->ORDERS_LIMIT)
->orderBy('o.id', 'ASC');
if ($specs) {
$qb->andWhere($specs);
}
$order_ids = getVal('order_ids');
if ($order_ids) {
$order_ids = explode(',', $order_ids);
$order_ids = array_map('trim', $order_ids);
$qb->andWhere(Operator::inStringArray($order_ids, 'o.order_no'));
}
$orders = $qb->execute();
if ($orders->rowCount() >= $this->ORDERS_LIMIT) {
throw new ExportException('Export se nepodařil, protože byl překročen limit '.$this->ORDERS_LIMIT.' objednávek');
}
return array_map(function ($x) {
return $x['id'];
}, $orders->fetchAll());
}
public function exportOrders()
{
if (in_array($this->format, ['overview', 'excelOss', 'excel', 'excelWithItems'])) {
// Overview se renderuje u klienta, tak zvednem limit
$this->ORDERS_LIMIT = 1000000;
}
include_once 'export/orders.php';
$export = new \ExportOrders();
$export->setOrderIds($this->getOrderIdsToExport());
if ($this->format == 'csv' || $this->format == 'csv_premier' || $this->format == 'csv_helios') {
$this->params['file_ext'] = 'csv';
$this->params['content_type'] = 'application/csv';
$export->exportData($this->params);
} elseif ($this->format == 'txt_premier') {
$this->params['file_ext'] = 'txt';
$this->params['content_type'] = 'application/txt';
$export->exportData($this->params);
} elseif ($this->format == 'dbf_ucto') {
$dateFrom = null;
$dateTo = null;
$filename_dates = '';
if (!empty($this->params['dateFrom'])) {
$dateFrom = new \DateTime($this->params['dateFrom']);
$filename_dates .= '_'.$dateFrom->format('Y-m-d');
}
if (!empty($this->params['dateTo'])) {
$dateTo = new \DateTime($this->params['dateTo']);
$filename_dates .= (empty($filename_dates) ? '_x-' : '-').$dateTo->format('Y-m-d');
} else {
if (!empty($filename_dates)) {
$filename_dates .= '-x';
}
}
$dbcfg = \Settings::getDefault();
$filename = createScriptURL_Text($dbcfg->shop_title).$filename_dates.'.dbf';
$ids = $export->getOrderIds();
$export = new ExportDataDBFUcto('browser', $filename);
$export->setCoding($this->encoding);
$export->initialize();
$export->loadOrdersData($ids);
$export->finalize();
} elseif ($this->format == 'pohoda' || $this->format == 'pohoda_with_items') {
$this->params['file_ext'] = 'xml';
$this->params['content_type'] = 'application/xml';
$export->exportData($this->params);
} elseif ($this->format == 'excel') {
/** @var $excelExport OrdersExcelExport */
$excelExport = ServiceContainer::getService(OrdersExcelExport::class);
$excelExport->setOrderIDs($this->getOrderIdsToExport());
$excelExport->export();
} elseif ($this->format == 'excelOss') {
$excelExport = ServiceContainer::getService(\KupShop\OSSVatsBundle\OssOrdersExcelExport::class);
$excelExport->setOrderIDs($this->getOrderIdsToExport());
$excelExport->export();
} elseif ($this->format == 'excelWithItems') {
/** @var $excelExport OrdersItemsExcelExport */
$excelExport = ServiceContainer::getService(OrdersItemsExcelExport::class);
$excelExport->setOrderIDs($this->getOrderIdsToExport());
$excelExport->export();
} elseif ($this->format == 'money' || $this->format == 'money_foreign' || $this->format == 'money_s4s5' || $this->format == 'flexibee') {
$this->params['file_ext'] = 'xml';
$this->params['content_type'] = 'application/xml';
$export->exportData($this->params);
} else {
$this->applyFallback();
}
}
protected function applyFallback()
{
$orderIds = $this->getOrderIdsToExport();
include_once 'export_sracka.php';
}
public static function getOrderPayment(\Order $order)
{
if ($payment = $order->getDeliveryType()->getPayment()) {
switch ($payment->getPayMethod()) {
case \Payment::METHOD_COD:
return 'COD';
case \Payment::METHOD_CASH:
return 'CASH';
case \Payment::METHOD_TRANSFER:
return 'TRANSFER';
}
}
return 'COD';
}
}
return Export::class;