-
Notifications
You must be signed in to change notification settings - Fork 0
/
Delegação de acesso
236 lines (174 loc) · 6.03 KB
/
Delegação de acesso
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
//-------------------------------------------------------------------
/*/{Protheus.doc} DelegaAcesso
Função criada para delegar acesso a usuários
@author Marcos.Aurelio
@since 21/02/2021
@version 1.0
/*/
//-------------------------------------------------------------------
User Function DelegaAcesso()
Private oBrowse := FWMBrowse():New()
oBrowse:SetAlias('ZZI')
oBrowse:SetDescription('Delegação de Acesso')
oBrowse:Activate()
Return
/*/{Protheus.doc} MenuDef()
(long_description)
@type Static Function
@author user
@since date
@version version
@param param, param_type, param_descr
@return return, return_type, return_description
@example
(examples)
@see (links_or_references)
/*/
Static Function MenuDef()
Local aRotina := {}
aAdd(aRotina,{'Incluir', 'VIEWDEF.DelegaAcesso',0,3,0,Nil })
aAdd(aRotina,{'Alterar', 'VIEWDEF.DelegaAcesso',0,4,0,Nil })
aAdd(aRotina,{'Excluir', 'VIEWDEF.DelegaAcesso',0,5,0,Nil })
Return (aRotina)
/*/{Protheus.doc} ModelDef()
(long_description)
@type Static Function
@author user
@since date
@version version
@param param, param_type, param_descr
@return return, return_type, return_description
@example
(examples)
@see (links_or_references)
/*/
Static Function ModelDef()
Local oStruZZI := FWFormStruct(1,'ZZI')
Local oStruZZJ := FWFormStruct(1,'ZZJ')
Local oStruZZK := FWFormStruct(1,'ZZK')
Local oModel := FWFormModel():New('XDelegaAcesso',{|oMdl|PreModelo(oMdl)},,{|oMdl|GrvDados(oMdl)})
//Altera Campo de relação da ZZI para visualização e remove da ZZJ
oStruZZI:SetProperty('ZZI_UNIQCD',MODEL_FIELD_WHEN,.F.)
oStruZZJ:RemoveField('ZZJ_UNIQCD')
oStrutZZ:RemoveField('ZZK_UNIQCD')
//Inicilizador de campos
oModel:SetProperty('ZZI_UNIQCD',MODEL_FIELD_INIT ,{||PegaSeq()})
oStruZ24:AddTrigger( 'ZZI_CODUSE',, { || .t. }, { | | RetAcesso('ZZI_CODUSE,ZZI_UNIQCD') } )
//Define a grid e o header
oModel:AddField('ZZIMASTER',oStruZZI)
oModel:AddGrid('ZZJDETAIL','ZZIMASTER',oStruZZJ)
oModel:AddGrid('ZZKDETAIL','ZZIMASTER',oStruZZK)
//Faz a Relação do modelo ZZI com o submodelo ZZJ
oModel:SetRelation('ZZJDETAIL',{'ZZI_UNIQCD','ZZJ_UNIQCD'}, ZZJ->(IndexKey(1)))
oModel:SetRelation('ZZKDETAIL',{'ZZI_UNIQCD','ZZK_UNIQCD'}, ZZK->(IndexKey(1)))
//Define a descrição pro modelo ZZI e submdelo ZZJ
oModel:GetModel('ZZIMASTER'):SetDescription('Configuração de Acesso')
oModel:GetModel('ZZJDETAIL'):SetDescription('Acessos rotinas')
oModel:GetModel('ZZKDETAIL'):SetDescription('Emails de WF')
oModel:Activate()
Return (oModel)
/*/{Protheus.doc} ViewDef()
(long_description)
@type Static Function
@author marcos.aurelio
@since date
@version version
@param param, param_type, param_descr
@return return, return_type, return_description
@example
(examples)
@see (links_or_references)
/*/
Static Function ViewDef()
Local oModel := FWLoadModel('DelegaAcesso')
Local oStruZZI := FWFormStruct(2,'ZZI')
Local oStruZZJ := FWFormStruct(2,'ZZJ')
Local oStruZZK := FWFormStruct(2,'ZZK')
Local oView := FwFormView():New()
//seto o model que vou utilizar
oView:SetModel(oModel)
//Crio a o alias da header e das Grid na View
oView:AddField('VIEW_ZZI',oStruZZI,'ZZIMASTER')
oView:AddGrid('VIEW_ZZJ',oStruZZJ,'ZZJDETAIL')
oView:AddGrid('VIEW.ZZK',oStruZZK,'ZZKDETAIL')
//Crio as box da tabela ZZI e a Folder que ira armazenar a tabela ZZJ e ZZK
oView:CreateHorizontalBox('HEADER',45)
oView:CreateHorizontalBox('GRID1',55)
oView:CreateFolder('FOLDER','GRID1')
//Crio a primeira sheet de acesso e a horizontal box
oView:AddSheet('FOLDER','ACESS','Acessos')
oView:CreateHorizontalBox('ABA1',100,,,'FOLDER','ACESS')
oView:SetOwnerView('VIEW_ZZJ','ABA1')
//Crio a segunda sheet de e-mails e a CreateHorizontalBox
oView:AddSheet('Folder','EMAIL','Emails de WF')
oView:CreateHorizontalBox('ABA2',100,,,'FOLDER','EMAIL')
oView:SetOwnerView('VIEW_ZZK','ABA2')
Return (oView)
Static Function GrvDados()
Return
Static Function ExistPrdTb()
Local lRet := .F.
Local oModel := FWModelActive()
Local oModZY4 := oModel:GetModel('ZY4DETAIL')
Local cItemAt := Alltrim(oModZY4:GetValue('ZY4_ITEM'))
Local cCodProd := Alltrim(oModZY4:GetValue('ZY4_PRODUT'))
Local aSaveLines:= FWSaveRows() //salvando a area (posição) do grid
Local nX
//se for campanha permite mais de um produto na mesma tabela
If cTipoTab = 'C'
Return .F.
EndIf
For nX := 1 To oModZY4:Length()
oModZY4:GoLine(nX)
If lRet := (( Alltrim(oModZY4:GetValue('ZY4_PRODUT')) = cCodProd) .and. (cItemAt != Alltrim(oModZY4:GetValue('ZY4_ITEM'))) )
MsgAlert(StaticCall(M0000004, Saudacao) + ', você está tentando inserir um produto que já está presente nesta tabela! '+Chr(13)+;
'Caso queira alterar o seu preço, favor posicionar no item: '+Alltrim(oModZY4:GetValue('ZY4_ITEM'))+Chr(13)+;
'Ou usar a rotina de pesquisa de produto.','Atenção')
Exit
EndIf
Next
FWRestRows( aSaveLines ) //resturo a posição do grid
Return lRet
Static Function PegaSeq()
Local aArea := GetArea()
Local cAlias := GetNextAlias()
Local cIniCod
BeginSql Alias 'cAlias'
SELECT MAX(ZZI_UNIQCD) AS UNICD
FROM ZZI
EndSql
dbSelectArea('cAlias')
dbGoTop()
cIniCod := Soma1((cAlias)->UNICD)
(cAlias)->DBCloseArea()
RestArea(aArea)
Return cIniCod
Static Function RetAcesso(cCodusr,cCODUNIQ)
Local aArea := GetArea()
oModel := FwModelActive()
Local cAlias := GetNextAlias()
Local oZZJ := oModel:GetModel("ZZJDETAIL")
BeginSql Alias cAlias
SELECT Z03_FILIAL,Z03_GRUPO,Z05_DESCRI,Z03_DTINI,Z03_DTFIM
FROM %table:Z03% Z03
JOIN %table:Z05% Z05
ON Z05.Z05_TABELA = '000001'
AND Z03.Z03_GRUPO = Z05.Z05_ITEM
WHERE Z03_CODUSR = %Exp:cCodusr%
AND Z03.%NOTDEL% AND Z05.%NOTDEL%
AND Z03.Z03_DTFIM >= CONVERT(varchar, getdate(),112)
EndSql
dbSelectArea(cAlias)
(cAlias)->(dbGoTop())
While ! (cAlias)->(EoF())
oZZJ:SetValue('ZZJ_FILIAL', (cAlias)->Z03_FILIAL)
oZZJ:SetValue('ZZJ_GRUPO', (cAlias)->Z03_GRUPO)
oZZJ:SetValue('ZZJ_DESCGR', (cAlias)->Z05_DESCRI)
oZZJ:SetValue('ZZJ_DATAIN', (cAlias)->Z03_DTINI)
oZZJ:SetValue('ZZJ_DATAFI', (cAlias)->Z03_DTFIM)
oZZJ:AddLine()
(cAlias)->(dbSkip())
EndDo
(cAlias)->(dbCloseArea)
RestArea(aArea)
Return