Files
comun/utile/Teste/editare_factura/test_s7_urmasi.prg
Marius Mutu 8e022d332e #13: formular de facturare unificat - etapa curenta
Squash al branch-ului de lucru plan13-s2.

Clase: ofacturare (nucleul formularului unificat), ofacturare_comun,
ferestre_cere_date, ocomenzi, caut_ora (lista de preturi in combo-urile de
cautare), omodificari.

Programe: ofacturare impartit - ofacturare_antet, ofacturare_rutare_scriere si
ogrid_latimi sunt fisiere noi; oproceduri_facturare primeste discountul pe linie
si cota standard de TVA cand articolul nu are cota pe politica.

Documentatie: capcana SQLExec no_data_found, conventia de encoding, depanarea
testelor VFP si regulile de lucru - conflictele cu modificarile venite din alte
proiecte sunt rezolvate pastrand ambele parti.

Loguri de rulare a testelor scoase din versionare; testele raman.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PkyjGyrV2S7932om4kfSiK
2026-09-09 21:38:25 +03:00

131 lines
7.7 KiB
Plaintext

* test_s7_urmasi.prg
* Verifica DocumentAreUrmasi (ofacturare_editare.prg), functie noua S7: interogare read-only
* pe VANZARI_CORESP, aceeasi conditie citita de pack_facturare.sterge_factura, dar mai devreme.
* Documente reale, gasite prin interogare (nu inventate): un aviz cu factura emisa din el
* (id_vanzare_aviz dintr-un rand TIP=1), un aviz fara nicio corespondenta, si o factura cu
* retur emis pe ea (id_vanzare_aviz dintr-un rand TIP=3). Nu scrie in Oracle - doar SELECT.
* Verifica de asemenea ca Createobject('frm_facturi') compileaza clasa dupa adaugarea metodei
* noi do_editare_unificata (fara Show() - doar proba de compilare/instantiere).
SET SAFETY OFF
SET TALK OFF
PUBLIC gcErrLog
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_s7_urmasi_log.txt'
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
IF gnHandle <= 0
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
QUIT
ENDIF
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
*!* la nume duplicat de procedura castiga PRIMUL fisier din lista SET PROCEDURE, nu ultimul -
*!* mock-ul se pune in fata listei existente, altfel amessagebox() real blocheaza headless
LOCAL lcProcExistent
lcProcExistent = SET("PROCEDURE")
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
PUBLIC gnPass, gnFail, gcMockUltimMesaj, gnMockUltimTip, gnMockRaspuns
gcMockUltimMesaj = ''
gnMockUltimTip = 0
gnMockRaspuns = 6
gnPass = 0
gnFail = 0
*!* --- control direct pe DocumentAreUrmasi, fara formular ---
*!* id_vanzare=664: aviz cu factura emisa din el (vanzari_coresp.tip=1) -> are urmasi
DO asserteaza WITH 'DocumentAreUrmasi(664) = .T. (aviz cu factura emisa)', DocumentAreUrmasi(664), TRANSFORM(DocumentAreUrmasi(664))
*!* id_vanzare=1061: aviz fara nicio corespondenta in vanzari_coresp -> fara urmasi
DO asserteaza WITH 'DocumentAreUrmasi(1061) = .F. (aviz fara corespondenta)', !DocumentAreUrmasi(1061), TRANSFORM(DocumentAreUrmasi(1061))
*!* id_vanzare=622: factura cu retur emis pe ea (vanzari_coresp.tip=3) -> are urmasi
DO asserteaza WITH 'DocumentAreUrmasi(622) = .T. (factura cu retur emis)', DocumentAreUrmasi(622), TRANSFORM(DocumentAreUrmasi(622))
DO asserteaza WITH 'DocumentAreUrmasi(0) = .F. (id inexistent)', !DocumentAreUrmasi(0), TRANSFORM(DocumentAreUrmasi(0))
*!* --- proba de traseu real: crsfacturi construit exact ca in oproceduri_facturare.vizualizare_facturi,
*!* filtrat pe cele 3 documente reale de mai sus (nu pe luna curenta - ele pot fi din alta luna) ---
Private poFacturi
poFacturi = Null
IF Used('crsfacturi')
Use In crsfacturi
ENDIF
lcSchema = ['ales n(1),id_vanzare n(20),id_comanda n(20),dataora t,dataora_exp t,data_act d,data_scad d,sters n(1),dataoras t,numar_act n(14),serie_act c(10),'+] + ;
['tip n(5),id_part n(10),discount n(17,4),disc_fara_tva n(17,4),discount_evidentiat n(1),text_aditional M,facturat n(1),data_facturat t,'+] + ;
['explicatie c(240),altele c(200),client c(100),cod n(20),id_util I,utilizator c(30),utils c(30),utilfact c(30),delegat c(70),'+] + ;
['bidelegat c(30),cnpdelegat c(15),nume_agent c(70),nrinmat c(10),total_fara_tva n(20,4),total_tva n(20,4),total_cu_tva n(20,4),id_gestiune n(10),'+] + ;
['serie_chit c(20),nr_incasare n(10),incasat n(17,4),in_valuta n(1),sucursala c(100),id_ruta n(10),ruta c(100),curs n(20,4),multiplicator n(10),nume_val c(50),'+] + ;
['valuta c(50), id_valuta n(5), valval n(20,4), tvaval n(20,4), totval n(20,4),'+] + ;
['id_delegat n(10),id_agent n(10),id_masina n(10),valoarea N(20,4),nume_gestiune C(50),id_sectie n(5),sectie c(50),id_lucrare n(20), lucrare c(200),'+] + ;
['tip_incasare n(10),afisare_scadenta n(1),id_ordl n(10),tva_incasare n(1),listare_detaliata n(1),'+] + ;
['id_facturare n(10),adresa_facturare c(250),email_facturare c(100),adresa_client c(250),email_client c(100),adresa_beneficiar c(250),email_beneficiar c(100),'+] + ;
['id_beneficiar n(20),beneficiar C(100),tip_factura N(5),ctip_factura C(100), id_ctr N(10), contract C(100),eproforma N(1),tip_saft N(3) null,tip_saftname V(250) null,'+]+;
['id_livrare N(10),adresa_livrare V(250), denumire_adresa_livrare V(100), email_livrare V(100),institutie_publica N(1) null,efactura N(1) null,cod_fiscal C(20),id_fact N(20)']
lcSelect = ['select 0 as ales,id_vanzare,id_comanda,dataora,dataora_exp,data_act,data_scad,sters,dataoras,numar_act,serie_act,'+] + ;
['tip,id_part,discount,disc_fara_tva,discount_evidentiat,text_aditional,facturat,data_facturat,'+] + ;
['explicatie,altele,client,cod,id_util,utilizator,utils,utilfact,delegat,bidelegat,cnpdelegat,'+] + ;
['nume_agent,nrinmat,total_fara_tva,total_tva,total_cu_tva,id_gestiune,serie_chit,nr_incasare,incasat,'+] + ;
['in_valuta,sucursala,id_ruta,ruta,curs,multiplicator,nume_val,'+] + ;
['valuta,id_valuta,valval,tvaval,totval,'+] + ;
['id_delegat,id_agent,id_masina,valoarea,'+] + ;
['nume_gestiune,id_sectie,sectie,id_lucrare,lucrare,tip_incasare,afisare_scadenta,id_ordl,tva_incasare,listare_detaliata,'+] + ;
['id_facturare,adresa_facturare,email_facturare,adresa_client,email_client,adresa_beneficiar,email_beneficiar,'+] + ;
['id_beneficiar, beneficiar, tip_factura, ctip_factura, id_ctr, contract, eproforma,tip_saft,tip_saftname, '+]+;
['id_livrare,adresa_livrare,denumire_adresa_livrare,email_livrare,institutie_publica,efactura,cod_fiscal,id_fact from fact_vfacturi where ']
lcOrder = [data_act,numar_act]
lcFiltru = [id_vanzare in (664, 622, 1061)]
gencursor('poFacturi', 'crsfacturi', lcSelect, lcFiltru, lcSchema, lcOrder, .F., [], .F., [])
poFacturi.ca_baza1.afisare()
DO asserteaza WITH 'crsfacturi incarcat cu cele 3 documente reale (rownum=3)', Used('crsfacturi') AND Reccount('crsfacturi') = 3, IIF(Used('crsfacturi'), TRANSFORM(Reccount('crsfacturi')), 'crsfacturi lipsa')
LOCAL loFrm
loFrm = Newobject('frm_facturi', 'D:\ROA\ROAFACTURARE\COMUN\clase\ofacturare_comun.vcx')
DO asserteaza WITH 'Newobject(frm_facturi) reuseste dupa adaugarea metodei noi, cu crsfacturi real deschis', Vartype(m.loFrm) == 'O', Vartype(m.loFrm)
IF Vartype(m.loFrm) == 'O'
DO asserteaza WITH 'frm_facturi.ClassLibrary e fisierul editat (nu alt produs)', Upper(loFrm.ClassLibrary) == Upper('D:\ROA\ROAFACTURARE\COMUN\clase\ofacturare_comun.vcx'), loFrm.ClassLibrary
DO asserteaza WITH 'metoda noua do_editare_unificata exista pe obiect (PEMSTATUS)', Pemstatus(m.loFrm, 'do_editare_unificata', 5), ''
*!* id_vanzare=664: aviz cu urmasi -> proba ca traseul complet (garzile) ruleaza fara eroare VFP
Select crsfacturi
Locate For id_vanzare = 664
IF Found()
loFrm.do_editare_unificata()
STRTOFILE('do_editare_unificata(664): lactiv3=' + Transform(loFrm.lactiv3) + ' mesaj mock=[' + gcMockUltimMesaj + ']' + CHR(13) + CHR(10), gcErrLog, 1)
DO asserteaza WITH 'do_editare_unificata(664) ruleaza fara eroare VFP necaptata (mock a primit un mesaj sau lactiv3=.F.)', !Empty(gcMockUltimMesaj) OR !loFrm.lactiv3, gcMockUltimMesaj
ENDIF
ENDIF
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
QUIT
PROCEDURE asserteaza
LPARAMETERS tcNume, tlConditie, tcValoare
IF m.tlConditie
gnPass = gnPass + 1
STRTOFILE('PASS ' + m.tcNume + CHR(13) + CHR(10), gcErrLog, 1)
ELSE
gnFail = gnFail + 1
STRTOFILE('FAIL ' + m.tcNume + ' (valoare: ' + m.tcValoare + ')' + CHR(13) + CHR(10), gcErrLog, 1)
ENDIF
ENDPROC
PROCEDURE test_error_handler
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
ENDPROC