2007-10-03 16:03:28 +00:00
|
|
|
|
unit uDataModuleUsuarios;
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
|
|
|
|
|
uses
|
|
|
|
|
|
SysUtils, Classes, DB, DBClient, uDADataTable,
|
|
|
|
|
|
FactuGES_Intf, uIntegerListUtils, uBizEmpresas,
|
|
|
|
|
|
UCBase, UCDataConnector, uUCROConn, uDARemoteDataAdapter,
|
|
|
|
|
|
uDARemoteCommand, uROClient, uRORemoteService, uDADataStreamer,
|
|
|
|
|
|
uDABin2DataStreamer, uDAScriptingProvider, uIDataModuleUsuarios;
|
|
|
|
|
|
|
|
|
|
|
|
const
|
|
|
|
|
|
PERFIL_ADMINISTRADORES = 'Administradores';
|
|
|
|
|
|
|
|
|
|
|
|
type
|
|
|
|
|
|
TDataModuleUsuarios = class(TDataModule, IDataModuleUsuarios)
|
|
|
|
|
|
ROLoginService: TRORemoteService;
|
|
|
|
|
|
srvUsuarios: TRORemoteService;
|
|
|
|
|
|
Bin2DataStreamer: TDABin2DataStreamer;
|
|
|
|
|
|
procedure DAClientDataModuleCreate(Sender: TObject);
|
|
|
|
|
|
procedure DAClientDataModuleDestroy(Sender: TObject);
|
|
|
|
|
|
private
|
|
|
|
|
|
FDataConnector : TUCROConn;
|
|
|
|
|
|
FUsuario : String;
|
|
|
|
|
|
FPassword : String; // Lo guardo para poder hacer una reconexi<78>n
|
|
|
|
|
|
|
|
|
|
|
|
FLoginInfo: TRdxLoginInfo;
|
|
|
|
|
|
FEmpresaActual: IBizEmpresa;
|
|
|
|
|
|
function CambiarPassword (const APassword : String) : boolean; overload;
|
|
|
|
|
|
function GetEsAdministrador: Boolean;
|
|
|
|
|
|
|
|
|
|
|
|
function GetEmpresas: TIntegerList;
|
|
|
|
|
|
|
|
|
|
|
|
procedure SetEmpresaActual(const Value: IBizEmpresa);
|
|
|
|
|
|
function GetIDEmpresaActual: Integer;
|
|
|
|
|
|
procedure SetIDEmpresaActual(const Value: Integer);
|
|
|
|
|
|
function GetDataConnector : TUCDataConnector;
|
|
|
|
|
|
public
|
|
|
|
|
|
procedure InicializarCamposUserControl (AUserControl : TUserControl);
|
|
|
|
|
|
function Login: Boolean; overload;
|
|
|
|
|
|
function Login(Usuario: String; Password: String): Boolean; overload;
|
|
|
|
|
|
procedure Logout;
|
|
|
|
|
|
procedure CambiarPassword; overload;
|
|
|
|
|
|
|
|
|
|
|
|
property EsAdministrador : Boolean read GetEsAdministrador;
|
|
|
|
|
|
property IDEmpresaActual : Integer read GetIDEmpresaActual write SetIDEmpresaActual;
|
|
|
|
|
|
property EmpresaActual : IBizEmpresa read FEmpresaActual write SetEmpresaActual;
|
|
|
|
|
|
property Empresas : TIntegerList read GetEmpresas;
|
|
|
|
|
|
property LoginInfo: TRdxLoginInfo read FLoginInfo;
|
|
|
|
|
|
property DataConnector : TUCDataConnector read GetDataConnector;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
implementation
|
|
|
|
|
|
|
|
|
|
|
|
{$R *.DFM}
|
|
|
|
|
|
|
|
|
|
|
|
uses
|
|
|
|
|
|
Forms, Controls, uDataTableUtils, uDataModuleConexion, uLoginForm,
|
2007-10-08 07:58:40 +00:00
|
|
|
|
uCambiarPassword, Dialogs, Windows, uEmpresasController,
|
|
|
|
|
|
schUsuariosClient_Intf;
|
2007-10-03 16:03:28 +00:00
|
|
|
|
|
|
|
|
|
|
{ TDAClientDataModule1 }
|
|
|
|
|
|
|
|
|
|
|
|
procedure TDataModuleUsuarios.DAClientDataModuleCreate(Sender: TObject);
|
|
|
|
|
|
begin
|
|
|
|
|
|
ROLoginService.Channel := dmConexion.Channel;
|
|
|
|
|
|
ROLoginService.Message := dmConexion.Message;
|
|
|
|
|
|
|
|
|
|
|
|
FDataConnector := TUCROConn.Create(nil);
|
|
|
|
|
|
FDataConnector.RemoteService := srvUsuarios;
|
|
|
|
|
|
|
|
|
|
|
|
FUsuario := '';
|
|
|
|
|
|
FPassword := '';
|
|
|
|
|
|
FLoginInfo := NIL;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
function TDataModuleUsuarios.Login: Boolean;
|
|
|
|
|
|
begin
|
|
|
|
|
|
// Intento hacer login si el usuario ya lo hab<61>a hecho antes
|
|
|
|
|
|
if (Length(FUsuario) > 0) then
|
|
|
|
|
|
if Login(FUsuario, FPassword) then
|
|
|
|
|
|
begin
|
|
|
|
|
|
Result := True;
|
|
|
|
|
|
Exit;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
// Si no funcionar el login anterior o es la primera vez,
|
|
|
|
|
|
// saco la pantalla de login
|
|
|
|
|
|
with TfLoginForm.Create(NIL) do
|
|
|
|
|
|
try
|
|
|
|
|
|
if Assigned(FLoginInfo) then
|
|
|
|
|
|
edtUser.Text := FLoginInfo.Usuario;
|
|
|
|
|
|
Result := (ShowModal = mrOK)
|
|
|
|
|
|
finally
|
|
|
|
|
|
Free;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
function TDataModuleUsuarios.Login(Usuario: String; Password: String): Boolean;
|
|
|
|
|
|
begin
|
|
|
|
|
|
// Libero la informaci<63>n del login anterior (sesi<73>n, etc)
|
|
|
|
|
|
if Assigned(FLoginInfo) then
|
|
|
|
|
|
FreeANDNil(FLoginInfo);
|
|
|
|
|
|
|
|
|
|
|
|
Result := (ROLoginService as IsrvLogin).Login(Usuario, Password, FLoginInfo);
|
|
|
|
|
|
|
|
|
|
|
|
if Result then
|
|
|
|
|
|
begin
|
|
|
|
|
|
// Lo guardo para poder reconectarme
|
|
|
|
|
|
FUsuario := Usuario;
|
|
|
|
|
|
FPassword := Password;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TDataModuleUsuarios.Logout;
|
|
|
|
|
|
begin
|
|
|
|
|
|
(ROLoginService as IsrvLogin).Logout;
|
|
|
|
|
|
if Assigned(FLoginInfo) then
|
|
|
|
|
|
FreeANDNil(FLoginInfo);
|
|
|
|
|
|
FUsuario := '';
|
|
|
|
|
|
FPassword := '';
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TDataModuleUsuarios.SetEmpresaActual(const Value: IBizEmpresa);
|
|
|
|
|
|
begin
|
|
|
|
|
|
FEmpresaActual := Value;
|
|
|
|
|
|
FEmpresaActual.DataTable.Active := True;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TDataModuleUsuarios.SetIDEmpresaActual(const Value: Integer);
|
|
|
|
|
|
var
|
|
|
|
|
|
AEmpresasController : IEmpresasController;
|
|
|
|
|
|
AEmpresa : IBizEmpresa;
|
|
|
|
|
|
begin
|
|
|
|
|
|
AEmpresasController := TEmpresasController.Create;
|
|
|
|
|
|
AEmpresa := AEmpresasController.Buscar(Value);
|
|
|
|
|
|
AEmpresa.DataTable.Active := True;
|
|
|
|
|
|
|
|
|
|
|
|
if not AEmpresa.IsEmpty then
|
|
|
|
|
|
begin
|
|
|
|
|
|
FEmpresaActual := AEmpresa;
|
|
|
|
|
|
FEmpresaActual.DataTable.Active := True;
|
|
|
|
|
|
end
|
|
|
|
|
|
else
|
|
|
|
|
|
FEmpresaActual := NIL;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TDataModuleUsuarios.DAClientDataModuleDestroy(Sender: TObject);
|
|
|
|
|
|
begin
|
|
|
|
|
|
if Assigned(FDataConnector) then
|
|
|
|
|
|
FreeANDNIL(FDataConnector);
|
|
|
|
|
|
|
|
|
|
|
|
if Assigned(FLoginInfo) then
|
|
|
|
|
|
FreeANDNIL(FLoginInfo);
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
function TDataModuleUsuarios.GetDataConnector: TUCDataConnector;
|
|
|
|
|
|
begin
|
|
|
|
|
|
Result := FDataConnector;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
function TDataModuleUsuarios.GetEmpresas: TIntegerList;
|
|
|
|
|
|
var
|
|
|
|
|
|
i : integer;
|
|
|
|
|
|
begin
|
|
|
|
|
|
Result := TIntegerList.Create;
|
|
|
|
|
|
|
|
|
|
|
|
if not Assigned(FLoginInfo) then
|
|
|
|
|
|
raise Exception.Create('Usuario no validado en el sistema (login)');
|
|
|
|
|
|
|
|
|
|
|
|
for i := 0 to FLoginInfo.Empresas.Count - 1 do
|
|
|
|
|
|
Result.Add(FLoginInfo.Empresas.Items[i]);
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
function TDataModuleUsuarios.GetEsAdministrador: Boolean;
|
|
|
|
|
|
var
|
|
|
|
|
|
I: Integer;
|
|
|
|
|
|
begin
|
|
|
|
|
|
Result := False;
|
|
|
|
|
|
|
|
|
|
|
|
if not Assigned(FLoginInfo) then
|
|
|
|
|
|
raise Exception.Create('Usuario no validado en el sistema (login)');
|
|
|
|
|
|
|
|
|
|
|
|
for I := 0 to FLoginInfo.Perfiles.Count - 1 do
|
|
|
|
|
|
if FLoginInfo.Perfiles.Items[I] = PERFIL_ADMINISTRADORES then
|
|
|
|
|
|
begin
|
|
|
|
|
|
Result := True;
|
|
|
|
|
|
Break;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
function TDataModuleUsuarios.GetIDEmpresaActual: Integer;
|
|
|
|
|
|
begin
|
|
|
|
|
|
if not Assigned(FEmpresaActual) then
|
|
|
|
|
|
Result := ID_NULO
|
|
|
|
|
|
else
|
|
|
|
|
|
Result := FEmpresaActual.ID;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TDataModuleUsuarios.InicializarCamposUserControl(
|
|
|
|
|
|
AUserControl: TUserControl);
|
|
|
|
|
|
begin
|
|
|
|
|
|
if not Assigned(AUserControl) then
|
|
|
|
|
|
raise Exception.Create('UserControl no asignado (InicializarUserControl)');
|
|
|
|
|
|
|
|
|
|
|
|
with AUserControl do
|
|
|
|
|
|
begin
|
|
|
|
|
|
DataConnector := FDataConnector;
|
|
|
|
|
|
|
|
|
|
|
|
with TableUsers do
|
|
|
|
|
|
begin
|
|
|
|
|
|
TableName := nme_USUARIOS;
|
|
|
|
|
|
FieldUserID := fld_USUARIOSID;
|
|
|
|
|
|
FieldUserName := fld_USUARIOSUSERNAME;
|
|
|
|
|
|
FieldLogin := fld_USUARIOSLOGIN;
|
|
|
|
|
|
FieldPassword := fld_USUARIOSPASS;
|
|
|
|
|
|
FieldEmail := fld_USUARIOSEMAIL;
|
|
|
|
|
|
FieldPrivileged := fld_USUARIOSPRIVILEGED;
|
|
|
|
|
|
FieldTypeRec := fld_USUARIOSTIPO;
|
|
|
|
|
|
FieldProfile := fld_USUARIOSID_PERFIL;
|
|
|
|
|
|
FieldUserExpired := fld_USUARIOSBLOQUEADO;
|
|
|
|
|
|
FieldDateExpired := fld_USUARIOSPASSEXPIRED;
|
|
|
|
|
|
FieldUserDaysSun := fld_USUARIOSUSERDAYSSUN;
|
|
|
|
|
|
FieldKey := fld_USUARIOSCHECKSUM;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
with TableRights do
|
|
|
|
|
|
begin
|
|
|
|
|
|
TableName := nme_PERMISOS;
|
|
|
|
|
|
FieldUserID := fld_PERMISOSID_USUARIO;
|
|
|
|
|
|
FieldModule := fld_PERMISOSMODULO;
|
|
|
|
|
|
FieldComponentName := fld_PERMISOSNOMBRECOMP;
|
|
|
|
|
|
FieldFormName := fld_PERMISOSEXNOMBREFORM;
|
|
|
|
|
|
FieldKey := fld_PERMISOSCHECKSUM;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
with TableUsersLogged do
|
|
|
|
|
|
begin
|
|
|
|
|
|
TableName := nme_USUARIOS_LOGON;
|
|
|
|
|
|
FieldLogonID := fld_USUARIOS_LOGONLOGONID;
|
|
|
|
|
|
FieldUserID := fld_USUARIOS_LOGONID_USUARIO;
|
|
|
|
|
|
FieldApplicationID := fld_USUARIOS_LOGONAPLICACION;
|
|
|
|
|
|
FieldMachineName := fld_USUARIOS_LOGONEQUIPO;
|
|
|
|
|
|
FieldData := fld_USUARIOS_LOGONDATA;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
with TableHistory do
|
|
|
|
|
|
begin
|
|
|
|
|
|
TableName := nme_USUARIOS_EVENTOS;
|
|
|
|
|
|
FieldApplicationID := fld_USUARIOS_EVENTOSAPLICACION;
|
|
|
|
|
|
FieldUserID := fld_USUARIOS_EVENTOSID_USUARIO;
|
|
|
|
|
|
FieldEventDate := fld_USUARIOS_EVENTOSFECHA;
|
|
|
|
|
|
FieldEventTime := fld_USUARIOS_EVENTOSHORA;
|
|
|
|
|
|
FieldForm := fld_USUARIOS_EVENTOSFORM;
|
|
|
|
|
|
FieldCaptionForm := fld_USUARIOS_EVENTOSTITULO_FORM;
|
|
|
|
|
|
FieldEvent := fld_USUARIOS_EVENTOSEVENTO;
|
|
|
|
|
|
FieldObs := fld_USUARIOS_EVENTOSNOTAS;
|
|
|
|
|
|
FieldTableName := fld_USUARIOS_EVENTOSTNAME;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
with TableEmpresa do
|
|
|
|
|
|
begin
|
|
|
|
|
|
Active := False;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TDataModuleUsuarios.CambiarPassword;
|
|
|
|
|
|
begin
|
|
|
|
|
|
with TfCambiarPassword.Create(NIL) do
|
|
|
|
|
|
try
|
|
|
|
|
|
if ShowModal = mrOk then
|
|
|
|
|
|
if CambiarPassword(edtPassword.Text) then
|
|
|
|
|
|
Application.MessageBox('La contrase<73>a ha sido cambiada correctamente.', 'Informaci<63>n', MB_OK);
|
|
|
|
|
|
finally
|
|
|
|
|
|
Free;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
function TDataModuleUsuarios.CambiarPassword(const APassword: String): boolean;
|
|
|
|
|
|
begin
|
|
|
|
|
|
{ if not (ROLoginService as IsrvLogin).SetUserPassword(LoginInfo.UserID, APassword) then
|
|
|
|
|
|
raise Exception.Create('Error en el servidor. No se ha podido cambiar la contrase<73>a');}
|
|
|
|
|
|
Result := True;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
end.
|