189 lines
6.5 KiB
Markdown
189 lines
6.5 KiB
Markdown
---
|
|
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
|
|
---
|
|
|
|
<objective>
|
|
## 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
|
|
</objective>
|
|
|
|
<context>
|
|
## 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
|
|
</context>
|
|
|
|
<acceptance_criteria>
|
|
|
|
## 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"
|
|
```
|
|
|
|
</acceptance_criteria>
|
|
|
|
<tasks>
|
|
|
|
<task type="auto">
|
|
<name>Task 1: Migracja DB + aktualizacja zapisu</name>
|
|
<files>
|
|
database/migrations/20260403_000076_alter_receipts_issue_date_to_datetime.sql,
|
|
src/Modules/Accounting/ReceiptController.php
|
|
</files>
|
|
<action>
|
|
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.
|
|
</action>
|
|
<verify>Wykonac migracje na serwerze i sprawdzic typ kolumny: SHOW COLUMNS FROM receipts LIKE 'issue_date'</verify>
|
|
<done>AC-1 satisfied: kolumna issue_date ma typ DATETIME; AC-2 czesciowo (backend akceptuje datetime)</done>
|
|
</task>
|
|
|
|
<task type="auto">
|
|
<name>Task 2: Formularz i wyswietlanie we wszystkich widokach</name>
|
|
<files>
|
|
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
|
|
</files>
|
|
<action>
|
|
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).
|
|
</action>
|
|
<verify>
|
|
- 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
|
|
</verify>
|
|
<done>AC-2, AC-3, AC-4 satisfied: formularz, lista, podglad, wydruk i eksport pokazuja date z godzina</done>
|
|
</task>
|
|
|
|
</tasks>
|
|
|
|
<boundaries>
|
|
|
|
## 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
|
|
|
|
</boundaries>
|
|
|
|
<verification>
|
|
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)
|
|
</verification>
|
|
|
|
<success_criteria>
|
|
- Wszystkie zadania ukonczone
|
|
- Wszystkie weryfikacje przeszly
|
|
- Brak bledow PHP/SQL
|
|
- Istniejace paragony nie sa uszkodzone
|
|
</success_criteria>
|
|
|
|
<output>
|
|
After completion, create `.paul/phases/64-receipt-datetime-precision/64-01-SUMMARY.md`
|
|
</output>
|