This commit is contained in:
2026-04-08 19:08:40 +02:00
parent 40644eb362
commit 0f7742f10d
25 changed files with 750 additions and 77 deletions

View File

@@ -0,0 +1,108 @@
---
phase: 86-apaczka-cod-bank-account
plan: 01
type: execute
wave: 1
depends_on: []
files_modified:
- src/Modules/Shipments/ApaczkaShipmentService.php
autonomous: true
delegation: off
---
<objective>
## Goal
Naprawic blad API Apaczka "Wprowadzono niepoprawny numer konta bankowego w usludze pobranie" przy tworzeniu przesylki COD — dodac `bank_account_number` do payloadu COD.
## Purpose
Uzytkownik nie moze tworzyc przesylek z pobraniem (COD) przez Apaczke. Blokuje to codzienna obsluge zamowien.
## Output
Poprawiony `ApaczkaShipmentService.php` — payload COD zawiera numer konta bankowego z ustawien firmy.
</objective>
<context>
## Project Context
@.paul/PROJECT.md
@.paul/ROADMAP.md
@.paul/STATE.md
## Source Files
@src/Modules/Shipments/ApaczkaShipmentService.php (linie 114-119 — budowanie payloadu COD)
@src/Modules/Settings/CompanySettingsRepository.php (linia 45 — pole `bank_account`)
</context>
<acceptance_criteria>
## AC-1: Payload COD zawiera numer konta bankowego
```gherkin
Given zamowienie z kwota pobrania (cod_amount > 0)
And ustawienia firmy zawieraja niepusty bank_account
When ApaczkaShipmentService buduje payload COD
Then obiekt cod zawiera pole bank_account_number z numerem konta z ustawien firmy
```
## AC-2: Brak konta bankowego — czytelny blad
```gherkin
Given zamowienie z kwota pobrania (cod_amount > 0)
And ustawienia firmy nie zawieraja bank_account (pusty string)
When ApaczkaShipmentService buduje payload COD
Then rzucony zostaje ShipmentException z komunikatem o braku numeru konta bankowego w ustawieniach firmy
```
</acceptance_criteria>
<tasks>
<task type="auto">
<name>Task 1: Dodac bank_account_number do payloadu COD w ApaczkaShipmentService</name>
<files>src/Modules/Shipments/ApaczkaShipmentService.php</files>
<action>
W metodzie `createShipment()`, w bloku `if ($codAmount > 0)` (linie 114-119):
1. Pobrac ustawienia firmy: `$settings = $this->companySettings->getSettings();`
2. Wyciagnac numer konta: `$bankAccount = $settings['bank_account'] ?? '';`
3. Jezeli `$bankAccount === ''` — rzucic `ShipmentException` z komunikatem:
"Przesylka COD wymaga numeru konta bankowego. Uzupelnij go w Ustawienia > Firma."
4. Dodac do tablicy `$apiPayload['cod']` pole `'bank_account_number' => $bankAccount`
5. Numer konta powinien byc przekazany jako czysty ciag cyfr (bez spacji/myslnikow) — uzyc `preg_replace('/\s+/', '', $bankAccount)`
Uwaga: NIE zmieniaj nic poza blokiem COD. Nie dodawaj nowych use statements (ShipmentException juz jest zaimportowany).
</action>
<verify>
Statyczna analiza: php -l src/Modules/Shipments/ApaczkaShipmentService.php
Manualna weryfikacja: utworzyc przesylke COD w zamowieniu #191 — API Apaczka nie powinno zwracac bledu o niepoprawnym koncie bankowym.
</verify>
<done>AC-1 i AC-2 spelnione: payload COD zawiera bank_account_number, brak konta = czytelny blad</done>
</task>
</tasks>
<boundaries>
## DO NOT CHANGE
- src/Modules/Settings/CompanySettingsRepository.php (ustawienia firmy dzialaja poprawnie)
- resources/views/shipments/prepare.php (formularz przygotowania przesylki)
- src/Modules/Settings/ApaczkaApiClient.php (klient API)
## SCOPE LIMITS
- Nie dodawac pola bank_account do formularza przesylki — numer konta jest globalny (ustawienia firmy)
- Nie zmieniac logiki innych providerow (InPost, Allegro)
</boundaries>
<verification>
Before declaring plan complete:
- [ ] `php -l src/Modules/Shipments/ApaczkaShipmentService.php` — brak bledow skladni
- [ ] Payload COD zawiera `bank_account_number` z ustawien firmy
- [ ] Pusty bank_account rzuca ShipmentException z czytelnym komunikatem
- [ ] Zadne inne pliki nie zostaly zmienione
</verification>
<success_criteria>
- Przesylka COD przez Apaczke tworzy sie bez bledu "niepoprawny numer konta bankowego"
- Brak numeru konta w ustawieniach = czytelny komunikat zamiast bledu API
</success_criteria>
<output>
After completion, create `.paul/phases/86-apaczka-cod-bank-account/86-01-SUMMARY.md`
</output>

View File

@@ -0,0 +1,109 @@
---
phase: 86-apaczka-cod-bank-account
plan: 01
subsystem: shipments
tags: [apaczka, cod, api]
requires:
- phase: none
provides: n/a
provides:
- Apaczka COD shipments include bank account number from company settings
affects: []
tech-stack:
added: []
patterns: []
key-files:
created: []
modified:
- src/Modules/Shipments/ApaczkaShipmentService.php
key-decisions:
- "Field name `bankaccount` per Apaczka API v2 docs (not `bank_account_number`)"
- "Strip all non-digit chars from bank account (handles PL prefix and spaces)"
patterns-established: []
duration: ~15min
started: 2026-04-08T00:00:00Z
completed: 2026-04-08T00:00:00Z
---
# Phase 86 Plan 01: Apaczka COD Bank Account Summary
**Naprawiono blad API Apaczka przy tworzeniu przesylki COD — dodano pole `bankaccount` z numerem konta z ustawien firmy do payloadu COD.**
## Performance
| Metric | Value |
|--------|-------|
| Duration | ~15min |
| Tasks | 1 completed |
| Files modified | 1 |
## Acceptance Criteria Results
| Criterion | Status | Notes |
|-----------|--------|-------|
| AC-1: Payload COD zawiera numer konta bankowego | Pass | Pole `bankaccount` z 26 cyframi z company_settings |
| AC-2: Brak konta = czytelny blad | Pass | ShipmentException z komunikatem o uzupelnieniu konta |
## Accomplishments
- Naprawiono blad API Apaczka "Wprowadzono niepoprawny numer konta bankowego w usludze pobranie"
- Payload COD zawiera pole `bankaccount` z numerem konta oczyszczonym do samych cyfr
- Brak numeru konta w ustawieniach firmy rzuca czytelny ShipmentException
## Files Created/Modified
| File | Change | Purpose |
|------|--------|---------|
| `src/Modules/Shipments/ApaczkaShipmentService.php` | Modified | Dodano `bankaccount` do payloadu COD + walidacje braku konta |
## Decisions Made
| Decision | Rationale | Impact |
|----------|-----------|--------|
| Pole `bankaccount` zamiast `bank_account_number` | Oficjalna dokumentacja Apaczka API v2 definiuje pole jako `bankaccount` (bez underscore) | Poprawne dzialanie COD |
| `preg_replace('/[^0-9]/', '')` do czyszczenia numeru konta | Numer w bazie zawiera prefix PL i spacje (`PL22 2530...`), API wymaga 26 cyfr | Uniwersalne czyszczenie dowolnego formatu IBAN |
## Deviations from Plan
### Summary
| Type | Count | Impact |
|------|-------|--------|
| Auto-fixed | 1 | Krytyczne — bledna nazwa pola API |
### Auto-fixed Issues
**1. Bledna nazwa pola API `bank_account_number` -> `bankaccount`**
- **Found during:** Testowanie na serwerze produkcyjnym
- **Issue:** Pole `bank_account_number` nie jest rozpoznawane przez Apaczka API v2
- **Fix:** Zmieniono na `bankaccount` zgodnie z oficjalna dokumentacja API
- **Verification:** Uzytkownik potwierdzil poprawne tworzenie przesylki COD
## Issues Encountered
| Issue | Resolution |
|-------|------------|
| `uploadOnSave: false` — plik nie synchronizowal sie automatycznie z serwerem | Reczny upload przez FTP curl |
| Numer konta w bazie z prefixem PL i spacjami | Regex `[^0-9]` usuwa wszystko poza cyframi |
| Nazwa pola API `bank_account_number` niepoprawna | Sprawdzono oficjalna dokumentacje — prawidlowe pole to `bankaccount` |
## Next Phase Readiness
**Ready:**
- Przesylki COD przez Apaczke dzialaja poprawnie
**Concerns:**
- Brak
**Blockers:**
- None
---
*Phase: 86-apaczka-cod-bank-account, Plan: 01*
*Completed: 2026-04-08*