110 lines
3.4 KiB
Markdown
110 lines
3.4 KiB
Markdown
---
|
|
phase: 78-preset-auto-submit
|
|
plan: 01
|
|
type: execute
|
|
wave: 1
|
|
depends_on: []
|
|
files_modified:
|
|
- resources/views/shipments/prepare.php
|
|
autonomous: true
|
|
---
|
|
|
|
<objective>
|
|
## Goal
|
|
Presety przesyłek po autofill automatycznie submitują formularz (kliknięcie "Utwórz przesyłkę").
|
|
|
|
## Purpose
|
|
Aktualnie użytkownik musi kliknąć preset, a potem ręcznie kliknąć "Utwórz przesyłkę". Skoro preset wypełnia wszystkie dane — submit powinien nastąpić automatycznie, oszczędzając jedno kliknięcie.
|
|
|
|
## Output
|
|
- Funkcja `applyPreset()` po wypełnieniu pól automatycznie submituje formularz
|
|
</objective>
|
|
|
|
<context>
|
|
## Project Context
|
|
@.paul/PROJECT.md
|
|
@.paul/STATE.md
|
|
|
|
## Source Files
|
|
@resources/views/shipments/prepare.php (linie 957-993: applyPreset + setTimeout 200ms)
|
|
</context>
|
|
|
|
<skills>
|
|
No specialized flows configured — optional skills only.
|
|
</skills>
|
|
|
|
<acceptance_criteria>
|
|
|
|
## AC-1: Auto-submit po kliknięciu presetu
|
|
```gherkin
|
|
Given formularz przygotowania przesyłki z co najmniej jednym presetem
|
|
When użytkownik klika przycisk presetu
|
|
Then formularz wypełnia się danymi presetu
|
|
And formularz automatycznie się submituje (tworzenie przesyłki)
|
|
```
|
|
|
|
## AC-2: Brak regresji autofill
|
|
```gherkin
|
|
Given preset z zapisanymi danymi (carrier, wymiary, metoda dostawy)
|
|
When preset jest aplikowany
|
|
Then wszystkie pola formularza są poprawnie wypełnione przed submitem
|
|
```
|
|
|
|
</acceptance_criteria>
|
|
|
|
<tasks>
|
|
|
|
<task type="auto">
|
|
<name>Task 1: Dodanie auto-submit po applyPreset</name>
|
|
<files>resources/views/shipments/prepare.php</files>
|
|
<action>
|
|
W funkcji `applyPreset()` (linia ~957), wewnątrz istniejącego `setTimeout` (200ms) na końcu callbacku (po `selectDeliveryService(preset)`):
|
|
|
|
1. Dodaj drugi `setTimeout` (krótki, np. 100ms) po zakończeniu autofill, który:
|
|
- Znajduje formularz: `document.getElementById('shipment-form')` lub `document.querySelector('form[action*="shipment/create"]')`
|
|
- Wywołuje `form.submit()` lub klika przycisk submit
|
|
|
|
2. Formularz może nie mieć id — sprawdź czy `<form>` ma id. Jeśli nie, dodaj `id="shipment-form"` do tagu `<form>`.
|
|
|
|
Uwaga: `selectDeliveryService()` może mieć swój setTimeout — sprawdź czy submit nie nastąpi przed zakończeniem selekcji. Użyj wystarczającego opóźnienia (np. łącznie 400-500ms od kliknięcia presetu).
|
|
</action>
|
|
<verify>
|
|
Przegląd kodu: po applyPreset formularz submituje się automatycznie.
|
|
PHP lint: brak błędów składni.
|
|
</verify>
|
|
<done>AC-1 i AC-2 spełnione — preset autofill + auto-submit</done>
|
|
</task>
|
|
|
|
</tasks>
|
|
|
|
<boundaries>
|
|
|
|
## DO NOT CHANGE
|
|
- Logika autofill presetu (kolejność wypełniania pól, setTimeout 200ms)
|
|
- Backend ShipmentController (logika tworzenia przesyłki)
|
|
- API presetów (/api/shipment-presets/*)
|
|
|
|
## SCOPE LIMITS
|
|
- Tylko auto-submit po kliknięciu presetu
|
|
- Nie zmieniamy zachowania przycisku "Utwórz przesyłkę" ani ręcznego formularza
|
|
|
|
</boundaries>
|
|
|
|
<verification>
|
|
Before declaring plan complete:
|
|
- [ ] Kliknięcie presetu wypełnia formularz i submituje go
|
|
- [ ] Formularz ma id umożliwiające łatwe znalezienie w JS
|
|
- [ ] Brak błędów PHP syntax
|
|
- [ ] Ręczne wypełnienie formularza i kliknięcie "Utwórz przesyłkę" nadal działa
|
|
</verification>
|
|
|
|
<success_criteria>
|
|
- Task 1 ukończony
|
|
- Weryfikacja przeszła
|
|
- Brak błędów PHP
|
|
</success_criteria>
|
|
|
|
<output>
|
|
After completion, create `.paul/phases/78-preset-auto-submit/78-01-SUMMARY.md`
|
|
</output>
|