6.5 KiB
6.5 KiB
phase, plan, type, wave, depends_on, files_modified, autonomous
| phase | plan | type | wave | depends_on | files_modified | autonomous | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 64-receipt-datetime-precision | 01 | execute | 1 |
|
true |
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
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
<acceptance_criteria>
AC-1: Baza danych przechowuje datetime
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
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
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
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"
</acceptance_criteria>
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
<success_criteria>
- Wszystkie zadania ukonczone
- Wszystkie weryfikacje przeszly
- Brak bledow PHP/SQL
- Istniejace paragony nie sa uszkodzone </success_criteria>