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
115 lines
4.5 KiB
Plaintext
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
|