AbetoDesign_FactuGES2/Source/Modulos/Contabilidad/Controller/uCuentasEspecialesController.pas

301 lines
9.0 KiB
ObjectPascal

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.