unit uPerfilesUsuarioController; interface uses Classes, SysUtils, uDADataTable, uControllerBase, uEditorDBItem, uIDataModuleUsuarios, uBizUsuarios; type IPerfilesUsuarioController = interface(IControllerBase) ['{3D60BC4E-B244-4C08-9A1A-00A7C3B74558}'] function BuscarTodos: IBizPerfilUsuario; procedure VerTodos; procedure Ver(const AIDPerfil : Integer); procedure Anadir(APerfilUsuario : IBizPerfilUsuario); function Eliminar(APerfilUsuario : IBizPerfilUsuario): Boolean; overload; function Eliminar(const AIDPerfil : Integer): Boolean; overload; function Guardar(APerfilUsuario : IBizPerfilUsuario): Boolean; procedure DescartarCambios(APerfilUsuario : IBizPerfilUsuario); function Localizar(APerfilesUsuario: IBizPerfilUsuario; ADescripcion:String): Boolean; function DarListaPerfilesUsuario: TStringList; end; TPerfilesUsuarioController = class(TControllerBase, IPerfilesUsuarioController) protected FDataModule : IDataModuleUsuarios; procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); override; function CreateEditor(const AName : String; const IID: TGUID; out Intf): Boolean; //Estos son los tres métodos a sobre escribir si se desea heredar toda la logica de //este controller procedure AsignarDataModule; virtual; procedure ValidarObjetos; virtual; public constructor Create; override; destructor Destroy; override; function Eliminar(APerfilUsuario : IBizPerfilUsuario): Boolean; overload; function Eliminar(const AIDPerfil : Integer): Boolean; overload; function Guardar(APerfilUsuario : IBizPerfilUsuario): Boolean; procedure DescartarCambios(APerfilUsuario : IBizPerfilUsuario); virtual; procedure Anadir(APerfilUsuario : IBizPerfilUsuario); function BuscarTodos: IBizPerfilUsuario; procedure VerTodos; procedure Ver(const AIDPerfil : Integer); function Localizar(APerfilesUsuario: IBizPerfilUsuario; ADescripcion:String): Boolean; function DarListaPerfilesUsuario: TStringList; end; implementation uses cxControls, DB, uEditorRegistryUtils, uDAInterfaces, uDataTableUtils, uDateUtils, uROTypes, DateUtils, Controls, Windows, schUsuariosClient_Intf, uDataModuleUsuarios, uIEditorPerfilesUsuario, uIEditorPerfilUsuario; { TPerfilesUsuarioController } procedure TPerfilesUsuarioController.Anadir(APerfilUsuario: IBizPerfilUsuario); begin APerfilUsuario.Insert; end; procedure TPerfilesUsuarioController.AsignarDataModule; begin FDataModule := TDataModuleUsuarios.Create(Nil); end; function TPerfilesUsuarioController.BuscarTodos: IBizPerfilUsuario; begin Result := FDataModule.GetPerfiles; end; constructor TPerfilesUsuarioController.Create; begin inherited; AsignarDataModule; end; function TPerfilesUsuarioController.CreateEditor(const AName: String; const IID: TGUID; out Intf): Boolean; begin Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf); end; function TPerfilesUsuarioController.DarListaPerfilesUsuario: TStringList; var APerfilesUsuario: IBizPerfilUsuario; begin APerfilesUsuario := BuscarTodos; APerfilesUsuario.DataTable.Active := True; Result := TStringList.Create; try with Result do begin APerfilesUsuario.DataTable.First; while not APerfilesUsuario.DataTable.EOF do begin Add(APerfilesUsuario.USERNAME); APerfilesUsuario.DataTable.Next; end; end; finally APerfilesUsuario := NIL; end; end; procedure TPerfilesUsuarioController.DescartarCambios(APerfilUsuario: IBizPerfilUsuario); begin if not Assigned(APerfilUsuario) then raise Exception.Create ('Perfil no asignado'); ShowHourglassCursor; try if (APerfilUsuario.State in dsEditModes) then APerfilUsuario.Cancel; APerfilUsuario.DataTable.CancelUpdates; finally HideHourglassCursor; end; end; destructor TPerfilesUsuarioController.Destroy; begin FDataModule := Nil; inherited; end; function TPerfilesUsuarioController.Eliminar(const AIDPerfil: Integer): Boolean; begin end; procedure TPerfilesUsuarioController.ValidarObjetos; var AEditor : IEditorPerfilesUsuario; APerfilesUsuario: IBizPerfilUsuario; begin APerfilesUsuario := FDataModule.GetPerfiles; if Assigned(APerfilesUsuario) then begin try APerfilesUsuario.Active := True; CreateEditor('EditorPerfilesUsuario', IEditorPerfilesUsuario, AEditor); if Assigned(AEditor) then begin try AEditor.Controller := Self; //OJO ORDEN MUY IMPORTANTE AEditor.PerfilesUsuario := APerfilesUsuario; AEditor.ShowModal; finally AEditor.Release; AEditor := NIL; end; end; finally APerfilesUsuario := NIL; end; end; end; procedure TPerfilesUsuarioController.Ver(const AIDPerfil: Integer); var AEditor : IEditorPerfilUsuario; FPerfil : IBizPerfilUsuario; begin FPerfil := FDataModule.GetPerfil(AIDPerfil); if Assigned(FPerfil) then begin try FPerfil.Active := True; CreateEditor('EditorPerfilUsuario', IEditorPerfilUsuario, AEditor); if Assigned(AEditor) then try AEditor.Controller := Self; //OJO ORDEN MUY IMPORTANTE AEditor.PerfilUsuario := FPerfil; AEditor.ShowModal; finally AEditor.Release; AEditor := NIL; end; finally FPerfil := NIL; end; end; end; procedure TPerfilesUsuarioController.VerTodos; var AEditor : IEditorPerfilesUsuario; APerfilesUsuario: IBizPerfilUsuario; begin APerfilesUsuario := FDataModule.GetPerfiles; if Assigned(APerfilesUsuario) then begin try APerfilesUsuario.Active := True; CreateEditor('EditorPerfilesUsuario', IEditorPerfilesUsuario, AEditor); if Assigned(AEditor) then try AEditor.Controller := Self; //OJO ORDEN MUY IMPORTANTE AEditor.PerfilesUsuario := APerfilesUsuario; AEditor.ShowModal; finally AEditor.Release; AEditor := NIL; end; end; finally APerfilesUsuario := NIL; end; end; end; function TPerfilesUsuarioController.Eliminar(APerfilUsuario: IBizPerfilUsuario): Boolean; begin Result := False; if not Assigned(APerfilUsuario) then raise Exception.Create ('Perfil no asignado'); ShowHourglassCursor; try if (APerfilUsuario.State in dsEditModes) then APerfilUsuario.Cancel; APerfilUsuario.Delete; APerfilUsuario.DataTable.ApplyUpdates; HideHourglassCursor; Result := True; finally HideHourglassCursor; end; end; procedure TPerfilesUsuarioController.RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); begin inherited; // end; function TPerfilesUsuarioController.Guardar(APerfilUsuario: IBizPerfilUsuario): Boolean; begin Result := False; if not Assigned(APerfilUsuario) then raise Exception.Create ('Perfil no asignado'); ValidarObjetos; ShowHourglassCursor; try if (APerfilUsuario.DataTable.State in dsEditModes) then APerfilUsuario.DataTable.Post; APerfilUsuario.DataTable.ApplyUpdates; Result := True; finally HideHourglassCursor; end; end; function TPerfilesUsuarioController.Localizar(APerfilesUsuario: IBizPerfilUsuario; ADescripcion: String): Boolean; begin Result := True; ShowHourglassCursor; try with APerfilesUsuario.DataTable do begin DisableControls; First; if not Locate(fld_PERFILESUSERNAME, ADescripcion, []) then Result := False; EnableControls; end; finally HideHourglassCursor; end; end; end.