unit uGruposProveedorController; interface uses Classes, SysUtils, uDADataTable, uControllerBase, uEditorDBItem, uIDataModuleProveedores, uBizGruposProveedor; type IGruposProveedorController = interface(IControllerBase) ['{20B27FB1-ECEA-40B6-9869-5F5EC700EEDD}'] function BuscarTodos: IBizGrupoProveedor; procedure VerTodos(AGruposProveedor: IBizGrupoProveedor); procedure Anadir(AGrupoProveedor : IBizGrupoProveedor); function Eliminar(AGrupoProveedor : IBizGrupoProveedor): Boolean; function Guardar(AGrupoProveedor : IBizGrupoProveedor): Boolean; procedure DescartarCambios(AGrupoProveedor : IBizGrupoProveedor); function Localizar(AGruposProveedor: IBizGrupoProveedor; ADescripcion:String): Boolean; function DarListaGruposProveedor: TStringList; end; TGruposProveedorController = class(TControllerBase, IGruposProveedorController) protected FDataModule : IDataModuleProveedores; procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); override; function CreateEditor(const AName : String; const IID: TGUID; out Intf): Boolean; function ValidarGrupoProveedor(AGrupoProveedor: IBizGrupoProveedor): Boolean; procedure AsignarDataModule; virtual; public constructor Create; override; destructor Destroy; override; function Eliminar(AGrupoProveedor : IBizGrupoProveedor): Boolean; function Guardar(AGrupoProveedor : IBizGrupoProveedor): Boolean; procedure DescartarCambios(AGrupoProveedor : IBizGrupoProveedor); virtual; procedure Anadir(AGrupoProveedor : IBizGrupoProveedor); function BuscarTodos: IBizGrupoProveedor; procedure VerTodos(AGruposProveedor: IBizGrupoProveedor); function Localizar(AGruposProveedor: IBizGrupoProveedor; ADescripcion:String): Boolean; function DarListaGruposProveedor: TStringList; end; implementation uses cxControls, DB, uEditorRegistryUtils, uIEditorGruposProveedor, uDataModuleProveedores, uDAInterfaces, uDataTableUtils, uDateUtils, uROTypes, DateUtils, Controls, Windows, schContactosClient_Intf; { TGruposProveedorController } procedure TGruposProveedorController.Anadir(AGrupoProveedor: IBizGrupoProveedor); begin AGrupoProveedor.Insert; end; procedure TGruposProveedorController.AsignarDataModule; begin FDataModule := TDataModuleProveedores.Create(Nil); end; function TGruposProveedorController.BuscarTodos: IBizGrupoProveedor; begin Result := FDataModule.GetGruposProveedor; end; constructor TGruposProveedorController.Create; begin inherited; AsignarDataModule; end; function TGruposProveedorController.CreateEditor(const AName: String; const IID: TGUID; out Intf): Boolean; begin Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf); end; function TGruposProveedorController.DarListaGruposProveedor: TStringList; var AGruposProveedor: IBizGrupoProveedor; begin AGruposProveedor := BuscarTodos; AGruposProveedor.DataTable.Active := True; Result := TStringList.Create; try with Result do begin AGruposProveedor.DataTable.First; while not AGruposProveedor.DataTable.EOF do begin Add(AGruposProveedor.DESCRIPCION); AGruposProveedor.DataTable.Next; end; end; finally AGruposProveedor := NIL; end; end; procedure TGruposProveedorController.DescartarCambios(AGrupoProveedor: IBizGrupoProveedor); begin if not Assigned(AGrupoProveedor) then raise Exception.Create ('GrupoProveedor no asignado'); ShowHourglassCursor; try if (AGrupoProveedor.State in dsEditModes) then AGrupoProveedor.Cancel; AGrupoProveedor.DataTable.CancelUpdates; finally HideHourglassCursor; end; end; destructor TGruposProveedorController.Destroy; begin FDataModule := Nil; inherited; end; function TGruposProveedorController.ValidarGrupoProveedor(AGrupoProveedor: IBizGrupoProveedor): Boolean; begin if not Assigned(AGrupoProveedor) then raise Exception.Create ('GrupoProveedor no asignada'); if (AGrupoProveedor.DataTable.State in dsEditModes) then AGrupoProveedor.DataTable.Post; if Length(AGrupoProveedor.DESCRIPCION) = 0 then raise Exception.Create('Debe indicar al menos la descripción de este grupo.'); Result := True; end; procedure TGruposProveedorController.VerTodos(AGruposProveedor: IBizGrupoProveedor); var AEditor : IEditorGruposProveedor; begin AEditor := NIL; CreateEditor('EditorGruposProveedor', IEditorGruposProveedor, AEditor); if Assigned(AEditor) then try AEditor.Controller := Self; //OJO ORDEN MUY IMPORTANTE AEditor.GruposProveedor := AGruposProveedor; AEditor.ShowModal; finally AEditor.Release; AEditor := NIL; end; end; function TGruposProveedorController.Eliminar(AGrupoProveedor: IBizGrupoProveedor): Boolean; begin if not Assigned(AGrupoProveedor) then raise Exception.Create ('GrupoProveedor no asignada'); ShowHourglassCursor; try if (AGrupoProveedor.State in dsEditModes) then AGrupoProveedor.Cancel; AGrupoProveedor.Delete; AGrupoProveedor.DataTable.ApplyUpdates; HideHourglassCursor; Result := True; finally HideHourglassCursor; end; end; procedure TGruposProveedorController.RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); begin inherited; // end; function TGruposProveedorController.Guardar(AGrupoProveedor: IBizGrupoProveedor): Boolean; begin Result := False; if ValidarGrupoProveedor(AGrupoProveedor) then begin ShowHourglassCursor; try if (AGrupoProveedor.DataTable.State in dsEditModes) then AGrupoProveedor.DataTable.Post; AGrupoProveedor.DataTable.ApplyUpdates; Result := True; finally HideHourglassCursor; end; end; end; function TGruposProveedorController.Localizar(AGruposProveedor: IBizGrupoProveedor; ADescripcion: String): Boolean; begin Result := True; ShowHourglassCursor; try with AGruposProveedor.DataTable do begin DisableControls; First; if not Locate(fld_GruposProveedorDESCRIPCION, ADescripcion, []) then Result := False; EnableControls; end; finally HideHourglassCursor; end; end; end.