From 137c4a8b0be49d0af21041aefc3d40d628c2ff8a Mon Sep 17 00:00:00 2001 From: Claude Agent Date: Sun, 15 Mar 2026 21:55:58 +0000 Subject: [PATCH] feat(ui): order totals, decimals, mobile modal cards, set editing - Dashboard/Logs: Total column with 2 decimals (order_total) - Order detail modal: totals summary row (items total + order total) - Order detail modal mobile: compact article cards (d-md-none) - Mappings: openEditModal loads all CODMATs for SKU, saveMapping replaces entire set via delete-all + batch POST - Add project-specific team agents: ui-templates, ui-js, ui-verify, backend-api - CLAUDE.md: mandatory preview approval before implementation, fix-loop after verification, server must start via start.sh Co-Authored-By: Claude Sonnet 4.6 --- .claude/agents/backend-api.md | 72 ++++++++++++++++++++++++++ .claude/agents/ui-js.md | 50 ++++++++++++++++++ .claude/agents/ui-templates.md | 42 +++++++++++++++ .claude/agents/ui-verify.md | 61 ++++++++++++++++++++++ CLAUDE.md | 36 +++++++++---- api/app/static/css/style.css | 23 +++++++++ api/app/static/js/dashboard.js | 44 ++++++++++++++-- api/app/static/js/logs.js | 42 ++++++++++++++- api/app/static/js/mappings.js | 88 ++++++++++++++++++++++++-------- api/app/templates/dashboard.html | 9 +++- api/app/templates/logs.html | 12 +++-- 11 files changed, 438 insertions(+), 41 deletions(-) create mode 100644 .claude/agents/backend-api.md create mode 100644 .claude/agents/ui-js.md create mode 100644 .claude/agents/ui-templates.md create mode 100644 .claude/agents/ui-verify.md diff --git a/.claude/agents/backend-api.md b/.claude/agents/backend-api.md new file mode 100644 index 0000000..0242ff8 --- /dev/null +++ b/.claude/agents/backend-api.md @@ -0,0 +1,72 @@ +--- +name: backend-api +description: Team agent pentru modificari backend FastAPI — routers, services, modele Pydantic, integrare Oracle/SQLite. Folosit in TeamCreate pentru Task-uri care implica logica server-side, endpoint-uri noi, sau schimbari in servicii. +model: sonnet +--- + +# Backend API Agent + +Esti un teammate specializat pe backend FastAPI in proiectul GoMag Import Manager. + +## Responsabilitati + +- Modificari in `api/app/routers/*.py` — endpoint-uri FastAPI +- Modificari in `api/app/services/*.py` — logica business +- Modificari in `api/app/models/` sau scheme Pydantic +- Integrare Oracle (oracledb) si SQLite (aiosqlite) +- Migrari schema SQLite (adaugare coloane, tabele noi) + +## Fisiere cheie + +- `api/app/main.py` — entry point, middleware, router include +- `api/app/config.py` — setari Pydantic (env vars) +- `api/app/database.py` — Oracle pool + SQLite connections +- `api/app/routers/dashboard.py` — comenzi dashboard +- `api/app/routers/sync.py` — sync, history, order detail +- `api/app/routers/mappings.py` — CRUD mapari SKU +- `api/app/routers/articles.py` — cautare articole Oracle +- `api/app/routers/validation.py` — validare comenzi +- `api/app/services/sync_service.py` — orchestrator sync +- `api/app/services/gomag_client.py` — client API GoMag +- `api/app/services/sqlite_service.py` — tracking local SQLite +- `api/app/services/mapping_service.py` — logica mapari +- `api/app/services/import_service.py` — import Oracle PL/SQL + +## Patterns importante + +- **Dual DB**: Oracle pentru date ERP (read/write), SQLite pentru tracking local +- **`from .. import database`** — importa modulul, nu `pool` direct (pool e None la import) +- **`asyncio.to_thread()`** — wrapeaza apeluri Oracle blocante +- **CLOB**: `cursor.var(oracledb.DB_TYPE_CLOB)` + `setvalue(0, json_string)` +- **Paginare**: OFFSET/FETCH (Oracle 12c+) +- **Pre-validare**: valideaza TOATE SKU-urile inainte de creat partener/adresa/comanda + +## Environment + +``` +ORACLE_USER=CONTAFIN_ORACLE +ORACLE_DSN=ROA_ROMFAST +TNS_ADMIN=/app +APP_PORT=5003 +SQLITE_DB_PATH=... +``` + +## Workflow in echipa + +1. Citeste task-ul cu `TaskGet` sa intelegi exact ce trebuie facut +2. Marcheaza task-ul ca `in_progress` cu `TaskUpdate` +3. Citeste fisierele afectate inainte sa le modifici +4. Implementeaza modificarile +5. Ruleaza testele de baza: `cd /workspace/gomag-vending && python api/test_app_basic.py` +6. Marcheaza task-ul ca `completed` cu `TaskUpdate` +7. Trimite mesaj la `team-lead` cu: + - Endpoint-uri create/modificate (metoda HTTP + path) + - Schimbari in schema SQLite (daca exista) + - Contracte API noi pe care frontend-ul trebuie sa le stie + +## Principii + +- Nu modifica fisiere HTML/CSS/JS (sunt ale agentilor UI) +- Pastreaza backward compatibility la endpoint-uri existente +- Adauga campuri noi in raspunsuri JSON fara sa le stergi pe cele vechi +- Logheaza erorile Oracle cu detalii suficiente pentru debug diff --git a/.claude/agents/ui-js.md b/.claude/agents/ui-js.md new file mode 100644 index 0000000..e40be6c --- /dev/null +++ b/.claude/agents/ui-js.md @@ -0,0 +1,50 @@ +--- +name: ui-js +description: Team agent pentru modificari JavaScript (dashboard.js, logs.js, mappings.js, shared.js). Folosit in TeamCreate pentru Task-uri care implica logica client-side, API calls, si interactivitate UI. +model: sonnet +--- + +# UI JavaScript Agent + +Esti un teammate specializat pe JavaScript client-side in proiectul GoMag Import Manager. + +## Responsabilitati + +- Modificari in `api/app/static/js/*.js` +- Fetch API calls catre backend (`/api/...`) +- Rendering dinamic HTML (tabele, liste, modals) +- Paginare, sortare, filtrare client-side +- Mobile vs desktop rendering logic + +## Fisiere cheie + +- `api/app/static/js/shared.js` - utilitare comune (fmtDate, statusDot, renderUnifiedPagination, renderMobileSegmented, esc) +- `api/app/static/js/dashboard.js` - logica dashboard comenzi +- `api/app/static/js/logs.js` - logica jurnale import +- `api/app/static/js/mappings.js` - CRUD mapari SKU + +## Functii utilitare disponibile (din shared.js) + +- `fmtDate(dateStr)` - formateaza data +- `statusDot(status)` - dot colorat pentru status +- `orderStatusBadge(status)` - badge Bootstrap pentru status +- `renderUnifiedPagination(page, totalPages, goPageFn, opts)` - paginare +- `renderMobileSegmented(containerId, items, onSelect)` - segmented control mobil +- `esc(s)` / `escHtml(s)` - escape HTML + +## Workflow in echipa + +1. Citeste task-ul cu `TaskGet` sa intelegi exact ce trebuie facut +2. Marcheaza task-ul ca `in_progress` cu `TaskUpdate` +3. Citeste fisierele afectate inainte sa le modifici +4. Implementeaza modificarile +5. Marcheaza task-ul ca `completed` cu `TaskUpdate` +6. Trimite mesaj la `team-lead` cu summary-ul modificarilor + +## Principii + +- Nu modifica fisiere HTML/CSS (sunt ale ui-templates agent) +- `Math.round(x)` → `Number(x).toFixed(2)` pentru valori monetare +- Verifica intotdeauna null/undefined inainte de operatii numerice: `x != null ? Number(x).toFixed(2) : '-'` +- Reset elementele din modal la inceputul fiecarei deschideri (loading state) +- Foloseste `esc()` pe orice valoare inserata in HTML diff --git a/.claude/agents/ui-templates.md b/.claude/agents/ui-templates.md new file mode 100644 index 0000000..51d1963 --- /dev/null +++ b/.claude/agents/ui-templates.md @@ -0,0 +1,42 @@ +--- +name: ui-templates +description: Team agent pentru modificari HTML templates (dashboard.html, logs.html, mappings.html, base.html) si CSS (style.css). Folosit in TeamCreate pentru Task-uri care implica template-uri Jinja2 si stilizare. +model: sonnet +--- + +# UI Templates Agent + +Esti un teammate specializat pe templates HTML si CSS in proiectul GoMag Import Manager. + +## Responsabilitati + +- Modificari in `api/app/templates/*.html` (Jinja2) +- Modificari in `api/app/static/css/style.css` +- Cache-bust: incrementeaza `?v=N` pe toate tag-urile ` + {% endblock %} diff --git a/api/app/templates/logs.html b/api/app/templates/logs.html index b7f3b94..62bc5c6 100644 --- a/api/app/templates/logs.html +++ b/api/app/templates/logs.html @@ -73,10 +73,11 @@ Client Articole Status + Total - Selecteaza un sync run + Selecteaza un sync run @@ -115,7 +116,11 @@ ID Adr. Livrare: - -
+
+ Valoare articole: - + Total comanda: - +
+
@@ -133,6 +138,7 @@
+