From ebb20fab7e1a7d04eb95939f29c625340c74bc71 Mon Sep 17 00:00:00 2001 From: Marius Mutu Date: Sat, 1 Aug 2026 22:47:35 +0300 Subject: [PATCH] achizitie import: numarul DVI nu mai suprascrie numarul facturii In import_nota, randul de TVA al DVI-ului pastreaza doc_key-ul facturii-mama. copiaza_valoare il sarea doar ca tinta, nu si ca sursa, asa ca o trecere prin celula "Nr" a randului DVI scria numarul vamal peste randurile facturii (B/G/S) si, la Terminat, in ACT si RUL.nract. Garda e acum in ambele sensuri, pentru numar, serie, data, fel document si partener; propagarea de partener din Grid1.cPartC.Text1.Valid a primit aceeasi protectie. Garzile comparau numele de camp bar, dar ControlSource-ul unei coloane de grid e calificat la runtime (introdc.nract), deci nu se activau pe drumul din grila. Teste noi in utile/Teste/achizitie_import. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01U9uDgDfUQXbh2Neib36CN8 --- clase/ointroduceri.vc2 | 28 +- .../test_diag_controlsource_calificat.prg | 670 ++++++++++++ .../test_diag_controlsource_calificat.ps1 | 15 + .../test_repro_bug_nract_dvi_propagat.prg | 853 +++++++++++++++ .../test_repro_bug_nract_dvi_propagat.ps1 | 12 + .../test_repro_flux_curat_doc_dublu.prg | 927 ++++++++++++++++ .../test_repro_flux_curat_doc_dublu.ps1 | 13 + .../test_repro_trigger_data.prg | 963 +++++++++++++++++ .../test_repro_trigger_data.ps1 | 12 + .../test_repro_trigger_focus_terminat.prg | 978 +++++++++++++++++ .../test_repro_trigger_focus_terminat.ps1 | 12 + .../test_repro_trigger_partener.prg | 994 ++++++++++++++++++ .../test_repro_trigger_partener.ps1 | 12 + 13 files changed, 5482 insertions(+), 7 deletions(-) create mode 100644 utile/Teste/achizitie_import/test_diag_controlsource_calificat.prg create mode 100644 utile/Teste/achizitie_import/test_diag_controlsource_calificat.ps1 create mode 100644 utile/Teste/achizitie_import/test_repro_bug_nract_dvi_propagat.prg create mode 100644 utile/Teste/achizitie_import/test_repro_bug_nract_dvi_propagat.ps1 create mode 100644 utile/Teste/achizitie_import/test_repro_flux_curat_doc_dublu.prg create mode 100644 utile/Teste/achizitie_import/test_repro_flux_curat_doc_dublu.ps1 create mode 100644 utile/Teste/achizitie_import/test_repro_trigger_data.prg create mode 100644 utile/Teste/achizitie_import/test_repro_trigger_data.ps1 create mode 100644 utile/Teste/achizitie_import/test_repro_trigger_focus_terminat.prg create mode 100644 utile/Teste/achizitie_import/test_repro_trigger_focus_terminat.ps1 create mode 100644 utile/Teste/achizitie_import/test_repro_trigger_partener.prg create mode 100644 utile/Teste/achizitie_import/test_repro_trigger_partener.ps1 diff --git a/clase/ointroduceri.vc2 b/clase/ointroduceri.vc2 index 5c83e87..c172513 100644 --- a/clase/ointroduceri.vc2 +++ b/clase/ointroduceri.vc2 @@ -8808,17 +8808,23 @@ DEFINE CLASS import_nota AS frm_termin_renunt OF "_frm_child.vcx" *!* cheia documentului, doc_key se regenereaza pe grup dupa propagare. Lparameters tcCamp Local lcSelect, lcCursor, luValoare, lcDocKeyOld, lcDocKeyNou, lnRecCurent, llCheie - Local llCampValuta, llCampIdentitate, llSursaProtejata + Local llCampValuta, llCampIdentitate, llSursaProtejata, lcCamp lcCursor = Thisform.grid1.RecordSource lcSelect = Select() Select (lcCursor) lnRecCurent = Recno() lcDocKeyOld = doc_key luValoare = &tcCamp - llCheie = Inlist(Lower(tcCamp), 'serie_act', 'nract', 'id_fdoc', 'fdoc', 'id_partc', 'partc') - llCampValuta = Inlist(Lower(tcCamp), 'in_valuta', 'id_valuta', 'nume_val', 'curs', 'suma_val') - llCampIdentitate = Inlist(Lower(tcCamp), 'nract', 'serie_act', 'partc', 'id_fdoc', 'fdoc') - llSursaProtejata = (llCampValuta And Thisform.rand_protejat()) + *!* la runtime VFP califica ControlSource-ul coloanei cu aliasul grilei (introdc.nract) + lcCamp = Lower(Alltrim(tcCamp)) + If '.' $ lcCamp + lcCamp = Substr(lcCamp, Rat('.', lcCamp) + 1) + Endif + llCheie = Inlist(lcCamp, 'serie_act', 'nract', 'id_fdoc', 'fdoc', 'id_partc', 'partc') + llCampValuta = Inlist(lcCamp, 'in_valuta', 'id_valuta', 'nume_val', 'curs', 'suma_val') + llCampIdentitate = Inlist(lcCamp, 'nract', 'serie_act', 'partc', 'id_partc', 'id_fdoc', 'fdoc', 'dataact') + *!* randul DVI e protejat si ca SURSA - identitatea lui vamala nu se propaga pe factura-mama + llSursaProtejata = (llCampValuta And Thisform.rand_protejat()) Or (llCampIdentitate And Nvl(rand_dvi,0) = 1) If !llSursaProtejata Scan For doc_key == lcDocKeyOld And Recno() <> lnRecCurent @@ -8832,7 +8838,7 @@ DEFINE CLASS import_nota AS frm_termin_renunt OF "_frm_child.vcx" Endscan Endif - If llCheie + If llCheie And !llSursaProtejata Go lnRecCurent lcDocKeyNou = Thisform.calc_doc_key() Scan For doc_key == lcDocKeyOld @@ -8843,7 +8849,7 @@ DEFINE CLASS import_nota AS frm_termin_renunt OF "_frm_child.vcx" Go lnRecCurent Select (lcSelect) Release lcSelect, lcCursor, luValoare, lcDocKeyOld, lcDocKeyNou, lnRecCurent, llCheie - Release llCampValuta, llCampIdentitate, llSursaProtejata + Release llCampValuta, llCampIdentitate, llSursaProtejata, lcCamp ENDPROC PROCEDURE creeaza_rand_s @@ -11883,12 +11889,20 @@ DEFINE CLASS import_nota AS frm_termin_renunt OF "_frm_child.vcx" lcSelect = SELECT() SELECT introdc + *!* randul DVI are partener propriu (vama) - nu il da si nu il preia de la factura + IF Nvl(rand_dvi,0) = 1 + SELECT (lcSelect) + RETURN + ENDIF lnRecCurent = RECNO() lcDocKey = doc_key lnIdPart = id_partc lcPart = partc lcCont = scc SCAN FOR !EMPTY(lcDocKey) AND doc_key == lcDocKey AND RECNO() <> lnRecCurent + IF Nvl(rand_dvi,0) = 1 + LOOP + ENDIF IF scc = lcCont AND EMPTY(id_partc) REPLACE id_partc WITH lnIdPart, partc WITH lcPart ENDIF diff --git a/utile/Teste/achizitie_import/test_diag_controlsource_calificat.prg b/utile/Teste/achizitie_import/test_diag_controlsource_calificat.prg new file mode 100644 index 0000000..0e006bb --- /dev/null +++ b/utile/Teste/achizitie_import/test_diag_controlsource_calificat.prg @@ -0,0 +1,670 @@ +* test_diag_controlsource_calificat.prg +* REGRESIE (initial diagnostic - a demonstrat un ocolire a gardei, acum fixata): izoleaza +* copiaza_valoare() de dialog/sparge_document, insert direct in introdc - doua randuri, +* acelasi doc_key: B nract=15000/id_fdoc=1/id_partc=601, T-DVI nract=101/id_fdoc=2/ +* id_partc=900/rand_dvi=1. +* +* Context: This.Parent.ControlSource (folosit de Grid1.cNract/cDataAct/cSerie_act.Text1.Valid +* ca argument pentru Thisform.copiaza_valoare) e "nract" la design-time in .vcx, dar la +* runtime VFP il rescrie calificat cu alias-ul RecordSource-ului grid-ului ("introdc.nract"). +* Garda din copiaza_valoare (COMUN\clase\ointroduceri.vcx) normalizeaza acum tcCamp la numele +* de camp BAR (dupa ultimul punct) inainte de Inlist - testul verifica DIRECT ca garda +* blocheaza propagarea de pe randul T-DVI (sursa) atat pe drumul real (Grid1.cNract/ +* cDataAct.Text1.Valid()), cat si prin apel direct cu literalul 'nract'. Grid1.cPartC. +* Text1.Valid NU foloseste copiaza_valoare (are logica proprie, verificari directe pe +* rand_dvi) - neafectat de aceasta problema, testat separat in test_repro_trigger_partener.prg. +* +* Rulare: +* powershell -ExecutionPolicy Bypass -File test_diag_controlsource_calificat.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_diag_controlsource_calificat_log.txt" +gcSyncDir = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\uisync_diag_controlsource_calificat\" +STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog) + +ON ERROR DO EeErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO() +ON SHUTDOWN QUIT + +TRY + LOCAL gcAppPath, lcPath + gcAppPath = "D:\ROA\ROAGEST\" + SET DEFAULT TO (gcAppPath) + + lcPath = gcAppPath + 'COMUN\Utile\Teste\achizitie_import\stub_verificare;' + ; + 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 EeLog 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 EeLog WITH 'SET CLASSLIB OK' + + *----- PROCEDURI (mock-uri 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\achizitie_import\mock_caut_valuta.prg" ADDITIVE + SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_cauta_nom_articole.prg" ADDITIVE + SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_oscrie_in_fisiere.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 EeLog 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 gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip, gcMockArtCodmat + gnMockRaspuns = 6 + gcMockUltimMesaj = '' + gnMockUltimTip = 0 + PUBLIC gnButon + gnButon = 1 + gcMockArtCodmat = '' + + PUBLIC goExecutor, goApp + goExecutor = CREATEOBJECT('dummyexecutor') + goApp = CREATEOBJECT('dummyapp') + + *----- poAct: antetul notei (factura import EUR, curs 5.23) ----- + PUBLIC poAct + poAct = CREATEOBJECT('Custom') + poAct.AddProperty('nume_val', 'EUR') + poAct.AddProperty('curs', 5.23) + poAct.AddProperty('proc_tva', 1.21) + poAct.AddProperty('nnir', 0) + poAct.AddProperty('id_valuta', 978) + poAct.AddProperty('id_fdoc', 1) + poAct.AddProperty('fdoc', 'Factura') + poAct.AddProperty('id_partc', 601) + poAct.AddProperty('partc', 'FURNIZOR EXTERN GMBH') + 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 / saft_taxtable: perechi reale 21% (achizitii interne + import) ----- + 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) + INSERT INTO jtva_coloane2 VALUES (3, 220, 'ACH. IMP. 21%', 1, 0, 1, 'FO21B', 'FO21T', 21, 221) + INSERT INTO jtva_coloane2 VALUES (4, 221, 'TVA ACH. IMP. 21%', 1, 0, 1, 'FO21T', '', 21, 0) + + 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 ('301204-Import de bunuri cota 21%', 301204, '', 21, 1, 0, 1, 0) + + DO CreeazaIntrodc WITH 'introdc' + 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 + + DO CreeazaRulTemp + INSERT INTO rul_temp (denumire, codmat, cant, pret, pret_lei, cont, cota_tva) ; + VALUES ('PLACEHOLDER', 'PH', 1, 1, 1, '371', 21) + + *-- index ord_doc INAINTE de CREATEOBJECT (capcana p, docs/testare-ui-vfp.md) + SELECT introdc + INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc + SET ORDER TO ord_doc + + *-- vezi antetul test_e2e_dvi_ron_discount.prg: tlIntern BARA, aceeasi valoare ca la CREATEOBJECT + PRIVATE tlIntern + tlIntern = .F. + + PUBLIC gcTempPath + gcTempPath = ADDBS(SYS(2023)) + PUBLIC gnHandle + gnHandle = -1 + PUBLIC gnTipGest + gnTipGest = 0 + PUBLIC gcCondSucursala + gcCondSucursala = '' + + DO EeLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F. - mod import)' + PUBLIC goObj + goObj = CREATEOBJECT('IMPORT_nota', .F.) + IF VARTYPE(goObj) <> 'O' + DO EeLog WITH 'FAIL: instantiere import_nota' + DO HarnessDone WITH 'done-error' + QUIT + ENDIF + goObj.lDialogAratat = .T. + goObj.oact = poAct + goObj.lSpargeSecundare = .F. + goObj.WindowType = 0 + goObj.Visible = .T. + goObj.Show() + goObj.WindowState = 2 + DOEVENTS FORCE + + SELECT rul_temp + ZAP + goObj.gridart.Refresh() + DOEVENTS FORCE + + PRIVATE pnAsserts, pnPass + STORE 0 TO pnAsserts, pnPass + + DO HarnessStep WITH 0, 'nota goala afisata, mod import (.F.)' + + *========================= DIAGNOSTIC: insert DIRECT (fara dialog), izoleaza copiaza_valoare() ========================= + *-- doua randuri, ACELASI doc_key: B (nract=15000/id_fdoc=1/id_partc=601) si T-DVI + *-- (nract=101/id_fdoc=2/id_partc=900, rand_dvi=1) - minim necesar ca sa testam DOAR garda + *-- din copiaza_valoare(), fara sparge_document/sincronizare/dialog in cale. + SELECT introdc + APPEND BLANK + REPLACE nract WITH 15000, id_fdoc WITH 1, id_partc WITH 601, serie_act WITH '', ; + tip_rand WITH 'B', nr_doc WITH 1, scd WITH '371', scc WITH '401', suma WITH 5000, ; + rand_dvi WITH 0, dataact WITH {^2026-07-20} + APPEND BLANK + REPLACE nract WITH 101, id_fdoc WITH 2, id_partc WITH 900, serie_act WITH '', ; + tip_rand WITH 'T', nr_doc WITH 1, scd WITH '4426', scc WITH '401', suma WITH 900, ; + rand_dvi WITH 1, dataact WITH {^2026-07-25} + *-- doc_key IDENTIC pe ambele randuri (T-DVI pastreaza doc_key-ul MAMEI, calculat pe baza + *-- identitatii facturii B - la fel ca in do_adauga_factura, unde Replace doc_key se face + *-- INAINTE de suprascrierea cu identitatea vamala pe randul T) + LOCAL lcDocKeyComun + SELECT introdc + GO TOP + lcDocKeyComun = goObj.calc_doc_key() + REPLACE ALL doc_key WITH lcDocKeyComun + GO TOP + + DO DumpIntrodc WITH 'DUMP inainte de copiaza_valoare (insert direct, fara dialog)' + + DO HarnessStep WITH 1, 'randuri B/T-DVI inserate direct, acelasi doc_key' + + *========================= TRIGGER: pointerul pe randul T-DVI, copiaza_valoare('nract') DIRECT ========================= + SELECT introdc + LOCATE FOR Nvl(rand_dvi,0) = 1 + =Assert3('17-pozitionare pe randul T-DVI reusita (inainte de trigger)', IIF(FOUND(),1,0), 1) + + LOCAL llTriggerOk + llTriggerOk = .F. + IF FOUND() + DO EeLog WITH 'DEBUG Grid1.cNract.ControlSource=[' + goObj.Grid1.cNract.ControlSource + '] LEN=' + TRANSFORM(LEN(goObj.Grid1.cNract.ControlSource)) + ' vs literal [nract] LEN=' + TRANSFORM(LEN('nract')) + DO EeLog WITH 'DEBUG Grid1.cDataAct.ControlSource=[' + goObj.Grid1.cDataAct.ControlSource + '] LEN=' + TRANSFORM(LEN(goObj.Grid1.cDataAct.ControlSource)) + DO EeLog WITH 'DEBUG Grid1.cSerie_act.ControlSource=[' + goObj.Grid1.cSerie_act.ControlSource + '] LEN=' + TRANSFORM(LEN(goObj.Grid1.cSerie_act.ControlSource)) + goObj.Grid1.cNract.Text1.Valid() + llTriggerOk = .T. + ENDIF + DOEVENTS FORCE + =Assert3('18-TRIGGER executat fara eroare', IIF(llTriggerOk,1,0), 1) + DO EeLog WITH 'TRIGGER folosit: Grid1.cNract.Text1.Valid()' + + DO DumpIntrodc WITH 'DUMP dupa TRIGGER (copiaza_valoare direct, pointer pe T-DVI)' + + *========================= TRIGGER 2: acelasi izolat, dar pe coloana Data (cDataAct) ========================= + *-- randul B primeste si el o data (diferita de T-DVI), ca sa se poata verifica propagarea + SELECT introdc + GO 1 + REPLACE dataact WITH {^2026-07-20} + GO 2 + REPLACE dataact WITH {^2026-07-25} + GO 2 + + LOCAL llTrigger2Ok + llTrigger2Ok = .F. + goObj.Grid1.cDataAct.Text1.Valid() + llTrigger2Ok = .T. + DOEVENTS FORCE + =Assert3('19-TRIGGER 2 (cDataAct) executat fara eroare', IIF(llTrigger2Ok,1,0), 1) + + DO DumpIntrodc WITH 'DUMP dupa TRIGGER 2 (cDataAct.Valid, pointer pe T-DVI)' + + GO 1 IN introdc + pnAsserts = pnAsserts + 1 + IF introdc.dataact == {^2026-07-20} + pnPass = pnPass + 1 + DO EeLog WITH ' PASS 20-randul B (dataact) NESCHIMBAT dupa TRIGGER 2 (=' + DTOC(introdc.dataact) + ')' + ELSE + DO EeLog WITH ' FAIL 20-randul B (dataact) a devenit ' + DTOC(introdc.dataact) + ' dupa TRIGGER 2 (asteptat 20.07.2026)' + ENDIF + + *========================= ASSERT-URI DUPA TRIGGER: nract pe B trebuie sa RAMANA 15000 ========================= + LOCAL llBugG, llBugS, lnCntSVerif + llBugG = .F. + llBugS = .F. + + SELECT introdc + LOCATE FOR tip_rand == 'B' AND Nvl(rand_dvi,0) <> 1 + IF FOUND() + pnAsserts = pnAsserts + 1 + IF nract == 15000 + pnPass = pnPass + 1 + DO EeLog WITH ' PASS 20-B.nract ramane 15000 dupa trigger (=' + TRANSFORM(nract) + ')' + ELSE + llBugG = .T. + DO EeLog WITH ' FAIL 20-B.nract dupa trigger = ' + TRANSFORM(nract) + ' (asteptat 15000) -> BUG' + ENDIF + ELSE + pnAsserts = pnAsserts + 1 + DO EeLog WITH ' FAIL 20: randul B negasit dupa trigger' + ENDIF + + *-- randul T-DVI insusi trebuie sa ramana 101 (sursa neschimbata de propriul apel) + SELECT introdc + LOCATE FOR Nvl(rand_dvi,0) = 1 + =Assert3('22-T-DVI.nract ramane 101 (randul sursa neschimbat)', IIF(FOUND(), nract, -1), 101) + + *-- doc_key: NU trebuie regenerat (llSursaProtejata blocheaza si regenerarea de doc_key) + LOCAL lcDocKeyB, lcDocKeyT + SELECT introdc + LOCATE FOR tip_rand == 'B' + lcDocKeyB = ALLTRIM(NVL(doc_key,'')) + LOCATE FOR Nvl(rand_dvi,0) = 1 + lcDocKeyT = ALLTRIM(NVL(doc_key,'')) + pnAsserts = pnAsserts + 1 + IF lcDocKeyB == lcDocKeyT + pnPass = pnPass + 1 + DO EeLog WITH ' PASS 25-doc_key B si T-DVI raman identice dupa trigger ([' + lcDocKeyB + '])' + ELSE + DO EeLog WITH ' FAIL 25-doc_key B=[' + lcDocKeyB + '] <> doc_key T-DVI=[' + lcDocKeyT + '] dupa trigger' + ENDIF + + LOCAL llBugSDupaSync2 + llBugSDupaSync2 = .F. + + DO HarnessStep WITH 2, 'final: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS' + + DO EeLog WITH '=========================================================' + IF llBugG OR llBugS OR llBugSDupaSync2 + DO EeLog WITH 'BUG CONFIRMAT: nract-ul randului T-DVI (101) s-a propagat peste nract-ul' + ; + ' randurilor B/G/S ale facturii principale (asteptat 15000) dupa ce Valid()/' + ; + 'copiaza_valoare() a rulat cu pointerul pe randul T-DVI.' + ELSE + DO EeLog WITH 'BUG NECONFIRMAT: nract-ul randurilor B/G/S a ramas 15000 dupa trigger si dupa re-sincronizare.' + ENDIF + DO EeLog WITH '=========================================================' + + DO EeLog WITH 'REZULTAT: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS' + IF pnPass = pnAsserts + DO EeLog WITH 'REZULTAT: PASS (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ')' + ELSE + DO EeLog WITH 'REZULTAT: FAIL (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS)' + ENDIF + + DO HarnessDone WITH 'done' + +CATCH TO loExc + DO EeLog 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 DumpIntrodc + LPARAMETERS tcTitlu + LOCAL lcSelAnt, lnRecAnt + lcSelAnt = SELECT() + lnRecAnt = IIF(USED('introdc'), IIF(EOF('introdc') OR BOF('introdc'), 0, RECNO('introdc')), 0) + DO EeLog WITH tcTitlu + IF !USED('introdc') + DO EeLog WITH ' (introdc neinstantiat)' + RETURN + ENDIF + SELECT introdc + SCAN + DO EeLog WITH ' tip_rand=' + ALLTRIM(NVL(tip_rand,'?')) + ' nract=' + TRANSFORM(NVL(nract,0)) + ; + ' doc_key=[' + ALLTRIM(NVL(doc_key,'')) + '] rand_dvi=' + TRANSFORM(NVL(rand_dvi,0)) + ; + ' scd=' + ALLTRIM(NVL(scd,'')) + ' scc=' + ALLTRIM(NVL(scc,'')) + ' suma=' + TRANSFORM(NVL(suma,0)) + ENDSCAN + IF lnRecAnt > 0 + TRY + GO lnRecAnt + CATCH + GO TOP + ENDTRY + ENDIF + SELECT (lcSelAnt) +ENDPROC + +PROCEDURE CreeazaIntrodc + *-- coloane rand_dvi N(1), valuta_proprie N(1) (rand_dvi = randul T-DVI) + 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), expl_manual N(1), ; + scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1)) +ENDPROC + +PROCEDURE CreeazaRulTemp + 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 + +FUNCTION RECCOUNT_ACTIVE + LPARAMETERS tcAlias + LOCAL lnSel, lnCnt + lnSel = SELECT() + SELECT (tcAlias) + COUNT TO lnCnt FOR !DELETED() + SELECT (lnSel) + RETURN lnCnt +ENDFUNC + +PROCEDURE Assert3 + LPARAMETERS tcLabel, tuActual, tuExpected + pnAsserts = pnAsserts + 1 + IF ABS(NVL(tuActual,0) - tuExpected) < 0.02 + pnPass = pnPass + 1 + DO EeLog WITH ' PASS ' + tcLabel + ' (=' + TRANSFORM(tuActual) + ')' + ELSE + DO EeLog WITH ' FAIL ' + tcLabel + ' (actual=' + TRANSFORM(tuActual) + ' asteptat=' + TRANSFORM(tuExpected) + ')' + ENDIF +ENDPROC + +PROCEDURE AssertStr + LPARAMETERS tcLabel, tcActual, tcExpected + pnAsserts = pnAsserts + 1 + IF tcActual == tcExpected + pnPass = pnPass + 1 + DO EeLog WITH ' PASS ' + tcLabel + ' (=[' + tcActual + '])' + ELSE + DO EeLog WITH ' FAIL ' + tcLabel + ' (actual=[' + tcActual + '] asteptat=[' + tcExpected + '])' + ENDIF +ENDPROC + +PROCEDURE EeErr + LPARAMETERS tnErr, tcMsg, tcProg, tnLine + DO EeLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg +ENDPROC + +PROCEDURE EeLog + 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' + CREATE CURSOR (m.tcCursor) (denumire C(100), codmat C(30), cant N(14,3), ; + pret_val N(18,4), pretd N(18,4), pret N(18,4), pret_lei N(18,4), cont C(10), ; + acont C(20), serie C(30), lot C(30), adata_expirare C(10), proc_disc N(6,2), cota_tva N(6,2)) + RETURN 1 + ENDIF + IF 'CONFIG_ANALITICE' $ UPPER(m.tcSql) + CREATE CURSOR (m.tcCursor) (camp_leg_prefix C(30), camp_leg_sufix C(30)) + INSERT INTO (m.tcCursor) VALUES ('', '') + RETURN 1 + ENDIF + IF 'FCONTURI_ANALITICE' $ UPPER(m.tcSql) + CREATE CURSOR (m.tcCursor) (acont C(20)) + INSERT INTO (m.tcCursor) VALUES (IIF(TYPE('gcMockAcontCrt') = 'C', gcMockAcontCrt, '')) + RETURN 1 + ENDIF + IF 'VPLCONT_ANALITIC' $ UPPER(m.tcSql) + CREATE CURSOR (m.tcCursor) (cont C(10), acont C(20)) + RETURN 1 + ENDIF + IF 'VCONFIG_CONT_IREG' $ UPPER(m.tcSql) + CREATE CURSOR (m.tcCursor) (contpart C(10), fel_cont N(1), cu_inregistrari N(1), ; + explic_cont C(100), exceptie C(10), pozitie N(1), invers N(1), gasit N(1)) + INSERT INTO (m.tcCursor) VALUES ('401', 0, 0, 'Furnizori', '', 0, 0, 0) + RETURN 1 + ENDIF + CREATE CURSOR (m.tcCursor) (id_temp N(1)) + 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) + INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ; + VALUES (220, 'ACH. IMP. 21%', 1, 0, 'FO21B', 21, 221, 1, 3, 301204) + INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ; + VALUES (221, 'TVA ACH. IMP. 21%', 1, 0, 'FO21T', 21, 1, 4, 301204) +ENDPROC diff --git a/utile/Teste/achizitie_import/test_diag_controlsource_calificat.ps1 b/utile/Teste/achizitie_import/test_diag_controlsource_calificat.ps1 new file mode 100644 index 0000000..a7a6d71 --- /dev/null +++ b/utile/Teste/achizitie_import/test_diag_controlsource_calificat.ps1 @@ -0,0 +1,15 @@ +# test_diag_controlsource_calificat.ps1 - DIAGNOSTIC: izoleaza copiaza_valoare() de dialog/ +# sparge_document, ca sa demonstreze ca garda noua (rand-sursa protejat, adaugata in fix) +# functioneaza CORECT cand tcCamp e literalul 'nract', dar e OCOLITA cand tcCamp vine din +# This.Parent.ControlSource al coloanei Grid1.cNract, pentru ca la runtime ControlSource +# devine "introdc.nract" (calificat cu alias-ul), nu "nract" (asa cum apare la design-time +# in .vcx) - vezi test_diag_controlsource_calificat_log.txt. +$ErrorActionPreference = 'Stop' +$Teste = $PSScriptRoot +& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') ` + -TestPrg (Join-Path $Teste 'test_diag_controlsource_calificat.prg') ` + -Steps @('nota_goala','randuri_inserate','final') ` + -ShotsDir (Join-Path $Teste 'screenshots_diag_controlsource_calificat') ` + -SyncDir (Join-Path $Teste 'uisync_diag_controlsource_calificat') ` + -StepTimeoutSec 180 ` + -ReadyTimeoutSec 180 diff --git a/utile/Teste/achizitie_import/test_repro_bug_nract_dvi_propagat.prg b/utile/Teste/achizitie_import/test_repro_bug_nract_dvi_propagat.prg new file mode 100644 index 0000000..c8c8b87 --- /dev/null +++ b/utile/Teste/achizitie_import/test_repro_bug_nract_dvi_propagat.prg @@ -0,0 +1,853 @@ +* test_repro_bug_nract_dvi_propagat.prg +* Test de REPRODUCERE (nu modifica NIMIC din codul aplicatiei). Ipoteza de verificat: +* Grid1.cNract.Text1.Valid (COMUN\clase\ointroduceri.vcx) apeleaza neconditionat +* Thisform.copiaza_valoare('nract'). copiaza_valoare propaga valoarea campului pe tot +* grupul doc_key, sarind DOAR randurile-TINTA cu rand_dvi=1 - dar NU protejeaza cazul in +* care randul-SURSA (pozitia curenta la apel) e chiar randul T al DVI-ului. Randul T al +* DVI-ului pastreaza doc_key-ul facturii-mama (vezi do_adauga_factura, cazul cTipTva='D': +* "doc_key ramane al documentului-mama, desi randul poarta partener/conturi de vama"), +* deci daca Valid se declanseaza cu pointerul din introdc pe randul DVI, numarul DVI-ului +* (101) s-ar scrie peste nract-ul randurilor B/G/S ale facturii principale (15000). +* +* Model de test (structura harness, capcane, toDlg inline): test_e2e_dvi_ron_discount.prg. +* Scenariu: factura import EUR (curs 5.23), discount financiar (doar baza), TVA pe DVI +* platit in RON, DVI cu nract/partener propriu (vama). Flux REAL: import_adauga_factura +* (dialog) + do_adauga_articol() + sincronizeaza() reale, NU insert direct in cursoare. +* +* Rulare: +* powershell -ExecutionPolicy Bypass -File test_repro_bug_nract_dvi_propagat.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_repro_bug_nract_dvi_propagat_log.txt" +gcSyncDir = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\uisync_repro_bug_nract_dvi\" +STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog) + +ON ERROR DO EeErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO() +ON SHUTDOWN QUIT + +TRY + LOCAL gcAppPath, lcPath + gcAppPath = "D:\ROA\ROAGEST\" + SET DEFAULT TO (gcAppPath) + + lcPath = gcAppPath + 'COMUN\Utile\Teste\achizitie_import\stub_verificare;' + ; + 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 EeLog 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 EeLog WITH 'SET CLASSLIB OK' + + *----- PROCEDURI (mock-uri 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\achizitie_import\mock_caut_valuta.prg" ADDITIVE + SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_cauta_nom_articole.prg" ADDITIVE + SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_oscrie_in_fisiere.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 EeLog 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 gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip, gcMockArtCodmat + gnMockRaspuns = 6 + gcMockUltimMesaj = '' + gnMockUltimTip = 0 + PUBLIC gnButon + gnButon = 1 + gcMockArtCodmat = '' + + PUBLIC goExecutor, goApp + goExecutor = CREATEOBJECT('dummyexecutor') + goApp = CREATEOBJECT('dummyapp') + + *----- poAct: antetul notei (factura import EUR, curs 5.23) ----- + PUBLIC poAct + poAct = CREATEOBJECT('Custom') + poAct.AddProperty('nume_val', 'EUR') + poAct.AddProperty('curs', 5.23) + poAct.AddProperty('proc_tva', 1.21) + poAct.AddProperty('nnir', 0) + poAct.AddProperty('id_valuta', 978) + poAct.AddProperty('id_fdoc', 1) + poAct.AddProperty('fdoc', 'Factura') + poAct.AddProperty('id_partc', 601) + poAct.AddProperty('partc', 'FURNIZOR EXTERN GMBH') + 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 / saft_taxtable: perechi reale 21% (achizitii interne + import) ----- + 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) + INSERT INTO jtva_coloane2 VALUES (3, 220, 'ACH. IMP. 21%', 1, 0, 1, 'FO21B', 'FO21T', 21, 221) + INSERT INTO jtva_coloane2 VALUES (4, 221, 'TVA ACH. IMP. 21%', 1, 0, 1, 'FO21T', '', 21, 0) + + 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 ('301204-Import de bunuri cota 21%', 301204, '', 21, 1, 0, 1, 0) + + DO CreeazaIntrodc WITH 'introdc' + 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 + + DO CreeazaRulTemp + INSERT INTO rul_temp (denumire, codmat, cant, pret, pret_lei, cont, cota_tva) ; + VALUES ('PLACEHOLDER', 'PH', 1, 1, 1, '371', 21) + + *-- index ord_doc INAINTE de CREATEOBJECT (capcana p, docs/testare-ui-vfp.md) + SELECT introdc + INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc + SET ORDER TO ord_doc + + *-- vezi antetul test_e2e_dvi_ron_discount.prg: tlIntern BARA, aceeasi valoare ca la CREATEOBJECT + PRIVATE tlIntern + tlIntern = .F. + + PUBLIC gcTempPath + gcTempPath = ADDBS(SYS(2023)) + PUBLIC gnHandle + gnHandle = -1 + PUBLIC gnTipGest + gnTipGest = 0 + PUBLIC gcCondSucursala + gcCondSucursala = '' + + DO EeLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F. - mod import)' + PUBLIC goObj + goObj = CREATEOBJECT('IMPORT_nota', .F.) + IF VARTYPE(goObj) <> 'O' + DO EeLog WITH 'FAIL: instantiere import_nota' + DO HarnessDone WITH 'done-error' + QUIT + ENDIF + goObj.lDialogAratat = .T. + goObj.oact = poAct + goObj.lSpargeSecundare = .F. + goObj.WindowType = 0 + goObj.Visible = .T. + goObj.Show() + goObj.WindowState = 2 + DOEVENTS FORCE + + SELECT rul_temp + ZAP + goObj.gridart.Refresh() + DOEVENTS FORCE + + PRIVATE pnAsserts, pnPass + STORE 0 TO pnAsserts, pnPass + + DO HarnessStep WITH 0, 'nota goala afisata, mod import (.F.)' + + *========================= DIALOG: factura EUR 15000 + TVA DVI (nract 101) in RON + discount ========================= + PUBLIC goDlg + goDlg = CREATEOBJECT('import_adauga_factura', goObj) + goDlg.cFelDoc = 'Factura' + goDlg.nIdFdoc = 1 + goDlg.nNract = 15000 + goDlg.dDataAct = DATE() + goDlg.nIdPartener = 601 + goDlg.cPartener = 'FURNIZOR EXTERN GMBH' + goDlg.cExplicatia = 'Repro bug propagare nract DVI' + goDlg.nSuma = 1000 + goDlg.nSumaLei = 0 + goDlg.nCurs = 5.23 + goDlg.nIdValuta = 978 + goDlg.cValuta = 'EUR' + goDlg.chkInValutaCont.Value = 1 + goDlg.chkParticipaValuta.Value = 1 + goDlg.nIdExplicatieTva = 220 + goDlg.cExplicatieTva = 'ACH. IMP. 21%' + goDlg.nProcentTva = 21 + + *-- DVI: identitate proprie (document vamal, partener vamal, nract 101) + goDlg.cSerieDvi = '' + goDlg.nNractDvi = 101 + goDlg.dDviData = DATE() + goDlg.nIdFdocDVI = 2 + goDlg.cFelDocDvi = 'DVI' + goDlg.nDviIdPartener = 900 + goDlg.cDviPartener = 'DIRECTIA VAMALA' + + *-- comuta pe mod TVA DVI (radio "TVA in vama") - flux real, InteractiveChange + goDlg.optTipTva.Value = 2 + goDlg.optTipTva.InteractiveChange() + + *-- alegere RON pe blocul DVI, prin picker-ul REAL (mock_caut_valuta, coada FIFO cu 1 pick) + PUBLIC goMockValuta, goMockValutaCoada + goMockValuta = CREATEOBJECT('Custom') + goMockValuta.AddProperty('id_valuta', 1) + goMockValuta.AddProperty('nume_val', 'RON') + goMockValutaCoada = CREATEOBJECT('Collection') + LOCAL loValRon + loValRon = CREATEOBJECT('Custom') + loValRon.AddProperty('id_valuta', 1) + loValRon.AddProperty('nume_val', 'RON') + goMockValutaCoada.Add(loValRon) + goDlg.cmdDviValuta.Click() + =AssertStr('1-DVI valuta aleasa RON', ALLTRIM(goDlg.cDviValuta), 'RON') + =Assert3('2-DVI curs fixat la 1 (RON)', goDlg.nDviCurs, 1) + + *-- discount financiar (doar baza, fara bifa) - Valid() reface TVA DVI pe baza NETA + goDlg.txtDiscBaza.Value = 100 + goDlg.txtDiscBaza.Valid() + + goDlg.WindowType = 0 + goDlg.Visible = .T. + goDlg.Show() + DOEVENTS FORCE + DO HarnessStep WITH 1, 'dialog completat: factura EUR nract=15000, DVI nract=101, discount baza 100' + + *-- valideaza() REAL de pe dialog (buton Termin apeleaza mereu asta primul) + LOCAL llOkValid + llOkValid = goDlg.valideaza() + =Assert3('3-dialog valideaza() reuseste', IIF(llOkValid,1,0), 1) + + *-- toDlg construit INLINE in programul PRINCIPAL (capcana l, vezi antetul mock_caut_valuta.prg) + PUBLIC goT + 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) + IF goDlg.optTipTva.Value = 2 + =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) + =ADDPROPERTY(goT,'dvi_in_valuta',!(EMPTY(goDlg.cDviValuta) OR UPPER(ALLTRIM(goDlg.cDviValuta))=='RON')) + =ADDPROPERTY(goT,'dvi_id_valuta',goDlg.nDviIdValuta) + =ADDPROPERTY(goT,'dvi_curs',goDlg.nDviCurs) + =ADDPROPERTY(goT,'dvi_nume_val',ALLTRIM(NVL(goDlg.cDviValuta,''))) + =ADDPROPERTY(goT,'dvi_valuta_proprie',IIF(!(EMPTY(goDlg.cDviValuta) OR UPPER(ALLTRIM(goDlg.cDviValuta))=='RON') OR !(EMPTY(goDlg.cValuta) OR UPPER(ALLTRIM(goDlg.cValuta))=='RON'),IIF(goDlg.nDviIdValuta<>goDlg.nIdValuta OR goDlg.nDviCurs<>goDlg.nCurs,1,0),0)) + ENDIF + =ADDPROPERTY(goT,'disc_baza_lei',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,ROUND(goDlg.nDiscBaza*goDlg.nCurs,gnPC),goDlg.nDiscBaza)) + =ADDPROPERTY(goT,'disc_baza_val',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,goDlg.nDiscBaza,0)) + + *-- "Termin" REAL: oParinte.do_adauga_factura() cu toDlg-ul construit mai sus + LOCAL llOkAdauga + llOkAdauga = goObj.do_adauga_factura(goT) + =Assert3('4-do_adauga_factura(goT) reuseste (Termin)', IIF(llOkAdauga,1,0), 1) + goDlg.Hide() + DOEVENTS FORCE + DO HarnessStep WITH 2, 'dupa Termin pe dialog: introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri' + + DO DumpIntrodc WITH 'DUMP dupa Termin (inainte de articol/sincronizare)' + + *========================= BASELINE: B/T-DVI/G create corect ========================= + SELECT introdc + LOCATE FOR nract = 15000 AND tip_rand == 'B' + =Assert3('5-randul B (baza factura) gasit', IIF(FOUND(),1,0), 1) + IF FOUND() + =Assert3('6-BASELINE B.nract=15000', nract, 15000) + =AssertStr('7-B.scd=371', ALLTRIM(scd), '371') + ELSE + pnAsserts = pnAsserts + 2 + DO EeLog WITH ' FAIL 6-7: randul B negasit' + ENDIF + + SELECT introdc + LOCATE FOR Nvl(rand_dvi,0) = 1 + =Assert3('8-randul T-DVI (rand_dvi=1) gasit', IIF(FOUND(),1,0), 1) + IF FOUND() + =Assert3('9-BASELINE T-DVI.nract=101', nract, 101) + =AssertStr('10-T-DVI.scd=4426', ALLTRIM(scd), '4426') + ELSE + pnAsserts = pnAsserts + 2 + DO EeLog WITH ' FAIL 9-10: randul T-DVI negasit' + ENDIF + + SELECT introdc + LOCATE FOR nract = 15000 AND tip_rand == 'G' + =Assert3('11-randul G (discount) gasit', IIF(FOUND(),1,0), 1) + IF FOUND() + =Assert3('12-BASELINE G.nract=15000', nract, 15000) + ELSE + pnAsserts = pnAsserts + 1 + DO EeLog WITH ' FAIL 12: randul G negasit' + ENDIF + + *========================= ARTICOL prin do_adauga_articol() REAL ========================= + gcMockArtCodmat = 'ART-BULD-212' + LOCAL llEroareArt + llEroareArt = .F. + TRY + goObj.do_adauga_articol() + CATCH TO loExcArt + llEroareArt = .T. + DO EeLog WITH 'EROARE do_adauga_articol ' + TRANSFORM(loExcArt.ErrorNo) + ' [' + loExcArt.Message + ']' + ENDTRY + DOEVENTS FORCE + =Assert3('13-do_adauga_articol() fara eroare', IIF(llEroareArt,0,1), 1) + SELECT rul_temp + LOCATE FOR ALLTRIM(codmat) == 'ART-BULD-212' + =Assert3('14-articolul adaugat in rul_temp', IIF(FOUND(),1,0), 1) + IF FOUND() + REPLACE cant WITH 1, pret_val WITH 800, pretd WITH 800, pret WITH ROUND(800*5.23,4), ; + pret_lei WITH ROUND(800*5.23,4), cota_tva WITH 21 + ELSE + pnAsserts = pnAsserts + 1 + DO EeLog WITH ' FAIL 14: articolul nu a fost adaugat' + ENDIF + goObj.gridart.Refresh() + DOEVENTS FORCE + DO HarnessStep WITH 3, 'articol adaugat (BULDOEXCAVATOR, 800 EUR)' + + *========================= sincronizeaza() REAL (creeaza randurile S) ========================= + LOCAL llEroareSync + llEroareSync = .F. + TRY + goObj.sincronizeaza() + CATCH TO loExcSync + llEroareSync = .T. + DO EeLog WITH 'EROARE sincronizeaza() ' + TRANSFORM(loExcSync.ErrorNo) + ' [' + loExcSync.Message + '] in ' + loExcSync.Procedure + ':' + TRANSFORM(loExcSync.LineNo) + ENDTRY + DOEVENTS FORCE + =Assert3('15-sincronizeaza() fara eroare', IIF(llEroareSync,0,1), 1) + + DO DumpIntrodc WITH 'DUMP dupa sincronizeaza() (inainte de TRIGGER)' + + LOCAL lnCntSDoc1 + lnCntSDoc1 = 0 + SELECT introdc + SCAN FOR nract = 15000 AND tip_rand == 'S' + lnCntSDoc1 = lnCntSDoc1 + 1 + ENDSCAN + =Assert3('16-cel putin un rand S creat de sincronizeaza()', IIF(lnCntSDoc1 >= 1, 1, 0), 1) + + DO HarnessStep WITH 4, 'sincronizat: ' + TRANSFORM(lnCntSDoc1) + ' rand(uri) S, nract=15000 pe B/G/S (baseline)' + + *========================= TRIGGER: pointerul pe randul T-DVI, Valid() pe coloana Nr ========================= + SELECT introdc + LOCATE FOR Nvl(rand_dvi,0) = 1 + =Assert3('17-pozitionare pe randul T-DVI reusita (inainte de trigger)', IIF(FOUND(),1,0), 1) + + LOCAL llTriggerOk, lcVarianta + llTriggerOk = .F. + lcVarianta = '' + IF FOUND() + TRY + goObj.Grid1.cNract.Text1.Valid() + llTriggerOk = .T. + lcVarianta = 'Grid1.cNract.Text1.Valid() (apel direct pe coloana din grid)' + CATCH TO loExcTrig1 + DO EeLog WITH 'INFO Grid1.cNract.Text1.Valid() a esuat (' + TRANSFORM(loExcTrig1.ErrorNo) + ' ' + loExcTrig1.Message + '), incerc fallback copiaza_valoare()' + SELECT introdc + LOCATE FOR Nvl(rand_dvi,0) = 1 + TRY + goObj.copiaza_valoare('nract') + llTriggerOk = .T. + lcVarianta = 'copiaza_valoare(''nract'') (fallback, apel direct pe metoda)' + CATCH TO loExcTrig2 + DO EeLog WITH 'EROARE si fallback copiaza_valoare(''nract'') a esuat: ' + TRANSFORM(loExcTrig2.ErrorNo) + ' ' + loExcTrig2.Message + ENDTRY + ENDTRY + ENDIF + DOEVENTS FORCE + =Assert3('18-TRIGGER executat fara eroare', IIF(llTriggerOk,1,0), 1) + DO EeLog WITH 'TRIGGER folosit: ' + lcVarianta + + DO DumpIntrodc WITH 'DUMP dupa TRIGGER (Valid()/copiaza_valoare pe randul T-DVI)' + + *========================= ASSERT-URI DUPA TRIGGER: nract pe G/S trebuie sa RAMANA 15000 ========================= + *-- randul B NU mai exista in acest punct (sincronizeaza() de mai sus l-a transformat in S - + *-- comportament normal, nu are rost sa-l cautam aici; verificarea lui se face doar S mai jos). + LOCAL llBugG, llBugS, lnCntSVerif + llBugG = .F. + llBugS = .F. + + SELECT introdc + LOCATE FOR tip_rand == 'G' AND Nvl(rand_dvi,0) <> 1 + IF FOUND() + pnAsserts = pnAsserts + 1 + IF nract == 15000 + pnPass = pnPass + 1 + DO EeLog WITH ' PASS 20-G.nract ramane 15000 dupa trigger (=' + TRANSFORM(nract) + ')' + ELSE + llBugG = .T. + DO EeLog WITH ' FAIL 20-G.nract dupa trigger = ' + TRANSFORM(nract) + ' (asteptat 15000) -> BUG' + ENDIF + ELSE + pnAsserts = pnAsserts + 1 + DO EeLog WITH ' FAIL 20: randul G negasit dupa trigger' + ENDIF + + lnCntSVerif = 0 + SELECT introdc + SCAN FOR tip_rand == 'S' AND Nvl(rand_dvi,0) <> 1 + lnCntSVerif = lnCntSVerif + 1 + pnAsserts = pnAsserts + 1 + IF nract == 15000 + pnPass = pnPass + 1 + DO EeLog WITH ' PASS 21.' + TRANSFORM(lnCntSVerif) + '-S.nract ramane 15000 dupa trigger (=' + TRANSFORM(nract) + ')' + ELSE + llBugS = .T. + DO EeLog WITH ' FAIL 21.' + TRANSFORM(lnCntSVerif) + '-S.nract dupa trigger = ' + TRANSFORM(nract) + ' (asteptat 15000) -> BUG' + ENDIF + ENDSCAN + + *-- randul T-DVI insusi trebuie sa ramana 101 (sursa neschimbata de propriul Valid) + SELECT introdc + LOCATE FOR Nvl(rand_dvi,0) = 1 + =Assert3('22-T-DVI.nract ramane 101 (randul sursa neschimbat)', IIF(FOUND(), nract, -1), 101) + + *========================= dupa un NOU sincronizeaza(): randurile S refac starea ========================= + LOCAL llEroareSync2 + llEroareSync2 = .F. + TRY + goObj.sincronizeaza() + CATCH TO loExcSync2 + llEroareSync2 = .T. + DO EeLog WITH 'EROARE al doilea sincronizeaza() ' + TRANSFORM(loExcSync2.ErrorNo) + ' [' + loExcSync2.Message + ']' + ENDTRY + DOEVENTS FORCE + =Assert3('23-al doilea sincronizeaza() fara eroare', IIF(llEroareSync2,0,1), 1) + + DO DumpIntrodc WITH 'DUMP dupa AL DOILEA sincronizeaza() (post-trigger)' + + LOCAL llBugSDupaSync2 + llBugSDupaSync2 = .F. + lnCntSVerif = 0 + SELECT introdc + SCAN FOR tip_rand == 'S' AND Nvl(rand_dvi,0) <> 1 + lnCntSVerif = lnCntSVerif + 1 + pnAsserts = pnAsserts + 1 + IF nract == 15000 + pnPass = pnPass + 1 + DO EeLog WITH ' PASS 24.' + TRANSFORM(lnCntSVerif) + '-dupa al 2-lea sync: S.nract=15000 (=' + TRANSFORM(nract) + ')' + ELSE + llBugSDupaSync2 = .T. + DO EeLog WITH ' FAIL 24.' + TRANSFORM(lnCntSVerif) + '-dupa al 2-lea sync: S.nract=' + TRANSFORM(nract) + ' (asteptat 15000) -> BUG persista dupa sincronizare' + ENDIF + ENDSCAN + + DO HarnessStep WITH 5, 'final: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS' + + DO EeLog WITH '=========================================================' + IF llBugG OR llBugS OR llBugSDupaSync2 + DO EeLog WITH 'BUG CONFIRMAT: nract-ul randului T-DVI (101) s-a propagat peste nract-ul' + ; + ' randurilor B/G/S ale facturii principale (asteptat 15000) dupa ce Valid()/' + ; + 'copiaza_valoare() a rulat cu pointerul pe randul T-DVI.' + ELSE + DO EeLog WITH 'BUG NECONFIRMAT: nract-ul randurilor B/G/S a ramas 15000 dupa trigger si dupa re-sincronizare.' + ENDIF + DO EeLog WITH '=========================================================' + + DO EeLog WITH 'REZULTAT: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS' + IF pnPass = pnAsserts + DO EeLog WITH 'REZULTAT: PASS (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ')' + ELSE + DO EeLog WITH 'REZULTAT: FAIL (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS)' + ENDIF + + DO HarnessDone WITH 'done' + +CATCH TO loExc + DO EeLog 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 DumpIntrodc + LPARAMETERS tcTitlu + LOCAL lcSelAnt, lnRecAnt + lcSelAnt = SELECT() + lnRecAnt = IIF(USED('introdc'), IIF(EOF('introdc') OR BOF('introdc'), 0, RECNO('introdc')), 0) + DO EeLog WITH tcTitlu + IF !USED('introdc') + DO EeLog WITH ' (introdc neinstantiat)' + RETURN + ENDIF + SELECT introdc + SCAN + DO EeLog WITH ' tip_rand=' + ALLTRIM(NVL(tip_rand,'?')) + ' nract=' + TRANSFORM(NVL(nract,0)) + ; + ' doc_key=[' + ALLTRIM(NVL(doc_key,'')) + '] rand_dvi=' + TRANSFORM(NVL(rand_dvi,0)) + ; + ' scd=' + ALLTRIM(NVL(scd,'')) + ' scc=' + ALLTRIM(NVL(scc,'')) + ' suma=' + TRANSFORM(NVL(suma,0)) + ENDSCAN + IF lnRecAnt > 0 + TRY + GO lnRecAnt + CATCH + GO TOP + ENDTRY + ENDIF + SELECT (lcSelAnt) +ENDPROC + +PROCEDURE CreeazaIntrodc + *-- coloane rand_dvi N(1), valuta_proprie N(1) (rand_dvi = randul T-DVI) + 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), expl_manual N(1), ; + scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1)) +ENDPROC + +PROCEDURE CreeazaRulTemp + 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 + +FUNCTION RECCOUNT_ACTIVE + LPARAMETERS tcAlias + LOCAL lnSel, lnCnt + lnSel = SELECT() + SELECT (tcAlias) + COUNT TO lnCnt FOR !DELETED() + SELECT (lnSel) + RETURN lnCnt +ENDFUNC + +PROCEDURE Assert3 + LPARAMETERS tcLabel, tuActual, tuExpected + pnAsserts = pnAsserts + 1 + IF ABS(NVL(tuActual,0) - tuExpected) < 0.02 + pnPass = pnPass + 1 + DO EeLog WITH ' PASS ' + tcLabel + ' (=' + TRANSFORM(tuActual) + ')' + ELSE + DO EeLog WITH ' FAIL ' + tcLabel + ' (actual=' + TRANSFORM(tuActual) + ' asteptat=' + TRANSFORM(tuExpected) + ')' + ENDIF +ENDPROC + +PROCEDURE AssertStr + LPARAMETERS tcLabel, tcActual, tcExpected + pnAsserts = pnAsserts + 1 + IF tcActual == tcExpected + pnPass = pnPass + 1 + DO EeLog WITH ' PASS ' + tcLabel + ' (=[' + tcActual + '])' + ELSE + DO EeLog WITH ' FAIL ' + tcLabel + ' (actual=[' + tcActual + '] asteptat=[' + tcExpected + '])' + ENDIF +ENDPROC + +PROCEDURE EeErr + LPARAMETERS tnErr, tcMsg, tcProg, tnLine + DO EeLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg +ENDPROC + +PROCEDURE EeLog + 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' + CREATE CURSOR (m.tcCursor) (denumire C(100), codmat C(30), cant N(14,3), ; + pret_val N(18,4), pretd N(18,4), pret N(18,4), pret_lei N(18,4), cont C(10), ; + acont C(20), serie C(30), lot C(30), adata_expirare C(10), proc_disc N(6,2), cota_tva N(6,2)) + RETURN 1 + ENDIF + IF 'CONFIG_ANALITICE' $ UPPER(m.tcSql) + CREATE CURSOR (m.tcCursor) (camp_leg_prefix C(30), camp_leg_sufix C(30)) + INSERT INTO (m.tcCursor) VALUES ('', '') + RETURN 1 + ENDIF + IF 'FCONTURI_ANALITICE' $ UPPER(m.tcSql) + CREATE CURSOR (m.tcCursor) (acont C(20)) + INSERT INTO (m.tcCursor) VALUES (IIF(TYPE('gcMockAcontCrt') = 'C', gcMockAcontCrt, '')) + RETURN 1 + ENDIF + IF 'VPLCONT_ANALITIC' $ UPPER(m.tcSql) + CREATE CURSOR (m.tcCursor) (cont C(10), acont C(20)) + RETURN 1 + ENDIF + IF 'VCONFIG_CONT_IREG' $ UPPER(m.tcSql) + CREATE CURSOR (m.tcCursor) (contpart C(10), fel_cont N(1), cu_inregistrari N(1), ; + explic_cont C(100), exceptie C(10), pozitie N(1), invers N(1), gasit N(1)) + INSERT INTO (m.tcCursor) VALUES ('401', 0, 0, 'Furnizori', '', 0, 0, 0) + RETURN 1 + ENDIF + CREATE CURSOR (m.tcCursor) (id_temp N(1)) + 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) + INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ; + VALUES (220, 'ACH. IMP. 21%', 1, 0, 'FO21B', 21, 221, 1, 3, 301204) + INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ; + VALUES (221, 'TVA ACH. IMP. 21%', 1, 0, 'FO21T', 21, 1, 4, 301204) +ENDPROC diff --git a/utile/Teste/achizitie_import/test_repro_bug_nract_dvi_propagat.ps1 b/utile/Teste/achizitie_import/test_repro_bug_nract_dvi_propagat.ps1 new file mode 100644 index 0000000..a90c6a8 --- /dev/null +++ b/utile/Teste/achizitie_import/test_repro_bug_nract_dvi_propagat.ps1 @@ -0,0 +1,12 @@ +# test_repro_bug_nract_dvi_propagat.ps1 - wrapper peste harness-ul generic pentru testul de +# REPRODUCERE a propagarii nract-ului DVI peste randurile B/G/S ale facturii principale. +# Rulare: powershell -ExecutionPolicy Bypass -File test_repro_bug_nract_dvi_propagat.ps1 +$ErrorActionPreference = 'Stop' +$Teste = $PSScriptRoot +& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') ` + -TestPrg (Join-Path $Teste 'test_repro_bug_nract_dvi_propagat.prg') ` + -Steps @('nota_goala','dialog_completat','dupa_termin','articol_adaugat','sincronizat','final') ` + -ShotsDir (Join-Path $Teste 'screenshots_repro_bug_nract_dvi') ` + -SyncDir (Join-Path $Teste 'uisync_repro_bug_nract_dvi') ` + -StepTimeoutSec 180 ` + -ReadyTimeoutSec 180 diff --git a/utile/Teste/achizitie_import/test_repro_flux_curat_doc_dublu.prg b/utile/Teste/achizitie_import/test_repro_flux_curat_doc_dublu.prg new file mode 100644 index 0000000..dc40da9 --- /dev/null +++ b/utile/Teste/achizitie_import/test_repro_flux_curat_doc_dublu.prg @@ -0,0 +1,927 @@ +* test_repro_flux_curat_doc_dublu.prg +* Test de REPRODUCERE - FLUX CURAT, FARA nicio interactiune de grila (nu se cheama +* Grid1.cNract.Text1.Valid() si nu se cheama copiaza_valoare() manual din test). Raspunde la +* intrebarea: se strica SINGUR nract-ul facturii principale (DOC1) in timpul fluxului real - +* dialog import_adauga_factura (x2 documente) + do_adauga_articol() + sincronizeaza() + +* inainte_de_do_termin() - sau ramane corect pana la Terminat, asa cum a raportat Marius? +* +* Scenariu (date reale, act.cod=1140856): +* DOC1 - factura principala: nract=15000, id_fdoc=42 (Factura), id_partc=463 (RAJA), in +* valuta EUR (curs 5.23), suma=1000 EUR=5230 lei, discount financiar 100 EUR=523 lei; +* TVA pe DVI (nract=101, id_fdoc=39 'DVI', id_partc=1398 'BIROUL VAMAL'), DVI FARA valuta +* proprie (bifa scoasa - alegere RON prin picker-ul real, normalizata "fara valuta"). +* DOC2 - taxe vamale: nract=101, id_fdoc=39 (DVI), id_partc=1398 (BIROUL VAMAL), FARA +* valuta, suma=500 lei, TVA la FURNIZOR (nu pe DVI) cota 11%, participa la pret. +* ARTICOLE (2, ale DOC1): cont 371 analitic 816, un articol cota 11% (baza 100 EUR/523 lei) +* si unul cota 21% (baza 900 EUR/4707 lei) - proportie 100:900, ca sa se exercite +* sparge_tva_protejat() (randul T-DVI e "protejat" - valuta_proprie=1 - pentru ca factura +* e in valuta straina, chiar daca DVI-ul insusi nu are valuta proprie). +* +* ATENTIE: DOC2 are ACELASI nract/id_fdoc/id_partc (101/39/1398) ca randul T-DVI al DOC1 (dupa +* ce acesta preia identitatea vamala) - testul verifica explicit ca doc_key nu se suprapune +* intre cele doua (calc_doc_key :8799 include nr_doc, care difera - vezi assert-urile finale). +* +* Dump complet introdc dupa fiecare pas (tip_rand, nr_doc, doc_key, nract, id_fdoc, id_partc, +* scd, scc, suma, suma_val, rand_dvi, valuta_proprie, mod_manual) + actactan dupa Terminat. +* Asserturile de identitate se fac dupa nr_doc (nu dupa nract, care e tocmai ce se verifica). +* +* Rulare: +* powershell -ExecutionPolicy Bypass -File test_repro_flux_curat_doc_dublu.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_repro_flux_curat_doc_dublu_log.txt" +gcSyncDir = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\uisync_repro_flux_curat\" +STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog) + +ON ERROR DO EeErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO() +ON SHUTDOWN QUIT + +TRY + LOCAL gcAppPath, lcPath + gcAppPath = "D:\ROA\ROAGEST\" + SET DEFAULT TO (gcAppPath) + + lcPath = gcAppPath + 'COMUN\Utile\Teste\achizitie_import\stub_verificare;' + ; + 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 EeLog 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 EeLog WITH 'SET CLASSLIB OK' + + *----- PROCEDURI (mock-uri 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\achizitie_import\mock_caut_valuta.prg" ADDITIVE + SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_cauta_nom_articole.prg" ADDITIVE + SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_oscrie_in_fisiere.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 EeLog 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 gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip, gcMockArtCodmat + gnMockRaspuns = 6 + gcMockUltimMesaj = '' + gnMockUltimTip = 0 + PUBLIC gnButon + gnButon = 1 + gcMockArtCodmat = '' + + PUBLIC goExecutor, goApp + goExecutor = CREATEOBJECT('dummyexecutor') + goApp = CREATEOBJECT('dummyapp') + + *----- poAct: antetul notei (factura import EUR, curs 5.23) ----- + PUBLIC poAct + poAct = CREATEOBJECT('Custom') + poAct.AddProperty('nume_val', 'EUR') + poAct.AddProperty('curs', 5.23) + poAct.AddProperty('proc_tva', 1.21) + poAct.AddProperty('nnir', 0) + poAct.AddProperty('id_valuta', 978) + poAct.AddProperty('id_fdoc', 42) + poAct.AddProperty('fdoc', 'Factura') + poAct.AddProperty('id_partc', 463) + poAct.AddProperty('partc', 'RAJA') + 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 / saft_taxtable: perechi 11% + 21%, achizitii interne + import ----- + 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) + INSERT INTO jtva_coloane2 VALUES (3, 210, 'ACH. INT. 11%', 1, 0, 1, 'RO11B', 'RO11T', 11, 211) + INSERT INTO jtva_coloane2 VALUES (4, 211, 'TVA ACH. INT. 11%', 1, 0, 1, 'RO11T', '', 11, 0) + INSERT INTO jtva_coloane2 VALUES (5, 220, 'ACH. IMP. 21%', 1, 0, 1, 'FO21B', 'FO21T', 21, 221) + INSERT INTO jtva_coloane2 VALUES (6, 221, 'TVA ACH. IMP. 21%', 1, 0, 1, 'FO21T', '', 21, 0) + INSERT INTO jtva_coloane2 VALUES (7, 222, 'ACH. IMP. 11%', 1, 0, 1, 'FO11B', 'FO11T', 11, 223) + INSERT INTO jtva_coloane2 VALUES (8, 223, 'TVA ACH. IMP. 11%', 1, 0, 1, 'FO11T', '', 11, 0) + + 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 ('301204-Import de bunuri cota 21%', 301204, '', 21, 1, 0, 1, 0) + INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ; + VALUES ('301104-Achizitii interne cota 11%', 301104, '', 11, 1, 0, 1, 0) + + DO CreeazaIntrodc WITH 'introdc' + 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 + + DO CreeazaRulTemp + INSERT INTO rul_temp (denumire, codmat, cant, pret, pret_lei, cont, cota_tva) ; + VALUES ('PLACEHOLDER', 'PH', 1, 1, 1, '371', 21) + + *-- index ord_doc INAINTE de CREATEOBJECT (capcana p, docs/testare-ui-vfp.md) + SELECT introdc + INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc + SET ORDER TO ord_doc + + *-- vezi antetul test_e2e_dvi_ron_discount.prg: tlIntern BARA, aceeasi valoare ca la CREATEOBJECT + PRIVATE tlIntern + tlIntern = .F. + + PUBLIC gcTempPath + gcTempPath = ADDBS(SYS(2023)) + PUBLIC gnHandle + gnHandle = -1 + PUBLIC gnTipGest + gnTipGest = 0 + PUBLIC gcCondSucursala + gcCondSucursala = '' + + DO EeLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F. - mod import)' + PUBLIC goObj + goObj = CREATEOBJECT('IMPORT_nota', .F.) + IF VARTYPE(goObj) <> 'O' + DO EeLog WITH 'FAIL: instantiere import_nota' + DO HarnessDone WITH 'done-error' + QUIT + ENDIF + goObj.lDialogAratat = .T. + goObj.oact = poAct + *-- lSpargeSecundare ramane la valoarea implicita a clasei (.T., "spargere secundare activa") + *-- - NU se suprascrie, ca sa reflecte comportamentul implicit real, nu setarea din alte teste. + goObj.WindowType = 0 + goObj.Visible = .T. + goObj.Show() + goObj.WindowState = 2 + DOEVENTS FORCE + + SELECT rul_temp + ZAP + goObj.gridart.Refresh() + DOEVENTS FORCE + + PRIVATE pnAsserts, pnPass + STORE 0 TO pnAsserts, pnPass + + DO HarnessStep WITH 0, 'nota goala afisata, mod import (.F.)' + + *========================= DOC1: factura EUR (RAJA) + TVA DVI fara valuta proprie + discount ========================= + PUBLIC goDlg + goDlg = CREATEOBJECT('import_adauga_factura', goObj) + goDlg.cFelDoc = 'Factura' + goDlg.nIdFdoc = 42 + goDlg.nNract = 15000 + goDlg.dDataAct = DATE() + goDlg.nIdPartener = 463 + goDlg.cPartener = 'RAJA' + goDlg.cExplicatia = 'Factura import RAJA' + goDlg.nSuma = 1000 + goDlg.nSumaLei = 0 + goDlg.nCurs = 5.23 + goDlg.nIdValuta = 978 + goDlg.cValuta = 'EUR' + goDlg.chkInValutaCont.Value = 1 + goDlg.chkParticipaValuta.Value = 1 + goDlg.nIdExplicatieTva = 220 + goDlg.cExplicatieTva = 'ACH. IMP. 21%' + goDlg.nProcentTva = 21 + + *-- DVI: identitate proprie (document vamal, partener vamal, nract 101), FARA valuta proprie + goDlg.cSerieDvi = '' + goDlg.nNractDvi = 101 + goDlg.dDviData = DATE() + goDlg.nIdFdocDVI = 39 + goDlg.cFelDocDvi = 'DVI' + goDlg.nDviIdPartener = 1398 + goDlg.cDviPartener = 'BIROUL VAMAL' + + goDlg.optTipTva.Value = 2 + goDlg.optTipTva.InteractiveChange() + + *-- alegere RON pe blocul DVI (picker real, mock_caut_valuta) - normalizare "fara valuta proprie" + PUBLIC goMockValuta, goMockValutaCoada + goMockValuta = CREATEOBJECT('Custom') + goMockValuta.AddProperty('id_valuta', 1) + goMockValuta.AddProperty('nume_val', 'RON') + goMockValutaCoada = CREATEOBJECT('Collection') + LOCAL loValRon + loValRon = CREATEOBJECT('Custom') + loValRon.AddProperty('id_valuta', 1) + loValRon.AddProperty('nume_val', 'RON') + goMockValutaCoada.Add(loValRon) + goDlg.cmdDviValuta.Click() + =AssertStr('1-DVI valuta aleasa RON (fara valuta proprie)', ALLTRIM(goDlg.cDviValuta), 'RON') + + *-- discount financiar (doar baza) + goDlg.txtDiscBaza.Value = 100 + goDlg.txtDiscBaza.Valid() + + goDlg.WindowType = 0 + goDlg.Visible = .T. + goDlg.Show() + DOEVENTS FORCE + DO HarnessStep WITH 1, 'DOC1 completat: RAJA nract=15000, DVI nract=101 fara valuta, discount 100 EUR' + + LOCAL llOkValid1 + llOkValid1 = goDlg.valideaza() + =Assert3('2-DOC1 dialog valideaza() reuseste', IIF(llOkValid1,1,0), 1) + + *-- toDlg DOC1 construit INLINE in programul PRINCIPAL (capcana l, mock_caut_valuta.prg) + PUBLIC goT + 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) + IF goDlg.optTipTva.Value = 2 + =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) + =ADDPROPERTY(goT,'dvi_in_valuta',!(EMPTY(goDlg.cDviValuta) OR UPPER(ALLTRIM(goDlg.cDviValuta))=='RON')) + =ADDPROPERTY(goT,'dvi_id_valuta',goDlg.nDviIdValuta) + =ADDPROPERTY(goT,'dvi_curs',goDlg.nDviCurs) + =ADDPROPERTY(goT,'dvi_nume_val',ALLTRIM(NVL(goDlg.cDviValuta,''))) + =ADDPROPERTY(goT,'dvi_valuta_proprie',IIF(!(EMPTY(goDlg.cDviValuta) OR UPPER(ALLTRIM(goDlg.cDviValuta))=='RON') OR !(EMPTY(goDlg.cValuta) OR UPPER(ALLTRIM(goDlg.cValuta))=='RON'),IIF(goDlg.nDviIdValuta<>goDlg.nIdValuta OR goDlg.nDviCurs<>goDlg.nCurs,1,0),0)) + ENDIF + =ADDPROPERTY(goT,'disc_baza_lei',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,ROUND(goDlg.nDiscBaza*goDlg.nCurs,gnPC),goDlg.nDiscBaza)) + =ADDPROPERTY(goT,'disc_baza_val',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,goDlg.nDiscBaza,0)) + + LOCAL llOkAdauga1 + llOkAdauga1 = goObj.do_adauga_factura(goT) + =Assert3('3-DOC1 do_adauga_factura(goT) reuseste (Termin)', IIF(llOkAdauga1,1,0), 1) + goDlg.Hide() + DOEVENTS FORCE + DO HarnessStep WITH 2, 'DOC1 adaugat: introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri' + DO DumpIntrodc WITH 'DUMP dupa DOC1 (RAJA, nract=15000)' + + *========================= DOC2: taxe vamale (BIROUL VAMAL) - TVA la furnizor, cota 11%, FARA valuta ========================= + PUBLIC goDlg2 + goDlg2 = CREATEOBJECT('import_adauga_factura', goObj) + goDlg2.cFelDoc = 'DVI' + goDlg2.nIdFdoc = 39 + goDlg2.nNract = 101 + goDlg2.dDataAct = DATE() + goDlg2.nIdPartener = 1398 + goDlg2.cPartener = 'BIROUL VAMAL' + goDlg2.cExplicatia = 'Taxe vamale' + goDlg2.nSuma = 500 + goDlg2.nSumaLei = 0 + goDlg2.nCurs = 0 + goDlg2.nIdValuta = 0 + goDlg2.cValuta = '' + goDlg2.chkInValutaCont.Value = 0 + goDlg2.chkParticipaValuta.Value = 1 + goDlg2.nIdExplicatieTva = 210 + goDlg2.cExplicatieTva = 'ACH. INT. 11%' + goDlg2.nProcentTva = 11 + + goDlg2.optTipTva.Value = 1 + goDlg2.optTipTva.InteractiveChange() + + goDlg2.WindowType = 0 + goDlg2.Visible = .T. + goDlg2.Show() + DOEVENTS FORCE + DO HarnessStep WITH 3, 'DOC2 completat: BIROUL VAMAL nract=101, TVA furnizor 11%, fara valuta' + + LOCAL llOkValid2 + llOkValid2 = goDlg2.valideaza() + =Assert3('4-DOC2 dialog valideaza() reuseste', IIF(llOkValid2,1,0), 1) + + *-- toDlg DOC2 construit INLINE in programul PRINCIPAL (aceeasi capcana l) + PUBLIC goT2 + goT2 = CREATEOBJECT('Empty') + =ADDPROPERTY(goT2,'serie_act',ALLTRIM(NVL(goDlg2.cSerieAct,''))) + =ADDPROPERTY(goT2,'nract',goDlg2.nNract) + =ADDPROPERTY(goT2,'dataact',goDlg2.dDataAct) + =ADDPROPERTY(goT2,'fdoc',goDlg2.cFelDoc) + =ADDPROPERTY(goT2,'id_fdoc',goDlg2.nIdFdoc) + =ADDPROPERTY(goT2,'id_partc',goDlg2.nIdPartener) + =ADDPROPERTY(goT2,'partc',goDlg2.cPartener) + =ADDPROPERTY(goT2,'explicatia',ALLTRIM(NVL(goDlg2.cExplicatia,''))) + =ADDPROPERTY(goT2,'suma',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,IIF(goDlg2.nSumaLei<>0,goDlg2.nSumaLei,ROUND(goDlg2.nSuma*goDlg2.nCurs,gnPC)),goDlg2.nSuma)) + =ADDPROPERTY(goT2,'suma_val',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,goDlg2.nSuma,0)) + =ADDPROPERTY(goT2,'in_valuta',goDlg2.chkInValutaCont.Value) + =ADDPROPERTY(goT2,'participa_valuta',(goDlg2.chkParticipaValuta.Value=1)) + =ADDPROPERTY(goT2,'id_valuta',IIF(goDlg2.chkInValutaCont.Value=1,goDlg2.nIdValuta,0)) + =ADDPROPERTY(goT2,'curs',IIF(goDlg2.chkInValutaCont.Value=1,goDlg2.nCurs,0)) + =ADDPROPERTY(goT2,'nume_val',IIF(goDlg2.chkInValutaCont.Value=1,ALLTRIM(NVL(goDlg2.cValuta,'')),'')) + =ADDPROPERTY(goT2,'cTipTva',IIF(goDlg2.optTipTva.Value=1,'F',IIF(goDlg2.optTipTva.Value=2,'D','N'))) + =ADDPROPERTY(goT2,'id_jtva_coloana',goDlg2.nIdExplicatieTva) + =ADDPROPERTY(goT2,'disc_baza_lei',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,ROUND(goDlg2.nDiscBaza*goDlg2.nCurs,gnPC),goDlg2.nDiscBaza)) + =ADDPROPERTY(goT2,'disc_baza_val',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,goDlg2.nDiscBaza,0)) + + LOCAL llOkAdauga2 + llOkAdauga2 = goObj.do_adauga_factura(goT2) + =Assert3('5-DOC2 do_adauga_factura(goT2) reuseste (Termin)', IIF(llOkAdauga2,1,0), 1) + goDlg2.Hide() + DOEVENTS FORCE + DO HarnessStep WITH 4, 'DOC2 adaugat: introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri' + DO DumpIntrodc WITH 'DUMP dupa DOC2 (BIROUL VAMAL, nract=101)' + + *========================= verificare doc_key: T-DVI (DOC1) vs B (DOC2) nu se suprapun ========================= + LOCAL lcDocKeyTDvi, lcDocKeyDoc2B + lcDocKeyTDvi = '' + lcDocKeyDoc2B = '' + SELECT introdc + LOCATE FOR Nvl(rand_dvi,0) = 1 + IF FOUND() + lcDocKeyTDvi = ALLTRIM(NVL(doc_key,'')) + ENDIF + LOCATE FOR nract = 101 AND id_fdoc = 39 AND tip_rand == 'B' + IF FOUND() + lcDocKeyDoc2B = ALLTRIM(NVL(doc_key,'')) + ENDIF + =Assert3('6-ambele doc_key gasite (T-DVI si B-DOC2)', IIF(!EMPTY(lcDocKeyTDvi) AND !EMPTY(lcDocKeyDoc2B),1,0), 1) + pnAsserts = pnAsserts + 1 + IF !EMPTY(lcDocKeyTDvi) AND !EMPTY(lcDocKeyDoc2B) AND lcDocKeyTDvi <> lcDocKeyDoc2B + pnPass = pnPass + 1 + DO EeLog WITH ' PASS 7-doc_key T-DVI(DOC1)=[' + lcDocKeyTDvi + '] <> doc_key B(DOC2)=[' + lcDocKeyDoc2B + '] (fara suprapunere)' + ELSE + DO EeLog WITH ' FAIL 7-doc_key T-DVI(DOC1)=[' + lcDocKeyTDvi + '] SE SUPRAPUNE cu B(DOC2)=[' + lcDocKeyDoc2B + '] -> pista doc_key CONFIRMATA' + ENDIF + + *========================= ARTICOLE (2, ale DOC1): cont 371 analitic 816, cote 11%/21% ========================= + gcMockArtCodmat = 'ART-A8-371' + LOCAL llEroareArt1 + llEroareArt1 = .F. + TRY + goObj.do_adauga_articol() + CATCH TO loExcArt1 + llEroareArt1 = .T. + DO EeLog WITH 'EROARE do_adauga_articol (art1) ' + TRANSFORM(loExcArt1.ErrorNo) + ' [' + loExcArt1.Message + ']' + ENDTRY + =Assert3('8-do_adauga_articol() art1 (cota 11%) fara eroare', IIF(llEroareArt1,0,1), 1) + 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,4), ; + pret_lei WITH ROUND(100*5.23,4), cont WITH '371', cota_tva WITH 11 + ELSE + pnAsserts = pnAsserts + 1 + DO EeLog WITH ' FAIL 8b: articolul cota 11% nu a fost adaugat' + ENDIF + + gcMockArtCodmat = 'ART-BULD-212' + LOCAL llEroareArt2 + llEroareArt2 = .F. + TRY + goObj.do_adauga_articol() + CATCH TO loExcArt2 + llEroareArt2 = .T. + DO EeLog WITH 'EROARE do_adauga_articol (art2) ' + TRANSFORM(loExcArt2.ErrorNo) + ' [' + loExcArt2.Message + ']' + ENDTRY + =Assert3('9-do_adauga_articol() art2 (cota 21%) fara eroare', IIF(llEroareArt2,0,1), 1) + 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,4), ; + pret_lei WITH ROUND(900*5.23,4), cont WITH '371', cota_tva WITH 21 + ELSE + pnAsserts = pnAsserts + 1 + DO EeLog WITH ' FAIL 9b: articolul cota 21% nu a fost adaugat' + ENDIF + goObj.gridart.Refresh() + DOEVENTS FORCE + DO HarnessStep WITH 5, 'articole adaugate (cont 371/816, cote 11% si 21%)' + DO DumpIntrodc WITH 'DUMP dupa ARTICOLE (inainte de sincronizare)' + + *========================= sincronizeaza() REAL ========================= + LOCAL llEroareSync + llEroareSync = .F. + TRY + goObj.sincronizeaza() + CATCH TO loExcSync + llEroareSync = .T. + DO EeLog WITH 'EROARE sincronizeaza() ' + TRANSFORM(loExcSync.ErrorNo) + ' [' + loExcSync.Message + '] in ' + loExcSync.Procedure + ':' + TRANSFORM(loExcSync.LineNo) + ENDTRY + DOEVENTS FORCE + =Assert3('10-sincronizeaza() fara eroare', IIF(llEroareSync,0,1), 1) + DO HarnessStep WITH 6, 'sincronizat' + DO DumpIntrodc WITH 'DUMP dupa sincronizeaza() (flux curat, fara nicio interactiune de grila)' + + *========================= ASSERT-URI DE INTEGRITATE nract - identitate dupa nr_doc, NU dupa nract ========================= + LOCAL lnNrDocRaja, llBugFluxCurat + lnNrDocRaja = 0 + llBugFluxCurat = .F. + SELECT introdc + LOCATE FOR id_partc = 463 AND tip_rand <> 'T' + IF FOUND() + lnNrDocRaja = nr_doc + ENDIF + IF lnNrDocRaja = 0 + *-- RAJA nu mai apare dupa id_partc (posibil deja corupt) - incerc dupa nr_doc minim + SELECT introdc + CALCULATE MIN(nr_doc) TO lnNrDocRaja + ENDIF + DO EeLog WITH 'nr_doc identificat pentru DOC1 (RAJA): ' + TRANSFORM(lnNrDocRaja) + + LOCAL lnCntVerifCurat + lnCntVerifCurat = 0 + SELECT introdc + SCAN FOR nr_doc = lnNrDocRaja AND Nvl(rand_dvi,0) <> 1 + lnCntVerifCurat = lnCntVerifCurat + 1 + pnAsserts = pnAsserts + 1 + IF nract == 15000 + pnPass = pnPass + 1 + DO EeLog WITH ' PASS 11.' + TRANSFORM(lnCntVerifCurat) + '-tip_rand=' + tip_rand + ' nract=15000 (flux curat, =' + TRANSFORM(nract) + ')' + ELSE + llBugFluxCurat = .T. + DO EeLog WITH ' FAIL 11.' + TRANSFORM(lnCntVerifCurat) + '-tip_rand=' + tip_rand + ' nract=' + TRANSFORM(nract) + ' (asteptat 15000) -> SE STRICA SINGUR, FARA TRIGGER' + ENDIF + ENDSCAN + + DO HarnessStep WITH 7, 'verificat flux curat: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS' + + *========================= imediat inainte de Terminat: ultim DUMP introdc ========================= + DO DumpIntrodc WITH 'DUMP imediat inainte de Terminat (introdc, dupa sincronizare, fara trigger)' + + *========================= Terminat (stub verificare.scx) ========================= + DO CreeazaActactan + LOCAL llEroareTermin + llEroareTermin = .F. + TRY + goObj.inainte_de_do_termin() + CATCH TO loExcTermin + llEroareTermin = .T. + DO EeLog WITH 'EROARE inainte_de_do_termin() ' + TRANSFORM(loExcTermin.ErrorNo) + ' [' + loExcTermin.Message + '] in ' + loExcTermin.Procedure + ':' + TRANSFORM(loExcTermin.LineNo) + ENDTRY + =Assert3('12-inainte_de_do_termin() fara eroare (Terminat)', IIF(llEroareTermin,0,1), 1) + + IF USED('actactan') + DO EeLog WITH 'DUMP actactan dupa Terminat:' + SELECT actactan + SCAN + DO EeLog WITH ' recno=' + TRANSFORM(RECNO()) + ' nract=' + TRANSFORM(NVL(nract,0)) + ' id_fdoc=' + TRANSFORM(NVL(id_fdoc,0)) + ; + ' id_partc=' + TRANSFORM(NVL(id_partc,0)) + ' partc=[' + ALLTRIM(NVL(partc,'')) + ']' + ; + ' scd=' + ALLTRIM(NVL(scd,'')) + ' scc=' + ALLTRIM(NVL(scc,'')) + ' suma=' + TRANSFORM(NVL(suma,0)) + ENDSCAN + + LOCAL lnCntVerifActactan + lnCntVerifActactan = 0 + SELECT actactan + SCAN FOR id_partc = 463 + lnCntVerifActactan = lnCntVerifActactan + 1 + pnAsserts = pnAsserts + 1 + IF nract == 15000 + pnPass = pnPass + 1 + DO EeLog WITH ' PASS 13.' + TRANSFORM(lnCntVerifActactan) + '-actactan randul partener 463 (RAJA): nract=15000 (=' + TRANSFORM(nract) + ')' + ELSE + llBugFluxCurat = .T. + DO EeLog WITH ' FAIL 13.' + TRANSFORM(lnCntVerifActactan) + '-actactan randul partener 463 (RAJA): nract=' + TRANSFORM(nract) + ' (asteptat 15000) -> BUG in actactan, flux curat' + ENDIF + ENDSCAN + IF lnCntVerifActactan = 0 + DO EeLog WITH ' INFO: niciun rand cu id_partc=463 in actactan (poate fi corupt catre 1398 - vezi dump)' + ENDIF + ELSE + DO EeLog WITH 'INFO: actactan neinstantiat dupa inainte_de_do_termin() (posibil eroare de validare mai devreme in flux)' + ENDIF + + DO HarnessStep WITH 8, 'final: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS' + + DO EeLog WITH '=========================================================' + IF llBugFluxCurat + DO EeLog WITH 'BUG CONFIRMAT: nract-ul DOC1 (RAJA, 15000) SE STRICA SINGUR in fluxul curat ' + ; + '(fara nicio interactiune de grila / Valid() / copiaza_valoare() apelate din test).' + ELSE + DO EeLog WITH 'BUG NECONFIRMAT in flux curat: nract-ul DOC1 (RAJA, 15000) a ramas corect pe toate ' + ; + 'randurile lui (B/G/S) pe tot parcursul fluxului real - dialog x2 + articole + sincronizare + Terminat - ' + ; + 'FARA nicio interactiune de grila. Corupt bug-ul necesita un declansator suplimentar (vezi test separat).' + ENDIF + DO EeLog WITH '=========================================================' + + DO EeLog WITH 'REZULTAT: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS' + IF pnPass = pnAsserts + DO EeLog WITH 'REZULTAT: PASS (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ')' + ELSE + DO EeLog WITH 'REZULTAT: FAIL (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS)' + ENDIF + + DO HarnessDone WITH 'done' + +CATCH TO loExc + DO EeLog 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 DumpIntrodc + LPARAMETERS tcTitlu + LOCAL lcSelAnt, lnRecAnt + lcSelAnt = SELECT() + lnRecAnt = IIF(USED('introdc'), IIF(EOF('introdc') OR BOF('introdc'), 0, RECNO('introdc')), 0) + DO EeLog WITH tcTitlu + IF !USED('introdc') + DO EeLog WITH ' (introdc neinstantiat)' + RETURN + ENDIF + SELECT introdc + SCAN + DO EeLog WITH ' tip_rand=' + ALLTRIM(NVL(tip_rand,'?')) + ' nr_doc=' + TRANSFORM(NVL(nr_doc,0)) + ; + ' nract=' + TRANSFORM(NVL(nract,0)) + ' id_fdoc=' + TRANSFORM(NVL(id_fdoc,0)) + ; + ' id_partc=' + TRANSFORM(NVL(id_partc,0)) + ' doc_key=[' + ALLTRIM(NVL(doc_key,'')) + ']' + ; + ' rand_dvi=' + TRANSFORM(NVL(rand_dvi,0)) + ' valuta_proprie=' + TRANSFORM(NVL(valuta_proprie,0)) + ; + ' mod_manual=' + TRANSFORM(NVL(mod_manual,0)) + ' scd=' + ALLTRIM(NVL(scd,'')) + ' scc=' + ALLTRIM(NVL(scc,'')) + ; + ' suma=' + TRANSFORM(NVL(suma,0)) + ' suma_val=' + TRANSFORM(NVL(suma_val,0)) + ENDSCAN + IF lnRecAnt > 0 + TRY + GO lnRecAnt + CATCH + GO TOP + ENDTRY + ENDIF + SELECT (lcSelAnt) +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), expl_manual N(1), ; + scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1)) +ENDPROC + +PROCEDURE CreeazaRulTemp + 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 CreeazaActactan + IF USED('actactan') + USE IN ('actactan') + ENDIF + CREATE CURSOR actactan ( ; + id_fdoc N(14), fdoc C(50), dataact D, serie_act C(10), nract N(14), ; + partc C(100), id_partc N(14), partd C(100), id_partd N(14), ; + suma N(18,4), suma_val N(18,4), explicatia C(100), explicatia4 C(50), explicatia5 C(50), ; + scd C(10), ascd C(20), scc C(10), ascc C(20), id_jtva_coloana N(14) NULL, taxcode N(6), ; + id_valuta N(14), curs N(14,4), nume_val C(10), proc_tva N(8,4), nnir N(14), ; + tva_incasare N(1), id_set N(14), id_gestin N(14)) +ENDPROC + +FUNCTION RECCOUNT_ACTIVE + LPARAMETERS tcAlias + LOCAL lnSel, lnCnt + lnSel = SELECT() + SELECT (tcAlias) + COUNT TO lnCnt FOR !DELETED() + SELECT (lnSel) + RETURN lnCnt +ENDFUNC + +PROCEDURE Assert3 + LPARAMETERS tcLabel, tuActual, tuExpected + pnAsserts = pnAsserts + 1 + IF ABS(NVL(tuActual,0) - tuExpected) < 0.02 + pnPass = pnPass + 1 + DO EeLog WITH ' PASS ' + tcLabel + ' (=' + TRANSFORM(tuActual) + ')' + ELSE + DO EeLog WITH ' FAIL ' + tcLabel + ' (actual=' + TRANSFORM(tuActual) + ' asteptat=' + TRANSFORM(tuExpected) + ')' + ENDIF +ENDPROC + +PROCEDURE AssertStr + LPARAMETERS tcLabel, tcActual, tcExpected + pnAsserts = pnAsserts + 1 + IF tcActual == tcExpected + pnPass = pnPass + 1 + DO EeLog WITH ' PASS ' + tcLabel + ' (=[' + tcActual + '])' + ELSE + DO EeLog WITH ' FAIL ' + tcLabel + ' (actual=[' + tcActual + '] asteptat=[' + tcExpected + '])' + ENDIF +ENDPROC + +PROCEDURE EeErr + LPARAMETERS tnErr, tcMsg, tcProg, tnLine + DO EeLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg +ENDPROC + +PROCEDURE EeLog + 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' + CREATE CURSOR (m.tcCursor) (denumire C(100), codmat C(30), cant N(14,3), ; + pret_val N(18,4), pretd N(18,4), pret N(18,4), pret_lei N(18,4), cont C(10), ; + acont C(20), serie C(30), lot C(30), adata_expirare C(10), proc_disc N(6,2), cota_tva N(6,2)) + RETURN 1 + ENDIF + IF 'CONFIG_ANALITICE' $ UPPER(m.tcSql) + CREATE CURSOR (m.tcCursor) (camp_leg_prefix C(30), camp_leg_sufix C(30)) + INSERT INTO (m.tcCursor) VALUES ('', '') + RETURN 1 + ENDIF + IF 'FCONTURI_ANALITICE' $ UPPER(m.tcSql) + CREATE CURSOR (m.tcCursor) (acont C(20)) + INSERT INTO (m.tcCursor) VALUES (IIF(TYPE('gcMockAcontCrt') = 'C', gcMockAcontCrt, '')) + RETURN 1 + ENDIF + IF 'VPLCONT_ANALITIC' $ UPPER(m.tcSql) + CREATE CURSOR (m.tcCursor) (cont C(10), acont C(20)) + RETURN 1 + ENDIF + IF 'VCONFIG_CONT_IREG' $ UPPER(m.tcSql) + CREATE CURSOR (m.tcCursor) (contpart C(10), fel_cont N(1), cu_inregistrari N(1), ; + explic_cont C(100), exceptie C(10), pozitie N(1), invers N(1), gasit N(1)) + INSERT INTO (m.tcCursor) VALUES ('401', 0, 0, 'Furnizori', '', 0, 0, 0) + RETURN 1 + ENDIF + CREATE CURSOR (m.tcCursor) (id_temp N(1)) + 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) + INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ; + VALUES (210, 'ACH. INT. 11%', 1, 0, 'RO11B', 11, 211, 1, 3, 301104) + INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ; + VALUES (211, 'TVA ACH. INT. 11%', 1, 0, 'RO11T', 11, 1, 4, 301104) + INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ; + VALUES (220, 'ACH. IMP. 21%', 1, 0, 'FO21B', 21, 221, 1, 5, 301204) + INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ; + VALUES (221, 'TVA ACH. IMP. 21%', 1, 0, 'FO21T', 21, 1, 6, 301204) + INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ; + VALUES (222, 'ACH. IMP. 11%', 1, 0, 'FO11B', 11, 223, 1, 7, 301204) + INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ; + VALUES (223, 'TVA ACH. IMP. 11%', 1, 0, 'FO11T', 11, 1, 8, 301204) +ENDPROC diff --git a/utile/Teste/achizitie_import/test_repro_flux_curat_doc_dublu.ps1 b/utile/Teste/achizitie_import/test_repro_flux_curat_doc_dublu.ps1 new file mode 100644 index 0000000..e1a60ed --- /dev/null +++ b/utile/Teste/achizitie_import/test_repro_flux_curat_doc_dublu.ps1 @@ -0,0 +1,13 @@ +# test_repro_flux_curat_doc_dublu.ps1 - wrapper peste harness-ul generic pentru testul de +# REPRODUCERE cu flux CURAT (fara nicio interactiune de grila) - doua documente (factura + +# taxe vamale) prin dialogul real, articole, sincronizare, Terminat. +# Rulare: powershell -ExecutionPolicy Bypass -File test_repro_flux_curat_doc_dublu.ps1 +$ErrorActionPreference = 'Stop' +$Teste = $PSScriptRoot +& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') ` + -TestPrg (Join-Path $Teste 'test_repro_flux_curat_doc_dublu.prg') ` + -Steps @('nota_goala','doc1_completat','doc1_adaugat','doc2_completat','doc2_adaugat','articole_adaugate','sincronizat','verificat_flux_curat','final') ` + -ShotsDir (Join-Path $Teste 'screenshots_repro_flux_curat') ` + -SyncDir (Join-Path $Teste 'uisync_repro_flux_curat') ` + -StepTimeoutSec 180 ` + -ReadyTimeoutSec 180 diff --git a/utile/Teste/achizitie_import/test_repro_trigger_data.prg b/utile/Teste/achizitie_import/test_repro_trigger_data.prg new file mode 100644 index 0000000..74843ca --- /dev/null +++ b/utile/Teste/achizitie_import/test_repro_trigger_data.prg @@ -0,0 +1,963 @@ +* test_repro_trigger_data.prg +* Test de REPRODUCERE - acelasi flux CURAT ca test_repro_flux_curat_doc_dublu.prg, plus +* declansatorul cerut pe coloana "Data": Grid1.cDataAct.Text1.Valid(), cu pointerul pe randul +* T-DVI. Factura are dataact=20.07.2026, DVI dataact=25.07.2026 (DIFERITE - cerinta explicita). +* Asteptat: dupa trigger, dataact pe randurile B/G/S ale facturii ramane 20.07.2026, iar randul +* T-DVI isi pastreaza data lui (25.07.2026). +* ATENTIE: Grid1.cDataAct.Text1.Valid foloseste ACELASI tipar ca Grid1.cNract.Text1.Valid - +* Thisform.copiaza_valoare(This.Parent.ControlSource) - deci e afectat de ACEEASI problema +* gasita la declansatorul pe coloana Nr: la runtime This.Parent.ControlSource devine +* "introdc.dataact" (calificat cu alias-ul), nu "dataact" ca la design-time, iar garda din +* copiaza_valoare (Inlist(Lower(tcCamp), 'dataact', ...)) nu se potriveste niciodata - vezi +* test_diag_controlsource_calificat.prg pentru dovada izolata pe campul nract (identic +* mecanism). Asteptare realista: acest test va arata BUG CONFIRMAT, din acelasi motiv. +* +* Scenariu (date reale, act.cod=1140856) - identic cu test_repro_flux_curat_doc_dublu.prg: +* DOC1 - factura principala: nract=15000, id_fdoc=42 (Factura), id_partc=463 (RAJA), in +* valuta EUR (curs 5.23), suma=1000 EUR=5230 lei, discount financiar 100 EUR=523 lei; +* TVA pe DVI (nract=101, id_fdoc=39 'DVI', id_partc=1398 'BIROUL VAMAL'), DVI FARA valuta +* proprie (bifa scoasa - alegere RON prin picker-ul real, normalizata "fara valuta"). +* DOC2 - taxe vamale: nract=101, id_fdoc=39 (DVI), id_partc=1398 (BIROUL VAMAL), FARA +* valuta, suma=500 lei, TVA la FURNIZOR (nu pe DVI) cota 11%, participa la pret. +* ARTICOLE (2, ale DOC1): cont 371 analitic 816, un articol cota 11% (baza 100 EUR/523 lei) +* si unul cota 21% (baza 900 EUR/4707 lei) - proportie 100:900, ca sa se exercite +* sparge_tva_protejat() (randul T-DVI e "protejat" - valuta_proprie=1 - pentru ca factura +* e in valuta straina, chiar daca DVI-ul insusi nu are valuta proprie). +* +* ATENTIE: DOC2 are ACELASI nract/id_fdoc/id_partc (101/39/1398) ca randul T-DVI al DOC1 (dupa +* ce acesta preia identitatea vamala) - testul verifica explicit ca doc_key nu se suprapune +* intre cele doua (calc_doc_key :8799 include nr_doc, care difera - vezi assert-urile finale). +* +* Dump complet introdc dupa fiecare pas (tip_rand, nr_doc, doc_key, nract, id_fdoc, id_partc, +* scd, scc, suma, suma_val, rand_dvi, valuta_proprie, mod_manual) + actactan dupa Terminat. +* Asserturile de identitate se fac dupa nr_doc (nu dupa nract, care e tocmai ce se verifica). +* +* Rulare: +* powershell -ExecutionPolicy Bypass -File test_repro_trigger_data.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_repro_trigger_data_log.txt" +gcSyncDir = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\uisync_repro_trigger_data\" +STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog) + +ON ERROR DO EeErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO() +ON SHUTDOWN QUIT + +TRY + LOCAL gcAppPath, lcPath + gcAppPath = "D:\ROA\ROAGEST\" + SET DEFAULT TO (gcAppPath) + + lcPath = gcAppPath + 'COMUN\Utile\Teste\achizitie_import\stub_verificare;' + ; + 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 EeLog 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 EeLog WITH 'SET CLASSLIB OK' + + *----- PROCEDURI (mock-uri 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\achizitie_import\mock_caut_valuta.prg" ADDITIVE + SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_cauta_nom_articole.prg" ADDITIVE + SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_oscrie_in_fisiere.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 EeLog 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' + *-- perioada de lucru fixata pe luna documentelor de test (iulie 2026, vezi datele DOC1/DVI + *-- mai jos, diferite intentionat) - nu pe luna curenta a sistemului, ca sa nu pice + *-- valideaza() cu "Data documentului nu este in perioada de lucru" + gnAn = 2026 + gnLuna = 7 + gnIdFirma = 110 + gnIdSucursala = 110 + gcAcces = "1;2;3;4;5;6;7;8;" + gcFirma = gcS + PUBLIC nror(65000) + + PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip, gcMockArtCodmat + gnMockRaspuns = 6 + gcMockUltimMesaj = '' + gnMockUltimTip = 0 + PUBLIC gnButon + gnButon = 1 + gcMockArtCodmat = '' + + PUBLIC goExecutor, goApp + goExecutor = CREATEOBJECT('dummyexecutor') + goApp = CREATEOBJECT('dummyapp') + + *----- poAct: antetul notei (factura import EUR, curs 5.23) ----- + PUBLIC poAct + poAct = CREATEOBJECT('Custom') + poAct.AddProperty('nume_val', 'EUR') + poAct.AddProperty('curs', 5.23) + poAct.AddProperty('proc_tva', 1.21) + poAct.AddProperty('nnir', 0) + poAct.AddProperty('id_valuta', 978) + poAct.AddProperty('id_fdoc', 42) + poAct.AddProperty('fdoc', 'Factura') + poAct.AddProperty('id_partc', 463) + poAct.AddProperty('partc', 'RAJA') + 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 / saft_taxtable: perechi 11% + 21%, achizitii interne + import ----- + 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) + INSERT INTO jtva_coloane2 VALUES (3, 210, 'ACH. INT. 11%', 1, 0, 1, 'RO11B', 'RO11T', 11, 211) + INSERT INTO jtva_coloane2 VALUES (4, 211, 'TVA ACH. INT. 11%', 1, 0, 1, 'RO11T', '', 11, 0) + INSERT INTO jtva_coloane2 VALUES (5, 220, 'ACH. IMP. 21%', 1, 0, 1, 'FO21B', 'FO21T', 21, 221) + INSERT INTO jtva_coloane2 VALUES (6, 221, 'TVA ACH. IMP. 21%', 1, 0, 1, 'FO21T', '', 21, 0) + INSERT INTO jtva_coloane2 VALUES (7, 222, 'ACH. IMP. 11%', 1, 0, 1, 'FO11B', 'FO11T', 11, 223) + INSERT INTO jtva_coloane2 VALUES (8, 223, 'TVA ACH. IMP. 11%', 1, 0, 1, 'FO11T', '', 11, 0) + + 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 ('301204-Import de bunuri cota 21%', 301204, '', 21, 1, 0, 1, 0) + INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ; + VALUES ('301104-Achizitii interne cota 11%', 301104, '', 11, 1, 0, 1, 0) + + DO CreeazaIntrodc WITH 'introdc' + 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 + + DO CreeazaRulTemp + INSERT INTO rul_temp (denumire, codmat, cant, pret, pret_lei, cont, cota_tva) ; + VALUES ('PLACEHOLDER', 'PH', 1, 1, 1, '371', 21) + + *-- index ord_doc INAINTE de CREATEOBJECT (capcana p, docs/testare-ui-vfp.md) + SELECT introdc + INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc + SET ORDER TO ord_doc + + *-- vezi antetul test_e2e_dvi_ron_discount.prg: tlIntern BARA, aceeasi valoare ca la CREATEOBJECT + PRIVATE tlIntern + tlIntern = .F. + + PUBLIC gcTempPath + gcTempPath = ADDBS(SYS(2023)) + PUBLIC gnHandle + gnHandle = -1 + PUBLIC gnTipGest + gnTipGest = 0 + PUBLIC gcCondSucursala + gcCondSucursala = '' + + DO EeLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F. - mod import)' + PUBLIC goObj + goObj = CREATEOBJECT('IMPORT_nota', .F.) + IF VARTYPE(goObj) <> 'O' + DO EeLog WITH 'FAIL: instantiere import_nota' + DO HarnessDone WITH 'done-error' + QUIT + ENDIF + goObj.lDialogAratat = .T. + goObj.oact = poAct + *-- lSpargeSecundare ramane la valoarea implicita a clasei (.T., "spargere secundare activa") + *-- - NU se suprascrie, ca sa reflecte comportamentul implicit real, nu setarea din alte teste. + goObj.WindowType = 0 + goObj.Visible = .T. + goObj.Show() + goObj.WindowState = 2 + DOEVENTS FORCE + + SELECT rul_temp + ZAP + goObj.gridart.Refresh() + DOEVENTS FORCE + + PRIVATE pnAsserts, pnPass + STORE 0 TO pnAsserts, pnPass + + DO HarnessStep WITH 0, 'nota goala afisata, mod import (.F.)' + + *========================= DOC1: factura EUR (RAJA) + TVA DVI fara valuta proprie + discount ========================= + PUBLIC goDlg + goDlg = CREATEOBJECT('import_adauga_factura', goObj) + goDlg.cFelDoc = 'Factura' + goDlg.nIdFdoc = 42 + goDlg.nNract = 15000 + goDlg.dDataAct = {^2026-07-20} + goDlg.nIdPartener = 463 + goDlg.cPartener = 'RAJA' + goDlg.cExplicatia = 'Factura import RAJA' + goDlg.nSuma = 1000 + goDlg.nSumaLei = 0 + goDlg.nCurs = 5.23 + goDlg.nIdValuta = 978 + goDlg.cValuta = 'EUR' + goDlg.chkInValutaCont.Value = 1 + goDlg.chkParticipaValuta.Value = 1 + goDlg.nIdExplicatieTva = 220 + goDlg.cExplicatieTva = 'ACH. IMP. 21%' + goDlg.nProcentTva = 21 + + *-- DVI: identitate proprie (document vamal, partener vamal, nract 101), FARA valuta proprie + goDlg.cSerieDvi = '' + goDlg.nNractDvi = 101 + goDlg.dDviData = {^2026-07-25} + goDlg.nIdFdocDVI = 39 + goDlg.cFelDocDvi = 'DVI' + goDlg.nDviIdPartener = 1398 + goDlg.cDviPartener = 'BIROUL VAMAL' + + goDlg.optTipTva.Value = 2 + goDlg.optTipTva.InteractiveChange() + + *-- alegere RON pe blocul DVI (picker real, mock_caut_valuta) - normalizare "fara valuta proprie" + PUBLIC goMockValuta, goMockValutaCoada + goMockValuta = CREATEOBJECT('Custom') + goMockValuta.AddProperty('id_valuta', 1) + goMockValuta.AddProperty('nume_val', 'RON') + goMockValutaCoada = CREATEOBJECT('Collection') + LOCAL loValRon + loValRon = CREATEOBJECT('Custom') + loValRon.AddProperty('id_valuta', 1) + loValRon.AddProperty('nume_val', 'RON') + goMockValutaCoada.Add(loValRon) + goDlg.cmdDviValuta.Click() + =AssertStr('1-DVI valuta aleasa RON (fara valuta proprie)', ALLTRIM(goDlg.cDviValuta), 'RON') + + *-- discount financiar (doar baza) + goDlg.txtDiscBaza.Value = 100 + goDlg.txtDiscBaza.Valid() + + goDlg.WindowType = 0 + goDlg.Visible = .T. + goDlg.Show() + DOEVENTS FORCE + DO HarnessStep WITH 1, 'DOC1 completat: RAJA nract=15000, DVI nract=101 fara valuta, discount 100 EUR' + + LOCAL llOkValid1 + llOkValid1 = goDlg.valideaza() + =Assert3('2-DOC1 dialog valideaza() reuseste', IIF(llOkValid1,1,0), 1) + + *-- toDlg DOC1 construit INLINE in programul PRINCIPAL (capcana l, mock_caut_valuta.prg) + PUBLIC goT + 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) + IF goDlg.optTipTva.Value = 2 + =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) + =ADDPROPERTY(goT,'dvi_in_valuta',!(EMPTY(goDlg.cDviValuta) OR UPPER(ALLTRIM(goDlg.cDviValuta))=='RON')) + =ADDPROPERTY(goT,'dvi_id_valuta',goDlg.nDviIdValuta) + =ADDPROPERTY(goT,'dvi_curs',goDlg.nDviCurs) + =ADDPROPERTY(goT,'dvi_nume_val',ALLTRIM(NVL(goDlg.cDviValuta,''))) + =ADDPROPERTY(goT,'dvi_valuta_proprie',IIF(!(EMPTY(goDlg.cDviValuta) OR UPPER(ALLTRIM(goDlg.cDviValuta))=='RON') OR !(EMPTY(goDlg.cValuta) OR UPPER(ALLTRIM(goDlg.cValuta))=='RON'),IIF(goDlg.nDviIdValuta<>goDlg.nIdValuta OR goDlg.nDviCurs<>goDlg.nCurs,1,0),0)) + ENDIF + =ADDPROPERTY(goT,'disc_baza_lei',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,ROUND(goDlg.nDiscBaza*goDlg.nCurs,gnPC),goDlg.nDiscBaza)) + =ADDPROPERTY(goT,'disc_baza_val',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,goDlg.nDiscBaza,0)) + + LOCAL llOkAdauga1 + llOkAdauga1 = goObj.do_adauga_factura(goT) + =Assert3('3-DOC1 do_adauga_factura(goT) reuseste (Termin)', IIF(llOkAdauga1,1,0), 1) + goDlg.Hide() + DOEVENTS FORCE + DO HarnessStep WITH 2, 'DOC1 adaugat: introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri' + DO DumpIntrodc WITH 'DUMP dupa DOC1 (RAJA, nract=15000)' + + *========================= DOC2: taxe vamale (BIROUL VAMAL) - TVA la furnizor, cota 11%, FARA valuta ========================= + PUBLIC goDlg2 + goDlg2 = CREATEOBJECT('import_adauga_factura', goObj) + goDlg2.cFelDoc = 'DVI' + goDlg2.nIdFdoc = 39 + goDlg2.nNract = 101 + goDlg2.dDataAct = {^2026-07-20} + goDlg2.nIdPartener = 1398 + goDlg2.cPartener = 'BIROUL VAMAL' + goDlg2.cExplicatia = 'Taxe vamale' + goDlg2.nSuma = 500 + goDlg2.nSumaLei = 0 + goDlg2.nCurs = 0 + goDlg2.nIdValuta = 0 + goDlg2.cValuta = '' + goDlg2.chkInValutaCont.Value = 0 + goDlg2.chkParticipaValuta.Value = 1 + goDlg2.nIdExplicatieTva = 210 + goDlg2.cExplicatieTva = 'ACH. INT. 11%' + goDlg2.nProcentTva = 11 + + goDlg2.optTipTva.Value = 1 + goDlg2.optTipTva.InteractiveChange() + + goDlg2.WindowType = 0 + goDlg2.Visible = .T. + goDlg2.Show() + DOEVENTS FORCE + DO HarnessStep WITH 3, 'DOC2 completat: BIROUL VAMAL nract=101, TVA furnizor 11%, fara valuta' + + LOCAL llOkValid2 + llOkValid2 = goDlg2.valideaza() + =Assert3('4-DOC2 dialog valideaza() reuseste', IIF(llOkValid2,1,0), 1) + + *-- toDlg DOC2 construit INLINE in programul PRINCIPAL (aceeasi capcana l) + PUBLIC goT2 + goT2 = CREATEOBJECT('Empty') + =ADDPROPERTY(goT2,'serie_act',ALLTRIM(NVL(goDlg2.cSerieAct,''))) + =ADDPROPERTY(goT2,'nract',goDlg2.nNract) + =ADDPROPERTY(goT2,'dataact',goDlg2.dDataAct) + =ADDPROPERTY(goT2,'fdoc',goDlg2.cFelDoc) + =ADDPROPERTY(goT2,'id_fdoc',goDlg2.nIdFdoc) + =ADDPROPERTY(goT2,'id_partc',goDlg2.nIdPartener) + =ADDPROPERTY(goT2,'partc',goDlg2.cPartener) + =ADDPROPERTY(goT2,'explicatia',ALLTRIM(NVL(goDlg2.cExplicatia,''))) + =ADDPROPERTY(goT2,'suma',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,IIF(goDlg2.nSumaLei<>0,goDlg2.nSumaLei,ROUND(goDlg2.nSuma*goDlg2.nCurs,gnPC)),goDlg2.nSuma)) + =ADDPROPERTY(goT2,'suma_val',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,goDlg2.nSuma,0)) + =ADDPROPERTY(goT2,'in_valuta',goDlg2.chkInValutaCont.Value) + =ADDPROPERTY(goT2,'participa_valuta',(goDlg2.chkParticipaValuta.Value=1)) + =ADDPROPERTY(goT2,'id_valuta',IIF(goDlg2.chkInValutaCont.Value=1,goDlg2.nIdValuta,0)) + =ADDPROPERTY(goT2,'curs',IIF(goDlg2.chkInValutaCont.Value=1,goDlg2.nCurs,0)) + =ADDPROPERTY(goT2,'nume_val',IIF(goDlg2.chkInValutaCont.Value=1,ALLTRIM(NVL(goDlg2.cValuta,'')),'')) + =ADDPROPERTY(goT2,'cTipTva',IIF(goDlg2.optTipTva.Value=1,'F',IIF(goDlg2.optTipTva.Value=2,'D','N'))) + =ADDPROPERTY(goT2,'id_jtva_coloana',goDlg2.nIdExplicatieTva) + =ADDPROPERTY(goT2,'disc_baza_lei',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,ROUND(goDlg2.nDiscBaza*goDlg2.nCurs,gnPC),goDlg2.nDiscBaza)) + =ADDPROPERTY(goT2,'disc_baza_val',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,goDlg2.nDiscBaza,0)) + + LOCAL llOkAdauga2 + llOkAdauga2 = goObj.do_adauga_factura(goT2) + =Assert3('5-DOC2 do_adauga_factura(goT2) reuseste (Termin)', IIF(llOkAdauga2,1,0), 1) + goDlg2.Hide() + DOEVENTS FORCE + DO HarnessStep WITH 4, 'DOC2 adaugat: introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri' + DO DumpIntrodc WITH 'DUMP dupa DOC2 (BIROUL VAMAL, nract=101)' + + *========================= verificare doc_key: T-DVI (DOC1) vs B (DOC2) nu se suprapun ========================= + LOCAL lcDocKeyTDvi, lcDocKeyDoc2B + lcDocKeyTDvi = '' + lcDocKeyDoc2B = '' + SELECT introdc + LOCATE FOR Nvl(rand_dvi,0) = 1 + IF FOUND() + lcDocKeyTDvi = ALLTRIM(NVL(doc_key,'')) + ENDIF + LOCATE FOR nract = 101 AND id_fdoc = 39 AND tip_rand == 'B' + IF FOUND() + lcDocKeyDoc2B = ALLTRIM(NVL(doc_key,'')) + ENDIF + =Assert3('6-ambele doc_key gasite (T-DVI si B-DOC2)', IIF(!EMPTY(lcDocKeyTDvi) AND !EMPTY(lcDocKeyDoc2B),1,0), 1) + pnAsserts = pnAsserts + 1 + IF !EMPTY(lcDocKeyTDvi) AND !EMPTY(lcDocKeyDoc2B) AND lcDocKeyTDvi <> lcDocKeyDoc2B + pnPass = pnPass + 1 + DO EeLog WITH ' PASS 7-doc_key T-DVI(DOC1)=[' + lcDocKeyTDvi + '] <> doc_key B(DOC2)=[' + lcDocKeyDoc2B + '] (fara suprapunere)' + ELSE + DO EeLog WITH ' FAIL 7-doc_key T-DVI(DOC1)=[' + lcDocKeyTDvi + '] SE SUPRAPUNE cu B(DOC2)=[' + lcDocKeyDoc2B + '] -> pista doc_key CONFIRMATA' + ENDIF + + *========================= ARTICOLE (2, ale DOC1): cont 371 analitic 816, cote 11%/21% ========================= + gcMockArtCodmat = 'ART-A8-371' + LOCAL llEroareArt1 + llEroareArt1 = .F. + TRY + goObj.do_adauga_articol() + CATCH TO loExcArt1 + llEroareArt1 = .T. + DO EeLog WITH 'EROARE do_adauga_articol (art1) ' + TRANSFORM(loExcArt1.ErrorNo) + ' [' + loExcArt1.Message + ']' + ENDTRY + =Assert3('8-do_adauga_articol() art1 (cota 11%) fara eroare', IIF(llEroareArt1,0,1), 1) + 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,4), ; + pret_lei WITH ROUND(100*5.23,4), cont WITH '371', cota_tva WITH 11 + ELSE + pnAsserts = pnAsserts + 1 + DO EeLog WITH ' FAIL 8b: articolul cota 11% nu a fost adaugat' + ENDIF + + gcMockArtCodmat = 'ART-BULD-212' + LOCAL llEroareArt2 + llEroareArt2 = .F. + TRY + goObj.do_adauga_articol() + CATCH TO loExcArt2 + llEroareArt2 = .T. + DO EeLog WITH 'EROARE do_adauga_articol (art2) ' + TRANSFORM(loExcArt2.ErrorNo) + ' [' + loExcArt2.Message + ']' + ENDTRY + =Assert3('9-do_adauga_articol() art2 (cota 21%) fara eroare', IIF(llEroareArt2,0,1), 1) + 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,4), ; + pret_lei WITH ROUND(900*5.23,4), cont WITH '371', cota_tva WITH 21 + ELSE + pnAsserts = pnAsserts + 1 + DO EeLog WITH ' FAIL 9b: articolul cota 21% nu a fost adaugat' + ENDIF + goObj.gridart.Refresh() + DOEVENTS FORCE + DO HarnessStep WITH 5, 'articole adaugate (cont 371/816, cote 11% si 21%)' + DO DumpIntrodc WITH 'DUMP dupa ARTICOLE (inainte de sincronizare)' + + *========================= sincronizeaza() REAL ========================= + LOCAL llEroareSync + llEroareSync = .F. + TRY + goObj.sincronizeaza() + CATCH TO loExcSync + llEroareSync = .T. + DO EeLog WITH 'EROARE sincronizeaza() ' + TRANSFORM(loExcSync.ErrorNo) + ' [' + loExcSync.Message + '] in ' + loExcSync.Procedure + ':' + TRANSFORM(loExcSync.LineNo) + ENDTRY + DOEVENTS FORCE + =Assert3('10-sincronizeaza() fara eroare', IIF(llEroareSync,0,1), 1) + DO HarnessStep WITH 6, 'sincronizat' + DO DumpIntrodc WITH 'DUMP dupa sincronizeaza() (flux curat, fara nicio interactiune de grila)' + + *========================= BASELINE inainte de trigger: dataact corect pe fiecare rand ========================= + LOCAL llBugDeclansator + llBugDeclansator = .F. + + SELECT introdc + LOCATE FOR tip_rand == 'S' AND Nvl(rand_dvi,0) <> 1 + =Assert3('11-BASELINE: rand S (DOC1) are dataact=20.07.2026', IIF(FOUND(), dataact, {}), {^2026-07-20}) + SELECT introdc + LOCATE FOR Nvl(rand_dvi,0) = 1 + =Assert3('11b-BASELINE: randul T-DVI are dataact=25.07.2026', IIF(FOUND(), dataact, {}), {^2026-07-25}) + + DO HarnessStep WITH 7, 'verificat baseline dataact: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS' + + *========================= imediat inainte de Terminat: ultim DUMP introdc ========================= + DO DumpIntrodc WITH 'DUMP inainte de declansatorul pe Data' + + *========================= DECLANSATOR: pointer pe randul T-DVI, Grid1.cDataAct.Text1.Valid() ========================= + SELECT introdc + LOCATE FOR Nvl(rand_dvi,0) = 1 + =Assert3('12-pozitionare pe randul T-DVI reusita (declansator)', IIF(FOUND(),1,0), 1) + + LOCAL llTriggerOk + llTriggerOk = .F. + IF FOUND() + goObj.Grid1.cDataAct.Text1.Valid() + llTriggerOk = .T. + ENDIF + DOEVENTS FORCE + =Assert3('13-declansator (pointer pe T-DVI, cDataAct.Valid) executat fara eroare', IIF(llTriggerOk,1,0), 1) + + DO DumpIntrodc WITH 'DUMP dupa declansator (pointer pe T-DVI, cDataAct.Valid)' + + LOCAL lnCntVerifData + lnCntVerifData = 0 + SELECT introdc + SCAN FOR nr_doc = 1 AND Nvl(rand_dvi,0) <> 1 + lnCntVerifData = lnCntVerifData + 1 + pnAsserts = pnAsserts + 1 + IF dataact == {^2026-07-20} + pnPass = pnPass + 1 + DO EeLog WITH ' PASS 14.' + TRANSFORM(lnCntVerifData) + '-tip_rand=' + tip_rand + ' dataact ramane 20.07.2026 dupa trigger (=' + DTOC(dataact) + ')' + ELSE + llBugDeclansator = .T. + DO EeLog WITH ' FAIL 14.' + TRANSFORM(lnCntVerifData) + '-tip_rand=' + tip_rand + ' dataact=' + DTOC(dataact) + ' (asteptat 20.07.2026) dupa trigger -> BUG' + ENDIF + ENDSCAN + + *-- randul T-DVI insusi trebuie sa ramana pe data lui (25.07.2026, sursa neschimbata) + SELECT introdc + LOCATE FOR Nvl(rand_dvi,0) = 1 + =Assert3('15-T-DVI.dataact ramane 25.07.2026 (randul sursa neschimbat)', IIF(FOUND(), dataact, {}), {^2026-07-25}) + + *========================= Terminat (stub verificare.scx) ========================= + DO CreeazaActactan + LOCAL llEroareTermin + llEroareTermin = .F. + TRY + goObj.inainte_de_do_termin() + CATCH TO loExcTermin + llEroareTermin = .T. + DO EeLog WITH 'EROARE inainte_de_do_termin() ' + TRANSFORM(loExcTermin.ErrorNo) + ' [' + loExcTermin.Message + '] in ' + loExcTermin.Procedure + ':' + TRANSFORM(loExcTermin.LineNo) + ENDTRY + =Assert3('12-inainte_de_do_termin() fara eroare (Terminat)', IIF(llEroareTermin,0,1), 1) + + IF USED('actactan') + DO EeLog WITH 'DUMP actactan dupa Terminat:' + SELECT actactan + SCAN + DO EeLog WITH ' recno=' + TRANSFORM(RECNO()) + ' nract=' + TRANSFORM(NVL(nract,0)) + ' id_fdoc=' + TRANSFORM(NVL(id_fdoc,0)) + ; + ' id_partc=' + TRANSFORM(NVL(id_partc,0)) + ' partc=[' + ALLTRIM(NVL(partc,'')) + ']' + ; + ' dataact=' + DTOC(NVL(dataact,{})) + ' scd=' + ALLTRIM(NVL(scd,'')) + ' scc=' + ALLTRIM(NVL(scc,'')) + ' suma=' + TRANSFORM(NVL(suma,0)) + ENDSCAN + + LOCAL lnCntVerifRaja, lnCntVerifVamal + lnCntVerifRaja = 0 + lnCntVerifVamal = 0 + SELECT actactan + SCAN FOR ALLTRIM(NVL(partc,'')) == 'RAJA' + lnCntVerifRaja = lnCntVerifRaja + 1 + pnAsserts = pnAsserts + 1 + IF dataact == {^2026-07-20} + pnPass = pnPass + 1 + DO EeLog WITH ' PASS 18.' + TRANSFORM(lnCntVerifRaja) + '-actactan randul RAJA: dataact=20.07.2026 (=' + DTOC(dataact) + ')' + ELSE + llBugDeclansator = .T. + DO EeLog WITH ' FAIL 18.' + TRANSFORM(lnCntVerifRaja) + '-actactan randul RAJA: dataact=' + DTOC(dataact) + ' (asteptat 20.07.2026) -> BUG' + ENDIF + ENDSCAN + *-- NU verific randurile BIROUL VAMAL in actactan: DOC2 (taxe vamale, propriu, dataact=20.07.2026) + *-- si randul T-DVI al DOC1 (dataact=25.07.2026) au ACEEASI identitate (nract/id_fdoc/id_partc/ + *-- partc), iar actactan nu pastreaza nr_doc/doc_key - nu se pot distinge fiabil aici; verificarea + *-- neambigua a randului T-DVI s-a facut deja mai sus, la nivel de introdc (assert 15). + lnCntVerifVamal = -1 + IF lnCntVerifRaja = 0 + DO EeLog WITH ' INFO: niciun rand RAJA in actactan' + ENDIF + IF lnCntVerifVamal = 0 + DO EeLog WITH ' INFO: niciun rand BIROUL VAMAL in actactan' + ENDIF + ELSE + DO EeLog WITH 'INFO: actactan neinstantiat dupa inainte_de_do_termin() (posibil eroare de validare mai devreme in flux)' + ENDIF + + DO HarnessStep WITH 8, 'final: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS' + + DO EeLog WITH '=========================================================' + IF llBugDeclansator + DO EeLog WITH 'BUG CONFIRMAT pe declansatorul Data: dataact-ul randului T-DVI (25.07.2026) s-a ' + ; + 'propagat peste dataact-ul randurilor facturii (asteptat 20.07.2026) dupa ce ' + ; + 'Grid1.cDataAct.Text1.Valid() a rulat cu pointerul pe randul T-DVI - acelasi mecanism ' + ; + '(ControlSource calificat la runtime) ca la declansatorul pe coloana Nr.' + ELSE + DO EeLog WITH 'BUG NECONFIRMAT pe declansatorul Data: dataact-ul facturii a ramas 20.07.2026 pe ' + ; + 'toate randurile ei dupa trigger, iar randul T-DVI si-a pastrat data lui (25.07.2026).' + ENDIF + DO EeLog WITH '=========================================================' + + DO EeLog WITH 'REZULTAT: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS' + IF pnPass = pnAsserts + DO EeLog WITH 'REZULTAT: PASS (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ')' + ELSE + DO EeLog WITH 'REZULTAT: FAIL (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS)' + ENDIF + + DO HarnessDone WITH 'done' + +CATCH TO loExc + DO EeLog 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 DumpIntrodc + LPARAMETERS tcTitlu + LOCAL lcSelAnt, lnRecAnt + lcSelAnt = SELECT() + lnRecAnt = IIF(USED('introdc'), IIF(EOF('introdc') OR BOF('introdc'), 0, RECNO('introdc')), 0) + DO EeLog WITH tcTitlu + IF !USED('introdc') + DO EeLog WITH ' (introdc neinstantiat)' + RETURN + ENDIF + SELECT introdc + SCAN + DO EeLog WITH ' tip_rand=' + ALLTRIM(NVL(tip_rand,'?')) + ' nr_doc=' + TRANSFORM(NVL(nr_doc,0)) + ; + ' nract=' + TRANSFORM(NVL(nract,0)) + ' id_fdoc=' + TRANSFORM(NVL(id_fdoc,0)) + ; + ' id_partc=' + TRANSFORM(NVL(id_partc,0)) + ' doc_key=[' + ALLTRIM(NVL(doc_key,'')) + ']' + ; + ' rand_dvi=' + TRANSFORM(NVL(rand_dvi,0)) + ' valuta_proprie=' + TRANSFORM(NVL(valuta_proprie,0)) + ; + ' mod_manual=' + TRANSFORM(NVL(mod_manual,0)) + ' scd=' + ALLTRIM(NVL(scd,'')) + ' scc=' + ALLTRIM(NVL(scc,'')) + ; + ' suma=' + TRANSFORM(NVL(suma,0)) + ' suma_val=' + TRANSFORM(NVL(suma_val,0)) + ENDSCAN + IF lnRecAnt > 0 + TRY + GO lnRecAnt + CATCH + GO TOP + ENDTRY + ENDIF + SELECT (lcSelAnt) +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), expl_manual N(1), ; + scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1)) +ENDPROC + +PROCEDURE CreeazaRulTemp + 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 CreeazaActactan + IF USED('actactan') + USE IN ('actactan') + ENDIF + CREATE CURSOR actactan ( ; + id_fdoc N(14), fdoc C(50), dataact D, serie_act C(10), nract N(14), ; + partc C(100), id_partc N(14), partd C(100), id_partd N(14), ; + suma N(18,4), suma_val N(18,4), explicatia C(100), explicatia4 C(50), explicatia5 C(50), ; + scd C(10), ascd C(20), scc C(10), ascc C(20), id_jtva_coloana N(14) NULL, taxcode N(6), ; + id_valuta N(14), curs N(14,4), nume_val C(10), proc_tva N(8,4), nnir N(14), ; + tva_incasare N(1), id_set N(14), id_gestin N(14)) +ENDPROC + +FUNCTION RECCOUNT_ACTIVE + LPARAMETERS tcAlias + LOCAL lnSel, lnCnt + lnSel = SELECT() + SELECT (tcAlias) + COUNT TO lnCnt FOR !DELETED() + SELECT (lnSel) + RETURN lnCnt +ENDFUNC + +PROCEDURE Assert3 + LPARAMETERS tcLabel, tuActual, tuExpected + pnAsserts = pnAsserts + 1 + IF ABS(NVL(tuActual,0) - tuExpected) < 0.02 + pnPass = pnPass + 1 + DO EeLog WITH ' PASS ' + tcLabel + ' (=' + TRANSFORM(tuActual) + ')' + ELSE + DO EeLog WITH ' FAIL ' + tcLabel + ' (actual=' + TRANSFORM(tuActual) + ' asteptat=' + TRANSFORM(tuExpected) + ')' + ENDIF +ENDPROC + +PROCEDURE AssertStr + LPARAMETERS tcLabel, tcActual, tcExpected + pnAsserts = pnAsserts + 1 + IF tcActual == tcExpected + pnPass = pnPass + 1 + DO EeLog WITH ' PASS ' + tcLabel + ' (=[' + tcActual + '])' + ELSE + DO EeLog WITH ' FAIL ' + tcLabel + ' (actual=[' + tcActual + '] asteptat=[' + tcExpected + '])' + ENDIF +ENDPROC + +PROCEDURE EeErr + LPARAMETERS tnErr, tcMsg, tcProg, tnLine + DO EeLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg +ENDPROC + +PROCEDURE EeLog + 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' + CREATE CURSOR (m.tcCursor) (denumire C(100), codmat C(30), cant N(14,3), ; + pret_val N(18,4), pretd N(18,4), pret N(18,4), pret_lei N(18,4), cont C(10), ; + acont C(20), serie C(30), lot C(30), adata_expirare C(10), proc_disc N(6,2), cota_tva N(6,2)) + RETURN 1 + ENDIF + IF 'CONFIG_ANALITICE' $ UPPER(m.tcSql) + CREATE CURSOR (m.tcCursor) (camp_leg_prefix C(30), camp_leg_sufix C(30)) + INSERT INTO (m.tcCursor) VALUES ('', '') + RETURN 1 + ENDIF + IF 'FCONTURI_ANALITICE' $ UPPER(m.tcSql) + CREATE CURSOR (m.tcCursor) (acont C(20)) + INSERT INTO (m.tcCursor) VALUES (IIF(TYPE('gcMockAcontCrt') = 'C', gcMockAcontCrt, '')) + RETURN 1 + ENDIF + IF 'VPLCONT_ANALITIC' $ UPPER(m.tcSql) + CREATE CURSOR (m.tcCursor) (cont C(10), acont C(20)) + RETURN 1 + ENDIF + IF 'VCONFIG_CONT_IREG' $ UPPER(m.tcSql) + CREATE CURSOR (m.tcCursor) (contpart C(10), fel_cont N(1), cu_inregistrari N(1), ; + explic_cont C(100), exceptie C(10), pozitie N(1), invers N(1), gasit N(1)) + INSERT INTO (m.tcCursor) VALUES ('401', 0, 0, 'Furnizori', '', 0, 0, 0) + RETURN 1 + ENDIF + CREATE CURSOR (m.tcCursor) (id_temp N(1)) + 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) + INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ; + VALUES (210, 'ACH. INT. 11%', 1, 0, 'RO11B', 11, 211, 1, 3, 301104) + INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ; + VALUES (211, 'TVA ACH. INT. 11%', 1, 0, 'RO11T', 11, 1, 4, 301104) + INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ; + VALUES (220, 'ACH. IMP. 21%', 1, 0, 'FO21B', 21, 221, 1, 5, 301204) + INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ; + VALUES (221, 'TVA ACH. IMP. 21%', 1, 0, 'FO21T', 21, 1, 6, 301204) + INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ; + VALUES (222, 'ACH. IMP. 11%', 1, 0, 'FO11B', 11, 223, 1, 7, 301204) + INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ; + VALUES (223, 'TVA ACH. IMP. 11%', 1, 0, 'FO11T', 11, 1, 8, 301204) +ENDPROC diff --git a/utile/Teste/achizitie_import/test_repro_trigger_data.ps1 b/utile/Teste/achizitie_import/test_repro_trigger_data.ps1 new file mode 100644 index 0000000..0810090 --- /dev/null +++ b/utile/Teste/achizitie_import/test_repro_trigger_data.ps1 @@ -0,0 +1,12 @@ +# test_repro_trigger_data.ps1 - wrapper peste harness-ul generic pentru testul de REPRODUCERE +# cu declansatorul pe coloana Data (Grid1.cDataAct.Text1.Valid), pointer pe randul T-DVI. +# Rulare: powershell -ExecutionPolicy Bypass -File test_repro_trigger_data.ps1 +$ErrorActionPreference = 'Stop' +$Teste = $PSScriptRoot +& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') ` + -TestPrg (Join-Path $Teste 'test_repro_trigger_data.prg') ` + -Steps @('nota_goala','doc1_completat','doc1_adaugat','doc2_completat','doc2_adaugat','articole_adaugate','sincronizat','verificat_flux_curat','final') ` + -ShotsDir (Join-Path $Teste 'screenshots_repro_trigger_data') ` + -SyncDir (Join-Path $Teste 'uisync_repro_trigger_data') ` + -StepTimeoutSec 180 ` + -ReadyTimeoutSec 180 diff --git a/utile/Teste/achizitie_import/test_repro_trigger_focus_terminat.prg b/utile/Teste/achizitie_import/test_repro_trigger_focus_terminat.prg new file mode 100644 index 0000000..3bd6624 --- /dev/null +++ b/utile/Teste/achizitie_import/test_repro_trigger_focus_terminat.prg @@ -0,0 +1,978 @@ +* test_repro_trigger_focus_terminat.prg +* Test de REPRODUCERE - acelasi flux CURAT ca test_repro_flux_curat_doc_dublu.prg (confirmat +* NECONFIRMAT: nract nu se strica singur), plus UN SINGUR declansator suplimentar, realist: +* declansatorul (a) din lista Mariusm - "pointerul pe randul T-DVI + apasarea butonului +* Terminat (focus pierdut din grila)". In VFP, Valid() pe coloana activa a grid-ului se +* declanseaza la PIERDEREA focusului (click pe alt control, ex. butonul Terminat), INDIFERENT +* daca utilizatorul a tastat ceva - nu doar la Tab/Enter in aceeasi coloana. Daca ultimul rand +* pe care a stat grid-ul (navigare/revizuire inainte de Terminat) e randul T-DVI, simplul click +* pe Terminat ar declansa Grid1.cNract.Text1.Valid() -> Thisform.copiaza_valoare('nract') CU +* POINTERUL PE RANDUL T-DVI - exact ipoteza bug-ului din COMUN\clase\ointroduceri.vcx. +* +* Headless nu poate reproduce evenimentul de pierdere-a-focusului la nivel de GDI/mesaje +* Windows; surogatul cel mai fidel e sa apelam EXPLICIT Grid1.cNract.Text1.Valid() cu +* pointerul din introdc pozitionat pe randul T-DVI, IMEDIAT inainte de goObj.inainte_de_do_termin() +* (Terminat) - adica exact starea in care s-ar afla cursorul daca utilizatorul a lasat grid-ul +* cu celula activa pe coloana "Nr" a randului DVI si a dat click pe Terminat fara sa mai +* navigheze in alta parte. Diferenta fata de testul respins de Marius: acolo se apela Valid() +* IZOLAT, fara sa se continue cu Terminat - aici trigger-ul e verificat EXACT in secventa +* "focus pe DVI -> Terminat", ca sa vedem daca simptomul ajunge in actactan. +* +* Scenariu (date reale, act.cod=1140856) - identic cu test_repro_flux_curat_doc_dublu.prg: +* DOC1 - factura principala: nract=15000, id_fdoc=42 (Factura), id_partc=463 (RAJA), in +* valuta EUR (curs 5.23), suma=1000 EUR=5230 lei, discount financiar 100 EUR=523 lei; +* TVA pe DVI (nract=101, id_fdoc=39 'DVI', id_partc=1398 'BIROUL VAMAL'), DVI FARA valuta +* proprie (bifa scoasa - alegere RON prin picker-ul real, normalizata "fara valuta"). +* DOC2 - taxe vamale: nract=101, id_fdoc=39 (DVI), id_partc=1398 (BIROUL VAMAL), FARA +* valuta, suma=500 lei, TVA la FURNIZOR (nu pe DVI) cota 11%, participa la pret. +* ARTICOLE (2, ale DOC1): cont 371 analitic 816, un articol cota 11% (baza 100 EUR/523 lei) +* si unul cota 21% (baza 900 EUR/4707 lei) - proportie 100:900, ca sa se exercite +* sparge_tva_protejat() (randul T-DVI e "protejat" - valuta_proprie=1 - pentru ca factura +* e in valuta straina, chiar daca DVI-ul insusi nu are valuta proprie). +* +* ATENTIE: DOC2 are ACELASI nract/id_fdoc/id_partc (101/39/1398) ca randul T-DVI al DOC1 (dupa +* ce acesta preia identitatea vamala) - testul verifica explicit ca doc_key nu se suprapune +* intre cele doua (calc_doc_key :8799 include nr_doc, care difera - vezi assert-urile finale). +* +* Dump complet introdc dupa fiecare pas (tip_rand, nr_doc, doc_key, nract, id_fdoc, id_partc, +* scd, scc, suma, suma_val, rand_dvi, valuta_proprie, mod_manual) + actactan dupa Terminat. +* Asserturile de identitate se fac dupa nr_doc (nu dupa nract, care e tocmai ce se verifica). +* +* Rulare: +* powershell -ExecutionPolicy Bypass -File test_repro_trigger_focus_terminat.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_repro_trigger_focus_terminat_log.txt" +gcSyncDir = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\uisync_repro_trigger_focus_terminat\" +STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog) + +ON ERROR DO EeErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO() +ON SHUTDOWN QUIT + +TRY + LOCAL gcAppPath, lcPath + gcAppPath = "D:\ROA\ROAGEST\" + SET DEFAULT TO (gcAppPath) + + lcPath = gcAppPath + 'COMUN\Utile\Teste\achizitie_import\stub_verificare;' + ; + 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 EeLog 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 EeLog WITH 'SET CLASSLIB OK' + + *----- PROCEDURI (mock-uri 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\achizitie_import\mock_caut_valuta.prg" ADDITIVE + SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_cauta_nom_articole.prg" ADDITIVE + SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_oscrie_in_fisiere.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 EeLog 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 gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip, gcMockArtCodmat + gnMockRaspuns = 6 + gcMockUltimMesaj = '' + gnMockUltimTip = 0 + PUBLIC gnButon + gnButon = 1 + gcMockArtCodmat = '' + + PUBLIC goExecutor, goApp + goExecutor = CREATEOBJECT('dummyexecutor') + goApp = CREATEOBJECT('dummyapp') + + *----- poAct: antetul notei (factura import EUR, curs 5.23) ----- + PUBLIC poAct + poAct = CREATEOBJECT('Custom') + poAct.AddProperty('nume_val', 'EUR') + poAct.AddProperty('curs', 5.23) + poAct.AddProperty('proc_tva', 1.21) + poAct.AddProperty('nnir', 0) + poAct.AddProperty('id_valuta', 978) + poAct.AddProperty('id_fdoc', 42) + poAct.AddProperty('fdoc', 'Factura') + poAct.AddProperty('id_partc', 463) + poAct.AddProperty('partc', 'RAJA') + 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 / saft_taxtable: perechi 11% + 21%, achizitii interne + import ----- + 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) + INSERT INTO jtva_coloane2 VALUES (3, 210, 'ACH. INT. 11%', 1, 0, 1, 'RO11B', 'RO11T', 11, 211) + INSERT INTO jtva_coloane2 VALUES (4, 211, 'TVA ACH. INT. 11%', 1, 0, 1, 'RO11T', '', 11, 0) + INSERT INTO jtva_coloane2 VALUES (5, 220, 'ACH. IMP. 21%', 1, 0, 1, 'FO21B', 'FO21T', 21, 221) + INSERT INTO jtva_coloane2 VALUES (6, 221, 'TVA ACH. IMP. 21%', 1, 0, 1, 'FO21T', '', 21, 0) + INSERT INTO jtva_coloane2 VALUES (7, 222, 'ACH. IMP. 11%', 1, 0, 1, 'FO11B', 'FO11T', 11, 223) + INSERT INTO jtva_coloane2 VALUES (8, 223, 'TVA ACH. IMP. 11%', 1, 0, 1, 'FO11T', '', 11, 0) + + 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 ('301204-Import de bunuri cota 21%', 301204, '', 21, 1, 0, 1, 0) + INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ; + VALUES ('301104-Achizitii interne cota 11%', 301104, '', 11, 1, 0, 1, 0) + + DO CreeazaIntrodc WITH 'introdc' + 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 + + DO CreeazaRulTemp + INSERT INTO rul_temp (denumire, codmat, cant, pret, pret_lei, cont, cota_tva) ; + VALUES ('PLACEHOLDER', 'PH', 1, 1, 1, '371', 21) + + *-- index ord_doc INAINTE de CREATEOBJECT (capcana p, docs/testare-ui-vfp.md) + SELECT introdc + INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc + SET ORDER TO ord_doc + + *-- vezi antetul test_e2e_dvi_ron_discount.prg: tlIntern BARA, aceeasi valoare ca la CREATEOBJECT + PRIVATE tlIntern + tlIntern = .F. + + PUBLIC gcTempPath + gcTempPath = ADDBS(SYS(2023)) + PUBLIC gnHandle + gnHandle = -1 + PUBLIC gnTipGest + gnTipGest = 0 + PUBLIC gcCondSucursala + gcCondSucursala = '' + + DO EeLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F. - mod import)' + PUBLIC goObj + goObj = CREATEOBJECT('IMPORT_nota', .F.) + IF VARTYPE(goObj) <> 'O' + DO EeLog WITH 'FAIL: instantiere import_nota' + DO HarnessDone WITH 'done-error' + QUIT + ENDIF + goObj.lDialogAratat = .T. + goObj.oact = poAct + *-- lSpargeSecundare ramane la valoarea implicita a clasei (.T., "spargere secundare activa") + *-- - NU se suprascrie, ca sa reflecte comportamentul implicit real, nu setarea din alte teste. + goObj.WindowType = 0 + goObj.Visible = .T. + goObj.Show() + goObj.WindowState = 2 + DOEVENTS FORCE + + SELECT rul_temp + ZAP + goObj.gridart.Refresh() + DOEVENTS FORCE + + PRIVATE pnAsserts, pnPass + STORE 0 TO pnAsserts, pnPass + + DO HarnessStep WITH 0, 'nota goala afisata, mod import (.F.)' + + *========================= DOC1: factura EUR (RAJA) + TVA DVI fara valuta proprie + discount ========================= + PUBLIC goDlg + goDlg = CREATEOBJECT('import_adauga_factura', goObj) + goDlg.cFelDoc = 'Factura' + goDlg.nIdFdoc = 42 + goDlg.nNract = 15000 + goDlg.dDataAct = DATE() + goDlg.nIdPartener = 463 + goDlg.cPartener = 'RAJA' + goDlg.cExplicatia = 'Factura import RAJA' + goDlg.nSuma = 1000 + goDlg.nSumaLei = 0 + goDlg.nCurs = 5.23 + goDlg.nIdValuta = 978 + goDlg.cValuta = 'EUR' + goDlg.chkInValutaCont.Value = 1 + goDlg.chkParticipaValuta.Value = 1 + goDlg.nIdExplicatieTva = 220 + goDlg.cExplicatieTva = 'ACH. IMP. 21%' + goDlg.nProcentTva = 21 + + *-- DVI: identitate proprie (document vamal, partener vamal, nract 101), FARA valuta proprie + goDlg.cSerieDvi = '' + goDlg.nNractDvi = 101 + goDlg.dDviData = DATE() + goDlg.nIdFdocDVI = 39 + goDlg.cFelDocDvi = 'DVI' + goDlg.nDviIdPartener = 1398 + goDlg.cDviPartener = 'BIROUL VAMAL' + + goDlg.optTipTva.Value = 2 + goDlg.optTipTva.InteractiveChange() + + *-- alegere RON pe blocul DVI (picker real, mock_caut_valuta) - normalizare "fara valuta proprie" + PUBLIC goMockValuta, goMockValutaCoada + goMockValuta = CREATEOBJECT('Custom') + goMockValuta.AddProperty('id_valuta', 1) + goMockValuta.AddProperty('nume_val', 'RON') + goMockValutaCoada = CREATEOBJECT('Collection') + LOCAL loValRon + loValRon = CREATEOBJECT('Custom') + loValRon.AddProperty('id_valuta', 1) + loValRon.AddProperty('nume_val', 'RON') + goMockValutaCoada.Add(loValRon) + goDlg.cmdDviValuta.Click() + =AssertStr('1-DVI valuta aleasa RON (fara valuta proprie)', ALLTRIM(goDlg.cDviValuta), 'RON') + + *-- discount financiar (doar baza) + goDlg.txtDiscBaza.Value = 100 + goDlg.txtDiscBaza.Valid() + + goDlg.WindowType = 0 + goDlg.Visible = .T. + goDlg.Show() + DOEVENTS FORCE + DO HarnessStep WITH 1, 'DOC1 completat: RAJA nract=15000, DVI nract=101 fara valuta, discount 100 EUR' + + LOCAL llOkValid1 + llOkValid1 = goDlg.valideaza() + =Assert3('2-DOC1 dialog valideaza() reuseste', IIF(llOkValid1,1,0), 1) + + *-- toDlg DOC1 construit INLINE in programul PRINCIPAL (capcana l, mock_caut_valuta.prg) + PUBLIC goT + 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) + IF goDlg.optTipTva.Value = 2 + =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) + =ADDPROPERTY(goT,'dvi_in_valuta',!(EMPTY(goDlg.cDviValuta) OR UPPER(ALLTRIM(goDlg.cDviValuta))=='RON')) + =ADDPROPERTY(goT,'dvi_id_valuta',goDlg.nDviIdValuta) + =ADDPROPERTY(goT,'dvi_curs',goDlg.nDviCurs) + =ADDPROPERTY(goT,'dvi_nume_val',ALLTRIM(NVL(goDlg.cDviValuta,''))) + =ADDPROPERTY(goT,'dvi_valuta_proprie',IIF(!(EMPTY(goDlg.cDviValuta) OR UPPER(ALLTRIM(goDlg.cDviValuta))=='RON') OR !(EMPTY(goDlg.cValuta) OR UPPER(ALLTRIM(goDlg.cValuta))=='RON'),IIF(goDlg.nDviIdValuta<>goDlg.nIdValuta OR goDlg.nDviCurs<>goDlg.nCurs,1,0),0)) + ENDIF + =ADDPROPERTY(goT,'disc_baza_lei',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,ROUND(goDlg.nDiscBaza*goDlg.nCurs,gnPC),goDlg.nDiscBaza)) + =ADDPROPERTY(goT,'disc_baza_val',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,goDlg.nDiscBaza,0)) + + LOCAL llOkAdauga1 + llOkAdauga1 = goObj.do_adauga_factura(goT) + =Assert3('3-DOC1 do_adauga_factura(goT) reuseste (Termin)', IIF(llOkAdauga1,1,0), 1) + goDlg.Hide() + DOEVENTS FORCE + DO HarnessStep WITH 2, 'DOC1 adaugat: introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri' + DO DumpIntrodc WITH 'DUMP dupa DOC1 (RAJA, nract=15000)' + + *========================= DOC2: taxe vamale (BIROUL VAMAL) - TVA la furnizor, cota 11%, FARA valuta ========================= + PUBLIC goDlg2 + goDlg2 = CREATEOBJECT('import_adauga_factura', goObj) + goDlg2.cFelDoc = 'DVI' + goDlg2.nIdFdoc = 39 + goDlg2.nNract = 101 + goDlg2.dDataAct = DATE() + goDlg2.nIdPartener = 1398 + goDlg2.cPartener = 'BIROUL VAMAL' + goDlg2.cExplicatia = 'Taxe vamale' + goDlg2.nSuma = 500 + goDlg2.nSumaLei = 0 + goDlg2.nCurs = 0 + goDlg2.nIdValuta = 0 + goDlg2.cValuta = '' + goDlg2.chkInValutaCont.Value = 0 + goDlg2.chkParticipaValuta.Value = 1 + goDlg2.nIdExplicatieTva = 210 + goDlg2.cExplicatieTva = 'ACH. INT. 11%' + goDlg2.nProcentTva = 11 + + goDlg2.optTipTva.Value = 1 + goDlg2.optTipTva.InteractiveChange() + + goDlg2.WindowType = 0 + goDlg2.Visible = .T. + goDlg2.Show() + DOEVENTS FORCE + DO HarnessStep WITH 3, 'DOC2 completat: BIROUL VAMAL nract=101, TVA furnizor 11%, fara valuta' + + LOCAL llOkValid2 + llOkValid2 = goDlg2.valideaza() + =Assert3('4-DOC2 dialog valideaza() reuseste', IIF(llOkValid2,1,0), 1) + + *-- toDlg DOC2 construit INLINE in programul PRINCIPAL (aceeasi capcana l) + PUBLIC goT2 + goT2 = CREATEOBJECT('Empty') + =ADDPROPERTY(goT2,'serie_act',ALLTRIM(NVL(goDlg2.cSerieAct,''))) + =ADDPROPERTY(goT2,'nract',goDlg2.nNract) + =ADDPROPERTY(goT2,'dataact',goDlg2.dDataAct) + =ADDPROPERTY(goT2,'fdoc',goDlg2.cFelDoc) + =ADDPROPERTY(goT2,'id_fdoc',goDlg2.nIdFdoc) + =ADDPROPERTY(goT2,'id_partc',goDlg2.nIdPartener) + =ADDPROPERTY(goT2,'partc',goDlg2.cPartener) + =ADDPROPERTY(goT2,'explicatia',ALLTRIM(NVL(goDlg2.cExplicatia,''))) + =ADDPROPERTY(goT2,'suma',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,IIF(goDlg2.nSumaLei<>0,goDlg2.nSumaLei,ROUND(goDlg2.nSuma*goDlg2.nCurs,gnPC)),goDlg2.nSuma)) + =ADDPROPERTY(goT2,'suma_val',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,goDlg2.nSuma,0)) + =ADDPROPERTY(goT2,'in_valuta',goDlg2.chkInValutaCont.Value) + =ADDPROPERTY(goT2,'participa_valuta',(goDlg2.chkParticipaValuta.Value=1)) + =ADDPROPERTY(goT2,'id_valuta',IIF(goDlg2.chkInValutaCont.Value=1,goDlg2.nIdValuta,0)) + =ADDPROPERTY(goT2,'curs',IIF(goDlg2.chkInValutaCont.Value=1,goDlg2.nCurs,0)) + =ADDPROPERTY(goT2,'nume_val',IIF(goDlg2.chkInValutaCont.Value=1,ALLTRIM(NVL(goDlg2.cValuta,'')),'')) + =ADDPROPERTY(goT2,'cTipTva',IIF(goDlg2.optTipTva.Value=1,'F',IIF(goDlg2.optTipTva.Value=2,'D','N'))) + =ADDPROPERTY(goT2,'id_jtva_coloana',goDlg2.nIdExplicatieTva) + =ADDPROPERTY(goT2,'disc_baza_lei',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,ROUND(goDlg2.nDiscBaza*goDlg2.nCurs,gnPC),goDlg2.nDiscBaza)) + =ADDPROPERTY(goT2,'disc_baza_val',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,goDlg2.nDiscBaza,0)) + + LOCAL llOkAdauga2 + llOkAdauga2 = goObj.do_adauga_factura(goT2) + =Assert3('5-DOC2 do_adauga_factura(goT2) reuseste (Termin)', IIF(llOkAdauga2,1,0), 1) + goDlg2.Hide() + DOEVENTS FORCE + DO HarnessStep WITH 4, 'DOC2 adaugat: introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri' + DO DumpIntrodc WITH 'DUMP dupa DOC2 (BIROUL VAMAL, nract=101)' + + *========================= verificare doc_key: T-DVI (DOC1) vs B (DOC2) nu se suprapun ========================= + LOCAL lcDocKeyTDvi, lcDocKeyDoc2B + lcDocKeyTDvi = '' + lcDocKeyDoc2B = '' + SELECT introdc + LOCATE FOR Nvl(rand_dvi,0) = 1 + IF FOUND() + lcDocKeyTDvi = ALLTRIM(NVL(doc_key,'')) + ENDIF + LOCATE FOR nract = 101 AND id_fdoc = 39 AND tip_rand == 'B' + IF FOUND() + lcDocKeyDoc2B = ALLTRIM(NVL(doc_key,'')) + ENDIF + =Assert3('6-ambele doc_key gasite (T-DVI si B-DOC2)', IIF(!EMPTY(lcDocKeyTDvi) AND !EMPTY(lcDocKeyDoc2B),1,0), 1) + pnAsserts = pnAsserts + 1 + IF !EMPTY(lcDocKeyTDvi) AND !EMPTY(lcDocKeyDoc2B) AND lcDocKeyTDvi <> lcDocKeyDoc2B + pnPass = pnPass + 1 + DO EeLog WITH ' PASS 7-doc_key T-DVI(DOC1)=[' + lcDocKeyTDvi + '] <> doc_key B(DOC2)=[' + lcDocKeyDoc2B + '] (fara suprapunere)' + ELSE + DO EeLog WITH ' FAIL 7-doc_key T-DVI(DOC1)=[' + lcDocKeyTDvi + '] SE SUPRAPUNE cu B(DOC2)=[' + lcDocKeyDoc2B + '] -> pista doc_key CONFIRMATA' + ENDIF + + *========================= ARTICOLE (2, ale DOC1): cont 371 analitic 816, cote 11%/21% ========================= + gcMockArtCodmat = 'ART-A8-371' + LOCAL llEroareArt1 + llEroareArt1 = .F. + TRY + goObj.do_adauga_articol() + CATCH TO loExcArt1 + llEroareArt1 = .T. + DO EeLog WITH 'EROARE do_adauga_articol (art1) ' + TRANSFORM(loExcArt1.ErrorNo) + ' [' + loExcArt1.Message + ']' + ENDTRY + =Assert3('8-do_adauga_articol() art1 (cota 11%) fara eroare', IIF(llEroareArt1,0,1), 1) + 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,4), ; + pret_lei WITH ROUND(100*5.23,4), cont WITH '371', cota_tva WITH 11 + ELSE + pnAsserts = pnAsserts + 1 + DO EeLog WITH ' FAIL 8b: articolul cota 11% nu a fost adaugat' + ENDIF + + gcMockArtCodmat = 'ART-BULD-212' + LOCAL llEroareArt2 + llEroareArt2 = .F. + TRY + goObj.do_adauga_articol() + CATCH TO loExcArt2 + llEroareArt2 = .T. + DO EeLog WITH 'EROARE do_adauga_articol (art2) ' + TRANSFORM(loExcArt2.ErrorNo) + ' [' + loExcArt2.Message + ']' + ENDTRY + =Assert3('9-do_adauga_articol() art2 (cota 21%) fara eroare', IIF(llEroareArt2,0,1), 1) + 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,4), ; + pret_lei WITH ROUND(900*5.23,4), cont WITH '371', cota_tva WITH 21 + ELSE + pnAsserts = pnAsserts + 1 + DO EeLog WITH ' FAIL 9b: articolul cota 21% nu a fost adaugat' + ENDIF + goObj.gridart.Refresh() + DOEVENTS FORCE + DO HarnessStep WITH 5, 'articole adaugate (cont 371/816, cote 11% si 21%)' + DO DumpIntrodc WITH 'DUMP dupa ARTICOLE (inainte de sincronizare)' + + *========================= sincronizeaza() REAL ========================= + LOCAL llEroareSync + llEroareSync = .F. + TRY + goObj.sincronizeaza() + CATCH TO loExcSync + llEroareSync = .T. + DO EeLog WITH 'EROARE sincronizeaza() ' + TRANSFORM(loExcSync.ErrorNo) + ' [' + loExcSync.Message + '] in ' + loExcSync.Procedure + ':' + TRANSFORM(loExcSync.LineNo) + ENDTRY + DOEVENTS FORCE + =Assert3('10-sincronizeaza() fara eroare', IIF(llEroareSync,0,1), 1) + DO HarnessStep WITH 6, 'sincronizat' + DO DumpIntrodc WITH 'DUMP dupa sincronizeaza() (flux curat, fara nicio interactiune de grila)' + + *========================= ASSERT-URI DE INTEGRITATE nract - identitate dupa nr_doc, NU dupa nract ========================= + LOCAL lnNrDocRaja, llBugDeclansator + lnNrDocRaja = 0 + llBugDeclansator = .F. + SELECT introdc + LOCATE FOR id_partc = 463 AND tip_rand <> 'T' + IF FOUND() + lnNrDocRaja = nr_doc + ENDIF + IF lnNrDocRaja = 0 + *-- RAJA nu mai apare dupa id_partc (posibil deja corupt) - incerc dupa nr_doc minim + SELECT introdc + CALCULATE MIN(nr_doc) TO lnNrDocRaja + ENDIF + DO EeLog WITH 'nr_doc identificat pentru DOC1 (RAJA): ' + TRANSFORM(lnNrDocRaja) + + LOCAL lnCntVerifCurat + lnCntVerifCurat = 0 + SELECT introdc + SCAN FOR nr_doc = lnNrDocRaja AND Nvl(rand_dvi,0) <> 1 + lnCntVerifCurat = lnCntVerifCurat + 1 + pnAsserts = pnAsserts + 1 + IF nract == 15000 + pnPass = pnPass + 1 + DO EeLog WITH ' PASS 11.' + TRANSFORM(lnCntVerifCurat) + '-tip_rand=' + tip_rand + ' nract=15000 (flux curat, =' + TRANSFORM(nract) + ')' + ELSE + llBugDeclansator = .T. + DO EeLog WITH ' FAIL 11.' + TRANSFORM(lnCntVerifCurat) + '-tip_rand=' + tip_rand + ' nract=' + TRANSFORM(nract) + ' (asteptat 15000) -> SE STRICA SINGUR, FARA TRIGGER' + ENDIF + ENDSCAN + + DO HarnessStep WITH 7, 'verificat flux curat: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS' + + *========================= imediat inainte de Terminat: ultim DUMP introdc ========================= + DO DumpIntrodc WITH 'DUMP imediat inainte de Terminat (introdc, dupa sincronizare, INAINTE de trigger)' + + *========================= DECLANSATOR (a): focus pe randul T-DVI, apoi Terminat ========================= + *-- surogatul cel mai fidel headless pentru "utilizatorul a lasat celula Nr activa pe randul + *-- T-DVI si a dat click pe Terminat" (VFP declanseaza Valid() la pierderea focusului, + *-- INDIFERENT daca s-a tastat ceva) - pozitionam pointerul pe randul T-DVI si apelam + *-- Grid1.cNract.Text1.Valid() chiar inainte de Terminat, NU izolat. + SELECT introdc + LOCATE FOR Nvl(rand_dvi,0) = 1 + =Assert3('11b-pozitionare pe randul T-DVI reusita (inainte de declansator)', IIF(FOUND(),1,0), 1) + + LOCAL llTriggerOk, lcVarianta + llTriggerOk = .F. + lcVarianta = '' + IF FOUND() + TRY + goObj.Grid1.cNract.Text1.Valid() + llTriggerOk = .T. + lcVarianta = 'Grid1.cNract.Text1.Valid() (surogat pentru focus pierdut la click pe Terminat)' + CATCH TO loExcTrig1 + DO EeLog WITH 'INFO Grid1.cNract.Text1.Valid() a esuat (' + TRANSFORM(loExcTrig1.ErrorNo) + ' ' + loExcTrig1.Message + '), incerc fallback copiaza_valoare()' + SELECT introdc + LOCATE FOR Nvl(rand_dvi,0) = 1 + TRY + goObj.copiaza_valoare('nract') + llTriggerOk = .T. + lcVarianta = 'copiaza_valoare(''nract'') (fallback, apel direct pe metoda)' + CATCH TO loExcTrig2 + DO EeLog WITH 'EROARE si fallback copiaza_valoare(''nract'') a esuat: ' + TRANSFORM(loExcTrig2.ErrorNo) + ' ' + loExcTrig2.Message + ENDTRY + ENDTRY + ENDIF + DOEVENTS FORCE + =Assert3('11c-declansator (a) executat fara eroare', IIF(llTriggerOk,1,0), 1) + DO EeLog WITH 'DECLANSATOR (a) folosit: ' + lcVarianta + + DO DumpIntrodc WITH 'DUMP dupa declansatorul (a) (focus pe T-DVI), INAINTE de Terminat' + + *========================= Terminat (stub verificare.scx) ========================= + DO CreeazaActactan + LOCAL llEroareTermin + llEroareTermin = .F. + TRY + goObj.inainte_de_do_termin() + CATCH TO loExcTermin + llEroareTermin = .T. + DO EeLog WITH 'EROARE inainte_de_do_termin() ' + TRANSFORM(loExcTermin.ErrorNo) + ' [' + loExcTermin.Message + '] in ' + loExcTermin.Procedure + ':' + TRANSFORM(loExcTermin.LineNo) + ENDTRY + =Assert3('12-inainte_de_do_termin() fara eroare (Terminat)', IIF(llEroareTermin,0,1), 1) + + IF USED('actactan') + DO EeLog WITH 'DUMP actactan dupa Terminat:' + SELECT actactan + SCAN + DO EeLog WITH ' recno=' + TRANSFORM(RECNO()) + ' nract=' + TRANSFORM(NVL(nract,0)) + ' id_fdoc=' + TRANSFORM(NVL(id_fdoc,0)) + ; + ' id_partc=' + TRANSFORM(NVL(id_partc,0)) + ' partc=[' + ALLTRIM(NVL(partc,'')) + ']' + ; + ' scd=' + ALLTRIM(NVL(scd,'')) + ' scc=' + ALLTRIM(NVL(scc,'')) + ' suma=' + TRANSFORM(NVL(suma,0)) + ENDSCAN + + LOCAL lnCntVerifActactan + lnCntVerifActactan = 0 + SELECT actactan + SCAN FOR id_partc = 463 + lnCntVerifActactan = lnCntVerifActactan + 1 + pnAsserts = pnAsserts + 1 + IF nract == 15000 + pnPass = pnPass + 1 + DO EeLog WITH ' PASS 13.' + TRANSFORM(lnCntVerifActactan) + '-actactan randul partener 463 (RAJA): nract=15000 (=' + TRANSFORM(nract) + ')' + ELSE + llBugDeclansator = .T. + DO EeLog WITH ' FAIL 13.' + TRANSFORM(lnCntVerifActactan) + '-actactan randul partener 463 (RAJA): nract=' + TRANSFORM(nract) + ' (asteptat 15000) -> BUG in actactan, flux curat' + ENDIF + ENDSCAN + IF lnCntVerifActactan = 0 + DO EeLog WITH ' INFO: niciun rand cu id_partc=463 in actactan (poate fi corupt catre 1398 - vezi dump)' + ENDIF + ELSE + DO EeLog WITH 'INFO: actactan neinstantiat dupa inainte_de_do_termin() (posibil eroare de validare mai devreme in flux)' + ENDIF + + DO HarnessStep WITH 8, 'final: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS' + + DO EeLog WITH '=========================================================' + IF llBugDeclansator + DO EeLog WITH 'BUG CONFIRMAT cu declansatorul (a): dupa ce Grid1.cNract.Text1.Valid() ruleaza cu ' + ; + 'pointerul pe randul T-DVI (surogat pentru "focus lasat pe coloana Nr a randului DVI, apoi ' + ; + 'click pe Terminat"), nract-ul DOC1 (RAJA, 15000) devine 101 pe randurile B/G/S, iar ' + ; + 'coruptia ajunge in actactan dupa Terminat.' + ELSE + DO EeLog WITH 'BUG NECONFIRMAT cu declansatorul (a): desi Grid1.cNract.Text1.Valid() a rulat cu ' + ; + 'pointerul pe randul T-DVI imediat inainte de Terminat, nract-ul DOC1 (RAJA, 15000) a ramas ' + ; + 'corect pe toate randurile.' + ENDIF + DO EeLog WITH '=========================================================' + + DO EeLog WITH 'REZULTAT: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS' + IF pnPass = pnAsserts + DO EeLog WITH 'REZULTAT: PASS (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ')' + ELSE + DO EeLog WITH 'REZULTAT: FAIL (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS)' + ENDIF + + DO HarnessDone WITH 'done' + +CATCH TO loExc + DO EeLog 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 DumpIntrodc + LPARAMETERS tcTitlu + LOCAL lcSelAnt, lnRecAnt + lcSelAnt = SELECT() + lnRecAnt = IIF(USED('introdc'), IIF(EOF('introdc') OR BOF('introdc'), 0, RECNO('introdc')), 0) + DO EeLog WITH tcTitlu + IF !USED('introdc') + DO EeLog WITH ' (introdc neinstantiat)' + RETURN + ENDIF + SELECT introdc + SCAN + DO EeLog WITH ' tip_rand=' + ALLTRIM(NVL(tip_rand,'?')) + ' nr_doc=' + TRANSFORM(NVL(nr_doc,0)) + ; + ' nract=' + TRANSFORM(NVL(nract,0)) + ' id_fdoc=' + TRANSFORM(NVL(id_fdoc,0)) + ; + ' id_partc=' + TRANSFORM(NVL(id_partc,0)) + ' doc_key=[' + ALLTRIM(NVL(doc_key,'')) + ']' + ; + ' rand_dvi=' + TRANSFORM(NVL(rand_dvi,0)) + ' valuta_proprie=' + TRANSFORM(NVL(valuta_proprie,0)) + ; + ' mod_manual=' + TRANSFORM(NVL(mod_manual,0)) + ' scd=' + ALLTRIM(NVL(scd,'')) + ' scc=' + ALLTRIM(NVL(scc,'')) + ; + ' suma=' + TRANSFORM(NVL(suma,0)) + ' suma_val=' + TRANSFORM(NVL(suma_val,0)) + ENDSCAN + IF lnRecAnt > 0 + TRY + GO lnRecAnt + CATCH + GO TOP + ENDTRY + ENDIF + SELECT (lcSelAnt) +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), expl_manual N(1), ; + scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1)) +ENDPROC + +PROCEDURE CreeazaRulTemp + 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 CreeazaActactan + IF USED('actactan') + USE IN ('actactan') + ENDIF + CREATE CURSOR actactan ( ; + id_fdoc N(14), fdoc C(50), dataact D, serie_act C(10), nract N(14), ; + partc C(100), id_partc N(14), partd C(100), id_partd N(14), ; + suma N(18,4), suma_val N(18,4), explicatia C(100), explicatia4 C(50), explicatia5 C(50), ; + scd C(10), ascd C(20), scc C(10), ascc C(20), id_jtva_coloana N(14) NULL, taxcode N(6), ; + id_valuta N(14), curs N(14,4), nume_val C(10), proc_tva N(8,4), nnir N(14), ; + tva_incasare N(1), id_set N(14), id_gestin N(14)) +ENDPROC + +FUNCTION RECCOUNT_ACTIVE + LPARAMETERS tcAlias + LOCAL lnSel, lnCnt + lnSel = SELECT() + SELECT (tcAlias) + COUNT TO lnCnt FOR !DELETED() + SELECT (lnSel) + RETURN lnCnt +ENDFUNC + +PROCEDURE Assert3 + LPARAMETERS tcLabel, tuActual, tuExpected + pnAsserts = pnAsserts + 1 + IF ABS(NVL(tuActual,0) - tuExpected) < 0.02 + pnPass = pnPass + 1 + DO EeLog WITH ' PASS ' + tcLabel + ' (=' + TRANSFORM(tuActual) + ')' + ELSE + DO EeLog WITH ' FAIL ' + tcLabel + ' (actual=' + TRANSFORM(tuActual) + ' asteptat=' + TRANSFORM(tuExpected) + ')' + ENDIF +ENDPROC + +PROCEDURE AssertStr + LPARAMETERS tcLabel, tcActual, tcExpected + pnAsserts = pnAsserts + 1 + IF tcActual == tcExpected + pnPass = pnPass + 1 + DO EeLog WITH ' PASS ' + tcLabel + ' (=[' + tcActual + '])' + ELSE + DO EeLog WITH ' FAIL ' + tcLabel + ' (actual=[' + tcActual + '] asteptat=[' + tcExpected + '])' + ENDIF +ENDPROC + +PROCEDURE EeErr + LPARAMETERS tnErr, tcMsg, tcProg, tnLine + DO EeLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg +ENDPROC + +PROCEDURE EeLog + 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' + CREATE CURSOR (m.tcCursor) (denumire C(100), codmat C(30), cant N(14,3), ; + pret_val N(18,4), pretd N(18,4), pret N(18,4), pret_lei N(18,4), cont C(10), ; + acont C(20), serie C(30), lot C(30), adata_expirare C(10), proc_disc N(6,2), cota_tva N(6,2)) + RETURN 1 + ENDIF + IF 'CONFIG_ANALITICE' $ UPPER(m.tcSql) + CREATE CURSOR (m.tcCursor) (camp_leg_prefix C(30), camp_leg_sufix C(30)) + INSERT INTO (m.tcCursor) VALUES ('', '') + RETURN 1 + ENDIF + IF 'FCONTURI_ANALITICE' $ UPPER(m.tcSql) + CREATE CURSOR (m.tcCursor) (acont C(20)) + INSERT INTO (m.tcCursor) VALUES (IIF(TYPE('gcMockAcontCrt') = 'C', gcMockAcontCrt, '')) + RETURN 1 + ENDIF + IF 'VPLCONT_ANALITIC' $ UPPER(m.tcSql) + CREATE CURSOR (m.tcCursor) (cont C(10), acont C(20)) + RETURN 1 + ENDIF + IF 'VCONFIG_CONT_IREG' $ UPPER(m.tcSql) + CREATE CURSOR (m.tcCursor) (contpart C(10), fel_cont N(1), cu_inregistrari N(1), ; + explic_cont C(100), exceptie C(10), pozitie N(1), invers N(1), gasit N(1)) + INSERT INTO (m.tcCursor) VALUES ('401', 0, 0, 'Furnizori', '', 0, 0, 0) + RETURN 1 + ENDIF + CREATE CURSOR (m.tcCursor) (id_temp N(1)) + 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) + INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ; + VALUES (210, 'ACH. INT. 11%', 1, 0, 'RO11B', 11, 211, 1, 3, 301104) + INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ; + VALUES (211, 'TVA ACH. INT. 11%', 1, 0, 'RO11T', 11, 1, 4, 301104) + INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ; + VALUES (220, 'ACH. IMP. 21%', 1, 0, 'FO21B', 21, 221, 1, 5, 301204) + INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ; + VALUES (221, 'TVA ACH. IMP. 21%', 1, 0, 'FO21T', 21, 1, 6, 301204) + INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ; + VALUES (222, 'ACH. IMP. 11%', 1, 0, 'FO11B', 11, 223, 1, 7, 301204) + INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ; + VALUES (223, 'TVA ACH. IMP. 11%', 1, 0, 'FO11T', 11, 1, 8, 301204) +ENDPROC diff --git a/utile/Teste/achizitie_import/test_repro_trigger_focus_terminat.ps1 b/utile/Teste/achizitie_import/test_repro_trigger_focus_terminat.ps1 new file mode 100644 index 0000000..a29071b --- /dev/null +++ b/utile/Teste/achizitie_import/test_repro_trigger_focus_terminat.ps1 @@ -0,0 +1,12 @@ +# test_repro_trigger_focus_terminat.ps1 - wrapper peste harness-ul generic pentru testul de +# REPRODUCERE cu declansatorul (a): focus pe randul T-DVI + Terminat. +# Rulare: powershell -ExecutionPolicy Bypass -File test_repro_trigger_focus_terminat.ps1 +$ErrorActionPreference = 'Stop' +$Teste = $PSScriptRoot +& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') ` + -TestPrg (Join-Path $Teste 'test_repro_trigger_focus_terminat.prg') ` + -Steps @('nota_goala','doc1_completat','doc1_adaugat','doc2_completat','doc2_adaugat','articole_adaugate','sincronizat','verificat_flux_curat','final') ` + -ShotsDir (Join-Path $Teste 'screenshots_repro_trigger_focus_terminat') ` + -SyncDir (Join-Path $Teste 'uisync_repro_trigger_focus_terminat') ` + -StepTimeoutSec 180 ` + -ReadyTimeoutSec 180 diff --git a/utile/Teste/achizitie_import/test_repro_trigger_partener.prg b/utile/Teste/achizitie_import/test_repro_trigger_partener.prg new file mode 100644 index 0000000..97bedcf --- /dev/null +++ b/utile/Teste/achizitie_import/test_repro_trigger_partener.prg @@ -0,0 +1,994 @@ +* test_repro_trigger_partener.prg +* Test de REPRODUCERE - acelasi flux CURAT ca test_repro_flux_curat_doc_dublu.prg, plus +* declansatorul cerut pe coloana "Partener": Grid1.cPartC.Text1.Valid(), in AMBELE directii: +* (1) pointerul pe randul T-DVI (sursa) -> partenerul vamal (Biroul Vamal) NU trebuie sa +* ajunga pe niciun rand al facturii principale; +* (2) pointerul pe randul B (sursa, factura) -> partenerul facturii (RAJA) NU trebuie sa +* ajunga pe randul DVI. +* Spre deosebire de copiaza_valoare('nract'), Grid1.cPartC.Text1.Valid NU foloseste +* This.Parent.ControlSource/copiaza_valoare - are logica proprie (rescrisa in fix): "early +* return cand randul curent e DVI" (cazul 1, mai sus) + "LOOP pe randurile-tinta DVI" in +* Scan-ul de propagare (cazul 2) - deci neafectata de problema de calificare gasita la +* declansatorul pe coloana Nr (vezi test_diag_controlsource_calificat.prg). +* +* Scenariu (date reale, act.cod=1140856) - identic cu test_repro_flux_curat_doc_dublu.prg: +* DOC1 - factura principala: nract=15000, id_fdoc=42 (Factura), id_partc=463 (RAJA), in +* valuta EUR (curs 5.23), suma=1000 EUR=5230 lei, discount financiar 100 EUR=523 lei; +* TVA pe DVI (nract=101, id_fdoc=39 'DVI', id_partc=1398 'BIROUL VAMAL'), DVI FARA valuta +* proprie (bifa scoasa - alegere RON prin picker-ul real, normalizata "fara valuta"). +* DOC2 - taxe vamale: nract=101, id_fdoc=39 (DVI), id_partc=1398 (BIROUL VAMAL), FARA +* valuta, suma=500 lei, TVA la FURNIZOR (nu pe DVI) cota 11%, participa la pret. +* ARTICOLE (2, ale DOC1): cont 371 analitic 816, un articol cota 11% (baza 100 EUR/523 lei) +* si unul cota 21% (baza 900 EUR/4707 lei) - proportie 100:900, ca sa se exercite +* sparge_tva_protejat() (randul T-DVI e "protejat" - valuta_proprie=1 - pentru ca factura +* e in valuta straina, chiar daca DVI-ul insusi nu are valuta proprie). +* +* ATENTIE: DOC2 are ACELASI nract/id_fdoc/id_partc (101/39/1398) ca randul T-DVI al DOC1 (dupa +* ce acesta preia identitatea vamala) - testul verifica explicit ca doc_key nu se suprapune +* intre cele doua (calc_doc_key :8799 include nr_doc, care difera - vezi assert-urile finale). +* +* Dump complet introdc dupa fiecare pas (tip_rand, nr_doc, doc_key, nract, id_fdoc, id_partc, +* scd, scc, suma, suma_val, rand_dvi, valuta_proprie, mod_manual) + actactan dupa Terminat. +* Asserturile de identitate se fac dupa nr_doc (nu dupa nract, care e tocmai ce se verifica). +* +* Rulare: +* powershell -ExecutionPolicy Bypass -File test_repro_trigger_partener.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_repro_trigger_partener_log.txt" +gcSyncDir = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\uisync_repro_trigger_partener\" +STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog) + +ON ERROR DO EeErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO() +ON SHUTDOWN QUIT + +TRY + LOCAL gcAppPath, lcPath + gcAppPath = "D:\ROA\ROAGEST\" + SET DEFAULT TO (gcAppPath) + + lcPath = gcAppPath + 'COMUN\Utile\Teste\achizitie_import\stub_verificare;' + ; + 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 EeLog 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 EeLog WITH 'SET CLASSLIB OK' + + *----- PROCEDURI (mock-uri 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\achizitie_import\mock_caut_valuta.prg" ADDITIVE + SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_cauta_nom_articole.prg" ADDITIVE + SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_oscrie_in_fisiere.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 EeLog 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 gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip, gcMockArtCodmat + gnMockRaspuns = 6 + gcMockUltimMesaj = '' + gnMockUltimTip = 0 + PUBLIC gnButon + gnButon = 1 + gcMockArtCodmat = '' + + PUBLIC goExecutor, goApp + goExecutor = CREATEOBJECT('dummyexecutor') + goApp = CREATEOBJECT('dummyapp') + + *----- poAct: antetul notei (factura import EUR, curs 5.23) ----- + PUBLIC poAct + poAct = CREATEOBJECT('Custom') + poAct.AddProperty('nume_val', 'EUR') + poAct.AddProperty('curs', 5.23) + poAct.AddProperty('proc_tva', 1.21) + poAct.AddProperty('nnir', 0) + poAct.AddProperty('id_valuta', 978) + poAct.AddProperty('id_fdoc', 42) + poAct.AddProperty('fdoc', 'Factura') + poAct.AddProperty('id_partc', 463) + poAct.AddProperty('partc', 'RAJA') + 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 / saft_taxtable: perechi 11% + 21%, achizitii interne + import ----- + 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) + INSERT INTO jtva_coloane2 VALUES (3, 210, 'ACH. INT. 11%', 1, 0, 1, 'RO11B', 'RO11T', 11, 211) + INSERT INTO jtva_coloane2 VALUES (4, 211, 'TVA ACH. INT. 11%', 1, 0, 1, 'RO11T', '', 11, 0) + INSERT INTO jtva_coloane2 VALUES (5, 220, 'ACH. IMP. 21%', 1, 0, 1, 'FO21B', 'FO21T', 21, 221) + INSERT INTO jtva_coloane2 VALUES (6, 221, 'TVA ACH. IMP. 21%', 1, 0, 1, 'FO21T', '', 21, 0) + INSERT INTO jtva_coloane2 VALUES (7, 222, 'ACH. IMP. 11%', 1, 0, 1, 'FO11B', 'FO11T', 11, 223) + INSERT INTO jtva_coloane2 VALUES (8, 223, 'TVA ACH. IMP. 11%', 1, 0, 1, 'FO11T', '', 11, 0) + + 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 ('301204-Import de bunuri cota 21%', 301204, '', 21, 1, 0, 1, 0) + INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ; + VALUES ('301104-Achizitii interne cota 11%', 301104, '', 11, 1, 0, 1, 0) + + DO CreeazaIntrodc WITH 'introdc' + 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 + + DO CreeazaRulTemp + INSERT INTO rul_temp (denumire, codmat, cant, pret, pret_lei, cont, cota_tva) ; + VALUES ('PLACEHOLDER', 'PH', 1, 1, 1, '371', 21) + + *-- index ord_doc INAINTE de CREATEOBJECT (capcana p, docs/testare-ui-vfp.md) + SELECT introdc + INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc + SET ORDER TO ord_doc + + *-- vezi antetul test_e2e_dvi_ron_discount.prg: tlIntern BARA, aceeasi valoare ca la CREATEOBJECT + PRIVATE tlIntern + tlIntern = .F. + + PUBLIC gcTempPath + gcTempPath = ADDBS(SYS(2023)) + PUBLIC gnHandle + gnHandle = -1 + PUBLIC gnTipGest + gnTipGest = 0 + PUBLIC gcCondSucursala + gcCondSucursala = '' + + DO EeLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F. - mod import)' + PUBLIC goObj + goObj = CREATEOBJECT('IMPORT_nota', .F.) + IF VARTYPE(goObj) <> 'O' + DO EeLog WITH 'FAIL: instantiere import_nota' + DO HarnessDone WITH 'done-error' + QUIT + ENDIF + goObj.lDialogAratat = .T. + goObj.oact = poAct + *-- lSpargeSecundare ramane la valoarea implicita a clasei (.T., "spargere secundare activa") + *-- - NU se suprascrie, ca sa reflecte comportamentul implicit real, nu setarea din alte teste. + goObj.WindowType = 0 + goObj.Visible = .T. + goObj.Show() + goObj.WindowState = 2 + DOEVENTS FORCE + + SELECT rul_temp + ZAP + goObj.gridart.Refresh() + DOEVENTS FORCE + + PRIVATE pnAsserts, pnPass + STORE 0 TO pnAsserts, pnPass + + DO HarnessStep WITH 0, 'nota goala afisata, mod import (.F.)' + + *========================= DOC1: factura EUR (RAJA) + TVA DVI fara valuta proprie + discount ========================= + PUBLIC goDlg + goDlg = CREATEOBJECT('import_adauga_factura', goObj) + goDlg.cFelDoc = 'Factura' + goDlg.nIdFdoc = 42 + goDlg.nNract = 15000 + goDlg.dDataAct = DATE() + goDlg.nIdPartener = 463 + goDlg.cPartener = 'RAJA' + goDlg.cExplicatia = 'Factura import RAJA' + goDlg.nSuma = 1000 + goDlg.nSumaLei = 0 + goDlg.nCurs = 5.23 + goDlg.nIdValuta = 978 + goDlg.cValuta = 'EUR' + goDlg.chkInValutaCont.Value = 1 + goDlg.chkParticipaValuta.Value = 1 + goDlg.nIdExplicatieTva = 220 + goDlg.cExplicatieTva = 'ACH. IMP. 21%' + goDlg.nProcentTva = 21 + + *-- DVI: identitate proprie (document vamal, partener vamal, nract 101), FARA valuta proprie + goDlg.cSerieDvi = '' + goDlg.nNractDvi = 101 + goDlg.dDviData = DATE() + goDlg.nIdFdocDVI = 39 + goDlg.cFelDocDvi = 'DVI' + goDlg.nDviIdPartener = 1398 + goDlg.cDviPartener = 'BIROUL VAMAL' + + goDlg.optTipTva.Value = 2 + goDlg.optTipTva.InteractiveChange() + + *-- alegere RON pe blocul DVI (picker real, mock_caut_valuta) - normalizare "fara valuta proprie" + PUBLIC goMockValuta, goMockValutaCoada + goMockValuta = CREATEOBJECT('Custom') + goMockValuta.AddProperty('id_valuta', 1) + goMockValuta.AddProperty('nume_val', 'RON') + goMockValutaCoada = CREATEOBJECT('Collection') + LOCAL loValRon + loValRon = CREATEOBJECT('Custom') + loValRon.AddProperty('id_valuta', 1) + loValRon.AddProperty('nume_val', 'RON') + goMockValutaCoada.Add(loValRon) + goDlg.cmdDviValuta.Click() + =AssertStr('1-DVI valuta aleasa RON (fara valuta proprie)', ALLTRIM(goDlg.cDviValuta), 'RON') + + *-- discount financiar (doar baza) + goDlg.txtDiscBaza.Value = 100 + goDlg.txtDiscBaza.Valid() + + goDlg.WindowType = 0 + goDlg.Visible = .T. + goDlg.Show() + DOEVENTS FORCE + DO HarnessStep WITH 1, 'DOC1 completat: RAJA nract=15000, DVI nract=101 fara valuta, discount 100 EUR' + + LOCAL llOkValid1 + llOkValid1 = goDlg.valideaza() + =Assert3('2-DOC1 dialog valideaza() reuseste', IIF(llOkValid1,1,0), 1) + + *-- toDlg DOC1 construit INLINE in programul PRINCIPAL (capcana l, mock_caut_valuta.prg) + PUBLIC goT + 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) + IF goDlg.optTipTva.Value = 2 + =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) + =ADDPROPERTY(goT,'dvi_in_valuta',!(EMPTY(goDlg.cDviValuta) OR UPPER(ALLTRIM(goDlg.cDviValuta))=='RON')) + =ADDPROPERTY(goT,'dvi_id_valuta',goDlg.nDviIdValuta) + =ADDPROPERTY(goT,'dvi_curs',goDlg.nDviCurs) + =ADDPROPERTY(goT,'dvi_nume_val',ALLTRIM(NVL(goDlg.cDviValuta,''))) + =ADDPROPERTY(goT,'dvi_valuta_proprie',IIF(!(EMPTY(goDlg.cDviValuta) OR UPPER(ALLTRIM(goDlg.cDviValuta))=='RON') OR !(EMPTY(goDlg.cValuta) OR UPPER(ALLTRIM(goDlg.cValuta))=='RON'),IIF(goDlg.nDviIdValuta<>goDlg.nIdValuta OR goDlg.nDviCurs<>goDlg.nCurs,1,0),0)) + ENDIF + =ADDPROPERTY(goT,'disc_baza_lei',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,ROUND(goDlg.nDiscBaza*goDlg.nCurs,gnPC),goDlg.nDiscBaza)) + =ADDPROPERTY(goT,'disc_baza_val',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,goDlg.nDiscBaza,0)) + + LOCAL llOkAdauga1 + llOkAdauga1 = goObj.do_adauga_factura(goT) + =Assert3('3-DOC1 do_adauga_factura(goT) reuseste (Termin)', IIF(llOkAdauga1,1,0), 1) + goDlg.Hide() + DOEVENTS FORCE + DO HarnessStep WITH 2, 'DOC1 adaugat: introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri' + DO DumpIntrodc WITH 'DUMP dupa DOC1 (RAJA, nract=15000)' + + *========================= DOC2: taxe vamale (BIROUL VAMAL) - TVA la furnizor, cota 11%, FARA valuta ========================= + PUBLIC goDlg2 + goDlg2 = CREATEOBJECT('import_adauga_factura', goObj) + goDlg2.cFelDoc = 'DVI' + goDlg2.nIdFdoc = 39 + goDlg2.nNract = 101 + goDlg2.dDataAct = DATE() + goDlg2.nIdPartener = 1398 + goDlg2.cPartener = 'BIROUL VAMAL' + goDlg2.cExplicatia = 'Taxe vamale' + goDlg2.nSuma = 500 + goDlg2.nSumaLei = 0 + goDlg2.nCurs = 0 + goDlg2.nIdValuta = 0 + goDlg2.cValuta = '' + goDlg2.chkInValutaCont.Value = 0 + goDlg2.chkParticipaValuta.Value = 1 + goDlg2.nIdExplicatieTva = 210 + goDlg2.cExplicatieTva = 'ACH. INT. 11%' + goDlg2.nProcentTva = 11 + + goDlg2.optTipTva.Value = 1 + goDlg2.optTipTva.InteractiveChange() + + goDlg2.WindowType = 0 + goDlg2.Visible = .T. + goDlg2.Show() + DOEVENTS FORCE + DO HarnessStep WITH 3, 'DOC2 completat: BIROUL VAMAL nract=101, TVA furnizor 11%, fara valuta' + + LOCAL llOkValid2 + llOkValid2 = goDlg2.valideaza() + =Assert3('4-DOC2 dialog valideaza() reuseste', IIF(llOkValid2,1,0), 1) + + *-- toDlg DOC2 construit INLINE in programul PRINCIPAL (aceeasi capcana l) + PUBLIC goT2 + goT2 = CREATEOBJECT('Empty') + =ADDPROPERTY(goT2,'serie_act',ALLTRIM(NVL(goDlg2.cSerieAct,''))) + =ADDPROPERTY(goT2,'nract',goDlg2.nNract) + =ADDPROPERTY(goT2,'dataact',goDlg2.dDataAct) + =ADDPROPERTY(goT2,'fdoc',goDlg2.cFelDoc) + =ADDPROPERTY(goT2,'id_fdoc',goDlg2.nIdFdoc) + =ADDPROPERTY(goT2,'id_partc',goDlg2.nIdPartener) + =ADDPROPERTY(goT2,'partc',goDlg2.cPartener) + =ADDPROPERTY(goT2,'explicatia',ALLTRIM(NVL(goDlg2.cExplicatia,''))) + =ADDPROPERTY(goT2,'suma',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,IIF(goDlg2.nSumaLei<>0,goDlg2.nSumaLei,ROUND(goDlg2.nSuma*goDlg2.nCurs,gnPC)),goDlg2.nSuma)) + =ADDPROPERTY(goT2,'suma_val',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,goDlg2.nSuma,0)) + =ADDPROPERTY(goT2,'in_valuta',goDlg2.chkInValutaCont.Value) + =ADDPROPERTY(goT2,'participa_valuta',(goDlg2.chkParticipaValuta.Value=1)) + =ADDPROPERTY(goT2,'id_valuta',IIF(goDlg2.chkInValutaCont.Value=1,goDlg2.nIdValuta,0)) + =ADDPROPERTY(goT2,'curs',IIF(goDlg2.chkInValutaCont.Value=1,goDlg2.nCurs,0)) + =ADDPROPERTY(goT2,'nume_val',IIF(goDlg2.chkInValutaCont.Value=1,ALLTRIM(NVL(goDlg2.cValuta,'')),'')) + =ADDPROPERTY(goT2,'cTipTva',IIF(goDlg2.optTipTva.Value=1,'F',IIF(goDlg2.optTipTva.Value=2,'D','N'))) + =ADDPROPERTY(goT2,'id_jtva_coloana',goDlg2.nIdExplicatieTva) + =ADDPROPERTY(goT2,'disc_baza_lei',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,ROUND(goDlg2.nDiscBaza*goDlg2.nCurs,gnPC),goDlg2.nDiscBaza)) + =ADDPROPERTY(goT2,'disc_baza_val',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,goDlg2.nDiscBaza,0)) + + LOCAL llOkAdauga2 + llOkAdauga2 = goObj.do_adauga_factura(goT2) + =Assert3('5-DOC2 do_adauga_factura(goT2) reuseste (Termin)', IIF(llOkAdauga2,1,0), 1) + goDlg2.Hide() + DOEVENTS FORCE + DO HarnessStep WITH 4, 'DOC2 adaugat: introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri' + DO DumpIntrodc WITH 'DUMP dupa DOC2 (BIROUL VAMAL, nract=101)' + + *========================= verificare doc_key: T-DVI (DOC1) vs B (DOC2) nu se suprapun ========================= + LOCAL lcDocKeyTDvi, lcDocKeyDoc2B + lcDocKeyTDvi = '' + lcDocKeyDoc2B = '' + SELECT introdc + LOCATE FOR Nvl(rand_dvi,0) = 1 + IF FOUND() + lcDocKeyTDvi = ALLTRIM(NVL(doc_key,'')) + ENDIF + LOCATE FOR nract = 101 AND id_fdoc = 39 AND tip_rand == 'B' + IF FOUND() + lcDocKeyDoc2B = ALLTRIM(NVL(doc_key,'')) + ENDIF + =Assert3('6-ambele doc_key gasite (T-DVI si B-DOC2)', IIF(!EMPTY(lcDocKeyTDvi) AND !EMPTY(lcDocKeyDoc2B),1,0), 1) + pnAsserts = pnAsserts + 1 + IF !EMPTY(lcDocKeyTDvi) AND !EMPTY(lcDocKeyDoc2B) AND lcDocKeyTDvi <> lcDocKeyDoc2B + pnPass = pnPass + 1 + DO EeLog WITH ' PASS 7-doc_key T-DVI(DOC1)=[' + lcDocKeyTDvi + '] <> doc_key B(DOC2)=[' + lcDocKeyDoc2B + '] (fara suprapunere)' + ELSE + DO EeLog WITH ' FAIL 7-doc_key T-DVI(DOC1)=[' + lcDocKeyTDvi + '] SE SUPRAPUNE cu B(DOC2)=[' + lcDocKeyDoc2B + '] -> pista doc_key CONFIRMATA' + ENDIF + + *========================= ARTICOLE (2, ale DOC1): cont 371 analitic 816, cote 11%/21% ========================= + gcMockArtCodmat = 'ART-A8-371' + LOCAL llEroareArt1 + llEroareArt1 = .F. + TRY + goObj.do_adauga_articol() + CATCH TO loExcArt1 + llEroareArt1 = .T. + DO EeLog WITH 'EROARE do_adauga_articol (art1) ' + TRANSFORM(loExcArt1.ErrorNo) + ' [' + loExcArt1.Message + ']' + ENDTRY + =Assert3('8-do_adauga_articol() art1 (cota 11%) fara eroare', IIF(llEroareArt1,0,1), 1) + 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,4), ; + pret_lei WITH ROUND(100*5.23,4), cont WITH '371', cota_tva WITH 11 + ELSE + pnAsserts = pnAsserts + 1 + DO EeLog WITH ' FAIL 8b: articolul cota 11% nu a fost adaugat' + ENDIF + + gcMockArtCodmat = 'ART-BULD-212' + LOCAL llEroareArt2 + llEroareArt2 = .F. + TRY + goObj.do_adauga_articol() + CATCH TO loExcArt2 + llEroareArt2 = .T. + DO EeLog WITH 'EROARE do_adauga_articol (art2) ' + TRANSFORM(loExcArt2.ErrorNo) + ' [' + loExcArt2.Message + ']' + ENDTRY + =Assert3('9-do_adauga_articol() art2 (cota 21%) fara eroare', IIF(llEroareArt2,0,1), 1) + 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,4), ; + pret_lei WITH ROUND(900*5.23,4), cont WITH '371', cota_tva WITH 21 + ELSE + pnAsserts = pnAsserts + 1 + DO EeLog WITH ' FAIL 9b: articolul cota 21% nu a fost adaugat' + ENDIF + goObj.gridart.Refresh() + DOEVENTS FORCE + DO HarnessStep WITH 5, 'articole adaugate (cont 371/816, cote 11% si 21%)' + DO DumpIntrodc WITH 'DUMP dupa ARTICOLE (inainte de sincronizare)' + + *========================= sincronizeaza() REAL ========================= + LOCAL llEroareSync + llEroareSync = .F. + TRY + goObj.sincronizeaza() + CATCH TO loExcSync + llEroareSync = .T. + DO EeLog WITH 'EROARE sincronizeaza() ' + TRANSFORM(loExcSync.ErrorNo) + ' [' + loExcSync.Message + '] in ' + loExcSync.Procedure + ':' + TRANSFORM(loExcSync.LineNo) + ENDTRY + DOEVENTS FORCE + =Assert3('10-sincronizeaza() fara eroare', IIF(llEroareSync,0,1), 1) + DO HarnessStep WITH 6, 'sincronizat' + DO DumpIntrodc WITH 'DUMP dupa sincronizeaza() (flux curat, fara nicio interactiune de grila)' + + *========================= BASELINE inainte de trigger: id_partc corect pe fiecare rand ========================= + LOCAL llBugDeclansator + llBugDeclansator = .F. + + SELECT introdc + LOCATE FOR tip_rand == 'S' AND Nvl(rand_dvi,0) <> 1 + =Assert3('11-BASELINE: rand S (DOC1) are id_partc=463 (RAJA)', IIF(FOUND(), id_partc, -1), 463) + SELECT introdc + LOCATE FOR Nvl(rand_dvi,0) = 1 + =Assert3('11b-BASELINE: randul T-DVI are id_partc=1398 (Biroul Vamal)', IIF(FOUND(), id_partc, -1), 1398) + + DO HarnessStep WITH 7, 'verificat baseline id_partc: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS' + + *========================= imediat inainte de Terminat: ultim DUMP introdc ========================= + DO DumpIntrodc WITH 'DUMP inainte de declansatoarele pe Partener' + + *========================= DECLANSATOR 1: pointer pe randul T-DVI, Grid1.cPartC.Text1.Valid() ========================= + *-- asteptat: early return imediat (randul curent e DVI) - partenerul vamal NU trebuie + *-- sa ajunga pe niciun rand al facturii principale (nu ar avea nici cum, oricum, din moment + *-- ce metoda iese fara sa faca nimic cand randul sursa e DVI). + SELECT introdc + LOCATE FOR Nvl(rand_dvi,0) = 1 + =Assert3('12-pozitionare pe randul T-DVI reusita (declansator 1)', IIF(FOUND(),1,0), 1) + + LOCAL llTrigger1Ok + llTrigger1Ok = .F. + IF FOUND() + goObj.Grid1.cPartC.Text1.Valid() + llTrigger1Ok = .T. + ENDIF + DOEVENTS FORCE + =Assert3('13-declansator 1 (pointer pe T-DVI) executat fara eroare', IIF(llTrigger1Ok,1,0), 1) + + DO DumpIntrodc WITH 'DUMP dupa declansatorul 1 (pointer pe T-DVI, cPartC.Valid)' + + LOCAL lnCntVerifD1 + lnCntVerifD1 = 0 + SELECT introdc + SCAN FOR nr_doc = 1 AND Nvl(rand_dvi,0) <> 1 + lnCntVerifD1 = lnCntVerifD1 + 1 + pnAsserts = pnAsserts + 1 + IF NVL(id_partc,0) <> 1398 + pnPass = pnPass + 1 + DO EeLog WITH ' PASS 14.' + TRANSFORM(lnCntVerifD1) + '-tip_rand=' + tip_rand + ' id_partc<>1398 dupa declansator 1 (=' + TRANSFORM(NVL(id_partc,0)) + ')' + ELSE + llBugDeclansator = .T. + DO EeLog WITH ' FAIL 14.' + TRANSFORM(lnCntVerifD1) + '-tip_rand=' + tip_rand + ' id_partc=1398 (Biroul Vamal a ajuns pe factura) dupa declansator 1 -> BUG' + ENDIF + ENDSCAN + + *========================= DECLANSATOR 2: pointer pe randul B (factura), Grid1.cPartC.Text1.Valid() ========================= + *-- asteptat: partenerul facturii (RAJA, 463) NU trebuie sa ajunga pe randul T-DVI, chiar + *-- daca T-DVI ar avea acelasi cont creditor (scc) si id_partc gol (nu e cazul aici, dar + *-- LOOP-ul explicit pe randurile-tinta cu rand_dvi=1 blocheaza oricum propagarea). + SELECT introdc + LOCATE FOR tip_rand == 'S' AND Nvl(rand_dvi,0) <> 1 + =Assert3('15-pozitionare pe randul S/B (factura) reusita (declansator 2)', IIF(FOUND(),1,0), 1) + + LOCAL llTrigger2Ok + llTrigger2Ok = .F. + IF FOUND() + goObj.Grid1.cPartC.Text1.Valid() + llTrigger2Ok = .T. + ENDIF + DOEVENTS FORCE + =Assert3('16-declansator 2 (pointer pe factura) executat fara eroare', IIF(llTrigger2Ok,1,0), 1) + + DO DumpIntrodc WITH 'DUMP dupa declansatorul 2 (pointer pe factura, cPartC.Valid)' + + SELECT introdc + LOCATE FOR Nvl(rand_dvi,0) = 1 + pnAsserts = pnAsserts + 1 + IF FOUND() AND NVL(id_partc,0) == 1398 + pnPass = pnPass + 1 + DO EeLog WITH ' PASS 17-T-DVI.id_partc ramane 1398 dupa declansator 2 (partenerul facturii NU a ajuns pe DVI)' + ELSE + llBugDeclansator = .T. + DO EeLog WITH ' FAIL 17-T-DVI.id_partc = ' + TRANSFORM(IIF(FOUND(),NVL(id_partc,0),-1)) + ' (asteptat 1398) dupa declansator 2 -> BUG' + ENDIF + + *========================= Terminat (stub verificare.scx) ========================= + DO CreeazaActactan + LOCAL llEroareTermin + llEroareTermin = .F. + TRY + goObj.inainte_de_do_termin() + CATCH TO loExcTermin + llEroareTermin = .T. + DO EeLog WITH 'EROARE inainte_de_do_termin() ' + TRANSFORM(loExcTermin.ErrorNo) + ' [' + loExcTermin.Message + '] in ' + loExcTermin.Procedure + ':' + TRANSFORM(loExcTermin.LineNo) + ENDTRY + =Assert3('12-inainte_de_do_termin() fara eroare (Terminat)', IIF(llEroareTermin,0,1), 1) + + IF USED('actactan') + DO EeLog WITH 'DUMP actactan dupa Terminat:' + SELECT actactan + SCAN + DO EeLog WITH ' recno=' + TRANSFORM(RECNO()) + ' nract=' + TRANSFORM(NVL(nract,0)) + ' id_fdoc=' + TRANSFORM(NVL(id_fdoc,0)) + ; + ' id_partc=' + TRANSFORM(NVL(id_partc,0)) + ' partc=[' + ALLTRIM(NVL(partc,'')) + ']' + ; + ' scd=' + ALLTRIM(NVL(scd,'')) + ' scc=' + ALLTRIM(NVL(scc,'')) + ' suma=' + TRANSFORM(NVL(suma,0)) + ENDSCAN + + LOCAL lnCntVerifRaja, lnCntVerifVamal + lnCntVerifRaja = 0 + lnCntVerifVamal = 0 + SELECT actactan + SCAN FOR ALLTRIM(NVL(partc,'')) == 'RAJA' + lnCntVerifRaja = lnCntVerifRaja + 1 + pnAsserts = pnAsserts + 1 + IF NVL(id_partc,0) == 463 + pnPass = pnPass + 1 + DO EeLog WITH ' PASS 18.' + TRANSFORM(lnCntVerifRaja) + '-actactan randul RAJA: id_partc=463 (=' + TRANSFORM(NVL(id_partc,0)) + ')' + ELSE + llBugDeclansator = .T. + DO EeLog WITH ' FAIL 18.' + TRANSFORM(lnCntVerifRaja) + '-actactan randul RAJA: id_partc=' + TRANSFORM(NVL(id_partc,0)) + ' (asteptat 463) -> BUG' + ENDIF + ENDSCAN + SELECT actactan + SCAN FOR ALLTRIM(NVL(partc,'')) == 'BIROUL VAMAL' + lnCntVerifVamal = lnCntVerifVamal + 1 + pnAsserts = pnAsserts + 1 + IF NVL(id_partc,0) == 1398 + pnPass = pnPass + 1 + DO EeLog WITH ' PASS 19.' + TRANSFORM(lnCntVerifVamal) + '-actactan randul BIROUL VAMAL: id_partc=1398 (=' + TRANSFORM(NVL(id_partc,0)) + ')' + ELSE + llBugDeclansator = .T. + DO EeLog WITH ' FAIL 19.' + TRANSFORM(lnCntVerifVamal) + '-actactan randul BIROUL VAMAL: id_partc=' + TRANSFORM(NVL(id_partc,0)) + ' (asteptat 1398) -> BUG' + ENDIF + ENDSCAN + IF lnCntVerifRaja = 0 + DO EeLog WITH ' INFO: niciun rand RAJA in actactan' + ENDIF + IF lnCntVerifVamal = 0 + DO EeLog WITH ' INFO: niciun rand BIROUL VAMAL in actactan' + ENDIF + ELSE + DO EeLog WITH 'INFO: actactan neinstantiat dupa inainte_de_do_termin() (posibil eroare de validare mai devreme in flux)' + ENDIF + + DO HarnessStep WITH 8, 'final: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS' + + DO EeLog WITH '=========================================================' + IF llBugDeclansator + DO EeLog WITH 'BUG CONFIRMAT pe declansatorul Partener: id_partc s-a propagat intre randurile ' + ; + 'facturii si randul T-DVI dupa ce Grid1.cPartC.Text1.Valid() a rulat cu pointerul pe randul ' + ; + 'sursa (T-DVI sau factura).' + ELSE + DO EeLog WITH 'BUG NECONFIRMAT pe declansatorul Partener: partenerul vamal (Biroul Vamal) NU a ' + ; + 'ajuns pe randurile facturii, iar partenerul facturii (RAJA) NU a ajuns pe randul T-DVI, ' + ; + 'in niciuna din cele doua directii testate (pointer pe DVI, respectiv pointer pe factura).' + ENDIF + DO EeLog WITH '=========================================================' + + DO EeLog WITH 'REZULTAT: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS' + IF pnPass = pnAsserts + DO EeLog WITH 'REZULTAT: PASS (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ')' + ELSE + DO EeLog WITH 'REZULTAT: FAIL (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS)' + ENDIF + + DO HarnessDone WITH 'done' + +CATCH TO loExc + DO EeLog 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 DumpIntrodc + LPARAMETERS tcTitlu + LOCAL lcSelAnt, lnRecAnt + lcSelAnt = SELECT() + lnRecAnt = IIF(USED('introdc'), IIF(EOF('introdc') OR BOF('introdc'), 0, RECNO('introdc')), 0) + DO EeLog WITH tcTitlu + IF !USED('introdc') + DO EeLog WITH ' (introdc neinstantiat)' + RETURN + ENDIF + SELECT introdc + SCAN + DO EeLog WITH ' tip_rand=' + ALLTRIM(NVL(tip_rand,'?')) + ' nr_doc=' + TRANSFORM(NVL(nr_doc,0)) + ; + ' nract=' + TRANSFORM(NVL(nract,0)) + ' id_fdoc=' + TRANSFORM(NVL(id_fdoc,0)) + ; + ' id_partc=' + TRANSFORM(NVL(id_partc,0)) + ' doc_key=[' + ALLTRIM(NVL(doc_key,'')) + ']' + ; + ' rand_dvi=' + TRANSFORM(NVL(rand_dvi,0)) + ' valuta_proprie=' + TRANSFORM(NVL(valuta_proprie,0)) + ; + ' mod_manual=' + TRANSFORM(NVL(mod_manual,0)) + ' scd=' + ALLTRIM(NVL(scd,'')) + ' scc=' + ALLTRIM(NVL(scc,'')) + ; + ' suma=' + TRANSFORM(NVL(suma,0)) + ' suma_val=' + TRANSFORM(NVL(suma_val,0)) + ENDSCAN + IF lnRecAnt > 0 + TRY + GO lnRecAnt + CATCH + GO TOP + ENDTRY + ENDIF + SELECT (lcSelAnt) +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), expl_manual N(1), ; + scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1)) +ENDPROC + +PROCEDURE CreeazaRulTemp + 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 CreeazaActactan + IF USED('actactan') + USE IN ('actactan') + ENDIF + CREATE CURSOR actactan ( ; + id_fdoc N(14), fdoc C(50), dataact D, serie_act C(10), nract N(14), ; + partc C(100), id_partc N(14), partd C(100), id_partd N(14), ; + suma N(18,4), suma_val N(18,4), explicatia C(100), explicatia4 C(50), explicatia5 C(50), ; + scd C(10), ascd C(20), scc C(10), ascc C(20), id_jtva_coloana N(14) NULL, taxcode N(6), ; + id_valuta N(14), curs N(14,4), nume_val C(10), proc_tva N(8,4), nnir N(14), ; + tva_incasare N(1), id_set N(14), id_gestin N(14)) +ENDPROC + +FUNCTION RECCOUNT_ACTIVE + LPARAMETERS tcAlias + LOCAL lnSel, lnCnt + lnSel = SELECT() + SELECT (tcAlias) + COUNT TO lnCnt FOR !DELETED() + SELECT (lnSel) + RETURN lnCnt +ENDFUNC + +PROCEDURE Assert3 + LPARAMETERS tcLabel, tuActual, tuExpected + pnAsserts = pnAsserts + 1 + IF ABS(NVL(tuActual,0) - tuExpected) < 0.02 + pnPass = pnPass + 1 + DO EeLog WITH ' PASS ' + tcLabel + ' (=' + TRANSFORM(tuActual) + ')' + ELSE + DO EeLog WITH ' FAIL ' + tcLabel + ' (actual=' + TRANSFORM(tuActual) + ' asteptat=' + TRANSFORM(tuExpected) + ')' + ENDIF +ENDPROC + +PROCEDURE AssertStr + LPARAMETERS tcLabel, tcActual, tcExpected + pnAsserts = pnAsserts + 1 + IF tcActual == tcExpected + pnPass = pnPass + 1 + DO EeLog WITH ' PASS ' + tcLabel + ' (=[' + tcActual + '])' + ELSE + DO EeLog WITH ' FAIL ' + tcLabel + ' (actual=[' + tcActual + '] asteptat=[' + tcExpected + '])' + ENDIF +ENDPROC + +PROCEDURE EeErr + LPARAMETERS tnErr, tcMsg, tcProg, tnLine + DO EeLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg +ENDPROC + +PROCEDURE EeLog + 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' + CREATE CURSOR (m.tcCursor) (denumire C(100), codmat C(30), cant N(14,3), ; + pret_val N(18,4), pretd N(18,4), pret N(18,4), pret_lei N(18,4), cont C(10), ; + acont C(20), serie C(30), lot C(30), adata_expirare C(10), proc_disc N(6,2), cota_tva N(6,2)) + RETURN 1 + ENDIF + IF 'CONFIG_ANALITICE' $ UPPER(m.tcSql) + CREATE CURSOR (m.tcCursor) (camp_leg_prefix C(30), camp_leg_sufix C(30)) + INSERT INTO (m.tcCursor) VALUES ('', '') + RETURN 1 + ENDIF + IF 'FCONTURI_ANALITICE' $ UPPER(m.tcSql) + CREATE CURSOR (m.tcCursor) (acont C(20)) + INSERT INTO (m.tcCursor) VALUES (IIF(TYPE('gcMockAcontCrt') = 'C', gcMockAcontCrt, '')) + RETURN 1 + ENDIF + IF 'VPLCONT_ANALITIC' $ UPPER(m.tcSql) + CREATE CURSOR (m.tcCursor) (cont C(10), acont C(20)) + RETURN 1 + ENDIF + IF 'VCONFIG_CONT_IREG' $ UPPER(m.tcSql) + CREATE CURSOR (m.tcCursor) (contpart C(10), fel_cont N(1), cu_inregistrari N(1), ; + explic_cont C(100), exceptie C(10), pozitie N(1), invers N(1), gasit N(1)) + INSERT INTO (m.tcCursor) VALUES ('401', 0, 0, 'Furnizori', '', 0, 0, 0) + RETURN 1 + ENDIF + CREATE CURSOR (m.tcCursor) (id_temp N(1)) + 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) + INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ; + VALUES (210, 'ACH. INT. 11%', 1, 0, 'RO11B', 11, 211, 1, 3, 301104) + INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ; + VALUES (211, 'TVA ACH. INT. 11%', 1, 0, 'RO11T', 11, 1, 4, 301104) + INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ; + VALUES (220, 'ACH. IMP. 21%', 1, 0, 'FO21B', 21, 221, 1, 5, 301204) + INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ; + VALUES (221, 'TVA ACH. IMP. 21%', 1, 0, 'FO21T', 21, 1, 6, 301204) + INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ; + VALUES (222, 'ACH. IMP. 11%', 1, 0, 'FO11B', 11, 223, 1, 7, 301204) + INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ; + VALUES (223, 'TVA ACH. IMP. 11%', 1, 0, 'FO11T', 11, 1, 8, 301204) +ENDPROC diff --git a/utile/Teste/achizitie_import/test_repro_trigger_partener.ps1 b/utile/Teste/achizitie_import/test_repro_trigger_partener.ps1 new file mode 100644 index 0000000..91ddf75 --- /dev/null +++ b/utile/Teste/achizitie_import/test_repro_trigger_partener.ps1 @@ -0,0 +1,12 @@ +# test_repro_trigger_partener.ps1 - wrapper peste harness-ul generic pentru testul de +# REPRODUCERE cu declansatorul pe coloana Partener (Grid1.cPartC.Text1.Valid), ambele directii. +# Rulare: powershell -ExecutionPolicy Bypass -File test_repro_trigger_partener.ps1 +$ErrorActionPreference = 'Stop' +$Teste = $PSScriptRoot +& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') ` + -TestPrg (Join-Path $Teste 'test_repro_trigger_partener.prg') ` + -Steps @('nota_goala','doc1_completat','doc1_adaugat','doc2_completat','doc2_adaugat','articole_adaugate','sincronizat','verificat_flux_curat','final') ` + -ShotsDir (Join-Path $Teste 'screenshots_repro_trigger_partener') ` + -SyncDir (Join-Path $Teste 'uisync_repro_trigger_partener') ` + -StepTimeoutSec 180 ` + -ReadyTimeoutSec 180