diff --git a/Source/Base/Actualizacion/uActualizacion.dfm b/Source/Base/Actualizacion/uActualizacion.dfm
new file mode 100644
index 00000000..a264311c
--- /dev/null
+++ b/Source/Base/Actualizacion/uActualizacion.dfm
@@ -0,0 +1,272 @@
+object fActualizacion: TfActualizacion
+ Left = 447
+ Top = 316
+ Caption = 'Configuraci'#243'n'
+ ClientHeight = 340
+ ClientWidth = 354
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ Position = poOwnerFormCenter
+ OnActivate = FormActivate
+ DesignSize = (
+ 354
+ 340)
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Panel2: TPanel
+ Left = 0
+ Top = 306
+ Width = 354
+ Height = 34
+ Align = alBottom
+ BevelOuter = bvNone
+ ParentColor = True
+ TabOrder = 0
+ object OKBtn: TButton
+ Left = 190
+ Top = 2
+ Width = 75
+ Height = 25
+ Caption = '&Aceptar'
+ Default = True
+ ModalResult = 1
+ TabOrder = 0
+ OnClick = OKBtnClick
+ end
+ object CancelBtn: TButton
+ Left = 270
+ Top = 2
+ Width = 75
+ Height = 25
+ Cancel = True
+ Caption = '&Cancelar'
+ ModalResult = 2
+ TabOrder = 1
+ end
+ end
+ object PageControl1: TPageControl
+ Left = 8
+ Top = 8
+ Width = 337
+ Height = 289
+ ActivePage = TabSheet1
+ Anchors = [akLeft, akTop, akRight, akBottom]
+ TabOrder = 1
+ object TabSheet1: TTabSheet
+ Caption = 'Configuraci'#243'n'
+ object GroupBox1: TGroupBox
+ Left = 7
+ Top = 6
+ Width = 313
+ Height = 242
+ Caption = 'Configuraci'#243'n de acceso'
+ TabOrder = 0
+ object Label2: TLabel
+ Left = 32
+ Top = 115
+ Width = 259
+ Height = 26
+ Margins.Bottom = 0
+ Caption =
+ 'Para poder descargar actualizaciones de FactuGES desde Internet ' +
+ 'debe introducir su usuario y contrase'#241'a:'
+ WordWrap = True
+ end
+ object Label3: TLabel
+ Left = 41
+ Top = 180
+ Width = 39
+ Height = 13
+ Margins.Bottom = 0
+ Caption = 'Usuario:'
+ end
+ object Label4: TLabel
+ Left = 23
+ Top = 205
+ Width = 57
+ Height = 13
+ Margins.Bottom = 0
+ Caption = 'Contrase'#241'a:'
+ end
+ object bDirectorio: TSpeedButton
+ Left = 272
+ Top = 48
+ Width = 23
+ Height = 22
+ Caption = '...'
+ OnClick = bDirectorioClick
+ end
+ object Label6: TLabel
+ Left = 32
+ Top = 155
+ Width = 48
+ Height = 13
+ Margins.Bottom = 0
+ Caption = 'Direcci'#243'n:'
+ end
+ object edUsuario: TEdit
+ Left = 87
+ Top = 176
+ Width = 208
+ Height = 21
+ TabOrder = 0
+ end
+ object edPassword: TEdit
+ Left = 87
+ Top = 201
+ Width = 208
+ Height = 21
+ PasswordChar = '*'
+ TabOrder = 1
+ end
+ object edRutaLan: TEdit
+ Left = 32
+ Top = 48
+ Width = 241
+ Height = 21
+ ReadOnly = True
+ TabOrder = 2
+ end
+ object rbInternet: TRadioButton
+ Left = 16
+ Top = 96
+ Width = 257
+ Height = 17
+ Caption = 'Actualizaci'#243'n por Internet'
+ TabOrder = 3
+ OnClick = Action1Update
+ end
+ object rbLan: TRadioButton
+ Left = 16
+ Top = 24
+ Width = 265
+ Height = 17
+ Caption = 'Actualizaci'#243'n por red local'
+ TabOrder = 4
+ OnClick = Action1Update
+ end
+ object edLocation: TEdit
+ Left = 87
+ Top = 151
+ Width = 208
+ Height = 21
+ TabOrder = 5
+ end
+ end
+ end
+ object TabSheet2: TTabSheet
+ Caption = 'Opciones avanzadas'
+ ImageIndex = 1
+ object GroupBox2: TGroupBox
+ Left = 8
+ Top = 7
+ Width = 313
+ Height = 242
+ Caption = 'Opciones avanzadas'
+ TabOrder = 0
+ object Label1: TLabel
+ Left = 16
+ Top = 19
+ Width = 282
+ Height = 13
+ Margins.Bottom = 0
+ Caption = 'Por favor, s'#243'lo modificar si se sabe lo que se est'#225' haciendo.'
+ WordWrap = True
+ end
+ object Label5: TLabel
+ Left = 16
+ Top = 52
+ Width = 177
+ Height = 13
+ Margins.Bottom = 0
+ Caption = 'Nombre del archivo de configuraci'#243'n:'
+ end
+ object Label7: TLabel
+ Left = 200
+ Top = 76
+ Width = 90
+ Height = 13
+ Margins.Bottom = 0
+ Caption = 'p.e: versionlocal.ini'
+ end
+ object edFicheroConfig: TEdit
+ Left = 16
+ Top = 72
+ Width = 177
+ Height = 21
+ TabOrder = 0
+ end
+ end
+ end
+ end
+ object JvAppRegistryStorage1: TJvAppRegistryStorage
+ StorageOptions.BooleanStringTrueValues = 'TRUE, YES, Y'
+ StorageOptions.BooleanStringFalseValues = 'FALSE, NO, N'
+ StorageOptions.BooleanAsString = False
+ RegRoot = hkLocalMachine
+ Root = 'Software\FactuGES\Update'
+ SubStorages = <>
+ Left = 326
+ end
+ object JvFormStorage1: TJvFormStorage
+ Active = False
+ AppStorage = JvAppRegistryStorage1
+ AppStoragePath = '\'
+ Options = []
+ StoredProps.Strings = (
+ 'edPassword.Text'
+ 'edUsuario.Text'
+ 'edRutaLan.Text'
+ 'rbInternet.Checked'
+ 'rbLan.Checked'
+ 'edFicheroConfig.Text'
+ 'edLocation.Text')
+ StoredValues = <
+ item
+ Name = 'TipoActualizacion'
+ Value = ''
+ OnSave = JvFormStorage1StoredValues0Save
+ end>
+ Left = 296
+ end
+ object ActionList1: TActionList
+ Left = 242
+ Top = 2
+ object Action1: TAction
+ Caption = 'Action1'
+ OnUpdate = Action1Update
+ end
+ object Action2: TAction
+ Caption = 'Action2'
+ end
+ end
+ object JvBrowseForFolderDialog1: TJvBrowseForFolderDialog
+ Options = [odOnlyDirectory, odStatusAvailable, odNewDialogStyle]
+ Title = 'Ruta de las actualizaciones'
+ Left = 268
+ Top = 1
+ end
+ object JvProgramVersionCheck1: TJvProgramVersionCheck
+ CheckFrequency = 0
+ LocalDirectory = 'update'
+ LocalVersionInfoFileName = 'versioninfo.ini'
+ LocationNetwork = JvProgramVersionNetworkLocation1
+ LocationType = pvltHTTP
+ UserOptions = [uoLocalDirectory, uoAllowedReleaseType, uoLocationType, uoLocationNetwork, uoLocationHTTP]
+ Left = 176
+ Top = 48
+ end
+ object JvProgramVersionNetworkLocation1: TJvProgramVersionNetworkLocation
+ Left = 208
+ Top = 48
+ end
+ object JvProgramVersionHTTPLocation1: TJvProgramVersionHTTPLocation
+ Left = 232
+ Top = 48
+ end
+end
diff --git a/Source/Base/Actualizacion/uActualizacion.pas b/Source/Base/Actualizacion/uActualizacion.pas
new file mode 100644
index 00000000..2001f0a5
--- /dev/null
+++ b/Source/Base/Actualizacion/uActualizacion.pas
@@ -0,0 +1,182 @@
+{
+===============================================================================
+ Copyright (©) 2005. Rodax Software.
+===============================================================================
+ Los contenidos de este fichero son propiedad de Rodax Software titular del
+ copyright. Este fichero sólo podrá ser copiado, distribuido y utilizado,
+ en su totalidad o en parte, con el permiso escrito de Rodax Software, o de
+ acuerdo con los términos y condiciones establecidas en el acuerdo/contrato
+ bajo el que se suministra.
+ -----------------------------------------------------------------------------
+ Web: www.rodax-software.com
+===============================================================================
+ Fecha primera versión: 17-05-2005
+ Versión actual: 1.0.0
+ Fecha versión actual: 17-05-2005
+===============================================================================
+ Modificaciones:
+
+ Fecha Comentarios
+ ---------------------------------------------------------------------------
+===============================================================================
+}
+
+unit uActualizacion;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+ Dialogs, StdCtrls, ExtCtrls, ComCtrls, JvComponent, JvAppStorage,
+ JvAppRegistryStorage, JvFormPlacement, JvProgramVersionCheck, JvPropertyStore,
+ JvBaseDlg, JvBrowseFolder, ActnList, JvComponentBase, Buttons, uInfoProjectUtils;
+
+type
+ TfActualizacion = class(TForm)
+ Panel2: TPanel;
+ OKBtn: TButton;
+ CancelBtn: TButton;
+ PageControl1: TPageControl;
+ TabSheet1: TTabSheet;
+ GroupBox1: TGroupBox;
+ Label2: TLabel;
+ edUsuario: TEdit;
+ Label3: TLabel;
+ edPassword: TEdit;
+ Label4: TLabel;
+ JvAppRegistryStorage1: TJvAppRegistryStorage;
+ JvFormStorage1: TJvFormStorage;
+ edRutaLan: TEdit;
+ bDirectorio: TSpeedButton;
+ rbInternet: TRadioButton;
+ rbLan: TRadioButton;
+ ActionList1: TActionList;
+ Action1: TAction;
+ Action2: TAction;
+ TabSheet2: TTabSheet;
+ GroupBox2: TGroupBox;
+ Label1: TLabel;
+ Label5: TLabel;
+ edFicheroConfig: TEdit;
+ JvBrowseForFolderDialog1: TJvBrowseForFolderDialog;
+ JvProgramVersionCheck1: TJvProgramVersionCheck;
+ JvProgramVersionNetworkLocation1: TJvProgramVersionNetworkLocation;
+ Label6: TLabel;
+ edLocation: TEdit;
+ Label7: TLabel;
+ procedure bDirectorioClick(Sender: TObject);
+ procedure Action1Update(Sender: TObject);
+ procedure FormActivate(Sender: TObject);
+ procedure OKBtnClick(Sender: TObject);
+ procedure JvFormStorage1StoredValues0Save(Sender: TJvStoredValue;
+ var AValue: Variant);
+ private
+ InfoProject : TInfoProject;
+ public
+ { Public declarations }
+ function HayConfiguracion: Boolean;
+ procedure Actualizar;
+ function darVersion: String;
+ end;
+
+var
+ fActualizacion: TfActualizacion;
+
+implementation
+
+{$R *.dfm}
+
+uses
+ JclFileUtils;
+
+procedure TfActualizacion.bDirectorioClick(Sender: TObject);
+begin
+ if Length(edRutaLan.Text) > 0 then
+ JvBrowseForFolderDialog1.Directory := edRutaLan.Text;
+ JvBrowseForFolderDialog1.Execute;
+ if DirectoryExists(JvBrowseForFolderDialog1.Directory) then
+ edRutaLan.Text := JvBrowseForFolderDialog1.Directory + '\'
+ else begin
+ ShowMessage('Directorio no válido');
+ bDirectorio.Click;
+ end;
+end;
+
+procedure TfActualizacion.Action1Update(Sender: TObject);
+begin
+ edRutaLan.Enabled := rbLan.Checked;
+ bDirectorio.Enabled := rbLan.Checked;
+ edLocation.Enabled := rbInternet.Checked;
+ edUsuario.Enabled := rbInternet.Checked;
+ edPassword.Enabled := rbInternet.Checked;
+end;
+
+procedure TfActualizacion.FormActivate(Sender: TObject);
+begin
+ JvFormStorage1.RestoreFormPlacement;
+ PageControl1.TabIndex := 0;
+end;
+
+procedure TfActualizacion.OKBtnClick(Sender: TObject);
+begin
+ JvFormStorage1.SaveFormPlacement;
+end;
+
+procedure TfActualizacion.Actualizar;
+begin
+ JvFormStorage1.RestoreFormPlacement;
+
+ if rbLan.Checked then
+ begin
+ JvProgramVersionCheck1.LocationType := pvltNetwork;
+ with JvProgramVersionNetworkLocation1 do
+ begin
+ VersionInfoLocationPathList.Clear;
+ VersionInfoLocationPathList.Add(edRutaLan.Text);
+ VersionInfoFileName := edFicheroConfig.Text;
+ end;
+ end
+ else begin
+ {JvProgramVersionCheck1.LocationType := pvltHTTP;
+ with JvProgramVersionHTTPLocationIndy1 do
+ begin
+ VersionInfoFileName := edFicheroConfig.Text;
+ VersionInfoLocationPathList.Clear;
+ VersionInfoLocationPathList.Add(edLocation.Text);
+ UserName := edUsuario.Text;
+ Password := edPassword.Text;
+ end;}
+ end;
+
+ JvProgramVersionCheck1.LocalVersionInfoFileName := 'versionlocal.ini';//edFicheroConfig.Text;
+ JvProgramVersionCheck1.Execute;
+end;
+
+procedure TfActualizacion.JvFormStorage1StoredValues0Save(
+ Sender: TJvStoredValue; var AValue: Variant);
+begin
+ if rbInternet.Checked then
+ AValue := 'INTERNET'
+ else
+ AValue := 'LAN';
+end;
+
+function TfActualizacion.darVersion: String;
+begin
+ InfoProject := TInfoProject.Create(Self);
+ try
+ Result := InfoProject.FileVersion;
+ finally
+ FreeAndNil(InfoProject);
+ end;
+end;
+
+function TfActualizacion.HayConfiguracion: Boolean;
+begin
+ // Cargar la configuración desde el registro.
+ JvFormStorage1.RestoreFormPlacement;
+
+ Result := (rbLan.Checked) or (rbInternet.Checked);
+end;
+
+end.
diff --git a/Source/Base/Base.bdsproj b/Source/Base/Base.bdsproj
new file mode 100644
index 00000000..7f75ab6d
--- /dev/null
+++ b/Source/Base/Base.bdsproj
@@ -0,0 +1,675 @@
+
+
+
+
+
+
+
+
+
+
+
+ Base.dpk
+
+
+ 7.0
+
+
+ 8
+ 0
+ 1
+ 1
+ 0
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 1
+ 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
+ Libreria base de FactuGES
+
+
+
+ .\
+ ..\..\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/Base/Base.cfg b/Source/Base/Base.cfg
new file mode 100644
index 00000000..3a940cfc
--- /dev/null
+++ b/Source/Base/Base.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/Base/Base.dpk b/Source/Base/Base.dpk
index c08bf607..8c392f9a 100644
--- a/Source/Base/Base.dpk
+++ b/Source/Base/Base.dpk
@@ -24,7 +24,6 @@ package Base;
{$IMAGEBASE $400000}
{$DESCRIPTION 'Libreria base de FactuGES'}
{$IMPLICITBUILD ON}
-{$DEFINE DEBUG}
requires
rtl,
@@ -58,29 +57,36 @@ requires
JvDlgsD11R,
JvNetD11R,
JvPageCompsD11R,
- JSDialog100;
+ JSDialog100,
+ dbrtl,
+ vcldb,
+ dsnap,
+ adortl;
contains
uDataTableUtils in 'Utiles\uDataTableUtils.pas',
uDBSelectionListUtils in 'Utiles\uDBSelectionListUtils.pas',
uIntegerListUtils in 'Utiles\uIntegerListUtils.pas',
uDataModuleBase in 'uDataModuleBase.pas' {dmBase: TDataModule},
- uDataModuleConexion in 'uDataModuleConexion.pas' {dmConexion: TDataModule},
- uConfigurarConexion in 'uConfigurarConexion.pas' {fConfigurarConexion: TForm},
+ uDataModuleConexion in 'Conexion\uDataModuleConexion.pas' {dmConexion: TDataModule},
+ uConfigurarConexion in 'Conexion\uConfigurarConexion.pas' {fConfigurarConexion: TForm},
uSistemaFunc in 'Utiles\uSistemaFunc.pas',
FactuGES_Intf in '..\Servicios\FactuGES_Intf.pas',
uGridUtils in 'Utiles\uGridUtils.pas',
uDateUtils in 'Utiles\uDateUtils.pas',
- uDataModuleConfiguracion in 'uDataModuleConfiguracion.pas' {dmConfiguracion: TDataModule},
- uViewRegistryUtils in 'ClassRegistry\uViewRegistryUtils.pas',
- uClassRegistryUtils in 'ClassRegistry\uClassRegistryUtils.pas',
- uEditorRegistryUtils in 'ClassRegistry\uEditorRegistryUtils.pas',
+ uDataModuleConfiguracion in 'Configuracion\uDataModuleConfiguracion.pas' {dmConfiguracion: TDataModule},
+ uViewRegistryUtils in 'Utiles\ClassRegistry\uViewRegistryUtils.pas',
+ uClassRegistryUtils in 'Utiles\ClassRegistry\uClassRegistryUtils.pas',
+ uEditorRegistryUtils in 'Utiles\ClassRegistry\uEditorRegistryUtils.pas',
uDialogUtils in 'Utiles\uDialogUtils.pas',
uNumUtils in 'Utiles\uNumUtils.pas',
uMD5 in 'Utiles\uMD5.pas',
uPasswordUtils in 'Utiles\uPasswordUtils.pas',
uInfoProjectUtils in 'Utiles\uInfoProjectUtils.pas',
- uActualizacion in 'uActualizacion.pas' {fActualizacion: Form},
- uInformeRegistryUtils in 'ClassRegistry\uInformeRegistryUtils.pas';
+ uActualizacion in 'Actualizacion\uActualizacion.pas' {fActualizacion: Form},
+ uInformeRegistryUtils in 'Utiles\ClassRegistry\uInformeRegistryUtils.pas',
+ uControllerDetallesDTO in 'Controladores\uControllerDetallesDTO.pas',
+ uControllerBase in 'Controladores\uControllerBase.pas',
+ uControllerDetallesBase in 'Controladores\uControllerDetallesBase.pas';
end.
diff --git a/Source/Base/Base.dproj b/Source/Base/Base.dproj
index ccd405cb..45aacefa 100644
--- a/Source/Base/Base.dproj
+++ b/Source/Base/Base.dproj
@@ -26,7 +26,6 @@
7.0
False
True
- DEBUG
.\
.\
.\
@@ -43,12 +42,6 @@
Package
FalseTrueFalseLibreria base de FactuGESTrueFalseFalseTrueFalse1000FalseFalseFalseFalseFalse308212521.0.0.01.0.0.0
-
-
-
-
-
-
CodeGear WebSnap Components
CodeGear SOAP Components
Microsoft Office XP Sample Automation Server Wrapper Components
@@ -62,38 +55,92 @@
MainSource
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/Base/Empresas/Test/Empresas_Tests.dpr b/Source/Base/Empresas/Test/Empresas_Tests.dpr
new file mode 100644
index 00000000..e43b0109
--- /dev/null
+++ b/Source/Base/Empresas/Test/Empresas_Tests.dpr
@@ -0,0 +1,39 @@
+program Empresas_Tests;
+{
+
+ Delphi DUnit Test Project
+ -------------------------
+ This project contains the DUnit test framework and the GUI/Console test runners.
+ Add "CONSOLE_TESTRUNNER" to the conditional defines entry in the project options
+ to use the console test runner. Otherwise the GUI test runner will be used by
+ default.
+
+}
+
+{$IFDEF CONSOLE_TESTRUNNER}
+{$APPTYPE CONSOLE}
+{$ENDIF}
+
+uses
+ ExceptionLog,
+ Forms,
+ TestFramework,
+ GUITestRunner,
+ TextTestRunner,
+ uEmpresasController_Test in 'uEmpresasController_Test.pas',
+ uHostMainForm in 'uHostMainForm.pas' {HostMainForm};
+
+{$R *.RES}
+
+begin
+ Application.Initialize;
+ Application.CreateForm(THostMainForm, HostMainForm);
+ Application.Run;
+ Application.Terminate;
+
+ {if IsConsole then
+ TextTestRunner.RunRegisteredTests
+ else
+ GUITestRunner.RunRegisteredTests;}
+end.
+
diff --git a/Source/Base/Empresas/Test/Empresas_Tests.drc b/Source/Base/Empresas/Test/Empresas_Tests.drc
new file mode 100644
index 00000000..7642ac97
--- /dev/null
+++ b/Source/Base/Empresas/Test/Empresas_Tests.drc
@@ -0,0 +1,14 @@
+/* VER180
+ Generated by the Borland 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
+
diff --git a/Source/Base/Empresas/Test/Empresas_Tests.res b/Source/Base/Empresas/Test/Empresas_Tests.res
new file mode 100644
index 00000000..346c5f0c
Binary files /dev/null and b/Source/Base/Empresas/Test/Empresas_Tests.res differ
diff --git a/Source/Base/Empresas/Test/uEmpresasController_Test.pas b/Source/Base/Empresas/Test/uEmpresasController_Test.pas
new file mode 100644
index 00000000..50cf2686
--- /dev/null
+++ b/Source/Base/Empresas/Test/uEmpresasController_Test.pas
@@ -0,0 +1,178 @@
+unit uEmpresasController_Test;
+{
+
+ Delphi DUnit Test Case
+ ----------------------
+ This unit contains a skeleton test case class generated by the Test Case Wizard.
+ Modify the generated code to correctly setup and call the methods from the unit
+ being tested.
+
+}
+
+interface
+
+uses
+ TestFramework, Classes, uEmpresasController, Contnrs, SysUtils, uIDataModuleEmpresas,
+ Forms, Windows, Controls, uBizEmpresas;
+type
+ // Test methods for class TEmpresasController
+
+ TestTEmpresasController = class(TTestCase)
+ strict private
+ FEmpresasController: TEmpresasController;
+ public
+ procedure SetUp; override;
+ procedure TearDown; override;
+ published
+ procedure TestEliminar;
+ procedure TestEliminar1;
+ procedure TestGuardar;
+ procedure TestDescartarCambios;
+ procedure TestExiste;
+ procedure TestAnadir;
+ procedure TestBuscar;
+ procedure TestBuscarTodos;
+ procedure TestNuevo;
+ procedure TestVer;
+ procedure TestVerTodos;
+ procedure TestToStringList;
+ end;
+
+implementation
+
+procedure TestTEmpresasController.SetUp;
+begin
+ FEmpresasController := TEmpresasController.Create;
+end;
+
+procedure TestTEmpresasController.TearDown;
+begin
+ FEmpresasController.Free;
+ FEmpresasController := nil;
+end;
+
+procedure TestTEmpresasController.TestEliminar;
+var
+ ID: Integer;
+begin
+ Check(False);
+ // TODO: Setup method call parameters
+ FEmpresasController.Eliminar(ID);
+ // TODO: Validate method results
+end;
+
+procedure TestTEmpresasController.TestEliminar1;
+var
+ AEmpresa: IBizEmpresa;
+begin
+ Check(False);
+ // TODO: Setup method call parameters
+ FEmpresasController.Eliminar(AEmpresa);
+ // TODO: Validate method results
+end;
+
+procedure TestTEmpresasController.TestGuardar;
+var
+ AEmpresa: IBizEmpresa;
+begin
+ Check(False);
+ // TODO: Setup method call parameters
+ FEmpresasController.Guardar(AEmpresa);
+ // TODO: Validate method results
+end;
+
+procedure TestTEmpresasController.TestDescartarCambios;
+var
+ AEmpresa: IBizEmpresa;
+begin
+ Check(False);
+ // TODO: Setup method call parameters
+ FEmpresasController.DescartarCambios(AEmpresa);
+ // TODO: Validate method results
+end;
+
+procedure TestTEmpresasController.TestExiste;
+var
+ ReturnValue: Boolean;
+ ID: Integer;
+begin
+ Check(False);
+ // TODO: Setup method call parameters
+ ReturnValue := FEmpresasController.Existe(ID);
+ // TODO: Validate method results
+end;
+
+procedure TestTEmpresasController.TestAnadir;
+var
+ AEmpresa: IBizEmpresa;
+begin
+ Check(False);
+ // TODO: Setup method call parameters
+ FEmpresasController.Anadir(AEmpresa);
+ // TODO: Validate method results
+end;
+
+procedure TestTEmpresasController.TestBuscar;
+var
+ ReturnValue: IBizEmpresa;
+ ID: Integer;
+begin
+ Check(False);
+ // TODO: Setup method call parameters
+ ReturnValue := FEmpresasController.Buscar(ID);
+ // TODO: Validate method results
+end;
+
+procedure TestTEmpresasController.TestBuscarTodos;
+var
+ ReturnValue: IBizEmpresa;
+begin
+ ReturnValue := FEmpresasController.BuscarTodos;
+ // TODO: Validate method results
+end;
+
+procedure TestTEmpresasController.TestNuevo;
+var
+ ReturnValue: IBizEmpresa;
+begin
+ Check(False);
+ ReturnValue := FEmpresasController.Nuevo;
+ // TODO: Validate method results
+end;
+
+procedure TestTEmpresasController.TestVer;
+var
+ AEmpresa: IBizEmpresa;
+begin
+ Check(False);
+ // TODO: Setup method call parameters
+ FEmpresasController.Ver(AEmpresa);
+ // TODO: Validate method results
+end;
+
+procedure TestTEmpresasController.TestVerTodos;
+var
+ AEmpresas: IBizEmpresa;
+begin
+ Check(False);
+ // TODO: Setup method call parameters
+ FEmpresasController.VerTodos(AEmpresas);
+ // TODO: Validate method results
+end;
+
+procedure TestTEmpresasController.TestToStringList;
+var
+ ReturnValue: TStringList;
+ AEmpresa: IBizEmpresa;
+begin
+ Check(False);
+ // TODO: Setup method call parameters
+ ReturnValue := FEmpresasController.ToStringList(AEmpresa);
+ // TODO: Validate method results
+end;
+
+initialization
+ // Register any test cases with the test runner
+ RegisterTest(TestTEmpresasController.Suite);
+end.
+
diff --git a/Source/Base/Empresas/Test/uHostMainForm.dfm b/Source/Base/Empresas/Test/uHostMainForm.dfm
new file mode 100644
index 00000000..1de986c4
--- /dev/null
+++ b/Source/Base/Empresas/Test/uHostMainForm.dfm
@@ -0,0 +1,28 @@
+object HostMainForm: THostMainForm
+ Left = 0
+ Top = 0
+ Caption = 'HostMainForm'
+ ClientHeight = 598
+ ClientWidth = 690
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ OldCreateOrder = False
+ Position = poScreenCenter
+ OnCloseQuery = FormCloseQuery
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Panel1: TPanel
+ Left = 0
+ Top = 0
+ Width = 690
+ Height = 598
+ Align = alClient
+ BevelOuter = bvNone
+ TabOrder = 0
+ end
+end
diff --git a/Source/Base/Empresas/Test/uHostMainForm.pas b/Source/Base/Empresas/Test/uHostMainForm.pas
new file mode 100644
index 00000000..50f4b46e
--- /dev/null
+++ b/Source/Base/Empresas/Test/uHostMainForm.pas
@@ -0,0 +1,116 @@
+unit uHostMainForm;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+ Dialogs, uGUIBase, ExtCtrls, uCustomEditor, cxControls;
+
+type
+ THostMainForm = class(TForm, IHostForm)
+ Panel1: TPanel;
+ procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
+ procedure FormShow(Sender: TObject);
+ protected
+ FContenido : TCustomEditor;
+ function GetWorkPanel: TWinControl;
+ procedure OnWorkPanelChanged(AEditor : ICustomEditor);
+ procedure ShowEmbedded(AEditor : ICustomEditor);
+ procedure ReleaseEmbedded;
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ property WorkPanel: TWinControl read GetWorkPanel;
+ end;
+
+var
+ HostMainForm: THostMainForm;
+
+implementation
+
+{$R *.dfm}
+
+uses
+ TestFramework, GUITestRunner, TextTestRunner;
+
+
+{ TForm1 }
+
+constructor THostMainForm.Create(AOwner: TComponent);
+begin
+ inherited;
+ FContenido := NIL;
+end;
+
+destructor THostMainForm.Destroy;
+begin
+ ReleaseEmbedded;
+ inherited;
+end;
+
+procedure THostMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
+begin
+ CanClose := True;
+ if Assigned(FContenido) then
+ CanClose := FContenido.CloseQuery;
+end;
+
+procedure THostMainForm.FormShow(Sender: TObject);
+begin
+ if IsConsole then
+ TextTestRunner.RunRegisteredTests
+ else
+ GUITestRunner.RunRegisteredTestsModeless;
+ Self.SendToBack;
+end;
+
+function THostMainForm.GetWorkPanel: TWinControl;
+begin
+ Result := Panel1;
+end;
+
+procedure THostMainForm.OnWorkPanelChanged(AEditor: ICustomEditor);
+begin
+ //
+end;
+
+procedure THostMainForm.ReleaseEmbedded;
+begin
+ if Assigned(FContenido) then
+ FContenido.Release;
+ Application.ProcessMessages;
+end;
+
+procedure THostMainForm.ShowEmbedded(AEditor: ICustomEditor);
+begin
+ if Assigned(FContenido) then
+ if not FContenido.CloseQuery then
+ begin
+ AEditor.Release;
+ AEditor := NIL;
+ Exit;
+ end;
+
+ ShowHourglassCursor;
+ LockWindowUpdate(Handle);
+ try
+ FContenido := AEditor.GetInstance as TCustomEditor;
+ with (FContenido) do
+ begin
+ Visible := False;
+ BorderIcons := [];
+ BorderStyle := bsNone;
+ Parent := WorkPanel;
+ FContenido.Show;
+ Align := alClient;
+ FContenido.SetFocus;
+ end;
+ finally
+ Application.ProcessMessages;
+ LockWindowUpdate(0);
+ HideHourglassCursor;
+ end;
+ OnWorkPanelChanged(FContenido);
+end;
+
+end.
diff --git a/Source/Base/Empresas/Views/uEditorDatosBancariosEmpresa.dfm b/Source/Base/Empresas/Views/uEditorDatosBancariosEmpresa.dfm
new file mode 100644
index 00000000..adc3d192
--- /dev/null
+++ b/Source/Base/Empresas/Views/uEditorDatosBancariosEmpresa.dfm
@@ -0,0 +1,181 @@
+object fEditorDatosBancariosEmpresa: TfEditorDatosBancariosEmpresa
+ Left = 227
+ Top = 108
+ BorderStyle = bsDialog
+ Caption = 'Cambio de datos bancarios'
+ ClientHeight = 292
+ ClientWidth = 433
+ Color = clBtnFace
+ ParentFont = True
+ OldCreateOrder = True
+ Position = poOwnerFormCenter
+ DesignSize = (
+ 433
+ 292)
+ PixelsPerInch = 96
+ TextHeight = 13
+ object OKBtn: TButton
+ Left = 350
+ Top = 7
+ Width = 75
+ Height = 25
+ Anchors = [akTop, akRight]
+ Caption = '&Guardar'
+ ModalResult = 1
+ TabOrder = 0
+ end
+ object CancelBtn: TButton
+ Left = 350
+ Top = 38
+ Width = 75
+ Height = 25
+ Anchors = [akTop, akRight]
+ Cancel = True
+ Caption = '&Cancelar'
+ ModalResult = 2
+ TabOrder = 1
+ end
+ object GroupBox1: TGroupBox
+ Left = 8
+ Top = 8
+ Width = 329
+ Height = 176
+ Caption = 'Datos bancarios'
+ TabOrder = 2
+ object Label5: TLabel
+ Left = 12
+ Top = 31
+ Width = 77
+ Height = 13
+ AutoSize = False
+ Caption = 'Banco:'
+ end
+ object Label2: TLabel
+ Left = 12
+ Top = 67
+ Width = 77
+ Height = 13
+ AutoSize = False
+ Caption = 'C'#243'd. entidad:'
+ end
+ object Label3: TLabel
+ Left = 12
+ Top = 94
+ Width = 77
+ Height = 13
+ AutoSize = False
+ Caption = 'C'#243'd. sucursal:'
+ end
+ object Label4: TLabel
+ Left = 12
+ Top = 120
+ Width = 77
+ Height = 13
+ AutoSize = False
+ Caption = 'DC:'
+ end
+ object Label6: TLabel
+ Left = 11
+ Top = 146
+ Width = 78
+ Height = 13
+ AutoSize = False
+ Caption = 'Cuenta:'
+ end
+ object eNombre: TDBEdit
+ Left = 95
+ Top = 28
+ Width = 223
+ Height = 21
+ Color = clInfoBk
+ DataField = 'NOMBRE'
+ DataSource = dsDatosBancarios
+ TabOrder = 0
+ end
+ object eCodEntidad: TDBEdit
+ Left = 95
+ Top = 64
+ Width = 74
+ Height = 21
+ DataField = 'ENTIDAD'
+ DataSource = dsDatosBancarios
+ TabOrder = 1
+ end
+ object eCodSucursal: TDBEdit
+ Left = 95
+ Top = 90
+ Width = 74
+ Height = 21
+ DataField = 'SUCURSAL'
+ DataSource = dsDatosBancarios
+ TabOrder = 2
+ end
+ object eDC: TDBEdit
+ Left = 95
+ Top = 116
+ Width = 74
+ Height = 21
+ DataField = 'DC'
+ DataSource = dsDatosBancarios
+ MaxLength = 2
+ TabOrder = 3
+ end
+ object eCuenta: TDBEdit
+ Left = 95
+ Top = 142
+ Width = 223
+ Height = 21
+ DataField = 'CUENTA'
+ DataSource = dsDatosBancarios
+ TabOrder = 4
+ end
+ end
+ object GroupBox2: TGroupBox
+ Left = 8
+ Top = 190
+ Width = 329
+ Height = 83
+ Caption = 'Sufijos para normas CSB'
+ TabOrder = 3
+ object Label7: TLabel
+ Left = 12
+ Top = 28
+ Width = 77
+ Height = 13
+ AutoSize = False
+ Caption = 'Norma 19:'
+ end
+ object Label1: TLabel
+ Left = 12
+ Top = 55
+ Width = 77
+ Height = 13
+ AutoSize = False
+ Caption = 'Norma 58:'
+ end
+ object eNorma19: TDBEdit
+ Left = 95
+ Top = 24
+ Width = 74
+ Height = 21
+ DataField = 'SUFIJO_N19'
+ DataSource = dsDatosBancarios
+ MaxLength = 3
+ TabOrder = 0
+ end
+ object eNorma58: TDBEdit
+ Left = 95
+ Top = 51
+ Width = 74
+ Height = 21
+ DataField = 'SUFIJO_N58'
+ DataSource = dsDatosBancarios
+ MaxLength = 3
+ TabOrder = 1
+ end
+ end
+ object dsDatosBancarios: TDADataSource
+ Left = 352
+ Top = 72
+ end
+end
diff --git a/Source/Base/Empresas/Views/uEditorDatosBancariosEmpresa.pas b/Source/Base/Empresas/Views/uEditorDatosBancariosEmpresa.pas
new file mode 100644
index 00000000..c31fb01f
--- /dev/null
+++ b/Source/Base/Empresas/Views/uEditorDatosBancariosEmpresa.pas
@@ -0,0 +1,97 @@
+unit uEditorDatosBancariosEmpresa;
+
+interface
+
+uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
+ Buttons, ExtCtrls, Mask, DBCtrls, DB, uDADataTable, PngSpeedButton,
+ cxControls, cxContainer, cxEdit, cxTextEdit, cxHyperLinkEdit, cxDBEdit,
+ uIEditorDatosBancarioEmpresa, uDatosBancariosEmpresaController, uBizEmpresasDatosBancarios,
+ cxCurrencyEdit;
+
+type
+ TfEditorDatosBancariosEmpresa = class(TForm, IEditorDatosBancariosEmpresa)
+ OKBtn: TButton;
+ CancelBtn: TButton;
+ dsDatosBancarios: TDADataSource;
+ GroupBox1: TGroupBox;
+ Label5: TLabel;
+ eNombre: TDBEdit;
+ Label2: TLabel;
+ eCodEntidad: TDBEdit;
+ Label3: TLabel;
+ eCodSucursal: TDBEdit;
+ Label4: TLabel;
+ eDC: TDBEdit;
+ Label6: TLabel;
+ eCuenta: TDBEdit;
+ GroupBox2: TGroupBox;
+ Label7: TLabel;
+ eNorma19: TDBEdit;
+ Label1: TLabel;
+ eNorma58: TDBEdit;
+ protected
+ FController : IDatosBancariosEmpresaController;
+ FDatosBancarios: IBizEmpresasDatosBancarios;
+
+ function GetController : IDatosBancariosEmpresaController;
+ procedure SetController (const Value : IDatosBancariosEmpresaController);
+
+ function GetDatosBancarios: IBizEmpresasDatosBancarios;
+ procedure SetDatosBancarios(const Value: IBizEmpresasDatosBancarios);
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ property DatosBancarios: IBizEmpresasDatosBancarios read GetDatosBancarios write SetDatosBancarios;
+ property Controller : IDatosBancariosEmpresaController read GetController
+ write SetController;
+ end;
+
+implementation
+
+uses
+ Variants;
+
+{$R *.dfm}
+
+{ TfEditorDireccion }
+
+constructor TfEditorDatosBancariosEmpresa.Create(AOwner: TComponent);
+begin
+ inherited;
+ FController := NIL;
+end;
+
+destructor TfEditorDatosBancariosEmpresa.Destroy;
+begin
+ FController := NIL;
+ inherited;
+end;
+
+function TfEditorDatosBancariosEmpresa.GetController: IDatosBancariosEmpresaController;
+begin
+ Result := FController;
+end;
+
+function TfEditorDatosBancariosEmpresa.GetDatosBancarios: IBizEmpresasDatosBancarios;
+begin
+ Result := FDatosBancarios;
+end;
+
+procedure TfEditorDatosBancariosEmpresa.SetController(
+ const Value: IDatosBancariosEmpresaController);
+begin
+ FController := Value;
+end;
+
+procedure TfEditorDatosBancariosEmpresa.SetDatosBancarios(
+ const Value: IBizEmpresasDatosBancarios);
+begin
+ FDatosBancarios := Value;
+ if Assigned(FDatosBancarios) then
+ dsDatosBancarios.DataTable := FDatosBancarios.DataTable
+ else
+ dsDatosBancarios.DataTable := NIL;
+end;
+
+
+end.
diff --git a/Source/Base/Empresas/Views/uEditorEmpresa.dfm b/Source/Base/Empresas/Views/uEditorEmpresa.dfm
new file mode 100644
index 00000000..4bd2a6a0
--- /dev/null
+++ b/Source/Base/Empresas/Views/uEditorEmpresa.dfm
@@ -0,0 +1,336 @@
+inherited fEditorEmpresa: TfEditorEmpresa
+ Left = 575
+ Top = 291
+ HorzScrollBar.Visible = False
+ VertScrollBar.Visible = False
+ Caption = 'Ficha de empresa'
+ ClientHeight = 554
+ ClientWidth = 674
+ Scaled = False
+ ExplicitWidth = 682
+ ExplicitHeight = 588
+ PixelsPerInch = 96
+ TextHeight = 13
+ inherited JvNavPanelHeader: TJvNavPanelHeader
+ Width = 674
+ Caption = 'Empresa'
+ ExplicitWidth = 660
+ inherited Image1: TImage
+ Left = 647
+ ExplicitLeft = 607
+ end
+ end
+ inherited TBXDock: TTBXDock
+ Width = 674
+ ExplicitWidth = 660
+ inherited tbxMain: TTBXToolbar
+ ExplicitWidth = 324
+ inherited TBXItem2: TTBXItem
+ Visible = False
+ end
+ inherited TBXItem5: TTBXItem
+ Visible = False
+ end
+ inherited TBXItem23: TTBXItem
+ Visible = False
+ end
+ inherited TBXItem3: TTBXItem
+ Visible = False
+ end
+ end
+ inherited tbxMenu: TTBXToolbar
+ DockPos = 0
+ ExplicitWidth = 674
+ inherited TBXSubmenuItem4: TTBXSubmenuItem
+ inherited TBXItem8: TTBXItem
+ Visible = False
+ end
+ inherited TBXSeparatorItem5: TTBXSeparatorItem
+ Visible = False
+ end
+ inherited TBXItem10: TTBXItem
+ Visible = False
+ end
+ inherited TBXItem21: TTBXItem
+ Visible = False
+ end
+ inherited TBXItem22: TTBXItem
+ Visible = False
+ end
+ inherited TBXItem9: TTBXItem
+ Visible = False
+ end
+ end
+ inherited TBXSubmenuItem1: TTBXSubmenuItem
+ inherited TBXItem32: TTBXItem
+ Visible = False
+ end
+ inherited TBXItem31: TTBXItem
+ Visible = False
+ end
+ inherited TBXSeparatorItem13: TTBXSeparatorItem
+ Visible = False
+ end
+ end
+ end
+ end
+ inherited pgPaginas: TPageControl
+ Width = 674
+ Height = 459
+ ExplicitWidth = 660
+ ExplicitHeight = 451
+ inherited pagGeneral: TTabSheet
+ ExplicitLeft = 4
+ ExplicitTop = 24
+ ExplicitWidth = 652
+ ExplicitHeight = 423
+ inline frViewEmpresa1: TfrViewEmpresa
+ Left = 0
+ Top = 0
+ Width = 666
+ Height = 431
+ Align = alClient
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ ReadOnly = False
+ ExplicitWidth = 652
+ ExplicitHeight = 423
+ inherited dxLayoutControl1: TdxLayoutControl
+ Width = 666
+ Height = 431
+ LookAndFeel = dxLayoutOfficeLookAndFeel1
+ ExplicitWidth = 652
+ ExplicitHeight = 423
+ inherited PngSpeedButton1: TPngSpeedButton
+ Left = 621
+ Top = 295
+ ExplicitLeft = 621
+ ExplicitTop = 295
+ end
+ inherited PngSpeedButton2: TPngSpeedButton
+ Left = 621
+ Top = 267
+ ExplicitLeft = 621
+ ExplicitTop = 267
+ end
+ inherited eCalle: TcxDBTextEdit
+ Top = 189
+ ExplicitTop = 189
+ ExplicitWidth = 84
+ Width = 84
+ end
+ inherited eProvincia: TcxDBTextEdit
+ Top = 243
+ ExplicitTop = 243
+ ExplicitWidth = 60
+ Width = 60
+ end
+ inherited ePoblacion: TcxDBTextEdit
+ Top = 216
+ ExplicitTop = 216
+ ExplicitWidth = 100
+ Width = 100
+ end
+ inherited eCodigoPostal: TcxDBTextEdit
+ Left = 289
+ Top = 216
+ ExplicitLeft = 289
+ ExplicitTop = 216
+ end
+ inherited ePaginaWeb: TcxDBTextEdit
+ Left = 477
+ Top = 216
+ ExplicitLeft = 477
+ ExplicitTop = 216
+ ExplicitWidth = 165
+ Width = 165
+ end
+ inherited eMailParticular: TcxDBTextEdit
+ Left = 477
+ Top = 189
+ ExplicitLeft = 477
+ ExplicitTop = 189
+ ExplicitWidth = 165
+ Width = 165
+ end
+ inherited eMailTrabajo: TcxDBTextEdit
+ Left = 477
+ Top = 162
+ ExplicitLeft = 477
+ ExplicitTop = 162
+ ExplicitWidth = 129
+ Width = 129
+ end
+ inherited cxDBMemo1: TcxDBMemo
+ Top = 294
+ ExplicitTop = 294
+ ExplicitWidth = 107
+ ExplicitHeight = 234
+ Height = 234
+ Width = 107
+ end
+ inherited eTlfParticular: TcxDBTextEdit
+ Left = 477
+ Top = 57
+ ExplicitLeft = 477
+ ExplicitTop = 57
+ ExplicitWidth = 91
+ Width = 91
+ end
+ inherited eTlfTrabajo: TcxDBTextEdit
+ Left = 477
+ Top = 30
+ ExplicitLeft = 477
+ ExplicitTop = 30
+ ExplicitWidth = 127
+ Width = 127
+ end
+ inherited eTlfMovil: TcxDBTextEdit
+ Left = 477
+ Top = 84
+ ExplicitLeft = 477
+ ExplicitTop = 84
+ ExplicitWidth = 155
+ Width = 155
+ end
+ inherited eFax: TcxDBTextEdit
+ Left = 477
+ Top = 111
+ ExplicitLeft = 477
+ ExplicitTop = 111
+ ExplicitWidth = 121
+ Width = 121
+ end
+ inherited eNombre: TcxDBTextEdit
+ Top = 30
+ ExplicitTop = 30
+ ExplicitWidth = 108
+ Width = 108
+ end
+ inherited eNIFCIF: TcxDBTextEdit
+ Top = 57
+ ExplicitTop = 57
+ ExplicitWidth = 108
+ Width = 108
+ end
+ inherited memRegistroMercantil: TcxDBMemo
+ Top = 84
+ ExplicitTop = 84
+ ExplicitWidth = 76
+ Width = 76
+ end
+ inherited cxDBSpinEdit1: TcxDBSpinEdit
+ Top = 138
+ ExplicitTop = 138
+ end
+ inherited cxDBImage1: TcxDBImage
+ Left = 382
+ Top = 267
+ ExplicitLeft = 382
+ ExplicitTop = 267
+ ExplicitWidth = 140
+ ExplicitHeight = 100
+ Height = 100
+ Width = 140
+ end
+ end
+ end
+ end
+ object TabSheet1: TTabSheet
+ Caption = 'Datos bancarios'
+ ImageIndex = 1
+ ExplicitWidth = 652
+ ExplicitHeight = 423
+ inline frViewDatosBancarios1: TfrViewDatosBancarios
+ Left = 0
+ Top = 0
+ Width = 666
+ Height = 431
+ Align = alClient
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ ReadOnly = False
+ ExplicitWidth = 652
+ ExplicitHeight = 423
+ inherited cxGrid: TcxGrid
+ Width = 666
+ Height = 406
+ ExplicitWidth = 652
+ ExplicitHeight = 398
+ end
+ inherited ToolBar1: TToolBar
+ Width = 666
+ ExplicitWidth = 666
+ inherited ToolButton1: TToolButton
+ ExplicitWidth = 62
+ end
+ inherited ToolButton4: TToolButton
+ ExplicitWidth = 74
+ end
+ inherited ToolButton2: TToolButton
+ ExplicitWidth = 67
+ end
+ inherited ToolButton7: TToolButton
+ ExplicitWidth = 117
+ end
+ end
+ end
+ end
+ end
+ inherited StatusBar: TJvStatusBar
+ Top = 535
+ Width = 674
+ Panels = <
+ item
+ Width = 200
+ end>
+ ExplicitTop = 527
+ ExplicitWidth = 660
+ end
+ inherited EditorActionList: TActionList
+ Top = 128
+ end
+ inherited SmallImages: TPngImageList
+ Left = 403
+ Top = 176
+ end
+ inherited dsDataTable: TDADataSource [6]
+ Left = 168
+ Top = 120
+ end
+ inherited LargeImages: TPngImageList [7]
+ Left = 435
+ Top = 176
+ end
+ inherited JvFormStorage: TJvFormStorage [8]
+ Left = 408
+ Top = 208
+ end
+ inherited JvAppRegistryStorage: TJvAppRegistryStorage
+ Left = 440
+ Top = 208
+ 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/Base/Empresas/Views/uEditorEmpresa.pas b/Source/Base/Empresas/Views/uEditorEmpresa.pas
new file mode 100644
index 00000000..332cafac
--- /dev/null
+++ b/Source/Base/Empresas/Views/uEditorEmpresa.pas
@@ -0,0 +1,183 @@
+unit uEditorEmpresa;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+ Dialogs, uEditorDBItem, ToolWin, ComCtrls, JvExControls, JvComponent,
+ uBizEmpresas, JvNavigationPane, ActnList,
+ uEditorBase, StdActns, TB2Dock, TB2Toolbar, TBX, ImgList, PngImageList,
+ TB2Item, uEditorItem, DB, uDADataTable, uEditorDBBase, JvFormAutoSize,
+ uDAScriptingProvider, uDACDSDataTable, StdCtrls, pngimage, ExtCtrls,
+ TBXDkPanels, JvButton, AppEvnts, uCustomView, uViewBase,
+ JvAppStorage, JvAppRegistryStorage, JvFormPlacement, JvComponentBase,
+ uViewEmpresa, uIEditorEmpresa, uEmpresasController, dxLayoutLookAndFeels,
+ JvExComCtrls, JvStatusBar, uViewDetallesGenerico, uViewDatosBancarios;
+
+type
+ TfEditorEmpresa = class(TfEditorDBItem, IEditorEmpresa)
+ frViewEmpresa1: TfrViewEmpresa;
+ dxLayoutLookAndFeelList1: TdxLayoutLookAndFeelList;
+ dxLayoutOfficeLookAndFeel1: TdxLayoutOfficeLookAndFeel;
+ TabSheet1: TTabSheet;
+ frViewDatosBancarios1: TfrViewDatosBancarios;
+ procedure FormShow(Sender: TObject);
+ procedure actRefrescarUpdate(Sender: TObject);
+ procedure dsDataTableDataChange(Sender: TObject; Field: TField);
+ private
+ FController : IEmpresasController;
+ FEmpresa: IBizEmpresa;
+ FViewEmpresa : IViewEmpresa;
+ protected
+ function GetEmpresa: IBizEmpresa; virtual;
+ procedure SetEmpresa(const Value: IBizEmpresa); virtual;
+
+ function GetViewEmpresa: IViewEmpresa;
+ procedure SetViewEmpresa(const Value: IViewEmpresa);
+ procedure GuardarInterno; override;
+ procedure EliminarInterno; override;
+ property ViewEmpresa: IViewEmpresa read GetViewEmpresa write
+ SetViewEmpresa;
+ function GetController : IEmpresasController; virtual;
+ procedure SetController (const Value : IEmpresasController); virtual;
+
+ public
+ constructor Create(AOwner: TComponent); override;
+ procedure PonerTitulos(const ATitulo: string = ''); override;
+ property Controller : IEmpresasController read GetController
+ write SetController;
+ property Empresa: IBizEmpresa read GetEmpresa write SetEmpresa;
+ destructor Destroy; override;
+ end;
+
+implementation
+
+{$R *.dfm}
+
+uses
+ uCustomEditor, uDataModuleEmpresas, uDataModuleBase;
+
+{
+******************************* TfEditorEmpresa *******************************
+}
+function TfEditorEmpresa.GetEmpresa: IBizEmpresa;
+begin
+ Result := FEmpresa;
+end;
+
+function TfEditorEmpresa.GetController: IEmpresasController;
+begin
+ Result := FController;
+end;
+
+function TfEditorEmpresa.GetViewEmpresa: IViewEmpresa;
+begin
+ Result := FViewEmpresa;
+end;
+
+procedure TfEditorEmpresa.GuardarInterno;
+begin
+ inherited;
+ FController.Guardar(FEmpresa);
+ Modified := False;
+end;
+
+procedure TfEditorEmpresa.PonerTitulos(const ATitulo: string);
+var
+ FTitulo : String;
+begin
+ if (ATitulo = '') and Assigned(FEmpresa) then
+ begin
+ if Length(FEmpresa.Nombre) = 0 then
+ FTitulo := 'Nueva empresa'
+ else
+ FTitulo := 'Empresa' + ' - ' + FEmpresa.Nombre
+ end;
+
+ inherited PonerTitulos(FTitulo);
+end;
+
+procedure TfEditorEmpresa.SetEmpresa(const Value: IBizEmpresa);
+begin
+ FEmpresa := Value;
+ dsDataTable.DataTable := FEmpresa.DataTable;
+
+ if Assigned(FViewEmpresa) and Assigned(Empresa) then
+ begin
+ FViewEmpresa.Empresa := FEmpresa;
+ frViewDatosBancarios1.dsDetalles.DataTable := FEmpresa.DatosBancarios.DataTable
+ end
+ else begin
+ FViewEmpresa.Empresa := NIL;
+ frViewDatosBancarios1.dsDetalles.DataTable := NIL;
+ end;
+end;
+
+procedure TfEditorEmpresa.SetController(const Value: IEmpresasController);
+begin
+ FController := Value;
+end;
+
+procedure TfEditorEmpresa.SetViewEmpresa(const Value: IViewEmpresa);
+begin
+ FViewEmpresa := Value;
+
+ if Assigned(FViewEmpresa) and Assigned(Empresa) then
+ FViewEmpresa.Empresa := Empresa;
+end;
+
+procedure TfEditorEmpresa.FormShow(Sender: TObject);
+begin
+ inherited;
+
+ if not Assigned(FViewEmpresa) then
+ raise Exception.Create('No hay ninguna vista asignada');
+
+ if not Assigned(Empresa) then
+ raise Exception.Create('No hay ningún Empresa asignado');
+
+ Empresa.DataTable.Active := True;
+// FViewEmpresa.ShowEmbedded(pagGeneral);
+ FViewEmpresa.SetFocus;
+end;
+
+procedure TfEditorEmpresa.actRefrescarUpdate(Sender: TObject);
+begin
+ if Assigned(dsDataTable.DataTable) then
+ (Sender as TAction).Enabled := (not dsDataTable.DataTable.Fetching) or
+ (not dsDataTable.DataTable.Opening) or
+ (not dsDataTable.DataTable.Closing) or
+ (not FEmpresa.EsNuevo)
+ else
+ (Sender as TAction).Enabled := False;
+end;
+
+constructor TfEditorEmpresa.Create(AOwner: TComponent);
+begin
+ inherited;
+ FViewEmpresa := frViewEmpresa1;
+end;
+
+destructor TfEditorEmpresa.Destroy;
+begin
+ FViewEmpresa := NIL;
+ FEmpresa := NIL;
+ inherited;
+end;
+
+procedure TfEditorEmpresa.dsDataTableDataChange(Sender: TObject; Field: TField);
+begin
+ inherited;
+ if Assigned(FEmpresa) and (not (FEmpresa.DataTable.Fetching) or
+ not (FEmpresa.DataTable.Opening) or not (FEmpresa.DataTable.Closing)) then
+ PonerTitulos;
+end;
+
+procedure TfEditorEmpresa.EliminarInterno;
+begin
+ inherited;
+ FController.Eliminar(FEmpresa);
+end;
+
+end.
+
diff --git a/Source/Base/Empresas/Views/uEmpresasViewRegister.pas b/Source/Base/Empresas/Views/uEmpresasViewRegister.pas
new file mode 100644
index 00000000..58386775
--- /dev/null
+++ b/Source/Base/Empresas/Views/uEmpresasViewRegister.pas
@@ -0,0 +1,25 @@
+unit uEmpresasViewRegister;
+
+interface
+
+procedure RegisterViews;
+procedure UnregisterViews;
+
+implementation
+
+uses
+ uEditorRegistryUtils, uEditorEmpresa, uEditorDatosBancariosEmpresa;
+
+procedure RegisterViews;
+begin
+ EditorRegistry.RegisterClass(TfEditorEmpresa, 'EditorEmpresa');
+ EditorRegistry.RegisterClass(TfEditorDatosBancariosEmpresa, 'EditorDatosBancariosEmpresa');
+end;
+
+procedure UnregisterViews;
+begin
+ EditorRegistry.UnRegisterClass(TfEditorEmpresa);
+ EditorRegistry.UnRegisterClass(TfEditorDatosBancariosEmpresa);
+end;
+
+end.
diff --git a/Source/Base/Empresas/Views/uViewDatosBancarios.dfm b/Source/Base/Empresas/Views/uViewDatosBancarios.dfm
new file mode 100644
index 00000000..9ffd2041
--- /dev/null
+++ b/Source/Base/Empresas/Views/uViewDatosBancarios.dfm
@@ -0,0 +1,52 @@
+inherited frViewDatosBancarios: TfrViewDatosBancarios
+ Width = 583
+ Height = 464
+ ExplicitWidth = 583
+ ExplicitHeight = 464
+ inherited cxGrid: TcxGrid
+ Width = 583
+ Height = 439
+ ExplicitWidth = 583
+ ExplicitHeight = 439
+ inherited cxGridView: TcxGridDBTableView
+ OnDblClick = cxGridViewDblClick
+ OptionsData.Appending = False
+ OptionsData.Deleting = False
+ OptionsData.DeletingConfirmation = False
+ OptionsData.Editing = False
+ OptionsData.Inserting = False
+ object cxGridViewNOMBRE: TcxGridDBColumn
+ DataBinding.FieldName = 'NOMBRE'
+ Width = 191
+ end
+ object cxGridViewENTIDAD: TcxGridDBColumn
+ DataBinding.FieldName = 'ENTIDAD'
+ Width = 48
+ end
+ object cxGridViewSUCURSAL: TcxGridDBColumn
+ DataBinding.FieldName = 'SUCURSAL'
+ Width = 48
+ end
+ object cxGridViewDC: TcxGridDBColumn
+ DataBinding.FieldName = 'DC'
+ Width = 29
+ end
+ object cxGridViewCUENTA: TcxGridDBColumn
+ DataBinding.FieldName = 'CUENTA'
+ Width = 141
+ end
+ object cxGridViewSUFIJO_N19: TcxGridDBColumn
+ DataBinding.FieldName = 'SUFIJO_N19'
+ Width = 55
+ end
+ object cxGridViewSUFIJO_N58: TcxGridDBColumn
+ DataBinding.FieldName = 'SUFIJO_N58'
+ Width = 57
+ end
+ end
+ end
+ inherited ToolBar1: TToolBar
+ Width = 583
+ ExplicitWidth = 583
+ end
+end
diff --git a/Source/Base/Empresas/Views/uViewDatosBancarios.pas b/Source/Base/Empresas/Views/uViewDatosBancarios.pas
new file mode 100644
index 00000000..bcc0aca5
--- /dev/null
+++ b/Source/Base/Empresas/Views/uViewDatosBancarios.pas
@@ -0,0 +1,67 @@
+unit uViewDatosBancarios;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+ Dialogs, uViewBase, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData,
+ cxDataStorage, cxEdit, DB, cxDBData, cxTextEdit, cxGridLevel,
+ cxGridCustomTableView, cxGridTableView, cxGridBandedTableView,
+ cxGridDBBandedTableView, cxClasses, cxControls, cxGridCustomView, cxGrid,
+ uDADataTable, Grids, DBGrids, ActnList, ImgList, PngImageList, ComCtrls,
+ ToolWin, cxGridDBTableView, uViewDetallesGenerico, cxCurrencyEdit;
+
+type
+ TfrViewDatosBancarios = class(TfrViewDetallesGenerico)
+ cxGridViewNOMBRE: TcxGridDBColumn;
+ cxGridViewENTIDAD: TcxGridDBColumn;
+ cxGridViewSUCURSAL: TcxGridDBColumn;
+ cxGridViewDC: TcxGridDBColumn;
+ cxGridViewCUENTA: TcxGridDBColumn;
+ cxGridViewSUFIJO_N19: TcxGridDBColumn;
+ cxGridViewSUFIJO_N58: TcxGridDBColumn;
+ procedure cxGridViewDblClick(Sender: TObject);
+ protected
+ procedure AnadirInterno; override;
+ procedure ModificarInterno; override;
+ public
+ { Public declarations }
+ end;
+
+implementation
+
+{$R *.dfm}
+
+uses
+ uDatosBancariosEmpresaController, uBizEmpresasDatosBancarios,
+ uDataModuleEmpresas;
+
+procedure TfrViewDatosBancarios.AnadirInterno;
+begin
+ inherited;
+ try
+ with TDatosBancariosEmpresaController.Create do
+ Ver((dsDetalles.DataTable) as IBizEmpresasDatosBancarios);
+ finally
+ if (dsDetalles.DataTable.State in dsEditModes) then
+ dsDetalles.DataTable.Post;
+ end;
+end;
+
+procedure TfrViewDatosBancarios.cxGridViewDblClick(Sender: TObject);
+begin
+ inherited;
+ actModificar.Execute;
+end;
+
+procedure TfrViewDatosBancarios.ModificarInterno;
+begin
+ inherited;
+ with TDatosBancariosEmpresaController.Create do
+ Ver((dsDetalles.DataTable) as IBizEmpresasDatosBancarios);
+end;
+
+end.
+
+
+
diff --git a/Source/Base/Empresas/Views/uViewEmpresa.dfm b/Source/Base/Empresas/Views/uViewEmpresa.dfm
new file mode 100644
index 00000000..a2b17571
--- /dev/null
+++ b/Source/Base/Empresas/Views/uViewEmpresa.dfm
@@ -0,0 +1,595 @@
+inherited frViewEmpresa: TfrViewEmpresa
+ Width = 590
+ Height = 385
+ ExplicitWidth = 590
+ ExplicitHeight = 385
+ object dxLayoutControl1: TdxLayoutControl
+ Left = 0
+ Top = 0
+ Width = 590
+ Height = 385
+ Align = alClient
+ ParentBackground = True
+ TabOrder = 0
+ AutoContentSizes = [acsWidth, acsHeight]
+ object PngSpeedButton1: TPngSpeedButton
+ Left = 545
+ Top = 305
+ Width = 23
+ Height = 22
+ Action = actEliminar
+ PngOptions = [pngBlendOnDisabled, pngGrayscaleOnDisabled]
+ end
+ object PngSpeedButton2: TPngSpeedButton
+ Left = 545
+ Top = 277
+ Width = 23
+ Height = 22
+ Action = actAnadir
+ PngOptions = [pngBlendOnDisabled, pngGrayscaleOnDisabled]
+ end
+ object eCalle: TcxDBTextEdit
+ Left = 117
+ Top = 193
+ DataBinding.DataField = 'CALLE'
+ DataBinding.DataSource = DADataSource
+ Style.BorderColor = clWindowFrame
+ Style.BorderStyle = ebs3D
+ 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 = 84
+ end
+ object eProvincia: TcxDBTextEdit
+ Left = 117
+ Top = 247
+ DataBinding.DataField = 'PROVINCIA'
+ DataBinding.DataSource = DADataSource
+ Style.BorderColor = clWindowFrame
+ Style.BorderStyle = ebs3D
+ 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 = 7
+ Width = 60
+ end
+ object ePoblacion: TcxDBTextEdit
+ Left = 117
+ Top = 220
+ DataBinding.DataField = 'POBLACION'
+ DataBinding.DataSource = DADataSource
+ Style.BorderColor = clWindowFrame
+ Style.BorderStyle = ebs3D
+ 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 = 100
+ end
+ object eCodigoPostal: TcxDBTextEdit
+ Left = 246
+ Top = 220
+ DataBinding.DataField = 'CODIGO_POSTAL'
+ DataBinding.DataSource = DADataSource
+ Style.BorderColor = clWindowFrame
+ Style.BorderStyle = ebs3D
+ 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 = 6
+ Width = 65
+ end
+ object ePaginaWeb: TcxDBTextEdit
+ Left = 436
+ Top = 220
+ DataBinding.DataField = 'PAGINA_WEB'
+ DataBinding.DataSource = DADataSource
+ Style.BorderColor = clWindowFrame
+ Style.BorderStyle = ebs3D
+ 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 = 15
+ Width = 165
+ end
+ object eMailParticular: TcxDBTextEdit
+ Left = 436
+ Top = 193
+ DataBinding.DataField = 'EMAIL_2'
+ DataBinding.DataSource = DADataSource
+ Style.BorderColor = clWindowFrame
+ Style.BorderStyle = ebs3D
+ 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 = 14
+ Width = 165
+ end
+ object eMailTrabajo: TcxDBTextEdit
+ Left = 436
+ Top = 166
+ DataBinding.DataField = 'EMAIL_1'
+ DataBinding.DataSource = DADataSource
+ Style.BorderColor = clWindowFrame
+ Style.BorderStyle = ebs3D
+ 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 = 13
+ Width = 129
+ end
+ object cxDBMemo1: TcxDBMemo
+ Left = 22
+ Top = 304
+ DataBinding.DataField = 'NOTAS'
+ DataBinding.DataSource = DADataSource
+ Style.BorderColor = clWindowFrame
+ Style.BorderStyle = ebs3D
+ 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 = 8
+ Height = 234
+ Width = 107
+ end
+ object eTlfParticular: TcxDBTextEdit
+ Left = 436
+ Top = 55
+ DataBinding.DataField = 'TELEFONO_2'
+ DataBinding.DataSource = DADataSource
+ Style.BorderColor = clWindowFrame
+ Style.BorderStyle = ebs3D
+ 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 = 10
+ Width = 91
+ end
+ object eTlfTrabajo: TcxDBTextEdit
+ Left = 436
+ Top = 28
+ DataBinding.DataField = 'TELEFONO_1'
+ DataBinding.DataSource = DADataSource
+ Style.BorderColor = clWindowFrame
+ Style.BorderStyle = ebs3D
+ 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 = 9
+ Width = 127
+ end
+ object eTlfMovil: TcxDBTextEdit
+ Left = 436
+ Top = 82
+ DataBinding.DataField = 'MOVIL_1'
+ DataBinding.DataSource = DADataSource
+ Style.BorderColor = clWindowFrame
+ Style.BorderStyle = ebs3D
+ 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 = 11
+ Width = 155
+ end
+ object eFax: TcxDBTextEdit
+ Left = 436
+ Top = 109
+ DataBinding.DataField = 'FAX'
+ DataBinding.DataSource = DADataSource
+ Style.BorderColor = clWindowFrame
+ Style.BorderStyle = ebs3D
+ 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 = 12
+ Width = 121
+ end
+ object eNombre: TcxDBTextEdit
+ Left = 117
+ Top = 28
+ DataBinding.DataField = 'NOMBRE'
+ DataBinding.DataSource = DADataSource
+ 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 = 0
+ Width = 108
+ end
+ object eNIFCIF: TcxDBTextEdit
+ Left = 117
+ Top = 55
+ DataBinding.DataField = 'NIF_CIF'
+ DataBinding.DataSource = DADataSource
+ 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 = 1
+ Width = 108
+ end
+ object memRegistroMercantil: TcxDBMemo
+ Left = 117
+ Top = 82
+ DataBinding.DataField = 'REGISTRO_MERCANTIL'
+ DataBinding.DataSource = DADataSource
+ 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
+ Height = 48
+ Width = 76
+ end
+ object cxDBSpinEdit1: TcxDBSpinEdit
+ Left = 117
+ Top = 136
+ DataBinding.DataField = 'IVA'
+ DataBinding.DataSource = DADataSource
+ Style.BorderColor = clWindowFrame
+ Style.BorderStyle = ebs3D
+ Style.HotTrack = False
+ Style.LookAndFeel.Kind = lfStandard
+ Style.LookAndFeel.NativeStyle = True
+ Style.ButtonStyle = bts3D
+ 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 = 60
+ end
+ object cxDBImage1: TcxDBImage
+ Left = 341
+ Top = 277
+ DataBinding.DataField = 'LOGOTIPO'
+ DataBinding.DataSource = DADataSource
+ Properties.Stretch = True
+ Style.BorderColor = clWindowFrame
+ Style.BorderStyle = ebs3D
+ Style.HotTrack = False
+ Style.LookAndFeel.NativeStyle = True
+ StyleDisabled.LookAndFeel.NativeStyle = True
+ StyleFocused.LookAndFeel.NativeStyle = True
+ StyleHot.LookAndFeel.NativeStyle = True
+ TabOrder = 16
+ Height = 100
+ Width = 140
+ end
+ object dxLayoutControl1Group_Root: TdxLayoutGroup
+ ShowCaption = False
+ Hidden = True
+ LayoutDirection = ldHorizontal
+ ShowBorder = False
+ object dxLayoutControl1Group4: TdxLayoutGroup
+ AutoAligns = [aaVertical]
+ AlignHorz = ahClient
+ ShowCaption = False
+ Hidden = True
+ ShowBorder = False
+ object dxLayoutControl1Group1: TdxLayoutGroup
+ AutoAligns = []
+ AlignHorz = ahClient
+ AlignVert = avClient
+ Caption = 'Datos generales'
+ object dxLayoutControl1Item13: TdxLayoutItem
+ Caption = 'Nombre:'
+ Control = eNombre
+ ControlOptions.ShowBorder = False
+ end
+ object dxLayoutControl1Item14: TdxLayoutItem
+ Caption = 'CIF:'
+ Control = eNIFCIF
+ ControlOptions.ShowBorder = False
+ end
+ object dxLayoutControl1Item15: TdxLayoutItem
+ Caption = 'Registro mercantil:'
+ CaptionOptions.AlignVert = tavTop
+ Control = memRegistroMercantil
+ ControlOptions.ShowBorder = False
+ end
+ object dxLayoutControl1Item16: TdxLayoutItem
+ AutoAligns = [aaVertical]
+ Caption = 'IVA por defecto:'
+ Control = cxDBSpinEdit1
+ ControlOptions.ShowBorder = False
+ end
+ end
+ object dxLayoutControl1Group3: TdxLayoutGroup
+ AutoAligns = [aaHorizontal]
+ Caption = 'Direcci'#243'n'
+ object dxLayoutControl1Item1: TdxLayoutItem
+ Caption = 'Calle:'
+ Control = eCalle
+ ControlOptions.ShowBorder = False
+ end
+ object dxLayoutControl1Group8: TdxLayoutGroup
+ ShowCaption = False
+ Hidden = True
+ LayoutDirection = ldHorizontal
+ ShowBorder = False
+ object dxLayoutControl1Item3: TdxLayoutItem
+ AutoAligns = [aaVertical]
+ AlignHorz = ahClient
+ Caption = 'Poblaci'#243'n:'
+ Control = ePoblacion
+ ControlOptions.ShowBorder = False
+ end
+ object dxLayoutControl1Item4: TdxLayoutItem
+ Caption = 'C'#243'd. postal:'
+ Control = eCodigoPostal
+ ControlOptions.ShowBorder = False
+ end
+ end
+ object dxLayoutControl1Item2: TdxLayoutItem
+ Caption = 'Provincia:'
+ Control = eProvincia
+ ControlOptions.ShowBorder = False
+ end
+ end
+ object dxLayoutControl1Group7: TdxLayoutGroup
+ AutoAligns = []
+ AlignHorz = ahClient
+ AlignVert = avClient
+ Caption = 'Observaciones'
+ object dxLayoutControl1Item8: TdxLayoutItem
+ AutoAligns = [aaHorizontal]
+ AlignVert = avClient
+ Caption = 'cxDBMemo1'
+ ShowCaption = False
+ Control = cxDBMemo1
+ ControlOptions.ShowBorder = False
+ end
+ end
+ end
+ object dxLayoutControl1Group6: TdxLayoutGroup
+ AutoAligns = []
+ AlignHorz = ahClient
+ AlignVert = avClient
+ ShowCaption = False
+ Hidden = True
+ ShowBorder = False
+ object dxLayoutControl1Group2: TdxLayoutGroup
+ AutoAligns = []
+ AlignHorz = ahClient
+ Caption = 'Tel'#233'fonos'
+ object dxLayoutControl1Item10: TdxLayoutItem
+ Caption = 'Tlf. trabajo:'
+ Control = eTlfTrabajo
+ ControlOptions.ShowBorder = False
+ end
+ object dxLayoutControl1Item9: TdxLayoutItem
+ Caption = 'Tlf. particular:'
+ Control = eTlfParticular
+ ControlOptions.ShowBorder = False
+ end
+ object dxLayoutControl1Item11: TdxLayoutItem
+ Caption = 'M'#243'vil:'
+ Control = eTlfMovil
+ ControlOptions.ShowBorder = False
+ end
+ object dxLayoutControl1Item12: TdxLayoutItem
+ Caption = 'Fax:'
+ Control = eFax
+ ControlOptions.ShowBorder = False
+ end
+ end
+ object dxLayoutControl1Group5: TdxLayoutGroup
+ Caption = 'Correo electr'#243'nico e internet'
+ object dxLayoutControl1Item7: TdxLayoutItem
+ Caption = 'Correo de trabajo:'
+ Control = eMailTrabajo
+ ControlOptions.ShowBorder = False
+ end
+ object dxLayoutControl1Item6: TdxLayoutItem
+ Caption = 'Correo particular:'
+ Control = eMailParticular
+ ControlOptions.ShowBorder = False
+ end
+ object dxLayoutControl1Item5: TdxLayoutItem
+ Caption = 'P'#225'gina web:'
+ Control = ePaginaWeb
+ ControlOptions.ShowBorder = False
+ end
+ end
+ object dxLayoutControl1Group10: TdxLayoutGroup
+ AutoAligns = []
+ AlignHorz = ahClient
+ AlignVert = avClient
+ Caption = 'Logotipo'
+ LayoutDirection = ldHorizontal
+ object dxLayoutControl1Item17: TdxLayoutItem
+ AutoAligns = []
+ AlignHorz = ahClient
+ AlignVert = avClient
+ Caption = 'cxDBImage1'
+ ShowCaption = False
+ Control = cxDBImage1
+ ControlOptions.ShowBorder = False
+ end
+ object dxLayoutControl1Group12: TdxLayoutGroup
+ ShowCaption = False
+ Hidden = True
+ ShowBorder = False
+ object dxLayoutControl1Item20: TdxLayoutItem
+ AutoAligns = [aaVertical]
+ AlignHorz = ahRight
+ Caption = 'PngSpeedButton2'
+ ShowCaption = False
+ Control = PngSpeedButton2
+ ControlOptions.ShowBorder = False
+ end
+ object dxLayoutControl1Item19: TdxLayoutItem
+ AutoAligns = [aaVertical]
+ AlignHorz = ahRight
+ Caption = 'PngSpeedButton1'
+ ShowCaption = False
+ Control = PngSpeedButton1
+ ControlOptions.ShowBorder = False
+ end
+ end
+ end
+ end
+ end
+ object dxLayoutControl1Group9: TdxLayoutGroup
+ end
+ object dxLayoutControl1Group11: TdxLayoutGroup
+ end
+ end
+ object DADataSource: TDADataSource
+ Left = 16
+ Top = 56
+ end
+ object ActionList1: TActionList
+ Images = SmallImages
+ Left = 448
+ Top = 256
+ object actAnadir: TAction
+ ImageIndex = 0
+ OnExecute = actAnadirExecute
+ OnUpdate = actAnadirUpdate
+ end
+ object actEliminar: TAction
+ ImageIndex = 1
+ OnExecute = actEliminarExecute
+ OnUpdate = actEliminarUpdate
+ end
+ end
+ object SmallImages: TPngImageList
+ PngImages = <
+ item
+ PngImage.Data = {
+ 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
+ 610000000970485973000017120000171201679FD252000000D04944415478DA
+ 6364C0062630FCC72A5EC0C0882EC488CB80191909706EDDBA750CAF767D6260
+ 5830240DF8F9FB3743EBE6CD780CC011602003409A7F0071EF8E1D10030C30D5
+ 31A23B1706609AB1E23F7FC0F4FA2967B01B408CE6A3B76E815D856100319ABF
+ FFFAC570EEC103540340218D0C92EDECE01AD79E398335ACE106305CC0942CAC
+ 77871BB0F5E2454820620138A331D3CB09EEECBD57AF929E0E629DADC106FCF9
+ F70F1E602419106A67C6F01DE40260805D7AFC9874037C2C0D194EDDBD8B1260
+ 241900A6D103178B01000648ED7B1FCA93F30000000049454E44AE426082}
+ 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 = 419
+ Top = 256
+ Bitmap = {}
+ end
+ object OpenDialog1: TOpenDialog
+ Left = 384
+ Top = 256
+ end
+end
diff --git a/Source/Base/Empresas/Views/uViewEmpresa.pas b/Source/Base/Empresas/Views/uViewEmpresa.pas
new file mode 100644
index 00000000..154d4eba
--- /dev/null
+++ b/Source/Base/Empresas/Views/uViewEmpresa.pas
@@ -0,0 +1,179 @@
+unit uViewEmpresa;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+ Dialogs, uViewBase, ExtCtrls, StdCtrls, Buttons, DB, uDADataTable,
+ DBCtrls, Grids, DBGrids, uBizEmpresas, Mask, ComCtrls, uCustomView,
+ JvComponent, JvFormAutoSize, cxControls, cxContainer, cxEdit, cxTextEdit,
+ cxDBEdit, dxLayoutControl, dxLayoutLookAndFeels, cxMemo, cxMaskEdit,
+ cxSpinEdit, cxImage, JvExControls, JvBitmapButton, ActnList, ImgList,
+ PngImageList, TB2Item, TBX, TB2Dock, TB2Toolbar, PngSpeedButton;
+
+type
+ IViewEmpresa = interface(IViewBase)
+ ['{876DCEBD-9E92-491A-84CE-498B1A84B525}']
+ function GetEmpresa: IBizEmpresa;
+ procedure SetEmpresa(const Value: IBizEmpresa);
+ property Empresa: IBizEmpresa read GetEmpresa write SetEmpresa;
+ end;
+
+ TfrViewEmpresa = class(TfrViewBase, IViewEmpresa)
+ DADataSource: TDADataSource;
+ dxLayoutControl1Group_Root: TdxLayoutGroup;
+ dxLayoutControl1: TdxLayoutControl;
+ dxLayoutControl1Group1: TdxLayoutGroup;
+ dxLayoutControl1Group2: TdxLayoutGroup;
+ dxLayoutControl1Group3: TdxLayoutGroup;
+ dxLayoutControl1Group4: TdxLayoutGroup;
+ dxLayoutControl1Group5: TdxLayoutGroup;
+ dxLayoutControl1Group6: TdxLayoutGroup;
+ dxLayoutControl1Group7: TdxLayoutGroup;
+ dxLayoutControl1Item1: TdxLayoutItem;
+ eCalle: TcxDBTextEdit;
+ dxLayoutControl1Item2: TdxLayoutItem;
+ eProvincia: TcxDBTextEdit;
+ dxLayoutControl1Item3: TdxLayoutItem;
+ ePoblacion: TcxDBTextEdit;
+ dxLayoutControl1Item4: TdxLayoutItem;
+ eCodigoPostal: TcxDBTextEdit;
+ dxLayoutControl1Item5: TdxLayoutItem;
+ ePaginaWeb: TcxDBTextEdit;
+ dxLayoutControl1Item6: TdxLayoutItem;
+ eMailParticular: TcxDBTextEdit;
+ dxLayoutControl1Item7: TdxLayoutItem;
+ eMailTrabajo: TcxDBTextEdit;
+ cxDBMemo1: TcxDBMemo;
+ dxLayoutControl1Item8: TdxLayoutItem;
+ dxLayoutControl1Item9: TdxLayoutItem;
+ eTlfParticular: TcxDBTextEdit;
+ dxLayoutControl1Item10: TdxLayoutItem;
+ eTlfTrabajo: TcxDBTextEdit;
+ dxLayoutControl1Item11: TdxLayoutItem;
+ eTlfMovil: TcxDBTextEdit;
+ dxLayoutControl1Item12: TdxLayoutItem;
+ eFax: TcxDBTextEdit;
+ dxLayoutControl1Item13: TdxLayoutItem;
+ eNombre: TcxDBTextEdit;
+ dxLayoutControl1Item14: TdxLayoutItem;
+ eNIFCIF: TcxDBTextEdit;
+ dxLayoutControl1Item15: TdxLayoutItem;
+ memRegistroMercantil: TcxDBMemo;
+ dxLayoutControl1Group10: TdxLayoutGroup;
+ dxLayoutControl1Group9: TdxLayoutGroup;
+ dxLayoutControl1Group11: TdxLayoutGroup;
+ dxLayoutControl1Group8: TdxLayoutGroup;
+ cxDBSpinEdit1: TcxDBSpinEdit;
+ dxLayoutControl1Item16: TdxLayoutItem;
+ ActionList1: TActionList;
+ actAnadir: TAction;
+ actEliminar: TAction;
+ SmallImages: TPngImageList;
+ OpenDialog1: TOpenDialog;
+ cxDBImage1: TcxDBImage;
+ dxLayoutControl1Item17: TdxLayoutItem;
+ PngSpeedButton1: TPngSpeedButton;
+ dxLayoutControl1Item19: TdxLayoutItem;
+ PngSpeedButton2: TPngSpeedButton;
+ dxLayoutControl1Item20: TdxLayoutItem;
+ dxLayoutControl1Group12: TdxLayoutGroup;
+ procedure actAnadirExecute(Sender: TObject);
+ procedure actEliminarExecute(Sender: TObject);
+ procedure actEliminarUpdate(Sender: TObject);
+ procedure actAnadirUpdate(Sender: TObject);
+ private
+ FEmpresa: IBizEmpresa;
+ protected
+ function GetEmpresa: IBizEmpresa;
+ procedure SetEmpresa(const Value: IBizEmpresa);
+ public
+ constructor Create(AOwner : TComponent); override;
+ end;
+
+implementation
+{$R *.dfm}
+
+uses uROClasses, uROTypes;
+
+{ TfrViewEmpresas }
+
+{
+******************************* TfrViewEmpresa ********************************
+}
+procedure TfrViewEmpresa.actAnadirExecute(Sender: TObject);
+{var
+ StdStream: TMemoryStream;
+ StreamRO: IROStream;
+}
+begin
+ inherited;
+ cxDBImage1.LoadFromFile;
+
+{if not OpenDialog1.Execute then
+ Exit;
+ try
+ StdStream := TMemoryStream.Create;
+ StdStream.LoadFromFile(OpenDialog1.FileName);
+ StreamRO := NewROStream(StdStream,False);
+ DADataSource.DataTable.Edit;
+// DADataSource.DataTable.FieldByName('LOGOTIPO').Clear;
+ DADataSource.DataTable.FieldByName('LOGOTIPO').LoadFromStream(StreamRO);
+
+ DADataSource.DataTable.Post;
+ finally
+ StdStream.Free;
+ end;
+}
+end;
+
+procedure TfrViewEmpresa.actAnadirUpdate(Sender: TObject);
+begin
+ inherited;
+// (Sender as TAction).Enabled := cxDBImage1.Picture.Graphic.Empty;
+end;
+
+procedure TfrViewEmpresa.actEliminarExecute(Sender: TObject);
+begin
+ inherited;
+ cxDBImage1.Clear;
+
+{ DADataSource.DataTable.Edit;
+ DADataSource.DataTable.FieldByName('LOGOTIPO').AsVariant := Null;
+ DADataSource.DataTable.Post;
+}
+end;
+
+procedure TfrViewEmpresa.actEliminarUpdate(Sender: TObject);
+begin
+ inherited;
+// (Sender as TAction).Enabled := not cxDBImage1.Picture.Graphic.Empty;
+end;
+
+constructor TfrViewEmpresa.Create(AOwner : TComponent);
+begin
+ inherited;
+end;
+
+function TfrViewEmpresa.GetEmpresa: IBizEmpresa;
+begin
+ Result := FEmpresa;
+end;
+
+procedure TfrViewEmpresa.SetEmpresa(const Value: IBizEmpresa);
+begin
+ FEmpresa := Value;
+ if Assigned(FEmpresa) then
+ DADataSource.DataTable := FEmpresa.DataTable
+ else
+ DADataSource.DataTable := NIL;
+end;
+
+initialization
+ RegisterClass(TfrViewEmpresa);
+
+finalization
+ UnRegisterClass(TfrViewEmpresa);
+
+end.
+
diff --git a/Source/Base/Usuarios/Controller/uUsuariosController.pas b/Source/Base/Usuarios/Controller/uUsuariosController.pas
new file mode 100644
index 00000000..cb78c693
--- /dev/null
+++ b/Source/Base/Usuarios/Controller/uUsuariosController.pas
@@ -0,0 +1,313 @@
+unit uUsuariosController;
+
+interface
+
+
+uses
+ Classes, SysUtils, uDADataTable, uControllerBase,
+ uIDataModuleUsuarios, uDataModuleUsuarios, UCBase;
+
+type
+ IUsuariosController = interface(IObservador)
+ ['{DD963EEC-5880-4DE7-AF55-B5080B538D84}']
+
+ {procedure Logoff;
+ procedure Execute;
+ procedure StartLogin;
+ procedure ShowUserManager;
+ procedure ShowProfileManager;
+ procedure ShowLogManager;
+ procedure ShowChangePassword;
+ procedure ChangeUser(IDUser: Integer; Login, Name, Mail: String; Profile,UserExpired,UserDaysSun: Integer; PrivUser: Boolean);
+ 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;}
+
+{ function BuscarTodos: IBizFormaPago;
+ function Buscar(ID: Integer): IBizFormaPago;
+ procedure VerTodos(AUsuarios: IBizFormaPago);
+ procedure Ver(AFormaPago: IBizFormaPago);
+ procedure Anadir(AFormaPago : IBizFormaPago);
+ function Eliminar(AFormaPago : IBizFormaPago): Boolean;
+ function Guardar(AFormaPago : IBizFormaPago): Boolean;
+ procedure DescartarCambios(AFormaPago : IBizFormaPago);
+ function Localizar(AUsuarios: IBizFormaPago; ADescripcion:String): Boolean;
+ function DarListaUsuarios: TStringList;}
+ end;
+
+ TUsuariosController = class(TObservador, IUsuariosController)
+ protected
+ FDataModule : IDataModuleUsuarios;
+ FUserControl: TUserControl;
+
+ procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); override;
+ function CreateEditor(const AName : String; const IID: TGUID; out Intf): Boolean;
+
+// function ValidarFormaPago(AFormaPago: IBizFormaPago): Boolean;
+ procedure AsignarDataModule;
+ procedure InicializarUserControl;
+ public
+ constructor Create; virtual;
+ destructor Destroy; override;
+
+{ function Eliminar(AFormaPago : IBizFormaPago): Boolean;
+ function Guardar(AFormaPago : IBizFormaPago): Boolean; virtual;
+ procedure DescartarCambios(AFormaPago : IBizFormaPago); virtual;
+ procedure Anadir(AFormaPago : IBizFormaPago);
+ function BuscarTodos: IBizFormaPago;
+ function Buscar(ID: Integer): IBizFormaPago;
+ procedure VerTodos(AUsuarios: IBizFormaPago);
+ procedure Ver(AFormaPago: IBizFormaPago);
+ function Localizar(AUsuarios: IBizFormaPago; ADescripcion:String): Boolean;
+ function DarListaUsuarios: TStringList;}
+
+ published
+ property UserControl : TUserControl read FUserControl;
+ end;
+
+implementation
+
+uses
+ cxControls, DB, uEditorRegistryUtils, schUsuariosClient_Intf,
+ uDAInterfaces, uDataTableUtils, uDialogUtils,
+ uDateUtils, uROTypes, DateUtils, Controls, Windows;
+
+{ TUsuariosController }
+
+{procedure TUsuariosController.Anadir(AFormaPago: IBizFormaPago);
+begin
+ AFormaPago.Insert;
+end;}
+
+procedure TUsuariosController.AsignarDataModule;
+begin
+ FDataModule := TDataModuleUsuarios.Create(Nil);
+end;
+
+{function TUsuariosController.Buscar(ID: Integer): IBizFormaPago;
+begin
+ ShowHourglassCursor;
+ try
+ Result := BuscarTodos;
+ with Result.DataTable.Where do
+ begin
+ if NotEmpty then
+ AddOperator(opAND);
+ OpenBraket;
+ AddText(fld_UsuariosID + ' = ' + IntToStr(ID));
+ CloseBraket;
+ end;
+ finally
+ HideHourglassCursor;
+ end;
+end;
+
+function TUsuariosController.BuscarTodos: IBizFormaPago;
+begin
+ Result := FDataModule.GetItems;
+end;}
+
+constructor TUsuariosController.Create;
+begin
+ AsignarDataModule;
+ FUserControl := TUserControl.Create(nil);
+ 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.DarListaUsuarios: TStringList;
+var
+ AUsuarios: IBizFormaPago;
+begin
+ AUsuarios := BuscarTodos;
+ AUsuarios.DataTable.Active := True;
+ Result := TStringList.Create;
+ try
+ with Result do
+ begin
+ AUsuarios.DataTable.First;
+ while not AUsuarios.DataTable.EOF do
+ begin
+ Add(AUsuarios.DESCRIPCION);
+ AUsuarios.DataTable.Next;
+ end;
+ end;
+ finally
+ AUsuarios := NIL;
+ end;
+end;
+
+procedure TUsuariosController.DescartarCambios(AFormaPago: IBizFormaPago);
+begin
+ if not Assigned(AFormaPago) then
+ raise Exception.Create ('Forma de pago no asignada');
+
+ ShowHourglassCursor;
+ try
+ if (AFormaPago.State in dsEditModes) then
+ AFormaPago.Cancel;
+
+ AFormaPago.DataTable.CancelUpdates;
+ finally
+ HideHourglassCursor;
+ end;
+end;
+}
+destructor TUsuariosController.Destroy;
+begin
+ FreeANDNIL(FUserControl);
+ FDataModule := NIL;
+ inherited;
+end;
+procedure TUsuariosController.InicializarUserControl;
+begin
+ FDataModule.InicializarCamposUserControl(FUserControl);
+ with FUserControl do
+ begin
+ Criptografia := cMD5;
+ AutoStart := False;
+ end;
+end;
+
+{
+function TUsuariosController.ValidarFormaPago(AFormaPago: IBizFormaPago): Boolean;
+begin
+ Result := False;
+
+ if not Assigned(AFormaPago) then
+ raise Exception.Create ('Forma de pago no asignada');
+
+ if (AFormaPago.DataTable.State in dsEditModes) then
+ AFormaPago.DataTable.Post;
+
+ if Length(AFormaPago.REFERENCIA) = 0 then
+ raise Exception.Create('Debe indicar una referencia para esta forma de pago.');
+
+ if Length(AFormaPago.DESCRIPCION) = 0 then
+ raise Exception.Create('Debe indicar una descripción para esta forma de pago.');
+
+ Result := True;
+end;
+
+procedure TUsuariosController.Ver(AFormaPago: IBizFormaPago);
+var
+ AEditor : IEditorFormaPago;
+begin
+ AEditor := NIL;
+ ShowHourglassCursor;
+ try
+ CreateEditor('EditorFormaPago', IEditorFormaPago, AEditor);
+ with AEditor do
+ FormaPago := AFormaPago;
+ finally
+ HideHourglassCursor;
+ end;
+
+ if Assigned(AEditor) then
+ try
+ AEditor.ShowModal;
+ AEditor.Release;
+ finally
+ AEditor := NIL;
+ end;
+end;
+
+procedure TUsuariosController.VerTodos(AUsuarios: IBizFormaPago);
+var
+ AEditor : IEditorUsuarios;
+begin
+ AEditor := NIL;
+ ShowHourglassCursor;
+ try
+ CreateEditor('EditorUsuarios', IEditorUsuarios, AEditor);
+ with AEditor do
+ Usuarios := AUsuarios;
+ finally
+ HideHourglassCursor;
+ end;
+
+ if Assigned(AEditor) then
+ try
+ AEditor.ShowModal;
+ AEditor.Release;
+ finally
+ AEditor := NIL;
+ end;
+end;
+
+function TUsuariosController.Eliminar(AFormaPago: IBizFormaPago): Boolean;
+begin
+ Result := False;
+
+ if not Assigned(AFormaPago) then
+ raise Exception.Create ('Forma de pago no asignada');
+
+ ShowHourglassCursor;
+ try
+ if (AFormaPago.State in dsEditModes) then
+ AFormaPago.Cancel;
+
+ AFormaPago.Delete;
+ AFormaPago.DataTable.ApplyUpdates;
+ HideHourglassCursor;
+ Result := True;
+ finally
+ HideHourglassCursor;
+ end;
+end;}
+
+procedure TUsuariosController.RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable);
+begin
+ inherited;
+//
+end;
+
+{function TUsuariosController.Guardar(AFormaPago: IBizFormaPago): Boolean;
+begin
+ Result := False;
+
+ if ValidarFormaPago(AFormaPago) then
+ begin
+ ShowHourglassCursor;
+ try
+ AFormaPago.DataTable.ApplyUpdates;
+ Result := True;
+ finally
+ HideHourglassCursor;
+ end;
+ end;
+end;
+
+function TUsuariosController.Localizar(AUsuarios: IBizFormaPago; ADescripcion: String): Boolean;
+begin
+ Result := True;
+ ShowHourglassCursor;
+ try
+ with AUsuarios.DataTable do
+ begin
+ DisableControls;
+ First;
+ if not Locate(fld_UsuariosDESCRIPCION, ADescripcion, []) then
+ Result := False;
+ EnableControls;
+ end;
+ finally
+ HideHourglassCursor;
+ end;
+end;}
+
+end.
diff --git a/Source/Base/Usuarios/Data/uCambiarPassword.dfm b/Source/Base/Usuarios/Data/uCambiarPassword.dfm
new file mode 100644
index 00000000..91698274
--- /dev/null
+++ b/Source/Base/Usuarios/Data/uCambiarPassword.dfm
@@ -0,0 +1,94 @@
+object fCambiarPassword: TfCambiarPassword
+ Left = 460
+ Top = 492
+ Width = 361
+ Height = 299
+ Caption = 'Cambiar la contrase'#241'a'
+ 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 bAceptar: TButton
+ Left = 136
+ Top = 230
+ Width = 120
+ Height = 25
+ Caption = '&Cambiar la contrase'#241'a'
+ Default = True
+ TabOrder = 0
+ OnClick = bAceptarClick
+ end
+ object bCancelar: TButton
+ Left = 269
+ Top = 230
+ Width = 75
+ Height = 25
+ Cancel = True
+ Caption = '&Cancelar'
+ ModalResult = 2
+ TabOrder = 1
+ end
+ object PageControl1: TPageControl
+ Left = 2
+ Top = 2
+ Width = 349
+ Height = 217
+ ActivePage = pagContrasena
+ TabOrder = 2
+ object pagContrasena: TTabSheet
+ Caption = 'Cambiar la contrase'#241'a'
+ object Label4: TLabel
+ Left = 16
+ Top = 19
+ Width = 167
+ Height = 13
+ Caption = 'Escriba la nueva contrase'#241'a:'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ Transparent = True
+ end
+ object Label1: TLabel
+ Left = 16
+ Top = 72
+ Width = 257
+ Height = 13
+ Caption = 'Repita la nueva contrase'#241'a para confirmarla:'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ Transparent = True
+ end
+ object edtPassword2: TEdit
+ Left = 16
+ Top = 88
+ Width = 295
+ Height = 21
+ CharCase = ecLowerCase
+ PasswordChar = '*'
+ TabOrder = 0
+ end
+ object edtPassword: TEdit
+ Left = 16
+ Top = 39
+ Width = 295
+ Height = 21
+ CharCase = ecLowerCase
+ PasswordChar = '*'
+ TabOrder = 1
+ end
+ end
+ end
+end
diff --git a/Source/Base/Usuarios/Data/uCambiarPassword.pas b/Source/Base/Usuarios/Data/uCambiarPassword.pas
new file mode 100644
index 00000000..03a158bf
--- /dev/null
+++ b/Source/Base/Usuarios/Data/uCambiarPassword.pas
@@ -0,0 +1,41 @@
+unit uCambiarPassword;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+ Dialogs, StdCtrls, ComCtrls;
+
+type
+ TfCambiarPassword = class(TForm)
+ bAceptar: TButton;
+ bCancelar: TButton;
+ Label4: TLabel;
+ edtPassword: TEdit;
+ Label1: TLabel;
+ edtPassword2: TEdit;
+ PageControl1: TPageControl;
+ pagContrasena: TTabSheet;
+ procedure bAceptarClick(Sender: TObject);
+ private
+ { Private declarations }
+ public
+ { Public declarations }
+ end;
+
+var
+ fCambiarPassword: TfCambiarPassword;
+
+implementation
+
+{$R *.dfm}
+
+procedure TfCambiarPassword.bAceptarClick(Sender: TObject);
+begin
+ if edtPassword2.Text <> edtPassword.Text then
+ raise Exception.Create('Por favor, introduzca la MISMA contraseña en los dos campos')
+ else
+ ModalResult := mrOK;
+end;
+
+end.
diff --git a/Source/Base/Usuarios/Data/uDataModuleUsuarios.dfm b/Source/Base/Usuarios/Data/uDataModuleUsuarios.dfm
new file mode 100644
index 00000000..1b2ff77c
--- /dev/null
+++ b/Source/Base/Usuarios/Data/uDataModuleUsuarios.dfm
@@ -0,0 +1,76 @@
+object DataModuleUsuarios: TDataModuleUsuarios
+ OldCreateOrder = True
+ OnCreate = DAClientDataModuleCreate
+ Height = 205
+ Width = 355
+ object ROLoginService: TRORemoteService
+ Message = dmConexion.ROMessage
+ Channel = dmConexion.ROChannel
+ ServiceName = 'srvLogin'
+ Left = 48
+ Top = 32
+ end
+ object srvUsuarios: TRORemoteService
+ Message = dmConexion.ROMessage
+ Channel = dmConexion.ROChannel
+ ServiceName = 'srvUsuarios'
+ Left = 152
+ Top = 32
+ end
+ object Bin2DataStreamer: TDABin2DataStreamer
+ Left = 48
+ Top = 104
+ end
+ object UserControl1: TUserControl
+ ApplicationID = 'ProjetoNovo'
+ LogControl.TableLog = 'UCLog'
+ EncryptKey = 0
+ Login.InitialLogin.User = 'admin'
+ Login.InitialLogin.Email = 'usercontrol@usercontrol.net'
+ Login.InitialLogin.Password = '123mudar'
+ Login.MaxLoginAttempts = 0
+ ExtraRights = <>
+ TableUsers.FieldUserID = 'UCIdUser'
+ TableUsers.FieldUserName = 'UCUserName'
+ TableUsers.FieldLogin = 'UCLogin'
+ TableUsers.FieldPassword = 'UCPassword'
+ TableUsers.FieldEmail = 'UCEmail'
+ TableUsers.FieldPrivileged = 'UCPrivileged'
+ TableUsers.FieldTypeRec = 'UCTypeRec'
+ TableUsers.FieldProfile = 'UCProfile'
+ TableUsers.FieldKey = 'UCKey'
+ TableUsers.FieldDateExpired = 'UCPassExpired'
+ TableUsers.FieldUserExpired = 'UCUserExpired'
+ TableUsers.FieldUserDaysSun = 'UCUserDaysSun'
+ TableUsers.TableName = 'UCTabUsers'
+ TableEmpresa.FieldID = 'UCID'
+ TableEmpresa.FieldName = 'UCNOME'
+ TableEmpresa.TableName = 'UCEMPRESA'
+ TableEmpresa.Active = False
+ TableEmpresa.IDInteiro = False
+ TableRights.FieldUserID = 'UCIdUser'
+ TableRights.FieldModule = 'UCModule'
+ TableRights.FieldComponentName = 'UCCompName'
+ TableRights.FieldFormName = 'UCFormName'
+ TableRights.FieldKey = 'UCKey'
+ TableRights.TableName = 'UCTabRights'
+ TableUsersLogged.FieldLogonID = 'UCIdLogon'
+ TableUsersLogged.FieldUserID = 'UCIdUser'
+ TableUsersLogged.FieldApplicationID = 'UCApplicationId'
+ TableUsersLogged.FieldMachineName = 'UCMachineName'
+ TableUsersLogged.FieldData = 'UCData'
+ TableUsersLogged.TableName = 'UCTabUsersLogged'
+ TableHistory.TableName = 'UCTABHistory'
+ TableHistory.FieldApplicationID = 'ApplicationID'
+ TableHistory.FieldUserID = 'UserID'
+ TableHistory.FieldEventDate = 'EventDate'
+ TableHistory.FieldEventTime = 'EventTime'
+ TableHistory.FieldForm = 'Form'
+ TableHistory.FieldCaptionForm = 'FormCaption'
+ TableHistory.FieldEvent = 'Event'
+ TableHistory.FieldObs = 'Obs'
+ TableHistory.FieldTableName = 'tName'
+ Left = 192
+ Top = 120
+ end
+end
diff --git a/Source/Base/Usuarios/Data/uDataModuleUsuarios.pas b/Source/Base/Usuarios/Data/uDataModuleUsuarios.pas
new file mode 100644
index 00000000..2e697243
--- /dev/null
+++ b/Source/Base/Usuarios/Data/uDataModuleUsuarios.pas
@@ -0,0 +1,287 @@
+unit uDataModuleUsuarios;
+
+interface
+
+uses
+ SysUtils, Classes, DB, DBClient, uDADataTable,
+ FactuGES_Intf, uIntegerListUtils, uBizEmpresas,
+ UCBase, UCDataConnector, uUCROConn, uDARemoteDataAdapter,
+ uDARemoteCommand, uROClient, uRORemoteService, uDADataStreamer,
+ uDABin2DataStreamer, uDAScriptingProvider, uIDataModuleUsuarios;
+
+const
+ PERFIL_ADMINISTRADORES = 'Administradores';
+
+type
+ TDataModuleUsuarios = class(TDataModule, IDataModuleUsuarios)
+ ROLoginService: TRORemoteService;
+ srvUsuarios: TRORemoteService;
+ Bin2DataStreamer: TDABin2DataStreamer;
+ UserControl1: TUserControl;
+ procedure DAClientDataModuleCreate(Sender: TObject);
+ procedure DAClientDataModuleDestroy(Sender: TObject);
+ private
+ FDataConnector : TUCROConn;
+ FUsuario : String;
+ FPassword : String; // Lo guardo para poder hacer una reconexión
+
+ FLoginInfo: TRdxLoginInfo;
+ FEmpresaActual: IBizEmpresa;
+ function CambiarPassword (const APassword : String) : boolean; overload;
+ function GetEsAdministrador: Boolean;
+
+ function GetEmpresas: TIntegerList;
+
+ procedure SetEmpresaActual(const Value: IBizEmpresa);
+ function GetIDEmpresaActual: Integer;
+ procedure SetIDEmpresaActual(const Value: Integer);
+ function GetDataConnector : TUCDataConnector;
+ public
+ procedure InicializarCamposUserControl (AUserControl : TUserControl);
+ function Login: Boolean; overload;
+ function Login(Usuario: String; Password: String): Boolean; overload;
+ procedure Logout;
+ procedure CambiarPassword; overload;
+
+ property EsAdministrador : Boolean read GetEsAdministrador;
+ property IDEmpresaActual : Integer read GetIDEmpresaActual write SetIDEmpresaActual;
+ property EmpresaActual : IBizEmpresa read FEmpresaActual write SetEmpresaActual;
+ property Empresas : TIntegerList read GetEmpresas;
+ property LoginInfo: TRdxLoginInfo read FLoginInfo;
+ property DataConnector : TUCDataConnector read GetDataConnector;
+ end;
+
+implementation
+
+{$R *.DFM}
+
+uses
+ Forms, Controls, uDataTableUtils, uDataModuleConexion, uLoginForm,
+ uCambiarPassword, Dialogs, Windows, uEmpresasController, schUsuariosClient_Intf;
+
+{ TDAClientDataModule1 }
+
+procedure TDataModuleUsuarios.DAClientDataModuleCreate(Sender: TObject);
+begin
+ ROLoginService.Channel := dmConexion.Channel;
+ ROLoginService.Message := dmConexion.Message;
+
+ FDataConnector := TUCROConn.Create(nil);
+ FDataConnector.RemoteService := srvUsuarios;
+
+ FUsuario := '';
+ FPassword := '';
+ FLoginInfo := NIL;
+end;
+
+function TDataModuleUsuarios.Login: Boolean;
+begin
+ // Intento hacer login si el usuario ya lo había hecho antes
+ if (Length(FUsuario) > 0) then
+ if Login(FUsuario, FPassword) then
+ begin
+ Result := True;
+ Exit;
+ end;
+
+ // Si no funcionar el login anterior o es la primera vez,
+ // saco la pantalla de login
+ with TfLoginForm.Create(NIL) do
+ try
+ if Assigned(FLoginInfo) then
+ edtUser.Text := FLoginInfo.Usuario;
+ Result := (ShowModal = mrOK)
+ finally
+ Free;
+ end;
+end;
+
+function TDataModuleUsuarios.Login(Usuario: String; Password: String): Boolean;
+begin
+ // Libero la información del login anterior (sesión, etc)
+ if Assigned(FLoginInfo) then
+ FreeANDNil(FLoginInfo);
+
+ Result := (ROLoginService as IsrvLogin).Login(Usuario, Password, FLoginInfo);
+
+ if Result then
+ begin
+ // Lo guardo para poder reconectarme
+ FUsuario := Usuario;
+ FPassword := Password;
+ end;
+end;
+
+procedure TDataModuleUsuarios.Logout;
+begin
+ (ROLoginService as IsrvLogin).Logout;
+ if Assigned(FLoginInfo) then
+ FreeANDNil(FLoginInfo);
+ FUsuario := '';
+ FPassword := '';
+end;
+
+procedure TDataModuleUsuarios.SetEmpresaActual(const Value: IBizEmpresa);
+begin
+ FEmpresaActual := Value;
+ FEmpresaActual.DataTable.Active := True;
+end;
+
+procedure TDataModuleUsuarios.SetIDEmpresaActual(const Value: Integer);
+var
+ AEmpresasController : IEmpresasController;
+ AEmpresa : IBizEmpresa;
+begin
+ AEmpresasController := TEmpresasController.Create;
+ AEmpresa := AEmpresasController.Buscar(Value);
+ AEmpresa.DataTable.Active := True;
+
+ if not AEmpresa.IsEmpty then
+ begin
+ FEmpresaActual := AEmpresa;
+ FEmpresaActual.DataTable.Active := True;
+ end
+ else
+ FEmpresaActual := NIL;
+end;
+
+procedure TDataModuleUsuarios.DAClientDataModuleDestroy(Sender: TObject);
+begin
+ if Assigned(FDataConnector) then
+ FreeANDNIL(FDataConnector);
+
+ if Assigned(FLoginInfo) then
+ FreeANDNIL(FLoginInfo);
+end;
+
+function TDataModuleUsuarios.GetDataConnector: TUCDataConnector;
+begin
+ Result := FDataConnector;
+end;
+
+function TDataModuleUsuarios.GetEmpresas: TIntegerList;
+var
+ i : integer;
+begin
+ Result := TIntegerList.Create;
+
+ if not Assigned(FLoginInfo) then
+ raise Exception.Create('Usuario no validado en el sistema (login)');
+
+ for i := 0 to FLoginInfo.Empresas.Count - 1 do
+ Result.Add(FLoginInfo.Empresas.Items[i]);
+end;
+
+function TDataModuleUsuarios.GetEsAdministrador: Boolean;
+var
+ I: Integer;
+begin
+ Result := False;
+
+ if not Assigned(FLoginInfo) then
+ raise Exception.Create('Usuario no validado en el sistema (login)');
+
+ for I := 0 to FLoginInfo.Perfiles.Count - 1 do
+ if FLoginInfo.Perfiles.Items[I] = PERFIL_ADMINISTRADORES then
+ begin
+ Result := True;
+ Break;
+ end;
+end;
+
+function TDataModuleUsuarios.GetIDEmpresaActual: Integer;
+begin
+ if not Assigned(FEmpresaActual) then
+ Result := ID_NULO
+ else
+ Result := FEmpresaActual.ID;
+end;
+
+procedure TDataModuleUsuarios.InicializarCamposUserControl(
+ AUserControl: TUserControl);
+begin
+ if not Assigned(AUserControl) then
+ raise Exception.Create('UserControl no asignado (InicializarUserControl)');
+
+ with AUserControl do
+ begin
+ DataConnector := FDataConnector;
+
+ with TableUsers do
+ begin
+ TableName := 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 := nme_PERMISOS;
+ FieldUserID := fld_PERMISOSID_USUARIO;
+ FieldModule := fld_PERMISOSMODULO;
+ FieldComponentName := fld_PERMISOSNOMBRECOMP;
+ FieldFormName := fld_PERMISOSEXNOMBREFORM;
+ FieldKey := fld_PERMISOSCHECKSUM;
+ end;
+
+ with TableUsersLogged do
+ begin
+ TableName := 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 := 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;
+
+ with TableEmpresa do
+ begin
+ Active := False;
+ end;
+ end;
+end;
+
+procedure TDataModuleUsuarios.CambiarPassword;
+begin
+ with TfCambiarPassword.Create(NIL) do
+ try
+ if ShowModal = mrOk then
+ if CambiarPassword(edtPassword.Text) then
+ Application.MessageBox('La contraseña ha sido cambiada correctamente.', 'Información', MB_OK);
+ finally
+ Free;
+ end;
+end;
+
+function TDataModuleUsuarios.CambiarPassword(const APassword: String): boolean;
+begin
+{ if not (ROLoginService as IsrvLogin).SetUserPassword(LoginInfo.UserID, APassword) then
+ raise Exception.Create('Error en el servidor. No se ha podido cambiar la contraseña');}
+ Result := True;
+end;
+
+end.
diff --git a/Source/Base/Usuarios/Data/uLoginForm.dfm b/Source/Base/Usuarios/Data/uLoginForm.dfm
new file mode 100644
index 00000000..bfa1641a
--- /dev/null
+++ b/Source/Base/Usuarios/Data/uLoginForm.dfm
@@ -0,0 +1,1099 @@
+object fLoginForm: TfLoginForm
+ 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
+ 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
+ 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/Base/Usuarios/Data/uLoginForm.pas b/Source/Base/Usuarios/Data/uLoginForm.pas
new file mode 100644
index 00000000..2e183b43
--- /dev/null
+++ b/Source/Base/Usuarios/Data/uLoginForm.pas
@@ -0,0 +1,101 @@
+unit uLoginForm;
+
+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;
+
+type
+ TfLoginForm = class(TForm)
+ 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 FormCreate(Sender: TObject);
+ procedure ToolButton4Click(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure Timer1Timer(Sender: TObject);
+ private
+ FIntentos: Integer;
+ end;
+
+var
+ fLoginForm: TfLoginForm;
+
+implementation
+
+uses
+ uDataModuleUsuarios, uDataModuleConexion, uDataModuleBase;
+
+{$R *.dfm}
+
+{
+********************************* TfLoginForm **********************************
+}
+procedure TfLoginForm.bAceptarClick(Sender: TObject);
+var
+ bOk : Boolean;
+begin
+{ ShowHourglassCursor;
+ try
+ bOK := dmUsuarios.Login(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);
+ Dec(FIntentos);
+ if (FIntentos <= 0) then
+ ModalResult := mrCancel;
+ end;}
+end;
+
+procedure TfLoginForm.FormCreate(Sender: TObject);
+begin
+ FIntentos := 3;
+end;
+
+procedure TfLoginForm.ToolButton4Click(Sender: TObject);
+begin
+ Timer1.Enabled := False;
+ dmConexion.ConfigurarConexion;
+ Timer1.Enabled := True;
+end;
+
+procedure TfLoginForm.FormShow(Sender: TObject);
+begin
+ Self.Caption := Self.Caption + ' - ' + dmBase.DarVersion;
+ 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;
+
+procedure TfLoginForm.Timer1Timer(Sender: TObject);
+begin
+ Timer1.Enabled := False;
+ bAceptar.Click;
+end;
+
+end.
diff --git a/Source/Base/Usuarios/Data/uUCROConn.pas b/Source/Base/Usuarios/Data/uUCROConn.pas
new file mode 100644
index 00000000..bd27a10d
--- /dev/null
+++ b/Source/Base/Usuarios/Data/uUCROConn.pas
@@ -0,0 +1,196 @@
+{-----------------------------------------------------------------------------
+ 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,
+ UCDataConnector,
+ uRORemoteService,
+ uDADataStreamer,
+ uDABin2DataStreamer,
+ uDARemoteDataAdapter;
+
+type
+ TUCROConn = class(TUCDataConnector)
+ private
+ FRemoteService: TRORemoteService;
+ FDataAdapter : TDARemoteDataAdapter;
+ FDataStreamer : TDABin2DataStreamer;
+ procedure SetRemoteService(const Value: TRORemoteService);
+ protected
+ procedure Notification(AComponent: TComponent; Operation: TOperation); override;
+ 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 RemoteService : TRORemoteService read FRemoteService write SetRemoteService;
+ end;
+
+const
+ // Select para as tabelas de sistema !!! Para outro tipo de banco implemente aqui !!!!!
+
+ // Para banco novo !!!
+ // Não esquecer de colocar em TBancoDados, o tipo de banco !!!!!!
+ // Não esquecer de colocar no 'case' de UCFindTable
+
+ SQL_Firebird =
+ 'SELECT ' +
+ ' UPPER(RDB$RELATIONS.RDB$RELATION_NAME) RDB$RELATION_NAME ' +
+ 'FROM ' +
+ ' RDB$RELATIONS ' +
+ 'WHERE ' +
+ ' RDB$RELATIONS.RDB$FLAGS = 1 AND UPPER(RDB$RELATIONS.RDB$RELATION_NAME) = ' +
+ ' UPPER(''%s'')';
+
+ SQL_MSSQL = '';
+
+ SQL_Oracle = '';
+
+ SQL_PostgreSQL =
+ 'SELECT ' +
+ ' UPPER(PG_CLASS.RELNAME) ' +
+ 'FROM ' +
+ ' PG_CLASS ' +
+ 'WHERE ' +
+ ' PG_CLASS.RELKIND = ''r'' AND ' +
+ ' UPPER(PG_CLASS.RELNAME) LIKE UPPER(''%s'')';
+
+ SQL_MySQL = '';
+
+ SQL_Paradox = '';
+
+implementation
+
+uses
+ FactuGES_Intf, uROTypes, uDAClasses, uDADataTable;
+
+{ TUCROConn }
+
+constructor TUCROConn.Create(AOwner: TComponent);
+begin
+ inherited;
+ FDataStreamer := TDABin2DataStreamer.Create(nil);
+ FDataAdapter := TDARemoteDataAdapter.Create(nil);
+ FDataAdapter.DataStreamer := FDataStreamer;
+ FDataAdapter.SetupDefaultRequest;
+end;
+
+destructor TUCROConn.Destroy;
+begin
+ 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.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.SetRemoteService(const Value: TRORemoteService);
+begin
+ FRemoteService := Value;
+ if Assigned(FRemoteService) then
+ begin
+ with FDataAdapter do
+ begin
+ RemoteService := FRemoteService;
+ GetSchemaCall.RemoteService := FRemoteService;
+ GetDataCall.RemoteService := FRemoteService;
+ UpdateDataCall.RemoteService := FRemoteService;
+ GetScriptsCall.RemoteService := FRemoteService;
+ end;
+ end;
+end;
+
+procedure TUCROConn.UCExecSQL(FSQL: String);
+begin
+ (FRemoteService as IsrvUsuarios).SQLExecuteCommand(FSQL);
+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 : Binary;
+ ADataTable : TDADataTable;
+begin
+ Result := NIL;
+ AStream := (FRemoteService as IsrvUsuarios).SQLGetData(FSQL, True, -1);
+ if Assigned(AStream) then
+ begin
+ ADataTable := TDADataTable.Create(NIL);
+ ADataTable.LoadFromStream(AStream);
+ Result := ADataTable.Dataset;
+ end;
+end;
+
+end.
+
diff --git a/Source/Base/Usuarios/Data/uUsuario.dfm b/Source/Base/Usuarios/Data/uUsuario.dfm
new file mode 100644
index 00000000..93fcc6e1
--- /dev/null
+++ b/Source/Base/Usuarios/Data/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/Base/Usuarios/Data/uUsuario.pas b/Source/Base/Usuarios/Data/uUsuario.pas
new file mode 100644
index 00000000..90e722c2
--- /dev/null
+++ b/Source/Base/Usuarios/Data/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/Base/Usuarios/Data/uUsuarios.dfm b/Source/Base/Usuarios/Data/uUsuarios.dfm
new file mode 100644
index 00000000..0c3eb30f
--- /dev/null
+++ b/Source/Base/Usuarios/Data/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/Base/Usuarios/Data/uUsuarios.pas b/Source/Base/Usuarios/Data/uUsuarios.pas
new file mode 100644
index 00000000..6fb22fd6
--- /dev/null
+++ b/Source/Base/Usuarios/Data/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, uDataModuleBase, 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/Base/Usuarios/Model/Data/uIDataModuleUsuarios.pas b/Source/Base/Usuarios/Model/Data/uIDataModuleUsuarios.pas
new file mode 100644
index 00000000..18615995
--- /dev/null
+++ b/Source/Base/Usuarios/Model/Data/uIDataModuleUsuarios.pas
@@ -0,0 +1,18 @@
+unit uIDataModuleUsuarios;
+
+interface
+
+uses
+ UCBase, UCDataConnector;
+
+type
+ IDataModuleUsuarios = interface
+ ['{F2D2E969-5E87-42DE-A550-E839C4607C72}']
+ procedure InicializarCamposUserControl (AUserControl : TUserControl);
+ function GetDataConnector : TUCDataConnector;
+ property DataConnector : TUCDataConnector read GetDataConnector;
+ end;
+
+implementation
+
+end.
diff --git a/Source/Base/Usuarios/Model/schUsuariosClient_Intf.pas b/Source/Base/Usuarios/Model/schUsuariosClient_Intf.pas
new file mode 100644
index 00000000..02e9c47d
--- /dev/null
+++ b/Source/Base/Usuarios/Model/schUsuariosClient_Intf.pas
@@ -0,0 +1,1464 @@
+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 = '{BCEAD2C9-F685-4AD0-BFD5-FAA3694FB6B8}';
+ RID_USUARIOS_EVENTOS = '{FCCBD5C6-0BBB-44C1-B19A-983FEE8F93D5}';
+ RID_USUARIOS_LOGON = '{31C71D37-D969-4C21-AD16-ECD67F1BD5B0}';
+ RID_PERMISOS = '{90F13FF0-B34A-4AA9-8EC5-F8427722C146}';
+ RID_PERMISOSEX = '{30F060F4-D38F-41D2-8888-EE5E91BBAA0B}';
+
+ { Data table names }
+ nme_USUARIOS = 'USUARIOS';
+ nme_USUARIOS_EVENTOS = 'USUARIOS_EVENTOS';
+ nme_USUARIOS_LOGON = 'USUARIOS_LOGON';
+ 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;
+
+ { PERMISOS fields }
+ fld_PERMISOSID_USUARIO = 'ID_USUARIO';
+ fld_PERMISOSMODULO = 'MODULO';
+ fld_PERMISOSNOMBRECOMP = 'NOMBRECOMP';
+ fld_PERMISOSCHECKSUM = 'CHECKSUM';
+
+ { PERMISOS field indexes }
+ idx_PERMISOSID_USUARIO = 0;
+ idx_PERMISOSMODULO = 1;
+ idx_PERMISOSNOMBRECOMP = 2;
+ idx_PERMISOSCHECKSUM = 3;
+
+ { PERMISOSEX fields }
+ fld_PERMISOSEXID_USUARIO = 'ID_USUARIO';
+ fld_PERMISOSEXMODULO = 'MODULO';
+ fld_PERMISOSEXNOMBRECOMP = 'NOMBRECOMP';
+ fld_PERMISOSEXNOMBREFORM = 'NOMBREFORM';
+ fld_PERMISOSEXCHECKSUM = 'CHECKSUM';
+
+ { PERMISOSEX field indexes }
+ idx_PERMISOSEXID_USUARIO = 0;
+ idx_PERMISOSEXMODULO = 1;
+ idx_PERMISOSEXNOMBRECOMP = 2;
+ idx_PERMISOSEXNOMBREFORM = 3;
+ idx_PERMISOSEXCHECKSUM = 4;
+
+type
+ { IUSUARIOS }
+ IUSUARIOS = interface(IDAStronglyTypedDataTable)
+ ['{98E5DC96-C6C8-48DD-9A93-727F34455103}']
+ { 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)
+ ['{AFFBC554-995C-4D6C-A88B-3A786E4905CD}']
+ { 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)
+ ['{721BFDBE-77B1-4E34-8E49-D2782E2939A1}']
+ { 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;
+
+ { IPERMISOS }
+ IPERMISOS = interface(IDAStronglyTypedDataTable)
+ ['{E369AE58-C4F5-476F-8D81-1C0440F6A362}']
+ { Property getters and setters }
+ 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_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 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_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)
+ ['{956C4144-986B-4043-8DA5-81667770CD85}']
+ { Property getters and setters }
+ 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_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 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_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;
+
+
+{ TPERMISOSDataTableRules }
+constructor TPERMISOSDataTableRules.Create(aDataTable: TDADataTable);
+begin
+ inherited;
+end;
+
+destructor TPERMISOSDataTableRules.Destroy;
+begin
+ inherited;
+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.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_PERMISOS, TPERMISOSDataTableRules);
+ RegisterDataTableRules(RID_PERMISOSEX, TPERMISOSEXDataTableRules);
+
+end.
diff --git a/Source/Base/Usuarios/Model/schUsuariosServer_Intf.pas b/Source/Base/Usuarios/Model/schUsuariosServer_Intf.pas
new file mode 100644
index 00000000..36ac6e3c
--- /dev/null
+++ b/Source/Base/Usuarios/Model/schUsuariosServer_Intf.pas
@@ -0,0 +1,1715 @@
+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 = '{46E1A07E-12D3-4FEB-B692-A849C5467B93}';
+ RID_USUARIOS_EVENTOSDelta = '{53E03F8A-166F-4A18-85B9-BBBEB2D60052}';
+ RID_USUARIOS_LOGONDelta = '{0EC1E706-6226-449C-885B-6C6AC5187088}';
+ RID_PERMISOSDelta = '{A8CCC0BF-DEB4-439F-B7C4-3A25F5210A5E}';
+ RID_PERMISOSEXDelta = '{78ACF719-CCD6-47F3-AA01-D580F121F7A8}';
+
+type
+ { IUSUARIOSDelta }
+ IUSUARIOSDelta = interface(IUSUARIOS)
+ ['{46E1A07E-12D3-4FEB-B692-A849C5467B93}']
+ { 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)
+ ['{53E03F8A-166F-4A18-85B9-BBBEB2D60052}']
+ { 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)
+ ['{0EC1E706-6226-449C-885B-6C6AC5187088}']
+ { 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;
+
+ { IPERMISOSDelta }
+ IPERMISOSDelta = interface(IPERMISOS)
+ ['{A8CCC0BF-DEB4-439F-B7C4-3A25F5210A5E}']
+ { Property getters and setters }
+ function GetOldID_USUARIOValue : Integer;
+ function GetOldMODULOValue : String;
+ function GetOldNOMBRECOMPValue : String;
+ function GetOldCHECKSUMValue : String;
+
+ { Properties }
+ 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 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_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)
+ ['{78ACF719-CCD6-47F3-AA01-D580F121F7A8}']
+ { Property getters and setters }
+ function GetOldID_USUARIOValue : Integer;
+ function GetOldMODULOValue : String;
+ function GetOldNOMBRECOMPValue : String;
+ function GetOldNOMBREFORMValue : String;
+ function GetOldCHECKSUMValue : String;
+
+ { Properties }
+ 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 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_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;
+
+
+{ TPERMISOSBusinessProcessorRules }
+constructor TPERMISOSBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
+begin
+ inherited;
+end;
+
+destructor TPERMISOSBusinessProcessorRules.Destroy;
+begin
+ inherited;
+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.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_PERMISOSDelta, TPERMISOSBusinessProcessorRules);
+ RegisterBusinessProcessorRules(RID_PERMISOSEXDelta, TPERMISOSEXBusinessProcessorRules);
+
+end.
diff --git a/Source/Base/Usuarios/Servidor/srvUsuarios_Impl.dfm b/Source/Base/Usuarios/Servidor/srvUsuarios_Impl.dfm
new file mode 100644
index 00000000..f515805d
--- /dev/null
+++ b/Source/Base/Usuarios/Servidor/srvUsuarios_Impl.dfm
@@ -0,0 +1,419 @@
+object srvUsuarios: TsrvUsuarios
+ OldCreateOrder = True
+ OnCreate = DataAbstractServiceCreate
+ SessionManager = dmServer.SessionManager
+ ServiceSchema = schUsuarios
+ ServiceDataStreamer = Bin2DataStreamer
+ AllowExecuteSQL = True
+ AllowWhereSQL = True
+ ExportedDataTables = <>
+ BeforeAcquireConnection = DataAbstractServiceBeforeAcquireConnection
+ Height = 300
+ Width = 300
+ object Diagrams: TDADiagrams
+ Left = 150
+ Top = 88
+ DiagramData = ''#13#10''#13#10
+ end
+ object DataDictionary: TDADataDictionary
+ Fields = <>
+ Left = 150
+ Top = 24
+ end
+ object schUsuarios: TDASchema
+ ConnectionManager = dmServer.ConnectionManager
+ DataDictionary = DataDictionary
+ Diagrams = Diagrams
+ Datasets = <
+ item
+ Params = <>
+ Statements = <
+ item
+ Connection = 'IBX'
+ ConnectionType = 'Interbase'
+ Default = True
+ TargetTable = 'USUARIOS'
+ StatementType = stAutoSQL
+ 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 = datInteger
+ Required = True
+ InPrimaryKey = True
+ end
+ item
+ Name = 'USERNAME'
+ DataType = datString
+ Size = 30
+ end
+ item
+ Name = 'LOGIN'
+ DataType = datString
+ Size = 30
+ end
+ item
+ Name = 'PASS'
+ DataType = datString
+ Size = 250
+ end
+ item
+ Name = 'PASSEXPIRED'
+ DataType = datDateTime
+ end
+ item
+ Name = 'BLOQUEADO'
+ DataType = datSmallInt
+ end
+ item
+ Name = 'EMAIL'
+ DataType = datString
+ Size = 150
+ end
+ item
+ Name = 'USERDAYSSUN'
+ DataType = datInteger
+ end
+ item
+ Name = 'PRIVILEGED'
+ DataType = datInteger
+ end
+ item
+ Name = 'TIPO'
+ DataType = datString
+ Size = 1
+ end
+ item
+ Name = 'ID_PERFIL'
+ DataType = datInteger
+ end
+ item
+ Name = 'CHECKSUM'
+ DataType = datString
+ Size = 250
+ end>
+ end
+ item
+ Params = <>
+ Statements = <
+ item
+ Connection = 'IBX'
+ ConnectionType = 'Interbase'
+ Default = True
+ TargetTable = '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 = 'IBX'
+ ConnectionType = 'Interbase'
+ Default = True
+ TargetTable = '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 = 'IBX'
+ ConnectionType = 'Interbase'
+ Default = True
+ TargetTable = 'PERMISOS'
+ StatementType = stAutoSQL
+ ColumnMappings = <
+ 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_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 = 'IBX'
+ ConnectionType = 'Interbase'
+ Default = True
+ TargetTable = 'PERMISOSEX'
+ StatementType = stAutoSQL
+ ColumnMappings = <
+ 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_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/Base/Usuarios/Servidor/srvUsuarios_Impl.pas b/Source/Base/Usuarios/Servidor/srvUsuarios_Impl.pas
new file mode 100644
index 00000000..4007ec6c
--- /dev/null
+++ b/Source/Base/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:} FactuGES_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:} FactuGES_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/Base/Utiles/ClassRegistry/uClassRegistryUtils.pas b/Source/Base/Utiles/ClassRegistry/uClassRegistryUtils.pas
new file mode 100644
index 00000000..d7b679df
--- /dev/null
+++ b/Source/Base/Utiles/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/Utiles/ClassRegistry/uEditorRegistryUtils.pas b/Source/Base/Utiles/ClassRegistry/uEditorRegistryUtils.pas
new file mode 100644
index 00000000..0dd7333c
--- /dev/null
+++ b/Source/Base/Utiles/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/Utiles/ClassRegistry/uInformeRegistryUtils.pas b/Source/Base/Utiles/ClassRegistry/uInformeRegistryUtils.pas
new file mode 100644
index 00000000..f8a58c58
--- /dev/null
+++ b/Source/Base/Utiles/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/Utiles/ClassRegistry/uViewRegistryUtils.pas b/Source/Base/Utiles/ClassRegistry/uViewRegistryUtils.pas
new file mode 100644
index 00000000..458a6810
--- /dev/null
+++ b/Source/Base/Utiles/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/Utiles/uPasswordUtils.pas b/Source/Base/Utiles/uPasswordUtils.pas
index f078ee07..13cae927 100644
--- a/Source/Base/Utiles/uPasswordUtils.pas
+++ b/Source/Base/Utiles/uPasswordUtils.pas
@@ -3,7 +3,7 @@ unit uPasswordUtils;
interface
function EncriptarPassword(const password : string): String;
-function EncriptarPasswordOSC(const password : string): String;
+
implementation
uses
@@ -19,33 +19,4 @@ begin
Result := LowerCase(pass_encriptada);
end;
-function EncriptarPasswordOSC(const password : string): String;
-var
- t : TMD5Digest;
- salt : String;
- pass_encriptada : String;
- i : integer;
-begin
-// for ($i=0; $i<10; $i++) {
-// $password .= tep_rand();
-// }
-//
-// $salt = substr(md5($password), 0, 2);
-//
-// $password = md5($salt . $plain) . ':' . $salt;
-
- pass_encriptada := '';
- Randomize;
- for I := 0 to 9 do
- pass_encriptada := pass_encriptada + FloatToStr(Random(10000000000));
-
- t := MD5String(password);
- salt := Copy(MD5DigestToStr(t), 0, 2);
-
- t := MD5String(salt + password);
- pass_encriptada := MD5DigestToStr(t);
- Result := LowerCase(pass_encriptada) + ':' + salt;
-end;
-
-
end.
diff --git a/Source/Base/__uExceptions.pas__ b/Source/Base/__uExceptions.pas__
new file mode 100644
index 00000000..d3e6e852
--- /dev/null
+++ b/Source/Base/__uExceptions.pas__
@@ -0,0 +1,20 @@
+unit uExceptions;
+
+interface
+
+uses
+ uDADataTable;
+
+const
+ AUF_FKVIOLATION = 'violation of FOREIGN KEY';
+ AUF_HAVEVALUE = 'must have a value';
+
+type
+ IApplyUpdateFailedException = interface
+ ['{B090A762-3D65-405E-A810-14DB4F6E8F82}']
+ procedure ShowApplyUpdateFailed (const Error: EDAApplyUpdateFailed);
+ end;
+
+implementation
+
+end.
diff --git a/Source/FactuGES_Group.bdsgroup b/Source/FactuGES_Group.bdsgroup
index 7e705069..28a572bc 100644
--- a/Source/FactuGES_Group.bdsgroup
+++ b/Source/FactuGES_Group.bdsgroup
@@ -11,7 +11,7 @@
Base\Base.bdsproj
Base\ControllerBase\ControllerBase.bdsproj
- Base\GUIBase\GUIBase.bdsproj
+ GUIBase\GUIBase.bdsproj
Modulos\Empresas\Model\Empresas_model.bdsproj
Modulos\Empresas\Data\Empresas_data.bdsproj
Modulos\Empresas\Controller\Empresas_controller.bdsproj
diff --git a/Source/FactuGES_Group.groupproj b/Source/FactuGES_Group.groupproj
index 8a745eba..a090f7e3 100644
--- a/Source/FactuGES_Group.groupproj
+++ b/Source/FactuGES_Group.groupproj
@@ -6,7 +6,7 @@
-
+
@@ -67,40 +67,13 @@
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -129,6 +102,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -292,13 +292,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/Source/Servidor/FactuGES_Server.RES b/Source/Servidor/FactuGES_Server.RES
index 8527745a..0c6702e4 100644
Binary files a/Source/Servidor/FactuGES_Server.RES and b/Source/Servidor/FactuGES_Server.RES differ
diff --git a/Source/Servidor/FactuGES_Server.bdsproj b/Source/Servidor/FactuGES_Server.bdsproj
index 12ea701b..85c49886 100644
--- a/Source/Servidor/FactuGES_Server.bdsproj
+++ b/Source/Servidor/FactuGES_Server.bdsproj
@@ -103,8 +103,16 @@
True
True
True
-
-
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+
3
0
@@ -123,7 +131,7 @@
- ..\DataAbstract_D10\Lib;..\Base\Lib;..\Base\ControllerBase;..\Base\GUIBase;..\Base\ClassRegistry;..\Base\Usuarios;..\Modulos\Articulos\Lib;..\Modulos\Empresas\Lib;..\Modulos\Contactos\Lib;..\Modulos\Facturas de cliente\Lib;..\Modulos\Pedidos a proveedor\Lib;..\Modulos\Grupos de cliente\Lib;..\Modulos\Articulos\view
+
rtl;vclx;vcl;dbrtl;vcldb;dbxcds;dbexpress;vclib;ibxpress;indy;dclOfficeXP;VclSmp;dsnap;bdertl;teeui;teedb;tee;vcldbx;vclactnband;dxBarExtItemsD10;dxComnD10;dxBarD10;cxLibraryD10;cxEditorsD10;dxThemeD10;cxDataD10;cxExtEditorsD10;cxGridD10;cxPageControlD10;cxSchedulerD10;cxTreeListD10;cxVerticalGridD10;dxBarDBNavD10;dxBarExtDBItemsD10;tbx_d10;tb2k_d10;ccpack10;ccpack10dsg;cxExportD10;cxIntl5D10;adortl;DataAbstract_Core_D10;DataAbstract_DBXDriver_D10;DataAbstract_Scripting_D10;dxDockingD10;dxLayoutControlD10;dxNavBarD10;dxPSCoreD10;dxsbD10;fqb100;dxLayoutControlcxEditAdaptersD10;dxPScxCommonD10;dxPSLnksD10;vclshlctrls;dxPScxExtCommonD10;dxPScxGridLnkD10;dxPScxPCProdD10;dxPScxScheduler2LnkD10;dxPScxTLLnkD10;dxPSDBTeeChartD10;dxPSTeeChartD10;dxPSdxLCLnkD10;dxPsPrVwAdvD10;GUISDK_D10;JvAppFrmD10R;JvCoreD10R;Jcl;JclVcl;JvSystemD10R;JvStdCtrlsD10R;JvBandsD10R;JvDBD10R;JvDlgsD10R;JvBDED10R;JvCmpD10R;JvCryptD10R;JvCtrlsD10R;JvCustomD10R;JvDockingD10R;JvDotNetCtrlsD10R;JvEDID10R;JvGlobusD10R;JvHMID10R;JvInterpreterD10R;JvJansD10R;JvManagedThreadsD10R;JvMMD10R;JvNetD10R;JvPageCompsD10R;JvPluginD10R;JvPrintPreviewD10R;JvRuntimeDesignD10R;JvTimeFrameworkD10R;JvUIBD10R;JvValidatorsD10R;JvWizardD10R;JvXPCtrlsD10R;PluginSDK_D10R;PNG_D10;PngComponentsD10;inet;RemObjects_WebBroker_D10;RemObjects_RODX_D10;RemObjects_BPDX_D10;RemObjects_Indy_D10;PascalScript_RO_D10;IndyProtocols;IndyCore;IndySystem;DataAbstract_IDE_D10;fsTee10;fs10;frx10;frxADO10;frxBDE10;frxDB10;frxDBX10;frxe10;frxIBX10;frxTee10;fsADO10;fsBDE10;fsDB10;fsIBX10
EUREKALOG;EUREKALOG_VER6
@@ -144,40 +152,42 @@
True
False
-
-
- $00000000
-
-
True
False
- 2
- 2
- 2
+ 3
+ 0
+ 0
0
False
False
False
False
False
- 3081
+ 3082
1252
- 2.2.2.0
+ 3.0.0.0
- 2.2.2.0
+ 3.0.0.0
- martes, 28 de agosto de 2007 17:06
+ domingo, 30 de septiembre de 2007 20:47
+
+
+
+
RemObjects Pascal Script - RemObjects SDK 3.0 Integration
-
+
+ False
+
+
False