123 lines
3.7 KiB
PHP
123 lines
3.7 KiB
PHP
<?php
|
|
|
|
namespace App\UI\Admin;
|
|
|
|
use App\Model\Facade\DatabazeFacade;
|
|
use App\Model\Sdf\SdfKufrikImporter;
|
|
use App\UI\BasePresenter;
|
|
use Nette\Application\AbortException;
|
|
use Nette\Application\UI\Form;
|
|
use Nette\Forms\Controls\UploadControl;
|
|
use Nette\Forms\Helpers;
|
|
use Nette\Http\FileUpload;
|
|
|
|
class AdminPresenter extends BasePresenter
|
|
{
|
|
private const SDF_MAX_BYTES = 50 * 1024 * 1024;
|
|
|
|
public function __construct(
|
|
private DatabazeFacade $databazeFacade,
|
|
private SdfKufrikImporter $sdfImporter
|
|
) {
|
|
parent::__construct();
|
|
}
|
|
|
|
protected function startup(): void
|
|
{
|
|
parent::startup();
|
|
|
|
if (!$this->getUser()->isInRole('admin')) {
|
|
$this->error('Sekce Admin je dostupná pouze administrátorovi systému.', 403);
|
|
}
|
|
}
|
|
|
|
public function actionDefault(): void
|
|
{
|
|
$this->redirect('databaze');
|
|
}
|
|
|
|
public function renderDatabaze(): void
|
|
{
|
|
$loginy = $this->databazeFacade->getAll();
|
|
$aktivniCount = 0;
|
|
|
|
foreach ($loginy as $login) {
|
|
if ($login->AKTIVNI) {
|
|
$aktivniCount++;
|
|
}
|
|
}
|
|
|
|
$this->template->loginy = $loginy;
|
|
$this->template->celkemCount = count($loginy);
|
|
$this->template->aktivniCount = $aktivniCount;
|
|
}
|
|
|
|
public function renderStatistika(): void
|
|
{
|
|
}
|
|
|
|
protected function createComponentSdfImportForm(): Form
|
|
{
|
|
$form = new Form();
|
|
|
|
$form->addHidden('loginId')
|
|
->addRule($form::Integer, 'Vyberte databázi.')
|
|
->setRequired('Vyberte databázi.');
|
|
|
|
$iniLimits = array_filter([
|
|
Helpers::iniGetSize('upload_max_filesize'),
|
|
Helpers::iniGetSize('post_max_size'),
|
|
]);
|
|
$maxBytes = min(self::SDF_MAX_BYTES, ...($iniLimits ?: [self::SDF_MAX_BYTES]));
|
|
$maxMb = max(1, (int) floor($maxBytes / (1024 * 1024)));
|
|
|
|
$form->addUpload('sdf', 'Soubor SDF:')
|
|
->setRequired('Vyberte soubor s příponou .sdf.')
|
|
->addRule($form::MaxFileSize, "Soubor může mít nejvýše {$maxMb} MB.", $maxBytes)
|
|
->addRule(
|
|
function (UploadControl $control): bool {
|
|
$file = $control->getValue();
|
|
if (!$file instanceof FileUpload || !$file->hasFile()) {
|
|
return false;
|
|
}
|
|
|
|
return strtolower(pathinfo($file->getUntrustedName(), PATHINFO_EXTENSION)) === 'sdf';
|
|
},
|
|
'Soubor musí mít příponu .sdf.'
|
|
);
|
|
|
|
$form->addSubmit('send', 'Import');
|
|
$form->onSuccess[] = [$this, 'sdfImportFormSucceeded'];
|
|
|
|
return $form;
|
|
}
|
|
|
|
public function sdfImportFormSucceeded(Form $form, \stdClass $data): void
|
|
{
|
|
set_time_limit(180);
|
|
$loginId = (int) $data->loginId;
|
|
|
|
try {
|
|
$this->databazeFacade->saveSdf($loginId, $data->sdf);
|
|
$stats = $this->sdfImporter->import($loginId);
|
|
$this->flashMessage(
|
|
sprintf(
|
|
'Import ze SDF do databáze %s dokončen. Původní data byla smazána. Zákazníci: %d. Faktury: %d. Položky: %d. Platby: %d.',
|
|
$stats['database'],
|
|
$stats['zakazniciInserted'],
|
|
$stats['fakturyInserted'],
|
|
$stats['polozkyInserted'],
|
|
$stats['platbyInserted']
|
|
),
|
|
'success'
|
|
);
|
|
} catch (AbortException $e) {
|
|
throw $e;
|
|
} catch (\Throwable $e) {
|
|
$this->flashMessage('Import ze SDF selhal: ' . $e->getMessage(), 'danger');
|
|
}
|
|
|
|
$this->redirect('this');
|
|
}
|
|
}
|