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
603 lines
26 KiB
Plaintext
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
|