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

@@ -0,0 +1,41 @@
from pydantic import BaseModel
from typing import Optional
class ClientCreate(BaseModel):
id: Optional[str] = None
tip_persoana: str = "PF"
denumire: Optional[str] = None
nume: Optional[str] = None
prenume: Optional[str] = None
cod_fiscal: Optional[str] = None
reg_com: Optional[str] = None
telefon: Optional[str] = None
email: Optional[str] = None
adresa: Optional[str] = None
judet: Optional[str] = None
oras: Optional[str] = None
cod_postal: Optional[str] = None
tara: str = "RO"
cont_iban: Optional[str] = None
banca: Optional[str] = None
activ: int = 1
class ClientUpdate(BaseModel):
tip_persoana: Optional[str] = None
denumire: Optional[str] = None
nume: Optional[str] = None
prenume: Optional[str] = None
cod_fiscal: Optional[str] = None
reg_com: Optional[str] = None
telefon: Optional[str] = None
email: Optional[str] = None
adresa: Optional[str] = None
judet: Optional[str] = None
oras: Optional[str] = None
cod_postal: Optional[str] = None
tara: Optional[str] = None
cont_iban: Optional[str] = None
banca: Optional[str] = None
activ: Optional[int] = None