unit uReferenciasController; interface uses Classes, SysUtils, uDADataTable, uControllerBase, uIDataModuleReferencias, uBizReferencias; type IReferenciasController = interface(IObservador) ['{832E33B0-3228-4519-A740-F551DF3004DD}'] function BuscarTodos: IBizReferencia; procedure VerTodos(AReferencias: IBizReferencia); function Guardar(AReferencia : IBizReferencia): Boolean; procedure DescartarCambios(AReferencia : IBizReferencia); end; TReferenciasController = class(TObservador, IReferenciasController) protected FDataModule : IDataModuleReferencias; // procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); override; function CreateEditor(const AName : String; const IID: TGUID; out Intf): Boolean; function ValidarReferencia(AReferencia: IBizReferencia): Boolean; procedure AsignarDataModule; public constructor Create; override; destructor Destroy; override; function Guardar(AReferencia : IBizReferencia): Boolean; virtual; procedure DescartarCambios(AReferencia : IBizReferencia); virtual; function BuscarTodos: IBizReferencia; procedure VerTodos(AReferencias: IBizReferencia); end; implementation uses cxControls, DB, uEditorRegistryUtils, schReferenciasClient_Intf, uIEditorReferencias, uDataModuleReferencias, uDAInterfaces, uDataTableUtils, uDialogUtils, uDateUtils, uROTypes, DateUtils, Controls, Windows; { TReferenciasController } procedure TReferenciasController.AsignarDataModule; begin FDataModule := TDataModuleReferencias.Create(Nil); end; function TReferenciasController.BuscarTodos: IBizReferencia; begin Result := FDataModule.GetItems; end; constructor TReferenciasController.Create; begin inherited; AsignarDataModule; end; function TReferenciasController.CreateEditor(const AName: String; const IID: TGUID; out Intf): Boolean; begin Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf); end; procedure TReferenciasController.DescartarCambios(AReferencia: IBizReferencia); begin if not Assigned(AReferencia) then raise Exception.Create ('Forma de pago no asignada'); ShowHourglassCursor; try if (AReferencia.State in dsEditModes) then AReferencia.Cancel; AReferencia.DataTable.CancelUpdates; finally HideHourglassCursor; end; end; destructor TReferenciasController.Destroy; begin FDataModule := NIL; inherited; end; function TReferenciasController.ValidarReferencia(AReferencia: IBizReferencia): Boolean; begin Result := False; if not Assigned(AReferencia) then raise Exception.Create ('Referencia no asignada'); if (AReferencia.DataTable.State in dsEditModes) then AReferencia.DataTable.Post; // if Length(AReferencia.VALOR) = 0 then // raise Exception.Create('Debe indicar un código para esta referencia.'); Result := True; end; procedure TReferenciasController.VerTodos(AReferencias: IBizReferencia); var AEditor : IEditorReferencias; begin AEditor := NIL; ShowHourglassCursor; try CreateEditor('EditorReferencias', IEditorReferencias, AEditor); if Assigned(AEditor) then with AEditor do begin Referencias := AReferencias; ShowModal; Release; end; finally AEditor := NIL; HideHourglassCursor; end; end; { procedure TReferenciasController.RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); begin inherited; // end; } function TReferenciasController.Guardar(AReferencia: IBizReferencia): Boolean; var NuevoID : Integer; begin Result := False; if ValidarReferencia(AReferencia) then begin ShowHourglassCursor; try AReferencia.DataTable.ApplyUpdates; Result := True; finally HideHourglassCursor; end; end; end; end.