2.7 KiB
2.7 KiB
Modulo prenota_sprenota_sql.py
Scopo
Il modulo contiene il port asincrono della stored procedure di prenotazione picking list. E' il ponte tra la UI Python e la stored SQL Python-only dbo.py_sp_xExePackingListPallet.
La funzione pubblica principale e':
async def sp_xExePackingListPallet_async(db, IDOperatore: int, Documento: str, Azione: str = "P") -> SPResult
Motivazione
Durante la fase di test sul campo devono convivere:
- applicazione C# legacy;
- applicazione Python.
Per evitare collisioni, il Python non chiama dbo.sp_xExePackingListPallet legacy ma dbo.py_sp_xExePackingListPallet.
Semantica parametro Azione
| Azione | Significato |
|---|---|
P |
prenota il documento |
S |
s-prenota il documento |
Ogni altra azione ritorna:
SPResult(rc=-10, message="Azione non valida: ...")
Classe SPResult
Firma:
@dataclass
class SPResult:
rc: int = 0
message: Optional[str] = ""
id_result: Optional[int] = None
Campi:
| Campo | Ruolo |
|---|---|
rc |
codice ritorno della stored |
message |
messaggio errore o vuoto |
id_result |
predisposizione per ID risultato, non usato oggi |
Funzioni helper
| Funzione | Firma | Ruolo |
|---|---|---|
_query_one_value |
_query_one_value(db, sql: str, params: Dict[str, Any]) -> Optional[Any] |
helper generico scalar, oggi non centrale nel flusso |
_query_all |
_query_all(db, sql: str, params: Dict[str, Any]) -> List[Dict[str, Any]] |
normalizza query multi-riga |
_execute |
_execute(db, sql: str, params: Dict[str, Any]) -> int |
helper generico DML |
sp_xExePackingListPallet_async |
vedi sopra | esegue stored Python-only |
Processo logico sp_xExePackingListPallet_async
- Normalizza
Azionea maiuscolo. - Valida
Azione in ("P", "S"). - Costruisce una batch SQL con output parameter
@RC. - Esegue:
EXEC dbo.py_sp_xExePackingListPallet
@IDOperatore = :IDOperatore,
@Documento = :Documento,
@Azione = :Azione,
@RC = @RC OUTPUT;
- Legge il valore
RC. - Ritorna
SPResult(rc=rc, message="", id_result=None). - In caso di eccezione ritorna
SPResult(rc=-1, message=str(exc), id_result=None).
Commit
La chiamata usa:
commit=True
Motivo: la stored modifica PyPickingListReservation e Celle.IDStato.
Rischi e note review
- Gli helper
_query_one_value,_query_all,_executesono generici e non tutti sono essenziali al percorso attuale. - La funzione cattura le eccezioni e ritorna
SPResult(rc=-1), quindi la UI deve controllare semprerc. - La transazione reale dipende dal comportamento di
query_json(..., commit=True)nel client DB.