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;
2009-02-03 19:11:42 +00:00
function ElegirEjercicio( AEjercicios : IBizEjercicio) : IBizEjercicio;
function ExtraerSeleccionados( AEjercicios: IBizEjercicio) : IBizEjercicio;
function CerrarEjercicio( AEjercicio: IBizEjercicio) : Boolean ;
2007-12-01 12:37:54 +00:00
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;
2009-02-03 19:11:42 +00:00
function ElegirEjercicio( AEjercicios : IBizEjercicio) : IBizEjercicio;
function ExtraerSeleccionados( AEjercicios: IBizEjercicio) : IBizEjercicio;
function CerrarEjercicio( AEjercicio: IBizEjercicio) : Boolean ;
2007-12-01 12:37:54 +00:00
end ;
implementation
uses
cxControls, DB, uEditorRegistryUtils, schEjerciciosClient_Intf,
uIEditorEjercicios, uIEditorEjercicio, uDataModuleEjercicios,
uDAInterfaces, uDataTableUtils, uDialogUtils, uFactuGES_App,
2009-02-03 19:11:42 +00:00
uDateUtils, uROTypes, DateUtils, Controls, Windows, Dialogs, uIEditorElegirEjercicios;
2007-12-01 12:37:54 +00:00
{ TEjerciciosController }
procedure TEjerciciosController. Anadir( AEjercicio: IBizEjercicio) ;
begin
AEjercicio. Insert;
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 ;
2009-02-03 19:11:42 +00:00
function TEjerciciosController. CerrarEjercicio( AEjercicio: IBizEjercicio) : Boolean ;
var
IdEjercicioCierre: Integer ;
AFechaInicioApertura: TDate;
AFechaFinApertura: TDate;
begin
Result : = False ;
if Assigned( AEjercicio) then
begin
IdEjercicioCierre : = AEjercicio. ID;
AFechaInicioApertura : = StartOfAYear( ( YearOf( AEjercicio. FECHA_INICIO) + 1 ) ) ;
AFechaFinApertura : = EndOfAYear( ( YearOf( AEjercicio. FECHA_INICIO) + 1 ) ) ;
Anadir( AEjercicio) ;
AEjercicio. FECHA_INICIO : = AFechaInicioApertura;
AEjercicio. FECHA_FIN : = AFechaFinApertura;
AEjercicio. NOMBRE : = 'Ejercicio ' + IntToStr( YearOf( AFechaInicioApertura) ) ;
AEjercicio. ESTADO : = CTE_ABIERTO;
Guardar( AEjercicio) ;
GenerarPCG( IdEjercicioCierre, AEjercicio. ID) ;
Result : = FDataModule. CerrarEjercicio( IdEjercicioCierre, AEjercicio. ID) ;
end ;
end ;
2007-12-01 12:37:54 +00:00
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
2009-04-14 16:38:32 +00:00
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
2008-11-13 20:19:16 +00:00
try
AEditor. Controller : = Self; //OJO ORDEN MUY IMPORTANTE
AEditor. Ejercicio : = AEjercicio;
AEditor. ShowModal;
finally
AEditor. Release;
AEditor : = NIL
2008-11-11 18:52:28 +00:00
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 ;
2009-02-03 19:11:42 +00:00
function TEjerciciosController. ElegirEjercicio( AEjercicios: IBizEjercicio) : IBizEjercicio;
var
AEditor : IEditorElegirEjercicios;
begin
Result : = NIL ;
CreateEditor( 'EditorElegirEjercicios' , IEditorElegirEjercicios, AEditor) ;
if Assigned( AEditor) then
try
AEditor. Ejercicios : = AEjercicios;
AEditor. Controller : = Self;
AEditor. MultiSelect : = False ;
AEditor. Mensaje : = 'Seleccione el ejercicio de la empresa activa que desee:' ;
if IsPositiveResult( AEditor. ShowModal) then
Result : = AEditor. EjerciciosSeleccionados;
finally
AEditor. Release;
AEditor : = NIL ;
end ;
end ;
2007-12-01 12:37:54 +00:00
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 ;
2009-02-03 19:11:42 +00:00
function TEjerciciosController. ExtraerSeleccionados( AEjercicios: IBizEjercicio) : IBizEjercicio;
var
ASeleccionados : IBizEjercicio;
begin
ASeleccionados : = Self. Buscar( ID_NULO) ;
CopyDataTableDA5( AEjercicios. DataTable, ASeleccionados. DataTable, True ) ;
Result : = ASeleccionados;
end ;
2007-12-01 12:37:54 +00:00
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 .