unit uSubFamiliasController; interface uses Classes, SysUtils, uDADataTable, uEditorDBItem, uIDataModuleSubFamilias, uBizSubFamilias, uControllerBase; type ISubFamiliasController = interface(IControllerBase) ['{B706CE31-978B-416D-88C5-7969220BEF4F}'] function BuscarTodos: IBizSubFamilia; procedure VerTodos(ASubFamilias: IBizSubFamilia); procedure Anadir(ASubFamilia : IBizSubFamilia); function Eliminar(ASubFamilia : IBizSubFamilia): Boolean; function Guardar(ASubFamilia : IBizSubFamilia): Boolean; procedure DescartarCambios(ASubFamilia : IBizSubFamilia); function Localizar(ASubFamilias: IBizSubFamilia; ADescripcion:String): Boolean; function DarListaSubFamilias: TStringList; end; TSubFamiliasController = class(TControllerBase, ISubFamiliasController) protected FDataModule : IDataModuleSubFamilias; procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); override; function CreateEditor(const AName : String; const IID: TGUID; out Intf): Boolean; function ValidarAlmacen(ASubFamilia: IBizSubFamilia): 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(ASubFamilia : IBizSubFamilia): Boolean; function Guardar(ASubFamilia : IBizSubFamilia): Boolean; procedure DescartarCambios(ASubFamilia : IBizSubFamilia); virtual; procedure Anadir(ASubFamilia : IBizSubFamilia); function BuscarTodos: IBizSubFamilia; procedure VerTodos(ASubFamilias: IBizSubFamilia); function Localizar(ASubFamilias: IBizSubFamilia; ADescripcion:String): Boolean; function DarListaSubFamilias: TStringList; end; implementation uses cxControls, DB, uEditorRegistryUtils, schSubFamiliasClient_Intf, uIEditorSubFamilias, uDataModuleSubFamilias, uDAInterfaces, uDataTableUtils, uDateUtils, uROTypes, DateUtils, Controls, Windows; { TSubFamiliasController } procedure TSubFamiliasController.Anadir(ASubFamilia: IBizSubFamilia); begin ASubFamilia.Insert; end; procedure TSubFamiliasController.AsignarDataModule; begin FDataModule := TDataModuleSubFamilias.Create(Nil); end; function TSubFamiliasController.BuscarTodos: IBizSubFamilia; begin Result := FDataModule.GetItems; end; constructor TSubFamiliasController.Create; begin inherited; AsignarDataModule; end; function TSubFamiliasController.CreateEditor(const AName: String; const IID: TGUID; out Intf): Boolean; begin Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf); end; function TSubFamiliasController.DarListaSubFamilias: TStringList; var ASubFamilias: IBizSubFamilia; begin ASubFamilias := BuscarTodos; ASubFamilias.DataTable.Active := True; Result := TStringList.Create; try with Result do begin ASubFamilias.DataTable.First; while not ASubFamilias.DataTable.EOF do begin Add(ASubFamilias.DESCRIPCION); ASubFamilias.DataTable.Next; end; end; finally ASubFamilias := NIL; end; end; procedure TSubFamiliasController.DescartarCambios(ASubFamilia: IBizSubFamilia); begin if not Assigned(ASubFamilia) then raise Exception.Create ('SubFamilia no asignado'); ShowHourglassCursor; try if (ASubFamilia.State in dsEditModes) then ASubFamilia.Cancel; ASubFamilia.DataTable.CancelUpdates; finally HideHourglassCursor; end; end; destructor TSubFamiliasController.Destroy; begin FDataModule := Nil; inherited; end; function TSubFamiliasController.ValidarAlmacen(ASubFamilia: IBizSubFamilia): Boolean; begin Result := False; if not Assigned(ASubFamilia) then raise Exception.Create ('SubFamilia no asignada'); if (ASubFamilia.DataTable.State in dsEditModes) then ASubFamilia.DataTable.Post; Result := True; end; procedure TSubFamiliasController.ValidarObjetos; begin // end; procedure TSubFamiliasController.VerTodos(ASubFamilias: IBizSubFamilia); var AEditor : IEditorSubFamilias; begin AEditor := NIL; CreateEditor('EditorSubFamilias', IEditorSubFamilias, AEditor); if Assigned(AEditor) then try AEditor.Controller := Self; //OJO ORDEN MUY IMPORTANTE AEditor.SubFamilias := ASubFamilias; AEditor.ShowModal; finally AEditor.Release; AEditor := NIL; end; end; function TSubFamiliasController.Eliminar(ASubFamilia: IBizSubFamilia): Boolean; begin Result := False; if not Assigned(ASubFamilia) then raise Exception.Create ('SubFamilia no asignada'); ShowHourglassCursor; try if (ASubFamilia.State in dsEditModes) then ASubFamilia.Cancel; ASubFamilia.Delete; ASubFamilia.DataTable.ApplyUpdates; Result := True; finally HideHourglassCursor; end; end; procedure TSubFamiliasController.RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); begin inherited; // end; function TSubFamiliasController.Guardar(ASubFamilia: IBizSubFamilia): Boolean; begin Result := False; if not Assigned(ASubFamilia) then raise Exception.Create ('SubFamilia no asignada'); ValidarObjetos; if ValidarAlmacen(ASubFamilia) then begin ShowHourglassCursor; try ASubFamilia.DataTable.ApplyUpdates; Result := True; finally HideHourglassCursor; end; end; end; function TSubFamiliasController.Localizar(ASubFamilias: IBizSubFamilia; ADescripcion: String): Boolean; begin Result := True; ShowHourglassCursor; try with ASubFamilias.DataTable do begin DisableControls; First; if not Locate(fld_SubFamiliasDESCRIPCION, ADescripcion, []) then Result := False; EnableControls; end; finally HideHourglassCursor; end; end; end.