* test_s4e_0_adauga_articol.prg * Headless: do_adauga_articol pe frm_facturare_articole2 (COMUN\clase\ofacturare.vc2) NU mai arunca * "1925 Unknown member GRD_ARTICOLE/GRD_CONTRACTE/TXTCODMAT" la prima executie pe formularul unificat * (S4e-0: loGrid = Thisform.grd_factura in loc de grd_contracte/grd_articole la intrare, plus blocul de * SetFocus neconditionat de la coada metodei colapsat pe grd_factura in loc de txtCodmat/txtArticole/ * grd_articole/grd_contracte - toate patru inexistente pe formularul unificat). * * crsarticole e construit direct (nu prin Oracle) - do_urmator/do_adauga_tot citesc doar cursorul, * pozitionat explicit de test inainte de apel, deci nu depind de gridul nematerializat headless * (capcana grid-coloane-nu-se-materializeaza-headless: aici nu se citeste nimic DIN grid, doar se cere * SetFocus pe el la coada). * * CAZ_A (do_urmator, ramura de refuz): gestionabil=1, cantitate=-1, tip=3 -> do_verifica_articol * refuza (stoc insuficient), gnButon ramane <>1 -> se ajunge pe a DOUA aparitie a blocului de SetFocus * colapsat (:18789-18800 dinainte de fix), fara nicio adaugare in crsfactura. Verifica ca simpla * INTRARE in metoda (Local lcCursor, loGrid = grd_factura) si iesirea pe ramura de refuz nu mai * arunca amprenta veche. * CAZ_B (do_adauga_tot, ramura de succes): gestionabil=0, tip=3, tlImplicit=.T. (dat de do_adauga_tot * insusi) -> do_verifica_articol accepta, Do Case intra pe "gestionabil=0" cu tlImplicit=.T. -> NU * deschide niciun formular modal (poArticol=calculeaza_totaluri(poArticol); gnButon=1) -> ajunge pe * PRIMA aparitie a blocului de SetFocus (:18776-18787 dinainte de fix) dupa ce randul a fost deja * scris in crsfactura. Verifica randul ajuns in crsfactura (id_articol/cantitate/denumire) si * scaderea cantitatii in crsarticole (Replace ... For id_c, ramura Inlist(tip,3,4,21,25,28,42,47)). * * Deliberat NU se cheama Thisform.Show(): pe masina de dezvoltare ecranul e partajat, iar afisarea unui * formular (chiar modeless) ar muta focus-ul real Windows la SetFocus() - interzis explicit. Fara Show, * Thisform.grd_factura.SetFocus() (ultima instructiune din metoda, dupa ce randul a fost deja scris) * poate arunca o eroare headless-only (fereastra nu exista) - se accepta si se ignora daca apare, CU * CONDITIA sa nu fie amprenta veche (GRD_ARTICOLE/GRD_CONTRACTE/TXTCODMAT/TXTARTICOLE): ON ERROR * jurnalizeaza si executia continua (SetFocus e ultima linie a metodei, deci nu afecteaza randul deja * scris in crsfactura). * * amessagebox e mocat (mock_validare_antet.prg) ca sa nu apara dialogul real pe ramura de refuz. * * Rulare: vfp9.exe -A -T "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\test_s4e_0_adauga_articol.prg" * Log: D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\test_s4e_0_adauga_articol.log * Mediu: ROA_CENTRAL / MARIUSM_AUTO; gnIdUtil = 8; gnScadereStoc = 1. SET SAFETY OFF SET TALK OFF SET NOTIFY OFF SET TABLEPROMPT OFF PUBLIC gcLog, gnFail, gnPass, gnErr, gcCaz, gcErr PUBLIC gcMockApeluri, gnMockRaspuns, gcMockDuplicat, gnMockNumar gnMockNumar = 0 gcLog = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\test_s4e_0_adauga_articol.log" IF !DIRECTORY("D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out") MD "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out" ENDIF STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog) gnFail = 0 gnPass = 0 gnErr = 0 gcCaz = "" gcErr = "" gcMockApeluri = "" gnMockRaspuns = 6 gcMockDuplicat = "" ON ERROR DO AfErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO() DO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg" WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT' IF TYPE('gnHandle') <> 'N' OR gnHandle <= 0 DO AfLog WITH "FAIL: conexiune Oracle esuata" DO Final ENDIF LOCAL lcProc lcProc = SET("PROCEDURE") SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\mock_validare_antet.prg", ; "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\mock_generator_numere.prg", &lcProc IF !actualizeaza_optiuni_program() DO AfLog WITH "FAIL: actualizeaza_optiuni_program()" DO Final ENDIF gnIdUtil = 8 goExecutor.oExecuta([begin pack_sesiune.set_Id_Util(?gnIdUtil); end;]) gnScadereStoc = 1 DO AfLog WITH "ENV OK, gnAn=" + TRANSFORM(gnAn) + " gnLuna=" + TRANSFORM(gnLuna) SET PATH TO "D:\ROA\ROAFACTURARE\COMUN\utile\gridextras" ADDITIVE SET CLASSLIB TO "D:\ROA\ROAFACTURARE\COMUN\utile\gridextras\gridextras.vcx" ADDITIVE SET CLASSLIB TO "D:\ROA\ROAFACTURARE\COMUN\clase\_cb_base.vcx" ADDITIVE update_jtva_coloane([JV], [jtva_coloane_temp]) PRIVATE poDate, poGeneratorNumere, plVizibil, pnTotalDiscountAvize plVizibil = .F. pnTotalDiscountAvize = 0 poDate = NULL poGeneratorNumere = CREATEOBJECT("oGeneratorMock") DO CazUrmatorRefuz DO CazAdaugaTotSucces DO Final *---------------------------------------------------------------------------------------- * CAZ_A: do_urmator pe articol negestionabil... nu, gestionabil=1 cu cantitate<=0 -> refuz stoc PROCEDURE CazUrmatorRefuz LOCAL loForm gcCaz = "[CAZ_A do_urmator_refuz] " DO AfLog WITH "PAS: " + gcCaz DO Reseteaza WITH 3 SELECT 0 CREATE CURSOR crsarticole (id_c N(20), id_articol N(20), denumire C(100), cantitate N(20,4), ; gestionabil N(1), opt_facturare N(3), Pret N(20,4), pret_val N(20,4), proc_tvav N(20,4), ; preturi_cu_tva N(1), um C(10), id_gestiune N(20), cont C(10), id_valuta N(10), tip_valuta N(1), ; Curs N(20,4), multiplicator N(10), discount_unitar N(20,4), discount_unitar_val N(20,4), ; codmat C(50), codbare C(50), nume_val C(20)) INSERT INTO crsarticole VALUES (1, 201, "ARTICOL REFUZ", -1, 1, 0, 100, 0, 1.19, 0, "BUC", ; 21, "371", 1, 0, 1, 1, 0, 0, "CM201", "", "RON") GO TOP IN crsarticole SELECT crsarticole loForm = CREATEOBJECT('frm_facturare_articole2') DO Assert WITH VARTYPE(loForm) = 'O', "Createobject frm_facturare_articole2" IF VARTYPE(loForm) <> 'O' RETURN ENDIF gcErr = "" gnErr = 0 gcMockApeluri = "" loForm.do_urmator() DO Assert WITH !("GRD_ARTICOLE" $ UPPER(gcErr)), "fara amprenta GRD_ARTICOLE in gcErr" DO Assert WITH !("GRD_CONTRACTE" $ UPPER(gcErr)), "fara amprenta GRD_CONTRACTE in gcErr" DO Assert WITH !("TXTCODMAT" $ UPPER(gcErr)), "fara amprenta TXTCODMAT in gcErr" DO Assert WITH !("TXTARTICOLE" $ UPPER(gcErr)), "fara amprenta TXTARTICOLE in gcErr" DO Assert WITH RECCOUNT('crsfactura') = 0, "refuz de stoc: crsfactura ramane gol" DO Assert WITH "amessagebox(" $ gcMockApeluri, "mesajul de refuz a fost afisat (mocat)" DO Inchide WITH 'crsarticole' loForm.Release() RELEASE loForm ENDPROC *---------------------------------------------------------------------------------------- * CAZ_B: do_adauga_tot pe doua articole negestionabile (tlImplicit=.T. dat de do_adauga_tot insusi, * deci fara formular modal) -> ambele trebuie sa ajunga in crsfactura PROCEDURE CazAdaugaTotSucces LOCAL loForm gcCaz = "[CAZ_B do_adauga_tot_succes] " DO AfLog WITH "PAS: " + gcCaz DO Reseteaza WITH 3 SELECT 0 CREATE CURSOR crsarticole (id_c N(20), id_articol N(20), denumire C(100), cantitate N(20,4), ; gestionabil N(1), opt_facturare N(3), Pret N(20,4), pret_val N(20,4), proc_tvav N(20,4), ; preturi_cu_tva N(1), um C(10), id_gestiune N(20), cont C(10), id_valuta N(10), tip_valuta N(1), ; Curs N(20,4), multiplicator N(10), discount_unitar N(20,4), discount_unitar_val N(20,4), ; codmat C(50), codbare C(50), nume_val C(20)) INSERT INTO crsarticole VALUES (1, 301, "ARTICOL UNU", 5, 0, 0, 100, 0, 1.19, 0, "BUC", ; 21, "371", 1, 0, 1, 1, 0, 0, "CM301", "", "RON") INSERT INTO crsarticole VALUES (2, 302, "ARTICOL DOI", 3, 0, 0, 200, 0, 1.19, 0, "BUC", ; 21, "371", 1, 0, 1, 1, 0, 0, "CM302", "", "RON") GO TOP IN crsarticole loForm = CREATEOBJECT('frm_facturare_articole2') DO Assert WITH VARTYPE(loForm) = 'O', "Createobject frm_facturare_articole2" IF VARTYPE(loForm) <> 'O' RETURN ENDIF gcErr = "" gnErr = 0 gcMockApeluri = "" loForm.do_adauga_tot() DO Assert WITH !("GRD_ARTICOLE" $ UPPER(gcErr)), "fara amprenta GRD_ARTICOLE in gcErr" DO Assert WITH !("GRD_CONTRACTE" $ UPPER(gcErr)), "fara amprenta GRD_CONTRACTE in gcErr" DO Assert WITH !("TXTCODMAT" $ UPPER(gcErr)), "fara amprenta TXTCODMAT in gcErr" DO Assert WITH !("TXTARTICOLE" $ UPPER(gcErr)), "fara amprenta TXTARTICOLE in gcErr" DO Assert WITH RECCOUNT('crsfactura') = 2, "ambele randuri au ajuns in crsfactura (Reccount=" + TRANSFORM(RECCOUNT('crsfactura')) + ")" IF RECCOUNT('crsfactura') >= 1 SELECT crsfactura GO TOP DO Assert WITH id_articol = 301 AND cantitate = 5 AND ALLTRIM(denumire) == "ARTICOL UNU", "randul 1: id_articol/cantitate/denumire corecte" ENDIF IF RECCOUNT('crsfactura') >= 2 SELECT crsfactura GO 2 DO Assert WITH id_articol = 302 AND cantitate = 3 AND ALLTRIM(denumire) == "ARTICOL DOI", "randul 2: id_articol/cantitate/denumire corecte" ENDIF DO Assert WITH USED('crsarticole') AND RECCOUNT('crsarticole') = 2, "crsarticole ramane deschis dupa adaugare" IF USED('crsarticole') SELECT crsarticole LOCATE FOR id_c = 1 DO Assert WITH FOUND() AND cantitate = 0, "crsarticole id_c=1: cantitate scazuta la 0 (5-5)" LOCATE FOR id_c = 2 DO Assert WITH FOUND() AND cantitate = 0, "crsarticole id_c=2: cantitate scazuta la 0 (3-3)" ENDIF DO Inchide WITH 'crsarticole' loForm.Release() RELEASE loForm ENDPROC *---------------------------------------------------------------------------------------- PROCEDURE Reseteaza LPARAMETERS tnTip LOCAL lnIdSet DO Inchide WITH 'crsarticole' DO Inchide WITH 'crsarticole1' DO Inchide WITH 'crsfactura' DO Inchide WITH 'crscursuri' DO Inchide WITH 'crspolitici' DO Inchide WITH 'crscontracte' DO Inchide WITH 'crsgestiunidest' DO Inchide WITH 'crsCtrTemp' DO Inchide WITH 'CrsCotaTva' DO Inchide WITH 'saft_tip_facturi' SELECT 0 * cboTipFactura (frm_facturare_articole2) cere RowSource pe saft_tip_facturi la constructie IF !USED('saft_tip_facturi') CREATE CURSOR saft_tip_facturi (cod N(3) NULL, tip_saftname C(200) NULL) INSERT INTO saft_tip_facturi (cod, tip_saftname) VALUES (NULL, '') INDEX ON cod TAG cod ENDIF DO creeaza_facturacrs WITH 'crsfactura' SELECT *, CAST(NULL AS C(100)) AS gestiune FROM crsfactura INTO CURSOR crsfact_tmp READWRITE USE IN crsfactura SELECT * FROM crsfact_tmp INTO CURSOR crsfactura READWRITE USE IN crsfact_tmp gcMockApeluri = "" gcErr = "" gnErr = 0 gnMockRaspuns = 6 gcMockDuplicat = "" lnIdSet = 26000 + tnTip poDate = NULL poDate = CREATEOBJECT("oDateFactura", lnIdSet, tnTip) poDate.dataireg = DATE(gnAn, gnLuna, 1) poDate.dataact = poDate.dataireg poDate.zi_curs = poDate.dataireg poDate.id_fdoc = 1 poDate.fdoc = "FEL TEST" poDate.nract = 78 poDate.serie_act = "TST" poDate.id_client = 1 poDate.id_furnizor = 1 poDate.nrfactachi = 1 poDate.id_valuta = 1 poDate.in_valuta = 0 poDate.listaid = "1" poGeneratorNumere.ResetNumere() poDate.rezultat_serii = poGeneratorNumere.creeaza_cursor_serii(poDate.nIdTipDoc) gcMockApeluri = "" ENDPROC PROCEDURE Inchide LPARAMETERS tcAlias IF USED(tcAlias) USE IN (tcAlias) ENDIF ENDPROC PROCEDURE Assert LPARAMETERS tlCond, tcMsg IF tlCond gnPass = gnPass + 1 DO AfLog WITH "PASS: " + gcCaz + tcMsg ELSE gnFail = gnFail + 1 DO AfLog WITH "FAIL: " + gcCaz + tcMsg ENDIF ENDPROC PROCEDURE AfLog LPARAMETERS tcMsg STRTOFILE(tcMsg + CHR(13) + CHR(10), gcLog, 1) ENDPROC PROCEDURE AfErr LPARAMETERS tnErr, tcMsg, tcProg, tnLine gcErr = gcErr + TRANSFORM(tnErr) + " " + tcMsg + " (" + TRANSFORM(tcProg) + ":" + TRANSFORM(tnLine) + ")" + CHR(13) + CHR(10) gnErr = gnErr + 1 DO AfLog WITH "ERROR " + TRANSFORM(tnErr) + " [" + tcProg + ":" + TRANSFORM(tnLine) + "] " + tcMsg ENDPROC PROCEDURE Final DO AfLog WITH "TOTAL pass=" + TRANSFORM(gnPass) + " fail=" + TRANSFORM(gnFail) + " err=" + TRANSFORM(gnErr) DO AfLog WITH "END " + TTOC(DATETIME()) QUIT ENDPROC