unit uUbicacionesAlmacenController; interface uses Classes, SysUtils, uDADataTable, uEditorDBItem, uIDataModuleAlmacenes, uBizUbicacionesAlmacen, uControllerBase; type IUbicacionesAlmacenController = interface(IControllerBase) ['{3604C8C7-264D-4B7A-B3A8-FD8C33509945}'] function BuscarTodos: IBizUbicacionAlmacen; procedure VerTodos(AUbicacionesAlmacen: IBizUbicacionAlmacen); procedure Anadir(AUbicacionAlmacen : IBizUbicacionAlmacen); function Eliminar(AUbicacionAlmacen : IBizUbicacionAlmacen): Boolean; function Guardar(AUbicacionAlmacen : IBizUbicacionAlmacen): Boolean; procedure DescartarCambios(AUbicacionAlmacen : IBizUbicacionAlmacen); function Localizar(AUbicacionesAlmacen: IBizUbicacionAlmacen; ADescripcion:String): Boolean; function DarListaUbicacionesAlmacen: TStringList; end; TUbicacionesAlmacenController = class(TControllerBase, IUbicacionesAlmacenController) protected FDataModule : IDataModuleAlmacenes; procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); override; function CreateEditor(const AName : String; const IID: TGUID; out Intf): Boolean; function ValidarUbicacionAlmacen(AUbicacionAlmacen: IBizUbicacionAlmacen): Boolean; procedure AsignarDataModule; virtual; public constructor Create; override; destructor Destroy; override; function Eliminar(AUbicacionAlmacen : IBizUbicacionAlmacen): Boolean; function Guardar(AUbicacionAlmacen : IBizUbicacionAlmacen): Boolean; procedure DescartarCambios(AUbicacionAlmacen : IBizUbicacionAlmacen); virtual; procedure Anadir(AUbicacionAlmacen : IBizUbicacionAlmacen); function BuscarTodos: IBizUbicacionAlmacen; procedure VerTodos(AUbicacionesAlmacen: IBizUbicacionAlmacen); function Localizar(AUbicacionesAlmacen: IBizUbicacionAlmacen; ADescripcion:String): Boolean; function DarListaUbicacionesAlmacen: TStringList; end; implementation uses cxControls, DB, uEditorRegistryUtils, uIEditorUbicacionesAlmacen, uDataModuleAlmacenes, uDAInterfaces, uDataTableUtils, schAlmacenesClient_Intf, uDateUtils, uROTypes, DateUtils, Controls, Windows; { TUbicacionesAlmacenController } procedure TUbicacionesAlmacenController.Anadir(AUbicacionAlmacen: IBizUbicacionAlmacen); begin AUbicacionAlmacen.Insert; end; procedure TUbicacionesAlmacenController.AsignarDataModule; begin FDataModule := TDataModuleAlmacenes.Create(Nil); end; function TUbicacionesAlmacenController.BuscarTodos: IBizUbicacionAlmacen; begin Result := FDataModule.GetUbicacionesAlmacen; end; constructor TUbicacionesAlmacenController.Create; begin inherited; AsignarDataModule; end; function TUbicacionesAlmacenController.CreateEditor(const AName: String; const IID: TGUID; out Intf): Boolean; begin Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf); end; function TUbicacionesAlmacenController.DarListaUbicacionesAlmacen: TStringList; var AUbicacionesAlmacen: IBizUbicacionAlmacen; begin AUbicacionesAlmacen := BuscarTodos; AUbicacionesAlmacen.DataTable.Active := True; Result := TStringList.Create; try with Result do begin AUbicacionesAlmacen.DataTable.First; while not AUbicacionesAlmacen.DataTable.EOF do begin Add(AUbicacionesAlmacen.DESCRIPCION); AUbicacionesAlmacen.DataTable.Next; end; end; finally AUbicacionesAlmacen := NIL; end; end; procedure TUbicacionesAlmacenController.DescartarCambios(AUbicacionAlmacen: IBizUbicacionAlmacen); begin if not Assigned(AUbicacionAlmacen) then raise Exception.Create ('UbicacionAlmacen no asignado'); ShowHourglassCursor; try if (AUbicacionAlmacen.State in dsEditModes) then AUbicacionAlmacen.Cancel; AUbicacionAlmacen.DataTable.CancelUpdates; finally HideHourglassCursor; end; end; destructor TUbicacionesAlmacenController.Destroy; begin FDataModule := Nil; inherited; end; function TUbicacionesAlmacenController.ValidarUbicacionAlmacen(AUbicacionAlmacen: IBizUbicacionAlmacen): Boolean; begin if not Assigned(AUbicacionAlmacen) then raise Exception.Create ('UbicacionAlmacen no asignada'); if (AUbicacionAlmacen.DataTable.State in dsEditModes) then AUbicacionAlmacen.DataTable.Post; if Length(AUbicacionAlmacen.DESCRIPCION) = 0 then raise Exception.Create('Debe indicar al menos la descripción de esta ubicación.'); Result := True; end; procedure TUbicacionesAlmacenController.VerTodos(AUbicacionesAlmacen: IBizUbicacionAlmacen); var AEditor : IEditorUbicacionesAlmacen; begin AEditor := NIL; CreateEditor('EditorUbicacionesAlmacen', IEditorUbicacionesAlmacen, AEditor); if Assigned(AEditor) then try AEditor.Controller := Self; //OJO ORDEN MUY IMPORTANTE AEditor.UbicacionesAlmacen := AUbicacionesAlmacen; AEditor.ShowModal; finally AEditor.Release; AEditor := NIL; end; end; function TUbicacionesAlmacenController.Eliminar(AUbicacionAlmacen: IBizUbicacionAlmacen): Boolean; begin if not Assigned(AUbicacionAlmacen) then raise Exception.Create ('UbicacionAlmacen no asignada'); ShowHourglassCursor; try if (AUbicacionAlmacen.State in dsEditModes) then AUbicacionAlmacen.Cancel; AUbicacionAlmacen.Delete; AUbicacionAlmacen.DataTable.ApplyUpdates; HideHourglassCursor; Result := True; finally HideHourglassCursor; end; end; procedure TUbicacionesAlmacenController.RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); begin inherited; // end; function TUbicacionesAlmacenController.Guardar(AUbicacionAlmacen: IBizUbicacionAlmacen): Boolean; begin Result := False; if ValidarUbicacionAlmacen(AUbicacionAlmacen) then begin ShowHourglassCursor; try if (AUbicacionAlmacen.DataTable.State in dsEditModes) then AUbicacionAlmacen.DataTable.Post; AUbicacionAlmacen.DataTable.ApplyUpdates; Result := True; finally HideHourglassCursor; end; end; end; function TUbicacionesAlmacenController.Localizar(AUbicacionesAlmacen: IBizUbicacionAlmacen; ADescripcion: String): Boolean; begin Result := True; ShowHourglassCursor; try with AUbicacionesAlmacen.DataTable do begin DisableControls; First; if not Locate(fld_AlmacenesUbicacionesDESCRIPCION, ADescripcion, []) then Result := False; EnableControls; end; finally HideHourglassCursor; end; end; end.