Files
comun/utile/Teste/editare_factura/test_s8c_buton_antet.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

603 lines
26 KiB
Plaintext

* test_s8c_buton_antet.prg
* Proba S8c (docs\propunere_s8c_antet.md sectiunea 6): butonul comutator de antet, pe traseul REAL
* Newobject('frm_facturi') + .do_editare_unificata() + Thisform.do_comuta_antet() (nu apel direct pe
* ScrieAntetEditare - proba doar codul, nu traseul, cf. lectia platita de S8b).
*
* Documente reale, deja folosite si validate de test_s8b_rutare_scriere.prg pe MARIUSM_AUTO:
* 1055 - sursa CONTRACT, cu delegat - caz 1 (corectare delegat prin buton) + caz 4 (Termina dupa
* salvare, fara alta modificare, trebuie ruta 0)
* 1048 - factura SIMPLA - caz 2 (corectare data scadentei prin buton)
* 1130 - VALUTA - caz 3 (deschis si inchis fara a apasa butonul, zero scriere)
*
* Masurare pe Oracle (nu pe UI - coloanele/proprietatile de grid nu se materializeaza headless):
* dataoras + numarul de randuri din VANZARI_DETALII, si sumele SUM(valoare)/SUM(valoarev) din
* vact_tot/vrul_tot (acelasi filtru sters=0/an/luna/cod ca StergeDocumentFacturare), neschimbate.
SET SAFETY OFF
SET TALK OFF
PUBLIC gcErrLog
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_s8c_buton_antet_log.txt'
STRTOFILE('start ' + TRANSFORM(DATETIME()) + 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_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
IF gnHandle <= 0
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
QUIT
ENDIF
gnIdUtil = 8
PUBLIC gnScadereStoc
gnScadereStoc = 0
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_rutare_scriere.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, gnContorExecutiiS8c
gcMockUltimMesaj = ''
gnMockUltimTip = 0
gnMockRaspuns = 6
gnPass = 0
gnFail = 0
gnContorExecutiiS8c = 0
*!* --- driver: gaseste fereastra modala frm_facturare_articole2 si conduce cazul (acelasi tipar
*!* validat de test_s8b_rutare_scriere.prg - Timer legat de _SCREEN, viu in interiorul Show()-ului
*!* modal, care citeste formularul din colectia Forms) ---
PUBLIC goDriverS8c
goDriverS8c = Createobject('driverS8cAntet')
_SCREEN.AddObject('tmrS8cAntet', 'Timer')
_SCREEN.tmrS8cAntet.Interval = 150
BINDEVENT(_SCREEN.tmrS8cAntet, 'Timer', goDriverS8c, 'Executa')
_SCREEN.tmrS8cAntet.Enabled = .T.
*!* --- crsfacturi, exact ca in test_s8b_rutare_scriere.prg (schema/select deja validate) ---
Private poFacturi
poFacturi = Null
IF Used('crsfacturi')
Use In crsfacturi
ENDIF
LOCAL lcSchema, lcSelect, lcOrder, lcFiltru
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 (1055, 1048, 1130)]
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')
*!* --- alternativa valida de delegat pentru cazul 1: orice id_delegat real, diferit de cel curent
*!* de pe 1055 - FK valid (interogare directa pe VANZARI, nu un id inventat); testul scrie in
*!* Oracle real, deci rularile repetate pot lasa 1055 deja pe valoarea scrisa de o rulare anterioara -
*!* interogarea ia direct din baza un delegat diferit, nu unul fix dintr-un document martor ---
LOCAL lnDelegatAlt, lcDelegatAlt, lnDelegatOriginal1055
lnDelegatAlt = 0
lcDelegatAlt = ''
IF USED('crsfacturi')
SELECT crsfacturi
LOCATE FOR id_vanzare = 1055
lnDelegatOriginal1055 = IIF(FOUND(), NVL(id_delegat, 0), 0)
ENDIF
IF USED('v_s8c_delegat_alt')
USE IN v_s8c_delegat_alt
ENDIF
*!* doar id_delegat - "delegat" (numele) nu e coloana pe VANZARI (doar pe view-uri cu JOIN), si oricum
*!* nu e scris de modifica_date_factura/ScrieAntetEditare, deci nu e nevoie de un nume real aici
IF goExecutor.oExecute([select id_delegat from ] + gcs + [.vanzari where id_delegat is not null and id_delegat <> ] + TRANSFORM(NVL(lnDelegatOriginal1055,0)) + [ and rownum <= 1], 'v_s8c_delegat_alt') >= 0
IF USED('v_s8c_delegat_alt') AND RECCOUNT('v_s8c_delegat_alt') = 1
lnDelegatAlt = v_s8c_delegat_alt.id_delegat
lcDelegatAlt = 'S8C TEST DELEGAT'
ENDIF
ENDIF
goExecutor.oReset()
IF USED('v_s8c_delegat_alt')
USE IN v_s8c_delegat_alt
ENDIF
DO asserteaza WITH 'alternativa de delegat gasita in Oracle, diferita de cea curenta de pe 1055', lnDelegatAlt > 0 AND lnDelegatAlt <> lnDelegatOriginal1055, TRANSFORM(lnDelegatAlt)
*!* =====================================================================================
*!* cele 3 cazuri ale criteriului "Gata cand", plus caz 4 (ruta 0 dupa salvare) legat de cazul 1
*!* =====================================================================================
DO VerificaButonAntetDelegat WITH 1055, lnDelegatAlt, lcDelegatAlt, 'caz 1+4: corectare delegat prin buton, apoi Termina fara alta modificare'
DO VerificaButonAntetDataScad WITH 1048, 'caz 2: corectare data scadentei prin buton'
DO VerificaFaraButon WITH 1130, 'caz 3: deschis si inchis fara a apasa butonul - zero scriere'
_SCREEN.tmrS8cAntet.Enabled = .F.
Try
_SCREEN.RemoveObject('tmrS8cAntet')
Catch
Endtry
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
QUIT
*!* =====================================================================================
*!* martor Oracle comun celor 3 cazuri: dataoras antet, numarul si dataoras liniilor, sumele
*!* ACT/RUL ale documentului (acelasi filtru ca StergeDocumentFacturare)
*!* =====================================================================================
PROCEDURE CapturaMartor
LPARAMETERS tnIdVanzare, tnAn, tnLuna, tnCod, tcAlias
LOCAL loMartor, lnSucces
loMartor = Createobject('Empty')
IF USED(m.tcAlias)
USE IN (m.tcAlias)
ENDIF
lnSucces = goExecutor.oExecute([select dataoras, id_delegat, data_scad from vanzari where id_vanzare = ] + TRANSFORM(m.tnIdVanzare), m.tcAlias)
goExecutor.oReset()
IF m.lnSucces >= 0 AND USED(m.tcAlias) AND RECCOUNT(m.tcAlias) = 1
=AddProperty(loMartor, 'dataoras_antet', NVL(&tcAlias..dataoras, {}))
=AddProperty(loMartor, 'id_delegat', NVL(&tcAlias..id_delegat, 0))
=AddProperty(loMartor, 'data_scad', NVL(&tcAlias..data_scad, {}))
ELSE
=AddProperty(loMartor, 'dataoras_antet', {})
=AddProperty(loMartor, 'id_delegat', -1)
=AddProperty(loMartor, 'data_scad', {})
ENDIF
USE IN (m.tcAlias)
IF USED(m.tcAlias + '_det')
USE IN (m.tcAlias + '_det')
ENDIF
lnSucces = goExecutor.oExecute([select count(*) as nr, max(dataoras) as mx from vanzari_detalii where id_vanzare = ] + TRANSFORM(m.tnIdVanzare) + [ and sters = 0], m.tcAlias + '_det')
goExecutor.oReset()
=AddProperty(loMartor, 'linii_nr', NVL(Evaluate(m.tcAlias + '_det.nr'), -1))
=AddProperty(loMartor, 'linii_mx', NVL(Evaluate(m.tcAlias + '_det.mx'), {}))
USE IN (m.tcAlias + '_det')
IF USED(m.tcAlias + '_act')
USE IN (m.tcAlias + '_act')
ENDIF
*!* vact_tot: coloanele de suma sunt SUMA (lei) / SUMA_VAL (valuta), nu VALOARE/VALOAREV (acelea
*!* sunt specifice vrul_tot) - verificat live (probe_s8c_vact_cols.prg)
lnSucces = goExecutor.oExecute([select nvl(sum(suma),0) as lei, nvl(sum(suma_val),0) as val from ] + gcs + [.vact_tot where sters = 0 and an = ] + TRANSFORM(m.tnAn) + [ and luna = ] + TRANSFORM(m.tnLuna) + [ and cod = ] + TRANSFORM(m.tnCod), m.tcAlias + '_act')
goExecutor.oReset()
=AddProperty(loMartor, 'act_lei', NVL(Evaluate(m.tcAlias + '_act.lei'), -1))
=AddProperty(loMartor, 'act_val', NVL(Evaluate(m.tcAlias + '_act.val'), -1))
USE IN (m.tcAlias + '_act')
IF USED(m.tcAlias + '_rul')
USE IN (m.tcAlias + '_rul')
ENDIF
lnSucces = goExecutor.oExecute([select nvl(sum(valoare),0) as lei, nvl(sum(valoarev),0) as val from ] + gcs + [.vrul_tot where sters = 0 and an = ] + TRANSFORM(m.tnAn) + [ and luna = ] + TRANSFORM(m.tnLuna) + [ and cod = ] + TRANSFORM(m.tnCod), m.tcAlias + '_rul')
goExecutor.oReset()
=AddProperty(loMartor, 'rul_lei', NVL(Evaluate(m.tcAlias + '_rul.lei'), -1))
=AddProperty(loMartor, 'rul_val', NVL(Evaluate(m.tcAlias + '_rul.val'), -1))
USE IN (m.tcAlias + '_rul')
RETURN m.loMartor
ENDPROC
*!* =====================================================================================
PROCEDURE VerificaButonAntetDelegat
LPARAMETERS tnIdVanzare, tnDelegatAlt, tcDelegatAlt, tcEticheta
LOCAL lcPrefix, loFrm, loMartorA, loMartorB, lnAn, lnLuna, lnCod
lcPrefix = TRANSFORM(m.tnIdVanzare) + ' [' + m.tcEticheta + ']'
gcMockUltimMesaj = ''
DO CurataAliasuriReziduale
IF m.tnDelegatAlt <= 0
STRTOFILE(lcPrefix + ': SARIT - nicio alternativa valida de delegat gasita' + CHR(13) + CHR(10), gcErrLog, 1)
RETURN
ENDIF
SELECT crsfacturi
LOCATE FOR id_vanzare = m.tnIdVanzare
DO asserteaza WITH lcPrefix + ': documentul e in crsfacturi', FOUND(), TRANSFORM(FOUND())
IF !FOUND()
RETURN
ENDIF
lnAn = YEAR(data_act)
lnLuna = MONTH(data_act)
lnCod = cod
loMartorA = CapturaMartor(m.tnIdVanzare, m.lnAn, m.lnLuna, m.lnCod, 'v_s8c_a')
Select crsfacturi
loFrm = Newobject('frm_facturi', 'D:\ROA\ROAFACTURARE\COMUN\clase\ofacturare_comun.vcx')
DO asserteaza WITH lcPrefix + ': Newobject(frm_facturi) reuseste', VARTYPE(m.loFrm) == 'O', VARTYPE(m.loFrm)
IF VARTYPE(m.loFrm) <> 'O'
RETURN
ENDIF
SELECT crsfacturi
LOCATE FOR id_vanzare = m.tnIdVanzare
goDriverS8c.Reseteaza()
goDriverS8c.nCaz = 1
goDriverS8c.nDelegatAlt = m.tnDelegatAlt
goDriverS8c.cDelegatAlt = m.tcDelegatAlt
loFrm.do_editare_unificata()
DO asserteaza WITH lcPrefix + ': formularul s-a deschis', goDriverS8c.lGasit, TRANSFORM(goDriverS8c.lGasit)
IF !goDriverS8c.lGasit
STRTOFILE(lcPrefix + ' diagnostic iesire: mesaj=[' + gcMockUltimMesaj + ']' + CHR(13) + CHR(10), gcErrLog, 1)
Try
loFrm.Release()
Catch
Endtry
DO CurataAliasuriReziduale
RETURN
ENDIF
DO asserteaza WITH lcPrefix + ': fara eroare in driver - ' + goDriverS8c.cEroare, EMPTY(goDriverS8c.cEroare), goDriverS8c.cEroare
DO asserteaza WITH lcPrefix + ': click 1 a deblocat antetul (lantet_deblocat=.T. dupa click 1)', goDriverS8c.lDeblocatDupaClick1, TRANSFORM(goDriverS8c.lDeblocatDupaClick1)
DO asserteaza WITH lcPrefix + ': click 2 (salvare) - cel putin un apel catre goExecutor', goDriverS8c.nContorClick2 >= 1, TRANSFORM(goDriverS8c.nContorClick2)
DO asserteaza WITH lcPrefix + ': dupa click 2, antetul s-a reblocat (lantet_deblocat=.F.)', goDriverS8c.lReblocatDupaClick2, TRANSFORM(goDriverS8c.lReblocatDupaClick2)
*!* --- caz 4: Termina fara alta modificare -> ruta 0, snapshot-ul s-a reimprospatat ---
DO asserteaza WITH lcPrefix + ': Termina dupa salvare (fara alta modificare) - zero apeluri suplimentare (ruta 0)', goDriverS8c.nContorTermina == 0, TRANSFORM(goDriverS8c.nContorTermina)
DO asserteaza WITH lcPrefix + ': Termina dupa salvare intoarce .T. (nu blocheaza)', goDriverS8c.lRezultatTermina, TRANSFORM(goDriverS8c.lRezultatTermina)
Try
loFrm.Release()
Catch
Endtry
loMartorB = CapturaMartor(m.tnIdVanzare, m.lnAn, m.lnLuna, m.lnCod, 'v_s8c_b')
DO asserteaza WITH lcPrefix + ': VANZARI.ID_DELEGAT s-a schimbat la valoarea noua', loMartorB.id_delegat == m.tnDelegatAlt, TRANSFORM(loMartorB.id_delegat)
DO asserteaza WITH lcPrefix + ': VANZARI.ID_DELEGAT diferit de valoarea veche', !(loMartorB.id_delegat == loMartorA.id_delegat), TRANSFORM(loMartorA.id_delegat)
DO asserteaza WITH lcPrefix + ': VANZARI_DETALII numar randuri neschimbat (zero scriere pe linii)', loMartorB.linii_nr == loMartorA.linii_nr, TRANSFORM(loMartorB.linii_nr)
DO asserteaza WITH lcPrefix + ': VANZARI_DETALII.MAX(dataoras) neschimbat (zero scriere pe linii)', loMartorB.linii_mx == loMartorA.linii_mx, TRANSFORM(loMartorB.linii_mx)
DO asserteaza WITH lcPrefix + ': suma ACT (lei) neschimbata', ROUND(loMartorB.act_lei, 2) == ROUND(loMartorA.act_lei, 2), TRANSFORM(loMartorB.act_lei)
DO asserteaza WITH lcPrefix + ': suma ACT (valuta) neschimbata', ROUND(loMartorB.act_val, 2) == ROUND(loMartorA.act_val, 2), TRANSFORM(loMartorB.act_val)
DO asserteaza WITH lcPrefix + ': suma RUL (lei) neschimbata', ROUND(loMartorB.rul_lei, 2) == ROUND(loMartorA.rul_lei, 2), TRANSFORM(loMartorB.rul_lei)
DO asserteaza WITH lcPrefix + ': suma RUL (valuta) neschimbata', ROUND(loMartorB.rul_val, 2) == ROUND(loMartorA.rul_val, 2), TRANSFORM(loMartorB.rul_val)
DO CurataAliasuriReziduale
ENDPROC
*!* =====================================================================================
PROCEDURE VerificaButonAntetDataScad
LPARAMETERS tnIdVanzare, tcEticheta
LOCAL lcPrefix, loFrm, loMartorA, loMartorB, lnAn, lnLuna, lnCod, ldDataScadNoua
lcPrefix = TRANSFORM(m.tnIdVanzare) + ' [' + m.tcEticheta + ']'
gcMockUltimMesaj = ''
DO CurataAliasuriReziduale
SELECT crsfacturi
LOCATE FOR id_vanzare = m.tnIdVanzare
DO asserteaza WITH lcPrefix + ': documentul e in crsfacturi', FOUND(), TRANSFORM(FOUND())
IF !FOUND()
RETURN
ENDIF
lnAn = YEAR(data_act)
lnLuna = MONTH(data_act)
lnCod = cod
loMartorA = CapturaMartor(m.tnIdVanzare, m.lnAn, m.lnLuna, m.lnCod, 'v_s8c_c')
ldDataScadNoua = IIF(EMPTY(loMartorA.data_scad), DATE() + 30, loMartorA.data_scad + 5)
Select crsfacturi
loFrm = Newobject('frm_facturi', 'D:\ROA\ROAFACTURARE\COMUN\clase\ofacturare_comun.vcx')
DO asserteaza WITH lcPrefix + ': Newobject(frm_facturi) reuseste', VARTYPE(m.loFrm) == 'O', VARTYPE(m.loFrm)
IF VARTYPE(m.loFrm) <> 'O'
RETURN
ENDIF
SELECT crsfacturi
LOCATE FOR id_vanzare = m.tnIdVanzare
goDriverS8c.Reseteaza()
goDriverS8c.nCaz = 2
goDriverS8c.dDataScadNoua = m.ldDataScadNoua
loFrm.do_editare_unificata()
DO asserteaza WITH lcPrefix + ': formularul s-a deschis', goDriverS8c.lGasit, TRANSFORM(goDriverS8c.lGasit)
IF !goDriverS8c.lGasit
STRTOFILE(lcPrefix + ' diagnostic iesire: mesaj=[' + gcMockUltimMesaj + ']' + CHR(13) + CHR(10), gcErrLog, 1)
Try
loFrm.Release()
Catch
Endtry
DO CurataAliasuriReziduale
RETURN
ENDIF
DO asserteaza WITH lcPrefix + ': fara eroare in driver - ' + goDriverS8c.cEroare, EMPTY(goDriverS8c.cEroare), goDriverS8c.cEroare
DO asserteaza WITH lcPrefix + ': click 2 (salvare) - cel putin un apel catre goExecutor', goDriverS8c.nContorClick2 >= 1, TRANSFORM(goDriverS8c.nContorClick2)
DO asserteaza WITH lcPrefix + ': dupa click 2, antetul s-a reblocat (lantet_deblocat=.F.)', goDriverS8c.lReblocatDupaClick2, TRANSFORM(goDriverS8c.lReblocatDupaClick2)
Try
loFrm.Release()
Catch
Endtry
loMartorB = CapturaMartor(m.tnIdVanzare, m.lnAn, m.lnLuna, m.lnCod, 'v_s8c_d')
DO asserteaza WITH lcPrefix + ': VANZARI.DATA_SCAD s-a schimbat la valoarea noua', loMartorB.data_scad == m.ldDataScadNoua, DTOC(loMartorB.data_scad)
DO asserteaza WITH lcPrefix + ': VANZARI.DATA_SCAD diferita de valoarea veche', !(loMartorB.data_scad == loMartorA.data_scad), DTOC(loMartorA.data_scad)
DO asserteaza WITH lcPrefix + ': VANZARI_DETALII numar randuri neschimbat', loMartorB.linii_nr == loMartorA.linii_nr, TRANSFORM(loMartorB.linii_nr)
DO asserteaza WITH lcPrefix + ': suma ACT (lei) neschimbata', ROUND(loMartorB.act_lei, 2) == ROUND(loMartorA.act_lei, 2), TRANSFORM(loMartorB.act_lei)
DO asserteaza WITH lcPrefix + ': suma RUL (lei) neschimbata', ROUND(loMartorB.rul_lei, 2) == ROUND(loMartorA.rul_lei, 2), TRANSFORM(loMartorB.rul_lei)
DO CurataAliasuriReziduale
ENDPROC
*!* =====================================================================================
PROCEDURE VerificaFaraButon
LPARAMETERS tnIdVanzare, tcEticheta
LOCAL lcPrefix, loFrm, loMartorA, loMartorB, lnAn, lnLuna, lnCod
lcPrefix = TRANSFORM(m.tnIdVanzare) + ' [' + m.tcEticheta + ']'
gcMockUltimMesaj = ''
DO CurataAliasuriReziduale
SELECT crsfacturi
LOCATE FOR id_vanzare = m.tnIdVanzare
DO asserteaza WITH lcPrefix + ': documentul e in crsfacturi', FOUND(), TRANSFORM(FOUND())
IF !FOUND()
RETURN
ENDIF
lnAn = YEAR(data_act)
lnLuna = MONTH(data_act)
lnCod = cod
loMartorA = CapturaMartor(m.tnIdVanzare, m.lnAn, m.lnLuna, m.lnCod, 'v_s8c_e')
Select crsfacturi
loFrm = Newobject('frm_facturi', 'D:\ROA\ROAFACTURARE\COMUN\clase\ofacturare_comun.vcx')
DO asserteaza WITH lcPrefix + ': Newobject(frm_facturi) reuseste', VARTYPE(m.loFrm) == 'O', VARTYPE(m.loFrm)
IF VARTYPE(m.loFrm) <> 'O'
RETURN
ENDIF
SELECT crsfacturi
LOCATE FOR id_vanzare = m.tnIdVanzare
goDriverS8c.Reseteaza()
goDriverS8c.nCaz = 3
loFrm.do_editare_unificata()
DO asserteaza WITH lcPrefix + ': formularul s-a deschis', goDriverS8c.lGasit, TRANSFORM(goDriverS8c.lGasit)
IF goDriverS8c.lGasit
DO asserteaza WITH lcPrefix + ': fara eroare in driver - ' + goDriverS8c.cEroare, EMPTY(goDriverS8c.cEroare), goDriverS8c.cEroare
DO asserteaza WITH lcPrefix + ': butonul porneste blocat (lantet_deblocat=.F.)', goDriverS8c.lBlocatInitial, TRANSFORM(goDriverS8c.lBlocatInitial)
ENDIF
Try
loFrm.Release()
Catch
Endtry
loMartorB = CapturaMartor(m.tnIdVanzare, m.lnAn, m.lnLuna, m.lnCod, 'v_s8c_f')
DO asserteaza WITH lcPrefix + ': VANZARI.DATAORAS neschimbat (zero scriere pe antet)', loMartorB.dataoras_antet == loMartorA.dataoras_antet, IIF(EMPTY(loMartorB.dataoras_antet), '(gol)', TTOC(loMartorB.dataoras_antet))
DO asserteaza WITH lcPrefix + ': VANZARI_DETALII numar randuri neschimbat', loMartorB.linii_nr == loMartorA.linii_nr, TRANSFORM(loMartorB.linii_nr)
DO asserteaza WITH lcPrefix + ': VANZARI_DETALII.MAX(dataoras) neschimbat', loMartorB.linii_mx == loMartorA.linii_mx, TRANSFORM(loMartorB.linii_mx)
DO asserteaza WITH lcPrefix + ': suma ACT (lei) neschimbata', ROUND(loMartorB.act_lei, 2) == ROUND(loMartorA.act_lei, 2), TRANSFORM(loMartorB.act_lei)
DO asserteaza WITH lcPrefix + ': suma RUL (lei) neschimbata', ROUND(loMartorB.rul_lei, 2) == ROUND(loMartorA.rul_lei, 2), TRANSFORM(loMartorB.rul_lei)
DO CurataAliasuriReziduale
ENDPROC
PROCEDURE CurataAliasuriReziduale
LOCAL laAlias(1), lnI, lcA
laAlias(1) = 'CRSGESTIUNI'
DIMENSION laAlias(9)
laAlias(2) = 'JTVA_COLOANE'
laAlias(3) = 'JTVA_COLOANE_TEMP'
laAlias(4) = 'SAFT_TAXTABLE'
laAlias(5) = 'CRSCURSURI'
laAlias(6) = 'CRSARTICOLE_DOC'
laAlias(7) = 'CRSARTICOLE_EDITARE'
laAlias(8) = 'V_ANTET_EDITARE'
laAlias(9) = 'CRSFACTURA'
FOR lnI = 1 TO ALEN(laAlias)
lcA = laAlias(lnI)
IF Used(m.lcA)
Use In (m.lcA)
ENDIF
ENDFOR
ENDPROC
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: ' + Transform(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
*!* --- subclasa de contor pentru oexecutor: acelasi tipar ca test_s8b_rutare_scriere.prg (oReal,
*!* nu DODEFAULT) - numara ORICE apel catre oExecute; oExecuta (mostenita, nesuprascrisa) cheama
*!* intern This.oExecute, deci e numarata automat, fara suprascriere separata ---
DEFINE CLASS oExecutorContorS8c AS oexecutor
oReal = NULL
PROCEDURE oExecute
LPARAMETERS tcSql, tcCursor, tlProgress, tcTitluProgress, tnHandle, tlShowError, tlQuitOnError, tlReconnect
gnContorExecutiiS8c = gnContorExecutiiS8c + 1
RETURN This.oReal.oExecute(tcSql, tcCursor, tlProgress, tcTitluProgress, tnHandle, tlShowError, tlQuitOnError, tlReconnect)
ENDPROC
ENDDEFINE
DEFINE CLASS driverS8cAntet AS Custom
lBusy = .F.
lGasit = .F.
nCaz = 0
nDelegatAlt = 0
cDelegatAlt = ''
dDataScadNoua = {}
cEroare = ''
lDeblocatDupaClick1 = .F.
lReblocatDupaClick2 = .F.
lBlocatInitial = .F.
nContorClick2 = -1
nContorTermina = -1
lRezultatTermina = .F.
PROCEDURE Reseteaza
This.lGasit = .F.
This.cEroare = ''
This.lDeblocatDupaClick1 = .F.
This.lReblocatDupaClick2 = .F.
This.lBlocatInitial = .F.
This.nContorClick2 = -1
This.nContorTermina = -1
This.lRezultatTermina = .F.
ENDPROC
PROCEDURE Executa
IF This.lBusy OR This.lGasit
RETURN
ENDIF
This.lBusy = .T.
TRY
LOCAL lnI, loFrm2, loExecutorOriginal, loExecutorContor
FOR lnI = 1 TO _SCREEN.FormCount
IF Upper(_SCREEN.Forms(m.lnI).Class) == 'FRM_FACTURARE_ARTICOLE2'
loFrm2 = _SCREEN.Forms(m.lnI)
This.lGasit = .T.
This.lBlocatInitial = !loFrm2.lantet_deblocat
DO CASE
CASE This.nCaz = 1
*!* click 1: deblocheaza antetul
loFrm2.do_comuta_antet()
This.lDeblocatDupaClick1 = loFrm2.lantet_deblocat
IF TYPE('poDate') == 'O'
poDate.id_delegat = This.nDelegatAlt
poDate.nume_delegat = This.cDelegatAlt
ELSE
This.cEroare = 'poDate nevizibil din driver (caz 1)'
ENDIF
IF EMPTY(This.cEroare)
gnContorExecutiiS8c = 0
loExecutorOriginal = goExecutor
loExecutorContor = Createobject('oExecutorContorS8c')
loExecutorContor.oReal = loExecutorOriginal
goExecutor = loExecutorContor
TRY
*!* click 2: salveaza antetul (ScrieAntetEditare + reimprospatare snapshot)
loFrm2.do_comuta_antet()
CATCH TO loExcInterior
This.cEroare = 'click2 do_comuta_antet: ' + TRANSFORM(loExcInterior.ErrorNo) + ' ' + loExcInterior.Message
ENDTRY
goExecutor = loExecutorOriginal
This.nContorClick2 = gnContorExecutiiS8c
This.lReblocatDupaClick2 = !loFrm2.lantet_deblocat
*!* caz 4: Termina fara alta modificare -> ruta 0 (zero apeluri suplimentare)
IF EMPTY(This.cEroare)
gnContorExecutiiS8c = 0
loExecutorOriginal = goExecutor
loExecutorContor = Createobject('oExecutorContorS8c')
loExecutorContor.oReal = loExecutorOriginal
goExecutor = loExecutorContor
TRY
This.lRezultatTermina = loFrm2.do_scrie_factura()
CATCH TO loExcTermina
This.cEroare = 'Termina (do_scrie_factura): ' + TRANSFORM(loExcTermina.ErrorNo) + ' ' + loExcTermina.Message
ENDTRY
goExecutor = loExecutorOriginal
This.nContorTermina = gnContorExecutiiS8c
ENDIF
ENDIF
CASE This.nCaz = 2
loFrm2.do_comuta_antet()
IF TYPE('poDate') == 'O'
poDate.datascad = This.dDataScadNoua
ELSE
This.cEroare = 'poDate nevizibil din driver (caz 2)'
ENDIF
IF EMPTY(This.cEroare)
gnContorExecutiiS8c = 0
loExecutorOriginal = goExecutor
loExecutorContor = Createobject('oExecutorContorS8c')
loExecutorContor.oReal = loExecutorOriginal
goExecutor = loExecutorContor
TRY
loFrm2.do_comuta_antet()
CATCH TO loExcInterior2
This.cEroare = 'click2 do_comuta_antet: ' + TRANSFORM(loExcInterior2.ErrorNo) + ' ' + loExcInterior2.Message
ENDTRY
goExecutor = loExecutorOriginal
This.nContorClick2 = gnContorExecutiiS8c
This.lReblocatDupaClick2 = !loFrm2.lantet_deblocat
ENDIF
CASE This.nCaz = 3
*!* nimic - nu se apasa butonul
ENDCASE
Try
loFrm2.Release()
Catch
Endtry
EXIT
ENDIF
ENDFOR
CATCH TO loExcS8c
This.cEroare = 'driver: ' + TRANSFORM(loExcS8c.ErrorNo) + ' ' + loExcS8c.Message
STRTOFILE('DRIVER EROARE ' + TRANSFORM(loExcS8c.ErrorNo) + ' ' + loExcS8c.Message + CHR(13) + CHR(10), gcErrLog, 1)
FINALLY
This.lBusy = .F.
ENDTRY
ENDPROC
ENDDEFINE