Files
orderPRO/.paul/changelog/2026-05-13.md
Jacek Pyziak c758ec7c92 feat(126): invoice GUS field mapping fix (JDG/KRS heuristic)
MfWhitelistApiClient.lookupByNip() exposes is_jdg/krs from MF Biala Lista.
InvoiceController.nipLookup propagates is_jdg in JSON response.
invoice_form.php JS conditionally targets buyer_name (JDG) or
buyer_company_name (spolka z KRS); second field keeps zamowienie pre-fill.

Fixes apparent field swap on /orders/{id}/invoice/create after GUS lookup
for JDG (sole trader) where MF returns natural person in subject.name.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 22:29:55 +02:00

4.6 KiB

2026-05-13

Co zrobiono

  • [Phase 124, Plan 01] Wdrozono szablony SMS: CRUD w /settings/sms-templates (name + body + is_active) plus dropdown "Wybierz szablon" w zakladce SMS na /orders/{id} wstawiajacy tresc z rozwinietymi zmiennymi {{zamowienie.numer}}, {{kupujacy.imie_nazwisko}}, {{przesylka.numer}} itd. do textarea.
  • [Phase 124, Plan 01] Wydzielono Sms\SmsVariableResolver ze wspolna logika buildVariableMap + resolve; Email\VariableResolver zostal cienka fasada delegujaca — EmailSendingService niezmieniony, kontrakt Phase 14 zachowany.
  • [Phase 124, Plan 01] Dodano endpoint GET /orders/{id}/sms/template?template_id=N (JSON z rozwinietym body per zamowienie); JS module sms-template-picker.js z idempotentnym guard i OrderProAlerts.confirm (options-object API) przy nadpisaniu niepustej textarea.
  • [Phase 124, Plan 01] Migracja 20260512_000112_create_sms_templates.sql (CREATE TABLE, DDL). Stopka SMSPLANET dalej doklejana wylacznie przez SmsConversationService::buildFinalOutboundBody() (Phase 122 contract preserved).
  • [Phase 124, Plan 01] UI fixes po UAT operatora: paleta zmiennych przeniesiona pod textarea z pill chipami {{var}} + opis (border-radius 999px, hover indigo); akcje w liscie szablonow uzywaja display: flex; flex-wrap: nowrap zamiast white-space: nowrap (form-children byly blokowe).
  • [Phase 124, Plan 01] UNIFY zamkniety; php bin/migrate.php i real smoke wysylki SMS z szablonu zalezne od XAMPP MySQL online.
  • [Phase 125, Plan 01] Bugfix #1089: shopPRO order z firm_nip ustawia teraz invoice_requested=1 przy imporcie (mapper jako jedyne zrodlo heurystyki, sync service propaguje aggregate['invoice_detected']).
  • [Phase 125, Plan 01] Allegro rozszerzenie shouldRequestInvoice(): detekcja invoice.naturalPerson=false, invoice.address.taxId, invoice.companyName (wczesniej tylko invoice.required).
  • [Phase 125, Plan 01] Migracja 20260513_000113_drop_orders_is_invoice_and_backfill_invoice_requested.sql — idempotentna (information_schema guard); backfill 7 zamowien + DROP COLUMN orders.is_invoice (legacy z Phase 115).
  • [Phase 125, Plan 01] Cleanup is_invoice z OrderImportRepository (INSERT/params/docstring) i OrdersRepository (SELECT/hydrate); usuniete shouldRequestInvoice() z ShopproOrdersSyncService (zastapione heurystyka mappera).
  • [Phase 126, Plan 01] Bugfix /orders/{id}/invoice/create GUS lookup: dla JDG (MF subject.krs='') nazwa z MF trafia do "Imie i nazwisko"; dla spolki z KRS — do "Nazwa firmy". Drugiego pola nie nadpisuje — pre-fill z order_addresses.name zachowany (czesto trzyma pelna nazwe firmy JDG, np. "Project-Pro Pyziak Jacek" vs MF "JACEK PYZIAK").
  • [Phase 126, Plan 01] MfWhitelistApiClient::lookupByNip() zwraca dodatkowo krs: string i is_jdg: bool (true gdy subject.krs === ''). InvoiceController::nipLookup propaguje is_jdg w data JSON. JS btn-gus-lookup warunkowo wybiera target field.

Zmienione pliki

  • database/migrations/20260512_000112_create_sms_templates.sql
  • src/Modules/Sms/SmsTemplateRepository.php
  • src/Modules/Sms/SmsVariableResolver.php
  • src/Modules/Email/VariableResolver.php
  • src/Modules/Settings/SmsTemplateController.php
  • src/Modules/Orders/OrdersController.php
  • routes/web.php
  • resources/views/settings/sms-templates.php
  • resources/views/settings/sms-templates-form.php
  • resources/views/orders/show.php
  • resources/views/layouts/app.php
  • resources/lang/pl.php
  • resources/scss/app.scss
  • resources/scss/modules/_sms-templates.scss
  • public/assets/css/app.css
  • public/assets/js/modules/sms-template-picker.js
  • .paul/codebase/db_schema.md
  • .paul/codebase/architecture.md
  • .paul/codebase/tech_changelog.md
  • .paul/PROJECT.md
  • .paul/ROADMAP.md
  • .paul/STATE.md
  • .paul/phases/124-sms-templates/124-01-PLAN.md
  • .paul/phases/124-sms-templates/124-01-SUMMARY.md
  • src/Modules/Settings/ShopproOrderMapper.php
  • src/Modules/Settings/ShopproOrdersSyncService.php
  • src/Modules/Settings/AllegroOrderImportService.php
  • src/Modules/Orders/OrderImportRepository.php
  • src/Modules/Orders/OrdersRepository.php
  • database/migrations/20260513_000113_drop_orders_is_invoice_and_backfill_invoice_requested.sql
  • .paul/phases/125-invoice-requested-import-fix/125-01-PLAN.md
  • .paul/phases/125-invoice-requested-import-fix/125-01-SUMMARY.md
  • src/Core/Http/MfWhitelistApiClient.php
  • src/Modules/Accounting/InvoiceController.php
  • resources/views/accounting/invoice_form.php
  • .paul/phases/126-invoice-gus-field-mapping/126-01-PLAN.md
  • .paul/phases/126-invoice-gus-field-mapping/126-01-SUMMARY.md