---
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>
