From 2db7e78811e3e38f9e1b308b654174f40e62169e Mon Sep 17 00:00:00 2001 From: david Date: Wed, 3 Oct 2007 16:03:28 +0000 Subject: [PATCH] git-svn-id: https://192.168.0.254/svn/Proyectos.Tecsitel_FactuGES2/branches/D2007-DA5@30 0c75b7a4-871f-7646-8a2f-f78d34cc349f --- Source/Base/Actualizacion/uActualizacion.dfm | 272 +++ Source/Base/Actualizacion/uActualizacion.pas | 182 ++ Source/Base/Base.bdsproj | 675 +++++++ Source/Base/Base.cfg | 40 + Source/Base/Base.dpk | 26 +- Source/Base/Base.dproj | 125 +- Source/Base/Base.drc | 8 +- Source/Base/Base.res | Bin 384 -> 5028 bytes Source/Base/Conexion/uConfigurarConexion.dfm | 112 ++ Source/Base/Conexion/uConfigurarConexion.pas | 76 + Source/Base/Conexion/uDataModuleConexion.dfm | 20 + Source/Base/Conexion/uDataModuleConexion.pas | 150 ++ .../uDataModuleConfiguracion.dfm | 27 + .../uDataModuleConfiguracion.pas | 70 + Source/Base/Controladores/uControllerBase.pas | 102 + .../Controladores/uControllerDetallesBase.pas | 585 ++++++ .../Controladores/uControllerDetallesDTO.pas | 70 + .../View/uIEditorDatosBancarioEmpresa.pas | 28 + .../Controller/View/uIEditorEmpresa.pas | 23 + .../Controller/View/uIEditorEmpresas.pas | 24 + .../uDatosBancariosEmpresaController.pas | 71 + .../Controller/uEmpresasController.pas | 242 +++ .../Empresas/Data/uDataModuleEmpresas.dfm | 292 +++ .../Empresas/Data/uDataModuleEmpresas.pas | 149 ++ .../Model/Data/uIDataModuleEmpresas.pas | 19 + .../Empresas/Model/schEmpresasClient_Intf.pas | 1243 ++++++++++++ .../Empresas/Model/schEmpresasServer_Intf.pas | 1490 ++++++++++++++ Source/Base/Empresas/Model/uBizEmpresas.pas | 99 + .../Model/uBizEmpresasDatosBancarios.pas | 51 + .../Empresas/Servidor/srvEmpresas_Impl.dfm | 633 ++++++ .../Empresas/Servidor/srvEmpresas_Impl.pas | 81 + .../Base/Empresas/Test/Empresas_Tests.bdsproj | 496 +++++ Source/Base/Empresas/Test/Empresas_Tests.dpr | 39 + Source/Base/Empresas/Test/Empresas_Tests.drc | 14 + Source/Base/Empresas/Test/Empresas_Tests.res | Bin 0 -> 5084 bytes .../Test/uEmpresasController_Test.pas | 178 ++ Source/Base/Empresas/Test/uHostMainForm.dfm | 28 + Source/Base/Empresas/Test/uHostMainForm.pas | 116 ++ .../Views/uEditorDatosBancariosEmpresa.dfm | 181 ++ .../Views/uEditorDatosBancariosEmpresa.pas | 97 + Source/Base/Empresas/Views/uEditorEmpresa.dfm | 336 ++++ Source/Base/Empresas/Views/uEditorEmpresa.pas | 183 ++ .../Empresas/Views/uEmpresasViewRegister.pas | 25 + .../Empresas/Views/uViewDatosBancarios.dfm | 52 + .../Empresas/Views/uViewDatosBancarios.pas | 67 + Source/Base/Empresas/Views/uViewEmpresa.dfm | 595 ++++++ Source/Base/Empresas/Views/uViewEmpresa.pas | 179 ++ .../Controller/uUsuariosController.pas | 313 +++ .../Base/Usuarios/Data/uCambiarPassword.dfm | 94 + .../Base/Usuarios/Data/uCambiarPassword.pas | 41 + .../Usuarios/Data/uDataModuleUsuarios.dfm | 76 + .../Usuarios/Data/uDataModuleUsuarios.pas | 287 +++ Source/Base/Usuarios/Data/uLoginForm.dfm | 1099 +++++++++++ Source/Base/Usuarios/Data/uLoginForm.pas | 101 + Source/Base/Usuarios/Data/uUCROConn.pas | 196 ++ Source/Base/Usuarios/Data/uUsuario.dfm | 123 ++ Source/Base/Usuarios/Data/uUsuario.pas | 39 + Source/Base/Usuarios/Data/uUsuarios.dfm | 118 ++ Source/Base/Usuarios/Data/uUsuarios.pas | 89 + .../Model/Data/uIDataModuleUsuarios.pas | 18 + .../Usuarios/Model/schUsuariosClient_Intf.pas | 1464 ++++++++++++++ .../Usuarios/Model/schUsuariosServer_Intf.pas | 1715 +++++++++++++++++ .../Usuarios/Servidor/srvUsuarios_Impl.dfm | 419 ++++ .../Usuarios/Servidor/srvUsuarios_Impl.pas | 65 + .../ClassRegistry/uClassRegistryUtils.pas | 336 ++++ .../ClassRegistry/uEditorRegistryUtils.pas | 81 + .../ClassRegistry/uInformeRegistryUtils.pas | 59 + .../ClassRegistry/uViewRegistryUtils.pas | 50 + Source/Base/Utiles/uPasswordUtils.pas | 31 +- Source/Base/__uExceptions.pas__ | 20 + Source/FactuGES_Group.bdsgroup | 2 +- Source/FactuGES_Group.groupproj | 68 +- Source/Servidor/FactuGES_Server.RES | Bin 23212 -> 23492 bytes Source/Servidor/FactuGES_Server.bdsproj | 42 +- Source/Servidor/FactuGES_Server.cfg | 19 +- Source/Servidor/FactuGES_Server.dpr | 5 +- Source/Servidor/FactuGES_Server.drc | 5 +- Source/Servidor/srvConfiguracion_Impl.dfm | 57 + Source/Servidor/srvConfiguracion_Impl.pas | 80 + Source/Servidor/srvLogin_Impl.dfm | 149 ++ Source/Servidor/srvLogin_Impl.pas | 146 ++ 81 files changed, 16830 insertions(+), 148 deletions(-) create mode 100644 Source/Base/Actualizacion/uActualizacion.dfm create mode 100644 Source/Base/Actualizacion/uActualizacion.pas create mode 100644 Source/Base/Base.bdsproj create mode 100644 Source/Base/Base.cfg create mode 100644 Source/Base/Conexion/uConfigurarConexion.dfm create mode 100644 Source/Base/Conexion/uConfigurarConexion.pas create mode 100644 Source/Base/Conexion/uDataModuleConexion.dfm create mode 100644 Source/Base/Conexion/uDataModuleConexion.pas create mode 100644 Source/Base/Configuracion/uDataModuleConfiguracion.dfm create mode 100644 Source/Base/Configuracion/uDataModuleConfiguracion.pas create mode 100644 Source/Base/Controladores/uControllerBase.pas create mode 100644 Source/Base/Controladores/uControllerDetallesBase.pas create mode 100644 Source/Base/Controladores/uControllerDetallesDTO.pas create mode 100644 Source/Base/Empresas/Controller/View/uIEditorDatosBancarioEmpresa.pas create mode 100644 Source/Base/Empresas/Controller/View/uIEditorEmpresa.pas create mode 100644 Source/Base/Empresas/Controller/View/uIEditorEmpresas.pas create mode 100644 Source/Base/Empresas/Controller/uDatosBancariosEmpresaController.pas create mode 100644 Source/Base/Empresas/Controller/uEmpresasController.pas create mode 100644 Source/Base/Empresas/Data/uDataModuleEmpresas.dfm create mode 100644 Source/Base/Empresas/Data/uDataModuleEmpresas.pas create mode 100644 Source/Base/Empresas/Model/Data/uIDataModuleEmpresas.pas create mode 100644 Source/Base/Empresas/Model/schEmpresasClient_Intf.pas create mode 100644 Source/Base/Empresas/Model/schEmpresasServer_Intf.pas create mode 100644 Source/Base/Empresas/Model/uBizEmpresas.pas create mode 100644 Source/Base/Empresas/Model/uBizEmpresasDatosBancarios.pas create mode 100644 Source/Base/Empresas/Servidor/srvEmpresas_Impl.dfm create mode 100644 Source/Base/Empresas/Servidor/srvEmpresas_Impl.pas create mode 100644 Source/Base/Empresas/Test/Empresas_Tests.bdsproj create mode 100644 Source/Base/Empresas/Test/Empresas_Tests.dpr create mode 100644 Source/Base/Empresas/Test/Empresas_Tests.drc create mode 100644 Source/Base/Empresas/Test/Empresas_Tests.res create mode 100644 Source/Base/Empresas/Test/uEmpresasController_Test.pas create mode 100644 Source/Base/Empresas/Test/uHostMainForm.dfm create mode 100644 Source/Base/Empresas/Test/uHostMainForm.pas create mode 100644 Source/Base/Empresas/Views/uEditorDatosBancariosEmpresa.dfm create mode 100644 Source/Base/Empresas/Views/uEditorDatosBancariosEmpresa.pas create mode 100644 Source/Base/Empresas/Views/uEditorEmpresa.dfm create mode 100644 Source/Base/Empresas/Views/uEditorEmpresa.pas create mode 100644 Source/Base/Empresas/Views/uEmpresasViewRegister.pas create mode 100644 Source/Base/Empresas/Views/uViewDatosBancarios.dfm create mode 100644 Source/Base/Empresas/Views/uViewDatosBancarios.pas create mode 100644 Source/Base/Empresas/Views/uViewEmpresa.dfm create mode 100644 Source/Base/Empresas/Views/uViewEmpresa.pas create mode 100644 Source/Base/Usuarios/Controller/uUsuariosController.pas create mode 100644 Source/Base/Usuarios/Data/uCambiarPassword.dfm create mode 100644 Source/Base/Usuarios/Data/uCambiarPassword.pas create mode 100644 Source/Base/Usuarios/Data/uDataModuleUsuarios.dfm create mode 100644 Source/Base/Usuarios/Data/uDataModuleUsuarios.pas create mode 100644 Source/Base/Usuarios/Data/uLoginForm.dfm create mode 100644 Source/Base/Usuarios/Data/uLoginForm.pas create mode 100644 Source/Base/Usuarios/Data/uUCROConn.pas create mode 100644 Source/Base/Usuarios/Data/uUsuario.dfm create mode 100644 Source/Base/Usuarios/Data/uUsuario.pas create mode 100644 Source/Base/Usuarios/Data/uUsuarios.dfm create mode 100644 Source/Base/Usuarios/Data/uUsuarios.pas create mode 100644 Source/Base/Usuarios/Model/Data/uIDataModuleUsuarios.pas create mode 100644 Source/Base/Usuarios/Model/schUsuariosClient_Intf.pas create mode 100644 Source/Base/Usuarios/Model/schUsuariosServer_Intf.pas create mode 100644 Source/Base/Usuarios/Servidor/srvUsuarios_Impl.dfm create mode 100644 Source/Base/Usuarios/Servidor/srvUsuarios_Impl.pas create mode 100644 Source/Base/Utiles/ClassRegistry/uClassRegistryUtils.pas create mode 100644 Source/Base/Utiles/ClassRegistry/uEditorRegistryUtils.pas create mode 100644 Source/Base/Utiles/ClassRegistry/uInformeRegistryUtils.pas create mode 100644 Source/Base/Utiles/ClassRegistry/uViewRegistryUtils.pas create mode 100644 Source/Base/__uExceptions.pas__ create mode 100644 Source/Servidor/srvConfiguracion_Impl.dfm create mode 100644 Source/Servidor/srvConfiguracion_Impl.pas create mode 100644 Source/Servidor/srvLogin_Impl.dfm create mode 100644 Source/Servidor/srvLogin_Impl.pas 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +
fActualizacion
+
+ + + + + +
fConfigurarConexion
+
+ +
dmConexion
+
+ +
dmConfiguracion
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
fActualizacion
+
+ +
fConfigurarConexion
+
+ +
dmBase
+
+ +
dmConexion
+
+ +
dmConfiguracion
+
+ + + + + + + + + + + + + + + +
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 0000000000000000000000000000000000000000..346c5f0c3caa662a366d98820a6c834bcc95f680 GIT binary patch literal 5084 zcmbW5KW`jW6veNTNT4VJ7gRKBA%ubpWTf;9B8i9u1d(jokp&?{Bu-?Uf@=H`@(nfx zLTJ7N8rPA_lt@lN4Jj!Q!};C&?#%3F9c)Ird*7e??m6eaH*Z&KX0{>gx-c~to?q5; z{;Xowd~SXH{Dlm7D?eFhfQ`hckr~UNgiOr@nBPRUjs68If z`N97eA21R-J!8qEnKwS)iC0t4tPzK?IiL2K&4`<;n6%q2`ied7NsL*^OP=J?RJFx; z)B;{$Q-=i(8gqQG>&EOz*hk4hZRK3`fP*#jq1Iko;V>R}!J%u>UpscE__6k;+Vt4a z{!H4X8~t#Y%PZgVLw*cwYTVaZ?d0HIeUBrb@_7Ay4fWsbd7#nvNHu5_3kT0~7Jo!B5PzT4<+)Vt**LBiV5ho6;5tp$!*H*PxJh~fjSLlztfyX`uhp4O1)nLks z4^6>gR+oL2R>w>sLP4JBNeXt*|kz&)RoK z+OPJRB?mZx8QA14_=@A)gULCFHZ?9hC-PIRtAYa>!SMZ0+_rGg`DD&(+I0p8Z|nVF zoEka@u(3((zhjC!oM^+Hr4_^kJOPsL9LmoS|_apQfCJ0SG?*#L)nRArCm#Hju?S_=oY6F>ZF z{a%0Na?Fao4KwLyF7F(#k>=vu%L_a8bM|9@v=)3Bm}$(@=KWi!ec6XNcidlaj9lbH zzwf`===C~P%C9))J!czOKCiWTH!_#+18wiutMTJZqr2=K`K3ScJ$Jzm?3i!ra(Mw2@ODsIU5%6i`T&{ud!MxmWXejtmfAzJuX1t?Wn|Rmy{ejz5aa!y9Bk$+2D(|E? zyUxEm5@Ryle}4YdrzRNuxWCASF0?y0X{Uy%HSdM^4K>tZCBDu=+-vBU z9^sHbG{*TsAHRWk&wX5d?y3H4iWf29a|iNWMXuzdB6^#(t2n%*pYwU7{VLxBwDYd< zGa-(C?uDCY7c9ST3T~c3uz8ZpDtyK`i(c>PQ17h!f}f&0wCB6adj@vTp^i4S7(dMO zUcHJ#f95A(z-8yP5QgtLK0>c*W&AC7*OG(P?<=lfr3umZXt>N#-6IBO>{#X6?WB)=ap zxcKj3_fZpapX5mnuR0Ge@q%y9Hgv=E=OL^|>BT zJzmM>@X+Up%XO#4J1#!+ozx$fXL-CkFzYnN2XcW}0Q%gnZ9UH684ZXeq<`$G1KU6;>i{J#eOX6XNnjSc@-gMUHR z?C}}%e>l2sU3u1g*?7(4GnX`W%Whbu&nxzoTGt$*a=fc*^Za`5&wt1l#z^Fv($sTK z79-yEk3W3ihV9v|-L)ONV^`(x*==Rsv2X2xqMmxpmQ-y?;g($z2N=DhY-<{QVE65z zZ7cpqsoqxab`S8W{$oa`% + 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 8527745a69b5ddfdd9ca58789118ca24460a2027..0c6702e40ae7e2d2052643aea11fd1b7fa2d2378 100644 GIT binary patch delta 444 zcmY+9ze>YU6vltKrcy*CgE&ekDB@J`5tO3fzri8t7F3$5F(JmmMV~?P5*-{|#946g zDSQFnLHZ>(ZOMUqKhFLBoO9nkobONPy$EhRZ)KHvIV|IO;Ls)RRA@V&*ad^{TW->Y zrKa_KBLf`%2ikS8t%Q=#3Q{GQs%-)zINtzop>yMRI}Cm zOp~k35wV=M?Bs>+LW+nh`4VBytu~pJ)t(KSka073wsy6~;!}3Xb7@n>J?c9}d&TlA G{F?%eZ9j_u delta 167 zcmX@IopH@p#tkJASq1`JJPdHa$iT)RAi%)D$RNRx!3v_`JQfB9CI$rsh};Se1_ovX z52%BM!N342$H&0Hir}d-0L^4z*uXgXUW6PIkop(lA;JPQ85IaHPL7IHVtT_cxh_&{ N@{>q|$#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