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

300 lines
7.8 KiB
ObjectPascal

unit uBalancesController;
interface
uses
Classes, SysUtils, uDADataTable, uControllerBase,
uBizBalances, uIDataModuleContabilidad;
type
IBalancesController = interface(IControllerBase)
['{94E5F2B6-64C8-4331-B9CB-3ED730478529}']
function BuscarTodos: IBizBalance;
function Buscar(ID: Integer): IBizBalance;
procedure VerTodos(ABalances: IBizBalance);
procedure Ver(ABalance: IBizBalance);
procedure Anadir(ABalance : IBizBalance);
function Eliminar(ABalance : IBizBalance): Boolean;
function Guardar(ABalance : IBizBalance): Boolean;
procedure DescartarCambios(ABalance : IBizBalance);
function Localizar(ABalances: IBizBalance; ADescripcion:String): Boolean;
function DarListaBalances: TStringList;
function ExtraerSeleccionados(ABalances: IBizBalance) : IBizBalance;
function ElegirBalance(ABalances : IBizBalance; AMensaje: String; AMultiSelect: Boolean): IBizBalance;
end;
TBalancesController = class(TControllerBase, IBalancesController)
protected
FDataModule : IDataModuleContabilidad;
procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); override;
function CreateEditor(const AName : String; const IID: TGUID; out Intf): Boolean;
function ValidarBalance(ABalance: IBizBalance): Boolean;
procedure AsignarDataModule;
public
constructor Create; override;
destructor Destroy; override;
function Eliminar(ABalance : IBizBalance): Boolean;
function Guardar(ABalance : IBizBalance): Boolean; virtual;
procedure DescartarCambios(ABalance : IBizBalance); virtual;
procedure Anadir(ABalance : IBizBalance);
function BuscarTodos: IBizBalance;
function Buscar(ID: Integer): IBizBalance;
procedure VerTodos(ABalances: IBizBalance);
procedure Ver(ABalance: IBizBalance);
function Localizar(ABalances: IBizBalance; ADescripcion:String): Boolean;
function DarListaBalances: TStringList;
function ExtraerSeleccionados(ABalances: IBizBalance) : IBizBalance;
function ElegirBalance(ABalances : IBizBalance; AMensaje: String; AMultiSelect: Boolean): IBizBalance;
end;
implementation
uses
cxControls, DB, uEditorRegistryUtils, schContabilidadClient_Intf,
uIEditorBalances, uIEditorBalance, uIEditorElegirBalances, uDataModuleContabilidad,
uDAInterfaces, uDataTableUtils, uDialogUtils,
uDateUtils, uROTypes, DateUtils, Controls, Windows;
{ TBalancesController }
procedure TBalancesController.Anadir(ABalance: IBizBalance);
begin
ABalance.Insert;
end;
procedure TBalancesController.AsignarDataModule;
begin
FDataModule := TDataModuleContabilidad.Create(Nil);
end;
function TBalancesController.Buscar(ID: Integer): IBizBalance;
var
Condicion: TDAWhereExpression;
begin
ShowHourglassCursor;
try
Result := BuscarTodos;
with Result.DataTable.DynamicWhere do
begin
// (ID = :ID)
Condicion := NewBinaryExpression(NewField('', fld_BalancesID), NewConstant(ID, datInteger), dboEqual);
if IsEmpty then
Expression := Condicion
else
Expression := NewBinaryExpression(Expression, Condicion, dboAnd);
end;
finally
HideHourglassCursor;
end;
end;
function TBalancesController.BuscarTodos: IBizBalance;
begin
Result := FDataModule.GetBalanceItems;
end;
constructor TBalancesController.Create;
begin
inherited;
AsignarDataModule;
end;
function TBalancesController.CreateEditor(const AName: String; const IID: TGUID; out Intf): Boolean;
begin
Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf);
end;
function TBalancesController.DarListaBalances: TStringList;
var
ABalances: IBizBalance;
begin
ABalances := BuscarTodos;
ABalances.DataTable.Active := True;
Result := TStringList.Create;
try
with Result do
begin
ABalances.DataTable.First;
while not ABalances.DataTable.EOF do
begin
Add(ABalances.REF_BALANCE);
ABalances.DataTable.Next;
end;
end;
finally
ABalances := NIL;
end;
end;
procedure TBalancesController.DescartarCambios(ABalance: IBizBalance);
begin
if not Assigned(ABalance) then
raise Exception.Create ('Balance no asignado');
ShowHourglassCursor;
try
if (ABalance.State in dsEditModes) then
ABalance.Cancel;
ABalance.DataTable.CancelUpdates;
finally
HideHourglassCursor;
end;
end;
destructor TBalancesController.Destroy;
begin
FDataModule:= NIL;
inherited;
end;
function TBalancesController.ValidarBalance(ABalance: IBizBalance): Boolean;
begin
Result := False;
if not Assigned(ABalance) then
raise Exception.Create ('Balance no asignado');
if (ABalance.DataTable.State in dsEditModes) then
ABalance.DataTable.Post;
if Length(ABalance.REF_BALANCE) = 0 then
raise Exception.Create('Debe indicar un nombre para este Balance.');
Result := True;
end;
procedure TBalancesController.Ver(ABalance: IBizBalance);
var
AEditor : IEditorBalance;
begin
AEditor := NIL;
CreateEditor('EditorBalance', IEditorBalance, AEditor);
if Assigned(AEditor) then
try
AEditor.Balance := ABalance;
AEditor.ShowModal;
finally
AEditor.Release;
AEditor := NIL;
end;
end;
procedure TBalancesController.VerTodos(ABalances: IBizBalance);
var
AEditor : IEditorBalances;
begin
AEditor := NIL;
CreateEditor('EditorBalances', IEditorBalances, AEditor);
if Assigned(AEditor) then
try
AEditor.Controller := Self; //OJO ORDEN MUY IMPORTANTE
AEditor.Balances := ABalances;
AEditor.ShowModal;
finally
AEditor.Release;
AEditor := NIL;
end;
end;
function TBalancesController.ElegirBalance(ABalances: IBizBalance; AMensaje: String; AMultiSelect: Boolean): IBizBalance;
var
AEditor : IEditorElegirBalances;
begin
Result := NIL;
CreateEditor('EditorElegirBalances', IEditorElegirBalances, AEditor);
if Assigned(AEditor) then
try
AEditor.Balances := ABalances;
AEditor.Controller := Self;
AEditor.Mensaje := AMensaje;
if IsPositiveResult(AEditor.ShowModal) then
Result := AEditor.BalancesSeleccionados;
finally
AEditor.Release;
AEditor := NIL;
end;
end;
function TBalancesController.Eliminar(ABalance: IBizBalance): Boolean;
begin
if not Assigned(ABalance) then
raise Exception.Create ('Balance no asignado');
ShowHourglassCursor;
try
if (ABalance.State in dsEditModes) then
ABalance.Cancel;
ABalance.Delete;
ABalance.DataTable.ApplyUpdates;
HideHourglassCursor;
Result := True;
finally
HideHourglassCursor;
end;
end;
function TBalancesController.ExtraerSeleccionados(ABalances: IBizBalance): IBizBalance;
var
ASeleccionados : IBizBalance;
begin
ASeleccionados := Self.Buscar(ID_NULO);
CopyDataTableDA5(ABalances.DataTable, ASeleccionados.DataTable, True);
Result := ASeleccionados;
end;
procedure TBalancesController.RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable);
begin
inherited;
//
end;
function TBalancesController.Guardar(ABalance: IBizBalance): Boolean;
begin
Result := False;
if ValidarBalance(ABalance) then
begin
ShowHourglassCursor;
try
ABalance.DataTable.ApplyUpdates;
Result := True;
finally
HideHourglassCursor;
end;
end;
end;
function TBalancesController.Localizar(ABalances: IBizBalance; ADescripcion: String): Boolean;
begin
Result := True;
ShowHourglassCursor;
try
with ABalances.DataTable do
begin
DisableControls;
First;
if not Locate(fld_BalancesREF_BALANCE, ADescripcion, []) then
Result := False;
EnableControls;
end;
finally
HideHourglassCursor;
end;
end;
end.