Files
comun/utile/Teste/efactura_import/fixtura_zip_din_baza.prg
Marius Mutu 940bb39701 Import eFactura in lot: borderou cu ce lipseste, coada de contabilizare, alegerea contului
Borderoul tine per factura ce mai are de completat si daca are articole de gestiune
(camp gest, coloana si filtru), coada contabilizeaza in serie facturile bifate si
incheie cu un rezumat, iar contul de furnizor/client se alege din planul de conturi.
Cheia normalizata de articol, rezolvarea automata a partenerului si anularea in bloc
intra tot aici. Pozitia in lista se pastreaza peste reaplicarea filtrului.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Aroafxp4z8bmM5oVECZRXY
2026-09-09 22:06:48 +03:00

115 lines
4.5 KiB
Plaintext

* fixtura_zip_din_baza.prg
* Ajutor comun de fixtura pentru cele trei teste efactura_import (test_import_zip_efactura,
* test_import_efactura_smoke, test_sursa_cont_cursor): extrage arhiva DETALII_ZIP a unei
* facturi alese determinist din ANAF_EFACTURA (nu de pe disc), ca sa nu mai depinda de un
* fisier .zip nurmarit langa proiect.
*
* Criteriu determinist: cea mai mica (alfabetic) id_incarcare dintre facturile primite, cu
* arhiva zip salvata in baza si fara document contabil legat inca (id_fact null) - stabil intre
* rulari chiar daca test_import_zip_efactura sterge si reimporta acelasi id_incarcare cu un id
* nou (secventa), pentru ca alegerea se face pe id_incarcare, nu pe id.
*
* Necesita mediul deja initializat (test_init_env_auto.prg, goExecutor conectat).
***********************
FUNCTION FixturaIdIncarcareEFactura
LOCAL lcId
lcId = ''
goExecutor.oSelecteaza2Value("select min(id_incarcare) from anaf_efactura" + ;
" where detalii_zip is not null and tip_mesaj_raspuns = 'FACTURA PRIMITA' and id_fact is null", @lcId)
RETURN ALLTRIM(NVL(lcId, ''))
ENDFUNC
***********************
* id-ul curent (poate sa difere intre rulari, dupa reimport) al randului anaf_efactura cu
* id_incarcare = FixturaIdIncarcareEFactura() - pentru testele care doar citesc randul deja
* importat de test_import_zip_efactura. Intoarce 0 daca fixtura nu exista inca.
FUNCTION FixturaIdEFactura
LOCAL lcIdInc, lnId
lcIdInc = FixturaIdIncarcareEFactura()
lnId = 0
IF !EMPTY(m.lcIdInc)
goExecutor.oSelecteaza2Value("select id from anaf_efactura where id_incarcare = '" + m.lcIdInc + "'", @lnId)
ENDIF
RETURN NVL(lnId, 0)
ENDFUNC
***********************
* seteaza gnAn/gnLuna (si sesiunea Oracle, pack_sesiune) pe luna facturii fixtura, ca
* filtrele de perioada din cursoarele borderoului eFactura sa o gaseasca indiferent de data
* reala la care a fost emisa. Intoarce .F. daca fixtura nu exista.
FUNCTION FixturaSincronizeazaPerioada
LOCAL lnId, ldData
lnId = FixturaIdEFactura()
IF m.lnId = 0
RETURN .F.
ENDIF
ldData = {}
goExecutor.oSelecteaza2Value("select xdata_act from anaf_efactura where id = " + TRANSFORM(m.lnId), @ldData)
IF EMPTY(m.ldData)
RETURN .F.
ENDIF
gnAn = YEAR(m.ldData)
gnLuna = MONTH(m.ldData)
goExecutor.oExecuta("begin pack_sesiune.setluna(?gnLuna); pack_sesiune.setan(?gnAn); end;")
RETURN .T.
ENDFUNC
***********************
* Extrage DETALII_ZIP al facturii fixtura intr-un fisier temporar (SYS(2023), in afara
* proiectului - nu ramane nimic nurmarit dupa test) si intoarce calea lui ('' daca fixtura nu
* exista in baza). Lasa deschis cursorul cFixturaEFactura cu datele sursa (dinaintea oricarei
* stergeri facute de apelant), pentru recalculul asertiunilor dupa reimport.
FUNCTION FixturaZipEFactura
LOCAL lcIdInc, lcFile, lcSchema, lcSelect, lcOrder, lcgroup, lcFiltru, lcFiltruOriginal, llModParam, llAfiseaza
PRIVATE poFixturaZip
poFixturaZip = NULL
lcIdInc = FixturaIdIncarcareEFactura()
IF EMPTY(m.lcIdInc)
RETURN ''
ENDIF
* date sursa pentru asertiuni, inainte de orice stergere facuta de apelant
IF USED('cFixturaEFactura')
USE IN (SELECT('cFixturaEFactura'))
ENDIF
goExecutor.oExecuta("select id, id_incarcare, xnumar_act, xdata_act, xdata_scad, xtotal_fara_tva, xtotal_tva," + ;
" xtotal_cu_tva, xnume_valuta, tip_mesaj_raspuns, factura_emisa, cod_fiscal_emitent, cod_fiscal_beneficiar," + ;
" nvl(length(detalii),0) as len_detalii," + ;
" (select count(*) from anaf_efactura_detalii d where d.id_efactura = anaf_efactura.id) as nr_linii" + ;
" from anaf_efactura where id_incarcare = '" + m.lcIdInc + "'", 'cFixturaEFactura')
IF !USED('cFixturaEFactura') OR RECCOUNT('cFixturaEFactura') <> 1
RETURN ''
ENDIF
* arhiva zip, acelasi tipar ca AnafeFacturaServer.DownloadDetaliiZip (anaf_efactura.prg)
lcSchema = [id_incarcare V(36), fisier W]
lcSelect = [select id_incarcare, detalii_zip from anaf_efactura where id_incarcare = '] + m.lcIdInc + [']
lcOrder = []
lcgroup = []
lcFiltru = []
lcFiltruOriginal = []
llModParam = .T.
llAfiseaza = .F.
gencursor('poFixturaZip', 'cRegFixturaZip', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal)
poFixturaZip.ca_baza1.afisare()
lcFile = ''
IF USED('cRegFixturaZip') AND RECCOUNT('cRegFixturaZip') = 1
SELECT cRegFixturaZip
GO TOP
lcFile = ADDBS(SYS(2023)) + 'fixtura_zip_efactura_' + m.lcIdInc + '.zip'
STRTOFILE(fisier, m.lcFile)
ENDIF
IF USED('cRegFixturaZip')
USE IN (SELECT('cRegFixturaZip'))
ENDIF
IF EMPTY(m.lcFile) OR !FILE(m.lcFile)
RETURN ''
ENDIF
RETURN m.lcFile
ENDFUNC