unit uUnidadesMedidaController; interface uses Classes, SysUtils, uDADataTable, uControllerBase, uEditorDBItem, uIDataModuleUnidadesMedida, uBizUnidadesMedida; type IUnidadesMedidaController = interface(IControllerBase) ['{8D56360B-0AAA-41FA-9C48-90C586B07E37}'] function BuscarTodos: IBizUnidadMedida; procedure VerTodos(AUnidadesMedida: IBizUnidadMedida); procedure Anadir(AUnidadMedida : IBizUnidadMedida); function Eliminar(AUnidadMedida : IBizUnidadMedida): Boolean; function Guardar(AUnidadMedida : IBizUnidadMedida): Boolean; procedure DescartarCambios(AUnidadMedida : IBizUnidadMedida); function Localizar(AUnidadesMedida: IBizUnidadMedida; ADescripcion:String): Boolean; function DarListaUnidadesMedida: TStringList; end; TUnidadesMedidaController = class(TControllerBase, IUnidadesMedidaController) protected FDataModule : IDataModuleUnidadesMedida; procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); override; function CreateEditor(const AName : String; const IID: TGUID; out Intf): Boolean; function ValidarUnidadMedida(AUnidadMedida: IBizUnidadMedida): 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(AUnidadMedida : IBizUnidadMedida): Boolean; function Guardar(AUnidadMedida : IBizUnidadMedida): Boolean; procedure DescartarCambios(AUnidadMedida : IBizUnidadMedida); virtual; procedure Anadir(AUnidadMedida : IBizUnidadMedida); function BuscarTodos: IBizUnidadMedida; procedure VerTodos(AUnidadesMedida: IBizUnidadMedida); function Localizar(AUnidadesMedida: IBizUnidadMedida; ADescripcion:String): Boolean; function DarListaUnidadesMedida: TStringList; end; implementation uses cxControls, DB, uEditorRegistryUtils, schUnidadesMedidaClient_Intf, uIEditorUnidadesMedida, uDataModuleUnidadesMedida, uDAInterfaces, uDataTableUtils, uDateUtils, uROTypes, DateUtils, Controls, Windows; { TUnidadesMedidaController } procedure TUnidadesMedidaController.Anadir(AUnidadMedida: IBizUnidadMedida); begin AUnidadMedida.Insert; end; procedure TUnidadesMedidaController.AsignarDataModule; begin FDataModule := TDataModuleUnidadesMedida.Create(Nil); end; function TUnidadesMedidaController.BuscarTodos: IBizUnidadMedida; begin Result := FDataModule.GetItems; end; constructor TUnidadesMedidaController.Create; begin inherited; AsignarDataModule; end; function TUnidadesMedidaController.CreateEditor(const AName: String; const IID: TGUID; out Intf): Boolean; begin Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf); end; function TUnidadesMedidaController.DarListaUnidadesMedida: TStringList; var AUnidadesMedida: IBizUnidadMedida; begin AUnidadesMedida := BuscarTodos; AUnidadesMedida.DataTable.Active := True; Result := TStringList.Create; try with Result do begin AUnidadesMedida.DataTable.First; while not AUnidadesMedida.DataTable.EOF do begin Add(AUnidadesMedida.DESCRIPCION); AUnidadesMedida.DataTable.Next; end; end; finally AUnidadesMedida := NIL; end; end; procedure TUnidadesMedidaController.DescartarCambios(AUnidadMedida: IBizUnidadMedida); begin if not Assigned(AUnidadMedida) then raise Exception.Create ('Almacen no asignado'); ShowHourglassCursor; try if (AUnidadMedida.State in dsEditModes) then AUnidadMedida.Cancel; AUnidadMedida.DataTable.CancelUpdates; finally HideHourglassCursor; end; end; destructor TUnidadesMedidaController.Destroy; begin FDataModule := Nil; inherited; end; function TUnidadesMedidaController.ValidarUnidadMedida(AUnidadMedida: IBizUnidadMedida): Boolean; begin Result := False; if not Assigned(AUnidadMedida) then raise Exception.Create ('Unidad de medida no asignada'); if (AUnidadMedida.DataTable.State in dsEditModes) then AUnidadMedida.DataTable.Post; Result := True; end; procedure TUnidadesMedidaController.ValidarObjetos; begin // end; procedure TUnidadesMedidaController.VerTodos(AUnidadesMedida: IBizUnidadMedida); var AEditor : IEditorUnidadesMedida; begin AEditor := NIL; CreateEditor('EditorUnidadesMedida', IEditorUnidadesMedida, AEditor); if Assigned(AEditor) then try AEditor.Controller := Self; //OJO ORDEN MUY IMPORTANTE AEditor.UnidadesMedida := AUnidadesMedida; AEditor.ShowModal; finally AEditor.Release; AEditor := NIL; end; end; function TUnidadesMedidaController.Eliminar(AUnidadMedida: IBizUnidadMedida): Boolean; begin Result := False; if not Assigned(AUnidadMedida) then raise Exception.Create ('Almacen no asignada'); ShowHourglassCursor; try if (AUnidadMedida.State in dsEditModes) then AUnidadMedida.Cancel; AUnidadMedida.Delete; AUnidadMedida.DataTable.ApplyUpdates; HideHourglassCursor; Result := True; finally HideHourglassCursor; end; end; procedure TUnidadesMedidaController.RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); begin inherited; // end; function TUnidadesMedidaController.Guardar(AUnidadMedida: IBizUnidadMedida): Boolean; begin Result := False; if not Assigned(AUnidadMedida) then raise Exception.Create ('Almacen no asignada'); ValidarObjetos; if ValidarUnidadMedida(AUnidadMedida) then begin ShowHourglassCursor; try AUnidadMedida.DataTable.ApplyUpdates; Result := True; finally HideHourglassCursor; end; end; end; function TUnidadesMedidaController.Localizar(AUnidadesMedida: IBizUnidadMedida; ADescripcion: String): Boolean; begin Result := True; ShowHourglassCursor; try with AUnidadesMedida.DataTable do begin DisableControls; First; if not Locate(fld_UnidadesMedidaDESCRIPCION, ADescripcion, []) then Result := False; EnableControls; end; finally HideHourglassCursor; end; end; end.