2007-12-01 12:37:54 +00:00
unit uEjerciciosController;
interface
uses
Classes, SysUtils, uDADataTable, uControllerBase,
uBizEjercicios, uIDataModuleEjercicios;
2008-07-03 11:42:28 +00:00
2007-12-01 12:37:54 +00:00
type
2008-07-14 14:35:47 +00:00
IEjerciciosController = interface( IControllerBase)
2007-12-01 12:37:54 +00:00
[ '{94E5F2B6-64C8-4331-B9CB-3ED730478529}' ]
function BuscarTodos: IBizEjercicio;
function Buscar( ID: Integer ) : IBizEjercicio;
2007-12-03 11:12:02 +00:00
function BuscarActivo( IDEmpresa: Integer ) : IBizEjercicio;
2007-12-01 12:37:54 +00:00
procedure VerTodos( AEjercicios: IBizEjercicio) ;
procedure Ver( AEjercicio: IBizEjercicio) ;
procedure Anadir( AEjercicio : IBizEjercicio) ;
function Eliminar( AEjercicio : IBizEjercicio) : Boolean ;
function Guardar( AEjercicio : IBizEjercicio) : Boolean ;
function GenerarPCG( IdEjercicioCopia, IdEjercicio: Integer ) : Boolean ;
procedure DescartarCambios( AEjercicio : IBizEjercicio) ;
function Localizar( AEjercicios: IBizEjercicio; ADescripcion: String ) : Boolean ;
function DarListaEjercicios: TStringList;
end ;
2008-07-14 14:35:47 +00:00
TEjerciciosController = class( TControllerBase, IEjerciciosController)
2007-12-01 12:37:54 +00:00
private
procedure FiltrarEmpresa( AEjercicio: IBizEjercicio) ;
protected
FDataModule : IDataModuleEjercicios;
procedure RecibirAviso( ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable) ; override ;
function CreateEditor( const AName : String ; const IID: TGUID; out Intf) : Boolean ;
function ValidarEjercicio( AEjercicio: IBizEjercicio) : Boolean ;
procedure AsignarDataModule;
public
constructor Create; override ;
destructor Destroy; override ;
function Eliminar( AEjercicio : IBizEjercicio) : Boolean ;
function Guardar( AEjercicio : IBizEjercicio) : Boolean ; virtual ;
procedure DescartarCambios( AEjercicio : IBizEjercicio) ; virtual ;
procedure Anadir( AEjercicio : IBizEjercicio) ;
function BuscarTodos: IBizEjercicio;
function Buscar( ID: Integer ) : IBizEjercicio;
2007-12-03 11:12:02 +00:00
function BuscarActivo( IDEmpresa: Integer ) : IBizEjercicio;
2007-12-01 12:37:54 +00:00
procedure VerTodos( AEjercicios: IBizEjercicio) ;
procedure Ver( AEjercicio: IBizEjercicio) ;
function GenerarPCG( IdEjercicioCopia, IdEjercicio: Integer ) : Boolean ;
function Localizar( AEjercicios: IBizEjercicio; ADescripcion: String ) : Boolean ;
function DarListaEjercicios: TStringList;
end ;
implementation
uses
cxControls, DB, uEditorRegistryUtils, schEjerciciosClient_Intf,
uIEditorEjercicios, uIEditorEjercicio, uDataModuleEjercicios,
uDAInterfaces, uDataTableUtils, uDialogUtils, uFactuGES_App,
uDateUtils, uROTypes, DateUtils, Controls, Windows, Dialogs;
{ TEjerciciosController }
procedure TEjerciciosController. Anadir( AEjercicio: IBizEjercicio) ;
2008-01-28 08:43:23 +00:00
{ var
2007-12-05 17:49:04 +00:00
FechaInicio: TDate;
2008-01-28 08:43:23 +00:00
FechaFin: TDate; }
2007-12-01 12:37:54 +00:00
begin
AEjercicio. Insert;
2007-12-05 17:49:04 +00:00
//Asignar fecha de inicio y fin siguientes
ShowHourglassCursor;
try
// FDataModule.DarAnoSiguiente(FechaInicio, FechaFin);
// AEjercicio.FECHA_INICIO :=
finally
HideHourglassCursor;
end ;
2007-12-01 12:37:54 +00:00
end ;
procedure TEjerciciosController. AsignarDataModule;
begin
FDataModule : = TDataModuleEjercicios. Create( Nil ) ;
end ;
function TEjerciciosController. Buscar( ID: Integer ) : IBizEjercicio;
var
Condicion: TDAWhereExpression;
begin
ShowHourglassCursor;
try
Result : = BuscarTodos;
with Result . DataTable. DynamicWhere do
begin
// (ID = :ID)
Condicion : = NewBinaryExpression( NewField( '' , fld_EjerciciosID) , NewConstant( ID, datInteger) , dboEqual) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
end ;
finally
HideHourglassCursor;
end ;
end ;
2007-12-03 11:12:02 +00:00
function TEjerciciosController. BuscarActivo( IDEmpresa: Integer ) : IBizEjercicio;
var
Condicion: TDAWhereExpression;
begin
ShowHourglassCursor;
try
Result : = BuscarTodos;
with Result . DataTable. DynamicWhere do
begin
// (ACTIVO = 1)
Condicion : = NewBinaryExpression( NewField( '' , fld_EjerciciosACTIVO) , NewConstant( 1 , datInteger) , dboEqual) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
end ;
finally
HideHourglassCursor;
end ;
end ;
2007-12-01 12:37:54 +00:00
function TEjerciciosController. BuscarTodos: IBizEjercicio;
begin
Result : = FDataModule. GetItems;
FiltrarEmpresa( Result ) ;
end ;
constructor TEjerciciosController. Create;
begin
inherited ;
AsignarDataModule;
end ;
function TEjerciciosController. CreateEditor( const AName: String ; const IID: TGUID; out Intf) : Boolean ;
begin
Result : = Supports( EditorRegistry. CreateEditor( AName) , IID, Intf) ;
end ;
function TEjerciciosController. DarListaEjercicios: TStringList;
var
AEjercicios: IBizEjercicio;
begin
AEjercicios : = BuscarTodos;
AEjercicios. DataTable. Active : = True ;
Result : = TStringList. Create;
try
with Result do
begin
AEjercicios. DataTable. First;
while not AEjercicios. DataTable. EOF do
begin
Add( AEjercicios. NOMBRE) ;
AEjercicios. DataTable. Next;
end ;
end ;
finally
AEjercicios : = NIL ;
end ;
end ;
procedure TEjerciciosController. DescartarCambios( AEjercicio: IBizEjercicio) ;
begin
if not Assigned( AEjercicio) then
raise Exception. Create ( 'Ejercicio no asignado' ) ;
ShowHourglassCursor;
try
if ( AEjercicio. State in dsEditModes) then
AEjercicio. Cancel;
AEjercicio. DataTable. CancelUpdates;
finally
HideHourglassCursor;
end ;
end ;
destructor TEjerciciosController. Destroy;
begin
FDataModule: = NIL ;
inherited ;
end ;
function TEjerciciosController. ValidarEjercicio( AEjercicio: IBizEjercicio) : Boolean ;
begin
2008-07-31 10:10:52 +00:00
Result : = False ;
2007-12-01 12:37:54 +00:00
if not Assigned( AEjercicio) then
raise Exception. Create ( 'Ejercicio no asignado' ) ;
if ( AEjercicio. DataTable. State in dsEditModes) then
AEjercicio. DataTable. Post;
if ( AEjercicio. DataTable. RecordCount = 1 )
and ( AEjercicio. ACTIVO = 0 ) then
raise Exception. Create( 'Debe existir un ejercicio activo.' ) ;
if Length( AEjercicio. NOMBRE) = 0 then
raise Exception. Create( 'Debe indicar un nombre para este ejercicio.' ) ;
Result : = True ;
end ;
procedure TEjerciciosController. Ver( AEjercicio: IBizEjercicio) ;
var
AEditor : IEditorEjercicio;
begin
AEditor : = NIL ;
2008-11-11 18:52:28 +00:00
CreateEditor( 'EditorEjercicio' , IEditorEjercicio, AEditor) ;
if Assigned( AEditor) then
with ( AEditor as IEditorEjercicio) do
begin
try
Controller : = Self; //OJO ORDEN MUY IMPORTANTE
Ejercicio : = AEjercicio;
ShowModal;
finally
Release;
AEditor : = NIL
end ;
end ;
2007-12-01 12:37:54 +00:00
end ;
procedure TEjerciciosController. VerTodos( AEjercicios: IBizEjercicio) ;
var
AEditor : IEditorEjercicios;
begin
AEditor : = NIL ;
2008-11-11 18:52:28 +00:00
CreateEditor( 'EditorEjercicios' , IEditorEjercicios, AEditor) ;
if Assigned( AEditor) then
with AEditor do
begin
Controller : = Self; //OJO ORDEN MUY IMPORTANTE
Ejercicios : = AEjercicios;
ShowEmbedded;
end ;
2007-12-01 12:37:54 +00:00
end ;
function TEjerciciosController. Eliminar( AEjercicio: IBizEjercicio) : Boolean ;
begin
if not Assigned( AEjercicio) then
raise Exception. Create ( 'Ejercicio no asignado' ) ;
ShowHourglassCursor;
try
if ( AEjercicio. State in dsEditModes) then
AEjercicio. Cancel;
//ATENCI<43> N!! Debe haber claves foraneas en las tablas de CONT_EPIGRAFES, CONT_CUENTAS, CONT_SUBCUENTAS
//con el fin de que al borrar un ejercicio se borren todos sus datos correspondientes
AEjercicio. Delete;
AEjercicio. DataTable. ApplyUpdates;
2008-01-02 19:45:32 +00:00
AEjercicio. DataTable. Refresh; //Debemos refrescar en este caso para que se vea el nuevo ejercicio activo en el cliente, como no ser<65> n muchos ejercicios nos da igual
2007-12-01 12:37:54 +00:00
HideHourglassCursor;
Result : = True ;
finally
HideHourglassCursor;
end ;
end ;
procedure TEjerciciosController. FiltrarEmpresa( AEjercicio: IBizEjercicio) ;
var
Condicion: TDAWhereExpression;
begin
if AEjercicio. DataTable. Active then
AEjercicio. DataTable. Active : = False ;
// Filtrar las facturas actuales por empresa
with AEjercicio. DataTable. DynamicWhere do
begin
// (ID_EMPRESA >= ID)
Condicion : = NewBinaryExpression( NewField( '' , fld_EjerciciosID_EMPRESA) , NewConstant( AppFactuGES. EmpresaActiva. ID, datInteger) , dboEqual) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
end ;
end ;
procedure TEjerciciosController. RecibirAviso( ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable) ;
begin
inherited ;
//
end ;
function TEjerciciosController. GenerarPCG( IdEjercicioCopia, IdEjercicio: Integer ) : Boolean ;
begin
ShowHourglassCursor;
try
Result : = FDataModule. GenerarPGC( IdEjercicioCopia, IdEjercicio) ;
finally
HideHourglassCursor;
end ;
end ;
function TEjerciciosController. Guardar( AEjercicio: IBizEjercicio) : Boolean ;
begin
Result : = False ;
if ValidarEjercicio( AEjercicio) then
begin
ShowHourglassCursor;
try
AEjercicio. DataTable. ApplyUpdates;
2007-12-03 11:12:02 +00:00
AppFactuGES. CambiarEjercicio( AppFactuGES. EmpresaActiva. ID) ;
2007-12-01 12:37:54 +00:00
Result : = True ;
finally
HideHourglassCursor;
end ;
end ;
end ;
function TEjerciciosController. Localizar( AEjercicios: IBizEjercicio; ADescripcion: String ) : Boolean ;
begin
Result : = True ;
ShowHourglassCursor;
try
with AEjercicios. DataTable do
begin
DisableControls;
First;
if not Locate( fld_EjerciciosNOMBRE, ADescripcion, [ ] ) then
Result : = False ;
EnableControls;
end ;
finally
HideHourglassCursor;
end ;
end ;
end .