skupina = $this->obvod->vyberSkupinu( $skupina, $this->getHttpRequest()->getCookie(ObvodFacade::SKUPINA_COOKIE), ); if ($skupina !== null && $skupina === $this->skupina && $this->skupina !== '') { $this->getHttpResponse()->setCookie(ObvodFacade::SKUPINA_COOKIE, $this->skupina, '+1 year', '/'); } } public function renderList(): void { $this->template->skupina = $this->skupina; $this->template->skupiny = $this->obvod->getSkupiny(); $this->template->obvody = $this->obvod->getObvody($this->skupina); } public function renderView(int $id = null): void { $this->template->obvod = $this->obvod->getObvod($id); $this->template->zaznamy = $this->zaznam->getZaznamyObvodu($id); $this->template->zvestovateleJson = json_encode( array_values($this->zaznam->getZvestovatele()), JSON_UNESCAPED_UNICODE | JSON_HEX_TAG | JSON_HEX_AMP | JSON_THROW_ON_ERROR ); $this->template->otevrene = $id === null ? [] : $this->zaznam->getOtevrene($id); } protected function createComponentPridelitForm(): Form { $form = new Form; $form->addText('zvestovatel', 'Zvěstovatel') ->setRequired('Zadejte zvěstovatele.') ->setMaxLength(100); $form->addDate('datum', 'Datum přidělení') ->setRequired('Zadejte datum přidělení.') ->setDefaultValue(new \DateTimeImmutable('today')); $form->addSubmit('send', 'Přidělit'); $form->addProtection('Platnost formuláře vypršela, odešlete ho znovu.'); $form->onSuccess[] = $this->pridelitFormSucceeded(...); return $form; } private function pridelitFormSucceeded(Form $form, ArrayHash $values): void { $id = $this->obvodId(); $jmeno = trim((string) $values->zvestovatel); if ($jmeno === '') { $form->addError('Zadejte zvěstovatele.'); return; } if (mb_strlen($jmeno) > 100) { $form->addError('Jméno zvěstovatele je příliš dlouhé.'); return; } $this->zaznam->pridej($id, $jmeno, $this->den($values->datum)); $this->flashMessage('Obvod byl přidělen.'); $this->redirect('this'); } protected function createComponentVratitForm(): Form { $form = new Form; $polozky = []; foreach ($this->zaznam->getOtevrene($this->obvodId()) as $zaznam) { $polozky[$zaznam->ID] = $zaznam->JMENO . ' (přiděleno ' . $this->den($zaznam->VYDANO)->format('d.m.Y') . ')'; } $form->addSelect('zaznam', 'Záznam', $polozky) ->setRequired('Vyberte záznam k vrácení.'); $form->addDate('datum', 'Datum vrácení') ->setRequired('Zadejte datum vrácení.') ->setDefaultValue(new \DateTimeImmutable('today')); $form->addSubmit('send', 'Vrátit'); $form->addProtection('Platnost formuláře vypršela, odešlete ho znovu.'); $form->onSuccess[] = $this->vratitFormSucceeded(...); return $form; } private function vratitFormSucceeded(Form $form, ArrayHash $values): void { $obvodId = $this->obvodId(); $zaznam = $this->zaznam->getZaznam((int) $values->zaznam); if ($zaznam === null || (int) $zaznam->OBVOD !== $obvodId || $zaznam->VRACENO !== null) { $form->addError('Tento záznam už nelze vrátit.'); return; } $vraceno = $this->den($values->datum); if ($this->den($zaznam->VYDANO) > $vraceno) { $form->addError('Datum přidělení nesmí být později než datum vrácení.'); return; } $this->zaznam->vrat((int) $zaznam->ID, $obvodId, $vraceno); $this->flashMessage('Obvod byl vrácen.'); $this->redirect('this'); } protected function createComponentUpravitForm(): Form { $form = new Form; $form->addHidden('id'); $form->addText('zvestovatel', 'Zvěstovatel') ->setRequired('Zadejte zvěstovatele.') ->setMaxLength(100); $form->addDate('vydano', 'Datum přidělení') ->setRequired('Zadejte datum přidělení.'); $form->addDate('vraceno', 'Datum vrácení'); $form->addSubmit('send', 'Uložit'); $form->addProtection('Platnost formuláře vypršela, odešlete ho znovu.'); $form->onSuccess[] = $this->upravitFormSucceeded(...); return $form; } private function upravitFormSucceeded(Form $form, ArrayHash $values): void { $obvodId = $this->obvodId(); $zaznam = $this->zaznam->getZaznam((int) $values->id); if ($zaznam === null || (int) $zaznam->OBVOD !== $obvodId) { $form->addError('Tento záznam už nelze upravit.'); return; } $jmeno = trim((string) $values->zvestovatel); if ($jmeno === '') { $form->addError('Zadejte zvěstovatele.'); return; } if (mb_strlen($jmeno) > 100) { $form->addError('Jméno zvěstovatele je příliš dlouhé.'); return; } $vydano = $this->den($values->vydano); $vraceno = $values->vraceno !== null && $values->vraceno !== '' ? $this->den($values->vraceno) : null; if ($vraceno !== null && $vydano > $vraceno) { $form->addError('Datum přidělení nesmí být později než datum vrácení.'); return; } if (!$this->zaznam->uprav((int) $zaznam->ID, $obvodId, $jmeno, $vydano, $vraceno)) { $form->addError('Tento záznam už nelze upravit.'); return; } $this->flashMessage('Záznam byl upraven.'); $this->redirect('this'); } protected function createComponentSmazat(): Multiplier { return new Multiplier(function (string $id): Form { $form = new Form; $form->addSubmit('send', 'Smazat'); $form->addProtection('Platnost formuláře vypršela, odešlete ho znovu.'); $form->onSuccess[] = function () use ($id): void { if ($this->zaznam->smaz((int) $id, $this->obvodId())) { $this->flashMessage('Záznam byl smazán.'); } else { $this->flashMessage('Tento záznam už nelze smazat.'); } $this->redirect('this'); }; return $form; }); } private function obvodId(): int { $id = $this->getParameter('id'); if ($id === null || $id === '') { $this->error('Obvod nenalezen.', Nette\Http\IResponse::S404_NotFound); } return (int) $id; } private function den(mixed $value): \DateTimeImmutable { $datum = $value instanceof \DateTimeInterface ? \DateTimeImmutable::createFromInterface($value) : new \DateTimeImmutable((string) $value); return $datum->setTime(0, 0); } }