diff --git a/app/UI/Faktura/FakturaPresenter.php b/app/UI/Faktura/FakturaPresenter.php new file mode 100644 index 0000000..1eda63f --- /dev/null +++ b/app/UI/Faktura/FakturaPresenter.php @@ -0,0 +1,25 @@ +getUser()->getIdentity()->firma_id ?? null; + + if (!$firmaId) { + $this->flashMessage('K účtu není přiřazena žádná aktivní firma.', 'danger'); + $this->redirect('Home:'); + } + + $firma = $this->kufrikExplorer->table('FIRMA')->get($firmaId); + + if (!$firma) { + $this->flashMessage('Firma nebyla v databázi nalezena.', 'danger'); + $this->redirect('Home:'); + } + + // Predvyplnění formuláře + $this['firmaForm']->setDefaults([ + 'nazev' => $firma->NAZEV, + 'ic' => $firma->IC, + 'dic' => $firma->DIC, + 'platce_dph' => (bool) $firma->PLATCE_DPH, + 'telefon' => $firma->TELEFON, + 'email' => $firma->EMAIL, + 'ulice' => $firma->ULICE, + 'mesto' => $firma->MESTO, + 'psc' => $firma->PSC, + 'cislo_uctu' => $firma->CISLO_UCTU, + 'banka_kod' => $firma->BANKA_KOD, + 'iban' => $firma->IBAN, + 'bic' => $firma->BIC, + ]); + } + + protected function createComponentFirmaForm(): Form + { + $form = new Form(); + + // Základní údaje + $form->addText('nazev', 'Název firmy / OSVČ:') + ->setRequired('Zadejte název firmy nebo Vaše jméno.'); + + $form->addText('ic', 'IČO:') + ->setMaxLength(8); + + $form->addText('dic', 'DIČ:') + ->setMaxLength(12); + + $form->addCheckbox('platce_dph', 'Jsem plátce DPH'); + + // Kontakty + $form->addText('telefon', 'Telefon:'); + $form->addEmail('email', 'E-mail:'); + + // Sídlo + $form->addText('ulice', 'Ulice a ČP:'); + $form->addText('mesto', 'Město:'); + $form->addText('psc', 'PSČ:'); + + // Bankovní spojení + $form->addText('cislo_uctu', 'Číslo účtu:'); + $form->addText('banka_kod', 'Kód banky:'); + $form->addText('iban', 'IBAN:'); + $form->addText('bic', 'BIC / SWIFT:'); + + $form->addSubmit('send', 'Uložit firmu'); + + $form->onSuccess[] = [$this, 'firmaFormSucceeded']; + + return $form; + } + + public function firmaFormSucceeded(Form $form, \stdClass $data): void + { + $firmaId = $this->getUser()->getIdentity()->firma_id; + + try { + $this->kufrikExplorer->table('FIRMA') + ->where('ID', $firmaId) + ->update([ + 'NAZEV' => $data->nazev, + 'IC' => $data->ic, + 'DIC' => $data->dic, + 'PLATCE_DPH' => $data->platce_dph ? 1 : 0, + 'TELEFON' => $data->telefon, + 'EMAIL' => $data->email, + 'ULICE' => $data->ulice, + 'MESTO' => $data->mesto, + 'PSC' => $data->psc, + 'CISLO_UCTU' => $data->cislo_uctu, + 'BANKA_KOD' => $data->banka_kod, + 'IBAN' => $data->iban, + 'BIC' => $data->bic, + ]); + + // Potvrzení s časovým razítkem uložení + $casUlozeni = (new \DateTime())->format('H:i:s'); + $this->flashMessage("Údaje firmy byly úspěšně uloženy v {$casUlozeni}.", 'success'); + + } catch (\Nette\Application\AbortException $e) { + throw $e; + } catch (\Throwable $e) { + $form->addError('Chyba při ukládání firmy: ' . $e->getMessage()); + return; + } + + $this->redirect('this'); + } +} \ No newline at end of file diff --git a/app/UI/Firma/edit.latte b/app/UI/Firma/edit.latte new file mode 100644 index 0000000..318184a --- /dev/null +++ b/app/UI/Firma/edit.latte @@ -0,0 +1,107 @@ +{block content} + +
+
+
+ +
+

+ Moje OSVČ / Firma +

+ +
+ + +
+ +
+
+
\ No newline at end of file diff --git a/app/UI/Uzivatel/UzivatelPresenter.php b/app/UI/Uzivatel/UzivatelPresenter.php new file mode 100644 index 0000000..c12c254 --- /dev/null +++ b/app/UI/Uzivatel/UzivatelPresenter.php @@ -0,0 +1,25 @@ + FIRMA (Práva k firmám) -CREATE TABLE [dbo].[UZIVATEL_FIRMA] ( - [UZIVATEL_ID] [int] NOT NULL, - [FIRMA_ID] [int] NOT NULL, - [ROLE] [nvarchar](20) NOT NULL DEFAULT 'OWNER', -- 'OWNER', 'ACCOUNTANT', 'READONLY' - CONSTRAINT [PK_UZIVATEL_FIRMA] PRIMARY KEY CLUSTERED ([UZIVATEL_ID], [FIRMA_ID]), - CONSTRAINT [FK_UF_UZIVATEL] FOREIGN KEY ([UZIVATEL_ID]) REFERENCES [dbo].[UZIVATEL] ([ID]), - CONSTRAINT [FK_UF_FIRMA] FOREIGN KEY ([FIRMA_ID]) REFERENCES [dbo].[FIRMA] ([ID]) -); -- ========================================== -- 1. ZÁKAZNÍCI / ODBĚRATELÉ (vázaní na Firmu) @@ -240,41 +281,47 @@ GO -- ========================================== --- Cvičná data a UZIVATEL +-- Cvičná data FIRMA -- ========================================== --- Vygenerovaný platný BCrypt hash (cost: 12) pro heslo: admin1234 -DECLARE @HesloHash NVARCHAR(255) = N'$2y$12$9SAWctZKp/JpYl7K.awSRehXOXVyRpu0ofReqvbm1jVjvdz41zH7a'; -DECLARE @Email NVARCHAR(100) = N'admin@kmetix.cz'; - -IF NOT EXISTS (SELECT 1 FROM dbo.UZIVATEL WHERE EMAIL = @Email) +IF NOT EXISTS (SELECT 1 FROM dbo.[FIRMA] WHERE [ID] = 1) BEGIN - INSERT INTO dbo.UZIVATEL ( - [EMAIL], - [HESLO_HASH], - [JMENO], - [PRIJMENI], + SET IDENTITY_INSERT dbo.[FIRMA] ON; + + INSERT INTO dbo.[FIRMA] ( + [ID], + [NAZEV], + [IC], + [DIC], + [PLATCE_DPH], [TELEFON], - [DATABASE_NAME], - [CONNECTION_STRING_KEY], - [AKTIVNI] + [EMAIL], + [ULICE], + [MESTO], + [PSC], + [CISLO_UCTU], + [BANKA_KOD], + [IBAN], + [BIC] ) VALUES ( - @Email, - @HesloHash, - N'Pavel', - N'Kowalski', + 1, + N'Pavel Kowalski - Kmetix Systems', + N'12345678', + N'CZ12345678', + 1, N'+420123456789', - N'', -- Cílová databáze pro klientská data - NULL, - 1 -- AKTIVNI = 1 + N'admin@kmetix.cz', + N'Nádražní 123', + N'Liberec', + N'46001', + N'123456789/0800', + N'0800', + N'CZ6508000000000123456789', + N'GIGACZPX' ); - PRINT 'Uživatel admin@kmetix.cz byl úspěšně vytvořen s heslem: admin1234'; + SET IDENTITY_INSERT dbo.[FIRMA] OFF; + PRINT N'Cvičná firma ID 1 byla úspěšně vložena do klientské DB.'; END -ELSE -BEGIN - PRINT 'Uživatel s tímto e-mailem již v databázi existuje.'; -END -GO - +GO \ No newline at end of file