Tecsitel_FactuGES2/Source/ApplicationBase/Usuarios/Data/uDataModuleUsuarios.pas

288 lines
8.3 KiB
ObjectPascal
Raw Normal View History

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,
uCambiarPassword, Dialogs, Windows, uEmpresasController,
schUsuariosClient_Intf;
{ 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.