unit uTarifasController; interface uses Classes, SysUtils, uDADataTable, uEditorDBItem, uIDataModuleTarifas, uBizTarifas, uControllerBase; type ITarifasController = interface(IControllerBase) ['{8BE07EA4-9B66-426A-93C7-653D8594AE81}'] function BuscarTodos: IBizTarifa; procedure VerTodos(ATarifas: IBizTarifa); procedure Anadir(ATarifa : IBizTarifa); function Eliminar(ATarifa : IBizTarifa): Boolean; function Guardar(ATarifa : IBizTarifa): Boolean; procedure DescartarCambios(ATarifa : IBizTarifa); function Localizar(ATarifas: IBizTarifa; ADescripcion:String): Boolean; function DarListaTarifas: TStringList; function elegirTarifa: String; end; TTarifasController = class(TControllerBase, ITarifasController) protected FDataModule : IDataModuleTarifas; procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); override; function CreateEditor(const AName : String; const IID: TGUID; out Intf): Boolean; function ValidarAlmacen(ATarifa: IBizTarifa): 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(ATarifa : IBizTarifa): Boolean; function Guardar(ATarifa : IBizTarifa): Boolean; procedure DescartarCambios(ATarifa : IBizTarifa); virtual; procedure Anadir(ATarifa : IBizTarifa); function BuscarTodos: IBizTarifa; procedure VerTodos(ATarifas: IBizTarifa); function Localizar(ATarifas: IBizTarifa; ADescripcion:String): Boolean; function DarListaTarifas: TStringList; function elegirTarifa: String; end; implementation uses cxControls, DB, uEditorRegistryUtils, schTarifasClient_Intf, uIEditorTarifas, uDataModuleTarifas, uDAInterfaces, uDataTableUtils, uIEditorElegirTarifa, uDateUtils, uROTypes, DateUtils, Controls, Windows; { TTarifasController } procedure TTarifasController.Anadir(ATarifa: IBizTarifa); begin ATarifa.Insert; end; procedure TTarifasController.AsignarDataModule; begin FDataModule := TDataModuleTarifas.Create(Nil); end; function TTarifasController.BuscarTodos: IBizTarifa; begin Result := FDataModule.GetItems; end; constructor TTarifasController.Create; begin inherited; AsignarDataModule; end; function TTarifasController.CreateEditor(const AName: String; const IID: TGUID; out Intf): Boolean; begin Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf); end; function TTarifasController.DarListaTarifas: TStringList; var ATarifas: IBizTarifa; begin ATarifas := BuscarTodos; ATarifas.DataTable.Active := True; Result := TStringList.Create; try with Result do begin ATarifas.DataTable.First; while not ATarifas.DataTable.EOF do begin Add(ATarifas.DESCRIPCION); ATarifas.DataTable.Next; end; end; finally ATarifas := NIL; end; end; procedure TTarifasController.DescartarCambios(ATarifa: IBizTarifa); begin if not Assigned(ATarifa) then raise Exception.Create ('Tarifa no asignado'); ShowHourglassCursor; try if (ATarifa.State in dsEditModes) then ATarifa.Cancel; ATarifa.DataTable.CancelUpdates; finally HideHourglassCursor; end; end; destructor TTarifasController.Destroy; begin FDataModule := Nil; inherited; end; function TTarifasController.elegirTarifa: String; var AEditor : IEditorElegirTarifa; begin Result := ''; CreateEditor('EditorElegirTarifa', IEditorElegirTarifa, AEditor); if Assigned(AEditor) then try if (AEditor.ShowModal = mrOk) then Result := AEditor.Tarifa; finally AEditor.Release; AEditor := NIL; end; end; function TTarifasController.ValidarAlmacen(ATarifa: IBizTarifa): Boolean; begin Result := False; if not Assigned(ATarifa) then raise Exception.Create ('Tarifa no asignada'); if (ATarifa.DataTable.State in dsEditModes) then ATarifa.DataTable.Post; Result := True; end; procedure TTarifasController.ValidarObjetos; begin // end; procedure TTarifasController.VerTodos(ATarifas: IBizTarifa); var AEditor : IEditorTarifas; begin AEditor := NIL; CreateEditor('EditorTarifas', IEditorTarifas, AEditor); if Assigned(AEditor) then try AEditor.Controller := Self; //OJO ORDEN MUY IMPORTANTE AEditor.Tarifas := ATarifas; AEditor.ShowModal; finally AEditor.Release; AEditor := NIL; end; end; function TTarifasController.Eliminar(ATarifa: IBizTarifa): Boolean; begin Result := False; if not Assigned(ATarifa) then raise Exception.Create ('Tarifa no asignada'); ShowHourglassCursor; try if (ATarifa.State in dsEditModes) then ATarifa.Cancel; ATarifa.Delete; ATarifa.DataTable.ApplyUpdates; Result := True; finally HideHourglassCursor; end; end; procedure TTarifasController.RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); begin inherited; // end; function TTarifasController.Guardar(ATarifa: IBizTarifa): Boolean; begin Result := False; if not Assigned(ATarifa) then raise Exception.Create ('Tarifa no asignada'); ValidarObjetos; if ValidarAlmacen(ATarifa) then begin ShowHourglassCursor; try ATarifa.DataTable.ApplyUpdates; Result := True; finally HideHourglassCursor; end; end; end; function TTarifasController.Localizar(ATarifas: IBizTarifa; ADescripcion: String): Boolean; begin Result := True; ShowHourglassCursor; try with ATarifas.DataTable do begin DisableControls; First; if not Locate(fld_TarifasDESCRIPCION, ADescripcion, []) then Result := False; EnableControls; end; finally HideHourglassCursor; end; end; end.