Files
comun/utile/Teste/achizitie_import/test_manual_tva_footer.prg
Marius Mutu 832fea4913 achizitie import: TVA DVI cu valuta proprie, discount financiar, cote multiple
- TVA-ul de pe DVI poate avea valuta si curs proprii, diferite de ale facturii
  (rand "protejat": rand_dvi/valuta_proprie pe introdc, sparge_tva_protejat).
- Discount financiar pe factura: rand tip_rand='G' (401 = 767), TVA calculat pe
  baza diminuata, marfa si preturile articolelor pe valoarea integrala.
- Factura multi-cota: randurile S, G si T se sparg pe cotele articolelor, cu
  explicatia TVA din familia coloanei si alinierea T -> S.
- Teste noi in utile/Teste/achizitie_import (discount, DVI, cote, e2e).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U9uDgDfUQXbh2Neib36CN8
2026-08-01 09:32:35 +03:00

957 lines
39 KiB
Plaintext

* test_manual_tva_footer.prg
* Teste rundele 15-17 (import_nota, COMUN\clase\ointroduceri.vcx): nOldVal unic, do_calculeaza_diferente
* fara repozitionare pe tnRecNo, protectie mod_manual pe randul T, footer _grdfooter1 pe GridArt.
* Configuratia DVI (doc1 EUR + doc2 lei + doc3 taxe vamale) e IDENTICA cu test_scenariu_dvi_complet.prg
* (proprietatile documentelor, mock-urile, jtva_coloane2/saft_taxtable) - vezi acel fisier pentru context.
*
* Pasi (harness): 0 dupa 3 documente, 1 dupa 2 articole+sincronizare, 2 dupa corectia manuala TVA pe
* randul T al DVI, 3 dupa do_executa+sincronizare#2 (F5), 4 final (footer+pointer+garda).
*
* Rulare:
* powershell -ExecutionPolicy Bypass -File test_manual_tva_footer.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_manual_tva_footer_log.txt"
gcSyncDir = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\uisync_tva_footer\"
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog)
ON ERROR DO MtErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
ON SHUTDOWN QUIT
TRY
LOCAL gcAppPath, lcPath
gcAppPath = "D:\ROA\ROAGEST\"
SET DEFAULT TO (gcAppPath)
lcPath = gcAppPath + 'Date;' + gcAppPath + 'Include;' + gcAppPath + 'FERESTRE;' + ;
gcAppPath + 'GRAFICE;' + gcAppPath + 'CLASE;' + gcAppPath + 'MENIURI;' + ;
gcAppPath + 'PROGRAME;' + gcAppPath + 'RAPOARTE;' + gcAppPath + 'COMUN;' + ;
gcAppPath + 'COMUN\CLASE;' + gcAppPath + 'COMUN\FERESTRE;' + gcAppPath + 'COMUN\PROGRAME;' + ;
gcAppPath + 'COMUN\GRAFICE;' + gcAppPath + 'COMUN\RAPOARTE;' + gcAppPath + 'COMUN\MENIURI;' + ;
gcAppPath + 'COMUN\UTILE\GRIDEXTRAS;' + gcAppPath + 'COMUN\UTILE\CTL32;' + ;
gcAppPath + 'COMUN\UTILE\HPDF;' + gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ;
gcAppPath + 'COMUN\UTILE\WEB;' + gcAppPath + 'COMUN\UTILE\EXCEL;' + ;
ADDBS(SUBSTR(gcAppPath,1,RAT([\],gcAppPath,2)))+[COMUNROA\]
SET PATH TO &lcPath ADDITIVE
DO MtLog 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 MtLog WITH 'SET CLASSLIB OK'
*----- PROCEDURI (mock amessagebox + mock cauta_nom_articole PRIMELE, ui_harness la final) -----
SET PROCEDURE TO PROCEDURI
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_cauta_nom_articole.prg" ADDITIVE
SET PROCEDURE TO acces_meniu ADDITIVE
SET PROCEDURE TO cauta_alfa ADDITIVE
SET PROCEDURE TO pmenu ADDITIVE
SET PROCEDURE TO proceduri_comune ADDITIVE
SET PROCEDURE TO quitapp ADDITIVE
SET PROCEDURE TO init_program ADDITIVE
SET PROCEDURE TO oproceduri_listari.prg ADDITIVE
SET PROCEDURE TO oproceduri_configurare.prg ADDITIVE
SET PROCEDURE TO oproceduri_articole.prg ADDITIVE
SET PROCEDURE TO oproceduri_retete.prg ADDITIVE
SET PROCEDURE TO orapoarte.prg ADDITIVE
SET PROCEDURE TO mesaje ADDITIVE
SET PROCEDURE TO oserii_numere.prg ADDITIVE
SET PROCEDURE TO oexport.prg ADDITIVE
SET PROCEDURE TO wwConfig.prg ADDITIVE
SET PROCEDURE TO proceduri_rapoarte.prg ADDITIVE
SET PROCEDURE TO OPROCEDURI_CURS.PRG ADDITIVE
SET PROCEDURE TO validare.prg ADDITIVE
SET PROCEDURE TO GENCURSOR.PRG ADDITIVE
SET PROCEDURE TO OPROCEDURI_COMUNE.PRG ADDITIVE
SET PROCEDURE TO OINIT_OPTIUNI.PRG ADDITIVE
SET PROCEDURE TO updateserver.prg ADDITIVE
SET PROCEDURE TO oinainte_de.prg ADDITIVE
SET PROCEDURE TO ooperatii_comune.prg ADDITIVE
SET PROCEDURE TO Ocompensari.PRG ADDITIVE
SET PROCEDURE TO OPROCEDURI_aMS.PRG ADDITIVE
SET PROCEDURE TO oproceduri_rulaje ADDITIVE
SET PROCEDURE TO oproceduri_stocuri ADDITIVE
SET PROCEDURE TO OINTRODUCERI ADDITIVE
SET PROCEDURE TO oHeader.prg ADDITIVE
SET PROCEDURE TO proceduri_excel.PRG ADDITIVE
SET PROCEDURE TO onomenclatoare.PRG ADDITIVE
SET PROCEDURE TO osecurity ADDITIVE
SET PROCEDURE TO ocautare ADDITIVE
SET PROCEDURE TO orefaceri ADDITIVE
SET PROCEDURE TO ofacturare_comun.PRG ADDITIVE
SET PROCEDURE TO ofacturare_stoc.PRG ADDITIVE
SET PROCEDURE TO oproceduri_casademarcat ADDITIVE
SET PROCEDURE TO oproceduri_casa_marcat_e500 ADDITIVE
SET PROCEDURE TO oproceduri_casa_marcat_mp500 ADDITIVE
SET PROCEDURE TO oproceduri_util.prg ADDITIVE
SET PROCEDURE TO wwxmlhttp.prg ADDITIVE
SET PROCEDURE TO ini.prg ADDITIVE
SET PROCEDURE TO odocumente.prg ADDITIVE
SET PROCEDURE TO regex.prg ADDITIVE
SET PROCEDURE TO wwutils.prg ADDITIVE
SET PROCEDURE TO inchidere_k ADDITIVE
SET PROCEDURE TO iniacces.prg ADDITIVE
SET PROCEDURE TO oupdate.prg ADDITIVE
SET PROCEDURE TO procese.prg ADDITIVE
SET PROCEDURE TO version.prg ADDITIVE
SET PROCEDURE TO xmlaccess.prg ADDITIVE
SET PROCEDURE TO xmlparser.prg ADDITIVE
SET PROCEDURE TO filebringer.prg ADDITIVE
SET PROCEDURE TO wwcodeupdate.prg ADDITIVE
SET PROCEDURE TO wwhttp.prg ADDITIVE
SET PROCEDURE TO xdate.prg ADDITIVE
SET PROCEDURE TO ofacturare.prg ADDITIVE
SET PROCEDURE TO oproceduri_obinv.prg ADDITIVE
SET PROCEDURE TO oproceduri_facturare.prg ADDITIVE
SET PROCEDURE TO email.prg ADDITIVE
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\ui_harness.prg" ADDITIVE
DO MtLog WITH 'SET PROCEDURE OK'
*----- Globale -----
PUBLIC gnPc, gnPval, gnPcant, gnPpret, gnPPretval, gnPCurs, gnPVal, gnPPretV, gnPPretVal
STORE 2 TO gnPc, gnPval, gnPVal
gnPcant = 3
STORE 4 TO gnPpret, gnPPretval, gnPPretVal, gnPPretV, gnPCurs
PUBLIC gl406, gcS, gnAn, gnLuna, gnIdFirma, gnIdSucursala, gcAcces, gcFirma
gl406 = .T.
gcS = 'CONTAFIN'
gnAn = YEAR(DATE())
gnLuna = MONTH(DATE())
gnIdFirma = 110
gnIdSucursala = 110
gcAcces = "1;2;3;4;5;6;7;8;"
gcFirma = gcS
PUBLIC nror(65000)
PUBLIC gnButon
STORE 2 TO gnButon
PUBLIC gcMockArtCodmat, gcMockAcontCrt
gcMockArtCodmat = ''
gcMockAcontCrt = ''
PUBLIC gnMockRaspuns
gnMockRaspuns = 6
PUBLIC goExecutor, goApp
goExecutor = CREATEOBJECT('dummyexecutor')
goApp = CREATEOBJECT('dummyapp')
*----- poAct: antetul notei; dialogul mosteneste din el la Init -----
PUBLIC poAct
poAct = CREATEOBJECT('Custom')
poAct.AddProperty('nume_val', '')
poAct.AddProperty('curs', 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', 500)
poAct.AddProperty('partc', 'FURNIZOR ANTET SRL')
poAct.AddProperty('serie_act', '')
poAct.AddProperty('dataact', DATE())
poAct.AddProperty('tva_incasare', 0)
poAct.AddProperty('id_set', 1)
poAct.AddProperty('id_gestin', 1)
*----- jtva_coloane2 / saft_taxtable: perechi reale 21% (identice test_scenariu_dvi_complet) -----
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 ('301104-Achizitii de bunuri si servicii taxabile cu cota de 21%, altele decat importurile si cele supuse masurilor de simplificare', 301104, '', 21, 1, 0, 1, 0)
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 - vezi docs/testare-ui-vfp.md capcana p.
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
DO MtLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F.) - lIntern=.F. (import)'
PUBLIC goObj
goObj = CREATEOBJECT('IMPORT_nota', .F.)
IF VARTYPE(goObj) <> 'O'
DO MtLog WITH 'FAIL: instantiere import_nota'
DO HarnessDone WITH 'done-error'
QUIT
ENDIF
goObj.lDialogAratat = .T.
goObj.oact = poAct
goObj.WindowType = 0
goObj.Visible = .T.
goObj.Show()
goObj.WindowState = 2
DOEVENTS FORCE
SELECT rul_temp
ZAP
goObj.gridart.Refresh()
DOEVENTS FORCE
*========================= DOC 1+2+3 (configuratia DVI din test_scenariu_dvi_complet) =========================
PUBLIC goDlg, goT
DO AdaugaDoc1
DO VerificaPereche WITH 15000, 5230, 1000, 'EUR'
DO VerificaDvi WITH 15000, 100, 5230, 1098.30, 210.00
DO AdaugaDoc2
DO VerificaPereche WITH 12000, 1000, 0, ''
DO AdaugaDoc3
DO VerificaPereche WITH 100, 500, 0, ''
DO MtLog WITH 'dump introdc dupa cele 3 documente:'
DO DumpIntrodc
DO HarnessStep WITH 0, 'dupa 3 documente: introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri (astept 6, 3 perechi B/T)'
*========================= 2 ARTICOLE (flux real do_adauga_articol) =========================
gcMockArtCodmat = 'ART-BULD-212'
gcMockAcontCrt = '1'
TRY
goObj.do_adauga_articol()
CATCH TO loExcA1
DO MtLog WITH 'EROARE do_adauga_articol (BULDOEXCAVATOR) ' + TRANSFORM(loExcA1.ErrorNo) + ' [' + loExcA1.Message + ']'
ENDTRY
DOEVENTS FORCE
SELECT rul_temp
LOCATE FOR ALLTRIM(codmat) == 'ART-BULD-212'
IF FOUND()
REPLACE cant WITH 1, pret_val WITH 900, pretd WITH 900, pret WITH ROUND(900*5.23,4), pret_lei WITH ROUND(900*5.23,4)
DO MtLog WITH 'BULDOEXCAVATOR (212) adaugat, cant/pret completate'
ELSE
DO MtLog WITH 'FAIL: BULDOEXCAVATOR nu a fost adaugat de do_adauga_articol()'
ENDIF
gcMockArtCodmat = 'ART-A8-371'
gcMockAcontCrt = '4'
TRY
goObj.do_adauga_articol()
CATCH TO loExcA2
DO MtLog WITH 'EROARE do_adauga_articol (A8) ' + TRANSFORM(loExcA2.ErrorNo) + ' [' + loExcA2.Message + ']'
ENDTRY
DOEVENTS FORCE
SELECT rul_temp
LOCATE FOR ALLTRIM(codmat) == 'ART-A8-371'
IF FOUND()
REPLACE cant WITH 1, pret_val WITH 100, pretd WITH 100, pret WITH ROUND(100*5.23,4), pret_lei WITH ROUND(100*5.23,4)
DO MtLog WITH 'A8 (371) adaugat, cant/pret completate'
ELSE
DO MtLog WITH 'FAIL: A8 nu a fost adaugat de do_adauga_articol()'
ENDIF
goObj.gridart.Refresh()
DOEVENTS FORCE
LOCAL llEroareSync1
llEroareSync1 = .F.
TRY
goObj.sincronizeaza()
CATCH TO loExcS1
llEroareSync1 = .T.
DO MtLog WITH 'EROARE la sincronizeaza() #1 ' + TRANSFORM(loExcS1.ErrorNo) + ' [' + loExcS1.Message + ']'
ENDTRY
DOEVENTS FORCE
goObj.grid1.Refresh()
IF !llEroareSync1
DO MtLog WITH 'PASS sincronizare1: fara eroare'
ELSE
DO MtLog WITH 'FAIL sincronizare1: a aruncat eroare'
ENDIF
DO MtLog WITH 'dump introdc dupa 2 articole + sincronizare#1:'
DO DumpIntrodc
DO HarnessStep WITH 1, 'dupa 2 articole + sincronizare#1, introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri'
*========================= PASUL-CHEIE: corectie manuala TVA pe randul T al DVI =========================
*-- gasesc randul T al DVI (vama): doc1 e principal - dupa spargere B-ul lui 15000 dispare, nr_doc
*-- se ia de pe un rand S (VerificaDviPrincipalSpart, test_scenariu_dvi_complet.prg:842-870).
LOCAL lnNrDocDvi, llGasitBS, llGasitT, lnSumaValVeche, lnRecT
lnNrDocDvi = 0
llGasitT = .F.
SELECT introdc
LOCATE FOR nract = 15000 AND tip_rand == 'B'
llGasitBS = FOUND()
IF !llGasitBS
LOCATE FOR nract = 15000 AND tip_rand == 'S'
llGasitBS = FOUND()
ENDIF
IF llGasitBS
lnNrDocDvi = nr_doc
LOCATE FOR nr_doc = lnNrDocDvi AND tip_rand == 'T'
llGasitT = FOUND()
ENDIF
IF !llGasitT
DO MtLog WITH 'FAIL: nu am gasit randul T al DVI (nract=15000/nr_doc=' + TRANSFORM(lnNrDocDvi) + ') - opresc pasul-cheie'
ELSE
lnRecT = RECNO()
lnSumaValVeche = suma_val
DO MtLog WITH 'randul T DVI gasit: recno=' + TRANSFORM(lnRecT) + ' nract=' + TRANSFORM(nract) + ' partc=[' + ALLTRIM(NVL(partc,'')) + '] suma_val_veche=' + TRANSFORM(lnSumaValVeche) + ' suma_veche=' + TRANSFORM(suma) + ' curs=' + TRANSFORM(NVL(curs,0)) + ' in_valuta=' + TRANSFORM(NVL(in_valuta,0))
*-- pozitionez grila pe acest rand (Grid1 e legat de introdc, care e deja ordonat ord_doc -
*-- GO lnRecT muta pointerul fizic, valabil indiferent de ordine).
GO lnRecT IN introdc
goObj.grid1.Refresh()
DOEVENTS FORCE
*-- GotFocus real: memoreaza nOldVal (echivalent intrarii userului in celula)
goObj.grid1.cSumaVal.Text1.GotFocus()
DO MtLog WITH 'dupa GotFocus real: Thisform.nOldVal=' + TRANSFORM(goObj.nOldVal) + ' (astept ' + TRANSFORM(lnSumaValVeche) + ')'
LOCAL llApelRealOk
llApelRealOk = .F.
TRY
goObj.grid1.cSumaVal.Text1.Value = 210
goObj.grid1.cSumaVal.Text1.Valid()
llApelRealOk = .T.
DO MtLog WITH 'PASS apel REAL: Grid1.cSumaVal.Text1.Valid() executat direct (fara replicare manuala)'
CATCH TO loExcValid
DO MtLog WITH 'INFO apel real a esuat (' + TRANSFORM(loExcValid.ErrorNo) + ' ' + loExcValid.Message + ') - fallback: replic corpul metodei Valid() (mock_amessebox->6=Da, ca in aplicatie)'
SELECT introdc
GO lnRecT
REPLACE suma_val WITH 210
LOCAL lnCursFolosit, lnSumaCalc
lnCursFolosit = IIF(in_valuta = 1 AND NVL(curs,0) <> 0, curs, goObj.oact.Curs)
lnSumaCalc = ROUND(210 * lnCursFolosit, gnPc)
IF suma <> 0 AND suma <> lnSumaCalc
= amessagebox('Suma in lei difera de suma in valuta transformata in lei!' + CHR(13) + CHR(10) + 'Doriti recalcularea sumei in lei?', 4+32, 'Diferente sume')
ENDIF
REPLACE suma WITH lnSumaCalc
REPLACE mod_manual WITH 1
ENDTRY
DOEVENTS FORCE
SELECT introdc
GO lnRecT
DO MtLog WITH 'dupa corectie: suma_val=' + TRANSFORM(suma_val) + ' suma=' + TRANSFORM(suma) + ' mod_manual=' + TRANSFORM(NVL(mod_manual,0))
IF NVL(mod_manual,0) = 1
DO MtLog WITH 'PASS mod_manual=1 pe randul T dupa corectie'
ELSE
DO MtLog WITH 'FAIL mod_manual=' + TRANSFORM(NVL(mod_manual,0)) + ' (astept 1) pe randul T dupa corectie'
ENDIF
ENDIF
DO HarnessStep WITH 2, 'dupa corectie manuala TVA pe randul T (apel real=' + TRANSFORM(llApelRealOk) + ')'
*========================= do_executa + sincronizeaza() #2 (echivalent F5) =========================
LOCAL llEroareExec, llEroareSync2
llEroareExec = .F.
TRY
goObj.do_executa()
CATCH TO loExcExec
llEroareExec = .T.
DO MtLog WITH 'EROARE la do_executa() ' + TRANSFORM(loExcExec.ErrorNo) + ' [' + loExcExec.Message + ']'
ENDTRY
llEroareSync2 = .F.
TRY
goObj.sincronizeaza()
CATCH TO loExcS2
llEroareSync2 = .T.
DO MtLog WITH 'EROARE la sincronizeaza() #2 ' + TRANSFORM(loExcS2.ErrorNo) + ' [' + loExcS2.Message + ']'
ENDTRY
DOEVENTS FORCE
goObj.grid1.Refresh()
DO MtLog WITH 'dump introdc dupa do_executa+sincronizare#2 (F5):'
DO DumpIntrodc
*-- ASSERT CENTRAL: suma_val/suma pe randul T al DVI raman cele corectate manual, nu revin la
*-- valoarea derivata din articole (mod_manual=1 protejeaza in do_executa/sparge_document)
IF llGasitT
SELECT introdc
LOCATE FOR nr_doc = lnNrDocDvi AND tip_rand == 'T'
IF FOUND()
LOCAL lnCursAsteptat, lnSumaAsteptata
lnCursAsteptat = IIF(in_valuta = 1 AND NVL(curs,0) <> 0, curs, goObj.oact.Curs)
lnSumaAsteptata = ROUND(210 * lnCursAsteptat, gnPc)
IF ABS(suma_val - 210) < 0.01 AND ABS(suma - lnSumaAsteptata) < 0.01
DO MtLog WITH 'PASS ASSERT CENTRAL: randul T DVI suma_val=' + TRANSFORM(suma_val) + ' (=210) suma=' + TRANSFORM(suma) + ' (=' + TRANSFORM(lnSumaAsteptata) + ') dupa F5 - NU a revenit la valoarea derivata din articole'
ELSE
DO MtLog WITH 'FAIL ASSERT CENTRAL: randul T DVI suma_val=' + TRANSFORM(suma_val) + ' (astept 210) suma=' + TRANSFORM(suma) + ' (astept ' + TRANSFORM(lnSumaAsteptata) + ')'
ENDIF
ELSE
DO MtLog WITH 'FAIL ASSERT CENTRAL: randul T al DVI (nr_doc=' + TRANSFORM(lnNrDocDvi) + ') nu mai exista dupa F5'
ENDIF
*-- fara duplicat de rand T pe acelasi doc_key/cota (sparge_document nu creeaza al doilea T
*-- pentru un T deja marcat mod_manual=1 pe aceeasi cota)
LOCAL lnCountTDvi
SELECT COUNT(*) AS n FROM introdc WHERE nr_doc = lnNrDocDvi AND tip_rand == 'T' INTO CURSOR crsCountTDvi NOFILTER
lnCountTDvi = crsCountTDvi.n
USE IN crsCountTDvi
IF lnCountTDvi = 1
DO MtLog WITH 'PASS fara duplicat randul T DVI: ' + TRANSFORM(lnCountTDvi) + ' rand (astept 1)'
ELSE
DO MtLog WITH 'FAIL duplicat randul T DVI: ' + TRANSFORM(lnCountTDvi) + ' randuri (astept 1)'
ENDIF
ENDIF
DO HarnessStep WITH 3, 'dupa do_executa+sincronizare#2 (F5): eroare_exec=' + TRANSFORM(llEroareExec) + ' eroare_sync2=' + TRANSFORM(llEroareSync2)
*========================= ASSERT FOOTER (_grdfooter1) =========================
IF VARTYPE(goObj._grdfooter1) == 'O'
DO MtLog WITH 'PASS footer: Thisform._grdfooter1 exista (Vartype=O)'
LOCAL lnSumaValFact, lnSumaValCalc, lnSumaLeiCalc
SELECT SUM(ROUND(pret_val*cant,gnPval)) AS svf, SUM(ROUND(pretd*cant,gnPval)) AS svc, ;
SUM(ROUND(pret*cant,gnPc)) AS slc FROM rul_temp WHERE !DELETED() INTO CURSOR crsTotIndep NOFILTER
lnSumaValFact = NVL(crsTotIndep.svf,0)
lnSumaValCalc = NVL(crsTotIndep.svc,0)
lnSumaLeiCalc = NVL(crsTotIndep.slc,0)
USE IN crsTotIndep
DO MtLog WITH 'totaluri independente (calculate in test din rul_temp): cValoareValutaFactura=' + TRANSFORM(lnSumaValFact) + ' cValoareValutaCalculat=' + TRANSFORM(lnSumaValCalc) + ' cValoareLeiCalculat=' + TRANSFORM(lnSumaLeiCalc)
LOCAL i, lcColName, lcCS, lnValFooter, llGasitCol1, llGasitCol2, llGasitCol3
llGasitCol1 = .F.
llGasitCol2 = .F.
llGasitCol3 = .F.
FOR i = 1 TO goObj._grdfooter1.ColumnCount
lcColName = UPPER(ALLTRIM(goObj._grdfooter1.Columns(i).Name))
lcCS = goObj._grdfooter1.Columns(i).ControlSource
DO MtLog WITH ' footer col ' + TRANSFORM(i) + ': name=' + lcColName + ' ControlSource=[' + TRANSFORM(lcCS) + ']'
DO CASE
CASE lcColName == 'CVALOAREVALUTAFACTURA'
llGasitCol1 = .T.
lnValFooter = EVALUATE(lcCS)
IF ABS(lnValFooter - lnSumaValFact) < 0.01
DO MtLog WITH 'PASS footer cValoareValutaFactura=' + TRANSFORM(lnValFooter) + ' == ' + TRANSFORM(lnSumaValFact)
ELSE
DO MtLog WITH 'FAIL footer cValoareValutaFactura=' + TRANSFORM(lnValFooter) + ' != ' + TRANSFORM(lnSumaValFact)
ENDIF
CASE lcColName == 'CVALOAREVALUTACALCULAT'
llGasitCol2 = .T.
lnValFooter = EVALUATE(lcCS)
IF ABS(lnValFooter - lnSumaValCalc) < 0.01
DO MtLog WITH 'PASS footer cValoareValutaCalculat=' + TRANSFORM(lnValFooter) + ' == ' + TRANSFORM(lnSumaValCalc)
ELSE
DO MtLog WITH 'FAIL footer cValoareValutaCalculat=' + TRANSFORM(lnValFooter) + ' != ' + TRANSFORM(lnSumaValCalc)
ENDIF
CASE lcColName == 'CVALOARELEICALCULAT'
llGasitCol3 = .T.
lnValFooter = EVALUATE(lcCS)
IF ABS(lnValFooter - lnSumaLeiCalc) < 0.01
DO MtLog WITH 'PASS footer cValoareLeiCalculat=' + TRANSFORM(lnValFooter) + ' == ' + TRANSFORM(lnSumaLeiCalc)
ELSE
DO MtLog WITH 'FAIL footer cValoareLeiCalculat=' + TRANSFORM(lnValFooter) + ' != ' + TRANSFORM(lnSumaLeiCalc)
ENDIF
ENDCASE
NEXT
IF !llGasitCol1 OR !llGasitCol2 OR !llGasitCol3
DO MtLog WITH 'FAIL footer: nu am gasit toate cele 3 coloane insumate (col1=' + TRANSFORM(llGasitCol1) + ' col2=' + TRANSFORM(llGasitCol2) + ' col3=' + TRANSFORM(llGasitCol3) + ')'
ENDIF
ELSE
DO MtLog WITH 'FAIL footer: Thisform._grdfooter1 nu exista sau nu e obiect (Vartype=' + VARTYPE(goObj._grdfooter1) + ')'
ENDIF
*========================= ASSERT POINTER (fix navigare do_calculeaza_diferente) =========================
SELECT rul_temp
GO 1
LOCAL llEroarePointer
llEroarePointer = .F.
TRY
goObj.do_calculeaza_diferente(2)
CATCH TO loExcPointer
llEroarePointer = .T.
DO MtLog WITH 'EROARE la do_calculeaza_diferente(2) ' + TRANSFORM(loExcPointer.ErrorNo) + ' [' + loExcPointer.Message + ']'
ENDTRY
IF !llEroarePointer AND RECNO('rul_temp') = 1
DO MtLog WITH 'PASS assert pointer: Recno(rul_temp)=' + TRANSFORM(RECNO('rul_temp')) + ' dupa do_calculeaza_diferente(2) (nu s-a mutat pe randul 2)'
ELSE
DO MtLog WITH 'FAIL assert pointer: Recno(rul_temp)=' + TRANSFORM(RECNO('rul_temp')) + ' (astept 1) eroare=' + TRANSFORM(llEroarePointer)
ENDIF
*========================= ASSERT GARDA nOldVal (GridArt.cPretFactura) =========================
goObj.lSyncPending = .F.
SELECT rul_temp
GO TOP
LOCAL lnPretValInainte
lnPretValInainte = pret_val
*-- Text1.Value nu se sincronizeaza singur cu recordul cand Focus-ul e simulat direct (fara
*-- navigare reala in grid) - il setez explicit, ca GotFocus() sa memoreze nOldVal numeric corect
*-- (altfel ramane '' si LostFocus arunca eroare 107 la comparatia This.Value = Thisform.nOldVal).
goObj.gridart.cPretFactura.Text1.Value = lnPretValInainte
goObj.gridart.cPretFactura.Text1.GotFocus()
DO MtLog WITH 'garda: Thisform.nOldVal=' + TRANSFORM(goObj.nOldVal) + ' pret_val=' + TRANSFORM(lnPretValInainte)
*-- Value NEschimbat (GotFocus l-a memorat deja) - echivalent iesirii din celula fara modificare
goObj.gridart.cPretFactura.Text1.LostFocus()
DOEVENTS FORCE
SELECT rul_temp
IF !goObj.lSyncPending AND ABS(pret_val - lnPretValInainte) < 0.0001
DO MtLog WITH 'PASS garda nOldVal: lSyncPending ramane .F., pret_val neschimbat (' + TRANSFORM(pret_val) + ')'
ELSE
DO MtLog WITH 'FAIL garda nOldVal: lSyncPending=' + TRANSFORM(goObj.lSyncPending) + ' (astept .F.) pret_val=' + TRANSFORM(pret_val) + ' (astept ' + TRANSFORM(lnPretValInainte) + ')'
ENDIF
DO MtLog WITH 'GATA - scenariu executat integral'
DO HarnessStep WITH 4, 'final: introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri, rul_temp=' + TRANSFORM(RECCOUNT_ACTIVE('rul_temp')) + ' articole, footer vizibil sub grila articolelor'
DO HarnessDone WITH 'done'
CATCH TO loExc
DO MtLog 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 AdaugaDoc1
*-- FACTURA 15000, RAJA, DVI valuta (EUR curs 5.23): DVI 100, BIROUL VAMAL, tva 1098.30/210.
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
goDlg.cFelDoc = 'Factura'
goDlg.nIdFdoc = 1
goDlg.nNract = 15000
goDlg.dDataAct = DATE()
goDlg.nIdPartener = 601
goDlg.cPartener = 'RAJA'
goDlg.cExplicatia = 'Import marfa RAJA'
goDlg.nSuma = 1000
goDlg.nSumaLei = 0
goDlg.nCurs = 5.23
goDlg.nIdValuta = 978
goDlg.cValuta = 'EUR'
goDlg.nIdExplicatieTva = 220
goDlg.cExplicatieTva = 'ACH. IMP. 21%'
goDlg.optTipTva.Value = 2 && D = DVI
goDlg.chkInValutaCont.Value = 1
goDlg.chkParticipaValuta.Value = 1
goDlg.cSerieDvi = ''
goDlg.nNractDvi = 100
goDlg.dDviData = DATE()
goDlg.nIdFdocDVI = 2
goDlg.cFelDocDvi = 'DVI'
goDlg.nDviIdPartener = 900
goDlg.cDviPartener = 'BIROUL VAMAL'
goDlg.nDviTvaLei = 1098.30
goDlg.nDviTvaVal = 210.00
goDlg.actualizeaza_stare_dvi()
goDlg.WindowType = 0
goDlg.Visible = .T.
goDlg.Show()
DOEVENTS FORCE
DO MtLog WITH 'DOC1: valideaza = ' + TRANSFORM(goDlg.valideaza())
DO ConstruiesteToDlg
DO MtLog WITH 'DOC1: do_adauga_factura = ' + TRANSFORM(goObj.do_adauga_factura(goT))
goDlg.Hide()
DOEVENTS FORCE
ENDPROC
PROCEDURE AdaugaDoc2
*-- FACTURA 12000, TRANS OIL, DVI lei (acelasi doc vamal 100).
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
goDlg.cFelDoc = 'Factura'
goDlg.nIdFdoc = 1
goDlg.nNract = 12000
goDlg.dDataAct = DATE()
goDlg.nIdPartener = 602
goDlg.cPartener = 'TRANS OIL'
goDlg.cExplicatia = 'Achizitie TRANS OIL'
goDlg.nSuma = 1000
goDlg.nSumaLei = 0
goDlg.nCurs = 0
goDlg.nIdExplicatieTva = 220
goDlg.cExplicatieTva = 'ACH. IMP. 21%'
goDlg.optTipTva.Value = 2 && D = DVI
goDlg.chkInValutaCont.Value = 0
goDlg.chkParticipaValuta.Value = 1
goDlg.cSerieDvi = ''
goDlg.nNractDvi = 100
goDlg.dDviData = DATE()
goDlg.nIdFdocDVI = 2
goDlg.cFelDocDvi = 'DVI'
goDlg.nDviIdPartener = 900
goDlg.cDviPartener = 'BIROUL VAMAL'
goDlg.nDviTvaLei = 210.00
goDlg.nDviTvaVal = 0
goDlg.actualizeaza_stare_dvi()
goDlg.WindowType = 0
goDlg.Visible = .T.
goDlg.Show()
DOEVENTS FORCE
DO MtLog WITH 'DOC2: valideaza = ' + TRANSFORM(goDlg.valideaza())
DO ConstruiesteToDlg
DO MtLog WITH 'DOC2: do_adauga_factura = ' + TRANSFORM(goObj.do_adauga_factura(goT))
goDlg.Hide()
DOEVENTS FORCE
ENDPROC
PROCEDURE AdaugaDoc3
*-- DVI 100, BIROUL VAMAL, 500 lei (taxe vamale), TVA normal 'F' cu explicatia ACH. IMP. 21%.
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
goDlg.cFelDoc = 'DVI'
goDlg.nIdFdoc = 2
goDlg.nNract = 100
goDlg.dDataAct = DATE()
goDlg.nIdPartener = 900
goDlg.cPartener = 'BIROUL VAMAL'
goDlg.cExplicatia = 'Taxe vamale DVI 100'
goDlg.nSuma = 500
goDlg.nSumaLei = 0
goDlg.nCurs = 0
goDlg.nIdExplicatieTva = 220
goDlg.cExplicatieTva = 'ACH. IMP. 21%'
goDlg.optTipTva.Value = 1 && F = furnizor (normal, NU referinta DVI)
goDlg.chkInValutaCont.Value = 0
goDlg.chkParticipaValuta.Value = 1
goDlg.WindowType = 0
goDlg.Visible = .T.
goDlg.Show()
DOEVENTS FORCE
DO MtLog WITH 'DOC3: valideaza = ' + TRANSFORM(goDlg.valideaza())
DO ConstruiesteToDlg
DO MtLog WITH 'DOC3: do_adauga_factura = ' + TRANSFORM(goObj.do_adauga_factura(goT))
goDlg.Hide()
DOEVENTS FORCE
ENDPROC
PROCEDURE ConstruiesteToDlg
*-- toDlg construit INLINE (nu intr-o functie apelata din procedura de business) - vezi
*-- docs/testare-ui-vfp.md capcana l; aici functioneaza fiindca goT e PUBLIC.
goT = CREATEOBJECT('Empty')
=ADDPROPERTY(goT,'serie_act',ALLTRIM(NVL(goDlg.cSerieAct,'')))
=ADDPROPERTY(goT,'nract',goDlg.nNract)
=ADDPROPERTY(goT,'dataact',goDlg.dDataAct)
=ADDPROPERTY(goT,'fdoc',goDlg.cFelDoc)
=ADDPROPERTY(goT,'id_fdoc',goDlg.nIdFdoc)
=ADDPROPERTY(goT,'id_partc',goDlg.nIdPartener)
=ADDPROPERTY(goT,'partc',goDlg.cPartener)
=ADDPROPERTY(goT,'explicatia',ALLTRIM(NVL(goDlg.cExplicatia,'')))
=ADDPROPERTY(goT,'suma',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,IIF(goDlg.nSumaLei<>0,goDlg.nSumaLei,ROUND(goDlg.nSuma*goDlg.nCurs,gnPC)),goDlg.nSuma))
=ADDPROPERTY(goT,'suma_val',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,goDlg.nSuma,0))
=ADDPROPERTY(goT,'in_valuta',goDlg.chkInValutaCont.Value)
=ADDPROPERTY(goT,'participa_valuta',(goDlg.chkParticipaValuta.Value=1))
=ADDPROPERTY(goT,'id_valuta',IIF(goDlg.chkInValutaCont.Value=1,goDlg.nIdValuta,0))
=ADDPROPERTY(goT,'curs',IIF(goDlg.chkInValutaCont.Value=1,goDlg.nCurs,0))
=ADDPROPERTY(goT,'nume_val',IIF(goDlg.chkInValutaCont.Value=1,ALLTRIM(NVL(goDlg.cValuta,'')),''))
=ADDPROPERTY(goT,'cTipTva',IIF(goDlg.optTipTva.Value=1,'F',IIF(goDlg.optTipTva.Value=2,'D','N')))
=ADDPROPERTY(goT,'id_jtva_coloana',goDlg.nIdExplicatieTva)
=ADDPROPERTY(goT,'dvi_serie',CHRTRAN(ALLTRIM(NVL(goDlg.cSerieDvi,'')),CHR(34),''))
=ADDPROPERTY(goT,'dvi_nract',goDlg.nNractDvi)
=ADDPROPERTY(goT,'dvi_dataact',goDlg.dDviData)
=ADDPROPERTY(goT,'dvi_id_fdoc',goDlg.nIdFdocDVI)
=ADDPROPERTY(goT,'dvi_fdoc',goDlg.cFelDocDvi)
=ADDPROPERTY(goT,'dvi_id_partc',goDlg.nDviIdPartener)
=ADDPROPERTY(goT,'dvi_partc',goDlg.cDviPartener)
=ADDPROPERTY(goT,'dvi_scc','401')
=ADDPROPERTY(goT,'dvi_tva_lei',goDlg.nDviTvaLei)
=ADDPROPERTY(goT,'dvi_tva_val',goDlg.nDviTvaVal)
ENDPROC
PROCEDURE CreeazaRulTemp
*-- structura reala rul_temp (VRUL, Oracle dev) - identica cu test_scenariu_dvi_complet.prg,
*-- necesara ca GridArt/footer sa gaseasca toate coloanele (pret_val, pretd, pret, cant).
IF USED('rul_temp')
USE IN ('rul_temp')
ENDIF
CREATE CURSOR rul_temp ( ;
id_rul N(20,0), an N(4,0), luna N(2,0), cod N(20,0);
, serie C(100), nnir N(20,0), id_articol N(10,0), denumire C(100);
, codmat C(50), codmatf C(50), codbare C(50), um C(20);
, id_gestiune N(5,0), nume_gestiune C(50), cgest C(20), nr_pag N(2,0);
, gestionar C(50), comisie_receptie1 C(50), comisie_receptie2 C(50), comisie_receptie3 C(50);
, cant N(14,3), cante N(14,3), cont C(10), acont C(20);
, pret N(18,4), tva N(18,4), valoare N(18,4), valtva N(18,4);
, proc_tva N(5,2), pretv N(18,4), pretvtva N(18,4), tvav N(18,4);
, valoarev N(18,4), valtvav N(18,4), proc_tvav N(5,2), adaos N(18,4);
, adaos_tva N(18,4), valoare_adaos N(18,4), valtva_adaos N(18,4), procent N(10,3);
, discunitar N(18,4), discount_tva N(18,4), valoare_discount N(18,4), valtva_discount N(18,4);
, proc_disc N(7,3), pretd N(14,4), curs N(18,4), id_valuta N(10,0);
, nume_val C(20), id_lucrare N(20,0), nrord C(100), id_responsabil N(10,0);
, nresp C(100), resp_marca N(18,4), dataact T, id_util N(5,0);
, util C(30), dataora T, id_sectie N(5,0), sectie C(50);
, csectie C(10), alcooltutun N(1,0), datain T, dataout T;
, id_fact N(20,0), id_gestiunec N(10,0), nume_gestiunec C(50), cgestc C(20);
, id_responsabilc N(5,0), id_reteta N(10,0), reteta C(50), nrespc C(100);
, respc_marca N(18,4), id_set N(20,0), id_tip_rulaj N(10,0), tip_rulaj C(50);
, id_obiect_depozit N(10,0), id_rul_aux N(10,0), nract N(20,0), serie_act C(10);
, dataoras T, id_utils N(10,0), lot C(30), adata_expirare T;
, id_sucursala N(5,0), sucursala C(250), id_part_rez N(10,0), part_rez C(100);
, id_lucrare_rez N(10,0), nrord_rez C(100), subgrupa C(100), grupa C(100);
, id_subgrupa N(5,0), id_grupa N(5,0), in_stoc N(1,0), in_crm N(1,0);
, id_furnizor N(10,0), furnizor C(100), id_jtva_coloana N(4,0), explicatie_tva C(100);
, taxcode N(6,0), taxname C(254), saft_procent N(18,4), codnc8 C(20);
, id_tara_origine N(4,0), cod_tara_origine C(5), tara_origine C(50), greutate N(12,4);
, fdoc C(30), id_fdoc N(18,4);
, pret_lei N(18,4), pret_val N(14,4), cota_tva N(6,2))
ENDPROC
PROCEDURE CreeazaIntrodc
LPARAMETERS tcAlias
IF USED(tcAlias)
USE IN (tcAlias)
ENDIF
CREATE CURSOR (tcAlias) ( ;
id_note N(14), explicatia C(100), scd C(10), ascd C(20), scc C(10), ascc C(20), ;
cu_tva N(1), id_set N(14), ordine N(8), in_valuta N(1), id_jtva_coloana N(14) NULL, ;
ptva N(6,2), explicatie_tva C(50), tipjurnal C(2), taxcode N(6), paymentcode C(9), ;
suma N(18,4), suma_val N(18,4), id_partd N(14), id_partc N(14), partd C(100), partc C(100), ;
id_fact N(14), id_factd N(14), id_factc N(14), pereched N(14), perechec N(14), ;
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
ENDPROC
PROCEDURE VerificaPereche
LPARAMETERS tnNract, tnBazaLei, tnBazaVal, tcVal
LOCAL lnSel, lcMsg, llB, lnBS, lnBSV, lcNV
lnSel = SELECT()
SELECT introdc
LOCATE FOR nract = tnNract AND tip_rand == 'B'
llB = FOUND()
IF llB
lnBS = suma
lnBSV = suma_val
lcNV = ALLTRIM(NVL(nume_val,''))
ENDIF
IF llB AND ABS(lnBS - tnBazaLei) < 0.01 AND ABS(lnBSV - tnBazaVal) < 0.01 AND ALLTRIM(NVL(lcNV,'')) == tcVal
lcMsg = 'PASS pereche nract=' + TRANSFORM(tnNract) + ': B(suma=' + TRANSFORM(lnBS) + ' val=' + TRANSFORM(lnBSV) + ' ' + lcNV + ')'
ELSE
lcMsg = 'FAIL pereche nract=' + TRANSFORM(tnNract) + ': B?=' + TRANSFORM(llB) + ' bazaLei=' + TRANSFORM(IIF(llB,lnBS,-1)) + '(astept ' + TRANSFORM(tnBazaLei) + ') bazaVal=' + TRANSFORM(IIF(llB,lnBSV,-1)) + '(astept ' + TRANSFORM(tnBazaVal) + ') val=[' + IIF(llB,lcNV,'?') + '](astept [' + tcVal + '])'
ENDIF
DO MtLog WITH lcMsg
SELECT (lnSel)
ENDPROC
PROCEDURE VerificaDvi
LPARAMETERS tnNract, tnNractDvi, tnBazaLei, tnTvaLei, tnTvaVal
LOCAL lnSel, lcMsg, llB, llT, lnBS, lnTS, lnTSV, lcTPartc, llVama, lnNrDocCrt
lnSel = SELECT()
SELECT introdc
LOCATE FOR nract = tnNract AND tip_rand == 'B'
llB = FOUND()
IF llB
lnBS = suma
lnNrDocCrt = nr_doc
ENDIF
llT = .F.
IF llB
LOCATE FOR nr_doc = lnNrDocCrt AND tip_rand == 'T'
llT = FOUND()
IF llT
lnTS = suma
lnTSV = suma_val
lcTPartc = ALLTRIM(NVL(partc,''))
llVama = ('VAMAL' $ UPPER(lcTPartc)) AND nract = tnNractDvi
ENDIF
ENDIF
IF llB AND llT AND ABS(lnBS - tnBazaLei) < 0.01 AND ABS(lnTS - tnTvaLei) < 0.01 AND ABS(lnTSV - tnTvaVal) < 0.01 AND llVama
lcMsg = 'PASS DVI nract=' + TRANSFORM(tnNract) + ': B(suma=' + TRANSFORM(lnBS) + ') + T_DVI(nr_doc=' + TRANSFORM(lnNrDocCrt) + ' partc=' + lcTPartc + ' suma=' + TRANSFORM(lnTS) + ' suma_val=' + TRANSFORM(lnTSV) + ')'
ELSE
lcMsg = 'FAIL DVI nract=' + TRANSFORM(tnNract) + ': B(suma=' + TRANSFORM(IIF(llB,lnBS,-1)) + ', astept ' + TRANSFORM(tnBazaLei) + ') T_DVI(suma=' + TRANSFORM(IIF(llT,lnTS,-1)) + ', astept ' + TRANSFORM(tnTvaLei) + ' suma_val=' + TRANSFORM(IIF(llT,lnTSV,-1)) + ', astept ' + TRANSFORM(tnTvaVal) + ' partc=' + IIF(llT,lcTPartc,'?') + ')'
ENDIF
DO MtLog WITH lcMsg
SELECT (lnSel)
ENDPROC
PROCEDURE DumpIntrodc
LOCAL lnSel
lnSel = SELECT()
SELECT introdc
SCAN
DO MtLog WITH ' recno=' + TRANSFORM(RECNO()) + ' nr_doc=' + TRANSFORM(NVL(nr_doc,0)) + ' nract=' + TRANSFORM(nract) + ' fdoc=[' + ALLTRIM(NVL(fdoc,'')) + '] tip_rand=' + tip_rand + ;
' scd=' + ALLTRIM(scd) + ' suma=' + TRANSFORM(suma) + ' suma_val=' + TRANSFORM(suma_val) + ' mod_manual=' + TRANSFORM(NVL(mod_manual,0)) + ;
' partc=[' + ALLTRIM(NVL(partc,'')) + '] doc_key=[' + ALLTRIM(doc_key) + ']'
ENDSCAN
SELECT (lnSel)
ENDPROC
FUNCTION RECCOUNT_ACTIVE
LPARAMETERS tcAlias
LOCAL lnSel, lnCnt
lnSel = SELECT()
SELECT (tcAlias)
COUNT TO lnCnt FOR !DELETED()
SELECT (lnSel)
RETURN lnCnt
ENDFUNC
PROCEDURE MtErr
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
DO MtLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
ENDPROC
PROCEDURE MtLog
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))
INSERT INTO (m.tcCursor) VALUES ('212', '1')
INSERT INTO (m.tcCursor) VALUES ('371', '4')
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