* 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