Boa noite pessoal,
Tenho em uma tela de vendas o campo "desconto" e este ao entrar em foco teria que solicitar a senha de um usuario administrador, até ai tudo bem, coloquei em valor inicial a rotina abaixo, o problema e que ele aceita qualquer usuario, tipo, se o usuario logado colocar novamente o seu usuario e senha ele pode digitar o valor neste campo, e somente poderia ser digitado o valor neste campo se for colocada a senha de um administrador.
Como fazer isso ?
***** LIBERAR ROTINAS COM SENHA *********************************
#include "sgi.ch" // inicializa constantes manifestas
LOCAL ret_val:=.f., v1, REG_DBF:=POINTER_DBF()
#ifdef COM_REDE
IF !USEARQ(sistema[nss-1,O_ARQUI,O_NOME],.f.,20,1) // abre arquivo de senhas
RETU .f. // nao consegui cai fora...
ENDI
#else
USEARQ(sistema[nss-1,O_ARQUI,O_NOME]) // abre arq de acessos
#endi
#ifdef COM_REDE
IF !USEARQ(sistema[nss,O_ARQUI,O_NOME],.f.,20,1) // abre arq de usuarios
RETU .f. // se falhou cai fora...
ENDI
#else
USEARQ(sistema[nss,O_ARQUI,O_NOME]) // abre arq de usuarios
#endi
v1=SAVESCREEN(0,0,MAXROW(),79)
DBSETORDER(2) // vamos usar o indice 2
cod_sos=15 // codigo do help
COLORSELECT(COR_GET) // poe cor de get na frente
v1=SAVESCREEN(0,0,MAXROW(),79) // salva tela e coloca tela de senha
DBOX(PADR(" Nome.:",25)+"|"+PADR(" Senha:",25)+"| F4 para finalizar|ESC para recome‡ar",9,25,,NAO_APAGA,"SENHA DE ACESSO")
cp_=1
usuar=SPACE(15) // nome do usuario
DO WHIL .t.
@ 12,36 GET usuar PICT "@!" // receve o nome
READ
IF quer_sair // cancelou...
EXIT
ENDI
IF LASTKEY()=K_ESC // recome‡a
usuar=SPACE(15) // nome do usuario
LOOP
ENDI
SETCOLOR(drvcorget) // coloca fundo
@ 13,36 SAY SPAC(6) // da cor do get
senh=PADR(PWORD(13,36),6) // recebe a senha do usuario
SETCOLOR(drvcorbox) // volta para cor normal
IF quer_sair // cancelou...
RET_VAL=.F.
ENDI
IF EMPTY(senh) // senha em branco
@ 13,36 SAY SPAC(6)
LOOP // cai fora
ENDI
SEEK ENCRIPT(usuar)+senh // ve se esta' credenciado
IF FOUND() // OK!
msg_auto="Opera‡„o n„o autorizada, "+TRIM(DECRIPT(pw_nome)) // monta mensagem usuario
IF TRIM(DECRIPT(PW_NIVEL))='3'
RET_VAL=.T.
exit
ELSE
exit
RET_VAL=.F.
ENDI
ELSE
IF cp_<2 // epa! senha invalida
cp_++ // vamos dar outra chance
ALERTA() // estamos avisando!
DBOX("Senha invalida!",,,1)
@ 13,36 SAY SPAC(6)
RET_VAL=.F.
ELSE // errou duas vezes!
ALERTA() // pode ser um E.T.
DBOX("Usuario n„o autorizado!",,,2)
RET_VAL=.F.
ENDI
ENDI
ENDD
SETCOLOR(drvcorpad) // cor normal
POINTER_DBF(REG_DBF,.F.)
RESTSCREEN(0,0,MAXROW(),79,v1)
RETU ret_val