feat: add clients nomenclator, order edit/delete/devalidate, invoice types, dashboard redesign

- New clients table with PF/PJ support, fiscal data (CUI, IBAN, eFactura fields)
- Full CRUD API for clients with search, sync integration
- Order lifecycle: edit header (DRAFT), devalidate (VALIDAT→DRAFT), delete order/invoice
- Invoice types: FACTURA (B2B) vs BON_FISCAL (B2C) with different nr formats
- OrderCreateView redesigned as multi-step flow (client→vehicle→details)
- Autocomplete from catalog_norme/catalog_preturi in OrderLineForm
- Dashboard now combines stats + full orders table with filter tabs and search
- ClientPicker and VehiclePicker with inline creation capability
- Frontend schema aligned with backend (missing columns causing sync errors)
- Mobile responsive fixes for OrderDetailView buttons

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-14 00:36:40 +02:00
parent 3e449d0b0b
commit 9db4e746e3
34 changed files with 2221 additions and 211 deletions

View File

@@ -245,13 +245,18 @@ catalog_tipuri_deviz (id, tenant_id, denumire)
catalog_tipuri_motoare (id, tenant_id, denumire)
mecanici (id, tenant_id, user_id, nume, prenume, activ)
-- Clients (nomenclator clienti cu date eFactura ANAF)
clients (id, tenant_id, tip_persoana, denumire, cod_fiscal, reg_com,
adresa, judet, oras, cod_postal, tara, telefon, email,
cont_iban, banca, observatii, activ, created_at, updated_at)
-- Core Business
vehicles (id, tenant_id, client_nume, client_telefon, client_email,
vehicles (id, tenant_id, client_id, client_nume, client_telefon, client_email,
client_cod_fiscal, client_adresa, nr_inmatriculare,
marca_id, model_id, an_fabricatie, serie_sasiu,
tip_motor_id, created_at, updated_at)
orders (id, tenant_id, nr_comanda, data_comanda, vehicle_id,
orders (id, tenant_id, nr_comanda, data_comanda, vehicle_id, client_id,
tip_deviz_id, status, km_intrare, observatii,
-- client snapshot (denormalized)
client_nume, client_telefon, nr_auto, marca_denumire, model_denumire,
@@ -266,8 +271,8 @@ order_lines (id, order_id, tenant_id, tip, descriere,
um, cantitate, pret_unitar, -- material
total, mecanic_id, ordine, created_at, updated_at)
invoices (id, tenant_id, order_id, nr_factura, serie_factura,
data_factura, modalitate_plata,
invoices (id, tenant_id, order_id, client_id, nr_factura, serie_factura,
data_factura, tip_document, modalitate_plata,
client_nume, client_cod_fiscal, nr_auto,
total_fara_tva, tva, total_general, created_at, updated_at)
@@ -379,6 +384,46 @@ _sync_state (table_name, last_sync_at)
4. Responsive testing (phone, tablet, desktop)
5. Reports: sumar lunar, export CSV
### Faza 8: Nomenclator Clienti (Clients)
**Livrabil: CRUD clienti cu date eFactura ANAF, legatura 1:N cu vehicule**
1. Model `clients` + migrare Alembic (backend)
2. `client_id` FK pe `vehicles`, `orders`, `invoices`
3. CRUD endpoints: `GET/POST /api/clients`, `GET/PUT/DELETE /api/clients/{id}`
4. wa-sqlite schema update (tabel `clients`, FK-uri)
5. Frontend: pagina Clienti (list, create, edit, delete)
6. Frontend: selector client in VehiclePicker si OrderCreate
7. Sync: adauga `clients` in `SYNCABLE_TABLES`
8. Playwright E2E tests (desktop + mobile)
### Faza 9: Edit/Delete/Devalidare Comenzi
**Livrabil: Gestionare completa comenzi - edit, stergere, devalidare**
1. `PUT /api/orders/{id}` - edit header comanda (doar in DRAFT)
2. `DELETE /api/orders/{id}` - stergere comanda (orice nefacturat)
3. `POST /api/orders/{id}/devalidate` - VALIDAT DRAFT
4. `DELETE /api/invoices/{id}` - stergere factura (permite stergere comanda FACTURAT)
5. Frontend: butoane edit/delete/devalidare pe OrderDetail
6. Confirmare stergere cu modal
7. Playwright E2E tests
### Faza 10: Integrare Nomenclator Clienti
**Livrabil: Clienti integrati in flux comenzi si facturi**
1. Auto-populare date client pe comanda din nomenclator
2. Selectie client existent sau creare client nou la vehicul
3. Validare date client complete la facturare (CUI, adresa)
4. PDF factura cu date client din nomenclator
### Faza 11: Bon Fiscal (tip_document)
**Livrabil: Suport dual FACTURA + BON_FISCAL pe invoices**
1. `tip_document` pe invoices: FACTURA (B2B, eFactura) sau BON_FISCAL (B2C, casa de marcat)
2. Factura: necesita date client complete (CUI, adresa)
3. Bon fiscal: format simplificat, fara date client obligatorii
4. UI: selectie tip document la facturare
5. PDF template diferentiat pentru bon fiscal
---
## Referinta din Prototip (doar consultare)
@@ -405,6 +450,9 @@ SaaS-ul trebuie sa fie compatibil cu ROAAUTO VFP9+Oracle. Clientii care cresc po
| `order_lines` (tip=manopera) | `dev_oper` | SaaS unifica oper+materiale in order_lines |
| `order_lines` (tip=material) | `dev_estimari_produse` | Acelasi tabel, filtrat pe `tip` |
| `vehicles` | `dev_masiniclienti` | Renamed, aceleasi coloane client+vehicul |
| `clients` | `nom_parteneri` + `adrese_parteneri` | Adrese simplificate flat |
| `clients.tip_persoana` | `nom_parteneri.tip_persoana` | PF/PJ |
| `clients.cod_fiscal` | `nom_parteneri.cod_fiscal` | CUI sau CNP |
| `catalog_marci` | `dev_nom_marci` | +tenant_id |
| `catalog_modele` | `dev_nom_masini` | Identic |
| `catalog_ansamble` | `dev_nom_ansamble` | +tenant_id |
@@ -414,6 +462,10 @@ SaaS-ul trebuie sa fie compatibil cu ROAAUTO VFP9+Oracle. Clientii care cresc po
| `catalog_tipuri_motoare` | `dev_tipuri_motoare` | +tenant_id |
| `mecanici` | `dev_mecanici` | +tenant_id, +user_id |
| `invoices` | `facturi` (local) | Identic structural |
| `invoices.tip_document` | `vanzari.tip_factura` | FACTURA/BON_FISCAL |
| `invoices.client_id` | `vanzari.id_part` | FK la client |
| `orders.client_id` | (denormalizat) | Referinta directa la client |
| `vehicles.client_id` | (implicit in dev_masiniclienti) | 1:N client vehicule |
| `tenants` | - | Doar SaaS (nu exista in Oracle) |
| `users` | - | Doar SaaS |
| `appointments` | - | Doar SaaS (feature nou) |