diff --git a/Build/Build.fbp5 b/Build/Build.fbp5
index 9ba8727..753596e 100644
--- a/Build/Build.fbp5
+++ b/Build/Build.fbp5
@@ -531,149 +531,6 @@ source_path
1000
False
-
-
+
0
@@ -1124,7 +990,7 @@ Comments=
12
Debug
False
-
+
True
True
@@ -1150,9 +1016,9 @@ Comments=
0
False
0
- %source_path%\Usuarios\Usuarios.dpk
+ %source_path%\ApplicationBase\ApplicationBase.dpk
True
- 3
+ 0
rcBorland
@@ -1167,7 +1033,7 @@ Comments=
False
4194304
False
False
- False
+ True
True
%library_path%
0
True
- 3
+ 0
1048576
16384
True
- True
+ False
%output_path%\Cliente
False
@@ -1234,122 +1100,6 @@ Comments=
True
-
-
-
- 0
-
- True
- False
- False
- True
- True
- 0
- 1252
- 12
- Debug
- False
-
-
- True
- True
-
- False
-
- False
- False
- False
- True
- False
- False
- False
- False
- False
- False
- False
- False
- 3081
-
- 1
- 0
- 0
- False
- 0
- %source_path%\Configuracion\Configuracion.dpk
- True
- 0
-
-
- rcBorland
- 1000
-
- False
- False
- False
- False
- [usPackages,usCompiler,usLinker,usVersionInfo]
- False
- False
-
-
-
- False
- False
- False
- False
- False
- True
- False
- False
- %package_path%
-
-
-
- False
- %modules_dcp_path%
- True
-
- True
-
- False
- True
- False
- False
- True
- 4194304
- False
- False
- False
- True
- %library_path%
- 0
- True
- 3
- 1048576
- 16384
-
- True
- True
- %output_path%\Cliente
- False
-
- False
- fa8
- True
- False
-
- True
- True
- False
- False
- WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
-
- False
- False
- True
-
-
Módulos
@@ -1363,7 +1113,7 @@ Comments=
False
0
- False
+ True
0
1000
False
@@ -1391,7 +1141,7 @@ Comments=
False
False
- False
+ True
True
False
False
@@ -1401,7 +1151,7 @@ Comments=
False
False
False
- 3081
+ 3082
1
0
@@ -1410,7 +1160,7 @@ Comments=
0
%source_path%\Modulos\FicherosEDI\Cliente\FicherosEDI.dpk
True
- 0
+ 3
rcBorland
@@ -1423,7 +1173,16 @@ Comments=
[usPackages,usCompiler,usLinker,usVersionInfo]
False
False
-
@@ -1632,7 +1391,7 @@ Comments=
False
False
- False
+ True
True
False
False
@@ -1642,7 +1401,7 @@ Comments=
False
False
False
- 3081
+ 3082
1
0
@@ -1651,7 +1410,7 @@ Comments=
0
%source_path%\Modulos\VentasProceso\Cliente\VentasProceso.dpk
True
- 0
+ 3
rcBorland
@@ -1664,7 +1423,16 @@ Comments=
[usPackages,usCompiler,usLinker,usVersionInfo]
False
False
-
@@ -1748,7 +1516,7 @@ Comments=
False
False
- False
+ True
True
False
False
@@ -1758,7 +1526,7 @@ Comments=
False
False
False
- 3081
+ 3082
1
0
@@ -1767,7 +1535,7 @@ Comments=
0
%source_path%\Modulos\ReferenciaGenerica\Cliente\ReferenciaGenerica.dpk
True
- 0
+ 3
rcBorland
@@ -1780,7 +1548,16 @@ Comments=
[usPackages,usCompiler,usLinker,usVersionInfo]
False
False
-
@@ -1864,7 +1641,7 @@ Comments=
False
False
- False
+ True
True
False
False
@@ -1874,7 +1651,7 @@ Comments=
False
False
False
- 3081
+ 3082
1
0
@@ -1883,7 +1660,7 @@ Comments=
0
%source_path%\Modulos\Recepciones\Cliente\Recepciones.dpk
True
- 0
+ 3
rcBorland
@@ -1896,7 +1673,16 @@ Comments=
[usPackages,usCompiler,usLinker,usVersionInfo]
False
False
-
@@ -1980,7 +1766,7 @@ Comments=
False
False
- False
+ True
True
False
False
@@ -1990,7 +1776,7 @@ Comments=
False
False
False
- 3081
+ 3082
1
0
@@ -2012,7 +1798,16 @@ Comments=
[usPackages,usCompiler,usLinker,usVersionInfo]
False
False
-
@@ -2096,7 +1891,7 @@ Comments=
False
False
- False
+ True
True
False
False
@@ -2106,7 +1901,7 @@ Comments=
False
False
False
- 3081
+ 3082
1
0
@@ -2115,7 +1910,7 @@ Comments=
0
%source_path%\Modulos\Traspasos\Cliente\Traspasos.dpk
True
- 0
+ 3
rcBorland
@@ -2128,7 +1923,16 @@ Comments=
[usPackages,usCompiler,usLinker,usVersionInfo]
False
False
-
@@ -2212,7 +2016,7 @@ Comments=
False
False
- False
+ True
True
False
False
@@ -2222,7 +2026,7 @@ Comments=
False
False
False
- 3081
+ 3082
1
0
@@ -2231,7 +2035,7 @@ Comments=
0
%source_path%\Modulos\Stock\Cliente\Stock.dpk
True
- 0
+ 2
rcBorland
@@ -2244,7 +2048,16 @@ Comments=
[usPackages,usCompiler,usLinker,usVersionInfo]
False
False
-
@@ -2347,7 +2160,7 @@ Comments=
%project_path%\Resources\Iconos\Cliente.ico
False
True
- False
+ True
True
False
False
@@ -2357,16 +2170,16 @@ Comments=
False
False
False
- 3081
+ 3082
- 1
+ 2
0
- 0
+ 1
False
0
%source_path%\Cliente\AdminPV.dpr
True
- 0
+ 1
rcBorland
@@ -2379,7 +2192,17 @@ Comments=
[usCompiler,usLinker,usVersionInfo]
True
True
-
@@ -2414,7 +2237,7 @@ Comments=
%library_path%;%modules_dcp_path%
0
True
- 0
+ 3
1048576
16384
@@ -2422,7 +2245,7 @@ Comments=
True
%output_path%\Cliente
False
- BaseD10;Configuracion;ControlesBaseD10;Usuarios;FicherosEDI;VentasProceso;VentasTerminadas;ReferenciaGenerica
+ BaseD10;ControlesBaseD10;ApplicationBase;FicherosEDI;VentasProceso;VentasTerminadas;ReferenciaGenerica
False
fa8
True
@@ -2479,12 +2302,12 @@ Comments=
2
0
- 0
+ 1
False
0
%source_path%\CargaEDI\CargaEDI.dpr
True
- 0
+ 1
rcBorland
@@ -2499,7 +2322,7 @@ Comments=
False
True
%output_path%\Cliente
False
- BaseD10;Configuracion;FicherosEDI
+ BaseD10;FicherosEDI
False
fa8
True
@@ -2567,6 +2390,149 @@ Comments=
+
+ Servidor
+ 0
+
+ Servidor
+ True
+ True
+ False
+ True
+ False
+
+ 0
+ False
+ 0
+ 1000
+ False
+
+
+
+ 0
+
+ True
+ False
+ False
+ True
+ True
+ 0
+ 1252
+ 12
+ Release
+ False
+
+
+ True
+ True
+
+ False
+ %project_path%\Resources\Iconos\Servidor.ico
+ False
+ True
+ True
+ True
+ False
+ False
+ False
+ False
+ False
+ False
+ False
+ True
+ 3082
+
+ 2
+ 0
+ 1
+ False
+ 0
+ %source_path%\Servidor\AdminPV_Server.dpr
+ True
+ 1
+
+
+ rcBorland
+ 1000
+ %source_path%\Servidor\
+ False
+ True
+ False
+ False
+ [usPackages,usCompiler,usLinker,usVersionInfo]
+ False
+ True
+
+
+
+ False
+ False
+ False
+ False
+ False
+ True
+ False
+ False
+
+
+
+
+ False
+
+ False
+
+ False
+
+ False
+ True
+ False
+ False
+ True
+ 4194304
+ False
+ False
+ False
+ True
+ %library_path%
+ 0
+ False
+ 3
+ 1048576
+ 16384
+
+ True
+ True
+ %output_path%\Servidor
+ False
+
+ False
+ fa8
+ False
+ False
+ .\
+ True
+ True
+ True
+ False
+ WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+ .\
+ False
+ False
+ True
+
+
+
@@ -2581,7 +2547,7 @@ Comments=
False
0
- False
+ True
0
1000
False
@@ -2834,7 +2800,7 @@ Comments=
vtProject
- %DELPHI2007DIR%\Lib\Indy10;%project_path%\Lib;%project_path%\Lib\RemObjects\RemObjects_SDK;%project_path%\Lib\RemObjects\Data_Abstract;%project_path%\Lib\CCPack;%project_path%\Lib\CFPack;%project_path%\Lib\GUISDK;%project_path%\Lib\PluginSDK;%project_path%\Lib\DevExpressVCL;%project_path%\Lib\FastReport3;%project_path%\Lib\JCL;%project_path%\Lib\JVCL;%project_path%\Lib\PngComponents;%project_path%\Lib\cxIntl5;%project_path%\Lib\cxIntlPrintSys3;%project_path%\Lib\TB2k+TBX;%project_path%\Lib\Mustangpeak\MPCommonLib;%project_path%\Lib\Mustangpeak\EasyListview;%project_path%\Lib\SDAC;
+ %DELPHI2007DIR%\Lib\Indy10;%project_path%\Lib;%project_path%\Lib\RemObjects\RemObjects_SDK;%project_path%\Lib\RemObjects\Data_Abstract;%project_path%\Lib\CCPack;%project_path%\Lib\CFPack;%project_path%\Lib\GUISDK;%project_path%\Lib\PluginSDK;%project_path%\Lib\DevExpressVCL;%project_path%\Lib\FastReport3;%project_path%\Lib\JCL;%project_path%\Lib\JVCL;%project_path%\Lib\PngComponents;%project_path%\Lib\cxIntl5;%project_path%\Lib\cxIntlPrintSys3;%project_path%\Lib\TB2k+TBX;%project_path%\Lib\Mustangpeak\MPCommonLib;%project_path%\Lib\Mustangpeak\EasyListview;%project_path%\Lib\JSDialog;%project_path%\Lib\UserControl
True
False
False
diff --git a/Database/1 - tablas.sql b/Database/1 - tablas.sql
index ce96e0f..a0ba77f 100644
--- a/Database/1 - tablas.sql
+++ b/Database/1 - tablas.sql
@@ -873,6 +873,118 @@ ON [RDX_VENTASEDI]
TO [public]
GO
+
+/*--------------- SQL ---------------*/
+
+IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[RDX_USUARIOS]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
+ DROP TABLE [RDX_USUARIOS]
+GO
+
+CREATE TABLE [RDX_USUARIOS](
+ [ID] int NOT NULL,
+ [USERNAME] varchar(30) NULL,
+ [LOGIN] varchar(30) NULL,
+ [PASS] varchar(255) NULL,
+ [PASSEXPIRED] datetime NULL,
+ [BLOQUEADO] smallint NULL,
+ [EMAIL] varchar(150) NULL,
+ [USERDAYSSUN] int NULL,
+ [PRIVILEGED] int NULL,
+ [TIPO] char(1) NULL,
+ [ID_PERFIL] int NULL,
+ [CHECKSUM] varchar(250) NULL
+) ON [PRIMARY]
+GO
+
+ALTER TABLE [RDX_USUARIOS]
+ADD CONSTRAINT [RDX_USUARIOS_PK]
+PRIMARY KEY CLUSTERED ([ID])
+ON [PRIMARY]
+GO
+
+
+IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[RDX_USUARIOS_EVENTOS]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
+ DROP TABLE [RDX_USUARIOS_EVENTOS]
+GO
+
+CREATE TABLE [RDX_USUARIOS_EVENTOS](
+ [APLICACION] VARCHAR(250),
+ [ID_USUARIO] INT,
+ [FECHA] CHAR(10),
+ [HORA] CHAR(8),
+ [FORM] VARCHAR(250),
+ [TITULO_FORM] VARCHAR(100),
+ [EVENTO] VARCHAR(50),
+ [NOTAS] TEXT,
+ [TNAME] VARCHAR(20)
+) ON [PRIMARY]
+GO
+
+
+IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[RDX_USUARIOS_LOGON]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
+ DROP TABLE [RDX_USUARIOS_LOGON]
+GO
+
+CREATE TABLE [RDX_USUARIOS_LOGON] (
+ [LOGONID] CHAR(38) NOT NULL,
+ [ID_USUARIO] INT,
+ [APLICACION] VARCHAR(50),
+ [EQUIPO] VARCHAR(50),
+ [DATA] VARCHAR(14)
+)
+GO
+
+ALTER TABLE [RDX_USUARIOS_LOGON]
+ADD CONSTRAINT [RDX_USUARIOS_LOGON_PK]
+PRIMARY KEY CLUSTERED ([LOGONID])
+ON [PRIMARY]
+GO
+
+
+
+IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[RDX_PERMISOS]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
+ DROP TABLE [RDX_PERMISOS]
+GO
+
+
+CREATE TABLE [RDX_PERMISOS] (
+ [ID] INT NOT NULL,
+ [ID_USUARIO] INT,
+ [MODULO] VARCHAR(50),
+ [NOMBRECOMP] VARCHAR(50),
+ [CHECKSUM] VARCHAR(250)
+)
+GO
+
+ALTER TABLE [RDX_PERMISOS]
+ADD CONSTRAINT [RDX_PERMISOS_PK]
+PRIMARY KEY CLUSTERED ([ID])
+ON [PRIMARY]
+GO
+
+
+
+IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[RDX_PERMISOSEX]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
+ DROP TABLE [RDX_PERMISOSEX]
+GO
+
+
+CREATE TABLE [RDX_PERMISOSEX] (
+ [ID] INT NOT NULL,
+ [ID_USUARIO] INT,
+ [MODULO] VARCHAR(50),
+ [NOMBRECOMP] VARCHAR(50),
+ [NOMBREFORM] VARCHAR(50),
+ [CHECKSUM] VARCHAR(250)
+)
+GO
+
+ALTER TABLE [RDX_PERMISOSEX]
+ADD CONSTRAINT [RDX_PERMISOSEX_PK]
+PRIMARY KEY CLUSTERED ([ID])
+ON [PRIMARY]
+GO
+
/* EOF */
diff --git a/Source/AdminPVGroup.groupproj b/Source/AdminPVGroup.groupproj
index 5ba9cae..1910b26 100644
--- a/Source/AdminPVGroup.groupproj
+++ b/Source/AdminPVGroup.groupproj
@@ -4,10 +4,10 @@
+
-
@@ -19,7 +19,6 @@
-
Default.Personality
@@ -27,15 +26,6 @@
-
-
-
-
-
-
-
-
-
@@ -63,23 +53,14 @@
-
-
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
@@ -171,14 +152,23 @@
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/Source/AdminPVGroup_prjgroup.tvsconfig b/Source/AdminPVGroup_prjgroup.tvsconfig
new file mode 100644
index 0000000..c8f2834
--- /dev/null
+++ b/Source/AdminPVGroup_prjgroup.tvsconfig
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/Source/ApplicationBase/ApplicationBase.bdsproj b/Source/ApplicationBase/ApplicationBase.bdsproj
new file mode 100644
index 0000000..d4951b0
--- /dev/null
+++ b/Source/ApplicationBase/ApplicationBase.bdsproj
@@ -0,0 +1,697 @@
+
+
+
+
+
+
+
+
+
+
+
+ ApplicationBase.dpk
+
+
+ 7.0
+
+
+ 8
+ 0
+ 1
+ 1
+ 0
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ True
+ True
+ WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+
+ False
+
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ False
+ False
+ False
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+
+
+
+ 0
+ 0
+ False
+ 1
+ False
+ False
+ False
+ 16384
+ 1048576
+ 4194304
+
+
+
+
+ .\
+ ..\..\..\..\Output\Debug\Cliente
+ ..\Lib
+ ..\Lib
+
+
+
+ False
+
+
+
+
+
+ False
+
+
+ True
+ False
+
+
+ False
+
+
+ True
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 3082
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ VCL for the Web Design Package for CodeGear RAD Studio
+ CodeGear WebSnap Components
+ CodeGear SOAP Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ CodeGear C++Builder Office 2000 Servers Package
+ CodeGear C++Builder Office XP Servers Package
+
+
+
+
+
+
diff --git a/Source/ApplicationBase/ApplicationBase.cfg b/Source/ApplicationBase/ApplicationBase.cfg
new file mode 100644
index 0000000..7b0053c
--- /dev/null
+++ b/Source/ApplicationBase/ApplicationBase.cfg
@@ -0,0 +1,40 @@
+-$A8
+-$B-
+-$C+
+-$D+
+-$E-
+-$F-
+-$G+
+-$H+
+-$I+
+-$J-
+-$K-
+-$L+
+-$M-
+-$N+
+-$O+
+-$P+
+-$Q-
+-$R-
+-$S-
+-$T-
+-$U-
+-$V+
+-$W-
+-$X+
+-$YD
+-$Z1
+-cg
+-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+-H+
+-W+
+-M
+-$M16384,1048576
+-K$00400000
+-N0".\"
+-LE"..\..\..\..\Output\Debug\Cliente"
+-LN"..\Lib"
+-U"..\Lib"
+-O"..\Lib"
+-I"..\Lib"
+-R"..\Lib"
diff --git a/Source/ApplicationBase/ApplicationBase.dpk b/Source/ApplicationBase/ApplicationBase.dpk
new file mode 100644
index 0000000..ae542ea
--- /dev/null
+++ b/Source/ApplicationBase/ApplicationBase.dpk
@@ -0,0 +1,63 @@
+package ApplicationBase;
+
+{$R *.res}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO ON}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS ON}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION OFF}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO ON}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES ON}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$IMPLICITBUILD OFF}
+{$DEFINE DEBUG}
+
+requires
+ rtl,
+ vcl,
+ dbrtl,
+ PLuginSDK_D10R,
+ BaseD10,
+ pckMD5,
+ pckUserControl_RT;
+
+contains
+ uAdminPV_App in 'uAdminPV_App.pas',
+ uIDataModuleUsuarios in 'Usuarios\Model\Data\uIDataModuleUsuarios.pas',
+ uDataModuleUsuarios in 'Usuarios\Data\uDataModuleUsuarios.pas' {DataModuleUsuarios},
+ uUCROConn in 'Usuarios\Data\uUCROConn.pas',
+ uUsuariosController in 'Usuarios\Controller\uUsuariosController.pas',
+ uBizUsuarios in 'Usuarios\Model\uBizUsuarios.pas',
+ uIEditorLogin in 'Usuarios\Controller\View\uIEditorLogin.pas',
+ uEditorLogin in 'Usuarios\Views\uEditorLogin.pas' {fEditorLogin},
+ uUsuariosViewRegister in 'Usuarios\Views\uUsuariosViewRegister.pas',
+ uViewPerfilesUsuario in 'Usuarios\Views\uViewPerfilesUsuario.pas' {frViewPerfilesUsuario: TFrame},
+ uEditorPerfilesUsuario in 'Usuarios\Views\uEditorPerfilesUsuario.pas' {fEditorPerfilesUsuario},
+ uIEditorUsuarios in 'Usuarios\Controller\View\uIEditorUsuarios.pas',
+ uEditorPerfilUsuario in 'Usuarios\Views\uEditorPerfilUsuario.pas' {fEditorPerfilUsuario},
+ uIEditorUsuario in 'Usuarios\Controller\View\uIEditorUsuario.pas',
+ uViewPerfilUsuario in 'Usuarios\Views\uViewPerfilUsuario.pas' {frViewPerfilUsuario: TFrame},
+ uIEditorPerfilesUsuario in 'Usuarios\Controller\View\uIEditorPerfilesUsuario.pas',
+ uIEditorPerfilUsuario in 'Usuarios\Controller\View\uIEditorPerfilUsuario.pas',
+ uEditorUsuarios in 'Usuarios\Views\uEditorUsuarios.pas' {fEditorUsuarios},
+ uViewUsuarios in 'Usuarios\Views\uViewUsuarios.pas' {frViewUsuarios: TFrame},
+ uEditorUsuario in 'Usuarios\Views\uEditorUsuario.pas' {fEditorUsuario: TFrame},
+ uViewUsuario in 'Usuarios\Views\uViewUsuario.pas' {frViewUsuario: TFrame},
+ uEditorCambiarPassword in 'Usuarios\Views\uEditorCambiarPassword.pas' {fEditorCambiarPassword},
+ schUsuariosClient_Intf in 'Usuarios\Model\schUsuariosClient_Intf.pas',
+ schUsuariosServer_Intf in 'Usuarios\Model\schUsuariosServer_Intf.pas';
+
+end.
diff --git a/Source/ApplicationBase/ApplicationBase.dproj b/Source/ApplicationBase/ApplicationBase.dproj
new file mode 100644
index 0000000..67b32d0
--- /dev/null
+++ b/Source/ApplicationBase/ApplicationBase.dproj
@@ -0,0 +1,625 @@
+
+
+
+ {14a25028-ec1a-430c-ade3-13c264e9bac2}
+ ApplicationBase.dpk
+ Debug
+ AnyCPU
+ DCC32
+ ..\..\Output\Debug\Cliente\ApplicationBase.bpl
+
+
+ 7.0
+ False
+ False
+ 0
+ .\
+ .\
+ .\
+ ..\..\Output\Release\Cliente
+ ..\Lib
+ ..\Lib
+ ..\Lib
+ ..\Lib
+ ..\Lib
+ RELEASE
+
+
+ 7.0
+ .\
+ .\
+ .\
+ ..\..\Output\Debug\Cliente
+ ..\Lib
+ $(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10;T:\COMPON~1\jcl\lib\d11\debug;$(BDSCOMMONDIR)\Dcp;..\Lib
+ $(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10;T:\COMPON~1\jcl\lib\d11\debug;$(BDSCOMMONDIR)\Dcp;..\Lib
+ $(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10;T:\COMPON~1\jcl\lib\d11\debug;$(BDSCOMMONDIR)\Dcp;..\Lib
+ $(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10;T:\COMPON~1\jcl\lib\d11\debug;$(BDSCOMMONDIR)\Dcp;..\Lib
+ DEBUG
+ False
+ True
+ True
+ True
+
+
+ Delphi.Personality
+ Package
+
+FalseTrueFalseFalseFalseFalseTrueFalse1000FalseFalseFalseFalseFalse308212521.0.0.01.0.0.0
+
+
+
+
+
+
+
+ VCL for the Web Design Package for CodeGear RAD Studio
+ CodeGear WebSnap Components
+ CodeGear SOAP Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ CodeGear C++Builder Office 2000 Servers Package
+ CodeGear C++Builder Office XP Servers Package
+ ApplicationBase.dpkFalse
+
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TFrame
+
+
+
+
+
+
+
+ TFrame
+
+
+
+ TFrame
+
+
+
+ TFrame
+
+
+
+ TFrame
+
+
+
+
diff --git a/Source/ApplicationBase/ApplicationBase.rc b/Source/ApplicationBase/ApplicationBase.rc
new file mode 100644
index 0000000..153736a
--- /dev/null
+++ b/Source/ApplicationBase/ApplicationBase.rc
@@ -0,0 +1,22 @@
+1 VERSIONINFO
+FILEVERSION 1,0,0,0
+PRODUCTVERSION 1,0,0,0
+FILEFLAGSMASK 0x3FL
+FILEFLAGS 0x00L
+FILEOS 0x40004L
+FILETYPE 0x1L
+FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "0C0A04E4"
+ BEGIN
+ VALUE "FileVersion", "1.0.0.0\0"
+ VALUE "ProductVersion", "1.0.0.0\0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x0C0A, 1252
+ END
+END
diff --git a/Source/ApplicationBase/ApplicationBase.res b/Source/ApplicationBase/ApplicationBase.res
new file mode 100644
index 0000000..8b251f3
Binary files /dev/null and b/Source/ApplicationBase/ApplicationBase.res differ
diff --git a/Source/ApplicationBase/Usuarios/Controller/View/uIEditorLogin.pas b/Source/ApplicationBase/Usuarios/Controller/View/uIEditorLogin.pas
new file mode 100644
index 0000000..0f3e505
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Controller/View/uIEditorLogin.pas
@@ -0,0 +1,22 @@
+unit uIEditorLogin;
+
+interface
+
+uses
+ uEditorBase, uUsuariosController;
+
+type
+ IEditorLogin = interface
+ ['{96513A0B-679D-4DD6-8821-C99003DAD2A3}']
+ function ShowModal : Integer;
+ procedure Release;
+
+ function GetController : IUsuariosController;
+ procedure SetController (const AValue : IUsuariosController);
+ property Controller : IUsuariosController read GetController write SetController;
+ end;
+
+
+implementation
+
+end.
diff --git a/Source/ApplicationBase/Usuarios/Controller/View/uIEditorPerfilUsuario.pas b/Source/ApplicationBase/Usuarios/Controller/View/uIEditorPerfilUsuario.pas
new file mode 100644
index 0000000..edc97f3
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Controller/View/uIEditorPerfilUsuario.pas
@@ -0,0 +1,23 @@
+unit uIEditorPerfilUsuario;
+
+interface
+
+uses
+ uEditorDBBase, uBizUsuarios, uUsuariosController;
+
+type
+ IEditorPerfilUsuario = interface(IEditorDBBase)
+ ['{1DE19CC0-E4FA-4FD7-AE70-6430781CAFE4}']
+ function GetPerfilUsuario: IBizPerfilUsuario;
+ procedure SetPerfilUsuario(const Value: IBizPerfilUsuario);
+ property PerfilUsuario: IBizPerfilUsuario read GetPerfilUsuario write SetPerfilUsuario;
+
+ function GetController : IUsuariosController;
+ procedure SetController (const Value : IUsuariosController);
+ property Controller : IUsuariosController read GetController write SetController;
+ end;
+
+
+implementation
+
+end.
diff --git a/Source/ApplicationBase/Usuarios/Controller/View/uIEditorPerfilesUsuario.pas b/Source/ApplicationBase/Usuarios/Controller/View/uIEditorPerfilesUsuario.pas
new file mode 100644
index 0000000..8f91f9d
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Controller/View/uIEditorPerfilesUsuario.pas
@@ -0,0 +1,23 @@
+unit uIEditorPerfilesUsuario;
+
+interface
+
+uses
+ uEditorDBBase, uBizUsuarios, uUsuariosController;
+
+type
+ IEditorPerfilesUsuario = interface(IEditorDBBase)
+ ['{A4EDC876-8290-4AFF-B307-E935CD750842}']
+ function GetPerfilesUsuario: IBizPerfilUsuario;
+ procedure SetPerfilesUsuario(const Value: IBizPerfilUsuario);
+ property PerfilesUsuario: IBizPerfilUsuario read GetPerfilesUsuario write SetPerfilesUsuario;
+
+ function GetController : IUsuariosController;
+ procedure SetController (const Value : IUsuariosController);
+ property Controller : IUsuariosController read GetController write SetController;
+ end;
+
+
+implementation
+
+end.
diff --git a/Source/ApplicationBase/Usuarios/Controller/View/uIEditorUsuario.pas b/Source/ApplicationBase/Usuarios/Controller/View/uIEditorUsuario.pas
new file mode 100644
index 0000000..22c9096
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Controller/View/uIEditorUsuario.pas
@@ -0,0 +1,22 @@
+unit uIEditorUsuario;
+
+interface
+
+uses
+ uEditorDBItem, uUsuariosController, uBizUsuarios;
+
+type
+ IEditorUsuario = interface(IEditorDBItem)
+ ['{D016C4C2-F204-47AA-9327-00379CFFFB14}']
+ function GetController : IUsuariosController;
+ procedure SetController (const Value : IUsuariosController);
+ property Controller : IUsuariosController read GetController write SetController;
+
+ function GetUsuario: IBizUsuario;
+ procedure SetUsuario(const Value: IBizUsuario);
+ property Usuario: IBizUsuario read GetUsuario write SetUsuario;
+ end;
+
+implementation
+
+end.
diff --git a/Source/ApplicationBase/Usuarios/Controller/View/uIEditorUsuarios.pas b/Source/ApplicationBase/Usuarios/Controller/View/uIEditorUsuarios.pas
new file mode 100644
index 0000000..5fd89de
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Controller/View/uIEditorUsuarios.pas
@@ -0,0 +1,23 @@
+unit uIEditorUsuarios;
+
+interface
+
+uses
+ uEditorGridBase, uUsuariosController, uBizUsuarios;
+
+type
+ IEditorUsuarios = interface(IEditorGridBase)
+ ['{236534A8-F225-4EA0-8917-4228E530C604}']
+ function GetController : IUsuariosController;
+ procedure SetController (const Value : IUsuariosController);
+ property Controller : IUsuariosController read GetController write SetController;
+
+ function GetUsuarios: IBizUsuario;
+ procedure SetUsuarios(const Value: IBizUsuario);
+ property Usuarios: IBizUsuario read GetUsuarios write SetUsuarios;
+ end;
+
+
+implementation
+
+end.
diff --git a/Source/ApplicationBase/Usuarios/Controller/uPerfilesUsuarioController.pas b/Source/ApplicationBase/Usuarios/Controller/uPerfilesUsuarioController.pas
new file mode 100644
index 0000000..614e986
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Controller/uPerfilesUsuarioController.pas
@@ -0,0 +1,287 @@
+unit uPerfilesUsuarioController;
+
+interface
+
+
+uses
+ Classes, SysUtils, uDADataTable, uControllerBase, uEditorDBItem,
+ uIDataModuleUsuarios, uBizUsuarios;
+
+type
+ IPerfilesUsuarioController = interface(IObservador)
+ ['{3D60BC4E-B244-4C08-9A1A-00A7C3B74558}']
+ function BuscarTodos: IBizPerfilUsuario;
+ procedure VerTodos;
+ procedure Ver(const AIDPerfil : Integer);
+ procedure Anadir(APerfilUsuario : IBizPerfilUsuario);
+ function Eliminar(APerfilUsuario : IBizPerfilUsuario): Boolean; overload;
+ function Eliminar(const AIDPerfil : Integer): Boolean; overload;
+ function Guardar(APerfilUsuario : IBizPerfilUsuario): Boolean;
+ procedure DescartarCambios(APerfilUsuario : IBizPerfilUsuario);
+ function Localizar(APerfilesUsuario: IBizPerfilUsuario; ADescripcion:String): Boolean;
+ function DarListaPerfilesUsuario: TStringList;
+ end;
+
+ TPerfilesUsuarioController = class(TObservador, IPerfilesUsuarioController)
+ protected
+ FDataModule : IDataModuleUsuarios;
+
+ procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); override;
+ function CreateEditor(const AName : String; const IID: TGUID; out Intf): Boolean;
+
+ //Estos son los tres métodos a sobre escribir si se desea heredar toda la logica de
+ //este controller
+ procedure AsignarDataModule; virtual;
+ procedure ValidarObjetos; virtual;
+
+ public
+ constructor Create; override;
+ destructor Destroy; override;
+
+ function Eliminar(APerfilUsuario : IBizPerfilUsuario): Boolean; overload;
+ function Eliminar(const AIDPerfil : Integer): Boolean; overload;
+ function Guardar(APerfilUsuario : IBizPerfilUsuario): Boolean;
+ procedure DescartarCambios(APerfilUsuario : IBizPerfilUsuario); virtual;
+ procedure Anadir(APerfilUsuario : IBizPerfilUsuario);
+ function BuscarTodos: IBizPerfilUsuario;
+ procedure VerTodos;
+ procedure Ver(const AIDPerfil : Integer);
+ function Localizar(APerfilesUsuario: IBizPerfilUsuario; ADescripcion:String): Boolean;
+ function DarListaPerfilesUsuario: TStringList;
+ end;
+
+implementation
+
+uses
+ cxControls, DB, uEditorRegistryUtils,
+ uDAInterfaces, uDataTableUtils,
+ uDateUtils, uROTypes, DateUtils, Controls, Windows, schUsuariosClient_Intf,
+ uDataModuleUsuarios, uIEditorPerfilesUsuario, uIEditorPerfilUsuario;
+
+{ TPerfilesUsuarioController }
+
+procedure TPerfilesUsuarioController.Anadir(APerfilUsuario: IBizPerfilUsuario);
+begin
+ APerfilUsuario.Insert;
+end;
+
+procedure TPerfilesUsuarioController.AsignarDataModule;
+begin
+ FDataModule := TDataModuleUsuarios.Create(Nil);
+end;
+
+function TPerfilesUsuarioController.BuscarTodos: IBizPerfilUsuario;
+begin
+ Result := FDataModule.GetPerfiles;
+end;
+
+constructor TPerfilesUsuarioController.Create;
+begin
+ inherited;
+ AsignarDataModule;
+end;
+
+function TPerfilesUsuarioController.CreateEditor(const AName: String; const IID: TGUID; out Intf): Boolean;
+begin
+ Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf);
+end;
+
+function TPerfilesUsuarioController.DarListaPerfilesUsuario: TStringList;
+var
+ APerfilesUsuario: IBizPerfilUsuario;
+begin
+ APerfilesUsuario := BuscarTodos;
+ APerfilesUsuario.DataTable.Active := True;
+ Result := TStringList.Create;
+ try
+ with Result do
+ begin
+ APerfilesUsuario.DataTable.First;
+ while not APerfilesUsuario.DataTable.EOF do
+ begin
+ Add(APerfilesUsuario.USERNAME);
+ APerfilesUsuario.DataTable.Next;
+ end;
+ end;
+ finally
+ APerfilesUsuario := NIL;
+ end;
+end;
+
+procedure TPerfilesUsuarioController.DescartarCambios(APerfilUsuario: IBizPerfilUsuario);
+begin
+ if not Assigned(APerfilUsuario) then
+ raise Exception.Create ('Perfil no asignado');
+
+ ShowHourglassCursor;
+ try
+ if (APerfilUsuario.State in dsEditModes) then
+ APerfilUsuario.Cancel;
+
+ APerfilUsuario.DataTable.CancelUpdates;
+ finally
+ HideHourglassCursor;
+ end;
+end;
+
+destructor TPerfilesUsuarioController.Destroy;
+begin
+ FDataModule := Nil;
+ inherited;
+end;
+
+function TPerfilesUsuarioController.Eliminar(const AIDPerfil: Integer): Boolean;
+begin
+
+end;
+
+procedure TPerfilesUsuarioController.ValidarObjetos;
+var
+ AEditor : IEditorPerfilesUsuario;
+ APerfilesUsuario: IBizPerfilUsuario;
+begin
+ APerfilesUsuario := FDataModule.GetPerfiles;
+ if Assigned(APerfilesUsuario) then
+ begin
+ APerfilesUsuario.Active := True;
+ ShowHourglassCursor;
+ try
+ CreateEditor('EditorPerfilesUsuario', IEditorPerfilesUsuario, AEditor);
+ if Assigned(AEditor) then
+ with (AEditor as IEditorPerfilesUsuario) do
+ begin
+ Controller := Self; //OJO ORDEN MUY IMPORTANTE
+ PerfilesUsuario := APerfilesUsuario;
+ ShowEmbedded;
+ end;
+ finally
+ AEditor := NIL;
+ APerfilesUsuario := NIL;
+ HideHourglassCursor;
+ end;
+ end;
+end;
+
+procedure TPerfilesUsuarioController.Ver(const AIDPerfil: Integer);
+var
+ AEditor : IEditorPerfilUsuario;
+ FPerfil : IBizPerfilUsuario;
+begin
+ FPerfil := FDataModule.GetPerfil(AIDPerfil);
+ if Assigned(FPerfil) then
+ begin
+ FPerfil.Active := True;
+ ShowHourglassCursor;
+ try
+ CreateEditor('EditorPerfilUsuario', IEditorPerfilUsuario, AEditor);
+ if Assigned(AEditor) then
+ with (AEditor as IEditorPerfilUsuario) do
+ begin
+ Controller := Self; //OJO ORDEN MUY IMPORTANTE
+ PerfilUsuario := FPerfil;
+ ShowModal;
+ Release;
+ end;
+ finally
+ AEditor := NIL;
+ FPerfil := NIL;
+ HideHourglassCursor;
+ end;
+ end;
+end;
+
+procedure TPerfilesUsuarioController.VerTodos;
+var
+ AEditor : IEditorPerfilesUsuario;
+ APerfilesUsuario: IBizPerfilUsuario;
+begin
+ APerfilesUsuario := FDataModule.GetPerfiles;
+ if Assigned(APerfilesUsuario) then
+ begin
+ APerfilesUsuario.Active := True;
+ ShowHourglassCursor;
+ try
+ CreateEditor('EditorPerfilesUsuario', IEditorPerfilesUsuario, AEditor);
+ if Assigned(AEditor) then
+ with (AEditor as IEditorPerfilesUsuario) do
+ begin
+ Controller := Self; //OJO ORDEN MUY IMPORTANTE
+ PerfilesUsuario := APerfilesUsuario;
+ ShowEmbedded;
+ end;
+ finally
+ AEditor := NIL;
+ APerfilesUsuario := NIL;
+ HideHourglassCursor;
+ end;
+ end;
+end;
+
+function TPerfilesUsuarioController.Eliminar(APerfilUsuario: IBizPerfilUsuario): Boolean;
+begin
+ Result := False;
+
+ if not Assigned(APerfilUsuario) then
+ raise Exception.Create ('Perfil no asignado');
+
+ ShowHourglassCursor;
+ try
+ if (APerfilUsuario.State in dsEditModes) then
+ APerfilUsuario.Cancel;
+
+ APerfilUsuario.Delete;
+ APerfilUsuario.DataTable.ApplyUpdates;
+ HideHourglassCursor;
+ Result := True;
+ finally
+ HideHourglassCursor;
+ end;
+end;
+
+procedure TPerfilesUsuarioController.RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable);
+begin
+ inherited;
+ //
+end;
+
+function TPerfilesUsuarioController.Guardar(APerfilUsuario: IBizPerfilUsuario): Boolean;
+begin
+ Result := False;
+
+ if not Assigned(APerfilUsuario) then
+ raise Exception.Create ('Perfil no asignado');
+
+ ValidarObjetos;
+
+ ShowHourglassCursor;
+ try
+ if (APerfilUsuario.DataTable.State in dsEditModes) then
+ APerfilUsuario.DataTable.Post;
+
+ APerfilUsuario.DataTable.ApplyUpdates;
+
+ Result := True;
+ finally
+ HideHourglassCursor;
+ end;
+end;
+
+function TPerfilesUsuarioController.Localizar(APerfilesUsuario: IBizPerfilUsuario; ADescripcion: String): Boolean;
+begin
+ Result := True;
+ ShowHourglassCursor;
+ try
+ with APerfilesUsuario.DataTable do
+ begin
+ DisableControls;
+ First;
+ if not Locate(fld_PERFILESUSERNAME, ADescripcion, []) then
+ Result := False;
+ EnableControls;
+ end;
+ finally
+ HideHourglassCursor;
+ end;
+end;
+
+end.
diff --git a/Source/ApplicationBase/Usuarios/Controller/uUsuariosController.pas b/Source/ApplicationBase/Usuarios/Controller/uUsuariosController.pas
new file mode 100644
index 0000000..f8c12c4
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Controller/uUsuariosController.pas
@@ -0,0 +1,923 @@
+unit uUsuariosController;
+
+interface
+
+
+uses
+ Classes, SysUtils, Forms, uDADataTable, uControllerBase,
+ uIDataModuleUsuarios, uDataModuleUsuarios, UCBase, uBizUsuarios;
+
+type
+ TUCCriptografia = (ucStandard, ucMD5);
+
+ IUsuariosController = interface(IControllerBase)
+ ['{DD963EEC-5880-4DE7-AF55-B5080B538D84}']
+
+ procedure Logoff;
+ function StartLogin : Boolean;
+ procedure VerUsuarios;
+ procedure VerPerfiles;
+ procedure VerUsuario(const AIDUser: Integer); overload;
+ procedure VerUsuario(AUser : IBizUsuario); overload;
+
+ procedure VerPerfil(const AIDPerfil: Integer); overload;
+ procedure VerPerfil(APerfil : IBizPerfilUsuario); overload;
+
+ procedure _ShowUserManager;
+ procedure _ShowProfileManager;
+ procedure _ShowLogManager;
+ procedure _ShowChangePassword;
+ function ComprobarUsuario(const User : String; const Password: String): Boolean;
+ function CambiarPassword(const AIDUser: Integer): Boolean;
+
+ function GetMaxIntentosLogin: Integer;
+ procedure SetMaxIntentosLogin(const Value: Integer);
+ property MaxIntentosLogin : Integer read GetMaxIntentosLogin write SetMaxIntentosLogin;
+
+ function GetCurrentUser: IBizUsuario;
+ property CurrentUser: IBizUsuario read GetCurrentUser;
+
+ function GuardarPerfil(APerfil : IBizPerfilUsuario): Boolean;
+ function GuardarUsuario(AUser : IBizUsuario): Boolean;
+
+ function EliminarUsuario(const AIDUser : integer): Boolean; overload;
+ function EliminarUsuario(AUser : IBizUsuario): Boolean; overload;
+
+ function EliminarPerfil(APerfil : IBizPerfilUsuario): Boolean; overload;
+ function EliminarPerfil(const AIDPerfil : integer): Boolean; overload;
+
+ function HayUsuarioConPerfil(const AIDPerfil : integer): Boolean;
+
+ function BuscarUsuario(const AIDUser: Integer): IBizUsuario;
+ function BuscarTodosUsuarios: IBizUsuario;
+
+ function DarListaPerfilesUsuario: TStringList;
+ function DarListaUsuarios: TStringList;
+
+ function ValidarPassword(const APassword : string; const ALogin : String;
+ const ANombre: String; out AMsg : String): boolean;
+
+ function NuevoUsuario : IBizUsuario;
+ function NuevoPerfil : IBizPerfilUsuario;
+
+ function GetCriptografia : TUCCriptografia;
+ property Criptografia: TUCCriptografia read GetCriptografia;
+
+ function GetUsarPasswordsSeguras: Boolean;
+ procedure SetUsarPasswordsSeguras(const Value: Boolean);
+ property UsarPasswordsSeguras : Boolean read GetUsarPasswordsSeguras write SetUsarPasswordsSeguras;
+
+{
+ procedure ChangePassword(IDUser: Integer; NewPassword: String);
+ procedure AddRight(idUser: Integer; ItemRight: TObject; FullPath: Boolean = True); overload;
+ procedure AddRight(idUser: Integer; ItemRight: String); overload;
+ procedure AddRightEX(idUser: Integer; Module, FormName, ObjName: String);
+ function VerificaLogin(User, Password: String): Boolean;
+ function GetLocalUserName: String;
+ function GetLocalComputerName: String;
+ function AddUser(Login, Password, Name, Mail: String; Profile , UserExpired , DaysExpired : Integer; PrivUser: Boolean): Integer;
+ function ExisteUsuario(Login: String): Boolean;
+ property CurrentUser: TUCCurrentUser read FCurrentUser write FCurrentUser;
+ property CurrentEmpresa : TEmpresaDef read FEmpresaAtual write FEmpresaAtual;
+ property UserSettings: TUCUserSettings read FUserSettings write SetUserSettings;}
+
+ end;
+
+ TUsuariosController = class(TControllerBase, IUsuariosController)
+ private
+ procedure FiltrarEmpresa(AUsuario: IBizUsuario);
+ protected
+ FDataModule : IDataModuleUsuarios;
+ FUserControl: TUserControl;
+ FCurrentUser : IBizUsuario;
+ FUsarPasswordsSeguras : Boolean;
+
+ function GetMaxIntentosLogin: Integer;
+ procedure SetMaxIntentosLogin(const Value: Integer);
+
+ procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); override;
+ function CreateEditor(const AName : String; const IID: TGUID; out Intf): Boolean;
+
+ procedure AsignarDataModule;
+ procedure InicializarUserControl;
+ function GetCurrentUser: IBizUsuario;
+
+ function AnadirUsuario(AUser : IBizUsuario): Boolean;
+ function ModificarUsuario(AUser : IBizUsuario): Boolean;
+
+ function AnadirPerfil(APerfil : IBizPerfilUsuario): Boolean;
+ function ModificarPerfil(APerfil : IBizPerfilUsuario): Boolean;
+
+ function ValidarUsuario(AUser: IBizUsuario): Boolean;
+ function ValidarPerfil(APerfil: IBizPerfilUsuario): Boolean;
+
+ function GetCriptografia : TUCCriptografia;
+ function CambiarPassword(const AIDUser: Integer; const ANewPassword: String): Boolean; overload;
+
+ function GetUsarPasswordsSeguras: Boolean;
+ procedure SetUsarPasswordsSeguras(const Value: Boolean);
+ public
+ constructor Create; virtual;
+ destructor Destroy; override;
+
+ procedure Logoff;
+ function StartLogin : Boolean;
+ procedure VerUsuarios;
+ procedure VerPerfiles;
+
+ procedure VerUsuario(const AIDUser: Integer); overload;
+ procedure VerUsuario(AUser : IBizUsuario); overload;
+
+ procedure VerPerfil(const AIDPerfil: Integer); overload;
+ procedure VerPerfil(APerfil : IBizPerfilUsuario); overload;
+
+ procedure _ShowUserManager;
+ procedure _ShowProfileManager;
+ procedure _ShowLogManager;
+ procedure _ShowChangePassword;
+ function ComprobarUsuario(const User : String; const Password: String): Boolean;
+ function CambiarPassword(const AIDUser: Integer): Boolean; overload;
+
+ function EliminarUsuario(const AIDUser : integer): Boolean; overload;
+ function EliminarUsuario(AUser : IBizUsuario): Boolean; overload;
+
+ function EliminarPerfil(APerfil : IBizPerfilUsuario): Boolean; overload;
+ function EliminarPerfil(const AIDPerfil : integer): Boolean; overload;
+
+ function NuevoUsuario : IBizUsuario;
+ function NuevoPerfil : IBizPerfilUsuario;
+
+ function GuardarPerfil(APerfil : IBizPerfilUsuario): Boolean;
+ function GuardarUsuario(AUser : IBizUsuario): Boolean;
+
+ function BuscarUsuario(const AIDUser: Integer): IBizUsuario;
+ function BuscarTodosUsuarios: IBizUsuario;
+
+ function DarListaPerfilesUsuario: TStringList;
+ function DarListaUsuarios: TStringList;
+
+ function HayUsuarioConPerfil(const AIDPerfil : integer): Boolean;
+ function ValidarPassword(const APassword : string; const ALogin : String;
+ const ANombre: String; out AMsg : String): boolean;
+
+ property UsarPasswordsSeguras : Boolean read GetUsarPasswordsSeguras write SetUsarPasswordsSeguras;
+ property UserControl : TUserControl read FUserControl;
+ property MaxIntentosLogin : Integer read GetMaxIntentosLogin write SetMaxIntentosLogin;
+ property CurrentUser: IBizUsuario read GetCurrentUser;
+ property Criptografia: TUCCriptografia read GetCriptografia;
+ end;
+
+implementation
+
+uses
+ cxControls, DB, uEditorRegistryUtils, schUsuariosClient_Intf,
+ uDAInterfaces, uDataTableUtils, uDialogUtils, uAdminPV_App, Dialogs,
+ uDateUtils, uROTypes, DateUtils, Controls, Windows, uIEditorLogin,
+ uIEditorUsuarios, uIEditorUsuario, uIEditorPerfilesUsuario,
+ uIEditorPerfilUsuario, uEditorCambiarPassword;
+
+{ TUsuariosController }
+
+function TUsuariosController.AnadirPerfil(APerfil: IBizPerfilUsuario): Boolean;
+
+ function GetNewIdUser: Integer;
+ var
+ TempDs: TDataset;
+ begin
+ with FUserControl do
+ TempDS := DataConnector.UCGetSQLDataSet('SELECT ' + TableUsers.FieldUserID + ' as MaxUserID from ' + TableUsers.TableName +
+ ' ORDER BY ' + TableUsers.FieldUserID + ' DESC');
+ Result := TempDs.FieldByName('MaxUserID').AsInteger + 1;
+ TempDS.Close;
+ FreeAndNil(TempDS);
+ end;
+
+var
+ ANuevoID : Integer;
+begin
+ Result := False;
+
+ if not Assigned(APerfil) then
+ raise Exception.Create('No hay perfil asignado (AnadirPerfil)');
+
+ if ValidarPerfil(APerfil) then
+ begin
+ ShowHourglassCursor;
+ try
+ ANuevoID := GetNewIdUser;
+ with FUserControl do
+ begin
+ DataConnector.UCExecSQL(Format('INSERT INTO %s(%s, %s, %s) Values(%d,%s,%s)',
+ [TableUsers.TableName,
+ TableUsers.FieldUserID,
+ TableUsers.FieldUserName,
+ TableUsers.FieldTypeRec,
+ ANuevoID,
+ QuotedStr(APerfil.USERNAME),
+ QuotedStr('P')]));
+ end;
+
+ Result := (ANuevoID > 0);
+
+ if Result then
+ begin
+ APerfil.Edit;
+ APerfil.ID := ANuevoID;
+ APerfil.Post;
+ end;
+ finally
+ HideHourglassCursor;
+ end;
+ end;
+end;
+
+function TUsuariosController.AnadirUsuario(AUser: IBizUsuario): Boolean;
+var
+ ANuevoID : Integer;
+begin
+ Result := False;
+
+ if not Assigned(AUser) then
+ raise Exception.Create('No hay usuario asignado (AnadirUsuario)');
+
+ if FUserControl.ExisteUsuario(AUser.LOGIN) then
+ begin
+ MessageDlg(Format(FUserControl.UserSettings.CommonMessages.UsuarioExiste, [AUser.LOGIN]), mtWarning, [mbOK], 0);
+ Exit;
+ end;
+
+ if ValidarUsuario(AUser) then
+ begin
+ ShowHourglassCursor;
+ try
+ ANuevoID := FUserControl.AddUser(AUser.LOGIN, AUser.PASS, AUser.USERNAME, AUser.EMAIL,
+ AUser.ID_PERFIL, AUser.BLOQUEADO, AUser.USERDAYSSUN, (AUser.PRIVILEGED = 1));
+
+ Result := (ANuevoID > 0);
+
+ if Result then
+ begin
+ AUser.Edit;
+ AUser.ID := ANuevoID;
+ AUser.Post;
+ end;
+
+ { TODO -oLuiz -cUpgrade : Consertar a Senha para poder avisar MD5 }
+ {if (Assigned(MailUserControl)) and (MailUserControl.AdicionaUsuario.Ativo) then
+ try
+ MailUserControl.EnviaEmailAdicionaUsuario(vNome, vLogin, Encrypt(vNovaSenha, EncryptKey), vEmail, IntToStr(vPerfil), EncryptKey);
+ except
+ on E: Exception do
+ Log(E.Message, llMedio);
+ end;}
+ finally
+ HideHourglassCursor;
+ end;
+ end;
+end;
+
+procedure TUsuariosController.AsignarDataModule;
+begin
+ FDataModule := TDataModuleUsuarios.Create(Nil);
+end;
+
+function TUsuariosController.BuscarTodosUsuarios: IBizUsuario;
+begin
+ Result := FDataModule.GetUsuarios;
+ FiltrarEmpresa(Result);
+end;
+
+function TUsuariosController.BuscarUsuario(const AIDUser: Integer): IBizUsuario;
+begin
+ Result := FDataModule.GetUsuario(AIDUser);
+ FiltrarEmpresa(Result);
+end;
+
+function TUsuariosController.CambiarPassword(const AIDUser: Integer;
+ const ANewPassword: String): Boolean;
+begin
+ FUserControl.ChangePassword(AIDUser, ANewPassword);
+ Result := True;
+end;
+
+function TUsuariosController.CambiarPassword(const AIDUser: Integer) : Boolean;
+var
+ AUser : IBizUsuario;
+ AEditorCambiar : TfEditorCambiarPassword;
+begin
+ AUser := FDataModule.GetUsuario(AIDUser);
+ if Assigned(AUser) then
+ begin
+ AUser.Active := True;
+
+ AEditorCambiar := TfEditorCambiarPassword.Create(NIL);
+ with AEditorCambiar do
+ try
+ Controller := Self;
+ Usuario := AUser;
+ CambioObligatorio := False;
+ if (Length(Trim(AUser.PASS)) = 0) then
+ EditAtu.Enabled := False;
+ if (ShowModal = mrOk) then
+ Result := CambiarPassword(AIDUser, EditNova.Text);
+ finally
+ Release;
+ AUser.Active := False;
+ AUser := NIL;
+ end;
+ end;
+end;
+
+function TUsuariosController.ComprobarUsuario(const User,
+ Password: String): Boolean;
+begin
+ Result := FUserControl.VerificaLogin(User, Password);
+ if not Result then
+ begin
+ if User = 'admin' then
+ begin
+ if not FUserControl.ExisteUsuario('admin') then
+ begin
+ FUserControl.AddUser('admin', '1', 'Administrador', 'admin@correo.net', 0, 0 , 30, True);
+ Result := ComprobarUsuario(User, Password);
+ end;
+ end;
+ end;
+end;
+
+constructor TUsuariosController.Create;
+begin
+ AsignarDataModule;
+ FCurrentUser := NIL;
+ FUserControl := TUserControl.Create(nil);
+ FUsarPasswordsSeguras := False;
+ InicializarUserControl;
+end;
+
+function TUsuariosController.CreateEditor(const AName: String; const IID: TGUID; out Intf): Boolean;
+begin
+ Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf);
+end;
+
+function TUsuariosController.DarListaPerfilesUsuario: TStringList;
+var
+ APerfilesUsuario: IBizPerfilUsuario;
+ i : integer;
+begin
+ APerfilesUsuario := FDataModule.GetPerfiles;
+ APerfilesUsuario.DataTable.Active := True;
+
+ Result := TStringList.Create;
+ try
+ with Result do
+ begin
+ APerfilesUsuario.DataTable.First;
+ while not APerfilesUsuario.DataTable.EOF do
+ begin
+ Add(Format('%s=%d', [APerfilesUsuario.USERNAME, APerfilesUsuario.ID]));
+ APerfilesUsuario.DataTable.Next;
+ end;
+ end;
+ finally
+ APerfilesUsuario := NIL;
+ end;
+end;
+
+function TUsuariosController.DarListaUsuarios: TStringList;
+var
+ AUsuarios: IBizUsuario;
+ i : integer;
+begin
+ AUsuarios := FDataModule.GetUsuarios;
+ AUsuarios.DataTable.Active := True;
+
+ Result := TStringList.Create;
+ try
+ with Result do
+ begin
+ AUsuarios.DataTable.First;
+ while not AUsuarios.DataTable.EOF do
+ begin
+ Add(Format('%s=%d', [AUsuarios.USERNAME, AUsuarios.ID]));
+ AUsuarios.DataTable.Next;
+ end;
+ end;
+ finally
+ AUsuarios := NIL;
+ end;
+end;
+
+destructor TUsuariosController.Destroy;
+begin
+ FreeAndNIL(FUserControl);
+ FDataModule := NIL;
+
+ inherited;
+end;
+
+function TUsuariosController.EliminarPerfil(
+ APerfil: IBizPerfilUsuario): Boolean;
+var
+ CanDelete: Boolean;
+ ErrorMsg: String;
+begin
+ Result := False;
+
+ if not Assigned(APerfil) then
+ raise Exception.Create('No hay perfil asignado (EliminarPerfil)');
+
+ if not APerfil.Active then
+ APerfil.Active := True;
+
+ if APerfil.DataTable.RecordCount = 0 then
+ Exit;
+
+ if HayUsuarioConPerfil(APerfil.ID) then
+ begin
+ //changed by fduenas: PromptDelete_WindowCaption
+ if MessageBox(Application.Handle, PChar(Format(FUserControl.UserSettings.UsersProfile.PromptDelete, [APerfil.USERNAME])),
+ PChar(FUserControl.UserSettings.UsersProfile.PromptDelete_WindowCaption), MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON2) <> idYes then
+ Exit;
+ end;
+
+ CanDelete := True;
+ if Assigned(FUserControl.onDeleteProfile) then
+ FUserControl.onDeleteProfile(NIL, APerfil.ID, CanDelete, ErrorMsg);
+ if not CanDelete then
+ begin
+ MessageDlg(ErrorMSG, mtWarning, [mbOK], 0);
+ Exit;
+ end;
+
+ with FUserControl do
+ begin
+ DataConnector.UCExecSQL('Delete from ' + TableUsers.TableName + ' where ' + TableUsers.FieldUserID + ' = ' + IntToStr(APerfil.ID));
+ DataConnector.UCExecSQL('Delete from ' + TableRights.TableName + ' where ' + TableRights.FieldUserID + ' = ' + IntToStr(APerfil.ID));
+ DataConnector.UCExecSQL('Delete from ' + TableRights.TableName + 'EX where ' + TableRights.FieldUserID + ' = ' + IntToStr(APerfil.ID));
+ DataConnector.UCExecSQL('Update ' + TableUsers.TableName +
+ ' Set ' + TableUsers.FieldProfile + ' = null where ' + TableUsers.FieldUserID + ' = ' + IntToStr(APerfil.ID));
+ end;
+ Result := True;
+end;
+
+function TUsuariosController.EliminarPerfil(const AIDPerfil: integer): Boolean;
+begin
+ Result := EliminarPerfil(FDataModule.GetPerfil(AIDPerfil));
+end;
+
+function TUsuariosController.EliminarUsuario(AUser: IBizUsuario): Boolean;
+begin
+ if not Assigned(AUser) then
+ raise Exception.Create('No hay usuario asignado (EliminarUsuario)');
+
+ if not AUser.Active then
+ AUser.Active := True;
+
+ if AUser.DataTable.RecordCount > 0 then
+ Result := EliminarUsuario(AUser.ID);
+end;
+
+function TUsuariosController.EliminarUsuario(const AIDUser: integer): Boolean;
+begin
+ FUserControl.DataConnector.UCExecSQL('Delete from ' + FUserControl.TableRights.TableName + ' where ' + FUserControl.TableRights.FieldUserID + ' = ' + IntToStr(AIDUser));
+ FUserControl.DataConnector.UCExecSQL('Delete from ' + FUserControl.TableUsers.TableName + ' where ' + FUserControl.TableUsers.FieldUserID + ' = ' + IntToStr(AIDUser));
+ Result := True;
+end;
+
+function TUsuariosController.GetCriptografia: TUCCriptografia;
+begin
+ case FUserControl.Criptografia of
+ cPadrao: Result := ucStandard;
+ cMD5: Result := ucMD5;
+ end;
+end;
+
+function TUsuariosController.GetCurrentUser: IBizUsuario;
+begin
+ if not Assigned(FCurrentUser) or (FCurrentUser.ID <> FUserControl.CurrentUser.UserID) then
+ FCurrentUser := BuscarUsuario(FUserControl.CurrentUser.UserID);
+
+ if not FCurrentUser.Active then
+ FCurrentUser.Active := True;
+
+ Result := FCurrentUser;
+end;
+
+function TUsuariosController.GetMaxIntentosLogin: Integer;
+begin
+ Result := FUserControl.Login.MaxLoginAttempts;
+end;
+
+function TUsuariosController.GetUsarPasswordsSeguras: Boolean;
+begin
+ Result := FUsarPasswordsSeguras;
+end;
+
+function TUsuariosController.GuardarPerfil(APerfil: IBizPerfilUsuario): Boolean;
+begin
+ Result := False;
+
+ if not Assigned(APerfil) then
+ raise Exception.Create('No hay perfil asignado (GuardarPerfil)');
+
+ if APerfil.EsNuevo then
+ Result := AnadirPerfil(APerfil)
+ else
+ Result := ModificarPerfil(APerfil);
+end;
+
+function TUsuariosController.GuardarUsuario(AUser: IBizUsuario): Boolean;
+begin
+ Result := False;
+
+ if not Assigned(AUser) then
+ raise Exception.Create('No hay usuario asignado (GuardarUsuario)');
+
+ if AUser.EsNuevo then
+ Result := AnadirUsuario(AUser)
+ else
+ Result := ModificarUsuario(AUser);
+end;
+
+function TUsuariosController.HayUsuarioConPerfil(
+ const AIDPerfil: integer): Boolean;
+var
+ TempDS: TDataset;
+begin
+ Result := False;
+
+ try
+ TempDS := FUserControl.DataConnector.UCGetSQLDataset('Select ' + FUserControl.TableUsers.FieldUserID + ' as IdUser from ' +
+ FUserControl.TableUsers.TableName +
+ ' Where ' + FUserControl.TableUsers.FieldTypeRec + ' = ' + QuotedStr('U') +
+ ' AND ' + FUserControl.TableUsers.FieldProfile + ' = ' + IntToStr(AIDPerfil));
+
+ Result := (TempDS.FieldByName('IdUser').AsInteger > 0);
+ TempDS.Close;
+ finally
+ FreeAndNil(TempDS);
+ end;
+end;
+
+procedure TUsuariosController.InicializarUserControl;
+begin
+ with FUserControl do
+ begin
+ ApplicationID := Application.ExeName;
+ AutoStart := False;
+ Criptografia := cMD5;
+ CheckValidationKey := True;
+ Login.MaxLoginAttempts := 3;
+ UserPasswordChange.ForcePassword := True;
+ UserPasswordChange.MinPasswordLength := 3;
+ end;
+ FDataModule.InicializarUserControl(FUserControl);
+end;
+
+procedure TUsuariosController.Logoff;
+begin
+ FUserControl.Logoff;
+end;
+
+function TUsuariosController.ModificarPerfil(
+ APerfil: IBizPerfilUsuario): Boolean;
+begin
+ Result := False;
+
+ if not Assigned(APerfil) then
+ raise Exception.Create('No hay perfil asignado (ModificarPerfil)');
+
+ if ValidarPerfil(APerfil) then
+ begin
+ ShowHourglassCursor;
+ try
+ with FUserControl do
+ begin
+ DataConnector.UCExecSQL(Format('UPDATE %s SET %s = %s WHERE %s = %d',
+ [TableUsers.TableName,
+ TableUsers.FieldUserName,
+ QuotedStr(APerfil.USERNAME),
+ TableUsers.FieldUserID,
+ APerfil.ID]));
+ end;
+
+ Result := True;
+ finally
+ HideHourglassCursor;
+ end;
+ end;
+end;
+
+function TUsuariosController.ModificarUsuario(AUser: IBizUsuario): Boolean;
+begin
+ Result := False;
+
+ if not Assigned(AUser) then
+ raise Exception.Create('No hay usuario asignado (ModificarUsuario)');
+
+ if ValidarUsuario(AUser) then
+ begin
+ ShowHourglassCursor;
+ try
+ FUserControl.ChangeUser(AUser.ID, AUser.LOGIN, AUser.USERNAME, AUser.EMAIL,
+ AUser.ID_PERFIL, AUser.BLOQUEADO , AUser.USERDAYSSUN, (AUser.PRIVILEGED = 1));
+
+ Result := True;
+
+ { TODO -oLuiz -cUpgrade : Consertar a Senha para poder avisar MD5 }
+ {if (Assigned(MailUserControl)) and (MailUserControl.AlteraUsuario.Ativo) then
+ try
+ MailUserControl.EnviaEmailAlteraUsuario(vNome,
+ vLogin,
+ TfrmCadastrarUsuario(Self.Owner).FDataSetCadastroUsuario.FieldByName('SENHA').AsString,
+ vEmail,
+ IntToStr(vPerfil),
+ EncryptKey);
+ except
+ on E: Exception do
+ Log(E.Message, 2);
+ end;}
+ finally
+ HideHourglassCursor;
+ end;
+ end;
+end;
+
+function TUsuariosController.NuevoPerfil: IBizPerfilUsuario;
+var
+ APerfil : IBizPerfilUsuario;
+begin
+ APerfil := FDataModule.NuevoPerfil;
+ APerfil.DataTable.Active := True;
+ APerfil.Insert;
+ Result := APerfil;
+end;
+
+function TUsuariosController.NuevoUsuario: IBizUsuario;
+var
+ AUsuario : IBizUsuario;
+begin
+ AUsuario := FDataModule.NuevoUsuario;
+ AUsuario.DataTable.Active := True;
+ AUsuario.Insert;
+ Result := AUsuario;
+end;
+
+procedure TUsuariosController.RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable);
+begin
+ inherited;
+//
+end;
+
+procedure TUsuariosController.SetMaxIntentosLogin(const Value: Integer);
+begin
+ FUserControl.Login.MaxLoginAttempts := Value;
+end;
+
+procedure TUsuariosController.SetUsarPasswordsSeguras(const Value: Boolean);
+begin
+ FUsarPasswordsSeguras := Value;
+end;
+
+procedure TUsuariosController._ShowChangePassword;
+begin
+ FUserControl.ShowChangePassword;
+end;
+
+procedure TUsuariosController._ShowLogManager;
+begin
+ FUserControl.ShowLogManager;
+end;
+
+procedure TUsuariosController._ShowProfileManager;
+begin
+ FUserControl.ShowProfileManager;
+end;
+
+function TUsuariosController.ValidarPassword(const APassword : string;
+ const ALogin : String; const ANombre: String; out AMsg : String): boolean;
+begin
+ Result := False;
+ AMsg := '';
+ if (FUserControl.UserPasswordChange.ForcePassword) and (Length(Trim(APassword)) = 0) then
+ AMsg := FUserControl.UserSettings.CommonMessages.ChangePasswordError.PasswordRequired
+ else
+ if (Length(Trim(APassword)) < FUserControl.UserPasswordChange.MinPasswordLength) then
+ AMsg := Format(FUserControl.UserSettings.CommonMessages.ChangePasswordError.MinPasswordLength, [FUserControl.UserPasswordChange.MinPasswordLength])
+ else
+ if FUsarPasswordsSeguras and (Pos(LowerCase(APassword), 'abcdeasdfqwerzxcv1234567890321654987test' + LowerCase(ALogin) + LowerCase(AMsg)) > 0) then
+ AMsg := FUserControl.UserSettings.CommonMessages.ChangePasswordError.InvalidNewPassword
+ else
+ Result := true;
+end;
+
+function TUsuariosController.ValidarPerfil(APerfil: IBizPerfilUsuario): Boolean;
+begin
+ Result := False;
+
+ if not Assigned(APerfil) then
+ raise Exception.Create ('Perfil no asignado (ValidarPerfil)');
+
+ if (APerfil.DataTable.State in dsEditModes) then
+ APerfil.DataTable.Post;
+
+ if Length(APerfil.USERNAME) = 0 then
+ raise Exception.Create('Debe indicar el nombre del perfil.');
+
+ Result := True;
+end;
+
+function TUsuariosController.ValidarUsuario(AUser: IBizUsuario): Boolean;
+begin
+ Result := False;
+
+ if not Assigned(AUser) then
+ raise Exception.Create ('Usuario no asignado (ValidarUsuario)');
+
+ if (AUser.DataTable.State in dsEditModes) then
+ AUser.DataTable.Post;
+
+ if Length(AUser.USERNAME) = 0 then
+ raise Exception.Create('Debe indicar el nombre completo del usuario.');
+
+ if Length(AUser.LOGIN) = 0 then
+ raise Exception.Create('Debe indicar un login para el usuario.');
+
+ Result := True;
+end;
+
+
+procedure TUsuariosController.VerPerfil(const AIDPerfil: Integer);
+var
+ FPerfil : IBizPerfilUsuario;
+begin
+ FPerfil := FDataModule.GetPerfil(AIDPerfil);
+ VerPerfil(FPerfil);
+end;
+
+procedure TUsuariosController.VerPerfil(APerfil: IBizPerfilUsuario);
+var
+ AEditor : IEditorPerfilUsuario;
+begin
+ if not Assigned(APerfil) then
+ raise Exception.Create('Perfil no asignado (VerPerfil)');
+
+ APerfil.Active := True;
+ ShowHourglassCursor;
+ try
+ CreateEditor('EditorPerfilUsuario', IEditorPerfilUsuario, AEditor);
+ if Assigned(AEditor) then
+ with (AEditor as IEditorPerfilUsuario) do
+ begin
+ Controller := Self; //OJO ORDEN MUY IMPORTANTE
+ PerfilUsuario := APerfil;
+ ShowModal;
+ Release;
+ end;
+ finally
+ AEditor := NIL;
+ HideHourglassCursor;
+ end;
+end;
+
+procedure TUsuariosController.VerPerfiles;
+var
+ AEditor : IEditorPerfilesUsuario;
+ APerfilesUsuario: IBizPerfilUsuario;
+begin
+ APerfilesUsuario := FDataModule.GetPerfiles;
+ if Assigned(APerfilesUsuario) then
+ begin
+ APerfilesUsuario.Active := True;
+ ShowHourglassCursor;
+ try
+ CreateEditor('EditorPerfilesUsuario', IEditorPerfilesUsuario, AEditor);
+ if Assigned(AEditor) then
+ with (AEditor as IEditorPerfilesUsuario) do
+ begin
+ Controller := Self; //OJO ORDEN MUY IMPORTANTE
+ PerfilesUsuario := APerfilesUsuario;
+ ShowEmbedded;
+ end;
+ finally
+ AEditor := NIL;
+ APerfilesUsuario := NIL;
+ HideHourglassCursor;
+ end;
+ end;
+end;
+
+procedure TUsuariosController.VerUsuario(const AIDUser: Integer);
+var
+ FUsuario : IBizUsuario;
+begin
+ FUsuario := FDataModule.GetUsuario(AIDUser);
+ VerUsuario(FUsuario);
+end;
+
+procedure TUsuariosController.VerUsuario(AUser: IBizUsuario);
+var
+ AEditor : IEditorUsuario;
+begin
+ if not Assigned(AUser) then
+ raise Exception.Create('Usuario no asignado (VerUsuario)');
+
+ AUser.Active := True;
+ ShowHourglassCursor;
+ try
+ CreateEditor('EditorUsuario', IEditorUsuario, AEditor);
+ if Assigned(AEditor) then
+ with (AEditor as IEditorUsuario) do
+ begin
+ Controller := Self; //OJO ORDEN MUY IMPORTANTE
+ Usuario := AUser;
+ ShowModal;
+ Release;
+ end;
+ finally
+ AEditor := NIL;
+ HideHourglassCursor;
+ end;
+end;
+
+procedure TUsuariosController.VerUsuarios;
+var
+ AEditor : IEditorUsuarios;
+ FUsuarios : IBizUsuario;
+begin
+ FUsuarios := FDataModule.GetUsuarios;
+ if Assigned(FUsuarios) then
+ begin
+ FUsuarios.Active := True;
+ ShowHourglassCursor;
+ try
+ CreateEditor('EditorUsuarios', IEditorUsuarios, AEditor);
+ if Assigned(AEditor) then
+ with (AEditor as IEditorUsuarios) do
+ begin
+ Controller := Self; //OJO ORDEN MUY IMPORTANTE
+ Usuarios := FUsuarios;
+ ShowEmbedded;
+ end;
+ finally
+ AEditor := NIL;
+ FUsuarios := NIL;
+ HideHourglassCursor;
+ end;
+ end;
+end;
+
+procedure TUsuariosController._ShowUserManager;
+begin
+ FUserControl.ShowUserManager;
+end;
+
+function TUsuariosController.StartLogin : Boolean;
+var
+ AEditor : IEditorLogin;
+begin
+ Result := False;
+ AEditor := NIL;
+ ShowHourglassCursor;
+ try
+ CreateEditor('EditorLogin', IEditorLogin, AEditor);
+ if Assigned(AEditor) then
+ with AEditor do
+ begin
+ Controller := Self;
+ Result := (AEditor.ShowModal = mrOk);
+ Release;
+ end;
+ finally
+ AEditor := NIL;
+ HideHourglassCursor;
+ end;
+end;
+
+procedure TUsuariosController.FiltrarEmpresa(AUsuario: IBizUsuario);
+var
+ Condicion: TDAWhereExpression;
+begin
+
+ // AQUI HAY QUE TENER EN CUENTA QUE UN USUARIO PUEDE QUE NO TENGA ACCESO
+ // EN UNA DETERMINADA EMPRESA
+
+
+{ if AUsuario.DataTable.Active then
+ AUsuario.DataTable.Active := False;
+
+ // Filtrar los contactos actuales por empresa
+ with AUsuario.DataTable.DynamicWhere do
+ begin
+ Condicion := NewBinaryExpression(NewField('', fld_U
+ ContactosID_EMPRESA), NewConstant(AppFactuGES.EmpresaActiva.ID, datInteger), dboEqual);
+
+ if IsEmpty then
+ Expression := Condicion
+ else
+ Expression := NewBinaryExpression(Expression, Condicion, dboAnd);
+ end;}
+end;
+
+
+end.
diff --git a/Source/ApplicationBase/Usuarios/Data/uDataModuleUsuarios.dfm b/Source/ApplicationBase/Usuarios/Data/uDataModuleUsuarios.dfm
new file mode 100644
index 0000000..90e07e7
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Data/uDataModuleUsuarios.dfm
@@ -0,0 +1,426 @@
+inherited DataModuleUsuarios: TDataModuleUsuarios
+ OnCreate = DataModuleCreate
+ Height = 215
+ Width = 331
+ object srvUsuarios: TRORemoteService
+ Message = dmBase.ROMessage
+ Channel = dmBase.ROChannel
+ ServiceName = 'srvUsuarios'
+ Left = 40
+ Top = 80
+ end
+ object UCSettingsSpanish: TUCSettings
+ AppMessages.MsgsForm_BtNew = '&Nuevo Mensaje'
+ AppMessages.MsgsForm_BtReplay = '&Responder'
+ AppMessages.MsgsForm_BtForward = '&Reenviar'
+ AppMessages.MsgsForm_BtDelete = '&Borrar'
+ AppMessages.MsgsForm_BtClose = '&Cerrar'
+ AppMessages.MsgsForm_WindowCaption = 'Mensajes de Sistema'
+ AppMessages.MsgsForm_ColFrom = 'Remitente'
+ AppMessages.MsgsForm_ColSubject = 'Asunto'
+ AppMessages.MsgsForm_ColDate = 'Fecha'
+ AppMessages.MsgsForm_PromptDelete = #191'Est'#225' seguro de eliminar los mensajes seleccionados?'
+ AppMessages.MsgsForm_PromptDelete_WindowCaption = 'Eliminar mensajes'
+ AppMessages.MsgsForm_NoMessagesSelected = '!Ning'#250'n mensaje seleccionado'#161
+ AppMessages.MsgsForm_NoMessagesSelected_WindowCaption = 'Informaci'#243'n'
+ AppMessages.MsgRec_BtClose = '&Cerrar'
+ AppMessages.MsgRec_WindowCaption = 'Mensaje'
+ AppMessages.MsgRec_Title = 'Mensaje Recibido'
+ AppMessages.MsgRec_LabelFrom = 'De:'
+ AppMessages.MsgRec_LabelDate = 'Fecha'
+ AppMessages.MsgRec_LabelSubject = 'Asunto'
+ AppMessages.MsgRec_LabelMessage = 'Mensaje'
+ AppMessages.MsgSend_BtSend = '&Enviar'
+ AppMessages.MsgSend_BtCancel = '&Cancelar'
+ AppMessages.MsgSend_WindowCaption = 'Mensaje'
+ AppMessages.MsgSend_Title = 'Enviar Nuevo Mensaje'
+ AppMessages.MsgSend_GroupTo = 'Para:'
+ AppMessages.MsgSend_RadioUser = 'Usuario:'
+ AppMessages.MsgSend_RadioAll = 'Todos'
+ AppMessages.MsgSend_GroupMessage = 'Mensaje'
+ AppMessages.MsgSend_LabelSubject = 'Asunto'
+ AppMessages.MsgSend_LabelMessageText = 'Texto del mensaje'
+ CommonMessages.AutoLogonError =
+ 'Error de Ingreso Autom'#225'tico!'#13#10'Especifique un Usuario y Contrase'#241 +
+ 'a V'#225'lidos.'
+ CommonMessages.ChangePasswordError.InvalidCurrentPassword = #161'Contrase'#241'a Actual Incorrecta!'
+ CommonMessages.ChangePasswordError.NewPasswordError =
+ 'Los campos Contrase'#241'a Nueva y Confirme Contrase'#241'a deben ser igua' +
+ 'les'
+ CommonMessages.ChangePasswordError.NewEqualCurrent = 'Nueva Contrase'#241'a y Contrase'#241'a Actual deben ser diferentes'
+ CommonMessages.ChangePasswordError.PasswordRequired = #161'La Contrase'#241'a es obligatoria!'
+ CommonMessages.ChangePasswordError.MinPasswordLength = 'La Contrase'#241'a debe tener un m'#237'nimo de %d caracteres'
+ CommonMessages.ChangePasswordError.InvalidNewPassword = #161'Prohibido utilizar contrase'#241'as NO Seguras!'
+ CommonMessages.InvalidLogin = 'Usuario y/o Contrase'#241'a Incorrectos!'
+ CommonMessages.InitialMessage.Strings = (
+ 'ATENCION! Conecci'#243'n Inicial:'
+ ''
+ 'Usuario : :user'
+ 'Contrase'#241'a : :password'
+ ''
+ 'Defina permisos para este usuario')
+ CommonMessages.MaxLoginAttemptsError = '%d Intentos de conecci'#243'n inv'#225'lidos !'
+ CommonMessages.PasswordChanged = #161'Se ha cambiado la Contrase'#241'a con '#233'xito!'
+ CommonMessages.BlankPassword = 'Contrase'#241'a vac'#237'a para el Usuario %s'
+ CommonMessages.UsuarioExiste = 'O Usu'#225'rio "%s" j'#225' est'#225' cadastrado no sistema !!'
+ CommonMessages.PasswordExpired = 'Aten'#231#227'o, sua senha expirou, favor troca-la'
+ CommonMessages.ForcaTrocaSenha = 'Mudan'#231'a de senha obrigat'#243'ria'
+ Login.WindowCaption = 'Conecci'#243'n'
+ Login.LabelUser = 'Usuario: '
+ Login.LabelPassword = 'Contrase'#241'a:'
+ Login.BtOk = 'Aceptar'
+ Login.BtCancel = '&Cancelar'
+ Login.LeftImage.Data = {
+ 07544269746D617016090000424D160900000000000036040000280000003200
+ 0000180000000100080000000000E00400000000000000000000000100000000
+ 000000000000000080000080000000808000800000008000800080800000C0C0
+ C000C0DCC000F0CAA6000020400000206000002080000020A0000020C0000020
+ E00000400000004020000040400000406000004080000040A0000040C0000040
+ E00000600000006020000060400000606000006080000060A0000060C0000060
+ E00000800000008020000080400000806000008080000080A0000080C0000080
+ E00000A0000000A0200000A0400000A0600000A0800000A0A00000A0C00000A0
+ E00000C0000000C0200000C0400000C0600000C0800000C0A00000C0C00000C0
+ E00000E0000000E0200000E0400000E0600000E0800000E0A00000E0C00000E0
+ E00040000000400020004000400040006000400080004000A0004000C0004000
+ E00040200000402020004020400040206000402080004020A0004020C0004020
+ E00040400000404020004040400040406000404080004040A0004040C0004040
+ E00040600000406020004060400040606000406080004060A0004060C0004060
+ E00040800000408020004080400040806000408080004080A0004080C0004080
+ E00040A0000040A0200040A0400040A0600040A0800040A0A00040A0C00040A0
+ E00040C0000040C0200040C0400040C0600040C0800040C0A00040C0C00040C0
+ E00040E0000040E0200040E0400040E0600040E0800040E0A00040E0C00040E0
+ E00080000000800020008000400080006000800080008000A0008000C0008000
+ E00080200000802020008020400080206000802080008020A0008020C0008020
+ E00080400000804020008040400080406000804080008040A0008040C0008040
+ E00080600000806020008060400080606000806080008060A0008060C0008060
+ E00080800000808020008080400080806000808080008080A0008080C0008080
+ E00080A0000080A0200080A0400080A0600080A0800080A0A00080A0C00080A0
+ E00080C0000080C0200080C0400080C0600080C0800080C0A00080C0C00080C0
+ E00080E0000080E0200080E0400080E0600080E0800080E0A00080E0C00080E0
+ E000C0000000C0002000C0004000C0006000C0008000C000A000C000C000C000
+ E000C0200000C0202000C0204000C0206000C0208000C020A000C020C000C020
+ E000C0400000C0402000C0404000C0406000C0408000C040A000C040C000C040
+ E000C0600000C0602000C0604000C0606000C0608000C060A000C060C000C060
+ E000C0800000C0802000C0804000C0806000C0808000C080A000C080C000C080
+ E000C0A00000C0A02000C0A04000C0A06000C0A08000C0A0A000C0A0C000C0A0
+ E000C0C00000C0C02000C0C04000C0C06000C0C08000C0C0A000F0FBFF00A4A0
+ A000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF
+ FF00FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+ FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD0000FDFDFDFDFDFDFDFDFDFD
+ FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD525252525252525252525252
+ 5252FDFDFDFDFDFD0000FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+ FDFDFDFDFDFDFDAFB75E5E5E66666767676F6F6F6FB752FDFDFDFDFD0000FDFD
+ FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDAFBF6FBFBF
+ BFBFBFBFBFBFBFBFBFB752FDFDFDFDFD0000FDFDFDFDFDFDFDFDFDFDFDFDFDFD
+ FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDAFB76F676F6FB7B7B7B7B7776F5EB752FD
+ FDFDFDFD0000FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+ FDFDFDAFBF6FBFBFBFBFBFBFBFBFBFBFBFB752FDFDFDFDFD0000FDFDFDFDFDFD
+ FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDAFB76F676F6F6FB7B7
+ B7B7776F5EB752FDFDFDFDFD0000FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+ FDFDFDFDFDFDFDFDFDFDFDAFBF6FBFBFBFBFBFBFBFBFBFBFBFBF52FDFDFDFDFD
+ 0000FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDAF
+ B76767676F6F6FB7B7B7776F5EB752FDFDFDFDFD0000FDFDFDFDFDFDFDFDFDFD
+ FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDAFBF6FBFBFBFBFBFBFBFBFBFBF
+ BFBF52FDFDFDFDFD0000FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+ FDFDFDFDFDFDFDAFB76767676F6F6F6FB7B7776F5EB752FDFDFDFDFD0000FDFD
+ FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDAFBF6FBFBF
+ BFBFBFBFBFBFBFBFBFBF52FDFDFDFDFD0000FDFDFDFDFDFDFDFDFDFDFDFDFDFD
+ FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDAFBFB7AFAFB7B7B7B7BFBFBFBFB7B752FD
+ FDFDFDFD0000FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+ FDFDFDFDAFB76F675E5E5E5E5E5E676FB7A5FDFDFDFDFDFD0000FDFDFDFDFDFD
+ FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF7F79BFDFDFDFD
+ FDFDA4F7A3FDFDFDFDFDFDFD0000FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+ FDFDFDFDFDFDFDFDFDFDFDFDFDF7F79BFDFDFDFDFDFDA407A3FDFDFDFDFDFDFD
+ 0000FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+ FDF7F79BFDFDFDFDFDFDA407A3FDFDFDFDFDFDFD0000FDFDFDFDFDFDFDFDFDFD
+ FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF7F7A4FDFDFDFDFDFDF707
+ A3FDFDFDFDFDFDFD0000FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+ FDFDFDFDFDFDFDFDFDF707A49AFDFDFDFDA30707A3FDFDFDFDFDFDFD0000FDFD
+ FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF7F6A4
+ A49B9A9AA3A407079AFDFDFDFDFDFDFD0000FDFDFDFDFDFDFDFDFDFDFDFDFDFD
+ FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF7F6F7F7A4A4F70707A3FDFDFDFD
+ FDFDFDFD0000FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+ FDFDFDFDFDFDFDF7F6F6F6F6F607A3FDFDFDFDFDFDFDFDFD0000FDFDFDFDFDFD
+ FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF7A3A3A3
+ A3A3FDFDFDFDFDFDFDFDFDFD0000FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+ FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+ 0000}
+ Login.LabelTentativa = 'Tentativa : '
+ Login.LabelTentativas = 'M'#225'ximo de Tentativas : '
+ Log.WindowCaption = 'Seguridad'
+ Log.LabelDescription = 'Visor de Eventos'
+ Log.LabelUser = 'Usuario:'
+ Log.LabelDate = 'Fecha:'
+ Log.LabelLevel = 'Nivel M'#237'nimo: '
+ Log.ColAppID = 'AppID'
+ Log.ColLevel = 'Nivel'
+ Log.ColMessage = 'Mensaje'
+ Log.ColUser = 'Usuario'
+ Log.ColDate = 'Fecha'
+ Log.BtFilter = '&Aplicar Filtro'
+ Log.BtDelete = '&Borrar Bit'#225'cora'
+ Log.BtClose = '&Cerrar'
+ Log.PromptDelete =
+ #191'Est'#225' seguro de Eliminar todos todos los registros de Bit'#225'cora s' +
+ 'eleccionados?'
+ Log.PromptDelete_WindowCaption = 'Confirmaci'#243'n'
+ Log.OptionUserAll = 'Todos'
+ Log.OptionLevelLow = 'Bajo'
+ Log.OptionLevelNormal = 'Normal'
+ Log.OptionLevelHigh = 'Alto'
+ Log.OptionLevelCritic = 'Cr'#237'tico'
+ Log.DeletePerformed =
+ 'Borrado de registros de bit'#225'cora realizado: Usuario = "%s" | Fec' +
+ 'ha = %s a %s | Nivel <= %s'
+ UsersForm.WindowCaption = 'Seguridad'
+ UsersForm.LabelDescription = 'Administraci'#243'n de Usuarios'
+ UsersForm.ColName = 'Nombre'
+ UsersForm.ColLogin = 'Usuario'
+ UsersForm.ColEmail = 'Correo'
+ UsersForm.BtAdd = '&Nuevo'
+ UsersForm.BtChange = '&Editar'
+ UsersForm.BtDelete = 'E&liminar'
+ UsersForm.PromptDelete = #191'Est'#225' seguro de Eliminar al Usuario "%s"?'
+ UsersForm.PromptDelete_WindowCaption = 'Eliminar usuario'
+ UsersForm.BtRights = '&Accesos'
+ UsersForm.BtPassword = 'C&ontrase'#241'a'
+ UsersForm.BtClose = '&Cerrar'
+ AddChangeUser.WindowCaption = 'Administraci'#243'n de Usuarios'
+ AddChangeUser.LabelAdd = 'Nuevo Usuario'
+ AddChangeUser.LabelChange = 'Editar Usuario'
+ AddChangeUser.LabelName = 'Nombre:'
+ AddChangeUser.LabelLogin = 'Usuario: '
+ AddChangeUser.LabelEmail = 'Correo: '
+ AddChangeUser.LabelPerfil = 'Perfil: '
+ AddChangeUser.CheckPrivileged = 'Usuario Privilegiado'
+ AddChangeUser.BtSave = '&Guardar'
+ AddChangeUser.BtCancel = 'Cancelar'
+ AddChangeUser.CheckExpira = 'Senha do usu'#225'rio n'#227'o expira'
+ AddChangeUser.Day = 'Dias'
+ AddChangeUser.ExpiredIn = 'Expira em'
+ AddChangeProfile.WindowCaption = 'Perfiles de Usuarios'
+ AddChangeProfile.LabelAdd = 'Nuevo Perfil'
+ AddChangeProfile.LabelChange = 'Editar Perfil'
+ AddChangeProfile.LabelName = 'Descripci'#243'n: '
+ AddChangeProfile.BtSave = '&Guardar'
+ AddChangeProfile.BtCancel = 'Cancelar'
+ UsersProfile.WindowCaption = 'Seguridad'
+ UsersProfile.LabelDescription = 'Perfil de Usuario'
+ UsersProfile.ColProfile = 'Perfil'
+ UsersProfile.BtAdd = '&Nuevo'
+ UsersProfile.BtChange = '&Editar'
+ UsersProfile.BtDelete = 'E&liminar'
+ UsersProfile.BtRights = '&Accesos'
+ UsersProfile.PromptDelete =
+ 'Existe(n) usuario(s) con el Perfil "%s". '#191'Est'#225' seguro de elimina' +
+ 'r el perfil?'
+ UsersProfile.PromptDelete_WindowCaption = 'Eliminar perfil'
+ UsersProfile.BtClose = '&Cerrar'
+ Rights.WindowCaption = 'Seguridad'
+ Rights.LabelUser = 'Permisos de Usuario : '
+ Rights.LabelProfile = 'Permisos del Perfil : '
+ Rights.PageMenu = 'Elementos del Men'#250
+ Rights.PageActions = 'Acciones'
+ Rights.PageControls = 'Controles'
+ Rights.BtUnlock = '&Permitir'
+ Rights.BtLock = '&Bloquear'
+ Rights.BtSave = '&Guardar'
+ Rights.BtCancel = '&Cancelar'
+ ChangePassword.WindowCaption = 'Seguridad'
+ ChangePassword.LabelDescription = 'Cambiar Contrase'#241'a'
+ ChangePassword.LabelCurrentPassword = 'Contrase'#241'a Actual:'
+ ChangePassword.LabelNewPassword = 'Nueva Contrase'#241'a:'
+ ChangePassword.LabelConfirm = 'Confirme Contrase'#241'a:'
+ ChangePassword.BtSave = '&Guardar'
+ ChangePassword.BtCancel = 'Cancelar'
+ ResetPassword.WindowCaption = 'Ingrese Contrase'#241'a de Usuario: "%s"'
+ ResetPassword.LabelPassword = 'Contrase'#241'a: '
+ History.Evento_Insert = 'Nuevo'
+ History.Evento_Delete = 'Eliminar'
+ History.Evento_Edit = 'Editar'
+ History.Evento_NewRecord = 'Nuevo registro'
+ History.Hist_All = 'Todos'
+ History.Msg_LimpHistorico = 'Excluir el contenido entero del hist'#243'rico ?'
+ History.Msg_MensConfirma = 'Confirme'
+ History.Msg_LogEmptyHistory = 'El usuario %s borra la historia de mesa en %s '
+ History.LabelDescricao = 'Hist'#243'rico de tabelas'
+ History.LabelUser = 'Usuario'
+ History.LabelForm = 'Formul'#225'rio'
+ History.LabelEvento = 'Evento'
+ History.LabelTabela = 'Tabela'
+ History.LabelDataEvento = 'Data'
+ History.LabelHoraEvento = 'Hora'
+ History.Msg_NewRecord = '%s Inserte el nuevo registro'
+ History.Hist_MsgExceptPropr = 'Por favor informe la propiedad %s'
+ History.Hist_BtnFiltro = '&Aplicar Filtro'
+ History.Hist_BtnExcluir = '&Borrar Hist'#243'rico'
+ History.Hist_BtnFechar = '&Cerrar'
+ TypeFieldsDB.Type_VarChar = 'VarChar'
+ TypeFieldsDB.Type_Char = 'Char'
+ TypeFieldsDB.Type_Int = 'Int'
+ TypeFieldsDB.Type_MemoField = 'BLOB SUB_TYPE 1 SEGMENT SIZE 1024'
+ Language = ucSpanish
+ Left = 40
+ Top = 16
+ end
+ object rda_Usuarios: TDARemoteDataAdapter
+ GetSchemaCall.RemoteService = srvUsuarios
+ GetDataCall.RemoteService = srvUsuarios
+ UpdateDataCall.RemoteService = srvUsuarios
+ GetScriptsCall.RemoteService = srvUsuarios
+ RemoteService = srvUsuarios
+ DataStreamer = Bin2DataStreamer
+ Left = 176
+ Top = 16
+ end
+ object Bin2DataStreamer: TDABin2DataStreamer
+ Left = 40
+ Top = 144
+ end
+ object tbl_USUARIOS: TDAMemDataTable
+ RemoteUpdatesOptions = []
+ Fields = <
+ item
+ Name = 'ID'
+ DataType = datAutoInc
+ GeneratorName = 'GEN_USUARIOS_ID'
+ Required = True
+ DictionaryEntry = 'USUARIOS_ID'
+ InPrimaryKey = True
+ end
+ item
+ Name = 'USERNAME'
+ DataType = datString
+ Size = 30
+ DisplayLabel = 'Nombre'
+ DictionaryEntry = 'USUARIOS_USERNAME'
+ end
+ item
+ Name = 'LOGIN'
+ DataType = datString
+ Size = 30
+ DisplayLabel = 'Login'
+ DictionaryEntry = 'USUARIOS_LOGIN'
+ end
+ item
+ Name = 'PASS'
+ DataType = datString
+ Size = 250
+ DisplayLabel = 'Password'
+ DictionaryEntry = 'USUARIOS_PASS'
+ end
+ item
+ Name = 'PASSEXPIRED'
+ DataType = datDateTime
+ DisplayLabel = 'Expiraci'#243'n de password'
+ DictionaryEntry = 'USUARIOS_PASSEXPIRED'
+ end
+ item
+ Name = 'BLOQUEADO'
+ DataType = datSmallInt
+ DisplayLabel = 'Bloqueado'
+ DictionaryEntry = 'USUARIOS_BLOQUEADO'
+ end
+ item
+ Name = 'EMAIL'
+ DataType = datString
+ Size = 150
+ DisplayLabel = 'Correo electr'#243'nico'
+ DictionaryEntry = 'USUARIOS_EMAIL'
+ end
+ item
+ Name = 'USERDAYSSUN'
+ DataType = datInteger
+ DisplayLabel = 'USUARIOS_USERDAYSSUN'
+ DictionaryEntry = 'USUARIOS_USERDAYSSUN'
+ end
+ item
+ Name = 'PRIVILEGED'
+ DataType = datInteger
+ DisplayLabel = 'Privilegiado'
+ DictionaryEntry = 'USUARIOS_PRIVILEGED'
+ end
+ item
+ Name = 'TIPO'
+ DataType = datString
+ Size = 1
+ DisplayLabel = 'Tipo'
+ DictionaryEntry = 'USUARIOS_TIPO'
+ end
+ item
+ Name = 'ID_PERFIL'
+ DataType = datInteger
+ DictionaryEntry = 'USUARIOS_ID_PERFIL'
+ end
+ item
+ Name = 'CHECKSUM'
+ DataType = datString
+ Size = 250
+ DisplayLabel = 'Checksum'
+ DictionaryEntry = 'USUARIOS_CHECKSUM'
+ end>
+ Params = <>
+ StreamingOptions = [soDisableEventsWhileStreaming]
+ RemoteDataAdapter = rda_Usuarios
+ DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch]
+ MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates]
+ LogicalName = 'USUARIOS'
+ IndexDefs = <>
+ Left = 176
+ Top = 80
+ end
+ object ds_USUARIOS: TDADataSource
+ DataSet = tbl_USUARIOS.Dataset
+ DataTable = tbl_USUARIOS
+ Left = 176
+ Top = 136
+ end
+ object tbl_PERFILES: TDAMemDataTable
+ RemoteUpdatesOptions = []
+ Fields = <
+ item
+ Name = 'ID'
+ DataType = datAutoInc
+ GeneratorName = 'GEN_USUARIOS_ID'
+ Required = True
+ DictionaryEntry = 'PERFILES_ID'
+ InPrimaryKey = True
+ end
+ item
+ Name = 'USERNAME'
+ DataType = datString
+ Size = 30
+ DisplayLabel = 'Nombre'
+ DictionaryEntry = 'PERFILES_USERNAME'
+ end
+ item
+ Name = 'LOGIN'
+ DataType = datString
+ Size = 30
+ DisplayLabel = 'Login'
+ DictionaryEntry = 'PERFILES_LOGIN'
+ end
+ item
+ Name = 'TIPO'
+ DataType = datString
+ Size = 1
+ DisplayLabel = 'Tipo'
+ DictionaryEntry = 'PERFILES_TIPO'
+ end>
+ Params = <>
+ StreamingOptions = [soDisableEventsWhileStreaming]
+ RemoteDataAdapter = rda_Usuarios
+ DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch]
+ MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates]
+ LogicalName = 'PERFILES'
+ IndexDefs = <>
+ Left = 272
+ Top = 80
+ end
+ object ds_PERFILES: TDADataSource
+ DataSet = tbl_PERFILES.Dataset
+ DataTable = tbl_PERFILES
+ Left = 272
+ Top = 136
+ end
+end
diff --git a/Source/ApplicationBase/Usuarios/Data/uDataModuleUsuarios.pas b/Source/ApplicationBase/Usuarios/Data/uDataModuleUsuarios.pas
new file mode 100644
index 0000000..9eac715
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Data/uDataModuleUsuarios.pas
@@ -0,0 +1,465 @@
+unit uDataModuleUsuarios;
+
+interface
+
+uses
+ SysUtils, Classes, DB, DBClient, uDADataTable,
+ VARELA_Intf,
+ UCBase, UCDataConnector, uUCROConn, uDARemoteDataAdapter,
+ uDARemoteCommand, uROClient, uRORemoteService, uDADataStreamer,
+ uDABin2DataStreamer, uDAScriptingProvider, uIDataModuleUsuarios, UCSettings,
+ uDataModuleBase, uDAInterfaces, uDAMemDataTable, uBizUsuarios;
+
+type
+ TDataModuleUsuarios = class(TDataModuleBase, IDataModuleUsuarios)
+ srvUsuarios: TRORemoteService;
+ UCSettingsSpanish: TUCSettings;
+ rda_Usuarios: TDARemoteDataAdapter;
+ Bin2DataStreamer: TDABin2DataStreamer;
+ tbl_USUARIOS: TDAMemDataTable;
+ ds_USUARIOS: TDADataSource;
+ tbl_PERFILES: TDAMemDataTable;
+ ds_PERFILES: TDADataSource;
+ procedure DataModuleCreate(Sender: TObject);
+ private
+ procedure InicializarCamposUserControl(AUserControl: TUserControl);
+ procedure InicializarSettingsUserControl(AUserControl: TUserControl);
+ function CreateConnectorInstance : TUCDataConnector;
+ public
+ function GetUsuario(const ID : Integer) : IBizUsuario;
+ function NuevoUsuario : IBizUsuario;
+ function GetUsuarios : IBizUsuario;
+
+ function NuevoPerfil : IBizPerfilUsuario;
+ function GetPerfiles : IBizPerfilUsuario;
+ function GetPerfil (const ID : Integer) : IBizPerfilUsuario;
+
+ procedure InicializarUserControl (AUserControl : TUserControl);
+ end;
+
+
+implementation
+
+{$R *.DFM}
+
+uses
+ Forms, Controls, uDataTableUtils, uDMBase,
+ Dialogs, Windows, cxControls,
+ schUsuariosClient_Intf;
+
+const
+ ID_NULO = -9000;
+
+
+{ TDataModuleUsuarios }
+
+function TDataModuleUsuarios.CreateConnectorInstance: TUCDataConnector;
+begin
+ // El propietario (Owner) es Application para que se encarge de la
+ // liberación del conector que estamos creando.
+ Result := TUCROConn.Create(Application);
+ with TUCROConn(Result) do
+ begin
+ ROServiceName := srvUsuarios.ServiceName;
+ ROChannel := dmBase.ROChannel;
+ ROMessage := dmBase.ROMessage;
+ end;
+end;
+
+function TDataModuleUsuarios.NuevoPerfil: IBizPerfilUsuario;
+begin
+ Result := GetPerfil(ID_NULO)
+end;
+
+function TDataModuleUsuarios.NuevoUsuario: IBizUsuario;
+begin
+ Result := GetUsuario(ID_NULO)
+end;
+
+procedure TDataModuleUsuarios.DataModuleCreate(Sender: TObject);
+begin
+ inherited;
+ srvUsuarios.Channel := dmBase.Channel;
+ srvUsuarios.Message := dmBase.Message;
+end;
+
+function TDataModuleUsuarios.GetPerfil(const ID: Integer): IBizPerfilUsuario;
+begin
+ ShowHourglassCursor;
+ try
+ Result := Self.GetPerfiles;
+
+ with Result.DataTable.DynamicWhere do
+ begin
+ Clear;
+ // (ID = :ID)
+ Expression := NewBinaryExpression(NewField('', fld_PERFILESID), NewConstant(ID, datInteger), dboEqual);
+ end;
+ finally
+ HideHourglassCursor;
+ end;
+end;
+
+function TDataModuleUsuarios.GetPerfiles: IBizPerfilUsuario;
+var
+ AUsuarios : TDAMemDataTable;
+begin
+ ShowHourglassCursor;
+ try
+ AUsuarios := CloneDataTable(tbl_PERFILES);
+ AUsuarios.BusinessRulesID := BIZ_CLIENT_PERFIL_USUARIO;
+
+ Result := (AUsuarios as IBizPerfilUsuario);
+ finally
+ HideHourglassCursor;
+ end;
+end;
+
+function TDataModuleUsuarios.GetUsuario(const ID: Integer): IBizUsuario;
+begin
+ ShowHourglassCursor;
+ try
+ Result := Self.GetUsuarios;
+
+ with Result.DataTable.DynamicWhere do
+ begin
+ Clear;
+ // (ID = :ID)
+ Expression := NewBinaryExpression(NewField('', fld_USUARIOSID), NewConstant(ID, datInteger), dboEqual);
+ end;
+ finally
+ HideHourglassCursor;
+ end;
+end;
+
+function TDataModuleUsuarios.GetUsuarios: IBizUsuario;
+var
+ AUsuarios : TDAMemDataTable;
+begin
+ ShowHourglassCursor;
+ try
+ AUsuarios := CloneDataTable(tbl_Usuarios);
+ AUsuarios.BusinessRulesID := BIZ_CLIENT_USUARIO;
+
+ Result := (AUsuarios as IBizUsuario);
+ finally
+ HideHourglassCursor;
+ end;
+end;
+
+procedure TDataModuleUsuarios.InicializarCamposUserControl(
+ AUserControl: TUserControl);
+begin
+ if not Assigned(AUserControl) then
+ raise Exception.Create('UserControl no asignado (InicializarUserControl)');
+
+ with AUserControl do
+ begin
+ DataConnector := CreateConnectorInstance;
+
+ with TableUsers do
+ begin
+ TableName := 'RDX_USUARIOS'; //nme_USUARIOS;
+ FieldUserID := fld_USUARIOSID;
+ FieldUserName := fld_USUARIOSUSERNAME;
+ FieldLogin := fld_USUARIOSLOGIN;
+ FieldPassword := fld_USUARIOSPASS;
+ FieldEmail := fld_USUARIOSEMAIL;
+ FieldPrivileged := fld_USUARIOSPRIVILEGED;
+ FieldTypeRec := fld_USUARIOSTIPO;
+ FieldProfile := fld_USUARIOSID_PERFIL;
+ FieldUserExpired := fld_USUARIOSBLOQUEADO;
+ FieldDateExpired := fld_USUARIOSPASSEXPIRED;
+ FieldUserDaysSun := fld_USUARIOSUSERDAYSSUN;
+ FieldKey := fld_USUARIOSCHECKSUM;
+ end;
+
+ with TableRights do
+ begin
+ TableName := 'RDX_PERMISOS'; //nme_PERMISOS;
+ FieldUserID := fld_PERMISOSID_USUARIO;
+ FieldModule := fld_PERMISOSMODULO;
+ FieldComponentName := fld_PERMISOSNOMBRECOMP;
+ FieldFormName := fld_PERMISOSEXNOMBREFORM;
+ FieldKey := fld_PERMISOSCHECKSUM;
+ end;
+
+ with TableUsersLogged do
+ begin
+ TableName := 'RDX_USUARIOS_LOGON'; //nme_USUARIOS_LOGON;
+ FieldLogonID := fld_USUARIOS_LOGONLOGONID;
+ FieldUserID := fld_USUARIOS_LOGONID_USUARIO;
+ FieldApplicationID := fld_USUARIOS_LOGONAPLICACION;
+ FieldMachineName := fld_USUARIOS_LOGONEQUIPO;
+ FieldData := fld_USUARIOS_LOGONDATA;
+ end;
+
+ with TableHistory do
+ begin
+ TableName := 'RDX_USUARIOS_EVENTOS'; //nme_USUARIOS_EVENTOS;
+ FieldApplicationID := fld_USUARIOS_EVENTOSAPLICACION;
+ FieldUserID := fld_USUARIOS_EVENTOSID_USUARIO;
+ FieldEventDate := fld_USUARIOS_EVENTOSFECHA;
+ FieldEventTime := fld_USUARIOS_EVENTOSHORA;
+ FieldForm := fld_USUARIOS_EVENTOSFORM;
+ FieldCaptionForm := fld_USUARIOS_EVENTOSTITULO_FORM;
+ FieldEvent := fld_USUARIOS_EVENTOSEVENTO;
+ FieldObs := fld_USUARIOS_EVENTOSNOTAS;
+ FieldTableName := fld_USUARIOS_EVENTOSTNAME;
+ end;
+
+ end;
+end;
+
+procedure TDataModuleUsuarios.InicializarSettingsUserControl(
+ AUserControl: TUserControl);
+var
+ SourceSettings : TUCSettings;
+begin
+ SourceSettings := UCSettingsSpanish;
+
+ with AUserControl do
+ begin
+ with UserSettings.CommonMessages do
+ begin
+ BlankPassword := SourceSettings.CommonMessages.BlankPassword;
+ PasswordChanged := SourceSettings.CommonMessages.PasswordChanged;
+ InitialMessage.Text := SourceSettings.CommonMessages.InitialMessage.Text;
+ MaxLoginAttemptsError := SourceSettings.CommonMessages.MaxLoginAttemptsError;
+ InvalidLogin := SourceSettings.CommonMessages.InvalidLogin;
+ AutoLogonError := SourceSettings.CommonMessages.AutoLogonError;
+ UsuarioExiste := SourceSettings.CommonMessages.UsuarioExiste; // Luiz Benevenuto 20/04/06
+ PasswordExpired := SourceSettings.CommonMessages.PasswordExpired; // vicente barros leonel
+ ForcaTrocaSenha := SourceSettings.CommonMessages.ForcaTrocaSenha;
+ end;
+
+ with UserSettings.Login do
+ begin
+ BtCancel := SourceSettings.Login.BtCancel;
+ BtOK := SourceSettings.Login.BtOK;
+ LabelPassword := SourceSettings.Login.LabelPassword;
+ LabelUser := SourceSettings.Login.LabelUser;
+ WindowCaption := SourceSettings.Login.WindowCaption;
+ LabelTentativa := SourceSettings.Login.LabelTentativa;
+ LabelTentativas := SourceSettings.Login.LabelTentativas;
+
+ if Assigned(SourceSettings.Login.LeftImage.Bitmap) then
+ LeftImage.Bitmap := SourceSettings.Login.LeftImage.Bitmap
+ else
+ LeftImage.Bitmap := nil;
+
+ if Assigned(SourceSettings.Login.TopImage.Bitmap) then
+ TopImage.Bitmap := SourceSettings.Login.TopImage.Bitmap
+ else
+ TopImage.Bitmap := nil;
+
+ if Assigned(SourceSettings.Login.BottomImage.Bitmap) then
+ BottomImage.Bitmap := SourceSettings.Login.BottomImage.Bitmap
+ else
+ BottomImage.Bitmap := nil;
+ end;
+
+ with UserSettings.UsersForm do
+ begin
+ WindowCaption := SourceSettings.UsersForm.WindowCaption;
+ LabelDescription := SourceSettings.UsersForm.LabelDescription;
+ ColName := SourceSettings.UsersForm.ColName;
+ ColLogin := SourceSettings.UsersForm.ColLogin;
+ ColEmail := SourceSettings.UsersForm.ColEmail;
+ BtAdd := SourceSettings.UsersForm.BtAdd;
+ BtChange := SourceSettings.UsersForm.BtChange;
+ BtDelete := SourceSettings.UsersForm.BtDelete;
+ BtRights := SourceSettings.UsersForm.BtRights;
+ BtPassword := SourceSettings.UsersForm.BtPassword;
+ BtClose := SourceSettings.UsersForm.BtClose;
+ PromptDelete := SourceSettings.UsersForm.PromptDelete;
+ PromptDelete_WindowCaption := SourceSettings.UsersForm.PromptDelete_WindowCaption; //added by fduenas
+ end;
+
+ with UserSettings.UsersProfile do
+ begin
+ WindowCaption := SourceSettings.UsersProfile.WindowCaption;
+ LabelDescription := SourceSettings.UsersProfile.LabelDescription;
+ ColProfile := SourceSettings.UsersProfile.ColProfile;
+ BtAdd := SourceSettings.UsersProfile.BtAdd;
+ BtChange := SourceSettings.UsersProfile.BtChange;
+ BtDelete := SourceSettings.UsersProfile.BtDelete;
+ BtRights := SourceSettings.UsersProfile.BtRights; //added by fduenas
+ BtClose := SourceSettings.UsersProfile.BtClose;
+ PromptDelete := SourceSettings.UsersProfile.PromptDelete;
+ PromptDelete_WindowCaption := SourceSettings.UsersProfile.PromptDelete_WindowCaption; //added by fduenas
+ end;
+
+ with UserSettings.AddChangeUser do
+ begin
+ WindowCaption := SourceSettings.AddChangeUser.WindowCaption;
+ LabelAdd := SourceSettings.AddChangeUser.LabelAdd;
+ LabelChange := SourceSettings.AddChangeUser.LabelChange;
+ LabelName := SourceSettings.AddChangeUser.LabelName;
+ LabelLogin := SourceSettings.AddChangeUser.LabelLogin;
+ LabelEmail := SourceSettings.AddChangeUser.LabelEmail;
+ CheckPrivileged := SourceSettings.AddChangeUser.CheckPrivileged;
+ BtSave := SourceSettings.AddChangeUser.BtSave;
+ BtCancel := SourceSettings.AddChangeUser.BtCancel;
+ CheckExpira := SourceSettings.AddChangeUser.CheckExpira;
+ Day := SourceSettings.AddChangeUser.Day;
+ ExpiredIn := SourceSettings.AddChangeUser.ExpiredIn;
+ end;
+
+ with UserSettings.AddChangeProfile do
+ begin
+ WindowCaption := SourceSettings.AddChangeProfile.WindowCaption;
+ LabelAdd := SourceSettings.AddChangeProfile.LabelAdd;
+ LabelChange := SourceSettings.AddChangeProfile.LabelChange;
+ LabelName := SourceSettings.AddChangeProfile.LabelName;
+ BtSave := SourceSettings.AddChangeProfile.BtSave;
+ BtCancel := SourceSettings.AddChangeProfile.BtCancel;
+ end;
+
+ with UserSettings.Rights do
+ begin
+ WindowCaption := SourceSettings.Rights.WindowCaption;
+ LabelUser := SourceSettings.Rights.LabelUser;
+ LabelProfile := SourceSettings.Rights.LabelProfile;
+ PageMenu := SourceSettings.Rights.PageMenu;
+ PageActions := SourceSettings.Rights.PageActions;
+ PageControls := SourceSettings.Rights.PageControls;
+ BtUnlock := SourceSettings.Rights.BtUnlock;
+ BtLock := SourceSettings.Rights.BtLock;
+ BtSave := SourceSettings.Rights.BtSave;
+ BtCancel := SourceSettings.Rights.BtCancel;
+ end;
+
+ with UserSettings.ChangePassword do
+ begin
+ WindowCaption := SourceSettings.ChangePassword.WindowCaption;
+ LabelDescription := SourceSettings.ChangePassword.LabelDescription;
+ LabelCurrentPassword := SourceSettings.ChangePassword.LabelCurrentPassword;
+ LabelNewPassword := SourceSettings.ChangePassword.LabelNewPassword;
+ LabelConfirm := SourceSettings.ChangePassword.LabelConfirm;
+ BtSave := SourceSettings.ChangePassword.BtSave;
+ BtCancel := SourceSettings.ChangePassword.BtCancel;
+ end;
+
+ with UserSettings.CommonMessages.ChangePasswordError do
+ begin
+ InvalidCurrentPassword := SourceSettings.CommonMessages.ChangePasswordError.InvalidCurrentPassword;
+ NewPasswordError := SourceSettings.CommonMessages.ChangePasswordError.NewPasswordError;
+ NewEqualCurrent := SourceSettings.CommonMessages.ChangePasswordError.NewEqualCurrent;
+ PasswordRequired := SourceSettings.CommonMessages.ChangePasswordError.PasswordRequired;
+ MinPasswordLength := SourceSettings.CommonMessages.ChangePasswordError.MinPasswordLength;
+ InvalidNewPassword := SourceSettings.CommonMessages.ChangePasswordError.InvalidNewPassword;
+ end;
+
+ with UserSettings.ResetPassword do
+ begin
+ WindowCaption := SourceSettings.ResetPassword.WindowCaption;
+ LabelPassword := SourceSettings.ResetPassword.LabelPassword;
+ end;
+
+ with UserSettings.Log do
+ begin
+ WindowCaption := SourceSettings.Log.WindowCaption;
+ LabelDescription := SourceSettings.Log.LabelDescription;
+ LabelUser := SourceSettings.Log.LabelUser;
+ LabelDate := SourceSettings.Log.LabelDate;
+ LabelLevel := SourceSettings.Log.LabelLevel;
+ ColLevel := SourceSettings.Log.ColLevel;
+ ColMessage := SourceSettings.Log.ColMessage;
+ ColUser := SourceSettings.Log.ColUser;
+ ColDate := SourceSettings.Log.ColDate;
+ BtFilter := SourceSettings.Log.BtFilter;
+ BtDelete := SourceSettings.Log.BtDelete;
+ BtClose := SourceSettings.Log.BtClose;
+ PromptDelete := SourceSettings.Log.PromptDelete;
+ PromptDelete_WindowCaption := SourceSettings.Log.PromptDelete_WindowCaption; //added by fduenas
+ OptionUserAll := SourceSettings.Log.OptionUserAll; //added by fduenas
+ OptionLevelLow := SourceSettings.Log.OptionLevelLow; //added by fduenas
+ OptionLevelNormal := SourceSettings.Log.OptionLevelNormal; //added by fduenas
+ OptionLevelHigh := SourceSettings.Log.OptionLevelHigh; //added by fduenas
+ OptionLevelCritic := SourceSettings.Log.OptionLevelCritic; //added by fduenas
+ DeletePerformed := SourceSettings.Log.DeletePerformed; //added by fduenas
+ end;
+
+ with UserSettings.AppMessages do
+ begin
+ MsgsForm_BtNew := SourceSettings.AppMessages.MsgsForm_BtNew;
+ MsgsForm_BtReplay := SourceSettings.AppMessages.MsgsForm_BtReplay;
+ MsgsForm_BtForward := SourceSettings.AppMessages.MsgsForm_BtForward;
+ MsgsForm_BtDelete := SourceSettings.AppMessages.MsgsForm_BtDelete;
+ MsgsForm_BtClose := SourceSettings.AppMessages.MsgsForm_BtClose; //added by fduenas
+ MsgsForm_WindowCaption := SourceSettings.AppMessages.MsgsForm_WindowCaption;
+ MsgsForm_ColFrom := SourceSettings.AppMessages.MsgsForm_ColFrom;
+ MsgsForm_ColSubject := SourceSettings.AppMessages.MsgsForm_ColSubject;
+ MsgsForm_ColDate := SourceSettings.AppMessages.MsgsForm_ColDate;
+ MsgsForm_PromptDelete := SourceSettings.AppMessages.MsgsForm_PromptDelete;
+ MsgsForm_PromptDelete_WindowCaption := SourceSettings.AppMessages.MsgsForm_PromptDelete_WindowCaption; //added by fduenas
+ MsgsForm_NoMessagesSelected := SourceSettings.AppMessages.MsgsForm_NoMessagesSelected; //added by fduenas
+ MsgsForm_NoMessagesSelected_WindowCaption := SourceSettings.AppMessages.MsgsForm_NoMessagesSelected_WindowCaption; //added by fduenas
+
+ MsgRec_BtClose := SourceSettings.AppMessages.MsgRec_BtClose;
+ MsgRec_WindowCaption := SourceSettings.AppMessages.MsgRec_WindowCaption;
+ MsgRec_Title := SourceSettings.AppMessages.MsgRec_Title;
+ MsgRec_LabelFrom := SourceSettings.AppMessages.MsgRec_LabelFrom;
+ MsgRec_LabelDate := SourceSettings.AppMessages.MsgRec_LabelDate;
+ MsgRec_LabelSubject := SourceSettings.AppMessages.MsgRec_LabelSubject;
+ MsgRec_LabelMessage := SourceSettings.AppMessages.MsgRec_LabelMessage;
+ MsgSend_BtSend := SourceSettings.AppMessages.MsgSend_BtSend;
+ MsgSend_BtCancel := SourceSettings.AppMessages.MsgSend_BtCancel;
+ MsgSend_WindowCaption := SourceSettings.AppMessages.MsgSend_WindowCaption;
+ MsgSend_Title := SourceSettings.AppMessages.MsgSend_Title;
+ MsgSend_GroupTo := SourceSettings.AppMessages.MsgSend_GroupTo;
+ MsgSend_RadioUser := SourceSettings.AppMessages.MsgSend_RadioUser;
+ MsgSend_RadioAll := SourceSettings.AppMessages.MsgSend_RadioAll;
+ MsgSend_GroupMessage := SourceSettings.AppMessages.MsgSend_GroupMessage;
+ MsgSend_LabelSubject := SourceSettings.AppMessages.MsgSend_LabelSubject; //added by fduenas
+ MsgSend_LabelMessageText := SourceSettings.AppMessages.MsgSend_LabelMessageText; //added by fduenas
+ end;
+
+ With UserSettings.History do
+ Begin
+ Evento_edit := SourceSettings.History.Evento_edit;
+ Evento_NewRecord := SourceSettings.History.Evento_NewRecord;
+ Evento_Insert := SourceSettings.History.Evento_Insert;
+ Evento_delete := SourceSettings.History.Evento_Delete;
+ LabelTabela := SourceSettings.History.LabelTabela;
+ Msg_LogEmptyHistory := SourceSettings.History.Msg_LogEmptyHistory;
+ Msg_MensConfirma := SourceSettings.History.Msg_MensConfirma;
+ LabelDescricao := SourceSettings.History.LabelDescricao;
+ Hist_BtnExcluir := SourceSettings.History.Hist_BtnExcluir;
+ Hist_BtnFiltro := SourceSettings.History.Hist_BtnFiltro;
+ LabelForm := SourceSettings.History.LabelForm;
+ Hist_BtnFechar := SourceSettings.History.Hist_BtnFechar;
+ LabelDataEvento := SourceSettings.History.LabelDataEvento;
+ LabelEvento := SourceSettings.History.LabelEvento;
+ Msg_NewRecord := SourceSettings.History.Msg_NewRecord;
+ Hist_All := SourceSettings.History.Hist_All;
+ Msg_LimpHistorico := SourceSettings.History.Msg_LimpHistorico;
+ LabelHoraEvento := SourceSettings.History.LabelHoraEvento;
+ LabelUser := SourceSettings.History.LabelUser;
+ Hist_MsgExceptPropr := SourceSettings.History.Hist_MsgExceptPropr;
+ End;
+
+ with UserSettings.TypeFieldsDB do
+ Begin
+ Type_VarChar := SourceSettings.TypeFieldsDB.Type_VarChar;
+ Type_Char := SourceSettings.TypeFieldsDB.Type_Char;
+ Type_Int := SourceSettings.TypeFieldsDB.Type_Int;
+ Type_MemoField := SourceSettings.TypeFieldsDB.Type_MemoField;
+ end;
+
+ UserSettings.WindowsPosition := SourceSettings.WindowsPosition;
+ end;
+end;
+
+procedure TDataModuleUsuarios.InicializarUserControl(AUserControl: TUserControl);
+begin
+ if Assigned(AUserControl) then
+ begin
+ InicializarCamposUserControl(AUserControl);
+ InicializarSettingsUserControl(AUserControl);
+ end;
+end;
+
+
+end.
diff --git a/Source/ApplicationBase/Usuarios/Data/uUCROConn.pas b/Source/ApplicationBase/Usuarios/Data/uUCROConn.pas
new file mode 100644
index 0000000..e47a69d
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Data/uUCROConn.pas
@@ -0,0 +1,224 @@
+{-----------------------------------------------------------------------------
+ Unit Name: UCMidasConn
+ Author : Luiz Benevenuto
+ Date : 31/07/2005
+ Purpose : Midas Suporte ( DataSnap )
+ E-mail : luiz@siffra.com
+ URL : www.siffra.com
+ UC : www.usercontrol.com.br
+ Forum : http://www.usercontrol.com.br/modules.php?name=Forums
+
+ registered in UCMidasConnReg.pas
+-----------------------------------------------------------------------------}
+
+unit uUCROConn;
+
+interface
+
+//{$I 'UserControl.inc'}
+
+uses
+ Classes,
+ DB,
+ DBClient,
+ SysUtils,
+ uRORemoteService, uDADataStreamer, uROBinMessage, uROWinInetHttpChannel,
+ uDABin2DataStreamer, uDARemoteDataAdapter, UCDataConnector, uROClient;
+
+type
+ TUCROConn = class(TUCDataConnector)
+ private
+ FMessage: TROBinMessage;
+ FChannel: TROWinInetHTTPChannel;
+ FRemoteService: TRORemoteService;
+ FDataAdapter : TDARemoteDataAdapter;
+ FDataStreamer : TDABin2DataStreamer;
+ procedure SetServiceName(const Value: String);
+ function GetServiceName: String;
+ procedure SetChannel(const Value: TROWinInetHTTPChannel);
+ procedure SetMessage(const Value: TROBinMessage);
+ protected
+ procedure Notification(AComponent: TComponent; Operation: TOperation); override;
+ procedure RefreshROConnection;
+ public
+ function GetDBObjectName: String; override;
+ function GetTransObjectName: String; override;
+ function UCFindDataConnection: Boolean; override;
+ function UCFindTable(const Tablename: String): Boolean; override;
+ function UCGetSQLDataset(FSQL: String): TDataset; override;
+ procedure UCExecSQL(FSQL: String); override;
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ published
+ property ROServiceName : String read GetServiceName write SetServiceName;
+ property ROMessage : TROBinMessage read FMessage write SetMessage;
+ property ROChannel : TROWinInetHTTPChannel read FChannel write SetChannel;
+ end;
+
+implementation
+
+uses
+ Forms, Dialogs, VARELA_Intf, uROTypes, uDAClasses, uDADataTable,
+ uDACDSDataTable, uROEncryption;
+
+{ TUCROConn }
+
+constructor TUCROConn.Create(AOwner: TComponent);
+begin
+ inherited;
+ FRemoteService := TRORemoteService.Create(nil);
+ FDataStreamer := TDABin2DataStreamer.Create(nil);
+ FDataAdapter := TDARemoteDataAdapter.Create(nil);
+ FDataAdapter.DataStreamer := FDataStreamer;
+ FDataAdapter.SetupDefaultRequest;
+end;
+
+destructor TUCROConn.Destroy;
+begin
+ FreeAndNil(FRemoteService);
+ FreeAndNil(FDataAdapter);
+ FreeAndNil(FDataStreamer);
+ inherited;
+end;
+
+function TUCROConn.GetDBObjectName: String;
+begin
+ if Assigned(FRemoteService) then
+ begin
+ if Owner = FRemoteService.Owner then
+ Result := FRemoteService.Name
+ else
+ Result := FRemoteService.Owner.Name + '.' + FRemoteService.Name;
+ end
+ else
+ Result := '';
+end;
+
+function TUCROConn.GetServiceName: String;
+begin
+ Result := FRemoteService.ServiceName;
+end;
+
+function TUCROConn.GetTransObjectName: String;
+begin
+ Result := '';
+end;
+
+procedure TUCROConn.Notification(AComponent: TComponent; Operation: TOperation);
+begin
+ if (Operation = opRemove) and (AComponent = FRemoteService) then
+ begin
+ FreeAndNil(FDataAdapter);
+ FRemoteService := nil;
+ end;
+ inherited Notification(AComponent, Operation);
+end;
+
+procedure TUCROConn.RefreshROConnection;
+begin
+ with FRemoteService do
+ begin
+ FRemoteService.Message := FMessage;
+ FRemoteService.Channel := FChannel;
+
+ with FDataAdapter do
+ begin
+ RemoteService := FRemoteService;
+ GetSchemaCall.RemoteService := FRemoteService;
+ GetDataCall.RemoteService := FRemoteService;
+ UpdateDataCall.RemoteService := FRemoteService;
+ GetScriptsCall.RemoteService := FRemoteService;
+ end;
+ end;
+end;
+
+procedure TUCROConn.SetChannel(const Value: TROWinInetHTTPChannel);
+begin
+ FChannel := Value;
+ RefreshROConnection;
+end;
+
+procedure TUCROConn.SetMessage(const Value: TROBinMessage);
+begin
+ FMessage := Value;
+ RefreshROConnection;
+end;
+
+procedure TUCROConn.SetServiceName(const Value: String);
+begin
+ FRemoteService.ServiceName := Value;
+end;
+
+procedure TUCROConn.UCExecSQL(FSQL: String);
+var
+ ASQL : String;
+begin
+ ASQL := AnsiToUtf8(FSQL);
+ (FRemoteService as IsrvUsuarios).SQLExecuteCommand(ASQL);
+end;
+
+function TUCROConn.UCFindDataConnection: Boolean;
+begin
+ Result := False;
+ if Assigned(FRemoteService) then
+ begin
+ FRemoteService.CheckCanConnect;
+ Result := True;
+ end;
+end;
+
+function TUCROConn.UCFindTable(const Tablename: String): Boolean;
+var
+ ASchema : TDASchema;
+begin
+ ASchema := FDataAdapter.ReadSchema;
+ try
+ Result := Assigned(ASchema.FindDataset(TableName));
+ finally
+ FreeAndNil(ASchema);
+ end;
+end;
+
+
+function TUCROConn.UCGetSQLDataset(FSQL: String): TDataset;
+var
+ AStream: TMemoryStream;
+ ADataStreamer: TDABin2DataStreamer;
+ ADataTable: TDACDSDataTable;
+begin
+ Result := NIL;
+ ADataStreamer := TDABin2DataStreamer.Create(NIL);
+ AStream := (FRemoteService as IsrvUsuarios).SQLGetData(FSQL, True, -1);
+
+ if AStream <> nil then
+ try
+ ADataTable := TDACDSDataTable.Create(Application);
+
+ // Generar un nombre aleatorio
+ Randomize;
+ ADataTable.Name := 'SQLResult' + '_' + IntToStr(Random(MAXINT));
+
+ ADataTable.LocalDataStreamer := ADataStreamer;
+ ADataTable.RemoteFetchEnabled := False;
+ try
+ ADataStreamer.ReadDataset(AStream, ADataTable, True);
+ ADataTable.Open;
+
+ { ¡¡OJO!! Trapicheo!!!!!
+ Forzamos a recuperar en Dataset todas las tuplas
+ recorriendonos toda la tabla.}
+ ADataTable.Last;
+ ADataTable.First;
+
+ Result := ADataTable.Dataset;
+ finally
+ //FreeAndNIL(ADataTable); <-- No liberar, lo hace Application
+ end;
+ finally
+ FreeAndNIL(AStream);
+ FreeAndNIL(ADataStreamer);
+ end;
+end;
+
+end.
+
diff --git a/Source/ApplicationBase/Usuarios/Model/Data/uIDataModuleUsuarios.pas b/Source/ApplicationBase/Usuarios/Model/Data/uIDataModuleUsuarios.pas
new file mode 100644
index 0000000..c3038ca
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Model/Data/uIDataModuleUsuarios.pas
@@ -0,0 +1,25 @@
+unit uIDataModuleUsuarios;
+
+interface
+
+uses
+ UCBase, UCSettings, uBizUsuarios;
+
+type
+ IDataModuleUsuarios = interface
+ ['{C0A8481F-4920-414D-A906-EE1EB18DE946}']
+ procedure InicializarUserControl (AUserControl : TUserControl);
+
+ function GetUsuario(const ID : Integer) : IBizUsuario;
+ function NuevoUsuario : IBizUsuario;
+ function GetUsuarios : IBizUsuario;
+
+ function NuevoPerfil : IBizPerfilUsuario;
+ function GetPerfiles : IBizPerfilUsuario;
+ function GetPerfil(const ID : Integer) : IBizPerfilUsuario;
+ end;
+
+implementation
+
+end.
+
diff --git a/Source/ApplicationBase/Usuarios/Model/schUsuariosClient_Intf.pas b/Source/ApplicationBase/Usuarios/Model/schUsuariosClient_Intf.pas
new file mode 100644
index 0000000..a880f70
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Model/schUsuariosClient_Intf.pas
@@ -0,0 +1,1716 @@
+unit schUsuariosClient_Intf;
+
+interface
+
+uses
+ Classes, DB, SysUtils, uROClasses, uDADataTable, FmtBCD, uROXMLIntf;
+
+const
+ { Data table rules ids
+ Feel free to change them to something more human readable
+ but make sure they are unique in the context of your application }
+ RID_USUARIOS = '{BDE57F57-12F0-4D2C-8BA0-5D5CED642F36}';
+ RID_USUARIOS_EVENTOS = '{AF63A56E-BF41-4B8B-AB81-88034F0D4851}';
+ RID_USUARIOS_LOGON = '{F6E480B9-A3BD-4EBC-9F29-DE8E3BFA100D}';
+ RID_PERFILES = '{4DA3855F-9EDF-49EB-941C-03E72237C70C}';
+ RID_PERMISOS = '{70815001-E83D-463E-9C81-3588778518AD}';
+ RID_PERMISOSEX = '{B37624F7-4E7D-45F6-8EE5-802A702C3C24}';
+
+ { Data table names }
+ nme_USUARIOS = 'USUARIOS';
+ nme_USUARIOS_EVENTOS = 'USUARIOS_EVENTOS';
+ nme_USUARIOS_LOGON = 'USUARIOS_LOGON';
+ nme_PERFILES = 'PERFILES';
+ nme_PERMISOS = 'PERMISOS';
+ nme_PERMISOSEX = 'PERMISOSEX';
+
+ { USUARIOS fields }
+ fld_USUARIOSID = 'ID';
+ fld_USUARIOSUSERNAME = 'USERNAME';
+ fld_USUARIOSLOGIN = 'LOGIN';
+ fld_USUARIOSPASS = 'PASS';
+ fld_USUARIOSPASSEXPIRED = 'PASSEXPIRED';
+ fld_USUARIOSBLOQUEADO = 'BLOQUEADO';
+ fld_USUARIOSEMAIL = 'EMAIL';
+ fld_USUARIOSUSERDAYSSUN = 'USERDAYSSUN';
+ fld_USUARIOSPRIVILEGED = 'PRIVILEGED';
+ fld_USUARIOSTIPO = 'TIPO';
+ fld_USUARIOSID_PERFIL = 'ID_PERFIL';
+ fld_USUARIOSCHECKSUM = 'CHECKSUM';
+
+ { USUARIOS field indexes }
+ idx_USUARIOSID = 0;
+ idx_USUARIOSUSERNAME = 1;
+ idx_USUARIOSLOGIN = 2;
+ idx_USUARIOSPASS = 3;
+ idx_USUARIOSPASSEXPIRED = 4;
+ idx_USUARIOSBLOQUEADO = 5;
+ idx_USUARIOSEMAIL = 6;
+ idx_USUARIOSUSERDAYSSUN = 7;
+ idx_USUARIOSPRIVILEGED = 8;
+ idx_USUARIOSTIPO = 9;
+ idx_USUARIOSID_PERFIL = 10;
+ idx_USUARIOSCHECKSUM = 11;
+
+ { USUARIOS_EVENTOS fields }
+ fld_USUARIOS_EVENTOSAPLICACION = 'APLICACION';
+ fld_USUARIOS_EVENTOSID_USUARIO = 'ID_USUARIO';
+ fld_USUARIOS_EVENTOSFECHA = 'FECHA';
+ fld_USUARIOS_EVENTOSHORA = 'HORA';
+ fld_USUARIOS_EVENTOSFORM = 'FORM';
+ fld_USUARIOS_EVENTOSTITULO_FORM = 'TITULO_FORM';
+ fld_USUARIOS_EVENTOSEVENTO = 'EVENTO';
+ fld_USUARIOS_EVENTOSNOTAS = 'NOTAS';
+ fld_USUARIOS_EVENTOSTNAME = 'TNAME';
+
+ { USUARIOS_EVENTOS field indexes }
+ idx_USUARIOS_EVENTOSAPLICACION = 0;
+ idx_USUARIOS_EVENTOSID_USUARIO = 1;
+ idx_USUARIOS_EVENTOSFECHA = 2;
+ idx_USUARIOS_EVENTOSHORA = 3;
+ idx_USUARIOS_EVENTOSFORM = 4;
+ idx_USUARIOS_EVENTOSTITULO_FORM = 5;
+ idx_USUARIOS_EVENTOSEVENTO = 6;
+ idx_USUARIOS_EVENTOSNOTAS = 7;
+ idx_USUARIOS_EVENTOSTNAME = 8;
+
+ { USUARIOS_LOGON fields }
+ fld_USUARIOS_LOGONLOGONID = 'LOGONID';
+ fld_USUARIOS_LOGONID_USUARIO = 'ID_USUARIO';
+ fld_USUARIOS_LOGONAPLICACION = 'APLICACION';
+ fld_USUARIOS_LOGONEQUIPO = 'EQUIPO';
+ fld_USUARIOS_LOGONDATA = 'DATA';
+
+ { USUARIOS_LOGON field indexes }
+ idx_USUARIOS_LOGONLOGONID = 0;
+ idx_USUARIOS_LOGONID_USUARIO = 1;
+ idx_USUARIOS_LOGONAPLICACION = 2;
+ idx_USUARIOS_LOGONEQUIPO = 3;
+ idx_USUARIOS_LOGONDATA = 4;
+
+ { PERFILES fields }
+ fld_PERFILESID = 'ID';
+ fld_PERFILESUSERNAME = 'USERNAME';
+ fld_PERFILESLOGIN = 'LOGIN';
+ fld_PERFILESTIPO = 'TIPO';
+
+ { PERFILES field indexes }
+ idx_PERFILESID = 0;
+ idx_PERFILESUSERNAME = 1;
+ idx_PERFILESLOGIN = 2;
+ idx_PERFILESTIPO = 3;
+
+ { PERMISOS fields }
+ fld_PERMISOSID = 'ID';
+ fld_PERMISOSID_USUARIO = 'ID_USUARIO';
+ fld_PERMISOSMODULO = 'MODULO';
+ fld_PERMISOSNOMBRECOMP = 'NOMBRECOMP';
+ fld_PERMISOSCHECKSUM = 'CHECKSUM';
+
+ { PERMISOS field indexes }
+ idx_PERMISOSID = 0;
+ idx_PERMISOSID_USUARIO = 1;
+ idx_PERMISOSMODULO = 2;
+ idx_PERMISOSNOMBRECOMP = 3;
+ idx_PERMISOSCHECKSUM = 4;
+
+ { PERMISOSEX fields }
+ fld_PERMISOSEXID = 'ID';
+ fld_PERMISOSEXID_USUARIO = 'ID_USUARIO';
+ fld_PERMISOSEXMODULO = 'MODULO';
+ fld_PERMISOSEXNOMBRECOMP = 'NOMBRECOMP';
+ fld_PERMISOSEXNOMBREFORM = 'NOMBREFORM';
+ fld_PERMISOSEXCHECKSUM = 'CHECKSUM';
+
+ { PERMISOSEX field indexes }
+ idx_PERMISOSEXID = 0;
+ idx_PERMISOSEXID_USUARIO = 1;
+ idx_PERMISOSEXMODULO = 2;
+ idx_PERMISOSEXNOMBRECOMP = 3;
+ idx_PERMISOSEXNOMBREFORM = 4;
+ idx_PERMISOSEXCHECKSUM = 5;
+
+type
+ { IUSUARIOS }
+ IUSUARIOS = interface(IDAStronglyTypedDataTable)
+ ['{C72E45C8-5D5A-46E1-B698-6F6CBBC97625}']
+ { Property getters and setters }
+ function GetIDValue: Integer;
+ procedure SetIDValue(const aValue: Integer);
+ function GetIDIsNull: Boolean;
+ procedure SetIDIsNull(const aValue: Boolean);
+ function GetUSERNAMEValue: String;
+ procedure SetUSERNAMEValue(const aValue: String);
+ function GetUSERNAMEIsNull: Boolean;
+ procedure SetUSERNAMEIsNull(const aValue: Boolean);
+ function GetLOGINValue: String;
+ procedure SetLOGINValue(const aValue: String);
+ function GetLOGINIsNull: Boolean;
+ procedure SetLOGINIsNull(const aValue: Boolean);
+ function GetPASSValue: String;
+ procedure SetPASSValue(const aValue: String);
+ function GetPASSIsNull: Boolean;
+ procedure SetPASSIsNull(const aValue: Boolean);
+ function GetPASSEXPIREDValue: DateTime;
+ procedure SetPASSEXPIREDValue(const aValue: DateTime);
+ function GetPASSEXPIREDIsNull: Boolean;
+ procedure SetPASSEXPIREDIsNull(const aValue: Boolean);
+ function GetBLOQUEADOValue: SmallInt;
+ procedure SetBLOQUEADOValue(const aValue: SmallInt);
+ function GetBLOQUEADOIsNull: Boolean;
+ procedure SetBLOQUEADOIsNull(const aValue: Boolean);
+ function GetEMAILValue: String;
+ procedure SetEMAILValue(const aValue: String);
+ function GetEMAILIsNull: Boolean;
+ procedure SetEMAILIsNull(const aValue: Boolean);
+ function GetUSERDAYSSUNValue: Integer;
+ procedure SetUSERDAYSSUNValue(const aValue: Integer);
+ function GetUSERDAYSSUNIsNull: Boolean;
+ procedure SetUSERDAYSSUNIsNull(const aValue: Boolean);
+ function GetPRIVILEGEDValue: Integer;
+ procedure SetPRIVILEGEDValue(const aValue: Integer);
+ function GetPRIVILEGEDIsNull: Boolean;
+ procedure SetPRIVILEGEDIsNull(const aValue: Boolean);
+ function GetTIPOValue: String;
+ procedure SetTIPOValue(const aValue: String);
+ function GetTIPOIsNull: Boolean;
+ procedure SetTIPOIsNull(const aValue: Boolean);
+ function GetID_PERFILValue: Integer;
+ procedure SetID_PERFILValue(const aValue: Integer);
+ function GetID_PERFILIsNull: Boolean;
+ procedure SetID_PERFILIsNull(const aValue: Boolean);
+ function GetCHECKSUMValue: String;
+ procedure SetCHECKSUMValue(const aValue: String);
+ function GetCHECKSUMIsNull: Boolean;
+ procedure SetCHECKSUMIsNull(const aValue: Boolean);
+
+
+ { Properties }
+ property ID: Integer read GetIDValue write SetIDValue;
+ property IDIsNull: Boolean read GetIDIsNull write SetIDIsNull;
+ property USERNAME: String read GetUSERNAMEValue write SetUSERNAMEValue;
+ property USERNAMEIsNull: Boolean read GetUSERNAMEIsNull write SetUSERNAMEIsNull;
+ property LOGIN: String read GetLOGINValue write SetLOGINValue;
+ property LOGINIsNull: Boolean read GetLOGINIsNull write SetLOGINIsNull;
+ property PASS: String read GetPASSValue write SetPASSValue;
+ property PASSIsNull: Boolean read GetPASSIsNull write SetPASSIsNull;
+ property PASSEXPIRED: DateTime read GetPASSEXPIREDValue write SetPASSEXPIREDValue;
+ property PASSEXPIREDIsNull: Boolean read GetPASSEXPIREDIsNull write SetPASSEXPIREDIsNull;
+ property BLOQUEADO: SmallInt read GetBLOQUEADOValue write SetBLOQUEADOValue;
+ property BLOQUEADOIsNull: Boolean read GetBLOQUEADOIsNull write SetBLOQUEADOIsNull;
+ property EMAIL: String read GetEMAILValue write SetEMAILValue;
+ property EMAILIsNull: Boolean read GetEMAILIsNull write SetEMAILIsNull;
+ property USERDAYSSUN: Integer read GetUSERDAYSSUNValue write SetUSERDAYSSUNValue;
+ property USERDAYSSUNIsNull: Boolean read GetUSERDAYSSUNIsNull write SetUSERDAYSSUNIsNull;
+ property PRIVILEGED: Integer read GetPRIVILEGEDValue write SetPRIVILEGEDValue;
+ property PRIVILEGEDIsNull: Boolean read GetPRIVILEGEDIsNull write SetPRIVILEGEDIsNull;
+ property TIPO: String read GetTIPOValue write SetTIPOValue;
+ property TIPOIsNull: Boolean read GetTIPOIsNull write SetTIPOIsNull;
+ property ID_PERFIL: Integer read GetID_PERFILValue write SetID_PERFILValue;
+ property ID_PERFILIsNull: Boolean read GetID_PERFILIsNull write SetID_PERFILIsNull;
+ property CHECKSUM: String read GetCHECKSUMValue write SetCHECKSUMValue;
+ property CHECKSUMIsNull: Boolean read GetCHECKSUMIsNull write SetCHECKSUMIsNull;
+ end;
+
+ { TUSUARIOSDataTableRules }
+ TUSUARIOSDataTableRules = class(TDADataTableRules, IUSUARIOS)
+ private
+ protected
+ { Property getters and setters }
+ function GetIDValue: Integer; virtual;
+ procedure SetIDValue(const aValue: Integer); virtual;
+ function GetIDIsNull: Boolean; virtual;
+ procedure SetIDIsNull(const aValue: Boolean); virtual;
+ function GetUSERNAMEValue: String; virtual;
+ procedure SetUSERNAMEValue(const aValue: String); virtual;
+ function GetUSERNAMEIsNull: Boolean; virtual;
+ procedure SetUSERNAMEIsNull(const aValue: Boolean); virtual;
+ function GetLOGINValue: String; virtual;
+ procedure SetLOGINValue(const aValue: String); virtual;
+ function GetLOGINIsNull: Boolean; virtual;
+ procedure SetLOGINIsNull(const aValue: Boolean); virtual;
+ function GetPASSValue: String; virtual;
+ procedure SetPASSValue(const aValue: String); virtual;
+ function GetPASSIsNull: Boolean; virtual;
+ procedure SetPASSIsNull(const aValue: Boolean); virtual;
+ function GetPASSEXPIREDValue: DateTime; virtual;
+ procedure SetPASSEXPIREDValue(const aValue: DateTime); virtual;
+ function GetPASSEXPIREDIsNull: Boolean; virtual;
+ procedure SetPASSEXPIREDIsNull(const aValue: Boolean); virtual;
+ function GetBLOQUEADOValue: SmallInt; virtual;
+ procedure SetBLOQUEADOValue(const aValue: SmallInt); virtual;
+ function GetBLOQUEADOIsNull: Boolean; virtual;
+ procedure SetBLOQUEADOIsNull(const aValue: Boolean); virtual;
+ function GetEMAILValue: String; virtual;
+ procedure SetEMAILValue(const aValue: String); virtual;
+ function GetEMAILIsNull: Boolean; virtual;
+ procedure SetEMAILIsNull(const aValue: Boolean); virtual;
+ function GetUSERDAYSSUNValue: Integer; virtual;
+ procedure SetUSERDAYSSUNValue(const aValue: Integer); virtual;
+ function GetUSERDAYSSUNIsNull: Boolean; virtual;
+ procedure SetUSERDAYSSUNIsNull(const aValue: Boolean); virtual;
+ function GetPRIVILEGEDValue: Integer; virtual;
+ procedure SetPRIVILEGEDValue(const aValue: Integer); virtual;
+ function GetPRIVILEGEDIsNull: Boolean; virtual;
+ procedure SetPRIVILEGEDIsNull(const aValue: Boolean); virtual;
+ function GetTIPOValue: String; virtual;
+ procedure SetTIPOValue(const aValue: String); virtual;
+ function GetTIPOIsNull: Boolean; virtual;
+ procedure SetTIPOIsNull(const aValue: Boolean); virtual;
+ function GetID_PERFILValue: Integer; virtual;
+ procedure SetID_PERFILValue(const aValue: Integer); virtual;
+ function GetID_PERFILIsNull: Boolean; virtual;
+ procedure SetID_PERFILIsNull(const aValue: Boolean); virtual;
+ function GetCHECKSUMValue: String; virtual;
+ procedure SetCHECKSUMValue(const aValue: String); virtual;
+ function GetCHECKSUMIsNull: Boolean; virtual;
+ procedure SetCHECKSUMIsNull(const aValue: Boolean); virtual;
+
+ { Properties }
+ property ID: Integer read GetIDValue write SetIDValue;
+ property IDIsNull: Boolean read GetIDIsNull write SetIDIsNull;
+ property USERNAME: String read GetUSERNAMEValue write SetUSERNAMEValue;
+ property USERNAMEIsNull: Boolean read GetUSERNAMEIsNull write SetUSERNAMEIsNull;
+ property LOGIN: String read GetLOGINValue write SetLOGINValue;
+ property LOGINIsNull: Boolean read GetLOGINIsNull write SetLOGINIsNull;
+ property PASS: String read GetPASSValue write SetPASSValue;
+ property PASSIsNull: Boolean read GetPASSIsNull write SetPASSIsNull;
+ property PASSEXPIRED: DateTime read GetPASSEXPIREDValue write SetPASSEXPIREDValue;
+ property PASSEXPIREDIsNull: Boolean read GetPASSEXPIREDIsNull write SetPASSEXPIREDIsNull;
+ property BLOQUEADO: SmallInt read GetBLOQUEADOValue write SetBLOQUEADOValue;
+ property BLOQUEADOIsNull: Boolean read GetBLOQUEADOIsNull write SetBLOQUEADOIsNull;
+ property EMAIL: String read GetEMAILValue write SetEMAILValue;
+ property EMAILIsNull: Boolean read GetEMAILIsNull write SetEMAILIsNull;
+ property USERDAYSSUN: Integer read GetUSERDAYSSUNValue write SetUSERDAYSSUNValue;
+ property USERDAYSSUNIsNull: Boolean read GetUSERDAYSSUNIsNull write SetUSERDAYSSUNIsNull;
+ property PRIVILEGED: Integer read GetPRIVILEGEDValue write SetPRIVILEGEDValue;
+ property PRIVILEGEDIsNull: Boolean read GetPRIVILEGEDIsNull write SetPRIVILEGEDIsNull;
+ property TIPO: String read GetTIPOValue write SetTIPOValue;
+ property TIPOIsNull: Boolean read GetTIPOIsNull write SetTIPOIsNull;
+ property ID_PERFIL: Integer read GetID_PERFILValue write SetID_PERFILValue;
+ property ID_PERFILIsNull: Boolean read GetID_PERFILIsNull write SetID_PERFILIsNull;
+ property CHECKSUM: String read GetCHECKSUMValue write SetCHECKSUMValue;
+ property CHECKSUMIsNull: Boolean read GetCHECKSUMIsNull write SetCHECKSUMIsNull;
+
+ public
+ constructor Create(aDataTable: TDADataTable); override;
+ destructor Destroy; override;
+
+ end;
+
+ { IUSUARIOS_EVENTOS }
+ IUSUARIOS_EVENTOS = interface(IDAStronglyTypedDataTable)
+ ['{0E58B658-F2D8-472A-A956-0AD2460750E7}']
+ { Property getters and setters }
+ function GetAPLICACIONValue: String;
+ procedure SetAPLICACIONValue(const aValue: String);
+ function GetAPLICACIONIsNull: Boolean;
+ procedure SetAPLICACIONIsNull(const aValue: Boolean);
+ function GetID_USUARIOValue: Integer;
+ procedure SetID_USUARIOValue(const aValue: Integer);
+ function GetID_USUARIOIsNull: Boolean;
+ procedure SetID_USUARIOIsNull(const aValue: Boolean);
+ function GetFECHAValue: String;
+ procedure SetFECHAValue(const aValue: String);
+ function GetFECHAIsNull: Boolean;
+ procedure SetFECHAIsNull(const aValue: Boolean);
+ function GetHORAValue: String;
+ procedure SetHORAValue(const aValue: String);
+ function GetHORAIsNull: Boolean;
+ procedure SetHORAIsNull(const aValue: Boolean);
+ function GetFORMValue: String;
+ procedure SetFORMValue(const aValue: String);
+ function GetFORMIsNull: Boolean;
+ procedure SetFORMIsNull(const aValue: Boolean);
+ function GetTITULO_FORMValue: String;
+ procedure SetTITULO_FORMValue(const aValue: String);
+ function GetTITULO_FORMIsNull: Boolean;
+ procedure SetTITULO_FORMIsNull(const aValue: Boolean);
+ function GetEVENTOValue: String;
+ procedure SetEVENTOValue(const aValue: String);
+ function GetEVENTOIsNull: Boolean;
+ procedure SetEVENTOIsNull(const aValue: Boolean);
+ function GetNOTASValue: IROStrings;
+ function GetNOTASIsNull: Boolean;
+ procedure SetNOTASIsNull(const aValue: Boolean);
+ function GetTNAMEValue: String;
+ procedure SetTNAMEValue(const aValue: String);
+ function GetTNAMEIsNull: Boolean;
+ procedure SetTNAMEIsNull(const aValue: Boolean);
+
+
+ { Properties }
+ property APLICACION: String read GetAPLICACIONValue write SetAPLICACIONValue;
+ property APLICACIONIsNull: Boolean read GetAPLICACIONIsNull write SetAPLICACIONIsNull;
+ property ID_USUARIO: Integer read GetID_USUARIOValue write SetID_USUARIOValue;
+ property ID_USUARIOIsNull: Boolean read GetID_USUARIOIsNull write SetID_USUARIOIsNull;
+ property FECHA: String read GetFECHAValue write SetFECHAValue;
+ property FECHAIsNull: Boolean read GetFECHAIsNull write SetFECHAIsNull;
+ property HORA: String read GetHORAValue write SetHORAValue;
+ property HORAIsNull: Boolean read GetHORAIsNull write SetHORAIsNull;
+ property FORM: String read GetFORMValue write SetFORMValue;
+ property FORMIsNull: Boolean read GetFORMIsNull write SetFORMIsNull;
+ property TITULO_FORM: String read GetTITULO_FORMValue write SetTITULO_FORMValue;
+ property TITULO_FORMIsNull: Boolean read GetTITULO_FORMIsNull write SetTITULO_FORMIsNull;
+ property EVENTO: String read GetEVENTOValue write SetEVENTOValue;
+ property EVENTOIsNull: Boolean read GetEVENTOIsNull write SetEVENTOIsNull;
+ property NOTAS: IROStrings read GetNOTASValue;
+ property NOTASIsNull: Boolean read GetNOTASIsNull write SetNOTASIsNull;
+ property TNAME: String read GetTNAMEValue write SetTNAMEValue;
+ property TNAMEIsNull: Boolean read GetTNAMEIsNull write SetTNAMEIsNull;
+ end;
+
+ { TUSUARIOS_EVENTOSDataTableRules }
+ TUSUARIOS_EVENTOSDataTableRules = class(TDADataTableRules, IUSUARIOS_EVENTOS)
+ private
+ f_NOTAS: IROStrings;
+ procedure NOTAS_OnChange(Sender: TObject);
+ protected
+ { Property getters and setters }
+ function GetAPLICACIONValue: String; virtual;
+ procedure SetAPLICACIONValue(const aValue: String); virtual;
+ function GetAPLICACIONIsNull: Boolean; virtual;
+ procedure SetAPLICACIONIsNull(const aValue: Boolean); virtual;
+ function GetID_USUARIOValue: Integer; virtual;
+ procedure SetID_USUARIOValue(const aValue: Integer); virtual;
+ function GetID_USUARIOIsNull: Boolean; virtual;
+ procedure SetID_USUARIOIsNull(const aValue: Boolean); virtual;
+ function GetFECHAValue: String; virtual;
+ procedure SetFECHAValue(const aValue: String); virtual;
+ function GetFECHAIsNull: Boolean; virtual;
+ procedure SetFECHAIsNull(const aValue: Boolean); virtual;
+ function GetHORAValue: String; virtual;
+ procedure SetHORAValue(const aValue: String); virtual;
+ function GetHORAIsNull: Boolean; virtual;
+ procedure SetHORAIsNull(const aValue: Boolean); virtual;
+ function GetFORMValue: String; virtual;
+ procedure SetFORMValue(const aValue: String); virtual;
+ function GetFORMIsNull: Boolean; virtual;
+ procedure SetFORMIsNull(const aValue: Boolean); virtual;
+ function GetTITULO_FORMValue: String; virtual;
+ procedure SetTITULO_FORMValue(const aValue: String); virtual;
+ function GetTITULO_FORMIsNull: Boolean; virtual;
+ procedure SetTITULO_FORMIsNull(const aValue: Boolean); virtual;
+ function GetEVENTOValue: String; virtual;
+ procedure SetEVENTOValue(const aValue: String); virtual;
+ function GetEVENTOIsNull: Boolean; virtual;
+ procedure SetEVENTOIsNull(const aValue: Boolean); virtual;
+ function GetNOTASValue: IROStrings; virtual;
+ function GetNOTASIsNull: Boolean; virtual;
+ procedure SetNOTASIsNull(const aValue: Boolean); virtual;
+ function GetTNAMEValue: String; virtual;
+ procedure SetTNAMEValue(const aValue: String); virtual;
+ function GetTNAMEIsNull: Boolean; virtual;
+ procedure SetTNAMEIsNull(const aValue: Boolean); virtual;
+
+ { Properties }
+ property APLICACION: String read GetAPLICACIONValue write SetAPLICACIONValue;
+ property APLICACIONIsNull: Boolean read GetAPLICACIONIsNull write SetAPLICACIONIsNull;
+ property ID_USUARIO: Integer read GetID_USUARIOValue write SetID_USUARIOValue;
+ property ID_USUARIOIsNull: Boolean read GetID_USUARIOIsNull write SetID_USUARIOIsNull;
+ property FECHA: String read GetFECHAValue write SetFECHAValue;
+ property FECHAIsNull: Boolean read GetFECHAIsNull write SetFECHAIsNull;
+ property HORA: String read GetHORAValue write SetHORAValue;
+ property HORAIsNull: Boolean read GetHORAIsNull write SetHORAIsNull;
+ property FORM: String read GetFORMValue write SetFORMValue;
+ property FORMIsNull: Boolean read GetFORMIsNull write SetFORMIsNull;
+ property TITULO_FORM: String read GetTITULO_FORMValue write SetTITULO_FORMValue;
+ property TITULO_FORMIsNull: Boolean read GetTITULO_FORMIsNull write SetTITULO_FORMIsNull;
+ property EVENTO: String read GetEVENTOValue write SetEVENTOValue;
+ property EVENTOIsNull: Boolean read GetEVENTOIsNull write SetEVENTOIsNull;
+ property NOTAS: IROStrings read GetNOTASValue;
+ property NOTASIsNull: Boolean read GetNOTASIsNull write SetNOTASIsNull;
+ property TNAME: String read GetTNAMEValue write SetTNAMEValue;
+ property TNAMEIsNull: Boolean read GetTNAMEIsNull write SetTNAMEIsNull;
+
+ public
+ constructor Create(aDataTable: TDADataTable); override;
+ destructor Destroy; override;
+
+ end;
+
+ { IUSUARIOS_LOGON }
+ IUSUARIOS_LOGON = interface(IDAStronglyTypedDataTable)
+ ['{E5776819-8DAB-458B-8369-46D0DA888AFC}']
+ { Property getters and setters }
+ function GetLOGONIDValue: String;
+ procedure SetLOGONIDValue(const aValue: String);
+ function GetLOGONIDIsNull: Boolean;
+ procedure SetLOGONIDIsNull(const aValue: Boolean);
+ function GetID_USUARIOValue: Integer;
+ procedure SetID_USUARIOValue(const aValue: Integer);
+ function GetID_USUARIOIsNull: Boolean;
+ procedure SetID_USUARIOIsNull(const aValue: Boolean);
+ function GetAPLICACIONValue: String;
+ procedure SetAPLICACIONValue(const aValue: String);
+ function GetAPLICACIONIsNull: Boolean;
+ procedure SetAPLICACIONIsNull(const aValue: Boolean);
+ function GetEQUIPOValue: String;
+ procedure SetEQUIPOValue(const aValue: String);
+ function GetEQUIPOIsNull: Boolean;
+ procedure SetEQUIPOIsNull(const aValue: Boolean);
+ function GetDATAValue: String;
+ procedure SetDATAValue(const aValue: String);
+ function GetDATAIsNull: Boolean;
+ procedure SetDATAIsNull(const aValue: Boolean);
+
+
+ { Properties }
+ property LOGONID: String read GetLOGONIDValue write SetLOGONIDValue;
+ property LOGONIDIsNull: Boolean read GetLOGONIDIsNull write SetLOGONIDIsNull;
+ property ID_USUARIO: Integer read GetID_USUARIOValue write SetID_USUARIOValue;
+ property ID_USUARIOIsNull: Boolean read GetID_USUARIOIsNull write SetID_USUARIOIsNull;
+ property APLICACION: String read GetAPLICACIONValue write SetAPLICACIONValue;
+ property APLICACIONIsNull: Boolean read GetAPLICACIONIsNull write SetAPLICACIONIsNull;
+ property EQUIPO: String read GetEQUIPOValue write SetEQUIPOValue;
+ property EQUIPOIsNull: Boolean read GetEQUIPOIsNull write SetEQUIPOIsNull;
+ property DATA: String read GetDATAValue write SetDATAValue;
+ property DATAIsNull: Boolean read GetDATAIsNull write SetDATAIsNull;
+ end;
+
+ { TUSUARIOS_LOGONDataTableRules }
+ TUSUARIOS_LOGONDataTableRules = class(TDADataTableRules, IUSUARIOS_LOGON)
+ private
+ protected
+ { Property getters and setters }
+ function GetLOGONIDValue: String; virtual;
+ procedure SetLOGONIDValue(const aValue: String); virtual;
+ function GetLOGONIDIsNull: Boolean; virtual;
+ procedure SetLOGONIDIsNull(const aValue: Boolean); virtual;
+ function GetID_USUARIOValue: Integer; virtual;
+ procedure SetID_USUARIOValue(const aValue: Integer); virtual;
+ function GetID_USUARIOIsNull: Boolean; virtual;
+ procedure SetID_USUARIOIsNull(const aValue: Boolean); virtual;
+ function GetAPLICACIONValue: String; virtual;
+ procedure SetAPLICACIONValue(const aValue: String); virtual;
+ function GetAPLICACIONIsNull: Boolean; virtual;
+ procedure SetAPLICACIONIsNull(const aValue: Boolean); virtual;
+ function GetEQUIPOValue: String; virtual;
+ procedure SetEQUIPOValue(const aValue: String); virtual;
+ function GetEQUIPOIsNull: Boolean; virtual;
+ procedure SetEQUIPOIsNull(const aValue: Boolean); virtual;
+ function GetDATAValue: String; virtual;
+ procedure SetDATAValue(const aValue: String); virtual;
+ function GetDATAIsNull: Boolean; virtual;
+ procedure SetDATAIsNull(const aValue: Boolean); virtual;
+
+ { Properties }
+ property LOGONID: String read GetLOGONIDValue write SetLOGONIDValue;
+ property LOGONIDIsNull: Boolean read GetLOGONIDIsNull write SetLOGONIDIsNull;
+ property ID_USUARIO: Integer read GetID_USUARIOValue write SetID_USUARIOValue;
+ property ID_USUARIOIsNull: Boolean read GetID_USUARIOIsNull write SetID_USUARIOIsNull;
+ property APLICACION: String read GetAPLICACIONValue write SetAPLICACIONValue;
+ property APLICACIONIsNull: Boolean read GetAPLICACIONIsNull write SetAPLICACIONIsNull;
+ property EQUIPO: String read GetEQUIPOValue write SetEQUIPOValue;
+ property EQUIPOIsNull: Boolean read GetEQUIPOIsNull write SetEQUIPOIsNull;
+ property DATA: String read GetDATAValue write SetDATAValue;
+ property DATAIsNull: Boolean read GetDATAIsNull write SetDATAIsNull;
+
+ public
+ constructor Create(aDataTable: TDADataTable); override;
+ destructor Destroy; override;
+
+ end;
+
+ { IPERFILES }
+ IPERFILES = interface(IDAStronglyTypedDataTable)
+ ['{C2F94872-5B28-4AED-89EB-FB5E46387CE1}']
+ { Property getters and setters }
+ function GetIDValue: Integer;
+ procedure SetIDValue(const aValue: Integer);
+ function GetIDIsNull: Boolean;
+ procedure SetIDIsNull(const aValue: Boolean);
+ function GetUSERNAMEValue: String;
+ procedure SetUSERNAMEValue(const aValue: String);
+ function GetUSERNAMEIsNull: Boolean;
+ procedure SetUSERNAMEIsNull(const aValue: Boolean);
+ function GetLOGINValue: String;
+ procedure SetLOGINValue(const aValue: String);
+ function GetLOGINIsNull: Boolean;
+ procedure SetLOGINIsNull(const aValue: Boolean);
+ function GetTIPOValue: String;
+ procedure SetTIPOValue(const aValue: String);
+ function GetTIPOIsNull: Boolean;
+ procedure SetTIPOIsNull(const aValue: Boolean);
+
+
+ { Properties }
+ property ID: Integer read GetIDValue write SetIDValue;
+ property IDIsNull: Boolean read GetIDIsNull write SetIDIsNull;
+ property USERNAME: String read GetUSERNAMEValue write SetUSERNAMEValue;
+ property USERNAMEIsNull: Boolean read GetUSERNAMEIsNull write SetUSERNAMEIsNull;
+ property LOGIN: String read GetLOGINValue write SetLOGINValue;
+ property LOGINIsNull: Boolean read GetLOGINIsNull write SetLOGINIsNull;
+ property TIPO: String read GetTIPOValue write SetTIPOValue;
+ property TIPOIsNull: Boolean read GetTIPOIsNull write SetTIPOIsNull;
+ end;
+
+ { TPERFILESDataTableRules }
+ TPERFILESDataTableRules = class(TDADataTableRules, IPERFILES)
+ private
+ protected
+ { Property getters and setters }
+ function GetIDValue: Integer; virtual;
+ procedure SetIDValue(const aValue: Integer); virtual;
+ function GetIDIsNull: Boolean; virtual;
+ procedure SetIDIsNull(const aValue: Boolean); virtual;
+ function GetUSERNAMEValue: String; virtual;
+ procedure SetUSERNAMEValue(const aValue: String); virtual;
+ function GetUSERNAMEIsNull: Boolean; virtual;
+ procedure SetUSERNAMEIsNull(const aValue: Boolean); virtual;
+ function GetLOGINValue: String; virtual;
+ procedure SetLOGINValue(const aValue: String); virtual;
+ function GetLOGINIsNull: Boolean; virtual;
+ procedure SetLOGINIsNull(const aValue: Boolean); virtual;
+ function GetTIPOValue: String; virtual;
+ procedure SetTIPOValue(const aValue: String); virtual;
+ function GetTIPOIsNull: Boolean; virtual;
+ procedure SetTIPOIsNull(const aValue: Boolean); virtual;
+
+ { Properties }
+ property ID: Integer read GetIDValue write SetIDValue;
+ property IDIsNull: Boolean read GetIDIsNull write SetIDIsNull;
+ property USERNAME: String read GetUSERNAMEValue write SetUSERNAMEValue;
+ property USERNAMEIsNull: Boolean read GetUSERNAMEIsNull write SetUSERNAMEIsNull;
+ property LOGIN: String read GetLOGINValue write SetLOGINValue;
+ property LOGINIsNull: Boolean read GetLOGINIsNull write SetLOGINIsNull;
+ property TIPO: String read GetTIPOValue write SetTIPOValue;
+ property TIPOIsNull: Boolean read GetTIPOIsNull write SetTIPOIsNull;
+
+ public
+ constructor Create(aDataTable: TDADataTable); override;
+ destructor Destroy; override;
+
+ end;
+
+ { IPERMISOS }
+ IPERMISOS = interface(IDAStronglyTypedDataTable)
+ ['{EDAEF3B4-A7AB-4BCE-BBBE-932549913E2D}']
+ { Property getters and setters }
+ function GetIDValue: Integer;
+ procedure SetIDValue(const aValue: Integer);
+ function GetIDIsNull: Boolean;
+ procedure SetIDIsNull(const aValue: Boolean);
+ function GetID_USUARIOValue: Integer;
+ procedure SetID_USUARIOValue(const aValue: Integer);
+ function GetID_USUARIOIsNull: Boolean;
+ procedure SetID_USUARIOIsNull(const aValue: Boolean);
+ function GetMODULOValue: String;
+ procedure SetMODULOValue(const aValue: String);
+ function GetMODULOIsNull: Boolean;
+ procedure SetMODULOIsNull(const aValue: Boolean);
+ function GetNOMBRECOMPValue: String;
+ procedure SetNOMBRECOMPValue(const aValue: String);
+ function GetNOMBRECOMPIsNull: Boolean;
+ procedure SetNOMBRECOMPIsNull(const aValue: Boolean);
+ function GetCHECKSUMValue: String;
+ procedure SetCHECKSUMValue(const aValue: String);
+ function GetCHECKSUMIsNull: Boolean;
+ procedure SetCHECKSUMIsNull(const aValue: Boolean);
+
+
+ { Properties }
+ property ID: Integer read GetIDValue write SetIDValue;
+ property IDIsNull: Boolean read GetIDIsNull write SetIDIsNull;
+ property ID_USUARIO: Integer read GetID_USUARIOValue write SetID_USUARIOValue;
+ property ID_USUARIOIsNull: Boolean read GetID_USUARIOIsNull write SetID_USUARIOIsNull;
+ property MODULO: String read GetMODULOValue write SetMODULOValue;
+ property MODULOIsNull: Boolean read GetMODULOIsNull write SetMODULOIsNull;
+ property NOMBRECOMP: String read GetNOMBRECOMPValue write SetNOMBRECOMPValue;
+ property NOMBRECOMPIsNull: Boolean read GetNOMBRECOMPIsNull write SetNOMBRECOMPIsNull;
+ property CHECKSUM: String read GetCHECKSUMValue write SetCHECKSUMValue;
+ property CHECKSUMIsNull: Boolean read GetCHECKSUMIsNull write SetCHECKSUMIsNull;
+ end;
+
+ { TPERMISOSDataTableRules }
+ TPERMISOSDataTableRules = class(TDADataTableRules, IPERMISOS)
+ private
+ protected
+ { Property getters and setters }
+ function GetIDValue: Integer; virtual;
+ procedure SetIDValue(const aValue: Integer); virtual;
+ function GetIDIsNull: Boolean; virtual;
+ procedure SetIDIsNull(const aValue: Boolean); virtual;
+ function GetID_USUARIOValue: Integer; virtual;
+ procedure SetID_USUARIOValue(const aValue: Integer); virtual;
+ function GetID_USUARIOIsNull: Boolean; virtual;
+ procedure SetID_USUARIOIsNull(const aValue: Boolean); virtual;
+ function GetMODULOValue: String; virtual;
+ procedure SetMODULOValue(const aValue: String); virtual;
+ function GetMODULOIsNull: Boolean; virtual;
+ procedure SetMODULOIsNull(const aValue: Boolean); virtual;
+ function GetNOMBRECOMPValue: String; virtual;
+ procedure SetNOMBRECOMPValue(const aValue: String); virtual;
+ function GetNOMBRECOMPIsNull: Boolean; virtual;
+ procedure SetNOMBRECOMPIsNull(const aValue: Boolean); virtual;
+ function GetCHECKSUMValue: String; virtual;
+ procedure SetCHECKSUMValue(const aValue: String); virtual;
+ function GetCHECKSUMIsNull: Boolean; virtual;
+ procedure SetCHECKSUMIsNull(const aValue: Boolean); virtual;
+
+ { Properties }
+ property ID: Integer read GetIDValue write SetIDValue;
+ property IDIsNull: Boolean read GetIDIsNull write SetIDIsNull;
+ property ID_USUARIO: Integer read GetID_USUARIOValue write SetID_USUARIOValue;
+ property ID_USUARIOIsNull: Boolean read GetID_USUARIOIsNull write SetID_USUARIOIsNull;
+ property MODULO: String read GetMODULOValue write SetMODULOValue;
+ property MODULOIsNull: Boolean read GetMODULOIsNull write SetMODULOIsNull;
+ property NOMBRECOMP: String read GetNOMBRECOMPValue write SetNOMBRECOMPValue;
+ property NOMBRECOMPIsNull: Boolean read GetNOMBRECOMPIsNull write SetNOMBRECOMPIsNull;
+ property CHECKSUM: String read GetCHECKSUMValue write SetCHECKSUMValue;
+ property CHECKSUMIsNull: Boolean read GetCHECKSUMIsNull write SetCHECKSUMIsNull;
+
+ public
+ constructor Create(aDataTable: TDADataTable); override;
+ destructor Destroy; override;
+
+ end;
+
+ { IPERMISOSEX }
+ IPERMISOSEX = interface(IDAStronglyTypedDataTable)
+ ['{A7EE9F4F-588F-4A23-B57C-540AB2AE9B42}']
+ { Property getters and setters }
+ function GetIDValue: Integer;
+ procedure SetIDValue(const aValue: Integer);
+ function GetIDIsNull: Boolean;
+ procedure SetIDIsNull(const aValue: Boolean);
+ function GetID_USUARIOValue: Integer;
+ procedure SetID_USUARIOValue(const aValue: Integer);
+ function GetID_USUARIOIsNull: Boolean;
+ procedure SetID_USUARIOIsNull(const aValue: Boolean);
+ function GetMODULOValue: String;
+ procedure SetMODULOValue(const aValue: String);
+ function GetMODULOIsNull: Boolean;
+ procedure SetMODULOIsNull(const aValue: Boolean);
+ function GetNOMBRECOMPValue: String;
+ procedure SetNOMBRECOMPValue(const aValue: String);
+ function GetNOMBRECOMPIsNull: Boolean;
+ procedure SetNOMBRECOMPIsNull(const aValue: Boolean);
+ function GetNOMBREFORMValue: String;
+ procedure SetNOMBREFORMValue(const aValue: String);
+ function GetNOMBREFORMIsNull: Boolean;
+ procedure SetNOMBREFORMIsNull(const aValue: Boolean);
+ function GetCHECKSUMValue: String;
+ procedure SetCHECKSUMValue(const aValue: String);
+ function GetCHECKSUMIsNull: Boolean;
+ procedure SetCHECKSUMIsNull(const aValue: Boolean);
+
+
+ { Properties }
+ property ID: Integer read GetIDValue write SetIDValue;
+ property IDIsNull: Boolean read GetIDIsNull write SetIDIsNull;
+ property ID_USUARIO: Integer read GetID_USUARIOValue write SetID_USUARIOValue;
+ property ID_USUARIOIsNull: Boolean read GetID_USUARIOIsNull write SetID_USUARIOIsNull;
+ property MODULO: String read GetMODULOValue write SetMODULOValue;
+ property MODULOIsNull: Boolean read GetMODULOIsNull write SetMODULOIsNull;
+ property NOMBRECOMP: String read GetNOMBRECOMPValue write SetNOMBRECOMPValue;
+ property NOMBRECOMPIsNull: Boolean read GetNOMBRECOMPIsNull write SetNOMBRECOMPIsNull;
+ property NOMBREFORM: String read GetNOMBREFORMValue write SetNOMBREFORMValue;
+ property NOMBREFORMIsNull: Boolean read GetNOMBREFORMIsNull write SetNOMBREFORMIsNull;
+ property CHECKSUM: String read GetCHECKSUMValue write SetCHECKSUMValue;
+ property CHECKSUMIsNull: Boolean read GetCHECKSUMIsNull write SetCHECKSUMIsNull;
+ end;
+
+ { TPERMISOSEXDataTableRules }
+ TPERMISOSEXDataTableRules = class(TDADataTableRules, IPERMISOSEX)
+ private
+ protected
+ { Property getters and setters }
+ function GetIDValue: Integer; virtual;
+ procedure SetIDValue(const aValue: Integer); virtual;
+ function GetIDIsNull: Boolean; virtual;
+ procedure SetIDIsNull(const aValue: Boolean); virtual;
+ function GetID_USUARIOValue: Integer; virtual;
+ procedure SetID_USUARIOValue(const aValue: Integer); virtual;
+ function GetID_USUARIOIsNull: Boolean; virtual;
+ procedure SetID_USUARIOIsNull(const aValue: Boolean); virtual;
+ function GetMODULOValue: String; virtual;
+ procedure SetMODULOValue(const aValue: String); virtual;
+ function GetMODULOIsNull: Boolean; virtual;
+ procedure SetMODULOIsNull(const aValue: Boolean); virtual;
+ function GetNOMBRECOMPValue: String; virtual;
+ procedure SetNOMBRECOMPValue(const aValue: String); virtual;
+ function GetNOMBRECOMPIsNull: Boolean; virtual;
+ procedure SetNOMBRECOMPIsNull(const aValue: Boolean); virtual;
+ function GetNOMBREFORMValue: String; virtual;
+ procedure SetNOMBREFORMValue(const aValue: String); virtual;
+ function GetNOMBREFORMIsNull: Boolean; virtual;
+ procedure SetNOMBREFORMIsNull(const aValue: Boolean); virtual;
+ function GetCHECKSUMValue: String; virtual;
+ procedure SetCHECKSUMValue(const aValue: String); virtual;
+ function GetCHECKSUMIsNull: Boolean; virtual;
+ procedure SetCHECKSUMIsNull(const aValue: Boolean); virtual;
+
+ { Properties }
+ property ID: Integer read GetIDValue write SetIDValue;
+ property IDIsNull: Boolean read GetIDIsNull write SetIDIsNull;
+ property ID_USUARIO: Integer read GetID_USUARIOValue write SetID_USUARIOValue;
+ property ID_USUARIOIsNull: Boolean read GetID_USUARIOIsNull write SetID_USUARIOIsNull;
+ property MODULO: String read GetMODULOValue write SetMODULOValue;
+ property MODULOIsNull: Boolean read GetMODULOIsNull write SetMODULOIsNull;
+ property NOMBRECOMP: String read GetNOMBRECOMPValue write SetNOMBRECOMPValue;
+ property NOMBRECOMPIsNull: Boolean read GetNOMBRECOMPIsNull write SetNOMBRECOMPIsNull;
+ property NOMBREFORM: String read GetNOMBREFORMValue write SetNOMBREFORMValue;
+ property NOMBREFORMIsNull: Boolean read GetNOMBREFORMIsNull write SetNOMBREFORMIsNull;
+ property CHECKSUM: String read GetCHECKSUMValue write SetCHECKSUMValue;
+ property CHECKSUMIsNull: Boolean read GetCHECKSUMIsNull write SetCHECKSUMIsNull;
+
+ public
+ constructor Create(aDataTable: TDADataTable); override;
+ destructor Destroy; override;
+
+ end;
+
+implementation
+
+uses Variants, uROBinaryHelpers;
+
+{ TUSUARIOSDataTableRules }
+constructor TUSUARIOSDataTableRules.Create(aDataTable: TDADataTable);
+begin
+ inherited;
+end;
+
+destructor TUSUARIOSDataTableRules.Destroy;
+begin
+ inherited;
+end;
+
+function TUSUARIOSDataTableRules.GetIDValue: Integer;
+begin
+ result := DataTable.Fields[idx_USUARIOSID].AsInteger;
+end;
+
+procedure TUSUARIOSDataTableRules.SetIDValue(const aValue: Integer);
+begin
+ DataTable.Fields[idx_USUARIOSID].AsInteger := aValue;
+end;
+
+function TUSUARIOSDataTableRules.GetIDIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_USUARIOSID].IsNull;
+end;
+
+procedure TUSUARIOSDataTableRules.SetIDIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_USUARIOSID].AsVariant := Null;
+end;
+
+function TUSUARIOSDataTableRules.GetUSERNAMEValue: String;
+begin
+ result := DataTable.Fields[idx_USUARIOSUSERNAME].AsString;
+end;
+
+procedure TUSUARIOSDataTableRules.SetUSERNAMEValue(const aValue: String);
+begin
+ DataTable.Fields[idx_USUARIOSUSERNAME].AsString := aValue;
+end;
+
+function TUSUARIOSDataTableRules.GetUSERNAMEIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_USUARIOSUSERNAME].IsNull;
+end;
+
+procedure TUSUARIOSDataTableRules.SetUSERNAMEIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_USUARIOSUSERNAME].AsVariant := Null;
+end;
+
+function TUSUARIOSDataTableRules.GetLOGINValue: String;
+begin
+ result := DataTable.Fields[idx_USUARIOSLOGIN].AsString;
+end;
+
+procedure TUSUARIOSDataTableRules.SetLOGINValue(const aValue: String);
+begin
+ DataTable.Fields[idx_USUARIOSLOGIN].AsString := aValue;
+end;
+
+function TUSUARIOSDataTableRules.GetLOGINIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_USUARIOSLOGIN].IsNull;
+end;
+
+procedure TUSUARIOSDataTableRules.SetLOGINIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_USUARIOSLOGIN].AsVariant := Null;
+end;
+
+function TUSUARIOSDataTableRules.GetPASSValue: String;
+begin
+ result := DataTable.Fields[idx_USUARIOSPASS].AsString;
+end;
+
+procedure TUSUARIOSDataTableRules.SetPASSValue(const aValue: String);
+begin
+ DataTable.Fields[idx_USUARIOSPASS].AsString := aValue;
+end;
+
+function TUSUARIOSDataTableRules.GetPASSIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_USUARIOSPASS].IsNull;
+end;
+
+procedure TUSUARIOSDataTableRules.SetPASSIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_USUARIOSPASS].AsVariant := Null;
+end;
+
+function TUSUARIOSDataTableRules.GetPASSEXPIREDValue: DateTime;
+begin
+ result := DataTable.Fields[idx_USUARIOSPASSEXPIRED].AsDateTime;
+end;
+
+procedure TUSUARIOSDataTableRules.SetPASSEXPIREDValue(const aValue: DateTime);
+begin
+ DataTable.Fields[idx_USUARIOSPASSEXPIRED].AsDateTime := aValue;
+end;
+
+function TUSUARIOSDataTableRules.GetPASSEXPIREDIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_USUARIOSPASSEXPIRED].IsNull;
+end;
+
+procedure TUSUARIOSDataTableRules.SetPASSEXPIREDIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_USUARIOSPASSEXPIRED].AsVariant := Null;
+end;
+
+function TUSUARIOSDataTableRules.GetBLOQUEADOValue: SmallInt;
+begin
+ result := DataTable.Fields[idx_USUARIOSBLOQUEADO].AsSmallInt;
+end;
+
+procedure TUSUARIOSDataTableRules.SetBLOQUEADOValue(const aValue: SmallInt);
+begin
+ DataTable.Fields[idx_USUARIOSBLOQUEADO].AsSmallInt := aValue;
+end;
+
+function TUSUARIOSDataTableRules.GetBLOQUEADOIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_USUARIOSBLOQUEADO].IsNull;
+end;
+
+procedure TUSUARIOSDataTableRules.SetBLOQUEADOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_USUARIOSBLOQUEADO].AsVariant := Null;
+end;
+
+function TUSUARIOSDataTableRules.GetEMAILValue: String;
+begin
+ result := DataTable.Fields[idx_USUARIOSEMAIL].AsString;
+end;
+
+procedure TUSUARIOSDataTableRules.SetEMAILValue(const aValue: String);
+begin
+ DataTable.Fields[idx_USUARIOSEMAIL].AsString := aValue;
+end;
+
+function TUSUARIOSDataTableRules.GetEMAILIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_USUARIOSEMAIL].IsNull;
+end;
+
+procedure TUSUARIOSDataTableRules.SetEMAILIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_USUARIOSEMAIL].AsVariant := Null;
+end;
+
+function TUSUARIOSDataTableRules.GetUSERDAYSSUNValue: Integer;
+begin
+ result := DataTable.Fields[idx_USUARIOSUSERDAYSSUN].AsInteger;
+end;
+
+procedure TUSUARIOSDataTableRules.SetUSERDAYSSUNValue(const aValue: Integer);
+begin
+ DataTable.Fields[idx_USUARIOSUSERDAYSSUN].AsInteger := aValue;
+end;
+
+function TUSUARIOSDataTableRules.GetUSERDAYSSUNIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_USUARIOSUSERDAYSSUN].IsNull;
+end;
+
+procedure TUSUARIOSDataTableRules.SetUSERDAYSSUNIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_USUARIOSUSERDAYSSUN].AsVariant := Null;
+end;
+
+function TUSUARIOSDataTableRules.GetPRIVILEGEDValue: Integer;
+begin
+ result := DataTable.Fields[idx_USUARIOSPRIVILEGED].AsInteger;
+end;
+
+procedure TUSUARIOSDataTableRules.SetPRIVILEGEDValue(const aValue: Integer);
+begin
+ DataTable.Fields[idx_USUARIOSPRIVILEGED].AsInteger := aValue;
+end;
+
+function TUSUARIOSDataTableRules.GetPRIVILEGEDIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_USUARIOSPRIVILEGED].IsNull;
+end;
+
+procedure TUSUARIOSDataTableRules.SetPRIVILEGEDIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_USUARIOSPRIVILEGED].AsVariant := Null;
+end;
+
+function TUSUARIOSDataTableRules.GetTIPOValue: String;
+begin
+ result := DataTable.Fields[idx_USUARIOSTIPO].AsString;
+end;
+
+procedure TUSUARIOSDataTableRules.SetTIPOValue(const aValue: String);
+begin
+ DataTable.Fields[idx_USUARIOSTIPO].AsString := aValue;
+end;
+
+function TUSUARIOSDataTableRules.GetTIPOIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_USUARIOSTIPO].IsNull;
+end;
+
+procedure TUSUARIOSDataTableRules.SetTIPOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_USUARIOSTIPO].AsVariant := Null;
+end;
+
+function TUSUARIOSDataTableRules.GetID_PERFILValue: Integer;
+begin
+ result := DataTable.Fields[idx_USUARIOSID_PERFIL].AsInteger;
+end;
+
+procedure TUSUARIOSDataTableRules.SetID_PERFILValue(const aValue: Integer);
+begin
+ DataTable.Fields[idx_USUARIOSID_PERFIL].AsInteger := aValue;
+end;
+
+function TUSUARIOSDataTableRules.GetID_PERFILIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_USUARIOSID_PERFIL].IsNull;
+end;
+
+procedure TUSUARIOSDataTableRules.SetID_PERFILIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_USUARIOSID_PERFIL].AsVariant := Null;
+end;
+
+function TUSUARIOSDataTableRules.GetCHECKSUMValue: String;
+begin
+ result := DataTable.Fields[idx_USUARIOSCHECKSUM].AsString;
+end;
+
+procedure TUSUARIOSDataTableRules.SetCHECKSUMValue(const aValue: String);
+begin
+ DataTable.Fields[idx_USUARIOSCHECKSUM].AsString := aValue;
+end;
+
+function TUSUARIOSDataTableRules.GetCHECKSUMIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_USUARIOSCHECKSUM].IsNull;
+end;
+
+procedure TUSUARIOSDataTableRules.SetCHECKSUMIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_USUARIOSCHECKSUM].AsVariant := Null;
+end;
+
+
+{ TUSUARIOS_EVENTOSDataTableRules }
+constructor TUSUARIOS_EVENTOSDataTableRules.Create(aDataTable: TDADataTable);
+var
+ StrList: TStringList;
+begin
+ inherited;
+
+ StrList := TStringList.Create;
+ StrList.OnChange := NOTAS_OnChange;
+ f_NOTAS := NewROStrings(StrList,True);
+end;
+
+destructor TUSUARIOS_EVENTOSDataTableRules.Destroy;
+begin
+ inherited;
+end;
+
+procedure TUSUARIOS_EVENTOSDataTableRules.NOTAS_OnChange(Sender: TObject);
+begin
+ if DataTable.Editing then DataTable.Fields[idx_USUARIOS_EVENTOSNOTAS].AsVariant := TStringList(Sender).Text;
+end;
+
+function TUSUARIOS_EVENTOSDataTableRules.GetAPLICACIONValue: String;
+begin
+ result := DataTable.Fields[idx_USUARIOS_EVENTOSAPLICACION].AsString;
+end;
+
+procedure TUSUARIOS_EVENTOSDataTableRules.SetAPLICACIONValue(const aValue: String);
+begin
+ DataTable.Fields[idx_USUARIOS_EVENTOSAPLICACION].AsString := aValue;
+end;
+
+function TUSUARIOS_EVENTOSDataTableRules.GetAPLICACIONIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_USUARIOS_EVENTOSAPLICACION].IsNull;
+end;
+
+procedure TUSUARIOS_EVENTOSDataTableRules.SetAPLICACIONIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_USUARIOS_EVENTOSAPLICACION].AsVariant := Null;
+end;
+
+function TUSUARIOS_EVENTOSDataTableRules.GetID_USUARIOValue: Integer;
+begin
+ result := DataTable.Fields[idx_USUARIOS_EVENTOSID_USUARIO].AsInteger;
+end;
+
+procedure TUSUARIOS_EVENTOSDataTableRules.SetID_USUARIOValue(const aValue: Integer);
+begin
+ DataTable.Fields[idx_USUARIOS_EVENTOSID_USUARIO].AsInteger := aValue;
+end;
+
+function TUSUARIOS_EVENTOSDataTableRules.GetID_USUARIOIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_USUARIOS_EVENTOSID_USUARIO].IsNull;
+end;
+
+procedure TUSUARIOS_EVENTOSDataTableRules.SetID_USUARIOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_USUARIOS_EVENTOSID_USUARIO].AsVariant := Null;
+end;
+
+function TUSUARIOS_EVENTOSDataTableRules.GetFECHAValue: String;
+begin
+ result := DataTable.Fields[idx_USUARIOS_EVENTOSFECHA].AsString;
+end;
+
+procedure TUSUARIOS_EVENTOSDataTableRules.SetFECHAValue(const aValue: String);
+begin
+ DataTable.Fields[idx_USUARIOS_EVENTOSFECHA].AsString := aValue;
+end;
+
+function TUSUARIOS_EVENTOSDataTableRules.GetFECHAIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_USUARIOS_EVENTOSFECHA].IsNull;
+end;
+
+procedure TUSUARIOS_EVENTOSDataTableRules.SetFECHAIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_USUARIOS_EVENTOSFECHA].AsVariant := Null;
+end;
+
+function TUSUARIOS_EVENTOSDataTableRules.GetHORAValue: String;
+begin
+ result := DataTable.Fields[idx_USUARIOS_EVENTOSHORA].AsString;
+end;
+
+procedure TUSUARIOS_EVENTOSDataTableRules.SetHORAValue(const aValue: String);
+begin
+ DataTable.Fields[idx_USUARIOS_EVENTOSHORA].AsString := aValue;
+end;
+
+function TUSUARIOS_EVENTOSDataTableRules.GetHORAIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_USUARIOS_EVENTOSHORA].IsNull;
+end;
+
+procedure TUSUARIOS_EVENTOSDataTableRules.SetHORAIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_USUARIOS_EVENTOSHORA].AsVariant := Null;
+end;
+
+function TUSUARIOS_EVENTOSDataTableRules.GetFORMValue: String;
+begin
+ result := DataTable.Fields[idx_USUARIOS_EVENTOSFORM].AsString;
+end;
+
+procedure TUSUARIOS_EVENTOSDataTableRules.SetFORMValue(const aValue: String);
+begin
+ DataTable.Fields[idx_USUARIOS_EVENTOSFORM].AsString := aValue;
+end;
+
+function TUSUARIOS_EVENTOSDataTableRules.GetFORMIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_USUARIOS_EVENTOSFORM].IsNull;
+end;
+
+procedure TUSUARIOS_EVENTOSDataTableRules.SetFORMIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_USUARIOS_EVENTOSFORM].AsVariant := Null;
+end;
+
+function TUSUARIOS_EVENTOSDataTableRules.GetTITULO_FORMValue: String;
+begin
+ result := DataTable.Fields[idx_USUARIOS_EVENTOSTITULO_FORM].AsString;
+end;
+
+procedure TUSUARIOS_EVENTOSDataTableRules.SetTITULO_FORMValue(const aValue: String);
+begin
+ DataTable.Fields[idx_USUARIOS_EVENTOSTITULO_FORM].AsString := aValue;
+end;
+
+function TUSUARIOS_EVENTOSDataTableRules.GetTITULO_FORMIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_USUARIOS_EVENTOSTITULO_FORM].IsNull;
+end;
+
+procedure TUSUARIOS_EVENTOSDataTableRules.SetTITULO_FORMIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_USUARIOS_EVENTOSTITULO_FORM].AsVariant := Null;
+end;
+
+function TUSUARIOS_EVENTOSDataTableRules.GetEVENTOValue: String;
+begin
+ result := DataTable.Fields[idx_USUARIOS_EVENTOSEVENTO].AsString;
+end;
+
+procedure TUSUARIOS_EVENTOSDataTableRules.SetEVENTOValue(const aValue: String);
+begin
+ DataTable.Fields[idx_USUARIOS_EVENTOSEVENTO].AsString := aValue;
+end;
+
+function TUSUARIOS_EVENTOSDataTableRules.GetEVENTOIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_USUARIOS_EVENTOSEVENTO].IsNull;
+end;
+
+procedure TUSUARIOS_EVENTOSDataTableRules.SetEVENTOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_USUARIOS_EVENTOSEVENTO].AsVariant := Null;
+end;
+
+function TUSUARIOS_EVENTOSDataTableRules.GetNOTASValue: IROStrings;
+begin
+ result := f_NOTAS;
+ result.Text := DataTable.Fields[idx_USUARIOS_EVENTOSNOTAS].AsString;
+end;
+
+function TUSUARIOS_EVENTOSDataTableRules.GetNOTASIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_USUARIOS_EVENTOSNOTAS].IsNull;
+end;
+
+procedure TUSUARIOS_EVENTOSDataTableRules.SetNOTASIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_USUARIOS_EVENTOSNOTAS].AsVariant := Null;
+end;
+
+function TUSUARIOS_EVENTOSDataTableRules.GetTNAMEValue: String;
+begin
+ result := DataTable.Fields[idx_USUARIOS_EVENTOSTNAME].AsString;
+end;
+
+procedure TUSUARIOS_EVENTOSDataTableRules.SetTNAMEValue(const aValue: String);
+begin
+ DataTable.Fields[idx_USUARIOS_EVENTOSTNAME].AsString := aValue;
+end;
+
+function TUSUARIOS_EVENTOSDataTableRules.GetTNAMEIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_USUARIOS_EVENTOSTNAME].IsNull;
+end;
+
+procedure TUSUARIOS_EVENTOSDataTableRules.SetTNAMEIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_USUARIOS_EVENTOSTNAME].AsVariant := Null;
+end;
+
+
+{ TUSUARIOS_LOGONDataTableRules }
+constructor TUSUARIOS_LOGONDataTableRules.Create(aDataTable: TDADataTable);
+begin
+ inherited;
+end;
+
+destructor TUSUARIOS_LOGONDataTableRules.Destroy;
+begin
+ inherited;
+end;
+
+function TUSUARIOS_LOGONDataTableRules.GetLOGONIDValue: String;
+begin
+ result := DataTable.Fields[idx_USUARIOS_LOGONLOGONID].AsString;
+end;
+
+procedure TUSUARIOS_LOGONDataTableRules.SetLOGONIDValue(const aValue: String);
+begin
+ DataTable.Fields[idx_USUARIOS_LOGONLOGONID].AsString := aValue;
+end;
+
+function TUSUARIOS_LOGONDataTableRules.GetLOGONIDIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_USUARIOS_LOGONLOGONID].IsNull;
+end;
+
+procedure TUSUARIOS_LOGONDataTableRules.SetLOGONIDIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_USUARIOS_LOGONLOGONID].AsVariant := Null;
+end;
+
+function TUSUARIOS_LOGONDataTableRules.GetID_USUARIOValue: Integer;
+begin
+ result := DataTable.Fields[idx_USUARIOS_LOGONID_USUARIO].AsInteger;
+end;
+
+procedure TUSUARIOS_LOGONDataTableRules.SetID_USUARIOValue(const aValue: Integer);
+begin
+ DataTable.Fields[idx_USUARIOS_LOGONID_USUARIO].AsInteger := aValue;
+end;
+
+function TUSUARIOS_LOGONDataTableRules.GetID_USUARIOIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_USUARIOS_LOGONID_USUARIO].IsNull;
+end;
+
+procedure TUSUARIOS_LOGONDataTableRules.SetID_USUARIOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_USUARIOS_LOGONID_USUARIO].AsVariant := Null;
+end;
+
+function TUSUARIOS_LOGONDataTableRules.GetAPLICACIONValue: String;
+begin
+ result := DataTable.Fields[idx_USUARIOS_LOGONAPLICACION].AsString;
+end;
+
+procedure TUSUARIOS_LOGONDataTableRules.SetAPLICACIONValue(const aValue: String);
+begin
+ DataTable.Fields[idx_USUARIOS_LOGONAPLICACION].AsString := aValue;
+end;
+
+function TUSUARIOS_LOGONDataTableRules.GetAPLICACIONIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_USUARIOS_LOGONAPLICACION].IsNull;
+end;
+
+procedure TUSUARIOS_LOGONDataTableRules.SetAPLICACIONIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_USUARIOS_LOGONAPLICACION].AsVariant := Null;
+end;
+
+function TUSUARIOS_LOGONDataTableRules.GetEQUIPOValue: String;
+begin
+ result := DataTable.Fields[idx_USUARIOS_LOGONEQUIPO].AsString;
+end;
+
+procedure TUSUARIOS_LOGONDataTableRules.SetEQUIPOValue(const aValue: String);
+begin
+ DataTable.Fields[idx_USUARIOS_LOGONEQUIPO].AsString := aValue;
+end;
+
+function TUSUARIOS_LOGONDataTableRules.GetEQUIPOIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_USUARIOS_LOGONEQUIPO].IsNull;
+end;
+
+procedure TUSUARIOS_LOGONDataTableRules.SetEQUIPOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_USUARIOS_LOGONEQUIPO].AsVariant := Null;
+end;
+
+function TUSUARIOS_LOGONDataTableRules.GetDATAValue: String;
+begin
+ result := DataTable.Fields[idx_USUARIOS_LOGONDATA].AsString;
+end;
+
+procedure TUSUARIOS_LOGONDataTableRules.SetDATAValue(const aValue: String);
+begin
+ DataTable.Fields[idx_USUARIOS_LOGONDATA].AsString := aValue;
+end;
+
+function TUSUARIOS_LOGONDataTableRules.GetDATAIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_USUARIOS_LOGONDATA].IsNull;
+end;
+
+procedure TUSUARIOS_LOGONDataTableRules.SetDATAIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_USUARIOS_LOGONDATA].AsVariant := Null;
+end;
+
+
+{ TPERFILESDataTableRules }
+constructor TPERFILESDataTableRules.Create(aDataTable: TDADataTable);
+begin
+ inherited;
+end;
+
+destructor TPERFILESDataTableRules.Destroy;
+begin
+ inherited;
+end;
+
+function TPERFILESDataTableRules.GetIDValue: Integer;
+begin
+ result := DataTable.Fields[idx_PERFILESID].AsInteger;
+end;
+
+procedure TPERFILESDataTableRules.SetIDValue(const aValue: Integer);
+begin
+ DataTable.Fields[idx_PERFILESID].AsInteger := aValue;
+end;
+
+function TPERFILESDataTableRules.GetIDIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_PERFILESID].IsNull;
+end;
+
+procedure TPERFILESDataTableRules.SetIDIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_PERFILESID].AsVariant := Null;
+end;
+
+function TPERFILESDataTableRules.GetUSERNAMEValue: String;
+begin
+ result := DataTable.Fields[idx_PERFILESUSERNAME].AsString;
+end;
+
+procedure TPERFILESDataTableRules.SetUSERNAMEValue(const aValue: String);
+begin
+ DataTable.Fields[idx_PERFILESUSERNAME].AsString := aValue;
+end;
+
+function TPERFILESDataTableRules.GetUSERNAMEIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_PERFILESUSERNAME].IsNull;
+end;
+
+procedure TPERFILESDataTableRules.SetUSERNAMEIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_PERFILESUSERNAME].AsVariant := Null;
+end;
+
+function TPERFILESDataTableRules.GetLOGINValue: String;
+begin
+ result := DataTable.Fields[idx_PERFILESLOGIN].AsString;
+end;
+
+procedure TPERFILESDataTableRules.SetLOGINValue(const aValue: String);
+begin
+ DataTable.Fields[idx_PERFILESLOGIN].AsString := aValue;
+end;
+
+function TPERFILESDataTableRules.GetLOGINIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_PERFILESLOGIN].IsNull;
+end;
+
+procedure TPERFILESDataTableRules.SetLOGINIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_PERFILESLOGIN].AsVariant := Null;
+end;
+
+function TPERFILESDataTableRules.GetTIPOValue: String;
+begin
+ result := DataTable.Fields[idx_PERFILESTIPO].AsString;
+end;
+
+procedure TPERFILESDataTableRules.SetTIPOValue(const aValue: String);
+begin
+ DataTable.Fields[idx_PERFILESTIPO].AsString := aValue;
+end;
+
+function TPERFILESDataTableRules.GetTIPOIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_PERFILESTIPO].IsNull;
+end;
+
+procedure TPERFILESDataTableRules.SetTIPOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_PERFILESTIPO].AsVariant := Null;
+end;
+
+
+{ TPERMISOSDataTableRules }
+constructor TPERMISOSDataTableRules.Create(aDataTable: TDADataTable);
+begin
+ inherited;
+end;
+
+destructor TPERMISOSDataTableRules.Destroy;
+begin
+ inherited;
+end;
+
+function TPERMISOSDataTableRules.GetIDValue: Integer;
+begin
+ result := DataTable.Fields[idx_PERMISOSID].AsInteger;
+end;
+
+procedure TPERMISOSDataTableRules.SetIDValue(const aValue: Integer);
+begin
+ DataTable.Fields[idx_PERMISOSID].AsInteger := aValue;
+end;
+
+function TPERMISOSDataTableRules.GetIDIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_PERMISOSID].IsNull;
+end;
+
+procedure TPERMISOSDataTableRules.SetIDIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_PERMISOSID].AsVariant := Null;
+end;
+
+function TPERMISOSDataTableRules.GetID_USUARIOValue: Integer;
+begin
+ result := DataTable.Fields[idx_PERMISOSID_USUARIO].AsInteger;
+end;
+
+procedure TPERMISOSDataTableRules.SetID_USUARIOValue(const aValue: Integer);
+begin
+ DataTable.Fields[idx_PERMISOSID_USUARIO].AsInteger := aValue;
+end;
+
+function TPERMISOSDataTableRules.GetID_USUARIOIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_PERMISOSID_USUARIO].IsNull;
+end;
+
+procedure TPERMISOSDataTableRules.SetID_USUARIOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_PERMISOSID_USUARIO].AsVariant := Null;
+end;
+
+function TPERMISOSDataTableRules.GetMODULOValue: String;
+begin
+ result := DataTable.Fields[idx_PERMISOSMODULO].AsString;
+end;
+
+procedure TPERMISOSDataTableRules.SetMODULOValue(const aValue: String);
+begin
+ DataTable.Fields[idx_PERMISOSMODULO].AsString := aValue;
+end;
+
+function TPERMISOSDataTableRules.GetMODULOIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_PERMISOSMODULO].IsNull;
+end;
+
+procedure TPERMISOSDataTableRules.SetMODULOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_PERMISOSMODULO].AsVariant := Null;
+end;
+
+function TPERMISOSDataTableRules.GetNOMBRECOMPValue: String;
+begin
+ result := DataTable.Fields[idx_PERMISOSNOMBRECOMP].AsString;
+end;
+
+procedure TPERMISOSDataTableRules.SetNOMBRECOMPValue(const aValue: String);
+begin
+ DataTable.Fields[idx_PERMISOSNOMBRECOMP].AsString := aValue;
+end;
+
+function TPERMISOSDataTableRules.GetNOMBRECOMPIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_PERMISOSNOMBRECOMP].IsNull;
+end;
+
+procedure TPERMISOSDataTableRules.SetNOMBRECOMPIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_PERMISOSNOMBRECOMP].AsVariant := Null;
+end;
+
+function TPERMISOSDataTableRules.GetCHECKSUMValue: String;
+begin
+ result := DataTable.Fields[idx_PERMISOSCHECKSUM].AsString;
+end;
+
+procedure TPERMISOSDataTableRules.SetCHECKSUMValue(const aValue: String);
+begin
+ DataTable.Fields[idx_PERMISOSCHECKSUM].AsString := aValue;
+end;
+
+function TPERMISOSDataTableRules.GetCHECKSUMIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_PERMISOSCHECKSUM].IsNull;
+end;
+
+procedure TPERMISOSDataTableRules.SetCHECKSUMIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_PERMISOSCHECKSUM].AsVariant := Null;
+end;
+
+
+{ TPERMISOSEXDataTableRules }
+constructor TPERMISOSEXDataTableRules.Create(aDataTable: TDADataTable);
+begin
+ inherited;
+end;
+
+destructor TPERMISOSEXDataTableRules.Destroy;
+begin
+ inherited;
+end;
+
+function TPERMISOSEXDataTableRules.GetIDValue: Integer;
+begin
+ result := DataTable.Fields[idx_PERMISOSEXID].AsInteger;
+end;
+
+procedure TPERMISOSEXDataTableRules.SetIDValue(const aValue: Integer);
+begin
+ DataTable.Fields[idx_PERMISOSEXID].AsInteger := aValue;
+end;
+
+function TPERMISOSEXDataTableRules.GetIDIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_PERMISOSEXID].IsNull;
+end;
+
+procedure TPERMISOSEXDataTableRules.SetIDIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_PERMISOSEXID].AsVariant := Null;
+end;
+
+function TPERMISOSEXDataTableRules.GetID_USUARIOValue: Integer;
+begin
+ result := DataTable.Fields[idx_PERMISOSEXID_USUARIO].AsInteger;
+end;
+
+procedure TPERMISOSEXDataTableRules.SetID_USUARIOValue(const aValue: Integer);
+begin
+ DataTable.Fields[idx_PERMISOSEXID_USUARIO].AsInteger := aValue;
+end;
+
+function TPERMISOSEXDataTableRules.GetID_USUARIOIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_PERMISOSEXID_USUARIO].IsNull;
+end;
+
+procedure TPERMISOSEXDataTableRules.SetID_USUARIOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_PERMISOSEXID_USUARIO].AsVariant := Null;
+end;
+
+function TPERMISOSEXDataTableRules.GetMODULOValue: String;
+begin
+ result := DataTable.Fields[idx_PERMISOSEXMODULO].AsString;
+end;
+
+procedure TPERMISOSEXDataTableRules.SetMODULOValue(const aValue: String);
+begin
+ DataTable.Fields[idx_PERMISOSEXMODULO].AsString := aValue;
+end;
+
+function TPERMISOSEXDataTableRules.GetMODULOIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_PERMISOSEXMODULO].IsNull;
+end;
+
+procedure TPERMISOSEXDataTableRules.SetMODULOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_PERMISOSEXMODULO].AsVariant := Null;
+end;
+
+function TPERMISOSEXDataTableRules.GetNOMBRECOMPValue: String;
+begin
+ result := DataTable.Fields[idx_PERMISOSEXNOMBRECOMP].AsString;
+end;
+
+procedure TPERMISOSEXDataTableRules.SetNOMBRECOMPValue(const aValue: String);
+begin
+ DataTable.Fields[idx_PERMISOSEXNOMBRECOMP].AsString := aValue;
+end;
+
+function TPERMISOSEXDataTableRules.GetNOMBRECOMPIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_PERMISOSEXNOMBRECOMP].IsNull;
+end;
+
+procedure TPERMISOSEXDataTableRules.SetNOMBRECOMPIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_PERMISOSEXNOMBRECOMP].AsVariant := Null;
+end;
+
+function TPERMISOSEXDataTableRules.GetNOMBREFORMValue: String;
+begin
+ result := DataTable.Fields[idx_PERMISOSEXNOMBREFORM].AsString;
+end;
+
+procedure TPERMISOSEXDataTableRules.SetNOMBREFORMValue(const aValue: String);
+begin
+ DataTable.Fields[idx_PERMISOSEXNOMBREFORM].AsString := aValue;
+end;
+
+function TPERMISOSEXDataTableRules.GetNOMBREFORMIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_PERMISOSEXNOMBREFORM].IsNull;
+end;
+
+procedure TPERMISOSEXDataTableRules.SetNOMBREFORMIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_PERMISOSEXNOMBREFORM].AsVariant := Null;
+end;
+
+function TPERMISOSEXDataTableRules.GetCHECKSUMValue: String;
+begin
+ result := DataTable.Fields[idx_PERMISOSEXCHECKSUM].AsString;
+end;
+
+procedure TPERMISOSEXDataTableRules.SetCHECKSUMValue(const aValue: String);
+begin
+ DataTable.Fields[idx_PERMISOSEXCHECKSUM].AsString := aValue;
+end;
+
+function TPERMISOSEXDataTableRules.GetCHECKSUMIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_PERMISOSEXCHECKSUM].IsNull;
+end;
+
+procedure TPERMISOSEXDataTableRules.SetCHECKSUMIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_PERMISOSEXCHECKSUM].AsVariant := Null;
+end;
+
+
+initialization
+ RegisterDataTableRules(RID_USUARIOS, TUSUARIOSDataTableRules);
+ RegisterDataTableRules(RID_USUARIOS_EVENTOS, TUSUARIOS_EVENTOSDataTableRules);
+ RegisterDataTableRules(RID_USUARIOS_LOGON, TUSUARIOS_LOGONDataTableRules);
+ RegisterDataTableRules(RID_PERFILES, TPERFILESDataTableRules);
+ RegisterDataTableRules(RID_PERMISOS, TPERMISOSDataTableRules);
+ RegisterDataTableRules(RID_PERMISOSEX, TPERMISOSEXDataTableRules);
+
+end.
diff --git a/Source/ApplicationBase/Usuarios/Model/schUsuariosServer_Intf.pas b/Source/ApplicationBase/Usuarios/Model/schUsuariosServer_Intf.pas
new file mode 100644
index 0000000..6c87558
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Model/schUsuariosServer_Intf.pas
@@ -0,0 +1,2009 @@
+unit schUsuariosServer_Intf;
+
+interface
+
+uses
+ Classes, DB, SysUtils, uROClasses, uDADataTable, uDABusinessProcessor, FmtBCD, uROXMLIntf, schUsuariosClient_Intf;
+
+const
+ { Delta rules ids
+ Feel free to change them to something more human readable
+ but make sure they are unique in the context of your application }
+ RID_USUARIOSDelta = '{956A7913-A986-4C5D-84A2-FB3F87A3838F}';
+ RID_USUARIOS_EVENTOSDelta = '{F673FBF1-F344-4EB1-90AD-045DFCD1EEC6}';
+ RID_USUARIOS_LOGONDelta = '{80C17320-DB3B-4C83-AF51-B57B06A2DB43}';
+ RID_PERFILESDelta = '{5EC7C290-9A6C-4FD2-A13D-4F50A72A7B18}';
+ RID_PERMISOSDelta = '{CE559F86-29FA-4FEE-983E-A465B7107A6E}';
+ RID_PERMISOSEXDelta = '{71E31911-6602-4950-BE48-ACCC04A0D90D}';
+
+type
+ { IUSUARIOSDelta }
+ IUSUARIOSDelta = interface(IUSUARIOS)
+ ['{956A7913-A986-4C5D-84A2-FB3F87A3838F}']
+ { Property getters and setters }
+ function GetOldIDValue : Integer;
+ function GetOldUSERNAMEValue : String;
+ function GetOldLOGINValue : String;
+ function GetOldPASSValue : String;
+ function GetOldPASSEXPIREDValue : DateTime;
+ function GetOldBLOQUEADOValue : SmallInt;
+ function GetOldEMAILValue : String;
+ function GetOldUSERDAYSSUNValue : Integer;
+ function GetOldPRIVILEGEDValue : Integer;
+ function GetOldTIPOValue : String;
+ function GetOldID_PERFILValue : Integer;
+ function GetOldCHECKSUMValue : String;
+
+ { Properties }
+ property OldID : Integer read GetOldIDValue;
+ property OldUSERNAME : String read GetOldUSERNAMEValue;
+ property OldLOGIN : String read GetOldLOGINValue;
+ property OldPASS : String read GetOldPASSValue;
+ property OldPASSEXPIRED : DateTime read GetOldPASSEXPIREDValue;
+ property OldBLOQUEADO : SmallInt read GetOldBLOQUEADOValue;
+ property OldEMAIL : String read GetOldEMAILValue;
+ property OldUSERDAYSSUN : Integer read GetOldUSERDAYSSUNValue;
+ property OldPRIVILEGED : Integer read GetOldPRIVILEGEDValue;
+ property OldTIPO : String read GetOldTIPOValue;
+ property OldID_PERFIL : Integer read GetOldID_PERFILValue;
+ property OldCHECKSUM : String read GetOldCHECKSUMValue;
+ end;
+
+ { TUSUARIOSBusinessProcessorRules }
+ TUSUARIOSBusinessProcessorRules = class(TDABusinessProcessorRules, IUSUARIOS, IUSUARIOSDelta)
+ private
+ protected
+ { Property getters and setters }
+ function GetIDValue: Integer; virtual;
+ function GetIDIsNull: Boolean; virtual;
+ function GetOldIDValue: Integer; virtual;
+ function GetOldIDIsNull: Boolean; virtual;
+ procedure SetIDValue(const aValue: Integer); virtual;
+ procedure SetIDIsNull(const aValue: Boolean); virtual;
+ function GetUSERNAMEValue: String; virtual;
+ function GetUSERNAMEIsNull: Boolean; virtual;
+ function GetOldUSERNAMEValue: String; virtual;
+ function GetOldUSERNAMEIsNull: Boolean; virtual;
+ procedure SetUSERNAMEValue(const aValue: String); virtual;
+ procedure SetUSERNAMEIsNull(const aValue: Boolean); virtual;
+ function GetLOGINValue: String; virtual;
+ function GetLOGINIsNull: Boolean; virtual;
+ function GetOldLOGINValue: String; virtual;
+ function GetOldLOGINIsNull: Boolean; virtual;
+ procedure SetLOGINValue(const aValue: String); virtual;
+ procedure SetLOGINIsNull(const aValue: Boolean); virtual;
+ function GetPASSValue: String; virtual;
+ function GetPASSIsNull: Boolean; virtual;
+ function GetOldPASSValue: String; virtual;
+ function GetOldPASSIsNull: Boolean; virtual;
+ procedure SetPASSValue(const aValue: String); virtual;
+ procedure SetPASSIsNull(const aValue: Boolean); virtual;
+ function GetPASSEXPIREDValue: DateTime; virtual;
+ function GetPASSEXPIREDIsNull: Boolean; virtual;
+ function GetOldPASSEXPIREDValue: DateTime; virtual;
+ function GetOldPASSEXPIREDIsNull: Boolean; virtual;
+ procedure SetPASSEXPIREDValue(const aValue: DateTime); virtual;
+ procedure SetPASSEXPIREDIsNull(const aValue: Boolean); virtual;
+ function GetBLOQUEADOValue: SmallInt; virtual;
+ function GetBLOQUEADOIsNull: Boolean; virtual;
+ function GetOldBLOQUEADOValue: SmallInt; virtual;
+ function GetOldBLOQUEADOIsNull: Boolean; virtual;
+ procedure SetBLOQUEADOValue(const aValue: SmallInt); virtual;
+ procedure SetBLOQUEADOIsNull(const aValue: Boolean); virtual;
+ function GetEMAILValue: String; virtual;
+ function GetEMAILIsNull: Boolean; virtual;
+ function GetOldEMAILValue: String; virtual;
+ function GetOldEMAILIsNull: Boolean; virtual;
+ procedure SetEMAILValue(const aValue: String); virtual;
+ procedure SetEMAILIsNull(const aValue: Boolean); virtual;
+ function GetUSERDAYSSUNValue: Integer; virtual;
+ function GetUSERDAYSSUNIsNull: Boolean; virtual;
+ function GetOldUSERDAYSSUNValue: Integer; virtual;
+ function GetOldUSERDAYSSUNIsNull: Boolean; virtual;
+ procedure SetUSERDAYSSUNValue(const aValue: Integer); virtual;
+ procedure SetUSERDAYSSUNIsNull(const aValue: Boolean); virtual;
+ function GetPRIVILEGEDValue: Integer; virtual;
+ function GetPRIVILEGEDIsNull: Boolean; virtual;
+ function GetOldPRIVILEGEDValue: Integer; virtual;
+ function GetOldPRIVILEGEDIsNull: Boolean; virtual;
+ procedure SetPRIVILEGEDValue(const aValue: Integer); virtual;
+ procedure SetPRIVILEGEDIsNull(const aValue: Boolean); virtual;
+ function GetTIPOValue: String; virtual;
+ function GetTIPOIsNull: Boolean; virtual;
+ function GetOldTIPOValue: String; virtual;
+ function GetOldTIPOIsNull: Boolean; virtual;
+ procedure SetTIPOValue(const aValue: String); virtual;
+ procedure SetTIPOIsNull(const aValue: Boolean); virtual;
+ function GetID_PERFILValue: Integer; virtual;
+ function GetID_PERFILIsNull: Boolean; virtual;
+ function GetOldID_PERFILValue: Integer; virtual;
+ function GetOldID_PERFILIsNull: Boolean; virtual;
+ procedure SetID_PERFILValue(const aValue: Integer); virtual;
+ procedure SetID_PERFILIsNull(const aValue: Boolean); virtual;
+ function GetCHECKSUMValue: String; virtual;
+ function GetCHECKSUMIsNull: Boolean; virtual;
+ function GetOldCHECKSUMValue: String; virtual;
+ function GetOldCHECKSUMIsNull: Boolean; virtual;
+ procedure SetCHECKSUMValue(const aValue: String); virtual;
+ procedure SetCHECKSUMIsNull(const aValue: Boolean); virtual;
+
+ { Properties }
+ property ID : Integer read GetIDValue write SetIDValue;
+ property IDIsNull : Boolean read GetIDIsNull write SetIDIsNull;
+ property OldID : Integer read GetOldIDValue;
+ property OldIDIsNull : Boolean read GetOldIDIsNull;
+ property USERNAME : String read GetUSERNAMEValue write SetUSERNAMEValue;
+ property USERNAMEIsNull : Boolean read GetUSERNAMEIsNull write SetUSERNAMEIsNull;
+ property OldUSERNAME : String read GetOldUSERNAMEValue;
+ property OldUSERNAMEIsNull : Boolean read GetOldUSERNAMEIsNull;
+ property LOGIN : String read GetLOGINValue write SetLOGINValue;
+ property LOGINIsNull : Boolean read GetLOGINIsNull write SetLOGINIsNull;
+ property OldLOGIN : String read GetOldLOGINValue;
+ property OldLOGINIsNull : Boolean read GetOldLOGINIsNull;
+ property PASS : String read GetPASSValue write SetPASSValue;
+ property PASSIsNull : Boolean read GetPASSIsNull write SetPASSIsNull;
+ property OldPASS : String read GetOldPASSValue;
+ property OldPASSIsNull : Boolean read GetOldPASSIsNull;
+ property PASSEXPIRED : DateTime read GetPASSEXPIREDValue write SetPASSEXPIREDValue;
+ property PASSEXPIREDIsNull : Boolean read GetPASSEXPIREDIsNull write SetPASSEXPIREDIsNull;
+ property OldPASSEXPIRED : DateTime read GetOldPASSEXPIREDValue;
+ property OldPASSEXPIREDIsNull : Boolean read GetOldPASSEXPIREDIsNull;
+ property BLOQUEADO : SmallInt read GetBLOQUEADOValue write SetBLOQUEADOValue;
+ property BLOQUEADOIsNull : Boolean read GetBLOQUEADOIsNull write SetBLOQUEADOIsNull;
+ property OldBLOQUEADO : SmallInt read GetOldBLOQUEADOValue;
+ property OldBLOQUEADOIsNull : Boolean read GetOldBLOQUEADOIsNull;
+ property EMAIL : String read GetEMAILValue write SetEMAILValue;
+ property EMAILIsNull : Boolean read GetEMAILIsNull write SetEMAILIsNull;
+ property OldEMAIL : String read GetOldEMAILValue;
+ property OldEMAILIsNull : Boolean read GetOldEMAILIsNull;
+ property USERDAYSSUN : Integer read GetUSERDAYSSUNValue write SetUSERDAYSSUNValue;
+ property USERDAYSSUNIsNull : Boolean read GetUSERDAYSSUNIsNull write SetUSERDAYSSUNIsNull;
+ property OldUSERDAYSSUN : Integer read GetOldUSERDAYSSUNValue;
+ property OldUSERDAYSSUNIsNull : Boolean read GetOldUSERDAYSSUNIsNull;
+ property PRIVILEGED : Integer read GetPRIVILEGEDValue write SetPRIVILEGEDValue;
+ property PRIVILEGEDIsNull : Boolean read GetPRIVILEGEDIsNull write SetPRIVILEGEDIsNull;
+ property OldPRIVILEGED : Integer read GetOldPRIVILEGEDValue;
+ property OldPRIVILEGEDIsNull : Boolean read GetOldPRIVILEGEDIsNull;
+ property TIPO : String read GetTIPOValue write SetTIPOValue;
+ property TIPOIsNull : Boolean read GetTIPOIsNull write SetTIPOIsNull;
+ property OldTIPO : String read GetOldTIPOValue;
+ property OldTIPOIsNull : Boolean read GetOldTIPOIsNull;
+ property ID_PERFIL : Integer read GetID_PERFILValue write SetID_PERFILValue;
+ property ID_PERFILIsNull : Boolean read GetID_PERFILIsNull write SetID_PERFILIsNull;
+ property OldID_PERFIL : Integer read GetOldID_PERFILValue;
+ property OldID_PERFILIsNull : Boolean read GetOldID_PERFILIsNull;
+ property CHECKSUM : String read GetCHECKSUMValue write SetCHECKSUMValue;
+ property CHECKSUMIsNull : Boolean read GetCHECKSUMIsNull write SetCHECKSUMIsNull;
+ property OldCHECKSUM : String read GetOldCHECKSUMValue;
+ property OldCHECKSUMIsNull : Boolean read GetOldCHECKSUMIsNull;
+
+ public
+ constructor Create(aBusinessProcessor: TDABusinessProcessor); override;
+ destructor Destroy; override;
+
+ end;
+
+ { IUSUARIOS_EVENTOSDelta }
+ IUSUARIOS_EVENTOSDelta = interface(IUSUARIOS_EVENTOS)
+ ['{F673FBF1-F344-4EB1-90AD-045DFCD1EEC6}']
+ { Property getters and setters }
+ function GetOldAPLICACIONValue : String;
+ function GetOldID_USUARIOValue : Integer;
+ function GetOldFECHAValue : String;
+ function GetOldHORAValue : String;
+ function GetOldFORMValue : String;
+ function GetOldTITULO_FORMValue : String;
+ function GetOldEVENTOValue : String;
+ function GetOldNOTASValue : IROStrings;
+ function GetOldTNAMEValue : String;
+
+ { Properties }
+ property OldAPLICACION : String read GetOldAPLICACIONValue;
+ property OldID_USUARIO : Integer read GetOldID_USUARIOValue;
+ property OldFECHA : String read GetOldFECHAValue;
+ property OldHORA : String read GetOldHORAValue;
+ property OldFORM : String read GetOldFORMValue;
+ property OldTITULO_FORM : String read GetOldTITULO_FORMValue;
+ property OldEVENTO : String read GetOldEVENTOValue;
+ property OldNOTAS : IROStrings read GetOldNOTASValue;
+ property OldTNAME : String read GetOldTNAMEValue;
+ end;
+
+ { TUSUARIOS_EVENTOSBusinessProcessorRules }
+ TUSUARIOS_EVENTOSBusinessProcessorRules = class(TDABusinessProcessorRules, IUSUARIOS_EVENTOS, IUSUARIOS_EVENTOSDelta)
+ private
+ f_NOTAS: IROStrings;
+ procedure NOTAS_OnChange(Sender: TObject);
+ protected
+ { Property getters and setters }
+ function GetAPLICACIONValue: String; virtual;
+ function GetAPLICACIONIsNull: Boolean; virtual;
+ function GetOldAPLICACIONValue: String; virtual;
+ function GetOldAPLICACIONIsNull: Boolean; virtual;
+ procedure SetAPLICACIONValue(const aValue: String); virtual;
+ procedure SetAPLICACIONIsNull(const aValue: Boolean); virtual;
+ function GetID_USUARIOValue: Integer; virtual;
+ function GetID_USUARIOIsNull: Boolean; virtual;
+ function GetOldID_USUARIOValue: Integer; virtual;
+ function GetOldID_USUARIOIsNull: Boolean; virtual;
+ procedure SetID_USUARIOValue(const aValue: Integer); virtual;
+ procedure SetID_USUARIOIsNull(const aValue: Boolean); virtual;
+ function GetFECHAValue: String; virtual;
+ function GetFECHAIsNull: Boolean; virtual;
+ function GetOldFECHAValue: String; virtual;
+ function GetOldFECHAIsNull: Boolean; virtual;
+ procedure SetFECHAValue(const aValue: String); virtual;
+ procedure SetFECHAIsNull(const aValue: Boolean); virtual;
+ function GetHORAValue: String; virtual;
+ function GetHORAIsNull: Boolean; virtual;
+ function GetOldHORAValue: String; virtual;
+ function GetOldHORAIsNull: Boolean; virtual;
+ procedure SetHORAValue(const aValue: String); virtual;
+ procedure SetHORAIsNull(const aValue: Boolean); virtual;
+ function GetFORMValue: String; virtual;
+ function GetFORMIsNull: Boolean; virtual;
+ function GetOldFORMValue: String; virtual;
+ function GetOldFORMIsNull: Boolean; virtual;
+ procedure SetFORMValue(const aValue: String); virtual;
+ procedure SetFORMIsNull(const aValue: Boolean); virtual;
+ function GetTITULO_FORMValue: String; virtual;
+ function GetTITULO_FORMIsNull: Boolean; virtual;
+ function GetOldTITULO_FORMValue: String; virtual;
+ function GetOldTITULO_FORMIsNull: Boolean; virtual;
+ procedure SetTITULO_FORMValue(const aValue: String); virtual;
+ procedure SetTITULO_FORMIsNull(const aValue: Boolean); virtual;
+ function GetEVENTOValue: String; virtual;
+ function GetEVENTOIsNull: Boolean; virtual;
+ function GetOldEVENTOValue: String; virtual;
+ function GetOldEVENTOIsNull: Boolean; virtual;
+ procedure SetEVENTOValue(const aValue: String); virtual;
+ procedure SetEVENTOIsNull(const aValue: Boolean); virtual;
+ function GetNOTASValue: IROStrings; virtual;
+ function GetNOTASIsNull: Boolean; virtual;
+ function GetOldNOTASValue: IROStrings; virtual;
+ function GetOldNOTASIsNull: Boolean; virtual;
+ procedure SetNOTASIsNull(const aValue: Boolean); virtual;
+ function GetTNAMEValue: String; virtual;
+ function GetTNAMEIsNull: Boolean; virtual;
+ function GetOldTNAMEValue: String; virtual;
+ function GetOldTNAMEIsNull: Boolean; virtual;
+ procedure SetTNAMEValue(const aValue: String); virtual;
+ procedure SetTNAMEIsNull(const aValue: Boolean); virtual;
+
+ { Properties }
+ property APLICACION : String read GetAPLICACIONValue write SetAPLICACIONValue;
+ property APLICACIONIsNull : Boolean read GetAPLICACIONIsNull write SetAPLICACIONIsNull;
+ property OldAPLICACION : String read GetOldAPLICACIONValue;
+ property OldAPLICACIONIsNull : Boolean read GetOldAPLICACIONIsNull;
+ property ID_USUARIO : Integer read GetID_USUARIOValue write SetID_USUARIOValue;
+ property ID_USUARIOIsNull : Boolean read GetID_USUARIOIsNull write SetID_USUARIOIsNull;
+ property OldID_USUARIO : Integer read GetOldID_USUARIOValue;
+ property OldID_USUARIOIsNull : Boolean read GetOldID_USUARIOIsNull;
+ property FECHA : String read GetFECHAValue write SetFECHAValue;
+ property FECHAIsNull : Boolean read GetFECHAIsNull write SetFECHAIsNull;
+ property OldFECHA : String read GetOldFECHAValue;
+ property OldFECHAIsNull : Boolean read GetOldFECHAIsNull;
+ property HORA : String read GetHORAValue write SetHORAValue;
+ property HORAIsNull : Boolean read GetHORAIsNull write SetHORAIsNull;
+ property OldHORA : String read GetOldHORAValue;
+ property OldHORAIsNull : Boolean read GetOldHORAIsNull;
+ property FORM : String read GetFORMValue write SetFORMValue;
+ property FORMIsNull : Boolean read GetFORMIsNull write SetFORMIsNull;
+ property OldFORM : String read GetOldFORMValue;
+ property OldFORMIsNull : Boolean read GetOldFORMIsNull;
+ property TITULO_FORM : String read GetTITULO_FORMValue write SetTITULO_FORMValue;
+ property TITULO_FORMIsNull : Boolean read GetTITULO_FORMIsNull write SetTITULO_FORMIsNull;
+ property OldTITULO_FORM : String read GetOldTITULO_FORMValue;
+ property OldTITULO_FORMIsNull : Boolean read GetOldTITULO_FORMIsNull;
+ property EVENTO : String read GetEVENTOValue write SetEVENTOValue;
+ property EVENTOIsNull : Boolean read GetEVENTOIsNull write SetEVENTOIsNull;
+ property OldEVENTO : String read GetOldEVENTOValue;
+ property OldEVENTOIsNull : Boolean read GetOldEVENTOIsNull;
+ property NOTAS : IROStrings read GetNOTASValue;
+ property NOTASIsNull : Boolean read GetNOTASIsNull write SetNOTASIsNull;
+ property OldNOTAS : IROStrings read GetOldNOTASValue;
+ property OldNOTASIsNull : Boolean read GetOldNOTASIsNull;
+ property TNAME : String read GetTNAMEValue write SetTNAMEValue;
+ property TNAMEIsNull : Boolean read GetTNAMEIsNull write SetTNAMEIsNull;
+ property OldTNAME : String read GetOldTNAMEValue;
+ property OldTNAMEIsNull : Boolean read GetOldTNAMEIsNull;
+
+ public
+ constructor Create(aBusinessProcessor: TDABusinessProcessor); override;
+ destructor Destroy; override;
+
+ end;
+
+ { IUSUARIOS_LOGONDelta }
+ IUSUARIOS_LOGONDelta = interface(IUSUARIOS_LOGON)
+ ['{80C17320-DB3B-4C83-AF51-B57B06A2DB43}']
+ { Property getters and setters }
+ function GetOldLOGONIDValue : String;
+ function GetOldID_USUARIOValue : Integer;
+ function GetOldAPLICACIONValue : String;
+ function GetOldEQUIPOValue : String;
+ function GetOldDATAValue : String;
+
+ { Properties }
+ property OldLOGONID : String read GetOldLOGONIDValue;
+ property OldID_USUARIO : Integer read GetOldID_USUARIOValue;
+ property OldAPLICACION : String read GetOldAPLICACIONValue;
+ property OldEQUIPO : String read GetOldEQUIPOValue;
+ property OldDATA : String read GetOldDATAValue;
+ end;
+
+ { TUSUARIOS_LOGONBusinessProcessorRules }
+ TUSUARIOS_LOGONBusinessProcessorRules = class(TDABusinessProcessorRules, IUSUARIOS_LOGON, IUSUARIOS_LOGONDelta)
+ private
+ protected
+ { Property getters and setters }
+ function GetLOGONIDValue: String; virtual;
+ function GetLOGONIDIsNull: Boolean; virtual;
+ function GetOldLOGONIDValue: String; virtual;
+ function GetOldLOGONIDIsNull: Boolean; virtual;
+ procedure SetLOGONIDValue(const aValue: String); virtual;
+ procedure SetLOGONIDIsNull(const aValue: Boolean); virtual;
+ function GetID_USUARIOValue: Integer; virtual;
+ function GetID_USUARIOIsNull: Boolean; virtual;
+ function GetOldID_USUARIOValue: Integer; virtual;
+ function GetOldID_USUARIOIsNull: Boolean; virtual;
+ procedure SetID_USUARIOValue(const aValue: Integer); virtual;
+ procedure SetID_USUARIOIsNull(const aValue: Boolean); virtual;
+ function GetAPLICACIONValue: String; virtual;
+ function GetAPLICACIONIsNull: Boolean; virtual;
+ function GetOldAPLICACIONValue: String; virtual;
+ function GetOldAPLICACIONIsNull: Boolean; virtual;
+ procedure SetAPLICACIONValue(const aValue: String); virtual;
+ procedure SetAPLICACIONIsNull(const aValue: Boolean); virtual;
+ function GetEQUIPOValue: String; virtual;
+ function GetEQUIPOIsNull: Boolean; virtual;
+ function GetOldEQUIPOValue: String; virtual;
+ function GetOldEQUIPOIsNull: Boolean; virtual;
+ procedure SetEQUIPOValue(const aValue: String); virtual;
+ procedure SetEQUIPOIsNull(const aValue: Boolean); virtual;
+ function GetDATAValue: String; virtual;
+ function GetDATAIsNull: Boolean; virtual;
+ function GetOldDATAValue: String; virtual;
+ function GetOldDATAIsNull: Boolean; virtual;
+ procedure SetDATAValue(const aValue: String); virtual;
+ procedure SetDATAIsNull(const aValue: Boolean); virtual;
+
+ { Properties }
+ property LOGONID : String read GetLOGONIDValue write SetLOGONIDValue;
+ property LOGONIDIsNull : Boolean read GetLOGONIDIsNull write SetLOGONIDIsNull;
+ property OldLOGONID : String read GetOldLOGONIDValue;
+ property OldLOGONIDIsNull : Boolean read GetOldLOGONIDIsNull;
+ property ID_USUARIO : Integer read GetID_USUARIOValue write SetID_USUARIOValue;
+ property ID_USUARIOIsNull : Boolean read GetID_USUARIOIsNull write SetID_USUARIOIsNull;
+ property OldID_USUARIO : Integer read GetOldID_USUARIOValue;
+ property OldID_USUARIOIsNull : Boolean read GetOldID_USUARIOIsNull;
+ property APLICACION : String read GetAPLICACIONValue write SetAPLICACIONValue;
+ property APLICACIONIsNull : Boolean read GetAPLICACIONIsNull write SetAPLICACIONIsNull;
+ property OldAPLICACION : String read GetOldAPLICACIONValue;
+ property OldAPLICACIONIsNull : Boolean read GetOldAPLICACIONIsNull;
+ property EQUIPO : String read GetEQUIPOValue write SetEQUIPOValue;
+ property EQUIPOIsNull : Boolean read GetEQUIPOIsNull write SetEQUIPOIsNull;
+ property OldEQUIPO : String read GetOldEQUIPOValue;
+ property OldEQUIPOIsNull : Boolean read GetOldEQUIPOIsNull;
+ property DATA : String read GetDATAValue write SetDATAValue;
+ property DATAIsNull : Boolean read GetDATAIsNull write SetDATAIsNull;
+ property OldDATA : String read GetOldDATAValue;
+ property OldDATAIsNull : Boolean read GetOldDATAIsNull;
+
+ public
+ constructor Create(aBusinessProcessor: TDABusinessProcessor); override;
+ destructor Destroy; override;
+
+ end;
+
+ { IPERFILESDelta }
+ IPERFILESDelta = interface(IPERFILES)
+ ['{5EC7C290-9A6C-4FD2-A13D-4F50A72A7B18}']
+ { Property getters and setters }
+ function GetOldIDValue : Integer;
+ function GetOldUSERNAMEValue : String;
+ function GetOldLOGINValue : String;
+ function GetOldTIPOValue : String;
+
+ { Properties }
+ property OldID : Integer read GetOldIDValue;
+ property OldUSERNAME : String read GetOldUSERNAMEValue;
+ property OldLOGIN : String read GetOldLOGINValue;
+ property OldTIPO : String read GetOldTIPOValue;
+ end;
+
+ { TPERFILESBusinessProcessorRules }
+ TPERFILESBusinessProcessorRules = class(TDABusinessProcessorRules, IPERFILES, IPERFILESDelta)
+ private
+ protected
+ { Property getters and setters }
+ function GetIDValue: Integer; virtual;
+ function GetIDIsNull: Boolean; virtual;
+ function GetOldIDValue: Integer; virtual;
+ function GetOldIDIsNull: Boolean; virtual;
+ procedure SetIDValue(const aValue: Integer); virtual;
+ procedure SetIDIsNull(const aValue: Boolean); virtual;
+ function GetUSERNAMEValue: String; virtual;
+ function GetUSERNAMEIsNull: Boolean; virtual;
+ function GetOldUSERNAMEValue: String; virtual;
+ function GetOldUSERNAMEIsNull: Boolean; virtual;
+ procedure SetUSERNAMEValue(const aValue: String); virtual;
+ procedure SetUSERNAMEIsNull(const aValue: Boolean); virtual;
+ function GetLOGINValue: String; virtual;
+ function GetLOGINIsNull: Boolean; virtual;
+ function GetOldLOGINValue: String; virtual;
+ function GetOldLOGINIsNull: Boolean; virtual;
+ procedure SetLOGINValue(const aValue: String); virtual;
+ procedure SetLOGINIsNull(const aValue: Boolean); virtual;
+ function GetTIPOValue: String; virtual;
+ function GetTIPOIsNull: Boolean; virtual;
+ function GetOldTIPOValue: String; virtual;
+ function GetOldTIPOIsNull: Boolean; virtual;
+ procedure SetTIPOValue(const aValue: String); virtual;
+ procedure SetTIPOIsNull(const aValue: Boolean); virtual;
+
+ { Properties }
+ property ID : Integer read GetIDValue write SetIDValue;
+ property IDIsNull : Boolean read GetIDIsNull write SetIDIsNull;
+ property OldID : Integer read GetOldIDValue;
+ property OldIDIsNull : Boolean read GetOldIDIsNull;
+ property USERNAME : String read GetUSERNAMEValue write SetUSERNAMEValue;
+ property USERNAMEIsNull : Boolean read GetUSERNAMEIsNull write SetUSERNAMEIsNull;
+ property OldUSERNAME : String read GetOldUSERNAMEValue;
+ property OldUSERNAMEIsNull : Boolean read GetOldUSERNAMEIsNull;
+ property LOGIN : String read GetLOGINValue write SetLOGINValue;
+ property LOGINIsNull : Boolean read GetLOGINIsNull write SetLOGINIsNull;
+ property OldLOGIN : String read GetOldLOGINValue;
+ property OldLOGINIsNull : Boolean read GetOldLOGINIsNull;
+ property TIPO : String read GetTIPOValue write SetTIPOValue;
+ property TIPOIsNull : Boolean read GetTIPOIsNull write SetTIPOIsNull;
+ property OldTIPO : String read GetOldTIPOValue;
+ property OldTIPOIsNull : Boolean read GetOldTIPOIsNull;
+
+ public
+ constructor Create(aBusinessProcessor: TDABusinessProcessor); override;
+ destructor Destroy; override;
+
+ end;
+
+ { IPERMISOSDelta }
+ IPERMISOSDelta = interface(IPERMISOS)
+ ['{CE559F86-29FA-4FEE-983E-A465B7107A6E}']
+ { Property getters and setters }
+ function GetOldIDValue : Integer;
+ function GetOldID_USUARIOValue : Integer;
+ function GetOldMODULOValue : String;
+ function GetOldNOMBRECOMPValue : String;
+ function GetOldCHECKSUMValue : String;
+
+ { Properties }
+ property OldID : Integer read GetOldIDValue;
+ property OldID_USUARIO : Integer read GetOldID_USUARIOValue;
+ property OldMODULO : String read GetOldMODULOValue;
+ property OldNOMBRECOMP : String read GetOldNOMBRECOMPValue;
+ property OldCHECKSUM : String read GetOldCHECKSUMValue;
+ end;
+
+ { TPERMISOSBusinessProcessorRules }
+ TPERMISOSBusinessProcessorRules = class(TDABusinessProcessorRules, IPERMISOS, IPERMISOSDelta)
+ private
+ protected
+ { Property getters and setters }
+ function GetIDValue: Integer; virtual;
+ function GetIDIsNull: Boolean; virtual;
+ function GetOldIDValue: Integer; virtual;
+ function GetOldIDIsNull: Boolean; virtual;
+ procedure SetIDValue(const aValue: Integer); virtual;
+ procedure SetIDIsNull(const aValue: Boolean); virtual;
+ function GetID_USUARIOValue: Integer; virtual;
+ function GetID_USUARIOIsNull: Boolean; virtual;
+ function GetOldID_USUARIOValue: Integer; virtual;
+ function GetOldID_USUARIOIsNull: Boolean; virtual;
+ procedure SetID_USUARIOValue(const aValue: Integer); virtual;
+ procedure SetID_USUARIOIsNull(const aValue: Boolean); virtual;
+ function GetMODULOValue: String; virtual;
+ function GetMODULOIsNull: Boolean; virtual;
+ function GetOldMODULOValue: String; virtual;
+ function GetOldMODULOIsNull: Boolean; virtual;
+ procedure SetMODULOValue(const aValue: String); virtual;
+ procedure SetMODULOIsNull(const aValue: Boolean); virtual;
+ function GetNOMBRECOMPValue: String; virtual;
+ function GetNOMBRECOMPIsNull: Boolean; virtual;
+ function GetOldNOMBRECOMPValue: String; virtual;
+ function GetOldNOMBRECOMPIsNull: Boolean; virtual;
+ procedure SetNOMBRECOMPValue(const aValue: String); virtual;
+ procedure SetNOMBRECOMPIsNull(const aValue: Boolean); virtual;
+ function GetCHECKSUMValue: String; virtual;
+ function GetCHECKSUMIsNull: Boolean; virtual;
+ function GetOldCHECKSUMValue: String; virtual;
+ function GetOldCHECKSUMIsNull: Boolean; virtual;
+ procedure SetCHECKSUMValue(const aValue: String); virtual;
+ procedure SetCHECKSUMIsNull(const aValue: Boolean); virtual;
+
+ { Properties }
+ property ID : Integer read GetIDValue write SetIDValue;
+ property IDIsNull : Boolean read GetIDIsNull write SetIDIsNull;
+ property OldID : Integer read GetOldIDValue;
+ property OldIDIsNull : Boolean read GetOldIDIsNull;
+ property ID_USUARIO : Integer read GetID_USUARIOValue write SetID_USUARIOValue;
+ property ID_USUARIOIsNull : Boolean read GetID_USUARIOIsNull write SetID_USUARIOIsNull;
+ property OldID_USUARIO : Integer read GetOldID_USUARIOValue;
+ property OldID_USUARIOIsNull : Boolean read GetOldID_USUARIOIsNull;
+ property MODULO : String read GetMODULOValue write SetMODULOValue;
+ property MODULOIsNull : Boolean read GetMODULOIsNull write SetMODULOIsNull;
+ property OldMODULO : String read GetOldMODULOValue;
+ property OldMODULOIsNull : Boolean read GetOldMODULOIsNull;
+ property NOMBRECOMP : String read GetNOMBRECOMPValue write SetNOMBRECOMPValue;
+ property NOMBRECOMPIsNull : Boolean read GetNOMBRECOMPIsNull write SetNOMBRECOMPIsNull;
+ property OldNOMBRECOMP : String read GetOldNOMBRECOMPValue;
+ property OldNOMBRECOMPIsNull : Boolean read GetOldNOMBRECOMPIsNull;
+ property CHECKSUM : String read GetCHECKSUMValue write SetCHECKSUMValue;
+ property CHECKSUMIsNull : Boolean read GetCHECKSUMIsNull write SetCHECKSUMIsNull;
+ property OldCHECKSUM : String read GetOldCHECKSUMValue;
+ property OldCHECKSUMIsNull : Boolean read GetOldCHECKSUMIsNull;
+
+ public
+ constructor Create(aBusinessProcessor: TDABusinessProcessor); override;
+ destructor Destroy; override;
+
+ end;
+
+ { IPERMISOSEXDelta }
+ IPERMISOSEXDelta = interface(IPERMISOSEX)
+ ['{71E31911-6602-4950-BE48-ACCC04A0D90D}']
+ { Property getters and setters }
+ function GetOldIDValue : Integer;
+ function GetOldID_USUARIOValue : Integer;
+ function GetOldMODULOValue : String;
+ function GetOldNOMBRECOMPValue : String;
+ function GetOldNOMBREFORMValue : String;
+ function GetOldCHECKSUMValue : String;
+
+ { Properties }
+ property OldID : Integer read GetOldIDValue;
+ property OldID_USUARIO : Integer read GetOldID_USUARIOValue;
+ property OldMODULO : String read GetOldMODULOValue;
+ property OldNOMBRECOMP : String read GetOldNOMBRECOMPValue;
+ property OldNOMBREFORM : String read GetOldNOMBREFORMValue;
+ property OldCHECKSUM : String read GetOldCHECKSUMValue;
+ end;
+
+ { TPERMISOSEXBusinessProcessorRules }
+ TPERMISOSEXBusinessProcessorRules = class(TDABusinessProcessorRules, IPERMISOSEX, IPERMISOSEXDelta)
+ private
+ protected
+ { Property getters and setters }
+ function GetIDValue: Integer; virtual;
+ function GetIDIsNull: Boolean; virtual;
+ function GetOldIDValue: Integer; virtual;
+ function GetOldIDIsNull: Boolean; virtual;
+ procedure SetIDValue(const aValue: Integer); virtual;
+ procedure SetIDIsNull(const aValue: Boolean); virtual;
+ function GetID_USUARIOValue: Integer; virtual;
+ function GetID_USUARIOIsNull: Boolean; virtual;
+ function GetOldID_USUARIOValue: Integer; virtual;
+ function GetOldID_USUARIOIsNull: Boolean; virtual;
+ procedure SetID_USUARIOValue(const aValue: Integer); virtual;
+ procedure SetID_USUARIOIsNull(const aValue: Boolean); virtual;
+ function GetMODULOValue: String; virtual;
+ function GetMODULOIsNull: Boolean; virtual;
+ function GetOldMODULOValue: String; virtual;
+ function GetOldMODULOIsNull: Boolean; virtual;
+ procedure SetMODULOValue(const aValue: String); virtual;
+ procedure SetMODULOIsNull(const aValue: Boolean); virtual;
+ function GetNOMBRECOMPValue: String; virtual;
+ function GetNOMBRECOMPIsNull: Boolean; virtual;
+ function GetOldNOMBRECOMPValue: String; virtual;
+ function GetOldNOMBRECOMPIsNull: Boolean; virtual;
+ procedure SetNOMBRECOMPValue(const aValue: String); virtual;
+ procedure SetNOMBRECOMPIsNull(const aValue: Boolean); virtual;
+ function GetNOMBREFORMValue: String; virtual;
+ function GetNOMBREFORMIsNull: Boolean; virtual;
+ function GetOldNOMBREFORMValue: String; virtual;
+ function GetOldNOMBREFORMIsNull: Boolean; virtual;
+ procedure SetNOMBREFORMValue(const aValue: String); virtual;
+ procedure SetNOMBREFORMIsNull(const aValue: Boolean); virtual;
+ function GetCHECKSUMValue: String; virtual;
+ function GetCHECKSUMIsNull: Boolean; virtual;
+ function GetOldCHECKSUMValue: String; virtual;
+ function GetOldCHECKSUMIsNull: Boolean; virtual;
+ procedure SetCHECKSUMValue(const aValue: String); virtual;
+ procedure SetCHECKSUMIsNull(const aValue: Boolean); virtual;
+
+ { Properties }
+ property ID : Integer read GetIDValue write SetIDValue;
+ property IDIsNull : Boolean read GetIDIsNull write SetIDIsNull;
+ property OldID : Integer read GetOldIDValue;
+ property OldIDIsNull : Boolean read GetOldIDIsNull;
+ property ID_USUARIO : Integer read GetID_USUARIOValue write SetID_USUARIOValue;
+ property ID_USUARIOIsNull : Boolean read GetID_USUARIOIsNull write SetID_USUARIOIsNull;
+ property OldID_USUARIO : Integer read GetOldID_USUARIOValue;
+ property OldID_USUARIOIsNull : Boolean read GetOldID_USUARIOIsNull;
+ property MODULO : String read GetMODULOValue write SetMODULOValue;
+ property MODULOIsNull : Boolean read GetMODULOIsNull write SetMODULOIsNull;
+ property OldMODULO : String read GetOldMODULOValue;
+ property OldMODULOIsNull : Boolean read GetOldMODULOIsNull;
+ property NOMBRECOMP : String read GetNOMBRECOMPValue write SetNOMBRECOMPValue;
+ property NOMBRECOMPIsNull : Boolean read GetNOMBRECOMPIsNull write SetNOMBRECOMPIsNull;
+ property OldNOMBRECOMP : String read GetOldNOMBRECOMPValue;
+ property OldNOMBRECOMPIsNull : Boolean read GetOldNOMBRECOMPIsNull;
+ property NOMBREFORM : String read GetNOMBREFORMValue write SetNOMBREFORMValue;
+ property NOMBREFORMIsNull : Boolean read GetNOMBREFORMIsNull write SetNOMBREFORMIsNull;
+ property OldNOMBREFORM : String read GetOldNOMBREFORMValue;
+ property OldNOMBREFORMIsNull : Boolean read GetOldNOMBREFORMIsNull;
+ property CHECKSUM : String read GetCHECKSUMValue write SetCHECKSUMValue;
+ property CHECKSUMIsNull : Boolean read GetCHECKSUMIsNull write SetCHECKSUMIsNull;
+ property OldCHECKSUM : String read GetOldCHECKSUMValue;
+ property OldCHECKSUMIsNull : Boolean read GetOldCHECKSUMIsNull;
+
+ public
+ constructor Create(aBusinessProcessor: TDABusinessProcessor); override;
+ destructor Destroy; override;
+
+ end;
+
+implementation
+
+uses
+ Variants, uROBinaryHelpers, uDAInterfaces;
+
+{ TUSUARIOSBusinessProcessorRules }
+constructor TUSUARIOSBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
+begin
+ inherited;
+end;
+
+destructor TUSUARIOSBusinessProcessorRules.Destroy;
+begin
+ inherited;
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetIDValue: Integer;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSID];
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetIDIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSID]);
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetOldIDValue: Integer;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSID];
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetOldIDIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSID]);
+end;
+
+procedure TUSUARIOSBusinessProcessorRules.SetIDValue(const aValue: Integer);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSID] := aValue;
+end;
+
+procedure TUSUARIOSBusinessProcessorRules.SetIDIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSID] := Null;
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetUSERNAMEValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSUSERNAME];
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetUSERNAMEIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSUSERNAME]);
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetOldUSERNAMEValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSUSERNAME];
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetOldUSERNAMEIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSUSERNAME]);
+end;
+
+procedure TUSUARIOSBusinessProcessorRules.SetUSERNAMEValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSUSERNAME] := aValue;
+end;
+
+procedure TUSUARIOSBusinessProcessorRules.SetUSERNAMEIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSUSERNAME] := Null;
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetLOGINValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSLOGIN];
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetLOGINIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSLOGIN]);
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetOldLOGINValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSLOGIN];
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetOldLOGINIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSLOGIN]);
+end;
+
+procedure TUSUARIOSBusinessProcessorRules.SetLOGINValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSLOGIN] := aValue;
+end;
+
+procedure TUSUARIOSBusinessProcessorRules.SetLOGINIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSLOGIN] := Null;
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetPASSValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSPASS];
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetPASSIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSPASS]);
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetOldPASSValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSPASS];
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetOldPASSIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSPASS]);
+end;
+
+procedure TUSUARIOSBusinessProcessorRules.SetPASSValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSPASS] := aValue;
+end;
+
+procedure TUSUARIOSBusinessProcessorRules.SetPASSIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSPASS] := Null;
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetPASSEXPIREDValue: DateTime;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSPASSEXPIRED];
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetPASSEXPIREDIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSPASSEXPIRED]);
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetOldPASSEXPIREDValue: DateTime;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSPASSEXPIRED];
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetOldPASSEXPIREDIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSPASSEXPIRED]);
+end;
+
+procedure TUSUARIOSBusinessProcessorRules.SetPASSEXPIREDValue(const aValue: DateTime);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSPASSEXPIRED] := aValue;
+end;
+
+procedure TUSUARIOSBusinessProcessorRules.SetPASSEXPIREDIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSPASSEXPIRED] := Null;
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetBLOQUEADOValue: SmallInt;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSBLOQUEADO];
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetBLOQUEADOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSBLOQUEADO]);
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetOldBLOQUEADOValue: SmallInt;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSBLOQUEADO];
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetOldBLOQUEADOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSBLOQUEADO]);
+end;
+
+procedure TUSUARIOSBusinessProcessorRules.SetBLOQUEADOValue(const aValue: SmallInt);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSBLOQUEADO] := aValue;
+end;
+
+procedure TUSUARIOSBusinessProcessorRules.SetBLOQUEADOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSBLOQUEADO] := Null;
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetEMAILValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSEMAIL];
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetEMAILIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSEMAIL]);
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetOldEMAILValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSEMAIL];
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetOldEMAILIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSEMAIL]);
+end;
+
+procedure TUSUARIOSBusinessProcessorRules.SetEMAILValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSEMAIL] := aValue;
+end;
+
+procedure TUSUARIOSBusinessProcessorRules.SetEMAILIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSEMAIL] := Null;
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetUSERDAYSSUNValue: Integer;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSUSERDAYSSUN];
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetUSERDAYSSUNIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSUSERDAYSSUN]);
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetOldUSERDAYSSUNValue: Integer;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSUSERDAYSSUN];
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetOldUSERDAYSSUNIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSUSERDAYSSUN]);
+end;
+
+procedure TUSUARIOSBusinessProcessorRules.SetUSERDAYSSUNValue(const aValue: Integer);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSUSERDAYSSUN] := aValue;
+end;
+
+procedure TUSUARIOSBusinessProcessorRules.SetUSERDAYSSUNIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSUSERDAYSSUN] := Null;
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetPRIVILEGEDValue: Integer;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSPRIVILEGED];
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetPRIVILEGEDIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSPRIVILEGED]);
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetOldPRIVILEGEDValue: Integer;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSPRIVILEGED];
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetOldPRIVILEGEDIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSPRIVILEGED]);
+end;
+
+procedure TUSUARIOSBusinessProcessorRules.SetPRIVILEGEDValue(const aValue: Integer);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSPRIVILEGED] := aValue;
+end;
+
+procedure TUSUARIOSBusinessProcessorRules.SetPRIVILEGEDIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSPRIVILEGED] := Null;
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetTIPOValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSTIPO];
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetTIPOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSTIPO]);
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetOldTIPOValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSTIPO];
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetOldTIPOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSTIPO]);
+end;
+
+procedure TUSUARIOSBusinessProcessorRules.SetTIPOValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSTIPO] := aValue;
+end;
+
+procedure TUSUARIOSBusinessProcessorRules.SetTIPOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSTIPO] := Null;
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetID_PERFILValue: Integer;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSID_PERFIL];
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetID_PERFILIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSID_PERFIL]);
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetOldID_PERFILValue: Integer;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSID_PERFIL];
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetOldID_PERFILIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSID_PERFIL]);
+end;
+
+procedure TUSUARIOSBusinessProcessorRules.SetID_PERFILValue(const aValue: Integer);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSID_PERFIL] := aValue;
+end;
+
+procedure TUSUARIOSBusinessProcessorRules.SetID_PERFILIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSID_PERFIL] := Null;
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetCHECKSUMValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSCHECKSUM];
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetCHECKSUMIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSCHECKSUM]);
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetOldCHECKSUMValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSCHECKSUM];
+end;
+
+function TUSUARIOSBusinessProcessorRules.GetOldCHECKSUMIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSCHECKSUM]);
+end;
+
+procedure TUSUARIOSBusinessProcessorRules.SetCHECKSUMValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSCHECKSUM] := aValue;
+end;
+
+procedure TUSUARIOSBusinessProcessorRules.SetCHECKSUMIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSCHECKSUM] := Null;
+end;
+
+
+{ TUSUARIOS_EVENTOSBusinessProcessorRules }
+constructor TUSUARIOS_EVENTOSBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
+var
+ StrList: TStringList;
+begin
+ inherited;
+
+ StrList := TStringList.Create;
+ StrList.OnChange := NOTAS_OnChange;
+ f_NOTAS := NewROStrings(StrList,True);
+end;
+
+destructor TUSUARIOS_EVENTOSBusinessProcessorRules.Destroy;
+begin
+ inherited;
+end;
+
+procedure TUSUARIOS_EVENTOSBusinessProcessorRules.NOTAS_OnChange(Sender: TObject);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSNOTAS] := TStringList(Sender).Text;
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetAPLICACIONValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSAPLICACION];
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetAPLICACIONIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSAPLICACION]);
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldAPLICACIONValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSAPLICACION];
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldAPLICACIONIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSAPLICACION]);
+end;
+
+procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetAPLICACIONValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSAPLICACION] := aValue;
+end;
+
+procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetAPLICACIONIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSAPLICACION] := Null;
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetID_USUARIOValue: Integer;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSID_USUARIO];
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetID_USUARIOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSID_USUARIO]);
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldID_USUARIOValue: Integer;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSID_USUARIO];
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldID_USUARIOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSID_USUARIO]);
+end;
+
+procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetID_USUARIOValue(const aValue: Integer);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSID_USUARIO] := aValue;
+end;
+
+procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetID_USUARIOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSID_USUARIO] := Null;
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetFECHAValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSFECHA];
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetFECHAIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSFECHA]);
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldFECHAValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSFECHA];
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldFECHAIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSFECHA]);
+end;
+
+procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetFECHAValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSFECHA] := aValue;
+end;
+
+procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetFECHAIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSFECHA] := Null;
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetHORAValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSHORA];
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetHORAIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSHORA]);
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldHORAValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSHORA];
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldHORAIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSHORA]);
+end;
+
+procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetHORAValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSHORA] := aValue;
+end;
+
+procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetHORAIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSHORA] := Null;
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetFORMValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSFORM];
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetFORMIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSFORM]);
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldFORMValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSFORM];
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldFORMIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSFORM]);
+end;
+
+procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetFORMValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSFORM] := aValue;
+end;
+
+procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetFORMIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSFORM] := Null;
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetTITULO_FORMValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSTITULO_FORM];
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetTITULO_FORMIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSTITULO_FORM]);
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldTITULO_FORMValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSTITULO_FORM];
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldTITULO_FORMIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSTITULO_FORM]);
+end;
+
+procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetTITULO_FORMValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSTITULO_FORM] := aValue;
+end;
+
+procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetTITULO_FORMIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSTITULO_FORM] := Null;
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetEVENTOValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSEVENTO];
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetEVENTOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSEVENTO]);
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldEVENTOValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSEVENTO];
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldEVENTOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSEVENTO]);
+end;
+
+procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetEVENTOValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSEVENTO] := aValue;
+end;
+
+procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetEVENTOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSEVENTO] := Null;
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetNOTASValue: IROStrings;
+begin
+ result := f_NOTAS;
+ result.Text := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSNOTAS];
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetNOTASIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSNOTAS]);
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldNOTASValue: IROStrings;
+begin
+ result := NewROStrings();
+ result.Text := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSNOTAS];
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldNOTASIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSNOTAS]);
+end;
+
+procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetNOTASIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSNOTAS] := Null;
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetTNAMEValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSTNAME];
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetTNAMEIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSTNAME]);
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldTNAMEValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSTNAME];
+end;
+
+function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldTNAMEIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSTNAME]);
+end;
+
+procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetTNAMEValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSTNAME] := aValue;
+end;
+
+procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetTNAMEIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSTNAME] := Null;
+end;
+
+
+{ TUSUARIOS_LOGONBusinessProcessorRules }
+constructor TUSUARIOS_LOGONBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
+begin
+ inherited;
+end;
+
+destructor TUSUARIOS_LOGONBusinessProcessorRules.Destroy;
+begin
+ inherited;
+end;
+
+function TUSUARIOS_LOGONBusinessProcessorRules.GetLOGONIDValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONLOGONID];
+end;
+
+function TUSUARIOS_LOGONBusinessProcessorRules.GetLOGONIDIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONLOGONID]);
+end;
+
+function TUSUARIOS_LOGONBusinessProcessorRules.GetOldLOGONIDValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_LOGONLOGONID];
+end;
+
+function TUSUARIOS_LOGONBusinessProcessorRules.GetOldLOGONIDIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_LOGONLOGONID]);
+end;
+
+procedure TUSUARIOS_LOGONBusinessProcessorRules.SetLOGONIDValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONLOGONID] := aValue;
+end;
+
+procedure TUSUARIOS_LOGONBusinessProcessorRules.SetLOGONIDIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONLOGONID] := Null;
+end;
+
+function TUSUARIOS_LOGONBusinessProcessorRules.GetID_USUARIOValue: Integer;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONID_USUARIO];
+end;
+
+function TUSUARIOS_LOGONBusinessProcessorRules.GetID_USUARIOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONID_USUARIO]);
+end;
+
+function TUSUARIOS_LOGONBusinessProcessorRules.GetOldID_USUARIOValue: Integer;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_LOGONID_USUARIO];
+end;
+
+function TUSUARIOS_LOGONBusinessProcessorRules.GetOldID_USUARIOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_LOGONID_USUARIO]);
+end;
+
+procedure TUSUARIOS_LOGONBusinessProcessorRules.SetID_USUARIOValue(const aValue: Integer);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONID_USUARIO] := aValue;
+end;
+
+procedure TUSUARIOS_LOGONBusinessProcessorRules.SetID_USUARIOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONID_USUARIO] := Null;
+end;
+
+function TUSUARIOS_LOGONBusinessProcessorRules.GetAPLICACIONValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONAPLICACION];
+end;
+
+function TUSUARIOS_LOGONBusinessProcessorRules.GetAPLICACIONIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONAPLICACION]);
+end;
+
+function TUSUARIOS_LOGONBusinessProcessorRules.GetOldAPLICACIONValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_LOGONAPLICACION];
+end;
+
+function TUSUARIOS_LOGONBusinessProcessorRules.GetOldAPLICACIONIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_LOGONAPLICACION]);
+end;
+
+procedure TUSUARIOS_LOGONBusinessProcessorRules.SetAPLICACIONValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONAPLICACION] := aValue;
+end;
+
+procedure TUSUARIOS_LOGONBusinessProcessorRules.SetAPLICACIONIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONAPLICACION] := Null;
+end;
+
+function TUSUARIOS_LOGONBusinessProcessorRules.GetEQUIPOValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONEQUIPO];
+end;
+
+function TUSUARIOS_LOGONBusinessProcessorRules.GetEQUIPOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONEQUIPO]);
+end;
+
+function TUSUARIOS_LOGONBusinessProcessorRules.GetOldEQUIPOValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_LOGONEQUIPO];
+end;
+
+function TUSUARIOS_LOGONBusinessProcessorRules.GetOldEQUIPOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_LOGONEQUIPO]);
+end;
+
+procedure TUSUARIOS_LOGONBusinessProcessorRules.SetEQUIPOValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONEQUIPO] := aValue;
+end;
+
+procedure TUSUARIOS_LOGONBusinessProcessorRules.SetEQUIPOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONEQUIPO] := Null;
+end;
+
+function TUSUARIOS_LOGONBusinessProcessorRules.GetDATAValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONDATA];
+end;
+
+function TUSUARIOS_LOGONBusinessProcessorRules.GetDATAIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONDATA]);
+end;
+
+function TUSUARIOS_LOGONBusinessProcessorRules.GetOldDATAValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_LOGONDATA];
+end;
+
+function TUSUARIOS_LOGONBusinessProcessorRules.GetOldDATAIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_LOGONDATA]);
+end;
+
+procedure TUSUARIOS_LOGONBusinessProcessorRules.SetDATAValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONDATA] := aValue;
+end;
+
+procedure TUSUARIOS_LOGONBusinessProcessorRules.SetDATAIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONDATA] := Null;
+end;
+
+
+{ TPERFILESBusinessProcessorRules }
+constructor TPERFILESBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
+begin
+ inherited;
+end;
+
+destructor TPERFILESBusinessProcessorRules.Destroy;
+begin
+ inherited;
+end;
+
+function TPERFILESBusinessProcessorRules.GetIDValue: Integer;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESID];
+end;
+
+function TPERFILESBusinessProcessorRules.GetIDIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESID]);
+end;
+
+function TPERFILESBusinessProcessorRules.GetOldIDValue: Integer;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_PERFILESID];
+end;
+
+function TPERFILESBusinessProcessorRules.GetOldIDIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PERFILESID]);
+end;
+
+procedure TPERFILESBusinessProcessorRules.SetIDValue(const aValue: Integer);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESID] := aValue;
+end;
+
+procedure TPERFILESBusinessProcessorRules.SetIDIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESID] := Null;
+end;
+
+function TPERFILESBusinessProcessorRules.GetUSERNAMEValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESUSERNAME];
+end;
+
+function TPERFILESBusinessProcessorRules.GetUSERNAMEIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESUSERNAME]);
+end;
+
+function TPERFILESBusinessProcessorRules.GetOldUSERNAMEValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_PERFILESUSERNAME];
+end;
+
+function TPERFILESBusinessProcessorRules.GetOldUSERNAMEIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PERFILESUSERNAME]);
+end;
+
+procedure TPERFILESBusinessProcessorRules.SetUSERNAMEValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESUSERNAME] := aValue;
+end;
+
+procedure TPERFILESBusinessProcessorRules.SetUSERNAMEIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESUSERNAME] := Null;
+end;
+
+function TPERFILESBusinessProcessorRules.GetLOGINValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESLOGIN];
+end;
+
+function TPERFILESBusinessProcessorRules.GetLOGINIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESLOGIN]);
+end;
+
+function TPERFILESBusinessProcessorRules.GetOldLOGINValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_PERFILESLOGIN];
+end;
+
+function TPERFILESBusinessProcessorRules.GetOldLOGINIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PERFILESLOGIN]);
+end;
+
+procedure TPERFILESBusinessProcessorRules.SetLOGINValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESLOGIN] := aValue;
+end;
+
+procedure TPERFILESBusinessProcessorRules.SetLOGINIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESLOGIN] := Null;
+end;
+
+function TPERFILESBusinessProcessorRules.GetTIPOValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESTIPO];
+end;
+
+function TPERFILESBusinessProcessorRules.GetTIPOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESTIPO]);
+end;
+
+function TPERFILESBusinessProcessorRules.GetOldTIPOValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_PERFILESTIPO];
+end;
+
+function TPERFILESBusinessProcessorRules.GetOldTIPOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PERFILESTIPO]);
+end;
+
+procedure TPERFILESBusinessProcessorRules.SetTIPOValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESTIPO] := aValue;
+end;
+
+procedure TPERFILESBusinessProcessorRules.SetTIPOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESTIPO] := Null;
+end;
+
+
+{ TPERMISOSBusinessProcessorRules }
+constructor TPERMISOSBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
+begin
+ inherited;
+end;
+
+destructor TPERMISOSBusinessProcessorRules.Destroy;
+begin
+ inherited;
+end;
+
+function TPERMISOSBusinessProcessorRules.GetIDValue: Integer;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSID];
+end;
+
+function TPERMISOSBusinessProcessorRules.GetIDIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSID]);
+end;
+
+function TPERMISOSBusinessProcessorRules.GetOldIDValue: Integer;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSID];
+end;
+
+function TPERMISOSBusinessProcessorRules.GetOldIDIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSID]);
+end;
+
+procedure TPERMISOSBusinessProcessorRules.SetIDValue(const aValue: Integer);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSID] := aValue;
+end;
+
+procedure TPERMISOSBusinessProcessorRules.SetIDIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSID] := Null;
+end;
+
+function TPERMISOSBusinessProcessorRules.GetID_USUARIOValue: Integer;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSID_USUARIO];
+end;
+
+function TPERMISOSBusinessProcessorRules.GetID_USUARIOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSID_USUARIO]);
+end;
+
+function TPERMISOSBusinessProcessorRules.GetOldID_USUARIOValue: Integer;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSID_USUARIO];
+end;
+
+function TPERMISOSBusinessProcessorRules.GetOldID_USUARIOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSID_USUARIO]);
+end;
+
+procedure TPERMISOSBusinessProcessorRules.SetID_USUARIOValue(const aValue: Integer);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSID_USUARIO] := aValue;
+end;
+
+procedure TPERMISOSBusinessProcessorRules.SetID_USUARIOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSID_USUARIO] := Null;
+end;
+
+function TPERMISOSBusinessProcessorRules.GetMODULOValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSMODULO];
+end;
+
+function TPERMISOSBusinessProcessorRules.GetMODULOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSMODULO]);
+end;
+
+function TPERMISOSBusinessProcessorRules.GetOldMODULOValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSMODULO];
+end;
+
+function TPERMISOSBusinessProcessorRules.GetOldMODULOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSMODULO]);
+end;
+
+procedure TPERMISOSBusinessProcessorRules.SetMODULOValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSMODULO] := aValue;
+end;
+
+procedure TPERMISOSBusinessProcessorRules.SetMODULOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSMODULO] := Null;
+end;
+
+function TPERMISOSBusinessProcessorRules.GetNOMBRECOMPValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSNOMBRECOMP];
+end;
+
+function TPERMISOSBusinessProcessorRules.GetNOMBRECOMPIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSNOMBRECOMP]);
+end;
+
+function TPERMISOSBusinessProcessorRules.GetOldNOMBRECOMPValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSNOMBRECOMP];
+end;
+
+function TPERMISOSBusinessProcessorRules.GetOldNOMBRECOMPIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSNOMBRECOMP]);
+end;
+
+procedure TPERMISOSBusinessProcessorRules.SetNOMBRECOMPValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSNOMBRECOMP] := aValue;
+end;
+
+procedure TPERMISOSBusinessProcessorRules.SetNOMBRECOMPIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSNOMBRECOMP] := Null;
+end;
+
+function TPERMISOSBusinessProcessorRules.GetCHECKSUMValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSCHECKSUM];
+end;
+
+function TPERMISOSBusinessProcessorRules.GetCHECKSUMIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSCHECKSUM]);
+end;
+
+function TPERMISOSBusinessProcessorRules.GetOldCHECKSUMValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSCHECKSUM];
+end;
+
+function TPERMISOSBusinessProcessorRules.GetOldCHECKSUMIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSCHECKSUM]);
+end;
+
+procedure TPERMISOSBusinessProcessorRules.SetCHECKSUMValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSCHECKSUM] := aValue;
+end;
+
+procedure TPERMISOSBusinessProcessorRules.SetCHECKSUMIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSCHECKSUM] := Null;
+end;
+
+
+{ TPERMISOSEXBusinessProcessorRules }
+constructor TPERMISOSEXBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
+begin
+ inherited;
+end;
+
+destructor TPERMISOSEXBusinessProcessorRules.Destroy;
+begin
+ inherited;
+end;
+
+function TPERMISOSEXBusinessProcessorRules.GetIDValue: Integer;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXID];
+end;
+
+function TPERMISOSEXBusinessProcessorRules.GetIDIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXID]);
+end;
+
+function TPERMISOSEXBusinessProcessorRules.GetOldIDValue: Integer;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSEXID];
+end;
+
+function TPERMISOSEXBusinessProcessorRules.GetOldIDIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSEXID]);
+end;
+
+procedure TPERMISOSEXBusinessProcessorRules.SetIDValue(const aValue: Integer);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXID] := aValue;
+end;
+
+procedure TPERMISOSEXBusinessProcessorRules.SetIDIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXID] := Null;
+end;
+
+function TPERMISOSEXBusinessProcessorRules.GetID_USUARIOValue: Integer;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXID_USUARIO];
+end;
+
+function TPERMISOSEXBusinessProcessorRules.GetID_USUARIOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXID_USUARIO]);
+end;
+
+function TPERMISOSEXBusinessProcessorRules.GetOldID_USUARIOValue: Integer;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSEXID_USUARIO];
+end;
+
+function TPERMISOSEXBusinessProcessorRules.GetOldID_USUARIOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSEXID_USUARIO]);
+end;
+
+procedure TPERMISOSEXBusinessProcessorRules.SetID_USUARIOValue(const aValue: Integer);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXID_USUARIO] := aValue;
+end;
+
+procedure TPERMISOSEXBusinessProcessorRules.SetID_USUARIOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXID_USUARIO] := Null;
+end;
+
+function TPERMISOSEXBusinessProcessorRules.GetMODULOValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXMODULO];
+end;
+
+function TPERMISOSEXBusinessProcessorRules.GetMODULOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXMODULO]);
+end;
+
+function TPERMISOSEXBusinessProcessorRules.GetOldMODULOValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSEXMODULO];
+end;
+
+function TPERMISOSEXBusinessProcessorRules.GetOldMODULOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSEXMODULO]);
+end;
+
+procedure TPERMISOSEXBusinessProcessorRules.SetMODULOValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXMODULO] := aValue;
+end;
+
+procedure TPERMISOSEXBusinessProcessorRules.SetMODULOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXMODULO] := Null;
+end;
+
+function TPERMISOSEXBusinessProcessorRules.GetNOMBRECOMPValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXNOMBRECOMP];
+end;
+
+function TPERMISOSEXBusinessProcessorRules.GetNOMBRECOMPIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXNOMBRECOMP]);
+end;
+
+function TPERMISOSEXBusinessProcessorRules.GetOldNOMBRECOMPValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSEXNOMBRECOMP];
+end;
+
+function TPERMISOSEXBusinessProcessorRules.GetOldNOMBRECOMPIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSEXNOMBRECOMP]);
+end;
+
+procedure TPERMISOSEXBusinessProcessorRules.SetNOMBRECOMPValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXNOMBRECOMP] := aValue;
+end;
+
+procedure TPERMISOSEXBusinessProcessorRules.SetNOMBRECOMPIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXNOMBRECOMP] := Null;
+end;
+
+function TPERMISOSEXBusinessProcessorRules.GetNOMBREFORMValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXNOMBREFORM];
+end;
+
+function TPERMISOSEXBusinessProcessorRules.GetNOMBREFORMIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXNOMBREFORM]);
+end;
+
+function TPERMISOSEXBusinessProcessorRules.GetOldNOMBREFORMValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSEXNOMBREFORM];
+end;
+
+function TPERMISOSEXBusinessProcessorRules.GetOldNOMBREFORMIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSEXNOMBREFORM]);
+end;
+
+procedure TPERMISOSEXBusinessProcessorRules.SetNOMBREFORMValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXNOMBREFORM] := aValue;
+end;
+
+procedure TPERMISOSEXBusinessProcessorRules.SetNOMBREFORMIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXNOMBREFORM] := Null;
+end;
+
+function TPERMISOSEXBusinessProcessorRules.GetCHECKSUMValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXCHECKSUM];
+end;
+
+function TPERMISOSEXBusinessProcessorRules.GetCHECKSUMIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXCHECKSUM]);
+end;
+
+function TPERMISOSEXBusinessProcessorRules.GetOldCHECKSUMValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSEXCHECKSUM];
+end;
+
+function TPERMISOSEXBusinessProcessorRules.GetOldCHECKSUMIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSEXCHECKSUM]);
+end;
+
+procedure TPERMISOSEXBusinessProcessorRules.SetCHECKSUMValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXCHECKSUM] := aValue;
+end;
+
+procedure TPERMISOSEXBusinessProcessorRules.SetCHECKSUMIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXCHECKSUM] := Null;
+end;
+
+
+initialization
+ RegisterBusinessProcessorRules(RID_USUARIOSDelta, TUSUARIOSBusinessProcessorRules);
+ RegisterBusinessProcessorRules(RID_USUARIOS_EVENTOSDelta, TUSUARIOS_EVENTOSBusinessProcessorRules);
+ RegisterBusinessProcessorRules(RID_USUARIOS_LOGONDelta, TUSUARIOS_LOGONBusinessProcessorRules);
+ RegisterBusinessProcessorRules(RID_PERFILESDelta, TPERFILESBusinessProcessorRules);
+ RegisterBusinessProcessorRules(RID_PERMISOSDelta, TPERMISOSBusinessProcessorRules);
+ RegisterBusinessProcessorRules(RID_PERMISOSEXDelta, TPERMISOSEXBusinessProcessorRules);
+
+end.
diff --git a/Source/ApplicationBase/Usuarios/Model/uBizUsuarios.pas b/Source/ApplicationBase/Usuarios/Model/uBizUsuarios.pas
new file mode 100644
index 0000000..7d39a13
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Model/uBizUsuarios.pas
@@ -0,0 +1,90 @@
+unit uBizUsuarios;
+
+interface
+
+uses
+ UCBase, uDAInterfaces, uDADataTable, schUsuariosClient_Intf;
+
+const
+ BIZ_CLIENT_USUARIO = 'Client.Usuario';
+ BIZ_CLIENT_PERFIL_USUARIO = 'Client.PerfilUsuario';
+
+type
+ TUsuario = TUCCurrentUser;
+
+ IBizUsuario = interface (IUSUARIOS)
+ ['{1DB69F36-969C-4078-B862-6D697670BCFD}']
+ function EsNuevo : Boolean;
+ end;
+
+ IBizPerfilUsuario = interface (IPERFILES)
+ ['{D14DF996-A8CD-400A-BF74-C8B660199C74}']
+ function EsNuevo : Boolean;
+ end;
+
+
+ TBizUsuario = class(TUsuariosDataTableRules, IBizUsuario)
+ protected
+ procedure OnNewRecord(Sender: TDADataTable); override;
+ public
+ function EsNuevo : Boolean;
+ procedure IniciarValoresUsuarioNuevo;
+ end;
+
+ TBizPerfilUsuario = class(TPerfilesDataTableRules, IBizPerfilUsuario)
+ protected
+ procedure OnNewRecord(Sender: TDADataTable); override;
+ public
+ function EsNuevo : Boolean;
+ procedure IniciarValoresPerfilNuevo;
+ end;
+
+
+
+implementation
+
+{ TBizUsuario }
+
+function TBizUsuario.EsNuevo: Boolean;
+begin
+ Result := (ID < 0);
+end;
+
+procedure TBizUsuario.IniciarValoresUsuarioNuevo;
+begin
+ TIPO := 'U'; // Usuario;
+end;
+
+procedure TBizUsuario.OnNewRecord(Sender: TDADataTable);
+begin
+ inherited;
+ IniciarValoresUsuarioNuevo;
+end;
+
+{ TBizPerfilUsuario }
+
+function TBizPerfilUsuario.EsNuevo: Boolean;
+begin
+ Result := (ID < 0);
+end;
+
+procedure TBizPerfilUsuario.IniciarValoresPerfilNuevo;
+begin
+ TIPO := 'P'; // Perfil
+end;
+
+procedure TBizPerfilUsuario.OnNewRecord(Sender: TDADataTable);
+begin
+ inherited;
+ IniciarValoresPerfilNuevo;
+end;
+
+initialization
+ RegisterDataTableRules(BIZ_CLIENT_USUARIO, TBizUsuario);
+ RegisterDataTableRules(BIZ_CLIENT_PERFIL_USUARIO, TBizPerfilUsuario);
+
+finalization
+
+end.
+
+
diff --git a/Source/ApplicationBase/Usuarios/Servidor/srvUsuarios_Impl.dfm b/Source/ApplicationBase/Usuarios/Servidor/srvUsuarios_Impl.dfm
new file mode 100644
index 0000000..24dd6f3
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Servidor/srvUsuarios_Impl.dfm
@@ -0,0 +1,600 @@
+object srvUsuarios: TsrvUsuarios
+ OldCreateOrder = True
+ OnCreate = DataAbstractServiceCreate
+ SessionManager = dmServer.SessionManager
+ ServiceSchema = schUsuarios
+ ServiceDataStreamer = Bin2DataStreamer
+ AllowExecuteSQL = True
+ AllowWhereSQL = True
+ ExportedDataTables = <>
+ BeforeAcquireConnection = DataAbstractServiceBeforeAcquireConnection
+ Height = 163
+ Width = 300
+ object Diagrams: TDADiagrams
+ Left = 150
+ Top = 88
+ DiagramData = ''#13#10''#13#10
+ end
+ object DataDictionary: TDADataDictionary
+ Fields = <
+ item
+ Name = 'USUARIOS_ID'
+ DataType = datAutoInc
+ GeneratorName = 'GEN_USUARIOS_ID'
+ Required = True
+ DisplayLabel = 'ID'
+ end
+ item
+ Name = 'USUARIOS_USERNAME'
+ DataType = datString
+ Size = 30
+ DisplayLabel = 'Nombre'
+ end
+ item
+ Name = 'USUARIOS_LOGIN'
+ DataType = datString
+ Size = 30
+ DisplayLabel = 'Login'
+ end
+ item
+ Name = 'USUARIOS_PASS'
+ DataType = datString
+ Size = 250
+ DisplayLabel = 'Password'
+ end
+ item
+ Name = 'USUARIOS_PASSEXPIRED'
+ DataType = datDateTime
+ DisplayLabel = 'Expiraci'#243'n de password'
+ end
+ item
+ Name = 'USUARIOS_BLOQUEADO'
+ DataType = datSmallInt
+ DisplayLabel = 'Bloqueado'
+ end
+ item
+ Name = 'USUARIOS_EMAIL'
+ DataType = datString
+ Size = 150
+ DisplayLabel = 'Correo electr'#243'nico'
+ end
+ item
+ Name = 'USUARIOS_USERDAYSSUN'
+ DataType = datInteger
+ end
+ item
+ Name = 'USUARIOS_PRIVILEGED'
+ DataType = datInteger
+ DisplayLabel = 'Privilegiado'
+ end
+ item
+ Name = 'USUARIOS_TIPO'
+ DataType = datString
+ Size = 1
+ DisplayLabel = 'Tipo'
+ end
+ item
+ Name = 'USUARIOS_ID_PERFIL'
+ DataType = datInteger
+ DisplayLabel = 'ID_PERFIL'
+ end
+ item
+ Name = 'USUARIOS_CHECKSUM'
+ DataType = datString
+ Size = 250
+ DisplayLabel = 'Checksum'
+ end
+ item
+ Name = 'PERFILES_ID'
+ DataType = datAutoInc
+ GeneratorName = 'GEN_USUARIOS_ID'
+ Required = True
+ DisplayLabel = 'ID'
+ end
+ item
+ Name = 'PERFILES_USERNAME'
+ DataType = datString
+ Size = 30
+ DisplayLabel = 'Nombre'
+ end
+ item
+ Name = 'PERFILES_LOGIN'
+ DataType = datString
+ Size = 30
+ DisplayLabel = 'Login'
+ end
+ item
+ Name = 'PERFILES_TIPO'
+ DataType = datString
+ Size = 1
+ DisplayLabel = 'Tipo'
+ end>
+ Left = 150
+ Top = 24
+ end
+ object schUsuarios: TDASchema
+ ConnectionManager = dmServer.ConnectionManager
+ DataDictionary = DataDictionary
+ Diagrams = Diagrams
+ Datasets = <
+ item
+ Params = <>
+ Statements = <
+ item
+ Connection = 'GFT_VARELA'
+ Default = True
+ TargetTable = 'RDX_USUARIOS'
+ SQL =
+ 'SELECT'#10' ID, USERNAME, LOGIN, PASS, PASSEXPIRED, BLOQUEADO,'#10' ' +
+ ' EMAIL, USERDAYSSUN, PRIVILEGED, TIPO, ID_PERFIL, CHECKSUM'#10' FR' +
+ 'OM'#10' RDX_USUARIOS'#10' WHERE TIPO = '#39'U'#39' AND {Where}'#10' ORDER BY US' +
+ 'ERNAME'#10
+ StatementType = stSQL
+ ColumnMappings = <
+ item
+ DatasetField = 'ID'
+ TableField = 'ID'
+ end
+ item
+ DatasetField = 'USERNAME'
+ TableField = 'USERNAME'
+ end
+ item
+ DatasetField = 'LOGIN'
+ TableField = 'LOGIN'
+ end
+ item
+ DatasetField = 'PASS'
+ TableField = 'PASS'
+ end
+ item
+ DatasetField = 'PASSEXPIRED'
+ TableField = 'PASSEXPIRED'
+ end
+ item
+ DatasetField = 'BLOQUEADO'
+ TableField = 'BLOQUEADO'
+ end
+ item
+ DatasetField = 'EMAIL'
+ TableField = 'EMAIL'
+ end
+ item
+ DatasetField = 'USERDAYSSUN'
+ TableField = 'USERDAYSSUN'
+ end
+ item
+ DatasetField = 'PRIVILEGED'
+ TableField = 'PRIVILEGED'
+ end
+ item
+ DatasetField = 'TIPO'
+ TableField = 'TIPO'
+ end
+ item
+ DatasetField = 'ID_PERFIL'
+ TableField = 'ID_PERFIL'
+ end
+ item
+ DatasetField = 'CHECKSUM'
+ TableField = 'CHECKSUM'
+ end>
+ end>
+ Name = 'USUARIOS'
+ Fields = <
+ item
+ Name = 'ID'
+ DataType = datAutoInc
+ GeneratorName = 'GEN_USUARIOS_ID'
+ DictionaryEntry = 'USUARIOS_ID'
+ InPrimaryKey = True
+ end
+ item
+ Name = 'USERNAME'
+ DataType = datString
+ Size = 30
+ DictionaryEntry = 'USUARIOS_USERNAME'
+ end
+ item
+ Name = 'LOGIN'
+ DataType = datString
+ Size = 30
+ DictionaryEntry = 'USUARIOS_LOGIN'
+ end
+ item
+ Name = 'PASS'
+ DataType = datString
+ Size = 250
+ DictionaryEntry = 'USUARIOS_PASS'
+ end
+ item
+ Name = 'PASSEXPIRED'
+ DataType = datDateTime
+ DictionaryEntry = 'USUARIOS_PASSEXPIRED'
+ end
+ item
+ Name = 'BLOQUEADO'
+ DataType = datSmallInt
+ DictionaryEntry = 'USUARIOS_BLOQUEADO'
+ end
+ item
+ Name = 'EMAIL'
+ DataType = datString
+ Size = 150
+ DictionaryEntry = 'USUARIOS_EMAIL'
+ end
+ item
+ Name = 'USERDAYSSUN'
+ DataType = datInteger
+ DictionaryEntry = 'USUARIOS_USERDAYSSUN'
+ end
+ item
+ Name = 'PRIVILEGED'
+ DataType = datInteger
+ DictionaryEntry = 'USUARIOS_PRIVILEGED'
+ end
+ item
+ Name = 'TIPO'
+ DataType = datString
+ Size = 1
+ DictionaryEntry = 'USUARIOS_TIPO'
+ end
+ item
+ Name = 'ID_PERFIL'
+ DataType = datInteger
+ DictionaryEntry = 'USUARIOS_ID_PERFIL'
+ end
+ item
+ Name = 'CHECKSUM'
+ DataType = datString
+ Size = 250
+ DictionaryEntry = 'USUARIOS_CHECKSUM'
+ end>
+ end
+ item
+ Params = <>
+ Statements = <
+ item
+ Connection = 'GFT_VARELA'
+ Default = True
+ TargetTable = 'RDX_USUARIOS_EVENTOS'
+ StatementType = stAutoSQL
+ ColumnMappings = <
+ item
+ DatasetField = 'APLICACION'
+ TableField = 'APLICACION'
+ end
+ item
+ DatasetField = 'ID_USUARIO'
+ TableField = 'ID_USUARIO'
+ end
+ item
+ DatasetField = 'FECHA'
+ TableField = 'FECHA'
+ end
+ item
+ DatasetField = 'HORA'
+ TableField = 'HORA'
+ end
+ item
+ DatasetField = 'FORM'
+ TableField = 'FORM'
+ end
+ item
+ DatasetField = 'TITULO_FORM'
+ TableField = 'TITULO_FORM'
+ end
+ item
+ DatasetField = 'EVENTO'
+ TableField = 'EVENTO'
+ end
+ item
+ DatasetField = 'NOTAS'
+ TableField = 'NOTAS'
+ end
+ item
+ DatasetField = 'TNAME'
+ TableField = 'TNAME'
+ end>
+ end>
+ Name = 'USUARIOS_EVENTOS'
+ Fields = <
+ item
+ Name = 'APLICACION'
+ DataType = datString
+ Size = 250
+ end
+ item
+ Name = 'ID_USUARIO'
+ DataType = datInteger
+ end
+ item
+ Name = 'FECHA'
+ DataType = datString
+ Size = 10
+ end
+ item
+ Name = 'HORA'
+ DataType = datString
+ Size = 8
+ end
+ item
+ Name = 'FORM'
+ DataType = datString
+ Size = 250
+ end
+ item
+ Name = 'TITULO_FORM'
+ DataType = datString
+ Size = 100
+ end
+ item
+ Name = 'EVENTO'
+ DataType = datString
+ Size = 50
+ end
+ item
+ Name = 'NOTAS'
+ DataType = datMemo
+ end
+ item
+ Name = 'TNAME'
+ DataType = datString
+ Size = 20
+ end>
+ end
+ item
+ Params = <>
+ Statements = <
+ item
+ Connection = 'GFT_VARELA'
+ TargetTable = 'RDX_USUARIOS_LOGON'
+ StatementType = stAutoSQL
+ ColumnMappings = <
+ item
+ DatasetField = 'LOGONID'
+ TableField = 'LOGONID'
+ end
+ item
+ DatasetField = 'ID_USUARIO'
+ TableField = 'ID_USUARIO'
+ end
+ item
+ DatasetField = 'APLICACION'
+ TableField = 'APLICACION'
+ end
+ item
+ DatasetField = 'EQUIPO'
+ TableField = 'EQUIPO'
+ end
+ item
+ DatasetField = 'DATA'
+ TableField = 'DATA'
+ end>
+ end>
+ Name = 'USUARIOS_LOGON'
+ Fields = <
+ item
+ Name = 'LOGONID'
+ DataType = datString
+ Size = 38
+ Required = True
+ InPrimaryKey = True
+ end
+ item
+ Name = 'ID_USUARIO'
+ DataType = datInteger
+ end
+ item
+ Name = 'APLICACION'
+ DataType = datString
+ Size = 50
+ end
+ item
+ Name = 'EQUIPO'
+ DataType = datString
+ Size = 50
+ end
+ item
+ Name = 'DATA'
+ DataType = datString
+ Size = 14
+ end>
+ end
+ item
+ Params = <>
+ Statements = <
+ item
+ Connection = 'GFT_VARELA'
+ TargetTable = 'RDX_USUARIOS'
+ SQL =
+ 'SELECT '#10' ID, USERNAME, LOGIN, TIPO'#10' FROM'#10' RDX_USUARIOS'#10' ' +
+ 'WHERE TIPO = '#39'P'#39' AND {Where}'#10' ORDER BY USERNAME'#10
+ StatementType = stSQL
+ ColumnMappings = <
+ item
+ DatasetField = 'ID'
+ TableField = 'ID'
+ end
+ item
+ DatasetField = 'USERNAME'
+ TableField = 'USERNAME'
+ end
+ item
+ DatasetField = 'LOGIN'
+ TableField = 'LOGIN'
+ end
+ item
+ DatasetField = 'TIPO'
+ TableField = 'TIPO'
+ end>
+ end>
+ Name = 'PERFILES'
+ Fields = <
+ item
+ Name = 'ID'
+ DataType = datAutoInc
+ GeneratorName = 'GEN_USUARIOS_ID'
+ DictionaryEntry = 'PERFILES_ID'
+ InPrimaryKey = True
+ end
+ item
+ Name = 'USERNAME'
+ DataType = datString
+ Size = 30
+ DictionaryEntry = 'PERFILES_USERNAME'
+ end
+ item
+ Name = 'LOGIN'
+ DataType = datString
+ Size = 30
+ DictionaryEntry = 'PERFILES_LOGIN'
+ end
+ item
+ Name = 'TIPO'
+ DataType = datString
+ Size = 1
+ DictionaryEntry = 'PERFILES_TIPO'
+ end>
+ end
+ item
+ Params = <>
+ Statements = <
+ item
+ Connection = 'GFT_VARELA'
+ ConnectionType = 'MSSQL'
+ Default = True
+ TargetTable = 'RDX_PERMISOS'
+ StatementType = stAutoSQL
+ ColumnMappings = <
+ item
+ DatasetField = 'ID'
+ TableField = 'ID'
+ end
+ item
+ DatasetField = 'ID_USUARIO'
+ TableField = 'ID_USUARIO'
+ end
+ item
+ DatasetField = 'MODULO'
+ TableField = 'MODULO'
+ end
+ item
+ DatasetField = 'NOMBRECOMP'
+ TableField = 'NOMBRECOMP'
+ end
+ item
+ DatasetField = 'CHECKSUM'
+ TableField = 'CHECKSUM'
+ end>
+ end>
+ Name = 'PERMISOS'
+ Fields = <
+ item
+ Name = 'ID'
+ DataType = datInteger
+ Required = True
+ InPrimaryKey = True
+ end
+ item
+ Name = 'ID_USUARIO'
+ DataType = datInteger
+ end
+ item
+ Name = 'MODULO'
+ DataType = datString
+ Size = 50
+ end
+ item
+ Name = 'NOMBRECOMP'
+ DataType = datString
+ Size = 50
+ end
+ item
+ Name = 'CHECKSUM'
+ DataType = datString
+ Size = 250
+ end>
+ end
+ item
+ Params = <>
+ Statements = <
+ item
+ Connection = 'GFT_VARELA'
+ ConnectionType = 'MSSQL'
+ Default = True
+ TargetTable = 'RDX_PERMISOSEX'
+ StatementType = stAutoSQL
+ ColumnMappings = <
+ item
+ DatasetField = 'ID'
+ TableField = 'ID'
+ end
+ item
+ DatasetField = 'ID_USUARIO'
+ TableField = 'ID_USUARIO'
+ end
+ item
+ DatasetField = 'MODULO'
+ TableField = 'MODULO'
+ end
+ item
+ DatasetField = 'NOMBRECOMP'
+ TableField = 'NOMBRECOMP'
+ end
+ item
+ DatasetField = 'NOMBREFORM'
+ TableField = 'NOMBREFORM'
+ end
+ item
+ DatasetField = 'CHECKSUM'
+ TableField = 'CHECKSUM'
+ end>
+ end>
+ Name = 'PERMISOSEX'
+ Fields = <
+ item
+ Name = 'ID'
+ DataType = datInteger
+ Required = True
+ InPrimaryKey = True
+ end
+ item
+ Name = 'ID_USUARIO'
+ DataType = datInteger
+ end
+ item
+ Name = 'MODULO'
+ DataType = datString
+ Size = 50
+ end
+ item
+ Name = 'NOMBRECOMP'
+ DataType = datString
+ Size = 50
+ end
+ item
+ Name = 'NOMBREFORM'
+ DataType = datString
+ Size = 50
+ end
+ item
+ Name = 'CHECKSUM'
+ DataType = datString
+ Size = 250
+ end>
+ end>
+ JoinDataTables = <>
+ UnionDataTables = <>
+ Commands = <>
+ RelationShips = <>
+ UpdateRules = <>
+ Version = 0
+ Left = 48
+ Top = 24
+ end
+ object Bin2DataStreamer: TDABin2DataStreamer
+ Left = 48
+ Top = 88
+ end
+end
diff --git a/Source/ApplicationBase/Usuarios/Servidor/srvUsuarios_Impl.pas b/Source/ApplicationBase/Usuarios/Servidor/srvUsuarios_Impl.pas
new file mode 100644
index 0000000..18cb2f6
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Servidor/srvUsuarios_Impl.pas
@@ -0,0 +1,65 @@
+unit srvUsuarios_Impl;
+
+{----------------------------------------------------------------------------}
+{ This unit was automatically generated by the RemObjects SDK after reading }
+{ the RODL file associated with this project . }
+{ }
+{ This is where you are supposed to code the implementation of your objects. }
+{----------------------------------------------------------------------------}
+
+{$I Remobjects.inc}
+
+interface
+
+uses
+ {vcl:} Classes, SysUtils,
+ {RemObjects:} uROXMLIntf, uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions,
+ {Required:} uRORemoteDataModule,
+ {Ancestor Implementation:} DataAbstractService_Impl,
+ {Used RODLs:} DataAbstract4_Intf,
+ {Generated:} VARELA_Intf, uDADataStreamer, uDABin2DataStreamer, uDAClasses;
+
+type
+ { TsrvUsuarios }
+ TsrvUsuarios = class(TDataAbstractService, IsrvUsuarios)
+ Diagrams: TDADiagrams;
+ Bin2DataStreamer: TDABin2DataStreamer;
+ schUsuarios: TDASchema;
+ DataDictionary: TDADataDictionary;
+ procedure DataAbstractServiceBeforeAcquireConnection(aSender: TObject;
+ var aConnectionName: string);
+ procedure DataAbstractServiceCreate(Sender: TObject);
+ private
+ protected
+ { IsrvUsuarios methods }
+ end;
+
+implementation
+
+{$R *.dfm}
+uses
+ {Generated:} VARELA_Invk, uDataModuleServer;
+
+procedure Create_srvUsuarios(out anInstance : IUnknown);
+begin
+ anInstance := TsrvUsuarios.Create(nil);
+end;
+
+{ srvUsuarios }
+procedure TsrvUsuarios.DataAbstractServiceBeforeAcquireConnection(
+ aSender: TObject; var aConnectionName: string);
+begin
+ ConnectionName := dmServer.ConnectionName;
+end;
+
+procedure TsrvUsuarios.DataAbstractServiceCreate(Sender: TObject);
+begin
+ SessionManager := dmServer.SessionManager;
+end;
+
+initialization
+ TROClassFactory.Create('srvUsuarios', Create_srvUsuarios, TsrvUsuarios_Invoker);
+
+finalization
+
+end.
diff --git a/Source/ApplicationBase/Usuarios/Usuarios.cfg b/Source/ApplicationBase/Usuarios/Usuarios.cfg
new file mode 100644
index 0000000..96c8d0b
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Usuarios.cfg
@@ -0,0 +1,45 @@
+-$A8
+-$B-
+-$C+
+-$D+
+-$E-
+-$F-
+-$G+
+-$H+
+-$I+
+-$J-
+-$K-
+-$L+
+-$M-
+-$N+
+-$O+
+-$P+
+-$Q-
+-$R-
+-$S-
+-$T-
+-$U-
+-$V+
+-$W-
+-$X+
+-$YD
+-$Z1
+-GD
+-cg
+-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+-H+
+-W+
+-M
+-$M16384,1048576
+-K$00400000
+-N".\"
+-LE"..\..\Output\Cliente"
+-LN"..\Lib"
+-U"..\Lib"
+-O"..\Lib"
+-I"..\Lib"
+-R"..\Lib"
+-Z
+-w-UNSAFE_TYPE
+-w-UNSAFE_CODE
+-w-UNSAFE_CAST
diff --git a/Source/ApplicationBase/Usuarios/Usuarios.dof b/Source/ApplicationBase/Usuarios/Usuarios.dof
new file mode 100644
index 0000000..908913c
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Usuarios.dof
@@ -0,0 +1,471 @@
+[FileVersion]
+Version=7.0
+[Compiler]
+A=8
+B=0
+C=1
+D=1
+E=0
+F=0
+G=1
+H=1
+I=1
+J=0
+K=0
+L=1
+M=0
+N=1
+O=1
+P=1
+Q=0
+R=0
+S=0
+T=0
+U=0
+V=1
+W=0
+X=1
+Y=1
+Z=1
+ShowHints=1
+ShowWarnings=1
+UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+NamespacePrefix=
+SymbolDeprecated=1
+SymbolLibrary=1
+SymbolPlatform=1
+UnitLibrary=1
+UnitPlatform=1
+UnitDeprecated=1
+HResultCompat=1
+HidingMember=1
+HiddenVirtual=1
+Garbage=1
+BoundsError=1
+ZeroNilCompat=1
+StringConstTruncated=1
+ForLoopVarVarPar=1
+TypedConstVarPar=1
+AsgToTypedConst=1
+CaseLabelRange=1
+ForVariable=1
+ConstructingAbstract=1
+ComparisonFalse=1
+ComparisonTrue=1
+ComparingSignedUnsigned=1
+CombiningSignedUnsigned=1
+UnsupportedConstruct=1
+FileOpen=1
+FileOpenUnitSrc=1
+BadGlobalSymbol=1
+DuplicateConstructorDestructor=1
+InvalidDirective=1
+PackageNoLink=1
+PackageThreadVar=1
+ImplicitImport=1
+HPPEMITIgnored=1
+NoRetVal=1
+UseBeforeDef=1
+ForLoopVarUndef=1
+UnitNameMismatch=1
+NoCFGFileFound=1
+MessageDirective=1
+ImplicitVariants=1
+UnicodeToLocale=1
+LocaleToUnicode=1
+ImagebaseMultiple=1
+SuspiciousTypecast=1
+PrivatePropAccessor=1
+UnsafeType=0
+UnsafeCode=0
+UnsafeCast=0
+[Linker]
+MapFile=3
+OutputObjs=0
+ConsoleApp=1
+DebugInfo=0
+RemoteSymbols=0
+MinStackSize=16384
+MaxStackSize=1048576
+ImageBase=4194304
+ExeDescription=Pedidos a proveedor
+[Directories]
+OutputDir=
+UnitOutputDir=.\
+PackageDLLOutputDir=..\..\Output\Cliente
+PackageDCPOutputDir=..\Lib
+SearchPath=..\Lib
+Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP;cxLibraryVCLD7;dxThemeD7;cxTreeListVCLD7;cxEditorsVCLD7;cxDataD7;cxExtEditorsVCLD7;cxGridVCLD7;cxPageControlVCLD7;cxSchedulerVCLD7;dxComnD7;dxsbD7;dxBarD7;dxBarDBNavD7;dxBarExtDBItemsD7;dxBarExtItemsD7;dxDockingD7;dxLayoutControlD7;dxNavBarD7;dxPSCoreD7;cxExportVCLD7;cxIntl5D7;cxIntlPrintSys3D7;cxIntlSchedulerD7;fsIBX7;fs7;fqb70;frx7;frxADO7;frxBDE7;frxcs7;frxDB7;frxDBX7;frxe7;frxIBX7;fsADO7;fsBDE7;fsDB7;cxVerticalGridVCLD7
+Conditionals=
+DebugSourceDirs=
+UsePackages=0
+[Parameters]
+RunParams=
+HostApplication=
+Launcher=
+UseLauncher=0
+DebugCWD=
+[Language]
+ActiveLang=
+ProjectLang=
+RootDir=C:\Archivos de programa\Borland\Delphi7\Bin\
+[Version Info]
+IncludeVerInfo=1
+AutoIncBuild=0
+MajorVer=1
+MinorVer=0
+Release=3
+Build=0
+Debug=0
+PreRelease=0
+Special=0
+Private=0
+DLL=0
+Locale=3082
+CodePage=1252
+[Version Info Keys]
+CompanyName=
+FileDescription=
+FileVersion=1.0.3.0
+InternalName=
+LegalCopyright=
+LegalTrademarks=
+OriginalFilename=
+ProductName=
+ProductVersion=1.0.0.0
+Comments=
+[Excluded Packages]
+c:\archivos de programa\borland\delphi7\Bin\designdgm70.bpl=Borland Module Diagram Editview
+T:\BPL_D7\dxPSCoreD7.bpl=ExpressPrinting System by Developer Express Inc.
+[HistoryLists\hlUnitAliases]
+Count=1
+Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+[HistoryLists\hlSearchPath]
+Count=1
+Item0=..\Lib
+[HistoryLists\hlUnitOutputDirectory]
+Count=1
+Item0=.\
+[HistoryLists\hlBPLOutput]
+Count=1
+Item0=..\..\Output\Cliente
+[HistoryLists\hlDCPOutput]
+Count=1
+Item0=..\Lib
+[Exception Log]
+EurekaLog Version=519
+Activate=1
+Activate Handle=1
+Save Log File=1
+Foreground Tab=0
+Freeze Activate=0
+Freeze Timeout=60
+Freeze Message=The application seems to be frozen.
+SMTP From=eurekalog@email.com
+SMTP Host=
+SMTP Port=25
+SMTP UserID=
+SMTP Password=
+Append to Log=0
+Show TerminateBtn=1
+TerminateBtn Operation=1
+Errors Number=32
+Errors Terminate=3
+Email Address=
+Email Object=
+Email Send Options=0
+Output Path=
+Encrypt Password=
+AutoCloseDialogSecs=0
+WebSendMode=0
+SupportULR=
+HTMLLayout Count=15
+HTMLLine0="%3Chtml%3E"
+HTMLLine1=" %3Chead%3E"
+HTMLLine2=" %3C/head%3E"
+HTMLLine3=" %3Cbody TopMargin=10 LeftMargin=10%3E"
+HTMLLine4=" %3Ctable width="100%%" border="0"%3E"
+HTMLLine5=" %3Ctr%3E"
+HTMLLine6=" %3Ctd nowrap%3E"
+HTMLLine7=" %3Cfont face="Lucida Console, Courier" size="2"%3E"
+HTMLLine8=" %3C%%HTML_TAG%%%3E"
+HTMLLine9=" %3C/font%3E"
+HTMLLine10=" %3C/td%3E"
+HTMLLine11=" %3C/tr%3E"
+HTMLLine12=" %3C/table%3E"
+HTMLLine13=" %3C/body%3E"
+HTMLLine14="%3C/html%3E"
+AutoCrashOperation=1
+AutoCrashNumber=10
+AutoCrashMinutes=1
+WebURL=
+WebUserID=
+WebPassword=
+WebPort=0
+AttachedFiles=
+Count=0
+EMail Message Line Count=0
+loNoDuplicateErrors=0
+loAppendReproduceText=0
+loDeleteLogAtVersionChange=0
+loAddComputerNameInLogFileName=0
+loSaveModulesSection=1
+loSaveCPUSection=1
+soAppStartDate=1
+soAppName=1
+soAppVersionNumber=1
+soAppParameters=1
+soAppCompilationDate=1
+soExcDate=1
+soExcAddress=1
+soExcModule=1
+soExcType=1
+soExcMessage=1
+soActCtlsFormClass=1
+soActCtlsFormText=1
+soActCtlsControlClass=1
+soActCtlsControlText=1
+soCmpName=1
+soCmpUser=1
+soCmpTotalMemory=1
+soCmpFreeMemory=1
+soCmpTotalDisk=1
+soCmpFreeDisk=1
+soCmpSysUpTime=1
+soCmpProcessor=1
+soCmpDisplayMode=1
+soOSType=1
+soOSBuildN=1
+soOSUpdate=1
+soOSLanguage=1
+soNetIP=1
+soNetSubmask=1
+soNetGateway=1
+soNetDNS1=1
+soNetDNS2=1
+soNetDHCP=1
+sndShowSendDialog=1
+sndShowSuccessFailureMsg=0
+sndSendEntireLog=0
+sndSendXMLLogCopy=0
+sndSendScreenshot=1
+sndUseOnlyActiveWindow=0
+sndSendLastHTMLPage=1
+sndSendInSeparatedThread=0
+sndAddDateInFileName=0
+sndCompressAllFiles=0
+edoShowExceptionDialog=1
+edoSendEmailChecked=1
+edoAttachScreenshotChecked=1
+edoShowCopyToClipOption=1
+edoShowDetailsButton=1
+edoShowInDetailedMode=0
+edoShowInTopMostMode=0
+edoUseEurekaLogLookAndFeel=0
+csoShowDLLs=1
+csoShowBPLs=1
+csoShowBorlandThreads=1
+csoShowWindowsThreads=1
+csoShowProcedureOffset=0
+boActivateCrashDetection=0
+boPauseBorlandThreads=0
+boDoNotPauseMainThread=0
+boPauseWindowsThreads=0
+boUseMainModuleOptions=1
+boCopyLogInCaseOfError=1
+boSaveCompressedCopyInCaseOfError=0
+Count mtInformationMsgCaption=1
+mtInformationMsgCaption0="Information."
+Count mtQuestionMsgCaption=1
+mtQuestionMsgCaption0="Question."
+Count mtDialog_Caption=1
+mtDialog_Caption0="Error."
+Count mtDialog_ErrorMsgCaption=2
+mtDialog_ErrorMsgCaption0="An error has occurred during program execution."
+mtDialog_ErrorMsgCaption1="Please read the following information for further details."
+Count mtDialog_GeneralCaption=1
+mtDialog_GeneralCaption0="General"
+Count mtDialog_GeneralHeader=1
+mtDialog_GeneralHeader0="General Information"
+Count mtDialog_CallStackCaption=1
+mtDialog_CallStackCaption0="Call Stack"
+Count mtDialog_CallStackHeader=1
+mtDialog_CallStackHeader0="Call Stack Information"
+Count mtDialog_ModulesCaption=1
+mtDialog_ModulesCaption0="Modules"
+Count mtDialog_ModulesHeader=1
+mtDialog_ModulesHeader0="Modules Information"
+Count mtDialog_CPUCaption=1
+mtDialog_CPUCaption0="CPU"
+Count mtDialog_CPUHeader=1
+mtDialog_CPUHeader0="CPU Information"
+Count mtDialog_CustomDataCaption=1
+mtDialog_CustomDataCaption0="Other"
+Count mtDialog_CustomDataHeader=1
+mtDialog_CustomDataHeader0="Other Information"
+Count mtDialog_OKButtonCaption=1
+mtDialog_OKButtonCaption0="%26OK"
+Count mtDialog_TerminateButtonCaption=1
+mtDialog_TerminateButtonCaption0="%26Terminate"
+Count mtDialog_RestartButtonCaption=1
+mtDialog_RestartButtonCaption0="%26Restart"
+Count mtDialog_DetailsButtonCaption=1
+mtDialog_DetailsButtonCaption0="%26Details"
+Count mtDialog_SendMessage=1
+mtDialog_SendMessage0="%26Send this error via Internet"
+Count mtDialog_ScreenshotMessage=1
+mtDialog_ScreenshotMessage0="%26Attach a Screenshot image"
+Count mtDialog_CopyMessage=1
+mtDialog_CopyMessage0="%26Copy to Clipboard"
+Count mtDialog_SupportMessage=1
+mtDialog_SupportMessage0="Go to the Support Page"
+Count mtLog_AppHeader=1
+mtLog_AppHeader0="Application"
+Count mtLog_AppStartDate=1
+mtLog_AppStartDate0="Start Date"
+Count mtLog_AppName=1
+mtLog_AppName0="Name/Description"
+Count mtLog_AppVersionNumber=1
+mtLog_AppVersionNumber0="Version Number"
+Count mtLog_AppParameters=1
+mtLog_AppParameters0="Parameters"
+Count mtLog_AppCompilationDate=1
+mtLog_AppCompilationDate0="Compilation Date"
+Count mtLog_ExcHeader=1
+mtLog_ExcHeader0="Exception"
+Count mtLog_ExcDate=1
+mtLog_ExcDate0="Date"
+Count mtLog_ExcAddress=1
+mtLog_ExcAddress0="Address"
+Count mtLog_ExcModule=1
+mtLog_ExcModule0="Module"
+Count mtLog_ExcType=1
+mtLog_ExcType0="Type"
+Count mtLog_ExcMessage=1
+mtLog_ExcMessage0="Message"
+Count mtLog_ActCtrlsHeader=1
+mtLog_ActCtrlsHeader0="Active Controls"
+Count mtLog_ActCtrlsFormClass=1
+mtLog_ActCtrlsFormClass0="Form Class"
+Count mtLog_ActCtrlsFormText=1
+mtLog_ActCtrlsFormText0="Form Text"
+Count mtLog_ActCtrlsControlClass=1
+mtLog_ActCtrlsControlClass0="Control Class"
+Count mtLog_ActCtrlsControlText=1
+mtLog_ActCtrlsControlText0="Control Text"
+Count mtLog_CmpHeader=1
+mtLog_CmpHeader0="Computer"
+Count mtLog_CmpName=1
+mtLog_CmpName0="Name"
+Count mtLog_CmpUser=1
+mtLog_CmpUser0="User"
+Count mtLog_CmpTotalMemory=1
+mtLog_CmpTotalMemory0="Total Memory"
+Count mtLog_CmpFreeMemory=1
+mtLog_CmpFreeMemory0="Free Memory"
+Count mtLog_CmpTotalDisk=1
+mtLog_CmpTotalDisk0="Total Disk"
+Count mtLog_CmpFreeDisk=1
+mtLog_CmpFreeDisk0="Free Disk"
+Count mtLog_CmpSystemUpTime=1
+mtLog_CmpSystemUpTime0="System Up Time"
+Count mtLog_CmpProcessor=1
+mtLog_CmpProcessor0="Processor"
+Count mtLog_CmpDisplayMode=1
+mtLog_CmpDisplayMode0="Display Mode"
+Count mtLog_OSHeader=1
+mtLog_OSHeader0="Operating System"
+Count mtLog_OSType=1
+mtLog_OSType0="Type"
+Count mtLog_OSBuildN=1
+mtLog_OSBuildN0="Build #"
+Count mtLog_OSUpdate=1
+mtLog_OSUpdate0="Update"
+Count mtLog_OSLanguage=1
+mtLog_OSLanguage0="Language"
+Count mtLog_NetHeader=1
+mtLog_NetHeader0="Network"
+Count mtLog_NetIP=1
+mtLog_NetIP0="IP Address"
+Count mtLog_NetSubmask=1
+mtLog_NetSubmask0="Submask"
+Count mtLog_NetGateway=1
+mtLog_NetGateway0="Gateway"
+Count mtLog_NetDNS1=1
+mtLog_NetDNS10="DNS 1"
+Count mtLog_NetDNS2=1
+mtLog_NetDNS20="DNS 2"
+Count mtLog_NetDHCP=1
+mtLog_NetDHCP0="DHCP"
+Count mtLog_CustInfoHeader=1
+mtLog_CustInfoHeader0="Custom Information"
+Count mtCallStack_Address=1
+mtCallStack_Address0="Address"
+Count mtCallStack_Name=1
+mtCallStack_Name0="Module"
+Count mtCallStack_Unit=1
+mtCallStack_Unit0="Unit"
+Count mtCallStack_Class=1
+mtCallStack_Class0="Class"
+Count mtCallStack_Procedure=1
+mtCallStack_Procedure0="Procedure/Method"
+Count mtCallStack_Line=1
+mtCallStack_Line0="Line"
+Count mtCallStack_MainThread=1
+mtCallStack_MainThread0="Main"
+Count mtCallStack_ExceptionThread=1
+mtCallStack_ExceptionThread0="Exception Thread"
+Count mtCallStack_RunningThread=1
+mtCallStack_RunningThread0="Running Thread"
+Count mtCallStack_CallingThread=1
+mtCallStack_CallingThread0="Calling Thread"
+Count mtCallStack_ThreadID=1
+mtCallStack_ThreadID0="ID"
+Count mtCallStack_ThreadPriority=1
+mtCallStack_ThreadPriority0="Priority"
+Count mtCallStack_ThreadClass=1
+mtCallStack_ThreadClass0="Class"
+Count mtSendDialog_Caption=1
+mtSendDialog_Caption0="Send."
+Count mtSendDialog_Message=1
+mtSendDialog_Message0="Message"
+Count mtSendDialog_Resolving=1
+mtSendDialog_Resolving0="Resolving DNS..."
+Count mtSendDialog_Connecting=1
+mtSendDialog_Connecting0="Connecting with server..."
+Count mtSendDialog_Connected=1
+mtSendDialog_Connected0="Connected with server."
+Count mtSendDialog_Sending=1
+mtSendDialog_Sending0="Sending message..."
+Count mtReproduceDialog_Caption=1
+mtReproduceDialog_Caption0="Request"
+Count mtReproduceDialog_Request=1
+mtReproduceDialog_Request0="Please describe the steps to reproduce the error:"
+Count mtReproduceDialog_OKButtonCaption=1
+mtReproduceDialog_OKButtonCaption0="%26OK"
+Count mtModules_Handle=1
+mtModules_Handle0="Handle"
+Count mtModules_Name=1
+mtModules_Name0="Name"
+Count mtModules_Description=1
+mtModules_Description0="Description"
+Count mtModules_Version=1
+mtModules_Version0="Version"
+Count mtModules_Size=1
+mtModules_Size0="Size"
+Count mtModules_LastModified=1
+mtModules_LastModified0="Modified"
+Count mtModules_Path=1
+mtModules_Path0="Path"
+Count mtCPU_Registers=1
+mtCPU_Registers0="Registers"
+Count mtCPU_Stack=1
+mtCPU_Stack0="Stack"
+Count mtCPU_MemoryDump=1
+mtCPU_MemoryDump0="Memory Dump"
+Count mtSend_SuccessMsg=1
+mtSend_SuccessMsg0="The message was sent successfully."
+Count mtSend_FailureMsg=1
+mtSend_FailureMsg0="Sorry, sending the message didn't work."
+
+
diff --git a/Source/ApplicationBase/Usuarios/Usuarios.dpk b/Source/ApplicationBase/Usuarios/Usuarios.dpk
new file mode 100644
index 0000000..7aee746
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Usuarios.dpk
@@ -0,0 +1,67 @@
+package Usuarios;
+
+{$R *.res}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO ON}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS ON}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO ON}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES ON}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DESCRIPTION 'Pedidos a proveedor'}
+{$IMPLICITBUILD ON}
+{$DEFINE DEBUG}
+
+requires
+ vcl,
+ vcldb,
+ PngComponentsD10,
+ PNG_D10,
+ vclactnband,
+ vclx,
+ vcljpg,
+ BaseD10;
+
+contains
+ uUsuariosController in 'Controller\uUsuariosController.pas',
+ uPerfilesUsuarioController in 'Controller\uPerfilesUsuarioController.pas',
+ uUCROConn in 'Data\uUCROConn.pas',
+ uDataModuleUsuarios in 'Data\uDataModuleUsuarios.pas',
+ uBizUsuarios in 'Model\uBizUsuarios.pas',
+ uIEditorUsuarios in 'Controller\View\uIEditorUsuarios.pas',
+ uIEditorLogin in 'Controller\View\uIEditorLogin.pas',
+ uIEditorPerfilesUsuario in 'Controller\View\uIEditorPerfilesUsuario.pas',
+ uIEditorPerfilUsuario in 'Controller\View\uIEditorPerfilUsuario.pas',
+ uIEditorUsuario in 'Controller\View\uIEditorUsuario.pas',
+ uIDataModuleUsuarios in 'Model\Data\uIDataModuleUsuarios.pas',
+ uViewUsuarios in 'Views\uViewUsuarios.pas',
+ uEditorCambiarPassword in 'Views\uEditorCambiarPassword.pas',
+ uEditorLogin in 'Views\uEditorLogin.pas',
+ uEditorPerfilesUsuario in 'Views\uEditorPerfilesUsuario.pas',
+ uEditorPerfilUsuario in 'Views\uEditorPerfilUsuario.pas',
+ uEditorUsuario in 'Views\uEditorUsuario.pas',
+ uEditorUsuarios in 'Views\uEditorUsuarios.pas',
+ uUsuario in 'Views\uUsuario.pas',
+ uUsuarios in 'Views\uUsuarios.pas',
+ uUsuariosViewRegister in 'Views\uUsuariosViewRegister.pas',
+ uViewPerfilesUsuario in 'Views\uViewPerfilesUsuario.pas',
+ uViewPerfilUsuario in 'Views\uViewPerfilUsuario.pas',
+ uViewUsuario in 'Views\uViewUsuario.pas',
+ schUsuariosClient_Intf in 'Model\schUsuariosClient_Intf.pas',
+ schUsuariosServer_Intf in 'Model\schUsuariosServer_Intf.pas';
+
+end.
diff --git a/Source/ApplicationBase/Usuarios/Usuarios.dproj b/Source/ApplicationBase/Usuarios/Usuarios.dproj
new file mode 100644
index 0000000..7362a1f
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Usuarios.dproj
@@ -0,0 +1,598 @@
+
+
+
+ {c2514fab-bd64-47eb-ac2d-4b0b5460f98f}
+ Usuarios.dpk
+ Debug
+ AnyCPU
+ DCC32
+ ..\..\Output\Debug\Cliente\Usuarios.bpl
+
+
+ 7.0
+ False
+ False
+ 0
+ 3
+ .\
+ .\
+ .\
+ ..\..\Output\Debug\Cliente
+ ..\Lib
+ ..\Lib;..\Base
+ ..\Lib;..\Base
+ ..\Lib;..\Base
+ ..\Lib;..\Base
+ RELEASE
+
+
+ 7.0
+ 3
+ .\
+ .\
+ .\
+ ..\..\Output\Debug\Cliente
+ ..\Lib
+ ..\Lib;..\Base
+ ..\Lib;..\Base
+ ..\Lib;..\Base
+ ..\Lib;..\Base
+ DEBUG
+ True
+
+
+ Delphi.Personality
+ Package
+
+FalseTrueFalsePedidos a proveedorTrueFalseFalseC:\Archivos de programa\Borland\Delphi7\Bin\TrueFalse1030FalseFalseFalseFalseFalse308212521.0.3.01.0.0.0Usuarios.dpk
+ CodeGear WebSnap Components
+ CodeGear SOAP Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ CodeGear C++Builder Office 2000 Servers Package
+ CodeGear C++Builder Office XP Servers Package
+
+
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/ApplicationBase/Usuarios/Usuarios.drc b/Source/ApplicationBase/Usuarios/Usuarios.drc
new file mode 100644
index 0000000..f4a15a0
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Usuarios.drc
@@ -0,0 +1,21 @@
+/* VER185
+ Generated by the CodeGear Delphi Pascal Compiler
+ because -GD or --drc was supplied to the compiler.
+
+ This file contains compiler-generated resources that
+ were bound to the executable.
+ If this file is empty, then no compiler-generated
+ resources were bound to the produced executable.
+*/
+
+STRINGTABLE
+BEGIN
+END
+
+/* C:\Varela_D2007\Source\Usuarios\uLoginForm.dfm */
+/* C:\Varela_D2007\Source\Usuarios\uCambiarPassword.dfm */
+/* C:\Varela_D2007\Source\Usuarios\uDataModuleUsuarios.dfm */
+/* C:\Varela_D2007\Source\Usuarios\uUsuarios.dfm */
+/* C:\Varela_D2007\Source\Usuarios\uUsuario.dfm */
+/* C:\Varela_D2007\Source\Usuarios\Usuarios.res */
+/* C:\DOCUME~1\Usuario\CONFIG~1\Temp\dtfF.tmp */
diff --git a/Source/ApplicationBase/Usuarios/Usuarios.rc b/Source/ApplicationBase/Usuarios/Usuarios.rc
new file mode 100644
index 0000000..169f997
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Usuarios.rc
@@ -0,0 +1,22 @@
+1 VERSIONINFO
+FILEVERSION 1,0,3,0
+PRODUCTVERSION 1,0,3,0
+FILEFLAGSMASK 0x3FL
+FILEFLAGS 0x00L
+FILEOS 0x40004L
+FILETYPE 0x1L
+FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "0C0A04E4"
+ BEGIN
+ VALUE "FileVersion", "1.0.3.0\0"
+ VALUE "ProductVersion", "1.0.0.0\0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x0C0A, 1252
+ END
+END
diff --git a/Source/ApplicationBase/Usuarios/Usuarios.res b/Source/ApplicationBase/Usuarios/Usuarios.res
new file mode 100644
index 0000000..bf4c1a4
Binary files /dev/null and b/Source/ApplicationBase/Usuarios/Usuarios.res differ
diff --git a/Source/ApplicationBase/Usuarios/Views/uEditorCambiarPassword.dfm b/Source/ApplicationBase/Usuarios/Views/uEditorCambiarPassword.dfm
new file mode 100644
index 0000000..a35428a
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Views/uEditorCambiarPassword.dfm
@@ -0,0 +1,123 @@
+object fEditorCambiarPassword: TfEditorCambiarPassword
+ Left = 398
+ Top = 263
+ BorderStyle = bsDialog
+ Caption = 'Cambiar la contrase'#241'a'
+ ClientHeight = 217
+ ClientWidth = 406
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ Position = poScreenCenter
+ OnClose = FormClose
+ OnCloseQuery = FormCloseQuery
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Bevel4: TBevel
+ Left = 8
+ Top = 154
+ Width = 388
+ Height = 10
+ Shape = bsBottomLine
+ end
+ object lbConfirma: TLabel
+ Left = 35
+ Top = 88
+ Width = 103
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Confirmar contrase'#241'a:'
+ end
+ object lbNovaSenha: TLabel
+ Left = 47
+ Top = 57
+ Width = 91
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Nueva contrase'#241'a:'
+ end
+ object lbSenhaAtu: TLabel
+ Left = 49
+ Top = 27
+ Width = 89
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Contrase'#241'a actual:'
+ end
+ object Label1: TLabel
+ Left = 19
+ Top = 132
+ Width = 360
+ Height = 13
+ Caption =
+ 'Si hace clic en Cancelar, no se realizar'#225' ning'#250'n cambio sobre la' +
+ ' contrase'#241'a.'
+ end
+ object bAceptar: TButton
+ Left = 234
+ Top = 178
+ Width = 75
+ Height = 23
+ Action = actAceptar
+ TabOrder = 0
+ end
+ object bCancelar: TButton
+ Left = 319
+ Top = 178
+ Width = 75
+ Height = 23
+ Action = actCancelar
+ Cancel = True
+ ModalResult = 2
+ TabOrder = 1
+ end
+ object EditAtu: TEdit
+ Left = 143
+ Top = 24
+ Width = 202
+ Height = 21
+ Ctl3D = True
+ MaxLength = 10
+ ParentCtl3D = False
+ PasswordChar = '*'
+ TabOrder = 2
+ end
+ object EditConfirma: TEdit
+ Left = 143
+ Top = 85
+ Width = 202
+ Height = 21
+ Ctl3D = True
+ MaxLength = 10
+ ParentCtl3D = False
+ PasswordChar = '*'
+ TabOrder = 4
+ end
+ object EditNova: TEdit
+ Left = 143
+ Top = 54
+ Width = 202
+ Height = 21
+ Ctl3D = True
+ MaxLength = 10
+ ParentCtl3D = False
+ PasswordChar = '*'
+ TabOrder = 3
+ end
+ object ActionList1: TActionList
+ Left = 136
+ Top = 169
+ object actAceptar: TAction
+ Caption = 'C&ambiar'
+ OnExecute = actAceptarExecute
+ end
+ object actCancelar: TAction
+ Caption = '&Cancelar'
+ OnExecute = actCancelarExecute
+ end
+ end
+end
diff --git a/Source/ApplicationBase/Usuarios/Views/uEditorCambiarPassword.pas b/Source/ApplicationBase/Usuarios/Views/uEditorCambiarPassword.pas
new file mode 100644
index 0000000..0f5ec15
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Views/uEditorCambiarPassword.pas
@@ -0,0 +1,101 @@
+unit uEditorCambiarPassword;
+
+interface
+
+uses
+ Forms, UCBase, ExtCtrls, Classes, ActnList, StdCtrls, Controls, Buttons,
+ uBizUsuarios, uUsuariosController;
+
+type
+ TfEditorCambiarPassword = class(TForm)
+ lbSenhaAtu: TLabel;
+ lbNovaSenha: TLabel;
+ lbConfirma: TLabel;
+ EditAtu: TEdit;
+ EditNova: TEdit;
+ EditConfirma: TEdit;
+ ActionList1: TActionList;
+ actAceptar: TAction;
+ actCancelar: TAction;
+ Bevel4: TBevel;
+ bAceptar: TButton;
+ bCancelar: TButton;
+ Label1: TLabel;
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
+ procedure actCancelarExecute(Sender: TObject);
+ procedure actAceptarExecute(Sender: TObject);
+ public
+ Usuario : IBizUsuario;
+ Controller : IUsuariosController;
+ CambioObligatorio : Boolean;
+ end;
+
+implementation
+
+{$R *.dfm}
+
+uses
+ uDialogUtils;
+
+procedure TfEditorCambiarPassword.FormClose(Sender: TObject; var Action: TCloseAction);
+begin
+ Action := caHide;
+end;
+
+procedure TfEditorCambiarPassword.actAceptarExecute(Sender: TObject);
+var
+ AuxPass : String;
+ AMensaje : String;
+begin
+ case Controller.Criptografia of
+ ucStandard: AuxPass := EditAtu.Text;
+ ucMD5: AuxPass := MD5Sum(EditAtu.Text);
+ end;
+
+ if Usuario.PASS <> AuxPass then
+ begin
+ ShowWarningMessage('Cambiar la contraseña', 'La contraseña actual no es correcta.' + #10#13 +
+ 'Asegúrese de que la contraseña actual está bien introduccida.');
+ EditAtu.SetFocus;
+ Exit;
+ end;
+
+ if (EditNova.Text <> EditConfirma.Text) then
+ begin
+ ShowWarningMessage('Cambiar la contraseña', 'La contraseña no se confirmó correctamente' + #10#13 +
+ 'Asegúrese de que la contraseña y su confirmación sean iguales.');
+ EditNova.SetFocus;
+ Exit;
+ end
+ else begin
+ if not Controller.ValidarPassword(EditNova.Text, Usuario.LOGIN, Usuario.USERNAME, AMensaje) then
+ begin
+ ShowWarningMessage('Cambiar la contraseña', AMensaje);
+ EditNova.SetFocus;
+ Exit;
+ end
+ else begin
+ if CambioObligatorio = True then
+ CambioObligatorio := False;
+ ModalResult := mrOK;
+ end;
+ end;
+end;
+
+procedure TfEditorCambiarPassword.actCancelarExecute(Sender: TObject);
+begin
+ Close;
+end;
+
+procedure TfEditorCambiarPassword.FormCloseQuery(Sender: TObject;
+ var CanClose: Boolean);
+begin
+ if CambioObligatorio then
+ begin
+ CanClose := False;
+ ShowWarningMessage('Cambiar la contraseña', 'El cambio de la contraseña es obligatorio');
+ end;
+end;
+
+end.
diff --git a/Source/ApplicationBase/Usuarios/Views/uEditorLogin.dfm b/Source/ApplicationBase/Usuarios/Views/uEditorLogin.dfm
new file mode 100644
index 0000000..38db70d
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Views/uEditorLogin.dfm
@@ -0,0 +1,1101 @@
+object fEditorLogin: TfEditorLogin
+ Left = 790
+ Top = 387
+ ActiveControl = edtUser
+ BorderStyle = bsDialog
+ Caption = 'FactuGES'
+ ClientHeight = 241
+ ClientWidth = 385
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ Position = poScreenCenter
+ OnCreate = FormCreate
+ OnDestroy = FormDestroy
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Label3: TLabel
+ Left = 24
+ Top = 108
+ Width = 39
+ Height = 13
+ Caption = 'Usuario:'
+ Transparent = False
+ end
+ object Label4: TLabel
+ Left = 24
+ Top = 138
+ Width = 57
+ Height = 13
+ Caption = 'Contrase'#241'a:'
+ Transparent = False
+ end
+ object Label1: TLabel
+ Left = 16
+ Top = 72
+ Width = 94
+ Height = 13
+ Caption = 'Inicio de sesi'#243'n:'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clMenuHighlight
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ end
+ object JvGradient1: TJvGradient
+ Left = 0
+ Top = 57
+ Width = 385
+ Height = 4
+ Align = alTop
+ StartColor = 2971346
+ EndColor = 4828405
+ end
+ object Panel1: TPanel
+ Left = 0
+ Top = 0
+ Width = 385
+ Height = 57
+ Align = alTop
+ BevelOuter = bvNone
+ Color = clWhite
+ TabOrder = 0
+ object Image1: TImage
+ Left = 0
+ Top = 0
+ Width = 385
+ Height = 57
+ Align = alClient
+ Center = True
+ Picture.Data = {
+ 0B544A76474946496D616765F6750000474946383961C201FA00E60000FFFFFF
+ F5F5F5A92824ECECECEB743DF48545EF7B40DEDEDECD452DEAEAEAD0492EDC5A
+ 34FAFAFAF2F2F2BC2A26B02724E5E5E5E26236B95B55E1E1E1F8F8F8D95532FC
+ FCFCF5D6CAD4D4D4F5C8B5D1B5B0F0F0F0E66A39C23428D65131EEEEEEBCBABA
+ FEFEFEF7B192F49366CB938CD34D30C7726AC63A2AE96E3BC7564CD26958EEB5
+ A5F9E9E3D7C5C2C93F2BE46638F8E1D8D2867AC9C5C4E05E35C03027B82725C7
+ 453AE79A89B9322ECBA59EF7A47BFCF4F1FCF0EBB93A36D8D5D4B44741BF2D26
+ EEE2E0A22925AB3934A7302CFEF8F5FEF9F8C33B33DB5D3DB52724B12E2AD251
+ 3AD9CFCDE47D60FEFCFCBC7D75BD2C26EBE9E9D6D6D7FFFEFDF7F1F0FEFBFAFD
+ FDFDF3F0EFE8DDDCFBF8F7DFDFDFDED7D6D45A43F4F4F4E0E0E0DADADAC94E41
+ F9F9F9DF6648EBEBEBF1EBEAE4E4E4D8D8D8EDEDEDD94E2FD95738C53729EFEF
+ EFFFFFFEF3F3F3E2E2E2EBECEDE8E8E8F7F7F7EFF0F0CDCCCCF1EEEDE7E7E7F1
+ F2F3F1E8E5E76035E86B39D1D1D2F2F3F4EEEDEECF3F2AD2D0D0F1F1F12C0000
+ 0000C201FA000007FF800582838485868788898A8322173C5300919293949596
+ 9798999A9B9C9D9E9FA0A1A2A393560C717F6763670D710C56A4B1B2B3B4B5B1
+ 8323B887B982BC05BEC0BABDBBC2BFBF3A193046B6CCCDCECFD0D1A50C011F70
+ 1075636B6D71161621E0D2E2B4E02156E7E8E9EAE5E3968BEFF0F1883A8D3BED
+ F7F8F9FAA2A601677513DC9481A38D5B180BB0F629BC64C502030A7102489C48
+ 31401C0A0713EA3336AC23C78FC10C8504590CD808643C16AA5CC9125AC30003
+ CA68D1E265421908633E18D4D8529F290A5DFEAC3933A0A8D1A31FFE707BB54F
+ 9ED3A78B4624EB49B5AAD54DFD621ED8BAD58B9B6C6B5A85796525C4D567211C
+ 024D05A70E843270FFE3CA850067C0862EDDCAE283CAB76F2F1130CE0A1EDCF3
+ A556AE5D05D649F0A141000A0C2C10B665254C805409EA947133C18BE7CF9E27
+ 88BEC9F84F808366DBF95DFD54C785296C26CB9E2DAEDF3F2D880FCCD4127031
+ ABC7DF688B4A4BA1CD87CC9BBDEC5ECE9CA6CD3A701ABB4A2D8EB5F577272F14
+ 7122BCBB77592FCF40505ED38D4037CA0FD88490C02EDEC87ABF33B410A6CB86
+ 319A95E35E0E9A79D7E78C75414170D22462006B072A9260010B1E825211B1C9
+ 27E18498D8564768742590001C654C3053796580F51E4F1486704A030370881E
+ 6E5B3967DE8B9C75C6E287E6E1F44737D55DA7E32E52C1C00377140629E44B1F
+ 5CE8C5408DB5B1C6FF186FA597581DEE0D489D7CE05810C006097488988B37D5
+ E1A59710BCB5998C5B0EB4018ED10CB2608387ACA9669B6F1AC2A6200D9E944C
+ 1542E639615A71AC0107676E24D0401861C4A1247E7079A8DB04741574DA2B53
+ D26662351C7AC11588D02530C651638CA1615B6FADC8951603AD110042D0ECA8
+ AA21F4C050849EB07AC7E7067FDA344617AF3864E8922A5ACA9B798B49170689
+ B3595964194E6AE14686037CB0C6061BFCF107B46B7C4094A76D71C6E2015E45
+ 776AA4B53028EE81E48E6B6EB9E89EAB6EBAECAA5B0032F6C42AAF6CE650F047
+ 029C95716B59E09862E87DD7ACB8DBB28CB502293B839913C01A00EDC75B8839
+ 6DD0461B5D54D445FF1B0D48BBC150F84140E6568C7E100003E0CE42679CE29E
+ AC72CA2C13E2A69C28BFFC4B062C4032EFCD67D57B6F876524D0C637E5985868
+ 5067B4D5A1AF006E13471C631178D5A4D6B871E9570557BCF4D5584B74710319
+ 7F304002A1A6A76C1D67E04AAC2CEBA6DDEEDA6AB7CDEE0880155132CE742B64
+ 4E180D8CD161A07F8411B4390D3D74D97110B8B15F4D21367B1744929D654535
+ 855BAADB57EE5D440146845E0ED1D25A6F3DED0763043CE3047588EC342D32A7
+ 1EF3EA2BABDE7A21705FB083CD75D7BED0DD79EF0DC70614F0FB779510357046
+ 669CE977A497496D70EA3973EB034E181B5CD8E29170B0C27464D833A03DA161
+ 5C1E5144124DDCC0FF50C46F1B72006793E2F6FA6CB7CF3E8376C280A7EDF43B
+ 5F59DE80C2F147EFBF07AD56000D009D8A6612104611447990499FF318D005BD
+ 4DAD7AA6699A37B497BDED758F735A9B98508AE6B119B9010E6D600033DC47C2
+ F795B05DBF004CBCEAC7C271E82C4B36D1DFB0FAF7B78614AA0DF7A983E166C2
+ 2D0336E6348D5B8905FA0410AE7CE50C6D78943796C8C4EC656E7301B818C6A6
+ 95A20ECDA80C1FA040F3426100727591415FECA217C70846328AB18C683CA31A
+ C3C8C60421830555D8620BE7188B17022A017DF31D0DFD770AE3802D39B8395E
+ 7BFE2020F8C8112DF6FAD37E488744A631511D4C748805A1D805298EAF8A8A52
+ 8FA098823A137AF2FF84EF938AEC8044C752D6C28ED4CBE31EFB674343798D43
+ 1EA2498D08B28611EDE3710340CFA26C3432F8A80392137448E6302845A1202A
+ 3D5E80C0194676484E88F199D08CA634A749CD6A5AF3406F7442334DC9CD4CD8
+ 312078E4DF2A69D89038D80793DBF20A4E6A09996DD682017FA8038B8E84C791
+ 2D9179BF4B47301930CCCE4D917002FBCA1AE2A0C04FACD18C6D7C661ADB5846
+ 851E74A1647C1760E2D8CD8A0EE77E7A0BC8EEC4394E1AEAAA0D7F48D15BC8F4
+ 1CBB180452D2A8D707CA60C4D201311DE18844D0F4E910615E302295C4D80686
+ D7416EE9AB0B418CC535874AD4A256B309B1939B4597FA0913B5610085FBE099
+ 80D651720AF3321CFFD4A52C43543057147416698189D474D3B31BF9D27792A8
+ E1399648C10B4EA498A0D321D2E0D00092CD62A80DB5665EA3B9D7315ED34E3C
+ 981F5307EB4D6A14893375182842AADA51FA5C89A7C85A0EC174E2557E35E37E
+ 7FD28D17C8862B6FA023A6699DE95A9DE8D6286A7028D798408B20B0062DBAF3
+ 12468DED350920DB2EC68E07AF252C37ADE4A70EB974B1E5680842F458557F01
+ 10A05A7D4E4E4C33A0F8D462880CF350B74CA5BDE15A76126A156E5B6F6A5A9D
+ 2EA9702C2AC319BA91DB4AD4F6BCE8856613DE958C65E8F6BD941822AD6A643A
+ 3DD6D4908CED9724E320BC3F1A6F3D1004627931C140A87AC85666F52C5AB12B
+ 5AE14AB27B10C9A0FF7707A0C3F00E6079B230006D69DBC50D6B588C1CFEB087
+ 3DDC611183F8C4252EF1884DCC61418820032B842F7CE5ABA2D2E5858FDD1BCB
+ 59F36B0E6AFCE1389A91116E7CE89883004D1661F843A5C666BDEA02371CF944
+ 075BB7E73D9C8A6F5A458BEC017AD686616538BD6046EFCC5820E332D31858A6
+ 7A725A0A15458B60E460F935EEF83A66B84591E60C84F4EA80654AC458226929
+ 35C52739D7BA4F7E7A4FC219DB29D814C5B7016578C59066B1A4493CE94A47FA
+ D21A7E5760CA3CE385C132B1372E87430230C506546C2CC4EDE85A2D631CFCD4
+ 994674B10B70F61C02C8E9E7834A73B2A0594968D26ECECA535474E494B5D1A0
+ 8A42C5964671A59FFF19624C3B7BD9AED90EA7757B0A3F2156B17AFC09A9B996
+ 448BE878B83C1EF5A13453BC992CAB2E7771A47339814B99F83401E9A6A08279
+ 4DE8094E929853FCDC31790307C53E5AC3047836A4039E6C81175CD23D8AF1B4
+ 2DCADB4F635BB4DB035F4EAD0619AA325698FFFA5A937AB82CB018ECAB94C065
+ 9D9309EFF74466DED9AD3705F9595AD3664CDFB0E44D624F250B83DBFCE037C7
+ B401EC54B3853315BAB59AB99A67EA0D88943A89154FB5AA1DCB96CDCCC82B8B
+ 61E7E932D1EE40B227DDDF4679BFA43CE57B5B248A9E839600AD48BA818A3016
+ 014FBBDAD7CEF6B6BBFDED708F7BDA33AD0357F97CA90DF7ADC8E0CC4AFA00BB
+ 62DEAEAED2572938FFCC846DC8109398120BFAB8318CFCEA492494BC7FC9757B
+ 4F32C219E4DAB4381673D2EDBDE638C739C1731EFAB96F185E7767781CE67BBE
+ A1E7F3C114907012D5CDE3C059A6BF3A8CA55706D255D4540826EEA6A7D2DEAC
+ EB5F36F1C1C394F895A935BC20CBDCEC35DFB0DCA74FFDEA4FBF0934A35DEA4B
+ 69255AF9B66C9149F9EBD90CD23F985ADDBB2E2E35C6879C5806843461111055
+ 430EFC4022C93197D3F1C969CA56E473B7BB2FB7316BF03572C56FFE86760067
+ 7D6F97806AC780D5E7806EF72E8EA07DDBD74267B62C03D06516471F97835F7C
+ 14619504786EA63DE9B74A0D113C4BE2162FD2195F511711E40D911207671059
+ A4024178917FD813FF49FB847C55F65657B6795E03362B22558E867628A08048
+ 9884D6570037A01D15C87D57A222109081A8D12FAC766A7C07380F86535CD300
+ 919785E3245C37948280541EECF11B45280914B006E3616E5072176E26793535
+ 6592644110F63D60873189B606D522528C465707117D4A388884E8765291124F
+ 38471738851A185CF5C135155371E0564382536A9168649FC558FE72282AA27B
+ 93A53C19010EF6822FCAC128091016166139FA775F2BC7723DA87C9A472DD6E2
+ 6AE9F1539C440A697784BA4800BB1870BBF88BB9188CC07884BEC88BC6588CC3
+ 688CC4788CC6D8042BA00C7B9688F2D17D52380083627182D33912E14816D72F
+ 86063E60B78D4D33FF78ACC44FA4B60129927B047413E85648FD502407767FDB
+ 781192D78ADB75875783681AB331D6E25FBAA14CE4258885389085C85E3D278D
+ F473668C628DA8165C6A614E2FC70D151765B60791D2327B1E585CA660196C01
+ 5E1F723CD6C83496315FDC423984348F98638FDC838F5F977989C68F44912D81
+ 9458FC5373C97893CA989338B9933AD9933C8902B1333B08693B79B7906DD05C
+ 35E4585DC06D78713D5AA75F43833114231190B17FE4F83B82A368B9E719BCC1
+ 1E1F102DA9504434C11EF13711AAB8924FF48AFE148B02E83588124B811242D1
+ 28093FE99376599778799739B9732BC002EE35947BA209D4C0309CC18849874F
+ A3555A527489DD68FF0EC28479175349DEE67A7B143811114088821EE5E12570
+ 902D92432A64A3148077359A539ABF068E79186C02C831FED595E305729C8002
+ BA289BBC489BB2799BB6A98CB6899BBB398CBD599BB3199C3AF99B06904D8029
+ 2169815296C05BB937850D7098BFE48DA7B094D2E218B4D777A7B06DE68717A1
+ 587B9B0864A2F291FA712964A91466499A55C639E09853CBC787D51284CE3736
+ BC339774099CF6799BC3299CF8B99FB9E99BFAD99F77999BA2F42AC759155562
+ 68E1175FE6F41E30580AABF727CB320609E66043D74ADD6535172178BFF3908B
+ D994C437898D359214A64BB9911B63A30D5E2899DF9335A8C99E7A382D6D398B
+ A9B51F7C1306B580FF021C709B392A9B3B8AA3BCF9A33D1AA43FCA9B42CAA33A
+ 3AA448BAA34D7003198088055A1816B01677E16593C00028E228542A09780343
+ 3D038A27F748BED36B6E254553994049F998C056A61919861CC9247556A28861
+ 130970061233956679A76F65499AB779EE491442283603D137378AA4848A9B79
+ 50A8889AA8B279A885CAA8F80937CA40814F7A0FFA959D21D599224322143083
+ 54231D7016066DC024726A2A46765F73F894BA426AD5F985D6954F82439DE699
+ 74C515A541E16ADB322A3C444067182D14238216C39E5D282D7CFA01C44A805A
+ D2225FB17708330A2870A839EAAC43CA017990A3D4EAA3D00AADD55AADD8EAA3
+ DA6AADDEFAACDCFAFFAD28600037A04293EA137EB794AF5438FA823E94100709
+ 508A5C956B0801AA06D6A58FA25D3785119EF537180776A3498FE1478985B2A0
+ 53D990ABA42B44F396255A1E99A42C671816BD9AA72EFAA2FB18A3C31373A3D2
+ 2DBFE17BA370A820DBAC3EBAA8221BB2210BAE272BB2E0BAB22A5BB22E6BB2DE
+ 0AB3204B004D8012E78A0F26B22BE9681E9EE10663E0AE9300AFBBB199DA2020
+ 8592371ED3A5EA2649101199DCC82F34A53D11A68718D998A3F510E6346B093B
+ 9299F9315303266F0A75736A7EBD1A821373B6C17AB1EE692D22F5A61B7B6E9E
+ 0A9B9630AD79E0ACD3FAAD754BB7752BAD76BBB7758BA3772BADD41AB884EBB7
+ 829BB7820BB886ABFFB777DB048DF09737DB0C8E89B5E3566E5C3101FB420901
+ 900033627F6F282D5926A7CA137E81137B7A78834DB37F33C54F16E98581F794
+ 5562195A3B7E00F40F6E8BABEBC11803F8279F79676B40B667AB87690B2DD4F2
+ 9EAAB021E005A72D628ADB604FD7C5097B0BB8D92ABD2DCBB7E17AB8899BBD81
+ CBAD843BB879FBB7897BAD742BB848957D91EB0C9B483E2AC8955CA91E991BB4
+ 9CFB213CA44E9D89BCE8A1B42453A9B147A695B434B24A7458BB9E80F7BF0EC9
+ 4F60080E0FD106CD47A25B22B694456AD63635B19614E6E785E2B3A7305ABC6E
+ 69349DA1BCA30220783622DBC401824BC2E36BC2D88BA3283CBED34AC22EFCC2
+ 307CC2251CC32ECCFFC2D9FBC2742B064CE808F479BED370254C7234E41110E5
+ E6B3402B0971300607661E42561E4CAC1CA5C24CAB4B7E2F676A8F6195C6C7BA
+ AABA9DD7195C30D53FF63A6CB73A39038167F6346AFF20393D341039F12CD539
+ BCC5FB9E5F932D99A459EDBB255B856E40D409835BC3348CC37E4CBD33DCBD28
+ 2CC8E3CBAD30DCC785ACBD0400A990EBC3A160999791223BE4C45F3252CAF2B3
+ 24120703D0195D022A961BA7D91041F855BA10D985185A8F43F73F541B875669
+ 82E6D027E361A29BD91E08848D5D10134E529299B20ACE42BC7C48ACD6722D1B
+ B2BE1F2C10712164251A43212CAB9800C32FE0C2D1FCC2D15CCD1C30CD892CCD
+ D98CCD896CCDD47CFFCDE0FCCDDC9CC852A17090EC0939DB6A01632900D6C63C
+ 851E46BCC99D6C8A67C087452357261AA14AD39D930B82C13B954E996D68EA83
+ 033CB05EECC5D4201EB72A4B5E699D19690589842C88B17BD840100370066740
+ AC185D149E52CC983CD1A4010799A18E25FA30B1868A817809355CCD748BCD2F
+ 90072F1DD332DCC2D23ACD2DFCD2248CD328ACCD83CCD22B7DCD341DD424EC8C
+ F273CEA0D00F58D2418BD433CD62C5C22357F1FCAE9D4C39D659BBB0B4CB0F83
+ 6E5F18A613B4BF2F679E4E794F90648EF956B5509B898193CBEE7629F7A7675E
+ 0C347937C666481722AD219FD2166E312658AD5C191D84EBACBC0F132CDC3075
+ 9100CED67CD82F70FFD886BDD88ADDD88CFDD88E1DD9906DD88DDC5E46AD09C9
+ 197BC2C321CE0117D01131D60914BDE5159A2CD535027E3604C4A06245CBCB7B
+ 49C19D70B6911171C1002DB020DA63FB7BB6A95CCA95DA402C352A519CD232E5
+ 984053195D600D1D52C78B621E7011266112173CABC69A756E110384045838CA
+ BC25BD911306D1AF9110D3860DD3300DD432CDD2E52DDEE61DDEE75DDE8C3DDE
+ EB4DDEE81DDF2F8D02632658975D0910DD05BC02480433006E4CB678416A5143
+ DA471C099C5C9819787639DB001BE387DA4DDDB916A615E9724C99A193385A18
+ 37DB67EB48FDD2DB50F574CAB43C910238CCA32B01C4C1632C9EA2D1195C29D7
+ BD51175F099602E8FFA779DDC1B42C1067C85CF90B0089DDE33E5ECD3F1EE442
+ 3EE4428E07441EE4467EE43E9EE489CD0162B0A4B273DF94D063A80055020375
+ 63A078FE04784F8D2C511DB4B9444FCF6916C411997356800D9C78B06D5D6278
+ 99C26AC51FAA6050AB942F277F1D0E38090D01A353077F7076534EE2BD664EE8
+ F847CAEDC1266AD204F195C2BAE830BAC1E4369EF9FC6752C2E390EDE3938DD8
+ 3D6ED84DDED896FEE38CBDE9950EE48D0DA9042AE5FDA0248B6667BBDA6D5B2E
+ 116109CFA50DE6F78B47DDF010F6E12C4AA1536DAB5A710A313FB478072ABBFF
+ 9CCA984874DDA3351C6E0E5B67250ABDBC7CEEE77FEEC5AD74EBF65B3C907EE8
+ 5CC22C8ACEE88B2EFF8B03802DE466E313FD4148E465446EE411A0E43E9EEE4C
+ 9ED8E97EE4EFFE02ECAEEE45DEE3F1EEE36200376466EA96B106C4E37E7441A7
+ 162CBCDCD66D61E9E5B18EC4B924BAE1E3EF6132CA6E765CFEB8B1A4E1DFDC09
+ 5CDA157BDAB99D93C9E6146AC018DFDBCDBE28A056506F9DAE97143A5E021731
+ 021A35F17E5DA22119FD2CC45BF3367FF3FDA882294E3D53C5E3F4FEF3ED6EEF
+ 4ACEE4F7FEF3F2FEE345FF026240004CBA03F67DBEE5F4D42BA24ED920315696
+ 686FDCAB2105D5096FE0613E10FE1D573BB490CF1919470B6447B32D59EDDFF8
+ 7756A69C6FAE2BB0BAF6D68829F27A3E3DCA0454F864094949C51B10841E2D26
+ 71F1F0D04110190DFF96177BF3C44BB6130152710548131DE2221401949FEE96
+ 4FF97860F9F24EF947AFF99EDFF99BFFF9A20FFAA35FFA9C7FF9957FFA2F6000
+ 8D805B903C290EBF43E756CFD639DB19FCC6A61614234AE09A1AE61D770DC7DA
+ 158C6864E6784928FEC15C85672735E7D948A6B53D8E0D165C760FE2542878EB
+ 165AFA6B5A42E196D8B221F55BD79BD22C347FF3EE59FED0C2F859E3F8A1C3DA
+ AB7561937FF4E84EFAF21FFFF42FFFA31FFF9A8FFFF06FFFF30F082F11828483
+ 2F4D23193046008D8E8F909192939495969798999A92210C011F756E135A5E6E
+ 75631B017161AC716D1B6B6B1B1B7FB50D0D6D6D7F03A1A563015690140313A5
+ 6E65A25E5ACBCA07FF1310630D141656160C14715D7F6B6370651307E107A46E
+ 1009037F6D710C5621EED50C6171015D6D0DB56D5D01610C16FEFE5602B673F7
+ CE5A973310B4842305ED4F1C0AFC0086A05430DE3C7B7F60ADF9F0E18C478F1C
+ 39C69235ABE4AC912669FDC1A5EA21056CF3B47DF0062EDC843A670230001021
+ 029E9E83800A15FA7328D0A246870AFA895450D2A34F813AF549B5E9A11B1958
+ 4CDCC4B5ABD7AF6031596170B0CE282F65CCAD51D70F9EAB35673E90ACB532D7
+ 065E6E7C017314C2429704CABC286356AE4E9D325E0EA08D368DA0356C0DD60C
+ 800321AFC28513CAC019B3765F3F6AFEE2050860EF563E5510F97D1618B0E2C1
+ 840B17FF6999BAADFFBB4915E58DAE77EB1EDDDFC06BA59C05DCB4BE380F5929
+ D7DD6000849ACE20E4B4C0B350A19E53AD4B0D8A9DEA54A14BB907FDAE747CD2
+ ECE6C3BF1053002B8F2961E3CB9F4FFF91A733A148693EE390C2E7D0714416D7
+ 5CB6D88557290304F0880571AC019B385A9493C007198D5186425E40238D05EF
+ 30E0E1451B9C91C061A340E886291336A08A87A079A81B3DB9C4881A8BFF0814
+ 42357E21741943633884DC8F10D9B61524EFC0130636BB95D61B5DBE05579C69
+ A78D06646AAC20D9007E6E8873D3073AF1141550337C09E6984285696604613E
+ 75669A62AE19159B623471C3053BD467E79D78521407288369B64617FE59139A
+ 870108281781E9BCFF32462F6EFC124C2771FCE18D388AEDE7D0350D24E00686
+ 1AC601DA3FFD30709164245E160E5AE69CB14117AB78F8998B17F9D600ABFE85
+ 5A634006E9185B43AAF42A6590D4DCC6C98DA1C913533D31C6D8DBB2CBC6D8C5
+ 712D21F7D2B42F2147DA95A168090197D419C566996D0EC5A69B6782DB53B962
+ 9E8B6652E86237C20A2C54015F9EF4D61BD68D61487A969F3A718823A801C275
+ 2881B770D3CB04094803D94C88693141399BADBACE8D1464BAA962100CD04018
+ B70AE48F3C6D70E38D28A64608C16614D24AA30547C2888B3E41BA2A288E64E9
+ 3A4E863DFEE82B6DA1B64611B1F1C0E4EBB344174DF46848CF3325B5D52A4DCF
+ 3D586A59C707EB78FFB9EE0C58839935D6E45E3D66D7E8A6C935D85E8F5B369A
+ 5B93198118EFC66BEFDB7067D249176324845602A944F40FA86114FAC1000392
+ 444BC175E735011C6B34B0C1A21034FC0C1CFCB11A915B7F68AAD0963AFDB777
+ B1A4DD35E237A67A91591D906FD0460081F23DCFAFAAC96C6B185D38B723CEB3
+ 396DBB4B930F194941D65469ADEDBD02FFE3F0D2BE5425922E678497B6DC0200
+ 76516B420F261E664AAF2EB9D2574FF60CD4A3097DF7D1878DE60B2824B28313
+ 71A7AFFE820138378A66798726A8FCF234F077E07311DE4B86708C5813397540
+ 876770B5390A54EE626E401CEA6CB51A8F89AA0B91E9C6371263A2930D2071AA
+ D05BEFA8E5AA0E5AFFC3456D90DDAE7236BCE0052F3912A9C48D681634A6C164
+ 692E8409D3ACC59B8CC4627936995AD5C6C6C31EFA906B0BF821108548C4221A
+ D1888398539DD6C744B831E00F6611CCD432C7C25789C67E8013492C6641B8CA
+ 08E618DF50CC31EA9080CEF48320FF0A8827D600872C69017E0118D407A9E140
+ DD6CA31B8D2BD1A9209680C8B50A541D0C64202910C207F1A876D69252D258C7
+ 229FE166851F3C5E0C2739496B61A42437CC964DB61547E7F5106D66DA1A1141
+ 89441F829294A62C222A45393602ACE0024568A22CE915860F34CC0D09F843EA
+ 04C5408BFCE16F0308C916556230CB086630285A4BAB3407AAD050A00BA000C7
+ 1BC7D00506F2F29AFF4103D119E0D00B4A39CC1490FB833E34B8B750C5C35547
+ 6A40DD66D710E2995078C00AD6CF08188F2335AD78337489F19A568F8CA48454
+ 59CA21977632C4B105116B072DE80C126AD0853A3488101D22431DDA5084F230
+ A2166DE844311AA715C0609620A5CF8D02009852D4610DFDB2E67F44F387338C
+ 218B0353C90712E0456FDE4463EBA06333551A8F10D621315A38E93A5824485B
+ 0DCA8E1FA81BE84227A10BAAA856D8FC203A03642176F6285AEFCCEA8F54132C
+ 611109922EB2E73D8987CF6A8DE6922839090EA3D33C2438D4AD191DA25B8308
+ 578ACE60AE0FCDEB46EFCA35BCFE30A11855685C358A3502CC8911214DEC57AC
+ 90AF3AF0A8019E92FF1F4FE5D1D297C6458B321D515E2074B70D44D6633B2D6A
+ 002A77A103E012B22B15243683F6B4A4520674E2280504CC91B287341257E6AC
+ 5F5547E8239D094FABF16C8DEE1A81469A1D8FAC65155A3F35925658AC157304
+ 8DA874F54A5D882E60BAD2BD6E7517AA5DEB6277BBDFF5EE7691202718F060B8
+ 8A4D2F45EE038152283050AE23AA8B46EB52C05D7624B598694D17528E3354F3
+ 5F922DAA6AB2C146706468006D9886548B2AE096E94244A1D02361C82897D34D
+ 8E9E165167696FC62B9D29F2C33B5B9DB41AE9D5AFE2369B649DE16EEE3192E6
+ 3A57936CED6478C14BE319DB58AFDDAD6E8EC51BDE1DCF806D1E8DA57A874C09
+ 2B18B08D111A431BFF22A2525EB2D4A563F888306731D36EF257A8D48187933B
+ B81CDFBD263119E2568019ECBA6265E3979FB34C6CD3B2190CFE51751AB66A6F
+ 7FA7D53AE34E48E8252E3DC5BAB4D5F106165A1CA65A61BCA5AA5DF7D0884EB4
+ A217CDE8463BFAD1908EB4A27F7C0378A18FC8987E84153EF19C0C9D61A84D66
+ 60DF2A6BD9CBCA651622AA4CC9CA70D238DEA897E8ECF2713780E4039421014B
+ 5E2D993DE8220AD0E38E3485EDCD463721D3AD02CEBBE5F0557D6B673B278746
+ ED78E4892569D66BD9B0C52E0628F3645C631CDFF8DBDE7EA88FB34BEE70F778
+ 011168820E32B0C44C67DA2F0340CC4DD6E0A9A2AE76D4501E807D43826A9A5E
+ ECCA2865405FB61CFF56E5B83040BC30B0503936E640CA9A155C065195857D33
+ 700AB056194EF621DDF9DB8E9FF0D9B699A7719BE6B293607B382F0EA833A6B8
+ 93485720D12F6774CC1B3D7345A7610133AFF9A2757E7344BF5CE78A8E799C44
+ 004B77BF3B53C540982E172C5F733E790C2FD537480E95EA7F8FC31428F597D3
+ EB69F0694D69B4BB3DED3AAAD8E02E37FD1ABF4E6A1DBCC8D4542112321AA71D
+ 5641BCBA102F5291D2E2EA40F20C80DC200982D76E31CA07ADF267344FD2397F
+ 34D0612E699C377EF190AE79BA5F2964A3ABF78951BCF5C6984E5427E31BEAFA
+ B66FE0B6F99C92615D27402B38B55F38BC2ED01AA8D2F92FCD38AFFAE538BC65
+ F5904CB0A1438E93FF7D4045C889336F39DE6C8F2B2DEFFF89F6B0E0E16BB49E
+ 7CF029971AD55A7EDD9F3BBEFA8EB7BEF6B37FE8ED637FFBE0E7BEF7C54FFEF1
+ 875FFBE9263A622DAF58066CC0B1CF4030C3ED2D6AFA823EF420B9214DF578F5
+ 56FBEBA8AB4756C1134265601370B0010AA66B82F470CAB180BF06619B052137
+ 710690552871D76174667CEF94816405715D352C2C431A81E76283A76D9BD43C
+ 89677DDF477E2B787EDD577EDCD782310883E64783E2D751305005ECA75861B0
+ 0617620A1FD0051CB36BB9657F51877F973519A56722AD26705A564F5E477CC7
+ F70966310E65A06450554EB4C78010175FD8F060BB4741B6964BFA207CCA3667
+ 1AD871BF835CCF06FF1003F108F8F26BCC458225F85C3AB4131590873FA7877C
+ D8877E88737908887D28887E58887A48888768888A18888B388815D05117A083
+ 3B08523DF8832C477BF1F574472875494819FC1721FE472C527524C87577BDB2
+ 0109704B5323399A43665C6876BD267123F21CE1804B7F62811B764873677774
+ 172D6C986231F381C4C520BA308782067D84B76DD491888CD88C7BF88C82188D
+ CC088DD3288DCE8888D7588DDA988D798883F332894D544B9B9240018789F1F5
+ 799B28751CA1849F787A4E0848A4C86C4E8334A3F14B48162165A40EAD43845C
+ B71C4CD385B1385AFA951887B31610748124248FC5F78B0CD9861F6801CFB40D
+ 98858CC361822B37FF7D00D0881AB9911CD99179E8011E19927A485E59B17EE0
+ A83EB58418706445F4E721BE466AA117931E8147D0D17F59278AC5F24226448F
+ 4803418B535A37254EC1032CB0D68F5D472D0D1856CDC746595290F96086BAA8
+ 9069D890BF683CB7252AAFB011C7489198F45C9CB48C22199662399664C9876C
+ 931527C944E2D85929B56B1FF492F916939C884756078A01879339093C3CF92C
+ 30D25266E1306A810BB7A03245597B47394955828B0E8338A70395B423850B49
+ 950C591B1F532873C89515698703050048F091150092A0F999A2199A208906A3
+ 799AA4899AAA199AA6599AABF99AA9199BA7D99AAFF988319015DF98966F9392
+ 77331BFC28557079FF7F72191767A08496B10C40E86A00E64C3B438F4613236C
+ 7421110207BF07412F831A49B980B2462D4B032BB1F38378A30F7F8090885477
+ E6698AC7279993C90FF2A00DCF87995D49685F0900068004B4299B20E9999E89
+ 9FB0599BFDC99F00FA9FAF9906727201EFA19B70B396B7E61043E8962E698431
+ 197503E35AAAE6302C87976F59773D5934C9E27AA9A80C98E367CF920FC7C155
+ B7E78FDCA94FEC491A55854B42399EB9F898259486BEA89E6CC89DBAF09EF019
+ 7D02553524600262900615609AADE901466AA46870A44ABAA44A3A9A46FA994F
+ 1A9B1E90A44C8A9F557AA5589AA54BCA0505DA6E084A4BB6D49B9EC18F0F0A93
+ C3290BBDB101FA85FF0C9AC12D18DA3B896434C8922CBA9070A42054B02282F8
+ 90416587A231D40A01808AE3984BF5489E5845A3E969A3C0F8233E29783B1A9F
+ 85379F1A90034D4000421AA0982AA0991A9AFBA9A99E1AA0041A64B9F9A576A2
+ A078B30FE6285FC17984F9B701D7590F9E030770800E63B739A0E26BF4403474
+ DA1BB9D052DEB00C6590132CA21BA5112579D7800CF8A7EDC994D3A4226017A3
+ ED34A3C557A38A3A3C24D7A8748899165968D4C104931A036280A45A9AA554BA
+ A4E5AAA4E77AA4E93AAEE2CAAE53AAA5EBEA015C10031EB503A34AAAF3C19BFC
+ B28F44089709107503323851B262FE244ED3B09C471513749A0BCCA20B49D55E
+ 63B864AF428A4962FF1CD8A91ADBE942ADD006D1F44608360F302A67BB789E1F
+ 56AD93A95C8AE3A88FCAA32B476FC1E003DE2A02E0FA91E65AA52550A5F17AA5
+ E57AB3EDCAA450AAA43C8BA53B6BB3471AB4430B922AD0362689AFF9FA01E3A8
+ 400D4A666F09A1015B17039B9E2D414E9BE392AEB0ABCC720BDBB04D9B72139E
+ C50EFF62117A9A0E25DA3A198B94A27225A557060856A8D09A9019E86C268B5C
+ 5128822AFBA8DB9A31D504005F60064CD0021A10030430A4497AB38BEB01416B
+ A4417BB392FBAE8CEBB8963BB990BBA48F4BB498ABAE96DBB8930BBA97ABB9A3
+ EB016930AF1EB5B44C1B1695088A41C8AFAEB8AA558B0BB9C0974A4325F164AB
+ 7C03234AB22CBF41FF65BFEA69D5341160652C73AA0F7C6A9862F5121FD21C7F
+ 19ACACF2AC222B955A95B7374A72399AAD5C69912615840C20055FF0053ED002
+ 2B30B343FAB9968BAEA43BB9A18BBE9B3BB49BABBEECBBBE94FBAEE25AB9959B
+ B9F97BA42A50692C7069AB1B1FAD6B0AFE3584B0EB70C1194C5B640BB46BBBB4
+ 11332BA5BBEDC9B0BE0B1C54F6A177B3311341409144B1F48871C96A956FEB3E
+ 68E15FF5988A720699C263BDD78B3C2CA6BD14699100941318E00366E0035B60
+ B8E09A068E5B023EFCC33EDCC3920BC4445CC4462CC4420CC4486CC44ACCC43F
+ 9CC4471CC53EBC04FDCB6E9218C060E17E09117F09E62244D83291211225C1C0
+ 0D4C8FC817C1BA8BFF76A5E12474711275937453D40EBA9B9349837146793C5D
+ 88709D167B208BC2BC35B2E8C9C22DBC3A2FBC95F0699152330018B0C852100E
+ 3ADC045CB0C4685002933CC98E6BC94F4CC9928BC9419CC9979CC99CBCC9433C
+ CA92FCC3987CB9981CCA9FBCC469A002AF745E589CC550241857B821E704900B
+ 380F8A6372C4B1120D8CBCB7CB64D764AB6807784EF24FCEB1298BB131C9C71A
+ 38B2BCFCFA8ACD4BC2B177C2758B869129C8D65A6D852C387EBB564CC8C81810
+ BE3E20031A40024D900668A0004EDCCEEEFCCEF01CCFF23CCF5CA00222C06EB1
+ FC15168074A5904BA0C675AE182B3634C650C2975202723B25C11761C1FF9472
+ CB306FA8736100B6FF757D6A760CD21CED55C2D18B8AD77CA878ABCDDB2C34DD
+ BCB2C94829B1B1C8286D06E130072D80CE5C50C94E0CC5F13CC9F37CB9ED4CD3
+ F3ACC9335D025CFA4AF69ACF5CE11716F23007F8CFD929607F07B664EC2C7887
+ D046B5B56A9C11FE6412282119BF3A0E38711C10BC325A58D1491929162218D5
+ 1CA87E7C862ABC8120DD67A331D2248DC8268D017E00D78BFC0507F0057E70CE
+ 31C00525A0007CFDC3ECFCD7440CD8ED0CD8EC0CC484EDD77B9DD8869DD8828D
+ D88D7DD890ADD88E5DCF4447057C07D4926001ED831819426FCAEB8A1ECC1B0D
+ 6BD08C2447CCC439AF50918267D588310E9C742CC89B8550CD60B2F621A425D6
+ 5C320F1C3DBD89C4FF8BD40AD25EB7D6DB00C3C8E8D69482D23E80D21800BEE3
+ 4BA953FAD88C8DD83E5CD8921DD9D47DD8D31DDDD06DDDDAEDD8DD1DD9D9CDD3
+ 4DE0D3008CD99560057B921F9C84ACB008DA7F47C1657CD0C1684DC4EC0AFF84
+ 6D233119AD1D549E950DBA50170E99D0B4DD85FE1007B46638ADA6DB65BD71D2
+ AA86698D4F843CDC86ACADE06CD25F00D771BDC87A00BE07E0073280CE2A8006
+ 7DB0CEDADDD77CCDDD7F6DE2279EE22B0ED92B5EE22DBED72D7EE28C3DE3364E
+ D82BDED3179005E67D09217064177285090671B5EDA028B61B4653C7C2DC647B
+ 139126876D5A3400FB87D59E85AB739A347AC353DA49230DF29709940A0ADED1
+ D47B3B0F0EE1BA2CFFE1DEBCA3884C0A97E10617AEDC8B6C065FB0057ED00239
+ 30022AA0CEDFBDE728CEE77EDEE780FEE7825E0290F8D33D8E1B61D0062DEACF
+ 41C28064EA3BBD7D34F330DF51B5524E8EDF211112935185FC0DC289640FFA28
+ E05BC8550CC227D3D9DF647DCD679DA865BEB7D93BE1DBBB56DF541367E0E6C9
+ 1DD7192E0572BE054C900324A0022AB004327EE3C45EECC67EECC89EECCADEE2
+ 3D8DCF87CE099EC0275BC28A8E4EA6E8546D664C944D27559C93B21B91E9E02E
+ E595E1DA08182CCC2782B3B24B99E8703253EA09F14670503B01B0060B2E771E
+ E6DB65DE670BDDB76A2EEBE5E045F30E0107200518A007CA2D05CC3D071A7003
+ 31A002C3BEEC101FFFF1123FF136DED330E004F7FAEC63D1007020D657A5BC47
+ CD609E774FB461A295BEBB290BEE1CF1112EC54D6E54071B1006CAD717A22125
+ 0C27EA528BDEB6849CFE4C60F51EAD63FEDBC08DBD684ED22C8B16FD93007010
+ 028D35F0058FD271CDDCDE7AB8C15E020860EC57CFD759DFE25B7FE35B7FF560
+ 6FE35F2FF6271EF65D5FF6CA9EF55C6002AF4405CFBE3B9B5652E4E819AF78C0
+ 5F0CE95679F24F0D321299E92C3F93FE46EE32BF15A9D7EE5B4B70AAA5F3D2A9
+ 19B5D305D1C9DB5399EF7BCBD62BCBBD81D90000606492E2056650F0C99DDC08
+ DFF9857BB8E9FCF061EFF5647FECA7AF0067AFF5588FEC673FF6C4AEE33CFEF6
+ 901006B50E9808E6FF1F756FED81D4C149A9F780746670419C2C0F3803D00DD9
+ 1254F4D65545E2CC69AC8032A3F83CEF10A4C13029DCE0D5DBEADC5CF46DBD56
+ 07D6C58D30166D001852E007B88ED2BAEE03E37BB826F0D27DC0FA0830FF66CF
+ FAF65FFFF47FFFFA0FF6F30F080A08820883868288878A898C8A85898F8B8B0A
+ 5C262B1745009A9B9C9D9E9FA0A1A2A3A4A00C1B105E5E6E097F710C61B1B2B3
+ 610CB6B7B8B9B916B6B1B7BCB6C00CC216C014010D6B67CBCC03CECE0970106E
+ 5A5A106701B621DB00DBDE5656C5E2E2BFBAC156716765D565090D71710D6770
+ 655E07F75E10637F01F0710100FF0504D8CF9FC18308131AA4C05060833F6B22
+ AED940B1A2C58B16FFD70CA8E3E6DE817C03DA5060B06393853803BC489182A1
+ A54B295FBE1C6022E3460C1568FA3482246967CF9F3E83027534488150A15C54
+ 5CCA52AAA9D3A75045596893C08D970975D6C4A140AB2B2D7360C3F21A3BAC2C
+ 5906C792395BF6AC6D348EEC06741969C18AB710E0F28EDB6B76D7B093EA0E68
+ 2933E65D803F63EAD4F3986FDFC17E90FF299C4C1921430AF002B4812811A367
+ 8C1A3932D6F78E018B4C9A2C0480A3E58B143F2E639BF9C2A4C58D265C0AE9DE
+ CDBBB7EFDFC009F116FE5B3871DFC7811F525042298C2A53A24A9F0E8A9B5374
+ 1FE092DEDACBEBD7B0E0FB921DFF975718641ADB0E18C39E7DB469EC0AC3AB75
+ 0E6F5E707BC99DFDFF552CC0808E8DFDD1853CD2943141355A4CA00F3FFE44E6
+ 6065104E7659669B4934D167186E105A47F86CC740062C1861D21E70B8F10506
+ 7AB4E403062BCE465B0B39DC94131ABA25179C728644A29C8DC52157238EC6F1
+ C645132BC02022754852875708D785D14002EB9401C71A018C048B77DF85A7CB
+ 7EE491074B3C1FA8D75E7BEF753458615D00D44517718461817DF7E5A79F7865
+ 053006350A8EB1C11F1FD053861B6E4C20A81B0B3E26596411267AD084FF54D8
+ 59869F8536C168856523820830EC50456A01AC5186192862009B8A6694CA0413
+ 1AC49042097DE0E8AA0BAEEAD6AA72B0CE8AA3ADBFC11AEB6E955CB203934906
+ DB5408B030E05408FFAA7D908A820394762596596A295639C100735E03618EB1
+ DE98EDC1510704935AD36C005D6CB6411B71BC799F5E721253AD2D5D54A5851B
+ 758CB10C94135C05A81B7F2E589040900DA4E8C05B35D4286711411AE9461C7E
+ E4E108226400C31D59301942181B94E1DAA82A62208519F7309103092A7061D4
+ AE28A7ACF2CA29DB30E452C2C61C0A5E14B4B14103FD70F5A628C83600872A6E
+ 4C19402DD076252D785DD20926B76324E0F4D3101828581D1F14A4590373BD09
+ 679CEDD2C90B55074AE9343DF608A62FA01024B0C1BF87B64DB0A28C6A86F085
+ 0A5FB4A1161D56CA400123E820C2052C44D74D1872D4F1851F29C6E631C83ECC
+ A1410E2670D16AABFFB52200EBE596675E88AD946BEE79E59863CE79E6A2CBEA
+ 7921BA22606BE8A49B9E3A022F3F27B8CCB40FDE406275C091C0191BA43B4A08
+ AB55039248456379F4B4493310471B1F8CF9F4F3DE5A35F51F6EF6A2B35DDBAC
+ 8B5FD76315630BD8F3C2117DD91E993D413B541A8AE8DB89C6FD908575833680
+ 34933A2CDFDE23F0FD370CA8013095E12B5A51C71667862DC0E8264B50C0E458
+ C6C0063AD055B12B49ED6466052741C923F3CA4A1CAC209536B0E61E41A31243
+ 8A67B4E36DC96B65595EF312D034E88D0D3E1F4940173868B1BBDC457BE1E0DE
+ 3818E0C149110A86E5C3E02AE07006AC59AD6D6C631F65260490F73D2A7E15D1
+ 4802A691379CEDADFF0058EC9BC48A60310BD8010E0790428A38E6310C98EA71
+ 2468C21254D73AD6B9B18D707CA31CE348C739DA918E2E23D2058E3441245981
+ 01878112DECA879533B4A14A0C005637D0D28601408052FCB012096561C26905
+ 03172A6CA10B75A79803C53000D5B1210E73989F6184E37B0998D4F9A8810F41
+ B9D20BD5381F116F4690242A31424C44C6DCA09891F981AB8AAFC022DFF8A603
+ 89F16007D1B10205DE700033F8C007645C49A97CD002DBC4C0649DBBA336EBC8
+ CD6D7AB39BAD831D91B0C0943E524735F3A8C72031C8AF7AF5CE029BB042A74A
+ 543FC1D0CB901430CF246751C91392074C9B8CC65B0285B7098C01949FB061F6
+ 70D8AEBA14C34970FF085735F041A86F41206A9E1CE2183E60C45BBE2D6E8E4A
+ 182F29A291120D1224A511A64A21664C3668220E6F3810A812F792D96CA13631
+ E2C21AFBE0829E5ACEA7A1E3294F81DA53A1F6F4A83FBDDC5091EA029E5ACEA9
+ 4C251D50A17AD4A62AF5A84B2DAA55939A941C5CA09CE67C0AB20270865404F1
+ AC07A0D7075EF1C73864679D8C6145EFBAB34F5FF4B31C5E42C61904AABBBE8A
+ 4F1A5661C719E2B009851A766BECCACF29E3B0818806D10B521AC0199C3186E8
+ C5B20CB91BC01A8CB83E8F4AC8607283DF4835C4304806337F59CC623133A589
+ 10C4810E3F73A61F02C8A2DA9A01A724CB4D37A11A47A8F2D68DBFAD6370E538
+ 5CA0C6D1A7080083FF738CC0C1B096825801C84E3DD15A3E7A0D604F1BD8C874
+ 315848E2D5959277F58BB5E2F08779F0F5AFE2FBD6811204813584A1B036EC86
+ 61192A8EFBA0A50B652D9B165421258EB6A10DEF4B4CA05C5986B49DE10F87B4
+ A5672DD39026EE526122FDC31F367006D1E0434A6BE8421854CAE102AC96629C
+ 0223A860434633DE1646245B421FB25AD516BBF8C5308EB18C674CE31ABB7809
+ 96B880049D3B0A740291BAE54B5081A36620B872571F6B6BD377C11BDE4BF6E2
+ 300338EF5FEBF0ADC5ACC21DC66A6D7CB57C43ED8D432FE769EC3AECC92F387C
+ 402498F94717CA5BA0F50E51B33853F082FDC1C40169E889917A9484295C2276
+ D6A18801E83087FDFFB645C12D5363A0EAD88A3EF685C63D4E052A362A516D4C
+ E9AA26D5D295CEF4A431BD04157895074EE07142C3815FB302F9D4A716DEF9EA
+ 90800C2B79C94DC68531BAB081CAA237BD54862156B49265C3764294A3144718
+ 5488AFFD8A6DA3E8EA0E6634B386CA1679BFF4DADD9E123C67062FDBCEA2C590
+ 48F734E10D1D79770D103487B598A94D01E01475686689F5009346A3EA062648
+ 41534FA0E97ADBFBDE9556800A6ED002502B52D4DD20EF143D495D23A3BA7C57
+ C9D70408E598672D993E77B51605BAD06C6F798BCAB9AB72FD58D1807C7279CB
+ 1F472CD726FE878D1419B2AD7E08CE0AF698357F20011C59EFAA13006736557B
+ 21A075E2B6236591FF3DBFFC97F7107266C53DE862EAD8DC0C58C323A1F94CDA
+ 7ECC99D4D4800914C8E217D31BDF34BE3AD6EFADDC1B64800AE606F8B9375087
+ 7C193CE80B27DFC1E3FA27B37BE1CF557A383FC36B1E6263FCEE55969E35B051
+ 971AFA3AE422C7CFC45FAE4E63C321C999015840B6020F9BED1586ABC06C023E
+ C00F39DF12A40F8EDF849BA718F209F9A27520FAB8597A9AD478F00B66800D4D
+ 4725852D1810725CB0411FE84D7B17D4FEF6B6CF3DEE77AFFBDEF3FEF7BE0F3E
+ F0876F7B1BA4E0064C6041A8456D8130FCE167059F79D3A6A1F654471BB0780B
+ 219BE46ED77E8E9740DFC2FBB7027B8009C0817AD83BAC75E4AB7E70288F7926
+ F50886E7128634ABFF294D019950B96A0D17B447F666F8576D97B16C21453710
+ A60C30576442C42F98257AA31731A7C1245310006FA0127E803802E4313E807A
+ 3E20031A90462A7602B3277CB97704C1D753B88782BDA78226988224486F2DD8
+ 7B3138832FE80231E802CA950319C003FF664E71B006FD87566F07689AD12763
+ 866A0952079AF5739372656B3312DC4777681100D93545E2D7497873266D9048
+ EA771780274ACDD7057D223DF8403536677FB5544B2DC7668B710FE7A30F1FB0
+ 0101C87897C74405688019224551034B70157969E3801D466E3C80741FA005A1
+ D2121CF33130511B24106F36700290687B91780247407B952889B407899A6889
+ 99B87B974889BB37FF8993F889A3A8899F488A9D0889A8D8752D1022CE750A10
+ 70764107016BA5351640017F2048A99627E7D2066BA08B83A13605237711C70B
+ C4E62D1080777F620FE1D33B34D485D0B850F73586EB242EE8927869988D8B47
+ 806B403666B30A10000763B006086679036387DD8667DA363F0A1844D0168E67
+ 008882E637170003E564016B30011C382A192805E5474D230369F35683C4377C
+ 23F87B0749900A5990BA677C37B0022C1076B5435ED08756195435F0144FF1B0
+ 5758F858F4A22709D60615563601D20FC41871CA5372C8A88C64A820559348EC
+ 178DDEF06BBC800CD4E81179E20ACBA68D3C994414470FFC1228FA923B1B558E
+ E6884B0D612ED916FF29CD430F0417646FA83B1FC06106204C55894557B952AB
+ 851A0CF0078FC41225E61227F6812A00069B789668898968B9966B89896AC996
+ 7019977279966A797C10F92B1334063FF6581AC400CDD55ABC40728E345DE173
+ 5DFF95263FC921F302010310490FE770DD271635F98B57B88783E40663D0066E
+ 22937F575880C47F04157484517987D2933DE90FCCF3344E7959E1A859D43680
+ 04D36077485278A821679018ED8841C69636DA3295F228685AA463AD950560B4
+ 3117181B8C8601EF1639AAA30673298ACFB9896FF996D1599D72F9962EF39011
+ 3941DB15645A90151430935EA8097F845F25A20A43746087542E69928B0D9384
+ F8C47DD122166120FF92D2107E1755060A382FAD4001E9C799F1E50D9F493FAA
+ 202857E60AD8689AA6999414011153044B41176D94774875D8787373213BA721
+ 9C477E417615927706096395BFB9522CC5035C040030054662A43826764631A2
+ 020AE002CE699D345AA3367AA327600360402499D28349726AF4A21519C9659D
+ F04736190DBAC33B58532E09861847281884D171F5279F73071EE4B511181735
+ 4219A187F70A000A7200704AF3B4188B4965AD667301A3A03C7910F8E78B7A59
+ 4F42268E1C9526F0C02895818E7796A15114264EE98E97C56A0310875833A244
+ C75230C0031C244F09D04C3EC0121DB31207D06832B0028D287B338AA36B397B
+ 98BAA9D609063150FF24C8243340F69DBCD65C87255F39742D0DDA000DF05F87
+ 79187AE97951DA265C517FB57A9260517F149718C9A8A54F697EBCA6355F6A1D
+ DB708B54480F27058782EA206AAAA692B115E482184027186F286D145A3006A3
+ 10B0B93CE9A8A71A1A659DD7A11E5A2F1F50AE9154005599AEE8BAAEEADAAEEC
+ 8A45F4C803E449225ED068A2829C1BB8222D902A5C70A99BE89C007B0297AA06
+ 044BB0027BB0015BB0086BB09A68B0098BB0070B89012BB110FBB00C6BB1D209
+ 06267003C2193316990F6B65313179AAF1A43C02B126AEBA268851076AD70EAE
+ 30A5B62A9FE0710C253745FAB98C5938445422ACD933ACC80248D8E28DECD00A
+ 6BA286CD7AB4D8BAFF6CD29A2F8C214BBB538EED83A74B79671F709BD8D7A1ED
+ 54941236175794952A9595602BA2C2E437875A05DBF0834B171B19582A33912A
+ 2A900236A0B0131BB115DBB0764BB1189BB775ABB7030BB114FBB77B9BA34DE0
+ 5554303B488256F7940DF0058D9C8017E3452E00D6066B16AB83C49FEF00B303
+ 78AB8FA90B4598808002A16E9836AEC085DF701F8C5BACC3B6B2D47059678A8D
+ 8A77B40A8A106B66729E078E7000670591B909C1284AB9731151AEB759264606
+ 59F502A250EB26EFEAAECA9BBCEBEA61FB13AA16F0071A4362F74A2ACEB4AF24
+ A02A7D50B0DCEBB005DB01DD0BB0DE4BB0E02BBEE41BBE028BBE72FBBDE39BBE
+ E6AB06E5EBBEE14BFFB047B0A31C8BA8C182566520176160AA3E1B2753C89E93
+ 6B6A505A185C91B99721B3B940B3BE64764766486ED277A3148D62BA01038737
+ 9095366B70ADA509BB1EFC2F7AE5947CB85FD53AA1B99B668B52A707B3946B50
+ B5D050266AC75E9317113863250C10B65829B6CDBBC35E4B6E7869055DF0482C
+ 729C8BC622FEB805731023296096E17B04F3FBC44E3CBEDD5BBEDC1BC54F7CC5
+ 567CC55A3CBF7DA0B11C4B05F97B56B4980D12ECB3DCE0B8689178B743C06722
+ A5083C42B86A3DCB935D1CA15FAB903B1FD0053059BADA038D7F347850C28CB2
+ 745D74BA6CAFFBC1CD4A6760828CCBE87F728A606C92446FCCADA2F5BB93E51E
+ E2B38742D40E07C6FFAA88040CCCBBBCA29CBC5A042289A4A807202A34D512EC
+ 9656480C028D98024E0C041D40C5E45BCBF09BCBB50CBE54CCCBB97CCBBE1CBE
+ B6ACCBDF8BCB4FECCBBBCCBEDC9BCCBE7C04FB76013C78B867B5BFE84217FF69
+ C6A77425353306651064517AC06F9CC0FB640EC730207C82ACF6A4C138B3990B
+ 35C1BEE6B8714071819CCE6626205693A6888CC899C12767B0A1EB64BB1B752E
+ DB18CE7293A7544B59EE01C37E662FE5C8159734CA101DCAE83A0225BA034EE0
+ 5AE9A638FDC822CFB4AF4F206FBF4CCCC82CD2213DD2E71BCC247DD2254DCCE7
+ ABD2BDCCBE28EDCB36D004F76BB85081B8AD46A1117CCD66ECB8C9C2C6DF6CAB
+ E1ACB9E31C0B9861FFCE0D60C1ACD418A55117A3D4C7BED656D812C8D5605D1B
+ FC18F99CD504A166AD6A93F404A1EF288E9B45A7758AC0DC9AA71171C94D4326
+ 364B3E58B1519B353465110C06A0BC752DD1115D95862A41555081ACAC07ABEC
+ 315FB00518200339F00465790434A0CBB8BCCB8E0DBF8D1DD9BC2CD9903DD996
+ 2DD28E4DD9992DD98D5DD99D9DCC36F0CCF23A1DFA3B255DBD15B5500CE0D0D3
+ DF503365554FEDE0C6434DD493B49376F6070FA18B6F27A45DF6D4797158AAA1
+ BACC784F0282D55A9DD50D3210F20073759C850BD79A1B6C73657DC0D14AB52E
+ 9CD0DAB21E30A7770A52CF354C27798DD7E2EDBCD0BC29AA1105AEA107B0D18F
+ 30E14C8EA3C471DBFF07CCCCD8235DDF986DDF1D7004F85DD9248DCC9FCDDF97
+ 6DD226B86F194006CB77D367C50A9B25B95B6D253C3DAC7F741E810142EE00CE
+ B34DDBD0726DE6B2270FC1CDB0647E1BE09F4BE2DBEBA250E140010D30988384
+ 15E3D220877CDC1FEC36F1CC194C988542378E58F3ACA83D6CD856B56ADD1E6E
+ A1189775BB020D71E381AE775DD7E99AE44CBEE44E8EE44E4E6E54106A0C7027
+ 2772AF64542A2F12231210B71D40039B1DE6623EE6645EE6667EE667EECC3100
+ 2212D914A5BD59AD9AB226694ABF6DE24F7D43766215C363E1B35D3C0D462E0F
+ 71671CBEB4E1433DED4CE2A6AB17CA93E2A6C65E8D09C2301EE95B0DE9D16A72
+ 04078ED2C6AA0C5EFFA7D19AD6080DE4CDE06C82028FE7D226D45216E19DEACC
+ DB0414FD37A8410172602219F81204845B2A6003684EE63850E6BB9EEBBECEEB
+ 65AEE6051E15380DE7FFA5E9F8E7D0A664E7777EC63C749B0C9D33491BCE197E
+ B20F918E1F3011B85D72E052E85C88E8A6FB0DCD07AB4097418D29DDF82CE9C7
+ 8D445CDD27D37AE3CBA0EDD4562161F2E9CFD0CF555B59D3008FE598DA5ED3E4
+ 501EF04A2EF0003FF04A5E957FC3023BD01F2AFA1A58DE122C7162B05C9627F0
+ E5165FCB608EF1999DF116CFF18E0DE6201FE621FFF1227FE623DFF117BFD929
+ F0A941D0E6A3F0E671EEAA87897F727DCDE0BEDAA784C2927CE1704C0BE5BC79
+ E51AF40983602557FF7609727EFD7BF3758E17B040850F9A854103682EAEEE54
+ 2F309121CF0662C715A53BF632D67676DDEA2159411FBC54268E7268EA97441E
+ AABEF6CC6BA8857B6E8BBA31C8E9312B712A8F63022A20A31E8FF21CCFF1BB7E
+ F21A1FF27BAFF124DFEBBB0CF8252FF87CBFF1F9AD02961004074E0AC5DEAA4C
+ 2AF3C8FEC94EADF4758EAACDC7F308EC1569A10CEC2159FD3CF49BA1E258B101
+ 49AFF4D9638CF0778443C451945EF555DF360C21CF55C687677351728A5D2EDC
+ 16CC80EF69DD4201CD264EF6EF079FFCCABFFCCCDFFC598429AE48014A772263
+ 34F731E1032070D82AF0032700043420F838A0F8E2BFF8E30FF2DF4FFEE85FFE
+ 1D7FFE82CFFEEB9FFFF136F0F8912F0A302FB9327FEC715EC8A9FD9FE00E0821
+ 2100008256160C896114718D148F90916193946171017F1F0363630367671F6B
+ 6B1B7F6D0D0375135A13751B615687B0B2B3B3822116967F6770655E07075A6E
+ 70670D018D9701C9CACBCCCDCECFD0D1D0718C6D6B1F6709106E5E5ADE5E1365
+ 657509A01FD867039E9FE6A1A2679C631F7F5D7161890C8889FAF91606FF000D
+ 140038F05F418104131A0CA8D0800E111960ECB060A54D1D337E30F8C0C07123
+ 0633BF7CC8D04022C69213345276A0B1B225CB972E63C29CD90187CC9B3473E2
+ DCA973A60D132B2E382144B468D15F487FB949B0A6419B2E6DA24A9D1AB54B32
+ 0AF96869DDBAD582FF57068B1C451A0BA9D2A5066BD27532276A83D35310544D
+ 80E30A1645AEB442580913608336375A7E791176E68FB1C3C8A4295ECC58DA25
+ 645D22EBE235C1173070E3E0AC65D7EE9CBB77EAE6D5BB87A874BED35EFD315C
+ CDBAB56BD64D46E8C870616296356ECC98F1E191A36F1F5230F86991E3099823
+ 2973265FCEBC79F3952A5F3A9FEE1C3AF5EBD157DA48B1224815A3E00124455A
+ 064ED3A754D337706AD5DEBEBB78E3CB42B4681259B2663169E2E4E95CDBB767
+ A4B24A2B14D8259F5DB874B14602654C8054307514664C23873566E185183E46
+ A135DAF412183013B801011C09F4E7D967A2A488CD1AF46085DA8BA57DF5DA8C
+ 34CE58806CB4F160FF01000CBC919B1EC275E49B6E5F30415C0C2AD8909C4BD8
+ 353953744E52C76494CCE1201D0D3FAD80C550E111359E524CB1971E55EB5595
+ 0C35A45961C8815DF1031623D4DC470125717491C9266BF9B7815BA604C80D2B
+ 6B14184B7C7AE112C0821058261804096C500F85896128E9A4D34C7849171BA0
+ D2CB8321D6A1195B29869A16284D8D06238CA931C0100100B1FA8FAB06C00AEB
+ 6BB3AE7623442C141102030D9461867019F9C6916EBBCDA1410E49AA41031054
+ 360945B3CC3D0BEDB429657981115C86F7E501E59D07D598E04A7555566CCAF7
+ D5228CC8F9C82475DEC91F5B7B0258C79F75AC1107457779D515031428A88D83
+ BF68E14519097CD0FFC6999426ACB0638C341060191F8258DE18A48A3ACA359F
+ 3465CC3DFBE0C34FAA0CC451E3C8240744C0AD11F1E044165DC0718014C109C9
+ 11CC071429430E26A4801CB3D452CB3373CCFE1CE5CF42370906505850614597
+ DB2EE56DB863AEC75E23A4E95B2E57FA542227BBFAC1936728F19AF2012F5E78
+ 01C107F75A6DF52C86FE31001CDC041C4E1D036CD0C631152EACF7A489510356
+ 1C70A9F2E0381483DDD606A278A6B18BA6359E1A7D01B4D16AAC94B36A79E598
+ CB3AF9E5AF6E4EF98D3AD4568513712470C046C10AEB83195FF8606471292C1B
+ 7472B3A7040510CC3E3B7BEECBD2A0BBEFBDEB8E3BCFBFDFCE7B4AC303CFFBF2
+ 40141FFCF329E170FF74504630FD65B762420DB555C66005DFD5B43CAE089C63
+ 718D96D7268EC267031F3058F6D971F483202C6B3280C918F3463C010463688C
+ 77A47B0B20DFECD385F671E343102AC707F6C440C4B1C37F1D6B1C6ACE1500B4
+ 94EC821894CD0560C0030654A10110F842CCF4B091126AC40745D2400CB86003
+ E4C86E3944EB5DCF902743A0D1AE77459B4E0E9D23B4A3E5E00259D0D6979C96
+ 3DED69EF5155FB1EF810343EFC58A2826979979ED637B60699ED0C0148CDFC64
+ 9188BE304870C07043841A80A6B03C468068CC903D16E1C5B85826188C3A83FA
+ F694B88C919171A78A11E4D03280CCF9F17280FCA32039E747038C600410E1C1
+ 77BA603A29F8410FFF4012964676D30215E66C670E68DEF036B949E36912779E
+ 0CE5F03C993C4E9A5276A034E52739494A55D2000C29B8C116AA67946D610F3D
+ 460C5799DA33278FB1498B6CE3877D247196287E6D147F680054166445086051
+ 7E6A430405BCB8A9030C861C0673CF9BF086B0347A331A7E63A35FB6D18D3092
+ 438E0CBC063642510C1775EC9DE2E3CBF9C6B01ACDD57346B5AA556B5C558002
+ E06A078C904319BE1049497EE40B66785D0C5260031CA83268B8C3A1447737D1
+ 894614A218BD282A71A8518A7A74A33C3B420A7EB883A579698861C2652E8FD8
+ 1EBF2911418F8B29BE62DA44485CA20D1B409F7F90A94C6B50E68A59D497DAF8
+ 85A97F09866006DBFF183ED0F5BFBC7DF3A988B98725DA30B66D54C61B222AC7
+ 1CD3E209BBF9CD6379A4201FD531C8B206F2AC66FDE3C91E72813B8421045D08
+ 214752373322B92E0724B8A4EF36894ABE96F2A2A7FCEB4307EBD7C00216A37D
+ E564075210831550E128D7334F11570AB55D06A0973185A94C376B1745D4E789
+ 3855CB00764A8A9E32B332CE0C80FC0EE1154B388C6C8B1AC31FE2671ACF3EA2
+ A90084AA008F61536B8C010E1028831B54914074220E1D6BB81BC724E8B83DAE
+ 6113EAD01C5A3B47DDB2766EBA94ABAE21457001165481011B80C0CB4C485E0C
+ 48C175C7CA590F3A004A87368FA3B973A8F27CE75EE139EFA37FB5EFF34069D1
+ DF7D140AF2854207FF6C7083DA9C743C4454296575E994A74CA86AE1DBAC4C59
+ EBA6BF45CE98A375476997F9D3D402F32B80D314C0069600323200A69E45179C
+ 20A5DB34C6891101B0D3077E5B876D3408AB7174C7271678373C32577CD33C1F
+ 74FB4880221BF9C8483E72AC92BCE4241BB9C94A7E329211998120EC201F1B98
+ 407032425798B5CE58C551C1098090492840A1CCEFBD9D9A9B0705256852CD6D
+ 7EB3261D606636C379CD66CEF39BF3ACE735D319CF727ED69D5FD9581E10C296
+ 9255F0828D1899F684616D128E344DA579619D6A3899CBFC2250572B4D87CDAB
+ 9CC16854FCD4C45A7C8065982BEE668BF556C6695A630009006E8D857BD5FD0D
+ 23149A388357DD79FF9A77F6C3B9EA08F600D04AECB4165BCA952B7221717401
+ 455A600D6538C0AF84151C9899410A66A8240954B0B340A779AF77DEF39FBD2D
+ E834DBD9CE75C6339FD34DEE76971BC03668EC0EB2D0B4947E6BD1B9949AA3DF
+ 23E97E3FEE890DF8C3A82AB6610EB9B10C0350ADD5C072285E70AA0E1F50AD2D
+ 0A55E153DB94C5B95DB585C4729619D7A1C61008B9380EB8BF12B5C3ABCB0D6B
+ AA2EE12E75A463D84886B29367DE6499CF5CD9373FF28D3290011650A10B5748
+ 801BBE3057837EE117DA36C10F68904934A359CF746EBAB8A7BEEEAA5B5DDD57
+ BFDDB8FBCCE6A7A71B07F16E010CB610D9A7E17BA596BD442FC945617FD3945F
+ 37E5EA6879BACC31FF1C7C0C5DE0345FC6E606A49078B616B045DB7B6DDBDB62
+ 5CE3927A71BBB2010790873CB8C3F586AD3921C7526893B9BF6E6D1CDA20F097
+ BB3CBA99C379B28F2D7ACBE1BCF43547B6E90542659FDB4F0E5A28EF46BCFCE5
+ 231D61787F3E3399751FF5DDC3D9EB6676BA9C9DCEFBA9F7DECFBA07F4EF7D3F
+ 6791DE60054C40A9D9CF7EF6EEEDA3ED6E97293E363F2A6426332A99CADF52DA
+ 90262B1035400083D019EE96F9499B9A12863F63C6113F8D3935828F0970FCE3
+ 836BC555308AF2F4707979F46B2183169A206CC296730AB8800CD88046D6046C
+ 750701100620740018A007741524C0B1054C80333FD05064E600517766243882
+ 4D5782C9878226B8FF7B27B88226A8822C58822C1883BD678222150337D00264
+ 471E89766FD48776BBE408CB957D9216329C974C01F707A5D000E10718E3F768
+ F9D22FE8173004935C13686A9BF54EF0177FF3477FCDC071153463C0250E65F0
+ 78B3365CDD20460AE428B40556F0F41546C8559DB00E09E8804E66737698874D
+ 003A11910521900563700018182CBDE1653E401C79153B22C88222D888357866
+ 22C87B9058838BD8888C688951E7888D98678E28892DA88999F867DB610239C0
+ 04470726D3F783F8C63D68C2694448537012634CE8167C247E09407EE4C2701F
+ 900A4715262D9544DA274C2A760CF2E7855FB846966027D9007264B87FFCC70D
+ 035307FD138029F7FF63F832551B708008588704800246E68D49068E37278E47
+ 268EE4F88DE8188E315700B321115910077CE0051708245D2605ADC304E9A533
+ 21088AFCD88FFEF88F001989A1289001098A67D6013F600224D0023EF00BB7E4
+ 83AA487D4AF58AFD9608751270A6F05CB6888BF9B27770F30B25B740DF379112
+ 46785B488C88618CCA2084C998298DC77FE2E08C90E7066E508605D34E60658D
+ 202664DB888079F893409973E0B8731740063BE00471151C91D41BE6F50B5B60
+ 2C316002C7E18FFBE888558989A0B88F57999558D9749538895CC9956706760A
+ A98307906010199140C81EDD338414A97D4F940CBE952807300125E63DB0C070
+ 6BF09175392297A6FF4CEE51914BC554B8A59262510D2E590764D88CCEB89871
+ 849398A7479A670D9ED793C1D68D98E98D9A898E9B59649BF9999C999998E999
+ A2D999A5799A10D87359005E13803A0625243E602C24F0043F700435E000B799
+ 9BB8D988B72982BAD98FBA199CBBD99BC3B99BBEC99BFC289CCA699CBC09053D
+ A0020B69060FA9961119190FD67E6F0987E8D2176300317509070DE0229DD570
+ 7D674D045331A370308C538483797114E254ABA67817F636B3E698321993D864
+ 186BE76BFA205405988D96B98DA4099A043A9A060A9AA439A0079A8E0B9AA0A2
+ E94F5A7205DF7506B9E1078F645030C38137B35047E088C4099C0519A222EA8F
+ 1F8A9CA0789B4760FF0231D00258606FD4A98A65723097558DD909329BC777E1
+ 3006E1998B21B3017C3930709061D7C02207A34D1E138C29E69E67D4628F6153
+ 32166B30598632B97F9E220F07C331031853AE2577019A8005FAA5A709A6621A
+ A6644AA006101BA1C302F6F3077520421788A1BAF13A2420014A529CCB79A776
+ 9AA778BAA77ADAA77CDA0329F0043A480693F5A28B16A3ACD88AD8992A8CBAA8
+ 7F8329BF550E6D80978710327F207482210C42EA1FA5D0525FA5458D7A6AC358
+ 98DFC49288B98C8A699F530A0155BA38599A79FC524139D5A5021A9A605A8E65
+ 4AA6B8EAA0B71AA688740158700757D005141A33BDB111AC738FF9C874BF99A7
+ C7F9ACCC499CD26AFFA27E4AADC209ADD38AAD0E80038C151474D05386FAA2AC
+ 088C5F1199036891D6C0225D40A91679A9D1060CE5317789C3530D560FEBE97E
+ 491A7F29E94D65848D63907F221793AB1A7270A0191F500C581A9942D52FD9F8
+ 09B4EA939F8902121BB1043AB1167BB1129B9919AB991BABB1183BB1DDF8B104
+ 201BD07707F9F0015A705E453724C0C11BE9650364769B49E000495003367BB3
+ 385B03339BB3344BB337BBB33A9BB3426BB3335BB3439BB3407BB447CBAD4011
+ 048A16AED49776FBC96F84F73139991A7CA10C14305414D000630018E6347788
+ A34EA1420A453A09FC063259A3622BD685097398AEB606F813A5523AB0E43000
+ 56481A6E3841FAC0FFB0DB5899013AA6829BAB835BB861EA8D28C30271B0031B
+ 50072F438F32F3115AF0053793333FD0013C7BB3B869B39BAB9C38DBB97EFAB9
+ 9A7BA7425BADA37BB34AC0582D10046909B5AA98A86E59AEAFAA47DB84594CD4
+ 0603E09D1022B6C775229CAA4CD6C776A18A6A6D0B9F6F2B9FAF3686AA3AA59E
+ A2191AA3B70A5BA97502A00FDB931B8BB1217BB1D99BBD1FABBD202BB2DFDBBD
+ D80BB2ACC28E2B00036410320940747390815E96501A000279F5039DABB4F67B
+ BFF89BBFFA8BBFDCBAA24EEBBA50CB4B1134BBE70A16BF566A5D300010101810
+ 220FEA9338E8F04066BB6FDF23BBA21A09A44A2942384D32F65B513AB08F4722
+ F280B039892AA9D1FF2FA352BDD6BBBDE1CBB115EBC22C7CBD30FCBD1E1BC333
+ ECB17BA803E7CB0259D0066FA005D3568FD87600AF439B1D5ABAA79B9B9C7BBF
+ A03BB44DBCC450ACC452FCC44AAB04CF190355560A405815004C266C2984036C
+ AED678A47DEBB5DED9970E4C47EAC419F082695758C1B525AA84D9547CF362F3
+ 09B01FBCAA1F47227244C2620C870C0BB82A1C6CE25BC8867CC8889CC8DDCB01
+ 286048B3110454100774000152D0BE1988015F2030724AA7F5BBBF44EBC9A01C
+ CA463BB480BAA249936F4AA84C8DD6C5E9619DD719AA55BBB756AB0897B020E5
+ 89C66033B6BEEB193BB64080597ED83798A8C64D6E5B7FF601453416B075ABC7
+ 095022791BCB1174FF17218329DA38C808A8C816CBBDD8BCCDDCACBDEC18113B
+ D00574A005917BACBCE107F8882C0D15CAECDCCEEEFCB9CF4902191005F98638
+ DFC7CA47647D624CC0F4D1080A823F82B33F1473311603C19C219256E14E59B8
+ B6C384924BBA18AD168600BB98CB2C931F572278CB7EB3FB38282CC8D6AC0E28
+ 9007E22BD2164BD2217DB18C2CD22A7DD2129BD228E0D230CDD227BDD28C5CD2
+ 337DD3138B3246C9007F500652004916EA1B7E606DF08B3329D00348ABB435BB
+ D441CBD44C8DB34FFDB34D3DD551FDC94E4DD553ADB9579C0164B03D9C971660
+ 73CFABCCCA52E3606D59C2FB1CC770C279BB6819F1BA40635BD0E770D0443A21
+ 6B87AF17ACAF0F0DFF4E73C246EC33D1CB6BD155CA636FAC72E732BD1EFDD103
+ D0CD236DC826FDD8136BD2D80CD917DB04A9C9023B4081724588E6655EF64849
+ 2461023DD0C9417BB4559DD5EFECCEA36CD53500A824700141A0C5ADCCD6F130
+ 5A7C32D6F82C158DA6CFFC7C2A4B755B67F0AE9A0AD705AD22BCAC279DAA54ED
+ 6792277978E0B44641D63EF5C998764B2275A35C594A5317860D8A6DBD22CDC8
+ 319D077990D2E37DD32BFDDDE26DDE27CD01E90DD3EDBDDEEAEDD2E27DDEE58D
+ DE8CEC10DC15047440058118C40665065B7088A17DB9B8B9D44970D5079EE007
+ DED40A8ED508EEE00BFEE012AEB3114EE1095E0338009D2CDA6054011539156B
+ 053BD0F79CDB5E2CFFA353CB9FB2BCB787D0321320D0E859DCA1B2CB6003987D
+ 7DA4A6D69E5CB892CEC071CAD82181CDBC0930D01A3DCB7CCB70ECD3DD014AD3
+ 370DDE2FFDD2E97DDE4BFEDE2B1DD2F21DD2F50DDF50FEDD560EE5ECADE4226D
+ 48371011B080B2D3A611BE616D2A2B03790506F42BD59FCCDAA31CE76E5EDA58
+ FDE6747ED5762EE770DED44A90E1587C0763E2E18C57B09AD11FA55515AD1BAE
+ 9665D7D5D8DB7A44016E63DBEAB453300EC111CCA98FD28AB09CAFA9967168C2
+ 0898B28C740BC27B5C302897DDA9224F5C8AE408D8DEF53DDEB0CEDEB2BEE5B4
+ 3EDFE3CD01E0FDE4B03EDF56DEE5E28DEBBAAED2AFFEEBAE4EDEC28EEB2F30B2
+ 55460538550729FBFFA65D061222511212000634E0E0165EE1138EE00DBEEDD9
+ EEED067EE10A7EE0FDBBBAB3AD0B204EE8CD5C38DF1719243E15AE2C809877E3
+ BE0D63C5D4CB956EDC119C31A5B092DEE3DB79DDE93A5E46D3FB36CA0CC266D8
+ CC75530F5868D86B8A0EACDE93BE9EEB14FFD2C04EECBFEEE413AFF1F32DEBBB
+ 5EDE138FEB1AEFE4F61DEB23EFF1BF0EEC2870482BD0738DF001F2A83A9D4D2C
+ 7E7033464D034A00EED82EE1E3FEE0506DE13B7FE7DACEE7192ECF800EEF9C97
+ 0D20FE71A52E0F87FEEE5221B5583AC0F45EF599274F7BF207BD8B221633D70E
+ 3B774808BCF24E7801EFD067CD176EA3BCD4ADC777BB400C8FEA6235637318F1
+ 0888EBC0EEF1B26EFFF77ABFF7B17EF77BCFF779FFF7767FEB82AFF77D8FF785
+ 9F076240004D0011C2DA066730014407B9C2C23AE865D43D000544DBF3DFDEF3
+ 9EFFF9A0DFF9E32EFAA2EFF945CF0441C0E15081EE844EE8CD1BE49EC022EC81
+ DBB9CD3D674DE4568F855F314DC9D0054C880E94DEF5BC0C2F87AEDCB8BF856D
+ CB928B40553EBEF6F7C9AA412E1A8129CB5A8A09AB4EF7C266F7270FF27F7FF8
+ 847FF8776FF281FFF71AEFF783AFFD814FF8DD8FEC2B2F025A72073B4007BEF2
+ A6C2E207AC53332231E034CBF9A00F084982493584838583898A8B8C8685888C
+ 8F87893D2A2417416D9A5D6D7F67090970A2A3A3A109031F1B0D9B9AADAEAFB0
+ B1B2B15D01711461FF0C160CBCBDBEBFC0BD616114017F1F671F1F6BCCCDCECE
+ CAD1CA6B1B7F6DB6B9BADABBBB0CC3C314E1E2E371011B63751065EB10EDEEEF
+ EE750963677F0114BEDCDBBA16FD0CC61F06081C48B0A0C1830539285CC870E1
+ 0B0E0F1F369CE810224585122B4E8C6831E3468D142312687243C4053201EA68
+ 31230583CB97307D6CF1A38184891E881E30D2298867129F8D80EE1CDAA8E720
+ A1917A98B891E10E2B4FA14891AA5347D4BC33D4FE345835ABABD7595CBBC4B9
+ 352C985960FA18946BF0A7ED8635D39E3D93966C9A2AB1B8B6F9EBE6ED9B5F0A
+ 63396D180047DDBA32F012533DB5C61EBE7DFAFA49F616A041C03108336B2EF8
+ 220F45CF10F3741EFF3D113407D3A14F2F342D5A616BD5AE4F8F16FD9A7567D5
+ B457AF9648C040C90B777804B852C68C1E3F7E5CFAC0B0DCCC812F7364D80483
+ 0352D1EB44B16B5F84B4E803253F4CE4C072A50D27A851A5AA0785799956F35D
+ 387D9D3FBF96AD5BBDF89EFDA58F58B9005D1C938C5C7249230D350DE0958B64
+ 0CEE574E1B1B7C30061CE91C865862F1C833C6070DDCC34B647A4D56CC1F6B9C
+ B1D9899B75A422472CAEE8E20B30BE28634430C6D8E28D33E6D8190A05307552
+ 171B40F0854BC9C184C11766F8E0470B3990F0437535E824E54F544E69659558
+ 5EA965965C6EE965964A1CB1D4165150D1C927EAA549CA551FBC47DF9B6FD642
+ D67E740213461C10FFC645203406D6D5581B7332E88F361FF2528C656324908E
+ 61182A764A9B1E122AA9A00C5010A08928668A5044AD714ADA6C9F762AAAA72B
+ 8E4A1B8BA7A61A2AA8A6AE9A2A07248990010C745001C70466C4F49214CE7DC1
+ 444D1250A7445047156B1477C652795D77C41EABEC4FE089D7D499A0A8291555
+ 55B1875535ABC4271F9CE0BA62DF2DB864536730DDDCD945036F19B8679F670C
+ 688D2D79F163811593ED420C408A1A7658A3F1C0718A2A9182C80D83EA463800
+ 669A363C508D10472CF1C414576CF1C518675C711E06F8B6020B6AADE1851E18
+ 140913AF5FF8300708364930EC9730772973CC34CF5C65B4375C400754D6F66C
+ 0A668D25E86DB844FF6F621F36E7D2094E65C8D4B5CC9ECD44136F2ADDD2FBA1
+ 152184802F2F7732DDAFBFEC00BC182A1D3E66B0BDFEE0B901A60EB73D008E70
+ EB38A38D72C76D374474DF4D230A3ACC7AC7151BA894AB72CC31C76B924C3EA1
+ C29389F8E478B1533A7BA5E4C93E4EF99692473B1E1D9FA4D7B37A55098C8A2A
+ 5B156D7A2B72D69B34BA9491484DD450478D8C32D55893BA2E585B51E9836B53
+ 0876D88D667B862A718471F6C192DDD9C61A0BBBEDB6C6D0472FFDF4D47746C0
+ 084C051107031F1C80C17126632005AF4A6A00C21326FCD083510FB49FA5FB56
+ C25FA5FC52C26F7FFDF8CF7CFF4FF0E3A094064140D3E7D44415ABB4272BDD8A
+ CFE9C035AE72AD0EFF2D6A09007C1A5022A741CD5DCCE0562DF061057C85A132
+ C79850852C742180896E0380CA065F5688300996A879CE7358F56648C31A422F
+ 0F622840DF8240053A4401572E21D9AE306006C469A04912585FE5B0C43E9B5D
+ CE66316BE2E4A0F5831868000B021BE0E74C71953F0D6D81708A4F00E865AE07
+ 0A231CFBF284052F68A068FCC94316B8D33106A0A845FD0B60ED18DB1A525828
+ 8335084F2F8CE1F320868717446062878451220D59A34316F2909044E40B0A09
+ 3147466C9130A2642323F6C84932529192ECA4239B30821530210864A043190E
+ D01221EEEA0B4862021390688397BD4F4BFB6B5FFEE2B7CB5CE6727EBBBC5978
+ C6632D5368B18070FFA0472ADAC2153032905EE52AE303BBA1B60D589319072A
+ 90D4A686A06B006830BE031B1E03968054A4F078688B2320CF3006CCC44B909A
+ A218263F79494646F29E929C67242B29498BE1139FFCFCE7439AD00459D16A00
+ 103840920AB79C868ACF0CB39C0E0EA048D19A59B4A25D52420F62D08220A409
+ 14201D203205E6CE6E7ED1995E116339C825CDD5E9EB3F1214D01AB539BBA751
+ E32DECF41D094B283681D5432C2A840C3FF0A54E089988616C83E7890C190148
+ 36B5A9F684EA53997ACFA74E55A057B5271EEEB955AADAD3AB55B5AA58AD0A56
+ AA5A15054DD0C10A30F1870DC0E10B7A2059F89893B23934C90412A84194F8A7
+ CBBEFAF5AF800DACFF60074BD8C026E10724584119D2D4CE44794E8B06A49A02
+ 511AA706B6F48165515E05F5442037466D61A1B0A385C6E98E64A602A8854A6D
+ 3A3F48C1A42AB561586564274529DBAFE273B6B6CDAD256FABDBDAC656A0B4BD
+ E7484A9281206C2501B034524BC617CB1668E00936A8C1B080D957BE5617B07C
+ B5AE2EB3BB5DEC76D797F8C301625B3052920AC4B159146901BBC8CC6652162C
+ 9B1823192F7B2E6E288F99EDCA2636399B53D19290B455D9D01F808ACEC954AA
+ 32256AE700DEF9DA4C3575AB0FBEEA56271C010857F8AA1196AA54BB8A61AE5E
+ 98AA160E71562F9C61129BD8C2207E6A575180BD0C60219575F042AE8EA35C58
+ 1E804978ED010EF0FF57D81EFBF8C74056820472C00437AC89610B6B67B5445A
+ 0A36A9023E937DAF2CC4781FD599B11780B18504D7B660CEC2652E741CE16801
+ 6CDA0117AF8F90B9D72EE210A04036B86D61DDB08A9D4A67437258CE510D6B6F
+ 3F3C56AC4638CF56BDF33FA56AC83CA075042EE60115A2E0BD2239747C664899
+ 7349F0841F4C17C898CEB4A675191E531E395E6C432F643F1D342987918C5736
+ 0B6BBFDCD9665C134DEDB82399C7D0186C1478326A0BC89B9DD7E75EFBFAD7C0
+ 0EB6B0874DEC5FCF200233B8DE0A66150532243488467289737C9038F53960D3
+ D8CE3661C3A3812D84EE2AA0C6949297AC5EF32E835B4633F52B9AD94007A65A
+ 1B87DA0ABBDAE86AFF9C8A9051A46D8769CB969F7E7F08D74012B7405CBB6BCD
+ CCB9D8084FB8C2175EEC421254042DC00215E2308003808F702D89B419E6C0A4
+ E9F052DB20DFB41252F08415789BA4E12EC8B8476D156D510DCAEA9EB29CEE41
+ DFD5F9672C4C9B9A9E5E3DA15803AFA702B6B5500FB6353CCDB1E0BC6EEAB197
+ FE54A63BBDE95067BAD2914DF5A93FFDD8569F01D6A97E75AE437DEA56F7FAD3
+ C33EF63C10E0377738031C14BA9C92C1842510FD550ED237D1C20A00B0776F5F
+ DE1FB0F7BEEBD2EF7FDD7B6001FF1D0970740B2867F082417DDEC71E93A4EE71
+ 6FCCA73C46B294E5DD586E338178AED39F6328C06BE0F7ADD39627A4C790C452
+ 8770D72B8C75D507FF5AE97858BAEBADDA7AD9B79EEC5C8F3DB2552FE2AA47BD
+ EABA1F7BEE59DC379DD1610CDE23D2A3A5F085036CA105E7BB8912424E7D6C8F
+ 9CA3580037A6C21DEA901EF3DB077C32CC27DF86B0547E2C5636E34B25A80912
+ D9C5DE5FF33C3C02CC21380E1D77450FB8E94FAFF5FE8BFDFF5DE77F4ED77F01
+ 886C5AC77507388004B8800948800028760EB88008C88048C062117705575007
+ 2C116D43C4049376133840787737827FC7772648827A77822A488228B88225C8
+ 822698827787031240022DE00651C0789BA1642CD764A39340DF427EE25279E9
+ 7765C4100E6A132F379560E1247FEFB06F34A75A2CD44116906BFB174302D880
+ 4BA7850678755C28FF815E08860938815DC8805FF8856408865DB886FD474AA6
+ 645C01B07652801CD19624D4561395A65DDA26782A587D80A5143980093A6810
+ 29075AD5E27804240AF48020A52384AE607E96777957665F6AF30CEC5447F8A6
+ 18C9B44701B02043D7206A615457888566588AA6788AA8988AAAB88AACD88AFE
+ 875637B0023010075700075AD0121CC82B52E08194F62432E88230188CC0388C
+ C2588CC4C8771A251E4C908304377083B87288D833EE1479E3E788E6215F73F2
+ 6EDD9065F3A60CFDE5733C95479B780DF850601D7460F3D68CA38822AED88EEE
+ F88EF0188F04880704D0373010047750076EF005B858382EC17C07406D39F004
+ 499404D3E78731E8FF6307A969E01103E3A1789A9228E9356AA6F083F0618DAF
+ 903A35875900B10C974815FE327F9BD8219EE847FDE041000191EBD83033B000
+ 2DF9922E199330399332599334799336999338B9933AD9933CF9933EB9007820
+ 06C485059CE3062D31570FA524B354693D608C50798C51399552898C55D40203
+ 100527C27D47855ED1782DEBB588A483919A503A72C25292786596226F6B137F
+ 3F571503C089E6B242FFE60F1FE4092B2948042893A7E8927BF9925AC7978039
+ 98813993A528987E698A89998A36599882F9978BF99262D0622F7606CFE64AFE
+ 78245E80014824014340582D18782E98827D159A55298CBA448344560728C27D
+ 03316E5FA926F3B0FF60267552424865E8B7914AB3526CB60609E00E6F090771
+ 498EF72719E738226E96976D03930B109440D992CDF99C31199DCE599DCC699D
+ 41499D34A99D31190162E0865B4006573006D021572713692A030203E9322F78
+ 9AEE4995F0B9823D30644C004F2BD783903796649991A886791F12077FE096A5
+ 358E67763C82F2416BA38ECA8922D8299D0EDAA010FAA0128A9D5BE586C04106
+ 75905C6E5738CC654404890307D977211AA27F37A2A49990225882279AA2A4A9
+ 142BE0060EE39A8638913D832D28776E6E126593677ED09496F5A50D008A0E8B
+ 1230C359A09F381977A96B0BEA3CD7D99CDC499D4EDA934F1AA53949A53539A5
+ D7B99D4EDAA456BAFFA5D349A55C0AA5D39906CD3912100703E22924177732CF
+ F105CE853E96169F72FA9E743A823FF0043718A32A799F14399B58F11EB6799B
+ 6759844983A0842192B4C64752F86F547897C9B9A40EE3A5560A9D602AA95F4A
+ A95D7AA95D4AA99C6AA951DAA962FAA99B3AAA934AAA32C93719C0025D400632
+ 6624CBD1120DB524BDA804735AAB755A954A7109ACE93C29C783B1F9518F826E
+ FB893A63844698B516CC134E10A0887BB43DC579A0C6A0A090CAA0996AA51550
+ ADD87AADD81AA5DABAADDE9AADDFDA9CDD1AAED54A8FB178012C602910601C6B
+ FA8F3EF00534D18B3DF08BC528002368AF7C87AFF61A8CFADAAFF7FAAFF90AB0
+ FB8A8C43201E58C0FFAB85D858E456A3EBC526A5568DB7797EC6BA9B08860CBF
+ B90E70B906A865A0220210D32A485F4AAE223BB2245BB2267BB243D923177005
+ 0CF007C5D18F0DE5039136131D27013F40AFB76AAB3AFB005759075AF9663CC8
+ 725CB4214F16A8824A841BA92E24026A8A82B1B4D60579C1B1A41721D2FAB19B
+ B100D74AA6598BB55C7BAD5EDBB560FBB562CBB55A0BB6653BB6681BB66A9BB6
+ 637BB66B4BB670BBB56DABB664BA0024E16264C0078243246F57443E10514934
+ 7D033BB8FEBAAF862BB0877BB8011BB089EBAF8C2B00AAD9513F1B43096B4C90
+ 153AC9F4A76E32ACD78896D204180172190B36218AB801504B977D64608064B5
+ F024AE4EDAAD63EBFFBAB2CBB5B30BBBAF7BBBB58BBBB4BBBBB1CBBBBA6BBB5F
+ 9BBBC2EBBBC38B046E8805787206B7F812CB5744BF4202368BB33B3BBDA7C96D
+ 5B7007F05488497688E56640C9500D46138411BB5256560C9D909C534330466A
+ 92FD702714A4A4ACEB366FCBB6F35BBFF47BBFF69BBFF8BBBFFA6BBF78D00419
+ 700163F01642C2B7E1935C2C63B320DAB88F5BB884ABB80CFCC00DDCB8F84A04
+ 771A7157E858BFBA1EECC5B9A8A391861207E958106DB24141C5BE6BD606F01B
+ BF6EC3BF2EDCBF2F1CC3303CC3329CB6765B4A4CC0023B10076A4A38AF6A065B
+ F0B747F40429D003B4BA828ECB8249BCC488DBC48B3BB84A50B04CB1ABAFE59A
+ D0F87D56313ACCE4FFC1830A18AD0543030129E5B81769866BCB03C62CDC3658
+ 5B015ECBC66BDCC670CCC66E2CC76F5CC7747CC7729CC778ACC7763CC77E1CC7
+ 7B9CC77D0CC76F2CC87AFCC787ECC60BF09D10770701C00765C08F6EE7683EC0
+ 7C662003EB19A714BCC99CDCC99EFCC9051B886F26A3DBBBB0D682B97EFA72DE
+ 22BE93773495A13007B10C1DC20F93622F45B73C559BC69B51C376DCB5730CC3
+ 7F1CB6BFECB56980B6C38CB5C54CC3C77CC734FCC6E62A8B77400772C8811870
+ 005E7063431CA74FECC04CBCCD4E2CC1E0ACAF166C456540C5196CCA90D5C11E
+ 5C7EEE97194A78BA648C3CA4B7C2BADC36897CCFF89CCFFABCCFFCDCCFFEFCCF
+ 007DCF8B7CAE2C40FF0709B581D1A68B1C37909AFCC90EFDD010BDAF43508318
+ 5C7032EA95DF972DED21ACE6618D6C41B59BF1018072A42F75C64856CFF61CD0
+ 2ABDD22CDDD22E0DD048409426710761B00375E03DE65938332B903160B3FF1A
+ D1401DD486DB695B607ADA5BCA3DC81E5A0CB131F7D1C8A019F4D00071902FAB
+ 25C28F8AD20EA3C71E20C75B9DC75BDDD5158006892CD6F90CD6665D015B4DD6
+ 689DC8602DD6607DC86DCDD56B7DD66C7CD65F2DD7753DD7727DD779DDD761BD
+ 001170B730B0037FF0562F6132322BB3186057D0FB034420D4900DD9DC76B0A3
+ A878182DB48BB8B98EC82E574D10F4F007CE9A4EBB3022F48CD559FDD26BDDCF
+ 6F8DD7F8BCDA65CDFFD6FAECDAFCBC04AC7DD7749DDA797CB727710567E00543
+ 92D0CCB70572F7A1B41AD9C6EDD04460782D000127BD6B17ADC1344A401ADD65
+ C2AAA3EFD5564F9D1998B1019D28DA112420CD6DDA0DA3D7B64DDEE65DDEE87D
+ DEE4ED01E9DDDEEAEDDEF0FDDEF28DDE1E8006EC3DDF68ED016920066260123B
+ C0006B3001524063E79924C32D018F6DAF42B0AF0BAEE00CFEE00E1EE102D0E0
+ 130EE1152EE1149EE10230D124C004C27985CD286A14696E45CBCA28C5D9D24A
+ 0F2854A0446501967274E21D43E5EDD7768DDBEE4DE37B2DDF38BEE3E69DD77C
+ 8DDF330EE47AEDE336BED71E40006B259E7470D3FD98993EF0E46FCA9EC73DE5
+ 9CAC043860020094FF97176DB958CC5E8D686A28BE197F7A0F27B96601A76031
+ EE3CECBDE66CCEE6F6DDE6701EE772BEE6F93DE76D6EDF62FDE671EED676DEE7
+ 7EFEE7807EE76B8E063340942B1004571007DD036D4324054F8EC90499E015BE
+ E01A4EE9937EE996EEE0969EE917DEE9955EE188559F2B49CA57FC390D5B52E0
+ BBCA278E5327B20C6DC041BAC3660A83E669DE36747EEBF7FDD56C5EE7409EEB
+ 73EDEBF41DECBC7EEBF39DEBC6AEEBC8FEDEC75EE7BB4EECC96EDB317D0317B8
+ 0351B0BC98F9E41A2703E7E399C54DE5DE6EB8FF73BDE1BDA012899FA1A0E209
+ 4459612EE66D32D5F862295C56EB8214E8F45EEFF67EEFF89EEFFA5EDF683099
+ 817807543000CB9BFF1C075C57D1370409FEE99B8EE90CAFE99ECEF00BEFF002
+ 30D993ABE53A08DD1B4C210524965A2179A6B3EE27B206DDFDE212E24EB92CEF
+ 06B1EF2ABFF22CDFF22CBF002A4012E84A0510B0120E75F3527000F16A0243D0
+ ED92FEED869BF00F9DDC9750F1A33E88DB1BDD896840B459E2264E1F201FD280
+ 22EBD93D7028EF301E500259BFF5F6ADF55E8F065EBFF5613FF6622FF625F0F5
+ 649FF6653FF667BFF66EAFF670FFF6721FF75ADFF5737FF7FA6DBCD983816F35
+ 871BFA3DCCF705DA4E699FE9F00B7FF8109FF888BFF8973E04786AF4D32A6E22
+ 2EB416F9F450CFEAAD690DA278F5F3EEF6EC4DF69F2FF7A11FFA745FF670AEF5
+ 6C1EF6A4EFF9AC8FFFFAADBFE6A0BFF5A32FFBB4AFE7AE1FFBAABFE67A9F686D
+ F006ADEAAA1AB72403D9F386AFF8C6CFF8C80FF1C96D72906FF1BD7AD9A61E96
+ A8D04D4513F59AF1BDB36EF59C8FF55EDFF6630FF6737FF6DE0FFE69EFFD590F
+ F6E6FFFD6C5FFE2500F6E8BFFEE12FFE6FFFFE674FFE77DFFE709FFE72BFDF38
+ 0C08645D036E5F18187E8888665F5F3E2D244F434A4202959796999742989D9A
+ 9F9EA1A09902124F1A5803AAABACADAEAFB0B167B3AD6363090970BABBBCBDBC
+ B8036B0D6DC4C5C6C7C70D1B6B67B1AE671F1FCDCED4D5D6D7D8B0251EDBDDDC
+ DFDEE1E0E3E2E5E4E7E6E9E8DC25EAEEECEFF1EBF215624D2B1759716B135289
+ 7A3E0E613023C550FF8B1C4F7E0858288408C385A344617A288AA22587A0880C
+ 9140E2C2986C20B3CD9A762B97AF93BD12046BD005994B64CA98859C49B3A6CD
+ 55F0DAE9DCA93327CF9F3B7DB6130AB4A8D1A34089225D6A5429539D0AD2DC63
+ 42264E17088E30E81198A8A09939087F1091688953D94D684199E5146AAD26B7
+ 434CE42813E5A6DD91B406D8C26512651D5D093E7ED8C0B24BCB9788634EA3B6
+ 785563BB9023AF0AD70E4DCF1296E171B35C19B367CEE5867ADEDC4D3468D33C
+ 2D671E7D79B56870AA75828E1D5BF3E7A4A55BA7060ADADE0D265400C41970C0
+ DF568152186138F84482C288D0C94A8F9E51420E264124DBCCCBAA24CA5D63CE
+ 10EE12A07C80C388FF5D2AD6CEBE7DB6A7F0E3CB9F4FBFBEFDFA69C4FCE69185
+ 0221337E249208063E980120130839E750276BB1C5D659103E286183694DC8D6
+ 0F2668B0857B35E1D5CC5E70F40558786BFCD1451C148411471CE7A5F7D27A1C
+ C628E364A7C966E34FA0D9E6136CB97516946738DE98DB6CA1F104CE513BB206
+ 0F9147EEE6A393A9E9D7020B6184B1070452084420065214F485063990608204
+ 435037DD9911B9750911449840021375CC28125EABEC95CB9D2B918762952CB6
+ E8224CCB3C26E7A09095A080A188B673E8A13B2D9A28543C395A94A394425AE9
+ A59622CA68A49A72BAE94F923EAA68A79B621AEAA7A4768AC40D2D904181050D
+ B86186565A1E2205FF0820842981040B3AE8EBAFC0062BECB00DFD704A2A84DE
+ 5452606B9C48C18A1444DB277A7F160363B2D8DA5469A340853AAAA9A266EA6D
+ AA98723B6EA99D7E1BAEB9DDA6CBA9BAA8B20B2F1A52DE1186707548A1C7715A
+ E29A6B826556486184035B48B0C0976C745D1D1F655B8D87AAD812DE1F7130C0
+ 4095613C3B6DB5C904EAF0C721912B32B8248F6C72C9289FAC72CA2CAF7CF212
+ FAAD1004030074518621030AE4EFBFCD0D3116B140072DF40F12685817C8CED0
+ C9CA070D0410C6C5D16ACC22B51C5F8BF4D5B12880C6A29C695D6EAAF08AACE8
+ D68F6E5B36A4F38E3AF6A55D934B36BA6A9B1CB7D9E8B2CD76CC30EC90451751
+ 14B765403BCB90EBFF13098D75968307276EF0E2BF0A40044717C489F535B308
+ B367D41A974775B5564FEEB92A0A842EFAE8A4976EFAE9A8A7AEFAEAACB7EEFA
+ EBB0B38E061731A0B2030014D4F1853F3AEFCC3399870B2DFCF044FC503B1C9F
+ 3306CD1A6D049022E62B6ACEB1319D278FF42CB12F1ABAA6A593BABDF6A8738F
+ 72F7A68BFFFDEBE65F4AFEE8DE83CFBEE8E92BC0451322E43D45006F6861C671
+ BE8320380891F0195A1007AC8311904207DC44F132842CEBC1A2720DB85CD4A2
+ E7A7E9B5A17A0ECCD6484487000E9AAE83AD0321E944383A1192307BAF3B61E8
+ 54A80016A2F0851F64DFFC6E70012A848001C4A155FF7616C0E00DEF87C26213
+ 47E074B40CB20282FFCECBD804A3B7B93F61D08884A2050CA748C52A5A11755B
+ BBA2EA66D7041AF2C00914F880160EB14310CC4106609284E180C84661190F15
+ 512003141D7306CB3D6F89D2B3E0053D36C76441CC831D0C24205B4848411AB2
+ 90883CA42209793A419630918C1C212417F9C8455A7292923421264F78493074
+ 31032CB0D81AB4F0851DCA40067368810C22219636BAF257C5AB5D1D54D24724
+ DE515A1BD3E313FBE81E0F8D21759A5CA1072BB9C94C42B29191142627597749
+ 625E5293941C66323149CC472EA18B176041161870860994F1946794014202F6
+ CA720A81682B7043C3E6084109E2328F16DC252F2543A75BC061930878663E0B
+ B94F43E6F39FFE04FFA8402709507EFE9383FDC4A7400B1AC88532B485FD74E8
+ 411B4A51832ED4A20145C035479081203821046D38E50ECF388733B2F267E66C
+ 63F14880857542D1964AC4E5D4F4B84799CC534623D10B1CEAE0064329F398C5
+ 7464249F19D462FEF490472D2A5185BA54A53A95A830BB070CAAC000299CD177
+ E09C831FCE08B094AA940824D8C21D78D9CE5B66AE82D393E74DEFF2213840C0
+ 0D5A50C11214D00789DAF5AE19C5AB5E2F4A51896274AF800D2844034BD8C222
+ 607E2BC0020F0C74D5C0A1720EFB5A654286E05536B6A9050D7C691D9B66560A
+ 36D1456A5DEB4CE8948BB76AE100311083A1F27A578CFEB5A28A4CA85D13D9DA
+ BE1A96B5B01DEC43FF6D7BDB81F25601F6C0C7160EF085C6FAEFB125C5C01CD2
+ D8CACA12EF141728A211CB1AD3B37E363DA1152D48723A06B7BAC10B07388006
+ 622057DDF6F6BCE84DAF7AD7CB5E892256033E68841EE6E02F703E560FA70C0B
+ 659D2BB4956AA00CB5DC6C12A1C7449A6657BBD8A045774D1BDE032C97044DE0
+ C212F06ADE88EE75B0AFB5707BCF5BE1C27678C3B3B5470E348001E22AF794C8
+ 2DA98AC549821FF037686C225A0E36C4CECDBAD3BA06E62382B793D3D2C2B5C1
+ E17D3079278C001714F9C8F9347292FFA9E4231BF9C94866B240A1DC64805259
+ CA576EF295ADECE42E6F39CA5AF63298A73C66282F39CB588EF299BB2C3F15DC
+ 40034CF8C2017C405B5254DAB9A4F31567E15E1C34633121C0C218301ED15A35
+ 1DEF98267859F0774F0B64071F444C5CA82B88274DE94A5B3AB02E58829BE11C
+ 5E82E499A42A46048B79C567620DE1092D0074043B9BCB781AFAD02151B07719
+ 0DE44000003B}
+ ExplicitWidth = 386
+ end
+ end
+ object edtPassword: TEdit
+ Left = 96
+ Top = 132
+ Width = 278
+ Height = 21
+ PasswordChar = '*'
+ TabOrder = 2
+ end
+ object bAceptar: TButton
+ Left = 208
+ Top = 203
+ Width = 75
+ Height = 25
+ Caption = '&Aceptar'
+ Default = True
+ TabOrder = 3
+ OnClick = bAceptarClick
+ end
+ object bCancelar: TButton
+ Left = 296
+ Top = 203
+ Width = 75
+ Height = 25
+ Cancel = True
+ Caption = '&Salir'
+ ModalResult = 2
+ TabOrder = 4
+ end
+ object edtUser: TEdit
+ Left = 96
+ Top = 104
+ Width = 278
+ Height = 21
+ TabOrder = 1
+ OnKeyPress = edtUserKeyPress
+ end
+ object Button1: TButton
+ Left = 16
+ Top = 203
+ Width = 129
+ Height = 25
+ Caption = 'C&onfigurar conexi'#243'n...'
+ TabOrder = 5
+ OnClick = ToolButton4Click
+ end
+ object Timer1: TTimer
+ Enabled = False
+ Interval = 5000
+ OnTimer = Timer1Timer
+ Left = 344
+ Top = 64
+ end
+ object JvAppRegistryStorage1: TJvAppRegistryStorage
+ StorageOptions.BooleanStringTrueValues = 'TRUE, YES, Y'
+ StorageOptions.BooleanStringFalseValues = 'FALSE, NO, N'
+ StorageOptions.BooleanAsString = False
+ Root = 'Software\%APPL_NAME%'
+ SubStorages = <>
+ Left = 14
+ Top = 168
+ end
+ object JvFormStorage1: TJvFormStorage
+ AppStorage = JvAppRegistryStorage1
+ AppStoragePath = '\'
+ Options = []
+ StoredProps.Strings = (
+ 'edtUser.Text'
+ 'edtPassword.Text')
+ StoredValues = <
+ item
+ Name = 'Ruta'
+ Value = ''
+ end>
+ Left = 48
+ Top = 168
+ end
+end
diff --git a/Source/ApplicationBase/Usuarios/Views/uEditorLogin.pas b/Source/ApplicationBase/Usuarios/Views/uEditorLogin.pas
new file mode 100644
index 0000000..b2293a0
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Views/uEditorLogin.pas
@@ -0,0 +1,140 @@
+unit uEditorLogin;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+ Dialogs, StdCtrls, ExtCtrls, ComCtrls, cxGraphics, cxControls,
+ cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxDropDownEdit,
+ cxImageComboBox, ImgList, PngImageList, pngimage, ToolWin, JvExControls,
+ JvComponent, JvGradient, JvGIF, JvComponentBase, JvFormPlacement,
+ JvAppStorage, JvAppRegistryStorage, uIEditorLogin, uUsuariosController;
+
+type
+ TfEditorLogin = class(TForm, IEditorLogin)
+ Panel1: TPanel;
+ Label3: TLabel;
+ Label4: TLabel;
+ edtPassword: TEdit;
+ bAceptar: TButton;
+ bCancelar: TButton;
+ Label1: TLabel;
+ edtUser: TEdit;
+ JvGradient1: TJvGradient;
+ Button1: TButton;
+ Timer1: TTimer;
+ JvAppRegistryStorage1: TJvAppRegistryStorage;
+ JvFormStorage1: TJvFormStorage;
+ Image1: TImage;
+ procedure bAceptarClick(Sender: TObject);
+ procedure ToolButton4Click(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure Timer1Timer(Sender: TObject);
+ procedure FormCreate(Sender: TObject);
+ procedure FormDestroy(Sender: TObject);
+ procedure edtUserKeyPress(Sender: TObject; var Key: Char);
+ private
+ FController : IUsuariosController;
+ FIntentos : Integer;
+ function GetController : IUsuariosController;
+ procedure SetController (const AValue : IUsuariosController);
+ published
+ property Controller : IUsuariosController read GetController write SetController;
+ end;
+
+
+implementation
+
+uses
+ uAdminPV_App, uDMBase;
+
+{$R *.dfm}
+
+{
+********************************* TfEditorLogin **********************************
+}
+procedure TfEditorLogin.bAceptarClick(Sender: TObject);
+var
+ bOk : Boolean;
+begin
+ Timer1.Enabled := False;
+
+ ShowHourglassCursor;
+ try
+ bOK := FController.ComprobarUsuario(edtUser.Text, edtPassword.Text);
+ finally
+ HideHourglassCursor;
+ end;
+
+ if bOk then
+ ModalResult := mrOK
+ else begin
+ Application.MessageBox('Usuario no válido. Compruebe si ha escrito correctamente'
+ + #13 + #10 + 'el usuario y la contraseña.', 'Atención', MB_OK);
+ Inc(FIntentos);
+ if (Controller.MaxIntentosLogin > 0) and (FIntentos = Controller.MaxIntentosLogin) then
+ ModalResult := mrCancel;
+ end;
+end;
+
+procedure TfEditorLogin.ToolButton4Click(Sender: TObject);
+var
+ ATimer : Boolean;
+begin
+ ATimer := False;
+ if Timer1.Enabled then
+ begin
+ ATimer := True;
+ Timer1.Enabled := False;
+ end;
+
+ dmBase.ConfigurarConexion;
+
+ if ATimer then
+ Timer1.Enabled := True;
+end;
+
+procedure TfEditorLogin.edtUserKeyPress(Sender: TObject; var Key: Char);
+begin
+ // Desactivar el timer cuando el usuario empieza a escribir
+ Timer1.Enabled := False;
+end;
+
+procedure TfEditorLogin.FormCreate(Sender: TObject);
+begin
+ FIntentos := 0;
+end;
+
+procedure TfEditorLogin.FormDestroy(Sender: TObject);
+begin
+ FController := NIL;
+end;
+
+procedure TfEditorLogin.FormShow(Sender: TObject);
+begin
+ Self.Caption := AppAdminPV.AppFullName;
+ JvFormStorage1.RestoreFormPlacement;
+
+ // Hacer login automática si hay usuario/password y no hay más de una base
+ // de datos como opción para conectarse.
+ if ((Length(edtUser.Text) > 0) and (Length(edtPassword.Text) > 0)) then
+ Timer1.Enabled := True;
+end;
+
+function TfEditorLogin.GetController: IUsuariosController;
+begin
+ Result := FController;
+end;
+
+procedure TfEditorLogin.SetController(const AValue: IUsuariosController);
+begin
+ FController := AValue;
+end;
+
+procedure TfEditorLogin.Timer1Timer(Sender: TObject);
+begin
+ Timer1.Enabled := False;
+ bAceptar.Click;
+end;
+
+end.
diff --git a/Source/ApplicationBase/Usuarios/Views/uEditorPerfilUsuario.dfm b/Source/ApplicationBase/Usuarios/Views/uEditorPerfilUsuario.dfm
new file mode 100644
index 0000000..b5c73f1
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Views/uEditorPerfilUsuario.dfm
@@ -0,0 +1,48 @@
+inherited fEditorPerfilUsuario: TfEditorPerfilUsuario
+ Caption = 'fEditorPerfilUsuario'
+ ExplicitHeight = 492
+ PixelsPerInch = 96
+ TextHeight = 13
+ inherited TBXDock: TTBXDock
+ inherited tbxMain: TTBXToolbar
+ ExplicitWidth = 273
+ end
+ end
+ inherited StatusBar: TStatusBar
+ Panels = <
+ item
+ Width = 200
+ end>
+ Visible = True
+ end
+ inherited EditorActionList: TActionList
+ inherited actNuevo: TAction
+ Visible = False
+ end
+ inherited actModificar: TAction
+ Visible = False
+ end
+ inherited actPrevisualizar: TAction
+ Visible = False
+ end
+ inherited actImprimir: TAction
+ Visible = False
+ end
+ end
+ inherited dsDataTable: TDADataSource
+ OnDataChange = dsDataTableDataChange
+ end
+ object dxLayoutLookAndFeelList1: TdxLayoutLookAndFeelList
+ Left = 248
+ Top = 168
+ object dxLayoutOfficeLookAndFeel1: TdxLayoutOfficeLookAndFeel
+ GroupOptions.CaptionOptions.Font.Charset = DEFAULT_CHARSET
+ GroupOptions.CaptionOptions.Font.Color = clWindowText
+ GroupOptions.CaptionOptions.Font.Height = -11
+ GroupOptions.CaptionOptions.Font.Name = 'Tahoma'
+ GroupOptions.CaptionOptions.Font.Style = [fsBold]
+ GroupOptions.CaptionOptions.TextColor = clHighlight
+ GroupOptions.CaptionOptions.UseDefaultFont = False
+ end
+ end
+end
diff --git a/Source/ApplicationBase/Usuarios/Views/uEditorPerfilUsuario.pas b/Source/ApplicationBase/Usuarios/Views/uEditorPerfilUsuario.pas
new file mode 100644
index 0000000..63600e5
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Views/uEditorPerfilUsuario.pas
@@ -0,0 +1,240 @@
+unit uEditorPerfilUsuario;
+
+interface
+
+uses
+ Windows, Menus, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+ Dialogs, uEditorDBItem, JvAppStorage, JvAppRegistryStorage, DB, uDAInterfaces,
+ uDADataTable, JvComponentBase, JvFormPlacement, ImgList, PngImageList,
+ StdActns, ActnList, ComCtrls, JvExComCtrls, JvStatusBar, TBX, TB2Item,
+ TB2Dock, TB2Toolbar, pngimage, ExtCtrls, JvExControls, JvNavigationPane,
+ uIEditorPerfilUsuario, uUsuariosController, uCustomView, uViewBase,
+ uViewPerfilUsuario, uBizUsuarios, dxLayoutLookAndFeels;
+
+type
+ TfEditorPerfilUsuario = class(TfEditorDBItem, IEditorPerfilUsuario)
+ dxLayoutLookAndFeelList1: TdxLayoutLookAndFeelList;
+ dxLayoutOfficeLookAndFeel1: TdxLayoutOfficeLookAndFeel;
+ procedure actGuardarExecute(Sender: TObject);
+ procedure actGuardarCerrarExecute(Sender: TObject);
+ procedure dsDataTableDataChange(Sender: TObject; Field: TField);
+ procedure FormShow(Sender: TObject);
+ private
+ FController : IUsuariosController;
+ FPerfilUsuario : IBizPerfilUsuario;
+ FViewPerfilUsuario : IViewPerfilUsuario;
+ protected
+ function GetController : IUsuariosController;
+ procedure SetController (const Value : IUsuariosController);
+
+ function GetPerfilUsuario: IBizPerfilUsuario;
+ procedure SetPerfilUsuario(const Value: IBizPerfilUsuario);
+
+ procedure GuardarInterno;
+ procedure EliminarInterno;
+ procedure ActualizarEstadoEditor;
+ function HayDatos: Boolean;
+ //Si queremos crear otra vista para el editor heredado solo tendriamos que
+ //sobreescribir este metodo
+ procedure AsignarVista; virtual;
+ procedure PonerTitulos(const ATitulo: string = '');
+
+ function GetViewPerfilUsuario: IViewPerfilUsuario;
+ procedure SetViewPerfilUsuario(const Value: IViewPerfilUsuario);
+ property ViewPerfilUsuario: IViewPerfilUsuario read GetViewPerfilUsuario write SetViewPerfilUsuario;
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ property Controller : IUsuariosController read GetController write SetController;
+ property PerfilUsuario: IBizPerfilUsuario read GetPerfilUsuario write SetPerfilUsuario;
+ end;
+
+
+implementation
+
+{$R *.dfm}
+
+{ TfEditorUsuario }
+
+uses
+ cxControls, uDialogUtils;
+
+var
+ FIDNuevoGuardado : Integer = -1;
+
+procedure TfEditorPerfilUsuario.actGuardarCerrarExecute(Sender: TObject);
+begin
+ ShowHourglassCursor;
+ try
+ if actGuardar.Execute then
+ actCerrar.Execute;
+ finally
+ HideHourglassCursor;
+ end;
+end;
+
+procedure TfEditorPerfilUsuario.actGuardarExecute(Sender: TObject);
+begin
+ if actGuardar.Enabled then
+ begin
+ GuardarInterno;
+ ActualizarEstadoEditor;
+ end;
+end;
+
+procedure TfEditorPerfilUsuario.ActualizarEstadoEditor;
+begin
+ PonerTitulos;
+ if HayDatos then
+ begin
+ if (Self.Modified) and (dsDataTable.DataTable.State <> dsInsert) then
+ StatusBar.Panels[0].Text := ' Se han producido cambios'
+ else
+ StatusBar.Panels[0].Text := '';
+ end;
+end;
+
+procedure TfEditorPerfilUsuario.AsignarVista;
+var
+ AViewPerfilUsuario: TfrViewPerfilUsuario;
+begin
+ AViewPerfilUsuario := TfrViewPerfilUsuario.Create(Self);
+ with AViewPerfilUsuario do
+ begin
+ Parent := Self;
+ Align := alClient;
+ dxLayoutControlArticulo.LookAndFeel := dxLayoutOfficeLookAndFeel1;
+ end;
+ ViewPerfilUsuario := AViewPerfilUsuario;
+end;
+
+constructor TfEditorPerfilUsuario.Create(AOwner: TComponent);
+begin
+ inherited;
+ AsignarVista;
+end;
+
+destructor TfEditorPerfilUsuario.Destroy;
+begin
+ // Utilizar mejor OnClose;
+ inherited;
+end;
+
+procedure TfEditorPerfilUsuario.dsDataTableDataChange(Sender: TObject;
+ Field: TField);
+begin
+ inherited;
+ ActualizarEstadoEditor;
+end;
+
+procedure TfEditorPerfilUsuario.EliminarInterno;
+begin
+ if (ShowConfirmMessage('Eliminar el perfil', '¿Desea eliminar este perfil?') = IDYES) then
+ begin
+ inherited;
+ if not FController.EliminarPerfil(FPerfilUsuario) then
+ actRefrescar.Execute;
+ end;
+end;
+
+procedure TfEditorPerfilUsuario.FormShow(Sender: TObject);
+begin
+ inherited;
+ ActualizarEstadoEditor;
+ if Assigned(Parent) then
+ begin
+ StatusBar.Visible := False;
+ actCerrar.ShortCut := 0
+ end
+ else begin
+ StatusBar.Visible := True;
+ actCerrar.ShortCut := ShortCut(VK_ESCAPE, []);
+ end;
+end;
+
+function TfEditorPerfilUsuario.GetController: IUsuariosController;
+begin
+ Result := FController;
+end;
+
+function TfEditorPerfilUsuario.GetPerfilUsuario: IBizPerfilUsuario;
+begin
+ Result := FPerfilUsuario;
+end;
+
+function TfEditorPerfilUsuario.GetViewPerfilUsuario: IViewPerfilUsuario;
+begin
+ Result := FViewPerfilUsuario;
+end;
+
+procedure TfEditorPerfilUsuario.GuardarInterno;
+begin
+ inherited;
+ if FController.GuardarPerfil(FPerfilUsuario) then
+ begin
+ FIDNuevoGuardado := FPerfilUsuario.ID;
+ FPerfilUsuario.DataTable.CancelUpdates;
+ Modified := False;
+ actRefrescar.Execute;
+ end;
+end;
+
+function TfEditorPerfilUsuario.HayDatos: Boolean;
+begin
+ Result := Assigned(dsDataTable.DataTable) and (dsDataTable.DataTable.State <> dsInactive)
+ and (not dsDataTable.DataTable.IsEmpty);
+end;
+
+procedure TfEditorPerfilUsuario.PonerTitulos(const ATitulo: string);
+var
+ FTitulo : String;
+begin
+ if Assigned(FPerfilUsuario) then
+ begin
+ if FPerfilUsuario.EsNuevo then
+ FTitulo := 'Nuevo perfil'
+ else
+ FTitulo := 'Perfil';
+
+ if Length(FPerfilUsuario.USERNAME) > 0 then
+ FTitulo := FTitulo + ' - ' + FPerfilUsuario.USERNAME;
+ end;
+
+ if ReadOnly then
+ begin
+ JvNavPanelHeader.Caption := FTitulo + ' (NO MODIFICABLE)';
+ Caption := FTitulo + ' (NO MODIFICABLE)';
+ end
+ else
+ begin
+ JvNavPanelHeader.Caption := FTitulo;
+ Caption := FTitulo;
+ end;
+end;
+
+procedure TfEditorPerfilUsuario.SetController(const Value: IUsuariosController);
+begin
+ FController := Value;
+ if Assigned(FViewPerfilUsuario) and Assigned(FController) then
+ FViewPerfilUsuario.Controller := FController;
+end;
+
+procedure TfEditorPerfilUsuario.SetPerfilUsuario(
+ const Value: IBizPerfilUsuario);
+begin
+ FPerfilUsuario := Value;
+ dsDataTable.DataTable := FPerfilUsuario.DataTable;
+
+ if Assigned(FViewPerfilUsuario) and Assigned(FPerfilUsuario) then
+ FViewPerfilUsuario.PerfilUsuario := FPerfilUsuario;
+end;
+
+procedure TfEditorPerfilUsuario.SetViewPerfilUsuario(const Value: IViewPerfilUsuario);
+begin
+ FViewPerfilUsuario := Value;
+
+ if Assigned(FViewPerfilUsuario) and Assigned(FPerfilUsuario) then
+ FViewPerfilUsuario.PerfilUsuario := FPerfilUsuario;
+end;
+
+end.
diff --git a/Source/ApplicationBase/Usuarios/Views/uEditorPerfilesUsuario.dfm b/Source/ApplicationBase/Usuarios/Views/uEditorPerfilesUsuario.dfm
new file mode 100644
index 0000000..8637165
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Views/uEditorPerfilesUsuario.dfm
@@ -0,0 +1,59 @@
+inherited fEditorPerfilesUsuario: TfEditorPerfilesUsuario
+ Caption = 'fEditorPerfilesUsuario'
+ ClientHeight = 493
+ ClientWidth = 840
+ ExplicitWidth = 848
+ ExplicitHeight = 520
+ PixelsPerInch = 96
+ TextHeight = 13
+ inherited JvNavPanelHeader: TJvNavPanelHeader
+ Width = 840
+ ExplicitWidth = 840
+ inherited Image1: TImage
+ Left = 813
+ ExplicitLeft = 813
+ end
+ end
+ inherited TBXDock: TTBXDock
+ Width = 840
+ ExplicitWidth = 840
+ inherited tbxMain: TTBXToolbar
+ ExplicitWidth = 213
+ end
+ inherited tbxMenu: TTBXToolbar
+ ExplicitWidth = 840
+ end
+ inherited tbxFiltro: TTBXToolbar
+ Left = 213
+ DockPos = 208
+ Visible = False
+ ExplicitLeft = 213
+ end
+ end
+ inherited StatusBar: TStatusBar
+ Top = 474
+ Width = 840
+ ExplicitTop = 474
+ ExplicitWidth = 840
+ end
+ inherited EditorActionList: TActionList
+ inherited actNuevo: TAction
+ OnExecute = actNuevoExecute
+ end
+ inherited actModificar: TAction
+ OnExecute = actModificarExecute
+ end
+ inherited actPrevisualizar: TAction
+ Visible = False
+ end
+ inherited actImprimir: TAction
+ Visible = False
+ end
+ inherited actDuplicar: TAction
+ Visible = False
+ end
+ end
+ inherited dsDataTable: TDADataSource
+ OnDataChange = dsDataTableDataChange
+ end
+end
diff --git a/Source/ApplicationBase/Usuarios/Views/uEditorPerfilesUsuario.pas b/Source/ApplicationBase/Usuarios/Views/uEditorPerfilesUsuario.pas
new file mode 100644
index 0000000..a51233f
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Views/uEditorPerfilesUsuario.pas
@@ -0,0 +1,199 @@
+unit uEditorPerfilesUsuario;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+ Dialogs, uEditorGridBase, Menus, JvAppStorage, JvAppRegistryStorage, DB,
+ uDAInterfaces, uDADataTable, JvComponentBase, JvFormPlacement, ImgList,
+ PngImageList, StdActns, ActnList, ComCtrls, JvExComCtrls, JvStatusBar, TBX,
+ TB2ExtItems, TBXExtItems, TB2Item, TB2Dock, TB2Toolbar, pngimage, ExtCtrls,
+ JvExControls, JvNavigationPane, uIEditorPerfilesUsuario,
+ uUsuariosController, uBizUsuarios, uViewPerfilesUsuario;
+
+type
+ TfEditorPerfilesUsuario = class(TfEditorGridBase, IEditorPerfilesUsuario)
+ procedure actNuevoExecute(Sender: TObject);
+ procedure actModificarExecute(Sender: TObject);
+ procedure actEliminarExecute(Sender: TObject);
+ procedure dsDataTableDataChange(Sender: TObject; Field: TField);
+ procedure FormShow(Sender: TObject);
+ private
+ FPerfiles : IBizPerfilUsuario;
+ FController : IUsuariosController;
+ protected
+ function GetController : IUsuariosController;
+ procedure SetController (const Value : IUsuariosController);
+
+ function GetPerfilesUsuario: IBizPerfilUsuario;
+ procedure SetPerfilesUsuario(const Value: IBizPerfilUsuario);
+
+ procedure NuevoInterno;
+ procedure EliminarInterno;
+ procedure ModificarInterno;
+ procedure ActualizarEstadoEditor;
+ //Si queremos crear otra vista para el editor heredado solo tendriamos que
+ //sobreescribir este metodo
+ procedure AsignarVista; virtual;
+ public
+ procedure PonerTitulos(const ATitulo: string = '');
+ property PerfilesUsuario: IBizPerfilUsuario read GetPerfilesUsuario write SetPerfilesUsuario;
+ property Controller : IUsuariosController read GetController write SetController;
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ end;
+
+implementation
+
+{$R *.dfm}
+
+uses
+ uDialogUtils;
+
+{ TfEditorUsuarios }
+
+procedure TfEditorPerfilesUsuario.actEliminarExecute(Sender: TObject);
+begin
+ if actEliminar.Enabled then
+ begin
+ EliminarInterno;
+ ActualizarEstadoEditor;
+ end;
+end;
+
+procedure TfEditorPerfilesUsuario.actModificarExecute(Sender: TObject);
+begin
+ if actModificar.Enabled then
+ begin
+ ModificarInterno;
+ ActualizarEstadoEditor;
+ end;
+end;
+
+procedure TfEditorPerfilesUsuario.actNuevoExecute(Sender: TObject);
+begin
+ if actNuevo.Enabled then
+ begin
+ NuevoInterno;
+ ActualizarEstadoEditor;
+ end;
+end;
+
+procedure TfEditorPerfilesUsuario.ActualizarEstadoEditor;
+begin
+ PonerTitulos;
+end;
+
+procedure TfEditorPerfilesUsuario.AsignarVista;
+begin
+ ViewGrid := CreateView(TfrViewPerfilesUsuario) as IViewPerfilesUsuario;
+end;
+
+constructor TfEditorPerfilesUsuario.Create(AOwner: TComponent);
+begin
+ inherited;
+ AsignarVista;
+end;
+
+destructor TfEditorPerfilesUsuario.Destroy;
+begin
+ FPerfiles := NIL;
+ FController := NIl;
+
+ inherited;
+end;
+
+procedure TfEditorPerfilesUsuario.dsDataTableDataChange(Sender: TObject;
+ Field: TField);
+begin
+ inherited;
+ ActualizarEstadoEditor
+end;
+
+procedure TfEditorPerfilesUsuario.EliminarInterno;
+begin
+ if (ShowConfirmMessage('Eliminar un perfil', Format('¿Desea eliminar el perfil %s?', [FPerfiles.USERNAME])) = IDYES) then
+ begin
+ inherited;
+ //Para que en el caso de no poderse realizar la operación se refresquen
+ //los datos y no nos permita eliminar un registro a la segunda
+ FController.EliminarPerfil(FPerfiles);
+ actRefrescar.Execute;
+ end;
+end;
+
+procedure TfEditorPerfilesUsuario.FormShow(Sender: TObject);
+begin
+ inherited;
+ ActualizarEstadoEditor;
+ if Assigned(Parent) then
+ begin
+ StatusBar.Visible := False;
+ actCerrar.ShortCut := 0
+ end
+ else begin
+ StatusBar.Visible := True;
+ actCerrar.ShortCut := ShortCut(VK_ESCAPE, []);
+ end;
+end;
+
+function TfEditorPerfilesUsuario.GetController: IUsuariosController;
+begin
+ Result := FController;
+end;
+
+function TfEditorPerfilesUsuario.GetPerfilesUsuario: IBizPerfilUsuario;
+begin
+ Result := FPerfiles;
+end;
+
+procedure TfEditorPerfilesUsuario.ModificarInterno;
+begin
+ inherited;
+ FController.VerPerfil(FPerfiles.ID);
+ actRefrescar.Execute;
+end;
+
+procedure TfEditorPerfilesUsuario.NuevoInterno;
+var
+ ANuevoPerfil : IBizPerfilUsuario;
+begin
+ inherited;
+ ANuevoPerfil := FController.NuevoPerfil;
+ FController.VerPerfil(ANuevoPerfil);
+ actRefrescar.Execute;
+end;
+
+procedure TfEditorPerfilesUsuario.PonerTitulos(const ATitulo: string);
+var
+ FTitulo : String;
+begin
+ FTitulo := 'Lista de perfiles de usuario';
+
+ if ReadOnly then
+ begin
+ JvNavPanelHeader.Caption := FTitulo + ' (NO MODIFICABLE)';
+ Caption := FTitulo + ' (NO MODIFICABLE)';
+ end
+ else
+ begin
+ JvNavPanelHeader.Caption := FTitulo;
+ Caption := FTitulo;
+ end;
+end;
+
+procedure TfEditorPerfilesUsuario.SetController(const Value: IUsuariosController);
+begin
+ FController := Value;
+end;
+
+procedure TfEditorPerfilesUsuario.SetPerfilesUsuario(
+ const Value: IBizPerfilUsuario);
+begin
+ FPerfiles := Value;
+ dsDataTable.DataTable := FPerfiles.DataTable;
+ if Assigned(ViewGrid) then
+ (ViewGrid as IViewPerfilesUsuario).PerfilesUsuario := FPerfiles;
+end;
+
+end.
diff --git a/Source/ApplicationBase/Usuarios/Views/uEditorUsuario.dfm b/Source/ApplicationBase/Usuarios/Views/uEditorUsuario.dfm
new file mode 100644
index 0000000..8ee899b
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Views/uEditorUsuario.dfm
@@ -0,0 +1,139 @@
+inherited fEditorUsuario: TfEditorUsuario
+ Caption = 'fEditorUsuario'
+ ExplicitHeight = 492
+ PixelsPerInch = 96
+ TextHeight = 13
+ inherited TBXDock: TTBXDock
+ inherited tbxMain: TTBXToolbar
+ ExplicitWidth = 408
+ object TBXItem33: TTBXItem [7]
+ Action = actCambiarPassword
+ end
+ end
+ inherited tbxMenu: TTBXToolbar
+ object TBXSubmenuItem2: TTBXSubmenuItem [4]
+ Caption = '&Herramientas'
+ object TBXItem7: TTBXItem
+ Action = actCambiarPassword
+ end
+ end
+ end
+ end
+ inherited StatusBar: TStatusBar
+ Panels = <
+ item
+ Width = 200
+ end>
+ Visible = True
+ end
+ inline frViewUsuario1: TfrViewUsuario [3]
+ Left = 0
+ Top = 76
+ Width = 656
+ Height = 370
+ Align = alClient
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 3
+ ReadOnly = False
+ ExplicitTop = 76
+ ExplicitWidth = 656
+ ExplicitHeight = 370
+ inherited dxLayoutControlArticulo: TdxLayoutControl
+ Width = 656
+ ExplicitWidth = 656
+ inherited PngSpeedButton3: TPngSpeedButton
+ Top = 84
+ ExplicitTop = 84
+ end
+ inherited eNombre: TcxDBTextEdit
+ Top = 30
+ ExplicitTop = 30
+ ExplicitWidth = 164
+ Width = 164
+ end
+ inherited eUsuario: TcxDBTextEdit
+ Top = 57
+ ExplicitTop = 57
+ ExplicitWidth = 108
+ Width = 108
+ end
+ inherited eMail: TcxDBHyperLinkEdit
+ Top = 84
+ Properties.Prefix = 'mailto:'
+ ExplicitTop = 84
+ end
+ inherited ePassword: TcxTextEdit
+ Top = 163
+ ExplicitTop = 163
+ ExplicitWidth = 121
+ Width = 121
+ end
+ inherited eConfirmarPassword: TcxTextEdit
+ Top = 190
+ ExplicitTop = 190
+ ExplicitWidth = 372
+ Width = 372
+ end
+ inherited cbPerfil: TcxComboBox
+ Top = 112
+ ExplicitTop = 112
+ end
+ inherited dxLayoutGroup1: TdxLayoutGroup
+ LookAndFeel = dxLayoutOfficeLookAndFeel1
+ end
+ end
+ end
+ inherited EditorActionList: TActionList [4]
+ inherited actNuevo: TAction
+ Visible = False
+ end
+ inherited actModificar: TAction
+ Visible = False
+ end
+ inherited actConfPagina: TAction
+ Visible = False
+ end
+ inherited actPrevisualizar: TAction
+ Visible = False
+ end
+ inherited actImprimir: TAction
+ Visible = False
+ end
+ object actCambiarPassword: TAction
+ Category = 'Herramientas'
+ Caption = 'Cambiar la contrase'#241'a...'
+ OnExecute = actCambiarPasswordExecute
+ OnUpdate = actCambiarPasswordUpdate
+ end
+ end
+ inherited SmallImages: TPngImageList [5]
+ end
+ inherited LargeImages: TPngImageList [6]
+ end
+ inherited JvFormStorage: TJvFormStorage [7]
+ end
+ inherited JvAppRegistryStorage: TJvAppRegistryStorage [8]
+ end
+ inherited dsDataTable: TDADataSource
+ OnDataChange = dsDataTableDataChange
+ Top = 80
+ end
+ object dxLayoutLookAndFeelList1: TdxLayoutLookAndFeelList
+ Left = 336
+ Top = 160
+ object dxLayoutOfficeLookAndFeel1: TdxLayoutOfficeLookAndFeel
+ GroupOptions.CaptionOptions.Font.Charset = DEFAULT_CHARSET
+ GroupOptions.CaptionOptions.Font.Color = clWindowText
+ GroupOptions.CaptionOptions.Font.Height = -11
+ GroupOptions.CaptionOptions.Font.Name = 'Tahoma'
+ GroupOptions.CaptionOptions.Font.Style = [fsBold]
+ GroupOptions.CaptionOptions.TextColor = clHighlight
+ GroupOptions.CaptionOptions.UseDefaultFont = False
+ end
+ end
+end
diff --git a/Source/ApplicationBase/Usuarios/Views/uEditorUsuario.pas b/Source/ApplicationBase/Usuarios/Views/uEditorUsuario.pas
new file mode 100644
index 0000000..87a8742
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Views/uEditorUsuario.pas
@@ -0,0 +1,308 @@
+unit uEditorUsuario;
+
+interface
+
+uses
+ Windows, Menus, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+ Dialogs, uEditorDBItem, JvAppStorage, JvAppRegistryStorage, DB, uDAInterfaces,
+ uDADataTable, JvComponentBase, JvFormPlacement, ImgList, PngImageList,
+ StdActns, ActnList, ComCtrls, JvExComCtrls, JvStatusBar, TBX, TB2Item,
+ TB2Dock, TB2Toolbar, pngimage, ExtCtrls, JvExControls, JvNavigationPane,
+ uIEditorUsuario, uUsuariosController, uCustomView, uViewBase, uViewUsuario,
+ uBizUsuarios, dxLayoutLookAndFeels;
+
+type
+ TfEditorUsuario = class(TfEditorDBItem, IEditorUsuario)
+ dxLayoutLookAndFeelList1: TdxLayoutLookAndFeelList;
+ dxLayoutOfficeLookAndFeel1: TdxLayoutOfficeLookAndFeel;
+ actCambiarPassword: TAction;
+ TBXSubmenuItem2: TTBXSubmenuItem;
+ TBXItem7: TTBXItem;
+ TBXItem33: TTBXItem;
+ frViewUsuario1: TfrViewUsuario;
+ procedure actEliminarUpdate(Sender: TObject);
+ procedure actCambiarPasswordExecute(Sender: TObject);
+ procedure actCambiarPasswordUpdate(Sender: TObject);
+ procedure actGuardarCerrarExecute(Sender: TObject);
+ procedure actGuardarExecute(Sender: TObject);
+ procedure dsDataTableDataChange(Sender: TObject; Field: TField);
+ procedure actRefrescarExecute(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ private
+ FController : IUsuariosController;
+ FUsuario : IBizUsuario;
+ FViewUsuario : IViewUsuario;
+ protected
+ function GetController : IUsuariosController;
+ procedure SetController (const Value : IUsuariosController);
+
+ function GetUsuario: IBizUsuario;
+ procedure SetUsuario(const Value: IBizUsuario);
+
+ procedure GuardarInterno;
+ procedure EliminarInterno;
+ procedure RefrescarInterno;
+
+ procedure ActualizarEstadoEditor;
+ procedure PonerTitulos(const ATitulo: string = '');
+ function HayDatos: Boolean;
+ function GetViewUsuario: IViewUsuario;
+ procedure SetViewUsuario(const Value: IViewUsuario);
+ property ViewUsuario: IViewUsuario read GetViewUsuario write SetViewUsuario;
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ property Controller : IUsuariosController read GetController write SetController;
+ property Usuario: IBizUsuario read GetUsuario write SetUsuario;
+ end;
+
+
+implementation
+
+{$R *.dfm}
+
+uses
+ uDialogUtils, cxControls;
+
+{ TfEditorUsuario }
+
+var
+ FIDNuevoGuardado : Integer = -1;
+
+procedure TfEditorUsuario.actCambiarPasswordExecute(Sender: TObject);
+begin
+ inherited;
+ FController.CambiarPassword(FUsuario.ID);
+end;
+
+procedure TfEditorUsuario.actCambiarPasswordUpdate(Sender: TObject);
+begin
+ inherited;
+ (Sender as TAction).Enabled := not FUsuario.EsNuevo;
+end;
+
+procedure TfEditorUsuario.actEliminarUpdate(Sender: TObject);
+begin
+ inherited;
+ if (Sender as TAction).Enabled then
+ (Sender as TAction).Enabled := (FUsuario.PRIVILEGED = 0);
+end;
+
+procedure TfEditorUsuario.actGuardarCerrarExecute(Sender: TObject);
+begin
+ ShowHourglassCursor;
+ try
+ if actGuardar.Execute then
+ actCerrar.Execute;
+ finally
+ HideHourglassCursor;
+ end;
+end;
+
+procedure TfEditorUsuario.actGuardarExecute(Sender: TObject);
+begin
+ if actModificar.Enabled then
+ begin
+ GuardarInterno;
+ ActualizarEstadoEditor;
+ end;
+end;
+
+procedure TfEditorUsuario.actRefrescarExecute(Sender: TObject);
+begin
+ if actRefrescar.Enabled then
+ begin
+ RefrescarInterno;
+ ActualizarEstadoEditor;
+ end;
+end;
+
+procedure TfEditorUsuario.ActualizarEstadoEditor;
+begin
+ PonerTitulos;
+ if HayDatos then
+ begin
+ if (Self.Modified) and (dsDataTable.DataTable.State <> dsInsert) then
+ StatusBar.Panels[0].Text := ' Se han producido cambios'
+ else
+ StatusBar.Panels[0].Text := '';
+ end;
+end;
+
+constructor TfEditorUsuario.Create(AOwner: TComponent);
+begin
+ inherited;
+ //pgPaginas.ActivePageIndex := 0;
+ FViewUsuario := frViewUsuario1;
+end;
+
+destructor TfEditorUsuario.Destroy;
+begin
+ // Utilizar mejor OnClose;
+ inherited;
+end;
+
+procedure TfEditorUsuario.dsDataTableDataChange(Sender: TObject; Field: TField);
+begin
+ inherited;
+ ActualizarEstadoEditor;
+end;
+
+procedure TfEditorUsuario.EliminarInterno;
+begin
+ if (Application.MessageBox('¿Desea borrar este usuario?', 'Atención', MB_YESNO) = IDYES) then
+ begin
+ inherited;
+ if not FController.EliminarUsuario(FUsuario.ID) then
+ actRefrescar.Execute;
+ end;
+end;
+
+procedure TfEditorUsuario.FormShow(Sender: TObject);
+begin
+ inherited;
+ ActualizarEstadoEditor;
+ if Assigned(Parent) then
+ begin
+ StatusBar.Visible := False;
+ actCerrar.ShortCut := 0
+ end
+ else begin
+ StatusBar.Visible := True;
+ actCerrar.ShortCut := ShortCut(VK_ESCAPE, []);
+ end;
+end;
+
+function TfEditorUsuario.GetController: IUsuariosController;
+begin
+ Result := FController;
+end;
+
+function TfEditorUsuario.GetUsuario: IBizUsuario;
+begin
+ Result := FUsuario;
+end;
+
+function TfEditorUsuario.GetViewUsuario: IViewUsuario;
+begin
+ Result := FViewUsuario;
+end;
+
+procedure TfEditorUsuario.GuardarInterno;
+var
+ AMensaje : String;
+ AContinuar : Boolean;
+begin
+ inherited;
+ if FUsuario.EsNuevo then
+ begin
+ if (frViewUsuario1.ePassword.Text <> frViewUsuario1.eConfirmarPassword.Text) then
+ raise Exception.Create('La contraseña no se confirmó correctamente' + #10#13 +
+ 'Asegúrese de que la contraseña y su confirmación sean iguales.')
+ else
+ if not FController.ValidarPassword(frViewUsuario1.ePassword.Text,
+ frViewUsuario1.eUsuario.Text, frViewUsuario1.eNombre.Text, AMensaje) then
+ raise Exception.Create(AMensaje)
+ else begin
+ FUsuario.Edit;
+ FUsuario.PASS := frViewUsuario1.ePassword.Text;
+ FUsuario.Edit;
+ AContinuar := True;
+ end;
+ end
+ else
+ AContinuar := True;
+
+ if AContinuar then
+ begin
+ if FController.GuardarUsuario(FUsuario) then
+ begin
+ FIDNuevoGuardado := FUsuario.ID;
+ FUsuario.DataTable.CancelUpdates;
+ Modified := False;
+ actRefrescar.Execute;
+ end;
+ end
+end;
+
+function TfEditorUsuario.HayDatos: Boolean;
+begin
+ Result := Assigned(dsDataTable.DataTable) and (dsDataTable.DataTable.State <> dsInactive)
+ and (not dsDataTable.DataTable.IsEmpty);
+end;
+
+procedure TfEditorUsuario.PonerTitulos(const ATitulo: string);
+var
+ FTitulo : String;
+begin
+ if Assigned(Usuario) then
+ begin
+ if Usuario.EsNuevo then
+ FTitulo := 'Nuevo usuario'
+ else
+ FTitulo := 'Usuario';
+
+ if Length(Usuario.USERNAME) > 0 then
+ FTitulo := FTitulo + ' - ' + Usuario.USERNAME;
+ end;
+
+ if ReadOnly then
+ begin
+ JvNavPanelHeader.Caption := FTitulo + ' (NO MODIFICABLE)';
+ Caption := FTitulo + ' (NO MODIFICABLE)';
+ end
+ else
+ begin
+ JvNavPanelHeader.Caption := FTitulo;
+ Caption := FTitulo;
+ end;
+end;
+
+procedure TfEditorUsuario.RefrescarInterno;
+begin
+ inherited;
+
+ if (FIDNuevoGuardado > 0) and (FUsuario.ID <> FIDNuevoGuardado) then
+ begin
+ if (dsDataTable.DataTable.IsEmpty) or (not ModifiedQuery) then
+ Exit; // No continuar con el refresco
+
+ dsDataTable.DataTable.DisableControls; //<- No descomentar
+ ShowHourglassCursor;
+ try
+ dsDataTable.DataTable.First;
+ if dsDataTable.DataTable.Locate('ID', FIDNuevoGuardado, []) then
+ FIDNuevoGuardado := -1;
+ finally
+ dsDataTable.DataTable.EnableControls; //<- No descomentar
+ HideHourglassCursor;
+ end;
+ end;
+end;
+
+procedure TfEditorUsuario.SetController(const Value: IUsuariosController);
+begin
+ FController := Value;
+ if Assigned(FViewUsuario) and Assigned(FController) then
+ FViewUsuario.Controller := FController;
+end;
+
+procedure TfEditorUsuario.SetUsuario(const Value: IBizUsuario);
+begin
+ FUsuario := Value;
+ dsDataTable.DataTable := FUsuario.DataTable;
+
+ if Assigned(FViewUsuario) and Assigned(Usuario) then
+ FViewUsuario.Usuario := Usuario;
+
+end;
+
+procedure TfEditorUsuario.SetViewUsuario(const Value: IViewUsuario);
+begin
+ FViewUsuario := Value;
+
+ if Assigned(FViewUsuario) and Assigned(Usuario) then
+ FViewUsuario.Usuario := Usuario;
+end;
+
+end.
diff --git a/Source/ApplicationBase/Usuarios/Views/uEditorUsuarios.dfm b/Source/ApplicationBase/Usuarios/Views/uEditorUsuarios.dfm
new file mode 100644
index 0000000..3ed7895
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Views/uEditorUsuarios.dfm
@@ -0,0 +1,71 @@
+inherited fEditorUsuarios: TfEditorUsuarios
+ Caption = 'fEditorUsuarios'
+ ClientHeight = 493
+ ClientWidth = 840
+ ExplicitWidth = 848
+ ExplicitHeight = 520
+ PixelsPerInch = 96
+ TextHeight = 13
+ inherited JvNavPanelHeader: TJvNavPanelHeader
+ Width = 840
+ ExplicitWidth = 840
+ inherited Image1: TImage
+ Left = 813
+ ExplicitLeft = 813
+ end
+ end
+ inherited TBXDock: TTBXDock
+ Width = 840
+ ExplicitWidth = 840
+ inherited tbxMain: TTBXToolbar
+ ExplicitWidth = 348
+ object TBXItem39: TTBXItem [8]
+ Action = actCambiarPassword
+ end
+ end
+ inherited tbxMenu: TTBXToolbar
+ ExplicitWidth = 840
+ object TBXSubmenuItem2: TTBXSubmenuItem [4]
+ Caption = '&Herramientas'
+ object TBXItem38: TTBXItem
+ Action = actCambiarPassword
+ end
+ end
+ end
+ inherited tbxFiltro: TTBXToolbar
+ Left = 348
+ DockPos = 346
+ Visible = False
+ ExplicitLeft = 348
+ end
+ end
+ inherited StatusBar: TStatusBar
+ Top = 474
+ Width = 840
+ ExplicitTop = 474
+ ExplicitWidth = 840
+ end
+ inherited EditorActionList: TActionList
+ inherited actNuevo: TAction
+ OnExecute = actNuevoExecute
+ end
+ inherited actModificar: TAction
+ OnExecute = actModificarExecute
+ end
+ inherited actPrevisualizar: TAction
+ Visible = False
+ end
+ inherited actImprimir: TAction
+ Visible = False
+ end
+ inherited actDuplicar: TAction
+ Visible = False
+ end
+ object actCambiarPassword: TAction
+ Category = 'Herramientas'
+ Caption = 'Cambiar la contrase'#241'a...'
+ OnExecute = actCambiarPasswordExecute
+ OnUpdate = actCambiarPasswordUpdate
+ end
+ end
+end
diff --git a/Source/ApplicationBase/Usuarios/Views/uEditorUsuarios.pas b/Source/ApplicationBase/Usuarios/Views/uEditorUsuarios.pas
new file mode 100644
index 0000000..edb5738
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Views/uEditorUsuarios.pas
@@ -0,0 +1,239 @@
+unit uEditorUsuarios;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+ Dialogs, uEditorGridBase, Menus, JvAppStorage, JvAppRegistryStorage, DB,
+ uDAInterfaces, uDADataTable, JvComponentBase, JvFormPlacement, ImgList,
+ PngImageList, StdActns, ActnList, ComCtrls, JvExComCtrls, JvStatusBar, TBX,
+ TB2ExtItems, TBXExtItems, TB2Item, TB2Dock, TB2Toolbar, pngimage, ExtCtrls,
+ JvExControls, JvNavigationPane, uCustomView, uViewBase, uViewGridBase,
+ uViewGrid, uViewUsuarios, uIEditorUsuarios, uUsuariosController,
+ uBizUsuarios;
+
+type
+ TfEditorUsuarios = class(TfEditorGridBase, IEditorUsuarios)
+ actCambiarPassword: TAction;
+ TBXSubmenuItem2: TTBXSubmenuItem;
+ TBXItem38: TTBXItem;
+ TBXItem39: TTBXItem;
+ procedure actEliminarUpdate(Sender: TObject);
+ procedure actCambiarPasswordUpdate(Sender: TObject);
+ procedure actCambiarPasswordExecute(Sender: TObject);
+ procedure actNuevoExecute(Sender: TObject);
+ procedure actEliminarExecute(Sender: TObject);
+ procedure actModificarExecute(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ private
+ FUsuarios : IBizUsuario;
+ FController : IUsuariosController;
+ protected
+ function GetController : IUsuariosController;
+ procedure SetController (const Value : IUsuariosController);
+
+ function GetUsuarios: IBizUsuario;
+ procedure SetUsuarios(const Value: IBizUsuario);
+
+ procedure ActualizarEstadoEditor;
+ procedure NuevoInterno;
+ procedure EliminarInterno;
+ procedure ModificarInterno;
+ procedure ImprimirInterno;
+ procedure PrevisualizarInterno;
+ procedure DuplicarInterno;
+
+ //Si queremos crear otra vista para el editor heredado solo tendriamos que
+ //sobreescribir este metodo
+ procedure AsignarVista; virtual;
+ public
+ procedure PonerTitulos(const ATitulo: string = '');
+ property Usuarios: IBizUsuario read GetUsuarios write SetUsuarios;
+ property Controller : IUsuariosController read GetController write SetController;
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ end;
+
+implementation
+
+{$R *.dfm}
+
+uses
+ uDialogUtils;
+
+{ TfEditorUsuarios }
+
+procedure TfEditorUsuarios.actCambiarPasswordExecute(Sender: TObject);
+begin
+ inherited;
+ FController.CambiarPassword(FUsuarios.ID);
+end;
+
+procedure TfEditorUsuarios.actCambiarPasswordUpdate(Sender: TObject);
+begin
+ inherited;
+{ if (Sender as TAction).Enabled then
+ (Sender as TAction).Enabled := HayDatos;}
+end;
+
+procedure TfEditorUsuarios.actEliminarExecute(Sender: TObject);
+begin
+ if actEliminar.Enabled then
+ begin
+ EliminarInterno;
+ ActualizarEstadoEditor;
+ end;
+end;
+
+procedure TfEditorUsuarios.actEliminarUpdate(Sender: TObject);
+begin
+ inherited;
+ if (Sender as TAction).Enabled then
+ (Sender as TAction).Enabled := (FUsuarios.PRIVILEGED = 0);
+end;
+
+procedure TfEditorUsuarios.actModificarExecute(Sender: TObject);
+begin
+ if actModificar.Enabled then
+ begin
+ ModificarInterno;
+ ActualizarEstadoEditor;
+ end;
+end;
+
+procedure TfEditorUsuarios.actNuevoExecute(Sender: TObject);
+begin
+ if actNuevo.Enabled then
+ begin
+ NuevoInterno;
+ ActualizarEstadoEditor;
+ end;
+end;
+
+procedure TfEditorUsuarios.ActualizarEstadoEditor;
+begin
+ PonerTitulos;
+end;
+
+procedure TfEditorUsuarios.AsignarVista;
+begin
+ ViewGrid := CreateView(TfrViewUsuarios) as IViewUsuarios;
+end;
+
+constructor TfEditorUsuarios.Create(AOwner: TComponent);
+begin
+ inherited;
+ AsignarVista;
+end;
+
+destructor TfEditorUsuarios.Destroy;
+begin
+ FUsuarios := NIL;
+ FController := NIl;
+
+ inherited;
+end;
+
+procedure TfEditorUsuarios.DuplicarInterno;
+begin
+ inherited;
+end;
+
+procedure TfEditorUsuarios.EliminarInterno;
+begin
+ if (ShowConfirmMessage('Eliminar un usuario', Format('¿Desea borrar el usuario %s?', [FUsuarios.USERNAME])) = IDYES) then
+ begin
+ inherited;
+ //Para que en el caso de no poderse realizar la operación se refresquen
+ //los datos y no nos permita eliminar un registro a la segunda
+ FController.EliminarUsuario(FUsuarios.ID);
+ actRefrescar.Execute;
+ end;
+end;
+
+procedure TfEditorUsuarios.FormShow(Sender: TObject);
+begin
+ inherited;
+ ActualizarEstadoEditor;
+ if Assigned(Parent) then
+ begin
+ StatusBar.Visible := False;
+ actCerrar.ShortCut := 0
+ end
+ else begin
+ StatusBar.Visible := True;
+ actCerrar.ShortCut := ShortCut(VK_ESCAPE, []);
+ end;
+end;
+
+function TfEditorUsuarios.GetController: IUsuariosController;
+begin
+ Result := FController;
+end;
+
+function TfEditorUsuarios.GetUsuarios: IBizUsuario;
+begin
+ Result := FUsuarios;
+end;
+
+procedure TfEditorUsuarios.ImprimirInterno;
+begin
+ inherited;
+end;
+
+procedure TfEditorUsuarios.ModificarInterno;
+begin
+ inherited;
+ FController.VerUsuario(FUsuarios.ID);
+ actRefrescar.Execute;
+end;
+
+procedure TfEditorUsuarios.NuevoInterno;
+var
+ ANuevoUsuario : IBizUsuario;
+begin
+ inherited;
+ ANuevoUsuario := FController.NuevoUsuario;
+ FController.VerUsuario(ANuevoUsuario);
+ actRefrescar.Execute;
+end;
+
+procedure TfEditorUsuarios.PonerTitulos(const ATitulo: string);
+var
+ FTitulo : String;
+begin
+ FTitulo := 'Lista de usuarios';
+
+ if ReadOnly then
+ begin
+ JvNavPanelHeader.Caption := FTitulo + ' (NO MODIFICABLE)';
+ Caption := FTitulo + ' (NO MODIFICABLE)';
+ end
+ else
+ begin
+ JvNavPanelHeader.Caption := FTitulo;
+ Caption := FTitulo;
+ end;
+
+end;
+
+procedure TfEditorUsuarios.PrevisualizarInterno;
+begin
+ inherited;
+ //
+end;
+
+procedure TfEditorUsuarios.SetController(const Value: IUsuariosController);
+begin
+ FController := Value;
+end;
+
+procedure TfEditorUsuarios.SetUsuarios(const Value: IBizUsuario);
+begin
+ FUsuarios := Value;
+ dsDataTable.DataTable := FUsuarios.DataTable;
+ if Assigned(ViewGrid) then
+ (ViewGrid as IViewUsuarios).Usuarios := FUsuarios;
+end;
+
+end.
diff --git a/Source/ApplicationBase/Usuarios/Views/uUsuario.dfm b/Source/ApplicationBase/Usuarios/Views/uUsuario.dfm
new file mode 100644
index 0000000..93fcc6e
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Views/uUsuario.dfm
@@ -0,0 +1,123 @@
+object fUsuario: TfUsuario
+ Left = 523
+ Top = 415
+ BorderStyle = bsDialog
+ Caption = 'Datos del usuario'
+ ClientHeight = 309
+ ClientWidth = 308
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ Position = poScreenCenter
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Button1: TButton
+ Left = 138
+ Top = 273
+ Width = 75
+ Height = 25
+ Action = actAceptar
+ TabOrder = 1
+ end
+ object Button2: TButton
+ Left = 226
+ Top = 273
+ Width = 75
+ Height = 25
+ Action = actCancelar
+ TabOrder = 2
+ end
+ object TabControl1: TPageControl
+ Left = 8
+ Top = 8
+ Width = 293
+ Height = 257
+ ActivePage = pagUsuario
+ TabOrder = 0
+ object pagUsuario: TTabSheet
+ Caption = 'Usuario'
+ object GroupBox1: TGroupBox
+ Left = 6
+ Top = 5
+ Width = 274
+ Height = 99
+ Caption = 'GroupBox1'
+ TabOrder = 0
+ DesignSize = (
+ 274
+ 99)
+ object Label4: TLabel
+ Left = 34
+ Top = 28
+ Width = 39
+ Height = 13
+ Caption = 'Usuario:'
+ Transparent = False
+ end
+ object Label5: TLabel
+ Left = 16
+ Top = 60
+ Width = 57
+ Height = 13
+ Caption = 'Contrase'#241'a:'
+ Transparent = False
+ end
+ object edtUser: TEdit
+ Left = 88
+ Top = 24
+ Width = 169
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ TabOrder = 0
+ end
+ object edtPassword: TEdit
+ Left = 88
+ Top = 56
+ Width = 169
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ PasswordChar = '*'
+ TabOrder = 1
+ end
+ end
+ object GroupBox2: TGroupBox
+ Left = 7
+ Top = 111
+ Width = 273
+ Height = 110
+ Caption = 'Permisos y seguridad'
+ TabOrder = 1
+ object Label1: TLabel
+ Left = 47
+ Top = 36
+ Width = 26
+ Height = 13
+ Caption = 'Perfil:'
+ Transparent = False
+ end
+ object cbPerfil: TComboBox
+ Left = 88
+ Top = 28
+ Width = 169
+ Height = 21
+ ItemHeight = 13
+ TabOrder = 0
+ end
+ end
+ end
+ end
+ object ActionList: TActionList
+ Left = 8
+ Top = 272
+ object actAceptar: TAction
+ Caption = '&Aceptar'
+ end
+ object actCancelar: TAction
+ Caption = '&Cancelar'
+ end
+ end
+end
diff --git a/Source/ApplicationBase/Usuarios/Views/uUsuario.pas b/Source/ApplicationBase/Usuarios/Views/uUsuario.pas
new file mode 100644
index 0000000..90e722c
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Views/uUsuario.pas
@@ -0,0 +1,39 @@
+unit uUsuario;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+ Dialogs, StdCtrls, ComCtrls, ActnList;
+
+type
+ TfUsuario = class(TForm)
+ Button1: TButton;
+ Button2: TButton;
+ TabControl1: TPageControl;
+ pagUsuario: TTabSheet;
+ GroupBox1: TGroupBox;
+ Label4: TLabel;
+ Label5: TLabel;
+ edtUser: TEdit;
+ edtPassword: TEdit;
+ GroupBox2: TGroupBox;
+ Label1: TLabel;
+ cbPerfil: TComboBox;
+ ActionList: TActionList;
+ actAceptar: TAction;
+ actCancelar: TAction;
+ private
+ { Private declarations }
+ public
+ { Public declarations }
+ end;
+
+var
+ fUsuario: TfUsuario;
+
+implementation
+
+{$R *.dfm}
+
+end.
diff --git a/Source/ApplicationBase/Usuarios/Views/uUsuarios.dfm b/Source/ApplicationBase/Usuarios/Views/uUsuarios.dfm
new file mode 100644
index 0000000..0c3eb30
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Views/uUsuarios.dfm
@@ -0,0 +1,118 @@
+object fUsuarios: TfUsuarios
+ Left = 490
+ Top = 417
+ BorderStyle = bsDialog
+ Caption = 'Administraci'#243'n de usuarios'
+ ClientHeight = 401
+ ClientWidth = 550
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ Position = poScreenCenter
+ OnCreate = FormCreate
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Grid: TDBGrid
+ Left = 8
+ Top = 40
+ Width = 425
+ Height = 313
+ DataSource = DADataSource
+ TabOrder = 0
+ TitleFont.Charset = DEFAULT_CHARSET
+ TitleFont.Color = clWindowText
+ TitleFont.Height = -11
+ TitleFont.Name = 'MS Sans Serif'
+ TitleFont.Style = []
+ end
+ object JvNavPanelHeader1: TJvNavPanelHeader
+ Left = 0
+ Top = 0
+ Width = 550
+ Align = alTop
+ Caption = 'Panel de control'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindow
+ Font.Height = -16
+ Font.Name = 'Arial'
+ Font.Style = [fsBold]
+ ParentFont = False
+ ColorFrom = 8684164
+ ColorTo = 8684164
+ ImageIndex = 0
+ StyleManager = dmBase.StyleManager
+ ParentStyleManager = False
+ end
+ object Button1: TButton
+ Left = 448
+ Top = 40
+ Width = 91
+ Height = 25
+ Action = actNuevo
+ TabOrder = 2
+ end
+ object Button2: TButton
+ Left = 448
+ Top = 136
+ Width = 91
+ Height = 25
+ Action = actModificar
+ TabOrder = 3
+ end
+ object Button3: TButton
+ Left = 448
+ Top = 176
+ Width = 91
+ Height = 25
+ Action = actEliminar
+ TabOrder = 4
+ end
+ object Button4: TButton
+ Left = 448
+ Top = 368
+ Width = 91
+ Height = 25
+ Action = actCerrar
+ TabOrder = 5
+ end
+ object Button5: TButton
+ Left = 448
+ Top = 96
+ Width = 91
+ Height = 25
+ Action = actCambiarPassword
+ TabOrder = 6
+ end
+ object DADataSource: TDADataSource
+ Left = 368
+ Top = 40
+ end
+ object ActionList: TActionList
+ Left = 8
+ Top = 360
+ object actCerrar: TAction
+ Caption = '&Cerrar'
+ OnExecute = actCerrarExecute
+ end
+ object actNuevo: TAction
+ Caption = 'Nuevo usuario'
+ OnUpdate = actNuevoUpdate
+ end
+ object actCambiarPassword: TAction
+ Caption = 'Cambiar contrase'#241'a'
+ OnUpdate = actCambiarPasswordUpdate
+ end
+ object actModificar: TAction
+ Caption = 'Modificar usuario'
+ OnUpdate = actModificarUpdate
+ end
+ object actEliminar: TAction
+ Caption = 'Eliminar usuario'
+ OnUpdate = actEliminarUpdate
+ end
+ end
+end
diff --git a/Source/ApplicationBase/Usuarios/Views/uUsuarios.pas b/Source/ApplicationBase/Usuarios/Views/uUsuarios.pas
new file mode 100644
index 0000000..9b355e6
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Views/uUsuarios.pas
@@ -0,0 +1,89 @@
+unit uUsuarios;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+ Dialogs, DB, uDADataTable, dbcgrids, uDataModuleUsuarios, StdCtrls,
+ DBCtrls, JvExControls, JvComponent, JvNavigationPane,
+ Grids, DBGrids, ActnList, uDAInterfaces;
+
+type
+ TfUsuarios = class(TForm)
+ DADataSource: TDADataSource;
+ Grid: TDBGrid;
+ JvNavPanelHeader1: TJvNavPanelHeader;
+ Button1: TButton;
+ Button2: TButton;
+ Button3: TButton;
+ Button4: TButton;
+ Button5: TButton;
+ ActionList: TActionList;
+ actCerrar: TAction;
+ actNuevo: TAction;
+ actCambiarPassword: TAction;
+ actModificar: TAction;
+ actEliminar: TAction;
+ procedure actCerrarExecute(Sender: TObject);
+ procedure FormCreate(Sender: TObject);
+ procedure actEliminarUpdate(Sender: TObject);
+ procedure actModificarUpdate(Sender: TObject);
+ procedure actCambiarPasswordUpdate(Sender: TObject);
+ procedure actNuevoUpdate(Sender: TObject);
+ private
+ { Private declarations }
+ public
+ { Public declarations }
+ end;
+
+procedure AdministrarUsuarios;
+
+implementation
+
+{$R *.dfm}
+
+
+procedure AdministrarUsuarios;
+var
+ fUsuarios: TfUsuarios;
+begin
+ fUsuarios := TfUsuarios.Create(NIL);
+ try
+ fUsuarios.ShowModal;
+ finally
+ fUsuarios.Free;
+ end;
+end;
+
+procedure TfUsuarios.actCerrarExecute(Sender: TObject);
+begin
+ Close;
+end;
+
+procedure TfUsuarios.FormCreate(Sender: TObject);
+begin
+{ DADataSource.DataTable := dmUsuarios.tbl_Usuarios;
+ DADataSource.DataTable.Active := True;}
+end;
+
+procedure TfUsuarios.actEliminarUpdate(Sender: TObject);
+begin
+ (Sender as TAction).Enabled := not (DADataSource.DataTable.IsEmpty);
+end;
+
+procedure TfUsuarios.actModificarUpdate(Sender: TObject);
+begin
+ (Sender as TAction).Enabled := not (DADataSource.DataTable.IsEmpty);
+end;
+
+procedure TfUsuarios.actCambiarPasswordUpdate(Sender: TObject);
+begin
+ (Sender as TAction).Enabled := not (DADataSource.DataTable.IsEmpty);
+end;
+
+procedure TfUsuarios.actNuevoUpdate(Sender: TObject);
+begin
+ (Sender as TAction).Enabled := Assigned(DADataSource.DataTable);
+end;
+
+end.
diff --git a/Source/ApplicationBase/Usuarios/Views/uUsuariosViewRegister.pas b/Source/ApplicationBase/Usuarios/Views/uUsuariosViewRegister.pas
new file mode 100644
index 0000000..f5f67fe
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Views/uUsuariosViewRegister.pas
@@ -0,0 +1,33 @@
+unit uUsuariosViewRegister;
+
+interface
+
+procedure RegisterViews;
+procedure UnregisterViews;
+
+implementation
+
+uses
+ uEditorRegistryUtils, uEditorLogin, Dialogs, uEditorUsuario, uEditorUsuarios,
+ uEditorPerfilesUsuario, uEditorPerfilUsuario;
+
+procedure RegisterViews;
+begin
+ EditorRegistry.RegisterClass(TfEditorLogin, 'EditorLogin');
+ EditorRegistry.RegisterClass(TfEditorUsuarios, 'EditorUsuarios');
+ EditorRegistry.RegisterClass(TfEditorUsuario, 'EditorUsuario');
+ EditorRegistry.RegisterClass(TfEditorPerfilesUsuario, 'EditorPerfilesUsuario');
+ EditorRegistry.RegisterClass(TfEditorPerfilUsuario, 'EditorPerfilUsuario');
+
+end;
+
+procedure UnregisterViews;
+begin
+ EditorRegistry.UnRegisterClass(TfEditorLogin);
+ EditorRegistry.UnRegisterClass(TfEditorUsuarios);
+ EditorRegistry.UnRegisterClass(TfEditorUsuario);
+ EditorRegistry.UnRegisterClass(TfEditorPerfilesUsuario);
+ EditorRegistry.UnRegisterClass(TfEditorPerfilUsuario);
+end;
+
+end.
diff --git a/Source/ApplicationBase/Usuarios/Views/uViewPerfilUsuario.dfm b/Source/ApplicationBase/Usuarios/Views/uViewPerfilUsuario.dfm
new file mode 100644
index 0000000..d588715
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Views/uViewPerfilUsuario.dfm
@@ -0,0 +1,68 @@
+inherited frViewPerfilUsuario: TfrViewPerfilUsuario
+ Width = 509
+ Height = 122
+ ExplicitWidth = 509
+ ExplicitHeight = 122
+ object dxLayoutControlArticulo: TdxLayoutControl
+ Left = 0
+ Top = 0
+ Width = 509
+ Height = 113
+ Align = alTop
+ ParentBackground = True
+ TabOrder = 0
+ AutoContentSizes = [acsWidth]
+ DesignSize = (
+ 509
+ 113)
+ object eNombre: TcxDBTextEdit
+ Left = 68
+ Top = 28
+ Anchors = [akLeft, akTop, akRight]
+ DataBinding.DataField = 'USERNAME'
+ DataBinding.DataSource = dsUsuario
+ Style.BorderColor = clWindowFrame
+ Style.BorderStyle = ebs3D
+ Style.Color = 14745599
+ Style.HotTrack = False
+ Style.LookAndFeel.Kind = lfStandard
+ Style.LookAndFeel.NativeStyle = True
+ StyleDisabled.LookAndFeel.Kind = lfStandard
+ StyleDisabled.LookAndFeel.NativeStyle = True
+ StyleFocused.LookAndFeel.Kind = lfStandard
+ StyleFocused.LookAndFeel.NativeStyle = True
+ StyleHot.LookAndFeel.Kind = lfStandard
+ StyleHot.LookAndFeel.NativeStyle = True
+ TabOrder = 0
+ Width = 164
+ end
+ object dxLayoutGroup1: TdxLayoutGroup
+ ShowCaption = False
+ Hidden = True
+ ShowBorder = False
+ object dxLayoutGroup2: TdxLayoutGroup
+ AutoAligns = []
+ AlignHorz = ahClient
+ AlignVert = avClient
+ Caption = 'Datos del perfil'
+ object dxLayoutControlArticuloItem3: TdxLayoutItem
+ AutoAligns = [aaVertical]
+ AlignHorz = ahClient
+ Caption = 'Nombre:'
+ Control = eNombre
+ ControlOptions.ShowBorder = False
+ end
+ end
+ object dxLayoutControlArticuloGroup3: TdxLayoutGroup
+ Caption = 'New Group'
+ ShowCaption = False
+ LayoutDirection = ldHorizontal
+ ShowBorder = False
+ end
+ end
+ end
+ object dsUsuario: TDADataSource
+ Left = 152
+ Top = 24
+ end
+end
diff --git a/Source/ApplicationBase/Usuarios/Views/uViewPerfilUsuario.pas b/Source/ApplicationBase/Usuarios/Views/uViewPerfilUsuario.pas
new file mode 100644
index 0000000..f3deec1
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Views/uViewPerfilUsuario.pas
@@ -0,0 +1,82 @@
+unit uViewPerfilUsuario;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+ Dialogs, uViewBase, uUsuariosController, cxGraphics, ImgList, PngImageList,
+ dxLayoutControl, cxCurrencyEdit, uCustomView, cxControls, DB, uDAInterfaces,
+ uDADataTable, ActnList, cxCheckBox, cxDBEdit, cxMaskEdit, cxSpinEdit,
+ cxHyperLinkEdit, cxContainer, cxEdit, cxTextEdit, Buttons, PngSpeedButton,
+ uBizUsuarios, cxDropDownEdit;
+
+type
+ IViewPerfilUsuario = interface(IViewBase)
+ ['{555B4B64-BE32-4036-B741-DCC7AD80D7B9}']
+ function GetController : IUsuariosController;
+ procedure SetController (const Value : IUsuariosController);
+ property Controller : IUsuariosController read GetController write SetController;
+
+ function GetPerfilUsuario: IBizPerfilUsuario;
+ procedure SetPerfilUsuario(const Value: IBizPerfilUsuario);
+ property PerfilUsuario: IBizPerfilUsuario read GetPerfilUsuario write SetPerfilUsuario;
+ end;
+
+ TfrViewPerfilUsuario = class(TfrViewBase, IViewPerfilUsuario)
+ dsUsuario: TDADataSource;
+ dxLayoutControlArticulo: TdxLayoutControl;
+ eNombre: TcxDBTextEdit;
+ dxLayoutGroup1: TdxLayoutGroup;
+ dxLayoutGroup2: TdxLayoutGroup;
+ dxLayoutControlArticuloItem3: TdxLayoutItem;
+ dxLayoutControlArticuloGroup3: TdxLayoutGroup;
+ protected
+ FController: IUsuariosController;
+ FPerfilUsuario : IBizPerfilUsuario;
+
+ function GetController : IUsuariosController;
+ procedure SetController (const Value : IUsuariosController);
+
+ function GetPerfilUsuario: IBizPerfilUsuario;
+ procedure SetPerfilUsuario(const Value: IBizPerfilUsuario);
+ public
+ property PerfilUsuario: IBizPerfilUsuario read GetPerfilUsuario write SetPerfilUsuario;
+ property Controller : IUsuariosController read GetController write SetController;
+ end;
+
+implementation
+
+{$R *.dfm}
+
+
+{ TfrViewUsuario }
+
+function TfrViewPerfilUsuario.GetController: IUsuariosController;
+begin
+ Result := FController;
+end;
+
+function TfrViewPerfilUsuario.GetPerfilUsuario: IBizPerfilUsuario;
+begin
+ Result := FPerfilUsuario;
+end;
+
+procedure TfrViewPerfilUsuario.SetController(const Value: IUsuariosController);
+begin
+ FController := Value;
+end;
+
+procedure TfrViewPerfilUsuario.SetPerfilUsuario(const Value: IBizPerfilUsuario);
+begin
+ FPerfilUsuario := Value;
+
+ if Assigned(FPerfilUsuario) then
+ dsUsuario.DataTable := FPerfilUsuario.DataTable
+ else begin
+ dsUsuario.DataTable := NIL;
+ FPerfilUsuario := NIL;
+ end;
+end;
+
+
+end.
diff --git a/Source/ApplicationBase/Usuarios/Views/uViewPerfilesUsuario.dfm b/Source/ApplicationBase/Usuarios/Views/uViewPerfilesUsuario.dfm
new file mode 100644
index 0000000..f591da7
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Views/uViewPerfilesUsuario.dfm
@@ -0,0 +1,38 @@
+inherited frViewPerfilesUsuario: TfrViewPerfilesUsuario
+ Width = 426
+ Height = 247
+ ExplicitWidth = 426
+ ExplicitHeight = 247
+ inherited cxGrid: TcxGrid
+ Width = 426
+ Height = 247
+ inherited cxGridView: TcxGridDBTableView
+ object cxGridViewID: TcxGridDBColumn
+ DataBinding.FieldName = 'ID'
+ Visible = False
+ BestFitMaxWidth = 20
+ Width = 20
+ end
+ object cxGridViewUSERNAME: TcxGridDBColumn
+ DataBinding.FieldName = 'USERNAME'
+ Width = 150
+ end
+ object cxGridViewTIPO: TcxGridDBColumn
+ DataBinding.FieldName = 'TIPO'
+ Visible = False
+ end
+ end
+ end
+ inherited dxComponentPrinter: TdxComponentPrinter
+ Left = 40
+ Top = 16
+ end
+ inherited dxPSEngineController1: TdxPSEngineController
+ Left = 304
+ Top = 168
+ end
+ inherited cxStyleRepository1: TcxStyleRepository
+ Left = 280
+ Top = 160
+ end
+end
diff --git a/Source/ApplicationBase/Usuarios/Views/uViewPerfilesUsuario.pas b/Source/ApplicationBase/Usuarios/Views/uViewPerfilesUsuario.pas
new file mode 100644
index 0000000..09368e0
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Views/uViewPerfilesUsuario.pas
@@ -0,0 +1,56 @@
+unit uViewPerfilesUsuario;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+ Dialogs, uViewGrid, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData,
+ cxDataStorage, cxEdit, DB, cxDBData, dxPSGlbl, dxPSUtl, dxPSEngn, dxPrnPg,
+ dxBkgnd, dxWrap, dxPrnDev, dxPSCompsProvider, dxPSFillPatterns,
+ dxPSEdgePatterns, dxPgsDlg, dxPSCore, ImgList, PngImageList, ActnList,
+ cxGridCustomPopupMenu, cxGridPopupMenu,
+ uDAInterfaces, uDADataTable, TB2Item, TBX, TB2Toolbar, TBXDkPanels, TB2Dock,
+ cxGridLevel, cxClasses, cxControls, cxGridCustomView,
+ cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGrid,
+ uBizUsuarios;
+
+type
+ IViewPerfilesUsuario = interface(IViewGrid)
+ ['{C6125F2F-5EDC-4019-BD5F-9AC9741F0F77}']
+ function GetPerfilesUsuario: IBizPerfilUsuario;
+ procedure SetPerfilesUsuario(const Value: IBizPerfilUsuario);
+ property PerfilesUsuario: IBizPerfilUsuario read GetPerfilesUsuario write SetPerfilesUsuario;
+ end;
+
+ TfrViewPerfilesUsuario = class(TfrViewGrid, IViewPerfilesUsuario)
+ cxGridViewID: TcxGridDBColumn;
+ cxGridViewUSERNAME: TcxGridDBColumn;
+ cxGridViewTIPO: TcxGridDBColumn;
+ protected
+ FPerfiles : IBizPerfilUsuario;
+ function GetPerfilesUsuario: IBizPerfilUsuario;
+ procedure SetPerfilesUsuario(const Value: IBizPerfilUsuario);
+ public
+ property PerfilesUsuario: IBizPerfilUsuario read GetPerfilesUsuario write SetPerfilesUsuario;
+ end;
+
+
+implementation
+
+{$R *.dfm}
+
+{ TfrViewPerfilesUsuario }
+
+function TfrViewPerfilesUsuario.GetPerfilesUsuario: IBizPerfilUsuario;
+begin
+ Result := FPerfiles;
+end;
+
+procedure TfrViewPerfilesUsuario.SetPerfilesUsuario(const Value: IBizPerfilUsuario);
+begin
+ FPerfiles := Value;
+ if Assigned(FPerfiles) then
+ dsDataSource.DataTable := FPerfiles.DataTable;
+end;
+
+end.
diff --git a/Source/ApplicationBase/Usuarios/Views/uViewUsuario.dfm b/Source/ApplicationBase/Usuarios/Views/uViewUsuario.dfm
new file mode 100644
index 0000000..a50c3aa
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Views/uViewUsuario.dfm
@@ -0,0 +1,300 @@
+inherited frViewUsuario: TfrViewUsuario
+ Width = 509
+ Height = 275
+ OnCreate = CustomViewCreate
+ OnDestroy = CustomViewDestroy
+ ExplicitWidth = 509
+ ExplicitHeight = 275
+ object dxLayoutControlArticulo: TdxLayoutControl
+ Left = 0
+ Top = 0
+ Width = 509
+ Height = 249
+ Align = alTop
+ ParentBackground = True
+ TabOrder = 0
+ AutoContentSizes = [acsWidth]
+ DesignSize = (
+ 509
+ 249)
+ object PngSpeedButton3: TPngSpeedButton
+ Left = 335
+ Top = 82
+ Width = 23
+ Height = 22
+ PngImage.Data = {
+ 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
+ 610000000970485973000017120000171201679FD252000001964944415478DA
+ 63FCFFFF3F03232323033A58BCE9F87F647EAC9F258622B05E6C068034873B8A
+ 80D92019C62F8F194C1356339CDF399D91A0014B361FFB1FE6208AA299E1F323
+ 306D52F90CC5100C03566E3DFC3FD04E02A2F9F727064690462066006A66FC02
+ 64FFFAC8603451096E088A01CB361FFDFF8F819981183077D11A86FDAB7B18E1
+ 062CDD7CE27F14573FC3B2EF450CD13E86181ABE7DFFCDF0F5DB6F866FDFFE30
+ 1CB97897218AB38FC1B85B98E1DC8E698C600396000D8861696058FAB7116CC0
+ 94C5FBB0DAEC6CAECF70EED6238668E67AB057500CF8F0E10383A0A0208A0B90
+ 6D06B1BF01D9379E3C67387AFE09C389A37BD15CE06B01B47907434EAC13C3EF
+ 3F7F19662E3F8862BB898606C3EFDFFF1896EF3DCFA0A5C0CD306FE9265403FC
+ 9D20362F5CB71F4CE7C47AA01890D5BC164C7716F980D56018606BAC0656B079
+ EF2986F82047AC6150DEB785A13CD911AC06C300234D05867DC72F30B8D818E1
+ 8DC2494B0E63F702281075D455884A07576EDEC134404A5480E1DAED07441900
+ 021806F44D5D44B46618801B400900007F4518F05E90AAF20000000049454E44
+ AE426082}
+ PngOptions = [pngBlendOnDisabled, pngGrayscaleOnDisabled]
+ end
+ object eNombre: TcxDBTextEdit
+ Left = 135
+ Top = 28
+ Anchors = [akLeft, akTop, akRight]
+ DataBinding.DataField = 'USERNAME'
+ DataBinding.DataSource = dsUsuario
+ Style.BorderColor = clWindowFrame
+ Style.BorderStyle = ebs3D
+ Style.Color = 14745599
+ Style.HotTrack = False
+ Style.LookAndFeel.Kind = lfStandard
+ Style.LookAndFeel.NativeStyle = True
+ StyleDisabled.LookAndFeel.Kind = lfStandard
+ StyleDisabled.LookAndFeel.NativeStyle = True
+ StyleFocused.LookAndFeel.Kind = lfStandard
+ StyleFocused.LookAndFeel.NativeStyle = True
+ StyleHot.LookAndFeel.Kind = lfStandard
+ StyleHot.LookAndFeel.NativeStyle = True
+ TabOrder = 0
+ Width = 164
+ end
+ object eUsuario: TcxDBTextEdit
+ Left = 135
+ Top = 55
+ DataBinding.DataField = 'LOGIN'
+ DataBinding.DataSource = dsUsuario
+ Style.BorderColor = clWindowFrame
+ Style.BorderStyle = ebs3D
+ Style.Color = 14745599
+ Style.HotTrack = False
+ Style.LookAndFeel.Kind = lfStandard
+ Style.LookAndFeel.NativeStyle = True
+ StyleDisabled.LookAndFeel.Kind = lfStandard
+ StyleDisabled.LookAndFeel.NativeStyle = True
+ StyleFocused.LookAndFeel.Kind = lfStandard
+ StyleFocused.LookAndFeel.NativeStyle = True
+ StyleHot.LookAndFeel.Kind = lfStandard
+ StyleHot.LookAndFeel.NativeStyle = True
+ TabOrder = 1
+ Width = 108
+ end
+ object eMail: TcxDBHyperLinkEdit
+ Left = 135
+ Top = 82
+ DataBinding.DataField = 'EMAIL'
+ DataBinding.DataSource = dsUsuario
+ Properties.ValidateOnEnter = True
+ Properties.OnEditValueChanged = eMailPropertiesEditValueChanged
+ Properties.OnValidate = eMailPropertiesValidate
+ Properties.Prefix = 'mailto:'
+ Style.BorderColor = clWindowFrame
+ Style.BorderStyle = ebs3D
+ Style.HotTrack = False
+ Style.LookAndFeel.Kind = lfStandard
+ Style.LookAndFeel.NativeStyle = True
+ StyleDisabled.LookAndFeel.Kind = lfStandard
+ StyleDisabled.LookAndFeel.NativeStyle = True
+ StyleFocused.LookAndFeel.Kind = lfStandard
+ StyleFocused.LookAndFeel.NativeStyle = True
+ StyleHot.LookAndFeel.Kind = lfStandard
+ StyleHot.LookAndFeel.NativeStyle = True
+ TabOrder = 2
+ Width = 194
+ end
+ object ePassword: TcxTextEdit
+ Left = 135
+ Top = 167
+ Properties.EchoMode = eemPassword
+ Properties.PasswordChar = '*'
+ Style.LookAndFeel.Kind = lfStandard
+ Style.LookAndFeel.NativeStyle = True
+ StyleDisabled.LookAndFeel.Kind = lfStandard
+ StyleDisabled.LookAndFeel.NativeStyle = True
+ StyleFocused.LookAndFeel.Kind = lfStandard
+ StyleFocused.LookAndFeel.NativeStyle = True
+ StyleHot.LookAndFeel.Kind = lfStandard
+ StyleHot.LookAndFeel.NativeStyle = True
+ TabOrder = 4
+ Width = 121
+ end
+ object eConfirmarPassword: TcxTextEdit
+ Left = 135
+ Top = 194
+ Properties.EchoMode = eemPassword
+ Properties.PasswordChar = '*'
+ Style.LookAndFeel.Kind = lfStandard
+ Style.LookAndFeel.NativeStyle = True
+ StyleDisabled.LookAndFeel.Kind = lfStandard
+ StyleDisabled.LookAndFeel.NativeStyle = True
+ StyleFocused.LookAndFeel.Kind = lfStandard
+ StyleFocused.LookAndFeel.NativeStyle = True
+ StyleHot.LookAndFeel.Kind = lfStandard
+ StyleHot.LookAndFeel.NativeStyle = True
+ TabOrder = 5
+ Width = 372
+ end
+ object cbPerfil: TcxComboBox
+ Left = 135
+ Top = 110
+ Properties.DropDownListStyle = lsEditFixedList
+ Properties.ImmediatePost = True
+ Properties.ImmediateUpdateText = True
+ Properties.PostPopupValueOnTab = True
+ Properties.OnValidate = cbPerfilPropertiesValidate
+ Style.LookAndFeel.Kind = lfStandard
+ Style.LookAndFeel.NativeStyle = True
+ StyleDisabled.LookAndFeel.Kind = lfStandard
+ StyleDisabled.LookAndFeel.NativeStyle = True
+ StyleFocused.LookAndFeel.Kind = lfStandard
+ StyleFocused.LookAndFeel.NativeStyle = True
+ StyleHot.LookAndFeel.Kind = lfStandard
+ StyleHot.LookAndFeel.NativeStyle = True
+ TabOrder = 3
+ Width = 194
+ end
+ object dxLayoutGroup1: TdxLayoutGroup
+ ShowCaption = False
+ Hidden = True
+ ShowBorder = False
+ object dxLayoutGroup2: TdxLayoutGroup
+ AutoAligns = []
+ AlignHorz = ahClient
+ AlignVert = avClient
+ Caption = 'Datos del usuario'
+ object dxLayoutControlArticuloItem3: TdxLayoutItem
+ AutoAligns = [aaVertical]
+ AlignHorz = ahClient
+ Caption = 'Nombre completo:'
+ Control = eNombre
+ ControlOptions.ShowBorder = False
+ end
+ object dxLayoutControlArticuloItem8: TdxLayoutItem
+ AutoAligns = [aaVertical]
+ AlignHorz = ahClient
+ Caption = 'Usuario:'
+ Control = eUsuario
+ ControlOptions.ShowBorder = False
+ end
+ object dxLayoutControlArticuloGroup2: TdxLayoutGroup
+ ShowCaption = False
+ Hidden = True
+ LayoutDirection = ldHorizontal
+ ShowBorder = False
+ object dxLayoutControlArticuloItem4: TdxLayoutItem
+ AutoAligns = [aaVertical]
+ Caption = 'Correo electr'#243'nico'
+ Control = eMail
+ ControlOptions.ShowBorder = False
+ end
+ object dxLayoutControlArticuloItem5: TdxLayoutItem
+ ShowCaption = False
+ Control = PngSpeedButton3
+ ControlOptions.ShowBorder = False
+ end
+ end
+ object dxLayoutControlArticuloItem1: TdxLayoutItem
+ AutoAligns = [aaVertical]
+ Caption = 'Perfil de usuario:'
+ Control = cbPerfil
+ ControlOptions.ShowBorder = False
+ end
+ end
+ object dxLayoutControlArticuloGroup5: TdxLayoutGroup
+ Caption = 'Seguridad'
+ object dxLayoutControlArticuloItem11: TdxLayoutItem
+ Caption = 'Contrase'#241'a:'
+ Control = ePassword
+ ControlOptions.ShowBorder = False
+ end
+ object dxLayoutControlArticuloItem12: TdxLayoutItem
+ Caption = 'Confirmar contrase'#241'a:'
+ Control = eConfirmarPassword
+ ControlOptions.ShowBorder = False
+ end
+ end
+ object dxLayoutControlArticuloGroup3: TdxLayoutGroup
+ Caption = 'New Group'
+ ShowCaption = False
+ LayoutDirection = ldHorizontal
+ ShowBorder = False
+ end
+ end
+ end
+ object ActionList1: TActionList
+ Images = SmallImages
+ Left = 72
+ Top = 48
+ object actMandarCorreo: TAction
+ Caption = 'Mandar un correo'
+ ImageIndex = 0
+ OnExecute = actMandarCorreoExecute
+ OnUpdate = actMandarCorreoUpdate
+ end
+ end
+ object dsUsuario: TDADataSource
+ Left = 104
+ Top = 48
+ end
+ object SmallImages: TPngImageList
+ PngImages = <
+ item
+ PngImage.Data = {
+ 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
+ 610000000970485973000017120000171201679FD252000001EB4944415478DA
+ A5D34B68135114C6F1FF746692462D24D5A8F5B52B81B448501475E142D4EAA2
+ 3420E8C68A0A45345BC19DE24A74D50AE2424A11041105DD28A8881411174A70
+ E58BA4149A1A0D8D1D9B669E997B9D14B1A44491E6C2D9DDF3BB1F877B94DB8F
+ 5E4B5A384A1D3831B06759CDDB0E9D5B04865FD9CD6F49C95A374B4ADC20AAE4
+ 9936B6F244CF70299DFA3F40F5AB1C74CEB225FE1C654E4796DA7963A6D977F2
+ FABF81E061EAC3D1EC0247C531A27A017E846026CC844890CC3CFE3B506F1641
+ D9025CCFA4DF384FD27F419BA1231C9D67917ED267AE3507A414E4BF8DD3B1AA
+ 07A97562F92A31EB037B8D313658137CD292DC5D719A7B83C9E640AEF892F1DC
+ 454A5FABEC4E5D21BEBE0FD397411217E15599911D547C8DEC60A411B8FC34C7
+ C3F7C71710BD73927CB686E785D87FE01D22483267FDC45156620A0DAB069F4F
+ B53702A9ABBB08AF2E20DB7C1CB386517698FE52A56BE31136272EF0F16D1F44
+ 7610EF7D802554A68696003B6F6D42517DAC6A0D3B006CCB67B6686356248944
+ 0F8635C9F7A90A91F800E1EE51CA99D81260B40B27C8F607307DECF91AF38687
+ A6AB74A7A2940A26E5A28B164FE38CDC67FBE1CC22D03BB226007E2708202700
+ 5CAB5E62E14344D785084734664B0EBE8CE18D951A81967661F8E69DE56FA394
+ 2D6D33BF00C89C2C72EBA3BC190000000049454E44AE426082}
+ Name = 'PngImage0'
+ Background = clWindow
+ end
+ item
+ PngImage.Data = {
+ 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
+ 61000000097048597300000AEB00000AEB01828B0D5A000002854944415478DA
+ A5935D48536118C7FFAFDB8CCD557E7F34B33167F9119617A91596495D781304
+ 451021A651362821B1ABA49B6EA4460961D88542055D84DD6545415992174994
+ 9625CC8F9C329D9B5F3BE9CED9D9797BCEA1C932A3A0079EC3CBE13CBFE7FF7F
+ 9FF330CE39FE2798FAB80BA4E61559EB2551E67B07279AE8D51FA98F2CC99546
+ 031A3D6E5FF329993F631D80B52227A6D7929F9BAEA459D1D73BE8DC3330D6B8
+ 1AD206641414DA5A6224E1E8ECA47779660955D532EF642F1371BD74331A14FA
+ 9C27A4439F5D88777DAE1B65FD230D11485786B9363D65FD35C1EB4B9817427E
+ 9F80C335C05BD53E23B2A934132FB23662B71406C2B14698F38AF0E9EB9473E8
+ E3C8655BD686D6F858A5DA3F27B04511E37E0195B5C0A00AD6003FE5259758F0
+ 3AD1843C15125218CCB6AD707FF34EAC93973217041154ECF608D8770E188BD8
+ 5A01A8A1DEC5F60CF4980CB0A890E8A47AFFF477EC3F037C8EBE975F006ADC37
+ 60A7351E3D061DE222C522A5270047AD82DBAB27B21AC09EDA373525E9A52BCB
+ 7E5F4CB4822509BE80848AB3C0C09A806380EE7CA1BDC55EB4CDE17AF2984932
+ 75A60CCA088739742A84CE1E49C1010730F41BA03B27CD595C517CB1FFF92B04
+ E6035AF142101DCB12DA743AB413243FA468331D0F01E51780D1154057AAF148
+ D92E7BE794778E8DB92634C901116FA6451CAA27214EC06802AE5227AA839ED2
+ 45A0729AC6A406182DD9329C10A7B7F57D18D63A93DF99D92076905F4FB4DF56
+ A08C20ED9476027CD1209C7BD9FBDC947BC1C0E2C9596A4B003E27E2F8E9301E
+ AEB507B700334968A6631D019C759C5F627780822413BA194312CDFB41958C13
+ 7FDB4052739000430ECEDD913F313B568F9B8B326AC8F7CCBFAEB27A073F0058
+ 5538F0EAB25B380000000049454E44AE426082}
+ Name = 'PngImage1'
+ Background = clWindow
+ end>
+ PngOptions = [pngBlendOnDisabled, pngGrayscaleOnDisabled]
+ Left = 43
+ Top = 48
+ Bitmap = {}
+ end
+end
diff --git a/Source/ApplicationBase/Usuarios/Views/uViewUsuario.pas b/Source/ApplicationBase/Usuarios/Views/uViewUsuario.pas
new file mode 100644
index 0000000..66f47e5
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Views/uViewUsuario.pas
@@ -0,0 +1,210 @@
+unit uViewUsuario;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+ Dialogs, uViewBase, uUsuariosController, cxGraphics, ImgList, PngImageList,
+ dxLayoutControl, cxCurrencyEdit, uCustomView, cxControls, DB, uDAInterfaces,
+ uDADataTable, ActnList, cxCheckBox, cxDBEdit, cxMaskEdit, cxSpinEdit,
+ cxHyperLinkEdit, cxContainer, cxEdit, cxTextEdit, Buttons, PngSpeedButton,
+ uBizUsuarios, cxDropDownEdit, ExtCtrls;
+
+type
+ IViewUsuario = interface(IViewBase)
+ ['{E47D5136-A50C-4757-9352-4745518A899D}']
+ function GetController : IUsuariosController;
+ procedure SetController (const Value : IUsuariosController);
+ property Controller : IUsuariosController read GetController write SetController;
+
+ function GetUsuario: IBizUsuario;
+ procedure SetUsuario(const Value: IBizUsuario);
+ property Usuario: IBizUsuario read GetUsuario write SetUsuario;
+ end;
+
+ TfrViewUsuario = class(TfrViewBase, IViewUsuario)
+ ActionList1: TActionList;
+ dsUsuario: TDADataSource;
+ dxLayoutControlArticulo: TdxLayoutControl;
+ eNombre: TcxDBTextEdit;
+ eUsuario: TcxDBTextEdit;
+ dxLayoutGroup1: TdxLayoutGroup;
+ dxLayoutGroup2: TdxLayoutGroup;
+ dxLayoutControlArticuloItem3: TdxLayoutItem;
+ dxLayoutControlArticuloItem8: TdxLayoutItem;
+ dxLayoutControlArticuloGroup3: TdxLayoutGroup;
+ SmallImages: TPngImageList;
+ dxLayoutControlArticuloItem4: TdxLayoutItem;
+ eMail: TcxDBHyperLinkEdit;
+ dxLayoutControlArticuloItem5: TdxLayoutItem;
+ PngSpeedButton3: TPngSpeedButton;
+ actMandarCorreo: TAction;
+ dxLayoutControlArticuloGroup2: TdxLayoutGroup;
+ ePassword: TcxTextEdit;
+ dxLayoutControlArticuloItem11: TdxLayoutItem;
+ dxLayoutControlArticuloItem12: TdxLayoutItem;
+ eConfirmarPassword: TcxTextEdit;
+ dxLayoutControlArticuloGroup5: TdxLayoutGroup;
+ cbPerfil: TcxComboBox;
+ dxLayoutControlArticuloItem1: TdxLayoutItem;
+ procedure actMandarCorreoExecute(Sender: TObject);
+ procedure actMandarCorreoUpdate(Sender: TObject);
+ procedure cbPerfilPropertiesValidate(Sender: TObject;
+ var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
+ procedure CustomViewCreate(Sender: TObject);
+ procedure CustomViewDestroy(Sender: TObject);
+ procedure eMailPropertiesEditValueChanged(Sender: TObject);
+ procedure eMailPropertiesValidate(Sender: TObject;
+ var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
+ protected
+ FController: IUsuariosController;
+ FUsuario : IBizUsuario;
+ FListaPerfiles : TStringList;
+
+ function GetController : IUsuariosController;
+ procedure SetController (const Value : IUsuariosController);
+
+ function GetUsuario: IBizUsuario;
+ procedure SetUsuario(const Value: IBizUsuario);
+ public
+ property Usuario: IBizUsuario read GetUsuario write SetUsuario;
+ property Controller : IUsuariosController read GetController write SetController;
+ end;
+
+implementation
+
+{$R *.dfm}
+
+type
+ THackcxDBHyperLinkEdit = class(TcxDBHyperLinkEdit);
+
+{ TfrViewUsuario }
+
+procedure TfrViewUsuario.actMandarCorreoExecute(Sender: TObject);
+begin
+ inherited;
+ THackcxDBHyperLinkEdit(eMail).DoStart;
+end;
+
+procedure TfrViewUsuario.actMandarCorreoUpdate(Sender: TObject);
+begin
+ inherited;
+ (Sender as TAction).Enabled := (Length(eMail.Text) > 0)
+end;
+
+procedure TfrViewUsuario.cbPerfilPropertiesValidate(Sender: TObject;
+ var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
+var
+ AIndex : integer;
+begin
+ inherited;
+
+ if Assigned(FUsuario) and FUsuario.Active then
+ begin
+ if DisplayValue = cbPerfil.Properties.Items[0] then
+ AIndex := 0
+ else
+ AIndex := StrToInt(FListaPerfiles.Values[DisplayValue]);
+
+ FUsuario.Edit;
+ FUsuario.ID_PERFIL := AIndex;
+ FUsuario.Post;
+ end;
+end;
+
+
+procedure TfrViewUsuario.CustomViewCreate(Sender: TObject);
+begin
+ inherited;
+ FListaPerfiles := NIL;
+end;
+
+procedure TfrViewUsuario.CustomViewDestroy(Sender: TObject);
+begin
+ inherited;
+ FreeAndNIL(FListaPerfiles);
+end;
+
+procedure TfrViewUsuario.eMailPropertiesEditValueChanged(Sender: TObject);
+begin
+ if not VarIsNull((Sender as TcxDBHyperLinkEdit).EditValue) then
+ (Sender as TcxDBHyperLinkEdit).EditValue := StringReplace((Sender as TcxDBHyperLinkEdit).EditValue, (Sender as TcxDBHyperLinkEdit).Properties.Prefix, '', []);
+end;
+
+procedure TfrViewUsuario.eMailPropertiesValidate(Sender: TObject;
+ var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
+begin
+ if not VarIsNull(DisplayValue) then
+ DisplayValue := StringReplace(DisplayValue, (Sender as TcxDBHyperLinkEdit).Properties.Prefix, '', []);
+end;
+
+function TfrViewUsuario.GetController: IUsuariosController;
+begin
+ Result := FController;
+end;
+
+function TfrViewUsuario.GetUsuario: IBizUsuario;
+begin
+ Result := FUsuario;
+end;
+
+procedure TfrViewUsuario.SetController(const Value: IUsuariosController);
+var
+ i : integer;
+begin
+ FController := Value;
+
+ if Assigned(FController) then
+ begin
+ FListaPerfiles := FController.DarListaPerfilesUsuario;
+
+ with cbPerfil.Properties.Items do
+ begin
+ BeginUpdate;
+ try
+ Clear;
+ Add('');
+ for i := 0 to FListaPerfiles.Count - 1 do
+ Add(FListaPerfiles.Names[i]);
+ finally
+ EndUpdate;
+ end;
+ end;
+ end;
+end;
+
+procedure TfrViewUsuario.SetUsuario(const Value: IBizUsuario);
+var
+ i : integer;
+begin
+ FUsuario := Value;
+
+ if Assigned(FUsuario) then
+ begin
+ dsUsuario.DataTable := FUsuario.DataTable;
+ if FUsuario.EsNuevo then
+ begin
+ dxLayoutControlArticuloGroup5.Visible := True;
+ cbPerfil.Text := cbPerfil.Properties.Items[0];
+ end
+ else begin
+ dxLayoutControlArticuloGroup5.Visible := False;
+
+ cbPerfil.Text := cbPerfil.Properties.Items[0];
+ for i := 0 to FListaPerfiles.Count-1 do
+ begin
+ if FListaPerfiles.ValueFromIndex[i] = IntToStr(FUsuario.ID_PERFIL) then
+ begin
+ cbPerfil.Text := FListaPerfiles.Names[i];
+ break;
+ end;
+ end;
+ end;
+ end
+ else begin
+ dsUsuario.DataTable := NIL;
+ FUsuario := NIL;
+ end;
+end;
+
+end.
diff --git a/Source/ApplicationBase/Usuarios/Views/uViewUsuarios.dfm b/Source/ApplicationBase/Usuarios/Views/uViewUsuarios.dfm
new file mode 100644
index 0000000..b5ceec1
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Views/uViewUsuarios.dfm
@@ -0,0 +1,70 @@
+inherited frViewUsuarios: TfrViewUsuarios
+ inherited cxGrid: TcxGrid
+ inherited cxGridView: TcxGridDBTableView
+ object cxGridViewID: TcxGridDBColumn
+ DataBinding.FieldName = 'ID'
+ Visible = False
+ BestFitMaxWidth = 20
+ Width = 20
+ end
+ object cxGridViewUSERNAME: TcxGridDBColumn
+ DataBinding.FieldName = 'USERNAME'
+ Width = 150
+ end
+ object cxGridViewLOGIN: TcxGridDBColumn
+ DataBinding.FieldName = 'LOGIN'
+ BestFitMaxWidth = 75
+ Width = 75
+ end
+ object cxGridViewPASS: TcxGridDBColumn
+ DataBinding.FieldName = 'PASS'
+ Visible = False
+ end
+ object cxGridViewPASSEXPIRED: TcxGridDBColumn
+ DataBinding.FieldName = 'PASSEXPIRED'
+ Visible = False
+ end
+ object cxGridViewBLOQUEADO: TcxGridDBColumn
+ DataBinding.FieldName = 'BLOQUEADO'
+ Visible = False
+ end
+ object cxGridViewEMAIL: TcxGridDBColumn
+ DataBinding.FieldName = 'EMAIL'
+ BestFitMaxWidth = 120
+ Width = 120
+ end
+ object cxGridViewUSERDAYSSUN: TcxGridDBColumn
+ DataBinding.FieldName = 'USERDAYSSUN'
+ Visible = False
+ end
+ object cxGridViewPRIVILEGED: TcxGridDBColumn
+ DataBinding.FieldName = 'PRIVILEGED'
+ Visible = False
+ end
+ object cxGridViewTIPO: TcxGridDBColumn
+ DataBinding.FieldName = 'TIPO'
+ Visible = False
+ end
+ object cxGridViewID_PERFIL: TcxGridDBColumn
+ DataBinding.FieldName = 'ID_PERFIL'
+ Visible = False
+ end
+ end
+ end
+ inherited dsDataSource: TDADataSource
+ Left = 360
+ Top = 136
+ end
+ inherited dxComponentPrinter: TdxComponentPrinter
+ Left = 328
+ Top = 136
+ end
+ inherited dxPSEngineController1: TdxPSEngineController
+ Left = 296
+ Top = 136
+ end
+ inherited cxStyleRepository1: TcxStyleRepository
+ Left = 264
+ Top = 136
+ end
+end
diff --git a/Source/ApplicationBase/Usuarios/Views/uViewUsuarios.pas b/Source/ApplicationBase/Usuarios/Views/uViewUsuarios.pas
new file mode 100644
index 0000000..cfca3f1
--- /dev/null
+++ b/Source/ApplicationBase/Usuarios/Views/uViewUsuarios.pas
@@ -0,0 +1,64 @@
+unit uViewUsuarios;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+ Dialogs, uViewGrid, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData,
+ cxDataStorage, cxEdit, DB, cxDBData, dxPSGlbl, dxPSUtl, dxPSEngn, dxPrnPg,
+ dxBkgnd, dxWrap, dxPrnDev, dxPSCompsProvider, dxPSFillPatterns,
+ dxPSEdgePatterns, dxPgsDlg, dxPSCore, ImgList, PngImageList, ActnList,
+ cxGridCustomPopupMenu, cxGridPopupMenu, dxPScxCommon,
+ uDAInterfaces, uDADataTable, TB2Item, TBX, TB2Toolbar, TBXDkPanels, TB2Dock,
+ cxGridLevel, cxClasses, cxControls, cxGridCustomView,
+ cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGrid,
+ uBizUsuarios;
+
+type
+ IViewUsuarios = interface(IViewGrid)
+ ['{2F46A4FC-6501-47B2-AAB3-28B552DDA455}']
+ function GetUsuarios: IBizUsuario;
+ procedure SetUsuarios(const Value: IBizUsuario);
+ property Usuarios: IBizUsuario read GetUsuarios write SetUsuarios;
+ end;
+
+ TfrViewUsuarios = class(TfrViewGrid, IViewUsuarios)
+ cxGridViewID: TcxGridDBColumn;
+ cxGridViewUSERNAME: TcxGridDBColumn;
+ cxGridViewLOGIN: TcxGridDBColumn;
+ cxGridViewPASS: TcxGridDBColumn;
+ cxGridViewPASSEXPIRED: TcxGridDBColumn;
+ cxGridViewBLOQUEADO: TcxGridDBColumn;
+ cxGridViewEMAIL: TcxGridDBColumn;
+ cxGridViewUSERDAYSSUN: TcxGridDBColumn;
+ cxGridViewPRIVILEGED: TcxGridDBColumn;
+ cxGridViewTIPO: TcxGridDBColumn;
+ cxGridViewID_PERFIL: TcxGridDBColumn;
+ protected
+ FUsuarios : IBizUsuario;
+ function GetUsuarios: IBizUsuario;
+ procedure SetUsuarios(const Value: IBizUsuario);
+ public
+ property Usuarios: IBizUsuario read GetUsuarios write SetUsuarios;
+ end;
+
+
+implementation
+
+{$R *.dfm}
+
+{ TfrViewUsuarios }
+
+function TfrViewUsuarios.GetUsuarios: IBizUsuario;
+begin
+ Result := FUsuarios;
+end;
+
+procedure TfrViewUsuarios.SetUsuarios(const Value: IBizUsuario);
+begin
+ FUsuarios := Value;
+ if Assigned(FUsuarios) then
+ dsDataSource.DataTable := FUsuarios.DataTable;
+end;
+
+end.
diff --git a/Source/ApplicationBase/uAdminPV_App.pas b/Source/ApplicationBase/uAdminPV_App.pas
new file mode 100644
index 0000000..a4c0d1b
--- /dev/null
+++ b/Source/ApplicationBase/uAdminPV_App.pas
@@ -0,0 +1,326 @@
+unit uAdminPV_App;
+
+interface
+
+uses
+ SysUtils, Classes, Forms, uBizUsuarios, uControllerBase,
+ uUsuariosController, uHostManager;
+
+type
+ TDoLoadModulesEvent = procedure;
+ TDoMainFormEvent = procedure;
+
+ IAppSplashForm = interface
+ ['{9905DF57-4476-42E6-A7CD-B1479A84E220}']
+ procedure Show;
+ procedure Hide;
+ procedure Update;
+ function GetMensaje: String;
+ procedure SetMensaje(const AMensaje : String);
+ property Mensaje : String read GetMensaje write SetMensaje;
+ end;
+
+ IAppAdminPV = interface
+ ['{FB6A0F3C-C1D1-462D-AFD4-2A368F85E920}']
+ function GetMainForm: TCustomForm;
+ function GetUsuariosController: IUsuariosController;
+ function GetAppName: String;
+ function GetAppVersion: String;
+ function GetAppFullName: String;
+ function GetUsuarioActivo: IBizUsuario;
+ function GetModuleManager : THostManager;
+ function GetTerminated: Boolean;
+
+ function GetLoadModulesEvent : TDoLoadModulesEvent;
+ procedure SetLoadModulesEvent (ALoadModulesEvent : TDoLoadModulesEvent);
+
+ function GetDoMainFormEvent : TDoMainFormEvent;
+ procedure SetDoMainFormEvent (AMainFormEvent : TDoMainFormEvent);
+
+ function GetAppSplashForm : IAppSplashForm;
+ procedure SetAppSplashForm (AAppSplashForm : IAppSplashForm);
+
+ procedure ShowSplashForm;
+ procedure HideSplashForm;
+
+ procedure Run;
+ procedure Terminate;
+
+ property AppVersion : String read GetAppVersion;
+ property AppName : String read GetAppName;
+ property AppFullName : String read GetAppFullName;
+ property MainForm : TCustomForm read GetMainForm;
+ property UsuarioActivo : IBizUsuario read GetUsuarioActivo;
+ property UsuariosController : IUsuariosController read GetUsuariosController;
+ property AppSplashForm : IAppSplashForm read GetAppSplashForm write SetAppSplashForm;
+ property ModuleManager : THostManager read GetModuleManager;
+ property DoMainFormEvent : TDoMainFormEvent read GetDoMainFormEvent write SetDoMainFormEvent;
+ property DoLoadModulesEvent : TDoLoadModulesEvent read GetLoadModulesEvent write SetLoadModulesEvent;
+ property Terminated : Boolean read GetTerminated;
+
+ procedure ShowCapado;
+ end;
+
+
+ TAppAdminPV = class(TInterfacedObject, IAppAdminPV)
+ private
+ FUsuariosController: IUsuariosController;
+ FAppSplashForm : IAppSplashForm;
+ FHostManager : THostManager;
+ FTerminated : Boolean;
+
+ FDoMainFormEvent: TDoMainFormEvent;
+ FDoLoadModulesEvent: TDoMainFormEvent;
+
+ function GetMainForm: TCustomForm;
+ function GetUsuariosController: IUsuariosController;
+ function GetAppName: String;
+ function GetAppVersion: String;
+ function GetAppFullName: String;
+ function GetUsuarioActivo: IBizUsuario;
+ function GetModuleManager : THostManager;
+ function GetTerminated: Boolean;
+
+ function GetLoadModulesEvent : TDoLoadModulesEvent;
+ procedure SetLoadModulesEvent (ALoadModulesEvent : TDoLoadModulesEvent);
+
+ function GetDoMainFormEvent : TDoMainFormEvent;
+ procedure SetDoMainFormEvent (AMainFormEvent : TDoMainFormEvent);
+
+ function GetAppSplashForm : IAppSplashForm;
+ procedure SetAppSplashForm (AAppSplashForm : IAppSplashForm);
+
+ procedure AfterLoadModule(Sender: TObject; AModuleInfo: TModuleInfo);
+ procedure RegisterModule(AModuleInfo : TModuleInfo);
+ protected
+ procedure DoMainForm;
+
+ procedure CargarModulos;
+ procedure ShowSplashForm;
+ procedure HideSplashForm;
+ procedure UpdateSplashForm;
+ public
+ constructor Create; virtual;
+ destructor Destroy; override;
+
+ procedure Run;
+ procedure Terminate;
+
+ property AppVersion : String read GetAppVersion;
+ property AppName : String read GetAppName;
+ property AppFullName : String read GetAppFullName;
+ property MainForm : TCustomForm read GetMainForm;
+ property AppSplashForm : IAppSplashForm read GetAppSplashForm write SetAppSplashForm;
+ property UsuarioActivo : IBizUsuario read GetUsuarioActivo;
+ property UsuariosController : IUsuariosController read GetUsuariosController;
+ property ModuleManager : THostManager read GetModuleManager;
+ property DoMainFormEvent : TDoMainFormEvent read GetDoMainFormEvent write SetDoMainFormEvent;
+ property DoLoadModulesEvent : TDoLoadModulesEvent read GetLoadModulesEvent write SetLoadModulesEvent;
+ property Terminated : Boolean read GetTerminated;
+
+ procedure ShowCapado;
+ end;
+
+var
+ AppAdminPV : IAppAdminPV = nil;
+
+implementation
+
+uses
+ Dialogs, uDialogUtils, cxControls, uUsuariosViewRegister,
+ uAppInfoUtils;
+
+
+procedure TAppAdminPV.CargarModulos;
+begin
+ if not Assigned(FDoLoadModulesEvent) then
+ raise Exception.Create('Evento para la carga de los módulos de la aplicación no asignado (CargarModulos)');
+
+ FDoLoadModulesEvent();
+end;
+
+constructor TAppAdminPV.Create;
+begin
+ FTerminated := False;
+ FDoMainFormEvent := NIL;
+ FDoLoadModulesEvent := NIL;
+ FAppSplashForm := NIL;
+ FUsuariosController := NIL; // Se crea la primera vez que se usa
+
+
+ FHostManager := THostManager.Create(NIL);
+ with FHostManager do
+ begin
+ OnAfterLoad := AfterLoadModule;
+ // Ruta por defecto de los módulos
+ BPLPath := ExtractFilePath(Application.ExeName) + PathDelim;
+ end;
+end;
+
+destructor TAppAdminPV.Destroy;
+begin
+ FAppSplashForm := NIL;
+
+ FHostManager.UnloadModules;
+ FreeAndNIL(FHostManager);
+
+ FUsuariosController := NIL;
+
+ inherited;
+end;
+
+procedure TAppAdminPV.DoMainForm;
+begin
+ if not Assigned(FDoMainFormEvent) then
+ raise Exception.Create('Evento para la creación del formulario principal no asignado (DoMainForm)');
+
+ FDoMainFormEvent();
+end;
+
+function TAppAdminPV.GetMainForm: TCustomForm;
+begin
+ Result := Application.MainForm;
+end;
+
+function TAppAdminPV.GetDoMainFormEvent: TDoMainFormEvent;
+begin
+ Result := FDoMainFormEvent;
+end;
+
+function TAppAdminPV.GetAppFullName: String;
+begin
+ Result := uAppInfoUtils.GetAppFullName;
+end;
+
+function TAppAdminPV.GetAppName: String;
+begin
+ Result := uAppInfoUtils.GetAppName;
+end;
+
+function TAppAdminPV.GetAppSplashForm: IAppSplashForm;
+begin
+ Result := FAppSplashForm;
+end;
+
+function TAppAdminPV.GetAppVersion: String;
+begin
+ Result := uAppInfoUtils.GetAppVersion;
+end;
+
+function TAppAdminPV.GetLoadModulesEvent: TDoLoadModulesEvent;
+begin
+ Result := FDoLoadModulesEvent;
+end;
+
+function TAppAdminPV.GetModuleManager: THostManager;
+begin
+ Result := FHostManager;
+end;
+
+function TAppAdminPV.GetTerminated: Boolean;
+begin
+ Result := FTerminated;
+end;
+
+function TAppAdminPV.GetUsuarioActivo: IBizUsuario;
+begin
+ Result := UsuariosController.CurrentUser;
+end;
+
+function TAppAdminPV.GetUsuariosController: IUsuariosController;
+begin
+ if not Assigned(FUsuariosController) then
+ FUsuariosController := TUsuariosController.Create;
+
+ Result := FUsuariosController;
+end;
+
+procedure TAppAdminPV.HideSplashForm;
+begin
+ if not Assigned(FAppSplashForm) then
+ raise Exception.Create('AppSplashForm no asignado (HideSplashForm)');
+
+ FAppSplashForm.Hide;
+end;
+
+procedure TAppAdminPV.AfterLoadModule(Sender: TObject;
+ AModuleInfo: TModuleInfo);
+begin
+ RegisterModule(AModuleInfo);
+end;
+
+procedure TAppAdminPV.RegisterModule(AModuleInfo: TModuleInfo);
+begin
+ AppSplashForm.Mensaje := 'Cargando ''' + AModuleInfo.Module.ModuleName + '''...';
+end;
+
+procedure TAppAdminPV.Run;
+begin
+ if UsuariosController.StartLogin then
+ begin
+ ShowHourglassCursor;
+ try
+ CargarModulos;
+ DoMainForm;
+ finally
+ HideHourglassCursor;
+ HideSplashForm;
+ end;
+ end;
+ Application.Run;
+ Terminate;
+end;
+
+procedure TAppAdminPV.SetDoMainFormEvent(
+ AMainFormEvent: TDoMainFormEvent);
+begin
+ FDoMainFormEvent := AMainFormEvent;
+end;
+
+procedure TAppAdminPV.SetAppSplashForm(AAppSplashForm: IAppSplashForm);
+begin
+ FAppSplashForm := AAppSplashForm;
+end;
+
+procedure TAppAdminPV.SetLoadModulesEvent(
+ ALoadModulesEvent: TDoLoadModulesEvent);
+begin
+ FDoLoadModulesEvent := ALoadModulesEvent;
+end;
+
+procedure TAppAdminPV.ShowCapado;
+begin
+ ShowInfoMessage('Sin Acceso', 'Funcionalidad en desarrollo, disculpen las molestias');
+end;
+
+procedure TAppAdminPV.ShowSplashForm;
+begin
+ if not Assigned(FAppSplashForm) then
+ raise Exception.Create('AppSplashForm no asignado (ShowSplashForm)');
+
+ FAppSplashForm.Show;
+ FAppSplashForm.Update;
+end;
+
+procedure TAppAdminPV.Terminate;
+begin
+ ModuleManager.UnloadModules;
+ FTerminated := True;
+end;
+
+procedure TAppAdminPV.UpdateSplashForm;
+begin
+ FAppSplashForm.Update;
+end;
+
+initialization
+ // Pongo esto aquí por ahora
+ uUsuariosViewRegister.RegisterViews;
+
+finalization
+ // Pongo esto aquí por ahora
+ AppAdminPV := NIL;
+
+ uUsuariosViewRegister.UnregisterViews;
+
+end.
diff --git a/Source/Base/BaseD10.dpk b/Source/Base/BaseD10.dpk
index 9555c9f..cb0a75f 100644
--- a/Source/Base/BaseD10.dpk
+++ b/Source/Base/BaseD10.dpk
@@ -77,16 +77,15 @@ requires
dxPSLnksD10,
vclshlctrls,
dclcxLibraryD10,
- RemObjects_Core_D10,
- DataAbstract_Core_D10;
+ RemObjects_Core_D11,
+ DataAbstract_Core_D11,
+ JSDialog100;
contains
- uDataModuleBase in 'uDataModuleBase.pas' {dmBase: TDAClientDataModule},
+ uDMBase in 'uDMBase.pas' {dmBase: TDAClientDataModule},
uEditorBase in 'uEditorBase.pas' {fEditorBase},
uEditorGridBase in 'uEditorGridBase.pas' {fEditorGridBase},
uEditorItem in 'uEditorItem.pas' {fEditorItem},
- uDataTableUtils in 'uDataTableUtils.pas',
- uEditorUtils in 'uEditorUtils.pas',
uEditorPreview in 'uEditorPreview.pas' {fEditorPreview},
uViewPreview in 'uViewPreview.pas' {frViewPreview: TFrame},
uViewBase in 'uViewBase.pas' {frViewBase: TCustomView},
@@ -95,15 +94,24 @@ contains
uEditorDBItem in 'uEditorDBItem.pas' {fEditorDBItem: TCustomEditor},
uExceptions in 'uExceptions.pas',
uViewBarraSeleccion in 'uViewBarraSeleccion.pas' {frViewBarraSeleccion: TFrame},
- uDBSelectionList in 'uDBSelectionList.pas',
uConfigurarConexion in 'uConfigurarConexion.pas' {fConfigurarConexion},
uBizInformesBase in 'uBizInformesBase.pas',
- uSysFunc in 'uSysFunc.pas',
- VARELA_Intf in '..\Servidor\VARELA_Intf.pas',
uViewGrid in 'uViewGrid.pas' {frViewGrid: TCustomView},
- uIntegerList in 'uIntegerList.pas',
- schStockClient_Intf in '..\Modulos\Stock\Reglas\schStockClient_Intf.pas',
- schStockServer_Intf in '..\Modulos\Stock\Reglas\schStockServer_Intf.pas',
- uGridUtils in 'uGridUtils.pas';
+ VARELA_Intf in '..\Servicios\VARELA_Intf.pas',
+ uControllerBase in 'Controladores\uControllerBase.pas',
+ uDataModuleBase in 'uDataModuleBase.pas' {fDataModuleBase: TDataModuleBase},
+ uSysFunc in 'Utiles\uSysFunc.pas',
+ uDataTableUtils in 'Utiles\uDataTableUtils.pas',
+ uDBSelectionList in 'Utiles\uDBSelectionList.pas',
+ uDialogUtils in 'Utiles\uDialogUtils.pas',
+ uEditorUtils in 'Utiles\uEditorUtils.pas',
+ uGridUtils in 'Utiles\uGridUtils.pas',
+ uIntegerList in 'Utiles\uIntegerList.pas',
+ uViewRegistryUtils in 'ClassRegistry\uViewRegistryUtils.pas',
+ uClassRegistryUtils in 'ClassRegistry\uClassRegistryUtils.pas',
+ uEditorRegistryUtils in 'ClassRegistry\uEditorRegistryUtils.pas',
+ uInformeRegistryUtils in 'ClassRegistry\uInformeRegistryUtils.pas',
+ uAppInfoUtils in 'Utiles\uAppInfoUtils.pas',
+ uDateUtils in 'Utiles\uDateUtils.pas';
end.
diff --git a/Source/Base/BaseD10.dproj b/Source/Base/BaseD10.dproj
index cd2c4f7..b4be50a 100644
--- a/Source/Base/BaseD10.dproj
+++ b/Source/Base/BaseD10.dproj
@@ -53,9 +53,7 @@
MainSource
-
-
-
+
@@ -67,7 +65,7 @@
-
+
@@ -84,12 +82,11 @@
-
-
+
@@ -99,35 +96,44 @@
-
+
-
+
+
+
+
+
-
+
+ TDataModuleBase
+
+
+
+ TDAClientDataModule
-
-
+ TCustomEditor
+ TCustomEditor
@@ -138,25 +144,35 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+ TFrame
+ TCustomView
+ TCustomView
+ TCustomView
+ TFrame
diff --git a/Source/Base/BaseD10.drc b/Source/Base/BaseD10.drc
index a39f62e..7867c96 100644
--- a/Source/Base/BaseD10.drc
+++ b/Source/Base/BaseD10.drc
@@ -8,14 +8,17 @@
resources were bound to the produced executable.
*/
+#define uClassRegistryUtils_eClassnotFound 65520
STRINGTABLE
BEGIN
+ uClassRegistryUtils_eClassnotFound, "Class \"%s\" was not found in the registry."
END
/* C:\Varela_D2007\Source\Base\uConfigurarConexion.dfm */
-/* C:\Varela_D2007\Source\Base\uDataModuleBase.dfm */
+/* C:\Varela_D2007\Source\Base\uDMBase.dfm */
/* C:\Varela_D2007\Source\Base\uViewBase.dfm */
/* C:\Varela_D2007\Source\Base\uEditorBase.dfm */
+/* C:\Varela_D2007\Source\Base\uDataModuleBase.dfm */
/* C:\Varela_D2007\Source\Base\uViewGridBase.dfm */
/* C:\Varela_D2007\Source\Base\uEditorItem.dfm */
/* C:\Varela_D2007\Source\Base\uEditorDBBase.dfm */
@@ -26,4 +29,4 @@ END
/* C:\Varela_D2007\Source\Base\uViewBarraSeleccion.dfm */
/* C:\Varela_D2007\Source\Base\uViewGrid.dfm */
/* C:\Varela_D2007\Source\Base\BaseD10.res */
-/* C:\DOCUME~1\Usuario\CONFIG~1\Temp\dtf9.tmp */
+/* C:\DOCUME~1\Usuario\CONFIG~1\Temp\dtf21.tmp */
diff --git a/Source/Base/BaseD10.identcache b/Source/Base/BaseD10.identcache
deleted file mode 100644
index 3d15709..0000000
Binary files a/Source/Base/BaseD10.identcache and /dev/null differ
diff --git a/Source/Base/ClassRegistry/uClassRegistryUtils.pas b/Source/Base/ClassRegistry/uClassRegistryUtils.pas
new file mode 100644
index 0000000..d7b679d
--- /dev/null
+++ b/Source/Base/ClassRegistry/uClassRegistryUtils.pas
@@ -0,0 +1,336 @@
+unit uClassRegistryUtils;
+
+interface
+
+uses
+ Classes, SysUtils, Forms, uGUIBase;
+
+type
+ IClassRegistry = Interface
+ ['{FD23C946-4103-4C67-9C3F-644B52826833}']
+ procedure RegisterClass( aClass: TClass; const aDisplayname: String = '');
+ procedure RegisterClasses( const aClasses: array of TClass;
+ const aDisplaynames: array of String );
+ procedure UnRegisterClass( aClass: TClass );
+ function FindClass( const aClassOrDisplayname: String ): Tclass;
+ function IsClassRegistered( aClass: TClass ): Boolean; overload;
+ function IsClassRegistered( const aDisplayname: String ): Boolean; overload;
+ procedure GetRegisteredClasses( aList: TStrings; aMinClass: TClass = nil);
+ function CreateObject( const aClassOrDisplayname: String ): TObject;
+ end;
+
+ IComponentRegistry = Interface( IClassRegistry )
+ ['{04BAA01F-9AF4-4E60-9922-641E127A35C2}']
+ function CreateComponent( const aClassOrDisplayname: String;
+ aOwner:TComponent = nil ): TComponent;
+ end;
+
+ IFormRegistry = Interface( IComponentRegistry )
+ ['{28E3BF72-1378-4136-B1FB-027FBB8FE99B}']
+ function CreateForm( const aClassOrDisplayname: String;
+ aOwner: TComponent = nil ): TForm;
+ end;
+
+ IDataModuleRegistry = Interface( IComponentRegistry )
+ ['{9D8D1D23-6A5C-4351-9393-093CD8B76788}']
+ function CreateDatamodule( const aClassOrDisplayname: String;
+ aOwner: TComponent = nil ): TDatamodule;
+ end;
+
+ IReportRegistry = Interface( IComponentRegistry )
+ ['{49D3C8D5-8FEE-4F15-A6D2-51CB1DB29F8D}']
+ function CreateReport( const aClassOrDisplayname: String;
+ aOwner: TComponent = nil ): TInterfacedObject;
+ end;
+
+ TClassRegistry = class( TInterfacedObject, IClassRegistry )
+ private
+ FList: TStringlist;
+ FMinAcceptableClass: TClass;
+
+ function FindClassByClassname( const aClassname: String ): Tclass;
+ function FindClassByDisplayname( const aDisplayname: String ): TClass;
+ function IsClassAcceptable( aClass: TClass ): Boolean;
+ function GetClasses(index: integer): TClass;
+ function GetCount: Integer;
+ protected
+ procedure ValidateMinAcceptableClass(var aMinAcceptableClass: TClass ); virtual;
+ procedure RegisterClass( aClass: TClass; const aDisplayname: String = '');
+ procedure RegisterClasses( const aClasses: array of TClass;
+ const aDisplaynames: array of String );
+ procedure UnRegisterClass( aClass: TClass );
+ function FindClass( const aClassOrDisplayname: String ): Tclass;
+ function IsClassRegistered( aClass: TClass ): Boolean; overload;
+ function IsClassRegistered( const aDisplayname: String ): Boolean; overload;
+ procedure GetRegisteredClasses( aList: TStrings; aMinClass: TClass = nil);
+ function CreateObject( const aClassOrDisplayname: String ): TObject;
+ property MinAcceptableClass: TClass read FMinAcceptableClass;
+ property List: TStringlist read FList;
+ property Count: Integer read GetCount;
+ property Classes[ index: integer ]: TClass read GetClasses;
+ public
+ constructor Create( minAcceptableClass: TClass = nil ); virtual;
+ destructor Destroy; override;
+ end;
+
+ TComponentRegistry = class( TClassRegistry, IComponentRegistry )
+ protected
+ procedure ValidateMinAcceptableClass(var aMinAcceptableClass: TClass ); override;
+ function CreateComponent( const aClassOrDisplayname: String;
+ aOwner: TComponent = nil ): TComponent;
+ end;
+
+ TFormRegistry = class( TComponentRegistry, IFormRegistry )
+ protected
+ procedure ValidateMinAcceptableClass(var aMinAcceptableClass: TClass ); override;
+ function CreateForm( const aClassOrDisplayname: String;
+ aOwner: TComponent = nil ): TForm;
+ end;
+
+ TDataModuleRegistry = class( TComponentRegistry, IDataModuleRegistry )
+ protected
+ procedure ValidateMinAcceptableClass(var aMinAcceptableClass: TClass); override;
+ function CreateDatamodule( const aClassOrDisplayname: String;
+ aOwner: TComponent = nil ): TDatamodule;
+ end;
+
+ TReportRegistry = class( TComponentRegistry, IReportRegistry )
+ protected
+ procedure ValidateMinAcceptableClass(var aMinAcceptableClass: TClass ); override;
+ function CreateReport( const aClassOrDisplayname: String;
+ aOwner: TComponent = nil ): TInterfacedObject;
+ end;
+
+ EClassRegistryError = class( Exception );
+
+implementation
+
+{ TClassRegistry }
+
+ResourceString
+ eClassnotFound = 'Class "%s" was not found in the registry.';
+
+constructor TClassRegistry.Create(minAcceptableClass: TClass);
+begin
+ inherited Create;
+ FList := Tstringlist.Create;
+ ValidateMinAcceptableClass( minAcceptableClass );
+ FMinAcceptableClass := minAcceptableClass;
+end;
+
+function TClassRegistry.CreateObject(
+ const aClassOrDisplayname: String): TObject;
+begin
+ Result := FindClass( aClassOrDisplayname ).Create;
+end;
+
+destructor TClassRegistry.Destroy;
+begin
+ Flist.Free;
+ inherited;
+end;
+
+function TClassRegistry.FindClass(
+ const aClassOrDisplayname: String): Tclass;
+begin
+ Result := FindClassByDisplayname( aClassOrDisplayname );
+ If not Assigned( Result ) Then
+ Result := FindClassByClassname( aClassOrDisplayname );
+ If not Assigned( Result ) Then
+ raise EClassRegistryError.CreateFmt
+ ( eClassnotFound, [ aClassOrDisplayname ] );
+end;
+
+function TClassRegistry.FindClassByClassname(
+ const aClassname: String): Tclass;
+var
+ i: Integer;
+begin
+ for i:= 0 to count-1 do begin
+ Result := classes[i];
+ If Result.ClassNameIs( aClassname ) Then
+ Exit;
+ end;
+ Result := nil;
+end;
+
+function TClassRegistry.FindClassByDisplayname(
+ const aDisplayname: String): TClass;
+var
+ i: Integer;
+begin
+ i:= List.IndexOf( aDisplayname );
+ If i >= 0 Then
+ Result := Classes[i]
+ Else
+ Result := nil;
+end;
+
+function TClassRegistry.GetClasses(index: integer): TClass;
+begin
+ Result := TClass( List.Objects[index] );
+end;
+
+function TClassRegistry.GetCount: Integer;
+begin
+ Result := List.Count;
+end;
+
+procedure TClassRegistry.GetRegisteredClasses(aList: TStrings;
+ aMinClass: TClass);
+var
+ i: Integer;
+ aClass: TClass;
+begin
+ Assert( Assigned( aList ));
+ aList.BeginUpdate;
+ try
+ aList.Clear;
+ If not Assigned( aMinClass ) Then
+ aList.Assign( List )
+ else begin
+ For i:= 0 To Count-1 Do Begin
+ aClass := Classes[i];
+ If aClass.InheritsFrom( aMinClass ) Then
+ aList.AddObject( List[i], TObject( aClass ));
+ end;
+ end;
+ finally
+ aList.EndUpdate
+ end;
+end;
+
+function TClassRegistry.IsClassAcceptable(aClass: TClass): Boolean;
+begin
+ Result := Assigned( aClass ) and
+ aClass.InheritsFrom( MinAcceptableClass );
+end;
+
+function TClassRegistry.IsClassRegistered(const aDisplayname: String): Boolean;
+begin
+ Result := List.IndexOf(aDisplayname) >= 0;
+end;
+
+function TClassRegistry.IsClassRegistered(aClass: TClass): Boolean;
+begin
+ Result := List.IndexOfObject( TObject( aClass )) >= 0;
+end;
+
+procedure TClassRegistry.RegisterClass(aClass: TClass;
+ const aDisplayname: String);
+begin
+ Assert( Assigned( aClass ), 'Cannot register Nil class' );
+ If aDisplayname = '' Then
+ RegisterClass( aClass, aClass.Classname )
+ else begin
+ Assert( IsClassAcceptable( aClass ),
+ format('Cannot register %s since it does not inherit from %s',
+ [aclass.classname, MinAcceptableClass.classname] ));
+ Assert( not IsClassRegistered( aClass ),
+ Format('Class %s is already registered.', [aClass.Classname]));
+ List.AddObject( aDisplayname, TObject( aClass ));
+ end;
+end;
+
+procedure TClassRegistry.RegisterClasses(const aClasses: array of TClass;
+ const aDisplaynames: array of String);
+var
+ i: Integer;
+begin
+ Assert( High( aClasses ) = High( aDisplaynames ),
+ 'Size of both parameter arrays has to be the same.' );
+ for i:= Low( aClasses ) to High( aClasses ) do
+ RegisterClass( aClasses[i], aDisplaynames[i] );
+end;
+
+procedure TClassRegistry.UnRegisterClass(aClass: TClass);
+var
+ i: Integer;
+begin
+ i:= List.IndexOfObject( TObject( aClass ));
+ If i >= 0 Then
+ List.Delete( i );
+ // does not consider attempt to unregister a class that is not
+ // registered as an error.
+end;
+
+procedure TClassRegistry.ValidateMinAcceptableClass(
+ var aMinAcceptableClass: TClass);
+begin
+ If not Assigned( aMinAcceptableClass ) Then
+ aMinAcceptableClass := TObject;
+end;
+
+{ TComponentRegistry }
+
+function TComponentRegistry.CreateComponent(
+ const aClassOrDisplayname: String; aOwner: TComponent): TComponent;
+var
+ aClass: TComponentClass;
+begin
+ aClass := TComponentClass( FindClass( aClassOrDisplayname ));
+ Result := aClass.Create( aOwner );
+end;
+
+procedure TComponentRegistry.ValidateMinAcceptableClass(
+ var aMinAcceptableClass: TClass);
+begin
+ inherited;
+ If not aMinAcceptableClass.InheritsFrom( TComponent )
+ Then
+ aMinAcceptableClass := TComponent;
+end;
+
+{ TFormRegistry }
+
+function TFormRegistry.CreateForm(const aClassOrDisplayname: String;
+ aOwner: TComponent): TForm;
+begin
+ Result := CreateComponent( aClassOrDisplayname, aOwner ) As TForm;
+end;
+
+procedure TFormRegistry.ValidateMinAcceptableClass(
+ var aMinAcceptableClass: TClass);
+begin
+ inherited;
+ If not aMinAcceptableClass.InheritsFrom( TForm )
+ Then
+ aMinAcceptableClass := TForm;
+end;
+
+{ TDataModuleRegistry }
+
+function TDataModuleRegistry.CreateDatamodule(
+ const aClassOrDisplayname: String; aOwner: TComponent): TDatamodule;
+begin
+ Result := CreateComponent( aClassOrDisplayname, aOwner ) As TDatamodule;
+end;
+
+procedure TDataModuleRegistry.ValidateMinAcceptableClass(
+ var aMinAcceptableClass: TClass);
+begin
+ inherited;
+ If not aMinAcceptableClass.InheritsFrom( TDatamodule )
+ Then
+ aMinAcceptableClass := TDatamodule;
+end;
+
+{ TReportRegistry }
+
+function TReportRegistry.CreateReport(const aClassOrDisplayname: String;
+ aOwner: TComponent): TInterfacedObject;
+begin
+ Result := CreateObject( aClassOrDisplayname) As TInterfacedObject;
+// Result := CreateComponent( aClassOrDisplayname, aOwner ) As TInterfacedObject;
+end;
+
+procedure TReportRegistry.ValidateMinAcceptableClass(
+ var aMinAcceptableClass: TClass);
+begin
+ inherited;
+ If not aMinAcceptableClass.InheritsFrom( TInterfacedObject )
+ Then
+ aMinAcceptableClass := TInterfacedObject;
+end;
+
+end.
diff --git a/Source/Base/ClassRegistry/uEditorRegistryUtils.pas b/Source/Base/ClassRegistry/uEditorRegistryUtils.pas
new file mode 100644
index 0000000..0dd7333
--- /dev/null
+++ b/Source/Base/ClassRegistry/uEditorRegistryUtils.pas
@@ -0,0 +1,81 @@
+unit uEditorRegistryUtils;
+
+interface
+
+uses
+ Classes, Forms, uClassRegistryUtils, uCustomEditor;
+
+type
+{
+ IEditorRegistry = interface (IComponentRegistry)
+ 22F14B82-AC61-4987-847E-AF8513DE2A10
+ function CreateEditor(const aClassOrDisplayname: String;
+ aOwner: TComponent = NIL): TCustomEditor;
+ end;
+
+ TEditorRegistry = class(TComponentRegistry, IEditorRegistry)
+ protected
+ procedure ValidateMinAcceptableClass(var aMinAcceptableClass: TClass); override;
+ function CreateEditor(const aClassOrDisplayname: String;
+ aOwner: TComponent = nil): TCustomEditor;
+ end;
+}
+
+ IEditorRegistry = interface (IFormRegistry)
+ ['{F6AC050F-5547-4E1F-AA44-DA0D06EDA4D7}']
+ function CreateEditor(const aClassOrDisplayname: String;
+ aOwner: TComponent = NIL): TForm;
+ end;
+
+ TEditorRegistry = class(TFormRegistry, IEditorRegistry)
+ protected
+ function CreateEditor(const aClassOrDisplayname: String;
+ aOwner: TComponent = nil): TForm;
+ end;
+
+function CreateEditor(const AName: String; const IID: TGUID; out Intf): Boolean;
+
+var
+ EditorRegistry : IEditorRegistry;
+
+implementation
+
+uses
+ SysUtils, cxControls;
+
+function CreateEditor(const AName: String; const IID: TGUID; out Intf): Boolean;
+begin
+ ShowHourglassCursor;
+ try
+ Result := Supports(EditorRegistry.CreateEditor(AName, Application), IID, Intf);
+ finally
+ HideHourglassCursor;
+ end;
+end;
+
+
+{ TEditorRegistry }
+
+function TEditorRegistry.CreateEditor(const aClassOrDisplayname: String;
+ aOwner: TComponent): TForm;
+begin
+ if not Assigned(AOwner) then
+ AOwner := Application;
+ Result := CreateComponent( aClassOrDisplayname, aOwner ) as TForm;
+end;
+
+{procedure TEditorRegistry.ValidateMinAcceptableClass(
+ var aMinAcceptableClass: TClass);
+begin
+ inherited;
+ if not aMinAcceptableClass.InheritsFrom(TCustomEditor) then
+ aMinAcceptableClass := TCustomEditor;
+end;}
+
+initialization
+ EditorRegistry := TEditorRegistry.Create;
+
+finalization
+ EditorRegistry := NIL;
+
+end.
diff --git a/Source/Base/ClassRegistry/uInformeRegistryUtils.pas b/Source/Base/ClassRegistry/uInformeRegistryUtils.pas
new file mode 100644
index 0000000..72b6e90
--- /dev/null
+++ b/Source/Base/ClassRegistry/uInformeRegistryUtils.pas
@@ -0,0 +1,59 @@
+unit uInformeRegistryUtils;
+
+interface
+
+uses
+ Classes, Forms, uClassRegistryUtils;
+
+type
+ IInformeRegistry = interface (IReportRegistry)
+ ['{F6AC050F-5547-4E1F-AA44-DA0D06EDA4D7}']
+ function CreateInforme(const aClassOrDisplayname: String;
+ aOwner: TComponent = NIL): TInterfacedObject;
+ end;
+
+ TInformeRegistry = class(TReportRegistry, IInformeRegistry)
+ protected
+ function CreateInforme(const aClassOrDisplayname: String;
+ aOwner: TComponent = nil): TInterfacedObject;
+ end;
+
+function CreateInforme(const AName: String; const IID: TGUID; out Intf): Boolean;
+
+var
+ InformeRegistry : IInformeRegistry;
+
+implementation
+
+uses
+ SysUtils, cxControls;
+
+function CreateInforme(const AName: String; const IID: TGUID; out Intf): Boolean;
+begin
+ ShowHourglassCursor;
+ try
+ Result := Supports(InformeRegistry.CreateInforme(AName, Application), IID, Intf);
+ finally
+ HideHourglassCursor;
+ end;
+end;
+
+
+{ TInformeRegistry }
+
+function TInformeRegistry.CreateInforme(const aClassOrDisplayname: String;
+ aOwner: TComponent): TInterfacedObject;
+begin
+{ if not Assigned(AOwner) then
+ AOwner := Application;}
+ Result := CreateObject( aClassOrDisplayname) as TInterfacedObject;
+end;
+
+
+initialization
+ InformeRegistry := TInformeRegistry.Create;
+
+finalization
+ InformeRegistry := NIL;
+
+end.
diff --git a/Source/Base/ClassRegistry/uViewRegistryUtils.pas b/Source/Base/ClassRegistry/uViewRegistryUtils.pas
new file mode 100644
index 0000000..458a681
--- /dev/null
+++ b/Source/Base/ClassRegistry/uViewRegistryUtils.pas
@@ -0,0 +1,50 @@
+unit uViewRegistryUtils;
+
+interface
+
+uses
+ Classes, Forms, uClassRegistryUtils, uCustomView;
+
+type
+ IViewRegistry = interface (IComponentRegistry)
+ ['{F49AE52F-47EC-42AF-8365-A09270E4B45D}']
+ function CreateView(const aClassOrDisplayname: String;
+ aOwner: TComponent = nil): TCustomView;
+ end;
+
+
+ TViewRegistry = class(TComponentRegistry, IViewRegistry)
+ protected
+ procedure ValidateMinAcceptableClass(var aMinAcceptableClass: TClass); override;
+ function CreateView( const aClassOrDisplayname: String;
+ aOwner: TComponent = nil ): TCustomView;
+ end;
+
+var
+ ViewRegistry : IViewRegistry;
+
+implementation
+
+{ TViewRegistry }
+
+function TViewRegistry.CreateView(const aClassOrDisplayname: String;
+ aOwner: TComponent): TCustomView;
+begin
+ Result := CreateComponent( aClassOrDisplayname, aOwner ) as TCustomView;
+end;
+
+procedure TViewRegistry.ValidateMinAcceptableClass(
+ var aMinAcceptableClass: TClass);
+begin
+ inherited;
+ if not aMinAcceptableClass.InheritsFrom(TCustomView) then
+ aMinAcceptableClass := TCustomView;
+end;
+
+initialization
+ ViewRegistry := TViewRegistry.Create;
+
+finalization
+ ViewRegistry := NIL;
+
+end.
diff --git a/Source/Base/Controladores/uControllerBase.pas b/Source/Base/Controladores/uControllerBase.pas
new file mode 100644
index 0000000..9e825ab
--- /dev/null
+++ b/Source/Base/Controladores/uControllerBase.pas
@@ -0,0 +1,280 @@
+unit uControllerBase;
+
+interface
+
+uses
+ Classes, uDADataTable, Forms;
+
+type
+ ISujeto = interface;
+
+ IObservador = interface (IInterface)
+ ['{679D5CF2-D5DC-4A52-9FF3-04AD91402483}']
+ procedure AddSujeto(Sujeto: ISujeto);
+ procedure DeleteSujeto(Sujeto: ISujeto);
+ procedure RecibirAviso(ASujeto: ISujeto); overload;
+ procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); overload;
+ end;
+
+ ISujeto = interface (IInterface)
+ ['{CDB691CD-D1D6-4F2E-AA34-93B1CD0E6030}']
+ procedure AddObservador(Observador: IObservador);
+ procedure DeleteObservador(Observador: IObservador);
+ end;
+
+ { ******************* PARA PRUEBAS ******************************************}
+ TMiInterfacedObject = class(TObject, IInterface)
+ protected
+ FRefCount: Integer;
+ function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
+ function _AddRef: Integer; stdcall;
+ function _Release: Integer; virtual; stdcall;
+ function GetRefCount : Integer;
+ public
+ procedure AfterConstruction; override;
+ procedure BeforeDestruction; override;
+ class function NewInstance: TObject; override;
+ property RefCount: Integer read FRefCount;
+ end;
+
+
+ { ***************************************************************************}
+
+
+ TObservador = class(TObject, IObservador)
+ private
+ fSujetos: IInterfaceList;
+ protected
+ FRefCount: Integer;
+ procedure RecibirAviso(ASujeto: ISujeto); overload; virtual;
+ procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); overload; virtual; abstract;
+ function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
+ function _AddRef: Integer; stdcall;
+ function _Release: Integer; stdcall;
+ function GetRefCount : Integer;
+ public
+ constructor Create; virtual;
+ procedure AddSujeto(Sujeto: ISujeto);
+ procedure DeleteSujeto(Sujeto: ISujeto);
+ destructor Destroy; override;
+
+ procedure AfterConstruction; override;
+ procedure BeforeDestruction; override;
+ class function NewInstance: TObject; override;
+ property RefCount: Integer read FRefCount;
+ end;
+
+ TSujeto = class(TInterfacedObject, ISujeto)
+ private
+ fObservadores: IInterfaceList;
+ protected
+ procedure AvisarObservadores; overload;
+ procedure AvisarObservadores(ADataTable: IDAStronglyTypedDataTable); overload;
+ public
+ constructor Create; virtual;
+ procedure AddObservador(Observador: IObservador);
+ procedure DeleteObservador(Observador: IObservador);
+ destructor Destroy; override;
+ end;
+
+ IControllerBase = IObservador;
+ TControllerBase = TObservador;
+
+implementation
+
+uses
+ Dialogs, SysUtils;
+
+
+function InterlockedIncrement(var I: Integer): Integer;
+asm
+ MOV EDX,1
+ XCHG EAX,EDX
+ LOCK XADD [EDX],EAX
+ INC EAX
+end;
+
+function InterlockedDecrement(var I: Integer): Integer;
+asm
+ MOV EDX,-1
+ XCHG EAX,EDX
+ LOCK XADD [EDX],EAX
+ DEC EAX
+end;
+
+{ TMiInterfacedObject }
+
+procedure TMiInterfacedObject.AfterConstruction;
+begin
+// Release the constructor's implicit refcount
+ InterlockedDecrement(FRefCount);
+end;
+
+procedure TMiInterfacedObject.BeforeDestruction;
+begin
+// if RefCount <> 0 then
+// Error(reInvalidPtr);
+end;
+
+function TMiInterfacedObject.GetRefCount: Integer;
+begin
+ Result := FRefCount;
+end;
+
+// Set an implicit refcount so that refcounting
+// during construction won't destroy the object.
+class function TMiInterfacedObject.NewInstance: TObject;
+begin
+ Result := inherited NewInstance;
+ TMiInterfacedObject(Result).FRefCount := 1;
+end;
+
+function TMiInterfacedObject.QueryInterface(const IID: TGUID; out Obj): HResult;
+begin
+ if GetInterface(IID, Obj) then
+ Result := 0
+ else
+ Result := E_NOINTERFACE;
+end;
+
+function TMiInterfacedObject._AddRef: Integer;
+begin
+ Result := InterlockedIncrement(FRefCount);
+// ShowMessage('_AddRef: ' + ClassName + ' - RefCount: ' + IntToStr(FRefCount));
+end;
+
+function TMiInterfacedObject._Release: Integer;
+begin
+ Result := InterlockedDecrement(FRefCount);
+// ShowMessage('_Release: ' + ClassName + ' - RefCount: ' + IntToStr(FRefCount));
+ if Result = 0 then
+ Destroy;
+end;
+
+
+
+{ TSujeto }
+
+procedure TSujeto.addObservador(Observador: IObservador);
+begin
+ FObservadores.Add(Observador);
+ Observador.AddSujeto(Self);
+end;
+
+procedure TSujeto.AvisarObservadores;
+var
+ i: Integer;
+ AObs : IObservador;
+begin
+ for i := 0 to Pred(FObservadores.Count) do
+ begin
+ if Supports(FObservadores[i], IObservador, AObs) then
+ AObs.RecibirAviso(Self);
+ end;
+end;
+
+procedure TSujeto.AvisarObservadores(ADataTable: IDAStronglyTypedDataTable);
+var
+ i: Integer;
+ AObs : IObservador;
+begin
+ for i := 0 to Pred(FObservadores.Count) do
+ begin
+ if Supports(FObservadores[i], IObservador, AObs) then
+ AObs.RecibirAviso(Self, ADataTable);
+ end;
+end;
+
+constructor TSujeto.Create;
+begin
+ inherited;
+ FObservadores := TInterfaceList.Create;
+end;
+
+procedure TSujeto.DeleteObservador(Observador: IObservador);
+begin
+ FObservadores.Remove(Observador);
+end;
+
+destructor TSujeto.Destroy;
+begin
+ FObservadores := NIL;
+ inherited;
+end;
+
+{ TObservador }
+
+procedure TObservador.RecibirAviso(ASujeto: ISujeto);
+begin
+ //
+end;
+
+function TObservador._AddRef: Integer;
+begin
+ Result := InterlockedIncrement(FRefCount);
+// ShowMessage('_AddRef: ' + ClassName + ' - RefCount: ' + IntToStr(FRefCount));
+end;
+
+function TObservador._Release: Integer;
+begin
+ Result := InterlockedDecrement(FRefCount);
+// ShowMessage('_Release: ' + ClassName + ' - RefCount: ' + IntToStr(FRefCount));
+// if (Result = 0)
+ if (Assigned(fSujetos) and (fSujetos.Count = FRefCount)) then
+ Destroy;
+end;
+
+procedure TObservador.AddSujeto(Sujeto: ISujeto);
+begin
+ FSujetos.Add(Sujeto);
+end;
+
+procedure TObservador.AfterConstruction;
+begin
+// Release the constructor's implicit refcount
+ InterlockedDecrement(FRefCount);
+end;
+
+procedure TObservador.BeforeDestruction;
+begin
+// if RefCount <> 0 then
+// Error(reInvalidPtr);
+end;
+
+constructor TObservador.Create;
+begin
+ inherited;
+ FSujetos := TInterfaceList.Create;
+end;
+
+procedure TObservador.DeleteSujeto(Sujeto: ISujeto);
+begin
+ FSujetos.Remove(Sujeto);
+end;
+
+destructor TObservador.Destroy;
+begin
+ FSujetos := NIL;
+ inherited;
+end;
+
+function TObservador.GetRefCount: Integer;
+begin
+ Result := FRefCount;
+end;
+
+class function TObservador.NewInstance: TObject;
+begin
+ Result := inherited NewInstance;
+ TObservador(Result).FRefCount := 1;
+end;
+
+function TObservador.QueryInterface(const IID: TGUID; out Obj): HResult;
+begin
+ if GetInterface(IID, Obj) then
+ Result := 0
+ else
+ Result := E_NOINTERFACE;
+end;
+
+end.
diff --git a/Source/Base/Utiles/uAppInfoUtils.pas b/Source/Base/Utiles/uAppInfoUtils.pas
new file mode 100644
index 0000000..d44909e
--- /dev/null
+++ b/Source/Base/Utiles/uAppInfoUtils.pas
@@ -0,0 +1,52 @@
+unit uAppInfoUtils;
+
+interface
+
+function GetAppName: String;
+function GetAppVersion: String;
+function GetAppFullName: String;
+
+implementation
+
+uses
+ Forms, SysUtils, JclFileUtils;
+
+function GetAppName: String;
+var
+ FAppInfo : TJclFileVersionInfo;
+begin
+ FAppInfo := TJclFileVersionInfo.Create(Application.ExeName);
+ try
+ Result := FAppInfo.ProductName;
+ finally
+ FreeANDNil(FAppInfo);
+ end;
+end;
+
+
+function GetAppVersion: String;
+var
+ FAppInfo : TJclFileVersionInfo;
+begin
+ FAppInfo := TJclFileVersionInfo.Create(Application.ExeName);
+ try
+ Result := FAppInfo.ProductVersion;
+ finally
+ FreeANDNil(FAppInfo);
+ end;
+end;
+
+function GetAppFullName: String;
+var
+ FAppInfo : TJclFileVersionInfo;
+begin
+ FAppInfo := TJclFileVersionInfo.Create(Application.ExeName);
+ try
+ Result := FAppInfo.ProductName + ' ' + FAppInfo.ProductVersion;
+ finally
+ FreeANDNil(FAppInfo);
+ end;
+end;
+
+
+end.
diff --git a/Source/Base/uDBSelectionList.pas b/Source/Base/Utiles/uDBSelectionList.pas
similarity index 100%
rename from Source/Base/uDBSelectionList.pas
rename to Source/Base/Utiles/uDBSelectionList.pas
diff --git a/Source/Base/uDataTableUtils.pas b/Source/Base/Utiles/uDataTableUtils.pas
similarity index 54%
rename from Source/Base/uDataTableUtils.pas
rename to Source/Base/Utiles/uDataTableUtils.pas
index 9bbb7b1..88bcbda 100644
--- a/Source/Base/uDataTableUtils.pas
+++ b/Source/Base/Utiles/uDataTableUtils.pas
@@ -3,22 +3,27 @@ unit uDataTableUtils;
interface
uses
- uDACDSDataTable, uDADataTable, uDAInterfaces, uDADelta;
+ uDACDSDataTable, uDADataTable, uDAInterfaces, uDADelta, uDAMemDataTable;
procedure CloneDataTable(const ASource : TDACDSDataTable;
var ATarget : TDACDSDataTable;
- RemoteUpdate: Boolean = True);
+ RemoteUpdate: Boolean = True); overload;
+
+function CloneDataTable(const ASource : TDAMemDataTable;
+ RemoteUpdate: Boolean = True): TDAMemDataTable; overload;
procedure CopyDataTable(ASource : IDADataset; ATarget : TDADataTable;
const OnlySelectedRows : Boolean = False);
procedure DeleteAllTable(const ADataTable : TDADataTable);
function DeltaValuesAreDifferent(const aDelta : IDADelta): boolean;
+function DataTableModified (const ADataTable : TDADataTable): Boolean;
+
implementation
uses
- uDAClasses, SysUtils, uDABINAdapter, uROTypes, uDBSelectionList, cxControls,
- Dialogs, Variants, uDADataStreamer;
+ DB, Classes, uDAClasses, SysUtils, uDABINAdapter, uROTypes, uDBSelectionList,
+ cxControls, Dialogs, Variants, uDADataStreamer;
{procedure EliminarNoSeleccionados(const ASource : IDADataset;
@@ -144,6 +149,80 @@ begin
end;
+function CloneDataTable(const ASource : TDAMemDataTable;
+ RemoteUpdate: Boolean = True): TDAMemDataTable;
+var
+ i : Integer;
+ ATarget : TDAMemDataTable;
+begin
+ if not Assigned(ASource) then
+ raise Exception.Create ('No se ha asignado la tabla de origen (CloneDataTable)');
+
+ ATarget := TDAMemDataTable.Create(NIL);
+ with ATarget do
+ begin
+
+ { ATENCIÓN !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ --------------------------------------------------------------------
+ DA5 tiene un fallo en el cual las tablas definidas como detalle no
+ tienen asociados los eventos internos before... y after... por lo
+ que los campos AutoInc no funcionan (no pone el -1, -2...).
+ La forma de arreglarlo es llamar a DisableEventHandlers/EnableEventHandlers
+ que realiza la asociación de los eventos.
+ }
+ ATarget.DisableEventHandlers; // <--- INDISPENSABLE!!!!!!!!!!!!!!!!!!!!
+
+
+ try
+ if not Assigned(ASource.RemoteDataAdapter) then
+ raise Exception.Create('No está asignado RemoteDataAdapter (' + ASource.Name + ')');
+
+ LogicalName := ASource.LogicalName;
+ CustomAttributes.Assign(ASource.CustomAttributes);
+ Fields.AssignFieldCollection(ASource.Fields); // o también ATarget.LoadSchema;
+ Params.AssignParamCollection(ASource.Params);
+
+ RemoteDataAdapter := ASource.RemoteDataAdapter;
+
+ Randomize;
+ Name := ASource.Name + '_' + IntToStr(Random(MAXINT));
+
+ BusinessRulesID := ASource.BusinessRulesID;
+
+ with MasterParamsMappings do
+ for i := 0 to ASource.MasterParamsMappings.Count - 1 do
+ Add(ASource.MasterParamsMappings.Strings[i]);
+
+ with MasterRequestMappings do
+ for i := 0 to ASource.MasterRequestMappings.Count - 1 do
+ Add(ASource.MasterRequestMappings.Strings[i]);
+
+ MasterMappingMode := ASource.MasterMappingMode;
+
+ MasterFields := ASource.MasterFields;
+ MasterOptions := ASource.MasterOptions;
+
+ DetailFields := ASource.DetailFields;
+ DetailOptions := ASource.DetailOptions;
+
+ RemoteUpdatesOptions := ASource.RemoteUpdatesOptions;
+ StreamingOptions := ASource.StreamingOptions;
+ RemoteFetchEnabled := ASource.RemoteFetchEnabled;
+ finally
+ ATarget.EnableEventHandlers; // <--- INDISPENSABLE!!!!!!!!!!!!!!!!!!!!!!!!!
+ end;
+ end;
+
+ if not RemoteUpdate then
+ begin
+ ATarget.LogChanges := False;
+ ATarget.RemoteFetchEnabled := False;
+ end;
+
+ Result := ATarget;
+end;
+
+
procedure CloneDataTable(const ASource : TDACDSDataTable;
var ATarget : TDACDSDataTable; RemoteUpdate: Boolean);
var
@@ -194,131 +273,36 @@ begin
end;
-end.
-
-procedure CloneDataTable(const ASource : TDACDSDataTable;
- var ATarget : TDACDSDataTable; RemoteUpdate: Boolean);
+function DataTableModified (const ADataTable : TDADataTable): Boolean;
var
- i : Integer;
+ bCambiado : Boolean;
+ dtDetails : TList;
+ i : integer;
begin
- with ATarget do
+ bCambiado := False;
+
+ if Assigned(ADataTable) and (ADataTable.Active) then
begin
- // ****** Inicio migración DA 5
+ bCambiado :=(ADataTable.State = dsEdit) or
+ (ADataTable.HasDelta and DeltaValuesAreDifferent(ADataTable.Delta));
- //RemoteService := ASource.GetRemoteService;
- //Adapter := ASource.GetAdapter;
- RemoteDataAdapter.Assign(ASource.RemoteDataAdapter);
- // ****** Fin migración DA 5
-
- BusinessRulesID := ASource.BusinessRulesID;
- Randomize;
- Name := ASource.Name + '_' + IntToStr(Random(MAXINT));
- LogicalName := ASource.LogicalName;
-
- Params.AssignParamCollection(ASource.Params);
-
- if Assigned(ASource.LocalSchema) then
- LocalSchema := ASource.LocalSchema
- else begin
- // ****** Inicio migración DA 5
- {
- with SchemaCall do
- begin
- MethodName := ASource.SchemaCall.MethodName;
- for i := 0 to ASource.SchemaCall.Params.Count - 1 do
- begin
- with Params.Add do begin
- Name := ASource.SchemaCall.Params[i].Name;
- ParamType := ASource.SchemaCall.Params[i].ParamType;
- DataType := ASource.SchemaCall.Params[i].DataType;
- Value := ASource.SchemaCall.Params[i].Value;
- UserClassName := ASource.SchemaCall.Params[i].UserClassName;
- end;
- end;
- end;
- }
- // ****** Fin migración DA 5
- ATarget.Fields.AssignFieldCollection(ASource.Fields); // o también ATarget.LoadSchema;
- end;
-
- // ****** Inicio migración DA 5
- {
- with DataUpdateCall do
+ if (not bCambiado) then
begin
- MethodName := ASource.DataUpdateCall.MethodName;
- for i := 0 to ASource.DataUpdateCall.Params.Count - 1 do
+ dtDetails := ADataTable.GetDetailDataTables;
+ for i := 0 to dtDetails.Count - 1 do
begin
- with Params.Add do begin
- Name := ASource.DataUpdateCall.Params[i].Name;
- ParamType := ASource.DataUpdateCall.Params[i].ParamType;
- DataType := ASource.DataUpdateCall.Params[i].DataType;
- Value := ASource.DataUpdateCall.Params[i].Value;
- UserClassName := ASource.DataUpdateCall.Params[i].UserClassName;
- end;
+ bCambiado := bCambiado or
+ ((TDADataTable(dtDetails.Items[i])).State in dsEditModes) or
+ ((TDADataTable(dtDetails.Items[i])).HasDelta and
+ DeltaValuesAreDifferent((TDADataTable(dtDetails.Items[i])).Delta));
+ if bCambiado then
+ Break;
end;
end;
-
- with ScriptCall do
- begin
- MethodName := ASource.ScriptCall.MethodName;
- for i := 0 to ASource.ScriptCall.Params.Count - 1 do
- begin
- with Params.Add do begin
- Name := ASource.ScriptCall.Params[i].Name;
- ParamType := ASource.ScriptCall.Params[i].ParamType;
- DataType := ASource.ScriptCall.Params[i].DataType;
- Value := ASource.ScriptCall.Params[i].Value;
- UserClassName := ASource.ScriptCall.Params[i].UserClassName;
- end;
- end;
- end;
-
- with DataRequestCall do
- begin
- MethodName := ASource.DataRequestCall.MethodName;
- for i := 0 to ASource.DataRequestCall.Params.Count - 1 do
- begin
- with Params.Add do begin
- begin
- Name := ASource.DataRequestCall.Params[i].Name;
- ParamType := ASource.DataRequestCall.Params[i].ParamType;
- DataType := ASource.DataRequestCall.Params[i].DataType;
- Value := ASource.DataRequestCall.Params[i].Value;
- UserClassName := ASource.DataRequestCall.Params[i].UserClassName;
- end;
- end;
- end;
- end;
- }
- // ****** Fin migración DA 5
-
- with MasterParamsMappings do
- for i := 0 to ASource.MasterParamsMappings.Count - 1 do
- Add(ASource.MasterParamsMappings.Strings[i]);
-
- with MasterRequestMappings do
- for i := 0 to ASource.MasterRequestMappings.Count - 1 do
- Add(ASource.MasterRequestMappings.Strings[i]);
-
- MasterMappingMode := ASource.MasterMappingMode;
-
- MasterFields := ASource.MasterFields;
- MasterOptions := ASource.MasterOptions;
-
- DetailFields := ASource.DetailFields;
- DetailOptions := ASource.DetailOptions;
-
- RemoteUpdatesOptions := ASource.RemoteUpdatesOptions;
- StreamingOptions := ASource.StreamingOptions;
- RemoteFetchEnabled := ASource.RemoteFetchEnabled;
- end;
-
- if not RemoteUpdate then
- begin
- ATarget.LogChanges := False;
- ATarget.RemoteFetchEnabled := False;
end;
+ Result := bCambiado;
end;
+end.
diff --git a/Source/ControlesBase/Cliente/uDateUtils.pas b/Source/Base/Utiles/uDateUtils.pas
similarity index 65%
rename from Source/ControlesBase/Cliente/uDateUtils.pas
rename to Source/Base/Utiles/uDateUtils.pas
index d46a72b..5d3c3e6 100644
--- a/Source/ControlesBase/Cliente/uDateUtils.pas
+++ b/Source/Base/Utiles/uDateUtils.pas
@@ -1,15 +1,13 @@
-{*******************************************************}
-{ }
-{ Administración de puntos de venta }
-{ }
-{ Copyright (C) 2006 Rodax Software S.L. }
-{ }
-{*******************************************************}
-
unit uDateUtils;
interface
+uses
+ SysUtils, Classes;
+
+function DarFechaPrimerDia(Date: TDateTime): TDateTime;
+function DarFechaUltimoDia(Date: TDateTime): TDateTime;
+function EsFechaVacia(AFecha : TDateTime): Boolean;
function NumberDayOfTheWeek(const ADay : String) : Word;
function NumberMonthOfTheYear(const AMonth : String) : Word;
@@ -18,6 +16,9 @@ implementation
uses
DateUtils;
+const
+ FECHA_NULA = -700000;
+
function NumberDayOfTheWeek(const ADay : String) : Word;
begin
if (ADay = 'Monday') or (ADay = 'Lunes') then
@@ -64,5 +65,29 @@ begin
Result := 12;
end;
+
+function EsFechaVacia(AFecha : TDateTime): Boolean;
+begin
+ Result := (AFecha = FECHA_NULA) or (AFecha = 0);
+end;
+
+function DarFechaPrimerDia(Date: TDateTime): TDateTime;
+var
+ Year, Month, Day: Word;
+begin
+ DecodeDate(Date, Year, Month, Day);
+ Result := EncodeDate(Year, Month, 1);
+end;
+
+function DarFechaUltimoDia(Date: TDateTime): TDateTime;
+var
+ Year, Month, Day: Word;
+begin
+ DecodeDate(Date, Year, Month, Day);
+ // (if Month < 12 then inc(Month)
+ // else begin Month := 1; inc(Year) end;
+ // Result := EncodeDate(Year, Month, 1) - 1;
+ Result := EncodeDate(Year, Month,
+ MonthDays[IsLeapYear(Year), Month]);
+end;
end.
-
\ No newline at end of file
diff --git a/Source/Base/Utiles/uDialogUtils.pas b/Source/Base/Utiles/uDialogUtils.pas
new file mode 100644
index 0000000..69b982b
--- /dev/null
+++ b/Source/Base/Utiles/uDialogUtils.pas
@@ -0,0 +1,287 @@
+unit uDialogUtils;
+
+interface
+
+uses
+ Windows, Controls, SysUtils;
+
+type
+ TDlgButton = (TDlgButton_SI, TDlgButton_NO, TDlgButton_CANCELAR,
+ TDlgButton_ACEPTAR, TDlgButton_OK, TDlgButton_CERRAR);
+ TDlgButtonSet = set of TDlgButton;
+
+
+//For example:
+//1. to display the "OpenDialog" for text files
+//
+// s := 'aaa.txt';
+// if OpenFileDialog(Application.Handle, 'txt', 'Text Files|*.txt', 'c:\', 'Select text file', s) then
+// ShowMessage(s + ' file was selected for open')
+//
+//2. to display the "Save dialog":
+//
+// s := 'data.dbf';
+// if SaveFileDialog(Application.Handle, 'dbf', 'dBase tables|*.dbf|All files|*.*', 'c:\', 'Select table', s) then
+// ShowMessage(s + ' table was selected for save')
+
+function OpenFileDialog(ParentHandle: THandle; const DefExt, Filter, InitialDir, Title: string; var FileName: string): Boolean;
+function SaveFileDialog(ParentHandle: THandle; const DefExt, Filter, InitialDir, Title: string; var FileName: string): Boolean;
+
+
+
+
+procedure ShowInfoMessage(const AMessage : String); overload;
+procedure ShowInfoMessage(const AHeader : String; const AMessage : String); overload;
+procedure ShowWarningMessage(const AMessage : String); overload;
+procedure ShowWarningMessage(const AHeader : String; const AMessage : String); overload;
+procedure ShowErrorMessage(const AHeader : String; const AMessage : String); overload;
+procedure ShowErrorMessage(const AHeader : String; const AMessage : String; AException: Exception); overload;
+
+function ShowConfirmMessage(const AHeader : String;
+ const AMessage : String) : TModalResult; overload;
+
+function ShowConfirmMessage(const ATitle : String;
+ const AHeader : String;
+ const AMessage : String;
+ const AButtonSet: TDlgButtonSet) : TModalResult; overload;
+
+implementation
+
+uses
+ Forms,
+ CommDlg,
+ JSDialog,
+ JSDialogs,
+ Classes,
+ StrUtils;
+
+const
+ sBtnSi = '&Si';
+ sBtnNo = '&No';
+ sBtnCancelar = '&Cancelar';
+ sBtnAceptar = '&Aceptar';
+ sBtnOK = '&OK';
+ sBtnCerrar = '&Cerrar';
+
+
+function CharReplace(const Source: string; oldChar, newChar: Char): string;
+var
+ i: Integer;
+begin
+ Result := Source;
+ for i := 1 to Length(Result) do
+ if Result[i] = oldChar then
+ Result[i] := newChar
+end;
+
+function OpenSaveFileDialog(ParentHandle: THandle; const DefExt, Filter, InitialDir, Title: string; var FileName: string;
+ MustExist, OverwritePrompt, NoChangeDir, DoOpen: Boolean): Boolean;
+var
+ ofn: TOpenFileName;
+ szFile: array[0..MAX_PATH] of Char;
+begin
+ Result := False;
+ FillChar(ofn, SizeOf(TOpenFileName), 0);
+ FillChar(szFile, SizeOf(szFile), 0);
+ with ofn do
+ begin
+ lStructSize := SizeOf(TOpenFileName);
+ hwndOwner := ParentHandle;
+ lpstrFile := szFile;
+ nMaxFile := SizeOf(szFile);
+ if (Title <> '') then
+ lpstrTitle := PChar(Title);
+ if (InitialDir <> '') then
+ lpstrInitialDir := PChar(InitialDir);
+ StrPCopy(lpstrFile, FileName);
+ lpstrFilter := PChar(ReplaceStr(Filter, '|', #0)+#0#0);
+ if DefExt <> '' then
+ lpstrDefExt := PChar(DefExt);
+ end;
+
+ if MustExist then
+ ofn.Flags := ofn.Flags or OFN_FILEMUSTEXIST;
+
+ if OverwritePrompt then
+ ofn.Flags := ofn.Flags or OFN_OVERWRITEPROMPT;
+
+ if NoChangeDir then
+ ofn.Flags := ofn.Flags or OFN_NOCHANGEDIR;
+
+ if DoOpen then
+ begin
+ if GetOpenFileName(ofn) then
+ begin
+ Result := True;
+ FileName := StrPas(szFile);
+ end;
+ end
+ else
+ begin
+ if GetSaveFileName(ofn) then
+ begin
+ Result := True;
+ FileName := StrPas(szFile);
+ end;
+ end
+end;
+
+function OpenFileDialog(ParentHandle: THandle; const DefExt, Filter, InitialDir, Title: string; var FileName: string): Boolean;
+begin
+ Result := OpenSaveFileDialog(ParentHandle, DefExt, Filter, InitialDir, Title, FileName, True, False, False, True);
+end;
+
+function SaveFileDialog(ParentHandle: THandle; const DefExt, Filter, InitialDir, Title: string; var FileName: string): Boolean;
+begin
+ Result := OpenSaveFileDialog(ParentHandle, DefExt, Filter, InitialDir, Title, FileName, False, True, True, False);
+end;
+
+
+function CreateTaskDialog(const ATitle: String;
+ const AInstruction: String;
+ const AMessage: String;
+ const AIcon: TTaskDialogIcon): TJSDialog;
+var
+ ADialog : TJSDialog;
+begin
+ ADialog := TJSDialog.Create(NIL);
+ with ADialog do
+ begin
+ Position := dpScreenCenter;
+ ButtonBar.Buttons := [];
+ DialogOptions := [doModal, doTopMost];
+
+ Title := ATitle;
+ Instruction.Text := AInstruction;
+ Content.Text := AMessage;
+ MainIcon := AIcon;
+ end;
+ Result := ADialog;
+end;
+
+procedure CreateCustomButtons(const AButtonSet: TDlgButtonSet;
+ ACustomButtons : TJSCustomButtons);
+
+ function CreateButton(const ACaption: String; const AModalResult: TModalResult): TJSCustomButtonItem;
+ begin
+ Result := ACustomButtons.Add;
+ Result.Caption := ACaption;
+ Result.ModalResult := AModalResult;
+ end;
+
+begin
+ with ACustomButtons do
+ begin
+ Clear;
+
+ if TDlgButton_SI in AButtonSet then
+ CreateButton(sBtnSi, mrYes);
+
+ if TDlgButton_NO in AButtonSet then
+ CreateButton(sBtnNo, mrNo);
+
+ if TDlgButton_CANCELAR in AButtonSet then
+ CreateButton(sBtnCancelar, mrCancel);
+
+ if TDlgButton_ACEPTAR in AButtonSet then
+ CreateButton(sBtnAceptar, mrOk);
+
+ if TDlgButton_OK in AButtonSet then
+ CreateButton(sBtnOK, mrOk);
+
+ if TDlgButton_CERRAR in AButtonSet then
+ CreateButton(sBtnCerrar, mrNone);
+ end;
+end;
+
+procedure ShowInfoMessage(const AHeader : String; const AMessage : String); overload;
+var
+ ADialog : TJSDialog;
+begin
+ ADialog := CreateTaskDialog('Información', AHeader, AMessage, tdiInformation);
+ try
+ CreateCustomButtons([TDlgButton_CERRAR], ADialog.CustomButtons);
+ ADialog.Execute;
+ finally
+ FreeAndNIL(ADialog);
+ end;
+end;
+
+procedure ShowInfoMessage(const AMessage : String);
+begin
+ ShowInfoMessage('', AMessage);
+end;
+
+procedure ShowWarningMessage(const AHeader : String; const AMessage : String); overload;
+var
+ ADialog : TJSDialog;
+begin
+ ADialog := CreateTaskDialog('¡Atención!', AHeader, AMessage, tdiWarning);
+ try
+ CreateCustomButtons([TDlgButton_CERRAR], ADialog.CustomButtons);
+ ADialog.Execute;
+ finally
+ FreeAndNIL(ADialog);
+ end;
+end;
+
+procedure ShowWarningMessage(const AMessage : String);
+begin
+ ShowWarningMessage('', AMessage);
+end;
+
+procedure ShowErrorMessage(const AHeader : String; const AMessage : String);
+var
+ ADialog : TJSDialog;
+begin
+ ADialog := CreateTaskDialog(Application.Title, AHeader, AMessage, tdiError);
+ try
+ CreateCustomButtons([TDlgButton_CERRAR], ADialog.CustomButtons);
+ ADialog.Execute;
+ finally
+ FreeAndNIL(ADialog);
+ end;
+end;
+
+procedure ShowErrorMessage(const AHeader : String; const AMessage : String; AException: Exception);
+var
+ ADialog : TJSDialog;
+begin
+ ADialog := CreateTaskDialog(Application.Title, AHeader, AMessage, tdiError);
+ try
+ CreateCustomButtons([TDlgButton_CERRAR], ADialog.CustomButtons);
+ ADialog.Expando.Lines.Text := #13#13 + AException.Message;
+ ADialog.Expando.ShowText := 'Mostrar información sobre el error';
+ ADialog.Expando.HideText := 'No mostrar información sobre el error';
+ ADialog.Expando.Visible := True;
+ ADialog.Execute;
+ finally
+ FreeAndNIL(ADialog);
+ end;
+end;
+
+function ShowConfirmMessage(const AHeader : String;
+ const AMessage : String) : TModalResult;
+begin
+ Result := ShowConfirmMessage(Application.Title, AHeader,
+ AMessage, [TDlgButton_SI, TDlgButton_NO]);
+end;
+
+function ShowConfirmMessage(const ATitle : String;
+ const AHeader : String;
+ const AMessage : String;
+ const AButtonSet: TDlgButtonSet) : TModalResult;
+var
+ ADialog : TJSDialog;
+begin
+ ADialog := CreateTaskDialog(Application.Title, AHeader, AMessage, tdiConfirmation);
+ try
+ CreateCustomButtons(AButtonSet, ADialog.CustomButtons);
+ Result := ADialog.Execute;
+ finally
+ FreeAndNIL(ADialog);
+ end;
+end;
+
+end.
+
diff --git a/Source/Base/uEditorUtils.pas b/Source/Base/Utiles/uEditorUtils.pas
similarity index 100%
rename from Source/Base/uEditorUtils.pas
rename to Source/Base/Utiles/uEditorUtils.pas
diff --git a/Source/Base/uGridUtils.pas b/Source/Base/Utiles/uGridUtils.pas
similarity index 100%
rename from Source/Base/uGridUtils.pas
rename to Source/Base/Utiles/uGridUtils.pas
diff --git a/Source/Base/uIntegerList.pas b/Source/Base/Utiles/uIntegerList.pas
similarity index 100%
rename from Source/Base/uIntegerList.pas
rename to Source/Base/Utiles/uIntegerList.pas
diff --git a/Source/Base/uSysFunc.pas b/Source/Base/Utiles/uSysFunc.pas
similarity index 100%
rename from Source/Base/uSysFunc.pas
rename to Source/Base/Utiles/uSysFunc.pas
diff --git a/Source/Base/uConfigurarConexion.dfm b/Source/Base/uConfigurarConexion.dfm
index 5a266e8..06fb34a 100644
--- a/Source/Base/uConfigurarConexion.dfm
+++ b/Source/Base/uConfigurarConexion.dfm
@@ -2,7 +2,6 @@ object fConfigurarConexion: TfConfigurarConexion
Left = 663
Top = 468
ActiveControl = edtServer
- AutoScroll = False
Caption = 'Configuraci'#243'n de la conexi'#243'n'
ClientHeight = 149
ClientWidth = 392
@@ -90,12 +89,10 @@ object fConfigurarConexion: TfConfigurarConexion
TabOrder = 3
end
object HTTPChannel: TROWinInetHTTPChannel
- ServerLocators = <>
- DispatchOptions = []
- ProbeServers = False
- ProbeFrequency = 60000
UserAgent = 'AdminPV'
TargetURL = 'http://localhost:8099/BIN'
+ ServerLocators = <>
+ DispatchOptions = []
Left = 120
Top = 112
end
@@ -104,9 +101,9 @@ object fConfigurarConexion: TfConfigurarConexion
Top = 112
end
object CoService: TRORemoteService
- ServiceName = 'srvLogin'
Message = ROBinMessage
Channel = HTTPChannel
+ ServiceName = 'srvLogin'
Left = 184
Top = 112
end
diff --git a/Source/Base/uConfigurarConexion.pas b/Source/Base/uConfigurarConexion.pas
index 035d05a..116ff7c 100644
--- a/Source/Base/uConfigurarConexion.pas
+++ b/Source/Base/uConfigurarConexion.pas
@@ -36,7 +36,7 @@ var
implementation
uses
- StrUtils, JclStrings, uDataModuleBase, VARELA_Intf;
+ StrUtils, JclStrings, uDMBase, VARELA_Intf;
{$R *.dfm}
diff --git a/Source/Base/uDMBase.dfm b/Source/Base/uDMBase.dfm
new file mode 100644
index 0000000..5f633ba
--- /dev/null
+++ b/Source/Base/uDMBase.dfm
@@ -0,0 +1,1660 @@
+object dmBase: TdmBase
+ OldCreateOrder = True
+ OnCreate = DAClientDataModuleCreate
+ Height = 352
+ Width = 518
+ object SmallImages: TPngImageList
+ PngImages = <
+ item
+ PngImage.Data = {
+ 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
+ 610000000970485973000017120000171201679FD252000002224944415478DA
+ 95935D48936114C77FCB36584A6064161515DEA441108B240293E8A682246805
+ DEA45020F40196505D081242DE94512B8C20169937056914D52E726B6083B114
+ D44CD3D51A216BB6656B5FEF677B5FF31D23033DF070CE03CFFFF73F1CCE6362
+ 29D1806AD44E4C5A32F5F58FAA8BD5D73DD8465757034D4D4EFA4E8C62000ED7
+ 56E997647490DFE131BD2ED9584971D98EB9478D2603D279B39EE6733DC6DD00
+ 68E2EF7E07E95F2291688C48629ABDC71DACABD8AD0334E7B420104D24F4A3D5
+ DDD707E60087F66C2234D0CECF2F41643987556566676799C9C4387AD18FF964
+ 91E178EA522DF73ADC851D1CA85ECD27D77948995861B552844C2A9962303441
+ DD051FA22473E5095C735B3972DAC6D3DB016EED7BC9FD47CFE601E57CF3B661
+ C966D1E62C880299549A696915B6639D4892A243D6B6AC349C0B00DA0C22EF7B
+ 484EBDCA015424512491125036D751B1CBAE8BB5330F12459937EF860A01DEA0
+ 8BA0FB0E5B154BAE832C810CACDF594F4DD5C17FC45AF6FA87F3800D95022DFD
+ ADC47E84682CDF8F222A3C9CF1303915E6C3E5495DDC7AE379C14E546F5F9307
+ F8E4C7BC187F4BA6344E49D24C6E8A24AD12E65809A1895102CD6386B3F8B793
+ C0F0C73CC0196927188E2297651096A7D096D4922D6659DCC2E7AF43F8CE8C70
+ F5AEEBFF1D9CF5D889C7230BAE6F696939BDF6D7BAABACA87A567279647C320F
+ A8B16DA1BBD7B3A47FA5850168EB702C596C6CA2AA2EFA332E187F0080F1503E
+ 182A98A90000000049454E44AE426082}
+ Name = 'PngImage0'
+ Background = clWindow
+ end
+ item
+ PngImage.Data = {
+ 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
+ 610000000774494D45000000000000000973942E000000097048597300001712
+ 0000171201679FD252000001724944415478DA6364A0103062135CB1E2C26E20
+ E5824F63448401235603809AA381D412374F5506413E2EB0D89FBFFF187EFFF9
+ 0BC62F3EFD6728A999C0B0795E15A60150CD1540CD3A7B4FDCC5B0D5D94299E1
+ CAD3BF0CDD3D53F280064CC666C06EA066176C36FF05B25F7F6544B11DC50098
+ D3C3C3F519D6ECBA8C61BBBDA922C38D17FF41B6C384B6020DF261846AFE0FA4
+ AE809C0EB21DDD6610FFCF9F7F0CE91553194CF49518A4558D1836AE59037609
+ 23C8E6AB4F2E2C2136DAE4B5AC186E9CD9C570F3C1278801B53D0BFE3715C7E3
+ D4F0E5C75F86CFDF8118487FF9F18F61C3BA350C12CA260C3B366F4218408CCD
+ 17AE3D03D3065A520CEC42AA0C278F1CC4EF02749BBF82F0CFBF0CC7F66E64F8
+ C92AC970FDE259DC06A06BAE3DEFC390ABB49EE1FEB5530CCF9F3F6778FA919D
+ E1F5D3FBD80DC066F3AC743D8680EEB30CAFEE9E61D8BEF72C4CA90CD080A770
+ 03A62FDB45542C400D006B062724DFA4366920FD84D86844D68C9212C905001F
+ 16FA1194E3DBC30000000049454E44AE426082}
+ Name = 'PngImage1'
+ Background = clWindow
+ end
+ item
+ PngImage.Data = {
+ 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
+ 610000000970485973000017120000171201679FD2520000016A4944415478DA
+ 63FCFFFF3F03082CDD7212C22000627C2D18616C905E466403A27DCCF16A06AA
+ 61E89DB290E1FCCEE98C241BF0EFDF3F86E5DB4E33488B093314D5F5810D21DA
+ 0090E6DF7FFE31ACD97596C1C9429BE1E6BD176043CEED98C688D3804D0F0E30
+ F45E6A02B37779EC62E05CC0C6B058EA38D80B3080D30090E6805D4E182E7911
+ FC91E1C4E5C70C8F1E3F6298B774137603609AFFA4FC013B1B64738BB13743CD
+ D9AD0C8FFDDF81C5B6EC3B85DB00A6594C289A91C13DEF3740F1BF0C3B0F9DC5
+ 6D0048C1EFDF7F21F49F7F50FA2FC31F181F2877E0E445EC068479988015F02C
+ E640B1F98EE72BB066CDDD120C676D1E311C3D7B05BB0181CE8660DB049773C3
+ FD8DAC3957BB80219A379FE1D4C5EBD80DF0B1D7032B165BCD8B110330CD200B
+ CE5FBD85DD00776B1DB002E9F502609B13CF8781E50C840DE09A41165CB97907
+ BB014EE69A1801060B44986610C06980ADB11AC3A63D2789C994D80D404EA6C4
+ 0090010087546EF0ACB0C7920000000049454E44AE426082}
+ Name = 'PngImage2'
+ Background = clWindow
+ end
+ item
+ PngImage.Data = {
+ 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
+ 61000000097048597300000AEB00000AEB01828B0D5A000002854944415478DA
+ A5935D48536118C7FFAFDB8CCD557E7F34B33167F9119617A91596495D781304
+ 451021A651362821B1ABA49B6EA4460961D88542055D84DD6545415992174994
+ 9625CC8F9C329D9B5F3BE9CED9D9797BCEA1C932A3A0079EC3CBE13CBFE7FF7F
+ 9FF330CE39FE2798FAB80BA4E61559EB2551E67B07279AE8D51FA98F2CC99546
+ 031A3D6E5FF329993F631D80B52227A6D7929F9BAEA459D1D73BE8DC3330D6B8
+ 1AD206641414DA5A6224E1E8ECA47779660955D532EF642F1371BD74331A14FA
+ 9C27A4439F5D88777DAE1B65FD230D11485786B9363D65FD35C1EB4B9817427E
+ 9F80C335C05BD53E23B2A934132FB23662B71406C2B14698F38AF0E9EB9473E8
+ E3C8655BD686D6F858A5DA3F27B04511E37E0195B5C0A00AD6003FE5259758F0
+ 3AD1843C15125218CCB6AD707FF34EAC93973217041154ECF608D8770E188BD8
+ 5A01A8A1DEC5F60CF4980CB0A890E8A47AFFF477EC3F037C8EBE975F006ADC37
+ 60A7351E3D061DE222C522A5270047AD82DBAB27B21AC09EDA373525E9A52BCB
+ 7E5F4CB4822509BE80848AB3C0C09A806380EE7CA1BDC55EB4CDE17AF2984932
+ 75A60CCA088739742A84CE1E49C1010730F41BA03B27CD595C517CB1FFF92B04
+ E6035AF142101DCB12DA743AB413243FA468331D0F01E51780D1154057AAF148
+ D92E7BE794778E8DB92634C901116FA6451CAA27214EC06802AE5227AA839ED2
+ 45A0729AC6A406182DD9329C10A7B7F57D18D63A93DF99D92076905F4FB4DF56
+ A08C20ED9476027CD1209C7BD9FBDC947BC1C0E2C9596A4B003E27E2F8E9301E
+ AEB507B700334968A6631D019C759C5F627780822413BA194312CDFB41958C13
+ 7FDB4052739000430ECEDD913F313B568F9B8B326AC8F7CCBFAEB27A073F0058
+ 5538F0EAB25B380000000049454E44AE426082}
+ Name = 'PngImage3'
+ Background = clWindow
+ end
+ item
+ PngImage.Data = {
+ 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
+ 610000000970485973000017120000171201679FD2520000011F4944415478DA
+ 63FCFFFF3F03258091620390394975ABC1A6BD79FB8561D3D4444642E220CB31
+ 0C985113C8A0E6D6C4F0E040132321711403408A40367CFCF28DE1E1C3970C7A
+ DA8A60DB708963350064CBF6938F18966C3EC770FAD425B06DB8C409BA000440
+ B68908F330A08B631800D23CB73184E1D9CB4F0C775EFD6598B2641FD8A68208
+ 2F864BCF1E33A0CB71BF7AC2B0604101380619571EBDFB7FE7CE730CD9518E60
+ D3F79CB8C770E6DA23B0013017609373501062983F3F9F111E4820F0F8C52730
+ FDFEED5B30CDC2FC91C1CEDA860197FCFDFD8D8CF040DA77EE39C395DBAF182E
+ DF7DC370F0C051ACD188AE66901A70F2F27D94B8C666004C0DDC801F3F7F323C
+ 7DF191E1D78F9F0CCF5F7E40896B9801D8D4800DA0343702001BEF6EF0E3CC7C
+ BD0000000049454E44AE426082}
+ Name = 'PngImage4'
+ Background = clWindow
+ end
+ item
+ PngImage.Data = {
+ 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
+ 610000000970485973000017120000171201679FD252000002234944415478DA
+ A5934F4814511CC7BF6BBAB0AD97225B2A2B4B88ECB014861241ED2190FE9017
+ 2D15843A74E8E0A14D3282608935920E092D7A10A44C25A843497FEDA0EB422D
+ 2DE6A2F647ADA5C542A6DD76DB6CC79979F3DE34F3CA99C4BAB40F1EEF0DEF7D
+ 3FDFEFFC783F9BA669C865D8EE0FBDCE89C001473D3BF8473631861FB36FF9BE
+ 7063199C45BBCC8B4C4FAAAA0C44A5E6ACAA3F67010CF19748000BDF0984440A
+ C2FC1CF61F0F605DE91EA894E17CAFB2C4B9246F18DD7D03BF0087F76E46FCB9
+ 1FDF3EC640A97EAA5164321924A5146A5A22A6A391C0E971724097F7B1053858
+ B90633835E40B461A5C38115A010B322C6E2D3A83E1BE6E24B7781D676070A1A
+ 9A40FAAFA3270A74569D5E04B8F039E4835D96757740210A24710173EA6A941F
+ BBC69D676E3BF169EB3892E37DC86B6EE3294C805103E1553FB21F9EE800BD58
+ 84605E54C04AAA515A51CBC5EE230108D38F7073A402EB7D3EC83D7FFC820108
+ C506111BEEC07666D713C81895800DBB1BB0E94D9D2936668DBF180F9E85118A
+ 4C5880E23205CD431791FA1AC749D70130C2702B1944A73DBA4CECA96BE5F12B
+ DD6B2D4098DEC1C3A91148ABD228CC1640AF223A94977F7526BFDFC2E8C43B0B
+ 7043F023369B002D92A0E48BF0CA67B09334C2B5EDD032E7C5B1244153B016E9
+ B4601E5E75B7E344633DA2DDF95C3CF0F40577A54CE32BD3D7C9A9F716605FF9
+ 16F4DE0B9A80B60BA7CC7DCBE5AE7FF68109F05D09FC7F33E5DACE3F0109DB53
+ BED36F80890000000049454E44AE426082}
+ Name = 'PngImage5'
+ Background = clWindow
+ end>
+ PngOptions = [pngBlendOnDisabled, pngGrayscaleOnDisabled]
+ Left = 24
+ Top = 16
+ Bitmap = {}
+ end
+ object TBXSwitcher: TTBXSwitcher
+ Theme = 'Default'
+ Left = 24
+ Top = 80
+ end
+ object StyleManager: TJvNavPaneStyleManager
+ Colors.ButtonColorFrom = clWhite
+ Colors.ButtonColorTo = 12435133
+ Colors.ButtonHotColorFrom = 13009540
+ Colors.ButtonHotColorTo = 13009540
+ Colors.ButtonSelectedColorFrom = 14602190
+ Colors.ButtonSelectedColorTo = 14602190
+ Colors.SplitterColorFrom = 13026246
+ Colors.SplitterColorTo = 9211532
+ Colors.DividerColorFrom = 15725551
+ Colors.DividerColorTo = 13026246
+ Colors.HeaderColorFrom = 8684164
+ Colors.HeaderColorTo = 8684164
+ Colors.FrameColor = 8684676
+ Colors.ToolPanelHeaderColorFrom = clWhite
+ Colors.ToolPanelHeaderColorTo = 12435133
+ Fonts.NavPanelFont.Charset = DEFAULT_CHARSET
+ Fonts.NavPanelFont.Color = clWindowText
+ Fonts.NavPanelFont.Height = -13
+ Fonts.NavPanelFont.Name = 'Tahoma'
+ Fonts.NavPanelFont.Style = []
+ Fonts.NavPanelHotTrackFont.Charset = DEFAULT_CHARSET
+ Fonts.NavPanelHotTrackFont.Color = clWindow
+ Fonts.NavPanelHotTrackFont.Height = -13
+ Fonts.NavPanelHotTrackFont.Name = 'Tahoma'
+ Fonts.NavPanelHotTrackFont.Style = []
+ Fonts.DividerFont.Charset = DEFAULT_CHARSET
+ Fonts.DividerFont.Color = clWindowText
+ Fonts.DividerFont.Height = -11
+ Fonts.DividerFont.Name = 'Tahoma'
+ Fonts.DividerFont.Style = []
+ Fonts.HeaderFont.Charset = DEFAULT_CHARSET
+ Fonts.HeaderFont.Color = clWindow
+ Fonts.HeaderFont.Height = -16
+ Fonts.HeaderFont.Name = 'Arial'
+ Fonts.HeaderFont.Style = [fsBold]
+ Theme = nptCustom
+ Left = 104
+ Top = 80
+ end
+ object ROChannel: TROWinInetHTTPChannel
+ OnFailure = ROChannelFailure
+ OnException = ROChannelFailure
+ UserAgent = 'RemObjects SDK'
+ TargetURL = 'http://localhost:8099/bin'
+ Login.Username = 'zvg'
+ Login.Password = 'zeus'
+ KeepConnection = True
+ OnProgress = ROChannelProgress
+ ServerLocators = <>
+ DispatchOptions = []
+ Left = 330
+ Top = 24
+ end
+ object cxIntl: TcxIntl
+ Connected = True
+ cxLibrary.CantCreateRegistryKey = 'No se puede crear la llave de registro : \%s'
+ PageControl2.ImageListIndexError = 'El '#237'ndice (%d) deber'#225' estar entre 0 y %d'
+ PageControl2.NoBaseImages = 'BaseImages no est'#225' asignado'
+ PageControl2.NoRegisteredStyles = 'No hay estilos registrados'
+ PageControl2.PageIndexError = '%d es un valor inv'#225'lido para PageIndex, debe estar entre 0 y %d'
+ PageControl2.PainterClassError = 'La clase PCPainter es nula'
+ PageControl2.StandardStyleError = '%s es un estilo est'#225'ndar no soportado'
+ PageControl2.StyleNameError = '%s es un nombre de estilo no registrado'
+ PageControl2.TabCountEqualsZero = 'Tabs.Count = 0'
+ PageControl2.TabIndexError = 'El '#237'ndice de la pesta'#241'a (%d) est'#225' fuera de l'#237'mites'
+ PageControl2.TabVisibleIndexOutsOfBounds = 'Propiedad TabVisibleIndex (%d) deber'#225' estar entre 0 y %d'
+ PageControl2.VisibleTabListEmpty = 'No hay pesta'#241'as visibles'
+ QuantumGrid5.GridRecursiveLevels = 'No se pueden crear niveles recursivos'
+ QuantumGrid5.GridDeletingConfirmationCaption = 'Confirmar'
+ QuantumGrid5.GridDeletingFocusedConfirmationText = #191'Borrar registro?'
+ QuantumGrid5.GridDeletingSelectedConfirmationText = #191'Borrar todos los registros seleccionados?'
+ QuantumGrid5.GridNoDataInfoText = ''
+ QuantumGrid5.GridNewItemRowInfoText = 'Haga click aqu'#237' para agregar una nueva l'#237'nea'
+ QuantumGrid5.GridFilterIsEmpty = ''
+ QuantumGrid5.GridCustomizationFormCaption = 'Personalizaci'#243'n'
+ QuantumGrid5.GridCustomizationFormColumnsPageCaption = 'Columnas'
+ QuantumGrid5.GridGroupByBoxCaption = 'Arrastre una columna aqu'#237' para agrupar por dicha columna'
+ QuantumGrid5.GridFilterCustomizeButtonCaption = 'Personalizar...'
+ QuantumGrid5.GridColumnsQuickCustomizationHint = 'Haga click aqu'#237' para seleccionar las columas visibles'
+ QuantumGrid5.GridCustomizationFormBandsPageCaption = 'Bandas'
+ QuantumGrid5.GridBandsQuickCustomizationHint = 'Haga click aqu'#237' para seleccionar las bandas visibles'
+ QuantumGrid5.GridCustomizationFormRowsPageCaption = 'Rows'
+ QuantumGrid5.GridConverterIntermediaryMissing = 'Omiti'#243' un componente intermediario!'
+ QuantumGrid5.GridConverterNotExistGrid = 'cxGrid no existe'
+ QuantumGrid5.GridConverterNotExistComponent = 'El componente no existe'
+ QuantumGrid5.ImportErrorCaption = 'Error al importar'
+ QuantumGrid5.NotExistGridView = 'No existe la vista del grid'
+ QuantumGrid5.NotExistGridLevel = 'No existe un nivel de grid activo'
+ QuantumGrid5.CantCreateExportOutputFile = 'No se puede crear el archivo de exportaci'#243'n'
+ QuantumGrid5.EditRepositoryExtLookupComboBoxItem =
+ 'ExtLookupComboBox|Representa un ultra avanzado control de busque' +
+ 'da (lookup) usando el QuantumGrid como su control de despliegue'
+ Navigator.NavigatorHint_First = 'Primer registro'
+ Navigator.NavigatorHint_Prior = 'Registro anterior'
+ Navigator.NavigatorHint_PriorPage = 'P'#225'gina anterior'
+ Navigator.NavigatorHint_Next = 'Siguiente registro'
+ Navigator.NavigatorHint_NextPage = 'Siguiente p'#225'gina'
+ Navigator.NavigatorHint_Last = #218'ltimo registro'
+ Navigator.NavigatorHint_Insert = 'Insertar registro'
+ Navigator.NavigatorHint_Delete = 'Borrar registro'
+ Navigator.NavigatorHint_Edit = 'Editar registro'
+ Navigator.NavigatorHint_Post = 'Grabar edici'#243'n'
+ Navigator.NavigatorHint_Cancel = 'Cancelar edici'#243'n'
+ Navigator.NavigatorHint_Refresh = 'Actualizar datos'
+ Navigator.NavigatorHint_SaveBookmark = 'Guardar Marca'
+ Navigator.NavigatorHint_GotoBookmark = 'Volver a Marca'
+ Navigator.NavigatorHint_Filter = 'Filtrar datos'
+ Navigator.Navigator_DeleteRecordQuestion = #191'Desea borrar este el registro?'
+ Editors5.EditDateConvertError = 'El valor no se puede convertir a fecha'
+ Editors5.EditInvalidRepositoryItem = 'Elemento de repositorio no v'#225'lido'
+ Editors5.EditNumericValueConvertError = 'No se puede convertir a valor num'#233'rico'
+ Editors5.EditPopupCircularReferencingError = 'Referencia circular no permitida'
+ Editors5.EditPostError = 'Ocurri'#243' un error durante el grabado del valor de edici'#243'n'
+ Editors5.EditTimeConvertError = 'No se puede convertir a valor de tiempo'
+ Editors5.EditValidateErrorText = 'Valor inv'#225'lido. Use la tecla de escape para cancelar cambios'
+ Editors5.EditValueOutOfBounds = 'Valor fuera de l'#237'mites'
+ Editors5.EditCheckBoxChecked = 'True'
+ Editors5.EditCheckBoxUnchecked = 'False'
+ Editors5.TextTrue = 'True'
+ Editors5.TextFalse = 'False'
+ Editors5.BlobButtonOK = '&Aceptar'
+ Editors5.BlobButtonCancel = '&Cancelar'
+ Editors5.BlobButtonClose = '&Cerrar'
+ Editors5.BlobMemo = '(MEMO)'
+ Editors5.BlobMemoEmpty = '(memo)'
+ Editors5.BlobPicture = '(IM'#193'GEN)'
+ Editors5.BlobPictureEmpty = '(im'#225'gen)'
+ Editors5.MenuItemCaptionCut = 'Cor&tar'
+ Editors5.MenuItemCaptionCopy = '&Copiar'
+ Editors5.MenuItemCaptionPaste = '&Pegar'
+ Editors5.MenuItemCaptionDelete = '&Borrar'
+ Editors5.MenuItemCaptionLoad = '&Leer...'
+ Editors5.MenuItemCaptionSave = 'Guardar &Como...'
+ Editors5.DatePopupClear = 'Limpiar'
+ Editors5.DatePopupNow = 'Ahora'
+ Editors5.DatePopupOK = 'Aceptar'
+ Editors5.DatePopupToday = 'Hoy'
+ Editors5.DateError = 'Fecha inv'#225'lida'
+ Editors5.DateToday = 'hoy'
+ Editors5.DateYesterday = 'ayer'
+ Editors5.DateTomorrow = 'ma'#241'ana'
+ Editors5.DateSunday = 'Domingo'
+ Editors5.DateMonday = 'Lunes'
+ Editors5.DateTuesday = 'Martes'
+ Editors5.DateWednesday = 'Mi'#233'rcoles'
+ Editors5.DateThursday = 'Jueves'
+ Editors5.DateFriday = 'Viernes'
+ Editors5.DateSaturday = 'S'#225'bado'
+ Editors5.DateFirst = 'Primero'
+ Editors5.DateSecond = 'segundo'
+ Editors5.DateThird = 'tercero'
+ Editors5.DateFourth = 'Cuarto'
+ Editors5.DateFifth = 'Quinto'
+ Editors5.DateSixth = 'sexto'
+ Editors5.DateSeventh = 's'#233'ptimo'
+ Editors5.DateBOM = 'bom'
+ Editors5.DateEOM = 'eom'
+ Editors5.DateNow = 'ahora'
+ Editors5.CalcError = 'Error'
+ Editors5.HyperLinkPrefix = 'http://'
+ Editors5.HyperLinkDoubleSlash = '//'
+ Editors5.EditRepositoryBlobItem = 'BlobEdit|Representa el editor de BLOB'
+ Editors5.EditRepositoryButtonItem =
+ 'ButtonEdit|Representa un control de edici'#243'n con controles incrus' +
+ 'tados'
+ Editors5.EditRepositoryCalcItem =
+ 'CalcEdit|Representa un control de edici'#243'n con una ventana de cal' +
+ 'culadora desplegable'
+ Editors5.EditRepositoryCheckBoxItem =
+ 'CheckBox|Representa un control de caja de marca que permite sele' +
+ 'ccionar una opci'#243'n'
+ Editors5.EditRepositoryComboBoxItem = 'ComboBox|Representa el editor de la caja combo'
+ Editors5.EditRepositoryCurrencyItem =
+ 'CurrencyEdit|Representa un editor que habilita la edici'#243'n de val' +
+ 'ores monetarios'
+ Editors5.EditRepositoryDateItem =
+ 'DateEdit|Representa un control de edici'#243'n con un calendario desp' +
+ 'legable'
+ Editors5.EditRepositoryHyperLinkItem = 'HyperLink|Representa un editor de texto de hiperv'#237'nculos'
+ Editors5.EditRepositoryImageComboBoxItem =
+ 'ImageComboBox|Representa un editor que muestra una lista de im'#225'g' +
+ 'enes y texto en la ventana desplegable'
+ Editors5.EditRepositoryImageItem = 'Image|Representa un editor de im'#225'genes'
+ Editors5.EditRepositoryLookupComboBoxItem = 'LookupComboBox|Representa una caja de b'#250'squeda'
+ Editors5.EditRepositoryMaskItem = 'MaskEdit|Representa un control de edici'#243'n gen'#233'rico con m'#225'scara'
+ Editors5.EditRepositoryMemoItem =
+ 'Memo|Representa un control de edici'#243'n que permite editar datos m' +
+ 'emo'
+ Editors5.EditRepositoryMRUItem =
+ 'MRUEdit|Representa un editor de texto mostrando la lista de los ' +
+ 'elementos m'#225's recientemente usados (MRU) en una ventana desplega' +
+ 'ble'
+ Editors5.EditRepositoryPopupItem =
+ 'PopupEdit|Representa un control de edici'#243'n con una lista despleg' +
+ 'able'
+ Editors5.EditRepositorySpinItem = 'SpinEdit|Representa un editor de incrementos/decrementos (spin)'
+ Editors5.EditRepositoryRadioGroupItem = 'RadioGroup|Represents a group of radio buttons'
+ Editors5.EditRepositoryTextItem = 'TextEdit|Representa un editor de texto de l'#237'nea sencilla'
+ Editors5.EditRepositoryTimeItem = 'TimeEdit|Representa un editor mostrando valores de tiempo'
+ Editors5.RegExprLine = 'L'#237'nea'
+ Editors5.RegExprChar = 'Char'
+ Editors5.RegExprNotAssignedSourceStream = 'No se ha asignado el stream fuente'
+ Editors5.RegExprEmptySourceStream = 'El stream or'#237'gen est'#225' vac'#237'o'
+ Editors5.RegExprCantUsePlusQuantifier = 'El cuantificador '#39'+'#39' no puede aplicarse aqu'#237
+ Editors5.RegExprCantUseStarQuantifier = 'El cuantificador '#39'*'#39' no puede aplicarse aqu'#237
+ Editors5.RegExprCantCreateEmptyAlt = 'La alternativa no debe estar vac'#237'a'
+ Editors5.RegExprCantCreateEmptyBlock = 'El bloque no debe estar vac'#237'o'
+ Editors5.RegExprIllegalSymbol = 'S'#237'mbolo no permitido '#39'%s'#39
+ Editors5.RegExprIllegalQuantifier = 'Cuantificador no permitido '#39'%s'#39
+ Editors5.RegExprNotSupportQuantifier = 'El par'#225'metro cuantificador no es soportado'
+ Editors5.RegExprIllegalIntegerValue = 'Valor entero no permitido'
+ Editors5.RegExprTooBigReferenceNumber = 'N'#250'mero de referencia demasiado grande'
+ Editors5.RegExprCantCreateEmptyEnum = 'No puedo crear enumeraci'#243'n vac'#237'a'
+ Editors5.RegExprSubrangeOrder = 'El caracter de inicio del subrango debe ser menor al de fin'
+ Editors5.RegExprHexNumberExpected0 = 'Se esperaba n'#250'mero Hexadecimal'
+ Editors5.RegExprHexNumberExpected = 'N'#250'mero Hexadecimal esperado pero encontr'#243' '#39'%s'#39
+ Editors5.RegExprMissing = 'Falta '#39'%s'#39
+ Editors5.RegExprUnnecessary = 'Innecesario '#39'%s'#39
+ Editors5.RegExprIncorrectSpace = 'Espacio incorrecto despu'#233's de '#39'\'#39
+ Editors5.RegExprNotCompiled = 'Expresi'#243'n regular no compila'
+ Editors5.RegExprIncorrectParameterQuantifier = 'Cuantificador de par'#225'metros incorrecto'
+ Editors5.RegExprCantUseParameterQuantifier = 'The parameter quantifier cannot be applied here'
+ Editors5.MaskEditRegExprError = 'Errores en expresiones regulares:'
+ Editors5.MaskEditInvalidEditValue = 'El valor de edici'#243'n es inv'#225'lido'
+ Editors5.MaskEditNoMask = 'Ninguno'
+ Editors5.MaskEditIllegalFileFormat = 'Formato de archivo ilegal'
+ Editors5.MaskEditEmptyMaskCollectionFile = 'El archivo de colecci'#243'n de m'#225'scaras est'#225' vac'#237'o'
+ Editors5.MaskEditMaskCollectionFiles = 'Archivos de colecci'#243'n de m'#225'scaras'
+ Editors5.SpinEditInvalidNumericValue = 'Valor num'#233'rico no v'#225'lido'
+ Datacontroller.DataReadError = 'Error de lectura en or'#237'gen de datos'
+ Datacontroller.DataWriteError = 'Error de escritura en or'#237'gen de datos (stream)'
+ Datacontroller.DataItemExistError = 'El elemento ya existe'
+ Datacontroller.DataRecordIndexError = #205'ndice de registro fuera de rango'
+ Datacontroller.DataItemIndexError = #205'ndice de elemento fuera de rango'
+ Datacontroller.DataProviderModeError = 'La operaci'#243'n no es soportada en modo de proveedor (provider)'
+ Datacontroller.DataInvalidStreamFormat = 'Origen de datos (Stream) inv'#225'lido'
+ Datacontroller.DataRowIndexError = #205'ndice del elemento de fila fuera de rango'
+ Datacontroller.DataCustomDataSourceInvalidCompare = 'Instrucci'#243'n GetInfoForCompare no implementada'
+ Datacontroller.DBDetailFilterControllerNotFound = 'DetailFilterController no encontrado'
+ Datacontroller.DBNotInGridMode = 'La controladora de datos no est'#225' en modo de Grid'
+ Datacontroller.DBKeyFieldNotFound = 'Campo llave no encontrado'
+ Filter.FilterOperatorEqual = 'igual'
+ Filter.FilterOperatorNotEqual = 'no es igual'
+ Filter.FilterOperatorLess = 'es menor que'
+ Filter.FilterOperatorLessEqual = 'es menor o igual que'
+ Filter.FilterOperatorGreater = 'es mayor que'
+ Filter.FilterOperatorGreaterEqual = 'es mayor o igual que'
+ Filter.FilterOperatorLike = 'como'
+ Filter.FilterOperatorNotLike = 'no es como'
+ Filter.FilterOperatorBetween = 'entre'
+ Filter.FilterOperatorNotBetween = 'no entre'
+ Filter.FilterOperatorInList = 'en'
+ Filter.FilterOperatorNotInList = 'no en'
+ Filter.FilterOperatorYesterday = 'es ayer'
+ Filter.FilterOperatorToday = 'es hoy'
+ Filter.FilterOperatorTomorrow = 'es ma'#241'ana'
+ Filter.FilterOperatorLastWeek = 'es '#250'ltima semana'
+ Filter.FilterOperatorLastMonth = 'es '#250'ltimo mes'
+ Filter.FilterOperatorLastYear = 'es a'#241'o pasado'
+ Filter.FilterOperatorThisWeek = 'es esta semana'
+ Filter.FilterOperatorThisMonth = 'es este mes'
+ Filter.FilterOperatorThisYear = 'es este a'#241'o'
+ Filter.FilterOperatorNextWeek = 'es semana siguiente'
+ Filter.FilterOperatorNextMonth = 'es mes siguiente'
+ Filter.FilterOperatorNextYear = 'es a'#241'o pr'#243'ximo'
+ Filter.FilterAndCaption = 'y'
+ Filter.FilterOrCaption = 'o'
+ Filter.FilterNotCaption = 'no'
+ Filter.FilterBlankCaption = 'vac'#237'o'
+ Filter.FilterOperatorIsNull = 'es vac'#237'o'
+ Filter.FilterOperatorIsNotNull = 'no es vac'#237'o'
+ Filter.FilterOperatorBeginsWith = 'comienza con'
+ Filter.FilterOperatorDoesNotBeginWith = 'no comienza con'
+ Filter.FilterOperatorEndsWith = 'termina con'
+ Filter.FilterOperatorDoesNotEndWith = 'no termina con'
+ Filter.FilterOperatorContains = 'contiene'
+ Filter.FilterOperatorDoesNotContain = 'no contiene'
+ Filter.FilterBoxAllCaption = '(Todos)'
+ Filter.FilterBoxCustomCaption = '(Personalizado...)'
+ Filter.FilterBoxBlanksCaption = '(Vac'#237'os)'
+ Filter.FilterBoxNonBlanksCaption = '(No vac'#237'os)'
+ Filter.FilterBoolOperatorAnd = 'AND'
+ Filter.FilterBoolOperatorOr = 'OR'
+ Filter.FilterBoolOperatorNotAnd = 'NOT AND'
+ Filter.FilterBoolOperatorNotOr = 'NOT OR'
+ Filter.FilterRootButtonCaption = 'Filtro'
+ Filter.FilterAddCondition = 'Agregar &Condici'#243'n'
+ Filter.FilterAddGroup = 'Agregar &Grupo'
+ Filter.FilterRemoveRow = '&Remover Fila'
+ Filter.FilterClearAll = 'Limpiar &Todo'
+ Filter.FilterFooterAddCondition = 'Agregar una nueva condici'#243'n'
+ Filter.FilterGroupCaption = 'aplica a las siguientes condiciones'
+ Filter.FilterRootGroupCaption = ''
+ Filter.FilterControlNullString = ''
+ Filter.FilterErrorBuilding = 'No se puede construir filtro desde el or'#237'gen'
+ Filter.FilterDialogCaption = 'Filtro Personalizado'
+ Filter.FilterDialogInvalidValue = 'Valor inv'#225'lido'
+ Filter.FilterDialogUse = 'Usar'
+ Filter.FilterDialogSingleCharacter = 'para representar un caracter sencillo'
+ Filter.FilterDialogCharactersSeries = 'para representar cualquier serie de caracteres'
+ Filter.FilterDialogOperationAnd = 'Y'
+ Filter.FilterDialogOperationOr = 'O'
+ Filter.FilterDialogRows = 'Mostrar filas donde:'
+ Filter.FilterControlDialogCaption = 'Constructor de Filtro'
+ Filter.FilterControlDialogNewFile = 'sinnombre.flt'
+ Filter.FilterControlDialogOpenDialogCaption = 'Abrir un filtro existente'
+ Filter.FilterControlDialogSaveDialogCaption = 'Grabar el filtro activo a archivo'
+ Filter.FilterControlDialogActionSaveCaption = '&Guardar...'
+ Filter.FilterControlDialogActionOpenCaption = '&Abrir...'
+ Filter.FilterControlDialogActionApplyCaption = '&Aplicar'
+ Filter.FilterControlDialogActionOkCaption = 'Aceptar'
+ Filter.FilterControlDialogActionCancelCaption = 'Cancelar'
+ Filter.FilterControlDialogFileExt = 'flt'
+ Filter.FilterControlDialogFileFilter = 'Filtros (*.flt)|*.flt'
+ GridPopupMenu.GridNone = 'Ninguno'
+ GridPopupMenu.GridSortColumnAsc = 'Ordenar Ascendente'
+ GridPopupMenu.GridSortColumnDesc = 'Ordenar Descendente'
+ GridPopupMenu.GridClearSorting = 'Clear Sorting'
+ GridPopupMenu.GridGroupByThisField = 'Agrupar por este campo'
+ GridPopupMenu.GridRemoveThisGroupItem = 'Remover del grupo'
+ GridPopupMenu.GridGroupByBox = 'Panel "Agrupar por"'
+ GridPopupMenu.GridAlignmentSubMenu = 'Alineaci'#243'n'
+ GridPopupMenu.GridAlignLeft = 'Alineaci'#243'n Izquierda'
+ GridPopupMenu.GridAlignRight = 'Alineaci'#243'n Derecha'
+ GridPopupMenu.GridAlignCenter = 'Alineaci'#243'n Centrada'
+ GridPopupMenu.GridRemoveColumn = 'Remover esta columna'
+ GridPopupMenu.GridFieldChooser = 'Selector de campos'
+ GridPopupMenu.GridBestFit = 'Mejor distribuci'#243'n'
+ GridPopupMenu.GridBestFitAllColumns = 'Mejor distribuci'#243'n (Todas las columnas)'
+ GridPopupMenu.GridShowFooter = 'Pie'
+ GridPopupMenu.GridShowGroupFooter = 'Pies de grupo'
+ GridPopupMenu.GridSumMenuItem = 'Sumar'
+ GridPopupMenu.GridMinMenuItem = 'M'#237'nimo'
+ GridPopupMenu.GridMaxMenuItem = 'M'#225'ximo'
+ GridPopupMenu.GridCountMenuItem = 'Contar'
+ GridPopupMenu.GridAvgMenuItem = 'Promedio'
+ GridPopupMenu.GridNoneMenuItem = 'Ninguno'
+ GridExport.UnsupportedExport = 'Tipo de exportaci'#243'n no soportado: %1'
+ GridExport.StyleManagerKill =
+ 'El administrador de estilo esta siendo utilizado y no puede ser ' +
+ 'liberado en este momento'
+ GridExport.StyleManagerCreate = 'No se puede crear administrador de estilo'
+ GridExport.ExportToHtml = 'Exportar a p'#225'gina Web (*.html)'
+ GridExport.ExportToXml = 'Exportar a documento XML (*.xml)'
+ GridExport.ExportToText = 'Exportar a formato de texto (*.txt)'
+ GridExport.EmptyExportCache = 'Cache de exportaci'#243'n vac'#237'o'
+ GridExport.IncorrectUnion = 'Uni'#243'n de celdas incorrecta'
+ GridExport.IllegalWidth = 'Ancho de columna ilegal'
+ GridExport.InvalidColumnRowCount = 'Conteo de columna o fila inv'#225'lido'
+ GridExport.IllegalHeight = 'Alto de fila ilegal'
+ GridExport.InvalidColumnIndex = 'El '#237'ndice de columna %d fuera de l'#237'mites'
+ GridExport.InvalidRowIndex = 'El '#237'ndice de fila %d est'#225' fuera de l'#237'mites'
+ GridExport.InvalidStyleIndex = #205'ndice de estilo %d inv'#225'lido'
+ GridExport.ExportToExcel = 'Exportar a MS Excel (*.xls)'
+ GridExport.WorkbookWrite = 'Error al escribir el archivo XLS'
+ GridExport.InvalidCellDimension = 'Dimensi'#243'n de celda inv'#225'lida'
+ GridExport.BoolTrue = 'True'
+ GridExport.BoolFalse = 'False'
+ Translate.cxLibrary = True
+ Translate.PageControl2 = False
+ Translate.QuantumGrid5 = True
+ Translate.Editors5 = True
+ Translate.Datacontroller = True
+ Translate.Filter = True
+ Translate.GridPopupMenu = True
+ Translate.GridExport = True
+ Translate.Navigator = True
+ Version = '5.0'
+ Left = 104
+ Top = 16
+ end
+ object cxIntlPrintSys3: TcxIntlPrintSys3
+ Connected = True
+ Version = '3.0'
+ BtnOK = 'Aceptar'
+ BtnOKAccelerated = '&Aceptar'
+ BtnCancel = 'Cancelar'
+ BtnClose = 'Cerrar'
+ BtnApply = '&Aplicar'
+ BtnHelp = 'A&yuda'
+ BtnFix = '&Arreglar'
+ BtnNew = '&Nuevo...'
+ BtnIgnore = '&Ignorar'
+ BtnYes = '&S'#237
+ BtnNo = '&No'
+ BtnEdit = '&Editar...'
+ BtnReset = '&Restaurar'
+ BtnAdd = '&A'#241'adir'
+ BtnAddComposition = 'A'#241'adir &Comparativa'
+ BtnDefault = '&Defecto...'
+ BtnDelete = '&Borrar...'
+ BtnDescription = '&Descripci'#243'n...'
+ BtnCopy = '&Copiar...'
+ BtnYesToAll = 'S'#237' a &Todos'
+ BtnRestoreDefaults = '&Rest.Defecto'
+ BtnRestoreOriginal = 'Restaurar &Original'
+ BtnTitleProperties = 'Prop. del T'#237'tulo...'
+ BtnProperties = 'P&ropiedades...'
+ BtnNetwork = 'R&ed...'
+ BtnBrowse = '&Hojear...'
+ BtnPageSetup = 'Config. P'#225'&gina...'
+ BtnPrintPreview = 'Vista Pre&via...'
+ BtnPreview = '&Ver...'
+ BtnPrint = 'Imprimir...'
+ BtnOptions = '&Opciones...'
+ BtnStyleOptions = 'Opciones de estilo...'
+ BtnDefinePrintStyles = '&Definir Estilos...'
+ BtnPrintStyles = 'Estilos de Imp.'
+ BtnBackground = 'Fondo'
+ BtnShowToolBar = 'Mostrar &Herramientas'
+ BtnDesign = 'D&ise'#241'o...'
+ BtnMoveUp = 'Mover &Arriba'
+ BtnMoveDown = 'Mover Aba&jo'
+ BtnMoreColors = '&M'#225's Colores...'
+ BtnFillEffects = 'Efectos de &Relleno...'
+ BtnNoFill = '&Sin Relleno'
+ BtnAutomatic = '&Autom'#225'tico'
+ BtnNone = '&Ninguno'
+ BtnOtherTexture = 'Otras Te&xturas...'
+ BtnInvertColors = 'I&nvertir Colores'
+ BtnSelectPicture = 'Se&leccionar Imagen...'
+ EditReports = 'Editar Informes'
+ Composition = 'Composici'#243'n'
+ ReportTitleDlgCaption = 'T'#237'tulo del Informe'
+ Mode = '&Modo:'
+ Text = '&Texto'
+ Properties = '&Propiedades'
+ AdjustOnScale = '&Ajustar Escala'
+ TitleModeNone = 'Ninguno'
+ TitleModeOnEveryTopPage = 'En Cada P'#225'gina'
+ TitleModeOnFirstPage = 'En Primera P'#225'gina'
+ EditDescription = 'Editar Descripci'#243'n'
+ Rename = 'Reno&mbrar'
+ SelectAll = 'Seleccionar Todo'
+ AddReport = 'A'#241'adir Informe'
+ AddAndDesignReport = 'A'#241'adir y D&ise'#241'ar Informe...'
+ NewCompositionCaption = 'Nueva Composici'#243'n'
+ Name0 = '&Nombre:'
+ Caption = '&T'#237'tulo:'
+ AvailableSources = '&Fuente(s) Disponible(s)'
+ OnlyComponentsInActiveForm = 'S'#243'lamente Componentes en Formulario &Activo'
+ OnlyComponentsWithoutLinks = 'S'#243'lamente Componentes &sin Enlaces Existentes'
+ ItemName = 'Nombre'
+ ItemDescription = 'Descripci'#243'n'
+ ConfirmDeleteItem = 'Quiere borrar los siguientes elementos: %s ?'
+ AddItemsToComposition = 'A'#241'adir Elementos a la Composici'#243'n'
+ HideAlreadyIncludedItems = 'Ocultar Elementos Ya &Incluidas'
+ AvailableItems = 'Elementos D&isponibles'
+ Items = '&Elementos'
+ Enable = '&Habilitar'
+ Options = 'Opciones'
+ Show = 'Mostrar'
+ PaintItemsGraphics = '&Pintar Elementos Gr'#225'ficos'
+ Description = 'Descripci'#243'n:'
+ NewReport = 'Nuevo Informe'
+ OnlySelected = 'S'#243'lo &Seleccionados'
+ ExtendedSelect = 'Selecci'#243'n &Extendida'
+ IncludeFixed = '&Incluir Fijos'
+ Fonts = 'Fuentes'
+ BtnFont = 'Fue&nte...'
+ BtnEvenFont = 'Fuente &Par...'
+ BtnOddFont = 'Fuente &Impar...'
+ BtnFixedFont = 'Fuente F&ijo...'
+ BtnGroupFont = 'Fuente de Gru&po...'
+ BtnChangeFont = 'Cambiar Fue&nte...'
+ Font = 'Fuente'
+ OddFont = 'Fuente Impar'
+ EvenFont = 'Fuente Par'
+ PreviewFont = 'Fuente Vista Prev.'
+ CaptionNodeFont = 'Fuente T'#237'tulo del Nivel'
+ GroupNodeFont = 'Fuente T'#237'tulos de Grupo'
+ GroupFooterFont = 'Fuente Pies de Grupo'
+ HeaderFont = 'Fuente Cabecera'
+ FooterFont = 'Fuente Pie'
+ BandFont = 'Fuente Groups'
+ Transparent = '&Transparente'
+ FixedTransparent = 'Transparente Fijo'
+ CaptionTransparent = 'T'#237'tulo Transparente'
+ GroupTransparent = 'Grupo Transparente'
+ GraphicAsTextValue = '(GRAPHIC)'
+ Colors = 'Colores'
+ Color = 'Co&lor:'
+ OddColor = 'Co&lor Impar:'
+ EvenColor = 'Color Par:'
+ PreviewColor = 'Color V.&Previa:'
+ BandColor = 'Color &Grupos:'
+ LevelCaptionColor = 'Color T'#237'tulo Ni&vel:'
+ HeaderColor = 'Color Cab&ecera:'
+ GroupNodeColor = 'Color &Nodo Grupo:'
+ GroupFooterColor = 'Color Pie &Grupo:'
+ FooterColor = 'Color P&ie:'
+ FixedColor = 'Color F&ijo:'
+ GroupColor = 'Color Gru&po:'
+ CaptionColor = 'Color T'#237'tulo:'
+ GridLinesColor = 'Color L'#237'nea &Rejilla:'
+ Bands = '&Grupos'
+ LevelCaptions = 'T'#237'tulo Niveles'
+ Headers = 'Cab&eceras'
+ Footers = 'P&ies&'
+ GroupFooters = 'Pies de &Grupos'
+ Preview = 'Vista Pre&via'
+ PreviewLineCount = 'N'#250'm.L'#237'neas V.Previa:'
+ AutoCalcPreviewLineCount = 'A&uto-Calcular L'#237'neas V.Previa'
+ Grid = 'Re&jilla&'
+ NodesGrid = '&Nodos de Rejilla'
+ GroupFooterGrid = 'Rejilla de Gru&pos Pie'
+ StateImages = 'Imagenes de E&stado'
+ Images = '&Imagenes'
+ TextAlign = '&Alineaci'#243'n Texto'
+ TextAlignHorz = 'Hori&zontal'
+ TextAlignVert = '&Vertical'
+ TextAlignLeft = 'Izquierda'
+ TextAlignCenter = 'Centrado'
+ TextAlignRight = 'Derecha'
+ TextAlignTop = 'Superior'
+ TextAlignVCenter = 'Centrado'
+ TextAlignBottom = 'Inferior'
+ BorderLines = 'L'#237'neas de &Borde'
+ HorzLines = 'L'#237'neas Hori&zontales'
+ VertLines = 'L'#237'neas &Verticales'
+ FixedHorzLines = 'L'#237'neas Horizontales Fi&jas'
+ FixedVertLines = 'L'#237'neas Verticales Fij&as'
+ FlatCheckMarks = 'Cajas de Verificaci'#243'n P&lanas'
+ CheckMarksAsText = '&Mostrar Cajas Verificaci'#243'n como Text'
+ RowAutoHeight = 'Altura &Fila Auto.'
+ EndEllipsis = '&Puntos Suspens.'
+ DrawBorder = '&Dibujar Borde'
+ FullExpand = '&Expandir Todo'
+ BorderColor = 'Color &Borde:'
+ AutoNodesExpand = 'Expandir N&odos'
+ ExpandLevel = 'Expandir &Niveles:'
+ FixedRowOnEveryPage = 'Filas Fijas en &Cada P'#225'gina'
+ DrawMode = '&Modo Dibujo:'
+ DrawModeStrict = 'Estricto'
+ DrawModeOddEven = 'Modo Filas Par/Impar'
+ DrawModeChess = 'Modo '#39'Ajedrez'#39
+ DrawModeBorrow = 'Prestar de Fuente'
+ ThreeDEffects = 'Efectos 3D'
+ Use3DEffects = 'Usar Efectos &3D'
+ Soft3D = '3D "Suave"'
+ Behaviors = 'Comportamiento'
+ Miscellaneous = 'Miscelaneo'
+ OnEveryPage = 'En Cada P'#225'gina'
+ NodeExpanding = 'Expansi'#243'n de Nodos'
+ Selection = 'Selecci'#243'n'
+ NodeAutoHeight = 'Altura &Nodo Auto.'
+ TransparentGraphics = 'Gr'#225'ficos &Transparentes'
+ AutoWidth = 'An&chura Auto.'
+ DisplayGraphicsAsText = 'Mostrar Gr'#225'fico Como &Texto'
+ TransparentColumnGraphics = '&Gr'#225'ficos Transparentes'
+ BandsOnEveryPage = 'Grupos En C&ada P'#225'gina'
+ HeadersOnEveryPage = 'Cabeceras en Cada &P'#225'gina'
+ FootersOnEveryPage = 'Pies en Ca&da P'#225'gina'
+ Graphics = 'Gr'#225'ficos'
+ OutOfResources = 'Out of Resources'
+ FileAlreadyExists = 'Fichero "%s" Ya Existe.'
+ ConfirmOverWrite = 'Fichero "%s" ya existe. '#191'Sobreescribir?'
+ InvalidFileName = 'Nombre No V'#225'lido "%s"'
+ RequiredFileName = 'Entrar nombre de fichero.'
+ OutsideMarginsMessage =
+ 'Uno o m'#225's margenes est'#225'n fuera del area de impresi'#243'n de la p'#225'gin' +
+ 'a.'
+ OutsideMarginsMessage2 =
+ 'Uno o m'#225's margenes est'#225'n fuera del area de impresi'#243'n de la p'#225'gin' +
+ 'a.'
+ InvalidMarginsMessage = 'Uno o m'#225's margenes tiene valores no v'#225'lidos.'
+ InvalidMargins = 'Uno o m'#225's valores de los margenes no es v'#225'lido'
+ OutsideMargins =
+ 'Uno o m'#225's margenes se ha establecido fuera del area de impresi'#243'n' +
+ ' de la p'#225'gina'
+ ThereAreNowItemsForShow = 'No existen elementos en '#233'sta vista'
+ PageBackground = 'Fondo de P'#225'gina'
+ PenColor = 'Color del L'#225'piz'
+ FontColor = 'Color del Fuente'
+ BrushColor = 'Color de la Brocha'
+ HighLight = 'HighLight'
+ ColorBlack = 'Negro'
+ ColorDarkRed = 'Rojo Oscuro'
+ ColorRed = 'Rojo'
+ ColorPink = 'Rosa'
+ ColorRose = 'Rosado'
+ ColorBrown = 'Marr'#243'n'
+ ColorOrange = 'Naranja'
+ ColorLightOrange = 'Naranja Claro'
+ ColorGold = 'Oro'
+ ColorTan = 'Dorado'
+ ColorOliveGreen = 'Verde Oliva'
+ ColorDrakYellow = 'Amarillo Oscuro'
+ ColorLime = 'Lima'
+ ColorYellow = 'Amarillo'
+ ColorLightYellow = 'Amarillo Claro'
+ ColorDarkGreen = 'Verde Oscuro'
+ ColorGreen = 'Verde'
+ ColorSeaGreen = 'Verde Mar'
+ ColorBrighthGreen = 'Verde Florecente'
+ ColorLightGreen = 'Verde Claro'
+ ColorDarkTeal = 'VerdeAzul Oscuro'
+ ColorTeal = 'VerdeAzul'
+ ColorAqua = 'Aqua'
+ ColorTurquoise = 'Turquesa'
+ ColorLightTurquoise = 'Turquesa Claro'
+ ColorDarkBlue = 'Azul Oscuro'
+ ColorBlue = 'Azul'
+ ColorLightBlue = 'Azul Claro'
+ ColorSkyBlue = 'Azul Cielo'
+ ColorPaleBlue = 'Azul P'#225'lido'
+ ColorIndigo = 'Indigo'
+ ColorBlueGray = 'Azul Gris'
+ ColorViolet = 'Violeta'
+ ColorPlum = 'Granate'
+ ColorLavender = 'Lav'#225'nder'
+ ColorGray80 = 'Gris-80%'
+ ColorGray50 = 'Gris-50%'
+ ColorGray40 = 'Gris-40%'
+ ColorGray25 = 'Gris-25%'
+ ColorWhite = 'Blanco'
+ Texture = '&Textura'
+ Pattern = '&Dibujo'
+ Picture = '&Im'#225'gen'
+ Foreground = '&Primer Plano'
+ Background = '&Fondo'
+ Sample = 'Ejemplo:'
+ FEFCaption = 'Efectos de Relleno'
+ PaintMode = '&Modo Pintar'
+ PaintModeCenter = 'Centrar'
+ PaintModeStretch = 'Estirar'
+ PaintModeTile = 'Mosaico'
+ PaintModeProportional = 'Proporcional'
+ PatternGray5 = '5%'
+ PatternGray10 = '10%'
+ PatternGray20 = '20%'
+ PatternGray25 = '25%'
+ PatternGray30 = '30%'
+ PatternGray40 = '40%'
+ PatternGray50 = '50%'
+ PatternGray60 = '60%'
+ PatternGray70 = '70%'
+ PatternGray75 = '75%'
+ PatternGray80 = '80%'
+ PatternGray90 = '90%'
+ PatternLightDownwardDiagonal = 'Light downward diagonal'
+ PatternLightUpwardDiagonal = 'Light upward diagonal'
+ PatternDarkDownwardDiagonal = 'Dark downward diagonal'
+ PatternDarkUpwardDiagonal = 'Dark upward diagonal'
+ PatternWideDownwardDiagonal = 'Wide downward diagonal'
+ PatternWideUpwardDiagonal = 'Wide upward diagonal'
+ PatternLightVertical = 'Light vertical'
+ PatternLightHorizontal = 'Light horizontal'
+ PatternNarrowVertical = 'Narrow vertical'
+ PatternNarrowHorizontal = 'Narrow horizontal'
+ PatternDarkVertical = 'Dark vertical'
+ PatternDarkHorizontal = 'Dark horizontal'
+ PatternDashedDownward = 'Dashed downward'
+ PatternDashedUpward = 'Dashed upward'
+ PatternDashedVertical = 'Dashed vertical'
+ PatternDashedHorizontal = 'Dashed horizontal'
+ PatternSmallConfetti = 'Small confetti'
+ PatternLargeConfetti = 'Large confetti'
+ PatternZigZag = 'Zig zag'
+ PatternWave = 'Wave'
+ PatternDiagonalBrick = 'Diagonal brick'
+ PatternHorizantalBrick = 'Horizontal brick'
+ PatternWeave = 'Weave'
+ PatternPlaid = 'Plaid'
+ PatternDivot = 'Divot'
+ PatternDottedGrid = 'Dottedgrid'
+ PatternDottedDiamond = 'Dotted diamond'
+ PatternShingle = 'Shingle'
+ PatternTrellis = 'Trellis'
+ PatternSphere = 'Sphere'
+ PatternSmallGrid = 'Small grid'
+ PatternLargeGrid = 'Large grid'
+ PatternSmallCheckedBoard = 'Small checked board'
+ PatternLargeCheckedBoard = 'Large checked board'
+ PatternOutlinedDiamond = 'Outlined diamond'
+ PatternSolidDiamond = 'Solid diamond'
+ TextureNewSprint = 'Newsprint'
+ TextureGreenMarble = 'Green marble'
+ TextureBlueTissuePaper = 'Blue tissue paper'
+ TexturePapyrus = 'Papyrus'
+ TextureWaterDroplets = 'Water droplets'
+ TextureCork = 'Cork'
+ TextureRecycledPaper = 'Recycled paper'
+ TextureWhiteMarble = 'White marble'
+ TexturePinkMarble = 'Pink marble'
+ TextureCanvas = 'Canvas'
+ TexturePaperBag = 'Paper bag'
+ TextureWalnut = 'Walnut'
+ TextureParchment = 'Parchment'
+ TextureBrownMarble = 'Brown marble'
+ TexturePurpleMesh = 'Purple mesh'
+ TextureDenim = 'Denim'
+ TextureFishFossil = 'Fish fossil'
+ TextureOak = 'Oak'
+ TextureStationary = 'Stationary'
+ TextureGranite = 'Granite'
+ TextureBouquet = 'Bouquet'
+ TextureWonenMat = 'Woven mat'
+ TextureSand = 'Sand'
+ TextureMediumWood = 'Medium wood'
+ FSPCaption = 'Vista de Im'#225'gen'
+ Width = 'Altura'
+ Height = 'Altura'
+ BrushDlgCaption = 'Propiedades de la Brocha'
+ Style = 'E&stilo:'
+ ENFNCaption = 'Escoge Nombre de Fichero'
+ EnterNewFileName = 'Introduzca Nuevo Nombre de Fichero'
+ DefinePrintStylesCaption = 'Definir Estilos de Impresi'#243'n'
+ DefinePrintStylesTitle = 'E&stilos de Impresi'#243'n'
+ DefinePrintStylesWarningDelete = #191' Desea borrar "%s" ?'
+ DefinePrintStylesWarningClear = #191'Desea borrar todos los estilos existentes?'
+ Clear = 'E&liminar...'
+ CustomSize = 'Tama'#241'o Personalizado'
+ DefaultTray = 'Bandeja de Entrada'
+ InvalidPrintDevice = 'La impresora seleccionada no es v'#225'lida'
+ NotPrinting = 'La impresora no est'#225' imprimiendo'
+ Printing = 'Imprimiendo'
+ DeviceOnPort = '%s en %s'
+ PrinterIndexError = #205'ndice de Impresora fueera de rango'
+ NoDefaultPrintDevice = 'No hay ninguna impresora seleccionada'
+ AutoTextDialogCaption = 'Editar Entidades AutoTexto'
+ EnterAutoTextEntriesHere = 'Entrar Entidades A&utoTexto Aqu'#237':'
+ PrintDialogCaption = 'Imprimir'
+ PrintDialogPrinter = 'Impresora'
+ PrintDialogName = '&Nombre:'
+ PrintDialogStatus = 'Estado:'
+ PrintDialogType = 'Tipo:'
+ PrintDialogWhere = 'D'#243'nde:'
+ PrintDialogComment = 'Comentario:'
+ PrintDialogPrintToFile = 'A &Fichero'
+ PrintDialogPageRange = 'Rango de P'#225'g.'
+ PrintDialogAll = '&Todas'
+ PrintDialogCurrentPage = 'P'#225'g. A&ctual'
+ PrintDialogSelection = '&Selecci'#243'n'
+ PrintDialogPages = '&P'#225'ginas:'
+ PrintDialogRangeLegend = 'Entre el n'#250'mero de p'#225'gina o un rango de p'#225'ginas'
+ PrintDialogCopies = 'Copias'
+ PrintDialogNumberOfPages = 'N&'#250'mero de P'#225'g.:'
+ PrintDialogNumberOfCopies = 'N'#250'mero de &Copias:'
+ PrintDialogCollateCopies = 'In&tercalar Copias'
+ PrintDialogAllPages = 'Todas'
+ PrintDialogEvenPages = 'Pares'
+ PrintDialogOddPages = 'Impares'
+ PrintDialogPrintStyles = 'Est&ilos Impresi'#243'n'
+ PrintDialogOpenDlgTitle = 'Elije un Fichero'
+ PrintDialogOpenDlgAllFiles = 'Todos los Ficheros'
+ PrintDialogOpenDlgPrinterFiles = 'Ficheros de Impresora'
+ PrintDialogPageNumbersOutOfRange = 'N'#250'mero de p'#225'gina fuera de rango (%d - %d)'
+ PrintDialogInvalidPageRanges = 'Rango de p'#225'ginas no v'#225'lido'
+ PrintDialogRequiredPageNumbers = 'Introduzca n'#250'meros de p'#225'ginas'
+ PrintDialogNoPrinters = 'No printers are installed.'
+ PrintDialogInPrintingState = 'La impresora est'#225' ocupado.'
+ PrintDialogPSPaused = 'Pausado'
+ PrintDialogPSPendingDeletion = 'Pendiente Borrar'
+ PrintDialogPSBusy = 'Ocupado'
+ PrintDialogPSDoorOpen = 'Puerta Abierta'
+ PrintDialogPSError = 'Error'
+ PrintDialogPSInitializing = 'Inicializando'
+ PrintDialogPSIOActive = 'E/S Activo'
+ PrintDialogPSManualFeed = 'Alimentaci'#243'n Manual'
+ PrintDialogPSNoToner = 'Toner Terminado'
+ PrintDialogPSNotAvailable = 'No Disponible'
+ PrintDialogPSOFFLine = 'Fuera de L'#237'nea'
+ PrintDialogPSOutOfMemory = 'Memoria Agotada'
+ PrintDialogPSOutBinFull = 'Bandeja de Salida Llena'
+ PrintDialogPSPagePunt = 'Page Punt'
+ PrintDialogPSPaperJam = 'Papel Enganchado'
+ PrintDialogPSPaperOut = 'Sin Papel'
+ PrintDialogPSPaperProblem = 'Problema de Papel'
+ PrintDialogPSPrinting = 'Imprimiendo'
+ PrintDialogPSProcessing = 'Procesando'
+ PrintDialogPSTonerLow = 'Toner Bajo'
+ PrintDialogPSUserIntervention = 'Intervenci'#243'n del Usuario'
+ PrintDialogPSWaiting = 'Esperando'
+ PrintDialogPSWarningUp = 'Precalientamiento'
+ PrintDialogPSReady = 'Lista'
+ PrintDialogPSPrintingAndWaiting = 'Imprimiendo: %d documento(s) esperando'
+ LeftMargin = 'Margen Izquierdo'
+ TopMargin = 'Margin Superior'
+ RightMargin = 'Margin Derecho'
+ BottomMargin = 'Margin Inferior'
+ GutterMargin = 'Gutter'
+ HeaderMargin = 'Cabecera'
+ FooterMargin = 'Pie'
+ UnitsInches = '"'
+ UnitsCentimeters = 'cm'
+ UnitsMillimeters = 'mm'
+ UnitsPoints = 'pt'
+ UnitsPicas = 'pi'
+ UnitsDefaultName = 'Predeterminada'
+ UnitsInchesName = 'Pulgadas'
+ UnitsCentimetersName = 'Centimetros'
+ UnitsMillimetersName = 'Milimetros'
+ UnitsPointsName = 'Puntos'
+ UnitsPicasName = 'Picas'
+ PrintPreview = 'Vista Previa'
+ ReportDesignerCaption = 'Dise'#241'ador de Informes'
+ CompositionDesignerCaption = 'Dise'#241'ador de Composici'#243'n'
+ ComponentNotSupportedByLink = 'Component "%s" not supported by TdxComponentPrinter'
+ ComponentNotSupported = 'Component "%s" not supported by TdxComponentPrinter'
+ PrintDeviceNotReady = 'La impresora no est'#225' instalada o no est'#225' preparada'
+ UnableToGenerateReport = 'No se ha podido generar el informe'
+ PreviewNotRegistered = 'There is no registered preview form'
+ ComponentNotAssigned = '%s'
+ PrintDeviceIsBusy = 'Impresora ocupada'
+ PrintDeviceError = #161'La impresora ha encontrado un error!'
+ MissingComponent = 'Missing "Component" property'
+ DataProviderDontPresent = 'There are no Links with Assigned Component in Composition'
+ BuildingReport = 'Generando informe: Completado %d%%'
+ PrintingReport =
+ 'Imprimiendo Informe: Completado %d p'#225'gina(s). Pulse ESC to abort' +
+ 'ar...'
+ DefinePrintStylesMenuItem = 'Definir E&stilos de Impresi'#243'n...'
+ AbortPrinting = #191'Abortar impresi'#243'n?'
+ StandardStyle = 'Estilo Estandar'
+ FontStyleBold = 'Negrita'
+ FontStyleItalic = 'It'#225'lica'
+ FontStyleUnderline = 'Subrayado'
+ FontStyleStrikeOut = 'Tachado'
+ Pt = 'pt.'
+ NoPages = '[No p'#225'ginas]'
+ PageWidth = 'Anchura P'#225'g'
+ WholePage = 'Pag. Completa'
+ TwoPages = 'Dos P'#225'ginas'
+ FourPages = 'Cuatro P'#225'ginas'
+ WidenToSourceWidth = 'Ajustar a Anchura'
+ MenuBar = 'MenuBar'
+ StandardBar = 'Standard'
+ HeaderFooterBar = 'Header and Footer'
+ ShortcutMenusBar = 'Shortcut Menus'
+ AutoTextBar = 'AutoTexto'
+ MenuFile = '&Ficheros'
+ MenuFileDesign = '&Dise'#241'o...'
+ MenuFilePrint = '&Imprimir...'
+ MenuFilePageSetup = 'Con&fig. P'#225'gina...'
+ MenuPrintStyles = 'Estilos Impresi'#243'n'
+ MenuFileExit = '&Cerrar'
+ MenuEdit = '&Editar'
+ MenuEditCut = 'Cor&tar'
+ MenuEditCopy = '&Copiar'
+ MenuEditPaste = '&Pegar'
+ MenuEditDelete = '&Borrar'
+ MenuEditFind = '&Buscar...'
+ MenuEditFindNext = 'Buscar Si&guiente'
+ MenuEditReplace = '&Reemplazar...'
+ MenuLoad = '&Cargar...'
+ MenuPreview = 'V. Pre&via...'
+ MenuInsert = '&Insertar'
+ MenuInsertAutoText = '&AutoTexto'
+ MenuInsertEditAutoTextEntries = 'AutoTe&xto...'
+ MenuInsertAutoTextEntries = '&(Lista de Entradas AutoTexto)'
+ MenuInsertAutoTextEntriesSubItem = 'In&sertar AutoTexto'
+ MenuInsertPageNumber = 'N'#250'm &P'#225'g.'
+ MenuInsertTotalPages = '&N'#250'm. de P'#225'g.'
+ MenuInsertPageOfPages = 'N'#250'm de P'#225'&g. de P'#225'ginas'
+ MenuInsertDateTime = 'Fechay Hora'
+ MenuInsertDate = '&Fecha'
+ MenuInsertTime = '&Hora'
+ MenuInsertUserName = 'Nombre &Usuario'
+ MenuInsertMachineName = 'Nombre &Maquina'
+ MenuView = '&Vista'
+ MenuViewMargins = '&Margenes'
+ MenuViewFlatToolBarButtons = 'Botones &Planos'
+ MenuViewLargeToolBarButtons = 'Botones &Grandes'
+ MenuViewMarginsStatusBar = 'Barra de M&argenes'
+ MenuViewPagesStatusBar = 'Barra de E&stado'
+ MenuViewToolBars = '&Herramientas'
+ MenuViewPagesHeaders = '&Cabeceras de P'#225'gina'
+ MenuViewPagesFooters = '&Pies de P'#225'ginas'
+ MenuViewSwitchToLeftPart = 'Switch to Left Part'
+ MenuViewSwitchToRightPart = 'Switch to Right Part'
+ MenuViewSwitchToCenterPart = 'Switch to Center Part'
+ MenuViewHFSwitchHeaderFooter = 'Mo&strar Cabecera/Pie'
+ MenuViewHFClose = '&Cerrar'
+ MenuZoom = '&Aumentar'
+ MenuZoomPercent100 = 'Porcien &100'
+ MenuZoomPageWidth = '&Anchura P'#225'gina'
+ MenuZoomWholePage = 'P'#225'gina C&ompleta'
+ MenuZoomTwoPages = '&Dos P'#225'ginas'
+ MenuZoomFourPages = '&Cuatro P'#225'ginas'
+ MenuZoomMultiplyPages = 'P'#225'ginas &M'#250'ltiples'
+ MenuZoomWidenToSourceWidth = 'Aju&star a Anchura'
+ MenuZoomSetup = '&Config...'
+ MenuPages = '&P'#225'ginas'
+ MenuGotoPage = '&Saltar'
+ MenuGotoPageFirst = '&Primera P'#225'g.'
+ MenuGotoPagePrev = 'P'#225'g. &Anteror'
+ MenuGotoPageNext = 'Pr'#243'&xima P'#225'g.'
+ MenuGotoPageLast = #218'l&tima P'#225'g.'
+ MenuActivePage = 'P'#225'g. Acti&va:'
+ MenuFormat = 'F&ormato'
+ MenuFormatHeaderAndFooter = '&Cabeceras y Pies'
+ MenuFormatAutoTextEntries = 'Entradas &AutoTexto...'
+ MenuFormatDateTime = 'Fecha y &Hora...'
+ MenuFormatPageNumbering = '&Numeraci'#243'n P'#225'ginas...'
+ MenuFormatPageBackground = 'Fon&do...'
+ MenuFormatShrinkToPage = '&Reducir a P'#225'g.'
+ MenuShowEmptyPages = 'Mostrar P'#225'g. &Vacias'
+ MenuFormatHFBackground = 'Fondo de Cabecera/Pie...'
+ MenuFormatHFClear = 'Vaciar Texto'
+ MenuTools = '&Herramientas'
+ MenuToolsCustomize = '&Personalizar...'
+ MenuToolsOptions = '&Opciones...'
+ MenuHelp = 'A&yuda'
+ MenuHelpTopics = '&Temas de Ayuda...'
+ MenuHelpAbout = '&Acerca de...'
+ MenuShortcutPreview = 'V.Previa'
+ MenuShortcutAutoText = 'AutoTexto'
+ MenuBuiltInMenus = 'Men'#250's Incorporados'
+ MenuShortCutMenus = 'Men'#250's de Atajos'
+ MenuNewMenu = 'Men'#250' Nuevo'
+ HintFileDesign = 'Dise'#241'ar Informe'
+ HintFilePrint = 'Imprimir'
+ HintFilePrintDialog = 'Configuarar la Impresora'
+ HintFilePageSetup = 'Configurar la P'#225'gina'
+ HintFileExit = 'Cerrar Vista Previa'
+ HintEditFind = 'Buscar'
+ HintEditFindNext = 'Buscar Siguiente'
+ HintEditReplace = 'Reemplazar'
+ HintInsertEditAutoTextEntries = 'Editar Entradas AutoTexto'
+ HintInsertPageNumber = 'Insertar N'#250'mero P'#225'gina'
+ HintInsertTotalPages = 'Insertar N'#250'mero de P'#225'ginas'
+ HintInsertPageOfPages = 'Insertar P'#225'gina N'#250'mero de P'#225'ginas'
+ HintInsertDateTime = 'Insertar Fecha y Hora'
+ HintInsertDate = 'Insertar Fecha'
+ HintInsertTime = 'Insert Hora'
+ HintInsertUserName = 'Insertar Nombre Usuario'
+ HintInsertMachineName = 'Insertar Nombre Maquina'
+ HintViewMargins = 'Ver Margenes'
+ HintViewLargeButtons = 'Ver Botones Grandes'
+ HintViewMarginsStatusBar = 'Ver Barra de Esatdo de Margenes'
+ HintViewPagesStatusBar = 'Ver Barra de Estado de P'#225'gina'
+ HintViewPagesHeaders = 'Vee Cabecera de P'#225'gina'
+ HintViewPagesFooters = 'Ver Pie de P'#225'gina'
+ HintViewSwitchToLeftPart = 'Cambiar a Cabecera/Pie Izquierda'
+ HintViewSwitchToRightPart = 'Cambiar a Cabecera/Pie Derecha'
+ HintViewSwitchToCenterPart = 'Cambiar a Cabecera/Pie Centrada'
+ HintViewHFSwitchHeaderFooter = 'Cambiar a Cabecera y Pie'
+ HintViewHFClose = 'Cerrar'
+ HintViewZoom = 'Aumentar'
+ HintZoomPercent100 = 'Aumentar al 100%'
+ HintZoomPageWidth = 'Aumentar a Anchura de P'#225'gina'
+ HintZoomWholePage = 'P'#225'gina Completa'
+ HintZoomTwoPages = 'Dos P'#225'ginas'
+ HintZoomFourPages = 'Cuatro P'#225'ginas'
+ HintZoomMultiplyPages = 'P'#225'ginas M'#250'ltiples'
+ HintZoomWidenToSourceWidth = 'Ajustar a la Anchura'
+ HintZoomSetup = 'Introducir Factor de Aumento'
+ HintFormatDateTime = 'Formato de Fecha y Hora'
+ HintFormatPageNumbering = 'Formato de N'#250'mero de P'#225'gina'
+ HintFormatPageBackground = 'Fondo'
+ HintFormatShrinkToPage = 'Reducir a P'#225'gina'
+ HintFormatHFBackground = 'Fondo de Cabecera/Pie'
+ HintFormatHFClear = 'Vaciar Texto Cabecera/Pie'
+ HintGotoPageFirst = 'Primera P'#225'gina'
+ HintGotoPagePrev = 'P'#225'gina Anterior'
+ HintGotoPageNext = 'Pr'#243'xima P'#225'gina'
+ HintGotoPageLast = #218'ltima P'#225'gina'
+ HintActivePage = 'P'#225'gina Activa'
+ HintToolsCustomize = 'Personalizar Herramientas'
+ HintToolsOptions = 'Opciones'
+ HintHelpTopics = 'Temas de Ayuda'
+ HintHelpAbout = 'Acerca de'
+ PopupMenuLargeButtons = 'Botones &Grandes'
+ PopupMenuFlatButtons = 'Botones &Planos'
+ PaperSize = 'Tama'#241'o Papel'
+ Status = 'Estado'
+ StatusReady = 'Lista'
+ StatusPrinting = 'Imprimiendo. %d p'#225'gina(s) terminada(s)'
+ StatusGenerateReport = 'Generando Informe. %d%% completado.'
+ HintDoubleClickForChangePaperSize = 'Doble Clic para Cambiar el Tama'#241'o de P'#225'gina'
+ HintDoubleClickForChangeMargins = 'Doble Clic para Cambiar Margenes'
+ DTFormatsCaption = 'Fecha y Hora'
+ DTFormatsAvailableDateFormats = 'Formatos de &Fecha Disponibes:'
+ DTFormatsAvailableTimeFormats = 'Formatos de &Hora Disponibles:'
+ DTFormatsAutoUpdate = 'Act. &Autom'#225'tica'
+ DTFormatsChangeDefaultFormat =
+ 'Confirme que desea cambiar el formato de fecha y hora al "%s" -' +
+ ' "%s" ?'
+ PNFormatsCaption = 'Formato de N'#250'mero de P'#225'gina'
+ PageNumbering = 'Numeraci'#243'n de P'#225'ginas'
+ PNFormatsNumberFormat = '&Format N'#250'mero:'
+ PNFormatsContinueFromPrevious = '&Continuar desde '#218'ltima Secci'#243'n'
+ PNFormatsStartAt = 'Empezar &En:'
+ PNFormatsChangeDefaultFormat =
+ 'Confirme que desea cambiar el formato de numeraci'#243'n de p'#225'ginas a' +
+ 'l "%s" ?'
+ ZoomDlgCaption = 'Aumentar'
+ ZoomDlgZoomTo = 'Aumentar a'
+ ZoomDlgPageWidth = '&Ancho P'#225'g.'
+ ZoomDlgWholePage = 'P'#225'g.C&ompleta'
+ ZoomDlgTwoPages = '&Dos P'#225'ginas'
+ ZoomDlgFourPages = '&Cuatro P'#225'g.'
+ ZoomDlgManyPages = '&Varias P'#225'g.:'
+ ZoomDlgPercent = 'P&orcien:'
+ ZoomDlgPreview = 'Vista'
+ ZoomDlgFontPreview = '10pt Times New Romam'
+ ZoomDlgFontPreviewString = 'AaBbCcDdEeXxYyZz'
+ Pages = 'P'#225'ginas'
+ Cancel = 'Cancelar'
+ PreferenceDlgCaption = 'Opciones'
+ PreferenceDlgTab1 = '&General'
+ PreferenceDlgShow = '&Mostrar'
+ PreferenceDlgMargins = '&Margenes'
+ PreferenceDlgMarginsHints = 'A&yudas Margenes'
+ PreferenceDlgMargingWhileDragging = 'Ayudas Margins con A&rrastre'
+ PreferenceDlgLargeBtns = 'Botones &Grandes para Barras'
+ PreferenceDlgFlatBtns = 'Botones &Planos para Barras'
+ PreferenceDlgMarginsColor = '&Color Margenes:'
+ PreferenceDlgMeasurementUnits = '&Unidades de Medida:'
+ PreferenceDlgSaveForRunTimeToo = 'Gua&rdar en Ejecucci'#243'n tambien'
+ PreferenceDlgZoomScroll = 'Despla&zamiento con IntelliMouse'
+ PreferenceDlgZoomStep = 'Au&mento:'
+ CloneStyleCaptionPrefix = 'Copia (%d) de'
+ InvalideStyleCaption = 'Nombre de estilo "%s" existente. Por favor, introduzca otro.'
+ PageSetupCaption = 'Configuraci'#243'n de la P'#225'gina'
+ StyleName = '&Nombre Estilo:'
+ Page = '&P'#225'gina'
+ Margins = '&Margenes'
+ HeaderFooter = '&Cabecera\Pie'
+ Scaling = '&Escala'
+ Paper = 'Papel'
+ PaperType = 'T&ipo'
+ PaperDimension = 'Dimensi'#243'nes'
+ PaperWidth = '&Anchura:'
+ PaperHeight = 'A<ura:'
+ PaperSource = 'Bande&ja'
+ Orientation = 'Orientaci'#243'n'
+ Portrait = 'N&ormal'
+ Landscape = '&Apaisado'
+ PrintOrder = 'Orden de Impresi'#243'n'
+ DownThenOver = '&Abajo, derecha'
+ OverThenDown = '&Derecha, abajo'
+ Shading = 'Sombreado'
+ PrintUsingGrayShading = 'Imprimir usando sombreado &gris'
+ CenterOnPage = 'Centrar'
+ Horizontally = 'Hori&zontal'
+ Vertically = '&Vertical'
+ Header = 'Cabecera'
+ BtnHeaderFont = '&Fuente...'
+ BtnHeaderBackground = '&Fondo'
+ Footer = 'Pie'
+ BtnFooterFont = 'Fue&nte...'
+ BtnFooterBackground = 'F&ondo'
+ CaptionTop = '&Sup.:'
+ CaptionLeft = '&Izqu.:'
+ CaptionRight = '&Derecha:'
+ CaptionBottom = '&Inferior:'
+ Header2 = '&Cabec.:'
+ Footer2 = '&Pie:'
+ Alignment = 'Alineamiento'
+ VertAlignment = 'Alineamiento Vertical'
+ ReverseOnEvenPages = 'Al &rev'#233's en p'#225'ginas pares'
+ AdjustTo = '&Ajustar a:'
+ FitTo = 'P'#225'&ginas:'
+ PercentOfNormalSize = '% tama'#241'o normal'
+ PagesWideBy = 'p'#225'g(s) de &ancho'
+ Tall = 'de a<o'
+ XOfY = 'De'
+ LastPrinted = #218'ltima Impresi'#243'n'
+ FileName = 'Fichero'
+ FileNameAndPath = 'Fichero y camino'
+ PrintedBy = 'Impreso por'
+ PrintedOn = 'Impreso el'
+ CreatedBy = 'Creado por'
+ CreatedOn = 'Creado el'
+ Confidential = 'Confidencial'
+ HFFunctionNameUnknown = 'Desconocido'
+ HFFunctionNamePageNumber = 'N'#250'm. P'#225'gina'
+ HFFunctionNameTotalPages = 'P'#225'g. Totales'
+ HFFunctionNamePageOfPages = 'P'#225'g. # de P'#225'gs. #'
+ HFFunctionNameDateTime = 'Fecha y Hora'
+ HFFunctionNameDate = 'Fecha'
+ HFFunctionNameTime = 'Hora'
+ HFFunctionNameUserName = 'Nombre Usuario'
+ HFFunctionNameMachineName = 'Nombre Maquina'
+ HFFunctionHintPageNumber = 'Page Number'
+ HFFunctionHintTotalPages = 'Total Pages'
+ HFFunctionHintPageOfPages = 'Page # of Pages #'
+ HFFunctionHintDateTime = 'Date and Time Printed'
+ HFFunctionHintDate = 'Date Printed'
+ HFFunctionHintTime = 'Time Printed'
+ HFFunctionHintUserName = 'User Name'
+ HFFunctionHintMachineName = 'Machine Name'
+ HFFunctionTemplatePageNumber = 'Page #'
+ HFFunctionTemplateTotalPages = 'Total Pages'
+ HFFunctionTemplatePageOfPages = 'Page # of Pages #'
+ HFFunctionTemplateDateTime = 'Date & Time Printed'
+ HFFunctionTemplateDate = 'Date Printed'
+ HFFunctionTemplateTime = 'Time Printed'
+ HFFunctionTemplateUserName = 'User Name'
+ HFFunctionTemplateMachineName = 'Machine Name'
+ January = 'Enero'
+ February = 'Febrero'
+ March = 'Marzo'
+ April = 'Abril'
+ May = 'Mayo'
+ June = 'Junio'
+ July = 'Julio'
+ August = 'Agosto'
+ September = 'Septiembre'
+ October = 'Octubre'
+ November = 'Noviembre'
+ December = 'Diciembre'
+ East = 'Este'
+ West = 'Oeste'
+ South = 'Sur'
+ North = 'Norte'
+ Total = 'Total'
+ Plan = 'Plan'
+ SwimmingPool = 'Swimming-pool'
+ Administration = 'Administration'
+ Park = 'Park'
+ CarParking = 'Car-Parking'
+ CorporateHeadquarters = 'Corporate'
+ SalesAndMarketing = 'Sales and'
+ Engineering = 'Engineering'
+ FieldOfficeCanada = 'Field Office:'
+ OrderNoCaption = 'OrderNo'
+ NameCaption = 'Name'
+ CountCaption = 'Count'
+ CompanyCaption = 'Company'
+ AddressCaption = 'Address'
+ PriceCaption = 'Price'
+ CashCaption = 'Cash'
+ Name1 = 'Jennie Valentine'
+ Name2 = 'Sam Hill'
+ Company1 = 'Jennie Inc.'
+ Company2 = 'Daimler-Chrysler AG'
+ Address1 = '123 Home Lane'
+ Address2 = '9333 Holmes Dr.'
+ CountIs = 'Count is: %d'
+ Regular = 'Regular'
+ Irregular = 'Irregular'
+ TLBand = 'Item Data'
+ TLColumnName = 'Name'
+ TLColumnAxisymmetric = 'Axisymmetric'
+ TLColumnItemShape = 'Shape'
+ ItemShapeAsText = '(Graphic)'
+ Item1Name = 'Cone'
+ Item2Name = 'Cylinder'
+ Item3Name = 'Pyramid'
+ Item4Name = 'Box'
+ Item5Name = 'Free Surface'
+ Item2Description = 'Axisymmetric geometry figure'
+ Item3Description = 'Axisymmetric geometry figure'
+ Item4Description = 'Acute-angled geometry figure'
+ Item7Description = 'Simple extrusion surface'
+ PatternIsNotRegistered = 'Pattern "%s" is not registered'
+ SolidEdgePattern = 'Solid'
+ ThinSolidEdgePattern = 'Medium Solid'
+ MediumSolidEdgePattern = 'Medium Solid'
+ ThickSolidEdgePattern = 'Thick Solid'
+ DottedEdgePattern = 'Dotted'
+ DashedEdgePattern = 'Dashed'
+ DashDotDotEdgePattern = 'Dash Dot Dot'
+ DashDotEdgePattern = 'Dash Dot'
+ SlantedDashDotEdgePattern = 'Slanted Dash Dot'
+ MediumDashDotDotEdgePattern = 'Medium Dash Dot Dot'
+ HairEdgePattern = 'Hair'
+ MediumDashDotEdgePattern = 'Medium Dash Dot'
+ MediumDashedEdgePattern = 'Medium Dashed'
+ DoubleLineEdgePattern = 'Double Line'
+ SolidFillPattern = 'Solid'
+ Gray75FillPattern = '75% Gray'
+ Gray50FillPattern = '50% Gray'
+ Gray25FillPattern = '25% Gray'
+ Gray125FillPattern = '12.5% Gray'
+ Gray625FillPattern = '6.25% Gray'
+ HorizontalStripeFillPattern = 'Horizontal Stripe'
+ VerticalStripeFillPattern = 'Vertical Stripe'
+ ReverseDiagonalStripeFillPattern = 'Reverse Diagonal Stripe'
+ DiagonalStripeFillPattern = 'Diagonal Stripe'
+ DiagonalCrossHatchFillPattern = 'Diagonal Cross Hatch'
+ ThickCrossHatchFillPattern = 'Thick Cross Hatch'
+ ThinHorizontalStripeFillPattern = 'Thin Horizontal Stripe'
+ ThinVerticalStripeFillPattern = 'Thin Vertical Stripe'
+ ThinReverseDiagonalStripeFillPattern = 'Thin Reverse Diagonal Stripe'
+ ThinDiagonalStripeFillPattern = 'Thin Diagonal Stripe'
+ ThinHorizontalCrossHatchFillPattern = 'Thin Horizontal Cross Hatch'
+ ThinDiagonalCrossHatchFillPattern = 'Thin Diagonal Cross Hatch'
+ ShowRowAndColumnHeadings = '&Row and column headings'
+ ShowGridLines = 'GridLines'
+ SuppressSourceFormats = '&Suppress Source Formats'
+ RepeatHeaderRowAtTop = 'Repeat header row at top'
+ DataToPrintDoesnotExist =
+ 'Can not activate ReportLink because PrintingSystem did not find ' +
+ 'anything to print.'
+ JanuaryShort = 'Ene'
+ FebruaryShort = 'Feb'
+ MarchShort = 'Mar'
+ AprilShort = 'Abril'
+ MayShort = 'Mayo'
+ JuneShort = 'Jun'
+ JulyShort = 'Jul'
+ AugustShort = 'Ago'
+ SeptemberShort = 'Sept'
+ OctoberShort = 'Oct'
+ NovemberShort = 'Nov'
+ DecemberShort = 'Dic'
+ TechnicalDepartment = 'Technical Department'
+ SoftwareDepartment = 'Software Department'
+ SystemProgrammers = 'System Programmers'
+ EndUserProgrammers = 'EndUser Programmers'
+ BetaTesters = 'Beta Testers'
+ HumanResourceDepartment = 'Human Resource Department'
+ TreeLines = '&L'#237'neas'#193'rbol'
+ TreeLinesColor = 'Colore L'#237'neas '#193'rbol:'
+ ExpandButtons = 'Botones E&xpansi'#243'n'
+ CheckMarks = 'Cajas Verificaci'#243'n'
+ TreeEffects = 'Efectos '#193'rbol'
+ Appearance = 'Apariencia'
+ CarLevelCaption = 'Coches'
+ ManufacturerBandCaption = 'Manufacturer Data'
+ ModelBandCaption = 'Car Data'
+ ManufacturerNameColumnCaption = 'Name'
+ ManufacturerLogoColumnCaption = 'Logo'
+ ManufacturerCountryColumnCaption = 'Country'
+ CarModelColumnCaption = 'Model'
+ CarIsSUVColumnCaption = 'SUV'
+ CarPhotoColumnCaption = 'Photo'
+ CarManufacturerName1 = 'BMW'
+ CarManufacturerName2 = 'Ford'
+ CarManufacturerName3 = 'Audi'
+ CarManufacturerName4 = 'Land Rover'
+ CarManufacturerCountry1 = 'Germany'
+ CarManufacturerCountry2 = 'United States'
+ CarManufacturerCountry3 = 'Germany'
+ CarManufacturerCountry4 = 'United Kingdom'
+ CarModel1 = 'X5 4WD'
+ CarModel2 = 'Excursion'
+ CarModel3 = 'S8 Quattro'
+ CarModel4 = 'G4 Challenge'
+ True = 'True'
+ False = 'False'
+ Auto = 'Auto'
+ Custom = 'Personal.'
+ Env = 'Env'
+ LookAndFeelFlat = 'Plano'
+ LookAndFeelStandard = 'Estandar'
+ LookAndFeelUltraFlat = 'UltraPlano'
+ ViewTab = 'Vista'
+ BehaviorsTab = 'Comportamiento'
+ PreviewTab = 'Vista Previa'
+ CardsTab = 'Fichas'
+ Formatting = 'Formato'
+ LookAndFeel = 'Aspecto'
+ LevelCaption = '&T'#237'tulo'
+ FilterBar = 'Barra de &Filtro'
+ Refinements = 'Perfeccionamiento'
+ ProcessSelection = 'Procesar &Selecci'#243'n'
+ ProcessExactSelection = 'Procesar Selecci'#243'n E&xacta'
+ Expanding = 'Despliege'
+ Groups = '&Grupos'
+ Details = '&Detalles'
+ StartFromActiveDetails = 'Empieza desde Detalles Activas'
+ OnlyActiveDetails = 'S'#243'lo Detalles Activos'
+ Visible = '&Visible'
+ PreviewAutoHeight = 'Altura A&utom'#225'tica'
+ PreviewMaxLineCount = 'L'#237'neas &M'#225'ximas:'
+ Sizes = 'Tama'#241'os'
+ KeepSameWidth = 'Manten.Misma Anchura'
+ KeepSameHeight = 'Manten.Misma Altura'
+ Framing = 'Marco'
+ Spacing = 'Espacios'
+ Shadow = 'Sombra'
+ Depth = '&Profundidad:'
+ Position = '&Posici'#243'n'
+ Positioning = 'Posicionando'
+ Horizontal = 'H&orizontal:'
+ Vertical = 'V&ertical:'
+ SummaryFormat = 'Recuento = 0'
+ CannotUseOnEveryPageMode = 'Cannot Use OnEveryPage Mode'
+ IncorrectBandHeadersState = 'Cannot Use BandHeaders OnEveryPage Mode'
+ IncorrectHeadersState = 'Cannot Use Headers OnEveryPage Mode'
+ IncorrectFootersState = 'Cannot Use Footers OnEveryPage Mode'
+ TPicture = 'TPicture'
+ Copy = '&Copiar'
+ Save = '&Salvar...'
+ BaseStyle = 'Estilo Base'
+ Rectangle = 'Rectangle'
+ Square = 'Square'
+ Ellipse = 'Ellipse'
+ Circle = 'Circle'
+ RoundRect = 'RoundRect'
+ RoundSquare = 'RoundSquare'
+ HorizontalFillPattern = 'Horizontal'
+ VerticalFillPattern = 'Vertical'
+ FDiagonalFillPattern = 'FDiagonal'
+ BDiagonalFillPattern = 'BDiagonal'
+ CrossFillPattern = 'Cross'
+ DiagCrossFillPattern = 'DiagCros'
+ CyclicIDReferences = 'Cyclic ID references %s and %s'
+ LoadReportDataToFileTitle = 'Cargar Informe'
+ SaveReportDataToFileTitle = 'Salvar Informe Como'
+ InvalidExternalStorage = 'Almacenamiento Externo No V'#225'lido'
+ LinkIsNotIncludedInUsesClause = 'ReportFile contains ReportLink "%0:s"'
+ InvalidStorageVersion = 'Versi'#243'n de Almacenamiento no V'#225'lido: %d'
+ PSReportFiles = 'Ficheros de Informes'
+ ReportFileLoadError = 'No se pudo cargar el informe "%s".'
+ None = '(Ninguno)'
+ ReportDocumentIsCorrupted = '(El fichero no es un informe o esta corrupto)'
+ CloseExplorerHint = 'Cerrar Explorador'
+ ExplorerCaption = 'Explorador'
+ ExplorerRootFolderCaption = 'Ra'#237'z'
+ NewExplorerFolderItem = 'Nueva Carpeta'
+ CopyOfItem = 'Copia de'
+ ReportExplorer = 'Explorer de Informes'
+ DataLoadErrorText = 'No se pudo cargar los datos del informe'
+ DBBasedExplorerItemDataLoadError = 'No se pudo cargar los datos.'
+ FileBasedExplorerItemDataLoadError = 'No se pudo cargar los datos.'
+ DeleteNonEmptyFolderMessageText = 'La carpeta "%s" no est'#225' vacia. A'#250'n as'#237' '#191'desea eliminarlo?'
+ DeleteFolderMessageText = 'Borrar Carpeta "%s" ?'
+ DeleteItemMessageText = 'Borrar elemento "%s" ?'
+ CannotRenameFolderText =
+ 'Cannot rename folder "%s". A folder with name "%s" already exist' +
+ 's. Specify a different name.'
+ CannotRenameItemText =
+ 'Cannot rename item "%s". An item with name "%s" already exists. ' +
+ 'Specify a different name.'
+ OverwriteFolderMessageText = 'This folder "%s" already contains folder named "%s".'
+ OverwriteItemMessageText = 'This Folder "%s" already contains item named "%s".'
+ SelectNewRoot = 'Select new Root Directory where the Reports will be stored'
+ InvalidFolderName = 'Nombre de Carpeta no V'#225'lida "%s"'
+ InvalidReportName = 'Nombre de Informe no V'#225'lido "%s"'
+ ExplorerBar = 'Explorador'
+ MenuFileSave = '&Salvar'
+ MenuFileSaveAs = 'S&alvar Como...'
+ MenuFileLoad = '&Cargar'
+ MenuFileClose = '&Descargar'
+ HintFileSave = 'Salvar Informe'
+ HintFileSaveAs = 'Salvar Informe Como'
+ HintFileLoad = 'Cargar Informe'
+ HintFileClose = 'Descargar Informe'
+ MenuExplorer = 'E&xplorador'
+ MenuExplorerCreateFolder = 'Crear &Carpeta'
+ MenuExplorerDelete = '&Borrar...'
+ MenuExplorerRename = 'Reno&mbrar'
+ MenuExplorerProperties = '&Propiedades...'
+ MenuExplorerRefresh = 'Refrescar'
+ MenuExplorerChangeRootPath = 'Cambiar Ra'#237'z...'
+ MenuExplorerSetAsRoot = 'Establecer Como Ra'#237'z'
+ MenuExplorerGoToUpOneLevel = 'Subir Un Nivel'
+ HintExplorerCreateFolder = 'Crear Nueva Carpeta'
+ HintExplorerDelete = 'Borrar'
+ HintExplorerRename = 'Renombrar'
+ HintExplorerProperties = 'Propiedades'
+ HintExplorerRefresh = 'Refrescar'
+ HintExplorerChangeRootPath = 'Cambiar Ra'#237'z'
+ HintExplorerSetAsRoot = 'Establecder Carpeta Actual Como Ra'#237'z'
+ HintExplorerGoToUpOneLevel = 'Subir Un Nivel'
+ MenuViewExplorer = 'E&xplorador'
+ HintViewExplorer = 'Mostar Explorador'
+ Summary = 'Resumen'
+ Creator = 'Creado&r:'
+ CreationDate = 'Crea&do:'
+ MenuViewThumbnails = 'Miniat&uras'
+ HintViewThumbnails = 'Mostar Miniaturas'
+ MenuFormatTitle = 'T&'#237'tulo...'
+ HintFormatTitle = 'Formatear T'#237'tulo del Informe'
+ Half = 'Medio'
+ PredefinedFunctions = 'Funciones Predefinidos'
+ ZoomParameters = '&Par'#225'metros de Aumento'
+ WrapData = 'Doblar Datos'
+ MenuShortcutExplorer = 'Explorador'
+ ExplorerToolBar = 'Explorador'
+ MenuThumbnailsSmall = 'Miniaturas &Peque'#241'as'
+ MenuThumbnailsLarge = 'Miniaturas &Grandes'
+ MenuShortcutThumbnails = 'Miniaturas'
+ Buttons = 'Botones'
+ BtnHeadersFont = 'Fuente &Cabeceras...'
+ HeadersTransparent = 'Cabeceras Transparentes'
+ HintListViewDesignerMessage = 'Most Options Are Being Taken Into Account Only In Detailed View'
+ ColumnHeaders = 'Cabeceras de &Columnas'
+ ReportGroupNullLookAndFeel = 'Null'
+ ReportGroupStandardLookAndFeel = 'Standard'
+ ReportGroupOfficeLookAndFeel = 'Office'
+ ReportGroupWebLookAndFeel = 'Web'
+ LayoutGroupDefaultCaption = 'Layout Group'
+ LayoutItemDefaultCaption = 'Layout Item'
+ CarManufacturerName5 = 'Volkswagen'
+ CarManufacturerCountry5 = 'Germany'
+ CarModel5 = 'Golf GTI'
+ LuxurySedans = 'Luxury Sedans'
+ CarManufacturer = 'Manufacturer'
+ CarModel = 'Model'
+ CarEngine = 'Engine'
+ CarTransmission = 'Transmission'
+ CarTires = 'Tires'
+ Volvo760V12Manufacturer = 'BMW'
+ Volvo760V12Model = '760Li V12'
+ Volvo760V12Engine =
+ '6.0L DOHC V12 438 HP 48V DI Valvetronic 12-cylinder engine with ' +
+ '6.0-liter displacement, dual overhead cam valvetrain'
+ Volvo760V12Transmission = 'Elec 6-Speed Automatic w/Steptronic'
+ Volvo760V12Tires =
+ 'P245/45R19 Fr - P275/40R19 Rr Performance. Low Profile tires wit' +
+ 'h 245mm width, 19.0" rim'
+ BandHeaderStyle = 'CabeceraGrupo'
+ CaptionStyle = 'T'#237'tulo'
+ CardCaptionRowStyle = 'T'#237'tulo Fila Fichas'
+ CardRowCaptionStyle = 'T'#237'tulo Fila Fichas'
+ CategoryStyle = 'Categor'#237'a'
+ ContentStyle = 'Contenido'
+ ContentEvenStyle = 'Contenido Filas Pares'
+ ContentOddStyle = 'Contenido Filas Impares'
+ FilterBarStyle = 'Barra de Filto'
+ FooterStyle = 'Pie'
+ FooterRowStyle = 'Pie de Fila'
+ GroupStyle = 'Grupo'
+ HeaderStyle = 'Cabecera'
+ IndentStyle = 'Indentaci'#243'n'
+ PreviewStyle = 'Vista Previa'
+ SelectionStyle = 'Selecci'#243'n'
+ Styles = 'Estilos'
+ StyleSheets = 'Hojas de Estilos'
+ BtnTexture = '&Textura...'
+ BtnTextureClear = 'Elimin&ar'
+ BtnColor = 'Co&lor...'
+ BtnSaveAs = 'Salvar &Como...'
+ BtnRename = '&Renombrar...'
+ LoadBitmapDlgTitle = 'Cargar Imagen'
+ DeleteStyleSheet = 'Borrar Hoja de Estilos con Nombre "%s"?'
+ UnnamedStyleSheet = 'SinNombre'
+ CreateNewStyleQueryNamePrompt = 'Entre un Nombre de Hoja de Estilo:'
+ StyleSheetNameAlreadyExists = 'Hoja de Estilo "%s" Ya Existe'
+ CannotLoadImage = 'No se pudo cargar el imagen "%s"'
+ UseNativeStyles = '&Usar Estilo Nativo'
+ SuppressBackgroundBitmaps = '&Suprimir Texturas de Fondo'
+ ConsumeSelectionStyle = 'Consumir Estilos de Selecci'#243'n'
+ Size = 'Tama'#241'o'
+ Levels = 'Niveles'
+ Unwrap = '&Desdoblar'
+ UnwrapTopLevel = 'Desdoblar Nivel Superior'
+ RiseActiveToTop = 'Subir Nivel Activo al Princ'#237'pio'
+ CannotUseOnEveryPageModeInAggregatedState = 'No se puede usar modo "EnCadaP'#225'gina"'
+ Pagination = 'Paginaci'#243'n'
+ ByBands = 'Por Grupos'
+ ByColumns = 'Por Columnas'
+ ByRows = 'Por Filas'
+ ByTopLevelGroups = 'Por Grupos de Primer Nivel'
+ OneGroupPerPage = 'Un Grupo por P'#225'gina'
+ Borders = 'Margenes'
+ ExplicitlyExpandNodes = 'Expandir Expl'#237'citamente los Nodos'
+ Nodes = '&Nodos'
+ Separators = 'Separadores'
+ Thickness = 'Grueso'
+ TLIncorrectHeadersState = 'No se puede usar el modo EnCadaP'#225'gina'
+ Rows = '&Filas'
+ BestFit = 'Ajuste &'#211'ptimo'
+ KeepSameRecordWidths = '&Mantaner Anchuras Iguales'
+ WrapRecords = '&Doblar Registros'
+ ByWrapping = 'Doblando'
+ OneWrappingPerPage = 'Doblando Uno por P'#225'gina'
+ PaginateByControlDetails = 'Detalles de Controles'
+ PaginateByControls = 'Controles'
+ PaginateByGroups = 'Grupos'
+ PaginateByItems = 'Elementos'
+ ControlsPlace = 'Enplazamiento de Controles'
+ ExpandHeight = 'Expandir Altura'
+ ExpandWidth = 'Expandir Anchura'
+ ShrinkHeight = 'Contraer Altura'
+ ShrinkWidth = 'Contraer Anchura'
+ CheckAll = 'Check &All'
+ CheckAllChildren = 'Check All &Children'
+ ControlsTab = 'Controls'
+ ExpandAll = 'E&xpand All'
+ HiddenControlsTab = 'Hidden Controls'
+ ReportLinksTab = 'Aggregated Designers'
+ Transparents = 'Transparents'
+ UncheckAllChildren = 'Uncheck &All Children'
+ Root = '&Ra'#237'z'
+ RootBorders = 'Root &Borders'
+ Controls = '&Controls'
+ Containers = 'C&ontainers'
+ HideCustomContainers = '&Hide Custom Containers'
+ Bytes = 'Bytes'
+ KiloBytes = 'KB'
+ MegaBytes = 'MB'
+ GigaBytes = 'GB'
+ Left = 184
+ Top = 16
+ end
+ object ROMessage: TROBinMessage
+ Left = 329
+ Top = 88
+ end
+ object DABINAdapter: TDABINAdapter
+ IsCompatibleV4 = False
+ Left = 424
+ Top = 24
+ end
+ object JvAppRegistryStorage: TJvAppRegistryStorage
+ StorageOptions.BooleanStringTrueValues = 'TRUE, YES, Y'
+ StorageOptions.BooleanStringFalseValues = 'FALSE, NO, N'
+ Root = 'Software\%APPL_NAME%'
+ SubStorages = <>
+ Left = 184
+ Top = 80
+ end
+ object RORemoteService: TRORemoteService
+ Message = ROMessage
+ Channel = ROChannel
+ ServiceName = 'srvLogin'
+ Left = 424
+ Top = 92
+ end
+end
diff --git a/Source/Base/uDMBase.pas b/Source/Base/uDMBase.pas
new file mode 100644
index 0000000..ec5a945
--- /dev/null
+++ b/Source/Base/uDMBase.pas
@@ -0,0 +1,254 @@
+unit uDMBase;
+
+interface
+
+uses
+ Controls, PngImageList, JvComponent, JvNavigationPane, TBXSwitcher,
+ TBXOffice2003Theme, Classes, ImgList, uROClient, uROBinMessage,
+ uROServiceComponent, uRORemoteService, uROWinInetHttpChannel,
+ DataAbstract3_Intf, uDADataTable, uDABINAdapter, cxintl, cxIntlPrintSys3,
+ JvAppStorage, JvAppRegistryStorage, SysUtils,
+ JvComponentBase, uDADataStreamer;
+
+type
+ TdmBase = class(TDataModule)
+ ROChannel: TROWinInetHTTPChannel;
+ SmallImages: TPngImageList;
+ StyleManager: TJvNavPaneStyleManager;
+ TBXSwitcher: TTBXSwitcher;
+ cxIntl: TcxIntl;
+ cxIntlPrintSys3: TcxIntlPrintSys3;
+ ROMessage: TROBinMessage;
+ DABINAdapter: TDABINAdapter;
+ JvAppRegistryStorage: TJvAppRegistryStorage;
+ RORemoteService: TRORemoteService;
+ procedure DAClientDataModuleCreate(Sender: TObject);
+ procedure ROChannelFailure(Sender: TROTransportChannel;
+ anException: Exception; var Retry: Boolean);
+ procedure ROChannelProgress(iSender: TObject; iType: TProgressType;
+ iDirection: TProgressDirection; iTransferred, iTotal: Integer);
+ private
+ FOnThemeChange: TNotifyEvent;
+ function GetAdapter: TDABINAdapter;
+ function GetChannel: TROWinInetHTTPChannel;
+ function GetCodigoEmpresa: Integer;
+ function GetMessage: TROBinMessage;
+ procedure InitStyleManager;
+ procedure OnTBXThemeChange(Sender: TObject);
+ procedure LeerConfiguracion;
+ procedure SalvarConfiguracion;
+ public
+ function DarVersion : String;
+ procedure ConfigurarConexion;
+ function HayConexion(const ATargetURL : String = ''): Boolean;
+ property Adapter: TDABINAdapter read GetAdapter;
+ property Channel: TROWinInetHTTPChannel read GetChannel;
+ property CodigoEmpresa: Integer read GetCodigoEmpresa;
+ property Message: TROBinMessage read GetMessage;
+ property OnThemeChange: TNotifyEvent read FOnThemeChange write
+ FOnThemeChange;
+ end;
+
+var
+ dmBase: TdmBase;
+
+implementation
+
+{$R *.DFM}
+
+uses
+ Dialogs, TBX, TBXThemes, uConfigurarConexion, WinInet, Forms, Windows,
+ JclFileUtils, VARELA_Intf, cxControls;
+
+const
+ SERVER_URL = 'http://localhost:8099/bin';
+ IE_OFFLINE_ERROR = 'Unexpected error in WinInet HTTP Channel (2)';
+
+{
+*********************************** TdmBase ************************************
+}
+procedure TdmBase.ConfigurarConexion;
+begin
+ with TfConfigurarConexion.Create(NIL) do
+ try
+ TargetURL := ROChannel.TargetURL;
+ if ShowModal = mrOk then
+ begin
+ ROChannel.TargetURL := TargetURL;
+ ROChannel.Connected := False;
+ ROChannel.Connected := True;
+ SalvarConfiguracion;
+ end;
+ finally
+ Free;
+ end;
+end;
+
+procedure TdmBase.DAClientDataModuleCreate(Sender: TObject);
+begin
+ TBXSwitcher.OnThemeChange := OnTBXThemeChange;
+ TBXSetTheme('Office2003');
+
+ LeerConfiguracion;
+end;
+
+function TdmBase.GetAdapter: TDABINAdapter;
+begin
+ Result := DABinAdapter;
+end;
+
+function TdmBase.GetChannel: TROWinInetHTTPChannel;
+begin
+ Result := ROChannel;
+end;
+
+function TdmBase.GetCodigoEmpresa: Integer;
+begin
+ Result := 1;
+end;
+
+function TdmBase.GetMessage: TROBinMessage;
+begin
+ Result := ROMessage;
+end;
+
+procedure TdmBase.InitStyleManager;
+begin
+ if not USE_THEMES then
+ begin
+ TBXSwitcher.EnableXPStyles := False;
+ StyleManager.Theme := nptStandard;
+ end
+ else begin
+ TBXSwitcher.EnableXPStyles := True;
+ with StyleManager do
+ begin
+ if CurrentTheme is TTBXOffice2003Theme then
+ begin
+ case GetOffice2003Scheme of
+ osBlue : Theme := nptXPBlue;
+ osMetallic : Theme := nptXPSilver;
+ osGreen : Theme := nptXPOlive;
+ else
+ Theme := nptStandard;
+ end;
+ end;
+ end;
+ end;
+end;
+
+
+procedure TdmBase.LeerConfiguracion;
+begin
+ ROChannel.TargetURL := JvAppRegistryStorage.ReadString('ServerURL', SERVER_URL);
+end;
+
+procedure TdmBase.OnTBXThemeChange(Sender: TObject);
+begin
+ InitStyleManager;
+
+ if Assigned(FOnThemeChange) then
+ FOnThemeChange(Sender);
+end;
+
+procedure TdmBase.SalvarConfiguracion;
+begin
+ JvAppRegistryStorage.BeginUpdate;
+ try
+ JvAppRegistryStorage.WriteString('ServerURL', ROChannel.TargetURL);
+ finally
+ JvAppRegistryStorage.EndUpdate;
+ end;
+end;
+
+procedure TdmBase.ROChannelFailure(Sender: TROTransportChannel;
+ anException: Exception; var Retry: Boolean);
+begin
+ if (Pos(anException.Message, IE_OFFLINE_ERROR) > 0) then
+ begin
+ // Preguntar al usuario si se quiere conectar
+ if InternetGoOnline(PAnsiChar(ROChannel.TargetURL), GetDesktopWindow(), 0) then
+ Retry := True // Si el usuario pulsa en 'Conectar' reintentar la operación
+ else
+ Abort; // Si el usuario pulsa en 'Seguir desconectado' parar todo
+ end
+ else
+ Retry := True;
+// raise Exception.Create(anException.Message);
+end;
+
+procedure TdmBase.ROChannelProgress(iSender: TObject; iType: TProgressType;
+ iDirection: TProgressDirection; iTransferred, iTotal: Integer);
+begin
+{ if iType = ptInProgress then
+ begin
+ if not Form1.Visible then
+ Form1.Show;
+ end
+ else
+ Form1.Hide;}
+end;
+
+function TdmBase.DarVersion: String;
+var
+ Obj : TJclFileVersionInfo;
+begin
+ Obj := TJclFileVersionInfo.Create(Application.ExeName);
+ try
+ Result := 'v' + Obj.FileVersion;
+ finally
+ FreeAndNil(Obj);
+ end;
+end;
+
+function TdmBase.HayConexion(const ATargetURL: String): Boolean;
+var
+ AHTTPChannel: TROWinInetHTTPChannel;
+ AROBinMessage: TROBinMessage;
+ ACoService: TRORemoteService;
+begin
+ AHTTPChannel := TROWinInetHTTPChannel.Create(Self);
+ AROBinMessage := TROBinMessage.Create(Self);
+ ACoService := TRORemoteService.Create(Self);
+
+ ShowHourglassCursor;
+ try
+ with AHTTPChannel do
+ begin
+ Name := 'HTTPChannel';
+ UserAgent := 'AdminPV';
+ if Length(ATargetURL) > 0 then
+ TargetURL := ATargetURL
+ else
+ TargetURL := ROChannel.TargetURL;
+ end;
+
+ with ACoService do
+ begin
+ ServiceName := 'srvLogin';
+ Message := AROBinMessage;
+ Channel := AHTTPChannel;
+ end;
+
+ try
+ (ACoService as IsrvLogin).Ping;
+ Result := True;
+ except
+ Result := False;
+ end;
+ finally
+ AHTTPChannel.Connected := False;
+ FreeAndNil(AHTTPChannel);
+ FreeAndNil(ACoService);
+ FreeAndNil(AROBinMessage);
+ HideHourglassCursor;
+ end;
+end;
+
+initialization
+ dmBase := TdmBase.Create(NIL);
+
+finalization
+ dmBase.Free;
+
+end.
diff --git a/Source/Base/uDataModuleBase.dfm b/Source/Base/uDataModuleBase.dfm
index 5f633ba..2c4cf30 100644
--- a/Source/Base/uDataModuleBase.dfm
+++ b/Source/Base/uDataModuleBase.dfm
@@ -1,1660 +1,5 @@
-object dmBase: TdmBase
+object DataModuleBase: TDataModuleBase
OldCreateOrder = True
- OnCreate = DAClientDataModuleCreate
- Height = 352
- Width = 518
- object SmallImages: TPngImageList
- PngImages = <
- item
- PngImage.Data = {
- 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
- 610000000970485973000017120000171201679FD252000002224944415478DA
- 95935D48936114C77FCB36584A6064161515DEA441108B240293E8A682246805
- DEA45020F40196505D081242DE94512B8C20169937056914D52E726B6083B114
- D44CD3D51A216BB6656B5FEF677B5FF31D23033DF070CE03CFFFF73F1CCE6362
- 29D1806AD44E4C5A32F5F58FAA8BD5D73DD8465757034D4D4EFA4E8C62000ED7
- 56E997647490DFE131BD2ED9584971D98EB9478D2603D279B39EE6733DC6DD00
- 68E2EF7E07E95F2291688C48629ABDC71DACABD8AD0334E7B420104D24F4A3D5
- DDD707E60087F66C2234D0CECF2F41643987556566676799C9C4387AD18FF964
- 91E178EA522DF73ADC851D1CA85ECD27D77948995861B552844C2A9962303441
- DD051FA22473E5095C735B3972DAC6D3DB016EED7BC9FD47CFE601E57CF3B661
- C966D1E62C880299549A696915B6639D4892A243D6B6AC349C0B00DA0C22EF7B
- 484EBDCA015424512491125036D751B1CBAE8BB5330F12459937EF860A01DEA0
- 8BA0FB0E5B154BAE832C810CACDF594F4DD5C17FC45AF6FA87F3800D95022DFD
- ADC47E84682CDF8F222A3C9CF1303915E6C3E5495DDC7AE379C14E546F5F9307
- F8E4C7BC187F4BA6344E49D24C6E8A24AD12E65809A1895102CD6386B3F8B793
- C0F0C73CC0196927188E2297651096A7D096D4922D6659DCC2E7AF43F8CE8C70
- F5AEEBFF1D9CF5D889C7230BAE6F696939BDF6D7BAABACA87A567279647C320F
- A8B16DA1BBD7B3A47FA5850168EB702C596C6CA2AA2EFA332E187F0080F1503E
- 182A98A90000000049454E44AE426082}
- Name = 'PngImage0'
- Background = clWindow
- end
- item
- PngImage.Data = {
- 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
- 610000000774494D45000000000000000973942E000000097048597300001712
- 0000171201679FD252000001724944415478DA6364A0103062135CB1E2C26E20
- E5824F63448401235603809AA381D412374F5506413E2EB0D89FBFFF187EFFF9
- 0BC62F3EFD6728A999C0B0795E15A60150CD1540CD3A7B4FDCC5B0D5D94299E1
- CAD3BF0CDD3D53F280064CC666C06EA066176C36FF05B25F7F6544B11DC50098
- D3C3C3F519D6ECBA8C61BBBDA922C38D17FF41B6C384B6020DF261846AFE0FA4
- AE809C0EB21DDD6610FFCF9F7F0CE91553194CF49518A4558D1836AE59037609
- 23C8E6AB4F2E2C2136DAE4B5AC186E9CD9C570F3C1278801B53D0BFE3715C7E3
- D4F0E5C75F86CFDF8118487FF9F18F61C3BA350C12CA260C3B366F4218408CCD
- 17AE3D03D3065A520CEC42AA0C278F1CC4EF02749BBF82F0CFBF0CC7F66E64F8
- C92AC970FDE259DC06A06BAE3DEFC390ABB49EE1FEB5530CCF9F3F6778FA919D
- E1F5D3FBD80DC066F3AC743D8680EEB30CAFEE9E61D8BEF72C4CA90CD080A770
- 03A62FDB45542C400D006B062724DFA4366920FD84D86844D68C9212C905001F
- 16FA1194E3DBC30000000049454E44AE426082}
- Name = 'PngImage1'
- Background = clWindow
- end
- item
- PngImage.Data = {
- 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
- 610000000970485973000017120000171201679FD2520000016A4944415478DA
- 63FCFFFF3F03082CDD7212C22000627C2D18616C905E466403A27DCCF16A06AA
- 61E89DB290E1FCCEE98C241BF0EFDF3F86E5DB4E33488B093314D5F5810D21DA
- 0090E6DF7FFE31ACD97596C1C9429BE1E6BD176043CEED98C688D3804D0F0E30
- F45E6A02B37779EC62E05CC0C6B058EA38D80B3080D30090E6805D4E182E7911
- FC91E1C4E5C70C8F1E3F6298B774137603609AFFA4FC013B1B64738BB13743CD
- D9AD0C8FFDDF81C5B6EC3B85DB00A6594C289A91C13DEF3740F1BF0C3B0F9DC5
- 6D0048C1EFDF7F21F49F7F50FA2FC31F181F2877E0E445EC068479988015F02C
- E640B1F98EE72BB066CDDD120C676D1E311C3D7B05BB0181CE8660DB049773C3
- FD8DAC3957BB80219A379FE1D4C5EBD80DF0B1D7032B165BCD8B110330CD200B
- CE5FBD85DD00776B1DB002E9F502609B13CF8781E50C840DE09A41165CB97907
- BB014EE69A1801060B44986610C06980ADB11AC3A63D2789C994D80D404EA6C4
- 0090010087546EF0ACB0C7920000000049454E44AE426082}
- Name = 'PngImage2'
- Background = clWindow
- end
- item
- PngImage.Data = {
- 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
- 61000000097048597300000AEB00000AEB01828B0D5A000002854944415478DA
- A5935D48536118C7FFAFDB8CCD557E7F34B33167F9119617A91596495D781304
- 451021A651362821B1ABA49B6EA4460961D88542055D84DD6545415992174994
- 9625CC8F9C329D9B5F3BE9CED9D9797BCEA1C932A3A0079EC3CBE13CBFE7FF7F
- 9FF330CE39FE2798FAB80BA4E61559EB2551E67B07279AE8D51FA98F2CC99546
- 031A3D6E5FF329993F631D80B52227A6D7929F9BAEA459D1D73BE8DC3330D6B8
- 1AD206641414DA5A6224E1E8ECA47779660955D532EF642F1371BD74331A14FA
- 9C27A4439F5D88777DAE1B65FD230D11485786B9363D65FD35C1EB4B9817427E
- 9F80C335C05BD53E23B2A934132FB23662B71406C2B14698F38AF0E9EB9473E8
- E3C8655BD686D6F858A5DA3F27B04511E37E0195B5C0A00AD6003FE5259758F0
- 3AD1843C15125218CCB6AD707FF34EAC93973217041154ECF608D8770E188BD8
- 5A01A8A1DEC5F60CF4980CB0A890E8A47AFFF477EC3F037C8EBE975F006ADC37
- 60A7351E3D061DE222C522A5270047AD82DBAB27B21AC09EDA373525E9A52BCB
- 7E5F4CB4822509BE80848AB3C0C09A806380EE7CA1BDC55EB4CDE17AF2984932
- 75A60CCA088739742A84CE1E49C1010730F41BA03B27CD595C517CB1FFF92B04
- E6035AF142101DCB12DA743AB413243FA468331D0F01E51780D1154057AAF148
- D92E7BE794778E8DB92634C901116FA6451CAA27214EC06802AE5227AA839ED2
- 45A0729AC6A406182DD9329C10A7B7F57D18D63A93DF99D92076905F4FB4DF56
- A08C20ED9476027CD1209C7BD9FBDC947BC1C0E2C9596A4B003E27E2F8E9301E
- AEB507B700334968A6631D019C759C5F627780822413BA194312CDFB41958C13
- 7FDB4052739000430ECEDD913F313B568F9B8B326AC8F7CCBFAEB27A073F0058
- 5538F0EAB25B380000000049454E44AE426082}
- Name = 'PngImage3'
- Background = clWindow
- end
- item
- PngImage.Data = {
- 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
- 610000000970485973000017120000171201679FD2520000011F4944415478DA
- 63FCFFFF3F03258091620390394975ABC1A6BD79FB8561D3D4444642E220CB31
- 0C985113C8A0E6D6C4F0E040132321711403408A40367CFCF28DE1E1C3970C7A
- DA8A60DB708963350064CBF6938F18966C3EC770FAD425B06DB8C409BA000440
- B68908F330A08B631800D23CB73184E1D9CB4F0C775EFD6598B2641FD8A68208
- 2F864BCF1E33A0CB71BF7AC2B0604101380619571EBDFB7FE7CE730CD9518E60
- D3F79CB8C770E6DA23B0013017609373501062983F3F9F111E4820F0F8C52730
- FDFEED5B30CDC2FC91C1CEDA860197FCFDFD8D8CF040DA77EE39C395DBAF182E
- DF7DC370F0C051ACD188AE66901A70F2F27D94B8C666004C0DDC801F3F7F323C
- 7DF191E1D78F9F0CCF5F7E40896B9801D8D4800DA0343702001BEF6EF0E3CC7C
- BD0000000049454E44AE426082}
- Name = 'PngImage4'
- Background = clWindow
- end
- item
- PngImage.Data = {
- 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
- 610000000970485973000017120000171201679FD252000002234944415478DA
- A5934F4814511CC7BF6BBAB0AD97225B2A2B4B88ECB014861241ED2190FE9017
- 2D15843A74E8E0A14D3282608935920E092D7A10A44C25A843497FEDA0EB422D
- 2DE6A2F647ADA5C542A6DD76DB6CC79979F3DE34F3CA99C4BAB40F1EEF0DEF7D
- 3FDFEFFC783F9BA669C865D8EE0FBDCE89C001473D3BF8473631861FB36FF9BE
- 7063199C45BBCC8B4C4FAAAA0C44A5E6ACAA3F67010CF19748000BDF0984440A
- C2FC1CF61F0F605DE91EA894E17CAFB2C4B9246F18DD7D03BF0087F76E46FCB9
- 1FDF3EC640A97EAA5164321924A5146A5A22A6A391C0E971724097F7B1053858
- B90633835E40B461A5C38115A010B322C6E2D3A83E1BE6E24B7781D676070A1A
- 9A40FAAFA3270A74569D5E04B8F039E4835D96757740210A24710173EA6A941F
- BBC69D676E3BF169EB3892E37DC86B6EE3294C805103E1553FB21F9EE800BD58
- 84605E54C04AAA515A51CBC5EE230108D38F7073A402EB7D3EC83D7FFC820108
- C506111BEEC07666D713C81895800DBB1BB0E94D9D2936668DBF180F9E85118A
- 4C5880E23205CD431791FA1AC749D70130C2702B1944A73DBA4CECA96BE5F12B
- DD6B2D4098DEC1C3A91148ABD228CC1640AF223A94977F7526BFDFC2E8C43B0B
- 7043F023369B002D92A0E48BF0CA67B09334C2B5EDD032E7C5B1244153B016E9
- B4601E5E75B7E344633DA2DDF95C3CF0F40577A54CE32BD3D7C9A9F716605FF9
- 16F4DE0B9A80B60BA7CC7DCBE5AE7FF68109F05D09FC7F33E5DACE3F0109DB53
- BED36F80890000000049454E44AE426082}
- Name = 'PngImage5'
- Background = clWindow
- end>
- PngOptions = [pngBlendOnDisabled, pngGrayscaleOnDisabled]
- Left = 24
- Top = 16
- Bitmap = {}
- end
- object TBXSwitcher: TTBXSwitcher
- Theme = 'Default'
- Left = 24
- Top = 80
- end
- object StyleManager: TJvNavPaneStyleManager
- Colors.ButtonColorFrom = clWhite
- Colors.ButtonColorTo = 12435133
- Colors.ButtonHotColorFrom = 13009540
- Colors.ButtonHotColorTo = 13009540
- Colors.ButtonSelectedColorFrom = 14602190
- Colors.ButtonSelectedColorTo = 14602190
- Colors.SplitterColorFrom = 13026246
- Colors.SplitterColorTo = 9211532
- Colors.DividerColorFrom = 15725551
- Colors.DividerColorTo = 13026246
- Colors.HeaderColorFrom = 8684164
- Colors.HeaderColorTo = 8684164
- Colors.FrameColor = 8684676
- Colors.ToolPanelHeaderColorFrom = clWhite
- Colors.ToolPanelHeaderColorTo = 12435133
- Fonts.NavPanelFont.Charset = DEFAULT_CHARSET
- Fonts.NavPanelFont.Color = clWindowText
- Fonts.NavPanelFont.Height = -13
- Fonts.NavPanelFont.Name = 'Tahoma'
- Fonts.NavPanelFont.Style = []
- Fonts.NavPanelHotTrackFont.Charset = DEFAULT_CHARSET
- Fonts.NavPanelHotTrackFont.Color = clWindow
- Fonts.NavPanelHotTrackFont.Height = -13
- Fonts.NavPanelHotTrackFont.Name = 'Tahoma'
- Fonts.NavPanelHotTrackFont.Style = []
- Fonts.DividerFont.Charset = DEFAULT_CHARSET
- Fonts.DividerFont.Color = clWindowText
- Fonts.DividerFont.Height = -11
- Fonts.DividerFont.Name = 'Tahoma'
- Fonts.DividerFont.Style = []
- Fonts.HeaderFont.Charset = DEFAULT_CHARSET
- Fonts.HeaderFont.Color = clWindow
- Fonts.HeaderFont.Height = -16
- Fonts.HeaderFont.Name = 'Arial'
- Fonts.HeaderFont.Style = [fsBold]
- Theme = nptCustom
- Left = 104
- Top = 80
- end
- object ROChannel: TROWinInetHTTPChannel
- OnFailure = ROChannelFailure
- OnException = ROChannelFailure
- UserAgent = 'RemObjects SDK'
- TargetURL = 'http://localhost:8099/bin'
- Login.Username = 'zvg'
- Login.Password = 'zeus'
- KeepConnection = True
- OnProgress = ROChannelProgress
- ServerLocators = <>
- DispatchOptions = []
- Left = 330
- Top = 24
- end
- object cxIntl: TcxIntl
- Connected = True
- cxLibrary.CantCreateRegistryKey = 'No se puede crear la llave de registro : \%s'
- PageControl2.ImageListIndexError = 'El '#237'ndice (%d) deber'#225' estar entre 0 y %d'
- PageControl2.NoBaseImages = 'BaseImages no est'#225' asignado'
- PageControl2.NoRegisteredStyles = 'No hay estilos registrados'
- PageControl2.PageIndexError = '%d es un valor inv'#225'lido para PageIndex, debe estar entre 0 y %d'
- PageControl2.PainterClassError = 'La clase PCPainter es nula'
- PageControl2.StandardStyleError = '%s es un estilo est'#225'ndar no soportado'
- PageControl2.StyleNameError = '%s es un nombre de estilo no registrado'
- PageControl2.TabCountEqualsZero = 'Tabs.Count = 0'
- PageControl2.TabIndexError = 'El '#237'ndice de la pesta'#241'a (%d) est'#225' fuera de l'#237'mites'
- PageControl2.TabVisibleIndexOutsOfBounds = 'Propiedad TabVisibleIndex (%d) deber'#225' estar entre 0 y %d'
- PageControl2.VisibleTabListEmpty = 'No hay pesta'#241'as visibles'
- QuantumGrid5.GridRecursiveLevels = 'No se pueden crear niveles recursivos'
- QuantumGrid5.GridDeletingConfirmationCaption = 'Confirmar'
- QuantumGrid5.GridDeletingFocusedConfirmationText = #191'Borrar registro?'
- QuantumGrid5.GridDeletingSelectedConfirmationText = #191'Borrar todos los registros seleccionados?'
- QuantumGrid5.GridNoDataInfoText = ''
- QuantumGrid5.GridNewItemRowInfoText = 'Haga click aqu'#237' para agregar una nueva l'#237'nea'
- QuantumGrid5.GridFilterIsEmpty = ''
- QuantumGrid5.GridCustomizationFormCaption = 'Personalizaci'#243'n'
- QuantumGrid5.GridCustomizationFormColumnsPageCaption = 'Columnas'
- QuantumGrid5.GridGroupByBoxCaption = 'Arrastre una columna aqu'#237' para agrupar por dicha columna'
- QuantumGrid5.GridFilterCustomizeButtonCaption = 'Personalizar...'
- QuantumGrid5.GridColumnsQuickCustomizationHint = 'Haga click aqu'#237' para seleccionar las columas visibles'
- QuantumGrid5.GridCustomizationFormBandsPageCaption = 'Bandas'
- QuantumGrid5.GridBandsQuickCustomizationHint = 'Haga click aqu'#237' para seleccionar las bandas visibles'
- QuantumGrid5.GridCustomizationFormRowsPageCaption = 'Rows'
- QuantumGrid5.GridConverterIntermediaryMissing = 'Omiti'#243' un componente intermediario!'
- QuantumGrid5.GridConverterNotExistGrid = 'cxGrid no existe'
- QuantumGrid5.GridConverterNotExistComponent = 'El componente no existe'
- QuantumGrid5.ImportErrorCaption = 'Error al importar'
- QuantumGrid5.NotExistGridView = 'No existe la vista del grid'
- QuantumGrid5.NotExistGridLevel = 'No existe un nivel de grid activo'
- QuantumGrid5.CantCreateExportOutputFile = 'No se puede crear el archivo de exportaci'#243'n'
- QuantumGrid5.EditRepositoryExtLookupComboBoxItem =
- 'ExtLookupComboBox|Representa un ultra avanzado control de busque' +
- 'da (lookup) usando el QuantumGrid como su control de despliegue'
- Navigator.NavigatorHint_First = 'Primer registro'
- Navigator.NavigatorHint_Prior = 'Registro anterior'
- Navigator.NavigatorHint_PriorPage = 'P'#225'gina anterior'
- Navigator.NavigatorHint_Next = 'Siguiente registro'
- Navigator.NavigatorHint_NextPage = 'Siguiente p'#225'gina'
- Navigator.NavigatorHint_Last = #218'ltimo registro'
- Navigator.NavigatorHint_Insert = 'Insertar registro'
- Navigator.NavigatorHint_Delete = 'Borrar registro'
- Navigator.NavigatorHint_Edit = 'Editar registro'
- Navigator.NavigatorHint_Post = 'Grabar edici'#243'n'
- Navigator.NavigatorHint_Cancel = 'Cancelar edici'#243'n'
- Navigator.NavigatorHint_Refresh = 'Actualizar datos'
- Navigator.NavigatorHint_SaveBookmark = 'Guardar Marca'
- Navigator.NavigatorHint_GotoBookmark = 'Volver a Marca'
- Navigator.NavigatorHint_Filter = 'Filtrar datos'
- Navigator.Navigator_DeleteRecordQuestion = #191'Desea borrar este el registro?'
- Editors5.EditDateConvertError = 'El valor no se puede convertir a fecha'
- Editors5.EditInvalidRepositoryItem = 'Elemento de repositorio no v'#225'lido'
- Editors5.EditNumericValueConvertError = 'No se puede convertir a valor num'#233'rico'
- Editors5.EditPopupCircularReferencingError = 'Referencia circular no permitida'
- Editors5.EditPostError = 'Ocurri'#243' un error durante el grabado del valor de edici'#243'n'
- Editors5.EditTimeConvertError = 'No se puede convertir a valor de tiempo'
- Editors5.EditValidateErrorText = 'Valor inv'#225'lido. Use la tecla de escape para cancelar cambios'
- Editors5.EditValueOutOfBounds = 'Valor fuera de l'#237'mites'
- Editors5.EditCheckBoxChecked = 'True'
- Editors5.EditCheckBoxUnchecked = 'False'
- Editors5.TextTrue = 'True'
- Editors5.TextFalse = 'False'
- Editors5.BlobButtonOK = '&Aceptar'
- Editors5.BlobButtonCancel = '&Cancelar'
- Editors5.BlobButtonClose = '&Cerrar'
- Editors5.BlobMemo = '(MEMO)'
- Editors5.BlobMemoEmpty = '(memo)'
- Editors5.BlobPicture = '(IM'#193'GEN)'
- Editors5.BlobPictureEmpty = '(im'#225'gen)'
- Editors5.MenuItemCaptionCut = 'Cor&tar'
- Editors5.MenuItemCaptionCopy = '&Copiar'
- Editors5.MenuItemCaptionPaste = '&Pegar'
- Editors5.MenuItemCaptionDelete = '&Borrar'
- Editors5.MenuItemCaptionLoad = '&Leer...'
- Editors5.MenuItemCaptionSave = 'Guardar &Como...'
- Editors5.DatePopupClear = 'Limpiar'
- Editors5.DatePopupNow = 'Ahora'
- Editors5.DatePopupOK = 'Aceptar'
- Editors5.DatePopupToday = 'Hoy'
- Editors5.DateError = 'Fecha inv'#225'lida'
- Editors5.DateToday = 'hoy'
- Editors5.DateYesterday = 'ayer'
- Editors5.DateTomorrow = 'ma'#241'ana'
- Editors5.DateSunday = 'Domingo'
- Editors5.DateMonday = 'Lunes'
- Editors5.DateTuesday = 'Martes'
- Editors5.DateWednesday = 'Mi'#233'rcoles'
- Editors5.DateThursday = 'Jueves'
- Editors5.DateFriday = 'Viernes'
- Editors5.DateSaturday = 'S'#225'bado'
- Editors5.DateFirst = 'Primero'
- Editors5.DateSecond = 'segundo'
- Editors5.DateThird = 'tercero'
- Editors5.DateFourth = 'Cuarto'
- Editors5.DateFifth = 'Quinto'
- Editors5.DateSixth = 'sexto'
- Editors5.DateSeventh = 's'#233'ptimo'
- Editors5.DateBOM = 'bom'
- Editors5.DateEOM = 'eom'
- Editors5.DateNow = 'ahora'
- Editors5.CalcError = 'Error'
- Editors5.HyperLinkPrefix = 'http://'
- Editors5.HyperLinkDoubleSlash = '//'
- Editors5.EditRepositoryBlobItem = 'BlobEdit|Representa el editor de BLOB'
- Editors5.EditRepositoryButtonItem =
- 'ButtonEdit|Representa un control de edici'#243'n con controles incrus' +
- 'tados'
- Editors5.EditRepositoryCalcItem =
- 'CalcEdit|Representa un control de edici'#243'n con una ventana de cal' +
- 'culadora desplegable'
- Editors5.EditRepositoryCheckBoxItem =
- 'CheckBox|Representa un control de caja de marca que permite sele' +
- 'ccionar una opci'#243'n'
- Editors5.EditRepositoryComboBoxItem = 'ComboBox|Representa el editor de la caja combo'
- Editors5.EditRepositoryCurrencyItem =
- 'CurrencyEdit|Representa un editor que habilita la edici'#243'n de val' +
- 'ores monetarios'
- Editors5.EditRepositoryDateItem =
- 'DateEdit|Representa un control de edici'#243'n con un calendario desp' +
- 'legable'
- Editors5.EditRepositoryHyperLinkItem = 'HyperLink|Representa un editor de texto de hiperv'#237'nculos'
- Editors5.EditRepositoryImageComboBoxItem =
- 'ImageComboBox|Representa un editor que muestra una lista de im'#225'g' +
- 'enes y texto en la ventana desplegable'
- Editors5.EditRepositoryImageItem = 'Image|Representa un editor de im'#225'genes'
- Editors5.EditRepositoryLookupComboBoxItem = 'LookupComboBox|Representa una caja de b'#250'squeda'
- Editors5.EditRepositoryMaskItem = 'MaskEdit|Representa un control de edici'#243'n gen'#233'rico con m'#225'scara'
- Editors5.EditRepositoryMemoItem =
- 'Memo|Representa un control de edici'#243'n que permite editar datos m' +
- 'emo'
- Editors5.EditRepositoryMRUItem =
- 'MRUEdit|Representa un editor de texto mostrando la lista de los ' +
- 'elementos m'#225's recientemente usados (MRU) en una ventana desplega' +
- 'ble'
- Editors5.EditRepositoryPopupItem =
- 'PopupEdit|Representa un control de edici'#243'n con una lista despleg' +
- 'able'
- Editors5.EditRepositorySpinItem = 'SpinEdit|Representa un editor de incrementos/decrementos (spin)'
- Editors5.EditRepositoryRadioGroupItem = 'RadioGroup|Represents a group of radio buttons'
- Editors5.EditRepositoryTextItem = 'TextEdit|Representa un editor de texto de l'#237'nea sencilla'
- Editors5.EditRepositoryTimeItem = 'TimeEdit|Representa un editor mostrando valores de tiempo'
- Editors5.RegExprLine = 'L'#237'nea'
- Editors5.RegExprChar = 'Char'
- Editors5.RegExprNotAssignedSourceStream = 'No se ha asignado el stream fuente'
- Editors5.RegExprEmptySourceStream = 'El stream or'#237'gen est'#225' vac'#237'o'
- Editors5.RegExprCantUsePlusQuantifier = 'El cuantificador '#39'+'#39' no puede aplicarse aqu'#237
- Editors5.RegExprCantUseStarQuantifier = 'El cuantificador '#39'*'#39' no puede aplicarse aqu'#237
- Editors5.RegExprCantCreateEmptyAlt = 'La alternativa no debe estar vac'#237'a'
- Editors5.RegExprCantCreateEmptyBlock = 'El bloque no debe estar vac'#237'o'
- Editors5.RegExprIllegalSymbol = 'S'#237'mbolo no permitido '#39'%s'#39
- Editors5.RegExprIllegalQuantifier = 'Cuantificador no permitido '#39'%s'#39
- Editors5.RegExprNotSupportQuantifier = 'El par'#225'metro cuantificador no es soportado'
- Editors5.RegExprIllegalIntegerValue = 'Valor entero no permitido'
- Editors5.RegExprTooBigReferenceNumber = 'N'#250'mero de referencia demasiado grande'
- Editors5.RegExprCantCreateEmptyEnum = 'No puedo crear enumeraci'#243'n vac'#237'a'
- Editors5.RegExprSubrangeOrder = 'El caracter de inicio del subrango debe ser menor al de fin'
- Editors5.RegExprHexNumberExpected0 = 'Se esperaba n'#250'mero Hexadecimal'
- Editors5.RegExprHexNumberExpected = 'N'#250'mero Hexadecimal esperado pero encontr'#243' '#39'%s'#39
- Editors5.RegExprMissing = 'Falta '#39'%s'#39
- Editors5.RegExprUnnecessary = 'Innecesario '#39'%s'#39
- Editors5.RegExprIncorrectSpace = 'Espacio incorrecto despu'#233's de '#39'\'#39
- Editors5.RegExprNotCompiled = 'Expresi'#243'n regular no compila'
- Editors5.RegExprIncorrectParameterQuantifier = 'Cuantificador de par'#225'metros incorrecto'
- Editors5.RegExprCantUseParameterQuantifier = 'The parameter quantifier cannot be applied here'
- Editors5.MaskEditRegExprError = 'Errores en expresiones regulares:'
- Editors5.MaskEditInvalidEditValue = 'El valor de edici'#243'n es inv'#225'lido'
- Editors5.MaskEditNoMask = 'Ninguno'
- Editors5.MaskEditIllegalFileFormat = 'Formato de archivo ilegal'
- Editors5.MaskEditEmptyMaskCollectionFile = 'El archivo de colecci'#243'n de m'#225'scaras est'#225' vac'#237'o'
- Editors5.MaskEditMaskCollectionFiles = 'Archivos de colecci'#243'n de m'#225'scaras'
- Editors5.SpinEditInvalidNumericValue = 'Valor num'#233'rico no v'#225'lido'
- Datacontroller.DataReadError = 'Error de lectura en or'#237'gen de datos'
- Datacontroller.DataWriteError = 'Error de escritura en or'#237'gen de datos (stream)'
- Datacontroller.DataItemExistError = 'El elemento ya existe'
- Datacontroller.DataRecordIndexError = #205'ndice de registro fuera de rango'
- Datacontroller.DataItemIndexError = #205'ndice de elemento fuera de rango'
- Datacontroller.DataProviderModeError = 'La operaci'#243'n no es soportada en modo de proveedor (provider)'
- Datacontroller.DataInvalidStreamFormat = 'Origen de datos (Stream) inv'#225'lido'
- Datacontroller.DataRowIndexError = #205'ndice del elemento de fila fuera de rango'
- Datacontroller.DataCustomDataSourceInvalidCompare = 'Instrucci'#243'n GetInfoForCompare no implementada'
- Datacontroller.DBDetailFilterControllerNotFound = 'DetailFilterController no encontrado'
- Datacontroller.DBNotInGridMode = 'La controladora de datos no est'#225' en modo de Grid'
- Datacontroller.DBKeyFieldNotFound = 'Campo llave no encontrado'
- Filter.FilterOperatorEqual = 'igual'
- Filter.FilterOperatorNotEqual = 'no es igual'
- Filter.FilterOperatorLess = 'es menor que'
- Filter.FilterOperatorLessEqual = 'es menor o igual que'
- Filter.FilterOperatorGreater = 'es mayor que'
- Filter.FilterOperatorGreaterEqual = 'es mayor o igual que'
- Filter.FilterOperatorLike = 'como'
- Filter.FilterOperatorNotLike = 'no es como'
- Filter.FilterOperatorBetween = 'entre'
- Filter.FilterOperatorNotBetween = 'no entre'
- Filter.FilterOperatorInList = 'en'
- Filter.FilterOperatorNotInList = 'no en'
- Filter.FilterOperatorYesterday = 'es ayer'
- Filter.FilterOperatorToday = 'es hoy'
- Filter.FilterOperatorTomorrow = 'es ma'#241'ana'
- Filter.FilterOperatorLastWeek = 'es '#250'ltima semana'
- Filter.FilterOperatorLastMonth = 'es '#250'ltimo mes'
- Filter.FilterOperatorLastYear = 'es a'#241'o pasado'
- Filter.FilterOperatorThisWeek = 'es esta semana'
- Filter.FilterOperatorThisMonth = 'es este mes'
- Filter.FilterOperatorThisYear = 'es este a'#241'o'
- Filter.FilterOperatorNextWeek = 'es semana siguiente'
- Filter.FilterOperatorNextMonth = 'es mes siguiente'
- Filter.FilterOperatorNextYear = 'es a'#241'o pr'#243'ximo'
- Filter.FilterAndCaption = 'y'
- Filter.FilterOrCaption = 'o'
- Filter.FilterNotCaption = 'no'
- Filter.FilterBlankCaption = 'vac'#237'o'
- Filter.FilterOperatorIsNull = 'es vac'#237'o'
- Filter.FilterOperatorIsNotNull = 'no es vac'#237'o'
- Filter.FilterOperatorBeginsWith = 'comienza con'
- Filter.FilterOperatorDoesNotBeginWith = 'no comienza con'
- Filter.FilterOperatorEndsWith = 'termina con'
- Filter.FilterOperatorDoesNotEndWith = 'no termina con'
- Filter.FilterOperatorContains = 'contiene'
- Filter.FilterOperatorDoesNotContain = 'no contiene'
- Filter.FilterBoxAllCaption = '(Todos)'
- Filter.FilterBoxCustomCaption = '(Personalizado...)'
- Filter.FilterBoxBlanksCaption = '(Vac'#237'os)'
- Filter.FilterBoxNonBlanksCaption = '(No vac'#237'os)'
- Filter.FilterBoolOperatorAnd = 'AND'
- Filter.FilterBoolOperatorOr = 'OR'
- Filter.FilterBoolOperatorNotAnd = 'NOT AND'
- Filter.FilterBoolOperatorNotOr = 'NOT OR'
- Filter.FilterRootButtonCaption = 'Filtro'
- Filter.FilterAddCondition = 'Agregar &Condici'#243'n'
- Filter.FilterAddGroup = 'Agregar &Grupo'
- Filter.FilterRemoveRow = '&Remover Fila'
- Filter.FilterClearAll = 'Limpiar &Todo'
- Filter.FilterFooterAddCondition = 'Agregar una nueva condici'#243'n'
- Filter.FilterGroupCaption = 'aplica a las siguientes condiciones'
- Filter.FilterRootGroupCaption = ''
- Filter.FilterControlNullString = ''
- Filter.FilterErrorBuilding = 'No se puede construir filtro desde el or'#237'gen'
- Filter.FilterDialogCaption = 'Filtro Personalizado'
- Filter.FilterDialogInvalidValue = 'Valor inv'#225'lido'
- Filter.FilterDialogUse = 'Usar'
- Filter.FilterDialogSingleCharacter = 'para representar un caracter sencillo'
- Filter.FilterDialogCharactersSeries = 'para representar cualquier serie de caracteres'
- Filter.FilterDialogOperationAnd = 'Y'
- Filter.FilterDialogOperationOr = 'O'
- Filter.FilterDialogRows = 'Mostrar filas donde:'
- Filter.FilterControlDialogCaption = 'Constructor de Filtro'
- Filter.FilterControlDialogNewFile = 'sinnombre.flt'
- Filter.FilterControlDialogOpenDialogCaption = 'Abrir un filtro existente'
- Filter.FilterControlDialogSaveDialogCaption = 'Grabar el filtro activo a archivo'
- Filter.FilterControlDialogActionSaveCaption = '&Guardar...'
- Filter.FilterControlDialogActionOpenCaption = '&Abrir...'
- Filter.FilterControlDialogActionApplyCaption = '&Aplicar'
- Filter.FilterControlDialogActionOkCaption = 'Aceptar'
- Filter.FilterControlDialogActionCancelCaption = 'Cancelar'
- Filter.FilterControlDialogFileExt = 'flt'
- Filter.FilterControlDialogFileFilter = 'Filtros (*.flt)|*.flt'
- GridPopupMenu.GridNone = 'Ninguno'
- GridPopupMenu.GridSortColumnAsc = 'Ordenar Ascendente'
- GridPopupMenu.GridSortColumnDesc = 'Ordenar Descendente'
- GridPopupMenu.GridClearSorting = 'Clear Sorting'
- GridPopupMenu.GridGroupByThisField = 'Agrupar por este campo'
- GridPopupMenu.GridRemoveThisGroupItem = 'Remover del grupo'
- GridPopupMenu.GridGroupByBox = 'Panel "Agrupar por"'
- GridPopupMenu.GridAlignmentSubMenu = 'Alineaci'#243'n'
- GridPopupMenu.GridAlignLeft = 'Alineaci'#243'n Izquierda'
- GridPopupMenu.GridAlignRight = 'Alineaci'#243'n Derecha'
- GridPopupMenu.GridAlignCenter = 'Alineaci'#243'n Centrada'
- GridPopupMenu.GridRemoveColumn = 'Remover esta columna'
- GridPopupMenu.GridFieldChooser = 'Selector de campos'
- GridPopupMenu.GridBestFit = 'Mejor distribuci'#243'n'
- GridPopupMenu.GridBestFitAllColumns = 'Mejor distribuci'#243'n (Todas las columnas)'
- GridPopupMenu.GridShowFooter = 'Pie'
- GridPopupMenu.GridShowGroupFooter = 'Pies de grupo'
- GridPopupMenu.GridSumMenuItem = 'Sumar'
- GridPopupMenu.GridMinMenuItem = 'M'#237'nimo'
- GridPopupMenu.GridMaxMenuItem = 'M'#225'ximo'
- GridPopupMenu.GridCountMenuItem = 'Contar'
- GridPopupMenu.GridAvgMenuItem = 'Promedio'
- GridPopupMenu.GridNoneMenuItem = 'Ninguno'
- GridExport.UnsupportedExport = 'Tipo de exportaci'#243'n no soportado: %1'
- GridExport.StyleManagerKill =
- 'El administrador de estilo esta siendo utilizado y no puede ser ' +
- 'liberado en este momento'
- GridExport.StyleManagerCreate = 'No se puede crear administrador de estilo'
- GridExport.ExportToHtml = 'Exportar a p'#225'gina Web (*.html)'
- GridExport.ExportToXml = 'Exportar a documento XML (*.xml)'
- GridExport.ExportToText = 'Exportar a formato de texto (*.txt)'
- GridExport.EmptyExportCache = 'Cache de exportaci'#243'n vac'#237'o'
- GridExport.IncorrectUnion = 'Uni'#243'n de celdas incorrecta'
- GridExport.IllegalWidth = 'Ancho de columna ilegal'
- GridExport.InvalidColumnRowCount = 'Conteo de columna o fila inv'#225'lido'
- GridExport.IllegalHeight = 'Alto de fila ilegal'
- GridExport.InvalidColumnIndex = 'El '#237'ndice de columna %d fuera de l'#237'mites'
- GridExport.InvalidRowIndex = 'El '#237'ndice de fila %d est'#225' fuera de l'#237'mites'
- GridExport.InvalidStyleIndex = #205'ndice de estilo %d inv'#225'lido'
- GridExport.ExportToExcel = 'Exportar a MS Excel (*.xls)'
- GridExport.WorkbookWrite = 'Error al escribir el archivo XLS'
- GridExport.InvalidCellDimension = 'Dimensi'#243'n de celda inv'#225'lida'
- GridExport.BoolTrue = 'True'
- GridExport.BoolFalse = 'False'
- Translate.cxLibrary = True
- Translate.PageControl2 = False
- Translate.QuantumGrid5 = True
- Translate.Editors5 = True
- Translate.Datacontroller = True
- Translate.Filter = True
- Translate.GridPopupMenu = True
- Translate.GridExport = True
- Translate.Navigator = True
- Version = '5.0'
- Left = 104
- Top = 16
- end
- object cxIntlPrintSys3: TcxIntlPrintSys3
- Connected = True
- Version = '3.0'
- BtnOK = 'Aceptar'
- BtnOKAccelerated = '&Aceptar'
- BtnCancel = 'Cancelar'
- BtnClose = 'Cerrar'
- BtnApply = '&Aplicar'
- BtnHelp = 'A&yuda'
- BtnFix = '&Arreglar'
- BtnNew = '&Nuevo...'
- BtnIgnore = '&Ignorar'
- BtnYes = '&S'#237
- BtnNo = '&No'
- BtnEdit = '&Editar...'
- BtnReset = '&Restaurar'
- BtnAdd = '&A'#241'adir'
- BtnAddComposition = 'A'#241'adir &Comparativa'
- BtnDefault = '&Defecto...'
- BtnDelete = '&Borrar...'
- BtnDescription = '&Descripci'#243'n...'
- BtnCopy = '&Copiar...'
- BtnYesToAll = 'S'#237' a &Todos'
- BtnRestoreDefaults = '&Rest.Defecto'
- BtnRestoreOriginal = 'Restaurar &Original'
- BtnTitleProperties = 'Prop. del T'#237'tulo...'
- BtnProperties = 'P&ropiedades...'
- BtnNetwork = 'R&ed...'
- BtnBrowse = '&Hojear...'
- BtnPageSetup = 'Config. P'#225'&gina...'
- BtnPrintPreview = 'Vista Pre&via...'
- BtnPreview = '&Ver...'
- BtnPrint = 'Imprimir...'
- BtnOptions = '&Opciones...'
- BtnStyleOptions = 'Opciones de estilo...'
- BtnDefinePrintStyles = '&Definir Estilos...'
- BtnPrintStyles = 'Estilos de Imp.'
- BtnBackground = 'Fondo'
- BtnShowToolBar = 'Mostrar &Herramientas'
- BtnDesign = 'D&ise'#241'o...'
- BtnMoveUp = 'Mover &Arriba'
- BtnMoveDown = 'Mover Aba&jo'
- BtnMoreColors = '&M'#225's Colores...'
- BtnFillEffects = 'Efectos de &Relleno...'
- BtnNoFill = '&Sin Relleno'
- BtnAutomatic = '&Autom'#225'tico'
- BtnNone = '&Ninguno'
- BtnOtherTexture = 'Otras Te&xturas...'
- BtnInvertColors = 'I&nvertir Colores'
- BtnSelectPicture = 'Se&leccionar Imagen...'
- EditReports = 'Editar Informes'
- Composition = 'Composici'#243'n'
- ReportTitleDlgCaption = 'T'#237'tulo del Informe'
- Mode = '&Modo:'
- Text = '&Texto'
- Properties = '&Propiedades'
- AdjustOnScale = '&Ajustar Escala'
- TitleModeNone = 'Ninguno'
- TitleModeOnEveryTopPage = 'En Cada P'#225'gina'
- TitleModeOnFirstPage = 'En Primera P'#225'gina'
- EditDescription = 'Editar Descripci'#243'n'
- Rename = 'Reno&mbrar'
- SelectAll = 'Seleccionar Todo'
- AddReport = 'A'#241'adir Informe'
- AddAndDesignReport = 'A'#241'adir y D&ise'#241'ar Informe...'
- NewCompositionCaption = 'Nueva Composici'#243'n'
- Name0 = '&Nombre:'
- Caption = '&T'#237'tulo:'
- AvailableSources = '&Fuente(s) Disponible(s)'
- OnlyComponentsInActiveForm = 'S'#243'lamente Componentes en Formulario &Activo'
- OnlyComponentsWithoutLinks = 'S'#243'lamente Componentes &sin Enlaces Existentes'
- ItemName = 'Nombre'
- ItemDescription = 'Descripci'#243'n'
- ConfirmDeleteItem = 'Quiere borrar los siguientes elementos: %s ?'
- AddItemsToComposition = 'A'#241'adir Elementos a la Composici'#243'n'
- HideAlreadyIncludedItems = 'Ocultar Elementos Ya &Incluidas'
- AvailableItems = 'Elementos D&isponibles'
- Items = '&Elementos'
- Enable = '&Habilitar'
- Options = 'Opciones'
- Show = 'Mostrar'
- PaintItemsGraphics = '&Pintar Elementos Gr'#225'ficos'
- Description = 'Descripci'#243'n:'
- NewReport = 'Nuevo Informe'
- OnlySelected = 'S'#243'lo &Seleccionados'
- ExtendedSelect = 'Selecci'#243'n &Extendida'
- IncludeFixed = '&Incluir Fijos'
- Fonts = 'Fuentes'
- BtnFont = 'Fue&nte...'
- BtnEvenFont = 'Fuente &Par...'
- BtnOddFont = 'Fuente &Impar...'
- BtnFixedFont = 'Fuente F&ijo...'
- BtnGroupFont = 'Fuente de Gru&po...'
- BtnChangeFont = 'Cambiar Fue&nte...'
- Font = 'Fuente'
- OddFont = 'Fuente Impar'
- EvenFont = 'Fuente Par'
- PreviewFont = 'Fuente Vista Prev.'
- CaptionNodeFont = 'Fuente T'#237'tulo del Nivel'
- GroupNodeFont = 'Fuente T'#237'tulos de Grupo'
- GroupFooterFont = 'Fuente Pies de Grupo'
- HeaderFont = 'Fuente Cabecera'
- FooterFont = 'Fuente Pie'
- BandFont = 'Fuente Groups'
- Transparent = '&Transparente'
- FixedTransparent = 'Transparente Fijo'
- CaptionTransparent = 'T'#237'tulo Transparente'
- GroupTransparent = 'Grupo Transparente'
- GraphicAsTextValue = '(GRAPHIC)'
- Colors = 'Colores'
- Color = 'Co&lor:'
- OddColor = 'Co&lor Impar:'
- EvenColor = 'Color Par:'
- PreviewColor = 'Color V.&Previa:'
- BandColor = 'Color &Grupos:'
- LevelCaptionColor = 'Color T'#237'tulo Ni&vel:'
- HeaderColor = 'Color Cab&ecera:'
- GroupNodeColor = 'Color &Nodo Grupo:'
- GroupFooterColor = 'Color Pie &Grupo:'
- FooterColor = 'Color P&ie:'
- FixedColor = 'Color F&ijo:'
- GroupColor = 'Color Gru&po:'
- CaptionColor = 'Color T'#237'tulo:'
- GridLinesColor = 'Color L'#237'nea &Rejilla:'
- Bands = '&Grupos'
- LevelCaptions = 'T'#237'tulo Niveles'
- Headers = 'Cab&eceras'
- Footers = 'P&ies&'
- GroupFooters = 'Pies de &Grupos'
- Preview = 'Vista Pre&via'
- PreviewLineCount = 'N'#250'm.L'#237'neas V.Previa:'
- AutoCalcPreviewLineCount = 'A&uto-Calcular L'#237'neas V.Previa'
- Grid = 'Re&jilla&'
- NodesGrid = '&Nodos de Rejilla'
- GroupFooterGrid = 'Rejilla de Gru&pos Pie'
- StateImages = 'Imagenes de E&stado'
- Images = '&Imagenes'
- TextAlign = '&Alineaci'#243'n Texto'
- TextAlignHorz = 'Hori&zontal'
- TextAlignVert = '&Vertical'
- TextAlignLeft = 'Izquierda'
- TextAlignCenter = 'Centrado'
- TextAlignRight = 'Derecha'
- TextAlignTop = 'Superior'
- TextAlignVCenter = 'Centrado'
- TextAlignBottom = 'Inferior'
- BorderLines = 'L'#237'neas de &Borde'
- HorzLines = 'L'#237'neas Hori&zontales'
- VertLines = 'L'#237'neas &Verticales'
- FixedHorzLines = 'L'#237'neas Horizontales Fi&jas'
- FixedVertLines = 'L'#237'neas Verticales Fij&as'
- FlatCheckMarks = 'Cajas de Verificaci'#243'n P&lanas'
- CheckMarksAsText = '&Mostrar Cajas Verificaci'#243'n como Text'
- RowAutoHeight = 'Altura &Fila Auto.'
- EndEllipsis = '&Puntos Suspens.'
- DrawBorder = '&Dibujar Borde'
- FullExpand = '&Expandir Todo'
- BorderColor = 'Color &Borde:'
- AutoNodesExpand = 'Expandir N&odos'
- ExpandLevel = 'Expandir &Niveles:'
- FixedRowOnEveryPage = 'Filas Fijas en &Cada P'#225'gina'
- DrawMode = '&Modo Dibujo:'
- DrawModeStrict = 'Estricto'
- DrawModeOddEven = 'Modo Filas Par/Impar'
- DrawModeChess = 'Modo '#39'Ajedrez'#39
- DrawModeBorrow = 'Prestar de Fuente'
- ThreeDEffects = 'Efectos 3D'
- Use3DEffects = 'Usar Efectos &3D'
- Soft3D = '3D "Suave"'
- Behaviors = 'Comportamiento'
- Miscellaneous = 'Miscelaneo'
- OnEveryPage = 'En Cada P'#225'gina'
- NodeExpanding = 'Expansi'#243'n de Nodos'
- Selection = 'Selecci'#243'n'
- NodeAutoHeight = 'Altura &Nodo Auto.'
- TransparentGraphics = 'Gr'#225'ficos &Transparentes'
- AutoWidth = 'An&chura Auto.'
- DisplayGraphicsAsText = 'Mostrar Gr'#225'fico Como &Texto'
- TransparentColumnGraphics = '&Gr'#225'ficos Transparentes'
- BandsOnEveryPage = 'Grupos En C&ada P'#225'gina'
- HeadersOnEveryPage = 'Cabeceras en Cada &P'#225'gina'
- FootersOnEveryPage = 'Pies en Ca&da P'#225'gina'
- Graphics = 'Gr'#225'ficos'
- OutOfResources = 'Out of Resources'
- FileAlreadyExists = 'Fichero "%s" Ya Existe.'
- ConfirmOverWrite = 'Fichero "%s" ya existe. '#191'Sobreescribir?'
- InvalidFileName = 'Nombre No V'#225'lido "%s"'
- RequiredFileName = 'Entrar nombre de fichero.'
- OutsideMarginsMessage =
- 'Uno o m'#225's margenes est'#225'n fuera del area de impresi'#243'n de la p'#225'gin' +
- 'a.'
- OutsideMarginsMessage2 =
- 'Uno o m'#225's margenes est'#225'n fuera del area de impresi'#243'n de la p'#225'gin' +
- 'a.'
- InvalidMarginsMessage = 'Uno o m'#225's margenes tiene valores no v'#225'lidos.'
- InvalidMargins = 'Uno o m'#225's valores de los margenes no es v'#225'lido'
- OutsideMargins =
- 'Uno o m'#225's margenes se ha establecido fuera del area de impresi'#243'n' +
- ' de la p'#225'gina'
- ThereAreNowItemsForShow = 'No existen elementos en '#233'sta vista'
- PageBackground = 'Fondo de P'#225'gina'
- PenColor = 'Color del L'#225'piz'
- FontColor = 'Color del Fuente'
- BrushColor = 'Color de la Brocha'
- HighLight = 'HighLight'
- ColorBlack = 'Negro'
- ColorDarkRed = 'Rojo Oscuro'
- ColorRed = 'Rojo'
- ColorPink = 'Rosa'
- ColorRose = 'Rosado'
- ColorBrown = 'Marr'#243'n'
- ColorOrange = 'Naranja'
- ColorLightOrange = 'Naranja Claro'
- ColorGold = 'Oro'
- ColorTan = 'Dorado'
- ColorOliveGreen = 'Verde Oliva'
- ColorDrakYellow = 'Amarillo Oscuro'
- ColorLime = 'Lima'
- ColorYellow = 'Amarillo'
- ColorLightYellow = 'Amarillo Claro'
- ColorDarkGreen = 'Verde Oscuro'
- ColorGreen = 'Verde'
- ColorSeaGreen = 'Verde Mar'
- ColorBrighthGreen = 'Verde Florecente'
- ColorLightGreen = 'Verde Claro'
- ColorDarkTeal = 'VerdeAzul Oscuro'
- ColorTeal = 'VerdeAzul'
- ColorAqua = 'Aqua'
- ColorTurquoise = 'Turquesa'
- ColorLightTurquoise = 'Turquesa Claro'
- ColorDarkBlue = 'Azul Oscuro'
- ColorBlue = 'Azul'
- ColorLightBlue = 'Azul Claro'
- ColorSkyBlue = 'Azul Cielo'
- ColorPaleBlue = 'Azul P'#225'lido'
- ColorIndigo = 'Indigo'
- ColorBlueGray = 'Azul Gris'
- ColorViolet = 'Violeta'
- ColorPlum = 'Granate'
- ColorLavender = 'Lav'#225'nder'
- ColorGray80 = 'Gris-80%'
- ColorGray50 = 'Gris-50%'
- ColorGray40 = 'Gris-40%'
- ColorGray25 = 'Gris-25%'
- ColorWhite = 'Blanco'
- Texture = '&Textura'
- Pattern = '&Dibujo'
- Picture = '&Im'#225'gen'
- Foreground = '&Primer Plano'
- Background = '&Fondo'
- Sample = 'Ejemplo:'
- FEFCaption = 'Efectos de Relleno'
- PaintMode = '&Modo Pintar'
- PaintModeCenter = 'Centrar'
- PaintModeStretch = 'Estirar'
- PaintModeTile = 'Mosaico'
- PaintModeProportional = 'Proporcional'
- PatternGray5 = '5%'
- PatternGray10 = '10%'
- PatternGray20 = '20%'
- PatternGray25 = '25%'
- PatternGray30 = '30%'
- PatternGray40 = '40%'
- PatternGray50 = '50%'
- PatternGray60 = '60%'
- PatternGray70 = '70%'
- PatternGray75 = '75%'
- PatternGray80 = '80%'
- PatternGray90 = '90%'
- PatternLightDownwardDiagonal = 'Light downward diagonal'
- PatternLightUpwardDiagonal = 'Light upward diagonal'
- PatternDarkDownwardDiagonal = 'Dark downward diagonal'
- PatternDarkUpwardDiagonal = 'Dark upward diagonal'
- PatternWideDownwardDiagonal = 'Wide downward diagonal'
- PatternWideUpwardDiagonal = 'Wide upward diagonal'
- PatternLightVertical = 'Light vertical'
- PatternLightHorizontal = 'Light horizontal'
- PatternNarrowVertical = 'Narrow vertical'
- PatternNarrowHorizontal = 'Narrow horizontal'
- PatternDarkVertical = 'Dark vertical'
- PatternDarkHorizontal = 'Dark horizontal'
- PatternDashedDownward = 'Dashed downward'
- PatternDashedUpward = 'Dashed upward'
- PatternDashedVertical = 'Dashed vertical'
- PatternDashedHorizontal = 'Dashed horizontal'
- PatternSmallConfetti = 'Small confetti'
- PatternLargeConfetti = 'Large confetti'
- PatternZigZag = 'Zig zag'
- PatternWave = 'Wave'
- PatternDiagonalBrick = 'Diagonal brick'
- PatternHorizantalBrick = 'Horizontal brick'
- PatternWeave = 'Weave'
- PatternPlaid = 'Plaid'
- PatternDivot = 'Divot'
- PatternDottedGrid = 'Dottedgrid'
- PatternDottedDiamond = 'Dotted diamond'
- PatternShingle = 'Shingle'
- PatternTrellis = 'Trellis'
- PatternSphere = 'Sphere'
- PatternSmallGrid = 'Small grid'
- PatternLargeGrid = 'Large grid'
- PatternSmallCheckedBoard = 'Small checked board'
- PatternLargeCheckedBoard = 'Large checked board'
- PatternOutlinedDiamond = 'Outlined diamond'
- PatternSolidDiamond = 'Solid diamond'
- TextureNewSprint = 'Newsprint'
- TextureGreenMarble = 'Green marble'
- TextureBlueTissuePaper = 'Blue tissue paper'
- TexturePapyrus = 'Papyrus'
- TextureWaterDroplets = 'Water droplets'
- TextureCork = 'Cork'
- TextureRecycledPaper = 'Recycled paper'
- TextureWhiteMarble = 'White marble'
- TexturePinkMarble = 'Pink marble'
- TextureCanvas = 'Canvas'
- TexturePaperBag = 'Paper bag'
- TextureWalnut = 'Walnut'
- TextureParchment = 'Parchment'
- TextureBrownMarble = 'Brown marble'
- TexturePurpleMesh = 'Purple mesh'
- TextureDenim = 'Denim'
- TextureFishFossil = 'Fish fossil'
- TextureOak = 'Oak'
- TextureStationary = 'Stationary'
- TextureGranite = 'Granite'
- TextureBouquet = 'Bouquet'
- TextureWonenMat = 'Woven mat'
- TextureSand = 'Sand'
- TextureMediumWood = 'Medium wood'
- FSPCaption = 'Vista de Im'#225'gen'
- Width = 'Altura'
- Height = 'Altura'
- BrushDlgCaption = 'Propiedades de la Brocha'
- Style = 'E&stilo:'
- ENFNCaption = 'Escoge Nombre de Fichero'
- EnterNewFileName = 'Introduzca Nuevo Nombre de Fichero'
- DefinePrintStylesCaption = 'Definir Estilos de Impresi'#243'n'
- DefinePrintStylesTitle = 'E&stilos de Impresi'#243'n'
- DefinePrintStylesWarningDelete = #191' Desea borrar "%s" ?'
- DefinePrintStylesWarningClear = #191'Desea borrar todos los estilos existentes?'
- Clear = 'E&liminar...'
- CustomSize = 'Tama'#241'o Personalizado'
- DefaultTray = 'Bandeja de Entrada'
- InvalidPrintDevice = 'La impresora seleccionada no es v'#225'lida'
- NotPrinting = 'La impresora no est'#225' imprimiendo'
- Printing = 'Imprimiendo'
- DeviceOnPort = '%s en %s'
- PrinterIndexError = #205'ndice de Impresora fueera de rango'
- NoDefaultPrintDevice = 'No hay ninguna impresora seleccionada'
- AutoTextDialogCaption = 'Editar Entidades AutoTexto'
- EnterAutoTextEntriesHere = 'Entrar Entidades A&utoTexto Aqu'#237':'
- PrintDialogCaption = 'Imprimir'
- PrintDialogPrinter = 'Impresora'
- PrintDialogName = '&Nombre:'
- PrintDialogStatus = 'Estado:'
- PrintDialogType = 'Tipo:'
- PrintDialogWhere = 'D'#243'nde:'
- PrintDialogComment = 'Comentario:'
- PrintDialogPrintToFile = 'A &Fichero'
- PrintDialogPageRange = 'Rango de P'#225'g.'
- PrintDialogAll = '&Todas'
- PrintDialogCurrentPage = 'P'#225'g. A&ctual'
- PrintDialogSelection = '&Selecci'#243'n'
- PrintDialogPages = '&P'#225'ginas:'
- PrintDialogRangeLegend = 'Entre el n'#250'mero de p'#225'gina o un rango de p'#225'ginas'
- PrintDialogCopies = 'Copias'
- PrintDialogNumberOfPages = 'N&'#250'mero de P'#225'g.:'
- PrintDialogNumberOfCopies = 'N'#250'mero de &Copias:'
- PrintDialogCollateCopies = 'In&tercalar Copias'
- PrintDialogAllPages = 'Todas'
- PrintDialogEvenPages = 'Pares'
- PrintDialogOddPages = 'Impares'
- PrintDialogPrintStyles = 'Est&ilos Impresi'#243'n'
- PrintDialogOpenDlgTitle = 'Elije un Fichero'
- PrintDialogOpenDlgAllFiles = 'Todos los Ficheros'
- PrintDialogOpenDlgPrinterFiles = 'Ficheros de Impresora'
- PrintDialogPageNumbersOutOfRange = 'N'#250'mero de p'#225'gina fuera de rango (%d - %d)'
- PrintDialogInvalidPageRanges = 'Rango de p'#225'ginas no v'#225'lido'
- PrintDialogRequiredPageNumbers = 'Introduzca n'#250'meros de p'#225'ginas'
- PrintDialogNoPrinters = 'No printers are installed.'
- PrintDialogInPrintingState = 'La impresora est'#225' ocupado.'
- PrintDialogPSPaused = 'Pausado'
- PrintDialogPSPendingDeletion = 'Pendiente Borrar'
- PrintDialogPSBusy = 'Ocupado'
- PrintDialogPSDoorOpen = 'Puerta Abierta'
- PrintDialogPSError = 'Error'
- PrintDialogPSInitializing = 'Inicializando'
- PrintDialogPSIOActive = 'E/S Activo'
- PrintDialogPSManualFeed = 'Alimentaci'#243'n Manual'
- PrintDialogPSNoToner = 'Toner Terminado'
- PrintDialogPSNotAvailable = 'No Disponible'
- PrintDialogPSOFFLine = 'Fuera de L'#237'nea'
- PrintDialogPSOutOfMemory = 'Memoria Agotada'
- PrintDialogPSOutBinFull = 'Bandeja de Salida Llena'
- PrintDialogPSPagePunt = 'Page Punt'
- PrintDialogPSPaperJam = 'Papel Enganchado'
- PrintDialogPSPaperOut = 'Sin Papel'
- PrintDialogPSPaperProblem = 'Problema de Papel'
- PrintDialogPSPrinting = 'Imprimiendo'
- PrintDialogPSProcessing = 'Procesando'
- PrintDialogPSTonerLow = 'Toner Bajo'
- PrintDialogPSUserIntervention = 'Intervenci'#243'n del Usuario'
- PrintDialogPSWaiting = 'Esperando'
- PrintDialogPSWarningUp = 'Precalientamiento'
- PrintDialogPSReady = 'Lista'
- PrintDialogPSPrintingAndWaiting = 'Imprimiendo: %d documento(s) esperando'
- LeftMargin = 'Margen Izquierdo'
- TopMargin = 'Margin Superior'
- RightMargin = 'Margin Derecho'
- BottomMargin = 'Margin Inferior'
- GutterMargin = 'Gutter'
- HeaderMargin = 'Cabecera'
- FooterMargin = 'Pie'
- UnitsInches = '"'
- UnitsCentimeters = 'cm'
- UnitsMillimeters = 'mm'
- UnitsPoints = 'pt'
- UnitsPicas = 'pi'
- UnitsDefaultName = 'Predeterminada'
- UnitsInchesName = 'Pulgadas'
- UnitsCentimetersName = 'Centimetros'
- UnitsMillimetersName = 'Milimetros'
- UnitsPointsName = 'Puntos'
- UnitsPicasName = 'Picas'
- PrintPreview = 'Vista Previa'
- ReportDesignerCaption = 'Dise'#241'ador de Informes'
- CompositionDesignerCaption = 'Dise'#241'ador de Composici'#243'n'
- ComponentNotSupportedByLink = 'Component "%s" not supported by TdxComponentPrinter'
- ComponentNotSupported = 'Component "%s" not supported by TdxComponentPrinter'
- PrintDeviceNotReady = 'La impresora no est'#225' instalada o no est'#225' preparada'
- UnableToGenerateReport = 'No se ha podido generar el informe'
- PreviewNotRegistered = 'There is no registered preview form'
- ComponentNotAssigned = '%s'
- PrintDeviceIsBusy = 'Impresora ocupada'
- PrintDeviceError = #161'La impresora ha encontrado un error!'
- MissingComponent = 'Missing "Component" property'
- DataProviderDontPresent = 'There are no Links with Assigned Component in Composition'
- BuildingReport = 'Generando informe: Completado %d%%'
- PrintingReport =
- 'Imprimiendo Informe: Completado %d p'#225'gina(s). Pulse ESC to abort' +
- 'ar...'
- DefinePrintStylesMenuItem = 'Definir E&stilos de Impresi'#243'n...'
- AbortPrinting = #191'Abortar impresi'#243'n?'
- StandardStyle = 'Estilo Estandar'
- FontStyleBold = 'Negrita'
- FontStyleItalic = 'It'#225'lica'
- FontStyleUnderline = 'Subrayado'
- FontStyleStrikeOut = 'Tachado'
- Pt = 'pt.'
- NoPages = '[No p'#225'ginas]'
- PageWidth = 'Anchura P'#225'g'
- WholePage = 'Pag. Completa'
- TwoPages = 'Dos P'#225'ginas'
- FourPages = 'Cuatro P'#225'ginas'
- WidenToSourceWidth = 'Ajustar a Anchura'
- MenuBar = 'MenuBar'
- StandardBar = 'Standard'
- HeaderFooterBar = 'Header and Footer'
- ShortcutMenusBar = 'Shortcut Menus'
- AutoTextBar = 'AutoTexto'
- MenuFile = '&Ficheros'
- MenuFileDesign = '&Dise'#241'o...'
- MenuFilePrint = '&Imprimir...'
- MenuFilePageSetup = 'Con&fig. P'#225'gina...'
- MenuPrintStyles = 'Estilos Impresi'#243'n'
- MenuFileExit = '&Cerrar'
- MenuEdit = '&Editar'
- MenuEditCut = 'Cor&tar'
- MenuEditCopy = '&Copiar'
- MenuEditPaste = '&Pegar'
- MenuEditDelete = '&Borrar'
- MenuEditFind = '&Buscar...'
- MenuEditFindNext = 'Buscar Si&guiente'
- MenuEditReplace = '&Reemplazar...'
- MenuLoad = '&Cargar...'
- MenuPreview = 'V. Pre&via...'
- MenuInsert = '&Insertar'
- MenuInsertAutoText = '&AutoTexto'
- MenuInsertEditAutoTextEntries = 'AutoTe&xto...'
- MenuInsertAutoTextEntries = '&(Lista de Entradas AutoTexto)'
- MenuInsertAutoTextEntriesSubItem = 'In&sertar AutoTexto'
- MenuInsertPageNumber = 'N'#250'm &P'#225'g.'
- MenuInsertTotalPages = '&N'#250'm. de P'#225'g.'
- MenuInsertPageOfPages = 'N'#250'm de P'#225'&g. de P'#225'ginas'
- MenuInsertDateTime = 'Fechay Hora'
- MenuInsertDate = '&Fecha'
- MenuInsertTime = '&Hora'
- MenuInsertUserName = 'Nombre &Usuario'
- MenuInsertMachineName = 'Nombre &Maquina'
- MenuView = '&Vista'
- MenuViewMargins = '&Margenes'
- MenuViewFlatToolBarButtons = 'Botones &Planos'
- MenuViewLargeToolBarButtons = 'Botones &Grandes'
- MenuViewMarginsStatusBar = 'Barra de M&argenes'
- MenuViewPagesStatusBar = 'Barra de E&stado'
- MenuViewToolBars = '&Herramientas'
- MenuViewPagesHeaders = '&Cabeceras de P'#225'gina'
- MenuViewPagesFooters = '&Pies de P'#225'ginas'
- MenuViewSwitchToLeftPart = 'Switch to Left Part'
- MenuViewSwitchToRightPart = 'Switch to Right Part'
- MenuViewSwitchToCenterPart = 'Switch to Center Part'
- MenuViewHFSwitchHeaderFooter = 'Mo&strar Cabecera/Pie'
- MenuViewHFClose = '&Cerrar'
- MenuZoom = '&Aumentar'
- MenuZoomPercent100 = 'Porcien &100'
- MenuZoomPageWidth = '&Anchura P'#225'gina'
- MenuZoomWholePage = 'P'#225'gina C&ompleta'
- MenuZoomTwoPages = '&Dos P'#225'ginas'
- MenuZoomFourPages = '&Cuatro P'#225'ginas'
- MenuZoomMultiplyPages = 'P'#225'ginas &M'#250'ltiples'
- MenuZoomWidenToSourceWidth = 'Aju&star a Anchura'
- MenuZoomSetup = '&Config...'
- MenuPages = '&P'#225'ginas'
- MenuGotoPage = '&Saltar'
- MenuGotoPageFirst = '&Primera P'#225'g.'
- MenuGotoPagePrev = 'P'#225'g. &Anteror'
- MenuGotoPageNext = 'Pr'#243'&xima P'#225'g.'
- MenuGotoPageLast = #218'l&tima P'#225'g.'
- MenuActivePage = 'P'#225'g. Acti&va:'
- MenuFormat = 'F&ormato'
- MenuFormatHeaderAndFooter = '&Cabeceras y Pies'
- MenuFormatAutoTextEntries = 'Entradas &AutoTexto...'
- MenuFormatDateTime = 'Fecha y &Hora...'
- MenuFormatPageNumbering = '&Numeraci'#243'n P'#225'ginas...'
- MenuFormatPageBackground = 'Fon&do...'
- MenuFormatShrinkToPage = '&Reducir a P'#225'g.'
- MenuShowEmptyPages = 'Mostrar P'#225'g. &Vacias'
- MenuFormatHFBackground = 'Fondo de Cabecera/Pie...'
- MenuFormatHFClear = 'Vaciar Texto'
- MenuTools = '&Herramientas'
- MenuToolsCustomize = '&Personalizar...'
- MenuToolsOptions = '&Opciones...'
- MenuHelp = 'A&yuda'
- MenuHelpTopics = '&Temas de Ayuda...'
- MenuHelpAbout = '&Acerca de...'
- MenuShortcutPreview = 'V.Previa'
- MenuShortcutAutoText = 'AutoTexto'
- MenuBuiltInMenus = 'Men'#250's Incorporados'
- MenuShortCutMenus = 'Men'#250's de Atajos'
- MenuNewMenu = 'Men'#250' Nuevo'
- HintFileDesign = 'Dise'#241'ar Informe'
- HintFilePrint = 'Imprimir'
- HintFilePrintDialog = 'Configuarar la Impresora'
- HintFilePageSetup = 'Configurar la P'#225'gina'
- HintFileExit = 'Cerrar Vista Previa'
- HintEditFind = 'Buscar'
- HintEditFindNext = 'Buscar Siguiente'
- HintEditReplace = 'Reemplazar'
- HintInsertEditAutoTextEntries = 'Editar Entradas AutoTexto'
- HintInsertPageNumber = 'Insertar N'#250'mero P'#225'gina'
- HintInsertTotalPages = 'Insertar N'#250'mero de P'#225'ginas'
- HintInsertPageOfPages = 'Insertar P'#225'gina N'#250'mero de P'#225'ginas'
- HintInsertDateTime = 'Insertar Fecha y Hora'
- HintInsertDate = 'Insertar Fecha'
- HintInsertTime = 'Insert Hora'
- HintInsertUserName = 'Insertar Nombre Usuario'
- HintInsertMachineName = 'Insertar Nombre Maquina'
- HintViewMargins = 'Ver Margenes'
- HintViewLargeButtons = 'Ver Botones Grandes'
- HintViewMarginsStatusBar = 'Ver Barra de Esatdo de Margenes'
- HintViewPagesStatusBar = 'Ver Barra de Estado de P'#225'gina'
- HintViewPagesHeaders = 'Vee Cabecera de P'#225'gina'
- HintViewPagesFooters = 'Ver Pie de P'#225'gina'
- HintViewSwitchToLeftPart = 'Cambiar a Cabecera/Pie Izquierda'
- HintViewSwitchToRightPart = 'Cambiar a Cabecera/Pie Derecha'
- HintViewSwitchToCenterPart = 'Cambiar a Cabecera/Pie Centrada'
- HintViewHFSwitchHeaderFooter = 'Cambiar a Cabecera y Pie'
- HintViewHFClose = 'Cerrar'
- HintViewZoom = 'Aumentar'
- HintZoomPercent100 = 'Aumentar al 100%'
- HintZoomPageWidth = 'Aumentar a Anchura de P'#225'gina'
- HintZoomWholePage = 'P'#225'gina Completa'
- HintZoomTwoPages = 'Dos P'#225'ginas'
- HintZoomFourPages = 'Cuatro P'#225'ginas'
- HintZoomMultiplyPages = 'P'#225'ginas M'#250'ltiples'
- HintZoomWidenToSourceWidth = 'Ajustar a la Anchura'
- HintZoomSetup = 'Introducir Factor de Aumento'
- HintFormatDateTime = 'Formato de Fecha y Hora'
- HintFormatPageNumbering = 'Formato de N'#250'mero de P'#225'gina'
- HintFormatPageBackground = 'Fondo'
- HintFormatShrinkToPage = 'Reducir a P'#225'gina'
- HintFormatHFBackground = 'Fondo de Cabecera/Pie'
- HintFormatHFClear = 'Vaciar Texto Cabecera/Pie'
- HintGotoPageFirst = 'Primera P'#225'gina'
- HintGotoPagePrev = 'P'#225'gina Anterior'
- HintGotoPageNext = 'Pr'#243'xima P'#225'gina'
- HintGotoPageLast = #218'ltima P'#225'gina'
- HintActivePage = 'P'#225'gina Activa'
- HintToolsCustomize = 'Personalizar Herramientas'
- HintToolsOptions = 'Opciones'
- HintHelpTopics = 'Temas de Ayuda'
- HintHelpAbout = 'Acerca de'
- PopupMenuLargeButtons = 'Botones &Grandes'
- PopupMenuFlatButtons = 'Botones &Planos'
- PaperSize = 'Tama'#241'o Papel'
- Status = 'Estado'
- StatusReady = 'Lista'
- StatusPrinting = 'Imprimiendo. %d p'#225'gina(s) terminada(s)'
- StatusGenerateReport = 'Generando Informe. %d%% completado.'
- HintDoubleClickForChangePaperSize = 'Doble Clic para Cambiar el Tama'#241'o de P'#225'gina'
- HintDoubleClickForChangeMargins = 'Doble Clic para Cambiar Margenes'
- DTFormatsCaption = 'Fecha y Hora'
- DTFormatsAvailableDateFormats = 'Formatos de &Fecha Disponibes:'
- DTFormatsAvailableTimeFormats = 'Formatos de &Hora Disponibles:'
- DTFormatsAutoUpdate = 'Act. &Autom'#225'tica'
- DTFormatsChangeDefaultFormat =
- 'Confirme que desea cambiar el formato de fecha y hora al "%s" -' +
- ' "%s" ?'
- PNFormatsCaption = 'Formato de N'#250'mero de P'#225'gina'
- PageNumbering = 'Numeraci'#243'n de P'#225'ginas'
- PNFormatsNumberFormat = '&Format N'#250'mero:'
- PNFormatsContinueFromPrevious = '&Continuar desde '#218'ltima Secci'#243'n'
- PNFormatsStartAt = 'Empezar &En:'
- PNFormatsChangeDefaultFormat =
- 'Confirme que desea cambiar el formato de numeraci'#243'n de p'#225'ginas a' +
- 'l "%s" ?'
- ZoomDlgCaption = 'Aumentar'
- ZoomDlgZoomTo = 'Aumentar a'
- ZoomDlgPageWidth = '&Ancho P'#225'g.'
- ZoomDlgWholePage = 'P'#225'g.C&ompleta'
- ZoomDlgTwoPages = '&Dos P'#225'ginas'
- ZoomDlgFourPages = '&Cuatro P'#225'g.'
- ZoomDlgManyPages = '&Varias P'#225'g.:'
- ZoomDlgPercent = 'P&orcien:'
- ZoomDlgPreview = 'Vista'
- ZoomDlgFontPreview = '10pt Times New Romam'
- ZoomDlgFontPreviewString = 'AaBbCcDdEeXxYyZz'
- Pages = 'P'#225'ginas'
- Cancel = 'Cancelar'
- PreferenceDlgCaption = 'Opciones'
- PreferenceDlgTab1 = '&General'
- PreferenceDlgShow = '&Mostrar'
- PreferenceDlgMargins = '&Margenes'
- PreferenceDlgMarginsHints = 'A&yudas Margenes'
- PreferenceDlgMargingWhileDragging = 'Ayudas Margins con A&rrastre'
- PreferenceDlgLargeBtns = 'Botones &Grandes para Barras'
- PreferenceDlgFlatBtns = 'Botones &Planos para Barras'
- PreferenceDlgMarginsColor = '&Color Margenes:'
- PreferenceDlgMeasurementUnits = '&Unidades de Medida:'
- PreferenceDlgSaveForRunTimeToo = 'Gua&rdar en Ejecucci'#243'n tambien'
- PreferenceDlgZoomScroll = 'Despla&zamiento con IntelliMouse'
- PreferenceDlgZoomStep = 'Au&mento:'
- CloneStyleCaptionPrefix = 'Copia (%d) de'
- InvalideStyleCaption = 'Nombre de estilo "%s" existente. Por favor, introduzca otro.'
- PageSetupCaption = 'Configuraci'#243'n de la P'#225'gina'
- StyleName = '&Nombre Estilo:'
- Page = '&P'#225'gina'
- Margins = '&Margenes'
- HeaderFooter = '&Cabecera\Pie'
- Scaling = '&Escala'
- Paper = 'Papel'
- PaperType = 'T&ipo'
- PaperDimension = 'Dimensi'#243'nes'
- PaperWidth = '&Anchura:'
- PaperHeight = 'A<ura:'
- PaperSource = 'Bande&ja'
- Orientation = 'Orientaci'#243'n'
- Portrait = 'N&ormal'
- Landscape = '&Apaisado'
- PrintOrder = 'Orden de Impresi'#243'n'
- DownThenOver = '&Abajo, derecha'
- OverThenDown = '&Derecha, abajo'
- Shading = 'Sombreado'
- PrintUsingGrayShading = 'Imprimir usando sombreado &gris'
- CenterOnPage = 'Centrar'
- Horizontally = 'Hori&zontal'
- Vertically = '&Vertical'
- Header = 'Cabecera'
- BtnHeaderFont = '&Fuente...'
- BtnHeaderBackground = '&Fondo'
- Footer = 'Pie'
- BtnFooterFont = 'Fue&nte...'
- BtnFooterBackground = 'F&ondo'
- CaptionTop = '&Sup.:'
- CaptionLeft = '&Izqu.:'
- CaptionRight = '&Derecha:'
- CaptionBottom = '&Inferior:'
- Header2 = '&Cabec.:'
- Footer2 = '&Pie:'
- Alignment = 'Alineamiento'
- VertAlignment = 'Alineamiento Vertical'
- ReverseOnEvenPages = 'Al &rev'#233's en p'#225'ginas pares'
- AdjustTo = '&Ajustar a:'
- FitTo = 'P'#225'&ginas:'
- PercentOfNormalSize = '% tama'#241'o normal'
- PagesWideBy = 'p'#225'g(s) de &ancho'
- Tall = 'de a<o'
- XOfY = 'De'
- LastPrinted = #218'ltima Impresi'#243'n'
- FileName = 'Fichero'
- FileNameAndPath = 'Fichero y camino'
- PrintedBy = 'Impreso por'
- PrintedOn = 'Impreso el'
- CreatedBy = 'Creado por'
- CreatedOn = 'Creado el'
- Confidential = 'Confidencial'
- HFFunctionNameUnknown = 'Desconocido'
- HFFunctionNamePageNumber = 'N'#250'm. P'#225'gina'
- HFFunctionNameTotalPages = 'P'#225'g. Totales'
- HFFunctionNamePageOfPages = 'P'#225'g. # de P'#225'gs. #'
- HFFunctionNameDateTime = 'Fecha y Hora'
- HFFunctionNameDate = 'Fecha'
- HFFunctionNameTime = 'Hora'
- HFFunctionNameUserName = 'Nombre Usuario'
- HFFunctionNameMachineName = 'Nombre Maquina'
- HFFunctionHintPageNumber = 'Page Number'
- HFFunctionHintTotalPages = 'Total Pages'
- HFFunctionHintPageOfPages = 'Page # of Pages #'
- HFFunctionHintDateTime = 'Date and Time Printed'
- HFFunctionHintDate = 'Date Printed'
- HFFunctionHintTime = 'Time Printed'
- HFFunctionHintUserName = 'User Name'
- HFFunctionHintMachineName = 'Machine Name'
- HFFunctionTemplatePageNumber = 'Page #'
- HFFunctionTemplateTotalPages = 'Total Pages'
- HFFunctionTemplatePageOfPages = 'Page # of Pages #'
- HFFunctionTemplateDateTime = 'Date & Time Printed'
- HFFunctionTemplateDate = 'Date Printed'
- HFFunctionTemplateTime = 'Time Printed'
- HFFunctionTemplateUserName = 'User Name'
- HFFunctionTemplateMachineName = 'Machine Name'
- January = 'Enero'
- February = 'Febrero'
- March = 'Marzo'
- April = 'Abril'
- May = 'Mayo'
- June = 'Junio'
- July = 'Julio'
- August = 'Agosto'
- September = 'Septiembre'
- October = 'Octubre'
- November = 'Noviembre'
- December = 'Diciembre'
- East = 'Este'
- West = 'Oeste'
- South = 'Sur'
- North = 'Norte'
- Total = 'Total'
- Plan = 'Plan'
- SwimmingPool = 'Swimming-pool'
- Administration = 'Administration'
- Park = 'Park'
- CarParking = 'Car-Parking'
- CorporateHeadquarters = 'Corporate'
- SalesAndMarketing = 'Sales and'
- Engineering = 'Engineering'
- FieldOfficeCanada = 'Field Office:'
- OrderNoCaption = 'OrderNo'
- NameCaption = 'Name'
- CountCaption = 'Count'
- CompanyCaption = 'Company'
- AddressCaption = 'Address'
- PriceCaption = 'Price'
- CashCaption = 'Cash'
- Name1 = 'Jennie Valentine'
- Name2 = 'Sam Hill'
- Company1 = 'Jennie Inc.'
- Company2 = 'Daimler-Chrysler AG'
- Address1 = '123 Home Lane'
- Address2 = '9333 Holmes Dr.'
- CountIs = 'Count is: %d'
- Regular = 'Regular'
- Irregular = 'Irregular'
- TLBand = 'Item Data'
- TLColumnName = 'Name'
- TLColumnAxisymmetric = 'Axisymmetric'
- TLColumnItemShape = 'Shape'
- ItemShapeAsText = '(Graphic)'
- Item1Name = 'Cone'
- Item2Name = 'Cylinder'
- Item3Name = 'Pyramid'
- Item4Name = 'Box'
- Item5Name = 'Free Surface'
- Item2Description = 'Axisymmetric geometry figure'
- Item3Description = 'Axisymmetric geometry figure'
- Item4Description = 'Acute-angled geometry figure'
- Item7Description = 'Simple extrusion surface'
- PatternIsNotRegistered = 'Pattern "%s" is not registered'
- SolidEdgePattern = 'Solid'
- ThinSolidEdgePattern = 'Medium Solid'
- MediumSolidEdgePattern = 'Medium Solid'
- ThickSolidEdgePattern = 'Thick Solid'
- DottedEdgePattern = 'Dotted'
- DashedEdgePattern = 'Dashed'
- DashDotDotEdgePattern = 'Dash Dot Dot'
- DashDotEdgePattern = 'Dash Dot'
- SlantedDashDotEdgePattern = 'Slanted Dash Dot'
- MediumDashDotDotEdgePattern = 'Medium Dash Dot Dot'
- HairEdgePattern = 'Hair'
- MediumDashDotEdgePattern = 'Medium Dash Dot'
- MediumDashedEdgePattern = 'Medium Dashed'
- DoubleLineEdgePattern = 'Double Line'
- SolidFillPattern = 'Solid'
- Gray75FillPattern = '75% Gray'
- Gray50FillPattern = '50% Gray'
- Gray25FillPattern = '25% Gray'
- Gray125FillPattern = '12.5% Gray'
- Gray625FillPattern = '6.25% Gray'
- HorizontalStripeFillPattern = 'Horizontal Stripe'
- VerticalStripeFillPattern = 'Vertical Stripe'
- ReverseDiagonalStripeFillPattern = 'Reverse Diagonal Stripe'
- DiagonalStripeFillPattern = 'Diagonal Stripe'
- DiagonalCrossHatchFillPattern = 'Diagonal Cross Hatch'
- ThickCrossHatchFillPattern = 'Thick Cross Hatch'
- ThinHorizontalStripeFillPattern = 'Thin Horizontal Stripe'
- ThinVerticalStripeFillPattern = 'Thin Vertical Stripe'
- ThinReverseDiagonalStripeFillPattern = 'Thin Reverse Diagonal Stripe'
- ThinDiagonalStripeFillPattern = 'Thin Diagonal Stripe'
- ThinHorizontalCrossHatchFillPattern = 'Thin Horizontal Cross Hatch'
- ThinDiagonalCrossHatchFillPattern = 'Thin Diagonal Cross Hatch'
- ShowRowAndColumnHeadings = '&Row and column headings'
- ShowGridLines = 'GridLines'
- SuppressSourceFormats = '&Suppress Source Formats'
- RepeatHeaderRowAtTop = 'Repeat header row at top'
- DataToPrintDoesnotExist =
- 'Can not activate ReportLink because PrintingSystem did not find ' +
- 'anything to print.'
- JanuaryShort = 'Ene'
- FebruaryShort = 'Feb'
- MarchShort = 'Mar'
- AprilShort = 'Abril'
- MayShort = 'Mayo'
- JuneShort = 'Jun'
- JulyShort = 'Jul'
- AugustShort = 'Ago'
- SeptemberShort = 'Sept'
- OctoberShort = 'Oct'
- NovemberShort = 'Nov'
- DecemberShort = 'Dic'
- TechnicalDepartment = 'Technical Department'
- SoftwareDepartment = 'Software Department'
- SystemProgrammers = 'System Programmers'
- EndUserProgrammers = 'EndUser Programmers'
- BetaTesters = 'Beta Testers'
- HumanResourceDepartment = 'Human Resource Department'
- TreeLines = '&L'#237'neas'#193'rbol'
- TreeLinesColor = 'Colore L'#237'neas '#193'rbol:'
- ExpandButtons = 'Botones E&xpansi'#243'n'
- CheckMarks = 'Cajas Verificaci'#243'n'
- TreeEffects = 'Efectos '#193'rbol'
- Appearance = 'Apariencia'
- CarLevelCaption = 'Coches'
- ManufacturerBandCaption = 'Manufacturer Data'
- ModelBandCaption = 'Car Data'
- ManufacturerNameColumnCaption = 'Name'
- ManufacturerLogoColumnCaption = 'Logo'
- ManufacturerCountryColumnCaption = 'Country'
- CarModelColumnCaption = 'Model'
- CarIsSUVColumnCaption = 'SUV'
- CarPhotoColumnCaption = 'Photo'
- CarManufacturerName1 = 'BMW'
- CarManufacturerName2 = 'Ford'
- CarManufacturerName3 = 'Audi'
- CarManufacturerName4 = 'Land Rover'
- CarManufacturerCountry1 = 'Germany'
- CarManufacturerCountry2 = 'United States'
- CarManufacturerCountry3 = 'Germany'
- CarManufacturerCountry4 = 'United Kingdom'
- CarModel1 = 'X5 4WD'
- CarModel2 = 'Excursion'
- CarModel3 = 'S8 Quattro'
- CarModel4 = 'G4 Challenge'
- True = 'True'
- False = 'False'
- Auto = 'Auto'
- Custom = 'Personal.'
- Env = 'Env'
- LookAndFeelFlat = 'Plano'
- LookAndFeelStandard = 'Estandar'
- LookAndFeelUltraFlat = 'UltraPlano'
- ViewTab = 'Vista'
- BehaviorsTab = 'Comportamiento'
- PreviewTab = 'Vista Previa'
- CardsTab = 'Fichas'
- Formatting = 'Formato'
- LookAndFeel = 'Aspecto'
- LevelCaption = '&T'#237'tulo'
- FilterBar = 'Barra de &Filtro'
- Refinements = 'Perfeccionamiento'
- ProcessSelection = 'Procesar &Selecci'#243'n'
- ProcessExactSelection = 'Procesar Selecci'#243'n E&xacta'
- Expanding = 'Despliege'
- Groups = '&Grupos'
- Details = '&Detalles'
- StartFromActiveDetails = 'Empieza desde Detalles Activas'
- OnlyActiveDetails = 'S'#243'lo Detalles Activos'
- Visible = '&Visible'
- PreviewAutoHeight = 'Altura A&utom'#225'tica'
- PreviewMaxLineCount = 'L'#237'neas &M'#225'ximas:'
- Sizes = 'Tama'#241'os'
- KeepSameWidth = 'Manten.Misma Anchura'
- KeepSameHeight = 'Manten.Misma Altura'
- Framing = 'Marco'
- Spacing = 'Espacios'
- Shadow = 'Sombra'
- Depth = '&Profundidad:'
- Position = '&Posici'#243'n'
- Positioning = 'Posicionando'
- Horizontal = 'H&orizontal:'
- Vertical = 'V&ertical:'
- SummaryFormat = 'Recuento = 0'
- CannotUseOnEveryPageMode = 'Cannot Use OnEveryPage Mode'
- IncorrectBandHeadersState = 'Cannot Use BandHeaders OnEveryPage Mode'
- IncorrectHeadersState = 'Cannot Use Headers OnEveryPage Mode'
- IncorrectFootersState = 'Cannot Use Footers OnEveryPage Mode'
- TPicture = 'TPicture'
- Copy = '&Copiar'
- Save = '&Salvar...'
- BaseStyle = 'Estilo Base'
- Rectangle = 'Rectangle'
- Square = 'Square'
- Ellipse = 'Ellipse'
- Circle = 'Circle'
- RoundRect = 'RoundRect'
- RoundSquare = 'RoundSquare'
- HorizontalFillPattern = 'Horizontal'
- VerticalFillPattern = 'Vertical'
- FDiagonalFillPattern = 'FDiagonal'
- BDiagonalFillPattern = 'BDiagonal'
- CrossFillPattern = 'Cross'
- DiagCrossFillPattern = 'DiagCros'
- CyclicIDReferences = 'Cyclic ID references %s and %s'
- LoadReportDataToFileTitle = 'Cargar Informe'
- SaveReportDataToFileTitle = 'Salvar Informe Como'
- InvalidExternalStorage = 'Almacenamiento Externo No V'#225'lido'
- LinkIsNotIncludedInUsesClause = 'ReportFile contains ReportLink "%0:s"'
- InvalidStorageVersion = 'Versi'#243'n de Almacenamiento no V'#225'lido: %d'
- PSReportFiles = 'Ficheros de Informes'
- ReportFileLoadError = 'No se pudo cargar el informe "%s".'
- None = '(Ninguno)'
- ReportDocumentIsCorrupted = '(El fichero no es un informe o esta corrupto)'
- CloseExplorerHint = 'Cerrar Explorador'
- ExplorerCaption = 'Explorador'
- ExplorerRootFolderCaption = 'Ra'#237'z'
- NewExplorerFolderItem = 'Nueva Carpeta'
- CopyOfItem = 'Copia de'
- ReportExplorer = 'Explorer de Informes'
- DataLoadErrorText = 'No se pudo cargar los datos del informe'
- DBBasedExplorerItemDataLoadError = 'No se pudo cargar los datos.'
- FileBasedExplorerItemDataLoadError = 'No se pudo cargar los datos.'
- DeleteNonEmptyFolderMessageText = 'La carpeta "%s" no est'#225' vacia. A'#250'n as'#237' '#191'desea eliminarlo?'
- DeleteFolderMessageText = 'Borrar Carpeta "%s" ?'
- DeleteItemMessageText = 'Borrar elemento "%s" ?'
- CannotRenameFolderText =
- 'Cannot rename folder "%s". A folder with name "%s" already exist' +
- 's. Specify a different name.'
- CannotRenameItemText =
- 'Cannot rename item "%s". An item with name "%s" already exists. ' +
- 'Specify a different name.'
- OverwriteFolderMessageText = 'This folder "%s" already contains folder named "%s".'
- OverwriteItemMessageText = 'This Folder "%s" already contains item named "%s".'
- SelectNewRoot = 'Select new Root Directory where the Reports will be stored'
- InvalidFolderName = 'Nombre de Carpeta no V'#225'lida "%s"'
- InvalidReportName = 'Nombre de Informe no V'#225'lido "%s"'
- ExplorerBar = 'Explorador'
- MenuFileSave = '&Salvar'
- MenuFileSaveAs = 'S&alvar Como...'
- MenuFileLoad = '&Cargar'
- MenuFileClose = '&Descargar'
- HintFileSave = 'Salvar Informe'
- HintFileSaveAs = 'Salvar Informe Como'
- HintFileLoad = 'Cargar Informe'
- HintFileClose = 'Descargar Informe'
- MenuExplorer = 'E&xplorador'
- MenuExplorerCreateFolder = 'Crear &Carpeta'
- MenuExplorerDelete = '&Borrar...'
- MenuExplorerRename = 'Reno&mbrar'
- MenuExplorerProperties = '&Propiedades...'
- MenuExplorerRefresh = 'Refrescar'
- MenuExplorerChangeRootPath = 'Cambiar Ra'#237'z...'
- MenuExplorerSetAsRoot = 'Establecer Como Ra'#237'z'
- MenuExplorerGoToUpOneLevel = 'Subir Un Nivel'
- HintExplorerCreateFolder = 'Crear Nueva Carpeta'
- HintExplorerDelete = 'Borrar'
- HintExplorerRename = 'Renombrar'
- HintExplorerProperties = 'Propiedades'
- HintExplorerRefresh = 'Refrescar'
- HintExplorerChangeRootPath = 'Cambiar Ra'#237'z'
- HintExplorerSetAsRoot = 'Establecder Carpeta Actual Como Ra'#237'z'
- HintExplorerGoToUpOneLevel = 'Subir Un Nivel'
- MenuViewExplorer = 'E&xplorador'
- HintViewExplorer = 'Mostar Explorador'
- Summary = 'Resumen'
- Creator = 'Creado&r:'
- CreationDate = 'Crea&do:'
- MenuViewThumbnails = 'Miniat&uras'
- HintViewThumbnails = 'Mostar Miniaturas'
- MenuFormatTitle = 'T&'#237'tulo...'
- HintFormatTitle = 'Formatear T'#237'tulo del Informe'
- Half = 'Medio'
- PredefinedFunctions = 'Funciones Predefinidos'
- ZoomParameters = '&Par'#225'metros de Aumento'
- WrapData = 'Doblar Datos'
- MenuShortcutExplorer = 'Explorador'
- ExplorerToolBar = 'Explorador'
- MenuThumbnailsSmall = 'Miniaturas &Peque'#241'as'
- MenuThumbnailsLarge = 'Miniaturas &Grandes'
- MenuShortcutThumbnails = 'Miniaturas'
- Buttons = 'Botones'
- BtnHeadersFont = 'Fuente &Cabeceras...'
- HeadersTransparent = 'Cabeceras Transparentes'
- HintListViewDesignerMessage = 'Most Options Are Being Taken Into Account Only In Detailed View'
- ColumnHeaders = 'Cabeceras de &Columnas'
- ReportGroupNullLookAndFeel = 'Null'
- ReportGroupStandardLookAndFeel = 'Standard'
- ReportGroupOfficeLookAndFeel = 'Office'
- ReportGroupWebLookAndFeel = 'Web'
- LayoutGroupDefaultCaption = 'Layout Group'
- LayoutItemDefaultCaption = 'Layout Item'
- CarManufacturerName5 = 'Volkswagen'
- CarManufacturerCountry5 = 'Germany'
- CarModel5 = 'Golf GTI'
- LuxurySedans = 'Luxury Sedans'
- CarManufacturer = 'Manufacturer'
- CarModel = 'Model'
- CarEngine = 'Engine'
- CarTransmission = 'Transmission'
- CarTires = 'Tires'
- Volvo760V12Manufacturer = 'BMW'
- Volvo760V12Model = '760Li V12'
- Volvo760V12Engine =
- '6.0L DOHC V12 438 HP 48V DI Valvetronic 12-cylinder engine with ' +
- '6.0-liter displacement, dual overhead cam valvetrain'
- Volvo760V12Transmission = 'Elec 6-Speed Automatic w/Steptronic'
- Volvo760V12Tires =
- 'P245/45R19 Fr - P275/40R19 Rr Performance. Low Profile tires wit' +
- 'h 245mm width, 19.0" rim'
- BandHeaderStyle = 'CabeceraGrupo'
- CaptionStyle = 'T'#237'tulo'
- CardCaptionRowStyle = 'T'#237'tulo Fila Fichas'
- CardRowCaptionStyle = 'T'#237'tulo Fila Fichas'
- CategoryStyle = 'Categor'#237'a'
- ContentStyle = 'Contenido'
- ContentEvenStyle = 'Contenido Filas Pares'
- ContentOddStyle = 'Contenido Filas Impares'
- FilterBarStyle = 'Barra de Filto'
- FooterStyle = 'Pie'
- FooterRowStyle = 'Pie de Fila'
- GroupStyle = 'Grupo'
- HeaderStyle = 'Cabecera'
- IndentStyle = 'Indentaci'#243'n'
- PreviewStyle = 'Vista Previa'
- SelectionStyle = 'Selecci'#243'n'
- Styles = 'Estilos'
- StyleSheets = 'Hojas de Estilos'
- BtnTexture = '&Textura...'
- BtnTextureClear = 'Elimin&ar'
- BtnColor = 'Co&lor...'
- BtnSaveAs = 'Salvar &Como...'
- BtnRename = '&Renombrar...'
- LoadBitmapDlgTitle = 'Cargar Imagen'
- DeleteStyleSheet = 'Borrar Hoja de Estilos con Nombre "%s"?'
- UnnamedStyleSheet = 'SinNombre'
- CreateNewStyleQueryNamePrompt = 'Entre un Nombre de Hoja de Estilo:'
- StyleSheetNameAlreadyExists = 'Hoja de Estilo "%s" Ya Existe'
- CannotLoadImage = 'No se pudo cargar el imagen "%s"'
- UseNativeStyles = '&Usar Estilo Nativo'
- SuppressBackgroundBitmaps = '&Suprimir Texturas de Fondo'
- ConsumeSelectionStyle = 'Consumir Estilos de Selecci'#243'n'
- Size = 'Tama'#241'o'
- Levels = 'Niveles'
- Unwrap = '&Desdoblar'
- UnwrapTopLevel = 'Desdoblar Nivel Superior'
- RiseActiveToTop = 'Subir Nivel Activo al Princ'#237'pio'
- CannotUseOnEveryPageModeInAggregatedState = 'No se puede usar modo "EnCadaP'#225'gina"'
- Pagination = 'Paginaci'#243'n'
- ByBands = 'Por Grupos'
- ByColumns = 'Por Columnas'
- ByRows = 'Por Filas'
- ByTopLevelGroups = 'Por Grupos de Primer Nivel'
- OneGroupPerPage = 'Un Grupo por P'#225'gina'
- Borders = 'Margenes'
- ExplicitlyExpandNodes = 'Expandir Expl'#237'citamente los Nodos'
- Nodes = '&Nodos'
- Separators = 'Separadores'
- Thickness = 'Grueso'
- TLIncorrectHeadersState = 'No se puede usar el modo EnCadaP'#225'gina'
- Rows = '&Filas'
- BestFit = 'Ajuste &'#211'ptimo'
- KeepSameRecordWidths = '&Mantaner Anchuras Iguales'
- WrapRecords = '&Doblar Registros'
- ByWrapping = 'Doblando'
- OneWrappingPerPage = 'Doblando Uno por P'#225'gina'
- PaginateByControlDetails = 'Detalles de Controles'
- PaginateByControls = 'Controles'
- PaginateByGroups = 'Grupos'
- PaginateByItems = 'Elementos'
- ControlsPlace = 'Enplazamiento de Controles'
- ExpandHeight = 'Expandir Altura'
- ExpandWidth = 'Expandir Anchura'
- ShrinkHeight = 'Contraer Altura'
- ShrinkWidth = 'Contraer Anchura'
- CheckAll = 'Check &All'
- CheckAllChildren = 'Check All &Children'
- ControlsTab = 'Controls'
- ExpandAll = 'E&xpand All'
- HiddenControlsTab = 'Hidden Controls'
- ReportLinksTab = 'Aggregated Designers'
- Transparents = 'Transparents'
- UncheckAllChildren = 'Uncheck &All Children'
- Root = '&Ra'#237'z'
- RootBorders = 'Root &Borders'
- Controls = '&Controls'
- Containers = 'C&ontainers'
- HideCustomContainers = '&Hide Custom Containers'
- Bytes = 'Bytes'
- KiloBytes = 'KB'
- MegaBytes = 'MB'
- GigaBytes = 'GB'
- Left = 184
- Top = 16
- end
- object ROMessage: TROBinMessage
- Left = 329
- Top = 88
- end
- object DABINAdapter: TDABINAdapter
- IsCompatibleV4 = False
- Left = 424
- Top = 24
- end
- object JvAppRegistryStorage: TJvAppRegistryStorage
- StorageOptions.BooleanStringTrueValues = 'TRUE, YES, Y'
- StorageOptions.BooleanStringFalseValues = 'FALSE, NO, N'
- Root = 'Software\%APPL_NAME%'
- SubStorages = <>
- Left = 184
- Top = 80
- end
- object RORemoteService: TRORemoteService
- Message = ROMessage
- Channel = ROChannel
- ServiceName = 'srvLogin'
- Left = 424
- Top = 92
- end
+ Height = 240
+ Width = 275
end
diff --git a/Source/Base/uDataModuleBase.pas b/Source/Base/uDataModuleBase.pas
index ee02d51..c44801a 100644
--- a/Source/Base/uDataModuleBase.pas
+++ b/Source/Base/uDataModuleBase.pas
@@ -3,252 +3,48 @@ unit uDataModuleBase;
interface
uses
- Controls, PngImageList, JvComponent, JvNavigationPane, TBXSwitcher,
- TBXOffice2003Theme, Classes, ImgList, uROClient, uROBinMessage,
- uROServiceComponent, uRORemoteService, uROWinInetHttpChannel,
- DataAbstract3_Intf, uDADataTable, uDABINAdapter, cxintl, cxIntlPrintSys3,
- JvAppStorage, JvAppRegistryStorage, SysUtils,
- JvComponentBase, uDADataStreamer;
+ Classes;
type
- TdmBase = class(TDataModule)
- ROChannel: TROWinInetHTTPChannel;
- SmallImages: TPngImageList;
- StyleManager: TJvNavPaneStyleManager;
- TBXSwitcher: TTBXSwitcher;
- cxIntl: TcxIntl;
- cxIntlPrintSys3: TcxIntlPrintSys3;
- ROMessage: TROBinMessage;
- DABINAdapter: TDABINAdapter;
- JvAppRegistryStorage: TJvAppRegistryStorage;
- RORemoteService: TRORemoteService;
- procedure DAClientDataModuleCreate(Sender: TObject);
- procedure ROChannelFailure(Sender: TROTransportChannel;
- anException: Exception; var Retry: Boolean);
- procedure ROChannelProgress(iSender: TObject; iType: TProgressType;
- iDirection: TProgressDirection; iTransferred, iTotal: Integer);
+ TDataModuleBase = class(TDataModule)
private
- FOnThemeChange: TNotifyEvent;
- function GetAdapter: TDABINAdapter;
- function GetChannel: TROWinInetHTTPChannel;
- function GetCodigoEmpresa: Integer;
- function GetMessage: TROBinMessage;
- procedure InitStyleManager;
- procedure OnTBXThemeChange(Sender: TObject);
- procedure LeerConfiguracion;
- procedure SalvarConfiguracion;
+ FRefCount: Integer;
+ protected
+ function QueryInterface(const IID: TGUID; out Obj): HResult; override; stdcall;
+ function _AddRef: Integer; stdcall;
+ function _Release: Integer; stdcall;
public
- function DarVersion : String;
- procedure ConfigurarConexion;
- function HayConexion(const ATargetURL : String = ''): Boolean;
- property Adapter: TDABINAdapter read GetAdapter;
- property Channel: TROWinInetHTTPChannel read GetChannel;
- property CodigoEmpresa: Integer read GetCodigoEmpresa;
- property Message: TROBinMessage read GetMessage;
- property OnThemeChange: TNotifyEvent read FOnThemeChange write
- FOnThemeChange;
- end;
+ property RefCount: integer read fRefCount write fRefCount;
-var
- dmBase: TdmBase;
+ end;
implementation
+
{$R *.DFM}
-uses
- Dialogs, TBX, TBXThemes, uConfigurarConexion, WinInet, Forms, Windows,
- JclFileUtils, VARELA_Intf, cxControls;
+// Set an implicit refcount so that refcounting
+// during construction won't destroy the object.
-const
- SERVER_URL = 'http://localhost:8099/bin';
- IE_OFFLINE_ERROR = 'Unexpected error in WinInet HTTP Channel (2)';
-
-{
-*********************************** TdmBase ************************************
-}
-procedure TdmBase.ConfigurarConexion;
+function TDataModuleBase.QueryInterface( const IID: TGUID; out Obj): HResult;
begin
- with TfConfigurarConexion.Create(NIL) do
- try
- TargetURL := ROChannel.TargetURL;
- if ShowModal = mrOk then
- begin
- ROChannel.TargetURL := TargetURL;
- ROChannel.Connected := False;
- ROChannel.Connected := True;
- SalvarConfiguracion;
- end;
- finally
- Free;
- end;
+ if GetInterface(IID, Obj)
+ then Result := 0
+ else Result := E_NOINTERFACE;
end;
-procedure TdmBase.DAClientDataModuleCreate(Sender: TObject);
+function TDataModuleBase._AddRef: Integer;
begin
- TBXSwitcher.OnThemeChange := OnTBXThemeChange;
- TBXSetTheme('Office2003');
-
- LeerConfiguracion;
+ Inc(fRefCount);
+ Result := fRefCount;
end;
-function TdmBase.GetAdapter: TDABINAdapter;
+function TDataModuleBase._Release: Integer;
begin
- Result := DABinAdapter;
+ Dec(fRefCount);
+ Result := fRefCount;
+ if fRefCount = 0 then Destroy;
end;
-function TdmBase.GetChannel: TROWinInetHTTPChannel;
-begin
- Result := ROChannel;
-end;
-
-function TdmBase.GetCodigoEmpresa: Integer;
-begin
- Result := 1;
-end;
-
-function TdmBase.GetMessage: TROBinMessage;
-begin
- Result := ROMessage;
-end;
-
-procedure TdmBase.InitStyleManager;
-begin
- if not USE_THEMES then
- begin
- TBXSwitcher.EnableXPStyles := False;
- StyleManager.Theme := nptStandard;
- end
- else begin
- TBXSwitcher.EnableXPStyles := True;
- with StyleManager do
- begin
- if CurrentTheme is TTBXOffice2003Theme then
- begin
- case GetOffice2003Scheme of
- osBlue : Theme := nptXPBlue;
- osMetallic : Theme := nptXPSilver;
- osGreen : Theme := nptXPOlive;
- else
- Theme := nptStandard;
- end;
- end;
- end;
- end;
-end;
-
-
-procedure TdmBase.LeerConfiguracion;
-begin
- ROChannel.TargetURL := JvAppRegistryStorage.ReadString('ServerURL', SERVER_URL);
-end;
-
-procedure TdmBase.OnTBXThemeChange(Sender: TObject);
-begin
- InitStyleManager;
-
- if Assigned(FOnThemeChange) then
- FOnThemeChange(Sender);
-end;
-
-procedure TdmBase.SalvarConfiguracion;
-begin
- JvAppRegistryStorage.BeginUpdate;
- try
- JvAppRegistryStorage.WriteString('ServerURL', ROChannel.TargetURL);
- finally
- JvAppRegistryStorage.EndUpdate;
- end;
-end;
-
-procedure TdmBase.ROChannelFailure(Sender: TROTransportChannel;
- anException: Exception; var Retry: Boolean);
-begin
- if (Pos(anException.Message, IE_OFFLINE_ERROR) > 0) then
- begin
- // Preguntar al usuario si se quiere conectar
- if InternetGoOnline(PAnsiChar(ROChannel.TargetURL), GetDesktopWindow(), 0) then
- Retry := True // Si el usuario pulsa en 'Conectar' reintentar la operación
- else
- Abort; // Si el usuario pulsa en 'Seguir desconectado' parar todo
- end
- else
- Retry := True;
-// raise Exception.Create(anException.Message);
-end;
-
-procedure TdmBase.ROChannelProgress(iSender: TObject; iType: TProgressType;
- iDirection: TProgressDirection; iTransferred, iTotal: Integer);
-begin
-{ if iType = ptInProgress then
- begin
- if not Form1.Visible then
- Form1.Show;
- end
- else
- Form1.Hide;}
-end;
-
-function TdmBase.DarVersion: String;
-var
- Obj : TJclFileVersionInfo;
-begin
- Obj := TJclFileVersionInfo.Create(Application.ExeName);
- try
- Result := 'v' + Obj.FileVersion;
- finally
- FreeAndNil(Obj);
- end;
-end;
-
-function TdmBase.HayConexion(const ATargetURL: String): Boolean;
-var
- AHTTPChannel: TROWinInetHTTPChannel;
- AROBinMessage: TROBinMessage;
- ACoService: TRORemoteService;
-begin
- AHTTPChannel := TROWinInetHTTPChannel.Create(Self);
- AROBinMessage := TROBinMessage.Create(Self);
- ACoService := TRORemoteService.Create(Self);
-
- ShowHourglassCursor;
- try
- with AHTTPChannel do
- begin
- Name := 'HTTPChannel';
- UserAgent := 'AdminPV';
- if Length(ATargetURL) > 0 then
- TargetURL := ATargetURL
- else
- TargetURL := ROChannel.TargetURL;
- end;
-
- with ACoService do
- begin
- ServiceName := 'srvLogin';
- Message := AROBinMessage;
- Channel := AHTTPChannel;
- end;
-
- try
- (ACoService as IsrvLogin).Ping;
- Result := True;
- except
- Result := False;
- end;
- finally
- AHTTPChannel.Connected := False;
- FreeAndNil(AHTTPChannel);
- FreeAndNil(ACoService);
- FreeAndNil(AROBinMessage);
- HideHourglassCursor;
- end;
-end;
-
-initialization
- dmBase := TdmBase.Create(NIL);
-
-finalization
- dmBase.Free;
end.
diff --git a/Source/Base/uEditorBase.pas b/Source/Base/uEditorBase.pas
index ef16e4f..3848e93 100644
Binary files a/Source/Base/uEditorBase.pas and b/Source/Base/uEditorBase.pas differ
diff --git a/Source/Base/uEditorDBBase.ddp b/Source/Base/uEditorDBBase.ddp
deleted file mode 100644
index 4370276..0000000
Binary files a/Source/Base/uEditorDBBase.ddp and /dev/null differ
diff --git a/Source/Base/uEditorDBBase.dfm b/Source/Base/uEditorDBBase.dfm
index 317e217..ed9e52e 100644
--- a/Source/Base/uEditorDBBase.dfm
+++ b/Source/Base/uEditorDBBase.dfm
@@ -13,7 +13,6 @@ inherited fEditorDBBase: TfEditorDBBase
ExplicitWidth = 652
inherited Image1: TImage
Left = 625
- Picture.Data = {00}
ExplicitLeft = 625
end
end
diff --git a/Source/Base/uEditorDBBase.pas b/Source/Base/uEditorDBBase.pas
index 667d42c..823359f 100644
--- a/Source/Base/uEditorDBBase.pas
+++ b/Source/Base/uEditorDBBase.pas
@@ -39,9 +39,6 @@ type
published
end;
-var
- fEditorDBBase: TfEditorDBBase;
-
implementation
uses
@@ -196,35 +193,11 @@ begin
end;
function TfEditorDBBase.GetModified: Boolean;
-var
- dtDetails : TList;
- i : integer;
- bCambiado : Boolean;
begin
- bCambiado := False;
- if Assigned(dsDataTable.DataTable) then
- begin
- bCambiado := (dsDataTable.DataTable.State = dsEdit) or
- DeltaValuesAreDifferent(dsDataTable.DataTable.Delta);
-
- if (not bCambiado) then
- begin
- dtDetails := dsDataTable.DataTable.GetDetailDataTables;
- for i := 0 to dtDetails.Count - 1 do
- begin
- bCambiado := bCambiado or
- ((TDADataTable(dtDetails.Items[i])).State = dsEdit) or
- DeltaValuesAreDifferent((TDADataTable(dtDetails.Items[i])).Delta);
- if bCambiado then
- Break;
- end;
- end;
- end;
-
- if (not bCambiado) then
- bCambiado := inherited GetModified;
-
- Result := bCambiado;
+ if ReadOnly then
+ Result := False
+ else
+ Result := DataTableModified(dsDataTable.DataTable) or inherited GetModified;
end;
procedure TfEditorDBBase.FormCloseQuery(Sender: TObject;
diff --git a/Source/Base/uEditorDBItem.ddp b/Source/Base/uEditorDBItem.ddp
deleted file mode 100644
index 4370276..0000000
Binary files a/Source/Base/uEditorDBItem.ddp and /dev/null differ
diff --git a/Source/Base/uEditorGridBase.pas b/Source/Base/uEditorGridBase.pas
index 673bc61..6781ccd 100644
Binary files a/Source/Base/uEditorGridBase.pas and b/Source/Base/uEditorGridBase.pas differ
diff --git a/Source/Base/uEditorItem.dfm b/Source/Base/uEditorItem.dfm
index 106f387..36a7056 100644
--- a/Source/Base/uEditorItem.dfm
+++ b/Source/Base/uEditorItem.dfm
@@ -1,38 +1,50 @@
inherited fEditorItem: TfEditorItem
Left = 423
Top = 273
- Width = 686
- Height = 535
Caption = 'fEditorItem'
+ ClientHeight = 508
+ ClientWidth = 678
+ ExplicitWidth = 686
+ ExplicitHeight = 535
PixelsPerInch = 96
TextHeight = 13
inherited JvNavPanelHeader: TJvNavPanelHeader
Width = 678
Visible = False
+ ExplicitWidth = 678
inherited Image1: TImage
Left = 651
+ ExplicitLeft = 651
end
end
object pgPaginas: TPageControl [1]
Left = 0
Top = 76
Width = 678
- Height = 406
+ Height = 413
ActivePage = pagGeneral
Align = alClient
TabOrder = 1
+ ExplicitHeight = 406
object pagGeneral: TTabSheet
Caption = 'General'
+ ExplicitLeft = 0
+ ExplicitTop = 0
+ ExplicitWidth = 0
+ ExplicitHeight = 0
end
end
inherited TBXDock: TTBXDock
Width = 678
+ ExplicitWidth = 678
inherited tbxMain: TTBXToolbar
+ ExplicitWidth = 524
inherited TBXItem5: TTBXItem
Visible = False
end
end
inherited tbxMenu: TTBXToolbar
+ ExplicitWidth = 678
inherited TBXSubmenuItem4: TTBXSubmenuItem
inherited TBXItem10: TTBXItem
Visible = False
@@ -41,8 +53,10 @@ inherited fEditorItem: TfEditorItem
end
end
inherited StatusBar: TStatusBar
- Top = 482
+ Top = 489
Width = 678
+ ExplicitTop = 482
+ ExplicitWidth = 678
end
inherited EditorActionList: TActionList
Top = 104
diff --git a/Source/Base/uEditorItem.pas b/Source/Base/uEditorItem.pas
index 50461c5..5a0ba64 100644
--- a/Source/Base/uEditorItem.pas
+++ b/Source/Base/uEditorItem.pas
@@ -26,7 +26,7 @@ var
implementation
-uses uDataModuleBase;
+uses uDMBase;
{$R *.dfm}
diff --git a/Source/Base/uViewGridBase.ddp b/Source/Base/uViewGridBase.ddp
deleted file mode 100644
index 4370276..0000000
Binary files a/Source/Base/uViewGridBase.ddp and /dev/null differ
diff --git a/Source/CargaEDI/CargaEDI.dproj b/Source/CargaEDI/CargaEDI.dproj
index 2cbf25b..bdad6b9 100644
--- a/Source/CargaEDI/CargaEDI.dproj
+++ b/Source/CargaEDI/CargaEDI.dproj
@@ -6,7 +6,7 @@
Debug
AnyCPU
true
- BaseD10;Configuracion;FicherosEDI
+ BaseD10;FicherosEDI
DCC32
..\..\Output\Debug\Cliente\CargaEDI.exe
@@ -50,9 +50,11 @@
+
CodeGear WebSnap Components
CodeGear SOAP Components
Microsoft Office XP Sample Automation Server Wrapper Components
+ VCL for the Web Design Package for CodeGear RAD Studio
Microsoft Office 2000 Sample Automation Server Wrapper Components
CodeGear C++Builder Office 2000 Servers Package
CodeGear C++Builder Office XP Servers Package
diff --git a/Source/CargaEDI/CargaEDI.drc b/Source/CargaEDI/CargaEDI.drc
index 2868863..4184c89 100644
--- a/Source/CargaEDI/CargaEDI.drc
+++ b/Source/CargaEDI/CargaEDI.drc
@@ -15,4 +15,4 @@ END
/* C:\Archivos de programa\CodeGear\RAD Studio\5.0\Lib\WindowsXP.res */
/* C:\Varela_D2007\Source\CargaEDI\uCargaEDI.dfm */
/* C:\Varela_D2007\Source\CargaEDI\CargaEDI.res */
-/* C:\DOCUME~1\Usuario\CONFIG~1\Temp\dtf26.tmp */
+/* C:\DOCUME~1\Usuario\CONFIG~1\Temp\dtf3B.tmp */
diff --git a/Source/CargaEDI/CargaEDI.identcache b/Source/CargaEDI/CargaEDI.identcache
deleted file mode 100644
index f6d8112..0000000
Binary files a/Source/CargaEDI/CargaEDI.identcache and /dev/null differ
diff --git a/Source/CargaEDI/uCargaEDI.ddp b/Source/CargaEDI/uCargaEDI.ddp
deleted file mode 100644
index 4370276..0000000
Binary files a/Source/CargaEDI/uCargaEDI.ddp and /dev/null differ
diff --git a/Source/CargaEDI/uCargaEDI.pas b/Source/CargaEDI/uCargaEDI.pas
index 3dcebcb..782f40a 100644
--- a/Source/CargaEDI/uCargaEDI.pas
+++ b/Source/CargaEDI/uCargaEDI.pas
@@ -47,7 +47,7 @@ implementation
{$R *.dfm}
uses
- uCargarFicheros, uDataModuleBase;
+ uCargarFicheros, uDMBase;
procedure TfCargaEDI.FormShow(Sender: TObject);
begin
diff --git a/Source/Cliente/AdminPV.dpr b/Source/Cliente/AdminPV.dpr
index d4006f3..86cddce 100644
--- a/Source/Cliente/AdminPV.dpr
+++ b/Source/Cliente/AdminPV.dpr
@@ -2,22 +2,26 @@ program AdminPV;
uses
Forms,
- uLoginForm,
uPantallaPrincipal in 'uPantallaPrincipal.pas' {fPantallaPrincipal},
- uMenuUtils in 'uMenuUtils.pas',
- uSplash in 'uSplash.pas' {SplashScreen},
+ uSplash in 'uSplash.pas' {AppSplashForm},
uAcercaDe in 'uAcercaDe.pas' {fAcercaDe},
- uIntegerList in '..\Base\uIntegerList.pas';
+ uMenuUtils in 'Utiles\uMenuUtils.pas',
+ uBootStrap in 'uBootStrap.pas',
+ uNavPaneUtils in 'Utiles\uNavPaneUtils.pas',
+ uMainMenuController in 'uMainMenuController.pas',
+ uNavPaneController in 'uNavPaneController.pas',
+ uClienteUtils in 'Utiles\uClienteUtils.pas';
{$R *.res}
begin
Application.Initialize;
-
Application.Title := 'Administración de puntos de venta';
- Application.CreateForm(TfPantallaPrincipal, fPantallaPrincipal);
- Application.MainFormOnTaskBar := True;
- Application.Run;
- Application.Terminate;
+
+ uBootStrap.Initialize;
+ uBootStrap.Run; // <- Aquí dentro esta Application.Run
+ uBootStrap.Terminate;
+
+ Application.Terminate; //<- No descomentar para así ver los Memory Leaks
end.
diff --git a/Source/Cliente/AdminPV.dproj b/Source/Cliente/AdminPV.dproj
index ba9a539..e744c44 100644
--- a/Source/Cliente/AdminPV.dproj
+++ b/Source/Cliente/AdminPV.dproj
@@ -8,7 +8,7 @@
DCC32
..\..\Output\Debug\Cliente\AdminPV.exe
true
- BaseD10;Configuracion;ControlesBaseD10;Usuarios;FicherosEDI;VentasProceso;VentasTerminadas;ReferenciaGenerica
+ BaseD10;ControlesBaseD10;Parametros;ApplicationBase;FicherosEDI
7.0
@@ -42,10 +42,11 @@
Delphi.Personality
VCLApplication
- FalseTrueFalseTrueFalse2110FalseFalseFalseFalseFalse30821252Rodax Software S.L.2.1.1.0Administración de puntos de ventaAdministración de puntos de venta1.0.0.0martes, 11 de marzo de 2008 18:44
+ FalseTrueFalseTrueFalse2110FalseFalseFalseFalseFalse30821252Rodax Software S.L.2.1.1.0Administración de puntos de ventaAdministración de puntos de venta1.0.0.0miércoles, 12 de marzo de 2008 12:35
CodeGear WebSnap Components
CodeGear SOAP Components
Microsoft Office XP Sample Automation Server Wrapper Components
+ VCL for the Web Design Package for CodeGear RAD Studio
Microsoft Office 2000 Sample Automation Server Wrapper Components
CodeGear C++Builder Office 2000 Servers Package
CodeGear C++Builder Office XP Servers Package
@@ -56,17 +57,21 @@
MainSource
-
-
+
+
+
-
+
+
+
+