unit uGruposEmpleadoController; interface uses Classes, SysUtils, uDADataTable, uControllerBase, uEditorDBItem, uIDataModuleEmpleados, uBizGruposEmpleado; type IGruposEmpleadoController = interface(IControllerBase) ['{6820BA19-5E5E-459F-9001-FB4A712ACC4C}'] function BuscarTodos: IBizGrupoEmpleado; procedure VerTodos(AGruposEmpleado: IBizGrupoEmpleado); procedure Anadir(AGrupoEmpleado : IBizGrupoEmpleado); function Eliminar(AGrupoEmpleado : IBizGrupoEmpleado): Boolean; function Guardar(AGrupoEmpleado : IBizGrupoEmpleado): Boolean; procedure DescartarCambios(AGrupoEmpleado : IBizGrupoEmpleado); function Localizar(AGruposEmpleado: IBizGrupoEmpleado; ADescripcion:String): Boolean; function DarListaGruposEmpleado: TStringList; end; TGruposEmpleadoController = class(TControllerBase, IGruposEmpleadoController) protected FDataModule : IDataModuleEmpleados; procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); override; function CreateEditor(const AName : String; const IID: TGUID; out Intf): Boolean; function ValidarGrupoEmpleado(AGrupoEmpleado: IBizGrupoEmpleado): Boolean; procedure AsignarDataModule; virtual; public constructor Create; override; destructor Destroy; override; function Eliminar(AGrupoEmpleado : IBizGrupoEmpleado): Boolean; function Guardar(AGrupoEmpleado : IBizGrupoEmpleado): Boolean; procedure DescartarCambios(AGrupoEmpleado : IBizGrupoEmpleado); virtual; procedure Anadir(AGrupoEmpleado : IBizGrupoEmpleado); function BuscarTodos: IBizGrupoEmpleado; procedure VerTodos(AGruposEmpleado: IBizGrupoEmpleado); function Localizar(AGruposEmpleado: IBizGrupoEmpleado; ADescripcion:String): Boolean; function DarListaGruposEmpleado: TStringList; end; implementation uses cxControls, DB, uEditorRegistryUtils, uIEditorGruposEmpleado, uDataModuleEmpleados, uDAInterfaces, uDataTableUtils, uDateUtils, uROTypes, DateUtils, Controls, Windows, schContactosClient_Intf; { TGruposEmpleadoController } procedure TGruposEmpleadoController.Anadir(AGrupoEmpleado: IBizGrupoEmpleado); begin AGrupoEmpleado.Insert; end; procedure TGruposEmpleadoController.AsignarDataModule; begin FDataModule := TDataModuleEmpleados.Create(Nil); end; function TGruposEmpleadoController.BuscarTodos: IBizGrupoEmpleado; begin Result := FDataModule.GetGruposEmpleado; end; constructor TGruposEmpleadoController.Create; begin inherited; AsignarDataModule; end; function TGruposEmpleadoController.CreateEditor(const AName: String; const IID: TGUID; out Intf): Boolean; begin Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf); end; function TGruposEmpleadoController.DarListaGruposEmpleado: TStringList; var AGruposEmpleado: IBizGrupoEmpleado; begin AGruposEmpleado := BuscarTodos; AGruposEmpleado.DataTable.Active := True; Result := TStringList.Create; try with Result do begin AGruposEmpleado.DataTable.First; while not AGruposEmpleado.DataTable.EOF do begin Add(AGruposEmpleado.DESCRIPCION); AGruposEmpleado.DataTable.Next; end; end; finally AGruposEmpleado := NIL; end; end; procedure TGruposEmpleadoController.DescartarCambios(AGrupoEmpleado: IBizGrupoEmpleado); begin if not Assigned(AGrupoEmpleado) then raise Exception.Create ('GrupoEmpleado no asignado'); ShowHourglassCursor; try if (AGrupoEmpleado.State in dsEditModes) then AGrupoEmpleado.Cancel; AGrupoEmpleado.DataTable.CancelUpdates; finally HideHourglassCursor; end; end; destructor TGruposEmpleadoController.Destroy; begin FDataModule := Nil; inherited; end; function TGruposEmpleadoController.ValidarGrupoEmpleado(AGrupoEmpleado: IBizGrupoEmpleado): Boolean; begin if not Assigned(AGrupoEmpleado) then raise Exception.Create ('GrupoEmpleado no asignada'); if (AGrupoEmpleado.DataTable.State in dsEditModes) then AGrupoEmpleado.DataTable.Post; if Length(AGrupoEmpleado.DESCRIPCION) = 0 then raise Exception.Create('Debe indicar al menos la descripción de este grupo.'); Result := True; end; procedure TGruposEmpleadoController.VerTodos(AGruposEmpleado: IBizGrupoEmpleado); var AEditor : IEditorGruposEmpleado; begin AEditor := NIL; CreateEditor('EditorGruposEmpleado', IEditorGruposEmpleado, AEditor); if Assigned(AEditor) then try AEditor.Controller := Self; //OJO ORDEN MUY IMPORTANTE AEditor.GruposEmpleado := AGruposEmpleado; AEditor.ShowModal; finally AEditor.Release; AEditor := NIL; end; end; function TGruposEmpleadoController.Eliminar(AGrupoEmpleado: IBizGrupoEmpleado): Boolean; begin if not Assigned(AGrupoEmpleado) then raise Exception.Create ('GrupoEmpleado no asignada'); ShowHourglassCursor; try if (AGrupoEmpleado.State in dsEditModes) then AGrupoEmpleado.Cancel; AGrupoEmpleado.Delete; AGrupoEmpleado.DataTable.ApplyUpdates; HideHourglassCursor; Result := True; finally HideHourglassCursor; end; end; procedure TGruposEmpleadoController.RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); begin inherited; // end; function TGruposEmpleadoController.Guardar(AGrupoEmpleado: IBizGrupoEmpleado): Boolean; begin Result := False; if ValidarGrupoEmpleado(AGrupoEmpleado) then begin ShowHourglassCursor; try if (AGrupoEmpleado.DataTable.State in dsEditModes) then AGrupoEmpleado.DataTable.Post; AGrupoEmpleado.DataTable.ApplyUpdates; Result := True; finally HideHourglassCursor; end; end; end; function TGruposEmpleadoController.Localizar(AGruposEmpleado: IBizGrupoEmpleado; ADescripcion: String): Boolean; begin Result := True; ShowHourglassCursor; try with AGruposEmpleado.DataTable do begin DisableControls; First; if not Locate(fld_GruposEmpleadoDESCRIPCION, ADescripcion, []) then Result := False; EnableControls; end; finally HideHourglassCursor; end; end; end.