* test_s4f_cautare_retur.prg * Headless: do_adauga_articol_cautat (frm_facturare_articole2, ofacturare.vc2:18929) pe un document * de retur (poDate.tip = 8) trebuie sa delege la calea veche do_adauga_articol, care alege gestiunea * reala - nu la Gather-ul direct din toArticol (care scria sentinela id_gestiune = -1000, S4f). * * crsarticole e construit direct (nu prin Oracle), cu UN singur rand deja "incarcat" pe document * (ca dupa butonul Incarca articole / do_adauga_tot), gestionabil=0 ca sa ocoleasca do_alege_stoc * (nu se testeaza alegerea de gestiune cu formular modal, doar rutarea - pattern validat deja de * test_s4e_0_adauga_articol.prg CazAdaugaTotSucces). cantitate NEGATIVA (-2): pe tip 8/9, * do_verifica_articol respinge orice cantitate >= 0 (ofacturare.vc2:20913). * * toArticol simuleaza obiectul scatter-uit din crsCodmat/crsDenumire (combo-ul de cautare in linie) * dupa do_initializeaza_articol - doar proprietatile citite de do_initializeaza_articol INAINTE de * ramura noua (um, preturi_cu_tva, discount_unitar(_val), proc_tvav, Pret, pret_val, cantitate, * id_articol); campurile ramurii vechi (Gather in crsfactura) nu mai sunt atinse pe acest traseu. * * Rulare: vfp9.exe -A -T "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\test_s4f_cautare_retur.prg" * Log: D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\test_s4f_cautare_retur.log * Mediu: ROA_CENTRAL / MARIUSM_AUTO; gnIdUtil = 8; gnScadereStoc = 1. * * CazNegasitTip8/CazNegasitTip41 (garda S4f: articol nevandut pe documentul returnat) - articolul * cautat NU e printre randurile din crsarticole. Pe tip 8/9 noua garda din do_adauga_articol_cautat * (ofacturare.vc2:18945-18949) trebuie sa afiseze mesajul (mocat de mock_validare_antet.prg, incarcat * PRIMUL - vezi SET PROCEDURE mai jos) si sa intoarca .F. fara sa scrie in crsfactura. Pe tip 41 * garda nu se aplica (caz imposibil, cf. docs\verificare_s4f_caz_accesibil.md) - comportamentul ramane * neschimbat: cade prin la Gather-ul vechi, scrie cu id_gestiune=-1000 (sentinela, nu regresie). 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_s4f_cautare_retur.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]) update_saft_taxtable() PRIVATE poDate, poGeneratorNumere, plVizibil, pnTotalDiscountAvize plVizibil = .F. pnTotalDiscountAvize = 0 poDate = NULL poGeneratorNumere = CREATEOBJECT("oGeneratorMock") DO CazCautareRetur DO CazNegasitTip8 DO CazNegasitTip41 DO Final *---------------------------------------------------------------------------------------- * CAZ: cautare in linie pe document retur (tip 8) - trebuie sa delege la do_adauga_articol, * care scrie id_gestiune REAL (77, din crsarticole), nu sentinela -1000 din do_initializeaza_articol. PROCEDURE CazCautareRetur LOCAL loForm, loArticol gcCaz = "[CAZ_S4f cautare_retur] " DO AfLog WITH "PAS: " + gcCaz DO Reseteaza WITH 8 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)) * cantitate POZITIVA: do_adauga_articol cheama din nou do_initializeaza_articol pe poArticol * (scatter din acest rand), care inverseaza semnul pentru tip 8/9 (:19898) - abia dupa aceea * do_verifica_articol cere tnCantitate NEGATIV ca sa accepte pe retur (:20916) INSERT INTO crsarticole VALUES (1, 555001, "ARTICOL RETUR TEST", 2, 0, 0, 100, 0, 1.19, 0, "BUC", ; 77, "371", 1, 0, 1, 1, 0, 0, "CM555001", "", "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 * obiectul cautat in combo (cCodMat/cDenumire), dupa Scatter din crsCodmat/crsDenumire loArticol = CREATEOBJECT('Empty') ADDPROPERTY(loArticol, 'id_articol', 555001) ADDPROPERTY(loArticol, 'denumire', "ARTICOL RETUR TEST") ADDPROPERTY(loArticol, 'codmat', "CM555001") ADDPROPERTY(loArticol, 'um', "BUC") ADDPROPERTY(loArticol, 'preturi_cu_tva', 0) ADDPROPERTY(loArticol, 'discount_unitar', 0) ADDPROPERTY(loArticol, 'discount_unitar_val', 0) ADDPROPERTY(loArticol, 'proc_tvav', 1.19) ADDPROPERTY(loArticol, 'Pret', 100) ADDPROPERTY(loArticol, 'pret_val', 0) ADDPROPERTY(loArticol, 'cantitate', 2) gcErr = "" gnErr = 0 gcMockApeluri = "" DO AfLog WITH "DIAG poDate.tip=" + TRANSFORM(poDate.tip) + " crsarticole.id_articol(inainte)=" + TRANSFORM(crsarticole.id_articol) + " cantitate=" + TRANSFORM(crsarticole.cantitate) loForm.do_adauga_articol_cautat(loArticol, loArticol.cantitate) DO AfLog WITH "DIAG dupa apel: gcErr=[" + gcErr + "] gcMockApeluri=[" + STRTRAN(ALLTRIM(gcMockApeluri), CHR(13)+CHR(10), ' | ') + "]" DO AfLog WITH "DIAG crsfactura reccount=" + TRANSFORM(RECCOUNT('crsfactura')) + " crsarticole reccount=" + TRANSFORM(IIF(USED('crsarticole'), RECCOUNT('crsarticole'), -1)) IF USED('crsarticole') DO AfLog WITH "DIAG crsarticole dupa: id_articol=" + TRANSFORM(crsarticole.id_articol) + " cantitate=" + TRANSFORM(crsarticole.cantitate) ENDIF DO Assert WITH !("GRD_ARTICOLE" $ UPPER(gcErr)), "fara amprenta GRD_ARTICOLE in gcErr" DO Assert WITH !("TXTCODMAT" $ UPPER(gcErr)), "fara amprenta TXTCODMAT in gcErr" DO Assert WITH RECCOUNT('crsfactura') = 1, "randul a ajuns in crsfactura pe calea veche (Reccount=" + TRANSFORM(RECCOUNT('crsfactura')) + ")" IF RECCOUNT('crsfactura') >= 1 SELECT crsfactura GO TOP DO Assert WITH id_gestiune <> -1000, "id_gestiune NU ramane sentinela -1000, e=" + TRANSFORM(id_gestiune) DO Assert WITH id_gestiune = 77, "id_gestiune vine din crsarticole (gestiunea reala), e=" + TRANSFORM(id_gestiune) DO Assert WITH id_articol = 555001, "id_articol corect in crsfactura" ENDIF DO Inchide WITH 'crsarticole' loForm.Release() RELEASE loForm, loArticol ENDPROC *---------------------------------------------------------------------------------------- * CAZ (a): tip 8, articolul cautat NU e in crsarticole (nevandut pe documentul returnat) - garda * noua trebuie sa refuze: .F., fara rand nou in crsfactura, mesaj afisat (mocat). PROCEDURE CazNegasitTip8 LOCAL loForm, loArticol, llRet gcCaz = "[CAZ_S4f negasit_tip8] " DO AfLog WITH "PAS: " + gcCaz DO Reseteaza WITH 8 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)) * alt articol, deja incarcat pe document - id_articol diferit de cel cautat mai jos (555001) INSERT INTO crsarticole VALUES (1, 999002, "ALT ARTICOL PE DOCUMENT", 2, 0, 0, 100, 0, 1.19, 0, "BUC", ; 77, "371", 1, 0, 1, 1, 0, 0, "CM999002", "", "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 loArticol = CREATEOBJECT('Empty') ADDPROPERTY(loArticol, 'id_articol', 555001) ADDPROPERTY(loArticol, 'denumire', "ARTICOL NEVANDUT") ADDPROPERTY(loArticol, 'codmat', "CM555001") ADDPROPERTY(loArticol, 'um', "BUC") ADDPROPERTY(loArticol, 'preturi_cu_tva', 0) ADDPROPERTY(loArticol, 'discount_unitar', 0) ADDPROPERTY(loArticol, 'discount_unitar_val', 0) ADDPROPERTY(loArticol, 'proc_tvav', 1.19) ADDPROPERTY(loArticol, 'Pret', 100) ADDPROPERTY(loArticol, 'pret_val', 0) ADDPROPERTY(loArticol, 'cantitate', 2) gcErr = "" gnErr = 0 gcMockApeluri = "" llRet = loForm.do_adauga_articol_cautat(loArticol, loArticol.cantitate) DO AfLog WITH "DIAG llRet=" + TRANSFORM(llRet) + " gcMockApeluri=[" + STRTRAN(ALLTRIM(gcMockApeluri), CHR(13)+CHR(10), ' | ') + "]" DO AfLog WITH "DIAG crsfactura reccount=" + TRANSFORM(RECCOUNT('crsfactura')) DO Assert WITH gnErr = 0, "fara eroare VFP la refuz (tip 8, articol negasit)" DO Assert WITH llRet = .F., "do_adauga_articol_cautat intoarce .F. (tip 8, articol negasit)" DO Assert WITH RECCOUNT('crsfactura') = 0, "crsfactura neschimbat (Reccount=" + TRANSFORM(RECCOUNT('crsfactura')) + ")" DO Assert WITH "amessagebox(" $ gcMockApeluri, "mesajul de refuz a fost afisat (mocat)" DO Assert WITH "NU A FOST VANDUT" $ UPPER(gcMockApeluri), "textul mesajului explica motivul refuzului" DO Inchide WITH 'crsarticole' loForm.Release() RELEASE loForm, loArticol ENDPROC *---------------------------------------------------------------------------------------- * CAZ (c): tip 41, articolul cautat NU e in crsarticole - garda noua NU se aplica (scopata la 8/9). * Comportamentul trebuie sa ramana neschimbat: cade prin la Gather-ul vechi, .T., id_gestiune=-1000. PROCEDURE CazNegasitTip41 LOCAL loForm, loArticol, llRet gcCaz = "[CAZ_S4f negasit_tip41] " DO AfLog WITH "PAS: " + gcCaz DO Reseteaza WITH 41 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, 999002, "ALT ARTICOL PE DOCUMENT", 2, 0, 0, 100, 0, 1.19, 0, "BUC", ; 77, "371", 1, 0, 1, 1, 0, 0, "CM999002", "", "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 loArticol = CREATEOBJECT('Empty') ADDPROPERTY(loArticol, 'id_articol', 555001) ADDPROPERTY(loArticol, 'denumire', "ARTICOL NEVANDUT") ADDPROPERTY(loArticol, 'codmat', "CM555001") ADDPROPERTY(loArticol, 'um', "BUC") ADDPROPERTY(loArticol, 'preturi_cu_tva', 0) ADDPROPERTY(loArticol, 'discount_unitar', 0) ADDPROPERTY(loArticol, 'discount_unitar_val', 0) ADDPROPERTY(loArticol, 'proc_tvav', 1.19) ADDPROPERTY(loArticol, 'Pret', 100) ADDPROPERTY(loArticol, 'pret_val', 0) ADDPROPERTY(loArticol, 'cantitate', 2) * tip 41 nu delega (nu are echivalent al do_adauga_articol) - cade in Gather-ul vechi, care mai * citeste si aceste proprietati din obiectul cautat (neatinse de do_initializeaza_articol) ADDPROPERTY(loArticol, 'Curs', 1) ADDPROPERTY(loArticol, 'multiplicator', 1) ADDPROPERTY(loArticol, 'codbare', "") * calea veche (Gather direct in crsfactura, fara Append Blank propriu) presupune ca grilul * a pozitionat deja un rand gol pe crsfactura - ca la LostFocus pe ultima linie a grid-ului SELECT crsfactura APPEND BLANK gcErr = "" gnErr = 0 gcMockApeluri = "" llRet = loForm.do_adauga_articol_cautat(loArticol, loArticol.cantitate) DO AfLog WITH "DIAG llRet=" + TRANSFORM(llRet) + " gcErr=[" + gcErr + "] gcMockApeluri=[" + STRTRAN(ALLTRIM(gcMockApeluri), CHR(13)+CHR(10), ' | ') + "]" DO AfLog WITH "DIAG crsfactura reccount=" + TRANSFORM(RECCOUNT('crsfactura')) DO Assert WITH gnErr = 0, "fara eroare VFP (tip 41, articol negasit)" DO Assert WITH llRet = .T., "do_adauga_articol_cautat intoarce .T. (tip 41, comportament neschimbat)" DO Assert WITH RECCOUNT('crsfactura') = 1, "randul ajunge in crsfactura pe calea veche (Reccount=" + TRANSFORM(RECCOUNT('crsfactura')) + ")" DO Assert WITH !("amessagebox(" $ gcMockApeluri), "nicio garda pe tip 41 (scopata la 8/9)" IF RECCOUNT('crsfactura') >= 1 SELECT crsfactura GO TOP DO Assert WITH id_gestiune = -1000, "id_gestiune ramane sentinela -1000 pe tip 41 (neschimbat, nu regresie)" ENDIF DO Inchide WITH 'crsarticole' loForm.Release() RELEASE loForm, loArticol 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' DO Inchide WITH 'jtva_coloane' 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" * jtva_coloane real (do_initializeaza_articol face Select jtva_coloane pe fiecare articol) DO Inchide WITH 'jtva_coloane' IF poDate.tva_incasare = 0 SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_ex) AND !'RORTC' $ UPPER(coloana_jv) INTO CURSOR jtva_coloane ELSE SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_neex) AND !'RORTC' $ UPPER(coloana_jv) INTO CURSOR jtva_coloane ENDIF 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