feat(service-auto): phase 2 — comenzi browse, id_sucursala, cache, migrare SQL

Backend:
- GET /api/service-auto/comenzi cu paginare server-side, filtre dată/status
- ComandaRequest.id_sucursala (Optional) + FirmaItem.id_mama
- get_firme() expune id_mama din V_NOM_FIRME
- callproc SP_CREEAZA_COMANDA_PROTOTIP cu 7 argumente (+ p_id_sucursala)
- Cache TTL in-process: tip_deviz 24h, masini 5min

Frontend:
- ComenziBrowseView.vue — DataTable lazy + filtre + status badges
- ComandaNoua.vue — company store integration, idSucursala computed
- service-auto/stores/sharedStores.js (createCompaniesStore factory)
- HamburgerMenu: secțiune Service Auto (Comenzi + Comandă Nouă)
- router: /service-auto/comenzi

SQL:
- migrations/ff_2026_04_12_01_AUTO.sql — idempotent (COLUMNEXIST guard + CREATE OR REPLACE SP)
- onboarding_roa_web.sql — versioned, parametrizat cu :SCHEMA_NAME
- .claude/rules/oracle-migrations.md — convenție ff_YYYY_MM_DD_NN_MODULE.sql

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Agent
2026-04-12 22:25:32 +00:00
parent 574aca31e4
commit 0a880baef9
15 changed files with 694 additions and 12 deletions

View File

@@ -1,3 +1,5 @@
from typing import List, Optional
from pydantic import BaseModel
@@ -6,6 +8,7 @@ class ComandaRequest(BaseModel):
id_masiniclient: int
solicitari: str
id_firma: int
id_sucursala: Optional[int] = None
class ComandaResponse(BaseModel):
@@ -18,6 +21,7 @@ class FirmaItem(BaseModel):
id_firma: int
firma: str
schema_name: str
id_mama: Optional[int] = None
class TipDevizItem(BaseModel):
@@ -29,3 +33,22 @@ class TipDevizItem(BaseModel):
class MasinaClientItem(BaseModel):
id_masiniclient: int
label: str # "PARTENER — MARCA MASINA, NRINMAT (ANFABRICATIE)"
class ComandaListItem(BaseModel):
id_ordl: int
nrord: str
datai: Optional[str] # ISO date "YYYY-MM-DD"
validat: int # 0=deschisă, 1=validată
inchis_fortat: int # 1=arhivată fără validare
id_tip: int
tip_denumire: str
vehicul: str # "PARTENER — MARCA MASINA, NRINMAT (AN)"
id_masiniclient: Optional[int]
class ComandaListResponse(BaseModel):
comenzi: List[ComandaListItem]
total: int
page: int
per_page: int