unit uProcedenciasClienteController; interface uses Classes, SysUtils, uDADataTable, uEditorDBItem, uIDataModuleClientes, uBizProcedenciasCliente, uControllerBase; type IProcedenciasClienteController = interface(IControllerBase) ['{C2D71CED-DCD6-47F1-8BCA-1027DA4A6385}'] function BuscarTodos: IBizProcedenciaCliente; procedure VerTodos(AProcedenciasCliente: IBizProcedenciaCliente); procedure Anadir(AProcedenciaCliente : IBizProcedenciaCliente); function Eliminar(AProcedenciaCliente : IBizProcedenciaCliente): Boolean; function Guardar(AProcedenciaCliente : IBizProcedenciaCliente): Boolean; procedure DescartarCambios(AProcedenciaCliente : IBizProcedenciaCliente); function Localizar(AProcedenciasCliente: IBizProcedenciaCliente; ADescripcion:String): Boolean; function DarListaProcedenciasCliente: TStringList; end; TProcedenciasClienteController = class(TControllerBase, IProcedenciasClienteController) protected FDataModule : IDataModuleClientes; procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); override; function CreateEditor(const AName : String; const IID: TGUID; out Intf): Boolean; function ValidarProcedenciaCliente(AProcedenciaCliente: IBizProcedenciaCliente): Boolean; procedure AsignarDataModule; virtual; public constructor Create; override; destructor Destroy; override; function Eliminar(AProcedenciaCliente : IBizProcedenciaCliente): Boolean; function Guardar(AProcedenciaCliente : IBizProcedenciaCliente): Boolean; procedure DescartarCambios(AProcedenciaCliente : IBizProcedenciaCliente); virtual; procedure Anadir(AProcedenciaCliente : IBizProcedenciaCliente); function BuscarTodos: IBizProcedenciaCliente; procedure VerTodos(AProcedenciasCliente: IBizProcedenciaCliente); function Localizar(AProcedenciasCliente: IBizProcedenciaCliente; ADescripcion:String): Boolean; function DarListaProcedenciasCliente: TStringList; end; implementation uses cxControls, DB, uEditorRegistryUtils, uIEditorProcedenciasCliente, uDataModuleClientes, uDAInterfaces, uDataTableUtils, uDateUtils, uROTypes, DateUtils, Controls, Windows, schContactosClient_Intf; { TProcedenciasClienteController } procedure TProcedenciasClienteController.Anadir(AProcedenciaCliente: IBizProcedenciaCliente); begin AProcedenciaCliente.Insert; end; procedure TProcedenciasClienteController.AsignarDataModule; begin FDataModule := TDataModuleClientes.Create(Nil); end; function TProcedenciasClienteController.BuscarTodos: IBizProcedenciaCliente; begin Result := FDataModule.GetProcedenciasCliente; end; constructor TProcedenciasClienteController.Create; begin inherited; AsignarDataModule; end; function TProcedenciasClienteController.CreateEditor(const AName: String; const IID: TGUID; out Intf): Boolean; begin Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf); end; function TProcedenciasClienteController.DarListaProcedenciasCliente: TStringList; var AProcedenciasCliente: IBizProcedenciaCliente; begin AProcedenciasCliente := BuscarTodos; AProcedenciasCliente.DataTable.Active := True; Result := TStringList.Create; try with Result do begin AProcedenciasCliente.DataTable.First; while not AProcedenciasCliente.DataTable.EOF do begin Add(AProcedenciasCliente.DESCRIPCION); AProcedenciasCliente.DataTable.Next; end; end; finally AProcedenciasCliente := NIL; end; end; procedure TProcedenciasClienteController.DescartarCambios(AProcedenciaCliente: IBizProcedenciaCliente); begin if not Assigned(AProcedenciaCliente) then raise Exception.Create ('ProcedenciaCliente no asignado'); ShowHourglassCursor; try if (AProcedenciaCliente.State in dsEditModes) then AProcedenciaCliente.Cancel; AProcedenciaCliente.DataTable.CancelUpdates; finally HideHourglassCursor; end; end; destructor TProcedenciasClienteController.Destroy; begin FDataModule := Nil; inherited; end; function TProcedenciasClienteController.ValidarProcedenciaCliente(AProcedenciaCliente: IBizProcedenciaCliente): Boolean; begin if not Assigned(AProcedenciaCliente) then raise Exception.Create ('ProcedenciaCliente no asignada'); if (AProcedenciaCliente.DataTable.State in dsEditModes) then AProcedenciaCliente.DataTable.Post; if Length(AProcedenciaCliente.DESCRIPCION) = 0 then raise Exception.Create('Debe indicar al menos la descripción de esta procedencia.'); Result := True; end; procedure TProcedenciasClienteController.VerTodos(AProcedenciasCliente: IBizProcedenciaCliente); var AEditor : IEditorProcedenciasCliente; begin AEditor := NIL; CreateEditor('EditorProcedenciasCliente', IEditorProcedenciasCliente, AEditor); if Assigned(AEditor) then try AEditor.Controller := Self; //OJO ORDEN MUY IMPORTANTE AEditor.ProcedenciasCliente := AProcedenciasCliente; AEditor.ShowModal; finally AEditor.Release; AEditor := NIL; end; end; function TProcedenciasClienteController.Eliminar(AProcedenciaCliente: IBizProcedenciaCliente): Boolean; begin if not Assigned(AProcedenciaCliente) then raise Exception.Create ('ProcedenciaCliente no asignada'); ShowHourglassCursor; try if (AProcedenciaCliente.State in dsEditModes) then AProcedenciaCliente.Cancel; AProcedenciaCliente.Delete; AProcedenciaCliente.DataTable.ApplyUpdates; HideHourglassCursor; Result := True; finally HideHourglassCursor; end; end; procedure TProcedenciasClienteController.RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); begin inherited; // end; function TProcedenciasClienteController.Guardar(AProcedenciaCliente: IBizProcedenciaCliente): Boolean; begin Result := False; if ValidarProcedenciaCliente(AProcedenciaCliente) then begin ShowHourglassCursor; try if (AProcedenciaCliente.DataTable.State in dsEditModes) then AProcedenciaCliente.DataTable.Post; AProcedenciaCliente.DataTable.ApplyUpdates; Result := True; finally HideHourglassCursor; end; end; end; function TProcedenciasClienteController.Localizar(AProcedenciasCliente: IBizProcedenciaCliente; ADescripcion: String): Boolean; begin Result := True; ShowHourglassCursor; try with AProcedenciasCliente.DataTable do begin DisableControls; First; if not Locate(fld_ProcedenciasClienteDESCRIPCION, ADescripcion, []) then Result := False; EnableControls; end; finally HideHourglassCursor; end; end; end.