Files
vfp_roaauto/COMUN/programe/oserii_numere.prg

448 lines
14 KiB
Plaintext

**************************************************************************************************************
** Clase:
** oGeneratorNumere
** Proceduri:
** viz_config_serii_complet
** creeaza_cursor_serii
** Functii:
** caut_serii_fact
** caut_tipentitate_permis
**************************************************************************************************************
*********************************** Obiect oNumereDocumente *********************************
Define Class oGeneratorNumere As Custom
cAliasVechi = Null
lInitializare = .F. && modificare 14.07.2010
nTipuriDocument = 30
Declare paPlaje (30,8)
** 1 - numar
** 2 - nume cursor
** 3 - cu_serie
** 4 - cu_plaja
** 5 - id_serie
** 6 - cu buffer .T. daca se genereaza mai multe numere in cadrul aceleiasi operatii
** 7 - tip buffer 1 - in caz de renuntare, se dezaloca toate numerele din buffer ( implicit )
** 2 - in caz de renuntare, se dezaloca toate numerele din buffer, cu exceptia primului, care este repus in array
** 8 - nume cursor buffer
******************************
Procedure Init
*!* modificare 14.07.2010
*!* This.ResetAll()
This.lInitializare = .T.
This.ResetAll()
This.lInitializare = .F.
*!* modificare 14.07.2010 ^
Endproc
******************************
Procedure Reset
Lparameters tnIdTipDoc
With This
.paPlaje(tnIdTipDoc,1) = 0
.paPlaje(tnIdTipDoc,2) = Null
.paPlaje(tnIdTipDoc,3) = .F.
.paPlaje(tnIdTipDoc,4) = .F.
.paPlaje(tnIdTipDoc,5) = Null
.dezactiveazaBuffer(tnIdTipDoc)
Endwith
Endproc
******************************
Procedure ResetAll
With This
For i = 1 To This.nTipuriDocument
.Reset(i)
Endfor
Endwith
Endproc
******************************
Procedure ResetNumar
Lparameters tnIdTipDoc
With This
.paPlaje(tnIdTipDoc,1) = 0
.paPlaje(tnIdTipDoc,5) = Null
Endwith
Endproc
******************************
Procedure ResetNumere
With This
For i = 1 To This.nTipuriDocument
.ResetNumar(i)
Endfor
Endwith
Endproc
******************************
Procedure activeazaBuffer
Lparameters tnIdTipDoc,tnTipBuffer
Local lnTipBuffer
lcSql = [begin pack_serii_numere.seteazaNumereMultiple(1); end;]
If goExecutor.oExecuta(lcSql)
If Empty(tnTipBuffer) Or !Between(tnTipBuffer,1,2)
lnTipBuffer = 1
Else
lnTipBuffer = tnTipBuffer
Endif
lcCursor = [crsbufsertemp]+Alltrim(Str(tnIdTipDoc))
Create Cursor (lcCursor) (numar N(14))
*!* If !Empty(This.paPlaje(tnIdTipDoc,1))
*!* Select (lcCursor)
*!* Append Blank
*!* Replace numar With This.paPlaje(tnIdTipDoc,1)
*!* This.ResetNumar(tnIdTipDoc)
*!* Endif
This.paPlaje(tnIdTipDoc,6) = .T.
This.paPlaje(tnIdTipDoc,7) = lnTipBuffer
This.paPlaje(tnIdTipDoc,8) = lcCursor
Endif
Endproc
******************************
Procedure dezactiveazaBuffer
Lparameters tnIdTipDoc
lcSql = [begin pack_serii_numere.seteazaNumereMultiple(0); end;]
*!* modificare 14.07.2010 : imi apeleaza de 20 de ori procedura la fiecare initializare a obiectului
*!* lnSucces = goExecutor.oExecute(lcSql)
If (This.lInitializare And tnIdTipDoc = 1) Or !This.lInitializare
llSucces = goExecutor.oExecuta(lcSql)
Else
llSucces = .T.
Endif
*!* modificare 14.07.2010 ^
If llSucces
lcCursor = This.paPlaje(tnIdTipDoc,8)
If !Empty(Nvl(lcCursor,[]))
Use In (lcCursor)
Endif
This.paPlaje(tnIdTipDoc,6) = .F.
This.paPlaje(tnIdTipDoc,7) = 1
This.paPlaje(tnIdTipDoc,8) = Null
Endif
Endproc
******************************
Procedure salveazaAliasVechi
This.cAliasVechi = Alias()
Endproc
******************************
Procedure selecteazaAliasVechi
If !Empty(Nvl(This.cAliasVechi,[]))
Select (This.cAliasVechi)
Endif
Endproc
******************************
Function creeaza_cursor_serii
Lparameters tnIdTipDoc
Local lcSql,lcCursor,llSucces
Private pnIdTipDoc,pnRezultat
pnIdTipDoc = tnIdTipDoc
pnRezultat = 0
This.salveazaAliasVechi()
lcCursor = [crsseriitemp]+Alltrim(Str(tnIdTipDoc))
If Used(lcCursor)
Use In (lcCursor)
Endif
lcSql = [{call ] + gcS + [.pack_serii_numere.verifica_cursor_serii(?pnIdTipDoc,?gnIdUtil,?gnIdSucursala,?@pnRezultat)}]
llSucces = goExecutor.oExecuta(lcSql,lcCursor)
With This
*!* modificare 04.09.2012
If !llSucces OR pnRezultat = -1
*!* If !llSucces
*!* modificare 04.09.2012 ^
*!* modificare ROAGEST v 2.0.138
lcSql = [{call ] + gcs + [.pack_serii_numere.verifica_tipdoc(?pnIdTipDoc,?@pnRezultat)}]
IF !goExecutor.oExecuta(lcSql,lcCursor)
*!* modificare ROAGEST v 2.0.138 ^
pnRezultat = 1
.paPlaje(tnIdTipDoc,2) = Null
.paPlaje(tnIdTipDoc,3) = .F.
.paPlaje(tnIdTipDoc,4) = .F.
*!* modificare ROAGEST v 2.0.138
Else
.paPlaje(tnIdTipDoc,2) = Null
.paPlaje(tnIdTipDoc,3) = Iif(Mod(pnRezultat,2)=1,.T.,.F.)
.paPlaje(tnIdTipDoc,4) = .F.
Endif
*!* modificare ROAGEST v 2.0.138 ^
Else
If Reccount(lcCursor) > 0
.paPlaje(tnIdTipDoc,2) = lcCursor
.paPlaje(tnIdTipDoc,3) = Iif(Mod(pnRezultat,2)=1,.T.,.F.)
.paPlaje(tnIdTipDoc,4) = Iif(pnRezultat>=2,.T.,.F.)
Else
pnRezultat = 1
.paPlaje(tnIdTipDoc,2) = Null
.paPlaje(tnIdTipDoc,3) = .F.
.paPlaje(tnIdTipDoc,4) = .F.
Endif
Endif
Endwith
This.selecteazaAliasVechi()
Release pnIdTipDoc
Return pnRezultat
Endfunc && creeaza_cursor_serii
******************************
Function aloca_numar
Lparameters tnIdTipDoc,tnIdGestiune
Private pnIdTipDoc,pnIdGestiune,pnNumar,pnIdSerie
Do Case
Case Isnull(This.paPlaje(tnIdTipDoc,2))
pnNumar = 0
*!* modificare ROAGEST v 2.0.105
*!* Case This.paPlaje(tnIdTipDoc,1) <> 0
*!* modificare ROAGEST v 2.0.105 ^
Case This.paPlaje(tnIdTipDoc,1) <> 0 And !This.paPlaje(tnIdTipDoc,6)
pnNumar = This.paPlaje(tnIdTipDoc,1)
Otherwise
pnNumar = -1
pnIdTipDoc = tnIdTipDoc
pnIdGestiune = Iif(Isnull(tnIdGestiune) Or Pcount()=1,Null,tnIdGestiune)
This.salveazaAliasVechi()
lcCursor = This.paPlaje(tnIdTipDoc,2)
If Used(lcCursor)
Select (lcCursor)
pnIdSerie = id_serie
Else
pnIdSerie = Null
Endif
lcSql=[begin ] + gcS + [.pack_serii_numere.aloca_numar(?pnIdTipDoc,?pnIdSerie,?pnIdGestiune,?gnIdUtil,?gnIdSucursala,?@pnNumar); end;]
IF !goExecutor.oExecuta(lcSql)
pnNumar = 0
Endif
Release pnIdTipDoc,pnIdGestiune,pnIdEntitate
With This
*!* modificare ROAGEST v 2.0.105 : daca e activat buffer-ul, atunci pun fiecare numar generat in cursor,nu in array ( in afara de primul, care ramane in array )
If This.paPlaje(tnIdTipDoc,6)
lcCursor = This.paPlaje(tnIdTipDoc,8)
Select (lcCursor)
Append Blank
Replace numar With pnNumar
Else
*!* modificare ROAGEST v 2.0.105^
.paPlaje(tnIdTipDoc,1) = pnNumar
*!* modificare ROAGEST v 2.0.105
Endif
*!* modificare ROAGEST v 2.0.105 ^
.paPlaje(tnIdTipDoc,5) = pnIdSerie
Endwith
This.selecteazaAliasVechi()
Endcase
Return pnNumar
Endfunc && aloca_numar
******************************
Procedure verifica_numar
Lparameters tnIdTipDoc,tnNumar
With This
If tnNumar <> .paPlaje(tnIdTipDoc,1) And .paPlaje(tnIdTipDoc,1) <> 0
.dezaloca_numar(tnIdTipDoc)
Endif
Endwith
Endproc
******************************
Function verifica_serie
Lparameters tnIdTipDoc
Local lcCursor,llReturn
llReturn = .F.
With This
If !Isnull(This.paPlaje(tnIdTipDoc,2))
.salveazaAliasVechi()
lcCursor = Alltrim(.paPlaje(tnIdTipDoc,2))
If Used(lcCursor)
Select (lcCursor)
If Nvl(.paPlaje(tnIdTipDoc,5),-99)<>Nvl(id_serie,-99)
.dezaloca_numar(tnIdTipDoc)
llReturn = .T.
Endif
Endif
.selecteazaAliasVechi()
Else
llReturn = .T.
Endif
Endwith
Return llReturn
Endfunc
******************************
Procedure dezaloca_numar
Lparameters tnIdTipDoc
Private pnIdTipDoc
pnIdTipDoc = tnIdTipDoc
With This
If !Isnull(This.paPlaje(tnIdTipDoc,2))
.salveazaAliasVechi()
If .paPlaje(tnIdTipDoc,1) <> 0
* Cateodata dadea eroare la executia in Oracle wrong type, desi pnIdTipDoc era numeric
*!* lcSql=[begin ] + gcS + [.pack_serii_numere.dezaloca_numar(?pnIdTipDoc); end;]
lcSql=[begin pack_serii_numere.dezaloca_numar(] + ALLTRIM(TRANSFORM(m.pnIdTipDoc)) + [); end;]
If goExecutor.oExecuta(lcSql)
.paPlaje(tnIdTipDoc,1) = 0
Endif
Endif
.selecteazaAliasVechi()
Endif
Endwith
Release pnIdTipDoc
Endproc && dezaloca_numar
******************************
Procedure dezaloca_buffer
Lparameters tnIdTipDoc,tlDezactiveazaBuffer
Private pnIdTipDoc
pnIdTipDoc = tnIdTipDoc
With This
pnTip = .paPlaje(tnIdTipDoc,7)
.salveazaAliasVechi()
lcSql=[begin ] + gcS + [.pack_serii_numere.dezaloca_numere(?pnIdTipDoc,?pnTip); end;]
If goExecutor.oExecuta(lcSql)
If pnTip = 1
.paPlaje(tnIdTipDoc,1) = 0
Endif
If tlDezactiveazaBuffer
.dezactiveazaBuffer(tnIdTipDoc)
Endif
Endif
.selecteazaAliasVechi()
Endwith
Release pnIdTipDoc,pnTip
Endproc && dezaloca_numere
*******************************
Procedure dezaloca_numere
With This
For i = 1 To This.nTipuriDocument
If .paPlaje(i,1)<>0
.dezaloca_numar(i)
Endif
Endfor
Endwith
Endproc && dezaloca_numere
******************************
Function getNumeCursor
Lparameters tnIdTipDoc
Return This.paPlaje(tnIdTipDoc,2)
Endfunc && getNumeCursor
******************************
Function getSerieCursor
Lparameters tnIdTipDoc
Local lcSerie
With This
If Reccount(.paPlaje(tnIdTipDoc,2))>0
.salveazaAliasVechi()
Select (.paPlaje(tnIdTipDoc,2))
lcSerie = Alltrim(serie)
.selecteazaAliasVechi()
Else
lcSerie = []
Endif
Endwith
Return lcSerie
Endfunc && getNumeCursor
******************************
Function getLungimeSerie
Lparameters tnIdTipDoc
Local lnLungime
With This
If Reccount(.paPlaje(tnIdTipDoc,2))>0
.salveazaAliasVechi()
Select (.paPlaje(tnIdTipDoc,2))
lnLungime = lungime
.selecteazaAliasVechi()
Else
lnLungime = Null
Endif
Endwith
Return lnLungime
Endfunc && getLungimeSerie
******************************
Function getIdSerie
Lparameters tnIdTipDoc
Return This.paPlaje(tnIdTipDoc,5)
Endfunc && getIdSerie
******************************
Enddefine
************************************ INCEPUT : viz_config_serii_complet **********************************
Procedure viz_config_serii_complet
Lparameters tnIdTipDoc
Private pcSchema,pcSelect,pcFiltru,pcOrder,poDocumente,poPlaje,poSerii
Local llAfiseaza
Store [] To pcSchema,pcSelect,pcFiltru,pcOrder,poDocumente,poPlaje,poSerii
Store .F. To llAfiseaza
pcSchema = []
pcSelect = [select id_tipdoc, id_tipentitate, tipdoc, descriere, maxlen, cu_serie, cu_plaje, tipentitate, plajepeentitate, an, luna, an2caractere from vserii_tipdoc where]
If Empty(tnIdTipDoc)
pcFiltru = [2=2]
Else
pcFiltru = [id_tipdoc=] + Alltrim(Str(tnIdTipDoc))
Endif
pcOrder = [tipdoc]
llAfiseaza = .F.
gencursor('poDocumente','crsTipdoc',pcSelect,pcFiltru,pcSchema,pcOrder,llAfiseaza)
poDocumente.ca_baza1.afisare()
pcSchema = [id_serie N(10),serie C(10),an N(1),luna N(1),lungime N(10),inactiv N(1),resetare C(50),exemplu C(50), isautofactura N(1), isbeneficiari N(1), isterti N(1), isfurnizori N(1), prefix N(5), an2caractere N(1)]
pcSelect = [select id_serie, serie, an, luna, lungime, inactiv, resetare, exemplu, isautofactura, isbeneficiari, isterti, isfurnizori, prefix, an2caractere from vserii where]
pcFiltru = [2=2]
pcOrder = [serie]
llAfiseaza = .F.
gencursor('poSerii','crsSerii',pcSelect,pcFiltru,pcSchema,pcOrder,llAfiseaza)
poSerii.ca_baza1.afisare()
pcSchema = [id_plaja N(10),id_tipdoc N(10),id_tipentitate N(10),id_entitate N(10),pl_inf N(18),pl_sup N(18),] + ;
[inactiv N(1),id_serie N(10),datai d,datas d,tipentitate C(100),entitate C(100),serie C(10),urmval C(100),valabil N(1)]
pcSelect = [select id_plaja, id_tipdoc, id_tipentitate, id_entitate, pl_inf, pl_sup, inactiv, id_serie,] + ;
[datai, datas, tipentitate, entitate, serie, urmval, valabil from vplaje_numere where]
pcFiltru = [1=2]
pcOrder = [id_tipdoc]
llAfiseaza = .F.
lcFiltruOriginal = [NVL(id_sucursala,-99) = NVL(?gnIdSucursala,-99)]
gencursor('poPlaje','crsPlaje',pcSelect,pcFiltru,pcSchema,pcOrder,llAfiseaza,[],.F.,lcFiltruOriginal)
ofrmseriicomplet = Createobject('frm_plaje_numere')
ofrmseriicomplet.Show(1)
Use In (Select('crsTipdoc'))
Use In (Select('crsSerii'))
Use In (Select('crsPlaje'))
Release ofrmseriicomplet, poDocumente, poSerii, poPlaje
Endproc && viz_config_serii_complet
************************************ SFARSIT : viz_config_serii_complet **********************************
*********************************** INCEPUT : caut_tipentitate_permis ********************************
Function caut_tipentitate_permis
Parameters tnTipDoc,tnPornire, tlDesktop
Private pnTipDoc
pnTipDoc = tnTipDoc
Local lcCont,loCauta, lnPornire, llDesktop
lnPornire = tnPornire && 1-incepe cu...6-toate
llDesktop = tlDesktop
Store "" To loCauta
lcSelect = [select id_tipentitate, descriere from ] + gcS + [.vserii_tipentpermis]
lcFiltru = [1=2]
lcSchema = []
lcOrder = [descriere]
lccoloane = [descriere]
lcTitlu = [Alegeti tipul entitatii]
lcTitluColoane = [Tip entitate]
lcFiltruOriginal = [id_tipdoc = ?pnTipDoc]
lcNumeProc = []
llToateIreg = .F.
loCauta = cauta_alfa(lcSelect,lcFiltru,lcSchema,lcOrder,lccoloane,lcTitlu,lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal,,lnPornire,,,llDesktop) && 11.07.2007
Return loCauta
Endfunc && caut_tipentitate_permis
********************************** SFARSIT : caut_tipentitate_permis ********************************
************************************** INCEPUT : caut_serii_fact ************************************
Function caut_serii_fact
Parameters tnPornire, tlDesktop
Local lcCont,loCauta, lnPornire, llDesktop
lnPornire = tnPornire && 1-incepe cu...6-toate
llDesktop = tlDesktop
Store "" To loCauta
lcSelect = [select id_serie,serie,resetare,lungime,exemplu,an,luna from ] + gcS + [.vserii]
lcFiltru = [1=2]
lcSchema = [id_serie N(10),serie C(50),resetare C(50),lungime N(10),exemplu C(50),an N(1),luna N(1)]
lcOrder = [serie,luna,an]
lccoloane = [serie,resetare,lungime,exemplu]
lcTitlu = [Alegeti seria]
lcTitluColoane = [Serie,Resetare,Lungime,Exemplu]
lcFiltruOriginal = [inactiv = 0]
lcNumeProc = []
llToateIreg = .F.
loCauta = cauta_alfa(lcSelect,lcFiltru,lcSchema,lcOrder,lccoloane,lcTitlu,lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal,,lnPornire,,,llDesktop) && 11.07.2007
Return loCauta
Endfunc && caut_serii_fact
************************************** SFARSIT : caut_serii_fact ************************************