Initial commit — sursa ROAACNPRO

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-10 16:01:00 +03:00
commit fab869990d
68 changed files with 11444 additions and 0 deletions

79
docs/facturare.md Normal file
View File

@@ -0,0 +1,79 @@
# Fluxul facturilor (ROAACNPRO)
Document de referință minimal: ce fișiere trebuie verificate/modificate când se schimbă
ceva la facturare. Backend = Oracle (prin `goExecutor`/`goConn`), front-end = VFP9.
## Componentele cheie
| Rol | Fișier | Observații |
|-----|--------|-----------|
| Formularul de facturare | clasa `frm_factura` din `Clase/oacnpro.vcx` (cod în `.vct`) | **se editează în IDE VFP**, nu manual |
| Procedurile de facturare VFP | `Programe/proceduri_acnpro.prg` | `factura_salvare_db`, `make_cfactura`, `factura_acn` |
| Rapoarte facturare | `Programe/proceduri_acnpro_rapoarte.prg` + `Rapoarte/*.frx` | relistare/printare factură |
| Calcul + salvare valori în Oracle | `PACK_FACTURARE.pck` (pachet PL/SQL) | **sursa de adevăr** pentru valori |
| Framework facturare partajat | `COMUN/programe/ofacturare_comun.prg`, `oproceduri_facturare.prg` | partajat între aplicațiile ROA; a se evita modificarea |
## Lanțul de calcul (form → pachet → rapoarte)
1. **Introducere / import** (`frm_factura` + `factura_acn`): articolele intră în cursorul
`crsFactura` (creat în `make_cfactura`, `proceduri_acnpro.prg`). Import din
contract/tranzit/cheiaj prin `Insert Into crsFactura(...)` în `factura_acn`.
2. **Preview pe ecran** (`frm_factura.CalculeazaPreturiRand` + `CalculeazaTotaluri`):
calculează valorile fiecărui rând **doar pentru afișare**.
3. **Salvare** (`factura_salvare_db`): copiază rândurile din `crsFactura` în cursorul
`crsvanztemp`, apoi le trimite în Oracle prin `PACK_FACTURARE` (un apel per rând).
4. **Calcul autoritar** (`PACK_FACTURARE`): recalculează și stochează
`total_fara_tva / total_tva / total_cu_tva` în `vanzari` (antet) și `vanzari_detalii` (rânduri).
5. **Relistare / lista de facturi**: `proceduri_acnpro_rapoarte.prg` și interogările din
`proceduri_acnpro.prg` (~liniile 1180, 1222) **citesc** valorile deja calculate din Oracle
(`v.total_cu_tva` etc.) — **nu recalculează**.
> **Regula de sincronizare:** valorile reale sunt cele calculate de `PACK_FACTURARE` la salvare.
> Preview-ul din `frm_factura` trebuie să folosească **aceleași formule** ca pachetul, iar
> `factura_salvare_db` trebuie să trimită corect toți parametrii relevanți. Dacă cele două
> diverg, ecranul arată altceva decât factura salvată/relistată.
## Structura `crsFactura` (rândul de factură în memorie)
Definit în `make_cfactura` (`proceduri_acnpro.prg`). Câmpuri relevante:
- `pretval` = preț unitar în valută (prețul introdus de operator; baza calculului)
- `Curs` = curs valutar; `Pret` = preț unitar în lei = `pretval * Curs`
- `cantitate`
- `proc_tva` = multiplicatorul de TVA (ex. **1.19**, nu 19). La salvare e trimis ca `proc_tvav`.
- `pret_cu_tva` N(1) = flag: 1 = `pretval` este **cu TVA inclus**, 0 = fără TVA
- Lei: `valftva` (fără TVA), `valtva` (TVA), `valctva` (cu TVA)
- Valută: `valval` (fără TVA), `tvaval` (TVA), `totval` (cu TVA)
## Formule TVA
Cu `proc_tva` = multiplicator (1 + cotă/100):
- **Preț fără TVA** (`pret_cu_tva = 0`): `valftva = Pret*cant`; `valtva = valftva*(proc_tva-1)`;
`valctva = valftva + valtva`.
- **Preț cu TVA inclus** (`pret_cu_tva = 1`, calcul invers, identic cu `PACK_FACTURARE`,
`V_PRET_CU_TVA = 1`, PACK_FACTURARE.pck ~1570015922):
`valctva = Pret*cant`; `valtva = valctva*(proc_tva-1)/proc_tva`; `valftva = valctva - valtva`.
Rotunjiri: lei la `gnPC`, valută la `gnPval` (opțiuni firmă `PC` / `PPRETV` în pachet).
## Unde modific când...
- **Calculul valorilor pe rând (preview)** → `frm_factura.CalculeazaPreturiRand` (IDE VFP).
- **Ce se trimite la salvare în Oracle** → `factura_salvare_db` (insert `crsvanztemp` + apel pachet).
- **Calculul/stocarea finală a valorilor** → `PACK_FACTURARE.pck` (a se ține sincron cu preview-ul).
- **Coloane noi pe rândul de factură** → `make_cfactura` (cursor) + grid `grdFactura` (IDE VFP)
+ import în `factura_acn` + insert în `factura_salvare_db`.
- **Aspectul facturii tipărite / relistare** → `proceduri_acnpro_rapoarte.prg` + `Rapoarte/*.frx`.
- **Lista de facturi** → interogările din `proceduri_acnpro.prg` (citesc din `vanzari`).
## Exemplu real: suport „preț cu TVA inclus" (v2.0.4)
Lanțul complet care a trebuit atins pentru o singură funcționalitate:
1. `make_cfactura` — coloană nouă `pret_cu_tva N(1)` în `crsFactura`.
2. `frm_factura.CalculeazaPreturiRand` — branch pe `pret_cu_tva` (calcul invers).
3. `grdFactura` — coloană checkbox editabilă legată de `crsFactura.pret_cu_tva`.
4. `factura_salvare_db` — trimite `Nvl(pret_cu_tva,0)` (nu mai e hardcodat 0) către pachet.
Pachetul și rapoartele **aveau deja** suport pentru `pret_cu_tva`, deci nu au fost modificate —
exemplu tipic de „verifică întâi ce face deja pachetul/raportul".