unit uCuentasEspecialesController; interface uses Classes, SysUtils, uDADataTable, uControllerBase, uBizCuentasEspeciales, uIDataModuleContabilidad; type ICuentasEspecialesController = interface(IControllerBase) ['{94E5F2B6-64C8-4331-B9CB-3ED730478529}'] function BuscarTodos: IBizCuentaEspecial; function Buscar(ID: Integer): IBizCuentaEspecial; procedure VerTodos(ACuentasEspeciales: IBizCuentaEspecial); procedure Ver(ACuentaEspecial: IBizCuentaEspecial); procedure Anadir(ACuentaEspecial : IBizCuentaEspecial); function Eliminar(ACuentaEspecial : IBizCuentaEspecial): Boolean; function Guardar(ACuentaEspecial : IBizCuentaEspecial): Boolean; procedure DescartarCambios(ACuentaEspecial : IBizCuentaEspecial); function Localizar(ACuentasEspeciales: IBizCuentaEspecial; ADescripcion:String): Boolean; function DarListaCuentasEspeciales: TStringList; function ExtraerSeleccionados(ACuentasEspeciales: IBizCuentaEspecial) : IBizCuentaEspecial; function ElegirCuentaEspecial(ACuentasEspeciales : IBizCuentaEspecial; AMensaje: String; AMultiSelect: Boolean): IBizCuentaEspecial; end; TCuentasEspecialesController = class(TControllerBase, ICuentasEspecialesController) protected FDataModule : IDataModuleContabilidad; procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); override; function CreateEditor(const AName : String; const IID: TGUID; out Intf): Boolean; function ValidarCuentaEspecial(ACuentaEspecial: IBizCuentaEspecial): Boolean; procedure AsignarDataModule; public constructor Create; override; destructor Destroy; override; function Eliminar(ACuentaEspecial : IBizCuentaEspecial): Boolean; function Guardar(ACuentaEspecial : IBizCuentaEspecial): Boolean; virtual; procedure DescartarCambios(ACuentaEspecial : IBizCuentaEspecial); virtual; procedure Anadir(ACuentaEspecial : IBizCuentaEspecial); function BuscarTodos: IBizCuentaEspecial; function Buscar(ID: Integer): IBizCuentaEspecial; procedure VerTodos(ACuentasEspeciales: IBizCuentaEspecial); procedure Ver(ACuentaEspecial: IBizCuentaEspecial); function Localizar(ACuentasEspeciales: IBizCuentaEspecial; ADescripcion:String): Boolean; function DarListaCuentasEspeciales: TStringList; function ExtraerSeleccionados(ACuentasEspeciales: IBizCuentaEspecial) : IBizCuentaEspecial; function ElegirCuentaEspecial(ACuentasEspeciales : IBizCuentaEspecial; AMensaje: String; AMultiSelect: Boolean): IBizCuentaEspecial; end; implementation uses cxControls, DB, uEditorRegistryUtils, schContabilidadClient_Intf, uIEditorCuentasEspeciales, uIEditorCuentaEspecial, uIEditorElegirCuentasEspeciales, uDataModuleContabilidad, uDAInterfaces, uDataTableUtils, uDialogUtils, uDateUtils, uROTypes, DateUtils, Controls, Windows; { TCuentasEspecialesController } procedure TCuentasEspecialesController.Anadir(ACuentaEspecial: IBizCuentaEspecial); begin ACuentaEspecial.Insert; end; procedure TCuentasEspecialesController.AsignarDataModule; begin FDataModule := TDataModuleContabilidad.Create(Nil); end; function TCuentasEspecialesController.Buscar(ID: Integer): IBizCuentaEspecial; var Condicion: TDAWhereExpression; begin ShowHourglassCursor; try Result := BuscarTodos; with Result.DataTable.DynamicWhere do begin // (ID = :ID) Condicion := NewBinaryExpression(NewField('', fld_CuentasEspecialesID), NewConstant(ID, datInteger), dboEqual); if IsEmpty then Expression := Condicion else Expression := NewBinaryExpression(Expression, Condicion, dboAnd); end; finally HideHourglassCursor; end; end; function TCuentasEspecialesController.BuscarTodos: IBizCuentaEspecial; begin Result := FDataModule.GetCuentaEspecialItems; end; constructor TCuentasEspecialesController.Create; begin inherited; AsignarDataModule; end; function TCuentasEspecialesController.CreateEditor(const AName: String; const IID: TGUID; out Intf): Boolean; begin Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf); end; function TCuentasEspecialesController.DarListaCuentasEspeciales: TStringList; var ACuentasEspeciales: IBizCuentaEspecial; begin ACuentasEspeciales := BuscarTodos; ACuentasEspeciales.DataTable.Active := True; Result := TStringList.Create; try with Result do begin ACuentasEspeciales.DataTable.First; while not ACuentasEspeciales.DataTable.EOF do begin Add(ACuentasEspeciales.DESCRIPCION); ACuentasEspeciales.DataTable.Next; end; end; finally ACuentasEspeciales := NIL; end; end; procedure TCuentasEspecialesController.DescartarCambios(ACuentaEspecial: IBizCuentaEspecial); begin if not Assigned(ACuentaEspecial) then raise Exception.Create ('CuentaEspecial no asignado'); ShowHourglassCursor; try if (ACuentaEspecial.State in dsEditModes) then ACuentaEspecial.Cancel; ACuentaEspecial.DataTable.CancelUpdates; finally HideHourglassCursor; end; end; destructor TCuentasEspecialesController.Destroy; begin FDataModule:= NIL; inherited; end; function TCuentasEspecialesController.ValidarCuentaEspecial(ACuentaEspecial: IBizCuentaEspecial): Boolean; begin Result := False; if not Assigned(ACuentaEspecial) then raise Exception.Create ('CuentaEspecial no asignado'); if (ACuentaEspecial.DataTable.State in dsEditModes) then ACuentaEspecial.DataTable.Post; if Length(ACuentaEspecial.DESCRIPCION) = 0 then raise Exception.Create('Debe indicar un nombre para este CuentaEspecial.'); Result := True; end; procedure TCuentasEspecialesController.Ver(ACuentaEspecial: IBizCuentaEspecial); var AEditor : IEditorCuentaEspecial; begin AEditor := NIL; CreateEditor('EditorCuentaEspecial', IEditorCuentaEspecial, AEditor); if Assigned(AEditor) then try AEditor.CuentaEspecial := ACuentaEspecial; AEditor.ShowModal; finally AEditor.Release; AEditor := NIL; end; end; procedure TCuentasEspecialesController.VerTodos(ACuentasEspeciales: IBizCuentaEspecial); var AEditor : IEditorCuentasEspeciales; begin AEditor := NIL; CreateEditor('EditorCuentasEspeciales', IEditorCuentasEspeciales, AEditor); if Assigned(AEditor) then try AEditor.Controller := Self; //OJO ORDEN MUY IMPORTANTE AEditor.CuentasEspeciales := ACuentasEspeciales; AEditor.ShowModal; finally AEditor.Release; AEditor := NIL; end; end; function TCuentasEspecialesController.ElegirCuentaEspecial(ACuentasEspeciales: IBizCuentaEspecial; AMensaje: String; AMultiSelect: Boolean): IBizCuentaEspecial; var AEditor : IEditorElegirCuentasEspeciales; begin Result := NIL; CreateEditor('EditorElegirCuentasEspeciales', IEditorElegirCuentasEspeciales, AEditor); if Assigned(AEditor) then try AEditor.CuentasEspeciales := ACuentasEspeciales; AEditor.Controller := Self; AEditor.Mensaje := AMensaje; if IsPositiveResult(AEditor.ShowModal) then Result := AEditor.CuentasEspecialesSeleccionados; finally AEditor.Release; AEditor := NIL; end; end; function TCuentasEspecialesController.Eliminar(ACuentaEspecial: IBizCuentaEspecial): Boolean; begin if not Assigned(ACuentaEspecial) then raise Exception.Create ('CuentaEspecial no asignado'); ShowHourglassCursor; try if (ACuentaEspecial.State in dsEditModes) then ACuentaEspecial.Cancel; ACuentaEspecial.Delete; ACuentaEspecial.DataTable.ApplyUpdates; HideHourglassCursor; Result := True; finally HideHourglassCursor; end; end; function TCuentasEspecialesController.ExtraerSeleccionados(ACuentasEspeciales: IBizCuentaEspecial): IBizCuentaEspecial; var ASeleccionados : IBizCuentaEspecial; begin ASeleccionados := Self.Buscar(ID_NULO); CopyDataTableDA5(ACuentasEspeciales.DataTable, ASeleccionados.DataTable, True); Result := ASeleccionados; end; procedure TCuentasEspecialesController.RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); begin inherited; // end; function TCuentasEspecialesController.Guardar(ACuentaEspecial: IBizCuentaEspecial): Boolean; begin Result := False; if ValidarCuentaEspecial(ACuentaEspecial) then begin ShowHourglassCursor; try ACuentaEspecial.DataTable.ApplyUpdates; Result := True; finally HideHourglassCursor; end; end; end; function TCuentasEspecialesController.Localizar(ACuentasEspeciales: IBizCuentaEspecial; ADescripcion: String): Boolean; begin Result := True; ShowHourglassCursor; try with ACuentasEspeciales.DataTable do begin DisableControls; First; if not Locate(fld_CuentasEspecialesDESCRIPCION, ADescripcion, []) then Result := False; EnableControls; end; finally HideHourglassCursor; end; end; end.