--- phase: 64-receipt-datetime-precision plan: 01 type: execute wave: 1 depends_on: [] files_modified: - database/migrations/20260403_000076_alter_receipts_issue_date_to_datetime.sql - src/Modules/Accounting/ReceiptController.php - src/Modules/Accounting/AccountingController.php - src/Modules/Accounting/ReceiptRepository.php - resources/views/orders/receipt-create.php - resources/views/receipts/show.php - resources/views/receipts/print.php - resources/views/orders/show.php autonomous: true --- ## Goal Zmiana precyzji daty wystawienia paragonu z DATE (YYYY-MM-DD) na DATETIME (YYYY-MM-DD HH:MM) — zapis, wyswietlanie i eksport z dokladnoscia do minuty. ## Purpose Uzytkownik potrzebuje widziec godzine wystawienia paragonu na liscie ksiegowosci i w podgladzie, aby moc identyfikowac paragony wystawione tego samego dnia. ## Output - Migracja ALTER TABLE receipts - Formularz z datetime-local - Wyswietlanie daty+godziny we wszystkich widokach i eksporcie ## Project Context @.paul/PROJECT.md @.paul/ROADMAP.md @.paul/STATE.md ## Source Files @src/Modules/Accounting/ReceiptController.php @src/Modules/Accounting/AccountingController.php @src/Modules/Accounting/ReceiptRepository.php @resources/views/orders/receipt-create.php @resources/views/receipts/show.php @resources/views/receipts/print.php @resources/views/orders/show.php @database/migrations/20260315_000051_create_receipts_table.sql ## AC-1: Baza danych przechowuje datetime ```gherkin Given kolumna issue_date w tabeli receipts When migracja zostanie wykonana Then kolumna issue_date ma typ DATETIME (nie DATE) And istniejace rekordy zachowuja swoje daty (z czasem 00:00:00) ``` ## AC-2: Formularz tworzenia paragonu pozwala wybrac godzine i minute ```gherkin Given uzytkownik otwiera formularz wystawiania paragonu When widzi pole "Data wystawienia" Then pole jest typu datetime-local z domyslna wartoscia biezacej daty i godziny (do minuty) ``` ## AC-3: Lista ksiegowosci wyswietla date z godzina ```gherkin Given paragon z issue_date = "2026-04-03 14:30:00" When uzytkownik przegladza /accounting Then w kolumnie "Data wystawienia" widzi "2026-04-03 14:30" ``` ## AC-4: Podglad, wydruk i lista na zamowieniu wyswietlaja date z godzina ```gherkin Given paragon z issue_date zawierajacym czas When uzytkownik otwiera podglad paragonu, wydruk lub szczegoly zamowienia Then data wystawienia jest wyswietlana w formacie "YYYY-MM-DD HH:MM" ``` Task 1: Migracja DB + aktualizacja zapisu database/migrations/20260403_000076_alter_receipts_issue_date_to_datetime.sql, src/Modules/Accounting/ReceiptController.php 1. Utworzyc migracje: ```sql ALTER TABLE `receipts` MODIFY COLUMN `issue_date` DATETIME NOT NULL; ``` Istniejace wartosci DATE zostana automatycznie skonwertowane na DATETIME z 00:00:00. Indeks `receipts_issue_date_idx` pozostaje — MySQL zachowuje go przy MODIFY. 2. W ReceiptController.php linia ~153-156: - Zmienic walidacje: akceptowac format datetime-local (Y-m-d\TH:i lub Y-m-d H:i:s) - Zmienic domyslna wartosc z `date('Y-m-d')` na `date('Y-m-d H:i:s')` - Skonwertowac input z formatu datetime-local (z "T") na format DB (Y-m-d H:i:s) Unikac: Zmiany kolumny sale_date — ta pozostaje jako DATE. Wykonac migracje na serwerze i sprawdzic typ kolumny: SHOW COLUMNS FROM receipts LIKE 'issue_date' AC-1 satisfied: kolumna issue_date ma typ DATETIME; AC-2 czesciowo (backend akceptuje datetime) Task 2: Formularz i wyswietlanie we wszystkich widokach resources/views/orders/receipt-create.php, resources/views/receipts/show.php, resources/views/receipts/print.php, resources/views/orders/show.php, src/Modules/Accounting/AccountingController.php 1. receipt-create.php linia ~57: - Zmienic `type="date"` na `type="datetime-local"` - Zmienic `value` z `date('Y-m-d')` na `date('Y-m-d\TH:i')` (format datetime-local wymaga "T") 2. AccountingController.php linia ~204 (toTableRow): - Sformatowac issue_date: jesli dlugosc >= 16 znakow, wyswietlic substr 0-16 (YYYY-MM-DD HH:MM) - Jesli krotszy (stare dane DATE), wyswietlic jak jest 3. AccountingController.php linia ~143 (export XLSX): - Analogicznie sformatowac issue_date do Y-m-d H:i 4. receipts/show.php linia ~95: - Sformatowac: wyswietlic substr($receiptData['issue_date'], 0, 16) zamiast pelnej wartosci 5. receipts/print.php linia ~106: - Analogicznie: substr 0-16 dla daty wystawienia 6. orders/show.php linia ~719: - Sformatowac date z godzina: substr($receipt['issue_date'], 0, 16) Unikac: Zmian w filtrach dat w ReceiptRepository — filtry date_from/date_to dzialaja poprawnie z DATETIME (porownanie >= i <= dziala tak samo). - Otworzyc /accounting — kolumna "Data wystawienia" pokazuje godzine i minute - Otworzyc formularz paragonu — pole datetime-local z biezaca godzina - Otworzyc podglad paragonu — data z godzina - Eksportowac XLSX — data z godzina AC-2, AC-3, AC-4 satisfied: formularz, lista, podglad, wydruk i eksport pokazuja date z godzina ## DO NOT CHANGE - sale_date — pozostaje jako DATE - Logika numerowania paragonow (ReceiptRepository::getNextNumber) - Filtry dat w ReceiptRepository (date_from/date_to) — dzialaja poprawnie z DATETIME - Szablony automatyzacji (automation/form.php issue_date_mode) ## SCOPE LIMITS - Tylko kolumna issue_date w tabeli receipts - Bez zmian w strukturze receipt_configs - Bez zmian w logice sale_date_source Before declaring plan complete: - [ ] Migracja wykonana, SHOW COLUMNS potwierdza DATETIME - [ ] Nowy paragon zapisuje sie z data i godzina - [ ] /accounting lista pokazuje "YYYY-MM-DD HH:MM" - [ ] Podglad paragonu pokazuje date z godzina - [ ] Wydruk paragonu pokazuje date z godzina - [ ] Lista paragonow na zamowieniu pokazuje date z godzina - [ ] Eksport XLSX zawiera date z godzina - [ ] Stare paragony (DATE) wyswietlaja sie poprawnie (z 00:00 lub bez) - Wszystkie zadania ukonczone - Wszystkie weryfikacje przeszly - Brak bledow PHP/SQL - Istniejace paragony nie sa uszkodzone After completion, create `.paul/phases/64-receipt-datetime-precision/64-01-SUMMARY.md`