git-svn-id: https://192.168.0.254/svn/Proyectos.AbetoDesign_FactuGES/trunk@2 93f398dd-4eb6-7a46-baf6-13f46f578da2
407 lines
10 KiB
ObjectPascal
407 lines
10 KiB
ObjectPascal
unit uApuntesController;
|
||
|
||
interface
|
||
|
||
|
||
uses
|
||
Classes, SysUtils, uDADataTable, uControllerBase,
|
||
uBizApuntes, uBizSubCuentas, uIDataModuleContabilidad;
|
||
type
|
||
IApuntesController = interface(IControllerBase)
|
||
['{94E5F2B6-64C8-4331-B9CB-3ED730478529}']
|
||
// function BuscarTodos: IBizApunte;
|
||
// function Buscar(const ID: Integer): IBizApunte;
|
||
// procedure VerTodos(AApuntes: IBizApunte);
|
||
procedure Anadir(AApunte : IBizApunte); overload;
|
||
procedure Anadir(AApunte : IBizApunte; IdSubCuenta: Integer); overload;
|
||
procedure AnadirCierre(AApunte : IBizApunte);
|
||
procedure Ver(AApunte: IBizApunte);
|
||
// function Anadir: IBizApunte;
|
||
function Eliminar(AApunte : IBizApunte): Boolean;
|
||
function Guardar(AApunte : IBizApunte): Boolean;
|
||
procedure DescartarCambios(AApunte : IBizApunte);
|
||
|
||
function ValidarApunte(AApunte: IBizApunte): Boolean;
|
||
procedure ElegirSubCuenta(AApunte: IBizApunte);
|
||
|
||
procedure AsignarDEBE(AApunte: IBizApunte);
|
||
procedure AsignarHABER(AApunte: IBizApunte);
|
||
end;
|
||
|
||
TApuntesController = class(TControllerBase, IApuntesController)
|
||
private
|
||
procedure CopiarSubCuenta_Apunte(AApunte: IBizApunte; ASubCuenta : IBizSubCuenta);
|
||
|
||
protected
|
||
FDataModule : IDataModuleContabilidad;
|
||
|
||
procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); override;
|
||
function CreateEditor(const AName : String; const IID: TGUID; out Intf): Boolean;
|
||
|
||
procedure AsignarDataModule;
|
||
procedure FiltrarEjercicio(AApunte: IBizApunte);
|
||
|
||
public
|
||
constructor Create; override;
|
||
destructor Destroy; override;
|
||
|
||
function ValidarApunte(AApunte: IBizApunte): Boolean;
|
||
|
||
function EsModificable(AApunte : IBizApunte): Boolean;
|
||
function EsEliminable(AApunte : IBizApunte): Boolean;
|
||
|
||
procedure Anadir(AApunte : IBizApunte); overload;
|
||
procedure Anadir(AApunte : IBizApunte; IdSubCuenta: Integer); overload;
|
||
procedure AnadirCierre(AApunte : IBizApunte);
|
||
function Eliminar(AApunte : IBizApunte): Boolean;
|
||
function Guardar(AApunte : IBizApunte): Boolean; virtual;
|
||
procedure DescartarCambios(AApunte : IBizApunte); virtual;
|
||
// function Anadir: IBizApunte;
|
||
// function BuscarTodos: IBizApunte;
|
||
// function Buscar(const ID: Integer): IBizApunte;
|
||
// procedure VerTodos(AApuntes: IBizApunte);
|
||
procedure Ver(AApunte: IBizApunte);
|
||
procedure ElegirSubCuenta(AApunte: IBizApunte);
|
||
|
||
procedure AsignarDEBE(AApunte: IBizApunte);
|
||
procedure AsignarHABER(AApunte: IBizApunte);
|
||
end;
|
||
|
||
implementation
|
||
|
||
uses
|
||
cxControls, DB, uEditorRegistryUtils, schContabilidadClient_Intf,
|
||
uSubCuentasController,
|
||
uIEditorApunte, uDataModuleContabilidad,
|
||
uDAInterfaces, uDataTableUtils, uDialogUtils, uFactuGES_App,
|
||
uDateUtils, uROTypes, DateUtils, Controls, Windows;
|
||
|
||
{ TApuntesController }
|
||
|
||
{
|
||
function TApuntesController.Anadir: IBizApunte;
|
||
var
|
||
AApunte : IBizApunte;
|
||
begin
|
||
AApunte := FDataModule.GetApunteItem(ID_NULO);
|
||
AApunte.DataTable.Active := True;
|
||
AApunte.Insert;
|
||
Result := AApunte;
|
||
end;
|
||
}
|
||
|
||
procedure TApuntesController.Anadir(AApunte: IBizApunte);
|
||
begin
|
||
// AApunte.DataTable.DisableControls;
|
||
// AApunte.Last;
|
||
AApunte.Append;
|
||
// AApunte.DataTable.EnableControls;
|
||
end;
|
||
|
||
procedure TApuntesController.Anadir(AApunte: IBizApunte; IdSubCuenta: Integer);
|
||
var
|
||
ASubCuenta : IBizSubCuenta;
|
||
AController : ISubCuentasController;
|
||
|
||
begin
|
||
Anadir(AApunte);
|
||
|
||
try
|
||
AController := TSubCuentasController.Create;
|
||
ASubCuenta := AController.Buscar(IdSubcuenta);
|
||
CopiarSubCuenta_Apunte(AApunte, ASubCuenta);
|
||
|
||
finally
|
||
AController := Nil;
|
||
ASubCuenta := Nil;
|
||
end;
|
||
end;
|
||
|
||
procedure TApuntesController.AnadirCierre(AApunte: IBizApunte);
|
||
begin
|
||
if not AApunte.DataTable.Editing then
|
||
AApunte.DataTable.Edit;
|
||
|
||
AApunte.CONCEPTO := 'CIERRE CAJA';
|
||
AApunte.DEBE := 0;
|
||
AApunte.Post;
|
||
end;
|
||
|
||
procedure TApuntesController.AsignarDataModule;
|
||
begin
|
||
FDataModule := TDataModuleContabilidad.Create(Nil);
|
||
end;
|
||
|
||
procedure TApuntesController.AsignarDEBE(AApunte: IBizApunte);
|
||
begin
|
||
if Assigned(AApunte) then
|
||
begin
|
||
if not AApunte.DEBEIsNull then
|
||
begin
|
||
if not AApunte.DataTable.Editing then
|
||
AApunte.DataTable.Edit;
|
||
AApunte.HABERIsNull := True;
|
||
AApunte.DataTable.Post;
|
||
|
||
// RecalcularAsiento;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
procedure TApuntesController.AsignarHABER(AApunte: IBizApunte);
|
||
begin
|
||
if Assigned(AApunte) then
|
||
begin
|
||
if not AApunte.HABERIsNull then
|
||
begin
|
||
if not AApunte.DataTable.Editing then
|
||
AApunte.DataTable.Edit;
|
||
AApunte.DEBEIsNull := True;
|
||
AApunte.DataTable.Post;
|
||
|
||
// RecalcularAsiento;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
{
|
||
function TApuntesController.Buscar(const ID: Integer): IBizApunte;
|
||
begin
|
||
Result := FDataModule.GetApunteItem(ID);
|
||
end;
|
||
}
|
||
|
||
{
|
||
function TApuntesController.BuscarTodos: IBizApunte;
|
||
begin
|
||
Result := FDataModule.GetApunteItems;
|
||
FiltrarEjercicio(Result);
|
||
end;
|
||
}
|
||
|
||
procedure TApuntesController.CopiarSubCuenta_Apunte(AApunte: IBizApunte; ASubCuenta: IBizSubCuenta);
|
||
begin
|
||
if Assigned(ASubCuenta) then
|
||
begin
|
||
if not ASubCuenta.DataTable.Active then
|
||
ASubCuenta.DataTable.Active := True;
|
||
|
||
if Assigned(AApunte) then
|
||
begin
|
||
if not AApunte.DataTable.Editing then
|
||
AApunte.DataTable.Edit;
|
||
|
||
AApunte.ID_SUBCUENTA := ASubCuenta.ID;
|
||
AApunte.REF_SUBCUENTA := ASubCuenta.REF_SUBCUENTA;
|
||
AApunte.SUBCUENTA := ASubCuenta.DESCRIPCION;
|
||
AApunte.Post;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
constructor TApuntesController.Create;
|
||
begin
|
||
inherited;
|
||
AsignarDataModule;
|
||
end;
|
||
|
||
function TApuntesController.CreateEditor(const AName: String; const IID: TGUID; out Intf): Boolean;
|
||
begin
|
||
Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf);
|
||
end;
|
||
|
||
procedure TApuntesController.DescartarCambios(AApunte: IBizApunte);
|
||
begin
|
||
if not Assigned(AApunte) then
|
||
raise Exception.Create ('Apunte no asignado');
|
||
|
||
ShowHourglassCursor;
|
||
try
|
||
if (AApunte.State in dsEditModes) then
|
||
AApunte.Cancel;
|
||
|
||
AApunte.DataTable.CancelUpdates;
|
||
finally
|
||
HideHourglassCursor;
|
||
end;
|
||
end;
|
||
|
||
destructor TApuntesController.Destroy;
|
||
begin
|
||
FDataModule:= NIL;
|
||
inherited;
|
||
end;
|
||
|
||
function TApuntesController.ValidarApunte(AApunte: IBizApunte): Boolean;
|
||
var
|
||
Descuadre : Currency;
|
||
begin
|
||
Result := False;
|
||
|
||
if not Assigned(AApunte) then
|
||
raise Exception.Create ('Apuntes no asignados');
|
||
|
||
//Tambien hacemos post de sus tablas hija
|
||
if (AApunte.DataTable.State in dsEditModes) then
|
||
AApunte.DataTable.Post;
|
||
|
||
if (AApunte.DataTable.RecordCount = 0) then
|
||
raise Exception.Create('El asiento debe tener alg<6C>n apunte');
|
||
|
||
AApunte.DataTable.DisableControls;
|
||
Descuadre := 0;
|
||
AApunte.DataTable.First;
|
||
while not AApunte.DataTable.EOF do
|
||
begin
|
||
if AApunte.ID_SUBCUENTAIsNull then
|
||
begin
|
||
AApunte.DataTable.EnableControls;
|
||
raise Exception.Create('Todo apunte debe tener una subcuenta asociada');
|
||
end;
|
||
|
||
Descuadre := Descuadre + AApunte.DEBE;
|
||
Descuadre := Descuadre - AApunte.HABER;
|
||
AApunte.DataTable.Next;
|
||
end;
|
||
|
||
if (Descuadre <> 0) then
|
||
begin
|
||
AApunte.DataTable.EnableControls;
|
||
raise Exception.Create('El asiento est<73> descuadrado');
|
||
end;
|
||
|
||
Result := True;
|
||
end;
|
||
|
||
procedure TApuntesController.Ver(AApunte: IBizApunte);
|
||
var
|
||
AEditor : IEditorApunte;
|
||
begin
|
||
AEditor := NIL;
|
||
|
||
CreateEditor('EditorApunte', IEditorApunte, AEditor);
|
||
if Assigned(AEditor) then
|
||
try
|
||
// AEditor.Controller := Self; //OJO ORDEN MUY IMPORTANTE
|
||
AEditor.Apunte := AApunte;
|
||
AEditor.ShowModal;
|
||
finally
|
||
AEditor.Release;
|
||
AEditor := NIL;
|
||
end;
|
||
end;
|
||
|
||
{
|
||
procedure TApuntesController.VerTodos(AApuntes: IBizApunte);
|
||
var
|
||
AEditor : IEditorApuntes;
|
||
begin
|
||
AEditor := NIL;
|
||
|
||
CreateEditor('EditorApuntes', IEditorApuntes, AEditor);
|
||
if Assigned(AEditor) then
|
||
begin
|
||
AEditor.Controller := Self; //OJO ORDEN MUY IMPORTANTE
|
||
AEditor.Apuntes := AApuntes;
|
||
AEditor.ShowEmbedded;
|
||
end;
|
||
end;
|
||
}
|
||
|
||
procedure TApuntesController.ElegirSubCuenta(AApunte: IBizApunte);
|
||
var
|
||
ASubCuenta : IBizSubCuenta;
|
||
AController : ISubCuentasController;
|
||
begin
|
||
inherited;
|
||
try
|
||
AController := TSubCuentasController.Create;
|
||
ASubCuenta := (AController.ElegirSubCuenta(AController.BuscarTodos, 'ddddddd', False) as IBizSubCuenta);
|
||
CopiarSubCuenta_Apunte(AApunte, ASubCuenta);
|
||
|
||
finally
|
||
AController := Nil;
|
||
ASubCuenta := Nil;
|
||
end;
|
||
end;
|
||
|
||
function TApuntesController.Eliminar(AApunte: IBizApunte): Boolean;
|
||
begin
|
||
if not Assigned(AApunte) then
|
||
raise Exception.Create ('Apunte no asignado');
|
||
|
||
ShowHourglassCursor;
|
||
try
|
||
if (AApunte.State in dsEditModes) then
|
||
AApunte.Cancel;
|
||
|
||
AApunte.Delete;
|
||
AApunte.DataTable.ApplyUpdates;
|
||
HideHourglassCursor;
|
||
Result := True;
|
||
finally
|
||
HideHourglassCursor;
|
||
end;
|
||
end;
|
||
|
||
function TApuntesController.EsEliminable(AApunte: IBizApunte): Boolean;
|
||
begin
|
||
// AApunte.
|
||
end;
|
||
|
||
function TApuntesController.EsModificable(AApunte: IBizApunte): Boolean;
|
||
begin
|
||
//
|
||
end;
|
||
|
||
procedure TApuntesController.FiltrarEjercicio(AApunte: IBizApunte);
|
||
var
|
||
Condicion: TDAWhereExpression;
|
||
begin
|
||
if AApunte.DataTable.Active then
|
||
AApunte.DataTable.Active := False;
|
||
|
||
if not Assigned(AppFactuGES.EjercicioActivo) then
|
||
raise Exception.Create('No se ha definido ning<6E>n ejercicio activo');
|
||
|
||
// Filtrar los Apuntes por la empresa activa
|
||
with AApunte.DataTable.DynamicWhere do
|
||
begin
|
||
// (ID_EJERCICIO = ID)
|
||
Condicion := NewBinaryExpression(NewField('', fld_DiarioID_EJERCICIO), NewConstant(AppFactuGES.EjercicioActivo.ID, datInteger), dboEqual);
|
||
|
||
if IsEmpty then
|
||
Expression := Condicion
|
||
else
|
||
Expression := NewBinaryExpression(Expression, Condicion, dboAnd);
|
||
end;
|
||
end;
|
||
|
||
procedure TApuntesController.RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable);
|
||
begin
|
||
inherited;
|
||
//
|
||
end;
|
||
|
||
function TApuntesController.Guardar(AApunte: IBizApunte): Boolean;
|
||
begin
|
||
Result := True;
|
||
{
|
||
if ValidarApunte(AApunte) then
|
||
begin
|
||
ShowHourglassCursor;
|
||
try
|
||
AApunte.DataTable.ApplyUpdates;
|
||
Result := True;
|
||
finally
|
||
HideHourglassCursor;
|
||
end;
|
||
end;
|
||
}
|
||
if (AApunte.DataTable.State in dsEditModes) then
|
||
AApunte.DataTable.Post;
|
||
|
||
end;
|
||
|
||
end.
|