- import_nota / import_adauga_factura: flux unificat note contabile + articole, sincronizare automata, total factura automat, TVA impartit pe conturile creditoare ale notelor (rundele 1-31) - runda 32: totalurile import_nota pe _label/_textbox din _baza.vcx (Arial 10), fara containerele clb_tx_simplu si fara bifa "Recalculeaza TVA" (recalcul mereu automat); "Sincronizeaza facturile secundare" mutata sub butoane - utile/Teste: harness UI VFP headless (vfp_ui_harness.ps1, ui_harness.prg, precompilare, mock-uri) in radacina; suitele e2e pentru achizitia din import grupate in utile/Teste/achizitie_import/ - docs: flux editare text vcx/scx, testare-ui-vfp si testare-vfp-mcp (mutate din ROAGEST, general valabile), inventar comun, orchestrare subagenti, conventie GO recno, depanare testare VFP Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019DGibQKa5uK4P2TNSFFQNh
928 lines
42 KiB
Plaintext
928 lines
42 KiB
Plaintext
* test_tva_secundare.prg
|
|
* Test UI (runda30) pentru clasa IMPORT_nota (COMUN\clase\ointroduceri.vcx): doua fixuri.
|
|
* Bug 1 (Grid1.cScc.Text1.Valid): daca grila scrie valoarea in introdc.scc INAINTE ca Valid
|
|
* sa ruleze (cazul Enter), garda trebuie sa arme resincronizarea pe baza lui Thisform.nOldVal,
|
|
* indiferent daca campul e deja scris in cursor.
|
|
* Bug 2 (sparge_document/recalc_tva_document): la documentele SECUNDARE (transport/taxe),
|
|
* randurile T (TVA) trebuie regrupate pe creditorii (scc/ascc) randurilor S, proportional cu
|
|
* bazele S per creditor, pastrand totalul T - nu doar la documentul principal.
|
|
*
|
|
* Scenariu (flux REAL, nu Append direct in cursoare):
|
|
* Factura PRINCIPALA (nract 15000, RAJA, 1000 EUR, curs 5.23, TVA pe DVI) + 2 articole
|
|
* (ART-BULD-212 cont 212 baza 900, ART-A8-371 cont 371 baza 100) prin do_adauga_articol() REAL.
|
|
* Factura SECUNDARA (nract 12000, TRANS OIL, 1000 LEI, TVA la furnizor F) - transport, aceleasi
|
|
* articole (baza proportionala). lSpargeSecundare = .T., sincronizeaza().
|
|
* Pas1: stare de baza (S-uri mostenite scc=401, cate un singur T pe fiecare document).
|
|
* Pas2 (Bug2): editez scc pe S(212) al SECUNDAREI 401->404 prin Grid1.cScc, astept timer/fallback,
|
|
* astept 2 T-uri pe secundara (404=189, 401=21 lei).
|
|
* Pas3 (Bug1): pe S(212) al PRINCIPALEI simulez scrierea in cursor INAINTE de Valid (cazul Enter),
|
|
* astept lSyncPending=.T. imediat dupa Valid, apoi 2 T-uri pe principala (404=189, 401=21 EUR).
|
|
* Pas4: persistenta - sincronizeaza() inca o data fara alte editari, splitul ramane identic.
|
|
* Pas5: recalc_tva_document pe secundara cu totalul dublat (2000 lei) - T-urile se recalculeaza
|
|
* proportional (404=378, 401=42), nu ambele la totalul intreg.
|
|
*
|
|
* Vezi test_tva_creditori.prg (sablon) si docs/testare-ui-vfp.md.
|
|
*
|
|
* Rulare (prin harness):
|
|
* powershell -ExecutionPolicy Bypass -File test_tva_secundare.ps1
|
|
|
|
SET SAFETY OFF
|
|
SET TALK OFF
|
|
SET DELETED ON
|
|
SET EXACT ON
|
|
SET CENTURY ON
|
|
SET DATE DMY
|
|
SET DECIMALS TO 4
|
|
SET NULLDISPLAY TO ''
|
|
CLOSE DATABASES
|
|
|
|
PUBLIC gcUILog, gcSyncDir
|
|
gcUILog = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\test_tva_secundare_log.txt"
|
|
gcSyncDir = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\uisync_tva_secundare\"
|
|
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog)
|
|
|
|
ON ERROR DO TfErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
|
ON SHUTDOWN QUIT
|
|
|
|
TRY
|
|
LOCAL gcAppPath, lcPath
|
|
gcAppPath = "D:\ROA\ROAGEST\"
|
|
SET DEFAULT TO (gcAppPath)
|
|
|
|
lcPath = gcAppPath + 'Date;' + gcAppPath + 'Include;' + gcAppPath + 'FERESTRE;' + ;
|
|
gcAppPath + 'GRAFICE;' + gcAppPath + 'CLASE;' + gcAppPath + 'MENIURI;' + ;
|
|
gcAppPath + 'PROGRAME;' + gcAppPath + 'RAPOARTE;' + gcAppPath + 'COMUN;' + ;
|
|
gcAppPath + 'COMUN\CLASE;' + gcAppPath + 'COMUN\FERESTRE;' + gcAppPath + 'COMUN\PROGRAME;' + ;
|
|
gcAppPath + 'COMUN\GRAFICE;' + gcAppPath + 'COMUN\RAPOARTE;' + gcAppPath + 'COMUN\MENIURI;' + ;
|
|
gcAppPath + 'COMUN\UTILE\GRIDEXTRAS;' + gcAppPath + 'COMUN\UTILE\CTL32;' + ;
|
|
gcAppPath + 'COMUN\UTILE\HPDF;' + gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ;
|
|
gcAppPath + 'COMUN\UTILE\WEB;' + gcAppPath + 'COMUN\UTILE\EXCEL;' + ;
|
|
ADDBS(SUBSTR(gcAppPath,1,RAT([\],gcAppPath,2)))+[COMUNROA\]
|
|
SET PATH TO &lcPath ADDITIVE
|
|
DO TfLog WITH 'SET PATH OK'
|
|
|
|
*----- CLASE -----
|
|
SET CLASSLIB TO (gcAppPath + "comun\clase\appwiz") ADDITIVE
|
|
SET CLASSLIB TO GESTIUNI ADDITIVE
|
|
SET CLASSLIB TO CAUT ADDITIVE
|
|
SET CLASSLIB TO BAZA ADDITIVE
|
|
SET CLASSLIB TO comun ADDITIVE
|
|
SET CLASSLIB TO accessibility.vcx ADDITIVE
|
|
SET CLASSLIB TO messagebox ADDITIVE
|
|
SET CLASSLIB TO registry ADDITIVE
|
|
SET CLASSLIB TO cauta_alfa_forms.vcx ADDITIVE
|
|
SET CLASSLIB TO DECABAZA ADDITIVE
|
|
SET CLASSLIB TO onomenclatoare ADDITIVE
|
|
SET CLASSLIB TO stocuri.vcx ADDITIVE
|
|
SET CLASSLIB TO rulaje.vcx ADDITIVE
|
|
SET CLASSLIB TO ointroduceri ADDITIVE
|
|
SET CLASSLIB TO ointroduceri_web ADDITIVE
|
|
SET CLASSLIB TO ointroduceri_depozit ADDITIVE
|
|
SET CLASSLIB TO overificari ADDITIVE
|
|
SET CLASSLIB TO ferestre_oracle ADDITIVE
|
|
SET CLASSLIB TO ferestre_cere_date.vcx ADDITIVE
|
|
SET CLASSLIB TO configurare.vcx ADDITIVE
|
|
SET CLASSLIB TO serii_numere.vcx ADDITIVE
|
|
SET CLASSLIB TO omodificari.vcx ADDITIVE
|
|
SET CLASSLIB TO ocompensari.vcx ADDITIVE
|
|
SET CLASSLIB TO caut_ora ADDITIVE
|
|
SET CLASSLIB TO onote_contabile ADDITIVE
|
|
SET CLASSLIB TO otoolbar ADDITIVE
|
|
SET CLASSLIB TO bon_fisc ADDITIVE
|
|
SET CLASSLIB TO onom_articole ADDITIVE
|
|
SET CLASSLIB TO onom_retete ADDITIVE
|
|
SET CLASSLIB TO orapoarte ADDITIVE
|
|
SET CLASSLIB TO orapoarte_gestiuni ADDITIVE
|
|
SET CLASSLIB TO orapoarte_parametri ADDITIVE
|
|
SET CLASSLIB TO ONOM_CURS ADDITIVE
|
|
SET CLASSLIB TO ctl32_statusbar_fals.vcx ADDITIVE
|
|
SET CLASSLIB TO ctl32_common.vcx ADDITIVE
|
|
SET CLASSLIB TO ctl32_structs.vcx ADDITIVE
|
|
SET CLASSLIB TO ctl32_progressbar.vcx ADDITIVE
|
|
SET CLASSLIB TO ctl32_balloontip.vcx ADDITIVE
|
|
SET CLASSLIB TO ocriterii.vcx ADDITIVE
|
|
SET CLASSLIB TO oavize.vcx ADDITIVE
|
|
SET CLASSLIB TO onomenclatoare2 ADDITIVE
|
|
SET CLASSLIB TO wwdialogs.vcx ADDITIVE
|
|
SET CLASSLIB TO oimportxml.vcx ADDITIVE
|
|
SET CLASSLIB TO excelxml.vcx ADDITIVE
|
|
SET CLASSLIB TO orapoarte_obinv.vcx ADDITIVE
|
|
DO TfLog WITH 'SET CLASSLIB OK'
|
|
|
|
*----- PROCEDURI (mock amessagebox + mock cauta_nom_articole PRIMELE, ui_harness la final) -----
|
|
SET PROCEDURE TO PROCEDURI
|
|
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
|
|
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_cauta_nom_articole.prg" ADDITIVE
|
|
SET PROCEDURE TO acces_meniu ADDITIVE
|
|
SET PROCEDURE TO cauta_alfa ADDITIVE
|
|
SET PROCEDURE TO pmenu ADDITIVE
|
|
SET PROCEDURE TO proceduri_comune ADDITIVE
|
|
SET PROCEDURE TO quitapp ADDITIVE
|
|
SET PROCEDURE TO init_program ADDITIVE
|
|
SET PROCEDURE TO oproceduri_listari.prg ADDITIVE
|
|
SET PROCEDURE TO oproceduri_configurare.prg ADDITIVE
|
|
SET PROCEDURE TO oproceduri_articole.prg ADDITIVE
|
|
SET PROCEDURE TO oproceduri_retete.prg ADDITIVE
|
|
SET PROCEDURE TO orapoarte.prg ADDITIVE
|
|
SET PROCEDURE TO mesaje ADDITIVE
|
|
SET PROCEDURE TO oserii_numere.prg ADDITIVE
|
|
SET PROCEDURE TO oexport.prg ADDITIVE
|
|
SET PROCEDURE TO wwConfig.prg ADDITIVE
|
|
SET PROCEDURE TO proceduri_rapoarte.prg ADDITIVE
|
|
SET PROCEDURE TO OPROCEDURI_CURS.PRG ADDITIVE
|
|
SET PROCEDURE TO validare.prg ADDITIVE
|
|
SET PROCEDURE TO GENCURSOR.PRG ADDITIVE
|
|
SET PROCEDURE TO OPROCEDURI_COMUNE.PRG ADDITIVE
|
|
SET PROCEDURE TO OINIT_OPTIUNI.PRG ADDITIVE
|
|
SET PROCEDURE TO updateserver.prg ADDITIVE
|
|
SET PROCEDURE TO oinainte_de.prg ADDITIVE
|
|
SET PROCEDURE TO ooperatii_comune.prg ADDITIVE
|
|
SET PROCEDURE TO Ocompensari.PRG ADDITIVE
|
|
SET PROCEDURE TO OPROCEDURI_aMS.PRG ADDITIVE
|
|
SET PROCEDURE TO oproceduri_rulaje ADDITIVE
|
|
SET PROCEDURE TO oproceduri_stocuri ADDITIVE
|
|
SET PROCEDURE TO OINTRODUCERI ADDITIVE
|
|
SET PROCEDURE TO oHeader.prg ADDITIVE
|
|
SET PROCEDURE TO proceduri_excel.PRG ADDITIVE
|
|
SET PROCEDURE TO onomenclatoare.PRG ADDITIVE
|
|
SET PROCEDURE TO osecurity ADDITIVE
|
|
SET PROCEDURE TO ocautare ADDITIVE
|
|
SET PROCEDURE TO orefaceri ADDITIVE
|
|
SET PROCEDURE TO ofacturare_comun.PRG ADDITIVE
|
|
SET PROCEDURE TO ofacturare_stoc.PRG ADDITIVE
|
|
SET PROCEDURE TO oproceduri_casademarcat ADDITIVE
|
|
SET PROCEDURE TO oproceduri_casa_marcat_e500 ADDITIVE
|
|
SET PROCEDURE TO oproceduri_casa_marcat_mp500 ADDITIVE
|
|
SET PROCEDURE TO oproceduri_util.prg ADDITIVE
|
|
SET PROCEDURE TO wwxmlhttp.prg ADDITIVE
|
|
SET PROCEDURE TO ini.prg ADDITIVE
|
|
SET PROCEDURE TO odocumente.prg ADDITIVE
|
|
SET PROCEDURE TO regex.prg ADDITIVE
|
|
SET PROCEDURE TO wwutils.prg ADDITIVE
|
|
SET PROCEDURE TO inchidere_k ADDITIVE
|
|
SET PROCEDURE TO iniacces.prg ADDITIVE
|
|
SET PROCEDURE TO oupdate.prg ADDITIVE
|
|
SET PROCEDURE TO procese.prg ADDITIVE
|
|
SET PROCEDURE TO version.prg ADDITIVE
|
|
SET PROCEDURE TO xmlaccess.prg ADDITIVE
|
|
SET PROCEDURE TO xmlparser.prg ADDITIVE
|
|
SET PROCEDURE TO filebringer.prg ADDITIVE
|
|
SET PROCEDURE TO wwcodeupdate.prg ADDITIVE
|
|
SET PROCEDURE TO wwhttp.prg ADDITIVE
|
|
SET PROCEDURE TO xdate.prg ADDITIVE
|
|
SET PROCEDURE TO ofacturare.prg ADDITIVE
|
|
SET PROCEDURE TO oproceduri_obinv.prg ADDITIVE
|
|
SET PROCEDURE TO oproceduri_facturare.prg ADDITIVE
|
|
SET PROCEDURE TO email.prg ADDITIVE
|
|
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\ui_harness.prg" ADDITIVE
|
|
DO TfLog WITH 'SET PROCEDURE OK'
|
|
|
|
*----- Globale -----
|
|
PUBLIC gnPc, gnPval, gnPcant, gnPpret, gnPPretval, gnPCurs, gnPVal, gnPPretV, gnPPretVal
|
|
STORE 2 TO gnPc, gnPval, gnPVal
|
|
gnPcant = 3
|
|
STORE 4 TO gnPpret, gnPPretval, gnPPretVal, gnPPretV, gnPCurs
|
|
PUBLIC gl406, gcS, gnAn, gnLuna, gnIdFirma, gnIdSucursala, gcAcces, gcFirma
|
|
gl406 = .T.
|
|
gcS = 'CONTAFIN'
|
|
gnAn = YEAR(DATE())
|
|
gnLuna = MONTH(DATE())
|
|
gnIdFirma = 110
|
|
gnIdSucursala = 110
|
|
gcAcces = "1;2;3;4;5;6;7;8;"
|
|
gcFirma = gcS
|
|
PUBLIC nror(65000)
|
|
|
|
PUBLIC gnButon
|
|
STORE 2 TO gnButon
|
|
|
|
PUBLIC goExecutor, goApp
|
|
goExecutor = CREATEOBJECT('dummyexecutor')
|
|
goApp = CREATEOBJECT('dummyapp')
|
|
|
|
*----- poAct: antetul notei; dialogul mosteneste din el la Init -----
|
|
PUBLIC poAct
|
|
poAct = CREATEOBJECT('Custom')
|
|
poAct.AddProperty('nume_val', '')
|
|
poAct.AddProperty('curs', 1)
|
|
poAct.AddProperty('proc_tva', 1.21)
|
|
poAct.AddProperty('nnir', 0)
|
|
poAct.AddProperty('id_valuta', 0)
|
|
poAct.AddProperty('id_fdoc', 1)
|
|
poAct.AddProperty('fdoc', 'Factura')
|
|
poAct.AddProperty('id_partc', 500)
|
|
poAct.AddProperty('partc', 'FURNIZOR ANTET SRL')
|
|
poAct.AddProperty('serie_act', '')
|
|
poAct.AddProperty('dataact', DATE())
|
|
poAct.AddProperty('tva_incasare', 0)
|
|
poAct.AddProperty('id_set', 1)
|
|
poAct.AddProperty('id_gestin', 1)
|
|
|
|
*----- jtva_coloane2 (explicatii TVA): achizitii interne 21% - perechea folosita de sablon -----
|
|
IF USED('jtva_coloane2')
|
|
USE IN ('jtva_coloane2')
|
|
ENDIF
|
|
CREATE CURSOR jtva_coloane2 (ordine N(8), id_jtva_coloana N(14), denumire C(100), ;
|
|
jc N(1), jv N(1), afisat N(1), coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14))
|
|
INSERT INTO jtva_coloane2 VALUES (0, 0, '', 0, 0, 1, '', '', 0, 0)
|
|
INSERT INTO jtva_coloane2 VALUES (1, 208, 'ACH. INT. 21%', 1, 0, 1, 'RO21B', 'RO21T', 21, 209)
|
|
INSERT INTO jtva_coloane2 VALUES (2, 209, 'TVA ACH. INT. 21%', 1, 0, 1, 'RO21T', '', 21, 0)
|
|
|
|
*----- saft_taxtable: coduri reale (vsaft_taxtable) - achizitii interne 21% -----
|
|
IF USED('saft_taxtable')
|
|
USE IN ('saft_taxtable')
|
|
ENDIF
|
|
CREATE CURSOR saft_taxtable (taxname C(250) NULL, typename C(250) NULL, taxcode N(6) NULL, ;
|
|
taxtype N(3) NULL, descriere C(250) NULL, tip C(100) NULL, descriere_tip C(250) NULL, ;
|
|
procent_taxa N(7,2) NULL, procent_prorata N(7,2) NULL, inactiv N(1) NULL, tva N(1) NULL, ;
|
|
wht N(1) NULL, tva_achizitii N(1) NULL, tva_livrari N(1) NULL)
|
|
INDEX ON taxcode TAG taxcode
|
|
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
|
VALUES ('', 0, '', 0, 1, 1, 1, 1)
|
|
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
|
VALUES ('301104-Achizitii de bunuri si servicii taxabile cu cota de 21%, altele decat importurile si cele supuse masurilor de simplificare', 301104, '', 21, 1, 0, 1, 0)
|
|
|
|
*----- introdc (RecordSource Grid1) - porneste GOL, ca in fluxul real -----
|
|
DO CreeazaIntrodc WITH 'introdc'
|
|
|
|
*-- INDEX ord_doc (docs/testare-ui-vfp.md capcana p): fara el, sincronizari repetate cu 2+
|
|
*-- documente (principala+secundara) pot pierde identitatea documentului "principal" dupa
|
|
*-- ce S-urile sunt sterse/reasezate la coada de fiecare sparge_document().
|
|
SELECT introdc
|
|
INDEX ON STR(NVL(nr_doc,0),8) + ICASE(tip_rand='B','1', tip_rand='S','2', tip_rand='T','3', tip_rand='D','4', '5') + PADR(NVL(scd,''),10) TAG ord_doc
|
|
SET ORDER TO ord_doc
|
|
|
|
*----- introdc_sablon: perechea-sablon (B 371/401 + T 4426/401) pe care do_adauga_factura o
|
|
* cloneaza (21%, ACH. INT. 21%). -----
|
|
DO CreeazaIntrodc WITH 'introdc_sablon'
|
|
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
|
|
id_jtva_coloana, ptva, explicatie_tva) ;
|
|
VALUES ('371', '401', 1, 1, 1, .T., 'B', 208, 21, 'ACH. INT. 21%')
|
|
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
|
|
id_jtva_coloana, ptva, explicatie_tva) ;
|
|
VALUES ('4426', '401', 1, 2, 1, .T., 'T', 209, 21, 'TVA ACH. INT. 21%')
|
|
GO TOP IN introdc_sablon
|
|
|
|
*----- rul_temp cu 1 rand INAINTE de instantiere (capcana k) - structura FIDELA VRUL. -----
|
|
DO CreeazaRulTemp
|
|
INSERT INTO rul_temp (denumire, codmat, cant, pret, pret_lei, cont, cota_tva) ;
|
|
VALUES ('PLACEHOLDER', 'PH', 1, 1, 1, '371', 21)
|
|
|
|
DO TfLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F.) - lIntern=.F. (import)'
|
|
SELECT introdc
|
|
PUBLIC goObj
|
|
goObj = CREATEOBJECT('IMPORT_nota', .F.)
|
|
IF VARTYPE(goObj) <> 'O'
|
|
DO TfLog WITH 'FAIL: instantiere import_nota'
|
|
DO HarnessDone WITH 'done-error'
|
|
QUIT
|
|
ENDIF
|
|
goObj.lDialogAratat = .T.
|
|
goObj.oact = poAct
|
|
goObj.WindowType = 0
|
|
goObj.Visible = .T.
|
|
goObj.Show()
|
|
goObj.WindowState = 2
|
|
DOEVENTS FORCE
|
|
|
|
*-- golesc placeholder-ul cu ZAP (nu DELETE ALL, capcana k)
|
|
SELECT rul_temp
|
|
ZAP
|
|
goObj.gridart.Refresh()
|
|
DOEVENTS FORCE
|
|
|
|
*========================= DOC PRINCIPAL: FACTURA 15000, 1000 EUR, curs 5.23, TVA pe DVI =========================
|
|
PUBLIC goDlg, goT
|
|
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
|
|
goDlg.cFelDoc = 'Factura'
|
|
goDlg.nIdFdoc = 1
|
|
goDlg.nNract = 15000
|
|
goDlg.dDataAct = DATE()
|
|
goDlg.nIdPartener = 700
|
|
goDlg.cPartener = 'RAJA'
|
|
goDlg.cExplicatia = 'Factura test TVA secundare - principala'
|
|
goDlg.nSuma = 1000
|
|
goDlg.nSumaLei = 0
|
|
goDlg.nCurs = 5.23
|
|
goDlg.nIdValuta = 978
|
|
goDlg.cValuta = 'EUR'
|
|
*-- ACH. INT. 21% (id 208), TVA pe DVI (D)
|
|
goDlg.nIdExplicatieTva = 208
|
|
goDlg.cExplicatieTva = 'ACH. INT. 21%'
|
|
goDlg.optTipTva.Value = 2 && D = DVI
|
|
goDlg.chkInValutaCont.Value = 1
|
|
goDlg.chkParticipaValuta.Value = 1
|
|
*-- date DVI
|
|
goDlg.cSerieDvi = ''
|
|
goDlg.nNractDvi = 101
|
|
goDlg.dDviData = DATE()
|
|
goDlg.nIdFdocDVI = 2
|
|
goDlg.cFelDocDvi = 'DVI'
|
|
goDlg.nDviIdPartener = 800
|
|
goDlg.cDviPartener = 'BIROUL VAMAL'
|
|
goDlg.nDviTvaVal = 210
|
|
goDlg.nDviTvaLei = ROUND(210*5.23,2)
|
|
goDlg.WindowType = 0
|
|
goDlg.Visible = .T.
|
|
goDlg.Show()
|
|
DOEVENTS FORCE
|
|
DO TfLog WITH 'DOC principal: valideaza (pe dialog) = ' + TRANSFORM(goDlg.valideaza())
|
|
DO ConstruiesteToDlg
|
|
DO TfLog WITH 'DOC principal: do_adauga_factura = ' + TRANSFORM(goObj.do_adauga_factura(goT))
|
|
goDlg.Hide()
|
|
DOEVENTS FORCE
|
|
|
|
LOCAL llB1, llT1
|
|
SELECT introdc
|
|
LOCATE FOR nract = 15000 AND INLIST(tip_rand,'B','S')
|
|
llB1 = FOUND()
|
|
LOCATE FOR nr_doc = 1 AND tip_rand == 'T'
|
|
llT1 = FOUND()
|
|
IF llB1 AND llT1
|
|
DO TfLog WITH 'PASS: factura principala 15000 adaugata (B+T)'
|
|
ELSE
|
|
DO TfLog WITH 'FAIL: factura principala 15000 - B?=' + TRANSFORM(llB1) + ' T?=' + TRANSFORM(llT1)
|
|
ENDIF
|
|
|
|
*========================= ADAUGARE 2 ARTICOLE PRIN FLUXUL REAL: do_adauga_articol() =========================
|
|
*-- ART-BULD-212 (cont 212, baza 900) + ART-A8-371 (cont 371, baza 100)
|
|
PUBLIC gcMockArtCodmat
|
|
gcMockArtCodmat = 'ART-BULD-212'
|
|
goObj.do_adauga_articol()
|
|
DOEVENTS FORCE
|
|
SELECT rul_temp
|
|
LOCATE FOR ALLTRIM(codmat) == 'ART-BULD-212'
|
|
IF FOUND()
|
|
REPLACE cant WITH 1, pret_val WITH 900, pretd WITH 900, pret WITH ROUND(900*5.23,gnPc), pret_lei WITH pret
|
|
DO TfLog WITH 'articol 1 (ART-BULD-212, cont 212) adaugat prin do_adauga_articol() REAL, baza 900'
|
|
ELSE
|
|
DO TfLog WITH 'FAIL: ART-BULD-212 nu a fost gasit in rul_temp dupa do_adauga_articol()'
|
|
ENDIF
|
|
|
|
gcMockArtCodmat = 'ART-A8-371'
|
|
goObj.do_adauga_articol()
|
|
DOEVENTS FORCE
|
|
SELECT rul_temp
|
|
LOCATE FOR ALLTRIM(codmat) == 'ART-A8-371'
|
|
IF FOUND()
|
|
REPLACE cant WITH 1, pret_val WITH 100, pretd WITH 100, pret WITH ROUND(100*5.23,gnPc), pret_lei WITH pret
|
|
DO TfLog WITH 'articol 2 (ART-A8-371, cont 371) adaugat prin do_adauga_articol() REAL, baza 100'
|
|
ELSE
|
|
DO TfLog WITH 'FAIL: ART-A8-371 nu a fost gasit in rul_temp dupa do_adauga_articol()'
|
|
ENDIF
|
|
goObj.gridart.Refresh()
|
|
DOEVENTS FORCE
|
|
|
|
*========================= DOC SECUNDAR: FACTURA 12000 (transport), 1000 LEI, TVA la furnizor =========================
|
|
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
|
|
goDlg.cFelDoc = 'Factura'
|
|
goDlg.nIdFdoc = 1
|
|
goDlg.nNract = 12000
|
|
goDlg.dDataAct = DATE()
|
|
goDlg.nIdPartener = 710
|
|
goDlg.cPartener = 'TRANS OIL'
|
|
goDlg.cExplicatia = 'Factura test TVA secundare - transport'
|
|
goDlg.nSuma = 1000
|
|
goDlg.nSumaLei = 0
|
|
goDlg.nCurs = 0
|
|
goDlg.nIdExplicatieTva = 208
|
|
goDlg.cExplicatieTva = 'ACH. INT. 21%'
|
|
goDlg.optTipTva.Value = 1 && F = furnizor
|
|
goDlg.chkInValutaCont.Value = 0
|
|
goDlg.chkParticipaValuta.Value = 1
|
|
goDlg.WindowType = 0
|
|
goDlg.Visible = .T.
|
|
goDlg.Show()
|
|
DOEVENTS FORCE
|
|
DO TfLog WITH 'DOC secundar: valideaza (pe dialog) = ' + TRANSFORM(goDlg.valideaza())
|
|
DO ConstruiesteToDlg
|
|
DO TfLog WITH 'DOC secundar: do_adauga_factura = ' + TRANSFORM(goObj.do_adauga_factura(goT))
|
|
goDlg.Hide()
|
|
DOEVENTS FORCE
|
|
|
|
LOCAL llB2, llT2
|
|
SELECT introdc
|
|
LOCATE FOR nract = 12000 AND INLIST(tip_rand,'B','S')
|
|
llB2 = FOUND()
|
|
LOCATE FOR nract = 12000 AND tip_rand == 'T'
|
|
llT2 = FOUND()
|
|
IF llB2 AND llT2
|
|
DO TfLog WITH 'PASS: factura secundara 12000 adaugata (B+T)'
|
|
ELSE
|
|
DO TfLog WITH 'FAIL: factura secundara 12000 - B?=' + TRANSFORM(llB2) + ' T?=' + TRANSFORM(llT2)
|
|
ENDIF
|
|
|
|
*========================= PAS 0: setup gata, activez spargerea secundarelor si sincronizez =========================
|
|
goObj.lSpargeSecundare = .T.
|
|
goObj.sincronizeaza()
|
|
DOEVENTS FORCE
|
|
goObj.grid1.Refresh()
|
|
DOEVENTS FORCE
|
|
|
|
DO TfLog WITH 'DIAG dump introdc dupa sincronizare#1 (stare de baza):'
|
|
DO DumpIntrodc
|
|
|
|
*-- VERIFICARE stare de baza: principala sparta S(212)=900 S(371)=100 (scc=401 mostenit), 1 T
|
|
*-- (scc=401, suma_val=210 EUR); secundara sparta S(212)=900 lei S(371)=100 lei (scc=401), 1 T
|
|
*-- (scc=401, suma=210 lei, 21% din 1000)
|
|
LOCAL llS212p, llS371p, lcS212SccP, lcS371SccP, lnCntTp, lnTValP
|
|
SELECT introdc
|
|
LOCATE FOR tip_rand == 'S' AND ALLTRIM(scd) == '212' AND nract = 15000
|
|
llS212p = FOUND()
|
|
IF llS212p
|
|
lcS212SccP = ALLTRIM(NVL(scc,''))
|
|
ENDIF
|
|
LOCATE FOR tip_rand == 'S' AND ALLTRIM(scd) == '371' AND nract = 15000
|
|
llS371p = FOUND()
|
|
IF llS371p
|
|
lcS371SccP = ALLTRIM(NVL(scc,''))
|
|
ENDIF
|
|
COUNT FOR tip_rand == 'T' AND ALLTRIM(scd) == '4426' AND nr_doc = 1 TO lnCntTp
|
|
LOCATE FOR tip_rand == 'T' AND ALLTRIM(scd) == '4426' AND nr_doc = 1
|
|
lnTValP = suma_val
|
|
IF llS212p AND llS371p AND lcS212SccP == '401' AND lcS371SccP == '401' AND lnCntTp = 1 AND ABS(lnTValP - 210) < 0.01
|
|
DO TfLog WITH 'PASS pas0 principala: S212.scc=401 S371.scc=401, 1 T, suma_val=' + TRANSFORM(lnTValP) + ' (astept 210)'
|
|
ELSE
|
|
DO TfLog WITH 'FAIL pas0 principala: S212.scc=' + lcS212SccP + ' S371.scc=' + lcS371SccP + ' nrT=' + TRANSFORM(lnCntTp) + ' T.suma_val=' + TRANSFORM(lnTValP) + ' (astept 401/401/1/210)'
|
|
ENDIF
|
|
|
|
LOCAL llS212s, llS371s, lcS212SccS, lcS371SccS, lnS212SumaS, lnS371SumaS, lnCntTs, lnTSumaS
|
|
SELECT introdc
|
|
LOCATE FOR tip_rand == 'S' AND ALLTRIM(scd) == '212' AND nract = 12000
|
|
llS212s = FOUND()
|
|
IF llS212s
|
|
lcS212SccS = ALLTRIM(NVL(scc,''))
|
|
lnS212SumaS = suma
|
|
ENDIF
|
|
LOCATE FOR tip_rand == 'S' AND ALLTRIM(scd) == '371' AND nract = 12000
|
|
llS371s = FOUND()
|
|
IF llS371s
|
|
lcS371SccS = ALLTRIM(NVL(scc,''))
|
|
lnS371SumaS = suma
|
|
ENDIF
|
|
COUNT FOR tip_rand == 'T' AND ALLTRIM(scd) == '4426' AND nract = 12000 TO lnCntTs
|
|
LOCATE FOR tip_rand == 'T' AND ALLTRIM(scd) == '4426' AND nract = 12000
|
|
lnTSumaS = suma
|
|
IF llS212s AND llS371s AND lcS212SccS == '401' AND lcS371SccS == '401' AND ABS(lnS212SumaS - 900) < 0.01 ;
|
|
AND ABS(lnS371SumaS - 100) < 0.01 AND lnCntTs = 1 AND ABS(lnTSumaS - 210) < 0.01
|
|
DO TfLog WITH 'PASS pas0 secundara: S212=' + TRANSFORM(lnS212SumaS) + ' S371=' + TRANSFORM(lnS371SumaS) + ' scc=401/401, 1 T, suma=' + TRANSFORM(lnTSumaS) + ' (astept 900/100/1/210)'
|
|
ELSE
|
|
DO TfLog WITH 'FAIL pas0 secundara: S212=' + TRANSFORM(lnS212SumaS) + '(scc=' + lcS212SccS + ') S371=' + TRANSFORM(lnS371SumaS) + '(scc=' + lcS371SccS + ') nrT=' + TRANSFORM(lnCntTs) + ' T.suma=' + TRANSFORM(lnTSumaS)
|
|
ENDIF
|
|
|
|
*========================= PAS 0 (HarnessStep 0): stare de baza dupa sincronizare#1 =========================
|
|
DO HarnessStep WITH 0, 'stare_baza: principala T.suma_val=' + TRANSFORM(lnTValP) + ' secundara S212=' + TRANSFORM(lnS212SumaS) + ' S371=' + TRANSFORM(lnS371SumaS) + ' T.suma=' + TRANSFORM(lnTSumaS)
|
|
|
|
*========================= PAS 1 (BUG 2): editez scc pe S(212) al SECUNDAREI, 401 -> 404 =========================
|
|
SELECT introdc
|
|
LOCATE FOR tip_rand == 'S' AND ALLTRIM(scd) == '212' AND nract = 12000
|
|
GO RECNO()
|
|
*-- GotFocus REAL: seteaza Thisform.nOldVal = valoarea curenta a celulei
|
|
goObj.Grid1.cScc.Text1.Value = scc
|
|
goObj.Grid1.cScc.Text1.GotFocus()
|
|
DO TfLog WITH 'dupa GotFocus real pe S(212) secundara: Thisform.nOldVal=' + TRANSFORM(goObj.nOldVal) + ' (astept 401)'
|
|
goObj.Grid1.cScc.Text1.Value = '404'
|
|
TRY
|
|
goObj.Grid1.cScc.Text1.Valid()
|
|
DO TfLog WITH 'PASS apel REAL: Grid1.cScc.Text1.Valid() executat pe S(212) secundara'
|
|
CATCH TO loExc1
|
|
DO TfLog WITH 'PAS1 EROARE ' + TRANSFORM(loExc1.ErrorNo) + ' [' + loExc1.Message + '] in ' + loExc1.Procedure + ':' + TRANSFORM(loExc1.LineNo) + ' (' + loExc1.LineContents + ')'
|
|
ENDTRY
|
|
|
|
*-- verific armarea sincronizarii amanate, apoi las timerul sa traga (fallback direct daca nu apuca)
|
|
IF goObj.lSyncPending
|
|
DO TfLog WITH 'PASS pas1: goObj.lSyncPending=.T. dupa Valid pe S(212) secundara'
|
|
ELSE
|
|
DO TfLog WITH 'FAIL pas1: goObj.lSyncPending=.F. dupa Valid pe S(212) secundara (astept .T.)'
|
|
ENDIF
|
|
|
|
LOCAL i
|
|
FOR i = 1 TO 50
|
|
DOEVENTS FORCE
|
|
IF !goObj.lSyncPending
|
|
EXIT
|
|
ENDIF
|
|
ENDFOR
|
|
IF goObj.lSyncPending
|
|
DO TfLog WITH 'INFO: tmrSync nu a tras sub DOEVENTS - fallback apel direct goObj.tmrSync.Timer()'
|
|
goObj.tmrSync.Timer()
|
|
ENDIF
|
|
goObj.grid1.Refresh()
|
|
DOEVENTS FORCE
|
|
|
|
DO TfLog WITH 'DIAG dump introdc dupa scc secundara 401->404 pe S(212) + resincronizare:'
|
|
DO DumpIntrodc
|
|
|
|
*-- VERIFICARE bug2: secundara are acum 2 T-uri 4426 - scc=404 (baza 212=900 lei) suma=189,
|
|
*-- scc=401 (baza 371=100 lei) suma=21; principala ramane neschimbata (1 T, suma_val=210)
|
|
LOCAL llT404s1, llT401s1, lnT404ValS1, lnT401ValS1, lnCntTs1
|
|
SELECT introdc
|
|
COUNT FOR tip_rand == 'T' AND ALLTRIM(scd) == '4426' AND nract = 12000 TO lnCntTs1
|
|
LOCATE FOR tip_rand == 'T' AND ALLTRIM(scd) == '4426' AND nract = 12000 AND ALLTRIM(NVL(scc,'')) == '404'
|
|
llT404s1 = FOUND()
|
|
IF llT404s1
|
|
lnT404ValS1 = suma
|
|
ENDIF
|
|
LOCATE FOR tip_rand == 'T' AND ALLTRIM(scd) == '4426' AND nract = 12000 AND ALLTRIM(NVL(scc,'')) == '401'
|
|
llT401s1 = FOUND()
|
|
IF llT401s1
|
|
lnT401ValS1 = suma
|
|
ENDIF
|
|
IF lnCntTs1 = 2 AND llT404s1 AND llT401s1 AND ABS(lnT404ValS1 - 189) < 0.01 AND ABS(lnT401ValS1 - 21) < 0.01
|
|
DO TfLog WITH 'PASS pas1 bug2 secundara regrupata: T(scc=404).suma=' + TRANSFORM(lnT404ValS1) + ' (astept 189) T(scc=401).suma=' + TRANSFORM(lnT401ValS1) + ' (astept 21)'
|
|
ELSE
|
|
DO TfLog WITH 'FAIL pas1 bug2 secundara regrupata: nrT=' + TRANSFORM(lnCntTs1) + ' T404?=' + TRANSFORM(llT404s1) + '(suma=' + TRANSFORM(IIF(llT404s1,lnT404ValS1,-1)) + ') T401?=' + TRANSFORM(llT401s1) + '(suma=' + TRANSFORM(IIF(llT401s1,lnT401ValS1,-1)) + ')'
|
|
ENDIF
|
|
|
|
LOCAL lnCntTp1, lnTValP1
|
|
COUNT FOR tip_rand == 'T' AND ALLTRIM(scd) == '4426' AND nr_doc = 1 TO lnCntTp1
|
|
LOCATE FOR tip_rand == 'T' AND ALLTRIM(scd) == '4426' AND nr_doc = 1
|
|
lnTValP1 = suma_val
|
|
IF lnCntTp1 = 1 AND ABS(lnTValP1 - 210) < 0.01
|
|
DO TfLog WITH 'PASS pas1 principala neschimbata: 1 T, suma_val=' + TRANSFORM(lnTValP1) + ' (astept 210)'
|
|
ELSE
|
|
DO TfLog WITH 'FAIL pas1 principala neschimbata: nrT=' + TRANSFORM(lnCntTp1) + ' T.suma_val=' + TRANSFORM(lnTValP1) + ' (astept 1/210)'
|
|
ENDIF
|
|
|
|
*========================= PAS 1 (HarnessStep 1): bug2 regrupare secundara =========================
|
|
DO HarnessStep WITH 1, 'bug2_regrupare_secundara: T(404).suma=' + TRANSFORM(IIF(llT404s1,lnT404ValS1,-1)) + ' T(401).suma=' + TRANSFORM(IIF(llT401s1,lnT401ValS1,-1)) + ' principala.T.suma_val=' + TRANSFORM(lnTValP1)
|
|
|
|
*========================= PAS 2 (BUG 1): S(212) al PRINCIPALEI - scrierea in cursor INAINTE de Valid =========================
|
|
SELECT introdc
|
|
LOCATE FOR tip_rand == 'S' AND ALLTRIM(scd) == '212' AND nract = 15000
|
|
GO RECNO()
|
|
*-- GotFocus REAL: seteaza Thisform.nOldVal
|
|
goObj.Grid1.cScc.Text1.Value = scc
|
|
goObj.Grid1.cScc.Text1.GotFocus()
|
|
DO TfLog WITH 'dupa GotFocus real pe S(212) principala: Thisform.nOldVal=' + TRANSFORM(goObj.nOldVal) + ' (astept 401)'
|
|
*-- SIMULEZ scrierea grilei in cursor INAINTE de Valid (cazul Enter, capcana bug1)
|
|
SELECT introdc
|
|
REPLACE scc WITH '404'
|
|
goObj.Grid1.cScc.Text1.Value = '404'
|
|
TRY
|
|
goObj.Grid1.cScc.Text1.Valid()
|
|
DO TfLog WITH 'PASS apel REAL: Grid1.cScc.Text1.Valid() executat pe S(212) principala (dupa scriere anticipata in cursor)'
|
|
CATCH TO loExc2
|
|
DO TfLog WITH 'PAS2 EROARE ' + TRANSFORM(loExc2.ErrorNo) + ' [' + loExc2.Message + '] in ' + loExc2.Procedure + ':' + TRANSFORM(loExc2.LineNo) + ' (' + loExc2.LineContents + ')'
|
|
ENDTRY
|
|
|
|
*-- ASSERT imediat (regresie bug1): pe codul vechi lSyncPending ar fi ramas .F. aici, pentru ca
|
|
*-- garda compara This.Value cu introdc.scc (deja scris) in loc de Thisform.nOldVal
|
|
IF goObj.lSyncPending
|
|
DO TfLog WITH 'PASS pas2 bug1: goObj.lSyncPending=.T. dupa Valid pe S(212) principala (cu scc deja scris in cursor)'
|
|
ELSE
|
|
DO TfLog WITH 'FAIL pas2 bug1: goObj.lSyncPending=.F. dupa Valid pe S(212) principala (regresie - garda veche nu arma sincronizarea)'
|
|
ENDIF
|
|
|
|
FOR i = 1 TO 50
|
|
DOEVENTS FORCE
|
|
IF !goObj.lSyncPending
|
|
EXIT
|
|
ENDIF
|
|
ENDFOR
|
|
IF goObj.lSyncPending
|
|
DO TfLog WITH 'INFO: tmrSync nu a tras sub DOEVENTS - fallback apel direct goObj.tmrSync.Timer()'
|
|
goObj.tmrSync.Timer()
|
|
ENDIF
|
|
goObj.grid1.Refresh()
|
|
DOEVENTS FORCE
|
|
|
|
DO TfLog WITH 'DIAG dump introdc dupa scc principala 401->404 pe S(212) + resincronizare:'
|
|
DO DumpIntrodc
|
|
|
|
*-- VERIFICARE: principala are acum 2 T-uri 4426 - scc=404 (baza 212=900 EUR) suma_val=189,
|
|
*-- scc=401 (baza 371=100 EUR) suma_val=21; secundara ramane 189/21 lei neschimbata
|
|
LOCAL llT404p2, llT401p2, lnT404ValP2, lnT401ValP2, lnCntTp2
|
|
SELECT introdc
|
|
COUNT FOR tip_rand == 'T' AND ALLTRIM(scd) == '4426' AND nr_doc = 1 TO lnCntTp2
|
|
LOCATE FOR tip_rand == 'T' AND ALLTRIM(scd) == '4426' AND nr_doc = 1 AND ALLTRIM(NVL(scc,'')) == '404'
|
|
llT404p2 = FOUND()
|
|
IF llT404p2
|
|
lnT404ValP2 = suma_val
|
|
ENDIF
|
|
LOCATE FOR tip_rand == 'T' AND ALLTRIM(scd) == '4426' AND nr_doc = 1 AND ALLTRIM(NVL(scc,'')) == '401'
|
|
llT401p2 = FOUND()
|
|
IF llT401p2
|
|
lnT401ValP2 = suma_val
|
|
ENDIF
|
|
IF lnCntTp2 = 2 AND llT404p2 AND llT401p2 AND ABS(lnT404ValP2 - 189) < 0.01 AND ABS(lnT401ValP2 - 21) < 0.01
|
|
DO TfLog WITH 'PASS pas2 bug1 principala regrupata: T(scc=404).suma_val=' + TRANSFORM(lnT404ValP2) + ' (astept 189) T(scc=401).suma_val=' + TRANSFORM(lnT401ValP2) + ' (astept 21)'
|
|
ELSE
|
|
DO TfLog WITH 'FAIL pas2 bug1 principala regrupata: nrT=' + TRANSFORM(lnCntTp2) + ' T404?=' + TRANSFORM(llT404p2) + '(suma_val=' + TRANSFORM(IIF(llT404p2,lnT404ValP2,-1)) + ') T401?=' + TRANSFORM(llT401p2) + '(suma_val=' + TRANSFORM(IIF(llT401p2,lnT401ValP2,-1)) + ')'
|
|
ENDIF
|
|
|
|
LOCAL llT404s2, llT401s2, lnT404ValS2, lnT401ValS2, lnCntTs2
|
|
COUNT FOR tip_rand == 'T' AND ALLTRIM(scd) == '4426' AND nract = 12000 TO lnCntTs2
|
|
LOCATE FOR tip_rand == 'T' AND ALLTRIM(scd) == '4426' AND nract = 12000 AND ALLTRIM(NVL(scc,'')) == '404'
|
|
llT404s2 = FOUND()
|
|
IF llT404s2
|
|
lnT404ValS2 = suma
|
|
ENDIF
|
|
LOCATE FOR tip_rand == 'T' AND ALLTRIM(scd) == '4426' AND nract = 12000 AND ALLTRIM(NVL(scc,'')) == '401'
|
|
llT401s2 = FOUND()
|
|
IF llT401s2
|
|
lnT401ValS2 = suma
|
|
ENDIF
|
|
IF lnCntTs2 = 2 AND llT404s2 AND llT401s2 AND ABS(lnT404ValS2 - 189) < 0.01 AND ABS(lnT401ValS2 - 21) < 0.01
|
|
DO TfLog WITH 'PASS pas2 secundara neschimbata: T(404).suma=' + TRANSFORM(lnT404ValS2) + ' T(401).suma=' + TRANSFORM(lnT401ValS2) + ' (astept 189/21)'
|
|
ELSE
|
|
DO TfLog WITH 'FAIL pas2 secundara neschimbata: nrT=' + TRANSFORM(lnCntTs2) + ' T404?=' + TRANSFORM(llT404s2) + '(suma=' + TRANSFORM(IIF(llT404s2,lnT404ValS2,-1)) + ') T401?=' + TRANSFORM(llT401s2) + '(suma=' + TRANSFORM(IIF(llT401s2,lnT401ValS2,-1)) + ')'
|
|
ENDIF
|
|
|
|
*========================= PAS 2 (HarnessStep 2): bug1 garda + regrupare principala =========================
|
|
DO HarnessStep WITH 2, 'bug1_garda_scc: principala T(404)=' + TRANSFORM(IIF(llT404p2,lnT404ValP2,-1)) + ' T(401)=' + TRANSFORM(IIF(llT401p2,lnT401ValP2,-1)) + ' secundara T(404)=' + TRANSFORM(IIF(llT404s2,lnT404ValS2,-1)) + ' T(401)=' + TRANSFORM(IIF(llT401s2,lnT401ValS2,-1))
|
|
|
|
*========================= PAS 3: persistenta - inca o sincronizare (F5), fara alte editari =========================
|
|
goObj.sincronizeaza()
|
|
DOEVENTS FORCE
|
|
goObj.grid1.Refresh()
|
|
DOEVENTS FORCE
|
|
|
|
DO TfLog WITH 'DIAG dump introdc dupa sincronizare#2 (persistenta):'
|
|
DO DumpIntrodc
|
|
|
|
LOCAL llT404p3, llT401p3, lnT404ValP3, lnT401ValP3, lnCntTp3
|
|
SELECT introdc
|
|
COUNT FOR tip_rand == 'T' AND ALLTRIM(scd) == '4426' AND nr_doc = 1 TO lnCntTp3
|
|
LOCATE FOR tip_rand == 'T' AND ALLTRIM(scd) == '4426' AND nr_doc = 1 AND ALLTRIM(NVL(scc,'')) == '404'
|
|
llT404p3 = FOUND()
|
|
IF llT404p3
|
|
lnT404ValP3 = suma_val
|
|
ENDIF
|
|
LOCATE FOR tip_rand == 'T' AND ALLTRIM(scd) == '4426' AND nr_doc = 1 AND ALLTRIM(NVL(scc,'')) == '401'
|
|
llT401p3 = FOUND()
|
|
IF llT401p3
|
|
lnT401ValP3 = suma_val
|
|
ENDIF
|
|
LOCAL llT404s3, llT401s3, lnT404ValS3, lnT401ValS3, lnCntTs3
|
|
COUNT FOR tip_rand == 'T' AND ALLTRIM(scd) == '4426' AND nract = 12000 TO lnCntTs3
|
|
LOCATE FOR tip_rand == 'T' AND ALLTRIM(scd) == '4426' AND nract = 12000 AND ALLTRIM(NVL(scc,'')) == '404'
|
|
llT404s3 = FOUND()
|
|
IF llT404s3
|
|
lnT404ValS3 = suma
|
|
ENDIF
|
|
LOCATE FOR tip_rand == 'T' AND ALLTRIM(scd) == '4426' AND nract = 12000 AND ALLTRIM(NVL(scc,'')) == '401'
|
|
llT401s3 = FOUND()
|
|
IF llT401s3
|
|
lnT401ValS3 = suma
|
|
ENDIF
|
|
IF lnCntTp3 = 2 AND llT404p3 AND llT401p3 AND ABS(lnT404ValP3 - 189) < 0.01 AND ABS(lnT401ValP3 - 21) < 0.01 ;
|
|
AND lnCntTs3 = 2 AND llT404s3 AND llT401s3 AND ABS(lnT404ValS3 - 189) < 0.01 AND ABS(lnT401ValS3 - 21) < 0.01
|
|
DO TfLog WITH 'PASS pas3 persistenta: splitul ramane identic dupa resincronizare (principala 189/21 EUR, secundara 189/21 lei, ambele pe 404/401)'
|
|
ELSE
|
|
DO TfLog WITH 'FAIL pas3 persistenta: principala T404=' + TRANSFORM(IIF(llT404p3,lnT404ValP3,-1)) + ' T401=' + TRANSFORM(IIF(llT401p3,lnT401ValP3,-1)) + ' secundara T404=' + TRANSFORM(IIF(llT404s3,lnT404ValS3,-1)) + ' T401=' + TRANSFORM(IIF(llT401s3,lnT401ValS3,-1))
|
|
ENDIF
|
|
|
|
*========================= PAS 3 (HarnessStep 3): persistenta regrupare =========================
|
|
DO HarnessStep WITH 3, 'persistenta_regrupare: principala T404=' + TRANSFORM(IIF(llT404p3,lnT404ValP3,-1)) + ' T401=' + TRANSFORM(IIF(llT401p3,lnT401ValP3,-1)) + ' secundara T404=' + TRANSFORM(IIF(llT404s3,lnT404ValS3,-1)) + ' T401=' + TRANSFORM(IIF(llT401s3,lnT401ValS3,-1))
|
|
|
|
*========================= PAS 4: recalc_tva_document pe secundara sparta, total dublat (2000 lei) =========================
|
|
LOCAL lcDocKeySec
|
|
lcDocKeySec = ''
|
|
SELECT introdc
|
|
LOCATE FOR nract = 12000 AND !EMPTY(NVL(doc_key,''))
|
|
IF FOUND()
|
|
lcDocKeySec = doc_key
|
|
ENDIF
|
|
DO TfLog WITH 'doc_key secundara = [' + lcDocKeySec + ']'
|
|
|
|
SELECT introdc
|
|
REPLACE suma_doc WITH 2000 FOR nract = 12000 AND INLIST(tip_rand,'S','T')
|
|
DO TfLog WITH 'secundara: suma_doc dublat la 2000 lei pe randurile S si T'
|
|
|
|
goObj.recalc_tva_document(lcDocKeySec)
|
|
DOEVENTS FORCE
|
|
goObj.grid1.Refresh()
|
|
DOEVENTS FORCE
|
|
|
|
DO TfLog WITH 'DIAG dump introdc dupa recalc_tva_document(secundara, total 2000):'
|
|
DO DumpIntrodc
|
|
|
|
*-- VERIFICARE bug2 (recalc_tva_document): T-urile secundarei se recalculeaza proportional cu
|
|
*-- ponderea creditorului (404=90% baza, 401=10% baza), nu ambele la totalul intreg*21%
|
|
LOCAL llT404s4, llT401s4, lnT404ValS4, lnT401ValS4, lnCntTs4
|
|
SELECT introdc
|
|
COUNT FOR tip_rand == 'T' AND ALLTRIM(scd) == '4426' AND nract = 12000 TO lnCntTs4
|
|
LOCATE FOR tip_rand == 'T' AND ALLTRIM(scd) == '4426' AND nract = 12000 AND ALLTRIM(NVL(scc,'')) == '404'
|
|
llT404s4 = FOUND()
|
|
IF llT404s4
|
|
lnT404ValS4 = suma
|
|
ENDIF
|
|
LOCATE FOR tip_rand == 'T' AND ALLTRIM(scd) == '4426' AND nract = 12000 AND ALLTRIM(NVL(scc,'')) == '401'
|
|
llT401s4 = FOUND()
|
|
IF llT401s4
|
|
lnT401ValS4 = suma
|
|
ENDIF
|
|
IF lnCntTs4 = 2 AND llT404s4 AND llT401s4 AND ABS(lnT404ValS4 - 378) < 0.01 AND ABS(lnT401ValS4 - 42) < 0.01
|
|
DO TfLog WITH 'PASS pas4 recalc_tva_document proportional: T(scc=404).suma=' + TRANSFORM(lnT404ValS4) + ' (astept 378) T(scc=401).suma=' + TRANSFORM(lnT401ValS4) + ' (astept 42)'
|
|
ELSE
|
|
DO TfLog WITH 'FAIL pas4 recalc_tva_document proportional: nrT=' + TRANSFORM(lnCntTs4) + ' T404?=' + TRANSFORM(llT404s4) + '(suma=' + TRANSFORM(IIF(llT404s4,lnT404ValS4,-1)) + ') T401?=' + TRANSFORM(llT401s4) + '(suma=' + TRANSFORM(IIF(llT401s4,lnT401ValS4,-1)) + ') (pe codul vechi ambele ar fi 420)'
|
|
ENDIF
|
|
|
|
*========================= PAS 4 (HarnessStep 4): recalc_tva_document proportional pe secundara =========================
|
|
DO HarnessStep WITH 4, 'recalc_tva_secundara: T(404).suma=' + TRANSFORM(IIF(llT404s4,lnT404ValS4,-1)) + ' T(401).suma=' + TRANSFORM(IIF(llT401s4,lnT401ValS4,-1))
|
|
|
|
DO TfLog WITH 'GATA - scenariu runda30 (TVA secundare + garda scc)'
|
|
DO HarnessDone WITH 'done'
|
|
|
|
CATCH TO loExc
|
|
DO TfLog WITH 'CATCH ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
|
|
DO HarnessDone WITH 'done-error'
|
|
ENDTRY
|
|
|
|
QUIT
|
|
|
|
*==================================================================================
|
|
PROCEDURE ConstruiesteToDlg
|
|
*-- toDlg construit INLINE in programul PRINCIPAL (ADDPROPERTY da eroare 11 din proceduri in
|
|
*-- acest runtime headless - vezi docs/testare-ui-vfp.md capcana l).
|
|
goT = CREATEOBJECT('Empty')
|
|
=ADDPROPERTY(goT,'serie_act',ALLTRIM(NVL(goDlg.cSerieAct,'')))
|
|
=ADDPROPERTY(goT,'nract',goDlg.nNract)
|
|
=ADDPROPERTY(goT,'dataact',goDlg.dDataAct)
|
|
=ADDPROPERTY(goT,'fdoc',goDlg.cFelDoc)
|
|
=ADDPROPERTY(goT,'id_fdoc',goDlg.nIdFdoc)
|
|
=ADDPROPERTY(goT,'id_partc',goDlg.nIdPartener)
|
|
=ADDPROPERTY(goT,'partc',goDlg.cPartener)
|
|
=ADDPROPERTY(goT,'explicatia',ALLTRIM(NVL(goDlg.cExplicatia,'')))
|
|
=ADDPROPERTY(goT,'suma',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,IIF(goDlg.nSumaLei<>0,goDlg.nSumaLei,ROUND(goDlg.nSuma*goDlg.nCurs,gnPC)),goDlg.nSuma))
|
|
=ADDPROPERTY(goT,'suma_val',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,goDlg.nSuma,0))
|
|
=ADDPROPERTY(goT,'in_valuta',goDlg.chkInValutaCont.Value)
|
|
=ADDPROPERTY(goT,'participa_valuta',(goDlg.chkParticipaValuta.Value=1))
|
|
=ADDPROPERTY(goT,'id_valuta',IIF(goDlg.chkInValutaCont.Value=1,goDlg.nIdValuta,0))
|
|
=ADDPROPERTY(goT,'curs',IIF(goDlg.chkInValutaCont.Value=1,goDlg.nCurs,0))
|
|
=ADDPROPERTY(goT,'nume_val',IIF(goDlg.chkInValutaCont.Value=1,ALLTRIM(NVL(goDlg.cValuta,'')),''))
|
|
=ADDPROPERTY(goT,'cTipTva',IIF(goDlg.optTipTva.Value=1,'F',IIF(goDlg.optTipTva.Value=2,'D','N')))
|
|
=ADDPROPERTY(goT,'id_jtva_coloana',goDlg.nIdExplicatieTva)
|
|
=ADDPROPERTY(goT,'dvi_serie',CHRTRAN(ALLTRIM(NVL(goDlg.cSerieDvi,'')),CHR(34),''))
|
|
=ADDPROPERTY(goT,'dvi_nract',goDlg.nNractDvi)
|
|
=ADDPROPERTY(goT,'dvi_dataact',goDlg.dDviData)
|
|
=ADDPROPERTY(goT,'dvi_id_fdoc',goDlg.nIdFdocDVI)
|
|
=ADDPROPERTY(goT,'dvi_fdoc',goDlg.cFelDocDvi)
|
|
=ADDPROPERTY(goT,'dvi_id_partc',goDlg.nDviIdPartener)
|
|
=ADDPROPERTY(goT,'dvi_partc',goDlg.cDviPartener)
|
|
=ADDPROPERTY(goT,'dvi_scc','401')
|
|
=ADDPROPERTY(goT,'dvi_tva_lei',goDlg.nDviTvaLei)
|
|
=ADDPROPERTY(goT,'dvi_tva_val',goDlg.nDviTvaVal)
|
|
ENDPROC
|
|
|
|
PROCEDURE CreeazaRulTemp
|
|
*-- structura reala a rul_temp (vezi ointroduceri.vc2:11030 si test_adauga_repere_212.prg).
|
|
IF USED('rul_temp')
|
|
USE IN ('rul_temp')
|
|
ENDIF
|
|
CREATE CURSOR rul_temp ( ;
|
|
id_rul N(20,0), an N(4,0), luna N(2,0), cod N(20,0);
|
|
, serie C(100), nnir N(20,0), id_articol N(10,0), denumire C(100);
|
|
, codmat C(50), codmatf C(50), codbare C(50), um C(20);
|
|
, id_gestiune N(5,0), nume_gestiune C(50), cgest C(20), nr_pag N(2,0);
|
|
, gestionar C(50), comisie_receptie1 C(50), comisie_receptie2 C(50), comisie_receptie3 C(50);
|
|
, cant N(14,3), cante N(14,3), cont C(10), acont C(20);
|
|
, pret N(18,4), tva N(18,4), valoare N(18,4), valtva N(18,4);
|
|
, proc_tva N(5,2), pretv N(18,4), pretvtva N(18,4), tvav N(18,4);
|
|
, valoarev N(18,4), valtvav N(18,4), proc_tvav N(5,2), adaos N(18,4);
|
|
, adaos_tva N(18,4), valoare_adaos N(18,4), valtva_adaos N(18,4), procent N(10,3);
|
|
, discunitar N(18,4), discount_tva N(18,4), valoare_discount N(18,4), valtva_discount N(18,4);
|
|
, proc_disc N(7,3), pretd N(14,4), curs N(18,4), id_valuta N(10,0);
|
|
, nume_val C(20), id_lucrare N(20,0), nrord C(100), id_responsabil N(10,0);
|
|
, nresp C(100), resp_marca N(18,4), dataact T, id_util N(5,0);
|
|
, util C(30), dataora T, id_sectie N(5,0), sectie C(50);
|
|
, csectie C(10), alcooltutun N(1,0), datain T, dataout T;
|
|
, id_fact N(20,0), id_gestiunec N(10,0), nume_gestiunec C(50), cgestc C(20);
|
|
, id_responsabilc N(5,0), id_reteta N(10,0), reteta C(50), nrespc C(100);
|
|
, respc_marca N(18,4), id_set N(20,0), id_tip_rulaj N(10,0), tip_rulaj C(50);
|
|
, id_obiect_depozit N(10,0), id_rul_aux N(10,0), nract N(20,0), serie_act C(10);
|
|
, dataoras T, id_utils N(10,0), lot C(30), adata_expirare T;
|
|
, id_sucursala N(5,0), sucursala C(250), id_part_rez N(10,0), part_rez C(100);
|
|
, id_lucrare_rez N(10,0), nrord_rez C(100), subgrupa C(100), grupa C(100);
|
|
, id_subgrupa N(5,0), id_grupa N(5,0), in_stoc N(1,0), in_crm N(1,0);
|
|
, id_furnizor N(10,0), furnizor C(100), id_jtva_coloana N(4,0), explicatie_tva C(100);
|
|
, taxcode N(6,0), taxname C(254), saft_procent N(18,4), codnc8 C(20);
|
|
, id_tara_origine N(4,0), cod_tara_origine C(5), tara_origine C(50), greutate N(12,4);
|
|
, fdoc C(30), id_fdoc N(18,4);
|
|
, pret_lei N(18,4), pret_val N(14,4), cota_tva N(6,2))
|
|
ENDPROC
|
|
|
|
PROCEDURE CreeazaIntrodc
|
|
LPARAMETERS tcAlias
|
|
IF USED(tcAlias)
|
|
USE IN (tcAlias)
|
|
ENDIF
|
|
CREATE CURSOR (tcAlias) ( ;
|
|
id_note N(14), explicatia C(100), scd C(10), ascd C(20), scc C(10), ascc C(20), ;
|
|
cu_tva N(1), id_set N(14), ordine N(8), in_valuta N(1), id_jtva_coloana N(14) NULL, ;
|
|
ptva N(6,2), explicatie_tva C(50), tipjurnal C(2), taxcode N(6), paymentcode C(9), ;
|
|
suma N(18,4), suma_val N(18,4), id_partd N(14), id_partc N(14), partd C(100), partc C(100), ;
|
|
id_fact N(14), id_factd N(14), id_factc N(14), pereched N(14), perechec N(14), ;
|
|
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
|
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
|
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
|
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), ;
|
|
scd_orig C(20), ascd_orig C(20))
|
|
ENDPROC
|
|
|
|
PROCEDURE DumpIntrodc
|
|
LOCAL lnSel
|
|
lnSel = SELECT()
|
|
SELECT introdc
|
|
SCAN
|
|
DO TfLog WITH ' recno=' + TRANSFORM(RECNO()) + ' nract=' + TRANSFORM(NVL(nract,0)) + ' nr_doc=' + TRANSFORM(NVL(nr_doc,0)) + ' tip_rand=' + tip_rand + ;
|
|
' scd=' + ALLTRIM(scd) + ' scc=' + ALLTRIM(NVL(scc,'')) + ' ptva=' + TRANSFORM(ptva) + ;
|
|
' suma=' + TRANSFORM(suma) + ' suma_val=' + TRANSFORM(suma_val) + ;
|
|
' mod_manual=' + TRANSFORM(NVL(mod_manual,0)) + ' partc=[' + ALLTRIM(NVL(partc,'')) + ']'
|
|
ENDSCAN
|
|
SELECT (lnSel)
|
|
ENDPROC
|
|
|
|
FUNCTION RECCOUNT_ACTIVE
|
|
LPARAMETERS tcAlias
|
|
LOCAL lnSel, lnCnt
|
|
lnSel = SELECT()
|
|
SELECT (tcAlias)
|
|
COUNT TO lnCnt FOR !DELETED()
|
|
SELECT (lnSel)
|
|
RETURN lnCnt
|
|
ENDFUNC
|
|
|
|
PROCEDURE TfErr
|
|
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
|
DO TfLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
|
ENDPROC
|
|
|
|
PROCEDURE TfLog
|
|
LPARAMETERS tcMsg
|
|
SET SAFETY OFF
|
|
LOCAL lcL
|
|
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
|
|
STRTOFILE(lcL + tcMsg + CHR(13)+CHR(10), gcUILog)
|
|
ENDPROC
|
|
|
|
DEFINE CLASS dummyapp AS Custom
|
|
PROCEDURE ReadIni
|
|
LPARAMETERS tcSection, tcKey
|
|
RETURN ''
|
|
ENDPROC
|
|
PROCEDURE WriteIni
|
|
LPARAMETERS tcSection, tcKey, tcValue
|
|
RETURN .T.
|
|
ENDPROC
|
|
ENDDEFINE
|
|
|
|
DEFINE CLASS dummyexecutor AS Custom
|
|
cEroare = ''
|
|
PROCEDURE oExecute
|
|
LPARAMETERS tcSql, tcCursor
|
|
IF USED(m.tcCursor)
|
|
USE IN (m.tcCursor)
|
|
ENDIF
|
|
IF 'VJTVA_COLOANE' $ UPPER(m.tcSql)
|
|
DO CreeazaJtvaColoaneView WITH m.tcCursor
|
|
RETURN 1
|
|
ENDIF
|
|
IF UPPER(ALLTRIM(m.tcCursor)) == 'RUL_TEMP'
|
|
DO CreeazaRulTemp
|
|
ELSE
|
|
CREATE CURSOR (m.tcCursor) (id_temp N(1))
|
|
ENDIF
|
|
RETURN 1
|
|
ENDPROC
|
|
PROCEDURE oExecuta
|
|
LPARAMETERS tcSql, tcCursor
|
|
IF !EMPTY(m.tcCursor)
|
|
IF USED(m.tcCursor)
|
|
USE IN (m.tcCursor)
|
|
ENDIF
|
|
IF UPPER(m.tcCursor) == 'CJTVACOL4427'
|
|
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14))
|
|
ELSE
|
|
CREATE CURSOR (m.tcCursor) (id_temp N(1))
|
|
ENDIF
|
|
ENDIF
|
|
RETURN .T.
|
|
ENDPROC
|
|
PROCEDURE oSelect2Value
|
|
LPARAMETERS tcSql, toValue
|
|
toValue = ''
|
|
RETURN 1
|
|
ENDPROC
|
|
PROCEDURE oReset
|
|
ENDPROC
|
|
ENDDEFINE
|
|
|
|
PROCEDURE CreeazaJtvaColoaneView
|
|
LPARAMETERS tcCursor
|
|
IF USED(m.tcCursor)
|
|
USE IN (m.tcCursor)
|
|
ENDIF
|
|
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14), denumire C(100), jc N(1), jv N(1), ;
|
|
coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14) NULL, afisat N(1), ;
|
|
id_jtva_ex N(14) NULL, id_jtva_neex N(14) NULL, ordine N(8), ;
|
|
taxcode N(6) NULL, taxcode_neexigibil N(6) NULL, taxcode_n50 N(6) NULL, ;
|
|
taxcode_n50_tvai N(6) NULL, taxcode_n100 N(6) NULL, taxcode_regularizare N(6) NULL, taxcode_tvai N(6) NULL)
|
|
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, afisat, ordine, cota_tva) VALUES (0, '', 0, 0, 1, 0, 0)
|
|
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
|
|
VALUES (208, 'ACH. INT. 21%', 1, 0, 'RO21B', 21, 209, 1, 1, 301104)
|
|
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
|
|
VALUES (209, 'TVA ACH. INT. 21%', 1, 0, 'RO21T', 21, 1, 2, 301104)
|
|
ENDPROC
|