---
phase: 26-manual-tracking-number
plan: 01
subsystem: shipments
tags: [tracking-number, manual-entry, shipment-packages]

requires:
  - phase: 25-shipment-presets-management
    provides: shipment UI in order details
provides:
  - manual tracking number entry endpoint
  - inline form in order detail shipments tab
affects: []

tech-stack:
  added: []
  patterns: [provider='manual' for non-API shipments]

key-files:
  created: []
  modified:
    - src/Modules/Shipments/ShipmentPackageRepository.php
    - src/Modules/Shipments/ShipmentController.php
    - routes/web.php
    - resources/views/orders/show.php
    - resources/scss/app.scss

key-decisions:
  - "Reuse shipment_packages table with provider='manual' instead of new table"
  - "Inline form in shipments tab instead of modal"

patterns-established:
  - "provider='manual' pattern for non-API tracking entries"

duration: ~10min
completed: 2026-03-23
---

# Phase 26 Plan 01: Manual Tracking Number Summary

**Endpoint POST /orders/{id}/shipment/manual z formularzem inline — ręczne dodawanie numerów śledzenia przesyłek do zamówień**

## Performance

| Metric | Value |
|--------|-------|
| Duration | ~10min |
| Completed | 2026-03-23 |
| Tasks | 3 completed |
| Files modified | 7 |

## Acceptance Criteria Results

| Criterion | Status | Notes |
|-----------|--------|-------|
| AC-1: Ręczne dodanie numeru przesyłki | Pass | Endpoint tworzy rekord, activity log, flash success |
| AC-2: Walidacja — pusty numer | Pass | HTML required + server-side trim check |
| AC-3: Wyświetlanie ręcznych przesyłek | Pass | Status "Dodana recznie", przewoźnik z carrier_id, etykieta "—" |

## Accomplishments

- Nowy endpoint `POST /orders/{id}/shipment/manual` z walidacją CSRF i tracking_number
- Metoda `ShipmentPackageRepository::createManual()` — INSERT z provider='manual', status='created'
- Formularz inline w zakładce Przesyłki + zmienione renderowanie dla ręcznych przesyłek

## Files Created/Modified

| File | Change | Purpose |
|------|--------|---------|
| `src/Modules/Shipments/ShipmentPackageRepository.php` | Modified | Nowa metoda createManual() |
| `src/Modules/Shipments/ShipmentController.php` | Modified | Nowa metoda createManual() — endpoint |
| `routes/web.php` | Modified | Nowa route POST /orders/{id}/shipment/manual |
| `resources/views/orders/show.php` | Modified | Formularz inline + wyświetlanie ręcznych przesyłek |
| `resources/scss/app.scss` | Modified | Klasa .manual-tracking-form |
| `public/assets/css/app.css` | Rebuilt | Skompilowany SCSS |
| `DOCS/ARCHITECTURE.md` | Modified | Dokumentacja nowego endpointu |
| `DOCS/TECH_CHANGELOG.md` | Modified | Wpis Phase 26 |

## Decisions Made

| Decision | Rationale | Impact |
|----------|-----------|--------|
| Reuse shipment_packages z provider='manual' | Tabela ma już tracking_number, carrier_id, status — nie trzeba nowej migracji | Zero zmian DB |
| Formularz inline zamiast modala | Szybszy dostęp, mniej kliknięć, spójny z kompaktowym UI | Prostsze UX |
| carrier_id jako nazwa przewoźnika dla manual | Pole VARCHAR już istnieje, semantycznie pasuje | Brak zmian schematu |

## Deviations from Plan

None — plan executed exactly as written.

## Issues Encountered

None.

## Next Phase Readiness

**Ready:**
- Ręczne numery przesyłek w pełni funkcjonalne
- Milestone v1.1 gotowy do zamknięcia

**Concerns:**
- Brak możliwości edycji/usunięcia ręcznych przesyłek (celowo poza scope)

**Blockers:**
- None

---
*Phase: 26-manual-tracking-number, Plan: 01*
*Completed: 2026-03-23*
