From 19aed4c9eea3df2026946401cc7048a410664e7c Mon Sep 17 00:00:00 2001 From: david Date: Tue, 15 Apr 2008 09:28:58 +0000 Subject: [PATCH] =?UTF-8?q?Integrar=20gesti=C3=B3n=20de=20usuarios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://192.168.0.254/svn/Proyectos.Varela_PuntosVenta/trunk@108 1c943782-d109-9647-9548-93b3ac332352 --- Build/Build.fbp5 | 592 ++- Database/1 - tablas.sql | 112 + Source/AdminPVGroup.groupproj | 48 +- Source/AdminPVGroup_prjgroup.tvsconfig | 2 + .../ApplicationBase/ApplicationBase.bdsproj | 697 +++ Source/ApplicationBase/ApplicationBase.cfg | 40 + Source/ApplicationBase/ApplicationBase.dpk | 63 + Source/ApplicationBase/ApplicationBase.dproj | 625 +++ Source/ApplicationBase/ApplicationBase.rc | 22 + Source/ApplicationBase/ApplicationBase.res | Bin 0 -> 384 bytes .../Controller/View/uIEditorLogin.pas | 22 + .../Controller/View/uIEditorPerfilUsuario.pas | 23 + .../View/uIEditorPerfilesUsuario.pas | 23 + .../Controller/View/uIEditorUsuario.pas | 22 + .../Controller/View/uIEditorUsuarios.pas | 23 + .../Controller/uPerfilesUsuarioController.pas | 287 ++ .../Controller/uUsuariosController.pas | 923 ++++ .../Usuarios/Data/uDataModuleUsuarios.dfm | 426 ++ .../Usuarios/Data/uDataModuleUsuarios.pas | 465 ++ .../Usuarios/Data/uUCROConn.pas | 224 + .../Model/Data/uIDataModuleUsuarios.pas | 25 + .../Usuarios/Model/schUsuariosClient_Intf.pas | 1716 +++++++ .../Usuarios/Model/schUsuariosServer_Intf.pas | 2009 ++++++++ .../Usuarios/Model/uBizUsuarios.pas | 90 + .../Usuarios/Servidor/srvUsuarios_Impl.dfm | 600 +++ .../Usuarios/Servidor/srvUsuarios_Impl.pas | 65 + Source/ApplicationBase/Usuarios/Usuarios.cfg | 45 + Source/ApplicationBase/Usuarios/Usuarios.dof | 471 ++ Source/ApplicationBase/Usuarios/Usuarios.dpk | 67 + .../ApplicationBase/Usuarios/Usuarios.dproj | 598 +++ Source/ApplicationBase/Usuarios/Usuarios.drc | 21 + Source/ApplicationBase/Usuarios/Usuarios.rc | 22 + Source/ApplicationBase/Usuarios/Usuarios.res | Bin 0 -> 4748 bytes .../Usuarios/Views/uEditorCambiarPassword.dfm | 123 + .../Usuarios/Views/uEditorCambiarPassword.pas | 101 + .../Usuarios/Views/uEditorLogin.dfm | 1101 +++++ .../Usuarios/Views/uEditorLogin.pas | 140 + .../Usuarios/Views/uEditorPerfilUsuario.dfm | 48 + .../Usuarios/Views/uEditorPerfilUsuario.pas | 240 + .../Usuarios/Views/uEditorPerfilesUsuario.dfm | 59 + .../Usuarios/Views/uEditorPerfilesUsuario.pas | 199 + .../Usuarios/Views/uEditorUsuario.dfm | 139 + .../Usuarios/Views/uEditorUsuario.pas | 308 ++ .../Usuarios/Views/uEditorUsuarios.dfm | 71 + .../Usuarios/Views/uEditorUsuarios.pas | 239 + .../Usuarios/Views/uUsuario.dfm | 123 + .../Usuarios/Views/uUsuario.pas | 39 + .../Usuarios/Views/uUsuarios.dfm | 118 + .../Usuarios/Views/uUsuarios.pas | 89 + .../Usuarios/Views/uUsuariosViewRegister.pas | 33 + .../Usuarios/Views/uViewPerfilUsuario.dfm | 68 + .../Usuarios/Views/uViewPerfilUsuario.pas | 82 + .../Usuarios/Views/uViewPerfilesUsuario.dfm | 38 + .../Usuarios/Views/uViewPerfilesUsuario.pas | 56 + .../Usuarios/Views/uViewUsuario.dfm | 300 ++ .../Usuarios/Views/uViewUsuario.pas | 210 + .../Usuarios/Views/uViewUsuarios.dfm | 70 + .../Usuarios/Views/uViewUsuarios.pas | 64 + Source/ApplicationBase/uAdminPV_App.pas | 326 ++ Source/Base/BaseD10.dpk | 32 +- Source/Base/BaseD10.dproj | 46 +- Source/Base/BaseD10.drc | 7 +- Source/Base/BaseD10.identcache | Bin 1442 -> 0 bytes .../ClassRegistry/uClassRegistryUtils.pas | 336 ++ .../ClassRegistry/uEditorRegistryUtils.pas | 81 + .../ClassRegistry/uInformeRegistryUtils.pas | 59 + .../Base/ClassRegistry/uViewRegistryUtils.pas | 50 + Source/Base/Controladores/uControllerBase.pas | 280 ++ Source/Base/Utiles/uAppInfoUtils.pas | 52 + Source/Base/{ => Utiles}/uDBSelectionList.pas | 0 Source/Base/{ => Utiles}/uDataTableUtils.pas | 222 +- .../Cliente => Base/Utiles}/uDateUtils.pas | 43 +- Source/Base/Utiles/uDialogUtils.pas | 287 ++ Source/Base/{ => Utiles}/uEditorUtils.pas | 0 Source/Base/{ => Utiles}/uGridUtils.pas | 0 Source/Base/{ => Utiles}/uIntegerList.pas | 0 Source/Base/{ => Utiles}/uSysFunc.pas | 0 Source/Base/uConfigurarConexion.dfm | 9 +- Source/Base/uConfigurarConexion.pas | 2 +- Source/Base/uDMBase.dfm | 1660 +++++++ Source/Base/uDMBase.pas | 254 ++ Source/Base/uDataModuleBase.dfm | 1661 +------ Source/Base/uDataModuleBase.pas | 250 +- Source/Base/uEditorBase.pas | Bin 6073 -> 6067 bytes Source/Base/uEditorDBBase.ddp | Bin 51 -> 0 bytes Source/Base/uEditorDBBase.dfm | 1 - Source/Base/uEditorDBBase.pas | 35 +- Source/Base/uEditorDBItem.ddp | Bin 51 -> 0 bytes Source/Base/uEditorGridBase.pas | Bin 5525 -> 5519 bytes Source/Base/uEditorItem.dfm | 22 +- Source/Base/uEditorItem.pas | 2 +- Source/Base/uViewGridBase.ddp | Bin 51 -> 0 bytes Source/CargaEDI/CargaEDI.dproj | 4 +- Source/CargaEDI/CargaEDI.drc | 2 +- Source/CargaEDI/CargaEDI.identcache | Bin 119 -> 0 bytes Source/CargaEDI/uCargaEDI.ddp | Bin 51 -> 0 bytes Source/CargaEDI/uCargaEDI.pas | 2 +- Source/Cliente/AdminPV.dpr | 22 +- Source/Cliente/AdminPV.dproj | 15 +- Source/Cliente/AdminPV.drc | 9 +- Source/Cliente/AdminPV.identcache | Bin 556 -> 0 bytes Source/Cliente/AdminPV.rc | 2 +- Source/Cliente/AdminPV.res | Bin 18476 -> 18468 bytes .../Cliente/Copia de uPantallaPrincipal.dfm | 449 ++ .../Cliente/Copia de uPantallaPrincipal.pas | 437 ++ Source/Cliente/Utiles/uClienteUtils.pas | 19 + Source/Cliente/Utiles/uMenuUtils.pas | 139 + Source/Cliente/Utiles/uNavPaneUtils.pas | 58 + Source/Cliente/uAcercaDe.pas | 14 +- Source/Cliente/uBootStrap.pas | 76 + Source/Cliente/uMainMenuController.pas | 96 + Source/Cliente/uMenuUtils.pas | 263 -- Source/Cliente/uNavPaneController.pas | 199 + Source/Cliente/uPantallaPrincipal.ddp | Bin 51 -> 0 bytes Source/Cliente/uPantallaPrincipal.dfm | 332 +- Source/Cliente/uPantallaPrincipal.pas | 562 +-- Source/Cliente/uSplash.ddp | Bin 51 -> 0 bytes Source/Cliente/uSplash.dfm | 1 + Source/Cliente/uSplash.pas | 67 +- Source/Configuracion/Configuracion.dpk | 16 +- Source/Configuracion/Configuracion.dproj | 29 +- Source/Configuracion/uPanelControl.pas | Bin 988 -> 982 bytes .../Cliente/uDataModuleControles.ddp | Bin 51 -> 0 bytes .../Cliente/uDataModuleControles.pas | Bin 2045 -> 2039 bytes .../Cliente/uEditorControlBase.ddp | Bin 51 -> 0 bytes .../Cliente/uEditorControlBase.pas | 3 +- .../Cliente/uViewAgrupaciones.ddp | Bin 51 -> 0 bytes .../ControlesBase/Cliente/uViewColumnas.ddp | Bin 51 -> 0 bytes .../Cliente/uViewControlBase.ddp | Bin 51 -> 0 bytes .../Cliente/uViewControlGrid.ddp | Bin 51 -> 0 bytes Source/ControlesBase/Cliente/uViewFiltros.ddp | Bin 51 -> 0 bytes .../Cliente/uViewParametrosControlGrid.ddp | Bin 51 -> 0 bytes .../Cliente/uViewPeriodoFechas.ddp | Bin 51 -> 0 bytes .../ControlesBase/Cliente/uViewSumarios.ddp | Bin 51 -> 0 bytes Source/ControlesBase/ControlesBaseD10.dpk | 3 +- Source/ControlesBase/ControlesBaseD10.dproj | 18 +- Source/ControlesBase/ControlesBaseD10.drc | 2 +- .../ControlesBase/ControlesBaseD10.identcache | Bin 1274 -> 0 bytes .../Reglas/uBizControlesBase.pas | Bin 2009 -> 2003 bytes .../Servidor/srvControles_Impl.ddp | Bin 51 -> 0 bytes .../Devoluciones/Cliente/Devoluciones.drc | 2 +- .../Cliente/Devoluciones.identcache | Bin 947 -> 0 bytes .../Cliente/uDataModuleDevoluciones.ddp | Bin 51 -> 0 bytes .../Cliente/uDataModuleDevoluciones.dfm | 744 +-- .../Cliente/uDataModuleDevoluciones.pas | 2 +- .../Cliente/uEditorAjustarDevoluciones.ddp | Bin 51 -> 0 bytes .../Cliente/uEditorListaDevoluciones.ddp | Bin 51 -> 0 bytes .../Cliente/uPluginControllerDevoluciones.ddp | Bin 51 -> 0 bytes .../Cliente/uViewListaDevoluciones.ddp | Bin 51 -> 0 bytes .../Servidor/srvDevoluciones_Impl.ddp | Bin 51 -> 0 bytes .../FicherosEDI/Cliente/FicherosEDI.drc | 2 +- .../Cliente/FicherosEDI.identcache | Bin 1531 -> 0 bytes .../Cliente/uAsistenteCargaFicheros.ddp | Bin 51 -> 0 bytes .../Cliente/uAsistenteCargaFicheros.pas | 3 +- .../FicherosEDI/Cliente/uCargarFicheros.pas | Bin 6367 -> 6361 bytes .../Cliente/uDataModuleFicherosEDI.ddp | Bin 51 -> 0 bytes .../Cliente/uDataModuleFicherosEDI.pas | Bin 1507 -> 1501 bytes .../Cliente/uEditorHistorialCargasEDI.ddp | Bin 51 -> 0 bytes .../Cliente/uPluginControllerFicherosEDI.ddp | Bin 51 -> 0 bytes .../FicherosEDI/Cliente/uSubirFicheros.pas | 2 +- .../Cliente/uViewHistorialCargasEDI.ddp | Bin 51 -> 0 bytes .../Modulos/Parametros/Cliente/Parametros.dpk | 22 +- .../Parametros/Cliente/Parametros.dproj | 38 +- .../Modulos/Parametros/Cliente/Parametros.drc | 2 +- .../Parametros/Cliente/Parametros.identcache | Bin 766 -> 0 bytes .../Cliente/uDataModuleParametros.ddp | Bin 51 -> 0 bytes .../Cliente/uDataModuleParametros.pas | Bin 1992 -> 1986 bytes .../Cliente/uViewParametrosCentro.ddp | Bin 51 -> 0 bytes .../Cliente/uViewParametrosColeccion.ddp | Bin 51 -> 0 bytes .../Servidor/srvParametros_Impl.ddp | Bin 51 -> 0 bytes .../Recepciones/Cliente/Recepciones.drc | 2 +- .../Cliente/Recepciones.identcache | Bin 1259 -> 0 bytes .../Cliente/uDataModuleRecepciones.pas | Bin 3584 -> 3578 bytes .../Cliente/uEditorAjustarRecepciones.ddp | Bin 51 -> 0 bytes .../Cliente/uEditorListaRecepciones.ddp | Bin 51 -> 0 bytes .../uEditorListaRecepcionesAlbaran.ddp | Bin 51 -> 0 bytes .../Cliente/uPluginControllerRecepciones.ddp | Bin 51 -> 0 bytes .../Cliente/uViewListaRecepciones.ddp | Bin 51 -> 0 bytes .../Cliente/uViewListaRecepcionesAlbaran.ddp | Bin 51 -> 0 bytes .../Cliente/ReferenciaGenerica.drc | 2 +- .../Cliente/ReferenciaGenerica.identcache | Bin 1360 -> 0 bytes .../Cliente/uDataModuleReferenciaGenerica.ddp | Bin 51 -> 0 bytes .../Cliente/uDataModuleReferenciaGenerica.pas | Bin 4489 -> 4483 bytes .../uEditorCambioReferenciaGenerica.ddp | Bin 51 -> 0 bytes .../uEditorListaReferenciaGenerica.ddp | Bin 51 -> 0 bytes .../uEditorListaReferenciaGenerica.dfm | 7 +- .../uPluginControllerReferenciaGenerica.ddp | Bin 51 -> 0 bytes .../Cliente/uViewListaReferenciaGenerica.ddp | Bin 51 -> 0 bytes .../Servidor/srvReferenciaGenerica_Impl.ddp | Bin 51 -> 0 bytes Source/Modulos/Stock/Cliente/Stock.dpk | 7 +- Source/Modulos/Stock/Cliente/Stock.dproj | 88 +- Source/Modulos/Stock/Cliente/Stock.drc | 2 +- Source/Modulos/Stock/Cliente/Stock.identcache | Bin 1499 -> 0 bytes .../Stock/Cliente/uDataModuleStock.ddp | Bin 51 -> 0 bytes .../Stock/Cliente/uDataModuleStock.pas | Bin 3158 -> 3152 bytes .../Stock/Cliente/uEditorControlStockEDI.ddp | Bin 51 -> 0 bytes .../Cliente/uEditorControlStockVARELA.ddp | Bin 51 -> 0 bytes .../Cliente/uViewControGridStockVARELA.ddp | Bin 51 -> 0 bytes .../Modulos/Stock/Servidor/srvStock_Impl.ddp | Bin 51 -> 0 bytes .../Modulos/Traspasos/Cliente/Traspasos.drc | 2 +- .../Cliente/uDataModuleTraspasos.ddp | Bin 51 -> 0 bytes .../Cliente/uDataModuleTraspasos.pas | Bin 2269 -> 2263 bytes .../Cliente/uEditorAjustarTraspasos.ddp | Bin 51 -> 0 bytes .../Cliente/uEditorListaTraspasos.ddp | Bin 51 -> 0 bytes .../Cliente/uPluginControllerTraspasos.ddp | Bin 51 -> 0 bytes .../Traspasos/Cliente/uViewListaTraspasos.ddp | Bin 51 -> 0 bytes .../Traspasos/Servidor/srvTraspasos_Impl.ddp | Bin 51 -> 0 bytes .../VentasProceso/Cliente/VentasProceso.drc | 2 +- .../Cliente/VentasProceso.identcache | Bin 1607 -> 0 bytes .../Cliente/uDataModuleVentasProceso.ddp | Bin 51 -> 0 bytes .../Cliente/uDataModuleVentasProceso.pas | Bin 3525 -> 3519 bytes .../Cliente/uEditorControlVentaProceso.ddp | Bin 51 -> 0 bytes .../Cliente/uEditorControlesVentaProceso.dfm | 17 +- .../Cliente/uEditorControlesVentaProceso.pas | 2 +- .../uPluginControllerVentasProceso.ddp | Bin 51 -> 0 bytes .../Cliente/uViewControGridlVentaProceso.ddp | Bin 51 -> 0 bytes .../Cliente/uViewControlVentaProceso.ddp | Bin 51 -> 0 bytes .../Servidor/srvVentasEnProceso_Impl.ddp | Bin 51 -> 0 bytes .../Cliente/VentasTerminadas.drc | 2 +- .../Cliente/VentasTerminadas.identcache | Bin 2168 -> 0 bytes .../Cliente/uDataModuleVentasTerminadas.ddp | Bin 51 -> 0 bytes .../Cliente/uDataModuleVentasTerminadas.pas | Bin 3861 -> 3855 bytes .../Cliente/uEditorControlResumenVentas.ddp | Bin 51 -> 0 bytes .../uPluginControllerVentasTerminadas.ddp | Bin 51 -> 0 bytes .../Cliente/uViewControGridResumenVentas.ddp | Bin 51 -> 0 bytes .../Cliente/uViewControGridResumenVentas.dfm | 5 +- .../uViewControGridlVentasTerminadas.ddp | Bin 51 -> 0 bytes .../Cliente/uViewControlVentasTerminadas.ddp | Bin 51 -> 0 bytes .../Reglas/uBizInformesVentas.pas | Bin 1951 -> 1945 bytes .../Servidor/srvVentasTerminadas_Impl.ddp | Bin 51 -> 0 bytes Source/Servicios/VARELA_Intf.pas | 1282 ++++++ Source/Servicios/VARELA_Invk.pas | 661 +++ Source/Servidor/AdminPV_Server.dpr | 28 +- Source/Servidor/AdminPV_Server.dproj | 48 +- Source/Servidor/AdminPV_Server.drc | 3563 +++++++-------- Source/Servidor/AdminPV_Server.rc | 2 +- Source/Servidor/AdminPV_Server.res | Bin 23344 -> 23336 bytes Source/Servidor/Configuracion/uConexionBD.ddp | Bin 51 -> 0 bytes .../Configuracion/uConfFicherosEDI.ddp | Bin 51 -> 0 bytes .../Servidor/Configuracion/uConfGeneral.ddp | Bin 51 -> 0 bytes .../Servidor/Configuracion/uConfiguracion.ddp | Bin 51 -> 0 bytes Source/Servidor/EDI/EDI_Inventary_Impl.dfm | 7 + Source/Servidor/EDI/EDI_Inventary_Impl.pas | 52 + Source/Servidor/EDI/EDI_Log_Impl.ddp | Bin 51 -> 0 bytes Source/Servidor/EDI/EDI_Log_Impl.dfm | 43 +- Source/Servidor/EDI/EDI_Log_Impl.pas | 15 +- Source/Servidor/EDI/EDI_Sales_Impl.dfm | 9 + Source/Servidor/EDI/EDI_Sales_Impl.pas | 169 + Source/Servidor/Login_Impl.dfm | 7 + Source/Servidor/Login_Impl.pas | 52 + Source/Servidor/RODLFILE.res | Bin 18469 -> 29015 bytes .../EDI_Inventary/EDI_Inventary_Impl.ddp | Bin 51 -> 0 bytes .../uDataModuleEDI_Inventary.ddp | Bin 51 -> 0 bytes .../Services/EDI_Sales/EDI_Sales_Impl.ddp | Bin 51 -> 0 bytes .../EDI_Sales/uDataModuleEDI_Sales.ddp | Bin 51 -> 0 bytes .../Servidor/Services/Login/srvLogin_Impl.ddp | Bin 51 -> 0 bytes .../Servidor/Services/Login/srvLogin_Impl.dfm | 138 +- .../Servidor/Services/Login/srvLogin_Impl.pas | 120 +- .../srvTransfereciaFicheros_Impl.ddp | Bin 51 -> 0 bytes Source/Servidor/Utiles/EDI_Utils.pas | 40 + Source/Servidor/Utiles/RegExpr.pas | 4042 +++++++++++++++++ Source/Servidor/Utiles/uSchemaUtilsServer.pas | 161 + Source/Servidor/VARELA.RODL | 63 +- Source/Servidor/fServerForm.ddp | Bin 51 -> 0 bytes Source/Servidor/srvInformes_Impl.ddp | Bin 51 -> 0 bytes Source/Servidor/uAcercaDe.ddp | Bin 51 -> 0 bytes Source/Servidor/uDataModuleServer.ddp | Bin 51 -> 0 bytes Source/Servidor/uDataModuleServer.dfm | 4 - Source/Servidor/uDataModuleServer.pas | 4 +- 269 files changed, 28454 insertions(+), 5993 deletions(-) create mode 100644 Source/AdminPVGroup_prjgroup.tvsconfig create mode 100644 Source/ApplicationBase/ApplicationBase.bdsproj create mode 100644 Source/ApplicationBase/ApplicationBase.cfg create mode 100644 Source/ApplicationBase/ApplicationBase.dpk create mode 100644 Source/ApplicationBase/ApplicationBase.dproj create mode 100644 Source/ApplicationBase/ApplicationBase.rc create mode 100644 Source/ApplicationBase/ApplicationBase.res create mode 100644 Source/ApplicationBase/Usuarios/Controller/View/uIEditorLogin.pas create mode 100644 Source/ApplicationBase/Usuarios/Controller/View/uIEditorPerfilUsuario.pas create mode 100644 Source/ApplicationBase/Usuarios/Controller/View/uIEditorPerfilesUsuario.pas create mode 100644 Source/ApplicationBase/Usuarios/Controller/View/uIEditorUsuario.pas create mode 100644 Source/ApplicationBase/Usuarios/Controller/View/uIEditorUsuarios.pas create mode 100644 Source/ApplicationBase/Usuarios/Controller/uPerfilesUsuarioController.pas create mode 100644 Source/ApplicationBase/Usuarios/Controller/uUsuariosController.pas create mode 100644 Source/ApplicationBase/Usuarios/Data/uDataModuleUsuarios.dfm create mode 100644 Source/ApplicationBase/Usuarios/Data/uDataModuleUsuarios.pas create mode 100644 Source/ApplicationBase/Usuarios/Data/uUCROConn.pas create mode 100644 Source/ApplicationBase/Usuarios/Model/Data/uIDataModuleUsuarios.pas create mode 100644 Source/ApplicationBase/Usuarios/Model/schUsuariosClient_Intf.pas create mode 100644 Source/ApplicationBase/Usuarios/Model/schUsuariosServer_Intf.pas create mode 100644 Source/ApplicationBase/Usuarios/Model/uBizUsuarios.pas create mode 100644 Source/ApplicationBase/Usuarios/Servidor/srvUsuarios_Impl.dfm create mode 100644 Source/ApplicationBase/Usuarios/Servidor/srvUsuarios_Impl.pas create mode 100644 Source/ApplicationBase/Usuarios/Usuarios.cfg create mode 100644 Source/ApplicationBase/Usuarios/Usuarios.dof create mode 100644 Source/ApplicationBase/Usuarios/Usuarios.dpk create mode 100644 Source/ApplicationBase/Usuarios/Usuarios.dproj create mode 100644 Source/ApplicationBase/Usuarios/Usuarios.drc create mode 100644 Source/ApplicationBase/Usuarios/Usuarios.rc create mode 100644 Source/ApplicationBase/Usuarios/Usuarios.res create mode 100644 Source/ApplicationBase/Usuarios/Views/uEditorCambiarPassword.dfm create mode 100644 Source/ApplicationBase/Usuarios/Views/uEditorCambiarPassword.pas create mode 100644 Source/ApplicationBase/Usuarios/Views/uEditorLogin.dfm create mode 100644 Source/ApplicationBase/Usuarios/Views/uEditorLogin.pas create mode 100644 Source/ApplicationBase/Usuarios/Views/uEditorPerfilUsuario.dfm create mode 100644 Source/ApplicationBase/Usuarios/Views/uEditorPerfilUsuario.pas create mode 100644 Source/ApplicationBase/Usuarios/Views/uEditorPerfilesUsuario.dfm create mode 100644 Source/ApplicationBase/Usuarios/Views/uEditorPerfilesUsuario.pas create mode 100644 Source/ApplicationBase/Usuarios/Views/uEditorUsuario.dfm create mode 100644 Source/ApplicationBase/Usuarios/Views/uEditorUsuario.pas create mode 100644 Source/ApplicationBase/Usuarios/Views/uEditorUsuarios.dfm create mode 100644 Source/ApplicationBase/Usuarios/Views/uEditorUsuarios.pas create mode 100644 Source/ApplicationBase/Usuarios/Views/uUsuario.dfm create mode 100644 Source/ApplicationBase/Usuarios/Views/uUsuario.pas create mode 100644 Source/ApplicationBase/Usuarios/Views/uUsuarios.dfm create mode 100644 Source/ApplicationBase/Usuarios/Views/uUsuarios.pas create mode 100644 Source/ApplicationBase/Usuarios/Views/uUsuariosViewRegister.pas create mode 100644 Source/ApplicationBase/Usuarios/Views/uViewPerfilUsuario.dfm create mode 100644 Source/ApplicationBase/Usuarios/Views/uViewPerfilUsuario.pas create mode 100644 Source/ApplicationBase/Usuarios/Views/uViewPerfilesUsuario.dfm create mode 100644 Source/ApplicationBase/Usuarios/Views/uViewPerfilesUsuario.pas create mode 100644 Source/ApplicationBase/Usuarios/Views/uViewUsuario.dfm create mode 100644 Source/ApplicationBase/Usuarios/Views/uViewUsuario.pas create mode 100644 Source/ApplicationBase/Usuarios/Views/uViewUsuarios.dfm create mode 100644 Source/ApplicationBase/Usuarios/Views/uViewUsuarios.pas create mode 100644 Source/ApplicationBase/uAdminPV_App.pas delete mode 100644 Source/Base/BaseD10.identcache create mode 100644 Source/Base/ClassRegistry/uClassRegistryUtils.pas create mode 100644 Source/Base/ClassRegistry/uEditorRegistryUtils.pas create mode 100644 Source/Base/ClassRegistry/uInformeRegistryUtils.pas create mode 100644 Source/Base/ClassRegistry/uViewRegistryUtils.pas create mode 100644 Source/Base/Controladores/uControllerBase.pas create mode 100644 Source/Base/Utiles/uAppInfoUtils.pas rename Source/Base/{ => Utiles}/uDBSelectionList.pas (100%) rename Source/Base/{ => Utiles}/uDataTableUtils.pas (54%) rename Source/{ControlesBase/Cliente => Base/Utiles}/uDateUtils.pas (65%) create mode 100644 Source/Base/Utiles/uDialogUtils.pas rename Source/Base/{ => Utiles}/uEditorUtils.pas (100%) rename Source/Base/{ => Utiles}/uGridUtils.pas (100%) rename Source/Base/{ => Utiles}/uIntegerList.pas (100%) rename Source/Base/{ => Utiles}/uSysFunc.pas (100%) create mode 100644 Source/Base/uDMBase.dfm create mode 100644 Source/Base/uDMBase.pas delete mode 100644 Source/Base/uEditorDBBase.ddp delete mode 100644 Source/Base/uEditorDBItem.ddp delete mode 100644 Source/Base/uViewGridBase.ddp delete mode 100644 Source/CargaEDI/CargaEDI.identcache delete mode 100644 Source/CargaEDI/uCargaEDI.ddp delete mode 100644 Source/Cliente/AdminPV.identcache create mode 100644 Source/Cliente/Copia de uPantallaPrincipal.dfm create mode 100644 Source/Cliente/Copia de uPantallaPrincipal.pas create mode 100644 Source/Cliente/Utiles/uClienteUtils.pas create mode 100644 Source/Cliente/Utiles/uMenuUtils.pas create mode 100644 Source/Cliente/Utiles/uNavPaneUtils.pas create mode 100644 Source/Cliente/uBootStrap.pas create mode 100644 Source/Cliente/uMainMenuController.pas delete mode 100644 Source/Cliente/uMenuUtils.pas create mode 100644 Source/Cliente/uNavPaneController.pas delete mode 100644 Source/Cliente/uPantallaPrincipal.ddp delete mode 100644 Source/Cliente/uSplash.ddp delete mode 100644 Source/ControlesBase/Cliente/uDataModuleControles.ddp delete mode 100644 Source/ControlesBase/Cliente/uEditorControlBase.ddp delete mode 100644 Source/ControlesBase/Cliente/uViewAgrupaciones.ddp delete mode 100644 Source/ControlesBase/Cliente/uViewColumnas.ddp delete mode 100644 Source/ControlesBase/Cliente/uViewControlBase.ddp delete mode 100644 Source/ControlesBase/Cliente/uViewControlGrid.ddp delete mode 100644 Source/ControlesBase/Cliente/uViewFiltros.ddp delete mode 100644 Source/ControlesBase/Cliente/uViewParametrosControlGrid.ddp delete mode 100644 Source/ControlesBase/Cliente/uViewPeriodoFechas.ddp delete mode 100644 Source/ControlesBase/Cliente/uViewSumarios.ddp delete mode 100644 Source/ControlesBase/ControlesBaseD10.identcache delete mode 100644 Source/ControlesBase/Servidor/srvControles_Impl.ddp delete mode 100644 Source/Modulos/Devoluciones/Cliente/Devoluciones.identcache delete mode 100644 Source/Modulos/Devoluciones/Cliente/uDataModuleDevoluciones.ddp delete mode 100644 Source/Modulos/Devoluciones/Cliente/uEditorAjustarDevoluciones.ddp delete mode 100644 Source/Modulos/Devoluciones/Cliente/uEditorListaDevoluciones.ddp delete mode 100644 Source/Modulos/Devoluciones/Cliente/uPluginControllerDevoluciones.ddp delete mode 100644 Source/Modulos/Devoluciones/Cliente/uViewListaDevoluciones.ddp delete mode 100644 Source/Modulos/Devoluciones/Servidor/srvDevoluciones_Impl.ddp delete mode 100644 Source/Modulos/FicherosEDI/Cliente/FicherosEDI.identcache delete mode 100644 Source/Modulos/FicherosEDI/Cliente/uAsistenteCargaFicheros.ddp delete mode 100644 Source/Modulos/FicherosEDI/Cliente/uDataModuleFicherosEDI.ddp delete mode 100644 Source/Modulos/FicherosEDI/Cliente/uEditorHistorialCargasEDI.ddp delete mode 100644 Source/Modulos/FicherosEDI/Cliente/uPluginControllerFicherosEDI.ddp delete mode 100644 Source/Modulos/FicherosEDI/Cliente/uViewHistorialCargasEDI.ddp delete mode 100644 Source/Modulos/Parametros/Cliente/Parametros.identcache delete mode 100644 Source/Modulos/Parametros/Cliente/uDataModuleParametros.ddp delete mode 100644 Source/Modulos/Parametros/Cliente/uViewParametrosCentro.ddp delete mode 100644 Source/Modulos/Parametros/Cliente/uViewParametrosColeccion.ddp delete mode 100644 Source/Modulos/Parametros/Servidor/srvParametros_Impl.ddp delete mode 100644 Source/Modulos/Recepciones/Cliente/Recepciones.identcache delete mode 100644 Source/Modulos/Recepciones/Cliente/uEditorAjustarRecepciones.ddp delete mode 100644 Source/Modulos/Recepciones/Cliente/uEditorListaRecepciones.ddp delete mode 100644 Source/Modulos/Recepciones/Cliente/uEditorListaRecepcionesAlbaran.ddp delete mode 100644 Source/Modulos/Recepciones/Cliente/uPluginControllerRecepciones.ddp delete mode 100644 Source/Modulos/Recepciones/Cliente/uViewListaRecepciones.ddp delete mode 100644 Source/Modulos/Recepciones/Cliente/uViewListaRecepcionesAlbaran.ddp delete mode 100644 Source/Modulos/ReferenciaGenerica/Cliente/ReferenciaGenerica.identcache delete mode 100644 Source/Modulos/ReferenciaGenerica/Cliente/uDataModuleReferenciaGenerica.ddp delete mode 100644 Source/Modulos/ReferenciaGenerica/Cliente/uEditorCambioReferenciaGenerica.ddp delete mode 100644 Source/Modulos/ReferenciaGenerica/Cliente/uEditorListaReferenciaGenerica.ddp delete mode 100644 Source/Modulos/ReferenciaGenerica/Cliente/uPluginControllerReferenciaGenerica.ddp delete mode 100644 Source/Modulos/ReferenciaGenerica/Cliente/uViewListaReferenciaGenerica.ddp delete mode 100644 Source/Modulos/ReferenciaGenerica/Servidor/srvReferenciaGenerica_Impl.ddp delete mode 100644 Source/Modulos/Stock/Cliente/Stock.identcache delete mode 100644 Source/Modulos/Stock/Cliente/uDataModuleStock.ddp delete mode 100644 Source/Modulos/Stock/Cliente/uEditorControlStockEDI.ddp delete mode 100644 Source/Modulos/Stock/Cliente/uEditorControlStockVARELA.ddp delete mode 100644 Source/Modulos/Stock/Cliente/uViewControGridStockVARELA.ddp delete mode 100644 Source/Modulos/Stock/Servidor/srvStock_Impl.ddp delete mode 100644 Source/Modulos/Traspasos/Cliente/uDataModuleTraspasos.ddp delete mode 100644 Source/Modulos/Traspasos/Cliente/uEditorAjustarTraspasos.ddp delete mode 100644 Source/Modulos/Traspasos/Cliente/uEditorListaTraspasos.ddp delete mode 100644 Source/Modulos/Traspasos/Cliente/uPluginControllerTraspasos.ddp delete mode 100644 Source/Modulos/Traspasos/Cliente/uViewListaTraspasos.ddp delete mode 100644 Source/Modulos/Traspasos/Servidor/srvTraspasos_Impl.ddp delete mode 100644 Source/Modulos/VentasProceso/Cliente/VentasProceso.identcache delete mode 100644 Source/Modulos/VentasProceso/Cliente/uDataModuleVentasProceso.ddp delete mode 100644 Source/Modulos/VentasProceso/Cliente/uEditorControlVentaProceso.ddp delete mode 100644 Source/Modulos/VentasProceso/Cliente/uPluginControllerVentasProceso.ddp delete mode 100644 Source/Modulos/VentasProceso/Cliente/uViewControGridlVentaProceso.ddp delete mode 100644 Source/Modulos/VentasProceso/Cliente/uViewControlVentaProceso.ddp delete mode 100644 Source/Modulos/VentasProceso/Servidor/srvVentasEnProceso_Impl.ddp delete mode 100644 Source/Modulos/VentasTerminadas/Cliente/VentasTerminadas.identcache delete mode 100644 Source/Modulos/VentasTerminadas/Cliente/uDataModuleVentasTerminadas.ddp delete mode 100644 Source/Modulos/VentasTerminadas/Cliente/uEditorControlResumenVentas.ddp delete mode 100644 Source/Modulos/VentasTerminadas/Cliente/uPluginControllerVentasTerminadas.ddp delete mode 100644 Source/Modulos/VentasTerminadas/Cliente/uViewControGridResumenVentas.ddp delete mode 100644 Source/Modulos/VentasTerminadas/Cliente/uViewControGridlVentasTerminadas.ddp delete mode 100644 Source/Modulos/VentasTerminadas/Cliente/uViewControlVentasTerminadas.ddp delete mode 100644 Source/Modulos/VentasTerminadas/Servidor/srvVentasTerminadas_Impl.ddp create mode 100644 Source/Servicios/VARELA_Intf.pas create mode 100644 Source/Servicios/VARELA_Invk.pas delete mode 100644 Source/Servidor/Configuracion/uConexionBD.ddp delete mode 100644 Source/Servidor/Configuracion/uConfFicherosEDI.ddp delete mode 100644 Source/Servidor/Configuracion/uConfGeneral.ddp delete mode 100644 Source/Servidor/Configuracion/uConfiguracion.ddp create mode 100644 Source/Servidor/EDI/EDI_Inventary_Impl.dfm create mode 100644 Source/Servidor/EDI/EDI_Inventary_Impl.pas delete mode 100644 Source/Servidor/EDI/EDI_Log_Impl.ddp create mode 100644 Source/Servidor/EDI/EDI_Sales_Impl.dfm create mode 100644 Source/Servidor/EDI/EDI_Sales_Impl.pas create mode 100644 Source/Servidor/Login_Impl.dfm create mode 100644 Source/Servidor/Login_Impl.pas delete mode 100644 Source/Servidor/Services/EDI_Inventary/EDI_Inventary_Impl.ddp delete mode 100644 Source/Servidor/Services/EDI_Inventary/uDataModuleEDI_Inventary.ddp delete mode 100644 Source/Servidor/Services/EDI_Sales/EDI_Sales_Impl.ddp delete mode 100644 Source/Servidor/Services/EDI_Sales/uDataModuleEDI_Sales.ddp delete mode 100644 Source/Servidor/Services/Login/srvLogin_Impl.ddp delete mode 100644 Source/Servidor/Services/TransferenciaFicheros/srvTransfereciaFicheros_Impl.ddp create mode 100644 Source/Servidor/Utiles/EDI_Utils.pas create mode 100644 Source/Servidor/Utiles/RegExpr.pas create mode 100644 Source/Servidor/Utiles/uSchemaUtilsServer.pas delete mode 100644 Source/Servidor/fServerForm.ddp delete mode 100644 Source/Servidor/srvInformes_Impl.ddp delete mode 100644 Source/Servidor/uAcercaDe.ddp delete mode 100644 Source/Servidor/uDataModuleServer.ddp diff --git a/Build/Build.fbp5 b/Build/Build.fbp5 index 9ba8727..753596e 100644 --- a/Build/Build.fbp5 +++ b/Build/Build.fbp5 @@ -531,149 +531,6 @@ source_path 1000 False - - Servidor - 0 - - Servidor - True - True - False - True - False - - 0 - False - 0 - 1000 - False - - - - 0 - - True - False - False - True - True - 0 - 1252 - 12 - Release - False - - - True - True - - False - %project_path%\Resources\Iconos\Servidor.ico - False - True - True - True - False - False - False - False - False - False - False - True - 3082 - - 2 - 0 - 0 - False - 0 - %source_path%\Servidor\AdminPV_Server.dpr - True - 0 - - - rcBorland - 1000 - %source_path%\Servidor\ - False - True - False - False - [usPackages,usCompiler,usLinker,usVersionInfo] - False - True - - - - False - False - False - False - False - True - False - False - - - - - False - - False - - False - - False - True - False - False - True - 4194304 - False - False - False - True - %library_path% - 0 - False - 3 - 1048576 - 16384 - - True - True - %output_path%\Servidor - False - - False - fa8 - False - False - .\ - True - True - True - False - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - .\ - False - False - True - - - # 16711680 @@ -739,7 +596,7 @@ CompileDate=miércoles, 12 de septiembre de 2007 18:52 False 0 - False + True 0 1000 False @@ -1017,7 +874,7 @@ Comments= False False - False + True True False False @@ -1027,7 +884,7 @@ Comments= False False False - 3081 + 3082 1 0 @@ -1049,7 +906,16 @@ Comments= [usPackages,usCompiler,usLinker,usVersionInfo] False False - @@ -1110,7 +976,7 @@ Comments= - + 0 @@ -1124,7 +990,7 @@ Comments= 12 Debug False - + True True @@ -1150,9 +1016,9 @@ Comments= 0 False 0 - %source_path%\Usuarios\Usuarios.dpk + %source_path%\ApplicationBase\ApplicationBase.dpk True - 3 + 0 rcBorland @@ -1167,7 +1033,7 @@ Comments= False 4194304 False False - False + True True %library_path% 0 True - 3 + 0 1048576 16384 True - True + False %output_path%\Cliente False @@ -1234,122 +1100,6 @@ Comments= True - - - - 0 - - True - False - False - True - True - 0 - 1252 - 12 - Debug - False - - - True - True - - False - - False - False - False - True - False - False - False - False - False - False - False - False - 3081 - - 1 - 0 - 0 - False - 0 - %source_path%\Configuracion\Configuracion.dpk - True - 0 - - - rcBorland - 1000 - - False - False - False - False - [usPackages,usCompiler,usLinker,usVersionInfo] - False - False - - - - False - False - False - False - False - True - False - False - %package_path% - - - - False - %modules_dcp_path% - True - - True - - False - True - False - False - True - 4194304 - False - False - False - True - %library_path% - 0 - True - 3 - 1048576 - 16384 - - True - True - %output_path%\Cliente - False - - False - fa8 - True - False - - True - True - False - False - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - False - True - - Módulos @@ -1363,7 +1113,7 @@ Comments= False 0 - False + True 0 1000 False @@ -1391,7 +1141,7 @@ Comments= False False - False + True True False False @@ -1401,7 +1151,7 @@ Comments= False False False - 3081 + 3082 1 0 @@ -1410,7 +1160,7 @@ Comments= 0 %source_path%\Modulos\FicherosEDI\Cliente\FicherosEDI.dpk True - 0 + 3 rcBorland @@ -1423,7 +1173,16 @@ Comments= [usPackages,usCompiler,usLinker,usVersionInfo] False False - @@ -1632,7 +1391,7 @@ Comments= False False - False + True True False False @@ -1642,7 +1401,7 @@ Comments= False False False - 3081 + 3082 1 0 @@ -1651,7 +1410,7 @@ Comments= 0 %source_path%\Modulos\VentasProceso\Cliente\VentasProceso.dpk True - 0 + 3 rcBorland @@ -1664,7 +1423,16 @@ Comments= [usPackages,usCompiler,usLinker,usVersionInfo] False False - @@ -1748,7 +1516,7 @@ Comments= False False - False + True True False False @@ -1758,7 +1526,7 @@ Comments= False False False - 3081 + 3082 1 0 @@ -1767,7 +1535,7 @@ Comments= 0 %source_path%\Modulos\ReferenciaGenerica\Cliente\ReferenciaGenerica.dpk True - 0 + 3 rcBorland @@ -1780,7 +1548,16 @@ Comments= [usPackages,usCompiler,usLinker,usVersionInfo] False False - @@ -1864,7 +1641,7 @@ Comments= False False - False + True True False False @@ -1874,7 +1651,7 @@ Comments= False False False - 3081 + 3082 1 0 @@ -1883,7 +1660,7 @@ Comments= 0 %source_path%\Modulos\Recepciones\Cliente\Recepciones.dpk True - 0 + 3 rcBorland @@ -1896,7 +1673,16 @@ Comments= [usPackages,usCompiler,usLinker,usVersionInfo] False False - @@ -1980,7 +1766,7 @@ Comments= False False - False + True True False False @@ -1990,7 +1776,7 @@ Comments= False False False - 3081 + 3082 1 0 @@ -2012,7 +1798,16 @@ Comments= [usPackages,usCompiler,usLinker,usVersionInfo] False False - @@ -2096,7 +1891,7 @@ Comments= False False - False + True True False False @@ -2106,7 +1901,7 @@ Comments= False False False - 3081 + 3082 1 0 @@ -2115,7 +1910,7 @@ Comments= 0 %source_path%\Modulos\Traspasos\Cliente\Traspasos.dpk True - 0 + 3 rcBorland @@ -2128,7 +1923,16 @@ Comments= [usPackages,usCompiler,usLinker,usVersionInfo] False False - @@ -2212,7 +2016,7 @@ Comments= False False - False + True True False False @@ -2222,7 +2026,7 @@ Comments= False False False - 3081 + 3082 1 0 @@ -2231,7 +2035,7 @@ Comments= 0 %source_path%\Modulos\Stock\Cliente\Stock.dpk True - 0 + 2 rcBorland @@ -2244,7 +2048,16 @@ Comments= [usPackages,usCompiler,usLinker,usVersionInfo] False False - @@ -2347,7 +2160,7 @@ Comments= %project_path%\Resources\Iconos\Cliente.ico False True - False + True True False False @@ -2357,16 +2170,16 @@ Comments= False False False - 3081 + 3082 - 1 + 2 0 - 0 + 1 False 0 %source_path%\Cliente\AdminPV.dpr True - 0 + 1 rcBorland @@ -2379,7 +2192,17 @@ Comments= [usCompiler,usLinker,usVersionInfo] True True - @@ -2414,7 +2237,7 @@ Comments= %library_path%;%modules_dcp_path% 0 True - 0 + 3 1048576 16384 @@ -2422,7 +2245,7 @@ Comments= True %output_path%\Cliente False - BaseD10;Configuracion;ControlesBaseD10;Usuarios;FicherosEDI;VentasProceso;VentasTerminadas;ReferenciaGenerica + BaseD10;ControlesBaseD10;ApplicationBase;FicherosEDI;VentasProceso;VentasTerminadas;ReferenciaGenerica False fa8 True @@ -2479,12 +2302,12 @@ Comments= 2 0 - 0 + 1 False 0 %source_path%\CargaEDI\CargaEDI.dpr True - 0 + 1 rcBorland @@ -2499,7 +2322,7 @@ Comments= False True %output_path%\Cliente False - BaseD10;Configuracion;FicherosEDI + BaseD10;FicherosEDI False fa8 True @@ -2567,6 +2390,149 @@ Comments= + + Servidor + 0 + + Servidor + True + True + False + True + False + + 0 + False + 0 + 1000 + False + + + + 0 + + True + False + False + True + True + 0 + 1252 + 12 + Release + False + + + True + True + + False + %project_path%\Resources\Iconos\Servidor.ico + False + True + True + True + False + False + False + False + False + False + False + True + 3082 + + 2 + 0 + 1 + False + 0 + %source_path%\Servidor\AdminPV_Server.dpr + True + 1 + + + rcBorland + 1000 + %source_path%\Servidor\ + False + True + False + False + [usPackages,usCompiler,usLinker,usVersionInfo] + False + True + + + + False + False + False + False + False + True + False + False + + + + + False + + False + + False + + False + True + False + False + True + 4194304 + False + False + False + True + %library_path% + 0 + False + 3 + 1048576 + 16384 + + True + True + %output_path%\Servidor + False + + False + fa8 + False + False + .\ + True + True + True + False + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + .\ + False + False + True + + + @@ -2581,7 +2547,7 @@ Comments= False 0 - False + True 0 1000 False @@ -2834,7 +2800,7 @@ Comments= vtProject - %DELPHI2007DIR%\Lib\Indy10;%project_path%\Lib;%project_path%\Lib\RemObjects\RemObjects_SDK;%project_path%\Lib\RemObjects\Data_Abstract;%project_path%\Lib\CCPack;%project_path%\Lib\CFPack;%project_path%\Lib\GUISDK;%project_path%\Lib\PluginSDK;%project_path%\Lib\DevExpressVCL;%project_path%\Lib\FastReport3;%project_path%\Lib\JCL;%project_path%\Lib\JVCL;%project_path%\Lib\PngComponents;%project_path%\Lib\cxIntl5;%project_path%\Lib\cxIntlPrintSys3;%project_path%\Lib\TB2k+TBX;%project_path%\Lib\Mustangpeak\MPCommonLib;%project_path%\Lib\Mustangpeak\EasyListview;%project_path%\Lib\SDAC; + %DELPHI2007DIR%\Lib\Indy10;%project_path%\Lib;%project_path%\Lib\RemObjects\RemObjects_SDK;%project_path%\Lib\RemObjects\Data_Abstract;%project_path%\Lib\CCPack;%project_path%\Lib\CFPack;%project_path%\Lib\GUISDK;%project_path%\Lib\PluginSDK;%project_path%\Lib\DevExpressVCL;%project_path%\Lib\FastReport3;%project_path%\Lib\JCL;%project_path%\Lib\JVCL;%project_path%\Lib\PngComponents;%project_path%\Lib\cxIntl5;%project_path%\Lib\cxIntlPrintSys3;%project_path%\Lib\TB2k+TBX;%project_path%\Lib\Mustangpeak\MPCommonLib;%project_path%\Lib\Mustangpeak\EasyListview;%project_path%\Lib\JSDialog;%project_path%\Lib\UserControl True False False diff --git a/Database/1 - tablas.sql b/Database/1 - tablas.sql index ce96e0f..a0ba77f 100644 --- a/Database/1 - tablas.sql +++ b/Database/1 - tablas.sql @@ -873,6 +873,118 @@ ON [RDX_VENTASEDI] TO [public] GO + +/*--------------- SQL ---------------*/ + +IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[RDX_USUARIOS]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1) + DROP TABLE [RDX_USUARIOS] +GO + +CREATE TABLE [RDX_USUARIOS]( + [ID] int NOT NULL, + [USERNAME] varchar(30) NULL, + [LOGIN] varchar(30) NULL, + [PASS] varchar(255) NULL, + [PASSEXPIRED] datetime NULL, + [BLOQUEADO] smallint NULL, + [EMAIL] varchar(150) NULL, + [USERDAYSSUN] int NULL, + [PRIVILEGED] int NULL, + [TIPO] char(1) NULL, + [ID_PERFIL] int NULL, + [CHECKSUM] varchar(250) NULL +) ON [PRIMARY] +GO + +ALTER TABLE [RDX_USUARIOS] +ADD CONSTRAINT [RDX_USUARIOS_PK] +PRIMARY KEY CLUSTERED ([ID]) +ON [PRIMARY] +GO + + +IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[RDX_USUARIOS_EVENTOS]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1) + DROP TABLE [RDX_USUARIOS_EVENTOS] +GO + +CREATE TABLE [RDX_USUARIOS_EVENTOS]( + [APLICACION] VARCHAR(250), + [ID_USUARIO] INT, + [FECHA] CHAR(10), + [HORA] CHAR(8), + [FORM] VARCHAR(250), + [TITULO_FORM] VARCHAR(100), + [EVENTO] VARCHAR(50), + [NOTAS] TEXT, + [TNAME] VARCHAR(20) +) ON [PRIMARY] +GO + + +IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[RDX_USUARIOS_LOGON]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1) + DROP TABLE [RDX_USUARIOS_LOGON] +GO + +CREATE TABLE [RDX_USUARIOS_LOGON] ( + [LOGONID] CHAR(38) NOT NULL, + [ID_USUARIO] INT, + [APLICACION] VARCHAR(50), + [EQUIPO] VARCHAR(50), + [DATA] VARCHAR(14) +) +GO + +ALTER TABLE [RDX_USUARIOS_LOGON] +ADD CONSTRAINT [RDX_USUARIOS_LOGON_PK] +PRIMARY KEY CLUSTERED ([LOGONID]) +ON [PRIMARY] +GO + + + +IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[RDX_PERMISOS]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1) + DROP TABLE [RDX_PERMISOS] +GO + + +CREATE TABLE [RDX_PERMISOS] ( + [ID] INT NOT NULL, + [ID_USUARIO] INT, + [MODULO] VARCHAR(50), + [NOMBRECOMP] VARCHAR(50), + [CHECKSUM] VARCHAR(250) +) +GO + +ALTER TABLE [RDX_PERMISOS] +ADD CONSTRAINT [RDX_PERMISOS_PK] +PRIMARY KEY CLUSTERED ([ID]) +ON [PRIMARY] +GO + + + +IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[RDX_PERMISOSEX]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1) + DROP TABLE [RDX_PERMISOSEX] +GO + + +CREATE TABLE [RDX_PERMISOSEX] ( + [ID] INT NOT NULL, + [ID_USUARIO] INT, + [MODULO] VARCHAR(50), + [NOMBRECOMP] VARCHAR(50), + [NOMBREFORM] VARCHAR(50), + [CHECKSUM] VARCHAR(250) +) +GO + +ALTER TABLE [RDX_PERMISOSEX] +ADD CONSTRAINT [RDX_PERMISOSEX_PK] +PRIMARY KEY CLUSTERED ([ID]) +ON [PRIMARY] +GO + /* EOF */ diff --git a/Source/AdminPVGroup.groupproj b/Source/AdminPVGroup.groupproj index 5ba9cae..1910b26 100644 --- a/Source/AdminPVGroup.groupproj +++ b/Source/AdminPVGroup.groupproj @@ -4,10 +4,10 @@ + - @@ -19,7 +19,6 @@ - Default.Personality @@ -27,15 +26,6 @@ - - - - - - - - - @@ -63,23 +53,14 @@ - - + + - - + + - - - - - - - - - - - + + @@ -171,14 +152,23 @@ + + + + + + + + + - + - + - + \ No newline at end of file diff --git a/Source/AdminPVGroup_prjgroup.tvsconfig b/Source/AdminPVGroup_prjgroup.tvsconfig new file mode 100644 index 0000000..c8f2834 --- /dev/null +++ b/Source/AdminPVGroup_prjgroup.tvsconfig @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/Source/ApplicationBase/ApplicationBase.bdsproj b/Source/ApplicationBase/ApplicationBase.bdsproj new file mode 100644 index 0000000..d4951b0 --- /dev/null +++ b/Source/ApplicationBase/ApplicationBase.bdsproj @@ -0,0 +1,697 @@ + + + + + + + + + + + + ApplicationBase.dpk + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + + + + 0 + 0 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + .\ + ..\..\..\..\Output\Debug\Cliente + ..\Lib + ..\Lib + + + + False + + + + + + False + + + True + False + + + False + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 3082 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + + + + + + + + + + + + + + + + + + + + + VCL for the Web Design Package for CodeGear RAD Studio + CodeGear WebSnap Components + CodeGear SOAP Components + Microsoft Office XP Sample Automation Server Wrapper Components + Microsoft Office 2000 Sample Automation Server Wrapper Components + CodeGear C++Builder Office 2000 Servers Package + CodeGear C++Builder Office XP Servers Package + + + + + + diff --git a/Source/ApplicationBase/ApplicationBase.cfg b/Source/ApplicationBase/ApplicationBase.cfg new file mode 100644 index 0000000..7b0053c --- /dev/null +++ b/Source/ApplicationBase/ApplicationBase.cfg @@ -0,0 +1,40 @@ +-$A8 +-$B- +-$C+ +-$D+ +-$E- +-$F- +-$G+ +-$H+ +-$I+ +-$J- +-$K- +-$L+ +-$M- +-$N+ +-$O+ +-$P+ +-$Q- +-$R- +-$S- +-$T- +-$U- +-$V+ +-$W- +-$X+ +-$YD +-$Z1 +-cg +-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +-H+ +-W+ +-M +-$M16384,1048576 +-K$00400000 +-N0".\" +-LE"..\..\..\..\Output\Debug\Cliente" +-LN"..\Lib" +-U"..\Lib" +-O"..\Lib" +-I"..\Lib" +-R"..\Lib" diff --git a/Source/ApplicationBase/ApplicationBase.dpk b/Source/ApplicationBase/ApplicationBase.dpk new file mode 100644 index 0000000..ae542ea --- /dev/null +++ b/Source/ApplicationBase/ApplicationBase.dpk @@ -0,0 +1,63 @@ +package ApplicationBase; + +{$R *.res} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION OFF} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES ON} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST OFF} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$IMPLICITBUILD OFF} +{$DEFINE DEBUG} + +requires + rtl, + vcl, + dbrtl, + PLuginSDK_D10R, + BaseD10, + pckMD5, + pckUserControl_RT; + +contains + uAdminPV_App in 'uAdminPV_App.pas', + uIDataModuleUsuarios in 'Usuarios\Model\Data\uIDataModuleUsuarios.pas', + uDataModuleUsuarios in 'Usuarios\Data\uDataModuleUsuarios.pas' {DataModuleUsuarios}, + uUCROConn in 'Usuarios\Data\uUCROConn.pas', + uUsuariosController in 'Usuarios\Controller\uUsuariosController.pas', + uBizUsuarios in 'Usuarios\Model\uBizUsuarios.pas', + uIEditorLogin in 'Usuarios\Controller\View\uIEditorLogin.pas', + uEditorLogin in 'Usuarios\Views\uEditorLogin.pas' {fEditorLogin}, + uUsuariosViewRegister in 'Usuarios\Views\uUsuariosViewRegister.pas', + uViewPerfilesUsuario in 'Usuarios\Views\uViewPerfilesUsuario.pas' {frViewPerfilesUsuario: TFrame}, + uEditorPerfilesUsuario in 'Usuarios\Views\uEditorPerfilesUsuario.pas' {fEditorPerfilesUsuario}, + uIEditorUsuarios in 'Usuarios\Controller\View\uIEditorUsuarios.pas', + uEditorPerfilUsuario in 'Usuarios\Views\uEditorPerfilUsuario.pas' {fEditorPerfilUsuario}, + uIEditorUsuario in 'Usuarios\Controller\View\uIEditorUsuario.pas', + uViewPerfilUsuario in 'Usuarios\Views\uViewPerfilUsuario.pas' {frViewPerfilUsuario: TFrame}, + uIEditorPerfilesUsuario in 'Usuarios\Controller\View\uIEditorPerfilesUsuario.pas', + uIEditorPerfilUsuario in 'Usuarios\Controller\View\uIEditorPerfilUsuario.pas', + uEditorUsuarios in 'Usuarios\Views\uEditorUsuarios.pas' {fEditorUsuarios}, + uViewUsuarios in 'Usuarios\Views\uViewUsuarios.pas' {frViewUsuarios: TFrame}, + uEditorUsuario in 'Usuarios\Views\uEditorUsuario.pas' {fEditorUsuario: TFrame}, + uViewUsuario in 'Usuarios\Views\uViewUsuario.pas' {frViewUsuario: TFrame}, + uEditorCambiarPassword in 'Usuarios\Views\uEditorCambiarPassword.pas' {fEditorCambiarPassword}, + schUsuariosClient_Intf in 'Usuarios\Model\schUsuariosClient_Intf.pas', + schUsuariosServer_Intf in 'Usuarios\Model\schUsuariosServer_Intf.pas'; + +end. diff --git a/Source/ApplicationBase/ApplicationBase.dproj b/Source/ApplicationBase/ApplicationBase.dproj new file mode 100644 index 0000000..67b32d0 --- /dev/null +++ b/Source/ApplicationBase/ApplicationBase.dproj @@ -0,0 +1,625 @@ + + + + {14a25028-ec1a-430c-ade3-13c264e9bac2} + ApplicationBase.dpk + Debug + AnyCPU + DCC32 + ..\..\Output\Debug\Cliente\ApplicationBase.bpl + + + 7.0 + False + False + 0 + .\ + .\ + .\ + ..\..\Output\Release\Cliente + ..\Lib + ..\Lib + ..\Lib + ..\Lib + ..\Lib + RELEASE + + + 7.0 + .\ + .\ + .\ + ..\..\Output\Debug\Cliente + ..\Lib + $(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10;T:\COMPON~1\jcl\lib\d11\debug;$(BDSCOMMONDIR)\Dcp;..\Lib + $(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10;T:\COMPON~1\jcl\lib\d11\debug;$(BDSCOMMONDIR)\Dcp;..\Lib + $(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10;T:\COMPON~1\jcl\lib\d11\debug;$(BDSCOMMONDIR)\Dcp;..\Lib + $(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10;T:\COMPON~1\jcl\lib\d11\debug;$(BDSCOMMONDIR)\Dcp;..\Lib + DEBUG + False + True + True + True + + + Delphi.Personality + Package + +FalseTrueFalseFalseFalseFalseTrueFalse1000FalseFalseFalseFalseFalse308212521.0.0.01.0.0.0 + + + + + + + + VCL for the Web Design Package for CodeGear RAD Studio + CodeGear WebSnap Components + CodeGear SOAP Components + Microsoft Office XP Sample Automation Server Wrapper Components + Microsoft Office 2000 Sample Automation Server Wrapper Components + CodeGear C++Builder Office 2000 Servers Package + CodeGear C++Builder Office XP Servers Package + ApplicationBase.dpkFalse + + + + + MainSource + + +
DataModuleEmpresasObj
+
+ + + + + + + + + + + + + + + + + + +
DataModuleUsuarios
+
+ + + + + + + + + + + + + +
fEditorCambiarPassword
+
+ +
fEditorLogin
+
+ +
fEditorPerfilesUsuario
+
+ +
fEditorPerfilUsuario
+
+ +
fEditorUsuario
+ TFrame +
+ +
fEditorUsuarios
+
+ + +
frViewPerfilesUsuario
+ TFrame +
+ +
frViewPerfilUsuario
+ TFrame +
+ +
frViewUsuario
+ TFrame +
+ +
frViewUsuarios
+ TFrame +
+
+
+ diff --git a/Source/ApplicationBase/ApplicationBase.rc b/Source/ApplicationBase/ApplicationBase.rc new file mode 100644 index 0000000..153736a --- /dev/null +++ b/Source/ApplicationBase/ApplicationBase.rc @@ -0,0 +1,22 @@ +1 VERSIONINFO +FILEVERSION 1,0,0,0 +PRODUCTVERSION 1,0,0,0 +FILEFLAGSMASK 0x3FL +FILEFLAGS 0x00L +FILEOS 0x40004L +FILETYPE 0x1L +FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "0C0A04E4" + BEGIN + VALUE "FileVersion", "1.0.0.0\0" + VALUE "ProductVersion", "1.0.0.0\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0C0A, 1252 + END +END diff --git a/Source/ApplicationBase/ApplicationBase.res b/Source/ApplicationBase/ApplicationBase.res new file mode 100644 index 0000000000000000000000000000000000000000..8b251f312bcccec5485024f6fe8d80e1cdf25746 GIT binary patch literal 384 zcmZ9HOA3Ne6ox;+L5PEv(4cV`IIrjdPAV##hV&wc1g%+%X(R2Xc{`~7t6e0Ioa?#% zkMj%AQhz>WYy7LeWAUaqx~Kv?-;(-Hs4-^ATIZOBrid9+-6Ne7&88mi>kUR4lo#jxZ;#*s4zxg9yNlk=H9sqkCD2^cEXKpiTBNfgkKpXJBWWaLt(Qkv@0 w5yv*t82((Wlr2{_+FDoDHKW2QCXvc+s**ul{{$ 0); + + if Result then + begin + APerfil.Edit; + APerfil.ID := ANuevoID; + APerfil.Post; + end; + finally + HideHourglassCursor; + end; + end; +end; + +function TUsuariosController.AnadirUsuario(AUser: IBizUsuario): Boolean; +var + ANuevoID : Integer; +begin + Result := False; + + if not Assigned(AUser) then + raise Exception.Create('No hay usuario asignado (AnadirUsuario)'); + + if FUserControl.ExisteUsuario(AUser.LOGIN) then + begin + MessageDlg(Format(FUserControl.UserSettings.CommonMessages.UsuarioExiste, [AUser.LOGIN]), mtWarning, [mbOK], 0); + Exit; + end; + + if ValidarUsuario(AUser) then + begin + ShowHourglassCursor; + try + ANuevoID := FUserControl.AddUser(AUser.LOGIN, AUser.PASS, AUser.USERNAME, AUser.EMAIL, + AUser.ID_PERFIL, AUser.BLOQUEADO, AUser.USERDAYSSUN, (AUser.PRIVILEGED = 1)); + + Result := (ANuevoID > 0); + + if Result then + begin + AUser.Edit; + AUser.ID := ANuevoID; + AUser.Post; + end; + + { TODO -oLuiz -cUpgrade : Consertar a Senha para poder avisar MD5 } + {if (Assigned(MailUserControl)) and (MailUserControl.AdicionaUsuario.Ativo) then + try + MailUserControl.EnviaEmailAdicionaUsuario(vNome, vLogin, Encrypt(vNovaSenha, EncryptKey), vEmail, IntToStr(vPerfil), EncryptKey); + except + on E: Exception do + Log(E.Message, llMedio); + end;} + finally + HideHourglassCursor; + end; + end; +end; + +procedure TUsuariosController.AsignarDataModule; +begin + FDataModule := TDataModuleUsuarios.Create(Nil); +end; + +function TUsuariosController.BuscarTodosUsuarios: IBizUsuario; +begin + Result := FDataModule.GetUsuarios; + FiltrarEmpresa(Result); +end; + +function TUsuariosController.BuscarUsuario(const AIDUser: Integer): IBizUsuario; +begin + Result := FDataModule.GetUsuario(AIDUser); + FiltrarEmpresa(Result); +end; + +function TUsuariosController.CambiarPassword(const AIDUser: Integer; + const ANewPassword: String): Boolean; +begin + FUserControl.ChangePassword(AIDUser, ANewPassword); + Result := True; +end; + +function TUsuariosController.CambiarPassword(const AIDUser: Integer) : Boolean; +var + AUser : IBizUsuario; + AEditorCambiar : TfEditorCambiarPassword; +begin + AUser := FDataModule.GetUsuario(AIDUser); + if Assigned(AUser) then + begin + AUser.Active := True; + + AEditorCambiar := TfEditorCambiarPassword.Create(NIL); + with AEditorCambiar do + try + Controller := Self; + Usuario := AUser; + CambioObligatorio := False; + if (Length(Trim(AUser.PASS)) = 0) then + EditAtu.Enabled := False; + if (ShowModal = mrOk) then + Result := CambiarPassword(AIDUser, EditNova.Text); + finally + Release; + AUser.Active := False; + AUser := NIL; + end; + end; +end; + +function TUsuariosController.ComprobarUsuario(const User, + Password: String): Boolean; +begin + Result := FUserControl.VerificaLogin(User, Password); + if not Result then + begin + if User = 'admin' then + begin + if not FUserControl.ExisteUsuario('admin') then + begin + FUserControl.AddUser('admin', '1', 'Administrador', 'admin@correo.net', 0, 0 , 30, True); + Result := ComprobarUsuario(User, Password); + end; + end; + end; +end; + +constructor TUsuariosController.Create; +begin + AsignarDataModule; + FCurrentUser := NIL; + FUserControl := TUserControl.Create(nil); + FUsarPasswordsSeguras := False; + InicializarUserControl; +end; + +function TUsuariosController.CreateEditor(const AName: String; const IID: TGUID; out Intf): Boolean; +begin + Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf); +end; + +function TUsuariosController.DarListaPerfilesUsuario: TStringList; +var + APerfilesUsuario: IBizPerfilUsuario; + i : integer; +begin + APerfilesUsuario := FDataModule.GetPerfiles; + APerfilesUsuario.DataTable.Active := True; + + Result := TStringList.Create; + try + with Result do + begin + APerfilesUsuario.DataTable.First; + while not APerfilesUsuario.DataTable.EOF do + begin + Add(Format('%s=%d', [APerfilesUsuario.USERNAME, APerfilesUsuario.ID])); + APerfilesUsuario.DataTable.Next; + end; + end; + finally + APerfilesUsuario := NIL; + end; +end; + +function TUsuariosController.DarListaUsuarios: TStringList; +var + AUsuarios: IBizUsuario; + i : integer; +begin + AUsuarios := FDataModule.GetUsuarios; + AUsuarios.DataTable.Active := True; + + Result := TStringList.Create; + try + with Result do + begin + AUsuarios.DataTable.First; + while not AUsuarios.DataTable.EOF do + begin + Add(Format('%s=%d', [AUsuarios.USERNAME, AUsuarios.ID])); + AUsuarios.DataTable.Next; + end; + end; + finally + AUsuarios := NIL; + end; +end; + +destructor TUsuariosController.Destroy; +begin + FreeAndNIL(FUserControl); + FDataModule := NIL; + + inherited; +end; + +function TUsuariosController.EliminarPerfil( + APerfil: IBizPerfilUsuario): Boolean; +var + CanDelete: Boolean; + ErrorMsg: String; +begin + Result := False; + + if not Assigned(APerfil) then + raise Exception.Create('No hay perfil asignado (EliminarPerfil)'); + + if not APerfil.Active then + APerfil.Active := True; + + if APerfil.DataTable.RecordCount = 0 then + Exit; + + if HayUsuarioConPerfil(APerfil.ID) then + begin + //changed by fduenas: PromptDelete_WindowCaption + if MessageBox(Application.Handle, PChar(Format(FUserControl.UserSettings.UsersProfile.PromptDelete, [APerfil.USERNAME])), + PChar(FUserControl.UserSettings.UsersProfile.PromptDelete_WindowCaption), MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON2) <> idYes then + Exit; + end; + + CanDelete := True; + if Assigned(FUserControl.onDeleteProfile) then + FUserControl.onDeleteProfile(NIL, APerfil.ID, CanDelete, ErrorMsg); + if not CanDelete then + begin + MessageDlg(ErrorMSG, mtWarning, [mbOK], 0); + Exit; + end; + + with FUserControl do + begin + DataConnector.UCExecSQL('Delete from ' + TableUsers.TableName + ' where ' + TableUsers.FieldUserID + ' = ' + IntToStr(APerfil.ID)); + DataConnector.UCExecSQL('Delete from ' + TableRights.TableName + ' where ' + TableRights.FieldUserID + ' = ' + IntToStr(APerfil.ID)); + DataConnector.UCExecSQL('Delete from ' + TableRights.TableName + 'EX where ' + TableRights.FieldUserID + ' = ' + IntToStr(APerfil.ID)); + DataConnector.UCExecSQL('Update ' + TableUsers.TableName + + ' Set ' + TableUsers.FieldProfile + ' = null where ' + TableUsers.FieldUserID + ' = ' + IntToStr(APerfil.ID)); + end; + Result := True; +end; + +function TUsuariosController.EliminarPerfil(const AIDPerfil: integer): Boolean; +begin + Result := EliminarPerfil(FDataModule.GetPerfil(AIDPerfil)); +end; + +function TUsuariosController.EliminarUsuario(AUser: IBizUsuario): Boolean; +begin + if not Assigned(AUser) then + raise Exception.Create('No hay usuario asignado (EliminarUsuario)'); + + if not AUser.Active then + AUser.Active := True; + + if AUser.DataTable.RecordCount > 0 then + Result := EliminarUsuario(AUser.ID); +end; + +function TUsuariosController.EliminarUsuario(const AIDUser: integer): Boolean; +begin + FUserControl.DataConnector.UCExecSQL('Delete from ' + FUserControl.TableRights.TableName + ' where ' + FUserControl.TableRights.FieldUserID + ' = ' + IntToStr(AIDUser)); + FUserControl.DataConnector.UCExecSQL('Delete from ' + FUserControl.TableUsers.TableName + ' where ' + FUserControl.TableUsers.FieldUserID + ' = ' + IntToStr(AIDUser)); + Result := True; +end; + +function TUsuariosController.GetCriptografia: TUCCriptografia; +begin + case FUserControl.Criptografia of + cPadrao: Result := ucStandard; + cMD5: Result := ucMD5; + end; +end; + +function TUsuariosController.GetCurrentUser: IBizUsuario; +begin + if not Assigned(FCurrentUser) or (FCurrentUser.ID <> FUserControl.CurrentUser.UserID) then + FCurrentUser := BuscarUsuario(FUserControl.CurrentUser.UserID); + + if not FCurrentUser.Active then + FCurrentUser.Active := True; + + Result := FCurrentUser; +end; + +function TUsuariosController.GetMaxIntentosLogin: Integer; +begin + Result := FUserControl.Login.MaxLoginAttempts; +end; + +function TUsuariosController.GetUsarPasswordsSeguras: Boolean; +begin + Result := FUsarPasswordsSeguras; +end; + +function TUsuariosController.GuardarPerfil(APerfil: IBizPerfilUsuario): Boolean; +begin + Result := False; + + if not Assigned(APerfil) then + raise Exception.Create('No hay perfil asignado (GuardarPerfil)'); + + if APerfil.EsNuevo then + Result := AnadirPerfil(APerfil) + else + Result := ModificarPerfil(APerfil); +end; + +function TUsuariosController.GuardarUsuario(AUser: IBizUsuario): Boolean; +begin + Result := False; + + if not Assigned(AUser) then + raise Exception.Create('No hay usuario asignado (GuardarUsuario)'); + + if AUser.EsNuevo then + Result := AnadirUsuario(AUser) + else + Result := ModificarUsuario(AUser); +end; + +function TUsuariosController.HayUsuarioConPerfil( + const AIDPerfil: integer): Boolean; +var + TempDS: TDataset; +begin + Result := False; + + try + TempDS := FUserControl.DataConnector.UCGetSQLDataset('Select ' + FUserControl.TableUsers.FieldUserID + ' as IdUser from ' + + FUserControl.TableUsers.TableName + + ' Where ' + FUserControl.TableUsers.FieldTypeRec + ' = ' + QuotedStr('U') + + ' AND ' + FUserControl.TableUsers.FieldProfile + ' = ' + IntToStr(AIDPerfil)); + + Result := (TempDS.FieldByName('IdUser').AsInteger > 0); + TempDS.Close; + finally + FreeAndNil(TempDS); + end; +end; + +procedure TUsuariosController.InicializarUserControl; +begin + with FUserControl do + begin + ApplicationID := Application.ExeName; + AutoStart := False; + Criptografia := cMD5; + CheckValidationKey := True; + Login.MaxLoginAttempts := 3; + UserPasswordChange.ForcePassword := True; + UserPasswordChange.MinPasswordLength := 3; + end; + FDataModule.InicializarUserControl(FUserControl); +end; + +procedure TUsuariosController.Logoff; +begin + FUserControl.Logoff; +end; + +function TUsuariosController.ModificarPerfil( + APerfil: IBizPerfilUsuario): Boolean; +begin + Result := False; + + if not Assigned(APerfil) then + raise Exception.Create('No hay perfil asignado (ModificarPerfil)'); + + if ValidarPerfil(APerfil) then + begin + ShowHourglassCursor; + try + with FUserControl do + begin + DataConnector.UCExecSQL(Format('UPDATE %s SET %s = %s WHERE %s = %d', + [TableUsers.TableName, + TableUsers.FieldUserName, + QuotedStr(APerfil.USERNAME), + TableUsers.FieldUserID, + APerfil.ID])); + end; + + Result := True; + finally + HideHourglassCursor; + end; + end; +end; + +function TUsuariosController.ModificarUsuario(AUser: IBizUsuario): Boolean; +begin + Result := False; + + if not Assigned(AUser) then + raise Exception.Create('No hay usuario asignado (ModificarUsuario)'); + + if ValidarUsuario(AUser) then + begin + ShowHourglassCursor; + try + FUserControl.ChangeUser(AUser.ID, AUser.LOGIN, AUser.USERNAME, AUser.EMAIL, + AUser.ID_PERFIL, AUser.BLOQUEADO , AUser.USERDAYSSUN, (AUser.PRIVILEGED = 1)); + + Result := True; + + { TODO -oLuiz -cUpgrade : Consertar a Senha para poder avisar MD5 } + {if (Assigned(MailUserControl)) and (MailUserControl.AlteraUsuario.Ativo) then + try + MailUserControl.EnviaEmailAlteraUsuario(vNome, + vLogin, + TfrmCadastrarUsuario(Self.Owner).FDataSetCadastroUsuario.FieldByName('SENHA').AsString, + vEmail, + IntToStr(vPerfil), + EncryptKey); + except + on E: Exception do + Log(E.Message, 2); + end;} + finally + HideHourglassCursor; + end; + end; +end; + +function TUsuariosController.NuevoPerfil: IBizPerfilUsuario; +var + APerfil : IBizPerfilUsuario; +begin + APerfil := FDataModule.NuevoPerfil; + APerfil.DataTable.Active := True; + APerfil.Insert; + Result := APerfil; +end; + +function TUsuariosController.NuevoUsuario: IBizUsuario; +var + AUsuario : IBizUsuario; +begin + AUsuario := FDataModule.NuevoUsuario; + AUsuario.DataTable.Active := True; + AUsuario.Insert; + Result := AUsuario; +end; + +procedure TUsuariosController.RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); +begin + inherited; +// +end; + +procedure TUsuariosController.SetMaxIntentosLogin(const Value: Integer); +begin + FUserControl.Login.MaxLoginAttempts := Value; +end; + +procedure TUsuariosController.SetUsarPasswordsSeguras(const Value: Boolean); +begin + FUsarPasswordsSeguras := Value; +end; + +procedure TUsuariosController._ShowChangePassword; +begin + FUserControl.ShowChangePassword; +end; + +procedure TUsuariosController._ShowLogManager; +begin + FUserControl.ShowLogManager; +end; + +procedure TUsuariosController._ShowProfileManager; +begin + FUserControl.ShowProfileManager; +end; + +function TUsuariosController.ValidarPassword(const APassword : string; + const ALogin : String; const ANombre: String; out AMsg : String): boolean; +begin + Result := False; + AMsg := ''; + if (FUserControl.UserPasswordChange.ForcePassword) and (Length(Trim(APassword)) = 0) then + AMsg := FUserControl.UserSettings.CommonMessages.ChangePasswordError.PasswordRequired + else + if (Length(Trim(APassword)) < FUserControl.UserPasswordChange.MinPasswordLength) then + AMsg := Format(FUserControl.UserSettings.CommonMessages.ChangePasswordError.MinPasswordLength, [FUserControl.UserPasswordChange.MinPasswordLength]) + else + if FUsarPasswordsSeguras and (Pos(LowerCase(APassword), 'abcdeasdfqwerzxcv1234567890321654987test' + LowerCase(ALogin) + LowerCase(AMsg)) > 0) then + AMsg := FUserControl.UserSettings.CommonMessages.ChangePasswordError.InvalidNewPassword + else + Result := true; +end; + +function TUsuariosController.ValidarPerfil(APerfil: IBizPerfilUsuario): Boolean; +begin + Result := False; + + if not Assigned(APerfil) then + raise Exception.Create ('Perfil no asignado (ValidarPerfil)'); + + if (APerfil.DataTable.State in dsEditModes) then + APerfil.DataTable.Post; + + if Length(APerfil.USERNAME) = 0 then + raise Exception.Create('Debe indicar el nombre del perfil.'); + + Result := True; +end; + +function TUsuariosController.ValidarUsuario(AUser: IBizUsuario): Boolean; +begin + Result := False; + + if not Assigned(AUser) then + raise Exception.Create ('Usuario no asignado (ValidarUsuario)'); + + if (AUser.DataTable.State in dsEditModes) then + AUser.DataTable.Post; + + if Length(AUser.USERNAME) = 0 then + raise Exception.Create('Debe indicar el nombre completo del usuario.'); + + if Length(AUser.LOGIN) = 0 then + raise Exception.Create('Debe indicar un login para el usuario.'); + + Result := True; +end; + + +procedure TUsuariosController.VerPerfil(const AIDPerfil: Integer); +var + FPerfil : IBizPerfilUsuario; +begin + FPerfil := FDataModule.GetPerfil(AIDPerfil); + VerPerfil(FPerfil); +end; + +procedure TUsuariosController.VerPerfil(APerfil: IBizPerfilUsuario); +var + AEditor : IEditorPerfilUsuario; +begin + if not Assigned(APerfil) then + raise Exception.Create('Perfil no asignado (VerPerfil)'); + + APerfil.Active := True; + ShowHourglassCursor; + try + CreateEditor('EditorPerfilUsuario', IEditorPerfilUsuario, AEditor); + if Assigned(AEditor) then + with (AEditor as IEditorPerfilUsuario) do + begin + Controller := Self; //OJO ORDEN MUY IMPORTANTE + PerfilUsuario := APerfil; + ShowModal; + Release; + end; + finally + AEditor := NIL; + HideHourglassCursor; + end; +end; + +procedure TUsuariosController.VerPerfiles; +var + AEditor : IEditorPerfilesUsuario; + APerfilesUsuario: IBizPerfilUsuario; +begin + APerfilesUsuario := FDataModule.GetPerfiles; + if Assigned(APerfilesUsuario) then + begin + APerfilesUsuario.Active := True; + ShowHourglassCursor; + try + CreateEditor('EditorPerfilesUsuario', IEditorPerfilesUsuario, AEditor); + if Assigned(AEditor) then + with (AEditor as IEditorPerfilesUsuario) do + begin + Controller := Self; //OJO ORDEN MUY IMPORTANTE + PerfilesUsuario := APerfilesUsuario; + ShowEmbedded; + end; + finally + AEditor := NIL; + APerfilesUsuario := NIL; + HideHourglassCursor; + end; + end; +end; + +procedure TUsuariosController.VerUsuario(const AIDUser: Integer); +var + FUsuario : IBizUsuario; +begin + FUsuario := FDataModule.GetUsuario(AIDUser); + VerUsuario(FUsuario); +end; + +procedure TUsuariosController.VerUsuario(AUser: IBizUsuario); +var + AEditor : IEditorUsuario; +begin + if not Assigned(AUser) then + raise Exception.Create('Usuario no asignado (VerUsuario)'); + + AUser.Active := True; + ShowHourglassCursor; + try + CreateEditor('EditorUsuario', IEditorUsuario, AEditor); + if Assigned(AEditor) then + with (AEditor as IEditorUsuario) do + begin + Controller := Self; //OJO ORDEN MUY IMPORTANTE + Usuario := AUser; + ShowModal; + Release; + end; + finally + AEditor := NIL; + HideHourglassCursor; + end; +end; + +procedure TUsuariosController.VerUsuarios; +var + AEditor : IEditorUsuarios; + FUsuarios : IBizUsuario; +begin + FUsuarios := FDataModule.GetUsuarios; + if Assigned(FUsuarios) then + begin + FUsuarios.Active := True; + ShowHourglassCursor; + try + CreateEditor('EditorUsuarios', IEditorUsuarios, AEditor); + if Assigned(AEditor) then + with (AEditor as IEditorUsuarios) do + begin + Controller := Self; //OJO ORDEN MUY IMPORTANTE + Usuarios := FUsuarios; + ShowEmbedded; + end; + finally + AEditor := NIL; + FUsuarios := NIL; + HideHourglassCursor; + end; + end; +end; + +procedure TUsuariosController._ShowUserManager; +begin + FUserControl.ShowUserManager; +end; + +function TUsuariosController.StartLogin : Boolean; +var + AEditor : IEditorLogin; +begin + Result := False; + AEditor := NIL; + ShowHourglassCursor; + try + CreateEditor('EditorLogin', IEditorLogin, AEditor); + if Assigned(AEditor) then + with AEditor do + begin + Controller := Self; + Result := (AEditor.ShowModal = mrOk); + Release; + end; + finally + AEditor := NIL; + HideHourglassCursor; + end; +end; + +procedure TUsuariosController.FiltrarEmpresa(AUsuario: IBizUsuario); +var + Condicion: TDAWhereExpression; +begin + + // AQUI HAY QUE TENER EN CUENTA QUE UN USUARIO PUEDE QUE NO TENGA ACCESO + // EN UNA DETERMINADA EMPRESA + + +{ if AUsuario.DataTable.Active then + AUsuario.DataTable.Active := False; + + // Filtrar los contactos actuales por empresa + with AUsuario.DataTable.DynamicWhere do + begin + Condicion := NewBinaryExpression(NewField('', fld_U + ContactosID_EMPRESA), NewConstant(AppFactuGES.EmpresaActiva.ID, datInteger), dboEqual); + + if IsEmpty then + Expression := Condicion + else + Expression := NewBinaryExpression(Expression, Condicion, dboAnd); + end;} +end; + + +end. diff --git a/Source/ApplicationBase/Usuarios/Data/uDataModuleUsuarios.dfm b/Source/ApplicationBase/Usuarios/Data/uDataModuleUsuarios.dfm new file mode 100644 index 0000000..90e07e7 --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Data/uDataModuleUsuarios.dfm @@ -0,0 +1,426 @@ +inherited DataModuleUsuarios: TDataModuleUsuarios + OnCreate = DataModuleCreate + Height = 215 + Width = 331 + object srvUsuarios: TRORemoteService + Message = dmBase.ROMessage + Channel = dmBase.ROChannel + ServiceName = 'srvUsuarios' + Left = 40 + Top = 80 + end + object UCSettingsSpanish: TUCSettings + AppMessages.MsgsForm_BtNew = '&Nuevo Mensaje' + AppMessages.MsgsForm_BtReplay = '&Responder' + AppMessages.MsgsForm_BtForward = '&Reenviar' + AppMessages.MsgsForm_BtDelete = '&Borrar' + AppMessages.MsgsForm_BtClose = '&Cerrar' + AppMessages.MsgsForm_WindowCaption = 'Mensajes de Sistema' + AppMessages.MsgsForm_ColFrom = 'Remitente' + AppMessages.MsgsForm_ColSubject = 'Asunto' + AppMessages.MsgsForm_ColDate = 'Fecha' + AppMessages.MsgsForm_PromptDelete = #191'Est'#225' seguro de eliminar los mensajes seleccionados?' + AppMessages.MsgsForm_PromptDelete_WindowCaption = 'Eliminar mensajes' + AppMessages.MsgsForm_NoMessagesSelected = '!Ning'#250'n mensaje seleccionado'#161 + AppMessages.MsgsForm_NoMessagesSelected_WindowCaption = 'Informaci'#243'n' + AppMessages.MsgRec_BtClose = '&Cerrar' + AppMessages.MsgRec_WindowCaption = 'Mensaje' + AppMessages.MsgRec_Title = 'Mensaje Recibido' + AppMessages.MsgRec_LabelFrom = 'De:' + AppMessages.MsgRec_LabelDate = 'Fecha' + AppMessages.MsgRec_LabelSubject = 'Asunto' + AppMessages.MsgRec_LabelMessage = 'Mensaje' + AppMessages.MsgSend_BtSend = '&Enviar' + AppMessages.MsgSend_BtCancel = '&Cancelar' + AppMessages.MsgSend_WindowCaption = 'Mensaje' + AppMessages.MsgSend_Title = 'Enviar Nuevo Mensaje' + AppMessages.MsgSend_GroupTo = 'Para:' + AppMessages.MsgSend_RadioUser = 'Usuario:' + AppMessages.MsgSend_RadioAll = 'Todos' + AppMessages.MsgSend_GroupMessage = 'Mensaje' + AppMessages.MsgSend_LabelSubject = 'Asunto' + AppMessages.MsgSend_LabelMessageText = 'Texto del mensaje' + CommonMessages.AutoLogonError = + 'Error de Ingreso Autom'#225'tico!'#13#10'Especifique un Usuario y Contrase'#241 + + 'a V'#225'lidos.' + CommonMessages.ChangePasswordError.InvalidCurrentPassword = #161'Contrase'#241'a Actual Incorrecta!' + CommonMessages.ChangePasswordError.NewPasswordError = + 'Los campos Contrase'#241'a Nueva y Confirme Contrase'#241'a deben ser igua' + + 'les' + CommonMessages.ChangePasswordError.NewEqualCurrent = 'Nueva Contrase'#241'a y Contrase'#241'a Actual deben ser diferentes' + CommonMessages.ChangePasswordError.PasswordRequired = #161'La Contrase'#241'a es obligatoria!' + CommonMessages.ChangePasswordError.MinPasswordLength = 'La Contrase'#241'a debe tener un m'#237'nimo de %d caracteres' + CommonMessages.ChangePasswordError.InvalidNewPassword = #161'Prohibido utilizar contrase'#241'as NO Seguras!' + CommonMessages.InvalidLogin = 'Usuario y/o Contrase'#241'a Incorrectos!' + CommonMessages.InitialMessage.Strings = ( + 'ATENCION! Conecci'#243'n Inicial:' + '' + 'Usuario : :user' + 'Contrase'#241'a : :password' + '' + 'Defina permisos para este usuario') + CommonMessages.MaxLoginAttemptsError = '%d Intentos de conecci'#243'n inv'#225'lidos !' + CommonMessages.PasswordChanged = #161'Se ha cambiado la Contrase'#241'a con '#233'xito!' + CommonMessages.BlankPassword = 'Contrase'#241'a vac'#237'a para el Usuario %s' + CommonMessages.UsuarioExiste = 'O Usu'#225'rio "%s" j'#225' est'#225' cadastrado no sistema !!' + CommonMessages.PasswordExpired = 'Aten'#231#227'o, sua senha expirou, favor troca-la' + CommonMessages.ForcaTrocaSenha = 'Mudan'#231'a de senha obrigat'#243'ria' + Login.WindowCaption = 'Conecci'#243'n' + Login.LabelUser = 'Usuario: ' + Login.LabelPassword = 'Contrase'#241'a:' + Login.BtOk = 'Aceptar' + Login.BtCancel = '&Cancelar' + Login.LeftImage.Data = { + 07544269746D617016090000424D160900000000000036040000280000003200 + 0000180000000100080000000000E00400000000000000000000000100000000 + 000000000000000080000080000000808000800000008000800080800000C0C0 + C000C0DCC000F0CAA6000020400000206000002080000020A0000020C0000020 + E00000400000004020000040400000406000004080000040A0000040C0000040 + E00000600000006020000060400000606000006080000060A0000060C0000060 + E00000800000008020000080400000806000008080000080A0000080C0000080 + E00000A0000000A0200000A0400000A0600000A0800000A0A00000A0C00000A0 + E00000C0000000C0200000C0400000C0600000C0800000C0A00000C0C00000C0 + E00000E0000000E0200000E0400000E0600000E0800000E0A00000E0C00000E0 + E00040000000400020004000400040006000400080004000A0004000C0004000 + E00040200000402020004020400040206000402080004020A0004020C0004020 + E00040400000404020004040400040406000404080004040A0004040C0004040 + E00040600000406020004060400040606000406080004060A0004060C0004060 + E00040800000408020004080400040806000408080004080A0004080C0004080 + E00040A0000040A0200040A0400040A0600040A0800040A0A00040A0C00040A0 + E00040C0000040C0200040C0400040C0600040C0800040C0A00040C0C00040C0 + E00040E0000040E0200040E0400040E0600040E0800040E0A00040E0C00040E0 + E00080000000800020008000400080006000800080008000A0008000C0008000 + E00080200000802020008020400080206000802080008020A0008020C0008020 + E00080400000804020008040400080406000804080008040A0008040C0008040 + E00080600000806020008060400080606000806080008060A0008060C0008060 + E00080800000808020008080400080806000808080008080A0008080C0008080 + E00080A0000080A0200080A0400080A0600080A0800080A0A00080A0C00080A0 + E00080C0000080C0200080C0400080C0600080C0800080C0A00080C0C00080C0 + E00080E0000080E0200080E0400080E0600080E0800080E0A00080E0C00080E0 + E000C0000000C0002000C0004000C0006000C0008000C000A000C000C000C000 + E000C0200000C0202000C0204000C0206000C0208000C020A000C020C000C020 + E000C0400000C0402000C0404000C0406000C0408000C040A000C040C000C040 + E000C0600000C0602000C0604000C0606000C0608000C060A000C060C000C060 + E000C0800000C0802000C0804000C0806000C0808000C080A000C080C000C080 + E000C0A00000C0A02000C0A04000C0A06000C0A08000C0A0A000C0A0C000C0A0 + E000C0C00000C0C02000C0C04000C0C06000C0C08000C0C0A000F0FBFF00A4A0 + A000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF + FF00FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD0000FDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD525252525252525252525252 + 5252FDFDFDFDFDFD0000FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDAFB75E5E5E66666767676F6F6F6FB752FDFDFDFDFD0000FDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDAFBF6FBFBF + BFBFBFBFBFBFBFBFBFB752FDFDFDFDFD0000FDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDAFB76F676F6FB7B7B7B7B7776F5EB752FD + FDFDFDFD0000FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDAFBF6FBFBFBFBFBFBFBFBFBFBFBFB752FDFDFDFDFD0000FDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDAFB76F676F6F6FB7B7 + B7B7776F5EB752FDFDFDFDFD0000FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDAFBF6FBFBFBFBFBFBFBFBFBFBFBFBF52FDFDFDFDFD + 0000FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDAF + B76767676F6F6FB7B7B7776F5EB752FDFDFDFDFD0000FDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDAFBF6FBFBFBFBFBFBFBFBFBFBF + BFBF52FDFDFDFDFD0000FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDAFB76767676F6F6F6FB7B7776F5EB752FDFDFDFDFD0000FDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDAFBF6FBFBF + BFBFBFBFBFBFBFBFBFBF52FDFDFDFDFD0000FDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDAFBFB7AFAFB7B7B7B7BFBFBFBFB7B752FD + FDFDFDFD0000FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDAFB76F675E5E5E5E5E5E676FB7A5FDFDFDFDFDFD0000FDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF7F79BFDFDFDFD + FDFDA4F7A3FDFDFDFDFDFDFD0000FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDF7F79BFDFDFDFDFDFDA407A3FDFDFDFDFDFDFD + 0000FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDF7F79BFDFDFDFDFDFDA407A3FDFDFDFDFDFDFD0000FDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF7F7A4FDFDFDFDFDFDF707 + A3FDFDFDFDFDFDFD0000FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDF707A49AFDFDFDFDA30707A3FDFDFDFDFDFDFD0000FDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF7F6A4 + A49B9A9AA3A407079AFDFDFDFDFDFDFD0000FDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF7F6F7F7A4A4F70707A3FDFDFDFD + FDFDFDFD0000FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDF7F6F6F6F6F607A3FDFDFDFDFDFDFDFDFD0000FDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF7A3A3A3 + A3A3FDFDFDFDFDFDFDFDFDFD0000FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + 0000} + Login.LabelTentativa = 'Tentativa : ' + Login.LabelTentativas = 'M'#225'ximo de Tentativas : ' + Log.WindowCaption = 'Seguridad' + Log.LabelDescription = 'Visor de Eventos' + Log.LabelUser = 'Usuario:' + Log.LabelDate = 'Fecha:' + Log.LabelLevel = 'Nivel M'#237'nimo: ' + Log.ColAppID = 'AppID' + Log.ColLevel = 'Nivel' + Log.ColMessage = 'Mensaje' + Log.ColUser = 'Usuario' + Log.ColDate = 'Fecha' + Log.BtFilter = '&Aplicar Filtro' + Log.BtDelete = '&Borrar Bit'#225'cora' + Log.BtClose = '&Cerrar' + Log.PromptDelete = + #191'Est'#225' seguro de Eliminar todos todos los registros de Bit'#225'cora s' + + 'eleccionados?' + Log.PromptDelete_WindowCaption = 'Confirmaci'#243'n' + Log.OptionUserAll = 'Todos' + Log.OptionLevelLow = 'Bajo' + Log.OptionLevelNormal = 'Normal' + Log.OptionLevelHigh = 'Alto' + Log.OptionLevelCritic = 'Cr'#237'tico' + Log.DeletePerformed = + 'Borrado de registros de bit'#225'cora realizado: Usuario = "%s" | Fec' + + 'ha = %s a %s | Nivel <= %s' + UsersForm.WindowCaption = 'Seguridad' + UsersForm.LabelDescription = 'Administraci'#243'n de Usuarios' + UsersForm.ColName = 'Nombre' + UsersForm.ColLogin = 'Usuario' + UsersForm.ColEmail = 'Correo' + UsersForm.BtAdd = '&Nuevo' + UsersForm.BtChange = '&Editar' + UsersForm.BtDelete = 'E&liminar' + UsersForm.PromptDelete = #191'Est'#225' seguro de Eliminar al Usuario "%s"?' + UsersForm.PromptDelete_WindowCaption = 'Eliminar usuario' + UsersForm.BtRights = '&Accesos' + UsersForm.BtPassword = 'C&ontrase'#241'a' + UsersForm.BtClose = '&Cerrar' + AddChangeUser.WindowCaption = 'Administraci'#243'n de Usuarios' + AddChangeUser.LabelAdd = 'Nuevo Usuario' + AddChangeUser.LabelChange = 'Editar Usuario' + AddChangeUser.LabelName = 'Nombre:' + AddChangeUser.LabelLogin = 'Usuario: ' + AddChangeUser.LabelEmail = 'Correo: ' + AddChangeUser.LabelPerfil = 'Perfil: ' + AddChangeUser.CheckPrivileged = 'Usuario Privilegiado' + AddChangeUser.BtSave = '&Guardar' + AddChangeUser.BtCancel = 'Cancelar' + AddChangeUser.CheckExpira = 'Senha do usu'#225'rio n'#227'o expira' + AddChangeUser.Day = 'Dias' + AddChangeUser.ExpiredIn = 'Expira em' + AddChangeProfile.WindowCaption = 'Perfiles de Usuarios' + AddChangeProfile.LabelAdd = 'Nuevo Perfil' + AddChangeProfile.LabelChange = 'Editar Perfil' + AddChangeProfile.LabelName = 'Descripci'#243'n: ' + AddChangeProfile.BtSave = '&Guardar' + AddChangeProfile.BtCancel = 'Cancelar' + UsersProfile.WindowCaption = 'Seguridad' + UsersProfile.LabelDescription = 'Perfil de Usuario' + UsersProfile.ColProfile = 'Perfil' + UsersProfile.BtAdd = '&Nuevo' + UsersProfile.BtChange = '&Editar' + UsersProfile.BtDelete = 'E&liminar' + UsersProfile.BtRights = '&Accesos' + UsersProfile.PromptDelete = + 'Existe(n) usuario(s) con el Perfil "%s". '#191'Est'#225' seguro de elimina' + + 'r el perfil?' + UsersProfile.PromptDelete_WindowCaption = 'Eliminar perfil' + UsersProfile.BtClose = '&Cerrar' + Rights.WindowCaption = 'Seguridad' + Rights.LabelUser = 'Permisos de Usuario : ' + Rights.LabelProfile = 'Permisos del Perfil : ' + Rights.PageMenu = 'Elementos del Men'#250 + Rights.PageActions = 'Acciones' + Rights.PageControls = 'Controles' + Rights.BtUnlock = '&Permitir' + Rights.BtLock = '&Bloquear' + Rights.BtSave = '&Guardar' + Rights.BtCancel = '&Cancelar' + ChangePassword.WindowCaption = 'Seguridad' + ChangePassword.LabelDescription = 'Cambiar Contrase'#241'a' + ChangePassword.LabelCurrentPassword = 'Contrase'#241'a Actual:' + ChangePassword.LabelNewPassword = 'Nueva Contrase'#241'a:' + ChangePassword.LabelConfirm = 'Confirme Contrase'#241'a:' + ChangePassword.BtSave = '&Guardar' + ChangePassword.BtCancel = 'Cancelar' + ResetPassword.WindowCaption = 'Ingrese Contrase'#241'a de Usuario: "%s"' + ResetPassword.LabelPassword = 'Contrase'#241'a: ' + History.Evento_Insert = 'Nuevo' + History.Evento_Delete = 'Eliminar' + History.Evento_Edit = 'Editar' + History.Evento_NewRecord = 'Nuevo registro' + History.Hist_All = 'Todos' + History.Msg_LimpHistorico = 'Excluir el contenido entero del hist'#243'rico ?' + History.Msg_MensConfirma = 'Confirme' + History.Msg_LogEmptyHistory = 'El usuario %s borra la historia de mesa en %s ' + History.LabelDescricao = 'Hist'#243'rico de tabelas' + History.LabelUser = 'Usuario' + History.LabelForm = 'Formul'#225'rio' + History.LabelEvento = 'Evento' + History.LabelTabela = 'Tabela' + History.LabelDataEvento = 'Data' + History.LabelHoraEvento = 'Hora' + History.Msg_NewRecord = '%s Inserte el nuevo registro' + History.Hist_MsgExceptPropr = 'Por favor informe la propiedad %s' + History.Hist_BtnFiltro = '&Aplicar Filtro' + History.Hist_BtnExcluir = '&Borrar Hist'#243'rico' + History.Hist_BtnFechar = '&Cerrar' + TypeFieldsDB.Type_VarChar = 'VarChar' + TypeFieldsDB.Type_Char = 'Char' + TypeFieldsDB.Type_Int = 'Int' + TypeFieldsDB.Type_MemoField = 'BLOB SUB_TYPE 1 SEGMENT SIZE 1024' + Language = ucSpanish + Left = 40 + Top = 16 + end + object rda_Usuarios: TDARemoteDataAdapter + GetSchemaCall.RemoteService = srvUsuarios + GetDataCall.RemoteService = srvUsuarios + UpdateDataCall.RemoteService = srvUsuarios + GetScriptsCall.RemoteService = srvUsuarios + RemoteService = srvUsuarios + DataStreamer = Bin2DataStreamer + Left = 176 + Top = 16 + end + object Bin2DataStreamer: TDABin2DataStreamer + Left = 40 + Top = 144 + end + object tbl_USUARIOS: TDAMemDataTable + RemoteUpdatesOptions = [] + Fields = < + item + Name = 'ID' + DataType = datAutoInc + GeneratorName = 'GEN_USUARIOS_ID' + Required = True + DictionaryEntry = 'USUARIOS_ID' + InPrimaryKey = True + end + item + Name = 'USERNAME' + DataType = datString + Size = 30 + DisplayLabel = 'Nombre' + DictionaryEntry = 'USUARIOS_USERNAME' + end + item + Name = 'LOGIN' + DataType = datString + Size = 30 + DisplayLabel = 'Login' + DictionaryEntry = 'USUARIOS_LOGIN' + end + item + Name = 'PASS' + DataType = datString + Size = 250 + DisplayLabel = 'Password' + DictionaryEntry = 'USUARIOS_PASS' + end + item + Name = 'PASSEXPIRED' + DataType = datDateTime + DisplayLabel = 'Expiraci'#243'n de password' + DictionaryEntry = 'USUARIOS_PASSEXPIRED' + end + item + Name = 'BLOQUEADO' + DataType = datSmallInt + DisplayLabel = 'Bloqueado' + DictionaryEntry = 'USUARIOS_BLOQUEADO' + end + item + Name = 'EMAIL' + DataType = datString + Size = 150 + DisplayLabel = 'Correo electr'#243'nico' + DictionaryEntry = 'USUARIOS_EMAIL' + end + item + Name = 'USERDAYSSUN' + DataType = datInteger + DisplayLabel = 'USUARIOS_USERDAYSSUN' + DictionaryEntry = 'USUARIOS_USERDAYSSUN' + end + item + Name = 'PRIVILEGED' + DataType = datInteger + DisplayLabel = 'Privilegiado' + DictionaryEntry = 'USUARIOS_PRIVILEGED' + end + item + Name = 'TIPO' + DataType = datString + Size = 1 + DisplayLabel = 'Tipo' + DictionaryEntry = 'USUARIOS_TIPO' + end + item + Name = 'ID_PERFIL' + DataType = datInteger + DictionaryEntry = 'USUARIOS_ID_PERFIL' + end + item + Name = 'CHECKSUM' + DataType = datString + Size = 250 + DisplayLabel = 'Checksum' + DictionaryEntry = 'USUARIOS_CHECKSUM' + end> + Params = <> + StreamingOptions = [soDisableEventsWhileStreaming] + RemoteDataAdapter = rda_Usuarios + DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] + MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] + LogicalName = 'USUARIOS' + IndexDefs = <> + Left = 176 + Top = 80 + end + object ds_USUARIOS: TDADataSource + DataSet = tbl_USUARIOS.Dataset + DataTable = tbl_USUARIOS + Left = 176 + Top = 136 + end + object tbl_PERFILES: TDAMemDataTable + RemoteUpdatesOptions = [] + Fields = < + item + Name = 'ID' + DataType = datAutoInc + GeneratorName = 'GEN_USUARIOS_ID' + Required = True + DictionaryEntry = 'PERFILES_ID' + InPrimaryKey = True + end + item + Name = 'USERNAME' + DataType = datString + Size = 30 + DisplayLabel = 'Nombre' + DictionaryEntry = 'PERFILES_USERNAME' + end + item + Name = 'LOGIN' + DataType = datString + Size = 30 + DisplayLabel = 'Login' + DictionaryEntry = 'PERFILES_LOGIN' + end + item + Name = 'TIPO' + DataType = datString + Size = 1 + DisplayLabel = 'Tipo' + DictionaryEntry = 'PERFILES_TIPO' + end> + Params = <> + StreamingOptions = [soDisableEventsWhileStreaming] + RemoteDataAdapter = rda_Usuarios + DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] + MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] + LogicalName = 'PERFILES' + IndexDefs = <> + Left = 272 + Top = 80 + end + object ds_PERFILES: TDADataSource + DataSet = tbl_PERFILES.Dataset + DataTable = tbl_PERFILES + Left = 272 + Top = 136 + end +end diff --git a/Source/ApplicationBase/Usuarios/Data/uDataModuleUsuarios.pas b/Source/ApplicationBase/Usuarios/Data/uDataModuleUsuarios.pas new file mode 100644 index 0000000..9eac715 --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Data/uDataModuleUsuarios.pas @@ -0,0 +1,465 @@ +unit uDataModuleUsuarios; + +interface + +uses + SysUtils, Classes, DB, DBClient, uDADataTable, + VARELA_Intf, + UCBase, UCDataConnector, uUCROConn, uDARemoteDataAdapter, + uDARemoteCommand, uROClient, uRORemoteService, uDADataStreamer, + uDABin2DataStreamer, uDAScriptingProvider, uIDataModuleUsuarios, UCSettings, + uDataModuleBase, uDAInterfaces, uDAMemDataTable, uBizUsuarios; + +type + TDataModuleUsuarios = class(TDataModuleBase, IDataModuleUsuarios) + srvUsuarios: TRORemoteService; + UCSettingsSpanish: TUCSettings; + rda_Usuarios: TDARemoteDataAdapter; + Bin2DataStreamer: TDABin2DataStreamer; + tbl_USUARIOS: TDAMemDataTable; + ds_USUARIOS: TDADataSource; + tbl_PERFILES: TDAMemDataTable; + ds_PERFILES: TDADataSource; + procedure DataModuleCreate(Sender: TObject); + private + procedure InicializarCamposUserControl(AUserControl: TUserControl); + procedure InicializarSettingsUserControl(AUserControl: TUserControl); + function CreateConnectorInstance : TUCDataConnector; + public + function GetUsuario(const ID : Integer) : IBizUsuario; + function NuevoUsuario : IBizUsuario; + function GetUsuarios : IBizUsuario; + + function NuevoPerfil : IBizPerfilUsuario; + function GetPerfiles : IBizPerfilUsuario; + function GetPerfil (const ID : Integer) : IBizPerfilUsuario; + + procedure InicializarUserControl (AUserControl : TUserControl); + end; + + +implementation + +{$R *.DFM} + +uses + Forms, Controls, uDataTableUtils, uDMBase, + Dialogs, Windows, cxControls, + schUsuariosClient_Intf; + +const + ID_NULO = -9000; + + +{ TDataModuleUsuarios } + +function TDataModuleUsuarios.CreateConnectorInstance: TUCDataConnector; +begin + // El propietario (Owner) es Application para que se encarge de la + // liberación del conector que estamos creando. + Result := TUCROConn.Create(Application); + with TUCROConn(Result) do + begin + ROServiceName := srvUsuarios.ServiceName; + ROChannel := dmBase.ROChannel; + ROMessage := dmBase.ROMessage; + end; +end; + +function TDataModuleUsuarios.NuevoPerfil: IBizPerfilUsuario; +begin + Result := GetPerfil(ID_NULO) +end; + +function TDataModuleUsuarios.NuevoUsuario: IBizUsuario; +begin + Result := GetUsuario(ID_NULO) +end; + +procedure TDataModuleUsuarios.DataModuleCreate(Sender: TObject); +begin + inherited; + srvUsuarios.Channel := dmBase.Channel; + srvUsuarios.Message := dmBase.Message; +end; + +function TDataModuleUsuarios.GetPerfil(const ID: Integer): IBizPerfilUsuario; +begin + ShowHourglassCursor; + try + Result := Self.GetPerfiles; + + with Result.DataTable.DynamicWhere do + begin + Clear; + // (ID = :ID) + Expression := NewBinaryExpression(NewField('', fld_PERFILESID), NewConstant(ID, datInteger), dboEqual); + end; + finally + HideHourglassCursor; + end; +end; + +function TDataModuleUsuarios.GetPerfiles: IBizPerfilUsuario; +var + AUsuarios : TDAMemDataTable; +begin + ShowHourglassCursor; + try + AUsuarios := CloneDataTable(tbl_PERFILES); + AUsuarios.BusinessRulesID := BIZ_CLIENT_PERFIL_USUARIO; + + Result := (AUsuarios as IBizPerfilUsuario); + finally + HideHourglassCursor; + end; +end; + +function TDataModuleUsuarios.GetUsuario(const ID: Integer): IBizUsuario; +begin + ShowHourglassCursor; + try + Result := Self.GetUsuarios; + + with Result.DataTable.DynamicWhere do + begin + Clear; + // (ID = :ID) + Expression := NewBinaryExpression(NewField('', fld_USUARIOSID), NewConstant(ID, datInteger), dboEqual); + end; + finally + HideHourglassCursor; + end; +end; + +function TDataModuleUsuarios.GetUsuarios: IBizUsuario; +var + AUsuarios : TDAMemDataTable; +begin + ShowHourglassCursor; + try + AUsuarios := CloneDataTable(tbl_Usuarios); + AUsuarios.BusinessRulesID := BIZ_CLIENT_USUARIO; + + Result := (AUsuarios as IBizUsuario); + finally + HideHourglassCursor; + end; +end; + +procedure TDataModuleUsuarios.InicializarCamposUserControl( + AUserControl: TUserControl); +begin + if not Assigned(AUserControl) then + raise Exception.Create('UserControl no asignado (InicializarUserControl)'); + + with AUserControl do + begin + DataConnector := CreateConnectorInstance; + + with TableUsers do + begin + TableName := 'RDX_USUARIOS'; //nme_USUARIOS; + FieldUserID := fld_USUARIOSID; + FieldUserName := fld_USUARIOSUSERNAME; + FieldLogin := fld_USUARIOSLOGIN; + FieldPassword := fld_USUARIOSPASS; + FieldEmail := fld_USUARIOSEMAIL; + FieldPrivileged := fld_USUARIOSPRIVILEGED; + FieldTypeRec := fld_USUARIOSTIPO; + FieldProfile := fld_USUARIOSID_PERFIL; + FieldUserExpired := fld_USUARIOSBLOQUEADO; + FieldDateExpired := fld_USUARIOSPASSEXPIRED; + FieldUserDaysSun := fld_USUARIOSUSERDAYSSUN; + FieldKey := fld_USUARIOSCHECKSUM; + end; + + with TableRights do + begin + TableName := 'RDX_PERMISOS'; //nme_PERMISOS; + FieldUserID := fld_PERMISOSID_USUARIO; + FieldModule := fld_PERMISOSMODULO; + FieldComponentName := fld_PERMISOSNOMBRECOMP; + FieldFormName := fld_PERMISOSEXNOMBREFORM; + FieldKey := fld_PERMISOSCHECKSUM; + end; + + with TableUsersLogged do + begin + TableName := 'RDX_USUARIOS_LOGON'; //nme_USUARIOS_LOGON; + FieldLogonID := fld_USUARIOS_LOGONLOGONID; + FieldUserID := fld_USUARIOS_LOGONID_USUARIO; + FieldApplicationID := fld_USUARIOS_LOGONAPLICACION; + FieldMachineName := fld_USUARIOS_LOGONEQUIPO; + FieldData := fld_USUARIOS_LOGONDATA; + end; + + with TableHistory do + begin + TableName := 'RDX_USUARIOS_EVENTOS'; //nme_USUARIOS_EVENTOS; + FieldApplicationID := fld_USUARIOS_EVENTOSAPLICACION; + FieldUserID := fld_USUARIOS_EVENTOSID_USUARIO; + FieldEventDate := fld_USUARIOS_EVENTOSFECHA; + FieldEventTime := fld_USUARIOS_EVENTOSHORA; + FieldForm := fld_USUARIOS_EVENTOSFORM; + FieldCaptionForm := fld_USUARIOS_EVENTOSTITULO_FORM; + FieldEvent := fld_USUARIOS_EVENTOSEVENTO; + FieldObs := fld_USUARIOS_EVENTOSNOTAS; + FieldTableName := fld_USUARIOS_EVENTOSTNAME; + end; + + end; +end; + +procedure TDataModuleUsuarios.InicializarSettingsUserControl( + AUserControl: TUserControl); +var + SourceSettings : TUCSettings; +begin + SourceSettings := UCSettingsSpanish; + + with AUserControl do + begin + with UserSettings.CommonMessages do + begin + BlankPassword := SourceSettings.CommonMessages.BlankPassword; + PasswordChanged := SourceSettings.CommonMessages.PasswordChanged; + InitialMessage.Text := SourceSettings.CommonMessages.InitialMessage.Text; + MaxLoginAttemptsError := SourceSettings.CommonMessages.MaxLoginAttemptsError; + InvalidLogin := SourceSettings.CommonMessages.InvalidLogin; + AutoLogonError := SourceSettings.CommonMessages.AutoLogonError; + UsuarioExiste := SourceSettings.CommonMessages.UsuarioExiste; // Luiz Benevenuto 20/04/06 + PasswordExpired := SourceSettings.CommonMessages.PasswordExpired; // vicente barros leonel + ForcaTrocaSenha := SourceSettings.CommonMessages.ForcaTrocaSenha; + end; + + with UserSettings.Login do + begin + BtCancel := SourceSettings.Login.BtCancel; + BtOK := SourceSettings.Login.BtOK; + LabelPassword := SourceSettings.Login.LabelPassword; + LabelUser := SourceSettings.Login.LabelUser; + WindowCaption := SourceSettings.Login.WindowCaption; + LabelTentativa := SourceSettings.Login.LabelTentativa; + LabelTentativas := SourceSettings.Login.LabelTentativas; + + if Assigned(SourceSettings.Login.LeftImage.Bitmap) then + LeftImage.Bitmap := SourceSettings.Login.LeftImage.Bitmap + else + LeftImage.Bitmap := nil; + + if Assigned(SourceSettings.Login.TopImage.Bitmap) then + TopImage.Bitmap := SourceSettings.Login.TopImage.Bitmap + else + TopImage.Bitmap := nil; + + if Assigned(SourceSettings.Login.BottomImage.Bitmap) then + BottomImage.Bitmap := SourceSettings.Login.BottomImage.Bitmap + else + BottomImage.Bitmap := nil; + end; + + with UserSettings.UsersForm do + begin + WindowCaption := SourceSettings.UsersForm.WindowCaption; + LabelDescription := SourceSettings.UsersForm.LabelDescription; + ColName := SourceSettings.UsersForm.ColName; + ColLogin := SourceSettings.UsersForm.ColLogin; + ColEmail := SourceSettings.UsersForm.ColEmail; + BtAdd := SourceSettings.UsersForm.BtAdd; + BtChange := SourceSettings.UsersForm.BtChange; + BtDelete := SourceSettings.UsersForm.BtDelete; + BtRights := SourceSettings.UsersForm.BtRights; + BtPassword := SourceSettings.UsersForm.BtPassword; + BtClose := SourceSettings.UsersForm.BtClose; + PromptDelete := SourceSettings.UsersForm.PromptDelete; + PromptDelete_WindowCaption := SourceSettings.UsersForm.PromptDelete_WindowCaption; //added by fduenas + end; + + with UserSettings.UsersProfile do + begin + WindowCaption := SourceSettings.UsersProfile.WindowCaption; + LabelDescription := SourceSettings.UsersProfile.LabelDescription; + ColProfile := SourceSettings.UsersProfile.ColProfile; + BtAdd := SourceSettings.UsersProfile.BtAdd; + BtChange := SourceSettings.UsersProfile.BtChange; + BtDelete := SourceSettings.UsersProfile.BtDelete; + BtRights := SourceSettings.UsersProfile.BtRights; //added by fduenas + BtClose := SourceSettings.UsersProfile.BtClose; + PromptDelete := SourceSettings.UsersProfile.PromptDelete; + PromptDelete_WindowCaption := SourceSettings.UsersProfile.PromptDelete_WindowCaption; //added by fduenas + end; + + with UserSettings.AddChangeUser do + begin + WindowCaption := SourceSettings.AddChangeUser.WindowCaption; + LabelAdd := SourceSettings.AddChangeUser.LabelAdd; + LabelChange := SourceSettings.AddChangeUser.LabelChange; + LabelName := SourceSettings.AddChangeUser.LabelName; + LabelLogin := SourceSettings.AddChangeUser.LabelLogin; + LabelEmail := SourceSettings.AddChangeUser.LabelEmail; + CheckPrivileged := SourceSettings.AddChangeUser.CheckPrivileged; + BtSave := SourceSettings.AddChangeUser.BtSave; + BtCancel := SourceSettings.AddChangeUser.BtCancel; + CheckExpira := SourceSettings.AddChangeUser.CheckExpira; + Day := SourceSettings.AddChangeUser.Day; + ExpiredIn := SourceSettings.AddChangeUser.ExpiredIn; + end; + + with UserSettings.AddChangeProfile do + begin + WindowCaption := SourceSettings.AddChangeProfile.WindowCaption; + LabelAdd := SourceSettings.AddChangeProfile.LabelAdd; + LabelChange := SourceSettings.AddChangeProfile.LabelChange; + LabelName := SourceSettings.AddChangeProfile.LabelName; + BtSave := SourceSettings.AddChangeProfile.BtSave; + BtCancel := SourceSettings.AddChangeProfile.BtCancel; + end; + + with UserSettings.Rights do + begin + WindowCaption := SourceSettings.Rights.WindowCaption; + LabelUser := SourceSettings.Rights.LabelUser; + LabelProfile := SourceSettings.Rights.LabelProfile; + PageMenu := SourceSettings.Rights.PageMenu; + PageActions := SourceSettings.Rights.PageActions; + PageControls := SourceSettings.Rights.PageControls; + BtUnlock := SourceSettings.Rights.BtUnlock; + BtLock := SourceSettings.Rights.BtLock; + BtSave := SourceSettings.Rights.BtSave; + BtCancel := SourceSettings.Rights.BtCancel; + end; + + with UserSettings.ChangePassword do + begin + WindowCaption := SourceSettings.ChangePassword.WindowCaption; + LabelDescription := SourceSettings.ChangePassword.LabelDescription; + LabelCurrentPassword := SourceSettings.ChangePassword.LabelCurrentPassword; + LabelNewPassword := SourceSettings.ChangePassword.LabelNewPassword; + LabelConfirm := SourceSettings.ChangePassword.LabelConfirm; + BtSave := SourceSettings.ChangePassword.BtSave; + BtCancel := SourceSettings.ChangePassword.BtCancel; + end; + + with UserSettings.CommonMessages.ChangePasswordError do + begin + InvalidCurrentPassword := SourceSettings.CommonMessages.ChangePasswordError.InvalidCurrentPassword; + NewPasswordError := SourceSettings.CommonMessages.ChangePasswordError.NewPasswordError; + NewEqualCurrent := SourceSettings.CommonMessages.ChangePasswordError.NewEqualCurrent; + PasswordRequired := SourceSettings.CommonMessages.ChangePasswordError.PasswordRequired; + MinPasswordLength := SourceSettings.CommonMessages.ChangePasswordError.MinPasswordLength; + InvalidNewPassword := SourceSettings.CommonMessages.ChangePasswordError.InvalidNewPassword; + end; + + with UserSettings.ResetPassword do + begin + WindowCaption := SourceSettings.ResetPassword.WindowCaption; + LabelPassword := SourceSettings.ResetPassword.LabelPassword; + end; + + with UserSettings.Log do + begin + WindowCaption := SourceSettings.Log.WindowCaption; + LabelDescription := SourceSettings.Log.LabelDescription; + LabelUser := SourceSettings.Log.LabelUser; + LabelDate := SourceSettings.Log.LabelDate; + LabelLevel := SourceSettings.Log.LabelLevel; + ColLevel := SourceSettings.Log.ColLevel; + ColMessage := SourceSettings.Log.ColMessage; + ColUser := SourceSettings.Log.ColUser; + ColDate := SourceSettings.Log.ColDate; + BtFilter := SourceSettings.Log.BtFilter; + BtDelete := SourceSettings.Log.BtDelete; + BtClose := SourceSettings.Log.BtClose; + PromptDelete := SourceSettings.Log.PromptDelete; + PromptDelete_WindowCaption := SourceSettings.Log.PromptDelete_WindowCaption; //added by fduenas + OptionUserAll := SourceSettings.Log.OptionUserAll; //added by fduenas + OptionLevelLow := SourceSettings.Log.OptionLevelLow; //added by fduenas + OptionLevelNormal := SourceSettings.Log.OptionLevelNormal; //added by fduenas + OptionLevelHigh := SourceSettings.Log.OptionLevelHigh; //added by fduenas + OptionLevelCritic := SourceSettings.Log.OptionLevelCritic; //added by fduenas + DeletePerformed := SourceSettings.Log.DeletePerformed; //added by fduenas + end; + + with UserSettings.AppMessages do + begin + MsgsForm_BtNew := SourceSettings.AppMessages.MsgsForm_BtNew; + MsgsForm_BtReplay := SourceSettings.AppMessages.MsgsForm_BtReplay; + MsgsForm_BtForward := SourceSettings.AppMessages.MsgsForm_BtForward; + MsgsForm_BtDelete := SourceSettings.AppMessages.MsgsForm_BtDelete; + MsgsForm_BtClose := SourceSettings.AppMessages.MsgsForm_BtClose; //added by fduenas + MsgsForm_WindowCaption := SourceSettings.AppMessages.MsgsForm_WindowCaption; + MsgsForm_ColFrom := SourceSettings.AppMessages.MsgsForm_ColFrom; + MsgsForm_ColSubject := SourceSettings.AppMessages.MsgsForm_ColSubject; + MsgsForm_ColDate := SourceSettings.AppMessages.MsgsForm_ColDate; + MsgsForm_PromptDelete := SourceSettings.AppMessages.MsgsForm_PromptDelete; + MsgsForm_PromptDelete_WindowCaption := SourceSettings.AppMessages.MsgsForm_PromptDelete_WindowCaption; //added by fduenas + MsgsForm_NoMessagesSelected := SourceSettings.AppMessages.MsgsForm_NoMessagesSelected; //added by fduenas + MsgsForm_NoMessagesSelected_WindowCaption := SourceSettings.AppMessages.MsgsForm_NoMessagesSelected_WindowCaption; //added by fduenas + + MsgRec_BtClose := SourceSettings.AppMessages.MsgRec_BtClose; + MsgRec_WindowCaption := SourceSettings.AppMessages.MsgRec_WindowCaption; + MsgRec_Title := SourceSettings.AppMessages.MsgRec_Title; + MsgRec_LabelFrom := SourceSettings.AppMessages.MsgRec_LabelFrom; + MsgRec_LabelDate := SourceSettings.AppMessages.MsgRec_LabelDate; + MsgRec_LabelSubject := SourceSettings.AppMessages.MsgRec_LabelSubject; + MsgRec_LabelMessage := SourceSettings.AppMessages.MsgRec_LabelMessage; + MsgSend_BtSend := SourceSettings.AppMessages.MsgSend_BtSend; + MsgSend_BtCancel := SourceSettings.AppMessages.MsgSend_BtCancel; + MsgSend_WindowCaption := SourceSettings.AppMessages.MsgSend_WindowCaption; + MsgSend_Title := SourceSettings.AppMessages.MsgSend_Title; + MsgSend_GroupTo := SourceSettings.AppMessages.MsgSend_GroupTo; + MsgSend_RadioUser := SourceSettings.AppMessages.MsgSend_RadioUser; + MsgSend_RadioAll := SourceSettings.AppMessages.MsgSend_RadioAll; + MsgSend_GroupMessage := SourceSettings.AppMessages.MsgSend_GroupMessage; + MsgSend_LabelSubject := SourceSettings.AppMessages.MsgSend_LabelSubject; //added by fduenas + MsgSend_LabelMessageText := SourceSettings.AppMessages.MsgSend_LabelMessageText; //added by fduenas + end; + + With UserSettings.History do + Begin + Evento_edit := SourceSettings.History.Evento_edit; + Evento_NewRecord := SourceSettings.History.Evento_NewRecord; + Evento_Insert := SourceSettings.History.Evento_Insert; + Evento_delete := SourceSettings.History.Evento_Delete; + LabelTabela := SourceSettings.History.LabelTabela; + Msg_LogEmptyHistory := SourceSettings.History.Msg_LogEmptyHistory; + Msg_MensConfirma := SourceSettings.History.Msg_MensConfirma; + LabelDescricao := SourceSettings.History.LabelDescricao; + Hist_BtnExcluir := SourceSettings.History.Hist_BtnExcluir; + Hist_BtnFiltro := SourceSettings.History.Hist_BtnFiltro; + LabelForm := SourceSettings.History.LabelForm; + Hist_BtnFechar := SourceSettings.History.Hist_BtnFechar; + LabelDataEvento := SourceSettings.History.LabelDataEvento; + LabelEvento := SourceSettings.History.LabelEvento; + Msg_NewRecord := SourceSettings.History.Msg_NewRecord; + Hist_All := SourceSettings.History.Hist_All; + Msg_LimpHistorico := SourceSettings.History.Msg_LimpHistorico; + LabelHoraEvento := SourceSettings.History.LabelHoraEvento; + LabelUser := SourceSettings.History.LabelUser; + Hist_MsgExceptPropr := SourceSettings.History.Hist_MsgExceptPropr; + End; + + with UserSettings.TypeFieldsDB do + Begin + Type_VarChar := SourceSettings.TypeFieldsDB.Type_VarChar; + Type_Char := SourceSettings.TypeFieldsDB.Type_Char; + Type_Int := SourceSettings.TypeFieldsDB.Type_Int; + Type_MemoField := SourceSettings.TypeFieldsDB.Type_MemoField; + end; + + UserSettings.WindowsPosition := SourceSettings.WindowsPosition; + end; +end; + +procedure TDataModuleUsuarios.InicializarUserControl(AUserControl: TUserControl); +begin + if Assigned(AUserControl) then + begin + InicializarCamposUserControl(AUserControl); + InicializarSettingsUserControl(AUserControl); + end; +end; + + +end. diff --git a/Source/ApplicationBase/Usuarios/Data/uUCROConn.pas b/Source/ApplicationBase/Usuarios/Data/uUCROConn.pas new file mode 100644 index 0000000..e47a69d --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Data/uUCROConn.pas @@ -0,0 +1,224 @@ +{----------------------------------------------------------------------------- + Unit Name: UCMidasConn + Author : Luiz Benevenuto + Date : 31/07/2005 + Purpose : Midas Suporte ( DataSnap ) + E-mail : luiz@siffra.com + URL : www.siffra.com + UC : www.usercontrol.com.br + Forum : http://www.usercontrol.com.br/modules.php?name=Forums + + registered in UCMidasConnReg.pas +-----------------------------------------------------------------------------} + +unit uUCROConn; + +interface + +//{$I 'UserControl.inc'} + +uses + Classes, + DB, + DBClient, + SysUtils, + uRORemoteService, uDADataStreamer, uROBinMessage, uROWinInetHttpChannel, + uDABin2DataStreamer, uDARemoteDataAdapter, UCDataConnector, uROClient; + +type + TUCROConn = class(TUCDataConnector) + private + FMessage: TROBinMessage; + FChannel: TROWinInetHTTPChannel; + FRemoteService: TRORemoteService; + FDataAdapter : TDARemoteDataAdapter; + FDataStreamer : TDABin2DataStreamer; + procedure SetServiceName(const Value: String); + function GetServiceName: String; + procedure SetChannel(const Value: TROWinInetHTTPChannel); + procedure SetMessage(const Value: TROBinMessage); + protected + procedure Notification(AComponent: TComponent; Operation: TOperation); override; + procedure RefreshROConnection; + public + function GetDBObjectName: String; override; + function GetTransObjectName: String; override; + function UCFindDataConnection: Boolean; override; + function UCFindTable(const Tablename: String): Boolean; override; + function UCGetSQLDataset(FSQL: String): TDataset; override; + procedure UCExecSQL(FSQL: String); override; + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + published + property ROServiceName : String read GetServiceName write SetServiceName; + property ROMessage : TROBinMessage read FMessage write SetMessage; + property ROChannel : TROWinInetHTTPChannel read FChannel write SetChannel; + end; + +implementation + +uses + Forms, Dialogs, VARELA_Intf, uROTypes, uDAClasses, uDADataTable, + uDACDSDataTable, uROEncryption; + +{ TUCROConn } + +constructor TUCROConn.Create(AOwner: TComponent); +begin + inherited; + FRemoteService := TRORemoteService.Create(nil); + FDataStreamer := TDABin2DataStreamer.Create(nil); + FDataAdapter := TDARemoteDataAdapter.Create(nil); + FDataAdapter.DataStreamer := FDataStreamer; + FDataAdapter.SetupDefaultRequest; +end; + +destructor TUCROConn.Destroy; +begin + FreeAndNil(FRemoteService); + FreeAndNil(FDataAdapter); + FreeAndNil(FDataStreamer); + inherited; +end; + +function TUCROConn.GetDBObjectName: String; +begin + if Assigned(FRemoteService) then + begin + if Owner = FRemoteService.Owner then + Result := FRemoteService.Name + else + Result := FRemoteService.Owner.Name + '.' + FRemoteService.Name; + end + else + Result := ''; +end; + +function TUCROConn.GetServiceName: String; +begin + Result := FRemoteService.ServiceName; +end; + +function TUCROConn.GetTransObjectName: String; +begin + Result := ''; +end; + +procedure TUCROConn.Notification(AComponent: TComponent; Operation: TOperation); +begin + if (Operation = opRemove) and (AComponent = FRemoteService) then + begin + FreeAndNil(FDataAdapter); + FRemoteService := nil; + end; + inherited Notification(AComponent, Operation); +end; + +procedure TUCROConn.RefreshROConnection; +begin + with FRemoteService do + begin + FRemoteService.Message := FMessage; + FRemoteService.Channel := FChannel; + + with FDataAdapter do + begin + RemoteService := FRemoteService; + GetSchemaCall.RemoteService := FRemoteService; + GetDataCall.RemoteService := FRemoteService; + UpdateDataCall.RemoteService := FRemoteService; + GetScriptsCall.RemoteService := FRemoteService; + end; + end; +end; + +procedure TUCROConn.SetChannel(const Value: TROWinInetHTTPChannel); +begin + FChannel := Value; + RefreshROConnection; +end; + +procedure TUCROConn.SetMessage(const Value: TROBinMessage); +begin + FMessage := Value; + RefreshROConnection; +end; + +procedure TUCROConn.SetServiceName(const Value: String); +begin + FRemoteService.ServiceName := Value; +end; + +procedure TUCROConn.UCExecSQL(FSQL: String); +var + ASQL : String; +begin + ASQL := AnsiToUtf8(FSQL); + (FRemoteService as IsrvUsuarios).SQLExecuteCommand(ASQL); +end; + +function TUCROConn.UCFindDataConnection: Boolean; +begin + Result := False; + if Assigned(FRemoteService) then + begin + FRemoteService.CheckCanConnect; + Result := True; + end; +end; + +function TUCROConn.UCFindTable(const Tablename: String): Boolean; +var + ASchema : TDASchema; +begin + ASchema := FDataAdapter.ReadSchema; + try + Result := Assigned(ASchema.FindDataset(TableName)); + finally + FreeAndNil(ASchema); + end; +end; + + +function TUCROConn.UCGetSQLDataset(FSQL: String): TDataset; +var + AStream: TMemoryStream; + ADataStreamer: TDABin2DataStreamer; + ADataTable: TDACDSDataTable; +begin + Result := NIL; + ADataStreamer := TDABin2DataStreamer.Create(NIL); + AStream := (FRemoteService as IsrvUsuarios).SQLGetData(FSQL, True, -1); + + if AStream <> nil then + try + ADataTable := TDACDSDataTable.Create(Application); + + // Generar un nombre aleatorio + Randomize; + ADataTable.Name := 'SQLResult' + '_' + IntToStr(Random(MAXINT)); + + ADataTable.LocalDataStreamer := ADataStreamer; + ADataTable.RemoteFetchEnabled := False; + try + ADataStreamer.ReadDataset(AStream, ADataTable, True); + ADataTable.Open; + + { ¡¡OJO!! Trapicheo!!!!! + Forzamos a recuperar en Dataset todas las tuplas + recorriendonos toda la tabla.} + ADataTable.Last; + ADataTable.First; + + Result := ADataTable.Dataset; + finally + //FreeAndNIL(ADataTable); <-- No liberar, lo hace Application + end; + finally + FreeAndNIL(AStream); + FreeAndNIL(ADataStreamer); + end; +end; + +end. + diff --git a/Source/ApplicationBase/Usuarios/Model/Data/uIDataModuleUsuarios.pas b/Source/ApplicationBase/Usuarios/Model/Data/uIDataModuleUsuarios.pas new file mode 100644 index 0000000..c3038ca --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Model/Data/uIDataModuleUsuarios.pas @@ -0,0 +1,25 @@ +unit uIDataModuleUsuarios; + +interface + +uses + UCBase, UCSettings, uBizUsuarios; + +type + IDataModuleUsuarios = interface + ['{C0A8481F-4920-414D-A906-EE1EB18DE946}'] + procedure InicializarUserControl (AUserControl : TUserControl); + + function GetUsuario(const ID : Integer) : IBizUsuario; + function NuevoUsuario : IBizUsuario; + function GetUsuarios : IBizUsuario; + + function NuevoPerfil : IBizPerfilUsuario; + function GetPerfiles : IBizPerfilUsuario; + function GetPerfil(const ID : Integer) : IBizPerfilUsuario; + end; + +implementation + +end. + diff --git a/Source/ApplicationBase/Usuarios/Model/schUsuariosClient_Intf.pas b/Source/ApplicationBase/Usuarios/Model/schUsuariosClient_Intf.pas new file mode 100644 index 0000000..a880f70 --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Model/schUsuariosClient_Intf.pas @@ -0,0 +1,1716 @@ +unit schUsuariosClient_Intf; + +interface + +uses + Classes, DB, SysUtils, uROClasses, uDADataTable, FmtBCD, uROXMLIntf; + +const + { Data table rules ids + Feel free to change them to something more human readable + but make sure they are unique in the context of your application } + RID_USUARIOS = '{BDE57F57-12F0-4D2C-8BA0-5D5CED642F36}'; + RID_USUARIOS_EVENTOS = '{AF63A56E-BF41-4B8B-AB81-88034F0D4851}'; + RID_USUARIOS_LOGON = '{F6E480B9-A3BD-4EBC-9F29-DE8E3BFA100D}'; + RID_PERFILES = '{4DA3855F-9EDF-49EB-941C-03E72237C70C}'; + RID_PERMISOS = '{70815001-E83D-463E-9C81-3588778518AD}'; + RID_PERMISOSEX = '{B37624F7-4E7D-45F6-8EE5-802A702C3C24}'; + + { Data table names } + nme_USUARIOS = 'USUARIOS'; + nme_USUARIOS_EVENTOS = 'USUARIOS_EVENTOS'; + nme_USUARIOS_LOGON = 'USUARIOS_LOGON'; + nme_PERFILES = 'PERFILES'; + nme_PERMISOS = 'PERMISOS'; + nme_PERMISOSEX = 'PERMISOSEX'; + + { USUARIOS fields } + fld_USUARIOSID = 'ID'; + fld_USUARIOSUSERNAME = 'USERNAME'; + fld_USUARIOSLOGIN = 'LOGIN'; + fld_USUARIOSPASS = 'PASS'; + fld_USUARIOSPASSEXPIRED = 'PASSEXPIRED'; + fld_USUARIOSBLOQUEADO = 'BLOQUEADO'; + fld_USUARIOSEMAIL = 'EMAIL'; + fld_USUARIOSUSERDAYSSUN = 'USERDAYSSUN'; + fld_USUARIOSPRIVILEGED = 'PRIVILEGED'; + fld_USUARIOSTIPO = 'TIPO'; + fld_USUARIOSID_PERFIL = 'ID_PERFIL'; + fld_USUARIOSCHECKSUM = 'CHECKSUM'; + + { USUARIOS field indexes } + idx_USUARIOSID = 0; + idx_USUARIOSUSERNAME = 1; + idx_USUARIOSLOGIN = 2; + idx_USUARIOSPASS = 3; + idx_USUARIOSPASSEXPIRED = 4; + idx_USUARIOSBLOQUEADO = 5; + idx_USUARIOSEMAIL = 6; + idx_USUARIOSUSERDAYSSUN = 7; + idx_USUARIOSPRIVILEGED = 8; + idx_USUARIOSTIPO = 9; + idx_USUARIOSID_PERFIL = 10; + idx_USUARIOSCHECKSUM = 11; + + { USUARIOS_EVENTOS fields } + fld_USUARIOS_EVENTOSAPLICACION = 'APLICACION'; + fld_USUARIOS_EVENTOSID_USUARIO = 'ID_USUARIO'; + fld_USUARIOS_EVENTOSFECHA = 'FECHA'; + fld_USUARIOS_EVENTOSHORA = 'HORA'; + fld_USUARIOS_EVENTOSFORM = 'FORM'; + fld_USUARIOS_EVENTOSTITULO_FORM = 'TITULO_FORM'; + fld_USUARIOS_EVENTOSEVENTO = 'EVENTO'; + fld_USUARIOS_EVENTOSNOTAS = 'NOTAS'; + fld_USUARIOS_EVENTOSTNAME = 'TNAME'; + + { USUARIOS_EVENTOS field indexes } + idx_USUARIOS_EVENTOSAPLICACION = 0; + idx_USUARIOS_EVENTOSID_USUARIO = 1; + idx_USUARIOS_EVENTOSFECHA = 2; + idx_USUARIOS_EVENTOSHORA = 3; + idx_USUARIOS_EVENTOSFORM = 4; + idx_USUARIOS_EVENTOSTITULO_FORM = 5; + idx_USUARIOS_EVENTOSEVENTO = 6; + idx_USUARIOS_EVENTOSNOTAS = 7; + idx_USUARIOS_EVENTOSTNAME = 8; + + { USUARIOS_LOGON fields } + fld_USUARIOS_LOGONLOGONID = 'LOGONID'; + fld_USUARIOS_LOGONID_USUARIO = 'ID_USUARIO'; + fld_USUARIOS_LOGONAPLICACION = 'APLICACION'; + fld_USUARIOS_LOGONEQUIPO = 'EQUIPO'; + fld_USUARIOS_LOGONDATA = 'DATA'; + + { USUARIOS_LOGON field indexes } + idx_USUARIOS_LOGONLOGONID = 0; + idx_USUARIOS_LOGONID_USUARIO = 1; + idx_USUARIOS_LOGONAPLICACION = 2; + idx_USUARIOS_LOGONEQUIPO = 3; + idx_USUARIOS_LOGONDATA = 4; + + { PERFILES fields } + fld_PERFILESID = 'ID'; + fld_PERFILESUSERNAME = 'USERNAME'; + fld_PERFILESLOGIN = 'LOGIN'; + fld_PERFILESTIPO = 'TIPO'; + + { PERFILES field indexes } + idx_PERFILESID = 0; + idx_PERFILESUSERNAME = 1; + idx_PERFILESLOGIN = 2; + idx_PERFILESTIPO = 3; + + { PERMISOS fields } + fld_PERMISOSID = 'ID'; + fld_PERMISOSID_USUARIO = 'ID_USUARIO'; + fld_PERMISOSMODULO = 'MODULO'; + fld_PERMISOSNOMBRECOMP = 'NOMBRECOMP'; + fld_PERMISOSCHECKSUM = 'CHECKSUM'; + + { PERMISOS field indexes } + idx_PERMISOSID = 0; + idx_PERMISOSID_USUARIO = 1; + idx_PERMISOSMODULO = 2; + idx_PERMISOSNOMBRECOMP = 3; + idx_PERMISOSCHECKSUM = 4; + + { PERMISOSEX fields } + fld_PERMISOSEXID = 'ID'; + fld_PERMISOSEXID_USUARIO = 'ID_USUARIO'; + fld_PERMISOSEXMODULO = 'MODULO'; + fld_PERMISOSEXNOMBRECOMP = 'NOMBRECOMP'; + fld_PERMISOSEXNOMBREFORM = 'NOMBREFORM'; + fld_PERMISOSEXCHECKSUM = 'CHECKSUM'; + + { PERMISOSEX field indexes } + idx_PERMISOSEXID = 0; + idx_PERMISOSEXID_USUARIO = 1; + idx_PERMISOSEXMODULO = 2; + idx_PERMISOSEXNOMBRECOMP = 3; + idx_PERMISOSEXNOMBREFORM = 4; + idx_PERMISOSEXCHECKSUM = 5; + +type + { IUSUARIOS } + IUSUARIOS = interface(IDAStronglyTypedDataTable) + ['{C72E45C8-5D5A-46E1-B698-6F6CBBC97625}'] + { Property getters and setters } + function GetIDValue: Integer; + procedure SetIDValue(const aValue: Integer); + function GetIDIsNull: Boolean; + procedure SetIDIsNull(const aValue: Boolean); + function GetUSERNAMEValue: String; + procedure SetUSERNAMEValue(const aValue: String); + function GetUSERNAMEIsNull: Boolean; + procedure SetUSERNAMEIsNull(const aValue: Boolean); + function GetLOGINValue: String; + procedure SetLOGINValue(const aValue: String); + function GetLOGINIsNull: Boolean; + procedure SetLOGINIsNull(const aValue: Boolean); + function GetPASSValue: String; + procedure SetPASSValue(const aValue: String); + function GetPASSIsNull: Boolean; + procedure SetPASSIsNull(const aValue: Boolean); + function GetPASSEXPIREDValue: DateTime; + procedure SetPASSEXPIREDValue(const aValue: DateTime); + function GetPASSEXPIREDIsNull: Boolean; + procedure SetPASSEXPIREDIsNull(const aValue: Boolean); + function GetBLOQUEADOValue: SmallInt; + procedure SetBLOQUEADOValue(const aValue: SmallInt); + function GetBLOQUEADOIsNull: Boolean; + procedure SetBLOQUEADOIsNull(const aValue: Boolean); + function GetEMAILValue: String; + procedure SetEMAILValue(const aValue: String); + function GetEMAILIsNull: Boolean; + procedure SetEMAILIsNull(const aValue: Boolean); + function GetUSERDAYSSUNValue: Integer; + procedure SetUSERDAYSSUNValue(const aValue: Integer); + function GetUSERDAYSSUNIsNull: Boolean; + procedure SetUSERDAYSSUNIsNull(const aValue: Boolean); + function GetPRIVILEGEDValue: Integer; + procedure SetPRIVILEGEDValue(const aValue: Integer); + function GetPRIVILEGEDIsNull: Boolean; + procedure SetPRIVILEGEDIsNull(const aValue: Boolean); + function GetTIPOValue: String; + procedure SetTIPOValue(const aValue: String); + function GetTIPOIsNull: Boolean; + procedure SetTIPOIsNull(const aValue: Boolean); + function GetID_PERFILValue: Integer; + procedure SetID_PERFILValue(const aValue: Integer); + function GetID_PERFILIsNull: Boolean; + procedure SetID_PERFILIsNull(const aValue: Boolean); + function GetCHECKSUMValue: String; + procedure SetCHECKSUMValue(const aValue: String); + function GetCHECKSUMIsNull: Boolean; + procedure SetCHECKSUMIsNull(const aValue: Boolean); + + + { Properties } + property ID: Integer read GetIDValue write SetIDValue; + property IDIsNull: Boolean read GetIDIsNull write SetIDIsNull; + property USERNAME: String read GetUSERNAMEValue write SetUSERNAMEValue; + property USERNAMEIsNull: Boolean read GetUSERNAMEIsNull write SetUSERNAMEIsNull; + property LOGIN: String read GetLOGINValue write SetLOGINValue; + property LOGINIsNull: Boolean read GetLOGINIsNull write SetLOGINIsNull; + property PASS: String read GetPASSValue write SetPASSValue; + property PASSIsNull: Boolean read GetPASSIsNull write SetPASSIsNull; + property PASSEXPIRED: DateTime read GetPASSEXPIREDValue write SetPASSEXPIREDValue; + property PASSEXPIREDIsNull: Boolean read GetPASSEXPIREDIsNull write SetPASSEXPIREDIsNull; + property BLOQUEADO: SmallInt read GetBLOQUEADOValue write SetBLOQUEADOValue; + property BLOQUEADOIsNull: Boolean read GetBLOQUEADOIsNull write SetBLOQUEADOIsNull; + property EMAIL: String read GetEMAILValue write SetEMAILValue; + property EMAILIsNull: Boolean read GetEMAILIsNull write SetEMAILIsNull; + property USERDAYSSUN: Integer read GetUSERDAYSSUNValue write SetUSERDAYSSUNValue; + property USERDAYSSUNIsNull: Boolean read GetUSERDAYSSUNIsNull write SetUSERDAYSSUNIsNull; + property PRIVILEGED: Integer read GetPRIVILEGEDValue write SetPRIVILEGEDValue; + property PRIVILEGEDIsNull: Boolean read GetPRIVILEGEDIsNull write SetPRIVILEGEDIsNull; + property TIPO: String read GetTIPOValue write SetTIPOValue; + property TIPOIsNull: Boolean read GetTIPOIsNull write SetTIPOIsNull; + property ID_PERFIL: Integer read GetID_PERFILValue write SetID_PERFILValue; + property ID_PERFILIsNull: Boolean read GetID_PERFILIsNull write SetID_PERFILIsNull; + property CHECKSUM: String read GetCHECKSUMValue write SetCHECKSUMValue; + property CHECKSUMIsNull: Boolean read GetCHECKSUMIsNull write SetCHECKSUMIsNull; + end; + + { TUSUARIOSDataTableRules } + TUSUARIOSDataTableRules = class(TDADataTableRules, IUSUARIOS) + private + protected + { Property getters and setters } + function GetIDValue: Integer; virtual; + procedure SetIDValue(const aValue: Integer); virtual; + function GetIDIsNull: Boolean; virtual; + procedure SetIDIsNull(const aValue: Boolean); virtual; + function GetUSERNAMEValue: String; virtual; + procedure SetUSERNAMEValue(const aValue: String); virtual; + function GetUSERNAMEIsNull: Boolean; virtual; + procedure SetUSERNAMEIsNull(const aValue: Boolean); virtual; + function GetLOGINValue: String; virtual; + procedure SetLOGINValue(const aValue: String); virtual; + function GetLOGINIsNull: Boolean; virtual; + procedure SetLOGINIsNull(const aValue: Boolean); virtual; + function GetPASSValue: String; virtual; + procedure SetPASSValue(const aValue: String); virtual; + function GetPASSIsNull: Boolean; virtual; + procedure SetPASSIsNull(const aValue: Boolean); virtual; + function GetPASSEXPIREDValue: DateTime; virtual; + procedure SetPASSEXPIREDValue(const aValue: DateTime); virtual; + function GetPASSEXPIREDIsNull: Boolean; virtual; + procedure SetPASSEXPIREDIsNull(const aValue: Boolean); virtual; + function GetBLOQUEADOValue: SmallInt; virtual; + procedure SetBLOQUEADOValue(const aValue: SmallInt); virtual; + function GetBLOQUEADOIsNull: Boolean; virtual; + procedure SetBLOQUEADOIsNull(const aValue: Boolean); virtual; + function GetEMAILValue: String; virtual; + procedure SetEMAILValue(const aValue: String); virtual; + function GetEMAILIsNull: Boolean; virtual; + procedure SetEMAILIsNull(const aValue: Boolean); virtual; + function GetUSERDAYSSUNValue: Integer; virtual; + procedure SetUSERDAYSSUNValue(const aValue: Integer); virtual; + function GetUSERDAYSSUNIsNull: Boolean; virtual; + procedure SetUSERDAYSSUNIsNull(const aValue: Boolean); virtual; + function GetPRIVILEGEDValue: Integer; virtual; + procedure SetPRIVILEGEDValue(const aValue: Integer); virtual; + function GetPRIVILEGEDIsNull: Boolean; virtual; + procedure SetPRIVILEGEDIsNull(const aValue: Boolean); virtual; + function GetTIPOValue: String; virtual; + procedure SetTIPOValue(const aValue: String); virtual; + function GetTIPOIsNull: Boolean; virtual; + procedure SetTIPOIsNull(const aValue: Boolean); virtual; + function GetID_PERFILValue: Integer; virtual; + procedure SetID_PERFILValue(const aValue: Integer); virtual; + function GetID_PERFILIsNull: Boolean; virtual; + procedure SetID_PERFILIsNull(const aValue: Boolean); virtual; + function GetCHECKSUMValue: String; virtual; + procedure SetCHECKSUMValue(const aValue: String); virtual; + function GetCHECKSUMIsNull: Boolean; virtual; + procedure SetCHECKSUMIsNull(const aValue: Boolean); virtual; + + { Properties } + property ID: Integer read GetIDValue write SetIDValue; + property IDIsNull: Boolean read GetIDIsNull write SetIDIsNull; + property USERNAME: String read GetUSERNAMEValue write SetUSERNAMEValue; + property USERNAMEIsNull: Boolean read GetUSERNAMEIsNull write SetUSERNAMEIsNull; + property LOGIN: String read GetLOGINValue write SetLOGINValue; + property LOGINIsNull: Boolean read GetLOGINIsNull write SetLOGINIsNull; + property PASS: String read GetPASSValue write SetPASSValue; + property PASSIsNull: Boolean read GetPASSIsNull write SetPASSIsNull; + property PASSEXPIRED: DateTime read GetPASSEXPIREDValue write SetPASSEXPIREDValue; + property PASSEXPIREDIsNull: Boolean read GetPASSEXPIREDIsNull write SetPASSEXPIREDIsNull; + property BLOQUEADO: SmallInt read GetBLOQUEADOValue write SetBLOQUEADOValue; + property BLOQUEADOIsNull: Boolean read GetBLOQUEADOIsNull write SetBLOQUEADOIsNull; + property EMAIL: String read GetEMAILValue write SetEMAILValue; + property EMAILIsNull: Boolean read GetEMAILIsNull write SetEMAILIsNull; + property USERDAYSSUN: Integer read GetUSERDAYSSUNValue write SetUSERDAYSSUNValue; + property USERDAYSSUNIsNull: Boolean read GetUSERDAYSSUNIsNull write SetUSERDAYSSUNIsNull; + property PRIVILEGED: Integer read GetPRIVILEGEDValue write SetPRIVILEGEDValue; + property PRIVILEGEDIsNull: Boolean read GetPRIVILEGEDIsNull write SetPRIVILEGEDIsNull; + property TIPO: String read GetTIPOValue write SetTIPOValue; + property TIPOIsNull: Boolean read GetTIPOIsNull write SetTIPOIsNull; + property ID_PERFIL: Integer read GetID_PERFILValue write SetID_PERFILValue; + property ID_PERFILIsNull: Boolean read GetID_PERFILIsNull write SetID_PERFILIsNull; + property CHECKSUM: String read GetCHECKSUMValue write SetCHECKSUMValue; + property CHECKSUMIsNull: Boolean read GetCHECKSUMIsNull write SetCHECKSUMIsNull; + + public + constructor Create(aDataTable: TDADataTable); override; + destructor Destroy; override; + + end; + + { IUSUARIOS_EVENTOS } + IUSUARIOS_EVENTOS = interface(IDAStronglyTypedDataTable) + ['{0E58B658-F2D8-472A-A956-0AD2460750E7}'] + { Property getters and setters } + function GetAPLICACIONValue: String; + procedure SetAPLICACIONValue(const aValue: String); + function GetAPLICACIONIsNull: Boolean; + procedure SetAPLICACIONIsNull(const aValue: Boolean); + function GetID_USUARIOValue: Integer; + procedure SetID_USUARIOValue(const aValue: Integer); + function GetID_USUARIOIsNull: Boolean; + procedure SetID_USUARIOIsNull(const aValue: Boolean); + function GetFECHAValue: String; + procedure SetFECHAValue(const aValue: String); + function GetFECHAIsNull: Boolean; + procedure SetFECHAIsNull(const aValue: Boolean); + function GetHORAValue: String; + procedure SetHORAValue(const aValue: String); + function GetHORAIsNull: Boolean; + procedure SetHORAIsNull(const aValue: Boolean); + function GetFORMValue: String; + procedure SetFORMValue(const aValue: String); + function GetFORMIsNull: Boolean; + procedure SetFORMIsNull(const aValue: Boolean); + function GetTITULO_FORMValue: String; + procedure SetTITULO_FORMValue(const aValue: String); + function GetTITULO_FORMIsNull: Boolean; + procedure SetTITULO_FORMIsNull(const aValue: Boolean); + function GetEVENTOValue: String; + procedure SetEVENTOValue(const aValue: String); + function GetEVENTOIsNull: Boolean; + procedure SetEVENTOIsNull(const aValue: Boolean); + function GetNOTASValue: IROStrings; + function GetNOTASIsNull: Boolean; + procedure SetNOTASIsNull(const aValue: Boolean); + function GetTNAMEValue: String; + procedure SetTNAMEValue(const aValue: String); + function GetTNAMEIsNull: Boolean; + procedure SetTNAMEIsNull(const aValue: Boolean); + + + { Properties } + property APLICACION: String read GetAPLICACIONValue write SetAPLICACIONValue; + property APLICACIONIsNull: Boolean read GetAPLICACIONIsNull write SetAPLICACIONIsNull; + property ID_USUARIO: Integer read GetID_USUARIOValue write SetID_USUARIOValue; + property ID_USUARIOIsNull: Boolean read GetID_USUARIOIsNull write SetID_USUARIOIsNull; + property FECHA: String read GetFECHAValue write SetFECHAValue; + property FECHAIsNull: Boolean read GetFECHAIsNull write SetFECHAIsNull; + property HORA: String read GetHORAValue write SetHORAValue; + property HORAIsNull: Boolean read GetHORAIsNull write SetHORAIsNull; + property FORM: String read GetFORMValue write SetFORMValue; + property FORMIsNull: Boolean read GetFORMIsNull write SetFORMIsNull; + property TITULO_FORM: String read GetTITULO_FORMValue write SetTITULO_FORMValue; + property TITULO_FORMIsNull: Boolean read GetTITULO_FORMIsNull write SetTITULO_FORMIsNull; + property EVENTO: String read GetEVENTOValue write SetEVENTOValue; + property EVENTOIsNull: Boolean read GetEVENTOIsNull write SetEVENTOIsNull; + property NOTAS: IROStrings read GetNOTASValue; + property NOTASIsNull: Boolean read GetNOTASIsNull write SetNOTASIsNull; + property TNAME: String read GetTNAMEValue write SetTNAMEValue; + property TNAMEIsNull: Boolean read GetTNAMEIsNull write SetTNAMEIsNull; + end; + + { TUSUARIOS_EVENTOSDataTableRules } + TUSUARIOS_EVENTOSDataTableRules = class(TDADataTableRules, IUSUARIOS_EVENTOS) + private + f_NOTAS: IROStrings; + procedure NOTAS_OnChange(Sender: TObject); + protected + { Property getters and setters } + function GetAPLICACIONValue: String; virtual; + procedure SetAPLICACIONValue(const aValue: String); virtual; + function GetAPLICACIONIsNull: Boolean; virtual; + procedure SetAPLICACIONIsNull(const aValue: Boolean); virtual; + function GetID_USUARIOValue: Integer; virtual; + procedure SetID_USUARIOValue(const aValue: Integer); virtual; + function GetID_USUARIOIsNull: Boolean; virtual; + procedure SetID_USUARIOIsNull(const aValue: Boolean); virtual; + function GetFECHAValue: String; virtual; + procedure SetFECHAValue(const aValue: String); virtual; + function GetFECHAIsNull: Boolean; virtual; + procedure SetFECHAIsNull(const aValue: Boolean); virtual; + function GetHORAValue: String; virtual; + procedure SetHORAValue(const aValue: String); virtual; + function GetHORAIsNull: Boolean; virtual; + procedure SetHORAIsNull(const aValue: Boolean); virtual; + function GetFORMValue: String; virtual; + procedure SetFORMValue(const aValue: String); virtual; + function GetFORMIsNull: Boolean; virtual; + procedure SetFORMIsNull(const aValue: Boolean); virtual; + function GetTITULO_FORMValue: String; virtual; + procedure SetTITULO_FORMValue(const aValue: String); virtual; + function GetTITULO_FORMIsNull: Boolean; virtual; + procedure SetTITULO_FORMIsNull(const aValue: Boolean); virtual; + function GetEVENTOValue: String; virtual; + procedure SetEVENTOValue(const aValue: String); virtual; + function GetEVENTOIsNull: Boolean; virtual; + procedure SetEVENTOIsNull(const aValue: Boolean); virtual; + function GetNOTASValue: IROStrings; virtual; + function GetNOTASIsNull: Boolean; virtual; + procedure SetNOTASIsNull(const aValue: Boolean); virtual; + function GetTNAMEValue: String; virtual; + procedure SetTNAMEValue(const aValue: String); virtual; + function GetTNAMEIsNull: Boolean; virtual; + procedure SetTNAMEIsNull(const aValue: Boolean); virtual; + + { Properties } + property APLICACION: String read GetAPLICACIONValue write SetAPLICACIONValue; + property APLICACIONIsNull: Boolean read GetAPLICACIONIsNull write SetAPLICACIONIsNull; + property ID_USUARIO: Integer read GetID_USUARIOValue write SetID_USUARIOValue; + property ID_USUARIOIsNull: Boolean read GetID_USUARIOIsNull write SetID_USUARIOIsNull; + property FECHA: String read GetFECHAValue write SetFECHAValue; + property FECHAIsNull: Boolean read GetFECHAIsNull write SetFECHAIsNull; + property HORA: String read GetHORAValue write SetHORAValue; + property HORAIsNull: Boolean read GetHORAIsNull write SetHORAIsNull; + property FORM: String read GetFORMValue write SetFORMValue; + property FORMIsNull: Boolean read GetFORMIsNull write SetFORMIsNull; + property TITULO_FORM: String read GetTITULO_FORMValue write SetTITULO_FORMValue; + property TITULO_FORMIsNull: Boolean read GetTITULO_FORMIsNull write SetTITULO_FORMIsNull; + property EVENTO: String read GetEVENTOValue write SetEVENTOValue; + property EVENTOIsNull: Boolean read GetEVENTOIsNull write SetEVENTOIsNull; + property NOTAS: IROStrings read GetNOTASValue; + property NOTASIsNull: Boolean read GetNOTASIsNull write SetNOTASIsNull; + property TNAME: String read GetTNAMEValue write SetTNAMEValue; + property TNAMEIsNull: Boolean read GetTNAMEIsNull write SetTNAMEIsNull; + + public + constructor Create(aDataTable: TDADataTable); override; + destructor Destroy; override; + + end; + + { IUSUARIOS_LOGON } + IUSUARIOS_LOGON = interface(IDAStronglyTypedDataTable) + ['{E5776819-8DAB-458B-8369-46D0DA888AFC}'] + { Property getters and setters } + function GetLOGONIDValue: String; + procedure SetLOGONIDValue(const aValue: String); + function GetLOGONIDIsNull: Boolean; + procedure SetLOGONIDIsNull(const aValue: Boolean); + function GetID_USUARIOValue: Integer; + procedure SetID_USUARIOValue(const aValue: Integer); + function GetID_USUARIOIsNull: Boolean; + procedure SetID_USUARIOIsNull(const aValue: Boolean); + function GetAPLICACIONValue: String; + procedure SetAPLICACIONValue(const aValue: String); + function GetAPLICACIONIsNull: Boolean; + procedure SetAPLICACIONIsNull(const aValue: Boolean); + function GetEQUIPOValue: String; + procedure SetEQUIPOValue(const aValue: String); + function GetEQUIPOIsNull: Boolean; + procedure SetEQUIPOIsNull(const aValue: Boolean); + function GetDATAValue: String; + procedure SetDATAValue(const aValue: String); + function GetDATAIsNull: Boolean; + procedure SetDATAIsNull(const aValue: Boolean); + + + { Properties } + property LOGONID: String read GetLOGONIDValue write SetLOGONIDValue; + property LOGONIDIsNull: Boolean read GetLOGONIDIsNull write SetLOGONIDIsNull; + property ID_USUARIO: Integer read GetID_USUARIOValue write SetID_USUARIOValue; + property ID_USUARIOIsNull: Boolean read GetID_USUARIOIsNull write SetID_USUARIOIsNull; + property APLICACION: String read GetAPLICACIONValue write SetAPLICACIONValue; + property APLICACIONIsNull: Boolean read GetAPLICACIONIsNull write SetAPLICACIONIsNull; + property EQUIPO: String read GetEQUIPOValue write SetEQUIPOValue; + property EQUIPOIsNull: Boolean read GetEQUIPOIsNull write SetEQUIPOIsNull; + property DATA: String read GetDATAValue write SetDATAValue; + property DATAIsNull: Boolean read GetDATAIsNull write SetDATAIsNull; + end; + + { TUSUARIOS_LOGONDataTableRules } + TUSUARIOS_LOGONDataTableRules = class(TDADataTableRules, IUSUARIOS_LOGON) + private + protected + { Property getters and setters } + function GetLOGONIDValue: String; virtual; + procedure SetLOGONIDValue(const aValue: String); virtual; + function GetLOGONIDIsNull: Boolean; virtual; + procedure SetLOGONIDIsNull(const aValue: Boolean); virtual; + function GetID_USUARIOValue: Integer; virtual; + procedure SetID_USUARIOValue(const aValue: Integer); virtual; + function GetID_USUARIOIsNull: Boolean; virtual; + procedure SetID_USUARIOIsNull(const aValue: Boolean); virtual; + function GetAPLICACIONValue: String; virtual; + procedure SetAPLICACIONValue(const aValue: String); virtual; + function GetAPLICACIONIsNull: Boolean; virtual; + procedure SetAPLICACIONIsNull(const aValue: Boolean); virtual; + function GetEQUIPOValue: String; virtual; + procedure SetEQUIPOValue(const aValue: String); virtual; + function GetEQUIPOIsNull: Boolean; virtual; + procedure SetEQUIPOIsNull(const aValue: Boolean); virtual; + function GetDATAValue: String; virtual; + procedure SetDATAValue(const aValue: String); virtual; + function GetDATAIsNull: Boolean; virtual; + procedure SetDATAIsNull(const aValue: Boolean); virtual; + + { Properties } + property LOGONID: String read GetLOGONIDValue write SetLOGONIDValue; + property LOGONIDIsNull: Boolean read GetLOGONIDIsNull write SetLOGONIDIsNull; + property ID_USUARIO: Integer read GetID_USUARIOValue write SetID_USUARIOValue; + property ID_USUARIOIsNull: Boolean read GetID_USUARIOIsNull write SetID_USUARIOIsNull; + property APLICACION: String read GetAPLICACIONValue write SetAPLICACIONValue; + property APLICACIONIsNull: Boolean read GetAPLICACIONIsNull write SetAPLICACIONIsNull; + property EQUIPO: String read GetEQUIPOValue write SetEQUIPOValue; + property EQUIPOIsNull: Boolean read GetEQUIPOIsNull write SetEQUIPOIsNull; + property DATA: String read GetDATAValue write SetDATAValue; + property DATAIsNull: Boolean read GetDATAIsNull write SetDATAIsNull; + + public + constructor Create(aDataTable: TDADataTable); override; + destructor Destroy; override; + + end; + + { IPERFILES } + IPERFILES = interface(IDAStronglyTypedDataTable) + ['{C2F94872-5B28-4AED-89EB-FB5E46387CE1}'] + { Property getters and setters } + function GetIDValue: Integer; + procedure SetIDValue(const aValue: Integer); + function GetIDIsNull: Boolean; + procedure SetIDIsNull(const aValue: Boolean); + function GetUSERNAMEValue: String; + procedure SetUSERNAMEValue(const aValue: String); + function GetUSERNAMEIsNull: Boolean; + procedure SetUSERNAMEIsNull(const aValue: Boolean); + function GetLOGINValue: String; + procedure SetLOGINValue(const aValue: String); + function GetLOGINIsNull: Boolean; + procedure SetLOGINIsNull(const aValue: Boolean); + function GetTIPOValue: String; + procedure SetTIPOValue(const aValue: String); + function GetTIPOIsNull: Boolean; + procedure SetTIPOIsNull(const aValue: Boolean); + + + { Properties } + property ID: Integer read GetIDValue write SetIDValue; + property IDIsNull: Boolean read GetIDIsNull write SetIDIsNull; + property USERNAME: String read GetUSERNAMEValue write SetUSERNAMEValue; + property USERNAMEIsNull: Boolean read GetUSERNAMEIsNull write SetUSERNAMEIsNull; + property LOGIN: String read GetLOGINValue write SetLOGINValue; + property LOGINIsNull: Boolean read GetLOGINIsNull write SetLOGINIsNull; + property TIPO: String read GetTIPOValue write SetTIPOValue; + property TIPOIsNull: Boolean read GetTIPOIsNull write SetTIPOIsNull; + end; + + { TPERFILESDataTableRules } + TPERFILESDataTableRules = class(TDADataTableRules, IPERFILES) + private + protected + { Property getters and setters } + function GetIDValue: Integer; virtual; + procedure SetIDValue(const aValue: Integer); virtual; + function GetIDIsNull: Boolean; virtual; + procedure SetIDIsNull(const aValue: Boolean); virtual; + function GetUSERNAMEValue: String; virtual; + procedure SetUSERNAMEValue(const aValue: String); virtual; + function GetUSERNAMEIsNull: Boolean; virtual; + procedure SetUSERNAMEIsNull(const aValue: Boolean); virtual; + function GetLOGINValue: String; virtual; + procedure SetLOGINValue(const aValue: String); virtual; + function GetLOGINIsNull: Boolean; virtual; + procedure SetLOGINIsNull(const aValue: Boolean); virtual; + function GetTIPOValue: String; virtual; + procedure SetTIPOValue(const aValue: String); virtual; + function GetTIPOIsNull: Boolean; virtual; + procedure SetTIPOIsNull(const aValue: Boolean); virtual; + + { Properties } + property ID: Integer read GetIDValue write SetIDValue; + property IDIsNull: Boolean read GetIDIsNull write SetIDIsNull; + property USERNAME: String read GetUSERNAMEValue write SetUSERNAMEValue; + property USERNAMEIsNull: Boolean read GetUSERNAMEIsNull write SetUSERNAMEIsNull; + property LOGIN: String read GetLOGINValue write SetLOGINValue; + property LOGINIsNull: Boolean read GetLOGINIsNull write SetLOGINIsNull; + property TIPO: String read GetTIPOValue write SetTIPOValue; + property TIPOIsNull: Boolean read GetTIPOIsNull write SetTIPOIsNull; + + public + constructor Create(aDataTable: TDADataTable); override; + destructor Destroy; override; + + end; + + { IPERMISOS } + IPERMISOS = interface(IDAStronglyTypedDataTable) + ['{EDAEF3B4-A7AB-4BCE-BBBE-932549913E2D}'] + { Property getters and setters } + function GetIDValue: Integer; + procedure SetIDValue(const aValue: Integer); + function GetIDIsNull: Boolean; + procedure SetIDIsNull(const aValue: Boolean); + function GetID_USUARIOValue: Integer; + procedure SetID_USUARIOValue(const aValue: Integer); + function GetID_USUARIOIsNull: Boolean; + procedure SetID_USUARIOIsNull(const aValue: Boolean); + function GetMODULOValue: String; + procedure SetMODULOValue(const aValue: String); + function GetMODULOIsNull: Boolean; + procedure SetMODULOIsNull(const aValue: Boolean); + function GetNOMBRECOMPValue: String; + procedure SetNOMBRECOMPValue(const aValue: String); + function GetNOMBRECOMPIsNull: Boolean; + procedure SetNOMBRECOMPIsNull(const aValue: Boolean); + function GetCHECKSUMValue: String; + procedure SetCHECKSUMValue(const aValue: String); + function GetCHECKSUMIsNull: Boolean; + procedure SetCHECKSUMIsNull(const aValue: Boolean); + + + { Properties } + property ID: Integer read GetIDValue write SetIDValue; + property IDIsNull: Boolean read GetIDIsNull write SetIDIsNull; + property ID_USUARIO: Integer read GetID_USUARIOValue write SetID_USUARIOValue; + property ID_USUARIOIsNull: Boolean read GetID_USUARIOIsNull write SetID_USUARIOIsNull; + property MODULO: String read GetMODULOValue write SetMODULOValue; + property MODULOIsNull: Boolean read GetMODULOIsNull write SetMODULOIsNull; + property NOMBRECOMP: String read GetNOMBRECOMPValue write SetNOMBRECOMPValue; + property NOMBRECOMPIsNull: Boolean read GetNOMBRECOMPIsNull write SetNOMBRECOMPIsNull; + property CHECKSUM: String read GetCHECKSUMValue write SetCHECKSUMValue; + property CHECKSUMIsNull: Boolean read GetCHECKSUMIsNull write SetCHECKSUMIsNull; + end; + + { TPERMISOSDataTableRules } + TPERMISOSDataTableRules = class(TDADataTableRules, IPERMISOS) + private + protected + { Property getters and setters } + function GetIDValue: Integer; virtual; + procedure SetIDValue(const aValue: Integer); virtual; + function GetIDIsNull: Boolean; virtual; + procedure SetIDIsNull(const aValue: Boolean); virtual; + function GetID_USUARIOValue: Integer; virtual; + procedure SetID_USUARIOValue(const aValue: Integer); virtual; + function GetID_USUARIOIsNull: Boolean; virtual; + procedure SetID_USUARIOIsNull(const aValue: Boolean); virtual; + function GetMODULOValue: String; virtual; + procedure SetMODULOValue(const aValue: String); virtual; + function GetMODULOIsNull: Boolean; virtual; + procedure SetMODULOIsNull(const aValue: Boolean); virtual; + function GetNOMBRECOMPValue: String; virtual; + procedure SetNOMBRECOMPValue(const aValue: String); virtual; + function GetNOMBRECOMPIsNull: Boolean; virtual; + procedure SetNOMBRECOMPIsNull(const aValue: Boolean); virtual; + function GetCHECKSUMValue: String; virtual; + procedure SetCHECKSUMValue(const aValue: String); virtual; + function GetCHECKSUMIsNull: Boolean; virtual; + procedure SetCHECKSUMIsNull(const aValue: Boolean); virtual; + + { Properties } + property ID: Integer read GetIDValue write SetIDValue; + property IDIsNull: Boolean read GetIDIsNull write SetIDIsNull; + property ID_USUARIO: Integer read GetID_USUARIOValue write SetID_USUARIOValue; + property ID_USUARIOIsNull: Boolean read GetID_USUARIOIsNull write SetID_USUARIOIsNull; + property MODULO: String read GetMODULOValue write SetMODULOValue; + property MODULOIsNull: Boolean read GetMODULOIsNull write SetMODULOIsNull; + property NOMBRECOMP: String read GetNOMBRECOMPValue write SetNOMBRECOMPValue; + property NOMBRECOMPIsNull: Boolean read GetNOMBRECOMPIsNull write SetNOMBRECOMPIsNull; + property CHECKSUM: String read GetCHECKSUMValue write SetCHECKSUMValue; + property CHECKSUMIsNull: Boolean read GetCHECKSUMIsNull write SetCHECKSUMIsNull; + + public + constructor Create(aDataTable: TDADataTable); override; + destructor Destroy; override; + + end; + + { IPERMISOSEX } + IPERMISOSEX = interface(IDAStronglyTypedDataTable) + ['{A7EE9F4F-588F-4A23-B57C-540AB2AE9B42}'] + { Property getters and setters } + function GetIDValue: Integer; + procedure SetIDValue(const aValue: Integer); + function GetIDIsNull: Boolean; + procedure SetIDIsNull(const aValue: Boolean); + function GetID_USUARIOValue: Integer; + procedure SetID_USUARIOValue(const aValue: Integer); + function GetID_USUARIOIsNull: Boolean; + procedure SetID_USUARIOIsNull(const aValue: Boolean); + function GetMODULOValue: String; + procedure SetMODULOValue(const aValue: String); + function GetMODULOIsNull: Boolean; + procedure SetMODULOIsNull(const aValue: Boolean); + function GetNOMBRECOMPValue: String; + procedure SetNOMBRECOMPValue(const aValue: String); + function GetNOMBRECOMPIsNull: Boolean; + procedure SetNOMBRECOMPIsNull(const aValue: Boolean); + function GetNOMBREFORMValue: String; + procedure SetNOMBREFORMValue(const aValue: String); + function GetNOMBREFORMIsNull: Boolean; + procedure SetNOMBREFORMIsNull(const aValue: Boolean); + function GetCHECKSUMValue: String; + procedure SetCHECKSUMValue(const aValue: String); + function GetCHECKSUMIsNull: Boolean; + procedure SetCHECKSUMIsNull(const aValue: Boolean); + + + { Properties } + property ID: Integer read GetIDValue write SetIDValue; + property IDIsNull: Boolean read GetIDIsNull write SetIDIsNull; + property ID_USUARIO: Integer read GetID_USUARIOValue write SetID_USUARIOValue; + property ID_USUARIOIsNull: Boolean read GetID_USUARIOIsNull write SetID_USUARIOIsNull; + property MODULO: String read GetMODULOValue write SetMODULOValue; + property MODULOIsNull: Boolean read GetMODULOIsNull write SetMODULOIsNull; + property NOMBRECOMP: String read GetNOMBRECOMPValue write SetNOMBRECOMPValue; + property NOMBRECOMPIsNull: Boolean read GetNOMBRECOMPIsNull write SetNOMBRECOMPIsNull; + property NOMBREFORM: String read GetNOMBREFORMValue write SetNOMBREFORMValue; + property NOMBREFORMIsNull: Boolean read GetNOMBREFORMIsNull write SetNOMBREFORMIsNull; + property CHECKSUM: String read GetCHECKSUMValue write SetCHECKSUMValue; + property CHECKSUMIsNull: Boolean read GetCHECKSUMIsNull write SetCHECKSUMIsNull; + end; + + { TPERMISOSEXDataTableRules } + TPERMISOSEXDataTableRules = class(TDADataTableRules, IPERMISOSEX) + private + protected + { Property getters and setters } + function GetIDValue: Integer; virtual; + procedure SetIDValue(const aValue: Integer); virtual; + function GetIDIsNull: Boolean; virtual; + procedure SetIDIsNull(const aValue: Boolean); virtual; + function GetID_USUARIOValue: Integer; virtual; + procedure SetID_USUARIOValue(const aValue: Integer); virtual; + function GetID_USUARIOIsNull: Boolean; virtual; + procedure SetID_USUARIOIsNull(const aValue: Boolean); virtual; + function GetMODULOValue: String; virtual; + procedure SetMODULOValue(const aValue: String); virtual; + function GetMODULOIsNull: Boolean; virtual; + procedure SetMODULOIsNull(const aValue: Boolean); virtual; + function GetNOMBRECOMPValue: String; virtual; + procedure SetNOMBRECOMPValue(const aValue: String); virtual; + function GetNOMBRECOMPIsNull: Boolean; virtual; + procedure SetNOMBRECOMPIsNull(const aValue: Boolean); virtual; + function GetNOMBREFORMValue: String; virtual; + procedure SetNOMBREFORMValue(const aValue: String); virtual; + function GetNOMBREFORMIsNull: Boolean; virtual; + procedure SetNOMBREFORMIsNull(const aValue: Boolean); virtual; + function GetCHECKSUMValue: String; virtual; + procedure SetCHECKSUMValue(const aValue: String); virtual; + function GetCHECKSUMIsNull: Boolean; virtual; + procedure SetCHECKSUMIsNull(const aValue: Boolean); virtual; + + { Properties } + property ID: Integer read GetIDValue write SetIDValue; + property IDIsNull: Boolean read GetIDIsNull write SetIDIsNull; + property ID_USUARIO: Integer read GetID_USUARIOValue write SetID_USUARIOValue; + property ID_USUARIOIsNull: Boolean read GetID_USUARIOIsNull write SetID_USUARIOIsNull; + property MODULO: String read GetMODULOValue write SetMODULOValue; + property MODULOIsNull: Boolean read GetMODULOIsNull write SetMODULOIsNull; + property NOMBRECOMP: String read GetNOMBRECOMPValue write SetNOMBRECOMPValue; + property NOMBRECOMPIsNull: Boolean read GetNOMBRECOMPIsNull write SetNOMBRECOMPIsNull; + property NOMBREFORM: String read GetNOMBREFORMValue write SetNOMBREFORMValue; + property NOMBREFORMIsNull: Boolean read GetNOMBREFORMIsNull write SetNOMBREFORMIsNull; + property CHECKSUM: String read GetCHECKSUMValue write SetCHECKSUMValue; + property CHECKSUMIsNull: Boolean read GetCHECKSUMIsNull write SetCHECKSUMIsNull; + + public + constructor Create(aDataTable: TDADataTable); override; + destructor Destroy; override; + + end; + +implementation + +uses Variants, uROBinaryHelpers; + +{ TUSUARIOSDataTableRules } +constructor TUSUARIOSDataTableRules.Create(aDataTable: TDADataTable); +begin + inherited; +end; + +destructor TUSUARIOSDataTableRules.Destroy; +begin + inherited; +end; + +function TUSUARIOSDataTableRules.GetIDValue: Integer; +begin + result := DataTable.Fields[idx_USUARIOSID].AsInteger; +end; + +procedure TUSUARIOSDataTableRules.SetIDValue(const aValue: Integer); +begin + DataTable.Fields[idx_USUARIOSID].AsInteger := aValue; +end; + +function TUSUARIOSDataTableRules.GetIDIsNull: boolean; +begin + result := DataTable.Fields[idx_USUARIOSID].IsNull; +end; + +procedure TUSUARIOSDataTableRules.SetIDIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_USUARIOSID].AsVariant := Null; +end; + +function TUSUARIOSDataTableRules.GetUSERNAMEValue: String; +begin + result := DataTable.Fields[idx_USUARIOSUSERNAME].AsString; +end; + +procedure TUSUARIOSDataTableRules.SetUSERNAMEValue(const aValue: String); +begin + DataTable.Fields[idx_USUARIOSUSERNAME].AsString := aValue; +end; + +function TUSUARIOSDataTableRules.GetUSERNAMEIsNull: boolean; +begin + result := DataTable.Fields[idx_USUARIOSUSERNAME].IsNull; +end; + +procedure TUSUARIOSDataTableRules.SetUSERNAMEIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_USUARIOSUSERNAME].AsVariant := Null; +end; + +function TUSUARIOSDataTableRules.GetLOGINValue: String; +begin + result := DataTable.Fields[idx_USUARIOSLOGIN].AsString; +end; + +procedure TUSUARIOSDataTableRules.SetLOGINValue(const aValue: String); +begin + DataTable.Fields[idx_USUARIOSLOGIN].AsString := aValue; +end; + +function TUSUARIOSDataTableRules.GetLOGINIsNull: boolean; +begin + result := DataTable.Fields[idx_USUARIOSLOGIN].IsNull; +end; + +procedure TUSUARIOSDataTableRules.SetLOGINIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_USUARIOSLOGIN].AsVariant := Null; +end; + +function TUSUARIOSDataTableRules.GetPASSValue: String; +begin + result := DataTable.Fields[idx_USUARIOSPASS].AsString; +end; + +procedure TUSUARIOSDataTableRules.SetPASSValue(const aValue: String); +begin + DataTable.Fields[idx_USUARIOSPASS].AsString := aValue; +end; + +function TUSUARIOSDataTableRules.GetPASSIsNull: boolean; +begin + result := DataTable.Fields[idx_USUARIOSPASS].IsNull; +end; + +procedure TUSUARIOSDataTableRules.SetPASSIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_USUARIOSPASS].AsVariant := Null; +end; + +function TUSUARIOSDataTableRules.GetPASSEXPIREDValue: DateTime; +begin + result := DataTable.Fields[idx_USUARIOSPASSEXPIRED].AsDateTime; +end; + +procedure TUSUARIOSDataTableRules.SetPASSEXPIREDValue(const aValue: DateTime); +begin + DataTable.Fields[idx_USUARIOSPASSEXPIRED].AsDateTime := aValue; +end; + +function TUSUARIOSDataTableRules.GetPASSEXPIREDIsNull: boolean; +begin + result := DataTable.Fields[idx_USUARIOSPASSEXPIRED].IsNull; +end; + +procedure TUSUARIOSDataTableRules.SetPASSEXPIREDIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_USUARIOSPASSEXPIRED].AsVariant := Null; +end; + +function TUSUARIOSDataTableRules.GetBLOQUEADOValue: SmallInt; +begin + result := DataTable.Fields[idx_USUARIOSBLOQUEADO].AsSmallInt; +end; + +procedure TUSUARIOSDataTableRules.SetBLOQUEADOValue(const aValue: SmallInt); +begin + DataTable.Fields[idx_USUARIOSBLOQUEADO].AsSmallInt := aValue; +end; + +function TUSUARIOSDataTableRules.GetBLOQUEADOIsNull: boolean; +begin + result := DataTable.Fields[idx_USUARIOSBLOQUEADO].IsNull; +end; + +procedure TUSUARIOSDataTableRules.SetBLOQUEADOIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_USUARIOSBLOQUEADO].AsVariant := Null; +end; + +function TUSUARIOSDataTableRules.GetEMAILValue: String; +begin + result := DataTable.Fields[idx_USUARIOSEMAIL].AsString; +end; + +procedure TUSUARIOSDataTableRules.SetEMAILValue(const aValue: String); +begin + DataTable.Fields[idx_USUARIOSEMAIL].AsString := aValue; +end; + +function TUSUARIOSDataTableRules.GetEMAILIsNull: boolean; +begin + result := DataTable.Fields[idx_USUARIOSEMAIL].IsNull; +end; + +procedure TUSUARIOSDataTableRules.SetEMAILIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_USUARIOSEMAIL].AsVariant := Null; +end; + +function TUSUARIOSDataTableRules.GetUSERDAYSSUNValue: Integer; +begin + result := DataTable.Fields[idx_USUARIOSUSERDAYSSUN].AsInteger; +end; + +procedure TUSUARIOSDataTableRules.SetUSERDAYSSUNValue(const aValue: Integer); +begin + DataTable.Fields[idx_USUARIOSUSERDAYSSUN].AsInteger := aValue; +end; + +function TUSUARIOSDataTableRules.GetUSERDAYSSUNIsNull: boolean; +begin + result := DataTable.Fields[idx_USUARIOSUSERDAYSSUN].IsNull; +end; + +procedure TUSUARIOSDataTableRules.SetUSERDAYSSUNIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_USUARIOSUSERDAYSSUN].AsVariant := Null; +end; + +function TUSUARIOSDataTableRules.GetPRIVILEGEDValue: Integer; +begin + result := DataTable.Fields[idx_USUARIOSPRIVILEGED].AsInteger; +end; + +procedure TUSUARIOSDataTableRules.SetPRIVILEGEDValue(const aValue: Integer); +begin + DataTable.Fields[idx_USUARIOSPRIVILEGED].AsInteger := aValue; +end; + +function TUSUARIOSDataTableRules.GetPRIVILEGEDIsNull: boolean; +begin + result := DataTable.Fields[idx_USUARIOSPRIVILEGED].IsNull; +end; + +procedure TUSUARIOSDataTableRules.SetPRIVILEGEDIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_USUARIOSPRIVILEGED].AsVariant := Null; +end; + +function TUSUARIOSDataTableRules.GetTIPOValue: String; +begin + result := DataTable.Fields[idx_USUARIOSTIPO].AsString; +end; + +procedure TUSUARIOSDataTableRules.SetTIPOValue(const aValue: String); +begin + DataTable.Fields[idx_USUARIOSTIPO].AsString := aValue; +end; + +function TUSUARIOSDataTableRules.GetTIPOIsNull: boolean; +begin + result := DataTable.Fields[idx_USUARIOSTIPO].IsNull; +end; + +procedure TUSUARIOSDataTableRules.SetTIPOIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_USUARIOSTIPO].AsVariant := Null; +end; + +function TUSUARIOSDataTableRules.GetID_PERFILValue: Integer; +begin + result := DataTable.Fields[idx_USUARIOSID_PERFIL].AsInteger; +end; + +procedure TUSUARIOSDataTableRules.SetID_PERFILValue(const aValue: Integer); +begin + DataTable.Fields[idx_USUARIOSID_PERFIL].AsInteger := aValue; +end; + +function TUSUARIOSDataTableRules.GetID_PERFILIsNull: boolean; +begin + result := DataTable.Fields[idx_USUARIOSID_PERFIL].IsNull; +end; + +procedure TUSUARIOSDataTableRules.SetID_PERFILIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_USUARIOSID_PERFIL].AsVariant := Null; +end; + +function TUSUARIOSDataTableRules.GetCHECKSUMValue: String; +begin + result := DataTable.Fields[idx_USUARIOSCHECKSUM].AsString; +end; + +procedure TUSUARIOSDataTableRules.SetCHECKSUMValue(const aValue: String); +begin + DataTable.Fields[idx_USUARIOSCHECKSUM].AsString := aValue; +end; + +function TUSUARIOSDataTableRules.GetCHECKSUMIsNull: boolean; +begin + result := DataTable.Fields[idx_USUARIOSCHECKSUM].IsNull; +end; + +procedure TUSUARIOSDataTableRules.SetCHECKSUMIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_USUARIOSCHECKSUM].AsVariant := Null; +end; + + +{ TUSUARIOS_EVENTOSDataTableRules } +constructor TUSUARIOS_EVENTOSDataTableRules.Create(aDataTable: TDADataTable); +var + StrList: TStringList; +begin + inherited; + + StrList := TStringList.Create; + StrList.OnChange := NOTAS_OnChange; + f_NOTAS := NewROStrings(StrList,True); +end; + +destructor TUSUARIOS_EVENTOSDataTableRules.Destroy; +begin + inherited; +end; + +procedure TUSUARIOS_EVENTOSDataTableRules.NOTAS_OnChange(Sender: TObject); +begin + if DataTable.Editing then DataTable.Fields[idx_USUARIOS_EVENTOSNOTAS].AsVariant := TStringList(Sender).Text; +end; + +function TUSUARIOS_EVENTOSDataTableRules.GetAPLICACIONValue: String; +begin + result := DataTable.Fields[idx_USUARIOS_EVENTOSAPLICACION].AsString; +end; + +procedure TUSUARIOS_EVENTOSDataTableRules.SetAPLICACIONValue(const aValue: String); +begin + DataTable.Fields[idx_USUARIOS_EVENTOSAPLICACION].AsString := aValue; +end; + +function TUSUARIOS_EVENTOSDataTableRules.GetAPLICACIONIsNull: boolean; +begin + result := DataTable.Fields[idx_USUARIOS_EVENTOSAPLICACION].IsNull; +end; + +procedure TUSUARIOS_EVENTOSDataTableRules.SetAPLICACIONIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_USUARIOS_EVENTOSAPLICACION].AsVariant := Null; +end; + +function TUSUARIOS_EVENTOSDataTableRules.GetID_USUARIOValue: Integer; +begin + result := DataTable.Fields[idx_USUARIOS_EVENTOSID_USUARIO].AsInteger; +end; + +procedure TUSUARIOS_EVENTOSDataTableRules.SetID_USUARIOValue(const aValue: Integer); +begin + DataTable.Fields[idx_USUARIOS_EVENTOSID_USUARIO].AsInteger := aValue; +end; + +function TUSUARIOS_EVENTOSDataTableRules.GetID_USUARIOIsNull: boolean; +begin + result := DataTable.Fields[idx_USUARIOS_EVENTOSID_USUARIO].IsNull; +end; + +procedure TUSUARIOS_EVENTOSDataTableRules.SetID_USUARIOIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_USUARIOS_EVENTOSID_USUARIO].AsVariant := Null; +end; + +function TUSUARIOS_EVENTOSDataTableRules.GetFECHAValue: String; +begin + result := DataTable.Fields[idx_USUARIOS_EVENTOSFECHA].AsString; +end; + +procedure TUSUARIOS_EVENTOSDataTableRules.SetFECHAValue(const aValue: String); +begin + DataTable.Fields[idx_USUARIOS_EVENTOSFECHA].AsString := aValue; +end; + +function TUSUARIOS_EVENTOSDataTableRules.GetFECHAIsNull: boolean; +begin + result := DataTable.Fields[idx_USUARIOS_EVENTOSFECHA].IsNull; +end; + +procedure TUSUARIOS_EVENTOSDataTableRules.SetFECHAIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_USUARIOS_EVENTOSFECHA].AsVariant := Null; +end; + +function TUSUARIOS_EVENTOSDataTableRules.GetHORAValue: String; +begin + result := DataTable.Fields[idx_USUARIOS_EVENTOSHORA].AsString; +end; + +procedure TUSUARIOS_EVENTOSDataTableRules.SetHORAValue(const aValue: String); +begin + DataTable.Fields[idx_USUARIOS_EVENTOSHORA].AsString := aValue; +end; + +function TUSUARIOS_EVENTOSDataTableRules.GetHORAIsNull: boolean; +begin + result := DataTable.Fields[idx_USUARIOS_EVENTOSHORA].IsNull; +end; + +procedure TUSUARIOS_EVENTOSDataTableRules.SetHORAIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_USUARIOS_EVENTOSHORA].AsVariant := Null; +end; + +function TUSUARIOS_EVENTOSDataTableRules.GetFORMValue: String; +begin + result := DataTable.Fields[idx_USUARIOS_EVENTOSFORM].AsString; +end; + +procedure TUSUARIOS_EVENTOSDataTableRules.SetFORMValue(const aValue: String); +begin + DataTable.Fields[idx_USUARIOS_EVENTOSFORM].AsString := aValue; +end; + +function TUSUARIOS_EVENTOSDataTableRules.GetFORMIsNull: boolean; +begin + result := DataTable.Fields[idx_USUARIOS_EVENTOSFORM].IsNull; +end; + +procedure TUSUARIOS_EVENTOSDataTableRules.SetFORMIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_USUARIOS_EVENTOSFORM].AsVariant := Null; +end; + +function TUSUARIOS_EVENTOSDataTableRules.GetTITULO_FORMValue: String; +begin + result := DataTable.Fields[idx_USUARIOS_EVENTOSTITULO_FORM].AsString; +end; + +procedure TUSUARIOS_EVENTOSDataTableRules.SetTITULO_FORMValue(const aValue: String); +begin + DataTable.Fields[idx_USUARIOS_EVENTOSTITULO_FORM].AsString := aValue; +end; + +function TUSUARIOS_EVENTOSDataTableRules.GetTITULO_FORMIsNull: boolean; +begin + result := DataTable.Fields[idx_USUARIOS_EVENTOSTITULO_FORM].IsNull; +end; + +procedure TUSUARIOS_EVENTOSDataTableRules.SetTITULO_FORMIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_USUARIOS_EVENTOSTITULO_FORM].AsVariant := Null; +end; + +function TUSUARIOS_EVENTOSDataTableRules.GetEVENTOValue: String; +begin + result := DataTable.Fields[idx_USUARIOS_EVENTOSEVENTO].AsString; +end; + +procedure TUSUARIOS_EVENTOSDataTableRules.SetEVENTOValue(const aValue: String); +begin + DataTable.Fields[idx_USUARIOS_EVENTOSEVENTO].AsString := aValue; +end; + +function TUSUARIOS_EVENTOSDataTableRules.GetEVENTOIsNull: boolean; +begin + result := DataTable.Fields[idx_USUARIOS_EVENTOSEVENTO].IsNull; +end; + +procedure TUSUARIOS_EVENTOSDataTableRules.SetEVENTOIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_USUARIOS_EVENTOSEVENTO].AsVariant := Null; +end; + +function TUSUARIOS_EVENTOSDataTableRules.GetNOTASValue: IROStrings; +begin + result := f_NOTAS; + result.Text := DataTable.Fields[idx_USUARIOS_EVENTOSNOTAS].AsString; +end; + +function TUSUARIOS_EVENTOSDataTableRules.GetNOTASIsNull: boolean; +begin + result := DataTable.Fields[idx_USUARIOS_EVENTOSNOTAS].IsNull; +end; + +procedure TUSUARIOS_EVENTOSDataTableRules.SetNOTASIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_USUARIOS_EVENTOSNOTAS].AsVariant := Null; +end; + +function TUSUARIOS_EVENTOSDataTableRules.GetTNAMEValue: String; +begin + result := DataTable.Fields[idx_USUARIOS_EVENTOSTNAME].AsString; +end; + +procedure TUSUARIOS_EVENTOSDataTableRules.SetTNAMEValue(const aValue: String); +begin + DataTable.Fields[idx_USUARIOS_EVENTOSTNAME].AsString := aValue; +end; + +function TUSUARIOS_EVENTOSDataTableRules.GetTNAMEIsNull: boolean; +begin + result := DataTable.Fields[idx_USUARIOS_EVENTOSTNAME].IsNull; +end; + +procedure TUSUARIOS_EVENTOSDataTableRules.SetTNAMEIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_USUARIOS_EVENTOSTNAME].AsVariant := Null; +end; + + +{ TUSUARIOS_LOGONDataTableRules } +constructor TUSUARIOS_LOGONDataTableRules.Create(aDataTable: TDADataTable); +begin + inherited; +end; + +destructor TUSUARIOS_LOGONDataTableRules.Destroy; +begin + inherited; +end; + +function TUSUARIOS_LOGONDataTableRules.GetLOGONIDValue: String; +begin + result := DataTable.Fields[idx_USUARIOS_LOGONLOGONID].AsString; +end; + +procedure TUSUARIOS_LOGONDataTableRules.SetLOGONIDValue(const aValue: String); +begin + DataTable.Fields[idx_USUARIOS_LOGONLOGONID].AsString := aValue; +end; + +function TUSUARIOS_LOGONDataTableRules.GetLOGONIDIsNull: boolean; +begin + result := DataTable.Fields[idx_USUARIOS_LOGONLOGONID].IsNull; +end; + +procedure TUSUARIOS_LOGONDataTableRules.SetLOGONIDIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_USUARIOS_LOGONLOGONID].AsVariant := Null; +end; + +function TUSUARIOS_LOGONDataTableRules.GetID_USUARIOValue: Integer; +begin + result := DataTable.Fields[idx_USUARIOS_LOGONID_USUARIO].AsInteger; +end; + +procedure TUSUARIOS_LOGONDataTableRules.SetID_USUARIOValue(const aValue: Integer); +begin + DataTable.Fields[idx_USUARIOS_LOGONID_USUARIO].AsInteger := aValue; +end; + +function TUSUARIOS_LOGONDataTableRules.GetID_USUARIOIsNull: boolean; +begin + result := DataTable.Fields[idx_USUARIOS_LOGONID_USUARIO].IsNull; +end; + +procedure TUSUARIOS_LOGONDataTableRules.SetID_USUARIOIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_USUARIOS_LOGONID_USUARIO].AsVariant := Null; +end; + +function TUSUARIOS_LOGONDataTableRules.GetAPLICACIONValue: String; +begin + result := DataTable.Fields[idx_USUARIOS_LOGONAPLICACION].AsString; +end; + +procedure TUSUARIOS_LOGONDataTableRules.SetAPLICACIONValue(const aValue: String); +begin + DataTable.Fields[idx_USUARIOS_LOGONAPLICACION].AsString := aValue; +end; + +function TUSUARIOS_LOGONDataTableRules.GetAPLICACIONIsNull: boolean; +begin + result := DataTable.Fields[idx_USUARIOS_LOGONAPLICACION].IsNull; +end; + +procedure TUSUARIOS_LOGONDataTableRules.SetAPLICACIONIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_USUARIOS_LOGONAPLICACION].AsVariant := Null; +end; + +function TUSUARIOS_LOGONDataTableRules.GetEQUIPOValue: String; +begin + result := DataTable.Fields[idx_USUARIOS_LOGONEQUIPO].AsString; +end; + +procedure TUSUARIOS_LOGONDataTableRules.SetEQUIPOValue(const aValue: String); +begin + DataTable.Fields[idx_USUARIOS_LOGONEQUIPO].AsString := aValue; +end; + +function TUSUARIOS_LOGONDataTableRules.GetEQUIPOIsNull: boolean; +begin + result := DataTable.Fields[idx_USUARIOS_LOGONEQUIPO].IsNull; +end; + +procedure TUSUARIOS_LOGONDataTableRules.SetEQUIPOIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_USUARIOS_LOGONEQUIPO].AsVariant := Null; +end; + +function TUSUARIOS_LOGONDataTableRules.GetDATAValue: String; +begin + result := DataTable.Fields[idx_USUARIOS_LOGONDATA].AsString; +end; + +procedure TUSUARIOS_LOGONDataTableRules.SetDATAValue(const aValue: String); +begin + DataTable.Fields[idx_USUARIOS_LOGONDATA].AsString := aValue; +end; + +function TUSUARIOS_LOGONDataTableRules.GetDATAIsNull: boolean; +begin + result := DataTable.Fields[idx_USUARIOS_LOGONDATA].IsNull; +end; + +procedure TUSUARIOS_LOGONDataTableRules.SetDATAIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_USUARIOS_LOGONDATA].AsVariant := Null; +end; + + +{ TPERFILESDataTableRules } +constructor TPERFILESDataTableRules.Create(aDataTable: TDADataTable); +begin + inherited; +end; + +destructor TPERFILESDataTableRules.Destroy; +begin + inherited; +end; + +function TPERFILESDataTableRules.GetIDValue: Integer; +begin + result := DataTable.Fields[idx_PERFILESID].AsInteger; +end; + +procedure TPERFILESDataTableRules.SetIDValue(const aValue: Integer); +begin + DataTable.Fields[idx_PERFILESID].AsInteger := aValue; +end; + +function TPERFILESDataTableRules.GetIDIsNull: boolean; +begin + result := DataTable.Fields[idx_PERFILESID].IsNull; +end; + +procedure TPERFILESDataTableRules.SetIDIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_PERFILESID].AsVariant := Null; +end; + +function TPERFILESDataTableRules.GetUSERNAMEValue: String; +begin + result := DataTable.Fields[idx_PERFILESUSERNAME].AsString; +end; + +procedure TPERFILESDataTableRules.SetUSERNAMEValue(const aValue: String); +begin + DataTable.Fields[idx_PERFILESUSERNAME].AsString := aValue; +end; + +function TPERFILESDataTableRules.GetUSERNAMEIsNull: boolean; +begin + result := DataTable.Fields[idx_PERFILESUSERNAME].IsNull; +end; + +procedure TPERFILESDataTableRules.SetUSERNAMEIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_PERFILESUSERNAME].AsVariant := Null; +end; + +function TPERFILESDataTableRules.GetLOGINValue: String; +begin + result := DataTable.Fields[idx_PERFILESLOGIN].AsString; +end; + +procedure TPERFILESDataTableRules.SetLOGINValue(const aValue: String); +begin + DataTable.Fields[idx_PERFILESLOGIN].AsString := aValue; +end; + +function TPERFILESDataTableRules.GetLOGINIsNull: boolean; +begin + result := DataTable.Fields[idx_PERFILESLOGIN].IsNull; +end; + +procedure TPERFILESDataTableRules.SetLOGINIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_PERFILESLOGIN].AsVariant := Null; +end; + +function TPERFILESDataTableRules.GetTIPOValue: String; +begin + result := DataTable.Fields[idx_PERFILESTIPO].AsString; +end; + +procedure TPERFILESDataTableRules.SetTIPOValue(const aValue: String); +begin + DataTable.Fields[idx_PERFILESTIPO].AsString := aValue; +end; + +function TPERFILESDataTableRules.GetTIPOIsNull: boolean; +begin + result := DataTable.Fields[idx_PERFILESTIPO].IsNull; +end; + +procedure TPERFILESDataTableRules.SetTIPOIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_PERFILESTIPO].AsVariant := Null; +end; + + +{ TPERMISOSDataTableRules } +constructor TPERMISOSDataTableRules.Create(aDataTable: TDADataTable); +begin + inherited; +end; + +destructor TPERMISOSDataTableRules.Destroy; +begin + inherited; +end; + +function TPERMISOSDataTableRules.GetIDValue: Integer; +begin + result := DataTable.Fields[idx_PERMISOSID].AsInteger; +end; + +procedure TPERMISOSDataTableRules.SetIDValue(const aValue: Integer); +begin + DataTable.Fields[idx_PERMISOSID].AsInteger := aValue; +end; + +function TPERMISOSDataTableRules.GetIDIsNull: boolean; +begin + result := DataTable.Fields[idx_PERMISOSID].IsNull; +end; + +procedure TPERMISOSDataTableRules.SetIDIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_PERMISOSID].AsVariant := Null; +end; + +function TPERMISOSDataTableRules.GetID_USUARIOValue: Integer; +begin + result := DataTable.Fields[idx_PERMISOSID_USUARIO].AsInteger; +end; + +procedure TPERMISOSDataTableRules.SetID_USUARIOValue(const aValue: Integer); +begin + DataTable.Fields[idx_PERMISOSID_USUARIO].AsInteger := aValue; +end; + +function TPERMISOSDataTableRules.GetID_USUARIOIsNull: boolean; +begin + result := DataTable.Fields[idx_PERMISOSID_USUARIO].IsNull; +end; + +procedure TPERMISOSDataTableRules.SetID_USUARIOIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_PERMISOSID_USUARIO].AsVariant := Null; +end; + +function TPERMISOSDataTableRules.GetMODULOValue: String; +begin + result := DataTable.Fields[idx_PERMISOSMODULO].AsString; +end; + +procedure TPERMISOSDataTableRules.SetMODULOValue(const aValue: String); +begin + DataTable.Fields[idx_PERMISOSMODULO].AsString := aValue; +end; + +function TPERMISOSDataTableRules.GetMODULOIsNull: boolean; +begin + result := DataTable.Fields[idx_PERMISOSMODULO].IsNull; +end; + +procedure TPERMISOSDataTableRules.SetMODULOIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_PERMISOSMODULO].AsVariant := Null; +end; + +function TPERMISOSDataTableRules.GetNOMBRECOMPValue: String; +begin + result := DataTable.Fields[idx_PERMISOSNOMBRECOMP].AsString; +end; + +procedure TPERMISOSDataTableRules.SetNOMBRECOMPValue(const aValue: String); +begin + DataTable.Fields[idx_PERMISOSNOMBRECOMP].AsString := aValue; +end; + +function TPERMISOSDataTableRules.GetNOMBRECOMPIsNull: boolean; +begin + result := DataTable.Fields[idx_PERMISOSNOMBRECOMP].IsNull; +end; + +procedure TPERMISOSDataTableRules.SetNOMBRECOMPIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_PERMISOSNOMBRECOMP].AsVariant := Null; +end; + +function TPERMISOSDataTableRules.GetCHECKSUMValue: String; +begin + result := DataTable.Fields[idx_PERMISOSCHECKSUM].AsString; +end; + +procedure TPERMISOSDataTableRules.SetCHECKSUMValue(const aValue: String); +begin + DataTable.Fields[idx_PERMISOSCHECKSUM].AsString := aValue; +end; + +function TPERMISOSDataTableRules.GetCHECKSUMIsNull: boolean; +begin + result := DataTable.Fields[idx_PERMISOSCHECKSUM].IsNull; +end; + +procedure TPERMISOSDataTableRules.SetCHECKSUMIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_PERMISOSCHECKSUM].AsVariant := Null; +end; + + +{ TPERMISOSEXDataTableRules } +constructor TPERMISOSEXDataTableRules.Create(aDataTable: TDADataTable); +begin + inherited; +end; + +destructor TPERMISOSEXDataTableRules.Destroy; +begin + inherited; +end; + +function TPERMISOSEXDataTableRules.GetIDValue: Integer; +begin + result := DataTable.Fields[idx_PERMISOSEXID].AsInteger; +end; + +procedure TPERMISOSEXDataTableRules.SetIDValue(const aValue: Integer); +begin + DataTable.Fields[idx_PERMISOSEXID].AsInteger := aValue; +end; + +function TPERMISOSEXDataTableRules.GetIDIsNull: boolean; +begin + result := DataTable.Fields[idx_PERMISOSEXID].IsNull; +end; + +procedure TPERMISOSEXDataTableRules.SetIDIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_PERMISOSEXID].AsVariant := Null; +end; + +function TPERMISOSEXDataTableRules.GetID_USUARIOValue: Integer; +begin + result := DataTable.Fields[idx_PERMISOSEXID_USUARIO].AsInteger; +end; + +procedure TPERMISOSEXDataTableRules.SetID_USUARIOValue(const aValue: Integer); +begin + DataTable.Fields[idx_PERMISOSEXID_USUARIO].AsInteger := aValue; +end; + +function TPERMISOSEXDataTableRules.GetID_USUARIOIsNull: boolean; +begin + result := DataTable.Fields[idx_PERMISOSEXID_USUARIO].IsNull; +end; + +procedure TPERMISOSEXDataTableRules.SetID_USUARIOIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_PERMISOSEXID_USUARIO].AsVariant := Null; +end; + +function TPERMISOSEXDataTableRules.GetMODULOValue: String; +begin + result := DataTable.Fields[idx_PERMISOSEXMODULO].AsString; +end; + +procedure TPERMISOSEXDataTableRules.SetMODULOValue(const aValue: String); +begin + DataTable.Fields[idx_PERMISOSEXMODULO].AsString := aValue; +end; + +function TPERMISOSEXDataTableRules.GetMODULOIsNull: boolean; +begin + result := DataTable.Fields[idx_PERMISOSEXMODULO].IsNull; +end; + +procedure TPERMISOSEXDataTableRules.SetMODULOIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_PERMISOSEXMODULO].AsVariant := Null; +end; + +function TPERMISOSEXDataTableRules.GetNOMBRECOMPValue: String; +begin + result := DataTable.Fields[idx_PERMISOSEXNOMBRECOMP].AsString; +end; + +procedure TPERMISOSEXDataTableRules.SetNOMBRECOMPValue(const aValue: String); +begin + DataTable.Fields[idx_PERMISOSEXNOMBRECOMP].AsString := aValue; +end; + +function TPERMISOSEXDataTableRules.GetNOMBRECOMPIsNull: boolean; +begin + result := DataTable.Fields[idx_PERMISOSEXNOMBRECOMP].IsNull; +end; + +procedure TPERMISOSEXDataTableRules.SetNOMBRECOMPIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_PERMISOSEXNOMBRECOMP].AsVariant := Null; +end; + +function TPERMISOSEXDataTableRules.GetNOMBREFORMValue: String; +begin + result := DataTable.Fields[idx_PERMISOSEXNOMBREFORM].AsString; +end; + +procedure TPERMISOSEXDataTableRules.SetNOMBREFORMValue(const aValue: String); +begin + DataTable.Fields[idx_PERMISOSEXNOMBREFORM].AsString := aValue; +end; + +function TPERMISOSEXDataTableRules.GetNOMBREFORMIsNull: boolean; +begin + result := DataTable.Fields[idx_PERMISOSEXNOMBREFORM].IsNull; +end; + +procedure TPERMISOSEXDataTableRules.SetNOMBREFORMIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_PERMISOSEXNOMBREFORM].AsVariant := Null; +end; + +function TPERMISOSEXDataTableRules.GetCHECKSUMValue: String; +begin + result := DataTable.Fields[idx_PERMISOSEXCHECKSUM].AsString; +end; + +procedure TPERMISOSEXDataTableRules.SetCHECKSUMValue(const aValue: String); +begin + DataTable.Fields[idx_PERMISOSEXCHECKSUM].AsString := aValue; +end; + +function TPERMISOSEXDataTableRules.GetCHECKSUMIsNull: boolean; +begin + result := DataTable.Fields[idx_PERMISOSEXCHECKSUM].IsNull; +end; + +procedure TPERMISOSEXDataTableRules.SetCHECKSUMIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_PERMISOSEXCHECKSUM].AsVariant := Null; +end; + + +initialization + RegisterDataTableRules(RID_USUARIOS, TUSUARIOSDataTableRules); + RegisterDataTableRules(RID_USUARIOS_EVENTOS, TUSUARIOS_EVENTOSDataTableRules); + RegisterDataTableRules(RID_USUARIOS_LOGON, TUSUARIOS_LOGONDataTableRules); + RegisterDataTableRules(RID_PERFILES, TPERFILESDataTableRules); + RegisterDataTableRules(RID_PERMISOS, TPERMISOSDataTableRules); + RegisterDataTableRules(RID_PERMISOSEX, TPERMISOSEXDataTableRules); + +end. diff --git a/Source/ApplicationBase/Usuarios/Model/schUsuariosServer_Intf.pas b/Source/ApplicationBase/Usuarios/Model/schUsuariosServer_Intf.pas new file mode 100644 index 0000000..6c87558 --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Model/schUsuariosServer_Intf.pas @@ -0,0 +1,2009 @@ +unit schUsuariosServer_Intf; + +interface + +uses + Classes, DB, SysUtils, uROClasses, uDADataTable, uDABusinessProcessor, FmtBCD, uROXMLIntf, schUsuariosClient_Intf; + +const + { Delta rules ids + Feel free to change them to something more human readable + but make sure they are unique in the context of your application } + RID_USUARIOSDelta = '{956A7913-A986-4C5D-84A2-FB3F87A3838F}'; + RID_USUARIOS_EVENTOSDelta = '{F673FBF1-F344-4EB1-90AD-045DFCD1EEC6}'; + RID_USUARIOS_LOGONDelta = '{80C17320-DB3B-4C83-AF51-B57B06A2DB43}'; + RID_PERFILESDelta = '{5EC7C290-9A6C-4FD2-A13D-4F50A72A7B18}'; + RID_PERMISOSDelta = '{CE559F86-29FA-4FEE-983E-A465B7107A6E}'; + RID_PERMISOSEXDelta = '{71E31911-6602-4950-BE48-ACCC04A0D90D}'; + +type + { IUSUARIOSDelta } + IUSUARIOSDelta = interface(IUSUARIOS) + ['{956A7913-A986-4C5D-84A2-FB3F87A3838F}'] + { Property getters and setters } + function GetOldIDValue : Integer; + function GetOldUSERNAMEValue : String; + function GetOldLOGINValue : String; + function GetOldPASSValue : String; + function GetOldPASSEXPIREDValue : DateTime; + function GetOldBLOQUEADOValue : SmallInt; + function GetOldEMAILValue : String; + function GetOldUSERDAYSSUNValue : Integer; + function GetOldPRIVILEGEDValue : Integer; + function GetOldTIPOValue : String; + function GetOldID_PERFILValue : Integer; + function GetOldCHECKSUMValue : String; + + { Properties } + property OldID : Integer read GetOldIDValue; + property OldUSERNAME : String read GetOldUSERNAMEValue; + property OldLOGIN : String read GetOldLOGINValue; + property OldPASS : String read GetOldPASSValue; + property OldPASSEXPIRED : DateTime read GetOldPASSEXPIREDValue; + property OldBLOQUEADO : SmallInt read GetOldBLOQUEADOValue; + property OldEMAIL : String read GetOldEMAILValue; + property OldUSERDAYSSUN : Integer read GetOldUSERDAYSSUNValue; + property OldPRIVILEGED : Integer read GetOldPRIVILEGEDValue; + property OldTIPO : String read GetOldTIPOValue; + property OldID_PERFIL : Integer read GetOldID_PERFILValue; + property OldCHECKSUM : String read GetOldCHECKSUMValue; + end; + + { TUSUARIOSBusinessProcessorRules } + TUSUARIOSBusinessProcessorRules = class(TDABusinessProcessorRules, IUSUARIOS, IUSUARIOSDelta) + private + protected + { Property getters and setters } + function GetIDValue: Integer; virtual; + function GetIDIsNull: Boolean; virtual; + function GetOldIDValue: Integer; virtual; + function GetOldIDIsNull: Boolean; virtual; + procedure SetIDValue(const aValue: Integer); virtual; + procedure SetIDIsNull(const aValue: Boolean); virtual; + function GetUSERNAMEValue: String; virtual; + function GetUSERNAMEIsNull: Boolean; virtual; + function GetOldUSERNAMEValue: String; virtual; + function GetOldUSERNAMEIsNull: Boolean; virtual; + procedure SetUSERNAMEValue(const aValue: String); virtual; + procedure SetUSERNAMEIsNull(const aValue: Boolean); virtual; + function GetLOGINValue: String; virtual; + function GetLOGINIsNull: Boolean; virtual; + function GetOldLOGINValue: String; virtual; + function GetOldLOGINIsNull: Boolean; virtual; + procedure SetLOGINValue(const aValue: String); virtual; + procedure SetLOGINIsNull(const aValue: Boolean); virtual; + function GetPASSValue: String; virtual; + function GetPASSIsNull: Boolean; virtual; + function GetOldPASSValue: String; virtual; + function GetOldPASSIsNull: Boolean; virtual; + procedure SetPASSValue(const aValue: String); virtual; + procedure SetPASSIsNull(const aValue: Boolean); virtual; + function GetPASSEXPIREDValue: DateTime; virtual; + function GetPASSEXPIREDIsNull: Boolean; virtual; + function GetOldPASSEXPIREDValue: DateTime; virtual; + function GetOldPASSEXPIREDIsNull: Boolean; virtual; + procedure SetPASSEXPIREDValue(const aValue: DateTime); virtual; + procedure SetPASSEXPIREDIsNull(const aValue: Boolean); virtual; + function GetBLOQUEADOValue: SmallInt; virtual; + function GetBLOQUEADOIsNull: Boolean; virtual; + function GetOldBLOQUEADOValue: SmallInt; virtual; + function GetOldBLOQUEADOIsNull: Boolean; virtual; + procedure SetBLOQUEADOValue(const aValue: SmallInt); virtual; + procedure SetBLOQUEADOIsNull(const aValue: Boolean); virtual; + function GetEMAILValue: String; virtual; + function GetEMAILIsNull: Boolean; virtual; + function GetOldEMAILValue: String; virtual; + function GetOldEMAILIsNull: Boolean; virtual; + procedure SetEMAILValue(const aValue: String); virtual; + procedure SetEMAILIsNull(const aValue: Boolean); virtual; + function GetUSERDAYSSUNValue: Integer; virtual; + function GetUSERDAYSSUNIsNull: Boolean; virtual; + function GetOldUSERDAYSSUNValue: Integer; virtual; + function GetOldUSERDAYSSUNIsNull: Boolean; virtual; + procedure SetUSERDAYSSUNValue(const aValue: Integer); virtual; + procedure SetUSERDAYSSUNIsNull(const aValue: Boolean); virtual; + function GetPRIVILEGEDValue: Integer; virtual; + function GetPRIVILEGEDIsNull: Boolean; virtual; + function GetOldPRIVILEGEDValue: Integer; virtual; + function GetOldPRIVILEGEDIsNull: Boolean; virtual; + procedure SetPRIVILEGEDValue(const aValue: Integer); virtual; + procedure SetPRIVILEGEDIsNull(const aValue: Boolean); virtual; + function GetTIPOValue: String; virtual; + function GetTIPOIsNull: Boolean; virtual; + function GetOldTIPOValue: String; virtual; + function GetOldTIPOIsNull: Boolean; virtual; + procedure SetTIPOValue(const aValue: String); virtual; + procedure SetTIPOIsNull(const aValue: Boolean); virtual; + function GetID_PERFILValue: Integer; virtual; + function GetID_PERFILIsNull: Boolean; virtual; + function GetOldID_PERFILValue: Integer; virtual; + function GetOldID_PERFILIsNull: Boolean; virtual; + procedure SetID_PERFILValue(const aValue: Integer); virtual; + procedure SetID_PERFILIsNull(const aValue: Boolean); virtual; + function GetCHECKSUMValue: String; virtual; + function GetCHECKSUMIsNull: Boolean; virtual; + function GetOldCHECKSUMValue: String; virtual; + function GetOldCHECKSUMIsNull: Boolean; virtual; + procedure SetCHECKSUMValue(const aValue: String); virtual; + procedure SetCHECKSUMIsNull(const aValue: Boolean); virtual; + + { Properties } + property ID : Integer read GetIDValue write SetIDValue; + property IDIsNull : Boolean read GetIDIsNull write SetIDIsNull; + property OldID : Integer read GetOldIDValue; + property OldIDIsNull : Boolean read GetOldIDIsNull; + property USERNAME : String read GetUSERNAMEValue write SetUSERNAMEValue; + property USERNAMEIsNull : Boolean read GetUSERNAMEIsNull write SetUSERNAMEIsNull; + property OldUSERNAME : String read GetOldUSERNAMEValue; + property OldUSERNAMEIsNull : Boolean read GetOldUSERNAMEIsNull; + property LOGIN : String read GetLOGINValue write SetLOGINValue; + property LOGINIsNull : Boolean read GetLOGINIsNull write SetLOGINIsNull; + property OldLOGIN : String read GetOldLOGINValue; + property OldLOGINIsNull : Boolean read GetOldLOGINIsNull; + property PASS : String read GetPASSValue write SetPASSValue; + property PASSIsNull : Boolean read GetPASSIsNull write SetPASSIsNull; + property OldPASS : String read GetOldPASSValue; + property OldPASSIsNull : Boolean read GetOldPASSIsNull; + property PASSEXPIRED : DateTime read GetPASSEXPIREDValue write SetPASSEXPIREDValue; + property PASSEXPIREDIsNull : Boolean read GetPASSEXPIREDIsNull write SetPASSEXPIREDIsNull; + property OldPASSEXPIRED : DateTime read GetOldPASSEXPIREDValue; + property OldPASSEXPIREDIsNull : Boolean read GetOldPASSEXPIREDIsNull; + property BLOQUEADO : SmallInt read GetBLOQUEADOValue write SetBLOQUEADOValue; + property BLOQUEADOIsNull : Boolean read GetBLOQUEADOIsNull write SetBLOQUEADOIsNull; + property OldBLOQUEADO : SmallInt read GetOldBLOQUEADOValue; + property OldBLOQUEADOIsNull : Boolean read GetOldBLOQUEADOIsNull; + property EMAIL : String read GetEMAILValue write SetEMAILValue; + property EMAILIsNull : Boolean read GetEMAILIsNull write SetEMAILIsNull; + property OldEMAIL : String read GetOldEMAILValue; + property OldEMAILIsNull : Boolean read GetOldEMAILIsNull; + property USERDAYSSUN : Integer read GetUSERDAYSSUNValue write SetUSERDAYSSUNValue; + property USERDAYSSUNIsNull : Boolean read GetUSERDAYSSUNIsNull write SetUSERDAYSSUNIsNull; + property OldUSERDAYSSUN : Integer read GetOldUSERDAYSSUNValue; + property OldUSERDAYSSUNIsNull : Boolean read GetOldUSERDAYSSUNIsNull; + property PRIVILEGED : Integer read GetPRIVILEGEDValue write SetPRIVILEGEDValue; + property PRIVILEGEDIsNull : Boolean read GetPRIVILEGEDIsNull write SetPRIVILEGEDIsNull; + property OldPRIVILEGED : Integer read GetOldPRIVILEGEDValue; + property OldPRIVILEGEDIsNull : Boolean read GetOldPRIVILEGEDIsNull; + property TIPO : String read GetTIPOValue write SetTIPOValue; + property TIPOIsNull : Boolean read GetTIPOIsNull write SetTIPOIsNull; + property OldTIPO : String read GetOldTIPOValue; + property OldTIPOIsNull : Boolean read GetOldTIPOIsNull; + property ID_PERFIL : Integer read GetID_PERFILValue write SetID_PERFILValue; + property ID_PERFILIsNull : Boolean read GetID_PERFILIsNull write SetID_PERFILIsNull; + property OldID_PERFIL : Integer read GetOldID_PERFILValue; + property OldID_PERFILIsNull : Boolean read GetOldID_PERFILIsNull; + property CHECKSUM : String read GetCHECKSUMValue write SetCHECKSUMValue; + property CHECKSUMIsNull : Boolean read GetCHECKSUMIsNull write SetCHECKSUMIsNull; + property OldCHECKSUM : String read GetOldCHECKSUMValue; + property OldCHECKSUMIsNull : Boolean read GetOldCHECKSUMIsNull; + + public + constructor Create(aBusinessProcessor: TDABusinessProcessor); override; + destructor Destroy; override; + + end; + + { IUSUARIOS_EVENTOSDelta } + IUSUARIOS_EVENTOSDelta = interface(IUSUARIOS_EVENTOS) + ['{F673FBF1-F344-4EB1-90AD-045DFCD1EEC6}'] + { Property getters and setters } + function GetOldAPLICACIONValue : String; + function GetOldID_USUARIOValue : Integer; + function GetOldFECHAValue : String; + function GetOldHORAValue : String; + function GetOldFORMValue : String; + function GetOldTITULO_FORMValue : String; + function GetOldEVENTOValue : String; + function GetOldNOTASValue : IROStrings; + function GetOldTNAMEValue : String; + + { Properties } + property OldAPLICACION : String read GetOldAPLICACIONValue; + property OldID_USUARIO : Integer read GetOldID_USUARIOValue; + property OldFECHA : String read GetOldFECHAValue; + property OldHORA : String read GetOldHORAValue; + property OldFORM : String read GetOldFORMValue; + property OldTITULO_FORM : String read GetOldTITULO_FORMValue; + property OldEVENTO : String read GetOldEVENTOValue; + property OldNOTAS : IROStrings read GetOldNOTASValue; + property OldTNAME : String read GetOldTNAMEValue; + end; + + { TUSUARIOS_EVENTOSBusinessProcessorRules } + TUSUARIOS_EVENTOSBusinessProcessorRules = class(TDABusinessProcessorRules, IUSUARIOS_EVENTOS, IUSUARIOS_EVENTOSDelta) + private + f_NOTAS: IROStrings; + procedure NOTAS_OnChange(Sender: TObject); + protected + { Property getters and setters } + function GetAPLICACIONValue: String; virtual; + function GetAPLICACIONIsNull: Boolean; virtual; + function GetOldAPLICACIONValue: String; virtual; + function GetOldAPLICACIONIsNull: Boolean; virtual; + procedure SetAPLICACIONValue(const aValue: String); virtual; + procedure SetAPLICACIONIsNull(const aValue: Boolean); virtual; + function GetID_USUARIOValue: Integer; virtual; + function GetID_USUARIOIsNull: Boolean; virtual; + function GetOldID_USUARIOValue: Integer; virtual; + function GetOldID_USUARIOIsNull: Boolean; virtual; + procedure SetID_USUARIOValue(const aValue: Integer); virtual; + procedure SetID_USUARIOIsNull(const aValue: Boolean); virtual; + function GetFECHAValue: String; virtual; + function GetFECHAIsNull: Boolean; virtual; + function GetOldFECHAValue: String; virtual; + function GetOldFECHAIsNull: Boolean; virtual; + procedure SetFECHAValue(const aValue: String); virtual; + procedure SetFECHAIsNull(const aValue: Boolean); virtual; + function GetHORAValue: String; virtual; + function GetHORAIsNull: Boolean; virtual; + function GetOldHORAValue: String; virtual; + function GetOldHORAIsNull: Boolean; virtual; + procedure SetHORAValue(const aValue: String); virtual; + procedure SetHORAIsNull(const aValue: Boolean); virtual; + function GetFORMValue: String; virtual; + function GetFORMIsNull: Boolean; virtual; + function GetOldFORMValue: String; virtual; + function GetOldFORMIsNull: Boolean; virtual; + procedure SetFORMValue(const aValue: String); virtual; + procedure SetFORMIsNull(const aValue: Boolean); virtual; + function GetTITULO_FORMValue: String; virtual; + function GetTITULO_FORMIsNull: Boolean; virtual; + function GetOldTITULO_FORMValue: String; virtual; + function GetOldTITULO_FORMIsNull: Boolean; virtual; + procedure SetTITULO_FORMValue(const aValue: String); virtual; + procedure SetTITULO_FORMIsNull(const aValue: Boolean); virtual; + function GetEVENTOValue: String; virtual; + function GetEVENTOIsNull: Boolean; virtual; + function GetOldEVENTOValue: String; virtual; + function GetOldEVENTOIsNull: Boolean; virtual; + procedure SetEVENTOValue(const aValue: String); virtual; + procedure SetEVENTOIsNull(const aValue: Boolean); virtual; + function GetNOTASValue: IROStrings; virtual; + function GetNOTASIsNull: Boolean; virtual; + function GetOldNOTASValue: IROStrings; virtual; + function GetOldNOTASIsNull: Boolean; virtual; + procedure SetNOTASIsNull(const aValue: Boolean); virtual; + function GetTNAMEValue: String; virtual; + function GetTNAMEIsNull: Boolean; virtual; + function GetOldTNAMEValue: String; virtual; + function GetOldTNAMEIsNull: Boolean; virtual; + procedure SetTNAMEValue(const aValue: String); virtual; + procedure SetTNAMEIsNull(const aValue: Boolean); virtual; + + { Properties } + property APLICACION : String read GetAPLICACIONValue write SetAPLICACIONValue; + property APLICACIONIsNull : Boolean read GetAPLICACIONIsNull write SetAPLICACIONIsNull; + property OldAPLICACION : String read GetOldAPLICACIONValue; + property OldAPLICACIONIsNull : Boolean read GetOldAPLICACIONIsNull; + property ID_USUARIO : Integer read GetID_USUARIOValue write SetID_USUARIOValue; + property ID_USUARIOIsNull : Boolean read GetID_USUARIOIsNull write SetID_USUARIOIsNull; + property OldID_USUARIO : Integer read GetOldID_USUARIOValue; + property OldID_USUARIOIsNull : Boolean read GetOldID_USUARIOIsNull; + property FECHA : String read GetFECHAValue write SetFECHAValue; + property FECHAIsNull : Boolean read GetFECHAIsNull write SetFECHAIsNull; + property OldFECHA : String read GetOldFECHAValue; + property OldFECHAIsNull : Boolean read GetOldFECHAIsNull; + property HORA : String read GetHORAValue write SetHORAValue; + property HORAIsNull : Boolean read GetHORAIsNull write SetHORAIsNull; + property OldHORA : String read GetOldHORAValue; + property OldHORAIsNull : Boolean read GetOldHORAIsNull; + property FORM : String read GetFORMValue write SetFORMValue; + property FORMIsNull : Boolean read GetFORMIsNull write SetFORMIsNull; + property OldFORM : String read GetOldFORMValue; + property OldFORMIsNull : Boolean read GetOldFORMIsNull; + property TITULO_FORM : String read GetTITULO_FORMValue write SetTITULO_FORMValue; + property TITULO_FORMIsNull : Boolean read GetTITULO_FORMIsNull write SetTITULO_FORMIsNull; + property OldTITULO_FORM : String read GetOldTITULO_FORMValue; + property OldTITULO_FORMIsNull : Boolean read GetOldTITULO_FORMIsNull; + property EVENTO : String read GetEVENTOValue write SetEVENTOValue; + property EVENTOIsNull : Boolean read GetEVENTOIsNull write SetEVENTOIsNull; + property OldEVENTO : String read GetOldEVENTOValue; + property OldEVENTOIsNull : Boolean read GetOldEVENTOIsNull; + property NOTAS : IROStrings read GetNOTASValue; + property NOTASIsNull : Boolean read GetNOTASIsNull write SetNOTASIsNull; + property OldNOTAS : IROStrings read GetOldNOTASValue; + property OldNOTASIsNull : Boolean read GetOldNOTASIsNull; + property TNAME : String read GetTNAMEValue write SetTNAMEValue; + property TNAMEIsNull : Boolean read GetTNAMEIsNull write SetTNAMEIsNull; + property OldTNAME : String read GetOldTNAMEValue; + property OldTNAMEIsNull : Boolean read GetOldTNAMEIsNull; + + public + constructor Create(aBusinessProcessor: TDABusinessProcessor); override; + destructor Destroy; override; + + end; + + { IUSUARIOS_LOGONDelta } + IUSUARIOS_LOGONDelta = interface(IUSUARIOS_LOGON) + ['{80C17320-DB3B-4C83-AF51-B57B06A2DB43}'] + { Property getters and setters } + function GetOldLOGONIDValue : String; + function GetOldID_USUARIOValue : Integer; + function GetOldAPLICACIONValue : String; + function GetOldEQUIPOValue : String; + function GetOldDATAValue : String; + + { Properties } + property OldLOGONID : String read GetOldLOGONIDValue; + property OldID_USUARIO : Integer read GetOldID_USUARIOValue; + property OldAPLICACION : String read GetOldAPLICACIONValue; + property OldEQUIPO : String read GetOldEQUIPOValue; + property OldDATA : String read GetOldDATAValue; + end; + + { TUSUARIOS_LOGONBusinessProcessorRules } + TUSUARIOS_LOGONBusinessProcessorRules = class(TDABusinessProcessorRules, IUSUARIOS_LOGON, IUSUARIOS_LOGONDelta) + private + protected + { Property getters and setters } + function GetLOGONIDValue: String; virtual; + function GetLOGONIDIsNull: Boolean; virtual; + function GetOldLOGONIDValue: String; virtual; + function GetOldLOGONIDIsNull: Boolean; virtual; + procedure SetLOGONIDValue(const aValue: String); virtual; + procedure SetLOGONIDIsNull(const aValue: Boolean); virtual; + function GetID_USUARIOValue: Integer; virtual; + function GetID_USUARIOIsNull: Boolean; virtual; + function GetOldID_USUARIOValue: Integer; virtual; + function GetOldID_USUARIOIsNull: Boolean; virtual; + procedure SetID_USUARIOValue(const aValue: Integer); virtual; + procedure SetID_USUARIOIsNull(const aValue: Boolean); virtual; + function GetAPLICACIONValue: String; virtual; + function GetAPLICACIONIsNull: Boolean; virtual; + function GetOldAPLICACIONValue: String; virtual; + function GetOldAPLICACIONIsNull: Boolean; virtual; + procedure SetAPLICACIONValue(const aValue: String); virtual; + procedure SetAPLICACIONIsNull(const aValue: Boolean); virtual; + function GetEQUIPOValue: String; virtual; + function GetEQUIPOIsNull: Boolean; virtual; + function GetOldEQUIPOValue: String; virtual; + function GetOldEQUIPOIsNull: Boolean; virtual; + procedure SetEQUIPOValue(const aValue: String); virtual; + procedure SetEQUIPOIsNull(const aValue: Boolean); virtual; + function GetDATAValue: String; virtual; + function GetDATAIsNull: Boolean; virtual; + function GetOldDATAValue: String; virtual; + function GetOldDATAIsNull: Boolean; virtual; + procedure SetDATAValue(const aValue: String); virtual; + procedure SetDATAIsNull(const aValue: Boolean); virtual; + + { Properties } + property LOGONID : String read GetLOGONIDValue write SetLOGONIDValue; + property LOGONIDIsNull : Boolean read GetLOGONIDIsNull write SetLOGONIDIsNull; + property OldLOGONID : String read GetOldLOGONIDValue; + property OldLOGONIDIsNull : Boolean read GetOldLOGONIDIsNull; + property ID_USUARIO : Integer read GetID_USUARIOValue write SetID_USUARIOValue; + property ID_USUARIOIsNull : Boolean read GetID_USUARIOIsNull write SetID_USUARIOIsNull; + property OldID_USUARIO : Integer read GetOldID_USUARIOValue; + property OldID_USUARIOIsNull : Boolean read GetOldID_USUARIOIsNull; + property APLICACION : String read GetAPLICACIONValue write SetAPLICACIONValue; + property APLICACIONIsNull : Boolean read GetAPLICACIONIsNull write SetAPLICACIONIsNull; + property OldAPLICACION : String read GetOldAPLICACIONValue; + property OldAPLICACIONIsNull : Boolean read GetOldAPLICACIONIsNull; + property EQUIPO : String read GetEQUIPOValue write SetEQUIPOValue; + property EQUIPOIsNull : Boolean read GetEQUIPOIsNull write SetEQUIPOIsNull; + property OldEQUIPO : String read GetOldEQUIPOValue; + property OldEQUIPOIsNull : Boolean read GetOldEQUIPOIsNull; + property DATA : String read GetDATAValue write SetDATAValue; + property DATAIsNull : Boolean read GetDATAIsNull write SetDATAIsNull; + property OldDATA : String read GetOldDATAValue; + property OldDATAIsNull : Boolean read GetOldDATAIsNull; + + public + constructor Create(aBusinessProcessor: TDABusinessProcessor); override; + destructor Destroy; override; + + end; + + { IPERFILESDelta } + IPERFILESDelta = interface(IPERFILES) + ['{5EC7C290-9A6C-4FD2-A13D-4F50A72A7B18}'] + { Property getters and setters } + function GetOldIDValue : Integer; + function GetOldUSERNAMEValue : String; + function GetOldLOGINValue : String; + function GetOldTIPOValue : String; + + { Properties } + property OldID : Integer read GetOldIDValue; + property OldUSERNAME : String read GetOldUSERNAMEValue; + property OldLOGIN : String read GetOldLOGINValue; + property OldTIPO : String read GetOldTIPOValue; + end; + + { TPERFILESBusinessProcessorRules } + TPERFILESBusinessProcessorRules = class(TDABusinessProcessorRules, IPERFILES, IPERFILESDelta) + private + protected + { Property getters and setters } + function GetIDValue: Integer; virtual; + function GetIDIsNull: Boolean; virtual; + function GetOldIDValue: Integer; virtual; + function GetOldIDIsNull: Boolean; virtual; + procedure SetIDValue(const aValue: Integer); virtual; + procedure SetIDIsNull(const aValue: Boolean); virtual; + function GetUSERNAMEValue: String; virtual; + function GetUSERNAMEIsNull: Boolean; virtual; + function GetOldUSERNAMEValue: String; virtual; + function GetOldUSERNAMEIsNull: Boolean; virtual; + procedure SetUSERNAMEValue(const aValue: String); virtual; + procedure SetUSERNAMEIsNull(const aValue: Boolean); virtual; + function GetLOGINValue: String; virtual; + function GetLOGINIsNull: Boolean; virtual; + function GetOldLOGINValue: String; virtual; + function GetOldLOGINIsNull: Boolean; virtual; + procedure SetLOGINValue(const aValue: String); virtual; + procedure SetLOGINIsNull(const aValue: Boolean); virtual; + function GetTIPOValue: String; virtual; + function GetTIPOIsNull: Boolean; virtual; + function GetOldTIPOValue: String; virtual; + function GetOldTIPOIsNull: Boolean; virtual; + procedure SetTIPOValue(const aValue: String); virtual; + procedure SetTIPOIsNull(const aValue: Boolean); virtual; + + { Properties } + property ID : Integer read GetIDValue write SetIDValue; + property IDIsNull : Boolean read GetIDIsNull write SetIDIsNull; + property OldID : Integer read GetOldIDValue; + property OldIDIsNull : Boolean read GetOldIDIsNull; + property USERNAME : String read GetUSERNAMEValue write SetUSERNAMEValue; + property USERNAMEIsNull : Boolean read GetUSERNAMEIsNull write SetUSERNAMEIsNull; + property OldUSERNAME : String read GetOldUSERNAMEValue; + property OldUSERNAMEIsNull : Boolean read GetOldUSERNAMEIsNull; + property LOGIN : String read GetLOGINValue write SetLOGINValue; + property LOGINIsNull : Boolean read GetLOGINIsNull write SetLOGINIsNull; + property OldLOGIN : String read GetOldLOGINValue; + property OldLOGINIsNull : Boolean read GetOldLOGINIsNull; + property TIPO : String read GetTIPOValue write SetTIPOValue; + property TIPOIsNull : Boolean read GetTIPOIsNull write SetTIPOIsNull; + property OldTIPO : String read GetOldTIPOValue; + property OldTIPOIsNull : Boolean read GetOldTIPOIsNull; + + public + constructor Create(aBusinessProcessor: TDABusinessProcessor); override; + destructor Destroy; override; + + end; + + { IPERMISOSDelta } + IPERMISOSDelta = interface(IPERMISOS) + ['{CE559F86-29FA-4FEE-983E-A465B7107A6E}'] + { Property getters and setters } + function GetOldIDValue : Integer; + function GetOldID_USUARIOValue : Integer; + function GetOldMODULOValue : String; + function GetOldNOMBRECOMPValue : String; + function GetOldCHECKSUMValue : String; + + { Properties } + property OldID : Integer read GetOldIDValue; + property OldID_USUARIO : Integer read GetOldID_USUARIOValue; + property OldMODULO : String read GetOldMODULOValue; + property OldNOMBRECOMP : String read GetOldNOMBRECOMPValue; + property OldCHECKSUM : String read GetOldCHECKSUMValue; + end; + + { TPERMISOSBusinessProcessorRules } + TPERMISOSBusinessProcessorRules = class(TDABusinessProcessorRules, IPERMISOS, IPERMISOSDelta) + private + protected + { Property getters and setters } + function GetIDValue: Integer; virtual; + function GetIDIsNull: Boolean; virtual; + function GetOldIDValue: Integer; virtual; + function GetOldIDIsNull: Boolean; virtual; + procedure SetIDValue(const aValue: Integer); virtual; + procedure SetIDIsNull(const aValue: Boolean); virtual; + function GetID_USUARIOValue: Integer; virtual; + function GetID_USUARIOIsNull: Boolean; virtual; + function GetOldID_USUARIOValue: Integer; virtual; + function GetOldID_USUARIOIsNull: Boolean; virtual; + procedure SetID_USUARIOValue(const aValue: Integer); virtual; + procedure SetID_USUARIOIsNull(const aValue: Boolean); virtual; + function GetMODULOValue: String; virtual; + function GetMODULOIsNull: Boolean; virtual; + function GetOldMODULOValue: String; virtual; + function GetOldMODULOIsNull: Boolean; virtual; + procedure SetMODULOValue(const aValue: String); virtual; + procedure SetMODULOIsNull(const aValue: Boolean); virtual; + function GetNOMBRECOMPValue: String; virtual; + function GetNOMBRECOMPIsNull: Boolean; virtual; + function GetOldNOMBRECOMPValue: String; virtual; + function GetOldNOMBRECOMPIsNull: Boolean; virtual; + procedure SetNOMBRECOMPValue(const aValue: String); virtual; + procedure SetNOMBRECOMPIsNull(const aValue: Boolean); virtual; + function GetCHECKSUMValue: String; virtual; + function GetCHECKSUMIsNull: Boolean; virtual; + function GetOldCHECKSUMValue: String; virtual; + function GetOldCHECKSUMIsNull: Boolean; virtual; + procedure SetCHECKSUMValue(const aValue: String); virtual; + procedure SetCHECKSUMIsNull(const aValue: Boolean); virtual; + + { Properties } + property ID : Integer read GetIDValue write SetIDValue; + property IDIsNull : Boolean read GetIDIsNull write SetIDIsNull; + property OldID : Integer read GetOldIDValue; + property OldIDIsNull : Boolean read GetOldIDIsNull; + property ID_USUARIO : Integer read GetID_USUARIOValue write SetID_USUARIOValue; + property ID_USUARIOIsNull : Boolean read GetID_USUARIOIsNull write SetID_USUARIOIsNull; + property OldID_USUARIO : Integer read GetOldID_USUARIOValue; + property OldID_USUARIOIsNull : Boolean read GetOldID_USUARIOIsNull; + property MODULO : String read GetMODULOValue write SetMODULOValue; + property MODULOIsNull : Boolean read GetMODULOIsNull write SetMODULOIsNull; + property OldMODULO : String read GetOldMODULOValue; + property OldMODULOIsNull : Boolean read GetOldMODULOIsNull; + property NOMBRECOMP : String read GetNOMBRECOMPValue write SetNOMBRECOMPValue; + property NOMBRECOMPIsNull : Boolean read GetNOMBRECOMPIsNull write SetNOMBRECOMPIsNull; + property OldNOMBRECOMP : String read GetOldNOMBRECOMPValue; + property OldNOMBRECOMPIsNull : Boolean read GetOldNOMBRECOMPIsNull; + property CHECKSUM : String read GetCHECKSUMValue write SetCHECKSUMValue; + property CHECKSUMIsNull : Boolean read GetCHECKSUMIsNull write SetCHECKSUMIsNull; + property OldCHECKSUM : String read GetOldCHECKSUMValue; + property OldCHECKSUMIsNull : Boolean read GetOldCHECKSUMIsNull; + + public + constructor Create(aBusinessProcessor: TDABusinessProcessor); override; + destructor Destroy; override; + + end; + + { IPERMISOSEXDelta } + IPERMISOSEXDelta = interface(IPERMISOSEX) + ['{71E31911-6602-4950-BE48-ACCC04A0D90D}'] + { Property getters and setters } + function GetOldIDValue : Integer; + function GetOldID_USUARIOValue : Integer; + function GetOldMODULOValue : String; + function GetOldNOMBRECOMPValue : String; + function GetOldNOMBREFORMValue : String; + function GetOldCHECKSUMValue : String; + + { Properties } + property OldID : Integer read GetOldIDValue; + property OldID_USUARIO : Integer read GetOldID_USUARIOValue; + property OldMODULO : String read GetOldMODULOValue; + property OldNOMBRECOMP : String read GetOldNOMBRECOMPValue; + property OldNOMBREFORM : String read GetOldNOMBREFORMValue; + property OldCHECKSUM : String read GetOldCHECKSUMValue; + end; + + { TPERMISOSEXBusinessProcessorRules } + TPERMISOSEXBusinessProcessorRules = class(TDABusinessProcessorRules, IPERMISOSEX, IPERMISOSEXDelta) + private + protected + { Property getters and setters } + function GetIDValue: Integer; virtual; + function GetIDIsNull: Boolean; virtual; + function GetOldIDValue: Integer; virtual; + function GetOldIDIsNull: Boolean; virtual; + procedure SetIDValue(const aValue: Integer); virtual; + procedure SetIDIsNull(const aValue: Boolean); virtual; + function GetID_USUARIOValue: Integer; virtual; + function GetID_USUARIOIsNull: Boolean; virtual; + function GetOldID_USUARIOValue: Integer; virtual; + function GetOldID_USUARIOIsNull: Boolean; virtual; + procedure SetID_USUARIOValue(const aValue: Integer); virtual; + procedure SetID_USUARIOIsNull(const aValue: Boolean); virtual; + function GetMODULOValue: String; virtual; + function GetMODULOIsNull: Boolean; virtual; + function GetOldMODULOValue: String; virtual; + function GetOldMODULOIsNull: Boolean; virtual; + procedure SetMODULOValue(const aValue: String); virtual; + procedure SetMODULOIsNull(const aValue: Boolean); virtual; + function GetNOMBRECOMPValue: String; virtual; + function GetNOMBRECOMPIsNull: Boolean; virtual; + function GetOldNOMBRECOMPValue: String; virtual; + function GetOldNOMBRECOMPIsNull: Boolean; virtual; + procedure SetNOMBRECOMPValue(const aValue: String); virtual; + procedure SetNOMBRECOMPIsNull(const aValue: Boolean); virtual; + function GetNOMBREFORMValue: String; virtual; + function GetNOMBREFORMIsNull: Boolean; virtual; + function GetOldNOMBREFORMValue: String; virtual; + function GetOldNOMBREFORMIsNull: Boolean; virtual; + procedure SetNOMBREFORMValue(const aValue: String); virtual; + procedure SetNOMBREFORMIsNull(const aValue: Boolean); virtual; + function GetCHECKSUMValue: String; virtual; + function GetCHECKSUMIsNull: Boolean; virtual; + function GetOldCHECKSUMValue: String; virtual; + function GetOldCHECKSUMIsNull: Boolean; virtual; + procedure SetCHECKSUMValue(const aValue: String); virtual; + procedure SetCHECKSUMIsNull(const aValue: Boolean); virtual; + + { Properties } + property ID : Integer read GetIDValue write SetIDValue; + property IDIsNull : Boolean read GetIDIsNull write SetIDIsNull; + property OldID : Integer read GetOldIDValue; + property OldIDIsNull : Boolean read GetOldIDIsNull; + property ID_USUARIO : Integer read GetID_USUARIOValue write SetID_USUARIOValue; + property ID_USUARIOIsNull : Boolean read GetID_USUARIOIsNull write SetID_USUARIOIsNull; + property OldID_USUARIO : Integer read GetOldID_USUARIOValue; + property OldID_USUARIOIsNull : Boolean read GetOldID_USUARIOIsNull; + property MODULO : String read GetMODULOValue write SetMODULOValue; + property MODULOIsNull : Boolean read GetMODULOIsNull write SetMODULOIsNull; + property OldMODULO : String read GetOldMODULOValue; + property OldMODULOIsNull : Boolean read GetOldMODULOIsNull; + property NOMBRECOMP : String read GetNOMBRECOMPValue write SetNOMBRECOMPValue; + property NOMBRECOMPIsNull : Boolean read GetNOMBRECOMPIsNull write SetNOMBRECOMPIsNull; + property OldNOMBRECOMP : String read GetOldNOMBRECOMPValue; + property OldNOMBRECOMPIsNull : Boolean read GetOldNOMBRECOMPIsNull; + property NOMBREFORM : String read GetNOMBREFORMValue write SetNOMBREFORMValue; + property NOMBREFORMIsNull : Boolean read GetNOMBREFORMIsNull write SetNOMBREFORMIsNull; + property OldNOMBREFORM : String read GetOldNOMBREFORMValue; + property OldNOMBREFORMIsNull : Boolean read GetOldNOMBREFORMIsNull; + property CHECKSUM : String read GetCHECKSUMValue write SetCHECKSUMValue; + property CHECKSUMIsNull : Boolean read GetCHECKSUMIsNull write SetCHECKSUMIsNull; + property OldCHECKSUM : String read GetOldCHECKSUMValue; + property OldCHECKSUMIsNull : Boolean read GetOldCHECKSUMIsNull; + + public + constructor Create(aBusinessProcessor: TDABusinessProcessor); override; + destructor Destroy; override; + + end; + +implementation + +uses + Variants, uROBinaryHelpers, uDAInterfaces; + +{ TUSUARIOSBusinessProcessorRules } +constructor TUSUARIOSBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); +begin + inherited; +end; + +destructor TUSUARIOSBusinessProcessorRules.Destroy; +begin + inherited; +end; + +function TUSUARIOSBusinessProcessorRules.GetIDValue: Integer; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSID]; +end; + +function TUSUARIOSBusinessProcessorRules.GetIDIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSID]); +end; + +function TUSUARIOSBusinessProcessorRules.GetOldIDValue: Integer; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSID]; +end; + +function TUSUARIOSBusinessProcessorRules.GetOldIDIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSID]); +end; + +procedure TUSUARIOSBusinessProcessorRules.SetIDValue(const aValue: Integer); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSID] := aValue; +end; + +procedure TUSUARIOSBusinessProcessorRules.SetIDIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSID] := Null; +end; + +function TUSUARIOSBusinessProcessorRules.GetUSERNAMEValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSUSERNAME]; +end; + +function TUSUARIOSBusinessProcessorRules.GetUSERNAMEIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSUSERNAME]); +end; + +function TUSUARIOSBusinessProcessorRules.GetOldUSERNAMEValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSUSERNAME]; +end; + +function TUSUARIOSBusinessProcessorRules.GetOldUSERNAMEIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSUSERNAME]); +end; + +procedure TUSUARIOSBusinessProcessorRules.SetUSERNAMEValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSUSERNAME] := aValue; +end; + +procedure TUSUARIOSBusinessProcessorRules.SetUSERNAMEIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSUSERNAME] := Null; +end; + +function TUSUARIOSBusinessProcessorRules.GetLOGINValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSLOGIN]; +end; + +function TUSUARIOSBusinessProcessorRules.GetLOGINIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSLOGIN]); +end; + +function TUSUARIOSBusinessProcessorRules.GetOldLOGINValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSLOGIN]; +end; + +function TUSUARIOSBusinessProcessorRules.GetOldLOGINIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSLOGIN]); +end; + +procedure TUSUARIOSBusinessProcessorRules.SetLOGINValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSLOGIN] := aValue; +end; + +procedure TUSUARIOSBusinessProcessorRules.SetLOGINIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSLOGIN] := Null; +end; + +function TUSUARIOSBusinessProcessorRules.GetPASSValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSPASS]; +end; + +function TUSUARIOSBusinessProcessorRules.GetPASSIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSPASS]); +end; + +function TUSUARIOSBusinessProcessorRules.GetOldPASSValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSPASS]; +end; + +function TUSUARIOSBusinessProcessorRules.GetOldPASSIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSPASS]); +end; + +procedure TUSUARIOSBusinessProcessorRules.SetPASSValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSPASS] := aValue; +end; + +procedure TUSUARIOSBusinessProcessorRules.SetPASSIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSPASS] := Null; +end; + +function TUSUARIOSBusinessProcessorRules.GetPASSEXPIREDValue: DateTime; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSPASSEXPIRED]; +end; + +function TUSUARIOSBusinessProcessorRules.GetPASSEXPIREDIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSPASSEXPIRED]); +end; + +function TUSUARIOSBusinessProcessorRules.GetOldPASSEXPIREDValue: DateTime; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSPASSEXPIRED]; +end; + +function TUSUARIOSBusinessProcessorRules.GetOldPASSEXPIREDIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSPASSEXPIRED]); +end; + +procedure TUSUARIOSBusinessProcessorRules.SetPASSEXPIREDValue(const aValue: DateTime); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSPASSEXPIRED] := aValue; +end; + +procedure TUSUARIOSBusinessProcessorRules.SetPASSEXPIREDIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSPASSEXPIRED] := Null; +end; + +function TUSUARIOSBusinessProcessorRules.GetBLOQUEADOValue: SmallInt; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSBLOQUEADO]; +end; + +function TUSUARIOSBusinessProcessorRules.GetBLOQUEADOIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSBLOQUEADO]); +end; + +function TUSUARIOSBusinessProcessorRules.GetOldBLOQUEADOValue: SmallInt; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSBLOQUEADO]; +end; + +function TUSUARIOSBusinessProcessorRules.GetOldBLOQUEADOIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSBLOQUEADO]); +end; + +procedure TUSUARIOSBusinessProcessorRules.SetBLOQUEADOValue(const aValue: SmallInt); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSBLOQUEADO] := aValue; +end; + +procedure TUSUARIOSBusinessProcessorRules.SetBLOQUEADOIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSBLOQUEADO] := Null; +end; + +function TUSUARIOSBusinessProcessorRules.GetEMAILValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSEMAIL]; +end; + +function TUSUARIOSBusinessProcessorRules.GetEMAILIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSEMAIL]); +end; + +function TUSUARIOSBusinessProcessorRules.GetOldEMAILValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSEMAIL]; +end; + +function TUSUARIOSBusinessProcessorRules.GetOldEMAILIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSEMAIL]); +end; + +procedure TUSUARIOSBusinessProcessorRules.SetEMAILValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSEMAIL] := aValue; +end; + +procedure TUSUARIOSBusinessProcessorRules.SetEMAILIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSEMAIL] := Null; +end; + +function TUSUARIOSBusinessProcessorRules.GetUSERDAYSSUNValue: Integer; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSUSERDAYSSUN]; +end; + +function TUSUARIOSBusinessProcessorRules.GetUSERDAYSSUNIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSUSERDAYSSUN]); +end; + +function TUSUARIOSBusinessProcessorRules.GetOldUSERDAYSSUNValue: Integer; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSUSERDAYSSUN]; +end; + +function TUSUARIOSBusinessProcessorRules.GetOldUSERDAYSSUNIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSUSERDAYSSUN]); +end; + +procedure TUSUARIOSBusinessProcessorRules.SetUSERDAYSSUNValue(const aValue: Integer); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSUSERDAYSSUN] := aValue; +end; + +procedure TUSUARIOSBusinessProcessorRules.SetUSERDAYSSUNIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSUSERDAYSSUN] := Null; +end; + +function TUSUARIOSBusinessProcessorRules.GetPRIVILEGEDValue: Integer; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSPRIVILEGED]; +end; + +function TUSUARIOSBusinessProcessorRules.GetPRIVILEGEDIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSPRIVILEGED]); +end; + +function TUSUARIOSBusinessProcessorRules.GetOldPRIVILEGEDValue: Integer; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSPRIVILEGED]; +end; + +function TUSUARIOSBusinessProcessorRules.GetOldPRIVILEGEDIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSPRIVILEGED]); +end; + +procedure TUSUARIOSBusinessProcessorRules.SetPRIVILEGEDValue(const aValue: Integer); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSPRIVILEGED] := aValue; +end; + +procedure TUSUARIOSBusinessProcessorRules.SetPRIVILEGEDIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSPRIVILEGED] := Null; +end; + +function TUSUARIOSBusinessProcessorRules.GetTIPOValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSTIPO]; +end; + +function TUSUARIOSBusinessProcessorRules.GetTIPOIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSTIPO]); +end; + +function TUSUARIOSBusinessProcessorRules.GetOldTIPOValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSTIPO]; +end; + +function TUSUARIOSBusinessProcessorRules.GetOldTIPOIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSTIPO]); +end; + +procedure TUSUARIOSBusinessProcessorRules.SetTIPOValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSTIPO] := aValue; +end; + +procedure TUSUARIOSBusinessProcessorRules.SetTIPOIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSTIPO] := Null; +end; + +function TUSUARIOSBusinessProcessorRules.GetID_PERFILValue: Integer; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSID_PERFIL]; +end; + +function TUSUARIOSBusinessProcessorRules.GetID_PERFILIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSID_PERFIL]); +end; + +function TUSUARIOSBusinessProcessorRules.GetOldID_PERFILValue: Integer; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSID_PERFIL]; +end; + +function TUSUARIOSBusinessProcessorRules.GetOldID_PERFILIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSID_PERFIL]); +end; + +procedure TUSUARIOSBusinessProcessorRules.SetID_PERFILValue(const aValue: Integer); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSID_PERFIL] := aValue; +end; + +procedure TUSUARIOSBusinessProcessorRules.SetID_PERFILIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSID_PERFIL] := Null; +end; + +function TUSUARIOSBusinessProcessorRules.GetCHECKSUMValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSCHECKSUM]; +end; + +function TUSUARIOSBusinessProcessorRules.GetCHECKSUMIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSCHECKSUM]); +end; + +function TUSUARIOSBusinessProcessorRules.GetOldCHECKSUMValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSCHECKSUM]; +end; + +function TUSUARIOSBusinessProcessorRules.GetOldCHECKSUMIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOSCHECKSUM]); +end; + +procedure TUSUARIOSBusinessProcessorRules.SetCHECKSUMValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSCHECKSUM] := aValue; +end; + +procedure TUSUARIOSBusinessProcessorRules.SetCHECKSUMIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOSCHECKSUM] := Null; +end; + + +{ TUSUARIOS_EVENTOSBusinessProcessorRules } +constructor TUSUARIOS_EVENTOSBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); +var + StrList: TStringList; +begin + inherited; + + StrList := TStringList.Create; + StrList.OnChange := NOTAS_OnChange; + f_NOTAS := NewROStrings(StrList,True); +end; + +destructor TUSUARIOS_EVENTOSBusinessProcessorRules.Destroy; +begin + inherited; +end; + +procedure TUSUARIOS_EVENTOSBusinessProcessorRules.NOTAS_OnChange(Sender: TObject); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSNOTAS] := TStringList(Sender).Text; +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetAPLICACIONValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSAPLICACION]; +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetAPLICACIONIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSAPLICACION]); +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldAPLICACIONValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSAPLICACION]; +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldAPLICACIONIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSAPLICACION]); +end; + +procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetAPLICACIONValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSAPLICACION] := aValue; +end; + +procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetAPLICACIONIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSAPLICACION] := Null; +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetID_USUARIOValue: Integer; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSID_USUARIO]; +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetID_USUARIOIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSID_USUARIO]); +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldID_USUARIOValue: Integer; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSID_USUARIO]; +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldID_USUARIOIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSID_USUARIO]); +end; + +procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetID_USUARIOValue(const aValue: Integer); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSID_USUARIO] := aValue; +end; + +procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetID_USUARIOIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSID_USUARIO] := Null; +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetFECHAValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSFECHA]; +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetFECHAIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSFECHA]); +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldFECHAValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSFECHA]; +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldFECHAIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSFECHA]); +end; + +procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetFECHAValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSFECHA] := aValue; +end; + +procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetFECHAIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSFECHA] := Null; +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetHORAValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSHORA]; +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetHORAIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSHORA]); +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldHORAValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSHORA]; +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldHORAIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSHORA]); +end; + +procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetHORAValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSHORA] := aValue; +end; + +procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetHORAIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSHORA] := Null; +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetFORMValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSFORM]; +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetFORMIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSFORM]); +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldFORMValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSFORM]; +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldFORMIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSFORM]); +end; + +procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetFORMValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSFORM] := aValue; +end; + +procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetFORMIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSFORM] := Null; +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetTITULO_FORMValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSTITULO_FORM]; +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetTITULO_FORMIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSTITULO_FORM]); +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldTITULO_FORMValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSTITULO_FORM]; +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldTITULO_FORMIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSTITULO_FORM]); +end; + +procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetTITULO_FORMValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSTITULO_FORM] := aValue; +end; + +procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetTITULO_FORMIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSTITULO_FORM] := Null; +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetEVENTOValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSEVENTO]; +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetEVENTOIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSEVENTO]); +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldEVENTOValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSEVENTO]; +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldEVENTOIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSEVENTO]); +end; + +procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetEVENTOValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSEVENTO] := aValue; +end; + +procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetEVENTOIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSEVENTO] := Null; +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetNOTASValue: IROStrings; +begin + result := f_NOTAS; + result.Text := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSNOTAS]; +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetNOTASIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSNOTAS]); +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldNOTASValue: IROStrings; +begin + result := NewROStrings(); + result.Text := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSNOTAS]; +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldNOTASIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSNOTAS]); +end; + +procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetNOTASIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSNOTAS] := Null; +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetTNAMEValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSTNAME]; +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetTNAMEIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSTNAME]); +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldTNAMEValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSTNAME]; +end; + +function TUSUARIOS_EVENTOSBusinessProcessorRules.GetOldTNAMEIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_EVENTOSTNAME]); +end; + +procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetTNAMEValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSTNAME] := aValue; +end; + +procedure TUSUARIOS_EVENTOSBusinessProcessorRules.SetTNAMEIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_EVENTOSTNAME] := Null; +end; + + +{ TUSUARIOS_LOGONBusinessProcessorRules } +constructor TUSUARIOS_LOGONBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); +begin + inherited; +end; + +destructor TUSUARIOS_LOGONBusinessProcessorRules.Destroy; +begin + inherited; +end; + +function TUSUARIOS_LOGONBusinessProcessorRules.GetLOGONIDValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONLOGONID]; +end; + +function TUSUARIOS_LOGONBusinessProcessorRules.GetLOGONIDIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONLOGONID]); +end; + +function TUSUARIOS_LOGONBusinessProcessorRules.GetOldLOGONIDValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_LOGONLOGONID]; +end; + +function TUSUARIOS_LOGONBusinessProcessorRules.GetOldLOGONIDIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_LOGONLOGONID]); +end; + +procedure TUSUARIOS_LOGONBusinessProcessorRules.SetLOGONIDValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONLOGONID] := aValue; +end; + +procedure TUSUARIOS_LOGONBusinessProcessorRules.SetLOGONIDIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONLOGONID] := Null; +end; + +function TUSUARIOS_LOGONBusinessProcessorRules.GetID_USUARIOValue: Integer; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONID_USUARIO]; +end; + +function TUSUARIOS_LOGONBusinessProcessorRules.GetID_USUARIOIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONID_USUARIO]); +end; + +function TUSUARIOS_LOGONBusinessProcessorRules.GetOldID_USUARIOValue: Integer; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_LOGONID_USUARIO]; +end; + +function TUSUARIOS_LOGONBusinessProcessorRules.GetOldID_USUARIOIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_LOGONID_USUARIO]); +end; + +procedure TUSUARIOS_LOGONBusinessProcessorRules.SetID_USUARIOValue(const aValue: Integer); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONID_USUARIO] := aValue; +end; + +procedure TUSUARIOS_LOGONBusinessProcessorRules.SetID_USUARIOIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONID_USUARIO] := Null; +end; + +function TUSUARIOS_LOGONBusinessProcessorRules.GetAPLICACIONValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONAPLICACION]; +end; + +function TUSUARIOS_LOGONBusinessProcessorRules.GetAPLICACIONIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONAPLICACION]); +end; + +function TUSUARIOS_LOGONBusinessProcessorRules.GetOldAPLICACIONValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_LOGONAPLICACION]; +end; + +function TUSUARIOS_LOGONBusinessProcessorRules.GetOldAPLICACIONIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_LOGONAPLICACION]); +end; + +procedure TUSUARIOS_LOGONBusinessProcessorRules.SetAPLICACIONValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONAPLICACION] := aValue; +end; + +procedure TUSUARIOS_LOGONBusinessProcessorRules.SetAPLICACIONIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONAPLICACION] := Null; +end; + +function TUSUARIOS_LOGONBusinessProcessorRules.GetEQUIPOValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONEQUIPO]; +end; + +function TUSUARIOS_LOGONBusinessProcessorRules.GetEQUIPOIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONEQUIPO]); +end; + +function TUSUARIOS_LOGONBusinessProcessorRules.GetOldEQUIPOValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_LOGONEQUIPO]; +end; + +function TUSUARIOS_LOGONBusinessProcessorRules.GetOldEQUIPOIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_LOGONEQUIPO]); +end; + +procedure TUSUARIOS_LOGONBusinessProcessorRules.SetEQUIPOValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONEQUIPO] := aValue; +end; + +procedure TUSUARIOS_LOGONBusinessProcessorRules.SetEQUIPOIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONEQUIPO] := Null; +end; + +function TUSUARIOS_LOGONBusinessProcessorRules.GetDATAValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONDATA]; +end; + +function TUSUARIOS_LOGONBusinessProcessorRules.GetDATAIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONDATA]); +end; + +function TUSUARIOS_LOGONBusinessProcessorRules.GetOldDATAValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_LOGONDATA]; +end; + +function TUSUARIOS_LOGONBusinessProcessorRules.GetOldDATAIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_USUARIOS_LOGONDATA]); +end; + +procedure TUSUARIOS_LOGONBusinessProcessorRules.SetDATAValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONDATA] := aValue; +end; + +procedure TUSUARIOS_LOGONBusinessProcessorRules.SetDATAIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_USUARIOS_LOGONDATA] := Null; +end; + + +{ TPERFILESBusinessProcessorRules } +constructor TPERFILESBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); +begin + inherited; +end; + +destructor TPERFILESBusinessProcessorRules.Destroy; +begin + inherited; +end; + +function TPERFILESBusinessProcessorRules.GetIDValue: Integer; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESID]; +end; + +function TPERFILESBusinessProcessorRules.GetIDIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESID]); +end; + +function TPERFILESBusinessProcessorRules.GetOldIDValue: Integer; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_PERFILESID]; +end; + +function TPERFILESBusinessProcessorRules.GetOldIDIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PERFILESID]); +end; + +procedure TPERFILESBusinessProcessorRules.SetIDValue(const aValue: Integer); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESID] := aValue; +end; + +procedure TPERFILESBusinessProcessorRules.SetIDIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESID] := Null; +end; + +function TPERFILESBusinessProcessorRules.GetUSERNAMEValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESUSERNAME]; +end; + +function TPERFILESBusinessProcessorRules.GetUSERNAMEIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESUSERNAME]); +end; + +function TPERFILESBusinessProcessorRules.GetOldUSERNAMEValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_PERFILESUSERNAME]; +end; + +function TPERFILESBusinessProcessorRules.GetOldUSERNAMEIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PERFILESUSERNAME]); +end; + +procedure TPERFILESBusinessProcessorRules.SetUSERNAMEValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESUSERNAME] := aValue; +end; + +procedure TPERFILESBusinessProcessorRules.SetUSERNAMEIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESUSERNAME] := Null; +end; + +function TPERFILESBusinessProcessorRules.GetLOGINValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESLOGIN]; +end; + +function TPERFILESBusinessProcessorRules.GetLOGINIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESLOGIN]); +end; + +function TPERFILESBusinessProcessorRules.GetOldLOGINValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_PERFILESLOGIN]; +end; + +function TPERFILESBusinessProcessorRules.GetOldLOGINIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PERFILESLOGIN]); +end; + +procedure TPERFILESBusinessProcessorRules.SetLOGINValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESLOGIN] := aValue; +end; + +procedure TPERFILESBusinessProcessorRules.SetLOGINIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESLOGIN] := Null; +end; + +function TPERFILESBusinessProcessorRules.GetTIPOValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESTIPO]; +end; + +function TPERFILESBusinessProcessorRules.GetTIPOIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESTIPO]); +end; + +function TPERFILESBusinessProcessorRules.GetOldTIPOValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_PERFILESTIPO]; +end; + +function TPERFILESBusinessProcessorRules.GetOldTIPOIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PERFILESTIPO]); +end; + +procedure TPERFILESBusinessProcessorRules.SetTIPOValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESTIPO] := aValue; +end; + +procedure TPERFILESBusinessProcessorRules.SetTIPOIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_PERFILESTIPO] := Null; +end; + + +{ TPERMISOSBusinessProcessorRules } +constructor TPERMISOSBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); +begin + inherited; +end; + +destructor TPERMISOSBusinessProcessorRules.Destroy; +begin + inherited; +end; + +function TPERMISOSBusinessProcessorRules.GetIDValue: Integer; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSID]; +end; + +function TPERMISOSBusinessProcessorRules.GetIDIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSID]); +end; + +function TPERMISOSBusinessProcessorRules.GetOldIDValue: Integer; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSID]; +end; + +function TPERMISOSBusinessProcessorRules.GetOldIDIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSID]); +end; + +procedure TPERMISOSBusinessProcessorRules.SetIDValue(const aValue: Integer); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSID] := aValue; +end; + +procedure TPERMISOSBusinessProcessorRules.SetIDIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSID] := Null; +end; + +function TPERMISOSBusinessProcessorRules.GetID_USUARIOValue: Integer; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSID_USUARIO]; +end; + +function TPERMISOSBusinessProcessorRules.GetID_USUARIOIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSID_USUARIO]); +end; + +function TPERMISOSBusinessProcessorRules.GetOldID_USUARIOValue: Integer; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSID_USUARIO]; +end; + +function TPERMISOSBusinessProcessorRules.GetOldID_USUARIOIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSID_USUARIO]); +end; + +procedure TPERMISOSBusinessProcessorRules.SetID_USUARIOValue(const aValue: Integer); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSID_USUARIO] := aValue; +end; + +procedure TPERMISOSBusinessProcessorRules.SetID_USUARIOIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSID_USUARIO] := Null; +end; + +function TPERMISOSBusinessProcessorRules.GetMODULOValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSMODULO]; +end; + +function TPERMISOSBusinessProcessorRules.GetMODULOIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSMODULO]); +end; + +function TPERMISOSBusinessProcessorRules.GetOldMODULOValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSMODULO]; +end; + +function TPERMISOSBusinessProcessorRules.GetOldMODULOIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSMODULO]); +end; + +procedure TPERMISOSBusinessProcessorRules.SetMODULOValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSMODULO] := aValue; +end; + +procedure TPERMISOSBusinessProcessorRules.SetMODULOIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSMODULO] := Null; +end; + +function TPERMISOSBusinessProcessorRules.GetNOMBRECOMPValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSNOMBRECOMP]; +end; + +function TPERMISOSBusinessProcessorRules.GetNOMBRECOMPIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSNOMBRECOMP]); +end; + +function TPERMISOSBusinessProcessorRules.GetOldNOMBRECOMPValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSNOMBRECOMP]; +end; + +function TPERMISOSBusinessProcessorRules.GetOldNOMBRECOMPIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSNOMBRECOMP]); +end; + +procedure TPERMISOSBusinessProcessorRules.SetNOMBRECOMPValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSNOMBRECOMP] := aValue; +end; + +procedure TPERMISOSBusinessProcessorRules.SetNOMBRECOMPIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSNOMBRECOMP] := Null; +end; + +function TPERMISOSBusinessProcessorRules.GetCHECKSUMValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSCHECKSUM]; +end; + +function TPERMISOSBusinessProcessorRules.GetCHECKSUMIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSCHECKSUM]); +end; + +function TPERMISOSBusinessProcessorRules.GetOldCHECKSUMValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSCHECKSUM]; +end; + +function TPERMISOSBusinessProcessorRules.GetOldCHECKSUMIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSCHECKSUM]); +end; + +procedure TPERMISOSBusinessProcessorRules.SetCHECKSUMValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSCHECKSUM] := aValue; +end; + +procedure TPERMISOSBusinessProcessorRules.SetCHECKSUMIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSCHECKSUM] := Null; +end; + + +{ TPERMISOSEXBusinessProcessorRules } +constructor TPERMISOSEXBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); +begin + inherited; +end; + +destructor TPERMISOSEXBusinessProcessorRules.Destroy; +begin + inherited; +end; + +function TPERMISOSEXBusinessProcessorRules.GetIDValue: Integer; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXID]; +end; + +function TPERMISOSEXBusinessProcessorRules.GetIDIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXID]); +end; + +function TPERMISOSEXBusinessProcessorRules.GetOldIDValue: Integer; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSEXID]; +end; + +function TPERMISOSEXBusinessProcessorRules.GetOldIDIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSEXID]); +end; + +procedure TPERMISOSEXBusinessProcessorRules.SetIDValue(const aValue: Integer); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXID] := aValue; +end; + +procedure TPERMISOSEXBusinessProcessorRules.SetIDIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXID] := Null; +end; + +function TPERMISOSEXBusinessProcessorRules.GetID_USUARIOValue: Integer; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXID_USUARIO]; +end; + +function TPERMISOSEXBusinessProcessorRules.GetID_USUARIOIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXID_USUARIO]); +end; + +function TPERMISOSEXBusinessProcessorRules.GetOldID_USUARIOValue: Integer; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSEXID_USUARIO]; +end; + +function TPERMISOSEXBusinessProcessorRules.GetOldID_USUARIOIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSEXID_USUARIO]); +end; + +procedure TPERMISOSEXBusinessProcessorRules.SetID_USUARIOValue(const aValue: Integer); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXID_USUARIO] := aValue; +end; + +procedure TPERMISOSEXBusinessProcessorRules.SetID_USUARIOIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXID_USUARIO] := Null; +end; + +function TPERMISOSEXBusinessProcessorRules.GetMODULOValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXMODULO]; +end; + +function TPERMISOSEXBusinessProcessorRules.GetMODULOIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXMODULO]); +end; + +function TPERMISOSEXBusinessProcessorRules.GetOldMODULOValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSEXMODULO]; +end; + +function TPERMISOSEXBusinessProcessorRules.GetOldMODULOIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSEXMODULO]); +end; + +procedure TPERMISOSEXBusinessProcessorRules.SetMODULOValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXMODULO] := aValue; +end; + +procedure TPERMISOSEXBusinessProcessorRules.SetMODULOIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXMODULO] := Null; +end; + +function TPERMISOSEXBusinessProcessorRules.GetNOMBRECOMPValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXNOMBRECOMP]; +end; + +function TPERMISOSEXBusinessProcessorRules.GetNOMBRECOMPIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXNOMBRECOMP]); +end; + +function TPERMISOSEXBusinessProcessorRules.GetOldNOMBRECOMPValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSEXNOMBRECOMP]; +end; + +function TPERMISOSEXBusinessProcessorRules.GetOldNOMBRECOMPIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSEXNOMBRECOMP]); +end; + +procedure TPERMISOSEXBusinessProcessorRules.SetNOMBRECOMPValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXNOMBRECOMP] := aValue; +end; + +procedure TPERMISOSEXBusinessProcessorRules.SetNOMBRECOMPIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXNOMBRECOMP] := Null; +end; + +function TPERMISOSEXBusinessProcessorRules.GetNOMBREFORMValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXNOMBREFORM]; +end; + +function TPERMISOSEXBusinessProcessorRules.GetNOMBREFORMIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXNOMBREFORM]); +end; + +function TPERMISOSEXBusinessProcessorRules.GetOldNOMBREFORMValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSEXNOMBREFORM]; +end; + +function TPERMISOSEXBusinessProcessorRules.GetOldNOMBREFORMIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSEXNOMBREFORM]); +end; + +procedure TPERMISOSEXBusinessProcessorRules.SetNOMBREFORMValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXNOMBREFORM] := aValue; +end; + +procedure TPERMISOSEXBusinessProcessorRules.SetNOMBREFORMIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXNOMBREFORM] := Null; +end; + +function TPERMISOSEXBusinessProcessorRules.GetCHECKSUMValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXCHECKSUM]; +end; + +function TPERMISOSEXBusinessProcessorRules.GetCHECKSUMIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXCHECKSUM]); +end; + +function TPERMISOSEXBusinessProcessorRules.GetOldCHECKSUMValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSEXCHECKSUM]; +end; + +function TPERMISOSEXBusinessProcessorRules.GetOldCHECKSUMIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PERMISOSEXCHECKSUM]); +end; + +procedure TPERMISOSEXBusinessProcessorRules.SetCHECKSUMValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXCHECKSUM] := aValue; +end; + +procedure TPERMISOSEXBusinessProcessorRules.SetCHECKSUMIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_PERMISOSEXCHECKSUM] := Null; +end; + + +initialization + RegisterBusinessProcessorRules(RID_USUARIOSDelta, TUSUARIOSBusinessProcessorRules); + RegisterBusinessProcessorRules(RID_USUARIOS_EVENTOSDelta, TUSUARIOS_EVENTOSBusinessProcessorRules); + RegisterBusinessProcessorRules(RID_USUARIOS_LOGONDelta, TUSUARIOS_LOGONBusinessProcessorRules); + RegisterBusinessProcessorRules(RID_PERFILESDelta, TPERFILESBusinessProcessorRules); + RegisterBusinessProcessorRules(RID_PERMISOSDelta, TPERMISOSBusinessProcessorRules); + RegisterBusinessProcessorRules(RID_PERMISOSEXDelta, TPERMISOSEXBusinessProcessorRules); + +end. diff --git a/Source/ApplicationBase/Usuarios/Model/uBizUsuarios.pas b/Source/ApplicationBase/Usuarios/Model/uBizUsuarios.pas new file mode 100644 index 0000000..7d39a13 --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Model/uBizUsuarios.pas @@ -0,0 +1,90 @@ +unit uBizUsuarios; + +interface + +uses + UCBase, uDAInterfaces, uDADataTable, schUsuariosClient_Intf; + +const + BIZ_CLIENT_USUARIO = 'Client.Usuario'; + BIZ_CLIENT_PERFIL_USUARIO = 'Client.PerfilUsuario'; + +type + TUsuario = TUCCurrentUser; + + IBizUsuario = interface (IUSUARIOS) + ['{1DB69F36-969C-4078-B862-6D697670BCFD}'] + function EsNuevo : Boolean; + end; + + IBizPerfilUsuario = interface (IPERFILES) + ['{D14DF996-A8CD-400A-BF74-C8B660199C74}'] + function EsNuevo : Boolean; + end; + + + TBizUsuario = class(TUsuariosDataTableRules, IBizUsuario) + protected + procedure OnNewRecord(Sender: TDADataTable); override; + public + function EsNuevo : Boolean; + procedure IniciarValoresUsuarioNuevo; + end; + + TBizPerfilUsuario = class(TPerfilesDataTableRules, IBizPerfilUsuario) + protected + procedure OnNewRecord(Sender: TDADataTable); override; + public + function EsNuevo : Boolean; + procedure IniciarValoresPerfilNuevo; + end; + + + +implementation + +{ TBizUsuario } + +function TBizUsuario.EsNuevo: Boolean; +begin + Result := (ID < 0); +end; + +procedure TBizUsuario.IniciarValoresUsuarioNuevo; +begin + TIPO := 'U'; // Usuario; +end; + +procedure TBizUsuario.OnNewRecord(Sender: TDADataTable); +begin + inherited; + IniciarValoresUsuarioNuevo; +end; + +{ TBizPerfilUsuario } + +function TBizPerfilUsuario.EsNuevo: Boolean; +begin + Result := (ID < 0); +end; + +procedure TBizPerfilUsuario.IniciarValoresPerfilNuevo; +begin + TIPO := 'P'; // Perfil +end; + +procedure TBizPerfilUsuario.OnNewRecord(Sender: TDADataTable); +begin + inherited; + IniciarValoresPerfilNuevo; +end; + +initialization + RegisterDataTableRules(BIZ_CLIENT_USUARIO, TBizUsuario); + RegisterDataTableRules(BIZ_CLIENT_PERFIL_USUARIO, TBizPerfilUsuario); + +finalization + +end. + + diff --git a/Source/ApplicationBase/Usuarios/Servidor/srvUsuarios_Impl.dfm b/Source/ApplicationBase/Usuarios/Servidor/srvUsuarios_Impl.dfm new file mode 100644 index 0000000..24dd6f3 --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Servidor/srvUsuarios_Impl.dfm @@ -0,0 +1,600 @@ +object srvUsuarios: TsrvUsuarios + OldCreateOrder = True + OnCreate = DataAbstractServiceCreate + SessionManager = dmServer.SessionManager + ServiceSchema = schUsuarios + ServiceDataStreamer = Bin2DataStreamer + AllowExecuteSQL = True + AllowWhereSQL = True + ExportedDataTables = <> + BeforeAcquireConnection = DataAbstractServiceBeforeAcquireConnection + Height = 163 + Width = 300 + object Diagrams: TDADiagrams + Left = 150 + Top = 88 + DiagramData = ''#13#10''#13#10 + end + object DataDictionary: TDADataDictionary + Fields = < + item + Name = 'USUARIOS_ID' + DataType = datAutoInc + GeneratorName = 'GEN_USUARIOS_ID' + Required = True + DisplayLabel = 'ID' + end + item + Name = 'USUARIOS_USERNAME' + DataType = datString + Size = 30 + DisplayLabel = 'Nombre' + end + item + Name = 'USUARIOS_LOGIN' + DataType = datString + Size = 30 + DisplayLabel = 'Login' + end + item + Name = 'USUARIOS_PASS' + DataType = datString + Size = 250 + DisplayLabel = 'Password' + end + item + Name = 'USUARIOS_PASSEXPIRED' + DataType = datDateTime + DisplayLabel = 'Expiraci'#243'n de password' + end + item + Name = 'USUARIOS_BLOQUEADO' + DataType = datSmallInt + DisplayLabel = 'Bloqueado' + end + item + Name = 'USUARIOS_EMAIL' + DataType = datString + Size = 150 + DisplayLabel = 'Correo electr'#243'nico' + end + item + Name = 'USUARIOS_USERDAYSSUN' + DataType = datInteger + end + item + Name = 'USUARIOS_PRIVILEGED' + DataType = datInteger + DisplayLabel = 'Privilegiado' + end + item + Name = 'USUARIOS_TIPO' + DataType = datString + Size = 1 + DisplayLabel = 'Tipo' + end + item + Name = 'USUARIOS_ID_PERFIL' + DataType = datInteger + DisplayLabel = 'ID_PERFIL' + end + item + Name = 'USUARIOS_CHECKSUM' + DataType = datString + Size = 250 + DisplayLabel = 'Checksum' + end + item + Name = 'PERFILES_ID' + DataType = datAutoInc + GeneratorName = 'GEN_USUARIOS_ID' + Required = True + DisplayLabel = 'ID' + end + item + Name = 'PERFILES_USERNAME' + DataType = datString + Size = 30 + DisplayLabel = 'Nombre' + end + item + Name = 'PERFILES_LOGIN' + DataType = datString + Size = 30 + DisplayLabel = 'Login' + end + item + Name = 'PERFILES_TIPO' + DataType = datString + Size = 1 + DisplayLabel = 'Tipo' + end> + Left = 150 + Top = 24 + end + object schUsuarios: TDASchema + ConnectionManager = dmServer.ConnectionManager + DataDictionary = DataDictionary + Diagrams = Diagrams + Datasets = < + item + Params = <> + Statements = < + item + Connection = 'GFT_VARELA' + Default = True + TargetTable = 'RDX_USUARIOS' + SQL = + 'SELECT'#10' ID, USERNAME, LOGIN, PASS, PASSEXPIRED, BLOQUEADO,'#10' ' + + ' EMAIL, USERDAYSSUN, PRIVILEGED, TIPO, ID_PERFIL, CHECKSUM'#10' FR' + + 'OM'#10' RDX_USUARIOS'#10' WHERE TIPO = '#39'U'#39' AND {Where}'#10' ORDER BY US' + + 'ERNAME'#10 + StatementType = stSQL + ColumnMappings = < + item + DatasetField = 'ID' + TableField = 'ID' + end + item + DatasetField = 'USERNAME' + TableField = 'USERNAME' + end + item + DatasetField = 'LOGIN' + TableField = 'LOGIN' + end + item + DatasetField = 'PASS' + TableField = 'PASS' + end + item + DatasetField = 'PASSEXPIRED' + TableField = 'PASSEXPIRED' + end + item + DatasetField = 'BLOQUEADO' + TableField = 'BLOQUEADO' + end + item + DatasetField = 'EMAIL' + TableField = 'EMAIL' + end + item + DatasetField = 'USERDAYSSUN' + TableField = 'USERDAYSSUN' + end + item + DatasetField = 'PRIVILEGED' + TableField = 'PRIVILEGED' + end + item + DatasetField = 'TIPO' + TableField = 'TIPO' + end + item + DatasetField = 'ID_PERFIL' + TableField = 'ID_PERFIL' + end + item + DatasetField = 'CHECKSUM' + TableField = 'CHECKSUM' + end> + end> + Name = 'USUARIOS' + Fields = < + item + Name = 'ID' + DataType = datAutoInc + GeneratorName = 'GEN_USUARIOS_ID' + DictionaryEntry = 'USUARIOS_ID' + InPrimaryKey = True + end + item + Name = 'USERNAME' + DataType = datString + Size = 30 + DictionaryEntry = 'USUARIOS_USERNAME' + end + item + Name = 'LOGIN' + DataType = datString + Size = 30 + DictionaryEntry = 'USUARIOS_LOGIN' + end + item + Name = 'PASS' + DataType = datString + Size = 250 + DictionaryEntry = 'USUARIOS_PASS' + end + item + Name = 'PASSEXPIRED' + DataType = datDateTime + DictionaryEntry = 'USUARIOS_PASSEXPIRED' + end + item + Name = 'BLOQUEADO' + DataType = datSmallInt + DictionaryEntry = 'USUARIOS_BLOQUEADO' + end + item + Name = 'EMAIL' + DataType = datString + Size = 150 + DictionaryEntry = 'USUARIOS_EMAIL' + end + item + Name = 'USERDAYSSUN' + DataType = datInteger + DictionaryEntry = 'USUARIOS_USERDAYSSUN' + end + item + Name = 'PRIVILEGED' + DataType = datInteger + DictionaryEntry = 'USUARIOS_PRIVILEGED' + end + item + Name = 'TIPO' + DataType = datString + Size = 1 + DictionaryEntry = 'USUARIOS_TIPO' + end + item + Name = 'ID_PERFIL' + DataType = datInteger + DictionaryEntry = 'USUARIOS_ID_PERFIL' + end + item + Name = 'CHECKSUM' + DataType = datString + Size = 250 + DictionaryEntry = 'USUARIOS_CHECKSUM' + end> + end + item + Params = <> + Statements = < + item + Connection = 'GFT_VARELA' + Default = True + TargetTable = 'RDX_USUARIOS_EVENTOS' + StatementType = stAutoSQL + ColumnMappings = < + item + DatasetField = 'APLICACION' + TableField = 'APLICACION' + end + item + DatasetField = 'ID_USUARIO' + TableField = 'ID_USUARIO' + end + item + DatasetField = 'FECHA' + TableField = 'FECHA' + end + item + DatasetField = 'HORA' + TableField = 'HORA' + end + item + DatasetField = 'FORM' + TableField = 'FORM' + end + item + DatasetField = 'TITULO_FORM' + TableField = 'TITULO_FORM' + end + item + DatasetField = 'EVENTO' + TableField = 'EVENTO' + end + item + DatasetField = 'NOTAS' + TableField = 'NOTAS' + end + item + DatasetField = 'TNAME' + TableField = 'TNAME' + end> + end> + Name = 'USUARIOS_EVENTOS' + Fields = < + item + Name = 'APLICACION' + DataType = datString + Size = 250 + end + item + Name = 'ID_USUARIO' + DataType = datInteger + end + item + Name = 'FECHA' + DataType = datString + Size = 10 + end + item + Name = 'HORA' + DataType = datString + Size = 8 + end + item + Name = 'FORM' + DataType = datString + Size = 250 + end + item + Name = 'TITULO_FORM' + DataType = datString + Size = 100 + end + item + Name = 'EVENTO' + DataType = datString + Size = 50 + end + item + Name = 'NOTAS' + DataType = datMemo + end + item + Name = 'TNAME' + DataType = datString + Size = 20 + end> + end + item + Params = <> + Statements = < + item + Connection = 'GFT_VARELA' + TargetTable = 'RDX_USUARIOS_LOGON' + StatementType = stAutoSQL + ColumnMappings = < + item + DatasetField = 'LOGONID' + TableField = 'LOGONID' + end + item + DatasetField = 'ID_USUARIO' + TableField = 'ID_USUARIO' + end + item + DatasetField = 'APLICACION' + TableField = 'APLICACION' + end + item + DatasetField = 'EQUIPO' + TableField = 'EQUIPO' + end + item + DatasetField = 'DATA' + TableField = 'DATA' + end> + end> + Name = 'USUARIOS_LOGON' + Fields = < + item + Name = 'LOGONID' + DataType = datString + Size = 38 + Required = True + InPrimaryKey = True + end + item + Name = 'ID_USUARIO' + DataType = datInteger + end + item + Name = 'APLICACION' + DataType = datString + Size = 50 + end + item + Name = 'EQUIPO' + DataType = datString + Size = 50 + end + item + Name = 'DATA' + DataType = datString + Size = 14 + end> + end + item + Params = <> + Statements = < + item + Connection = 'GFT_VARELA' + TargetTable = 'RDX_USUARIOS' + SQL = + 'SELECT '#10' ID, USERNAME, LOGIN, TIPO'#10' FROM'#10' RDX_USUARIOS'#10' ' + + 'WHERE TIPO = '#39'P'#39' AND {Where}'#10' ORDER BY USERNAME'#10 + StatementType = stSQL + ColumnMappings = < + item + DatasetField = 'ID' + TableField = 'ID' + end + item + DatasetField = 'USERNAME' + TableField = 'USERNAME' + end + item + DatasetField = 'LOGIN' + TableField = 'LOGIN' + end + item + DatasetField = 'TIPO' + TableField = 'TIPO' + end> + end> + Name = 'PERFILES' + Fields = < + item + Name = 'ID' + DataType = datAutoInc + GeneratorName = 'GEN_USUARIOS_ID' + DictionaryEntry = 'PERFILES_ID' + InPrimaryKey = True + end + item + Name = 'USERNAME' + DataType = datString + Size = 30 + DictionaryEntry = 'PERFILES_USERNAME' + end + item + Name = 'LOGIN' + DataType = datString + Size = 30 + DictionaryEntry = 'PERFILES_LOGIN' + end + item + Name = 'TIPO' + DataType = datString + Size = 1 + DictionaryEntry = 'PERFILES_TIPO' + end> + end + item + Params = <> + Statements = < + item + Connection = 'GFT_VARELA' + ConnectionType = 'MSSQL' + Default = True + TargetTable = 'RDX_PERMISOS' + StatementType = stAutoSQL + ColumnMappings = < + item + DatasetField = 'ID' + TableField = 'ID' + end + item + DatasetField = 'ID_USUARIO' + TableField = 'ID_USUARIO' + end + item + DatasetField = 'MODULO' + TableField = 'MODULO' + end + item + DatasetField = 'NOMBRECOMP' + TableField = 'NOMBRECOMP' + end + item + DatasetField = 'CHECKSUM' + TableField = 'CHECKSUM' + end> + end> + Name = 'PERMISOS' + Fields = < + item + Name = 'ID' + DataType = datInteger + Required = True + InPrimaryKey = True + end + item + Name = 'ID_USUARIO' + DataType = datInteger + end + item + Name = 'MODULO' + DataType = datString + Size = 50 + end + item + Name = 'NOMBRECOMP' + DataType = datString + Size = 50 + end + item + Name = 'CHECKSUM' + DataType = datString + Size = 250 + end> + end + item + Params = <> + Statements = < + item + Connection = 'GFT_VARELA' + ConnectionType = 'MSSQL' + Default = True + TargetTable = 'RDX_PERMISOSEX' + StatementType = stAutoSQL + ColumnMappings = < + item + DatasetField = 'ID' + TableField = 'ID' + end + item + DatasetField = 'ID_USUARIO' + TableField = 'ID_USUARIO' + end + item + DatasetField = 'MODULO' + TableField = 'MODULO' + end + item + DatasetField = 'NOMBRECOMP' + TableField = 'NOMBRECOMP' + end + item + DatasetField = 'NOMBREFORM' + TableField = 'NOMBREFORM' + end + item + DatasetField = 'CHECKSUM' + TableField = 'CHECKSUM' + end> + end> + Name = 'PERMISOSEX' + Fields = < + item + Name = 'ID' + DataType = datInteger + Required = True + InPrimaryKey = True + end + item + Name = 'ID_USUARIO' + DataType = datInteger + end + item + Name = 'MODULO' + DataType = datString + Size = 50 + end + item + Name = 'NOMBRECOMP' + DataType = datString + Size = 50 + end + item + Name = 'NOMBREFORM' + DataType = datString + Size = 50 + end + item + Name = 'CHECKSUM' + DataType = datString + Size = 250 + end> + end> + JoinDataTables = <> + UnionDataTables = <> + Commands = <> + RelationShips = <> + UpdateRules = <> + Version = 0 + Left = 48 + Top = 24 + end + object Bin2DataStreamer: TDABin2DataStreamer + Left = 48 + Top = 88 + end +end diff --git a/Source/ApplicationBase/Usuarios/Servidor/srvUsuarios_Impl.pas b/Source/ApplicationBase/Usuarios/Servidor/srvUsuarios_Impl.pas new file mode 100644 index 0000000..18cb2f6 --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Servidor/srvUsuarios_Impl.pas @@ -0,0 +1,65 @@ +unit srvUsuarios_Impl; + +{----------------------------------------------------------------------------} +{ This unit was automatically generated by the RemObjects SDK after reading } +{ the RODL file associated with this project . } +{ } +{ This is where you are supposed to code the implementation of your objects. } +{----------------------------------------------------------------------------} + +{$I Remobjects.inc} + +interface + +uses + {vcl:} Classes, SysUtils, + {RemObjects:} uROXMLIntf, uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions, + {Required:} uRORemoteDataModule, + {Ancestor Implementation:} DataAbstractService_Impl, + {Used RODLs:} DataAbstract4_Intf, + {Generated:} VARELA_Intf, uDADataStreamer, uDABin2DataStreamer, uDAClasses; + +type + { TsrvUsuarios } + TsrvUsuarios = class(TDataAbstractService, IsrvUsuarios) + Diagrams: TDADiagrams; + Bin2DataStreamer: TDABin2DataStreamer; + schUsuarios: TDASchema; + DataDictionary: TDADataDictionary; + procedure DataAbstractServiceBeforeAcquireConnection(aSender: TObject; + var aConnectionName: string); + procedure DataAbstractServiceCreate(Sender: TObject); + private + protected + { IsrvUsuarios methods } + end; + +implementation + +{$R *.dfm} +uses + {Generated:} VARELA_Invk, uDataModuleServer; + +procedure Create_srvUsuarios(out anInstance : IUnknown); +begin + anInstance := TsrvUsuarios.Create(nil); +end; + +{ srvUsuarios } +procedure TsrvUsuarios.DataAbstractServiceBeforeAcquireConnection( + aSender: TObject; var aConnectionName: string); +begin + ConnectionName := dmServer.ConnectionName; +end; + +procedure TsrvUsuarios.DataAbstractServiceCreate(Sender: TObject); +begin + SessionManager := dmServer.SessionManager; +end; + +initialization + TROClassFactory.Create('srvUsuarios', Create_srvUsuarios, TsrvUsuarios_Invoker); + +finalization + +end. diff --git a/Source/ApplicationBase/Usuarios/Usuarios.cfg b/Source/ApplicationBase/Usuarios/Usuarios.cfg new file mode 100644 index 0000000..96c8d0b --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Usuarios.cfg @@ -0,0 +1,45 @@ +-$A8 +-$B- +-$C+ +-$D+ +-$E- +-$F- +-$G+ +-$H+ +-$I+ +-$J- +-$K- +-$L+ +-$M- +-$N+ +-$O+ +-$P+ +-$Q- +-$R- +-$S- +-$T- +-$U- +-$V+ +-$W- +-$X+ +-$YD +-$Z1 +-GD +-cg +-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +-H+ +-W+ +-M +-$M16384,1048576 +-K$00400000 +-N".\" +-LE"..\..\Output\Cliente" +-LN"..\Lib" +-U"..\Lib" +-O"..\Lib" +-I"..\Lib" +-R"..\Lib" +-Z +-w-UNSAFE_TYPE +-w-UNSAFE_CODE +-w-UNSAFE_CAST diff --git a/Source/ApplicationBase/Usuarios/Usuarios.dof b/Source/ApplicationBase/Usuarios/Usuarios.dof new file mode 100644 index 0000000..908913c --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Usuarios.dof @@ -0,0 +1,471 @@ +[FileVersion] +Version=7.0 +[Compiler] +A=8 +B=0 +C=1 +D=1 +E=0 +F=0 +G=1 +H=1 +I=1 +J=0 +K=0 +L=1 +M=0 +N=1 +O=1 +P=1 +Q=0 +R=0 +S=0 +T=0 +U=0 +V=1 +W=0 +X=1 +Y=1 +Z=1 +ShowHints=1 +ShowWarnings=1 +UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +NamespacePrefix= +SymbolDeprecated=1 +SymbolLibrary=1 +SymbolPlatform=1 +UnitLibrary=1 +UnitPlatform=1 +UnitDeprecated=1 +HResultCompat=1 +HidingMember=1 +HiddenVirtual=1 +Garbage=1 +BoundsError=1 +ZeroNilCompat=1 +StringConstTruncated=1 +ForLoopVarVarPar=1 +TypedConstVarPar=1 +AsgToTypedConst=1 +CaseLabelRange=1 +ForVariable=1 +ConstructingAbstract=1 +ComparisonFalse=1 +ComparisonTrue=1 +ComparingSignedUnsigned=1 +CombiningSignedUnsigned=1 +UnsupportedConstruct=1 +FileOpen=1 +FileOpenUnitSrc=1 +BadGlobalSymbol=1 +DuplicateConstructorDestructor=1 +InvalidDirective=1 +PackageNoLink=1 +PackageThreadVar=1 +ImplicitImport=1 +HPPEMITIgnored=1 +NoRetVal=1 +UseBeforeDef=1 +ForLoopVarUndef=1 +UnitNameMismatch=1 +NoCFGFileFound=1 +MessageDirective=1 +ImplicitVariants=1 +UnicodeToLocale=1 +LocaleToUnicode=1 +ImagebaseMultiple=1 +SuspiciousTypecast=1 +PrivatePropAccessor=1 +UnsafeType=0 +UnsafeCode=0 +UnsafeCast=0 +[Linker] +MapFile=3 +OutputObjs=0 +ConsoleApp=1 +DebugInfo=0 +RemoteSymbols=0 +MinStackSize=16384 +MaxStackSize=1048576 +ImageBase=4194304 +ExeDescription=Pedidos a proveedor +[Directories] +OutputDir= +UnitOutputDir=.\ +PackageDLLOutputDir=..\..\Output\Cliente +PackageDCPOutputDir=..\Lib +SearchPath=..\Lib +Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP;cxLibraryVCLD7;dxThemeD7;cxTreeListVCLD7;cxEditorsVCLD7;cxDataD7;cxExtEditorsVCLD7;cxGridVCLD7;cxPageControlVCLD7;cxSchedulerVCLD7;dxComnD7;dxsbD7;dxBarD7;dxBarDBNavD7;dxBarExtDBItemsD7;dxBarExtItemsD7;dxDockingD7;dxLayoutControlD7;dxNavBarD7;dxPSCoreD7;cxExportVCLD7;cxIntl5D7;cxIntlPrintSys3D7;cxIntlSchedulerD7;fsIBX7;fs7;fqb70;frx7;frxADO7;frxBDE7;frxcs7;frxDB7;frxDBX7;frxe7;frxIBX7;fsADO7;fsBDE7;fsDB7;cxVerticalGridVCLD7 +Conditionals= +DebugSourceDirs= +UsePackages=0 +[Parameters] +RunParams= +HostApplication= +Launcher= +UseLauncher=0 +DebugCWD= +[Language] +ActiveLang= +ProjectLang= +RootDir=C:\Archivos de programa\Borland\Delphi7\Bin\ +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=3 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=3082 +CodePage=1252 +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.3.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= +[Excluded Packages] +c:\archivos de programa\borland\delphi7\Bin\designdgm70.bpl=Borland Module Diagram Editview +T:\BPL_D7\dxPSCoreD7.bpl=ExpressPrinting System by Developer Express Inc. +[HistoryLists\hlUnitAliases] +Count=1 +Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +[HistoryLists\hlSearchPath] +Count=1 +Item0=..\Lib +[HistoryLists\hlUnitOutputDirectory] +Count=1 +Item0=.\ +[HistoryLists\hlBPLOutput] +Count=1 +Item0=..\..\Output\Cliente +[HistoryLists\hlDCPOutput] +Count=1 +Item0=..\Lib +[Exception Log] +EurekaLog Version=519 +Activate=1 +Activate Handle=1 +Save Log File=1 +Foreground Tab=0 +Freeze Activate=0 +Freeze Timeout=60 +Freeze Message=The application seems to be frozen. +SMTP From=eurekalog@email.com +SMTP Host= +SMTP Port=25 +SMTP UserID= +SMTP Password= +Append to Log=0 +Show TerminateBtn=1 +TerminateBtn Operation=1 +Errors Number=32 +Errors Terminate=3 +Email Address= +Email Object= +Email Send Options=0 +Output Path= +Encrypt Password= +AutoCloseDialogSecs=0 +WebSendMode=0 +SupportULR= +HTMLLayout Count=15 +HTMLLine0="%3Chtml%3E" +HTMLLine1=" %3Chead%3E" +HTMLLine2=" %3C/head%3E" +HTMLLine3=" %3Cbody TopMargin=10 LeftMargin=10%3E" +HTMLLine4=" %3Ctable width="100%%" border="0"%3E" +HTMLLine5=" %3Ctr%3E" +HTMLLine6=" %3Ctd nowrap%3E" +HTMLLine7=" %3Cfont face="Lucida Console, Courier" size="2"%3E" +HTMLLine8=" %3C%%HTML_TAG%%%3E" +HTMLLine9=" %3C/font%3E" +HTMLLine10=" %3C/td%3E" +HTMLLine11=" %3C/tr%3E" +HTMLLine12=" %3C/table%3E" +HTMLLine13=" %3C/body%3E" +HTMLLine14="%3C/html%3E" +AutoCrashOperation=1 +AutoCrashNumber=10 +AutoCrashMinutes=1 +WebURL= +WebUserID= +WebPassword= +WebPort=0 +AttachedFiles= +Count=0 +EMail Message Line Count=0 +loNoDuplicateErrors=0 +loAppendReproduceText=0 +loDeleteLogAtVersionChange=0 +loAddComputerNameInLogFileName=0 +loSaveModulesSection=1 +loSaveCPUSection=1 +soAppStartDate=1 +soAppName=1 +soAppVersionNumber=1 +soAppParameters=1 +soAppCompilationDate=1 +soExcDate=1 +soExcAddress=1 +soExcModule=1 +soExcType=1 +soExcMessage=1 +soActCtlsFormClass=1 +soActCtlsFormText=1 +soActCtlsControlClass=1 +soActCtlsControlText=1 +soCmpName=1 +soCmpUser=1 +soCmpTotalMemory=1 +soCmpFreeMemory=1 +soCmpTotalDisk=1 +soCmpFreeDisk=1 +soCmpSysUpTime=1 +soCmpProcessor=1 +soCmpDisplayMode=1 +soOSType=1 +soOSBuildN=1 +soOSUpdate=1 +soOSLanguage=1 +soNetIP=1 +soNetSubmask=1 +soNetGateway=1 +soNetDNS1=1 +soNetDNS2=1 +soNetDHCP=1 +sndShowSendDialog=1 +sndShowSuccessFailureMsg=0 +sndSendEntireLog=0 +sndSendXMLLogCopy=0 +sndSendScreenshot=1 +sndUseOnlyActiveWindow=0 +sndSendLastHTMLPage=1 +sndSendInSeparatedThread=0 +sndAddDateInFileName=0 +sndCompressAllFiles=0 +edoShowExceptionDialog=1 +edoSendEmailChecked=1 +edoAttachScreenshotChecked=1 +edoShowCopyToClipOption=1 +edoShowDetailsButton=1 +edoShowInDetailedMode=0 +edoShowInTopMostMode=0 +edoUseEurekaLogLookAndFeel=0 +csoShowDLLs=1 +csoShowBPLs=1 +csoShowBorlandThreads=1 +csoShowWindowsThreads=1 +csoShowProcedureOffset=0 +boActivateCrashDetection=0 +boPauseBorlandThreads=0 +boDoNotPauseMainThread=0 +boPauseWindowsThreads=0 +boUseMainModuleOptions=1 +boCopyLogInCaseOfError=1 +boSaveCompressedCopyInCaseOfError=0 +Count mtInformationMsgCaption=1 +mtInformationMsgCaption0="Information." +Count mtQuestionMsgCaption=1 +mtQuestionMsgCaption0="Question." +Count mtDialog_Caption=1 +mtDialog_Caption0="Error." +Count mtDialog_ErrorMsgCaption=2 +mtDialog_ErrorMsgCaption0="An error has occurred during program execution." +mtDialog_ErrorMsgCaption1="Please read the following information for further details." +Count mtDialog_GeneralCaption=1 +mtDialog_GeneralCaption0="General" +Count mtDialog_GeneralHeader=1 +mtDialog_GeneralHeader0="General Information" +Count mtDialog_CallStackCaption=1 +mtDialog_CallStackCaption0="Call Stack" +Count mtDialog_CallStackHeader=1 +mtDialog_CallStackHeader0="Call Stack Information" +Count mtDialog_ModulesCaption=1 +mtDialog_ModulesCaption0="Modules" +Count mtDialog_ModulesHeader=1 +mtDialog_ModulesHeader0="Modules Information" +Count mtDialog_CPUCaption=1 +mtDialog_CPUCaption0="CPU" +Count mtDialog_CPUHeader=1 +mtDialog_CPUHeader0="CPU Information" +Count mtDialog_CustomDataCaption=1 +mtDialog_CustomDataCaption0="Other" +Count mtDialog_CustomDataHeader=1 +mtDialog_CustomDataHeader0="Other Information" +Count mtDialog_OKButtonCaption=1 +mtDialog_OKButtonCaption0="%26OK" +Count mtDialog_TerminateButtonCaption=1 +mtDialog_TerminateButtonCaption0="%26Terminate" +Count mtDialog_RestartButtonCaption=1 +mtDialog_RestartButtonCaption0="%26Restart" +Count mtDialog_DetailsButtonCaption=1 +mtDialog_DetailsButtonCaption0="%26Details" +Count mtDialog_SendMessage=1 +mtDialog_SendMessage0="%26Send this error via Internet" +Count mtDialog_ScreenshotMessage=1 +mtDialog_ScreenshotMessage0="%26Attach a Screenshot image" +Count mtDialog_CopyMessage=1 +mtDialog_CopyMessage0="%26Copy to Clipboard" +Count mtDialog_SupportMessage=1 +mtDialog_SupportMessage0="Go to the Support Page" +Count mtLog_AppHeader=1 +mtLog_AppHeader0="Application" +Count mtLog_AppStartDate=1 +mtLog_AppStartDate0="Start Date" +Count mtLog_AppName=1 +mtLog_AppName0="Name/Description" +Count mtLog_AppVersionNumber=1 +mtLog_AppVersionNumber0="Version Number" +Count mtLog_AppParameters=1 +mtLog_AppParameters0="Parameters" +Count mtLog_AppCompilationDate=1 +mtLog_AppCompilationDate0="Compilation Date" +Count mtLog_ExcHeader=1 +mtLog_ExcHeader0="Exception" +Count mtLog_ExcDate=1 +mtLog_ExcDate0="Date" +Count mtLog_ExcAddress=1 +mtLog_ExcAddress0="Address" +Count mtLog_ExcModule=1 +mtLog_ExcModule0="Module" +Count mtLog_ExcType=1 +mtLog_ExcType0="Type" +Count mtLog_ExcMessage=1 +mtLog_ExcMessage0="Message" +Count mtLog_ActCtrlsHeader=1 +mtLog_ActCtrlsHeader0="Active Controls" +Count mtLog_ActCtrlsFormClass=1 +mtLog_ActCtrlsFormClass0="Form Class" +Count mtLog_ActCtrlsFormText=1 +mtLog_ActCtrlsFormText0="Form Text" +Count mtLog_ActCtrlsControlClass=1 +mtLog_ActCtrlsControlClass0="Control Class" +Count mtLog_ActCtrlsControlText=1 +mtLog_ActCtrlsControlText0="Control Text" +Count mtLog_CmpHeader=1 +mtLog_CmpHeader0="Computer" +Count mtLog_CmpName=1 +mtLog_CmpName0="Name" +Count mtLog_CmpUser=1 +mtLog_CmpUser0="User" +Count mtLog_CmpTotalMemory=1 +mtLog_CmpTotalMemory0="Total Memory" +Count mtLog_CmpFreeMemory=1 +mtLog_CmpFreeMemory0="Free Memory" +Count mtLog_CmpTotalDisk=1 +mtLog_CmpTotalDisk0="Total Disk" +Count mtLog_CmpFreeDisk=1 +mtLog_CmpFreeDisk0="Free Disk" +Count mtLog_CmpSystemUpTime=1 +mtLog_CmpSystemUpTime0="System Up Time" +Count mtLog_CmpProcessor=1 +mtLog_CmpProcessor0="Processor" +Count mtLog_CmpDisplayMode=1 +mtLog_CmpDisplayMode0="Display Mode" +Count mtLog_OSHeader=1 +mtLog_OSHeader0="Operating System" +Count mtLog_OSType=1 +mtLog_OSType0="Type" +Count mtLog_OSBuildN=1 +mtLog_OSBuildN0="Build #" +Count mtLog_OSUpdate=1 +mtLog_OSUpdate0="Update" +Count mtLog_OSLanguage=1 +mtLog_OSLanguage0="Language" +Count mtLog_NetHeader=1 +mtLog_NetHeader0="Network" +Count mtLog_NetIP=1 +mtLog_NetIP0="IP Address" +Count mtLog_NetSubmask=1 +mtLog_NetSubmask0="Submask" +Count mtLog_NetGateway=1 +mtLog_NetGateway0="Gateway" +Count mtLog_NetDNS1=1 +mtLog_NetDNS10="DNS 1" +Count mtLog_NetDNS2=1 +mtLog_NetDNS20="DNS 2" +Count mtLog_NetDHCP=1 +mtLog_NetDHCP0="DHCP" +Count mtLog_CustInfoHeader=1 +mtLog_CustInfoHeader0="Custom Information" +Count mtCallStack_Address=1 +mtCallStack_Address0="Address" +Count mtCallStack_Name=1 +mtCallStack_Name0="Module" +Count mtCallStack_Unit=1 +mtCallStack_Unit0="Unit" +Count mtCallStack_Class=1 +mtCallStack_Class0="Class" +Count mtCallStack_Procedure=1 +mtCallStack_Procedure0="Procedure/Method" +Count mtCallStack_Line=1 +mtCallStack_Line0="Line" +Count mtCallStack_MainThread=1 +mtCallStack_MainThread0="Main" +Count mtCallStack_ExceptionThread=1 +mtCallStack_ExceptionThread0="Exception Thread" +Count mtCallStack_RunningThread=1 +mtCallStack_RunningThread0="Running Thread" +Count mtCallStack_CallingThread=1 +mtCallStack_CallingThread0="Calling Thread" +Count mtCallStack_ThreadID=1 +mtCallStack_ThreadID0="ID" +Count mtCallStack_ThreadPriority=1 +mtCallStack_ThreadPriority0="Priority" +Count mtCallStack_ThreadClass=1 +mtCallStack_ThreadClass0="Class" +Count mtSendDialog_Caption=1 +mtSendDialog_Caption0="Send." +Count mtSendDialog_Message=1 +mtSendDialog_Message0="Message" +Count mtSendDialog_Resolving=1 +mtSendDialog_Resolving0="Resolving DNS..." +Count mtSendDialog_Connecting=1 +mtSendDialog_Connecting0="Connecting with server..." +Count mtSendDialog_Connected=1 +mtSendDialog_Connected0="Connected with server." +Count mtSendDialog_Sending=1 +mtSendDialog_Sending0="Sending message..." +Count mtReproduceDialog_Caption=1 +mtReproduceDialog_Caption0="Request" +Count mtReproduceDialog_Request=1 +mtReproduceDialog_Request0="Please describe the steps to reproduce the error:" +Count mtReproduceDialog_OKButtonCaption=1 +mtReproduceDialog_OKButtonCaption0="%26OK" +Count mtModules_Handle=1 +mtModules_Handle0="Handle" +Count mtModules_Name=1 +mtModules_Name0="Name" +Count mtModules_Description=1 +mtModules_Description0="Description" +Count mtModules_Version=1 +mtModules_Version0="Version" +Count mtModules_Size=1 +mtModules_Size0="Size" +Count mtModules_LastModified=1 +mtModules_LastModified0="Modified" +Count mtModules_Path=1 +mtModules_Path0="Path" +Count mtCPU_Registers=1 +mtCPU_Registers0="Registers" +Count mtCPU_Stack=1 +mtCPU_Stack0="Stack" +Count mtCPU_MemoryDump=1 +mtCPU_MemoryDump0="Memory Dump" +Count mtSend_SuccessMsg=1 +mtSend_SuccessMsg0="The message was sent successfully." +Count mtSend_FailureMsg=1 +mtSend_FailureMsg0="Sorry, sending the message didn't work." + + diff --git a/Source/ApplicationBase/Usuarios/Usuarios.dpk b/Source/ApplicationBase/Usuarios/Usuarios.dpk new file mode 100644 index 0000000..7aee746 --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Usuarios.dpk @@ -0,0 +1,67 @@ +package Usuarios; + +{$R *.res} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES ON} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST OFF} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$DESCRIPTION 'Pedidos a proveedor'} +{$IMPLICITBUILD ON} +{$DEFINE DEBUG} + +requires + vcl, + vcldb, + PngComponentsD10, + PNG_D10, + vclactnband, + vclx, + vcljpg, + BaseD10; + +contains + uUsuariosController in 'Controller\uUsuariosController.pas', + uPerfilesUsuarioController in 'Controller\uPerfilesUsuarioController.pas', + uUCROConn in 'Data\uUCROConn.pas', + uDataModuleUsuarios in 'Data\uDataModuleUsuarios.pas', + uBizUsuarios in 'Model\uBizUsuarios.pas', + uIEditorUsuarios in 'Controller\View\uIEditorUsuarios.pas', + uIEditorLogin in 'Controller\View\uIEditorLogin.pas', + uIEditorPerfilesUsuario in 'Controller\View\uIEditorPerfilesUsuario.pas', + uIEditorPerfilUsuario in 'Controller\View\uIEditorPerfilUsuario.pas', + uIEditorUsuario in 'Controller\View\uIEditorUsuario.pas', + uIDataModuleUsuarios in 'Model\Data\uIDataModuleUsuarios.pas', + uViewUsuarios in 'Views\uViewUsuarios.pas', + uEditorCambiarPassword in 'Views\uEditorCambiarPassword.pas', + uEditorLogin in 'Views\uEditorLogin.pas', + uEditorPerfilesUsuario in 'Views\uEditorPerfilesUsuario.pas', + uEditorPerfilUsuario in 'Views\uEditorPerfilUsuario.pas', + uEditorUsuario in 'Views\uEditorUsuario.pas', + uEditorUsuarios in 'Views\uEditorUsuarios.pas', + uUsuario in 'Views\uUsuario.pas', + uUsuarios in 'Views\uUsuarios.pas', + uUsuariosViewRegister in 'Views\uUsuariosViewRegister.pas', + uViewPerfilesUsuario in 'Views\uViewPerfilesUsuario.pas', + uViewPerfilUsuario in 'Views\uViewPerfilUsuario.pas', + uViewUsuario in 'Views\uViewUsuario.pas', + schUsuariosClient_Intf in 'Model\schUsuariosClient_Intf.pas', + schUsuariosServer_Intf in 'Model\schUsuariosServer_Intf.pas'; + +end. diff --git a/Source/ApplicationBase/Usuarios/Usuarios.dproj b/Source/ApplicationBase/Usuarios/Usuarios.dproj new file mode 100644 index 0000000..7362a1f --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Usuarios.dproj @@ -0,0 +1,598 @@ + + + + {c2514fab-bd64-47eb-ac2d-4b0b5460f98f} + Usuarios.dpk + Debug + AnyCPU + DCC32 + ..\..\Output\Debug\Cliente\Usuarios.bpl + + + 7.0 + False + False + 0 + 3 + .\ + .\ + .\ + ..\..\Output\Debug\Cliente + ..\Lib + ..\Lib;..\Base + ..\Lib;..\Base + ..\Lib;..\Base + ..\Lib;..\Base + RELEASE + + + 7.0 + 3 + .\ + .\ + .\ + ..\..\Output\Debug\Cliente + ..\Lib + ..\Lib;..\Base + ..\Lib;..\Base + ..\Lib;..\Base + ..\Lib;..\Base + DEBUG + True + + + Delphi.Personality + Package + +FalseTrueFalsePedidos a proveedorTrueFalseFalseC:\Archivos de programa\Borland\Delphi7\Bin\TrueFalse1030FalseFalseFalseFalseFalse308212521.0.3.01.0.0.0Usuarios.dpk + CodeGear WebSnap Components + CodeGear SOAP Components + Microsoft Office XP Sample Automation Server Wrapper Components + Microsoft Office 2000 Sample Automation Server Wrapper Components + CodeGear C++Builder Office 2000 Servers Package + CodeGear C++Builder Office XP Servers Package + + + + + + MainSource + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/ApplicationBase/Usuarios/Usuarios.drc b/Source/ApplicationBase/Usuarios/Usuarios.drc new file mode 100644 index 0000000..f4a15a0 --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Usuarios.drc @@ -0,0 +1,21 @@ +/* VER185 + Generated by the CodeGear Delphi Pascal Compiler + because -GD or --drc was supplied to the compiler. + + This file contains compiler-generated resources that + were bound to the executable. + If this file is empty, then no compiler-generated + resources were bound to the produced executable. +*/ + +STRINGTABLE +BEGIN +END + +/* C:\Varela_D2007\Source\Usuarios\uLoginForm.dfm */ +/* C:\Varela_D2007\Source\Usuarios\uCambiarPassword.dfm */ +/* C:\Varela_D2007\Source\Usuarios\uDataModuleUsuarios.dfm */ +/* C:\Varela_D2007\Source\Usuarios\uUsuarios.dfm */ +/* C:\Varela_D2007\Source\Usuarios\uUsuario.dfm */ +/* C:\Varela_D2007\Source\Usuarios\Usuarios.res */ +/* C:\DOCUME~1\Usuario\CONFIG~1\Temp\dtfF.tmp */ diff --git a/Source/ApplicationBase/Usuarios/Usuarios.rc b/Source/ApplicationBase/Usuarios/Usuarios.rc new file mode 100644 index 0000000..169f997 --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Usuarios.rc @@ -0,0 +1,22 @@ +1 VERSIONINFO +FILEVERSION 1,0,3,0 +PRODUCTVERSION 1,0,3,0 +FILEFLAGSMASK 0x3FL +FILEFLAGS 0x00L +FILEOS 0x40004L +FILETYPE 0x1L +FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "0C0A04E4" + BEGIN + VALUE "FileVersion", "1.0.3.0\0" + VALUE "ProductVersion", "1.0.0.0\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0C0A, 1252 + END +END diff --git a/Source/ApplicationBase/Usuarios/Usuarios.res b/Source/ApplicationBase/Usuarios/Usuarios.res new file mode 100644 index 0000000000000000000000000000000000000000..bf4c1a49a442bef039b348cda86ff716dc7726f1 GIT binary patch literal 4748 zcmbW5&1)oO5XLJcpe&2#;C*uNAUP}}?!6=G!XEsx;GplEIc6MfM)3~Oc^7Hw*&8nGU6Z&way*i%rqy8^G zU?g^G#*#-nZ+*TOueO<4D-NsTe7Z}UVK-MYX?K0}WqaL|7_;IRKgp%78;kMC1-!r} z4{IDW=J;SYt=Ur8%jBT8d~SQdLE8D4YtOB47!SPQ(09b&ICd}l)!5tm&}}33OU16Z zi60JgY5CiH@Q;8^j)y#}og7@N?{@f;AJ4z9A^(R14`TE^QVv?#!ohhguf|VK@#%43 zk3aW0=D{&FHxqyS^}S-Mu@eW@h|8)t*G{>YJ#n|-Zizqq1|Itu93rni*MKQ0I${bA zv!?8`Vs*UKiUE7-MSsTxW6ZHcQ^8$DNUC$g)QX9;^^ znrl1OVk43N8T~HSgAWEVN8GLTvdMnn%XcFY?&9}_+Y^7=wB9G*)@UEFsliST=z_b3 zEe`ZGm-xhrZ?yC1O6>U5*sPAY-KL8%IM8SR9eXb92|T51=?Uv1err}^2VcTm!=8tq zSHJxd9J=7(XSR_aiPhk%#xD8+lRjJ>e=ZwrYw0S4{CNEG=kdK;t$All@(@SI3jT2}`LVg$qYKXJRlLG{U;=d|w)4&K)JV4NH} z2e6Sz?7w4*JDh04)pH;$uSIbSP5-*Ka<6sZaE1qL`HMX*@h69BjGvsF{1QL;;Y`Xt$4uj*yJDFxLe4t&KvlvB7afCCGNU#nTWG|`JR{fbB}zV$g^z0Auiv0@#D_* zb1GcM!N!NTx8Sqh^IeIb1TG<}KXKzc#~l#ydu@P2KI*bZb8M9VhFA*+wG%(|_V_*j z^5vK{dmCbkpSiqqJV%;~x|bGq#!v0X{%9@u5-?Mkr_K3W%YE60s5|a2IEF9$5x?)h z+QjR5s^wpH%)8GnuzX%?^KN7=&jW4mH{0=}rir`k9sU)6;=AvHAJ{S9Hl=>$H}WrT z8cQrR?+EA=d~W8z_h4S`H)1IGk$?5Iw`QEt%uSrNVSnIO$xds1f26%0>vAT=A%ELh zvx)D0-F5!kkrv$5&bg1P&pkENrg&ikK6fC$RrpFiN}{(}yN$z@_^HpO_N)93(9XNYYeF2o z?uDDR3zpwE1vhIDY@Xz@4WBV;(equ6`Odtr>58}`_B^|sGq48^O|;3y>cc$e>Lw0D z%}>C9%c@?-CdcDFOMB!1*5<<)vh6G+C-w*%zh|n%8+H8d6&%$=zDK6cdUqe21k`67 zNxW_4Pqp3+==wz=(VKr)pt4H|B{0((8JKcff}RMZX>dFOw}as4+vcReb{y6 z1mCxLlEY2)aD^9q2ObyYOv2%A*vT(Bpgp!*F>7sIzOA^{lcu*;NOzJB(EedC5s|w(#Tz(GktbI7G}H1OS9MH`%Pg? zgjET%?-#rMTV^(u^!*$5vAu7P?Gwod_NjC}tKT*FnxXF*2M7LDgRdYvcBIcA2kv8E ze$>%3weefX(auAS9NQDC_5UOLT&>5BP&?iuwRv9b{rM06LUspTF{x)yf8jm){6F{R z6Z^rQ*?0ETzO_fv-`m&n{M5d&Q_cV6Hd944RfJP}C=M{1+UxR{_QzWD%${rYsaEp5 zYY$}ez}|ChT7&&(vO2Y|>__`jsGF;D4eQA3hwkavPP8hKMrLMjD<-oqG$ MuOo+h_y5@Y7gMoM8vp AuxPass then + begin + ShowWarningMessage('Cambiar la contraseña', 'La contraseña actual no es correcta.' + #10#13 + + 'Asegúrese de que la contraseña actual está bien introduccida.'); + EditAtu.SetFocus; + Exit; + end; + + if (EditNova.Text <> EditConfirma.Text) then + begin + ShowWarningMessage('Cambiar la contraseña', 'La contraseña no se confirmó correctamente' + #10#13 + + 'Asegúrese de que la contraseña y su confirmación sean iguales.'); + EditNova.SetFocus; + Exit; + end + else begin + if not Controller.ValidarPassword(EditNova.Text, Usuario.LOGIN, Usuario.USERNAME, AMensaje) then + begin + ShowWarningMessage('Cambiar la contraseña', AMensaje); + EditNova.SetFocus; + Exit; + end + else begin + if CambioObligatorio = True then + CambioObligatorio := False; + ModalResult := mrOK; + end; + end; +end; + +procedure TfEditorCambiarPassword.actCancelarExecute(Sender: TObject); +begin + Close; +end; + +procedure TfEditorCambiarPassword.FormCloseQuery(Sender: TObject; + var CanClose: Boolean); +begin + if CambioObligatorio then + begin + CanClose := False; + ShowWarningMessage('Cambiar la contraseña', 'El cambio de la contraseña es obligatorio'); + end; +end; + +end. diff --git a/Source/ApplicationBase/Usuarios/Views/uEditorLogin.dfm b/Source/ApplicationBase/Usuarios/Views/uEditorLogin.dfm new file mode 100644 index 0000000..38db70d --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Views/uEditorLogin.dfm @@ -0,0 +1,1101 @@ +object fEditorLogin: TfEditorLogin + Left = 790 + Top = 387 + ActiveControl = edtUser + BorderStyle = bsDialog + Caption = 'FactuGES' + ClientHeight = 241 + ClientWidth = 385 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + Position = poScreenCenter + OnCreate = FormCreate + OnDestroy = FormDestroy + OnShow = FormShow + PixelsPerInch = 96 + TextHeight = 13 + object Label3: TLabel + Left = 24 + Top = 108 + Width = 39 + Height = 13 + Caption = 'Usuario:' + Transparent = False + end + object Label4: TLabel + Left = 24 + Top = 138 + Width = 57 + Height = 13 + Caption = 'Contrase'#241'a:' + Transparent = False + end + object Label1: TLabel + Left = 16 + Top = 72 + Width = 94 + Height = 13 + Caption = 'Inicio de sesi'#243'n:' + Font.Charset = DEFAULT_CHARSET + Font.Color = clMenuHighlight + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [fsBold] + ParentFont = False + end + object JvGradient1: TJvGradient + Left = 0 + Top = 57 + Width = 385 + Height = 4 + Align = alTop + StartColor = 2971346 + EndColor = 4828405 + end + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 385 + Height = 57 + Align = alTop + BevelOuter = bvNone + Color = clWhite + TabOrder = 0 + object Image1: TImage + Left = 0 + Top = 0 + Width = 385 + Height = 57 + Align = alClient + Center = True + Picture.Data = { + 0B544A76474946496D616765F6750000474946383961C201FA00E60000FFFFFF + F5F5F5A92824ECECECEB743DF48545EF7B40DEDEDECD452DEAEAEAD0492EDC5A + 34FAFAFAF2F2F2BC2A26B02724E5E5E5E26236B95B55E1E1E1F8F8F8D95532FC + FCFCF5D6CAD4D4D4F5C8B5D1B5B0F0F0F0E66A39C23428D65131EEEEEEBCBABA + FEFEFEF7B192F49366CB938CD34D30C7726AC63A2AE96E3BC7564CD26958EEB5 + A5F9E9E3D7C5C2C93F2BE46638F8E1D8D2867AC9C5C4E05E35C03027B82725C7 + 453AE79A89B9322ECBA59EF7A47BFCF4F1FCF0EBB93A36D8D5D4B44741BF2D26 + EEE2E0A22925AB3934A7302CFEF8F5FEF9F8C33B33DB5D3DB52724B12E2AD251 + 3AD9CFCDE47D60FEFCFCBC7D75BD2C26EBE9E9D6D6D7FFFEFDF7F1F0FEFBFAFD + FDFDF3F0EFE8DDDCFBF8F7DFDFDFDED7D6D45A43F4F4F4E0E0E0DADADAC94E41 + F9F9F9DF6648EBEBEBF1EBEAE4E4E4D8D8D8EDEDEDD94E2FD95738C53729EFEF + EFFFFFFEF3F3F3E2E2E2EBECEDE8E8E8F7F7F7EFF0F0CDCCCCF1EEEDE7E7E7F1 + F2F3F1E8E5E76035E86B39D1D1D2F2F3F4EEEDEECF3F2AD2D0D0F1F1F12C0000 + 0000C201FA000007FF800582838485868788898A8322173C5300919293949596 + 9798999A9B9C9D9E9FA0A1A2A393560C717F6763670D710C56A4B1B2B3B4B5B1 + 8323B887B982BC05BEC0BABDBBC2BFBF3A193046B6CCCDCECFD0D1A50C011F70 + 1075636B6D71161621E0D2E2B4E02156E7E8E9EAE5E3968BEFF0F1883A8D3BED + F7F8F9FAA2A601677513DC9481A38D5B180BB0F629BC64C502030A7102489C48 + 31401C0A0713EA3336AC23C78FC10C8504590CD808643C16AA5CC9125AC30003 + CA68D1E265421908633E18D4D8529F290A5DFEAC3933A0A8D1A31FFE707BB54F + 9ED3A78B4624EB49B5AAD54DFD621ED8BAD58B9B6C6B5A85796525C4D567211C + 024D05A70E843270FFE3CA850067C0862EDDCAE283CAB76F2F1130CE0A1EDCF3 + A556AE5D05D649F0A141000A0C2C10B665254C805409EA947133C18BE7CF9E27 + 88BEC9F84F808366DBF95DFD54C785296C26CB9E2DAEDF3F2D880FCCD4127031 + ABC7DF688B4A4BA1CD87CC9BBDEC5ECE9CA6CD3A701ABB4A2D8EB5F577272F14 + 7122BCBB77592FCF40505ED38D4037CA0FD88490C02EDEC87ABF33B410A6CB86 + 319A95E35E0E9A79D7E78C75414170D22462006B072A9260010B1E825211B1C9 + 27E18498D8564768742590001C654C3053796580F51E4F1486704A030370881E + 6E5B3967DE8B9C75C6E287E6E1F44737D55DA7E32E52C1C00377140629E44B1F + 5CE8C5408DB5B1C6FF186FA597581DEE0D489D7CE05810C006097488988B37D5 + E1A59710BCB5998C5B0EB4018ED10CB2608387ACA9669B6F1AC2A6200D9E944C + 1542E639615A71AC0107676E24D0401861C4A1247E7079A8DB04741574DA2B53 + D26662351C7AC11588D02530C651638CA1615B6FADC8951603AD110042D0ECA8 + AA21F4C050849EB07AC7E7067FDA344617AF3864E8922A5ACA9B798B49170689 + B3595964194E6AE14686037CB0C6061BFCF107B46B7C4094A76D71C6E2015E45 + 776AA4B53028EE81E48E6B6EB9E89EAB6EBAECAA5B0032F6C42AAF6CE650F047 + 029C95716B59E09862E87DD7ACB8DBB28CB502293B839913C01A00EDC75B8839 + 6DD0461B5D54D445FF1B0D48BBC150F84140E6568C7E100003E0CE42679CE29E + AC72CA2C13E2A69C28BFFC4B062C4032EFCD67D57B6F876524D0C637E5985868 + 5067B4D5A1AF006E13471C631178D5A4D6B871E9570557BCF4D5584B74710319 + 7F304002A1A6A76C1D67E04AAC2CEBA6DDEEDA6AB7CDEE0880155132CE742B64 + 4E180D8CD161A07F8411B4390D3D74D97110B8B15F4D21367B1744929D654535 + 855BAADB57EE5D440146845E0ED1D25A6F3DED0763043CE3047588EC342D32A7 + 1EF3EA2BABDE7A21705FB083CD75D7BED0DD79EF0DC70614F0FB779510357046 + 669CE977A497496D70EA3973EB034E181B5CD8E29170B0C27464D833A03DA161 + 5C1E5144124DDCC0FF50C46F1B72006793E2F6FA6CB7CF3E8376C280A7EDF43B + 5F59DE80C2F147EFBF07AD56000D009D8A6612104611447990499FF318D005BD + 4DAD7AA6699A37B497BDED758F735A9B98508AE6B119B9010E6D600033DC47C2 + F795B05DBF004CBCEAC7C271E82C4B36D1DFB0FAF7B78614AA0DF7A983E166C2 + 2D0336E6348D5B8905FA0410AE7CE50C6D78943796C8C4EC656E7301B818C6A6 + 95A20ECDA80C1FA040F3426100727591415FECA217C70846328AB18C683CA31A + C3C8C60421830555D8620BE7188B17022A017DF31D0DFD770AE3802D39B8395E + 7BFE2020F8C8112DF6FAD37E488744A631511D4C748805A1D805298EAF8A8A52 + 8FA098823A137AF2FF84EF938AEC8044C752D6C28ED4CBE31EFB674343798D43 + 1EA2498D08B28611EDE3710340CFA26C3432F8A80392137448E6302845A1202A + 3D5E80C0194676484E88F199D08CA634A749CD6A5AF3406F7442334DC9CD4CD8 + 312078E4DF2A69D89038D80793DBF20A4E6A09996DD682017FA8038B8E84C791 + 2D9179BF4B47301930CCCE4D917002FBCA1AE2A0C04FACD18C6D7C661ADB5846 + 851E74A1647C1760E2D8CD8A0EE77E7A0BC8EEC4394E1AEAAA0D7F48D15BC8F4 + 1CBB180452D2A8D707CA60C4D201311DE18844D0F4E910615E302295C4D80686 + D7416EE9AB0B418CC535874AD4A256B309B1939B4597FA0913B5610085FBE099 + 80D651720AF3321CFFD4A52C43543057147416698189D474D3B31BF9D27792A8 + E1399648C10B4EA498A0D321D2E0D00092CD62A80DB5665EA3B9D7315ED34E3C + 981F5307EB4D6A14893375182842AADA51FA5C89A7C85A0EC174E2557E35E37E + 7FD28D17C8862B6FA023A6699DE95A9DE8D6286A7028D798408B20B0062DBAF3 + 12468DED350920DB2EC68E07AF252C37ADE4A70EB974B1E5680842F458557F01 + 10A05A7D4E4E4C33A0F8D462880CF350B74CA5BDE15A76126A156E5B6F6A5A9D + 2EA9702C2AC319BA91DB4AD4F6BCE8856613DE958C65E8F6BD941822AD6A643A + 3DD6D4908CED9724E320BC3F1A6F3D1004627931C140A87AC85666F52C5AB12B + 5AE14AB27B10C9A0FF7707A0C3F00E6079B230006D69DBC50D6B588C1CFEB087 + 3DDC611183F8C4252EF1884DCC61418820032B842F7CE5ABA2D2E5858FDD1BCB + 59F36B0E6AFCE1389A91116E7CE89883004D1661F843A5C666BDEA02371CF944 + 075BB7E73D9C8A6F5A458BEC017AD686616538BD6046EFCC5820E332D31858A6 + 7A725A0A15458B60E460F935EEF83A66B84591E60C84F4EA80654AC458226929 + 35C52739D7BA4F7E7A4FC219DB29D814C5B7016578C59066B1A4493CE94A47FA + D21A7E5760CA3CE385C132B1372E87430230C506546C2CC4EDE85A2D631CFCD4 + 994674B10B70F61C02C8E9E7834A73B2A0594968D26ECECA535474E494B5D1A0 + 8A42C5964671A59FFF19624C3B7BD9AED90EA7757B0A3F2156B17AFC09A9B996 + 448BE878B83C1EF5A13453BC992CAB2E7771A47339814B99F83401E9A6A08279 + 4DE8094E929853FCDC31790307C53E5AC3047836A4039E6C81175CD23D8AF1B4 + 2DCADB4F635BB4DB035F4EAD0619AA325698FFFA5A937AB82CB018ECAB94C065 + 9D9309EFF74466DED9AD3705F9595AD3664CDFB0E44D624F250B83DBFCE037C7 + B401EC54B3853315BAB59AB99A67EA0D88943A89154FB5AA1DCB96CDCCC82B8B + 61E7E932D1EE40B227DDDF4679BFA43CE57B5B248A9E839600AD48BA818A3016 + 014FBBDAD7CEF6B6BBFDED708F7BDA33AD0357F97CA90DF7ADC8E0CC4AFA00BB + 62DEAEAED2572938FFCC846DC8109398120BFAB8318CFCEA492494BC7FC9757B + 4F32C219E4DAB4381673D2EDBDE638C739C1731EFAB96F185E7767781CE67BBE + A1E7F3C114907012D5CDE3C059A6BF3A8CA55706D255D4540826EEA6A7D2DEAC + EB5F36F1C1C394F895A935BC20CBDCEC35DFB0DCA74FFDEA4FBF0934A35DEA4B + 69255AF9B66C9149F9EBD90CD23F985ADDBB2E2E35C6879C5806843461111055 + 430EFC4022C93197D3F1C969CA56E473B7BB2FB7316BF03572C56FFE86760067 + 7D6F97806AC780D5E7806EF72E8EA07DDBD74267B62C03D06516471F97835F7C + 14619504786EA63DE9B74A0D113C4BE2162FD2195F511711E40D911207671059 + A4024178917FD813FF49FB847C55F65657B6795E03362B22558E867628A08048 + 9884D6570037A01D15C87D57A222109081A8D12FAC766A7C07380F86535CD300 + 919785E3245C37948280541EECF11B45280914B006E3616E5072176E26793535 + 6592644110F63D60873189B606D522528C465707117D4A388884E8765291124F + 38471738851A185CF5C135155371E0564382536A9168649FC558FE72282AA27B + 93A53C19010EF6822FCAC128091016166139FA775F2BC7723DA87C9A472DD6E2 + 6AE9F1539C440A697784BA4800BB1870BBF88BB9188CC07884BEC88BC6588CC3 + 688CC4788CC6D8042BA00C7B9688F2D17D52380083627182D33912E14816D72F + 86063E60B78D4D33FF78ACC44FA4B60129927B047413E85648FD502407767FDB + 781192D78ADB75875783681AB331D6E25FBAA14CE4258885389085C85E3D278D + F473668C628DA8165C6A614E2FC70D151765B60791D2327B1E585CA660196C01 + 5E1F723CD6C83496315FDC423984348F98638FDC838F5F977989C68F44912D81 + 9458FC5373C97893CA989338B9933AD9933C8902B1333B08693B79B7906DD05C + 35E4585DC06D78713D5AA75F43833114231190B17FE4F83B82A368B9E719BCC1 + 1E1F102DA9504434C11EF13711AAB8924FF48AFE148B02E83588124B811242D1 + 28093FE99376599778799739B9732BC002EE35947BA209D4C0309CC18849874F + A3555A527489DD68FF0EC28479175349DEE67A7B143811114088821EE5E12570 + 902D92432A64A3148077359A539ABF068E79186C02C831FED595E305729C8002 + BA289BBC489BB2799BB6A98CB6899BBB398CBD599BB3199C3AF99B06904D8029 + 2169815296C05BB937850D7098BFE48DA7B094D2E218B4D777A7B06DE68717A1 + 587B9B0864A2F291FA712964A91466499A55C639E09853CBC787D51284CE3736 + BC339774099CF6799BC3299CF8B99FB9E99BFAD99F77999BA2F42AC759155562 + 68E1175FE6F41E30580AABF727CB320609E66043D74ADD6535172178BFF3908B + D994C437898D359214A64BB9911B63A30D5E2899DF9335A8C99E7A382D6D398B + A9B51F7C1306B580FF021C709B392A9B3B8AA3BCF9A33D1AA43FCA9B42CAA33A + 3AA448BAA34D7003198088055A1816B01677E16593C00028E228542A09780343 + 3D038A27F748BED36B6E254553994049F998C056A61919861CC9247556A28861 + 130970061233956679A76F65499AB779EE491442283603D137378AA4848A9B79 + 50A8889AA8B279A885CAA8F80937CA40814F7A0FFA959D21D599224322143083 + 54231D7016066DC024726A2A46765F73F894BA426AD5F985D6954F82439DE699 + 74C515A541E16ADB322A3C444067182D14238216C39E5D282D7CFA01C44A805A + D2225FB17708330A2870A839EAAC43CA017990A3D4EAA3D00AADD55AADD8EAA3 + DA6AADDEFAACDCFAFFAD28600037A04293EA137EB794AF5438FA823E94100709 + 508A5C956B0801AA06D6A58FA25D3785119EF537180776A3498FE1478985B2A0 + 53D990ABA42B44F396255A1E99A42C671816BD9AA72EFAA2FB18A3C31373A3D2 + 2DBFE17BA370A820DBAC3EBAA8221BB2210BAE272BB2E0BAB22A5BB22E6BB2DE + 0AB3204B004D8012E78A0F26B22BE9681E9EE10663E0AE9300AFBBB199DA2020 + 8592371ED3A5EA2649101199DCC82F34A53D11A68718D998A3F510E6346B093B + 9299F9315303266F0A75736A7EBD1A821373B6C17AB1EE692D22F5A61B7B6E9E + 0A9B9630AD79E0ACD3FAAD754BB7752BAD76BBB7758BA3772BADD41AB884EBB7 + 829BB7820BB886ABFFB777DB048DF09737DB0C8E89B5E3566E5C3101FB420901 + 900033627F6F282D5926A7CA137E81137B7A78834DB37F33C54F16E98581F794 + 5562195A3B7E00F40F6E8BABEBC11803F8279F79676B40B667AB87690B2DD4F2 + 9EAAB021E005A72D628ADB604FD7C5097B0BB8D92ABD2DCBB7E17AB8899BBD81 + CBAD843BB879FBB7897BAD742BB848957D91EB0C9B483E2AC8955CA91E991BB4 + 9CFB213CA44E9D89BCE8A1B42453A9B147A695B434B24A7458BB9E80F7BF0EC9 + 4F60080E0FD106CD47A25B22B694456AD63635B19614E6E785E2B3A7305ABC6E + 69349DA1BCA30220783622DBC401824BC2E36BC2D88BA3283CBED34AC22EFCC2 + 307CC2251CC32ECCFFC2D9FBC2742B064CE808F479BED370254C7234E41110E5 + E6B3402B0971300607661E42561E4CAC1CA5C24CAB4B7E2F676A8F6195C6C7BA + AABA9DD7195C30D53FF63A6CB73A39038167F6346AFF20393D341039F12CD539 + BCC5FB9E5F932D99A459EDBB255B856E40D409835BC3348CC37E4CBD33DCBD28 + 2CC8E3CBAD30DCC785ACBD0400A990EBC3A160999791223BE4C45F3252CAF2B3 + 24120703D0195D022A961BA7D91041F855BA10D985185A8F43F73F541B875669 + 82E6D027E361A29BD91E08848D5D10134E529299B20ACE42BC7C48ACD6722D1B + B2BE1F2C10712164251A43212CAB9800C32FE0C2D1FCC2D15CCD1C30CD892CCD + D98CCD896CCDD47CFFCDE0FCCDDC9CC852A17090EC0939DB6A01632900D6C63C + 851E46BCC99D6C8A67C087452357261AA14AD39D930B82C13B954E996D68EA83 + 033CB05EECC5D4201EB72A4B5E699D19690589842C88B17BD840100370066740 + AC185D149E52CC983CD1A4010799A18E25FA30B1868A817809355CCD748BCD2F + 90072F1DD332DCC2D23ACD2DFCD2248CD328ACCD83CCD22B7DCD341DD424EC8C + F273CEA0D00F58D2418BD433CD62C5C22357F1FCAE9D4C39D659BBB0B4CB0F83 + 6E5F18A613B4BF2F679E4E794F90648EF956B5509B898193CBEE7629F7A7675E + 0C347937C666481722AD219FD2166E312658AD5C191D84EBACBC0F132CDC3075 + 9100CED67CD82F70FFD886BDD88ADDD88CFDD88E1DD9906DD88DDC5E46AD09C9 + 197BC2C321CE0117D01131D60914BDE5159A2CD535027E3604C4A06245CBCB7B + 49C19D70B6911171C1002DB020DA63FB7BB6A95CCA95DA402C352A519CD232E5 + 984053195D600D1D52C78B621E7011266112173CABC69A756E110384045838CA + BC25BD911306D1AF9110D3860DD3300DD432CDD2E52DDEE61DDEE75DDE8C3DDE + EB4DDEE81DDF2F8D02632658975D0910DD05BC02480433006E4CB678416A5143 + DA471C099C5C9819787639DB001BE387DA4DDDB916A615E9724C99A193385A18 + 37DB67EB48FDD2DB50F574CAB43C910238CCA32B01C4C1632C9EA2D1195C29D7 + BD51175F099602E8FFA779DDC1B42C1067C85CF90B0089DDE33E5ECD3F1EE442 + 3EE4428E07441EE4467EE43E9EE489CD0162B0A4B273DF94D063A80055020375 + 63A078FE04784F8D2C511DB4B9444FCF6916C411997356800D9C78B06D5D6278 + 99C26AC51FAA6050AB942F277F1D0E38090D01A353077F7076534EE2BD664EE8 + F847CAEDC1266AD204F195C2BAE830BAC1E4369EF9FC6752C2E390EDE3938DD8 + 3D6ED84DDED896FEE38CBDE9950EE48D0DA9042AE5FDA0248B6667BBDA6D5B2E + 116109CFA50DE6F78B47DDF010F6E12C4AA1536DAB5A710A313FB478072ABBFF + 9CCA984874DDA3351C6E0E5B67250ABDBC7CEEE77FEEC5AD74EBF65B3C907EE8 + 5CC22C8ACEE88B2EFF8B03802DE466E313FD4148E465446EE411A0E43E9EEE4C + 9ED8E97EE4EFFE02ECAEEE45DEE3F1EEE36200376466EA96B106C4E37E7441A7 + 162CBCDCD66D61E9E5B18EC4B924BAE1E3EF6132CA6E765CFEB8B1A4E1DFDC09 + 5CDA157BDAB99D93C9E6146AC018DFDBCDBE28A056506F9DAE97143A5E021731 + 021A35F17E5DA22119FD2CC45BF3367FF3FDA882294E3D53C5E3F4FEF3ED6EEF + 4ACEE4F7FEF3F2FEE345FF026240004CBA03F67DBEE5F4D42BA24ED920315696 + 686FDCAB2105D5096FE0613E10FE1D573BB490CF1919470B6447B32D59EDDFF8 + 7756A69C6FAE2BB0BAF6D68829F27A3E3DCA0454F864094949C51B10841E2D26 + 71F1F0D04110190DFF96177BF3C44BB6130152710548131DE2221401949FEE96 + 4FF97860F9F24EF947AFF99EDFF99BFFF9A20FFAA35FFA9C7FF9957FFA2F6000 + 8D805B903C290EBF43E756CFD639DB19FCC6A61614234AE09A1AE61D770DC7DA + 158C6864E6784928FEC15C85672735E7D948A6B53D8E0D165C760FE2542878EB + 165AFA6B5A42E196D8B221F55BD79BD22C347FF3EE59FED0C2F859E3F8A1C3DA + AB7561937FF4E84EFAF21FFFF42FFFA31FFF9A8FFFF06FFFF30F082F11828483 + 2F4D23193046008D8E8F909192939495969798999A92210C011F756E135A5E6E + 75631B017161AC716D1B6B6B1B1B7FB50D0D6D6D7F03A1A563015690140313A5 + 6E65A25E5ACBCA07FF1310630D141656160C14715D7F6B6370651307E107A46E + 1009037F6D710C5621EED50C6171015D6D0DB56D5D01610C16FEFE5602B673F7 + CE5A973310B4842305ED4F1C0AFC0086A05430DE3C7B7F60ADF9F0E18C478F1C + 39C69235ABE4AC912669FDC1A5EA21056CF3B47DF0062EDC843A670230001021 + 029E9E83800A15FA7328D0A246870AFA895450D2A34F813AF549B5E9A11B1958 + 4CDCC4B5ABD7AF6031596170B0CE282F65CCAD51D70F9EAB35673E90ACB532D7 + 065E6E7C017314C2429704CABC286356AE4E9D325E0EA08D368DA0356C0DD60C + 800321AFC28513CAC019B3765F3F6AFEE2050860EF563E5510F97D1618B0E2C1 + 840B17FF6999BAADFFBB4915E58DAE77EB1EDDDFC06BA59C05DCB4BE380F5929 + D7DD6000849ACE20E4B4C0B350A19E53AD4B0D8A9DEA54A14BB907FDAE747CD2 + ECE6C3BF1053002B8F2961E3CB9F4FFF91A733A148693EE390C2E7D0714416D7 + 5CB6D88557290304F0880571AC019B385A9493C007198D5186425E40238D05EF + 30E0E1451B9C91C061A340E886291336A08A87A079A81B3DB9C4881A8BFF0814 + 42357E21741943633884DC8F10D9B61524EFC0130636BB95D61B5DBE05579C69 + A78D06646AAC20D9007E6E8873D3073AF1141550337C09E6984285696604613E + 75669A62AE19159B623471C3053BD467E79D78521407288369B64617FE59139A + 870108281781E9BCFF32462F6EFC124C2771FCE18D388AEDE7D0350D24E00686 + 1AC601DA3FFD30709164245E160E5AE69CB14117AB78F8998B17F9D600ABFE85 + 5A634006E9185B43AAF42A6590D4DCC6C98DA1C913533D31C6D8DBB2CBC6D8C5 + 712D21F7D2B42F2147DA95A168090197D419C566996D0EC5A69B6782DB53B962 + 9E8B6652E86237C20A2C54015F9EF4D61BD68D61487A969F3A718823A801C275 + 2881B770D3CB04094803D94C88693141399BADBACE8D1464BAA962100CD04018 + B70AE48F3C6D70E38D28A64608C16614D24AA30547C2888B3E41BA2A288E64E9 + 3A4E863DFEE82B6DA1B64611B1F1C0E4EBB344174DF46848CF3325B5D52A4DCF + 3D586A59C707EB78FFB9EE0C58839935D6E45E3D66D7E8A6C935D85E8F5B369A + 5B93198118EFC66BEFDB7067D249176324845602A944F40FA86114FAC1000392 + 444BC175E735011C6B34B0C1A21034FC0C1CFCB11A915B7F68AAD0963AFDB777 + B1A4DD35E237A67A91591D906FD0460081F23DCFAFAAC96C6B185D38B723CEB3 + 396DBB4B930F194941D65469ADEDBD02FFE3F0D2BE5425922E678497B6DC0200 + 76516B420F261E664AAF2EB9D2574FF60CD4A3097DF7D1878DE60B2824B28313 + 71A7AFFE820138378A66798726A8FCF234F077E07311DE4B86708C5813397540 + 876770B5390A54EE626E401CEA6CB51A8F89AA0B91E9C6371263A2930D2071AA + D05BEFA8E5AA0E5AFFC3456D90DDAE7236BCE0052F3912A9C48D681634A6C164 + 692E8409D3ACC59B8CC4627936995AD5C6C6C31EFA906B0BF821108548C4221A + D1888398539DD6C744B831E00F6611CCD432C7C25789C67E8013492C6641B8CA + 08E618DF50CC31EA9080CEF48320FF0A8827D600872C69017E0118D407A9E140 + DD6CA31B8D2BD1A9209680C8B50A541D0C64202910C207F1A876D69252D258C7 + 229FE166851F3C5E0C2739496B61A42437CC964DB61547E7F5106D66DA1A1141 + 89441F829294A62C222A45393602ACE0024568A22CE915860F34CC0D09F843EA + 04C5408BFCE16F0308C916556230CB086630285A4BAB3407AAD050A00BA000C7 + 1BC7D00506F2F29AFF4103D119E0D00B4A39CC1490FB833E34B8B750C5C35547 + 6A40DD66D710E2995078C00AD6CF08188F2335AD78337489F19A568F8CA48454 + 59CA21977632C4B105116B072DE80C126AD0853A3488101D22431DDA5084F230 + A2166DE844311AA715C0609620A5CF8D02009852D4610DFDB2E67F44F387338C + 218B0353C90712E0456FDE4463EBA06333551A8F10D621315A38E93A5824485B + 0DCA8E1FA81BE84227A10BAAA856D8FC203A03642176F6285AEFCCEA8F54132C + 611109922EB2E73D8987CF6A8DE6922839090EA3D33C2438D4AD191DA25B8308 + 578ACE60AE0FCDEB46EFCA35BCFE30A11855685C358A3502CC8911214DEC57AC + 90AF3AF0A8019E92FF1F4FE5D1D297C6458B321D515E2074B70D44D6633B2D6A + 002A77A103E012B22B15243683F6B4A4520674E2280504CC91B287341257E6AC + 5F5547E8239D094FABF16C8DEE1A81469A1D8FAC65155A3F35925658AC157304 + 8DA874F54A5D882E60BAD2BD6E7517AA5DEB6277BBDFF5EE7691202718F060B8 + 8A4D2F45EE038152283050AE23AA8B46EB52C05D7624B598694D17528E3354F3 + 5F922DAA6AB2C146706468006D9886548B2AE096E94244A1D02361C82897D34D + 8E9E165167696FC62B9D29F2C33B5B9DB41AE9D5AFE2369B649DE16EEE3192E6 + 3A57936CED6478C14BE319DB58AFDDAD6E8EC51BDE1DCF806D1E8DA57A874C09 + 2B18B08D111A431BFF22A2525EB2D4A563F888306731D36EF257A8D48187933B + B81CDFBD263119E2568019ECBA6265E3979FB34C6CD3B2190CFE51751AB66A6F + 7FA7D53AE34E48E8252E3DC5BAB4D5F106165A1CA65A61BCA5AA5DF7D0884EB4 + A217CDE8463BFAD1908EB4A27F7C0378A18FC8987E84153EF19C0C9D61A84D66 + 60DF2A6BD9CBCA651622AA4CC9CA70D238DEA897E8ECF2713780E4039421014B + 5E2D993DE8220AD0E38E3485EDCD463721D3AD02CEBBE5F0557D6B673B278746 + ED78E4892569D66BD9B0C52E0628F3645C631CDFF8DBDE7EA88FB34BEE70F778 + 011168820E32B0C44C67DA2F0340CC4DD6E0A9A2AE76D4501E807D43826A9A5E + ECCA2865405FB61CFF56E5B83040BC30B0503936E640CA9A155C065195857D33 + 700AB056194EF621DDF9DB8E9FF0D9B699A7719BE6B293607B382F0EA833A6B8 + 93485720D12F6774CC1B3D7345A7610133AFF9A2757E7344BF5CE78A8E799C44 + 004B77BF3B53C540982E172C5F733E790C2FD537480E95EA7F8FC31428F597D3 + EB69F0694D69B4BB3DED3AAAD8E02E37FD1ABF4E6A1DBCC8D4542112321AA71D + 5641BCBA102F5291D2E2EA40F20C80DC200982D76E31CA07ADF267344FD2397F + 34D0612E699C377EF190AE79BA5F2964A3ABF78951BCF5C6984E5427E31BEAFA + B66FE0B6F99C92615D27402B38B55F38BC2ED01AA8D2F92FCD38AFFAE538BC65 + F5904CB0A1438E93FF7D4045C889336F39DE6C8F2B2DEFFF89F6B0E0E16BB49E + 7CF029971AD55A7EDD9F3BBEFA8EB7BEF6B37FE8ED637FFBE0E7BEF7C54FFEF1 + 875FFBE9263A622DAF58066CC0B1CF4030C3ED2D6AFA823EF420B9214DF578F5 + 56FBEBA8AB4756C1134265601370B0010AA66B82F470CAB180BF06619B052137 + 710690552871D76174667CEF94816405715D352C2C431A81E76283A76D9BD43C + 89677DDF477E2B787EDD577EDCD782310883E64783E2D751305005ECA75861B0 + 0617620A1FD0051CB36BB9657F51877F973519A56722AD26705A564F5E477CC7 + F70966310E65A06450554EB4C78010175FD8F060BB4741B6964BFA207CCA3667 + 1AD871BF835CCF06FF1003F108F8F26BCC458225F85C3AB4131590873FA7877C + D8877E88737908887D28887E58887A48888768888A18888B388815D05117A083 + 3B08523DF8832C477BF1F574472875494819FC1721FE472C527524C87577BDB2 + 0109704B5323399A43665C6876BD267123F21CE1804B7F62811B764873677774 + 172D6C986231F381C4C520BA308782067D84B76DD491888CD88C7BF88C82188D + CC088DD3288DCE8888D7588DDA988D798883F332894D544B9B9240018789F1F5 + 799B28751CA1849F787A4E0848A4C86C4E8334A3F14B48162165A40EAD43845C + B71C4CD385B1385AFA951887B31610748124248FC5F78B0CD9861F6801CFB40D + 98858CC361822B37FF7D00D0881AB9911CD99179E8011E19927A485E59B17EE0 + A83EB58418706445F4E721BE466AA117931E8147D0D17F59278AC5F24226448F + 4803418B535A37254EC1032CB0D68F5D472D0D1856CDC746595290F96086BAA8 + 9069D890BF683CB7252AAFB011C7489198F45C9CB48C22199662399664C9876C + 931527C944E2D85929B56B1FF492F916939C884756078A01879339093C3CF92C + 30D25266E1306A810BB7A03245597B47394955828B0E8338A70395B423850B49 + 950C591B1F532873C89515698703050048F091150092A0F999A2199A208906A3 + 799AA4899AAA199AA6599AABF99AA9199BA7D99AAFF988319015DF98966F9392 + 77331BFC28557079FF7F72191767A08496B10C40E86A00E64C3B438F4613236C + 7421110207BF07412F831A49B980B2462D4B032BB1F38378A30F7F8090885477 + E6698AC7279993C90FF2A00DCF87995D49685F0900068004B4299B20E9999E89 + 9FB0599BFDC99F00FA9FAF9906727201EFA19B70B396B7E61043E8962E698431 + 197503E35AAAE6302C87976F59773D5934C9E27AA9A80C98E367CF920FC7C155 + B7E78FDCA94FEC491A55854B42399EB9F898259486BEA89E6CC89DBAF09EF019 + 7D02553524600262900615609AADE901466AA46870A44ABAA44A3A9A46FA994F + 1A9B1E90A44C8A9F557AA5589AA54BCA0505DA6E084A4BB6D49B9EC18F0F0A93 + C3290BBDB101FA85FF0C9AC12D18DA3B896434C8922CBA9070A42054B02282F8 + 90416587A231D40A01808AE3984BF5489E5845A3E969A3C0F8233E29783B1A9F + 85379F1A90034D4000421AA0982AA0991A9AFBA9A99E1AA0041A64B9F9A576A2 + A078B30FE6285FC17984F9B701D7590F9E030770800E63B739A0E26BF4403474 + DA1BB9D052DEB00C6590132CA21BA5112579D7800CF8A7EDC994D3A4226017A3 + ED34A3C557A38A3A3C24D7A8748899165968D4C104931A036280A45A9AA554BA + A4E5AAA4E77AA4E93AAEE2CAAE53AAA5EBEA015C10031EB503A34AAAF3C19BFC + B28F44089709107503323851B262FE244ED3B09C471513749A0BCCA20B49D55E + 63B864AF428A4962FF1CD8A91ADBE942ADD006D1F44608360F302A67BB789E1F + 56AD93A95C8AE3A88FCAA32B476FC1E003DE2A02E0FA91E65AA52550A5F17AA5 + E57AB3EDCAA450AAA43C8BA53B6BB3471AB4430B922AD0362689AFF9FA01E3A8 + 400D4A666F09A1015B17039B9E2D414E9BE392AEB0ABCC720BDBB04D9B72139E + C50EFF62117A9A0E25DA3A198B94A27225A557060856A8D09A9019E86C268B5C + 5128822AFBA8DB9A31D504005F60064CD0021A10030430A4497AB38BEB01416B + A4417BB392FBAE8CEBB8963BB990BBA48F4BB498ABAE96DBB8930BBA97ABB9A3 + EB016930AF1EB5B44C1B1695088A41C8AFAEB8AA558B0BB9C0974A4325F164AB + 7C03234AB22CBF41FF65BFEA69D5341160652C73AA0F7C6A9862F5121FD21C7F + 19ACACF2AC222B955A95B7374A72399AAD5C69912615840C20055FF0053ED002 + 2B30B343FAB9968BAEA43BB9A18BBE9B3BB49BABBEECBBBE94FBAEE25AB9959B + B9F97BA42A50692C7069AB1B1FAD6B0AFE3584B0EB70C1194C5B640BB46BBBB4 + 11332BA5BBEDC9B0BE0B1C54F6A177B3311341409144B1F48871C96A956FEB3E + 68E15FF5988A720699C263BDD78B3C2CA6BD14699100941318E00366E0035B60 + B8E09A068E5B023EFCC33EDCC3920BC4445CC4462CC4420CC4486CC44ACCC43F + 9CC4471CC53EBC04FDCB6E9218C060E17E09117F09E62244D83291211225C1C0 + 0D4C8FC817C1BA8BFF76A5E12474711275937453D40EBA9B9349837146793C5D + 88709D167B208BC2BC35B2E8C9C22DBC3A2FBC95F0699152330018B0C852100E + 3ADC045CB0C4685002933CC98E6BC94F4CC9928BC9419CC9979CC99CBCC9433C + CA92FCC3987CB9981CCA9FBCC469A002AF745E589CC550241857B821E704900B + 380F8A6372C4B1120D8CBCB7CB64D764AB6807784EF24FCEB1298BB131C9C71A + 38B2BCFCFA8ACD4BC2B177C2758B869129C8D65A6D852C387EBB564CC8C81810 + BE3E20031A40024D900668A0004EDCCEEEFCCEF01CCFF23CCF5CA00222C06EB1 + FC15168074A5904BA0C675AE182B3634C650C2975202723B25C11761C1FF9472 + CB306FA8736100B6FF757D6A760CD21CED55C2D18B8AD77CA878ABCDDB2C34DD + BCB2C94829B1B1C8286D06E130072D80CE5C50C94E0CC5F13CC9F37CB9ED4CD3 + F3ACC9335D025CFA4AF69ACF5CE11716F23007F8CFD929607F07B664EC2C7887 + D046B5B56A9C11FE6412282119BF3A0E38711C10BC325A58D1491929162218D5 + 1CA87E7C862ABC8120DD67A331D2248DC8268D017E00D78BFC0507F0057E70CE + 31C00525A0007CFDC3ECFCD7440CD8ED0CD8EC0CC484EDD77B9DD8869DD8828D + D88D7DD890ADD88E5DCF4447057C07D4926001ED831819426FCAEB8A1ECC1B0D + 6BD08C2447CCC439AF50918267D588310E9C742CC89B8550CD60B2F621A425D6 + 5C320F1C3DBD89C4FF8BD40AD25EB7D6DB00C3C8E8D69482D23E80D21800BEE3 + 4BA953FAD88C8DD83E5CD8921DD9D47DD8D31DDDD06DDDDAEDD8DD1DD9D9CDD3 + 4DE0D3008CD99560057B921F9C84ACB008DA7F47C1657CD0C1684DC4EC0AFF84 + 6D233119AD1D549E950DBA50170E99D0B4DD85FE1007B46638ADA6DB65BD71D2 + AA86698D4F843CDC86ACADE06CD25F00D771BDC87A00BE07E0073280CE2A8006 + 7DB0CEDADDD77CCDDD7F6DE2279EE22B0ED92B5EE22DBED72D7EE28C3DE3364E + D82BDED3179005E67D09217064177285090671B5EDA028B61B4653C7C2DC647B + 139126876D5A3400FB87D59E85AB739A347AC353DA49230DF29709940A0ADED1 + D47B3B0F0EE1BA2CFFE1DEBCA3884C0A97E10617AEDC8B6C065FB0057ED00239 + 30022AA0CEDFBDE728CEE77EDEE780FEE7825E0290F8D33D8E1B61D0062DEACF + 41C28064EA3BBD7D34F330DF51B5524E8EDF211112935185FC0DC289640FFA28 + E05BC8550CC227D3D9DF647DCD679DA865BEB7D93BE1DBBB56DF541367E0E6C9 + 1DD7192E0572BE054C900324A0022AB004327EE3C45EECC67EECC89EECCADEE2 + 3D8DCF87CE099EC0275BC28A8E4EA6E8546D664C944D27559C93B21B91E9E02E + E595E1DA08182CCC2782B3B24B99E8703253EA09F14670503B01B0060B2E771E + E6DB65DE670BDDB76A2EEBE5E045F30E0107200518A007CA2D05CC3D071A7003 + 31A002C3BEEC101FFFF1123FF136DED330E004F7FAEC63D1007020D657A5BC47 + CD609E774FB461A295BEBB290BEE1CF1112EC54D6E54071B1006CAD717A22125 + 0C27EA528BDEB6849CFE4C60F51EAD63FEDBC08DBD684ED22C8B16FD93007010 + 028D35F0058FD271CDDCDE7AB8C15E020860EC57CFD759DFE25B7FE35B7FF560 + 6FE35F2FF6271EF65D5FF6CA9EF55C6002AF4405CFBE3B9B5652E4E819AF78C0 + 5F0CE95679F24F0D321299E92C3F93FE46EE32BF15A9D7EE5B4B70AAA5F3D2A9 + 19B5D305D1C9DB5399EF7BCBD62BCBBD81D90000606492E2056650F0C99DDC08 + DFF9857BB8E9FCF061EFF5647FECA7AF0067AFF5588FEC673FF6C4AEE33CFEF6 + 901006B50E9808E6FF1F756FED81D4C149A9F780746670419C2C0F3803D00DD9 + 1254F4D65545E2CC69AC8032A3F83CEF10A4C13029DCE0D5DBEADC5CF46DBD56 + 07D6C58D30166D001852E007B88ED2BAEE03E37BB826F0D27DC0FA0830FF66CF + FAF65FFFF47FFFFA0FF6F30F080A08820883868288878A898C8A85898F8B8B0A + 5C262B1745009A9B9C9D9E9FA0A1A2A3A4A00C1B105E5E6E097F710C61B1B2B3 + 610CB6B7B8B9B916B6B1B7BCB6C00CC216C014010D6B67CBCC03CECE0970106E + 5A5A106701B621DB00DBDE5656C5E2E2BFBAC156716765D565090D71710D6770 + 655E07F75E10637F01F0710100FF0504D8CF9FC18308131AA4C05060833F6B22 + AED940B1A2C58B16FFD70CA8E3E6DE817C03DA5060B06393853803BC489182A1 + A54B295FBE1C6022E3460C1568FA3482246967CF9F3E83027534488150A15C54 + 5CCA52AAA9D3A75045596893C08D970975D6C4A140AB2B2D7360C3F21A3BAC2C + 5906C792395BF6AC6D348EEC06741969C18AB710E0F28EDB6B76D7B093EA0E68 + 2933E65D803F63EAD4F3986FDFC17E90FF299C4C1921430AF002B4812811A367 + 8C1A3932D6F78E018B4C9A2C0480A3E58B143F2E639BF9C2A4C58D265C0AE9DE + CDBBB7EFDFC009F116FE5B3871DFC7811F525042298C2A53A24A9F0E8A9B5374 + 1FE092DEDACBEBD7B0E0FB921DFF975718641ADB0E18C39E7DB469EC0AC3AB75 + 0E6F5E707BC99DFDFF552CC0808E8DFDD1853CD2943141355A4CA00F3FFE44E6 + 6065104E7659669B4934D167186E105A47F86CC740062C1861D21E70B8F10506 + 7AB4E403062BCE465B0B39DC94131ABA25179C728644A29C8DC52157238EC6F1 + C645132BC02022754852875708D785D14002EB9401C71A018C048B77DF85A7CB + 7EE491074B3C1FA8D75E7BEF753458615D00D44517718461817DF7E5A79F7865 + 053006350A8EB1C11F1FD053861B6E4C20A81B0B3E26596411267AD084FF54D8 + 59869F8536C168856523820830EC50456A01AC5186192862009B8A6694CA0413 + 1AC49042097DE0E8AA0BAEEAD6AA72B0CE8AA3ADBFC11AEB6E955CB203934906 + DB5408B030E05408FFAA7D908A820394762596596A295639C100735E03618EB1 + DE98EDC1510704935AD36C005D6CB6411B71BC799F5E721253AD2D5D54A5851B + 758CB10C94135C05A81B7F2E589040900DA4E8C05B35D4286711411AE9461C7E + E4E108226400C31D59301942181B94E1DAA82A62208519F7309103092A7061D4 + AE28A7ACF2CA29DB30E452C2C61C0A5E14B4B14103FD70F5A628C83600872A6E + 4C19402DD076252D785DD20926B76324E0F4D3101828581D1F14A4590373BD09 + 679CEDD2C90B55074AE9343DF608A62FA01024B0C1BF87B64DB0A28C6A86F085 + 0A5FB4A1161D56CA400123E820C2052C44D74D1872D4F1851F29C6E631C83ECC + A1410E2670D16AABFFB52200EBE596675E88AD946BEE79E59863CE79E6A2CBEA + 7921BA22606BE8A49B9E3A022F3F27B8CCB40FDE406275C091C0191BA43B4A08 + AB55039248456379F4B4493310471B1F8CF9F4F3DE5A35F51F6EF6A2B35DDBAC + 8B5FD76315630BD8F3C2117DD91E993D413B541A8AE8DB89C6FD908575833680 + 34933A2CDFDE23F0FD370CA8013095E12B5A51C71667862DC0E8264B50C0E458 + C6C0063AD055B12B49ED6466052741C923F3CA4A1CAC209536B0E61E41A31243 + 8A67B4E36DC96B65595EF312D034E88D0D3E1F4940173868B1BBDC457BE1E0DE + 3818E0C149110A86E5C3E02AE07006AC59AD6D6C631F65260490F73D2A7E15D1 + 4802A691379CEDADFF0058EC9BC48A60310BD8010E0790428A38E6310C98EA71 + 2468C21254D73AD6B9B18D707CA31CE348C739DA918E2E23D2058E3441245981 + 01878112DECA879533B4A14A0C005637D0D28601408052FCB012096561C26905 + 03172A6CA10B75A79803C53000D5B1210E73989F6184E37B0998D4F9A8810F41 + B9D20BD5381F116F4690242A31424C44C6DCA09891F981AB8AAFC022DFF8A603 + 89F16007D1B10205DE700033F8C007645C49A97CD002DBC4C0649DBBA336EBC8 + CD6D7AB39BAD831D91B0C0943E524735F3A8C72031C8AF7AF5CE029BB042A74A + 543FC1D0CB901430CF246751C91392074C9B8CC65B0285B7098C01949FB061F6 + 70D8AEBA14C34970FF085735F041A86F41206A9E1CE2183E60C45BBE2D6E8E4A + 182F29A291120D1224A511A64A21664C3668220E6F3810A812F792D96CA13631 + E2C21AFBE0829E5ACEA7A1E3294F81DA53A1F6F4A83FBDDC5091EA029E5ACEA9 + 4C251D50A17AD4A62AF5A84B2DAA55939A941C5CA09CE67C0AB20270865404F1 + AC07A0D7075EF1C73864679D8C6145EFBAB34F5FF4B31C5E42C61904AABBBE8A + 4F1A5661C719E2B009851A766BECCACF29E3B0818806D10B521AC0199C3186E8 + C5B20CB91BC01A8CB83E8F4AC8607283DF4835C4304806337F59CC623133A589 + 10C4810E3F73A61F02C8A2DA9A01A724CB4D37A11A47A8F2D68DBFAD6370E538 + 5CA0C6D1A7080083FF738CC0C1B096825801C84E3DD15A3E7A0D604F1BD8C874 + 315848E2D5959277F58BB5E2F08779F0F5AFE2FBD6811204813584A1B036EC86 + 61192A8EFBA0A50B652D9B165421258EB6A10DEF4B4CA05C5986B49DE10F87B4 + A5672DD39026EE526122FDC31F367006D1E0434A6BE8421854CAE102AC96629C + 0223A860434633DE1646245B421FB25AD516BBF8C5308EB18C674CE31ABB7809 + 96B880049D3B0A740291BAE54B5081A36620B872571F6B6BD377C11BDE4BF6E2 + 300338EF5FEBF0ADC5ACC21DC66A6D7CB57C43ED8D432FE769EC3AECC92F387C + 402498F94717CA5BA0F50E51B33853F082FDC1C40169E889917A9484295C2276 + D6A18801E83087FDFFB645C12D5363A0EAD88A3EF685C63D4E052A362A516D4C + E9AA26D5D295CEF4A431BD04157895074EE07142C3815FB302F9D4A716DEF9EA + 90800C2B79C94DC68531BAB081CAA237BD54862156B49265C3764294A3144718 + 5488AFFD8A6DA3E8EA0E6634B386CA1679BFF4DADD9E123C67062FDBCEA2C590 + 48F734E10D1D79770D103487B598A94D01E01475686689F5009346A3EA062648 + 41534FA0E97ADBFBDE9556800A6ED002502B52D4DD20EF143D495D23A3BA7C57 + C9D70408E598672D993E77B51605BAD06C6F798BCAB9AB72FD58D1807C7279CB + 1F472CD726FE878D1419B2AD7E08CE0AF698357F20011C59EFAA13006736557B + 21A075E2B6236591FF3DBFFC97F7107266C53DE862EAD8DC0C58C323A1F94CDA + 7ECC99D4D4800914C8E217D31BDF34BE3AD6EFADDC1B64800AE606F8B9375087 + 7C193CE80B27DFC1E3FA27B37BE1CF557A383FC36B1E6263FCEE55969E35B051 + 971AFA3AE422C7CFC45FAE4E63C321C999015840B6020F9BED1586ABC06C023E + C00F39DF12A40F8EDF849BA718F209F9A27520FAB8597A9AD478F00B66800D4D + 4725852D1810725CB0411FE84D7B17D4FEF6B6CF3DEE77AFFBDEF3FEF7BE0F3E + F0876F7B1BA4E0064C6041A8456D8130FCE167059F79D3A6A1F654471BB0780B + 219BE46ED77E8E9740DFC2FBB7027B8009C0817AD83BAC75E4AB7E70288F7926 + F50886E7128634ABFF294D019950B96A0D17B447F666F8576D97B16C21453710 + A60C30576442C42F98257AA31731A7C1245310006FA0127E803802E4313E807A + 3E20031A90462A7602B3277CB97704C1D753B88782BDA78226988224486F2DD8 + 7B3138832FE80231E802CA950319C003FF664E71B006FD87566F07689AD12763 + 866A0952079AF5739372656B3312DC4777681100D93545E2D7497873266D9048 + EA771780274ACDD7057D223DF8403536677FB5544B2DC7668B710FE7A30F1FB0 + 0101C87897C74405688019224551034B70157969E3801D466E3C80741FA005A1 + D2121CF33130511B24106F36700290687B91780247407B952889B407899A6889 + 99B87B974889BB37FF8993F889A3A8899F488A9D0889A8D8752D1022CE750A10 + 70764107016BA5351640017F2048A99627E7D2066BA08B83A13605237711C70B + C4E62D1080777F620FE1D33B34D485D0B850F73586EB242EE8927869988D8B47 + 806B403666B30A10000763B006086679036387DD8667DA363F0A1844D0168E67 + 008882E637170003E564016B30011C382A192805E5474D230369F35683C4377C + 23F87B0749900A5990BA677C37B0022C1076B5435ED08756195435F0144FF1B0 + 5758F858F4A22709D60615563601D20FC41871CA5372C8A88C64A820559348EC + 178DDEF06BBC800CD4E81179E20ACBA68D3C994414470FFC1228FA923B1B558E + E6884B0D612ED916FF29CD430F0417646FA83B1FC06106204C55894557B952AB + 851A0CF0078FC41225E61227F6812A00069B789668898968B9966B89896AC996 + 7019977279966A797C10F92B1334063FF6581AC400CDD55ABC40728E345DE173 + 5DFF95263FC921F302010310490FE770DD271635F98B57B88783E40663D0066E + 22937F575880C47F04157484517987D2933DE90FCCF3344E7959E1A859D43680 + 04D36077485278A821679018ED8841C69636DA3295F228685AA463AD950560B4 + 3117181B8C8601EF1639AAA30673298ACFB9896FF996D1599D72F9962EF39011 + 3941DB15645A90151430935EA8097F845F25A20A43746087542E69928B0D9384 + F8C47DD122166120FF92D2107E1755060A382FAD4001E9C799F1E50D9F493FAA + 202857E60AD8689AA6999414011153044B41176D94774875D8787373213BA721 + 9C477E417615927706096395BFB9522CC5035C040030054662A43826764631A2 + 020AE002CE699D345AA3367AA327600360402499D28349726AF4A21519C9659D + F04736190DBAC33B58532E09861847281884D171F5279F73071EE4B511181735 + 4219A187F70A000A7200704AF3B4188B4965AD667301A3A03C7910F8E78B7A59 + 4F42268E1C9526F0C02895818E7796A15114264EE98E97C56A0310875833A244 + C75230C0031C244F09D04C3EC0121DB31207D06832B0028D287B338AA36B397B + 98BAA9D609063150FF24C8243340F69DBCD65C87255F39742D0DDA000DF05F87 + 79187AE97951DA265C517FB57A9260517F149718C9A8A54F697EBCA6355F6A1D + DB708B54480F27058782EA206AAAA692B115E482184027186F286D145A3006A3 + 10B0B93CE9A8A71A1A659DD7A11E5A2F1F50AE9154005599AEE8BAAEEADAAEEC + 8A45F4C803E449225ED068A2829C1BB8222D902A5C70A99BE89C007B0297AA06 + 044BB0027BB0015BB0086BB09A68B0098BB0070B89012BB110FBB00C6BB1D209 + 06267003C2193316990F6B65313179AAF1A43C02B126AEBA268851076AD70EAE + 30A5B62A9FE0710C253745FAB98C5938445422ACD933ACC80248D8E28DECD00A + 6BA286CD7AB4D8BAFF6CD29A2F8C214BBB538EED83A74B79671F709BD8D7A1ED + 54941236175794952A9595602BA2C2E437875A05DBF0834B171B19582A33912A + 2A900236A0B0131BB115DBB0764BB1189BB775ABB7030BB114FBB77B9BA34DE0 + 5554303B488256F7940DF0058D9C8017E3452E00D6066B16AB83C49FEF00B303 + 78AB8FA90B4598808002A16E9836AEC085DF701F8C5BACC3B6B2D47059678A8D + 8A77B40A8A106B66729E078E7000670591B909C1284AB9731151AEB759264606 + 59F502A250EB26EFEAAECA9BBCEBEA61FB13AA16F0071A4362F74A2ACEB4AF24 + A02A7D50B0DCEBB005DB01DD0BB0DE4BB0E02BBEE41BBE028BBE72FBBDE39BBE + E6AB06E5EBBEE14BFFB047B0A31C8BA8C182566520176160AA3E1B2753C89E93 + 6B6A505A185C91B99721B3B940B3BE64764766486ED277A3148D62BA01038737 + 9095366B70ADA509BB1EFC2F7AE5947CB85FD53AA1B99B668B52A707B3946B50 + B5D050266AC75E9317113863250C10B65829B6CDBBC35E4B6E7869055DF0482C + 729C8BC622FEB805731023296096E17B04F3FBC44E3CBEDD5BBEDC1BC54F7CC5 + 567CC55A3CBF7DA0B11C4B05F97B56B4980D12ECB3DCE0B8689178B743C06722 + A5083C42B86A3DCB935D1CA15FAB903B1FD0053059BADA038D7F347850C28CB2 + 745D74BA6CAFFBC1CD4A6760828CCBE87F728A606C92446FCCADA2F5BB93E51E + E2B38742D40E07C6FFAA88040CCCBBBCA29CBC5A042289A4A807202A34D512EC + 9656480C028D98024E0C041D40C5E45BCBF09BCBB50CBE54CCCBB97CCBBE1CBE + B6ACCBDF8BCB4FECCBBBCCBEDC9BCCBE7C04FB76013C78B867B5BFE84217FF69 + C6A77425353306651064517AC06F9CC0FB640EC730207C82ACF6A4C138B3990B + 35C1BEE6B8714071819CCE6626205693A6888CC899C12767B0A1EB64BB1B752E + DB18CE7293A7544B59EE01C37E662FE5C8159734CA101DCAE83A0225BA034EE0 + 5AE9A638FDC822CFB4AF4F206FBF4CCCC82CD2213DD2E71BCC247DD2254DCCE7 + ABD2BDCCBE28EDCB36D004F76BB85081B8AD46A1117CCD66ECB8C9C2C6DF6CAB + E1ACB9E31C0B9861FFCE0D60C1ACD418A55117A3D4C7BED656D812C8D5605D1B + FC18F99CD504A166AD6A93F404A1EF288E9B45A7758AC0DC9AA71171C94D4326 + 364B3E58B1519B353465110C06A0BC752DD1115D95862A41555081ACAC07ABEC + 315FB00518200339F00465790434A0CBB8BCCB8E0DBF8D1DD9BC2CD9903DD996 + 2DD28E4DD9992DD98D5DD99D9DCC36F0CCF23A1DFA3B255DBD15B5500CE0D0D3 + DF503365554FEDE0C6434DD493B49376F6070FA18B6F27A45DF6D4797158AAA1 + BACC784F0282D55A9DD50D3210F20073759C850BD79A1B6C73657DC0D14AB52E + 9CD0DAB21E30A7770A52CF354C27798DD7E2EDBCD0BC29AA1105AEA107B0D18F + 30E14C8EA3C471DBFF07CCCCD8235DDF986DDF1D7004F85DD9248DCC9FCDDF97 + 6DD226B86F194006CB77D367C50A9B25B95B6D253C3DAC7F741E810142EE00CE + B34DDBD0726DE6B2270FC1CDB0647E1BE09F4BE2DBEBA250E140010D30988384 + 15E3D220877CDC1FEC36F1CC194C988542378E58F3ACA83D6CD856B56ADD1E6E + A1189775BB020D71E381AE775DD7E99AE44CBEE44E8EE44E4E6E54106A0C7027 + 2772AF64542A2F12231210B71D40039B1DE6623EE6645EE6667EE667EECC3100 + 2212D914A5BD59AD9AB226694ABF6DE24F7D43766215C363E1B35D3C0D462E0F + 71671CBEB4E1433DED4CE2A6AB17CA93E2A6C65E8D09C2301EE95B0DE9D16A72 + 04078ED2C6AA0C5EFFA7D19AD6080DE4CDE06C82028FE7D226D45216E19DEACC + DB0414FD37A8410172602219F81204845B2A6003684EE63850E6BB9EEBBECEEB + 65AEE6051E15380DE7FFA5E9F8E7D0A664E7777EC63C749B0C9D33491BCE197E + B20F918E1F3011B85D72E052E85C88E8A6FB0DCD07AB4097418D29DDF82CE9C7 + 8D445CDD27D37AE3CBA0EDD4562161F2E9CFD0CF555B59D3008FE598DA5ED3E4 + 501EF04A2EF0003FF04A5E957FC3023BD01F2AFA1A58DE122C7162B05C9627F0 + E5165FCB608EF1999DF116CFF18E0DE6201FE621FFF1227FE623DFF117BFD929 + F0A941D0E6A3F0E671EEAA87897F727DCDE0BEDAA784C2927CE1704C0BE5BC79 + E51AF40983602557FF7609727EFD7BF3758E17B040850F9A854103682EAEEE54 + 2F309121CF0662C715A53BF632D67676DDEA2159411FBC54268E7268EA97441E + AABEF6CC6BA8857B6E8BBA31C8E9312B712A8F63022A20A31E8FF21CCFF1BB7E + F21A1FF27BAFF124DFEBBB0CF8252FF87CBFF1F9AD02961004074E0AC5DEAA4C + 2AF3C8FEC94EADF4758EAACDC7F308EC1569A10CEC2159FD3CF49BA1E258B101 + 49AFF4D9638CF0778443C451945EF555DF360C21CF55C687677351728A5D2EDC + 16CC80EF69DD4201CD264EF6EF079FFCCABFFCCCDFFC598429AE48014A772263 + 34F731E1032070D82AF0032700043420F838A0F8E2BFF8E30FF2DF4FFEE85FFE + 1D7FFE82CFFEEB9FFFF136F0F8912F0A302FB9327FEC715EC8A9FD9FE00E0821 + 2100008256160C896114718D148F90916193946171017F1F0363630367671F6B + 6B1B7F6D0D0375135A13751B615687B0B2B3B3822116967F6770655E07075A6E + 70670D018D9701C9CACBCCCDCECFD0D1D0718C6D6B1F6709106E5E5ADE5E1365 + 657509A01FD867039E9FE6A1A2679C631F7F5D7161890C8889FAF91606FF000D + 140038F05F418104131A0CA8D0800E111960ECB060A54D1D337E30F8C0C07123 + 0633BF7CC8D04022C69213345276A0B1B225CB972E63C29CD90187CC9B3473E2 + DCA973A60D132B2E382144B468D15F487FB949B0A6419B2E6DA24A9D1AB54B32 + 0AF96869DDBAD582FF57068B1C451A0BA9D2A5066BD27532276A83D35310544D + 80E30A1645AEB442580913608336375A7E791176E68FB1C3C8A4295ECC58DA25 + 645D22EBE235C1173070E3E0AC65D7EE9CBB77EAE6D5BB87A874BED35EFD315C + CDBAB56BD64D46E8C870616296356ECC98F1E191A36F1F5230F86991E3099823 + 2973265FCEBC79F3952A5F3A9FEE1C3AF5EBD157DA48B1224815A3E00124455A + 064ED3A754D337706AD5DEBEBB78E3CB42B4681259B2663169E2E4E95CDBB767 + A4B24A2B14D8259F5DB874B14602654C8054307514664C23873566E185183E46 + A135DAF412183013B801011C09F4E7D967A2A488CD1AF46085DA8BA57DF5DA8C + 34CE58806CB4F160FF01000CBC919B1EC275E49B6E5F30415C0C2AD8909C4BD8 + 353953744E52C76494CCE1201D0D3FAD80C550E111359E524CB1971E55EB5595 + 0C35A45961C8815DF1031623D4DC470125717491C9266BF9B7815BA604C80D2B + 6B14184B7C7AE112C0821058261804096C500F85896128E9A4D34C7849171BA0 + D2CB8321D6A1195B29869A16284D8D06238CA931C0100100B1FA8FAB06C00AEB + 6BB3AE7623442C141102030D9461867019F9C6916EBBCDA1410E49AA41031054 + 360945B3CC3D0BEDB429657981115C86F7E501E59D07D598E04A7555566CCAF7 + D5228CC8F9C82475DEC91F5B7B0258C79F75AC1107457779D515031428A88D83 + BF68E14519097CD0FFC6999426ACB0638C341060191F8258DE18A48A3ACA359F + 3465CC3DFBE0C34FAA0CC451E3C8240744C0AD11F1E044165DC0718014C109C9 + 11CC071429430E26A4801CB3D452CB3373CCFE1CE5CF42370906505850614597 + DB2EE56DB863AEC75E23A4E95B2E57FA542227BBFAC1936728F19AF2012F5E78 + 01C107F75A6DF52C86FE31001CDC041C4E1D036CD0C631152EACF7A489510356 + 1C70A9F2E0381483DDD606A278A6B18BA6359E1A7D01B4D16AAC94B36A79E598 + CB3AF9E5AF6E4EF98D3AD4568513712470C046C10AEB83195FF8606471292C1B + 7472B3A7040510CC3E3B7BEECBD2A0BBEFBDEB8E3BCFBFDFCE7B4AC303CFFBF2 + 40141FFCF329E170FF74504630FD65B762420DB555C66005DFD5B43CAE089C63 + 718D96D7268EC267031F3058F6D971F483202C6B3280C918F3463C010463688C + 77A47B0B20DFECD385F671E343102AC707F6C440C4B1C37F1D6B1C6ACE1500B4 + 94EC821894CD0560C0030654A10110F842CCF4B091126AC40745D2400CB86003 + E4C86E3944EB5DCF902743A0D1AE77459B4E0E9D23B4A3E5E00259D0D6979C96 + 3DED69EF5155FB1EF810343EFC58A2826979979ED637B60699ED0C0148CDFC64 + 9188BE304870C07043841A80A6B03C468068CC903D16E1C5B85826188C3A83FA + F694B88C919171A78A11E4D03280CCF9F17280FCA32039E747038C600410E1C1 + 77BA603A29F8410FFF4012964676D30215E66C670E68DEF036B949E36912779E + 0CE5F03C993C4E9A5276A034E52739494A55D2000C29B8C116AA67946D610F3D + 460C5799DA33278FB1498B6CE3877D247196287E6D147F680054166445086051 + 7E6A430405BCB8A9030C861C0673CF9BF086B0347A331A7E63A35FB6D18D3092 + 438E0CBC063642510C1775EC9DE2E3CBF9C6B01ACDD57346B5AA556B5C558002 + E06A078C904319BE1049497EE40B66785D0C5260031CA83268B8C3A1447737D1 + 894614A218BD282A71A8518A7A74A33C3B420A7EB883A579698861C2652E8FD8 + 1EBF2911418F8B29BE62DA44485CA20D1B409F7F90A94C6B50E68A59D497DAF8 + 85A97F09866006DBFF183ED0F5BFBC7DF3A988B98725DA30B66D54C61B222AC7 + 1CD3E209BBF9CD6379A4201FD531C8B206F2AC66FDE3C91E72813B8421045D08 + 214752373322B92E0724B8A4EF36894ABE96F2A2A7FCEB4307EBD7C00216A37D + E564075210831550E128D7334F11570AB55D06A0973185A94C376B1745D4E789 + 3855CB00764A8A9E32B332CE0C80FC0EE1154B388C6C8B1AC31FE2671ACF3EA2 + A90084AA008F61536B8C010E1028831B54914074220E1D6BB81BC724E8B83DAE + 6113EAD01C5A3B47DDB2766EBA94ABAE21457001165481011B80C0CB4C485E0C + 48C175C7CA590F3A004A87368FA3B973A8F27CE75EE139EFA37FB5EFF34069D1 + DF7D140AF2854207FF6C7083DA9C743C4454296575E994A74CA86AE1DBAC4C59 + EBA6BF45CE98A375476997F9D3D402F32B80D314C0069600323200A69E45179C + 20A5DB34C6891101B0D3077E5B876D3408AB7174C7271678373C32577CD33C1F + 74FB4880221BF9C8483E72AC92BCE4241BB9C94A7E329211998120EC201F1B98 + 407032425798B5CE58C551C1098090492840A1CCEFBD9D9A9B0705256852CD6D + 7EB3261D606636C379CD66CEF39BF3ACE735D319CF727ED69D5FD9581E10C296 + 9255F0828D1899F684616D128E344DA579619D6A3899CBFC2250572B4D87CDAB + 9CC16854FCD4C45A7C8065982BEE668BF556C6695A630009006E8D857BD5FD0D + 23149A388357DD79FF9A77F6C3B9EA08F600D04AECB4165BCA952B7221717401 + 455A600D6538C0AF84151C9899410A66A8240954B0B340A779AF77DEF39FBD2D + E834DBD9CE75C6339FD34DEE76971BC03668EC0EB2D0B4947E6BD1B9949AA3DF + 23E97E3FEE890DF8C3A82AB6610EB9B10C0350ADD5C072285E70AA0E1F50AD2D + 0A55E153DB94C5B95DB585C4729619D7A1C61008B9380EB8BF12B5C3ABCB0D6B + AA2EE12E75A463D84886B29367DE6499CF5CD9373FF28D3290011650A10B5748 + 801BBE3057837EE117DA36C10F68904934A359CF746EBAB8A7BEEEAA5B5DDD57 + BFDDB8FBCCE6A7A71B07F16E010CB610D9A7E17BA596BD442FC945617FD3945F + 37E5EA6879BACC31FF1C7C0C5DE0345FC6E606A49078B616B045DB7B6DDBDB62 + 5CE3927A71BBB2010790873CB8C3F586AD3921C7526893B9BF6E6D1CDA20F097 + BB3CBA99C379B28F2D7ACBE1BCF43547B6E90542659FDB4F0E5A28EF46BCFCE5 + 231D61787F3E3399751FF5DDC3D9EB6676BA9C9DCEFBA9F7DECFBA07F4EF7D3F + 6791DE60054C40A9D9CF7EF6EEEDA3ED6E97293E363F2A6426332A99CADF52DA + 90262B1035400083D019EE96F9499B9A12863F63C6113F8D3935828F0970FCE3 + 836BC555308AF2F4707979F46B2183169A206CC296730AB8800CD88046D6046C + 750701100620740018A007741524C0B1054C80333FD05064E600517766243882 + 4D5782C9878226B8FF7B27B88226A8822C58822C1883BD678222150337D00264 + 471E89766FD48776BBE408CB957D9216329C974C01F707A5D000E10718E3F768 + F9D22FE8173004935C13686A9BF54EF0177FF3477FCDC071153463C0250E65F0 + 78B3365CDD20460AE428B40556F0F41546C8559DB00E09E8804E66737698874D + 003A11910521900563700018182CBDE1653E401C79153B22C88222D888357866 + 22C87B9058838BD8888C688951E7888D98678E28892DA88999F867DB610239C0 + 04470726D3F783F8C63D68C2694448537012634CE8167C247E09407EE4C2701F + 900A4715262D9544DA274C2A760CF2E7855FB846966027D9007264B87FFCC70D + 035307FD138029F7FF63F832551B708008588704800246E68D49068E37278E47 + 268EE4F88DE8188E315700B321115910077CE0051708245D2605ADC304E9A533 + 21088AFCD88FFEF88F001989A1289001098A67D6013F600224D0023EF00BB7E4 + 83AA487D4AF58AFD9608751270A6F05CB6888BF9B27770F30B25B740DF379112 + 46785B488C88618CCA2084C998298DC77FE2E08C90E7066E508605D34E60658D + 202664DB888079F893409973E0B8731740063BE00471151C91D41BE6F50B5B60 + 2C316002C7E18FFBE888558989A0B88F57999558D9749538895CC9956706760A + A98307906010199140C81EDD338414A97D4F940CBE952807300125E63DB0C070 + 6BF09175392297A6FF4CEE51914BC554B8A59262510D2E590764D88CCEB89871 + 849398A7479A670D9ED793C1D68D98E98D9A898E9B59649BF9999C999998E999 + A2D999A5799A10D87359005E13803A0625243E602C24F0043F700435E000B799 + 9BB8D988B72982BAD98FBA199CBBD99BC3B99BBEC99BFC289CCA699CBC09053D + A0020B69060FA9961119190FD67E6F0987E8D2176300317509070DE0229DD570 + 7D674D045331A370308C538483797114E254ABA67817F636B3E698321993D864 + 186BE76BFA205405988D96B98DA4099A043A9A060A9AA439A0079A8E0B9AA0A2 + E94F5A7205DF7506B9E1078F645030C38137B35047E088C4099C0519A222EA8F + 1F8A9CA0789B4760FF0231D00258606FD4A98A65723097558DD909329BC777E1 + 3006E1998B21B3017C3930709061D7C02207A34D1E138C29E69E67D4628F6153 + 32166B30598632B97F9E220F07C331031853AE2577019A8005FAA5A709A6621A + A6644AA006101BA1C302F6F3077520421788A1BAF13A2420014A529CCB79A776 + 9AA778BAA77ADAA77CDA0329F0043A480693F5A28B16A3ACD88AD8992A8CBAA8 + 7F8329BF550E6D80978710327F207482210C42EA1FA5D0525FA5458D7A6AC358 + 98DFC49288B98C8A699F530A0155BA38599A79FC524139D5A5021A9A605A8E65 + 4AA6B8EAA0B71AA688740158700757D005141A33BDB111AC738FF9C874BF99A7 + C7F9ACCC499CD26AFFA27E4AADC209ADD38AAD0E80038C151474D05386FAA2AC + 088C5F1199036891D6C0225D40A91679A9D1060CE5317789C3530D560FEBE97E + 491A7F29E94D65848D63907F221793AB1A7270A0191F500C581A9942D52FD9F8 + 09B4EA939F8902121BB1043AB1167BB1129B9919AB991BABB1183BB1DDF8B104 + 201BD07707F9F0015A705E453724C0C11BE9650364769B49E000495003367BB3 + 385B03339BB3344BB337BBB33A9BB3426BB3335BB3439BB3407BB447CBAD4011 + 048A16AED49776FBC96F84F73139991A7CA10C14305414D000630018E6347788 + A34EA1420A453A09FC063259A3622BD685097398AEB606F813A5523AB0E43000 + 56481A6E3841FAC0FFB0DB5899013AA6829BAB835BB861EA8D28C30271B0031B + 50072F438F32F3115AF0053793333FD0013C7BB3B869B39BAB9C38DBB97EFAB9 + 9A7BA7425BADA37BB34AC0582D10046909B5AA98A86E59AEAFAA47DB84594CD4 + 0603E09D1022B6C775229CAA4CD6C776A18A6A6D0B9F6F2B9FAF3686AA3AA59E + A2191AA3B70A5BA97502A00FDB931B8BB1217BB1D99BBD1FABBD202BB2DFDBBD + D80BB2ACC28E2B00036410320940747390815E96501A000279F5039DABB4F67B + BFF89BBFFA8BBFDCBAA24EEBBA50CB4B1134BBE70A16BF566A5D300010101810 + 220FEA9338E8F04066BB6FDF23BBA21A09A44A2942384D32F65B513AB08F4722 + F280B039892AA9D1FF2FA352BDD6BBBDE1CBB115EBC22C7CBD30FCBD1E1BC333 + ECB17BA803E7CB0259D0066FA005D3568FD87600AF439B1D5ABAA79B9B9C7BBF + A03BB44DBCC450ACC452FCC44AAB04CF190355560A405815004C266C2984036C + AED678A47DEBB5DED9970E4C47EAC419F082695758C1B525AA84D9547CF362F3 + 09B01FBCAA1F47227244C2620C870C0BB82A1C6CE25BC8867CC8889CC8DDCB01 + 286048B3110454100774000152D0BE1988015F2030724AA7F5BBBF44EBC9A01C + CA463BB480BAA249936F4AA84C8DD6C5E9619DD719AA55BBB756AB0897B020E5 + 89C66033B6BEEB193BB64080597ED83798A8C64D6E5B7FF601453416B075ABC7 + 095022791BCB1174FF17218329DA38C808A8C816CBBDD8BCCDDCACBDEC18113B + D00574A005917BACBCE107F8882C0D15CAECDCCEEEFCB9CF4902191005F98638 + DFC7CA47647D624CC0F4D1080A823F82B33F1473311603C19C219256E14E59B8 + B6C384924BBA18AD168600BB98CB2C931F572278CB7EB3FB38282CC8D6AC0E28 + 9007E22BD2164BD2217DB18C2CD22A7DD2129BD228E0D230CDD227BDD28C5CD2 + 337DD3138B3246C9007F500652004916EA1B7E606DF08B3329D00348ABB435BB + D441CBD44C8DB34FFDB34D3DD551FDC94E4DD553ADB9579C0164B03D9C971660 + 73CFABCCCA52E3606D59C2FB1CC770C279BB6819F1BA40635BD0E770D0443A21 + 6B87AF17ACAF0F0DFF4E73C246EC33D1CB6BD155CA636FAC72E732BD1EFDD103 + D0CD236DC826FDD8136BD2D80CD917DB04A9C9023B4081724588E6655EF64849 + 2461023DD0C9417BB4559DD5EFECCEA36CD53500A824700141A0C5ADCCD6F130 + 5A7C32D6F82C158DA6CFFC7C2A4B755B67F0AE9A0AD705AD22BCAC279DAA54ED + 6792277978E0B44641D63EF5C998764B2275A35C594A5317860D8A6DBD22CDC8 + 319D077990D2E37DD32BFDDDE26DDE27CD01E90DD3EDBDDEEAEDD2E27DDEE58D + DE8CEC10DC15047440058118C40665065B7088A17DB9B8B9D44970D5079EE007 + DED40A8ED508EEE00BFEE012AEB3114EE1095E0338009D2CDA6054011539156B + 053BD0F79CDB5E2CFFA353CB9FB2BCB787D0321320D0E859DCA1B2CB6003987D + 7DA4A6D69E5CB892CEC071CAD82181CDBC0930D01A3DCB7CCB70ECD3DD014AD3 + 370DDE2FFDD2E97DDE4BFEDE2B1DD2F21DD2F50DDF50FEDD560EE5ECADE4226D + 48371011B080B2D3A611BE616D2A2B03790506F42BD59FCCDAA31CE76E5EDA58 + FDE6747ED5762EE770DED44A90E1587C0763E2E18C57B09AD11FA55515AD1BAE + 9665D7D5D8DB7A44016E63DBEAB453300EC111CCA98FD28AB09CAFA9967168C2 + 0898B28C740BC27B5C302897DDA9224F5C8AE408D8DEF53DDEB0CEDEB2BEE5B4 + 3EDFE3CD01E0FDE4B03EDF56DEE5E28DEBBAAED2AFFEEBAE4EDEC28EEB2F30B2 + 55460538550729FBFFA65D061222511212000634E0E0165EE1138EE00DBEEDD9 + EEED067EE10A7EE0FDBBBAB3AD0B204EE8CD5C38DF1719243E15AE2C809877E3 + BE0D63C5D4CB956EDC119C31A5B092DEE3DB79DDE93A5E46D3FB36CA0CC266D8 + CC75530F5868D86B8A0EACDE93BE9EEB14FFD2C04EECBFEEE413AFF1F32DEBBB + 5EDE138FEB1AEFE4F61DEB23EFF1BF0EEC2870482BD0738DF001F2A83A9D4D2C + 7E7033464D034A00EED82EE1E3FEE0506DE13B7FE7DACEE7192ECF800EEF9C97 + 0D20FE71A52E0F87FEEE5221B5583AC0F45EF599274F7BF207BD8B221633D70E + 3B774808BCF24E7801EFD067CD176EA3BCD4ADC777BB400C8FEA6235637318F1 + 0888EBC0EEF1B26EFFF77ABFF7B17EF77BCFF779FFF7767FEB82AFF77D8FF785 + 9F076240004D0011C2DA066730014407B9C2C23AE865D43D000544DBF3DFDEF3 + 9EFFF9A0DFF9E32EFAA2EFF945CF0441C0E15081EE844EE8CD1BE49EC022EC81 + DBB9CD3D674DE4568F855F314DC9D0054C880E94DEF5BC0C2F87AEDCB8BF856D + CB928B40553EBEF6F7C9AA412E1A8129CB5A8A09AB4EF7C266F7270FF27F7FF8 + 847FF8776FF281FFF71AEFF783AFFD814FF8DD8FEC2B2F025A72073B4007BEF2 + A6C2E207AC53332231E034CBF9A00F084982493584838583898A8B8C8685888C + 8F87893D2A2417416D9A5D6D7F67090970A2A3A3A109031F1B0D9B9AADAEAFB0 + B1B2B15D01711461FF0C160CBCBDBEBFC0BD616114017F1F671F1F6BCCCDCECE + CAD1CA6B1B7F6DB6B9BADABBBB0CC3C314E1E2E371011B63751065EB10EDEEEF + EE750963677F0114BEDCDBBA16FD0CC61F06081C48B0A0C1830539285CC870E1 + 0B0E0F1F369CE810224585122B4E8C6831E3468D142312687243C4053201EA68 + 31230583CB97307D6CF1A38184891E881E30D2298867129F8D80EE1CDAA8E720 + A1917A98B891E10E2B4FA14891AA5347D4BC33D4FE345835ABABD7595CBBC4B9 + 352C985960FA18946BF0A7ED8635D39E3D93966C9A2AB1B8B6F9EBE6ED9B5F0A + 63396D180047DDBA32F012533DB5C61EBE7DFAFA49F616A041C03108336B2EF8 + 220F45CF10F3741EFF3D113407D3A14F2F342D5A616BD5AE4F8F16FD9A7567D5 + B457AF9648C040C90B777804B852C68C1E3F7E5CFAC0B0DCCC812F7364D80483 + 0352D1EB44B16B5F84B4E803253F4CE4C072A50D27A851A5AA0785799956F35D + 387D9D3FBF96AD5BBDF89EFDA58F58B9005D1C938C5C7249230D350DE0958B64 + 0CEE574E1B1B7C30061CE91C865862F1C833C6070DDCC34B647A4D56CC1F6B9C + B1D9899B75A422472CAEE8E20B30BE28634430C6D8E28D33E6D8190A05307552 + 171B40F0854BC9C184C11766F8E0470B3990F0437535E824E54F544E69659558 + 5EA965965C6EE965964A1CB1D4165150D1C927EAA549CA551FBC47DF9B6FD642 + D67E740213461C10FFC645203406D6D5581B7332E88F361FF2528C656324908E + 61182A764A9B1E122AA9A00C5010A08928668A5044AD714ADA6C9F762AAAA72B + 8E4A1B8BA7A61A2AA8A6AE9A2A07248990010C745001C70466C4F49214CE7DC1 + 444D1250A7445047156B1477C652795D77C41EABEC4FE089D7D499A0A8291555 + 55B1875535ABC4271F9CE0BA62DF2DB864536730DDDCD945036F19B8679F670C + 688D2D79F163811593ED420C408A1A7658A3F1C0718A2A9182C80D83EA463800 + 669A363C508D10472CF1C414576CF1C518675C711E06F8B6020B6AADE1851E18 + 140913AF5FF8300708364930EC9730772973CC34CF5C65B4375C400754D6F66C + 0A668D25E86DB844FF6F621F36E7D2094E65C8D4B5CC9ECD44136F2ADDD2FBA1 + 152184802F2F7732DDAFBFEC00BC182A1D3E66B0BDFEE0B901A60EB73D008E70 + EB38A38D72C76D374474DF4D230A3ACC7AC7151BA894AB72CC31C76B924C3EA1 + C29389F8E478B1533A7BA5E4C93E4EF99692473B1E1D9FA4D7B37A55098C8A2A + 5B156D7A2B72D69B34BA9491484DD450478D8C32D55893BA2E585B51E9836B53 + 0876D88D667B862A718471F6C192DDD9C61A0BBBEDB6C6D0472FFDF4D47746C0 + 084C051107031F1C80C17126632005AF4A6A00C21326FCD083510FB49FA5FB56 + C25FA5FC52C26F7FFDF8CF7CFF4FF0E3A094064140D3E7D44415ABB4272BDD8A + CFE9C035AE72AD0EFF2D6A09007C1A5022A741CD5DCCE0562DF061057C85A132 + C79850852C742180896E0380CA065F5688300996A879CE7358F56648C31A422F + 0F622840DF8240053A4401572E21D9AE306006C469A04912585FE5B0C43E9B5D + CE66316BE2E4A0F5831868000B021BE0E74C71953F0D6D81708A4F00E865AE07 + 0A231CFBF284052F68A068FCC94316B8D33106A0A845FD0B60ED18DB1A525828 + 8335084F2F8CE1F320868717446062878451220D59A34316F2909044E40B0A09 + 3147466C9130A2642323F6C84932529192ECA4239B30821530210864A043190E + D01221EEEA0B4862021390688397BD4F4BFB6B5FFEE2B7CB5CE6727EBBBC5978 + C6632D5368B18070FFA0472ADAC2153032905EE52AE303BBA1B60D589319072A + 90D4A686A06B006830BE031B1E03968054A4F078688B2320CF3006CCC44B909A + A218263F79494646F29E929C67242B29498BE1139FFCFCE7439AD00459D16A00 + 103840920AB79C868ACF0CB39C0E0EA048D19A59B4A25D52420F62D08220A409 + 14201D203205E6CE6E7ED1995E116339C825CDD5E9EB3F1214D01AB539BBA751 + E32DECF41D094B283681D5432C2A840C3FF0A54E089988616C83E7890C190148 + 36B5A9F684EA53997ACFA74E55A057B5271EEEB955AADAD3AB55B5AA58AD0A56 + AA5A15054DD0C10A30F1870DC0E10B7A2059F89893B23934C90412A84194F8A7 + CBBEFAF5AF800DACFF60074BD8C026E10724584119D2D4CE44794E8B06A49A02 + 511AA706B6F48165515E05F5442037466D61A1B0A385C6E98E64A602A8854A6D + 3A3F48C1A42AB561586564274529DBAFE273B6B6CDAD256FABDBDAC656A0B4BD + E7484A9281206C2501B034524BC617CB1668E00936A8C1B080D957BE5617B07C + B5AE2EB3BB5DEC76D797F8C301625B3052920AC4B159146901BBC8CC6652162C + 9B1823192F7B2E6E288F99EDCA2636399B53D19290B455D9D01F808ACEC954AA + 32256AE700DEF9DA4C3575AB0FBEEA56271C010857F8AA1196AA54BB8A61AE5E + 98AA160E71562F9C61129BD8C2207E6A575180BD0C60219575F042AE8EA35C58 + 1E804978ED010EF0FF57D81EFBF8C74056820472C00437AC89610B6B67B5445A + 0A36A9023E937DAF2CC4781FD599B11780B18504D7B660CEC2652E741CE16801 + 6CDA0117AF8F90B9D72EE210A04036B86D61DDB08A9D4A67437258CE510D6B6F + 3F3C56AC4638CF56BDF33FA56AC83CA075042EE60115A2E0BD2239747C664899 + 7349F0841F4C17C898CEB4A675191E531E395E6C432F643F1D342987918C5736 + 0B6BBFDCD9665C134DEDB82399C7D0186C1478326A0BC89B9DD7E75EFBFAD7C0 + 0EB6B0874DEC5FCF200233B8DE0A66150532243488467289737C9038F53960D3 + D8CE3661C3A3812D84EE2AA0C6949297AC5EF32E835B4633F52B9AD94007A65A + 1B87DA0ABBDAE86AFF9C8A9051A46D8769CB969F7E7F08D74012B7405CBB6BCD + CCB9D8084FB8C2175EEC421254042DC00215E2308003808F702D89B419E6C0A4 + E9F052DB20DFB41252F08415789BA4E12EC8B8476D156D510DCAEA9EB29CEE41 + DFD5F9672C4C9B9A9E5E3DA15803AFA702B6B5500FB6353CCDB1E0BC6EEAB197 + FE54A63BBDE95067BAD2914DF5A93FFDD8569F01D6A97E75AE437DEA56F7FAD3 + C33EF63C10E0377738031C14BA9C92C1842510FD550ED237D1C20A00B0776F5F + DE1FB0F7BEEBD2EF7FDD7B6001FF1D0970740B2867F082417DDEC71E93A4EE71 + 6FCCA73C46B294E5DD586E338178AED39F6328C06BE0F7ADD39627A4C790C452 + 8770D72B8C75D507FF5AE97858BAEBADDA7AD9B79EEC5C8F3DB2552FE2AA47BD + EABA1F7BEE59DC379DD1610CDE23D2A3A5F085036CA105E7BB8912424E7D6C8F + 9CA3580037A6C21DEA901EF3DB077C32CC27DF86B0547E2C5636E34B25A80912 + D9C5DE5FF33C3C02CC21380E1D77450FB8E94FAFF5FE8BFDFF5DE77F4ED77F01 + 886C5AC77507388004B8800948800028760EB88008C88048C062117705575007 + 2C116D43C4049376133840787737827FC7772648827A77822A488228B88225C8 + 822698827787031240022DE00651C0789BA1642CD764A39340DF427EE25279E9 + 7765C4100E6A132F379560E1247FEFB06F34A75A2CD44116906BFB174302D880 + 4BA7850678755C28FF815E08860938815DC8805FF8856408865DB886FD474AA6 + 645C01B07652801CD19624D4561395A65DDA26782A587D80A5143980093A6810 + 29075AD5E27804240AF48020A52384AE607E96777957665F6AF30CEC5447F8A6 + 18C9B44701B02043D7206A615457888566588AA6788AA8988AAAB88AACD88AFE + 875637B0023010075700075AD0121CC82B52E08194F62432E88230188CC0388C + C2588CC4C8771A251E4C908304377083B87288D833EE1479E3E788E6215F73F2 + 6EDD9065F3A60CFDE5733C95479B780DF850601D7460F3D68CA38822AED88EEE + F88EF0188F04880704D0373010047750076EF005B858382EC17C07406D39F004 + 499404D3E78731E8FF6307A969E01103E3A1789A9228E9356AA6F083F0618DAF + 903A35875900B10C974815FE327F9BD8219EE847FDE041000191EBD83033B000 + 2DF9922E199330399332599334799336999338B9933AD9933CF9933EB9007820 + 06C485059CE3062D31570FA524B354693D608C50798C51399552898C55D40203 + 100527C27D47855ED1782DEBB588A483919A503A72C25292786596226F6B137F + 3F571503C089E6B242FFE60F1FE4092B2948042893A7E8927BF9925AC7978039 + 98813993A528987E698A89998A36599882F9978BF99262D0622F7606CFE64AFE + 78245E80014824014340582D18782E98827D159A55298CBA448344560728C27D + 03316E5FA926F3B0FF60267552424865E8B7914AB3526CB60609E00E6F090771 + 498EF72719E738226E96976D03930B109440D992CDF99C31199DCE599DCC699D + 41499D34A99D31190162E0865B4006573006D021572713692A030203E9322F78 + 9AEE4995F0B9823D30644C004F2BD783903796649991A886791F12077FE096A5 + 358E67763C82F2416BA38ECA8922D8299D0EDAA010FAA0128A9D5BE586C04106 + 75905C6E5738CC654404890307D977211AA27F37A2A49990225882279AA2A4A9 + 142BE0060EE39A8638913D832D28776E6E126593677ED09496F5A50D008A0E8B + 1230C359A09F381977A96B0BEA3CD7D99CDC499D4EDA934F1AA53949A53539A5 + D7B99D4EDAA456BAFFA5D349A55C0AA5D39906CD3912100703E22924177732CF + F105CE853E96169F72FA9E743A823FF0043718A32A799F14399B58F11EB6799B + 6759844983A0842192B4C64752F86F547897C9B9A40EE3A5560A9D602AA95F4A + A95D7AA95D4AA99C6AA951DAA962FAA99B3AAA934AAA32C93719C0025D400632 + 6624CBD1120DB524BDA804735AAB755A954A7109ACE93C29C783B1F9518F826E + FB893A63844698B516CC134E10A0887BB43DC579A0C6A0A090CAA0996AA51550 + ADD87AADD81AA5DABAADDE9AADDFDA9CDD1AAED54A8FB178012C602910601C6B + FA8F3EF00534D18B3DF08BC528002368AF7C87AFF61A8CFADAAFF7FAAFF90AB0 + FB8A8C43201E58C0FFAB85D858E456A3EBC526A5568DB7797EC6BA9B08860CBF + B90E70B906A865A0220210D32A485F4AAE223BB2245BB2267BB243D923177005 + 0CF007C5D18F0DE5039136131D27013F40AFB76AAB3AFB005759075AF9663CC8 + 725CB4214F16A8824A841BA92E24026A8A82B1B4D60579C1B1A41721D2FAB19B + B100D74AA6598BB55C7BAD5EDBB560FBB562CBB55A0BB6653BB6681BB66A9BB6 + 637BB66B4BB670BBB56DABB664BA0024E16264C0078243246F57443E10514934 + 7D033BB8FEBAAF862BB0877BB8011BB089EBAF8C2B00AAD9513F1B43096B4C90 + 153AC9F4A76E32ACD78896D204180172190B36218AB801504B977D64608064B5 + F024AE4EDAAD63EBFFBAB2CBB5B30BBBAF7BBBB58BBBB4BBBBB1CBBBBA6BBB5F + 9BBBC2EBBBC38B046E8805787206B7F812CB5744BF4202368BB33B3BBDA7C96D + 5B7007F05488497688E56640C9500D46138411BB5256560C9D909C534330466A + 92FD702714A4A4ACEB366FCBB6F35BBFF47BBFF69BBFF8BBBFFA6BBF78D00419 + 700163F01642C2B7E1935C2C63B320DAB88F5BB884ABB80CFCC00DDCB8F84A04 + 771A7157E858BFBA1EECC5B9A8A391861207E958106DB24141C5BE6BD606F01B + BF6EC3BF2EDCBF2F1CC3303CC3329CB6765B4A4CC0023B10076A4A38AF6A065B + F0B747F40429D003B4BA828ECB8249BCC488DBC48B3BB84A50B04CB1ABAFE59A + D0F87D56313ACCE4FFC1830A18AD0543030129E5B81769866BCB03C62CDC3658 + 5B015ECBC66BDCC670CCC66E2CC76F5CC7747CC7729CC778ACC7763CC77E1CC7 + 7B9CC77D0CC76F2CC87AFCC787ECC60BF09D10770701C00765C08F6EE7683EC0 + 7C662003EB19A714BCC99CDCC99EFCC9051B886F26A3DBBBB0D682B97EFA72DE + 22BE93773495A13007B10C1DC20F93622F45B73C559BC69B51C376DCB5730CC3 + 7F1CB6BFECB56980B6C38CB5C54CC3C77CC734FCC6E62A8B77400772C8811870 + 005E7063431CA74FECC04CBCCD4E2CC1E0ACAF166C456540C5196CCA90D5C11E + 5C7EEE97194A78BA648C3CA4B7C2BADC36897CCFF89CCFFABCCFFCDCCFFEFCCF + 007DCF8B7CAE2C40FF0709B581D1A68B1C37909AFCC90EFDD010BDAF43508318 + 5C7032EA95DF972DED21ACE6618D6C41B59BF1018072A42F75C64856CFF61CD0 + 2ABDD22CDDD22E0DD048409426710761B00375E03DE65938332B903160B3FF1A + D1401DD486DB695B607ADA5BCA3DC81E5A0CB131F7D1C8A019F4D00071902FAB + 25C28F8AD20EA3C71E20C75B9DC75BDDD5158006892CD6F90CD6665D015B4DD6 + 689DC8602DD6607DC86DCDD56B7DD66C7CD65F2DD7753DD7727DD779DDD761BD + 001170B730B0037FF0562F6132322BB3186057D0FB034420D4900DD9DC76B0A3 + A878182DB48BB8B98EC82E574D10F4F007CE9A4EBB3022F48CD559FDD26BDDCF + 6F8DD7F8BCDA65CDFFD6FAECDAFCBC04AC7DD7749DDA797CB727710567E00543 + 92D0CCB70572F7A1B41AD9C6EDD04460782D000127BD6B17ADC1344A401ADD65 + C2AAA3EFD5564F9D1998B1019D28DA112420CD6DDA0DA3D7B64DDEE65DDEE87D + DEE4ED01E9DDDEEAEDDEF0FDDEF28DDE1E8006EC3DDF68ED016920066260123B + C0006B3001524063E79924C32D018F6DAF42B0AF0BAEE00CFEE00E1EE102D0E0 + 130EE1152EE1149EE10230D124C004C27985CD286A14696E45CBCA28C5D9D24A + 0F2854A0446501967274E21D43E5EDD7768DDBEE4DE37B2DDF38BEE3E69DD77C + 8DDF330EE47AEDE336BED71E40006B259E7470D3FD98993EF0E46FCA9EC73DE5 + 9CAC043860020094FF97176DB958CC5E8D686A28BE197F7A0F27B96601A76031 + EE3CECBDE66CCEE6F6DDE6701EE772BEE6F93DE76D6EDF62FDE671EED676DEE7 + 7EFEE7807EE76B8E063340942B1004571007DD036D4324054F8EC90499E015BE + E01A4EE9937EE996EEE0969EE917DEE9955EE188559F2B49CA57FC390D5B52E0 + BBCA278E5327B20C6DC041BAC3660A83E669DE36747EEBF7FDD56C5EE7409EEB + 73EDEBF41DECBC7EEBF39DEBC6AEEBC8FEDEC75EE7BB4EECC96EDB317D0317B8 + 0351B0BC98F9E41A2703E7E399C54DE5DE6EB8FF73BDE1BDA012899FA1A0E209 + 4459612EE66D32D5F862295C56EB8214E8F45EEFF67EEFF89EEFFA5EDF683099 + 817807543000CB9BFF1C075C57D1370409FEE99B8EE90CAFE99ECEF00BEFF002 + 30D993ABE53A08DD1B4C210524965A2179A6B3EE27B206DDFDE212E24EB92CEF + 06B1EF2ABFF22CDFF22CBF002A4012E84A0510B0120E75F3527000F16A0243D0 + ED92FEED869BF00F9DDC9750F1A33E88DB1BDD896840B459E2264E1F201FD280 + 22EBD93D7028EF301E500259BFF5F6ADF55E8F065EBFF5613FF6622FF625F0F5 + 649FF6653FF667BFF66EAFF670FFF6721FF75ADFF5737FF7FA6DBCD983816F35 + 871BFA3DCCF705DA4E699FE9F00B7FF8109FF888BFF8973E04786AF4D32A6E22 + 2EB416F9F450CFEAAD690DA278F5F3EEF6EC4DF69F2FF7A11FFA745FF670AEF5 + 6C1EF6A4EFF9AC8FFFFAADBFE6A0BFF5A32FFBB4AFE7AE1FFBAABFE67A9F686D + F006ADEAAA1AB72403D9F386AFF8C6CFF8C80FF1C96D72906FF1BD7AD9A61E96 + A8D04D4513F59AF1BDB36EF59C8FF55EDFF6630FF6737FF6DE0FFE69EFFD590F + F6E6FFFD6C5FFE2500F6E8BFFEE12FFE6FFFFE674FFE77DFFE709FFE72BFDF38 + 0C08645D036E5F18187E8888665F5F3E2D244F434A4202959796999742989D9A + 9F9EA1A09902124F1A5803AAABACADAEAFB0B167B3AD6363090970BABBBCBDBC + B8036B0D6DC4C5C6C7C70D1B6B67B1AE671F1FCDCED4D5D6D7D8B0251EDBDDDC + DFDEE1E0E3E2E5E4E7E6E9E8DC25EAEEECEFF1EBF215624D2B1759716B135289 + 7A3E0E613023C550FF8B1C4F7E0858288408C385A344617A288AA22587A0880C + 9140E2C2986C20B3CD9A762B97AF93BD12046BD005994B64CA98859C49B3A6CD + 55F0DAE9DCA93327CF9F3B7DB6130AB4A8D1A34089225D6A5429539D0AD2DC63 + 42264E17088E30E81198A8A09939087F1091688953D94D684199E5146AAD26B7 + 434CE42813E5A6DD91B406D8C26512651D5D093E7ED8C0B24BCB9788634EA3B6 + 785563BB9023AF0AD70E4DCF1296E171B35C19B367CEE5867ADEDC4D3468D33C + 2D671E7D79B56870AA75828E1D5BF3E7A4A55BA7060ADADE0D265400C41970C0 + DF568152186138F84482C288D0C94A8F9E51420E264124DBCCCBAA24CA5D63CE + 10EE12A07C80C388FF5D2AD6CEBE7DB6A7F0E3CB9F4FBFBEFDFA69C4FCE69185 + 0221337E249208063E980120130839E750276BB1C5D659103E286183694DC8D6 + 0F2668B0857B35E1D5CC5E70F40558786BFCD1451C148411471CE7A5F7D27A1C + C628E364A7C966E34FA0D9E6136CB97516946738DE98DB6CA1F104CE513BB206 + 0F9147EEE6A393A9E9D7020B6184B1070452084420065214F485063990608204 + 435037DD9911B9750911449840021375CC28125EABEC95CB9D2B918762952CB6 + E8224CCB3C26E7A09095A080A188B673E8A13B2D9A28543C395A94A394425AE9 + A59622CA68A49A72BAE94F923EAA68A79B621AEAA7A4768AC40D2D904181050D + B86186565A1E2205FF0820842981040B3AE8EBAFC0062BECB00DFD704A2A84DE + 5452606B9C48C18A1444DB277A7F160363B2D8DA5469A340853AAAA9A266EA6D + AA98723B6EA99D7E1BAEB9DDA6CBA9BAA8B20B2F1A52DE1186707548A1C7715A + E29A6B826556486184035B48B0C0976C745D1D1F655B8D87AAD812DE1F7130C0 + 4095613C3B6DB5C904EAF0C721912B32B8248F6C72C9289FAC72CA2CAF7CF212 + FAAD1004030074518621030AE4EFBFCD0D3116B140072DF40F12685817C8CED0 + C9CA070D0410C6C5D16ACC22B51C5F8BF4D5B12880C6A29C695D6EAAF08AACE8 + D68F6E5B36A4F38E3AF6A55D934B36BA6A9B1CB7D9E8B2CD76CC30EC90451751 + 14B765403BCB90EBFF13098D75968307276EF0E2BF0A40044717C489F535B308 + B367D41A974775B5564FEEB92A0A842EFAE8A4976EFAE9A8A7AEFAEAACB7EEFA + EBB0B38E061731A0B2030014D4F1853F3AEFCC3399870B2DFCF044FC503B1C9F + 3306CD1A6D049022E62B6ACEB1319D278FF42CB12F1ABAA6A593BABDF6A8738F + 72F7A68BFFFDEBE65F4AFEE8DE83CFBEE8E92BC0451322E43D45006F6861C671 + BE8320380891F0195A1007AC8311904207DC44F132842CEBC1A2720DB85CD4A2 + E7A7E9B5A17A0ECCD6484487000E9AAE83AD0321E944383A1192307BAF3B61E8 + 54A80016A2F0851F64DFFC6E70012A848001C4A155FF7616C0E00DEF87C26213 + 47E074B40CB20282FFCECBD804A3B7B93F61D08884A2050CA748C52A5A11755B + BBA2EA66D7041AF2C00914F880160EB14310CC4106609284E180C84661190F15 + 512003141D7306CB3D6F89D2B3E0053D36C76441CC831D0C24205B4848411AB2 + 90883CA42209793A419630918C1C212417F9C8455A7292923421264F78493074 + 31032CB0D81AB4F0851DCA40067368810C22219636BAF257C5AB5D1D54D24724 + DE515A1BD3E313FBE81E0F8D21759A5CA1072BB9C94C42B29191142627597749 + 625E5293941C66323149CC472EA18B176041161870860994F1946794014202F6 + CA720A81682B7043C3E6084109E2328F16DC252F2543A75BC061930878663E0B + B94F43E6F39FFE04FFA8402709507EFE9383FDC4A7400B1AC88532B485FD74E8 + 411B4A51832ED4A20145C035479081203821046D38E50ECF388733B2F267E66C + 63F14880857542D1964AC4E5D4F4B84799CC534623D10B1CEAE0064329F398C5 + 7464249F19D462FEF490472D2A5185BA54A53A95A830BB070CAAC000299CD177 + E09C831FCE08B094AA940824D8C21D78D9CE5B66AE82D393E74DEFF2213840C0 + 0D5A50C11214D00789DAF5AE19C5AB5E2F4A51896274AF800D2844034BD8C222 + 607E2BC0020F0C74D5C0A1720EFB5A654286E05536B6A9050D7C691D9B66560A + 36D1456A5DEB4CE8948BB76AE100311083A1F27A578CFEB5A28A4CA85D13D9DA + BE1A96B5B01DEC43FF6D7BDB81F25601F6C0C7160EF085C6FAEFB125C5C01CD2 + D8CACA12EF141728A211CB1AD3B37E363DA1152D48723A06B7BAC10B07388006 + 622057DDF6F6BCE84DAF7AD7CB5E892256033E68841EE6E02F703E560FA70C0B + 659D2BB4956AA00CB5DC6C12A1C7449A6657BBD8A045774D1BDE032C97044DE0 + C212F06ADE88EE75B0AFB5707BCF5BE1C27678C3B3B5470E348001E22AF794C8 + 2DA98AC549821FF037686C225A0E36C4CECDBAD3BA06E62382B793D3D2C2B5C1 + E17D3079278C001714F9C8F9347292FFA9E4231BF9C94866B240A1DC64805259 + CA576EF295ADECE42E6F39CA5AF63298A73C66282F39CB588EF299BB2C3F15DC + 40034CF8C2017C405B5254DAB9A4F31567E15E1C34633121C0C218301ED15A35 + 1DEF98267859F0774F0B64071F444C5CA82B88274DE94A5B3AB02E58829BE11C + 5E82E499A42A46048B79C567620DE1092D0074043B9BCB781AFAD02151B07719 + 0DE44000003B} + ExplicitWidth = 386 + end + end + object edtPassword: TEdit + Left = 96 + Top = 132 + Width = 278 + Height = 21 + PasswordChar = '*' + TabOrder = 2 + end + object bAceptar: TButton + Left = 208 + Top = 203 + Width = 75 + Height = 25 + Caption = '&Aceptar' + Default = True + TabOrder = 3 + OnClick = bAceptarClick + end + object bCancelar: TButton + Left = 296 + Top = 203 + Width = 75 + Height = 25 + Cancel = True + Caption = '&Salir' + ModalResult = 2 + TabOrder = 4 + end + object edtUser: TEdit + Left = 96 + Top = 104 + Width = 278 + Height = 21 + TabOrder = 1 + OnKeyPress = edtUserKeyPress + end + object Button1: TButton + Left = 16 + Top = 203 + Width = 129 + Height = 25 + Caption = 'C&onfigurar conexi'#243'n...' + TabOrder = 5 + OnClick = ToolButton4Click + end + object Timer1: TTimer + Enabled = False + Interval = 5000 + OnTimer = Timer1Timer + Left = 344 + Top = 64 + end + object JvAppRegistryStorage1: TJvAppRegistryStorage + StorageOptions.BooleanStringTrueValues = 'TRUE, YES, Y' + StorageOptions.BooleanStringFalseValues = 'FALSE, NO, N' + StorageOptions.BooleanAsString = False + Root = 'Software\%APPL_NAME%' + SubStorages = <> + Left = 14 + Top = 168 + end + object JvFormStorage1: TJvFormStorage + AppStorage = JvAppRegistryStorage1 + AppStoragePath = '\' + Options = [] + StoredProps.Strings = ( + 'edtUser.Text' + 'edtPassword.Text') + StoredValues = < + item + Name = 'Ruta' + Value = '' + end> + Left = 48 + Top = 168 + end +end diff --git a/Source/ApplicationBase/Usuarios/Views/uEditorLogin.pas b/Source/ApplicationBase/Usuarios/Views/uEditorLogin.pas new file mode 100644 index 0000000..b2293a0 --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Views/uEditorLogin.pas @@ -0,0 +1,140 @@ +unit uEditorLogin; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, ExtCtrls, ComCtrls, cxGraphics, cxControls, + cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxDropDownEdit, + cxImageComboBox, ImgList, PngImageList, pngimage, ToolWin, JvExControls, + JvComponent, JvGradient, JvGIF, JvComponentBase, JvFormPlacement, + JvAppStorage, JvAppRegistryStorage, uIEditorLogin, uUsuariosController; + +type + TfEditorLogin = class(TForm, IEditorLogin) + Panel1: TPanel; + Label3: TLabel; + Label4: TLabel; + edtPassword: TEdit; + bAceptar: TButton; + bCancelar: TButton; + Label1: TLabel; + edtUser: TEdit; + JvGradient1: TJvGradient; + Button1: TButton; + Timer1: TTimer; + JvAppRegistryStorage1: TJvAppRegistryStorage; + JvFormStorage1: TJvFormStorage; + Image1: TImage; + procedure bAceptarClick(Sender: TObject); + procedure ToolButton4Click(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure Timer1Timer(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure FormDestroy(Sender: TObject); + procedure edtUserKeyPress(Sender: TObject; var Key: Char); + private + FController : IUsuariosController; + FIntentos : Integer; + function GetController : IUsuariosController; + procedure SetController (const AValue : IUsuariosController); + published + property Controller : IUsuariosController read GetController write SetController; + end; + + +implementation + +uses + uAdminPV_App, uDMBase; + +{$R *.dfm} + +{ +********************************* TfEditorLogin ********************************** +} +procedure TfEditorLogin.bAceptarClick(Sender: TObject); +var + bOk : Boolean; +begin + Timer1.Enabled := False; + + ShowHourglassCursor; + try + bOK := FController.ComprobarUsuario(edtUser.Text, edtPassword.Text); + finally + HideHourglassCursor; + end; + + if bOk then + ModalResult := mrOK + else begin + Application.MessageBox('Usuario no válido. Compruebe si ha escrito correctamente' + + #13 + #10 + 'el usuario y la contraseña.', 'Atención', MB_OK); + Inc(FIntentos); + if (Controller.MaxIntentosLogin > 0) and (FIntentos = Controller.MaxIntentosLogin) then + ModalResult := mrCancel; + end; +end; + +procedure TfEditorLogin.ToolButton4Click(Sender: TObject); +var + ATimer : Boolean; +begin + ATimer := False; + if Timer1.Enabled then + begin + ATimer := True; + Timer1.Enabled := False; + end; + + dmBase.ConfigurarConexion; + + if ATimer then + Timer1.Enabled := True; +end; + +procedure TfEditorLogin.edtUserKeyPress(Sender: TObject; var Key: Char); +begin + // Desactivar el timer cuando el usuario empieza a escribir + Timer1.Enabled := False; +end; + +procedure TfEditorLogin.FormCreate(Sender: TObject); +begin + FIntentos := 0; +end; + +procedure TfEditorLogin.FormDestroy(Sender: TObject); +begin + FController := NIL; +end; + +procedure TfEditorLogin.FormShow(Sender: TObject); +begin + Self.Caption := AppAdminPV.AppFullName; + JvFormStorage1.RestoreFormPlacement; + + // Hacer login automática si hay usuario/password y no hay más de una base + // de datos como opción para conectarse. + if ((Length(edtUser.Text) > 0) and (Length(edtPassword.Text) > 0)) then + Timer1.Enabled := True; +end; + +function TfEditorLogin.GetController: IUsuariosController; +begin + Result := FController; +end; + +procedure TfEditorLogin.SetController(const AValue: IUsuariosController); +begin + FController := AValue; +end; + +procedure TfEditorLogin.Timer1Timer(Sender: TObject); +begin + Timer1.Enabled := False; + bAceptar.Click; +end; + +end. diff --git a/Source/ApplicationBase/Usuarios/Views/uEditorPerfilUsuario.dfm b/Source/ApplicationBase/Usuarios/Views/uEditorPerfilUsuario.dfm new file mode 100644 index 0000000..b5c73f1 --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Views/uEditorPerfilUsuario.dfm @@ -0,0 +1,48 @@ +inherited fEditorPerfilUsuario: TfEditorPerfilUsuario + Caption = 'fEditorPerfilUsuario' + ExplicitHeight = 492 + PixelsPerInch = 96 + TextHeight = 13 + inherited TBXDock: TTBXDock + inherited tbxMain: TTBXToolbar + ExplicitWidth = 273 + end + end + inherited StatusBar: TStatusBar + Panels = < + item + Width = 200 + end> + Visible = True + end + inherited EditorActionList: TActionList + inherited actNuevo: TAction + Visible = False + end + inherited actModificar: TAction + Visible = False + end + inherited actPrevisualizar: TAction + Visible = False + end + inherited actImprimir: TAction + Visible = False + end + end + inherited dsDataTable: TDADataSource + OnDataChange = dsDataTableDataChange + end + object dxLayoutLookAndFeelList1: TdxLayoutLookAndFeelList + Left = 248 + Top = 168 + object dxLayoutOfficeLookAndFeel1: TdxLayoutOfficeLookAndFeel + GroupOptions.CaptionOptions.Font.Charset = DEFAULT_CHARSET + GroupOptions.CaptionOptions.Font.Color = clWindowText + GroupOptions.CaptionOptions.Font.Height = -11 + GroupOptions.CaptionOptions.Font.Name = 'Tahoma' + GroupOptions.CaptionOptions.Font.Style = [fsBold] + GroupOptions.CaptionOptions.TextColor = clHighlight + GroupOptions.CaptionOptions.UseDefaultFont = False + end + end +end diff --git a/Source/ApplicationBase/Usuarios/Views/uEditorPerfilUsuario.pas b/Source/ApplicationBase/Usuarios/Views/uEditorPerfilUsuario.pas new file mode 100644 index 0000000..63600e5 --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Views/uEditorPerfilUsuario.pas @@ -0,0 +1,240 @@ +unit uEditorPerfilUsuario; + +interface + +uses + Windows, Menus, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, uEditorDBItem, JvAppStorage, JvAppRegistryStorage, DB, uDAInterfaces, + uDADataTable, JvComponentBase, JvFormPlacement, ImgList, PngImageList, + StdActns, ActnList, ComCtrls, JvExComCtrls, JvStatusBar, TBX, TB2Item, + TB2Dock, TB2Toolbar, pngimage, ExtCtrls, JvExControls, JvNavigationPane, + uIEditorPerfilUsuario, uUsuariosController, uCustomView, uViewBase, + uViewPerfilUsuario, uBizUsuarios, dxLayoutLookAndFeels; + +type + TfEditorPerfilUsuario = class(TfEditorDBItem, IEditorPerfilUsuario) + dxLayoutLookAndFeelList1: TdxLayoutLookAndFeelList; + dxLayoutOfficeLookAndFeel1: TdxLayoutOfficeLookAndFeel; + procedure actGuardarExecute(Sender: TObject); + procedure actGuardarCerrarExecute(Sender: TObject); + procedure dsDataTableDataChange(Sender: TObject; Field: TField); + procedure FormShow(Sender: TObject); + private + FController : IUsuariosController; + FPerfilUsuario : IBizPerfilUsuario; + FViewPerfilUsuario : IViewPerfilUsuario; + protected + function GetController : IUsuariosController; + procedure SetController (const Value : IUsuariosController); + + function GetPerfilUsuario: IBizPerfilUsuario; + procedure SetPerfilUsuario(const Value: IBizPerfilUsuario); + + procedure GuardarInterno; + procedure EliminarInterno; + procedure ActualizarEstadoEditor; + function HayDatos: Boolean; + //Si queremos crear otra vista para el editor heredado solo tendriamos que + //sobreescribir este metodo + procedure AsignarVista; virtual; + procedure PonerTitulos(const ATitulo: string = ''); + + function GetViewPerfilUsuario: IViewPerfilUsuario; + procedure SetViewPerfilUsuario(const Value: IViewPerfilUsuario); + property ViewPerfilUsuario: IViewPerfilUsuario read GetViewPerfilUsuario write SetViewPerfilUsuario; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + property Controller : IUsuariosController read GetController write SetController; + property PerfilUsuario: IBizPerfilUsuario read GetPerfilUsuario write SetPerfilUsuario; + end; + + +implementation + +{$R *.dfm} + +{ TfEditorUsuario } + +uses + cxControls, uDialogUtils; + +var + FIDNuevoGuardado : Integer = -1; + +procedure TfEditorPerfilUsuario.actGuardarCerrarExecute(Sender: TObject); +begin + ShowHourglassCursor; + try + if actGuardar.Execute then + actCerrar.Execute; + finally + HideHourglassCursor; + end; +end; + +procedure TfEditorPerfilUsuario.actGuardarExecute(Sender: TObject); +begin + if actGuardar.Enabled then + begin + GuardarInterno; + ActualizarEstadoEditor; + end; +end; + +procedure TfEditorPerfilUsuario.ActualizarEstadoEditor; +begin + PonerTitulos; + if HayDatos then + begin + if (Self.Modified) and (dsDataTable.DataTable.State <> dsInsert) then + StatusBar.Panels[0].Text := ' Se han producido cambios' + else + StatusBar.Panels[0].Text := ''; + end; +end; + +procedure TfEditorPerfilUsuario.AsignarVista; +var + AViewPerfilUsuario: TfrViewPerfilUsuario; +begin + AViewPerfilUsuario := TfrViewPerfilUsuario.Create(Self); + with AViewPerfilUsuario do + begin + Parent := Self; + Align := alClient; + dxLayoutControlArticulo.LookAndFeel := dxLayoutOfficeLookAndFeel1; + end; + ViewPerfilUsuario := AViewPerfilUsuario; +end; + +constructor TfEditorPerfilUsuario.Create(AOwner: TComponent); +begin + inherited; + AsignarVista; +end; + +destructor TfEditorPerfilUsuario.Destroy; +begin + // Utilizar mejor OnClose; + inherited; +end; + +procedure TfEditorPerfilUsuario.dsDataTableDataChange(Sender: TObject; + Field: TField); +begin + inherited; + ActualizarEstadoEditor; +end; + +procedure TfEditorPerfilUsuario.EliminarInterno; +begin + if (ShowConfirmMessage('Eliminar el perfil', '¿Desea eliminar este perfil?') = IDYES) then + begin + inherited; + if not FController.EliminarPerfil(FPerfilUsuario) then + actRefrescar.Execute; + end; +end; + +procedure TfEditorPerfilUsuario.FormShow(Sender: TObject); +begin + inherited; + ActualizarEstadoEditor; + if Assigned(Parent) then + begin + StatusBar.Visible := False; + actCerrar.ShortCut := 0 + end + else begin + StatusBar.Visible := True; + actCerrar.ShortCut := ShortCut(VK_ESCAPE, []); + end; +end; + +function TfEditorPerfilUsuario.GetController: IUsuariosController; +begin + Result := FController; +end; + +function TfEditorPerfilUsuario.GetPerfilUsuario: IBizPerfilUsuario; +begin + Result := FPerfilUsuario; +end; + +function TfEditorPerfilUsuario.GetViewPerfilUsuario: IViewPerfilUsuario; +begin + Result := FViewPerfilUsuario; +end; + +procedure TfEditorPerfilUsuario.GuardarInterno; +begin + inherited; + if FController.GuardarPerfil(FPerfilUsuario) then + begin + FIDNuevoGuardado := FPerfilUsuario.ID; + FPerfilUsuario.DataTable.CancelUpdates; + Modified := False; + actRefrescar.Execute; + end; +end; + +function TfEditorPerfilUsuario.HayDatos: Boolean; +begin + Result := Assigned(dsDataTable.DataTable) and (dsDataTable.DataTable.State <> dsInactive) + and (not dsDataTable.DataTable.IsEmpty); +end; + +procedure TfEditorPerfilUsuario.PonerTitulos(const ATitulo: string); +var + FTitulo : String; +begin + if Assigned(FPerfilUsuario) then + begin + if FPerfilUsuario.EsNuevo then + FTitulo := 'Nuevo perfil' + else + FTitulo := 'Perfil'; + + if Length(FPerfilUsuario.USERNAME) > 0 then + FTitulo := FTitulo + ' - ' + FPerfilUsuario.USERNAME; + end; + + if ReadOnly then + begin + JvNavPanelHeader.Caption := FTitulo + ' (NO MODIFICABLE)'; + Caption := FTitulo + ' (NO MODIFICABLE)'; + end + else + begin + JvNavPanelHeader.Caption := FTitulo; + Caption := FTitulo; + end; +end; + +procedure TfEditorPerfilUsuario.SetController(const Value: IUsuariosController); +begin + FController := Value; + if Assigned(FViewPerfilUsuario) and Assigned(FController) then + FViewPerfilUsuario.Controller := FController; +end; + +procedure TfEditorPerfilUsuario.SetPerfilUsuario( + const Value: IBizPerfilUsuario); +begin + FPerfilUsuario := Value; + dsDataTable.DataTable := FPerfilUsuario.DataTable; + + if Assigned(FViewPerfilUsuario) and Assigned(FPerfilUsuario) then + FViewPerfilUsuario.PerfilUsuario := FPerfilUsuario; +end; + +procedure TfEditorPerfilUsuario.SetViewPerfilUsuario(const Value: IViewPerfilUsuario); +begin + FViewPerfilUsuario := Value; + + if Assigned(FViewPerfilUsuario) and Assigned(FPerfilUsuario) then + FViewPerfilUsuario.PerfilUsuario := FPerfilUsuario; +end; + +end. diff --git a/Source/ApplicationBase/Usuarios/Views/uEditorPerfilesUsuario.dfm b/Source/ApplicationBase/Usuarios/Views/uEditorPerfilesUsuario.dfm new file mode 100644 index 0000000..8637165 --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Views/uEditorPerfilesUsuario.dfm @@ -0,0 +1,59 @@ +inherited fEditorPerfilesUsuario: TfEditorPerfilesUsuario + Caption = 'fEditorPerfilesUsuario' + ClientHeight = 493 + ClientWidth = 840 + ExplicitWidth = 848 + ExplicitHeight = 520 + PixelsPerInch = 96 + TextHeight = 13 + inherited JvNavPanelHeader: TJvNavPanelHeader + Width = 840 + ExplicitWidth = 840 + inherited Image1: TImage + Left = 813 + ExplicitLeft = 813 + end + end + inherited TBXDock: TTBXDock + Width = 840 + ExplicitWidth = 840 + inherited tbxMain: TTBXToolbar + ExplicitWidth = 213 + end + inherited tbxMenu: TTBXToolbar + ExplicitWidth = 840 + end + inherited tbxFiltro: TTBXToolbar + Left = 213 + DockPos = 208 + Visible = False + ExplicitLeft = 213 + end + end + inherited StatusBar: TStatusBar + Top = 474 + Width = 840 + ExplicitTop = 474 + ExplicitWidth = 840 + end + inherited EditorActionList: TActionList + inherited actNuevo: TAction + OnExecute = actNuevoExecute + end + inherited actModificar: TAction + OnExecute = actModificarExecute + end + inherited actPrevisualizar: TAction + Visible = False + end + inherited actImprimir: TAction + Visible = False + end + inherited actDuplicar: TAction + Visible = False + end + end + inherited dsDataTable: TDADataSource + OnDataChange = dsDataTableDataChange + end +end diff --git a/Source/ApplicationBase/Usuarios/Views/uEditorPerfilesUsuario.pas b/Source/ApplicationBase/Usuarios/Views/uEditorPerfilesUsuario.pas new file mode 100644 index 0000000..a51233f --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Views/uEditorPerfilesUsuario.pas @@ -0,0 +1,199 @@ +unit uEditorPerfilesUsuario; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, uEditorGridBase, Menus, JvAppStorage, JvAppRegistryStorage, DB, + uDAInterfaces, uDADataTable, JvComponentBase, JvFormPlacement, ImgList, + PngImageList, StdActns, ActnList, ComCtrls, JvExComCtrls, JvStatusBar, TBX, + TB2ExtItems, TBXExtItems, TB2Item, TB2Dock, TB2Toolbar, pngimage, ExtCtrls, + JvExControls, JvNavigationPane, uIEditorPerfilesUsuario, + uUsuariosController, uBizUsuarios, uViewPerfilesUsuario; + +type + TfEditorPerfilesUsuario = class(TfEditorGridBase, IEditorPerfilesUsuario) + procedure actNuevoExecute(Sender: TObject); + procedure actModificarExecute(Sender: TObject); + procedure actEliminarExecute(Sender: TObject); + procedure dsDataTableDataChange(Sender: TObject; Field: TField); + procedure FormShow(Sender: TObject); + private + FPerfiles : IBizPerfilUsuario; + FController : IUsuariosController; + protected + function GetController : IUsuariosController; + procedure SetController (const Value : IUsuariosController); + + function GetPerfilesUsuario: IBizPerfilUsuario; + procedure SetPerfilesUsuario(const Value: IBizPerfilUsuario); + + procedure NuevoInterno; + procedure EliminarInterno; + procedure ModificarInterno; + procedure ActualizarEstadoEditor; + //Si queremos crear otra vista para el editor heredado solo tendriamos que + //sobreescribir este metodo + procedure AsignarVista; virtual; + public + procedure PonerTitulos(const ATitulo: string = ''); + property PerfilesUsuario: IBizPerfilUsuario read GetPerfilesUsuario write SetPerfilesUsuario; + property Controller : IUsuariosController read GetController write SetController; + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + end; + +implementation + +{$R *.dfm} + +uses + uDialogUtils; + +{ TfEditorUsuarios } + +procedure TfEditorPerfilesUsuario.actEliminarExecute(Sender: TObject); +begin + if actEliminar.Enabled then + begin + EliminarInterno; + ActualizarEstadoEditor; + end; +end; + +procedure TfEditorPerfilesUsuario.actModificarExecute(Sender: TObject); +begin + if actModificar.Enabled then + begin + ModificarInterno; + ActualizarEstadoEditor; + end; +end; + +procedure TfEditorPerfilesUsuario.actNuevoExecute(Sender: TObject); +begin + if actNuevo.Enabled then + begin + NuevoInterno; + ActualizarEstadoEditor; + end; +end; + +procedure TfEditorPerfilesUsuario.ActualizarEstadoEditor; +begin + PonerTitulos; +end; + +procedure TfEditorPerfilesUsuario.AsignarVista; +begin + ViewGrid := CreateView(TfrViewPerfilesUsuario) as IViewPerfilesUsuario; +end; + +constructor TfEditorPerfilesUsuario.Create(AOwner: TComponent); +begin + inherited; + AsignarVista; +end; + +destructor TfEditorPerfilesUsuario.Destroy; +begin + FPerfiles := NIL; + FController := NIl; + + inherited; +end; + +procedure TfEditorPerfilesUsuario.dsDataTableDataChange(Sender: TObject; + Field: TField); +begin + inherited; + ActualizarEstadoEditor +end; + +procedure TfEditorPerfilesUsuario.EliminarInterno; +begin + if (ShowConfirmMessage('Eliminar un perfil', Format('¿Desea eliminar el perfil %s?', [FPerfiles.USERNAME])) = IDYES) then + begin + inherited; + //Para que en el caso de no poderse realizar la operación se refresquen + //los datos y no nos permita eliminar un registro a la segunda + FController.EliminarPerfil(FPerfiles); + actRefrescar.Execute; + end; +end; + +procedure TfEditorPerfilesUsuario.FormShow(Sender: TObject); +begin + inherited; + ActualizarEstadoEditor; + if Assigned(Parent) then + begin + StatusBar.Visible := False; + actCerrar.ShortCut := 0 + end + else begin + StatusBar.Visible := True; + actCerrar.ShortCut := ShortCut(VK_ESCAPE, []); + end; +end; + +function TfEditorPerfilesUsuario.GetController: IUsuariosController; +begin + Result := FController; +end; + +function TfEditorPerfilesUsuario.GetPerfilesUsuario: IBizPerfilUsuario; +begin + Result := FPerfiles; +end; + +procedure TfEditorPerfilesUsuario.ModificarInterno; +begin + inherited; + FController.VerPerfil(FPerfiles.ID); + actRefrescar.Execute; +end; + +procedure TfEditorPerfilesUsuario.NuevoInterno; +var + ANuevoPerfil : IBizPerfilUsuario; +begin + inherited; + ANuevoPerfil := FController.NuevoPerfil; + FController.VerPerfil(ANuevoPerfil); + actRefrescar.Execute; +end; + +procedure TfEditorPerfilesUsuario.PonerTitulos(const ATitulo: string); +var + FTitulo : String; +begin + FTitulo := 'Lista de perfiles de usuario'; + + if ReadOnly then + begin + JvNavPanelHeader.Caption := FTitulo + ' (NO MODIFICABLE)'; + Caption := FTitulo + ' (NO MODIFICABLE)'; + end + else + begin + JvNavPanelHeader.Caption := FTitulo; + Caption := FTitulo; + end; +end; + +procedure TfEditorPerfilesUsuario.SetController(const Value: IUsuariosController); +begin + FController := Value; +end; + +procedure TfEditorPerfilesUsuario.SetPerfilesUsuario( + const Value: IBizPerfilUsuario); +begin + FPerfiles := Value; + dsDataTable.DataTable := FPerfiles.DataTable; + if Assigned(ViewGrid) then + (ViewGrid as IViewPerfilesUsuario).PerfilesUsuario := FPerfiles; +end; + +end. diff --git a/Source/ApplicationBase/Usuarios/Views/uEditorUsuario.dfm b/Source/ApplicationBase/Usuarios/Views/uEditorUsuario.dfm new file mode 100644 index 0000000..8ee899b --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Views/uEditorUsuario.dfm @@ -0,0 +1,139 @@ +inherited fEditorUsuario: TfEditorUsuario + Caption = 'fEditorUsuario' + ExplicitHeight = 492 + PixelsPerInch = 96 + TextHeight = 13 + inherited TBXDock: TTBXDock + inherited tbxMain: TTBXToolbar + ExplicitWidth = 408 + object TBXItem33: TTBXItem [7] + Action = actCambiarPassword + end + end + inherited tbxMenu: TTBXToolbar + object TBXSubmenuItem2: TTBXSubmenuItem [4] + Caption = '&Herramientas' + object TBXItem7: TTBXItem + Action = actCambiarPassword + end + end + end + end + inherited StatusBar: TStatusBar + Panels = < + item + Width = 200 + end> + Visible = True + end + inline frViewUsuario1: TfrViewUsuario [3] + Left = 0 + Top = 76 + Width = 656 + Height = 370 + Align = alClient + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + ParentFont = False + TabOrder = 3 + ReadOnly = False + ExplicitTop = 76 + ExplicitWidth = 656 + ExplicitHeight = 370 + inherited dxLayoutControlArticulo: TdxLayoutControl + Width = 656 + ExplicitWidth = 656 + inherited PngSpeedButton3: TPngSpeedButton + Top = 84 + ExplicitTop = 84 + end + inherited eNombre: TcxDBTextEdit + Top = 30 + ExplicitTop = 30 + ExplicitWidth = 164 + Width = 164 + end + inherited eUsuario: TcxDBTextEdit + Top = 57 + ExplicitTop = 57 + ExplicitWidth = 108 + Width = 108 + end + inherited eMail: TcxDBHyperLinkEdit + Top = 84 + Properties.Prefix = 'mailto:' + ExplicitTop = 84 + end + inherited ePassword: TcxTextEdit + Top = 163 + ExplicitTop = 163 + ExplicitWidth = 121 + Width = 121 + end + inherited eConfirmarPassword: TcxTextEdit + Top = 190 + ExplicitTop = 190 + ExplicitWidth = 372 + Width = 372 + end + inherited cbPerfil: TcxComboBox + Top = 112 + ExplicitTop = 112 + end + inherited dxLayoutGroup1: TdxLayoutGroup + LookAndFeel = dxLayoutOfficeLookAndFeel1 + end + end + end + inherited EditorActionList: TActionList [4] + inherited actNuevo: TAction + Visible = False + end + inherited actModificar: TAction + Visible = False + end + inherited actConfPagina: TAction + Visible = False + end + inherited actPrevisualizar: TAction + Visible = False + end + inherited actImprimir: TAction + Visible = False + end + object actCambiarPassword: TAction + Category = 'Herramientas' + Caption = 'Cambiar la contrase'#241'a...' + OnExecute = actCambiarPasswordExecute + OnUpdate = actCambiarPasswordUpdate + end + end + inherited SmallImages: TPngImageList [5] + end + inherited LargeImages: TPngImageList [6] + end + inherited JvFormStorage: TJvFormStorage [7] + end + inherited JvAppRegistryStorage: TJvAppRegistryStorage [8] + end + inherited dsDataTable: TDADataSource + OnDataChange = dsDataTableDataChange + Top = 80 + end + object dxLayoutLookAndFeelList1: TdxLayoutLookAndFeelList + Left = 336 + Top = 160 + object dxLayoutOfficeLookAndFeel1: TdxLayoutOfficeLookAndFeel + GroupOptions.CaptionOptions.Font.Charset = DEFAULT_CHARSET + GroupOptions.CaptionOptions.Font.Color = clWindowText + GroupOptions.CaptionOptions.Font.Height = -11 + GroupOptions.CaptionOptions.Font.Name = 'Tahoma' + GroupOptions.CaptionOptions.Font.Style = [fsBold] + GroupOptions.CaptionOptions.TextColor = clHighlight + GroupOptions.CaptionOptions.UseDefaultFont = False + end + end +end diff --git a/Source/ApplicationBase/Usuarios/Views/uEditorUsuario.pas b/Source/ApplicationBase/Usuarios/Views/uEditorUsuario.pas new file mode 100644 index 0000000..87a8742 --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Views/uEditorUsuario.pas @@ -0,0 +1,308 @@ +unit uEditorUsuario; + +interface + +uses + Windows, Menus, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, uEditorDBItem, JvAppStorage, JvAppRegistryStorage, DB, uDAInterfaces, + uDADataTable, JvComponentBase, JvFormPlacement, ImgList, PngImageList, + StdActns, ActnList, ComCtrls, JvExComCtrls, JvStatusBar, TBX, TB2Item, + TB2Dock, TB2Toolbar, pngimage, ExtCtrls, JvExControls, JvNavigationPane, + uIEditorUsuario, uUsuariosController, uCustomView, uViewBase, uViewUsuario, + uBizUsuarios, dxLayoutLookAndFeels; + +type + TfEditorUsuario = class(TfEditorDBItem, IEditorUsuario) + dxLayoutLookAndFeelList1: TdxLayoutLookAndFeelList; + dxLayoutOfficeLookAndFeel1: TdxLayoutOfficeLookAndFeel; + actCambiarPassword: TAction; + TBXSubmenuItem2: TTBXSubmenuItem; + TBXItem7: TTBXItem; + TBXItem33: TTBXItem; + frViewUsuario1: TfrViewUsuario; + procedure actEliminarUpdate(Sender: TObject); + procedure actCambiarPasswordExecute(Sender: TObject); + procedure actCambiarPasswordUpdate(Sender: TObject); + procedure actGuardarCerrarExecute(Sender: TObject); + procedure actGuardarExecute(Sender: TObject); + procedure dsDataTableDataChange(Sender: TObject; Field: TField); + procedure actRefrescarExecute(Sender: TObject); + procedure FormShow(Sender: TObject); + private + FController : IUsuariosController; + FUsuario : IBizUsuario; + FViewUsuario : IViewUsuario; + protected + function GetController : IUsuariosController; + procedure SetController (const Value : IUsuariosController); + + function GetUsuario: IBizUsuario; + procedure SetUsuario(const Value: IBizUsuario); + + procedure GuardarInterno; + procedure EliminarInterno; + procedure RefrescarInterno; + + procedure ActualizarEstadoEditor; + procedure PonerTitulos(const ATitulo: string = ''); + function HayDatos: Boolean; + function GetViewUsuario: IViewUsuario; + procedure SetViewUsuario(const Value: IViewUsuario); + property ViewUsuario: IViewUsuario read GetViewUsuario write SetViewUsuario; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + property Controller : IUsuariosController read GetController write SetController; + property Usuario: IBizUsuario read GetUsuario write SetUsuario; + end; + + +implementation + +{$R *.dfm} + +uses + uDialogUtils, cxControls; + +{ TfEditorUsuario } + +var + FIDNuevoGuardado : Integer = -1; + +procedure TfEditorUsuario.actCambiarPasswordExecute(Sender: TObject); +begin + inherited; + FController.CambiarPassword(FUsuario.ID); +end; + +procedure TfEditorUsuario.actCambiarPasswordUpdate(Sender: TObject); +begin + inherited; + (Sender as TAction).Enabled := not FUsuario.EsNuevo; +end; + +procedure TfEditorUsuario.actEliminarUpdate(Sender: TObject); +begin + inherited; + if (Sender as TAction).Enabled then + (Sender as TAction).Enabled := (FUsuario.PRIVILEGED = 0); +end; + +procedure TfEditorUsuario.actGuardarCerrarExecute(Sender: TObject); +begin + ShowHourglassCursor; + try + if actGuardar.Execute then + actCerrar.Execute; + finally + HideHourglassCursor; + end; +end; + +procedure TfEditorUsuario.actGuardarExecute(Sender: TObject); +begin + if actModificar.Enabled then + begin + GuardarInterno; + ActualizarEstadoEditor; + end; +end; + +procedure TfEditorUsuario.actRefrescarExecute(Sender: TObject); +begin + if actRefrescar.Enabled then + begin + RefrescarInterno; + ActualizarEstadoEditor; + end; +end; + +procedure TfEditorUsuario.ActualizarEstadoEditor; +begin + PonerTitulos; + if HayDatos then + begin + if (Self.Modified) and (dsDataTable.DataTable.State <> dsInsert) then + StatusBar.Panels[0].Text := ' Se han producido cambios' + else + StatusBar.Panels[0].Text := ''; + end; +end; + +constructor TfEditorUsuario.Create(AOwner: TComponent); +begin + inherited; + //pgPaginas.ActivePageIndex := 0; + FViewUsuario := frViewUsuario1; +end; + +destructor TfEditorUsuario.Destroy; +begin + // Utilizar mejor OnClose; + inherited; +end; + +procedure TfEditorUsuario.dsDataTableDataChange(Sender: TObject; Field: TField); +begin + inherited; + ActualizarEstadoEditor; +end; + +procedure TfEditorUsuario.EliminarInterno; +begin + if (Application.MessageBox('¿Desea borrar este usuario?', 'Atención', MB_YESNO) = IDYES) then + begin + inherited; + if not FController.EliminarUsuario(FUsuario.ID) then + actRefrescar.Execute; + end; +end; + +procedure TfEditorUsuario.FormShow(Sender: TObject); +begin + inherited; + ActualizarEstadoEditor; + if Assigned(Parent) then + begin + StatusBar.Visible := False; + actCerrar.ShortCut := 0 + end + else begin + StatusBar.Visible := True; + actCerrar.ShortCut := ShortCut(VK_ESCAPE, []); + end; +end; + +function TfEditorUsuario.GetController: IUsuariosController; +begin + Result := FController; +end; + +function TfEditorUsuario.GetUsuario: IBizUsuario; +begin + Result := FUsuario; +end; + +function TfEditorUsuario.GetViewUsuario: IViewUsuario; +begin + Result := FViewUsuario; +end; + +procedure TfEditorUsuario.GuardarInterno; +var + AMensaje : String; + AContinuar : Boolean; +begin + inherited; + if FUsuario.EsNuevo then + begin + if (frViewUsuario1.ePassword.Text <> frViewUsuario1.eConfirmarPassword.Text) then + raise Exception.Create('La contraseña no se confirmó correctamente' + #10#13 + + 'Asegúrese de que la contraseña y su confirmación sean iguales.') + else + if not FController.ValidarPassword(frViewUsuario1.ePassword.Text, + frViewUsuario1.eUsuario.Text, frViewUsuario1.eNombre.Text, AMensaje) then + raise Exception.Create(AMensaje) + else begin + FUsuario.Edit; + FUsuario.PASS := frViewUsuario1.ePassword.Text; + FUsuario.Edit; + AContinuar := True; + end; + end + else + AContinuar := True; + + if AContinuar then + begin + if FController.GuardarUsuario(FUsuario) then + begin + FIDNuevoGuardado := FUsuario.ID; + FUsuario.DataTable.CancelUpdates; + Modified := False; + actRefrescar.Execute; + end; + end +end; + +function TfEditorUsuario.HayDatos: Boolean; +begin + Result := Assigned(dsDataTable.DataTable) and (dsDataTable.DataTable.State <> dsInactive) + and (not dsDataTable.DataTable.IsEmpty); +end; + +procedure TfEditorUsuario.PonerTitulos(const ATitulo: string); +var + FTitulo : String; +begin + if Assigned(Usuario) then + begin + if Usuario.EsNuevo then + FTitulo := 'Nuevo usuario' + else + FTitulo := 'Usuario'; + + if Length(Usuario.USERNAME) > 0 then + FTitulo := FTitulo + ' - ' + Usuario.USERNAME; + end; + + if ReadOnly then + begin + JvNavPanelHeader.Caption := FTitulo + ' (NO MODIFICABLE)'; + Caption := FTitulo + ' (NO MODIFICABLE)'; + end + else + begin + JvNavPanelHeader.Caption := FTitulo; + Caption := FTitulo; + end; +end; + +procedure TfEditorUsuario.RefrescarInterno; +begin + inherited; + + if (FIDNuevoGuardado > 0) and (FUsuario.ID <> FIDNuevoGuardado) then + begin + if (dsDataTable.DataTable.IsEmpty) or (not ModifiedQuery) then + Exit; // No continuar con el refresco + + dsDataTable.DataTable.DisableControls; //<- No descomentar + ShowHourglassCursor; + try + dsDataTable.DataTable.First; + if dsDataTable.DataTable.Locate('ID', FIDNuevoGuardado, []) then + FIDNuevoGuardado := -1; + finally + dsDataTable.DataTable.EnableControls; //<- No descomentar + HideHourglassCursor; + end; + end; +end; + +procedure TfEditorUsuario.SetController(const Value: IUsuariosController); +begin + FController := Value; + if Assigned(FViewUsuario) and Assigned(FController) then + FViewUsuario.Controller := FController; +end; + +procedure TfEditorUsuario.SetUsuario(const Value: IBizUsuario); +begin + FUsuario := Value; + dsDataTable.DataTable := FUsuario.DataTable; + + if Assigned(FViewUsuario) and Assigned(Usuario) then + FViewUsuario.Usuario := Usuario; + +end; + +procedure TfEditorUsuario.SetViewUsuario(const Value: IViewUsuario); +begin + FViewUsuario := Value; + + if Assigned(FViewUsuario) and Assigned(Usuario) then + FViewUsuario.Usuario := Usuario; +end; + +end. diff --git a/Source/ApplicationBase/Usuarios/Views/uEditorUsuarios.dfm b/Source/ApplicationBase/Usuarios/Views/uEditorUsuarios.dfm new file mode 100644 index 0000000..3ed7895 --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Views/uEditorUsuarios.dfm @@ -0,0 +1,71 @@ +inherited fEditorUsuarios: TfEditorUsuarios + Caption = 'fEditorUsuarios' + ClientHeight = 493 + ClientWidth = 840 + ExplicitWidth = 848 + ExplicitHeight = 520 + PixelsPerInch = 96 + TextHeight = 13 + inherited JvNavPanelHeader: TJvNavPanelHeader + Width = 840 + ExplicitWidth = 840 + inherited Image1: TImage + Left = 813 + ExplicitLeft = 813 + end + end + inherited TBXDock: TTBXDock + Width = 840 + ExplicitWidth = 840 + inherited tbxMain: TTBXToolbar + ExplicitWidth = 348 + object TBXItem39: TTBXItem [8] + Action = actCambiarPassword + end + end + inherited tbxMenu: TTBXToolbar + ExplicitWidth = 840 + object TBXSubmenuItem2: TTBXSubmenuItem [4] + Caption = '&Herramientas' + object TBXItem38: TTBXItem + Action = actCambiarPassword + end + end + end + inherited tbxFiltro: TTBXToolbar + Left = 348 + DockPos = 346 + Visible = False + ExplicitLeft = 348 + end + end + inherited StatusBar: TStatusBar + Top = 474 + Width = 840 + ExplicitTop = 474 + ExplicitWidth = 840 + end + inherited EditorActionList: TActionList + inherited actNuevo: TAction + OnExecute = actNuevoExecute + end + inherited actModificar: TAction + OnExecute = actModificarExecute + end + inherited actPrevisualizar: TAction + Visible = False + end + inherited actImprimir: TAction + Visible = False + end + inherited actDuplicar: TAction + Visible = False + end + object actCambiarPassword: TAction + Category = 'Herramientas' + Caption = 'Cambiar la contrase'#241'a...' + OnExecute = actCambiarPasswordExecute + OnUpdate = actCambiarPasswordUpdate + end + end +end diff --git a/Source/ApplicationBase/Usuarios/Views/uEditorUsuarios.pas b/Source/ApplicationBase/Usuarios/Views/uEditorUsuarios.pas new file mode 100644 index 0000000..edb5738 --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Views/uEditorUsuarios.pas @@ -0,0 +1,239 @@ +unit uEditorUsuarios; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, uEditorGridBase, Menus, JvAppStorage, JvAppRegistryStorage, DB, + uDAInterfaces, uDADataTable, JvComponentBase, JvFormPlacement, ImgList, + PngImageList, StdActns, ActnList, ComCtrls, JvExComCtrls, JvStatusBar, TBX, + TB2ExtItems, TBXExtItems, TB2Item, TB2Dock, TB2Toolbar, pngimage, ExtCtrls, + JvExControls, JvNavigationPane, uCustomView, uViewBase, uViewGridBase, + uViewGrid, uViewUsuarios, uIEditorUsuarios, uUsuariosController, + uBizUsuarios; + +type + TfEditorUsuarios = class(TfEditorGridBase, IEditorUsuarios) + actCambiarPassword: TAction; + TBXSubmenuItem2: TTBXSubmenuItem; + TBXItem38: TTBXItem; + TBXItem39: TTBXItem; + procedure actEliminarUpdate(Sender: TObject); + procedure actCambiarPasswordUpdate(Sender: TObject); + procedure actCambiarPasswordExecute(Sender: TObject); + procedure actNuevoExecute(Sender: TObject); + procedure actEliminarExecute(Sender: TObject); + procedure actModificarExecute(Sender: TObject); + procedure FormShow(Sender: TObject); + private + FUsuarios : IBizUsuario; + FController : IUsuariosController; + protected + function GetController : IUsuariosController; + procedure SetController (const Value : IUsuariosController); + + function GetUsuarios: IBizUsuario; + procedure SetUsuarios(const Value: IBizUsuario); + + procedure ActualizarEstadoEditor; + procedure NuevoInterno; + procedure EliminarInterno; + procedure ModificarInterno; + procedure ImprimirInterno; + procedure PrevisualizarInterno; + procedure DuplicarInterno; + + //Si queremos crear otra vista para el editor heredado solo tendriamos que + //sobreescribir este metodo + procedure AsignarVista; virtual; + public + procedure PonerTitulos(const ATitulo: string = ''); + property Usuarios: IBizUsuario read GetUsuarios write SetUsuarios; + property Controller : IUsuariosController read GetController write SetController; + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + end; + +implementation + +{$R *.dfm} + +uses + uDialogUtils; + +{ TfEditorUsuarios } + +procedure TfEditorUsuarios.actCambiarPasswordExecute(Sender: TObject); +begin + inherited; + FController.CambiarPassword(FUsuarios.ID); +end; + +procedure TfEditorUsuarios.actCambiarPasswordUpdate(Sender: TObject); +begin + inherited; +{ if (Sender as TAction).Enabled then + (Sender as TAction).Enabled := HayDatos;} +end; + +procedure TfEditorUsuarios.actEliminarExecute(Sender: TObject); +begin + if actEliminar.Enabled then + begin + EliminarInterno; + ActualizarEstadoEditor; + end; +end; + +procedure TfEditorUsuarios.actEliminarUpdate(Sender: TObject); +begin + inherited; + if (Sender as TAction).Enabled then + (Sender as TAction).Enabled := (FUsuarios.PRIVILEGED = 0); +end; + +procedure TfEditorUsuarios.actModificarExecute(Sender: TObject); +begin + if actModificar.Enabled then + begin + ModificarInterno; + ActualizarEstadoEditor; + end; +end; + +procedure TfEditorUsuarios.actNuevoExecute(Sender: TObject); +begin + if actNuevo.Enabled then + begin + NuevoInterno; + ActualizarEstadoEditor; + end; +end; + +procedure TfEditorUsuarios.ActualizarEstadoEditor; +begin + PonerTitulos; +end; + +procedure TfEditorUsuarios.AsignarVista; +begin + ViewGrid := CreateView(TfrViewUsuarios) as IViewUsuarios; +end; + +constructor TfEditorUsuarios.Create(AOwner: TComponent); +begin + inherited; + AsignarVista; +end; + +destructor TfEditorUsuarios.Destroy; +begin + FUsuarios := NIL; + FController := NIl; + + inherited; +end; + +procedure TfEditorUsuarios.DuplicarInterno; +begin + inherited; +end; + +procedure TfEditorUsuarios.EliminarInterno; +begin + if (ShowConfirmMessage('Eliminar un usuario', Format('¿Desea borrar el usuario %s?', [FUsuarios.USERNAME])) = IDYES) then + begin + inherited; + //Para que en el caso de no poderse realizar la operación se refresquen + //los datos y no nos permita eliminar un registro a la segunda + FController.EliminarUsuario(FUsuarios.ID); + actRefrescar.Execute; + end; +end; + +procedure TfEditorUsuarios.FormShow(Sender: TObject); +begin + inherited; + ActualizarEstadoEditor; + if Assigned(Parent) then + begin + StatusBar.Visible := False; + actCerrar.ShortCut := 0 + end + else begin + StatusBar.Visible := True; + actCerrar.ShortCut := ShortCut(VK_ESCAPE, []); + end; +end; + +function TfEditorUsuarios.GetController: IUsuariosController; +begin + Result := FController; +end; + +function TfEditorUsuarios.GetUsuarios: IBizUsuario; +begin + Result := FUsuarios; +end; + +procedure TfEditorUsuarios.ImprimirInterno; +begin + inherited; +end; + +procedure TfEditorUsuarios.ModificarInterno; +begin + inherited; + FController.VerUsuario(FUsuarios.ID); + actRefrescar.Execute; +end; + +procedure TfEditorUsuarios.NuevoInterno; +var + ANuevoUsuario : IBizUsuario; +begin + inherited; + ANuevoUsuario := FController.NuevoUsuario; + FController.VerUsuario(ANuevoUsuario); + actRefrescar.Execute; +end; + +procedure TfEditorUsuarios.PonerTitulos(const ATitulo: string); +var + FTitulo : String; +begin + FTitulo := 'Lista de usuarios'; + + if ReadOnly then + begin + JvNavPanelHeader.Caption := FTitulo + ' (NO MODIFICABLE)'; + Caption := FTitulo + ' (NO MODIFICABLE)'; + end + else + begin + JvNavPanelHeader.Caption := FTitulo; + Caption := FTitulo; + end; + +end; + +procedure TfEditorUsuarios.PrevisualizarInterno; +begin + inherited; + // +end; + +procedure TfEditorUsuarios.SetController(const Value: IUsuariosController); +begin + FController := Value; +end; + +procedure TfEditorUsuarios.SetUsuarios(const Value: IBizUsuario); +begin + FUsuarios := Value; + dsDataTable.DataTable := FUsuarios.DataTable; + if Assigned(ViewGrid) then + (ViewGrid as IViewUsuarios).Usuarios := FUsuarios; +end; + +end. diff --git a/Source/ApplicationBase/Usuarios/Views/uUsuario.dfm b/Source/ApplicationBase/Usuarios/Views/uUsuario.dfm new file mode 100644 index 0000000..93fcc6e --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Views/uUsuario.dfm @@ -0,0 +1,123 @@ +object fUsuario: TfUsuario + Left = 523 + Top = 415 + BorderStyle = bsDialog + Caption = 'Datos del usuario' + ClientHeight = 309 + ClientWidth = 308 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + Position = poScreenCenter + PixelsPerInch = 96 + TextHeight = 13 + object Button1: TButton + Left = 138 + Top = 273 + Width = 75 + Height = 25 + Action = actAceptar + TabOrder = 1 + end + object Button2: TButton + Left = 226 + Top = 273 + Width = 75 + Height = 25 + Action = actCancelar + TabOrder = 2 + end + object TabControl1: TPageControl + Left = 8 + Top = 8 + Width = 293 + Height = 257 + ActivePage = pagUsuario + TabOrder = 0 + object pagUsuario: TTabSheet + Caption = 'Usuario' + object GroupBox1: TGroupBox + Left = 6 + Top = 5 + Width = 274 + Height = 99 + Caption = 'GroupBox1' + TabOrder = 0 + DesignSize = ( + 274 + 99) + object Label4: TLabel + Left = 34 + Top = 28 + Width = 39 + Height = 13 + Caption = 'Usuario:' + Transparent = False + end + object Label5: TLabel + Left = 16 + Top = 60 + Width = 57 + Height = 13 + Caption = 'Contrase'#241'a:' + Transparent = False + end + object edtUser: TEdit + Left = 88 + Top = 24 + Width = 169 + Height = 21 + Anchors = [akLeft, akTop, akRight] + TabOrder = 0 + end + object edtPassword: TEdit + Left = 88 + Top = 56 + Width = 169 + Height = 21 + Anchors = [akLeft, akTop, akRight] + PasswordChar = '*' + TabOrder = 1 + end + end + object GroupBox2: TGroupBox + Left = 7 + Top = 111 + Width = 273 + Height = 110 + Caption = 'Permisos y seguridad' + TabOrder = 1 + object Label1: TLabel + Left = 47 + Top = 36 + Width = 26 + Height = 13 + Caption = 'Perfil:' + Transparent = False + end + object cbPerfil: TComboBox + Left = 88 + Top = 28 + Width = 169 + Height = 21 + ItemHeight = 13 + TabOrder = 0 + end + end + end + end + object ActionList: TActionList + Left = 8 + Top = 272 + object actAceptar: TAction + Caption = '&Aceptar' + end + object actCancelar: TAction + Caption = '&Cancelar' + end + end +end diff --git a/Source/ApplicationBase/Usuarios/Views/uUsuario.pas b/Source/ApplicationBase/Usuarios/Views/uUsuario.pas new file mode 100644 index 0000000..90e722c --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Views/uUsuario.pas @@ -0,0 +1,39 @@ +unit uUsuario; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, ComCtrls, ActnList; + +type + TfUsuario = class(TForm) + Button1: TButton; + Button2: TButton; + TabControl1: TPageControl; + pagUsuario: TTabSheet; + GroupBox1: TGroupBox; + Label4: TLabel; + Label5: TLabel; + edtUser: TEdit; + edtPassword: TEdit; + GroupBox2: TGroupBox; + Label1: TLabel; + cbPerfil: TComboBox; + ActionList: TActionList; + actAceptar: TAction; + actCancelar: TAction; + private + { Private declarations } + public + { Public declarations } + end; + +var + fUsuario: TfUsuario; + +implementation + +{$R *.dfm} + +end. diff --git a/Source/ApplicationBase/Usuarios/Views/uUsuarios.dfm b/Source/ApplicationBase/Usuarios/Views/uUsuarios.dfm new file mode 100644 index 0000000..0c3eb30 --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Views/uUsuarios.dfm @@ -0,0 +1,118 @@ +object fUsuarios: TfUsuarios + Left = 490 + Top = 417 + BorderStyle = bsDialog + Caption = 'Administraci'#243'n de usuarios' + ClientHeight = 401 + ClientWidth = 550 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + Position = poScreenCenter + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 13 + object Grid: TDBGrid + Left = 8 + Top = 40 + Width = 425 + Height = 313 + DataSource = DADataSource + TabOrder = 0 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -11 + TitleFont.Name = 'MS Sans Serif' + TitleFont.Style = [] + end + object JvNavPanelHeader1: TJvNavPanelHeader + Left = 0 + Top = 0 + Width = 550 + Align = alTop + Caption = 'Panel de control' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindow + Font.Height = -16 + Font.Name = 'Arial' + Font.Style = [fsBold] + ParentFont = False + ColorFrom = 8684164 + ColorTo = 8684164 + ImageIndex = 0 + StyleManager = dmBase.StyleManager + ParentStyleManager = False + end + object Button1: TButton + Left = 448 + Top = 40 + Width = 91 + Height = 25 + Action = actNuevo + TabOrder = 2 + end + object Button2: TButton + Left = 448 + Top = 136 + Width = 91 + Height = 25 + Action = actModificar + TabOrder = 3 + end + object Button3: TButton + Left = 448 + Top = 176 + Width = 91 + Height = 25 + Action = actEliminar + TabOrder = 4 + end + object Button4: TButton + Left = 448 + Top = 368 + Width = 91 + Height = 25 + Action = actCerrar + TabOrder = 5 + end + object Button5: TButton + Left = 448 + Top = 96 + Width = 91 + Height = 25 + Action = actCambiarPassword + TabOrder = 6 + end + object DADataSource: TDADataSource + Left = 368 + Top = 40 + end + object ActionList: TActionList + Left = 8 + Top = 360 + object actCerrar: TAction + Caption = '&Cerrar' + OnExecute = actCerrarExecute + end + object actNuevo: TAction + Caption = 'Nuevo usuario' + OnUpdate = actNuevoUpdate + end + object actCambiarPassword: TAction + Caption = 'Cambiar contrase'#241'a' + OnUpdate = actCambiarPasswordUpdate + end + object actModificar: TAction + Caption = 'Modificar usuario' + OnUpdate = actModificarUpdate + end + object actEliminar: TAction + Caption = 'Eliminar usuario' + OnUpdate = actEliminarUpdate + end + end +end diff --git a/Source/ApplicationBase/Usuarios/Views/uUsuarios.pas b/Source/ApplicationBase/Usuarios/Views/uUsuarios.pas new file mode 100644 index 0000000..9b355e6 --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Views/uUsuarios.pas @@ -0,0 +1,89 @@ +unit uUsuarios; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, DB, uDADataTable, dbcgrids, uDataModuleUsuarios, StdCtrls, + DBCtrls, JvExControls, JvComponent, JvNavigationPane, + Grids, DBGrids, ActnList, uDAInterfaces; + +type + TfUsuarios = class(TForm) + DADataSource: TDADataSource; + Grid: TDBGrid; + JvNavPanelHeader1: TJvNavPanelHeader; + Button1: TButton; + Button2: TButton; + Button3: TButton; + Button4: TButton; + Button5: TButton; + ActionList: TActionList; + actCerrar: TAction; + actNuevo: TAction; + actCambiarPassword: TAction; + actModificar: TAction; + actEliminar: TAction; + procedure actCerrarExecute(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure actEliminarUpdate(Sender: TObject); + procedure actModificarUpdate(Sender: TObject); + procedure actCambiarPasswordUpdate(Sender: TObject); + procedure actNuevoUpdate(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +procedure AdministrarUsuarios; + +implementation + +{$R *.dfm} + + +procedure AdministrarUsuarios; +var + fUsuarios: TfUsuarios; +begin + fUsuarios := TfUsuarios.Create(NIL); + try + fUsuarios.ShowModal; + finally + fUsuarios.Free; + end; +end; + +procedure TfUsuarios.actCerrarExecute(Sender: TObject); +begin + Close; +end; + +procedure TfUsuarios.FormCreate(Sender: TObject); +begin +{ DADataSource.DataTable := dmUsuarios.tbl_Usuarios; + DADataSource.DataTable.Active := True;} +end; + +procedure TfUsuarios.actEliminarUpdate(Sender: TObject); +begin + (Sender as TAction).Enabled := not (DADataSource.DataTable.IsEmpty); +end; + +procedure TfUsuarios.actModificarUpdate(Sender: TObject); +begin + (Sender as TAction).Enabled := not (DADataSource.DataTable.IsEmpty); +end; + +procedure TfUsuarios.actCambiarPasswordUpdate(Sender: TObject); +begin + (Sender as TAction).Enabled := not (DADataSource.DataTable.IsEmpty); +end; + +procedure TfUsuarios.actNuevoUpdate(Sender: TObject); +begin + (Sender as TAction).Enabled := Assigned(DADataSource.DataTable); +end; + +end. diff --git a/Source/ApplicationBase/Usuarios/Views/uUsuariosViewRegister.pas b/Source/ApplicationBase/Usuarios/Views/uUsuariosViewRegister.pas new file mode 100644 index 0000000..f5f67fe --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Views/uUsuariosViewRegister.pas @@ -0,0 +1,33 @@ +unit uUsuariosViewRegister; + +interface + +procedure RegisterViews; +procedure UnregisterViews; + +implementation + +uses + uEditorRegistryUtils, uEditorLogin, Dialogs, uEditorUsuario, uEditorUsuarios, + uEditorPerfilesUsuario, uEditorPerfilUsuario; + +procedure RegisterViews; +begin + EditorRegistry.RegisterClass(TfEditorLogin, 'EditorLogin'); + EditorRegistry.RegisterClass(TfEditorUsuarios, 'EditorUsuarios'); + EditorRegistry.RegisterClass(TfEditorUsuario, 'EditorUsuario'); + EditorRegistry.RegisterClass(TfEditorPerfilesUsuario, 'EditorPerfilesUsuario'); + EditorRegistry.RegisterClass(TfEditorPerfilUsuario, 'EditorPerfilUsuario'); + +end; + +procedure UnregisterViews; +begin + EditorRegistry.UnRegisterClass(TfEditorLogin); + EditorRegistry.UnRegisterClass(TfEditorUsuarios); + EditorRegistry.UnRegisterClass(TfEditorUsuario); + EditorRegistry.UnRegisterClass(TfEditorPerfilesUsuario); + EditorRegistry.UnRegisterClass(TfEditorPerfilUsuario); +end; + +end. diff --git a/Source/ApplicationBase/Usuarios/Views/uViewPerfilUsuario.dfm b/Source/ApplicationBase/Usuarios/Views/uViewPerfilUsuario.dfm new file mode 100644 index 0000000..d588715 --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Views/uViewPerfilUsuario.dfm @@ -0,0 +1,68 @@ +inherited frViewPerfilUsuario: TfrViewPerfilUsuario + Width = 509 + Height = 122 + ExplicitWidth = 509 + ExplicitHeight = 122 + object dxLayoutControlArticulo: TdxLayoutControl + Left = 0 + Top = 0 + Width = 509 + Height = 113 + Align = alTop + ParentBackground = True + TabOrder = 0 + AutoContentSizes = [acsWidth] + DesignSize = ( + 509 + 113) + object eNombre: TcxDBTextEdit + Left = 68 + Top = 28 + Anchors = [akLeft, akTop, akRight] + DataBinding.DataField = 'USERNAME' + DataBinding.DataSource = dsUsuario + Style.BorderColor = clWindowFrame + Style.BorderStyle = ebs3D + Style.Color = 14745599 + Style.HotTrack = False + Style.LookAndFeel.Kind = lfStandard + Style.LookAndFeel.NativeStyle = True + StyleDisabled.LookAndFeel.Kind = lfStandard + StyleDisabled.LookAndFeel.NativeStyle = True + StyleFocused.LookAndFeel.Kind = lfStandard + StyleFocused.LookAndFeel.NativeStyle = True + StyleHot.LookAndFeel.Kind = lfStandard + StyleHot.LookAndFeel.NativeStyle = True + TabOrder = 0 + Width = 164 + end + object dxLayoutGroup1: TdxLayoutGroup + ShowCaption = False + Hidden = True + ShowBorder = False + object dxLayoutGroup2: TdxLayoutGroup + AutoAligns = [] + AlignHorz = ahClient + AlignVert = avClient + Caption = 'Datos del perfil' + object dxLayoutControlArticuloItem3: TdxLayoutItem + AutoAligns = [aaVertical] + AlignHorz = ahClient + Caption = 'Nombre:' + Control = eNombre + ControlOptions.ShowBorder = False + end + end + object dxLayoutControlArticuloGroup3: TdxLayoutGroup + Caption = 'New Group' + ShowCaption = False + LayoutDirection = ldHorizontal + ShowBorder = False + end + end + end + object dsUsuario: TDADataSource + Left = 152 + Top = 24 + end +end diff --git a/Source/ApplicationBase/Usuarios/Views/uViewPerfilUsuario.pas b/Source/ApplicationBase/Usuarios/Views/uViewPerfilUsuario.pas new file mode 100644 index 0000000..f3deec1 --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Views/uViewPerfilUsuario.pas @@ -0,0 +1,82 @@ +unit uViewPerfilUsuario; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, uViewBase, uUsuariosController, cxGraphics, ImgList, PngImageList, + dxLayoutControl, cxCurrencyEdit, uCustomView, cxControls, DB, uDAInterfaces, + uDADataTable, ActnList, cxCheckBox, cxDBEdit, cxMaskEdit, cxSpinEdit, + cxHyperLinkEdit, cxContainer, cxEdit, cxTextEdit, Buttons, PngSpeedButton, + uBizUsuarios, cxDropDownEdit; + +type + IViewPerfilUsuario = interface(IViewBase) + ['{555B4B64-BE32-4036-B741-DCC7AD80D7B9}'] + function GetController : IUsuariosController; + procedure SetController (const Value : IUsuariosController); + property Controller : IUsuariosController read GetController write SetController; + + function GetPerfilUsuario: IBizPerfilUsuario; + procedure SetPerfilUsuario(const Value: IBizPerfilUsuario); + property PerfilUsuario: IBizPerfilUsuario read GetPerfilUsuario write SetPerfilUsuario; + end; + + TfrViewPerfilUsuario = class(TfrViewBase, IViewPerfilUsuario) + dsUsuario: TDADataSource; + dxLayoutControlArticulo: TdxLayoutControl; + eNombre: TcxDBTextEdit; + dxLayoutGroup1: TdxLayoutGroup; + dxLayoutGroup2: TdxLayoutGroup; + dxLayoutControlArticuloItem3: TdxLayoutItem; + dxLayoutControlArticuloGroup3: TdxLayoutGroup; + protected + FController: IUsuariosController; + FPerfilUsuario : IBizPerfilUsuario; + + function GetController : IUsuariosController; + procedure SetController (const Value : IUsuariosController); + + function GetPerfilUsuario: IBizPerfilUsuario; + procedure SetPerfilUsuario(const Value: IBizPerfilUsuario); + public + property PerfilUsuario: IBizPerfilUsuario read GetPerfilUsuario write SetPerfilUsuario; + property Controller : IUsuariosController read GetController write SetController; + end; + +implementation + +{$R *.dfm} + + +{ TfrViewUsuario } + +function TfrViewPerfilUsuario.GetController: IUsuariosController; +begin + Result := FController; +end; + +function TfrViewPerfilUsuario.GetPerfilUsuario: IBizPerfilUsuario; +begin + Result := FPerfilUsuario; +end; + +procedure TfrViewPerfilUsuario.SetController(const Value: IUsuariosController); +begin + FController := Value; +end; + +procedure TfrViewPerfilUsuario.SetPerfilUsuario(const Value: IBizPerfilUsuario); +begin + FPerfilUsuario := Value; + + if Assigned(FPerfilUsuario) then + dsUsuario.DataTable := FPerfilUsuario.DataTable + else begin + dsUsuario.DataTable := NIL; + FPerfilUsuario := NIL; + end; +end; + + +end. diff --git a/Source/ApplicationBase/Usuarios/Views/uViewPerfilesUsuario.dfm b/Source/ApplicationBase/Usuarios/Views/uViewPerfilesUsuario.dfm new file mode 100644 index 0000000..f591da7 --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Views/uViewPerfilesUsuario.dfm @@ -0,0 +1,38 @@ +inherited frViewPerfilesUsuario: TfrViewPerfilesUsuario + Width = 426 + Height = 247 + ExplicitWidth = 426 + ExplicitHeight = 247 + inherited cxGrid: TcxGrid + Width = 426 + Height = 247 + inherited cxGridView: TcxGridDBTableView + object cxGridViewID: TcxGridDBColumn + DataBinding.FieldName = 'ID' + Visible = False + BestFitMaxWidth = 20 + Width = 20 + end + object cxGridViewUSERNAME: TcxGridDBColumn + DataBinding.FieldName = 'USERNAME' + Width = 150 + end + object cxGridViewTIPO: TcxGridDBColumn + DataBinding.FieldName = 'TIPO' + Visible = False + end + end + end + inherited dxComponentPrinter: TdxComponentPrinter + Left = 40 + Top = 16 + end + inherited dxPSEngineController1: TdxPSEngineController + Left = 304 + Top = 168 + end + inherited cxStyleRepository1: TcxStyleRepository + Left = 280 + Top = 160 + end +end diff --git a/Source/ApplicationBase/Usuarios/Views/uViewPerfilesUsuario.pas b/Source/ApplicationBase/Usuarios/Views/uViewPerfilesUsuario.pas new file mode 100644 index 0000000..09368e0 --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Views/uViewPerfilesUsuario.pas @@ -0,0 +1,56 @@ +unit uViewPerfilesUsuario; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, uViewGrid, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, + cxDataStorage, cxEdit, DB, cxDBData, dxPSGlbl, dxPSUtl, dxPSEngn, dxPrnPg, + dxBkgnd, dxWrap, dxPrnDev, dxPSCompsProvider, dxPSFillPatterns, + dxPSEdgePatterns, dxPgsDlg, dxPSCore, ImgList, PngImageList, ActnList, + cxGridCustomPopupMenu, cxGridPopupMenu, + uDAInterfaces, uDADataTable, TB2Item, TBX, TB2Toolbar, TBXDkPanels, TB2Dock, + cxGridLevel, cxClasses, cxControls, cxGridCustomView, + cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGrid, + uBizUsuarios; + +type + IViewPerfilesUsuario = interface(IViewGrid) + ['{C6125F2F-5EDC-4019-BD5F-9AC9741F0F77}'] + function GetPerfilesUsuario: IBizPerfilUsuario; + procedure SetPerfilesUsuario(const Value: IBizPerfilUsuario); + property PerfilesUsuario: IBizPerfilUsuario read GetPerfilesUsuario write SetPerfilesUsuario; + end; + + TfrViewPerfilesUsuario = class(TfrViewGrid, IViewPerfilesUsuario) + cxGridViewID: TcxGridDBColumn; + cxGridViewUSERNAME: TcxGridDBColumn; + cxGridViewTIPO: TcxGridDBColumn; + protected + FPerfiles : IBizPerfilUsuario; + function GetPerfilesUsuario: IBizPerfilUsuario; + procedure SetPerfilesUsuario(const Value: IBizPerfilUsuario); + public + property PerfilesUsuario: IBizPerfilUsuario read GetPerfilesUsuario write SetPerfilesUsuario; + end; + + +implementation + +{$R *.dfm} + +{ TfrViewPerfilesUsuario } + +function TfrViewPerfilesUsuario.GetPerfilesUsuario: IBizPerfilUsuario; +begin + Result := FPerfiles; +end; + +procedure TfrViewPerfilesUsuario.SetPerfilesUsuario(const Value: IBizPerfilUsuario); +begin + FPerfiles := Value; + if Assigned(FPerfiles) then + dsDataSource.DataTable := FPerfiles.DataTable; +end; + +end. diff --git a/Source/ApplicationBase/Usuarios/Views/uViewUsuario.dfm b/Source/ApplicationBase/Usuarios/Views/uViewUsuario.dfm new file mode 100644 index 0000000..a50c3aa --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Views/uViewUsuario.dfm @@ -0,0 +1,300 @@ +inherited frViewUsuario: TfrViewUsuario + Width = 509 + Height = 275 + OnCreate = CustomViewCreate + OnDestroy = CustomViewDestroy + ExplicitWidth = 509 + ExplicitHeight = 275 + object dxLayoutControlArticulo: TdxLayoutControl + Left = 0 + Top = 0 + Width = 509 + Height = 249 + Align = alTop + ParentBackground = True + TabOrder = 0 + AutoContentSizes = [acsWidth] + DesignSize = ( + 509 + 249) + object PngSpeedButton3: TPngSpeedButton + Left = 335 + Top = 82 + Width = 23 + Height = 22 + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000001964944415478DA + 63FCFFFF3F03232323033A58BCE9F87F647EAC9F258622B05E6C068034873B8A + 80D92019C62F8F194C1356339CDF399D91A0014B361FFB1FE6208AA299E1F323 + 306D52F90CC5100C03566E3DFC3FD04E02A2F9F727064690462066006A66FC02 + 64FFFAC8603451096E088A01CB361FFDFF8F819981183077D11A86FDAB7B18E1 + 062CDD7CE27F14573FC3B2EF450CD13E86181ABE7DFFCDF0F5DB6F866FDFFE30 + 1CB97897218AB38FC1B85B98E1DC8E698C600396000D8861696058FAB7116CC0 + 94C5FBB0DAEC6CAECF70EED6238668E67AB057500CF8F0E10383A0A0208A0B90 + 6D06B1BF01D9379E3C67387AFE09C389A37BD15CE06B01B47907434EAC13C3EF + 3F7F19662E3F8862BB898606C3EFDFFF1896EF3DCFA0A5C0CD306FE9265403FC + 9D20362F5CB71F4CE7C47AA01890D5BC164C7716F980D56018606BAC0656B079 + EF2986F82047AC6150DEB785A13CD911AC06C300234D05867DC72F30B8D818E1 + 8DC2494B0E63F702281075D455884A07576EDEC134404A5480E1DAED07441900 + 021806F44D5D44B46618801B400900007F4518F05E90AAF20000000049454E44 + AE426082} + PngOptions = [pngBlendOnDisabled, pngGrayscaleOnDisabled] + end + object eNombre: TcxDBTextEdit + Left = 135 + Top = 28 + Anchors = [akLeft, akTop, akRight] + DataBinding.DataField = 'USERNAME' + DataBinding.DataSource = dsUsuario + Style.BorderColor = clWindowFrame + Style.BorderStyle = ebs3D + Style.Color = 14745599 + Style.HotTrack = False + Style.LookAndFeel.Kind = lfStandard + Style.LookAndFeel.NativeStyle = True + StyleDisabled.LookAndFeel.Kind = lfStandard + StyleDisabled.LookAndFeel.NativeStyle = True + StyleFocused.LookAndFeel.Kind = lfStandard + StyleFocused.LookAndFeel.NativeStyle = True + StyleHot.LookAndFeel.Kind = lfStandard + StyleHot.LookAndFeel.NativeStyle = True + TabOrder = 0 + Width = 164 + end + object eUsuario: TcxDBTextEdit + Left = 135 + Top = 55 + DataBinding.DataField = 'LOGIN' + DataBinding.DataSource = dsUsuario + Style.BorderColor = clWindowFrame + Style.BorderStyle = ebs3D + Style.Color = 14745599 + Style.HotTrack = False + Style.LookAndFeel.Kind = lfStandard + Style.LookAndFeel.NativeStyle = True + StyleDisabled.LookAndFeel.Kind = lfStandard + StyleDisabled.LookAndFeel.NativeStyle = True + StyleFocused.LookAndFeel.Kind = lfStandard + StyleFocused.LookAndFeel.NativeStyle = True + StyleHot.LookAndFeel.Kind = lfStandard + StyleHot.LookAndFeel.NativeStyle = True + TabOrder = 1 + Width = 108 + end + object eMail: TcxDBHyperLinkEdit + Left = 135 + Top = 82 + DataBinding.DataField = 'EMAIL' + DataBinding.DataSource = dsUsuario + Properties.ValidateOnEnter = True + Properties.OnEditValueChanged = eMailPropertiesEditValueChanged + Properties.OnValidate = eMailPropertiesValidate + Properties.Prefix = 'mailto:' + Style.BorderColor = clWindowFrame + Style.BorderStyle = ebs3D + Style.HotTrack = False + Style.LookAndFeel.Kind = lfStandard + Style.LookAndFeel.NativeStyle = True + StyleDisabled.LookAndFeel.Kind = lfStandard + StyleDisabled.LookAndFeel.NativeStyle = True + StyleFocused.LookAndFeel.Kind = lfStandard + StyleFocused.LookAndFeel.NativeStyle = True + StyleHot.LookAndFeel.Kind = lfStandard + StyleHot.LookAndFeel.NativeStyle = True + TabOrder = 2 + Width = 194 + end + object ePassword: TcxTextEdit + Left = 135 + Top = 167 + Properties.EchoMode = eemPassword + Properties.PasswordChar = '*' + Style.LookAndFeel.Kind = lfStandard + Style.LookAndFeel.NativeStyle = True + StyleDisabled.LookAndFeel.Kind = lfStandard + StyleDisabled.LookAndFeel.NativeStyle = True + StyleFocused.LookAndFeel.Kind = lfStandard + StyleFocused.LookAndFeel.NativeStyle = True + StyleHot.LookAndFeel.Kind = lfStandard + StyleHot.LookAndFeel.NativeStyle = True + TabOrder = 4 + Width = 121 + end + object eConfirmarPassword: TcxTextEdit + Left = 135 + Top = 194 + Properties.EchoMode = eemPassword + Properties.PasswordChar = '*' + Style.LookAndFeel.Kind = lfStandard + Style.LookAndFeel.NativeStyle = True + StyleDisabled.LookAndFeel.Kind = lfStandard + StyleDisabled.LookAndFeel.NativeStyle = True + StyleFocused.LookAndFeel.Kind = lfStandard + StyleFocused.LookAndFeel.NativeStyle = True + StyleHot.LookAndFeel.Kind = lfStandard + StyleHot.LookAndFeel.NativeStyle = True + TabOrder = 5 + Width = 372 + end + object cbPerfil: TcxComboBox + Left = 135 + Top = 110 + Properties.DropDownListStyle = lsEditFixedList + Properties.ImmediatePost = True + Properties.ImmediateUpdateText = True + Properties.PostPopupValueOnTab = True + Properties.OnValidate = cbPerfilPropertiesValidate + Style.LookAndFeel.Kind = lfStandard + Style.LookAndFeel.NativeStyle = True + StyleDisabled.LookAndFeel.Kind = lfStandard + StyleDisabled.LookAndFeel.NativeStyle = True + StyleFocused.LookAndFeel.Kind = lfStandard + StyleFocused.LookAndFeel.NativeStyle = True + StyleHot.LookAndFeel.Kind = lfStandard + StyleHot.LookAndFeel.NativeStyle = True + TabOrder = 3 + Width = 194 + end + object dxLayoutGroup1: TdxLayoutGroup + ShowCaption = False + Hidden = True + ShowBorder = False + object dxLayoutGroup2: TdxLayoutGroup + AutoAligns = [] + AlignHorz = ahClient + AlignVert = avClient + Caption = 'Datos del usuario' + object dxLayoutControlArticuloItem3: TdxLayoutItem + AutoAligns = [aaVertical] + AlignHorz = ahClient + Caption = 'Nombre completo:' + Control = eNombre + ControlOptions.ShowBorder = False + end + object dxLayoutControlArticuloItem8: TdxLayoutItem + AutoAligns = [aaVertical] + AlignHorz = ahClient + Caption = 'Usuario:' + Control = eUsuario + ControlOptions.ShowBorder = False + end + object dxLayoutControlArticuloGroup2: TdxLayoutGroup + ShowCaption = False + Hidden = True + LayoutDirection = ldHorizontal + ShowBorder = False + object dxLayoutControlArticuloItem4: TdxLayoutItem + AutoAligns = [aaVertical] + Caption = 'Correo electr'#243'nico' + Control = eMail + ControlOptions.ShowBorder = False + end + object dxLayoutControlArticuloItem5: TdxLayoutItem + ShowCaption = False + Control = PngSpeedButton3 + ControlOptions.ShowBorder = False + end + end + object dxLayoutControlArticuloItem1: TdxLayoutItem + AutoAligns = [aaVertical] + Caption = 'Perfil de usuario:' + Control = cbPerfil + ControlOptions.ShowBorder = False + end + end + object dxLayoutControlArticuloGroup5: TdxLayoutGroup + Caption = 'Seguridad' + object dxLayoutControlArticuloItem11: TdxLayoutItem + Caption = 'Contrase'#241'a:' + Control = ePassword + ControlOptions.ShowBorder = False + end + object dxLayoutControlArticuloItem12: TdxLayoutItem + Caption = 'Confirmar contrase'#241'a:' + Control = eConfirmarPassword + ControlOptions.ShowBorder = False + end + end + object dxLayoutControlArticuloGroup3: TdxLayoutGroup + Caption = 'New Group' + ShowCaption = False + LayoutDirection = ldHorizontal + ShowBorder = False + end + end + end + object ActionList1: TActionList + Images = SmallImages + Left = 72 + Top = 48 + object actMandarCorreo: TAction + Caption = 'Mandar un correo' + ImageIndex = 0 + OnExecute = actMandarCorreoExecute + OnUpdate = actMandarCorreoUpdate + end + end + object dsUsuario: TDADataSource + Left = 104 + Top = 48 + end + object SmallImages: TPngImageList + PngImages = < + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000001EB4944415478DA + A5D34B68135114C6F1FF746692462D24D5A8F5B52B81B448501475E142D4EAA2 + 3420E8C68A0A45345BC19DE24A74D50AE2424A11041105DD28A8881411174A70 + E58BA4149A1A0D8D1D9B669E997B9D14B1A44491E6C2D9DDF3BB1F877B94DB8F + 5E4B5A384A1D3831B06759CDDB0E9D5B04865FD9CD6F49C95A374B4ADC20AAE4 + 9936B6F244CF70299DFA3F40F5AB1C74CEB225FE1C654E4796DA7963A6D977F2 + FABF81E061EAC3D1EC0247C531A27A017E846026CC844890CC3CFE3B506F1641 + D9025CCFA4DF384FD27F419BA1231C9D67917ED267AE3507A414E4BF8DD3B1AA + 07A97562F92A31EB037B8D313658137CD292DC5D719A7B83C9E640AEF892F1DC + 454A5FABEC4E5D21BEBE0FD397411217E15599911D547C8DEC60A411B8FC34C7 + C3F7C71710BD73927CB686E785D87FE01D22483267FDC45156620A0DAB069F4F + B53702A9ABBB08AF2E20DB7C1CB386517698FE52A56BE31136272EF0F16D1F44 + 7610EF7D802554A68696003B6F6D42517DAC6A0D3B006CCB67B6686356248944 + 0F8635C9F7A90A91F800E1EE51CA99D81260B40B27C8F607307DECF91AF38687 + A6AB74A7A2940A26E5A28B164FE38CDC67FBE1CC22D03BB226007E2708202700 + 5CAB5E62E14344D785084734664B0EBE8CE18D951A81967661F8E69DE56FA394 + 2D6D33BF00C89C2C72EBA3BC190000000049454E44AE426082} + Name = 'PngImage0' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 61000000097048597300000AEB00000AEB01828B0D5A000002854944415478DA + A5935D48536118C7FFAFDB8CCD557E7F34B33167F9119617A91596495D781304 + 451021A651362821B1ABA49B6EA4460961D88542055D84DD6545415992174994 + 9625CC8F9C329D9B5F3BE9CED9D9797BCEA1C932A3A0079EC3CBE13CBFE7FF7F + 9FF330CE39FE2798FAB80BA4E61559EB2551E67B07279AE8D51FA98F2CC99546 + 031A3D6E5FF329993F631D80B52227A6D7929F9BAEA459D1D73BE8DC3330D6B8 + 1AD206641414DA5A6224E1E8ECA47779660955D532EF642F1371BD74331A14FA + 9C27A4439F5D88777DAE1B65FD230D11485786B9363D65FD35C1EB4B9817427E + 9F80C335C05BD53E23B2A934132FB23662B71406C2B14698F38AF0E9EB9473E8 + E3C8655BD686D6F858A5DA3F27B04511E37E0195B5C0A00AD6003FE5259758F0 + 3AD1843C15125218CCB6AD707FF34EAC93973217041154ECF608D8770E188BD8 + 5A01A8A1DEC5F60CF4980CB0A890E8A47AFFF477EC3F037C8EBE975F006ADC37 + 60A7351E3D061DE222C522A5270047AD82DBAB27B21AC09EDA373525E9A52BCB + 7E5F4CB4822509BE80848AB3C0C09A806380EE7CA1BDC55EB4CDE17AF2984932 + 75A60CCA088739742A84CE1E49C1010730F41BA03B27CD595C517CB1FFF92B04 + E6035AF142101DCB12DA743AB413243FA468331D0F01E51780D1154057AAF148 + D92E7BE794778E8DB92634C901116FA6451CAA27214EC06802AE5227AA839ED2 + 45A0729AC6A406182DD9329C10A7B7F57D18D63A93DF99D92076905F4FB4DF56 + A08C20ED9476027CD1209C7BD9FBDC947BC1C0E2C9596A4B003E27E2F8E9301E + AEB507B700334968A6631D019C759C5F627780822413BA194312CDFB41958C13 + 7FDB4052739000430ECEDD913F313B568F9B8B326AC8F7CCBFAEB27A073F0058 + 5538F0EAB25B380000000049454E44AE426082} + Name = 'PngImage1' + Background = clWindow + end> + PngOptions = [pngBlendOnDisabled, pngGrayscaleOnDisabled] + Left = 43 + Top = 48 + Bitmap = {} + end +end diff --git a/Source/ApplicationBase/Usuarios/Views/uViewUsuario.pas b/Source/ApplicationBase/Usuarios/Views/uViewUsuario.pas new file mode 100644 index 0000000..66f47e5 --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Views/uViewUsuario.pas @@ -0,0 +1,210 @@ +unit uViewUsuario; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, uViewBase, uUsuariosController, cxGraphics, ImgList, PngImageList, + dxLayoutControl, cxCurrencyEdit, uCustomView, cxControls, DB, uDAInterfaces, + uDADataTable, ActnList, cxCheckBox, cxDBEdit, cxMaskEdit, cxSpinEdit, + cxHyperLinkEdit, cxContainer, cxEdit, cxTextEdit, Buttons, PngSpeedButton, + uBizUsuarios, cxDropDownEdit, ExtCtrls; + +type + IViewUsuario = interface(IViewBase) + ['{E47D5136-A50C-4757-9352-4745518A899D}'] + function GetController : IUsuariosController; + procedure SetController (const Value : IUsuariosController); + property Controller : IUsuariosController read GetController write SetController; + + function GetUsuario: IBizUsuario; + procedure SetUsuario(const Value: IBizUsuario); + property Usuario: IBizUsuario read GetUsuario write SetUsuario; + end; + + TfrViewUsuario = class(TfrViewBase, IViewUsuario) + ActionList1: TActionList; + dsUsuario: TDADataSource; + dxLayoutControlArticulo: TdxLayoutControl; + eNombre: TcxDBTextEdit; + eUsuario: TcxDBTextEdit; + dxLayoutGroup1: TdxLayoutGroup; + dxLayoutGroup2: TdxLayoutGroup; + dxLayoutControlArticuloItem3: TdxLayoutItem; + dxLayoutControlArticuloItem8: TdxLayoutItem; + dxLayoutControlArticuloGroup3: TdxLayoutGroup; + SmallImages: TPngImageList; + dxLayoutControlArticuloItem4: TdxLayoutItem; + eMail: TcxDBHyperLinkEdit; + dxLayoutControlArticuloItem5: TdxLayoutItem; + PngSpeedButton3: TPngSpeedButton; + actMandarCorreo: TAction; + dxLayoutControlArticuloGroup2: TdxLayoutGroup; + ePassword: TcxTextEdit; + dxLayoutControlArticuloItem11: TdxLayoutItem; + dxLayoutControlArticuloItem12: TdxLayoutItem; + eConfirmarPassword: TcxTextEdit; + dxLayoutControlArticuloGroup5: TdxLayoutGroup; + cbPerfil: TcxComboBox; + dxLayoutControlArticuloItem1: TdxLayoutItem; + procedure actMandarCorreoExecute(Sender: TObject); + procedure actMandarCorreoUpdate(Sender: TObject); + procedure cbPerfilPropertiesValidate(Sender: TObject; + var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); + procedure CustomViewCreate(Sender: TObject); + procedure CustomViewDestroy(Sender: TObject); + procedure eMailPropertiesEditValueChanged(Sender: TObject); + procedure eMailPropertiesValidate(Sender: TObject; + var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); + protected + FController: IUsuariosController; + FUsuario : IBizUsuario; + FListaPerfiles : TStringList; + + function GetController : IUsuariosController; + procedure SetController (const Value : IUsuariosController); + + function GetUsuario: IBizUsuario; + procedure SetUsuario(const Value: IBizUsuario); + public + property Usuario: IBizUsuario read GetUsuario write SetUsuario; + property Controller : IUsuariosController read GetController write SetController; + end; + +implementation + +{$R *.dfm} + +type + THackcxDBHyperLinkEdit = class(TcxDBHyperLinkEdit); + +{ TfrViewUsuario } + +procedure TfrViewUsuario.actMandarCorreoExecute(Sender: TObject); +begin + inherited; + THackcxDBHyperLinkEdit(eMail).DoStart; +end; + +procedure TfrViewUsuario.actMandarCorreoUpdate(Sender: TObject); +begin + inherited; + (Sender as TAction).Enabled := (Length(eMail.Text) > 0) +end; + +procedure TfrViewUsuario.cbPerfilPropertiesValidate(Sender: TObject; + var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); +var + AIndex : integer; +begin + inherited; + + if Assigned(FUsuario) and FUsuario.Active then + begin + if DisplayValue = cbPerfil.Properties.Items[0] then + AIndex := 0 + else + AIndex := StrToInt(FListaPerfiles.Values[DisplayValue]); + + FUsuario.Edit; + FUsuario.ID_PERFIL := AIndex; + FUsuario.Post; + end; +end; + + +procedure TfrViewUsuario.CustomViewCreate(Sender: TObject); +begin + inherited; + FListaPerfiles := NIL; +end; + +procedure TfrViewUsuario.CustomViewDestroy(Sender: TObject); +begin + inherited; + FreeAndNIL(FListaPerfiles); +end; + +procedure TfrViewUsuario.eMailPropertiesEditValueChanged(Sender: TObject); +begin + if not VarIsNull((Sender as TcxDBHyperLinkEdit).EditValue) then + (Sender as TcxDBHyperLinkEdit).EditValue := StringReplace((Sender as TcxDBHyperLinkEdit).EditValue, (Sender as TcxDBHyperLinkEdit).Properties.Prefix, '', []); +end; + +procedure TfrViewUsuario.eMailPropertiesValidate(Sender: TObject; + var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); +begin + if not VarIsNull(DisplayValue) then + DisplayValue := StringReplace(DisplayValue, (Sender as TcxDBHyperLinkEdit).Properties.Prefix, '', []); +end; + +function TfrViewUsuario.GetController: IUsuariosController; +begin + Result := FController; +end; + +function TfrViewUsuario.GetUsuario: IBizUsuario; +begin + Result := FUsuario; +end; + +procedure TfrViewUsuario.SetController(const Value: IUsuariosController); +var + i : integer; +begin + FController := Value; + + if Assigned(FController) then + begin + FListaPerfiles := FController.DarListaPerfilesUsuario; + + with cbPerfil.Properties.Items do + begin + BeginUpdate; + try + Clear; + Add(''); + for i := 0 to FListaPerfiles.Count - 1 do + Add(FListaPerfiles.Names[i]); + finally + EndUpdate; + end; + end; + end; +end; + +procedure TfrViewUsuario.SetUsuario(const Value: IBizUsuario); +var + i : integer; +begin + FUsuario := Value; + + if Assigned(FUsuario) then + begin + dsUsuario.DataTable := FUsuario.DataTable; + if FUsuario.EsNuevo then + begin + dxLayoutControlArticuloGroup5.Visible := True; + cbPerfil.Text := cbPerfil.Properties.Items[0]; + end + else begin + dxLayoutControlArticuloGroup5.Visible := False; + + cbPerfil.Text := cbPerfil.Properties.Items[0]; + for i := 0 to FListaPerfiles.Count-1 do + begin + if FListaPerfiles.ValueFromIndex[i] = IntToStr(FUsuario.ID_PERFIL) then + begin + cbPerfil.Text := FListaPerfiles.Names[i]; + break; + end; + end; + end; + end + else begin + dsUsuario.DataTable := NIL; + FUsuario := NIL; + end; +end; + +end. diff --git a/Source/ApplicationBase/Usuarios/Views/uViewUsuarios.dfm b/Source/ApplicationBase/Usuarios/Views/uViewUsuarios.dfm new file mode 100644 index 0000000..b5ceec1 --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Views/uViewUsuarios.dfm @@ -0,0 +1,70 @@ +inherited frViewUsuarios: TfrViewUsuarios + inherited cxGrid: TcxGrid + inherited cxGridView: TcxGridDBTableView + object cxGridViewID: TcxGridDBColumn + DataBinding.FieldName = 'ID' + Visible = False + BestFitMaxWidth = 20 + Width = 20 + end + object cxGridViewUSERNAME: TcxGridDBColumn + DataBinding.FieldName = 'USERNAME' + Width = 150 + end + object cxGridViewLOGIN: TcxGridDBColumn + DataBinding.FieldName = 'LOGIN' + BestFitMaxWidth = 75 + Width = 75 + end + object cxGridViewPASS: TcxGridDBColumn + DataBinding.FieldName = 'PASS' + Visible = False + end + object cxGridViewPASSEXPIRED: TcxGridDBColumn + DataBinding.FieldName = 'PASSEXPIRED' + Visible = False + end + object cxGridViewBLOQUEADO: TcxGridDBColumn + DataBinding.FieldName = 'BLOQUEADO' + Visible = False + end + object cxGridViewEMAIL: TcxGridDBColumn + DataBinding.FieldName = 'EMAIL' + BestFitMaxWidth = 120 + Width = 120 + end + object cxGridViewUSERDAYSSUN: TcxGridDBColumn + DataBinding.FieldName = 'USERDAYSSUN' + Visible = False + end + object cxGridViewPRIVILEGED: TcxGridDBColumn + DataBinding.FieldName = 'PRIVILEGED' + Visible = False + end + object cxGridViewTIPO: TcxGridDBColumn + DataBinding.FieldName = 'TIPO' + Visible = False + end + object cxGridViewID_PERFIL: TcxGridDBColumn + DataBinding.FieldName = 'ID_PERFIL' + Visible = False + end + end + end + inherited dsDataSource: TDADataSource + Left = 360 + Top = 136 + end + inherited dxComponentPrinter: TdxComponentPrinter + Left = 328 + Top = 136 + end + inherited dxPSEngineController1: TdxPSEngineController + Left = 296 + Top = 136 + end + inherited cxStyleRepository1: TcxStyleRepository + Left = 264 + Top = 136 + end +end diff --git a/Source/ApplicationBase/Usuarios/Views/uViewUsuarios.pas b/Source/ApplicationBase/Usuarios/Views/uViewUsuarios.pas new file mode 100644 index 0000000..cfca3f1 --- /dev/null +++ b/Source/ApplicationBase/Usuarios/Views/uViewUsuarios.pas @@ -0,0 +1,64 @@ +unit uViewUsuarios; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, uViewGrid, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, + cxDataStorage, cxEdit, DB, cxDBData, dxPSGlbl, dxPSUtl, dxPSEngn, dxPrnPg, + dxBkgnd, dxWrap, dxPrnDev, dxPSCompsProvider, dxPSFillPatterns, + dxPSEdgePatterns, dxPgsDlg, dxPSCore, ImgList, PngImageList, ActnList, + cxGridCustomPopupMenu, cxGridPopupMenu, dxPScxCommon, + uDAInterfaces, uDADataTable, TB2Item, TBX, TB2Toolbar, TBXDkPanels, TB2Dock, + cxGridLevel, cxClasses, cxControls, cxGridCustomView, + cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGrid, + uBizUsuarios; + +type + IViewUsuarios = interface(IViewGrid) + ['{2F46A4FC-6501-47B2-AAB3-28B552DDA455}'] + function GetUsuarios: IBizUsuario; + procedure SetUsuarios(const Value: IBizUsuario); + property Usuarios: IBizUsuario read GetUsuarios write SetUsuarios; + end; + + TfrViewUsuarios = class(TfrViewGrid, IViewUsuarios) + cxGridViewID: TcxGridDBColumn; + cxGridViewUSERNAME: TcxGridDBColumn; + cxGridViewLOGIN: TcxGridDBColumn; + cxGridViewPASS: TcxGridDBColumn; + cxGridViewPASSEXPIRED: TcxGridDBColumn; + cxGridViewBLOQUEADO: TcxGridDBColumn; + cxGridViewEMAIL: TcxGridDBColumn; + cxGridViewUSERDAYSSUN: TcxGridDBColumn; + cxGridViewPRIVILEGED: TcxGridDBColumn; + cxGridViewTIPO: TcxGridDBColumn; + cxGridViewID_PERFIL: TcxGridDBColumn; + protected + FUsuarios : IBizUsuario; + function GetUsuarios: IBizUsuario; + procedure SetUsuarios(const Value: IBizUsuario); + public + property Usuarios: IBizUsuario read GetUsuarios write SetUsuarios; + end; + + +implementation + +{$R *.dfm} + +{ TfrViewUsuarios } + +function TfrViewUsuarios.GetUsuarios: IBizUsuario; +begin + Result := FUsuarios; +end; + +procedure TfrViewUsuarios.SetUsuarios(const Value: IBizUsuario); +begin + FUsuarios := Value; + if Assigned(FUsuarios) then + dsDataSource.DataTable := FUsuarios.DataTable; +end; + +end. diff --git a/Source/ApplicationBase/uAdminPV_App.pas b/Source/ApplicationBase/uAdminPV_App.pas new file mode 100644 index 0000000..a4c0d1b --- /dev/null +++ b/Source/ApplicationBase/uAdminPV_App.pas @@ -0,0 +1,326 @@ +unit uAdminPV_App; + +interface + +uses + SysUtils, Classes, Forms, uBizUsuarios, uControllerBase, + uUsuariosController, uHostManager; + +type + TDoLoadModulesEvent = procedure; + TDoMainFormEvent = procedure; + + IAppSplashForm = interface + ['{9905DF57-4476-42E6-A7CD-B1479A84E220}'] + procedure Show; + procedure Hide; + procedure Update; + function GetMensaje: String; + procedure SetMensaje(const AMensaje : String); + property Mensaje : String read GetMensaje write SetMensaje; + end; + + IAppAdminPV = interface + ['{FB6A0F3C-C1D1-462D-AFD4-2A368F85E920}'] + function GetMainForm: TCustomForm; + function GetUsuariosController: IUsuariosController; + function GetAppName: String; + function GetAppVersion: String; + function GetAppFullName: String; + function GetUsuarioActivo: IBizUsuario; + function GetModuleManager : THostManager; + function GetTerminated: Boolean; + + function GetLoadModulesEvent : TDoLoadModulesEvent; + procedure SetLoadModulesEvent (ALoadModulesEvent : TDoLoadModulesEvent); + + function GetDoMainFormEvent : TDoMainFormEvent; + procedure SetDoMainFormEvent (AMainFormEvent : TDoMainFormEvent); + + function GetAppSplashForm : IAppSplashForm; + procedure SetAppSplashForm (AAppSplashForm : IAppSplashForm); + + procedure ShowSplashForm; + procedure HideSplashForm; + + procedure Run; + procedure Terminate; + + property AppVersion : String read GetAppVersion; + property AppName : String read GetAppName; + property AppFullName : String read GetAppFullName; + property MainForm : TCustomForm read GetMainForm; + property UsuarioActivo : IBizUsuario read GetUsuarioActivo; + property UsuariosController : IUsuariosController read GetUsuariosController; + property AppSplashForm : IAppSplashForm read GetAppSplashForm write SetAppSplashForm; + property ModuleManager : THostManager read GetModuleManager; + property DoMainFormEvent : TDoMainFormEvent read GetDoMainFormEvent write SetDoMainFormEvent; + property DoLoadModulesEvent : TDoLoadModulesEvent read GetLoadModulesEvent write SetLoadModulesEvent; + property Terminated : Boolean read GetTerminated; + + procedure ShowCapado; + end; + + + TAppAdminPV = class(TInterfacedObject, IAppAdminPV) + private + FUsuariosController: IUsuariosController; + FAppSplashForm : IAppSplashForm; + FHostManager : THostManager; + FTerminated : Boolean; + + FDoMainFormEvent: TDoMainFormEvent; + FDoLoadModulesEvent: TDoMainFormEvent; + + function GetMainForm: TCustomForm; + function GetUsuariosController: IUsuariosController; + function GetAppName: String; + function GetAppVersion: String; + function GetAppFullName: String; + function GetUsuarioActivo: IBizUsuario; + function GetModuleManager : THostManager; + function GetTerminated: Boolean; + + function GetLoadModulesEvent : TDoLoadModulesEvent; + procedure SetLoadModulesEvent (ALoadModulesEvent : TDoLoadModulesEvent); + + function GetDoMainFormEvent : TDoMainFormEvent; + procedure SetDoMainFormEvent (AMainFormEvent : TDoMainFormEvent); + + function GetAppSplashForm : IAppSplashForm; + procedure SetAppSplashForm (AAppSplashForm : IAppSplashForm); + + procedure AfterLoadModule(Sender: TObject; AModuleInfo: TModuleInfo); + procedure RegisterModule(AModuleInfo : TModuleInfo); + protected + procedure DoMainForm; + + procedure CargarModulos; + procedure ShowSplashForm; + procedure HideSplashForm; + procedure UpdateSplashForm; + public + constructor Create; virtual; + destructor Destroy; override; + + procedure Run; + procedure Terminate; + + property AppVersion : String read GetAppVersion; + property AppName : String read GetAppName; + property AppFullName : String read GetAppFullName; + property MainForm : TCustomForm read GetMainForm; + property AppSplashForm : IAppSplashForm read GetAppSplashForm write SetAppSplashForm; + property UsuarioActivo : IBizUsuario read GetUsuarioActivo; + property UsuariosController : IUsuariosController read GetUsuariosController; + property ModuleManager : THostManager read GetModuleManager; + property DoMainFormEvent : TDoMainFormEvent read GetDoMainFormEvent write SetDoMainFormEvent; + property DoLoadModulesEvent : TDoLoadModulesEvent read GetLoadModulesEvent write SetLoadModulesEvent; + property Terminated : Boolean read GetTerminated; + + procedure ShowCapado; + end; + +var + AppAdminPV : IAppAdminPV = nil; + +implementation + +uses + Dialogs, uDialogUtils, cxControls, uUsuariosViewRegister, + uAppInfoUtils; + + +procedure TAppAdminPV.CargarModulos; +begin + if not Assigned(FDoLoadModulesEvent) then + raise Exception.Create('Evento para la carga de los módulos de la aplicación no asignado (CargarModulos)'); + + FDoLoadModulesEvent(); +end; + +constructor TAppAdminPV.Create; +begin + FTerminated := False; + FDoMainFormEvent := NIL; + FDoLoadModulesEvent := NIL; + FAppSplashForm := NIL; + FUsuariosController := NIL; // Se crea la primera vez que se usa + + + FHostManager := THostManager.Create(NIL); + with FHostManager do + begin + OnAfterLoad := AfterLoadModule; + // Ruta por defecto de los módulos + BPLPath := ExtractFilePath(Application.ExeName) + PathDelim; + end; +end; + +destructor TAppAdminPV.Destroy; +begin + FAppSplashForm := NIL; + + FHostManager.UnloadModules; + FreeAndNIL(FHostManager); + + FUsuariosController := NIL; + + inherited; +end; + +procedure TAppAdminPV.DoMainForm; +begin + if not Assigned(FDoMainFormEvent) then + raise Exception.Create('Evento para la creación del formulario principal no asignado (DoMainForm)'); + + FDoMainFormEvent(); +end; + +function TAppAdminPV.GetMainForm: TCustomForm; +begin + Result := Application.MainForm; +end; + +function TAppAdminPV.GetDoMainFormEvent: TDoMainFormEvent; +begin + Result := FDoMainFormEvent; +end; + +function TAppAdminPV.GetAppFullName: String; +begin + Result := uAppInfoUtils.GetAppFullName; +end; + +function TAppAdminPV.GetAppName: String; +begin + Result := uAppInfoUtils.GetAppName; +end; + +function TAppAdminPV.GetAppSplashForm: IAppSplashForm; +begin + Result := FAppSplashForm; +end; + +function TAppAdminPV.GetAppVersion: String; +begin + Result := uAppInfoUtils.GetAppVersion; +end; + +function TAppAdminPV.GetLoadModulesEvent: TDoLoadModulesEvent; +begin + Result := FDoLoadModulesEvent; +end; + +function TAppAdminPV.GetModuleManager: THostManager; +begin + Result := FHostManager; +end; + +function TAppAdminPV.GetTerminated: Boolean; +begin + Result := FTerminated; +end; + +function TAppAdminPV.GetUsuarioActivo: IBizUsuario; +begin + Result := UsuariosController.CurrentUser; +end; + +function TAppAdminPV.GetUsuariosController: IUsuariosController; +begin + if not Assigned(FUsuariosController) then + FUsuariosController := TUsuariosController.Create; + + Result := FUsuariosController; +end; + +procedure TAppAdminPV.HideSplashForm; +begin + if not Assigned(FAppSplashForm) then + raise Exception.Create('AppSplashForm no asignado (HideSplashForm)'); + + FAppSplashForm.Hide; +end; + +procedure TAppAdminPV.AfterLoadModule(Sender: TObject; + AModuleInfo: TModuleInfo); +begin + RegisterModule(AModuleInfo); +end; + +procedure TAppAdminPV.RegisterModule(AModuleInfo: TModuleInfo); +begin + AppSplashForm.Mensaje := 'Cargando ''' + AModuleInfo.Module.ModuleName + '''...'; +end; + +procedure TAppAdminPV.Run; +begin + if UsuariosController.StartLogin then + begin + ShowHourglassCursor; + try + CargarModulos; + DoMainForm; + finally + HideHourglassCursor; + HideSplashForm; + end; + end; + Application.Run; + Terminate; +end; + +procedure TAppAdminPV.SetDoMainFormEvent( + AMainFormEvent: TDoMainFormEvent); +begin + FDoMainFormEvent := AMainFormEvent; +end; + +procedure TAppAdminPV.SetAppSplashForm(AAppSplashForm: IAppSplashForm); +begin + FAppSplashForm := AAppSplashForm; +end; + +procedure TAppAdminPV.SetLoadModulesEvent( + ALoadModulesEvent: TDoLoadModulesEvent); +begin + FDoLoadModulesEvent := ALoadModulesEvent; +end; + +procedure TAppAdminPV.ShowCapado; +begin + ShowInfoMessage('Sin Acceso', 'Funcionalidad en desarrollo, disculpen las molestias'); +end; + +procedure TAppAdminPV.ShowSplashForm; +begin + if not Assigned(FAppSplashForm) then + raise Exception.Create('AppSplashForm no asignado (ShowSplashForm)'); + + FAppSplashForm.Show; + FAppSplashForm.Update; +end; + +procedure TAppAdminPV.Terminate; +begin + ModuleManager.UnloadModules; + FTerminated := True; +end; + +procedure TAppAdminPV.UpdateSplashForm; +begin + FAppSplashForm.Update; +end; + +initialization + // Pongo esto aquí por ahora + uUsuariosViewRegister.RegisterViews; + +finalization + // Pongo esto aquí por ahora + AppAdminPV := NIL; + + uUsuariosViewRegister.UnregisterViews; + +end. diff --git a/Source/Base/BaseD10.dpk b/Source/Base/BaseD10.dpk index 9555c9f..cb0a75f 100644 --- a/Source/Base/BaseD10.dpk +++ b/Source/Base/BaseD10.dpk @@ -77,16 +77,15 @@ requires dxPSLnksD10, vclshlctrls, dclcxLibraryD10, - RemObjects_Core_D10, - DataAbstract_Core_D10; + RemObjects_Core_D11, + DataAbstract_Core_D11, + JSDialog100; contains - uDataModuleBase in 'uDataModuleBase.pas' {dmBase: TDAClientDataModule}, + uDMBase in 'uDMBase.pas' {dmBase: TDAClientDataModule}, uEditorBase in 'uEditorBase.pas' {fEditorBase}, uEditorGridBase in 'uEditorGridBase.pas' {fEditorGridBase}, uEditorItem in 'uEditorItem.pas' {fEditorItem}, - uDataTableUtils in 'uDataTableUtils.pas', - uEditorUtils in 'uEditorUtils.pas', uEditorPreview in 'uEditorPreview.pas' {fEditorPreview}, uViewPreview in 'uViewPreview.pas' {frViewPreview: TFrame}, uViewBase in 'uViewBase.pas' {frViewBase: TCustomView}, @@ -95,15 +94,24 @@ contains uEditorDBItem in 'uEditorDBItem.pas' {fEditorDBItem: TCustomEditor}, uExceptions in 'uExceptions.pas', uViewBarraSeleccion in 'uViewBarraSeleccion.pas' {frViewBarraSeleccion: TFrame}, - uDBSelectionList in 'uDBSelectionList.pas', uConfigurarConexion in 'uConfigurarConexion.pas' {fConfigurarConexion}, uBizInformesBase in 'uBizInformesBase.pas', - uSysFunc in 'uSysFunc.pas', - VARELA_Intf in '..\Servidor\VARELA_Intf.pas', uViewGrid in 'uViewGrid.pas' {frViewGrid: TCustomView}, - uIntegerList in 'uIntegerList.pas', - schStockClient_Intf in '..\Modulos\Stock\Reglas\schStockClient_Intf.pas', - schStockServer_Intf in '..\Modulos\Stock\Reglas\schStockServer_Intf.pas', - uGridUtils in 'uGridUtils.pas'; + VARELA_Intf in '..\Servicios\VARELA_Intf.pas', + uControllerBase in 'Controladores\uControllerBase.pas', + uDataModuleBase in 'uDataModuleBase.pas' {fDataModuleBase: TDataModuleBase}, + uSysFunc in 'Utiles\uSysFunc.pas', + uDataTableUtils in 'Utiles\uDataTableUtils.pas', + uDBSelectionList in 'Utiles\uDBSelectionList.pas', + uDialogUtils in 'Utiles\uDialogUtils.pas', + uEditorUtils in 'Utiles\uEditorUtils.pas', + uGridUtils in 'Utiles\uGridUtils.pas', + uIntegerList in 'Utiles\uIntegerList.pas', + uViewRegistryUtils in 'ClassRegistry\uViewRegistryUtils.pas', + uClassRegistryUtils in 'ClassRegistry\uClassRegistryUtils.pas', + uEditorRegistryUtils in 'ClassRegistry\uEditorRegistryUtils.pas', + uInformeRegistryUtils in 'ClassRegistry\uInformeRegistryUtils.pas', + uAppInfoUtils in 'Utiles\uAppInfoUtils.pas', + uDateUtils in 'Utiles\uDateUtils.pas'; end. diff --git a/Source/Base/BaseD10.dproj b/Source/Base/BaseD10.dproj index cd2c4f7..b4be50a 100644 --- a/Source/Base/BaseD10.dproj +++ b/Source/Base/BaseD10.dproj @@ -53,9 +53,7 @@ MainSource - - - + @@ -67,7 +65,7 @@ - + @@ -84,12 +82,11 @@ - - + @@ -99,35 +96,44 @@ - + - + + + + +
fConfigurarConexion
-
dmBase
+
fDataModuleBase
+ TDataModuleBase +
+ +
dmBase
+ TDAClientDataModule
- -
fEditorBase
fEditorDBBase
+ TCustomEditor
fEditorDBItem
+ TCustomEditor
fEditorGridBase
@@ -138,25 +144,35 @@
fEditorPreview
- - - - + + + + + + + + +
frViewBarraSeleccion
+ TFrame
frViewBase
+ TCustomView
frViewGrid
+ TCustomView
frViewGridBase
+ TCustomView
frViewPreview
+ TFrame
diff --git a/Source/Base/BaseD10.drc b/Source/Base/BaseD10.drc index a39f62e..7867c96 100644 --- a/Source/Base/BaseD10.drc +++ b/Source/Base/BaseD10.drc @@ -8,14 +8,17 @@ resources were bound to the produced executable. */ +#define uClassRegistryUtils_eClassnotFound 65520 STRINGTABLE BEGIN + uClassRegistryUtils_eClassnotFound, "Class \"%s\" was not found in the registry." END /* C:\Varela_D2007\Source\Base\uConfigurarConexion.dfm */ -/* C:\Varela_D2007\Source\Base\uDataModuleBase.dfm */ +/* C:\Varela_D2007\Source\Base\uDMBase.dfm */ /* C:\Varela_D2007\Source\Base\uViewBase.dfm */ /* C:\Varela_D2007\Source\Base\uEditorBase.dfm */ +/* C:\Varela_D2007\Source\Base\uDataModuleBase.dfm */ /* C:\Varela_D2007\Source\Base\uViewGridBase.dfm */ /* C:\Varela_D2007\Source\Base\uEditorItem.dfm */ /* C:\Varela_D2007\Source\Base\uEditorDBBase.dfm */ @@ -26,4 +29,4 @@ END /* C:\Varela_D2007\Source\Base\uViewBarraSeleccion.dfm */ /* C:\Varela_D2007\Source\Base\uViewGrid.dfm */ /* C:\Varela_D2007\Source\Base\BaseD10.res */ -/* C:\DOCUME~1\Usuario\CONFIG~1\Temp\dtf9.tmp */ +/* C:\DOCUME~1\Usuario\CONFIG~1\Temp\dtf21.tmp */ diff --git a/Source/Base/BaseD10.identcache b/Source/Base/BaseD10.identcache deleted file mode 100644 index 3d1570901ecd7db21979233927e3a0e09d3ae4ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1442 zcmbVM%TB{E5bS602|P;$2PAGyQc$HLp$2lYR2gSeEZn$SJEidT#EGboYi|LcVkxt; zGdt^}!C-Kn-m-!tD89(9Mxz^+>jnj|gd1SZq?A_Uvz5vW*W9%K@6H7YEF`?&qbyyS zzae|dED0emNzRO0{={Dt1p7TBv6HQUwUxTw(@Aso-Nuxr5zYr)HcA_oTP@z$9F~e3 zX2ffEPnCq)E~d4ueCPgEF9+NJ2I~zY{rw#NBf_Q~rr%1;7RM$_jjR~YC$n*omd;!& z9F~AHX{=9rV1`{-rxsQ|j?U_L;zGy~=};m+r*)-q1tt_%TBlo)h`GlkYyM&Gnp*fG zuSt+&OE@CWL4go$(tZ4I%nhlGC7}!t3$JBLw@(6@!Q bHPv+`mkn}kzhE1%l}=EWbn|d8PblzTRHK}l diff --git a/Source/Base/ClassRegistry/uClassRegistryUtils.pas b/Source/Base/ClassRegistry/uClassRegistryUtils.pas new file mode 100644 index 0000000..d7b679d --- /dev/null +++ b/Source/Base/ClassRegistry/uClassRegistryUtils.pas @@ -0,0 +1,336 @@ +unit uClassRegistryUtils; + +interface + +uses + Classes, SysUtils, Forms, uGUIBase; + +type + IClassRegistry = Interface + ['{FD23C946-4103-4C67-9C3F-644B52826833}'] + procedure RegisterClass( aClass: TClass; const aDisplayname: String = ''); + procedure RegisterClasses( const aClasses: array of TClass; + const aDisplaynames: array of String ); + procedure UnRegisterClass( aClass: TClass ); + function FindClass( const aClassOrDisplayname: String ): Tclass; + function IsClassRegistered( aClass: TClass ): Boolean; overload; + function IsClassRegistered( const aDisplayname: String ): Boolean; overload; + procedure GetRegisteredClasses( aList: TStrings; aMinClass: TClass = nil); + function CreateObject( const aClassOrDisplayname: String ): TObject; + end; + + IComponentRegistry = Interface( IClassRegistry ) + ['{04BAA01F-9AF4-4E60-9922-641E127A35C2}'] + function CreateComponent( const aClassOrDisplayname: String; + aOwner:TComponent = nil ): TComponent; + end; + + IFormRegistry = Interface( IComponentRegistry ) + ['{28E3BF72-1378-4136-B1FB-027FBB8FE99B}'] + function CreateForm( const aClassOrDisplayname: String; + aOwner: TComponent = nil ): TForm; + end; + + IDataModuleRegistry = Interface( IComponentRegistry ) + ['{9D8D1D23-6A5C-4351-9393-093CD8B76788}'] + function CreateDatamodule( const aClassOrDisplayname: String; + aOwner: TComponent = nil ): TDatamodule; + end; + + IReportRegistry = Interface( IComponentRegistry ) + ['{49D3C8D5-8FEE-4F15-A6D2-51CB1DB29F8D}'] + function CreateReport( const aClassOrDisplayname: String; + aOwner: TComponent = nil ): TInterfacedObject; + end; + + TClassRegistry = class( TInterfacedObject, IClassRegistry ) + private + FList: TStringlist; + FMinAcceptableClass: TClass; + + function FindClassByClassname( const aClassname: String ): Tclass; + function FindClassByDisplayname( const aDisplayname: String ): TClass; + function IsClassAcceptable( aClass: TClass ): Boolean; + function GetClasses(index: integer): TClass; + function GetCount: Integer; + protected + procedure ValidateMinAcceptableClass(var aMinAcceptableClass: TClass ); virtual; + procedure RegisterClass( aClass: TClass; const aDisplayname: String = ''); + procedure RegisterClasses( const aClasses: array of TClass; + const aDisplaynames: array of String ); + procedure UnRegisterClass( aClass: TClass ); + function FindClass( const aClassOrDisplayname: String ): Tclass; + function IsClassRegistered( aClass: TClass ): Boolean; overload; + function IsClassRegistered( const aDisplayname: String ): Boolean; overload; + procedure GetRegisteredClasses( aList: TStrings; aMinClass: TClass = nil); + function CreateObject( const aClassOrDisplayname: String ): TObject; + property MinAcceptableClass: TClass read FMinAcceptableClass; + property List: TStringlist read FList; + property Count: Integer read GetCount; + property Classes[ index: integer ]: TClass read GetClasses; + public + constructor Create( minAcceptableClass: TClass = nil ); virtual; + destructor Destroy; override; + end; + + TComponentRegistry = class( TClassRegistry, IComponentRegistry ) + protected + procedure ValidateMinAcceptableClass(var aMinAcceptableClass: TClass ); override; + function CreateComponent( const aClassOrDisplayname: String; + aOwner: TComponent = nil ): TComponent; + end; + + TFormRegistry = class( TComponentRegistry, IFormRegistry ) + protected + procedure ValidateMinAcceptableClass(var aMinAcceptableClass: TClass ); override; + function CreateForm( const aClassOrDisplayname: String; + aOwner: TComponent = nil ): TForm; + end; + + TDataModuleRegistry = class( TComponentRegistry, IDataModuleRegistry ) + protected + procedure ValidateMinAcceptableClass(var aMinAcceptableClass: TClass); override; + function CreateDatamodule( const aClassOrDisplayname: String; + aOwner: TComponent = nil ): TDatamodule; + end; + + TReportRegistry = class( TComponentRegistry, IReportRegistry ) + protected + procedure ValidateMinAcceptableClass(var aMinAcceptableClass: TClass ); override; + function CreateReport( const aClassOrDisplayname: String; + aOwner: TComponent = nil ): TInterfacedObject; + end; + + EClassRegistryError = class( Exception ); + +implementation + +{ TClassRegistry } + +ResourceString + eClassnotFound = 'Class "%s" was not found in the registry.'; + +constructor TClassRegistry.Create(minAcceptableClass: TClass); +begin + inherited Create; + FList := Tstringlist.Create; + ValidateMinAcceptableClass( minAcceptableClass ); + FMinAcceptableClass := minAcceptableClass; +end; + +function TClassRegistry.CreateObject( + const aClassOrDisplayname: String): TObject; +begin + Result := FindClass( aClassOrDisplayname ).Create; +end; + +destructor TClassRegistry.Destroy; +begin + Flist.Free; + inherited; +end; + +function TClassRegistry.FindClass( + const aClassOrDisplayname: String): Tclass; +begin + Result := FindClassByDisplayname( aClassOrDisplayname ); + If not Assigned( Result ) Then + Result := FindClassByClassname( aClassOrDisplayname ); + If not Assigned( Result ) Then + raise EClassRegistryError.CreateFmt + ( eClassnotFound, [ aClassOrDisplayname ] ); +end; + +function TClassRegistry.FindClassByClassname( + const aClassname: String): Tclass; +var + i: Integer; +begin + for i:= 0 to count-1 do begin + Result := classes[i]; + If Result.ClassNameIs( aClassname ) Then + Exit; + end; + Result := nil; +end; + +function TClassRegistry.FindClassByDisplayname( + const aDisplayname: String): TClass; +var + i: Integer; +begin + i:= List.IndexOf( aDisplayname ); + If i >= 0 Then + Result := Classes[i] + Else + Result := nil; +end; + +function TClassRegistry.GetClasses(index: integer): TClass; +begin + Result := TClass( List.Objects[index] ); +end; + +function TClassRegistry.GetCount: Integer; +begin + Result := List.Count; +end; + +procedure TClassRegistry.GetRegisteredClasses(aList: TStrings; + aMinClass: TClass); +var + i: Integer; + aClass: TClass; +begin + Assert( Assigned( aList )); + aList.BeginUpdate; + try + aList.Clear; + If not Assigned( aMinClass ) Then + aList.Assign( List ) + else begin + For i:= 0 To Count-1 Do Begin + aClass := Classes[i]; + If aClass.InheritsFrom( aMinClass ) Then + aList.AddObject( List[i], TObject( aClass )); + end; + end; + finally + aList.EndUpdate + end; +end; + +function TClassRegistry.IsClassAcceptable(aClass: TClass): Boolean; +begin + Result := Assigned( aClass ) and + aClass.InheritsFrom( MinAcceptableClass ); +end; + +function TClassRegistry.IsClassRegistered(const aDisplayname: String): Boolean; +begin + Result := List.IndexOf(aDisplayname) >= 0; +end; + +function TClassRegistry.IsClassRegistered(aClass: TClass): Boolean; +begin + Result := List.IndexOfObject( TObject( aClass )) >= 0; +end; + +procedure TClassRegistry.RegisterClass(aClass: TClass; + const aDisplayname: String); +begin + Assert( Assigned( aClass ), 'Cannot register Nil class' ); + If aDisplayname = '' Then + RegisterClass( aClass, aClass.Classname ) + else begin + Assert( IsClassAcceptable( aClass ), + format('Cannot register %s since it does not inherit from %s', + [aclass.classname, MinAcceptableClass.classname] )); + Assert( not IsClassRegistered( aClass ), + Format('Class %s is already registered.', [aClass.Classname])); + List.AddObject( aDisplayname, TObject( aClass )); + end; +end; + +procedure TClassRegistry.RegisterClasses(const aClasses: array of TClass; + const aDisplaynames: array of String); +var + i: Integer; +begin + Assert( High( aClasses ) = High( aDisplaynames ), + 'Size of both parameter arrays has to be the same.' ); + for i:= Low( aClasses ) to High( aClasses ) do + RegisterClass( aClasses[i], aDisplaynames[i] ); +end; + +procedure TClassRegistry.UnRegisterClass(aClass: TClass); +var + i: Integer; +begin + i:= List.IndexOfObject( TObject( aClass )); + If i >= 0 Then + List.Delete( i ); + // does not consider attempt to unregister a class that is not + // registered as an error. +end; + +procedure TClassRegistry.ValidateMinAcceptableClass( + var aMinAcceptableClass: TClass); +begin + If not Assigned( aMinAcceptableClass ) Then + aMinAcceptableClass := TObject; +end; + +{ TComponentRegistry } + +function TComponentRegistry.CreateComponent( + const aClassOrDisplayname: String; aOwner: TComponent): TComponent; +var + aClass: TComponentClass; +begin + aClass := TComponentClass( FindClass( aClassOrDisplayname )); + Result := aClass.Create( aOwner ); +end; + +procedure TComponentRegistry.ValidateMinAcceptableClass( + var aMinAcceptableClass: TClass); +begin + inherited; + If not aMinAcceptableClass.InheritsFrom( TComponent ) + Then + aMinAcceptableClass := TComponent; +end; + +{ TFormRegistry } + +function TFormRegistry.CreateForm(const aClassOrDisplayname: String; + aOwner: TComponent): TForm; +begin + Result := CreateComponent( aClassOrDisplayname, aOwner ) As TForm; +end; + +procedure TFormRegistry.ValidateMinAcceptableClass( + var aMinAcceptableClass: TClass); +begin + inherited; + If not aMinAcceptableClass.InheritsFrom( TForm ) + Then + aMinAcceptableClass := TForm; +end; + +{ TDataModuleRegistry } + +function TDataModuleRegistry.CreateDatamodule( + const aClassOrDisplayname: String; aOwner: TComponent): TDatamodule; +begin + Result := CreateComponent( aClassOrDisplayname, aOwner ) As TDatamodule; +end; + +procedure TDataModuleRegistry.ValidateMinAcceptableClass( + var aMinAcceptableClass: TClass); +begin + inherited; + If not aMinAcceptableClass.InheritsFrom( TDatamodule ) + Then + aMinAcceptableClass := TDatamodule; +end; + +{ TReportRegistry } + +function TReportRegistry.CreateReport(const aClassOrDisplayname: String; + aOwner: TComponent): TInterfacedObject; +begin + Result := CreateObject( aClassOrDisplayname) As TInterfacedObject; +// Result := CreateComponent( aClassOrDisplayname, aOwner ) As TInterfacedObject; +end; + +procedure TReportRegistry.ValidateMinAcceptableClass( + var aMinAcceptableClass: TClass); +begin + inherited; + If not aMinAcceptableClass.InheritsFrom( TInterfacedObject ) + Then + aMinAcceptableClass := TInterfacedObject; +end; + +end. diff --git a/Source/Base/ClassRegistry/uEditorRegistryUtils.pas b/Source/Base/ClassRegistry/uEditorRegistryUtils.pas new file mode 100644 index 0000000..0dd7333 --- /dev/null +++ b/Source/Base/ClassRegistry/uEditorRegistryUtils.pas @@ -0,0 +1,81 @@ +unit uEditorRegistryUtils; + +interface + +uses + Classes, Forms, uClassRegistryUtils, uCustomEditor; + +type +{ + IEditorRegistry = interface (IComponentRegistry) + 22F14B82-AC61-4987-847E-AF8513DE2A10 + function CreateEditor(const aClassOrDisplayname: String; + aOwner: TComponent = NIL): TCustomEditor; + end; + + TEditorRegistry = class(TComponentRegistry, IEditorRegistry) + protected + procedure ValidateMinAcceptableClass(var aMinAcceptableClass: TClass); override; + function CreateEditor(const aClassOrDisplayname: String; + aOwner: TComponent = nil): TCustomEditor; + end; +} + + IEditorRegistry = interface (IFormRegistry) + ['{F6AC050F-5547-4E1F-AA44-DA0D06EDA4D7}'] + function CreateEditor(const aClassOrDisplayname: String; + aOwner: TComponent = NIL): TForm; + end; + + TEditorRegistry = class(TFormRegistry, IEditorRegistry) + protected + function CreateEditor(const aClassOrDisplayname: String; + aOwner: TComponent = nil): TForm; + end; + +function CreateEditor(const AName: String; const IID: TGUID; out Intf): Boolean; + +var + EditorRegistry : IEditorRegistry; + +implementation + +uses + SysUtils, cxControls; + +function CreateEditor(const AName: String; const IID: TGUID; out Intf): Boolean; +begin + ShowHourglassCursor; + try + Result := Supports(EditorRegistry.CreateEditor(AName, Application), IID, Intf); + finally + HideHourglassCursor; + end; +end; + + +{ TEditorRegistry } + +function TEditorRegistry.CreateEditor(const aClassOrDisplayname: String; + aOwner: TComponent): TForm; +begin + if not Assigned(AOwner) then + AOwner := Application; + Result := CreateComponent( aClassOrDisplayname, aOwner ) as TForm; +end; + +{procedure TEditorRegistry.ValidateMinAcceptableClass( + var aMinAcceptableClass: TClass); +begin + inherited; + if not aMinAcceptableClass.InheritsFrom(TCustomEditor) then + aMinAcceptableClass := TCustomEditor; +end;} + +initialization + EditorRegistry := TEditorRegistry.Create; + +finalization + EditorRegistry := NIL; + +end. diff --git a/Source/Base/ClassRegistry/uInformeRegistryUtils.pas b/Source/Base/ClassRegistry/uInformeRegistryUtils.pas new file mode 100644 index 0000000..72b6e90 --- /dev/null +++ b/Source/Base/ClassRegistry/uInformeRegistryUtils.pas @@ -0,0 +1,59 @@ +unit uInformeRegistryUtils; + +interface + +uses + Classes, Forms, uClassRegistryUtils; + +type + IInformeRegistry = interface (IReportRegistry) + ['{F6AC050F-5547-4E1F-AA44-DA0D06EDA4D7}'] + function CreateInforme(const aClassOrDisplayname: String; + aOwner: TComponent = NIL): TInterfacedObject; + end; + + TInformeRegistry = class(TReportRegistry, IInformeRegistry) + protected + function CreateInforme(const aClassOrDisplayname: String; + aOwner: TComponent = nil): TInterfacedObject; + end; + +function CreateInforme(const AName: String; const IID: TGUID; out Intf): Boolean; + +var + InformeRegistry : IInformeRegistry; + +implementation + +uses + SysUtils, cxControls; + +function CreateInforme(const AName: String; const IID: TGUID; out Intf): Boolean; +begin + ShowHourglassCursor; + try + Result := Supports(InformeRegistry.CreateInforme(AName, Application), IID, Intf); + finally + HideHourglassCursor; + end; +end; + + +{ TInformeRegistry } + +function TInformeRegistry.CreateInforme(const aClassOrDisplayname: String; + aOwner: TComponent): TInterfacedObject; +begin +{ if not Assigned(AOwner) then + AOwner := Application;} + Result := CreateObject( aClassOrDisplayname) as TInterfacedObject; +end; + + +initialization + InformeRegistry := TInformeRegistry.Create; + +finalization + InformeRegistry := NIL; + +end. diff --git a/Source/Base/ClassRegistry/uViewRegistryUtils.pas b/Source/Base/ClassRegistry/uViewRegistryUtils.pas new file mode 100644 index 0000000..458a681 --- /dev/null +++ b/Source/Base/ClassRegistry/uViewRegistryUtils.pas @@ -0,0 +1,50 @@ +unit uViewRegistryUtils; + +interface + +uses + Classes, Forms, uClassRegistryUtils, uCustomView; + +type + IViewRegistry = interface (IComponentRegistry) + ['{F49AE52F-47EC-42AF-8365-A09270E4B45D}'] + function CreateView(const aClassOrDisplayname: String; + aOwner: TComponent = nil): TCustomView; + end; + + + TViewRegistry = class(TComponentRegistry, IViewRegistry) + protected + procedure ValidateMinAcceptableClass(var aMinAcceptableClass: TClass); override; + function CreateView( const aClassOrDisplayname: String; + aOwner: TComponent = nil ): TCustomView; + end; + +var + ViewRegistry : IViewRegistry; + +implementation + +{ TViewRegistry } + +function TViewRegistry.CreateView(const aClassOrDisplayname: String; + aOwner: TComponent): TCustomView; +begin + Result := CreateComponent( aClassOrDisplayname, aOwner ) as TCustomView; +end; + +procedure TViewRegistry.ValidateMinAcceptableClass( + var aMinAcceptableClass: TClass); +begin + inherited; + if not aMinAcceptableClass.InheritsFrom(TCustomView) then + aMinAcceptableClass := TCustomView; +end; + +initialization + ViewRegistry := TViewRegistry.Create; + +finalization + ViewRegistry := NIL; + +end. diff --git a/Source/Base/Controladores/uControllerBase.pas b/Source/Base/Controladores/uControllerBase.pas new file mode 100644 index 0000000..9e825ab --- /dev/null +++ b/Source/Base/Controladores/uControllerBase.pas @@ -0,0 +1,280 @@ +unit uControllerBase; + +interface + +uses + Classes, uDADataTable, Forms; + +type + ISujeto = interface; + + IObservador = interface (IInterface) + ['{679D5CF2-D5DC-4A52-9FF3-04AD91402483}'] + procedure AddSujeto(Sujeto: ISujeto); + procedure DeleteSujeto(Sujeto: ISujeto); + procedure RecibirAviso(ASujeto: ISujeto); overload; + procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); overload; + end; + + ISujeto = interface (IInterface) + ['{CDB691CD-D1D6-4F2E-AA34-93B1CD0E6030}'] + procedure AddObservador(Observador: IObservador); + procedure DeleteObservador(Observador: IObservador); + end; + + { ******************* PARA PRUEBAS ******************************************} + TMiInterfacedObject = class(TObject, IInterface) + protected + FRefCount: Integer; + function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall; + function _AddRef: Integer; stdcall; + function _Release: Integer; virtual; stdcall; + function GetRefCount : Integer; + public + procedure AfterConstruction; override; + procedure BeforeDestruction; override; + class function NewInstance: TObject; override; + property RefCount: Integer read FRefCount; + end; + + + { ***************************************************************************} + + + TObservador = class(TObject, IObservador) + private + fSujetos: IInterfaceList; + protected + FRefCount: Integer; + procedure RecibirAviso(ASujeto: ISujeto); overload; virtual; + procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); overload; virtual; abstract; + function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall; + function _AddRef: Integer; stdcall; + function _Release: Integer; stdcall; + function GetRefCount : Integer; + public + constructor Create; virtual; + procedure AddSujeto(Sujeto: ISujeto); + procedure DeleteSujeto(Sujeto: ISujeto); + destructor Destroy; override; + + procedure AfterConstruction; override; + procedure BeforeDestruction; override; + class function NewInstance: TObject; override; + property RefCount: Integer read FRefCount; + end; + + TSujeto = class(TInterfacedObject, ISujeto) + private + fObservadores: IInterfaceList; + protected + procedure AvisarObservadores; overload; + procedure AvisarObservadores(ADataTable: IDAStronglyTypedDataTable); overload; + public + constructor Create; virtual; + procedure AddObservador(Observador: IObservador); + procedure DeleteObservador(Observador: IObservador); + destructor Destroy; override; + end; + + IControllerBase = IObservador; + TControllerBase = TObservador; + +implementation + +uses + Dialogs, SysUtils; + + +function InterlockedIncrement(var I: Integer): Integer; +asm + MOV EDX,1 + XCHG EAX,EDX + LOCK XADD [EDX],EAX + INC EAX +end; + +function InterlockedDecrement(var I: Integer): Integer; +asm + MOV EDX,-1 + XCHG EAX,EDX + LOCK XADD [EDX],EAX + DEC EAX +end; + +{ TMiInterfacedObject } + +procedure TMiInterfacedObject.AfterConstruction; +begin +// Release the constructor's implicit refcount + InterlockedDecrement(FRefCount); +end; + +procedure TMiInterfacedObject.BeforeDestruction; +begin +// if RefCount <> 0 then +// Error(reInvalidPtr); +end; + +function TMiInterfacedObject.GetRefCount: Integer; +begin + Result := FRefCount; +end; + +// Set an implicit refcount so that refcounting +// during construction won't destroy the object. +class function TMiInterfacedObject.NewInstance: TObject; +begin + Result := inherited NewInstance; + TMiInterfacedObject(Result).FRefCount := 1; +end; + +function TMiInterfacedObject.QueryInterface(const IID: TGUID; out Obj): HResult; +begin + if GetInterface(IID, Obj) then + Result := 0 + else + Result := E_NOINTERFACE; +end; + +function TMiInterfacedObject._AddRef: Integer; +begin + Result := InterlockedIncrement(FRefCount); +// ShowMessage('_AddRef: ' + ClassName + ' - RefCount: ' + IntToStr(FRefCount)); +end; + +function TMiInterfacedObject._Release: Integer; +begin + Result := InterlockedDecrement(FRefCount); +// ShowMessage('_Release: ' + ClassName + ' - RefCount: ' + IntToStr(FRefCount)); + if Result = 0 then + Destroy; +end; + + + +{ TSujeto } + +procedure TSujeto.addObservador(Observador: IObservador); +begin + FObservadores.Add(Observador); + Observador.AddSujeto(Self); +end; + +procedure TSujeto.AvisarObservadores; +var + i: Integer; + AObs : IObservador; +begin + for i := 0 to Pred(FObservadores.Count) do + begin + if Supports(FObservadores[i], IObservador, AObs) then + AObs.RecibirAviso(Self); + end; +end; + +procedure TSujeto.AvisarObservadores(ADataTable: IDAStronglyTypedDataTable); +var + i: Integer; + AObs : IObservador; +begin + for i := 0 to Pred(FObservadores.Count) do + begin + if Supports(FObservadores[i], IObservador, AObs) then + AObs.RecibirAviso(Self, ADataTable); + end; +end; + +constructor TSujeto.Create; +begin + inherited; + FObservadores := TInterfaceList.Create; +end; + +procedure TSujeto.DeleteObservador(Observador: IObservador); +begin + FObservadores.Remove(Observador); +end; + +destructor TSujeto.Destroy; +begin + FObservadores := NIL; + inherited; +end; + +{ TObservador } + +procedure TObservador.RecibirAviso(ASujeto: ISujeto); +begin + // +end; + +function TObservador._AddRef: Integer; +begin + Result := InterlockedIncrement(FRefCount); +// ShowMessage('_AddRef: ' + ClassName + ' - RefCount: ' + IntToStr(FRefCount)); +end; + +function TObservador._Release: Integer; +begin + Result := InterlockedDecrement(FRefCount); +// ShowMessage('_Release: ' + ClassName + ' - RefCount: ' + IntToStr(FRefCount)); +// if (Result = 0) + if (Assigned(fSujetos) and (fSujetos.Count = FRefCount)) then + Destroy; +end; + +procedure TObservador.AddSujeto(Sujeto: ISujeto); +begin + FSujetos.Add(Sujeto); +end; + +procedure TObservador.AfterConstruction; +begin +// Release the constructor's implicit refcount + InterlockedDecrement(FRefCount); +end; + +procedure TObservador.BeforeDestruction; +begin +// if RefCount <> 0 then +// Error(reInvalidPtr); +end; + +constructor TObservador.Create; +begin + inherited; + FSujetos := TInterfaceList.Create; +end; + +procedure TObservador.DeleteSujeto(Sujeto: ISujeto); +begin + FSujetos.Remove(Sujeto); +end; + +destructor TObservador.Destroy; +begin + FSujetos := NIL; + inherited; +end; + +function TObservador.GetRefCount: Integer; +begin + Result := FRefCount; +end; + +class function TObservador.NewInstance: TObject; +begin + Result := inherited NewInstance; + TObservador(Result).FRefCount := 1; +end; + +function TObservador.QueryInterface(const IID: TGUID; out Obj): HResult; +begin + if GetInterface(IID, Obj) then + Result := 0 + else + Result := E_NOINTERFACE; +end; + +end. diff --git a/Source/Base/Utiles/uAppInfoUtils.pas b/Source/Base/Utiles/uAppInfoUtils.pas new file mode 100644 index 0000000..d44909e --- /dev/null +++ b/Source/Base/Utiles/uAppInfoUtils.pas @@ -0,0 +1,52 @@ +unit uAppInfoUtils; + +interface + +function GetAppName: String; +function GetAppVersion: String; +function GetAppFullName: String; + +implementation + +uses + Forms, SysUtils, JclFileUtils; + +function GetAppName: String; +var + FAppInfo : TJclFileVersionInfo; +begin + FAppInfo := TJclFileVersionInfo.Create(Application.ExeName); + try + Result := FAppInfo.ProductName; + finally + FreeANDNil(FAppInfo); + end; +end; + + +function GetAppVersion: String; +var + FAppInfo : TJclFileVersionInfo; +begin + FAppInfo := TJclFileVersionInfo.Create(Application.ExeName); + try + Result := FAppInfo.ProductVersion; + finally + FreeANDNil(FAppInfo); + end; +end; + +function GetAppFullName: String; +var + FAppInfo : TJclFileVersionInfo; +begin + FAppInfo := TJclFileVersionInfo.Create(Application.ExeName); + try + Result := FAppInfo.ProductName + ' ' + FAppInfo.ProductVersion; + finally + FreeANDNil(FAppInfo); + end; +end; + + +end. diff --git a/Source/Base/uDBSelectionList.pas b/Source/Base/Utiles/uDBSelectionList.pas similarity index 100% rename from Source/Base/uDBSelectionList.pas rename to Source/Base/Utiles/uDBSelectionList.pas diff --git a/Source/Base/uDataTableUtils.pas b/Source/Base/Utiles/uDataTableUtils.pas similarity index 54% rename from Source/Base/uDataTableUtils.pas rename to Source/Base/Utiles/uDataTableUtils.pas index 9bbb7b1..88bcbda 100644 --- a/Source/Base/uDataTableUtils.pas +++ b/Source/Base/Utiles/uDataTableUtils.pas @@ -3,22 +3,27 @@ unit uDataTableUtils; interface uses - uDACDSDataTable, uDADataTable, uDAInterfaces, uDADelta; + uDACDSDataTable, uDADataTable, uDAInterfaces, uDADelta, uDAMemDataTable; procedure CloneDataTable(const ASource : TDACDSDataTable; var ATarget : TDACDSDataTable; - RemoteUpdate: Boolean = True); + RemoteUpdate: Boolean = True); overload; + +function CloneDataTable(const ASource : TDAMemDataTable; + RemoteUpdate: Boolean = True): TDAMemDataTable; overload; procedure CopyDataTable(ASource : IDADataset; ATarget : TDADataTable; const OnlySelectedRows : Boolean = False); procedure DeleteAllTable(const ADataTable : TDADataTable); function DeltaValuesAreDifferent(const aDelta : IDADelta): boolean; +function DataTableModified (const ADataTable : TDADataTable): Boolean; + implementation uses - uDAClasses, SysUtils, uDABINAdapter, uROTypes, uDBSelectionList, cxControls, - Dialogs, Variants, uDADataStreamer; + DB, Classes, uDAClasses, SysUtils, uDABINAdapter, uROTypes, uDBSelectionList, + cxControls, Dialogs, Variants, uDADataStreamer; {procedure EliminarNoSeleccionados(const ASource : IDADataset; @@ -144,6 +149,80 @@ begin end; +function CloneDataTable(const ASource : TDAMemDataTable; + RemoteUpdate: Boolean = True): TDAMemDataTable; +var + i : Integer; + ATarget : TDAMemDataTable; +begin + if not Assigned(ASource) then + raise Exception.Create ('No se ha asignado la tabla de origen (CloneDataTable)'); + + ATarget := TDAMemDataTable.Create(NIL); + with ATarget do + begin + + { ATENCIÓN !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + -------------------------------------------------------------------- + DA5 tiene un fallo en el cual las tablas definidas como detalle no + tienen asociados los eventos internos before... y after... por lo + que los campos AutoInc no funcionan (no pone el -1, -2...). + La forma de arreglarlo es llamar a DisableEventHandlers/EnableEventHandlers + que realiza la asociación de los eventos. + } + ATarget.DisableEventHandlers; // <--- INDISPENSABLE!!!!!!!!!!!!!!!!!!!! + + + try + if not Assigned(ASource.RemoteDataAdapter) then + raise Exception.Create('No está asignado RemoteDataAdapter (' + ASource.Name + ')'); + + LogicalName := ASource.LogicalName; + CustomAttributes.Assign(ASource.CustomAttributes); + Fields.AssignFieldCollection(ASource.Fields); // o también ATarget.LoadSchema; + Params.AssignParamCollection(ASource.Params); + + RemoteDataAdapter := ASource.RemoteDataAdapter; + + Randomize; + Name := ASource.Name + '_' + IntToStr(Random(MAXINT)); + + BusinessRulesID := ASource.BusinessRulesID; + + with MasterParamsMappings do + for i := 0 to ASource.MasterParamsMappings.Count - 1 do + Add(ASource.MasterParamsMappings.Strings[i]); + + with MasterRequestMappings do + for i := 0 to ASource.MasterRequestMappings.Count - 1 do + Add(ASource.MasterRequestMappings.Strings[i]); + + MasterMappingMode := ASource.MasterMappingMode; + + MasterFields := ASource.MasterFields; + MasterOptions := ASource.MasterOptions; + + DetailFields := ASource.DetailFields; + DetailOptions := ASource.DetailOptions; + + RemoteUpdatesOptions := ASource.RemoteUpdatesOptions; + StreamingOptions := ASource.StreamingOptions; + RemoteFetchEnabled := ASource.RemoteFetchEnabled; + finally + ATarget.EnableEventHandlers; // <--- INDISPENSABLE!!!!!!!!!!!!!!!!!!!!!!!!! + end; + end; + + if not RemoteUpdate then + begin + ATarget.LogChanges := False; + ATarget.RemoteFetchEnabled := False; + end; + + Result := ATarget; +end; + + procedure CloneDataTable(const ASource : TDACDSDataTable; var ATarget : TDACDSDataTable; RemoteUpdate: Boolean); var @@ -194,131 +273,36 @@ begin end; -end. - -procedure CloneDataTable(const ASource : TDACDSDataTable; - var ATarget : TDACDSDataTable; RemoteUpdate: Boolean); +function DataTableModified (const ADataTable : TDADataTable): Boolean; var - i : Integer; + bCambiado : Boolean; + dtDetails : TList; + i : integer; begin - with ATarget do + bCambiado := False; + + if Assigned(ADataTable) and (ADataTable.Active) then begin - // ****** Inicio migración DA 5 + bCambiado :=(ADataTable.State = dsEdit) or + (ADataTable.HasDelta and DeltaValuesAreDifferent(ADataTable.Delta)); - //RemoteService := ASource.GetRemoteService; - //Adapter := ASource.GetAdapter; - RemoteDataAdapter.Assign(ASource.RemoteDataAdapter); - // ****** Fin migración DA 5 - - BusinessRulesID := ASource.BusinessRulesID; - Randomize; - Name := ASource.Name + '_' + IntToStr(Random(MAXINT)); - LogicalName := ASource.LogicalName; - - Params.AssignParamCollection(ASource.Params); - - if Assigned(ASource.LocalSchema) then - LocalSchema := ASource.LocalSchema - else begin - // ****** Inicio migración DA 5 - { - with SchemaCall do - begin - MethodName := ASource.SchemaCall.MethodName; - for i := 0 to ASource.SchemaCall.Params.Count - 1 do - begin - with Params.Add do begin - Name := ASource.SchemaCall.Params[i].Name; - ParamType := ASource.SchemaCall.Params[i].ParamType; - DataType := ASource.SchemaCall.Params[i].DataType; - Value := ASource.SchemaCall.Params[i].Value; - UserClassName := ASource.SchemaCall.Params[i].UserClassName; - end; - end; - end; - } - // ****** Fin migración DA 5 - ATarget.Fields.AssignFieldCollection(ASource.Fields); // o también ATarget.LoadSchema; - end; - - // ****** Inicio migración DA 5 - { - with DataUpdateCall do + if (not bCambiado) then begin - MethodName := ASource.DataUpdateCall.MethodName; - for i := 0 to ASource.DataUpdateCall.Params.Count - 1 do + dtDetails := ADataTable.GetDetailDataTables; + for i := 0 to dtDetails.Count - 1 do begin - with Params.Add do begin - Name := ASource.DataUpdateCall.Params[i].Name; - ParamType := ASource.DataUpdateCall.Params[i].ParamType; - DataType := ASource.DataUpdateCall.Params[i].DataType; - Value := ASource.DataUpdateCall.Params[i].Value; - UserClassName := ASource.DataUpdateCall.Params[i].UserClassName; - end; + bCambiado := bCambiado or + ((TDADataTable(dtDetails.Items[i])).State in dsEditModes) or + ((TDADataTable(dtDetails.Items[i])).HasDelta and + DeltaValuesAreDifferent((TDADataTable(dtDetails.Items[i])).Delta)); + if bCambiado then + Break; end; end; - - with ScriptCall do - begin - MethodName := ASource.ScriptCall.MethodName; - for i := 0 to ASource.ScriptCall.Params.Count - 1 do - begin - with Params.Add do begin - Name := ASource.ScriptCall.Params[i].Name; - ParamType := ASource.ScriptCall.Params[i].ParamType; - DataType := ASource.ScriptCall.Params[i].DataType; - Value := ASource.ScriptCall.Params[i].Value; - UserClassName := ASource.ScriptCall.Params[i].UserClassName; - end; - end; - end; - - with DataRequestCall do - begin - MethodName := ASource.DataRequestCall.MethodName; - for i := 0 to ASource.DataRequestCall.Params.Count - 1 do - begin - with Params.Add do begin - begin - Name := ASource.DataRequestCall.Params[i].Name; - ParamType := ASource.DataRequestCall.Params[i].ParamType; - DataType := ASource.DataRequestCall.Params[i].DataType; - Value := ASource.DataRequestCall.Params[i].Value; - UserClassName := ASource.DataRequestCall.Params[i].UserClassName; - end; - end; - end; - end; - } - // ****** Fin migración DA 5 - - with MasterParamsMappings do - for i := 0 to ASource.MasterParamsMappings.Count - 1 do - Add(ASource.MasterParamsMappings.Strings[i]); - - with MasterRequestMappings do - for i := 0 to ASource.MasterRequestMappings.Count - 1 do - Add(ASource.MasterRequestMappings.Strings[i]); - - MasterMappingMode := ASource.MasterMappingMode; - - MasterFields := ASource.MasterFields; - MasterOptions := ASource.MasterOptions; - - DetailFields := ASource.DetailFields; - DetailOptions := ASource.DetailOptions; - - RemoteUpdatesOptions := ASource.RemoteUpdatesOptions; - StreamingOptions := ASource.StreamingOptions; - RemoteFetchEnabled := ASource.RemoteFetchEnabled; - end; - - if not RemoteUpdate then - begin - ATarget.LogChanges := False; - ATarget.RemoteFetchEnabled := False; end; + Result := bCambiado; end; +end. diff --git a/Source/ControlesBase/Cliente/uDateUtils.pas b/Source/Base/Utiles/uDateUtils.pas similarity index 65% rename from Source/ControlesBase/Cliente/uDateUtils.pas rename to Source/Base/Utiles/uDateUtils.pas index d46a72b..5d3c3e6 100644 --- a/Source/ControlesBase/Cliente/uDateUtils.pas +++ b/Source/Base/Utiles/uDateUtils.pas @@ -1,15 +1,13 @@ -{*******************************************************} -{ } -{ Administración de puntos de venta } -{ } -{ Copyright (C) 2006 Rodax Software S.L. } -{ } -{*******************************************************} - unit uDateUtils; interface +uses + SysUtils, Classes; + +function DarFechaPrimerDia(Date: TDateTime): TDateTime; +function DarFechaUltimoDia(Date: TDateTime): TDateTime; +function EsFechaVacia(AFecha : TDateTime): Boolean; function NumberDayOfTheWeek(const ADay : String) : Word; function NumberMonthOfTheYear(const AMonth : String) : Word; @@ -18,6 +16,9 @@ implementation uses DateUtils; +const + FECHA_NULA = -700000; + function NumberDayOfTheWeek(const ADay : String) : Word; begin if (ADay = 'Monday') or (ADay = 'Lunes') then @@ -64,5 +65,29 @@ begin Result := 12; end; + +function EsFechaVacia(AFecha : TDateTime): Boolean; +begin + Result := (AFecha = FECHA_NULA) or (AFecha = 0); +end; + +function DarFechaPrimerDia(Date: TDateTime): TDateTime; +var + Year, Month, Day: Word; +begin + DecodeDate(Date, Year, Month, Day); + Result := EncodeDate(Year, Month, 1); +end; + +function DarFechaUltimoDia(Date: TDateTime): TDateTime; +var + Year, Month, Day: Word; +begin + DecodeDate(Date, Year, Month, Day); + // (if Month < 12 then inc(Month) + // else begin Month := 1; inc(Year) end; + // Result := EncodeDate(Year, Month, 1) - 1; + Result := EncodeDate(Year, Month, + MonthDays[IsLeapYear(Year), Month]); +end; end. - \ No newline at end of file diff --git a/Source/Base/Utiles/uDialogUtils.pas b/Source/Base/Utiles/uDialogUtils.pas new file mode 100644 index 0000000..69b982b --- /dev/null +++ b/Source/Base/Utiles/uDialogUtils.pas @@ -0,0 +1,287 @@ +unit uDialogUtils; + +interface + +uses + Windows, Controls, SysUtils; + +type + TDlgButton = (TDlgButton_SI, TDlgButton_NO, TDlgButton_CANCELAR, + TDlgButton_ACEPTAR, TDlgButton_OK, TDlgButton_CERRAR); + TDlgButtonSet = set of TDlgButton; + + +//For example: +//1. to display the "OpenDialog" for text files +// +// s := 'aaa.txt'; +// if OpenFileDialog(Application.Handle, 'txt', 'Text Files|*.txt', 'c:\', 'Select text file', s) then +// ShowMessage(s + ' file was selected for open') +// +//2. to display the "Save dialog": +// +// s := 'data.dbf'; +// if SaveFileDialog(Application.Handle, 'dbf', 'dBase tables|*.dbf|All files|*.*', 'c:\', 'Select table', s) then +// ShowMessage(s + ' table was selected for save') + +function OpenFileDialog(ParentHandle: THandle; const DefExt, Filter, InitialDir, Title: string; var FileName: string): Boolean; +function SaveFileDialog(ParentHandle: THandle; const DefExt, Filter, InitialDir, Title: string; var FileName: string): Boolean; + + + + +procedure ShowInfoMessage(const AMessage : String); overload; +procedure ShowInfoMessage(const AHeader : String; const AMessage : String); overload; +procedure ShowWarningMessage(const AMessage : String); overload; +procedure ShowWarningMessage(const AHeader : String; const AMessage : String); overload; +procedure ShowErrorMessage(const AHeader : String; const AMessage : String); overload; +procedure ShowErrorMessage(const AHeader : String; const AMessage : String; AException: Exception); overload; + +function ShowConfirmMessage(const AHeader : String; + const AMessage : String) : TModalResult; overload; + +function ShowConfirmMessage(const ATitle : String; + const AHeader : String; + const AMessage : String; + const AButtonSet: TDlgButtonSet) : TModalResult; overload; + +implementation + +uses + Forms, + CommDlg, + JSDialog, + JSDialogs, + Classes, + StrUtils; + +const + sBtnSi = '&Si'; + sBtnNo = '&No'; + sBtnCancelar = '&Cancelar'; + sBtnAceptar = '&Aceptar'; + sBtnOK = '&OK'; + sBtnCerrar = '&Cerrar'; + + +function CharReplace(const Source: string; oldChar, newChar: Char): string; +var + i: Integer; +begin + Result := Source; + for i := 1 to Length(Result) do + if Result[i] = oldChar then + Result[i] := newChar +end; + +function OpenSaveFileDialog(ParentHandle: THandle; const DefExt, Filter, InitialDir, Title: string; var FileName: string; + MustExist, OverwritePrompt, NoChangeDir, DoOpen: Boolean): Boolean; +var + ofn: TOpenFileName; + szFile: array[0..MAX_PATH] of Char; +begin + Result := False; + FillChar(ofn, SizeOf(TOpenFileName), 0); + FillChar(szFile, SizeOf(szFile), 0); + with ofn do + begin + lStructSize := SizeOf(TOpenFileName); + hwndOwner := ParentHandle; + lpstrFile := szFile; + nMaxFile := SizeOf(szFile); + if (Title <> '') then + lpstrTitle := PChar(Title); + if (InitialDir <> '') then + lpstrInitialDir := PChar(InitialDir); + StrPCopy(lpstrFile, FileName); + lpstrFilter := PChar(ReplaceStr(Filter, '|', #0)+#0#0); + if DefExt <> '' then + lpstrDefExt := PChar(DefExt); + end; + + if MustExist then + ofn.Flags := ofn.Flags or OFN_FILEMUSTEXIST; + + if OverwritePrompt then + ofn.Flags := ofn.Flags or OFN_OVERWRITEPROMPT; + + if NoChangeDir then + ofn.Flags := ofn.Flags or OFN_NOCHANGEDIR; + + if DoOpen then + begin + if GetOpenFileName(ofn) then + begin + Result := True; + FileName := StrPas(szFile); + end; + end + else + begin + if GetSaveFileName(ofn) then + begin + Result := True; + FileName := StrPas(szFile); + end; + end +end; + +function OpenFileDialog(ParentHandle: THandle; const DefExt, Filter, InitialDir, Title: string; var FileName: string): Boolean; +begin + Result := OpenSaveFileDialog(ParentHandle, DefExt, Filter, InitialDir, Title, FileName, True, False, False, True); +end; + +function SaveFileDialog(ParentHandle: THandle; const DefExt, Filter, InitialDir, Title: string; var FileName: string): Boolean; +begin + Result := OpenSaveFileDialog(ParentHandle, DefExt, Filter, InitialDir, Title, FileName, False, True, True, False); +end; + + +function CreateTaskDialog(const ATitle: String; + const AInstruction: String; + const AMessage: String; + const AIcon: TTaskDialogIcon): TJSDialog; +var + ADialog : TJSDialog; +begin + ADialog := TJSDialog.Create(NIL); + with ADialog do + begin + Position := dpScreenCenter; + ButtonBar.Buttons := []; + DialogOptions := [doModal, doTopMost]; + + Title := ATitle; + Instruction.Text := AInstruction; + Content.Text := AMessage; + MainIcon := AIcon; + end; + Result := ADialog; +end; + +procedure CreateCustomButtons(const AButtonSet: TDlgButtonSet; + ACustomButtons : TJSCustomButtons); + + function CreateButton(const ACaption: String; const AModalResult: TModalResult): TJSCustomButtonItem; + begin + Result := ACustomButtons.Add; + Result.Caption := ACaption; + Result.ModalResult := AModalResult; + end; + +begin + with ACustomButtons do + begin + Clear; + + if TDlgButton_SI in AButtonSet then + CreateButton(sBtnSi, mrYes); + + if TDlgButton_NO in AButtonSet then + CreateButton(sBtnNo, mrNo); + + if TDlgButton_CANCELAR in AButtonSet then + CreateButton(sBtnCancelar, mrCancel); + + if TDlgButton_ACEPTAR in AButtonSet then + CreateButton(sBtnAceptar, mrOk); + + if TDlgButton_OK in AButtonSet then + CreateButton(sBtnOK, mrOk); + + if TDlgButton_CERRAR in AButtonSet then + CreateButton(sBtnCerrar, mrNone); + end; +end; + +procedure ShowInfoMessage(const AHeader : String; const AMessage : String); overload; +var + ADialog : TJSDialog; +begin + ADialog := CreateTaskDialog('Información', AHeader, AMessage, tdiInformation); + try + CreateCustomButtons([TDlgButton_CERRAR], ADialog.CustomButtons); + ADialog.Execute; + finally + FreeAndNIL(ADialog); + end; +end; + +procedure ShowInfoMessage(const AMessage : String); +begin + ShowInfoMessage('', AMessage); +end; + +procedure ShowWarningMessage(const AHeader : String; const AMessage : String); overload; +var + ADialog : TJSDialog; +begin + ADialog := CreateTaskDialog('¡Atención!', AHeader, AMessage, tdiWarning); + try + CreateCustomButtons([TDlgButton_CERRAR], ADialog.CustomButtons); + ADialog.Execute; + finally + FreeAndNIL(ADialog); + end; +end; + +procedure ShowWarningMessage(const AMessage : String); +begin + ShowWarningMessage('', AMessage); +end; + +procedure ShowErrorMessage(const AHeader : String; const AMessage : String); +var + ADialog : TJSDialog; +begin + ADialog := CreateTaskDialog(Application.Title, AHeader, AMessage, tdiError); + try + CreateCustomButtons([TDlgButton_CERRAR], ADialog.CustomButtons); + ADialog.Execute; + finally + FreeAndNIL(ADialog); + end; +end; + +procedure ShowErrorMessage(const AHeader : String; const AMessage : String; AException: Exception); +var + ADialog : TJSDialog; +begin + ADialog := CreateTaskDialog(Application.Title, AHeader, AMessage, tdiError); + try + CreateCustomButtons([TDlgButton_CERRAR], ADialog.CustomButtons); + ADialog.Expando.Lines.Text := #13#13 + AException.Message; + ADialog.Expando.ShowText := 'Mostrar información sobre el error'; + ADialog.Expando.HideText := 'No mostrar información sobre el error'; + ADialog.Expando.Visible := True; + ADialog.Execute; + finally + FreeAndNIL(ADialog); + end; +end; + +function ShowConfirmMessage(const AHeader : String; + const AMessage : String) : TModalResult; +begin + Result := ShowConfirmMessage(Application.Title, AHeader, + AMessage, [TDlgButton_SI, TDlgButton_NO]); +end; + +function ShowConfirmMessage(const ATitle : String; + const AHeader : String; + const AMessage : String; + const AButtonSet: TDlgButtonSet) : TModalResult; +var + ADialog : TJSDialog; +begin + ADialog := CreateTaskDialog(Application.Title, AHeader, AMessage, tdiConfirmation); + try + CreateCustomButtons(AButtonSet, ADialog.CustomButtons); + Result := ADialog.Execute; + finally + FreeAndNIL(ADialog); + end; +end; + +end. + diff --git a/Source/Base/uEditorUtils.pas b/Source/Base/Utiles/uEditorUtils.pas similarity index 100% rename from Source/Base/uEditorUtils.pas rename to Source/Base/Utiles/uEditorUtils.pas diff --git a/Source/Base/uGridUtils.pas b/Source/Base/Utiles/uGridUtils.pas similarity index 100% rename from Source/Base/uGridUtils.pas rename to Source/Base/Utiles/uGridUtils.pas diff --git a/Source/Base/uIntegerList.pas b/Source/Base/Utiles/uIntegerList.pas similarity index 100% rename from Source/Base/uIntegerList.pas rename to Source/Base/Utiles/uIntegerList.pas diff --git a/Source/Base/uSysFunc.pas b/Source/Base/Utiles/uSysFunc.pas similarity index 100% rename from Source/Base/uSysFunc.pas rename to Source/Base/Utiles/uSysFunc.pas diff --git a/Source/Base/uConfigurarConexion.dfm b/Source/Base/uConfigurarConexion.dfm index 5a266e8..06fb34a 100644 --- a/Source/Base/uConfigurarConexion.dfm +++ b/Source/Base/uConfigurarConexion.dfm @@ -2,7 +2,6 @@ object fConfigurarConexion: TfConfigurarConexion Left = 663 Top = 468 ActiveControl = edtServer - AutoScroll = False Caption = 'Configuraci'#243'n de la conexi'#243'n' ClientHeight = 149 ClientWidth = 392 @@ -90,12 +89,10 @@ object fConfigurarConexion: TfConfigurarConexion TabOrder = 3 end object HTTPChannel: TROWinInetHTTPChannel - ServerLocators = <> - DispatchOptions = [] - ProbeServers = False - ProbeFrequency = 60000 UserAgent = 'AdminPV' TargetURL = 'http://localhost:8099/BIN' + ServerLocators = <> + DispatchOptions = [] Left = 120 Top = 112 end @@ -104,9 +101,9 @@ object fConfigurarConexion: TfConfigurarConexion Top = 112 end object CoService: TRORemoteService - ServiceName = 'srvLogin' Message = ROBinMessage Channel = HTTPChannel + ServiceName = 'srvLogin' Left = 184 Top = 112 end diff --git a/Source/Base/uConfigurarConexion.pas b/Source/Base/uConfigurarConexion.pas index 035d05a..116ff7c 100644 --- a/Source/Base/uConfigurarConexion.pas +++ b/Source/Base/uConfigurarConexion.pas @@ -36,7 +36,7 @@ var implementation uses - StrUtils, JclStrings, uDataModuleBase, VARELA_Intf; + StrUtils, JclStrings, uDMBase, VARELA_Intf; {$R *.dfm} diff --git a/Source/Base/uDMBase.dfm b/Source/Base/uDMBase.dfm new file mode 100644 index 0000000..5f633ba --- /dev/null +++ b/Source/Base/uDMBase.dfm @@ -0,0 +1,1660 @@ +object dmBase: TdmBase + OldCreateOrder = True + OnCreate = DAClientDataModuleCreate + Height = 352 + Width = 518 + object SmallImages: TPngImageList + PngImages = < + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000002224944415478DA + 95935D48936114C77FCB36584A6064161515DEA441108B240293E8A682246805 + DEA45020F40196505D081242DE94512B8C20169937056914D52E726B6083B114 + D44CD3D51A216BB6656B5FEF677B5FF31D23033DF070CE03CFFFF73F1CCE6362 + 29D1806AD44E4C5A32F5F58FAA8BD5D73DD8465757034D4D4EFA4E8C62000ED7 + 56E997647490DFE131BD2ED9584971D98EB9478D2603D279B39EE6733DC6DD00 + 68E2EF7E07E95F2291688C48629ABDC71DACABD8AD0334E7B420104D24F4A3D5 + DDD707E60087F66C2234D0CECF2F41643987556566676799C9C4387AD18FF964 + 91E178EA522DF73ADC851D1CA85ECD27D77948995861B552844C2A9962303441 + DD051FA22473E5095C735B3972DAC6D3DB016EED7BC9FD47CFE601E57CF3B661 + C966D1E62C880299549A696915B6639D4892A243D6B6AC349C0B00DA0C22EF7B + 484EBDCA015424512491125036D751B1CBAE8BB5330F12459937EF860A01DEA0 + 8BA0FB0E5B154BAE832C810CACDF594F4DD5C17FC45AF6FA87F3800D95022DFD + ADC47E84682CDF8F222A3C9CF1303915E6C3E5495DDC7AE379C14E546F5F9307 + F8E4C7BC187F4BA6344E49D24C6E8A24AD12E65809A1895102CD6386B3F8B793 + C0F0C73CC0196927188E2297651096A7D096D4922D6659DCC2E7AF43F8CE8C70 + F5AEEBFF1D9CF5D889C7230BAE6F696939BDF6D7BAABACA87A567279647C320F + A8B16DA1BBD7B3A47FA5850168EB702C596C6CA2AA2EFA332E187F0080F1503E + 182A98A90000000049454E44AE426082} + Name = 'PngImage0' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000774494D45000000000000000973942E000000097048597300001712 + 0000171201679FD252000001724944415478DA6364A0103062135CB1E2C26E20 + E5824F63448401235603809AA381D412374F5506413E2EB0D89FBFFF187EFFF9 + 0BC62F3EFD6728A999C0B0795E15A60150CD1540CD3A7B4FDCC5B0D5D94299E1 + CAD3BF0CDD3D53F280064CC666C06EA066176C36FF05B25F7F6544B11DC50098 + D3C3C3F519D6ECBA8C61BBBDA922C38D17FF41B6C384B6020DF261846AFE0FA4 + AE809C0EB21DDD6610FFCF9F7F0CE91553194CF49518A4558D1836AE59037609 + 23C8E6AB4F2E2C2136DAE4B5AC186E9CD9C570F3C1278801B53D0BFE3715C7E3 + D4F0E5C75F86CFDF8118487FF9F18F61C3BA350C12CA260C3B366F4218408CCD + 17AE3D03D3065A520CEC42AA0C278F1CC4EF02749BBF82F0CFBF0CC7F66E64F8 + C92AC970FDE259DC06A06BAE3DEFC390ABB49EE1FEB5530CCF9F3F6778FA919D + E1F5D3FBD80DC066F3AC743D8680EEB30CAFEE9E61D8BEF72C4CA90CD080A770 + 03A62FDB45542C400D006B062724DFA4366920FD84D86844D68C9212C905001F + 16FA1194E3DBC30000000049454E44AE426082} + Name = 'PngImage1' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD2520000016A4944415478DA + 63FCFFFF3F03082CDD7212C22000627C2D18616C905E466403A27DCCF16A06AA + 61E89DB290E1FCCEE98C241BF0EFDF3F86E5DB4E33488B093314D5F5810D21DA + 0090E6DF7FFE31ACD97596C1C9429BE1E6BD176043CEED98C688D3804D0F0E30 + F45E6A02B37779EC62E05CC0C6B058EA38D80B3080D30090E6805D4E182E7911 + FC91E1C4E5C70C8F1E3F6298B774137603609AFFA4FC013B1B64738BB13743CD + D9AD0C8FFDDF81C5B6EC3B85DB00A6594C289A91C13DEF3740F1BF0C3B0F9DC5 + 6D0048C1EFDF7F21F49F7F50FA2FC31F181F2877E0E445EC068479988015F02C + E640B1F98EE72BB066CDDD120C676D1E311C3D7B05BB0181CE8660DB049773C3 + FD8DAC3957BB80219A379FE1D4C5EBD80DF0B1D7032B165BCD8B110330CD200B + CE5FBD85DD00776B1DB002E9F502609B13CF8781E50C840DE09A41165CB97907 + BB014EE69A1801060B44986610C06980ADB11AC3A63D2789C994D80D404EA6C4 + 0090010087546EF0ACB0C7920000000049454E44AE426082} + Name = 'PngImage2' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 61000000097048597300000AEB00000AEB01828B0D5A000002854944415478DA + A5935D48536118C7FFAFDB8CCD557E7F34B33167F9119617A91596495D781304 + 451021A651362821B1ABA49B6EA4460961D88542055D84DD6545415992174994 + 9625CC8F9C329D9B5F3BE9CED9D9797BCEA1C932A3A0079EC3CBE13CBFE7FF7F + 9FF330CE39FE2798FAB80BA4E61559EB2551E67B07279AE8D51FA98F2CC99546 + 031A3D6E5FF329993F631D80B52227A6D7929F9BAEA459D1D73BE8DC3330D6B8 + 1AD206641414DA5A6224E1E8ECA47779660955D532EF642F1371BD74331A14FA + 9C27A4439F5D88777DAE1B65FD230D11485786B9363D65FD35C1EB4B9817427E + 9F80C335C05BD53E23B2A934132FB23662B71406C2B14698F38AF0E9EB9473E8 + E3C8655BD686D6F858A5DA3F27B04511E37E0195B5C0A00AD6003FE5259758F0 + 3AD1843C15125218CCB6AD707FF34EAC93973217041154ECF608D8770E188BD8 + 5A01A8A1DEC5F60CF4980CB0A890E8A47AFFF477EC3F037C8EBE975F006ADC37 + 60A7351E3D061DE222C522A5270047AD82DBAB27B21AC09EDA373525E9A52BCB + 7E5F4CB4822509BE80848AB3C0C09A806380EE7CA1BDC55EB4CDE17AF2984932 + 75A60CCA088739742A84CE1E49C1010730F41BA03B27CD595C517CB1FFF92B04 + E6035AF142101DCB12DA743AB413243FA468331D0F01E51780D1154057AAF148 + D92E7BE794778E8DB92634C901116FA6451CAA27214EC06802AE5227AA839ED2 + 45A0729AC6A406182DD9329C10A7B7F57D18D63A93DF99D92076905F4FB4DF56 + A08C20ED9476027CD1209C7BD9FBDC947BC1C0E2C9596A4B003E27E2F8E9301E + AEB507B700334968A6631D019C759C5F627780822413BA194312CDFB41958C13 + 7FDB4052739000430ECEDD913F313B568F9B8B326AC8F7CCBFAEB27A073F0058 + 5538F0EAB25B380000000049454E44AE426082} + Name = 'PngImage3' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD2520000011F4944415478DA + 63FCFFFF3F03258091620390394975ABC1A6BD79FB8561D3D4444642E220CB31 + 0C985113C8A0E6D6C4F0E040132321711403408A40367CFCF28DE1E1C3970C7A + DA8A60DB708963350064CBF6938F18966C3EC770FAD425B06DB8C409BA000440 + B68908F330A08B631800D23CB73184E1D9CB4F0C775EFD6598B2641FD8A68208 + 2F864BCF1E33A0CB71BF7AC2B0604101380619571EBDFB7FE7CE730CD9518E60 + D3F79CB8C770E6DA23B0013017609373501062983F3F9F111E4820F0F8C52730 + FDFEED5B30CDC2FC91C1CEDA860197FCFDFD8D8CF040DA77EE39C395DBAF182E + DF7DC370F0C051ACD188AE66901A70F2F27D94B8C666004C0DDC801F3F7F323C + 7DF191E1D78F9F0CCF5F7E40896B9801D8D4800DA0343702001BEF6EF0E3CC7C + BD0000000049454E44AE426082} + Name = 'PngImage4' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000002234944415478DA + A5934F4814511CC7BF6BBAB0AD97225B2A2B4B88ECB014861241ED2190FE9017 + 2D15843A74E8E0A14D3282608935920E092D7A10A44C25A843497FEDA0EB422D + 2DE6A2F647ADA5C542A6DD76DB6CC79979F3DE34F3CA99C4BAB40F1EEF0DEF7D + 3FDFEFFC783F9BA669C865D8EE0FBDCE89C001473D3BF8473631861FB36FF9BE + 7063199C45BBCC8B4C4FAAAA0C44A5E6ACAA3F67010CF19748000BDF0984440A + C2FC1CF61F0F605DE91EA894E17CAFB2C4B9246F18DD7D03BF0087F76E46FCB9 + 1FDF3EC640A97EAA5164321924A5146A5A22A6A391C0E971724097F7B1053858 + B90633835E40B461A5C38115A010B322C6E2D3A83E1BE6E24B7781D676070A1A + 9A40FAAFA3270A74569D5E04B8F039E4835D96757740210A24710173EA6A941F + BBC69D676E3BF169EB3892E37DC86B6EE3294C805103E1553FB21F9EE800BD58 + 84605E54C04AAA515A51CBC5EE230108D38F7073A402EB7D3EC83D7FFC820108 + C506111BEEC07666D713C81895800DBB1BB0E94D9D2936668DBF180F9E85118A + 4C5880E23205CD431791FA1AC749D70130C2702B1944A73DBA4CECA96BE5F12B + DD6B2D4098DEC1C3A91148ABD228CC1640AF223A94977F7526BFDFC2E8C43B0B + 7043F023369B002D92A0E48BF0CA67B09334C2B5EDD032E7C5B1244153B016E9 + B4601E5E75B7E344633DA2DDF95C3CF0F40577A54CE32BD3D7C9A9F716605FF9 + 16F4DE0B9A80B60BA7CC7DCBE5AE7FF68109F05D09FC7F33E5DACE3F0109DB53 + BED36F80890000000049454E44AE426082} + Name = 'PngImage5' + Background = clWindow + end> + PngOptions = [pngBlendOnDisabled, pngGrayscaleOnDisabled] + Left = 24 + Top = 16 + Bitmap = {} + end + object TBXSwitcher: TTBXSwitcher + Theme = 'Default' + Left = 24 + Top = 80 + end + object StyleManager: TJvNavPaneStyleManager + Colors.ButtonColorFrom = clWhite + Colors.ButtonColorTo = 12435133 + Colors.ButtonHotColorFrom = 13009540 + Colors.ButtonHotColorTo = 13009540 + Colors.ButtonSelectedColorFrom = 14602190 + Colors.ButtonSelectedColorTo = 14602190 + Colors.SplitterColorFrom = 13026246 + Colors.SplitterColorTo = 9211532 + Colors.DividerColorFrom = 15725551 + Colors.DividerColorTo = 13026246 + Colors.HeaderColorFrom = 8684164 + Colors.HeaderColorTo = 8684164 + Colors.FrameColor = 8684676 + Colors.ToolPanelHeaderColorFrom = clWhite + Colors.ToolPanelHeaderColorTo = 12435133 + Fonts.NavPanelFont.Charset = DEFAULT_CHARSET + Fonts.NavPanelFont.Color = clWindowText + Fonts.NavPanelFont.Height = -13 + Fonts.NavPanelFont.Name = 'Tahoma' + Fonts.NavPanelFont.Style = [] + Fonts.NavPanelHotTrackFont.Charset = DEFAULT_CHARSET + Fonts.NavPanelHotTrackFont.Color = clWindow + Fonts.NavPanelHotTrackFont.Height = -13 + Fonts.NavPanelHotTrackFont.Name = 'Tahoma' + Fonts.NavPanelHotTrackFont.Style = [] + Fonts.DividerFont.Charset = DEFAULT_CHARSET + Fonts.DividerFont.Color = clWindowText + Fonts.DividerFont.Height = -11 + Fonts.DividerFont.Name = 'Tahoma' + Fonts.DividerFont.Style = [] + Fonts.HeaderFont.Charset = DEFAULT_CHARSET + Fonts.HeaderFont.Color = clWindow + Fonts.HeaderFont.Height = -16 + Fonts.HeaderFont.Name = 'Arial' + Fonts.HeaderFont.Style = [fsBold] + Theme = nptCustom + Left = 104 + Top = 80 + end + object ROChannel: TROWinInetHTTPChannel + OnFailure = ROChannelFailure + OnException = ROChannelFailure + UserAgent = 'RemObjects SDK' + TargetURL = 'http://localhost:8099/bin' + Login.Username = 'zvg' + Login.Password = 'zeus' + KeepConnection = True + OnProgress = ROChannelProgress + ServerLocators = <> + DispatchOptions = [] + Left = 330 + Top = 24 + end + object cxIntl: TcxIntl + Connected = True + cxLibrary.CantCreateRegistryKey = 'No se puede crear la llave de registro : \%s' + PageControl2.ImageListIndexError = 'El '#237'ndice (%d) deber'#225' estar entre 0 y %d' + PageControl2.NoBaseImages = 'BaseImages no est'#225' asignado' + PageControl2.NoRegisteredStyles = 'No hay estilos registrados' + PageControl2.PageIndexError = '%d es un valor inv'#225'lido para PageIndex, debe estar entre 0 y %d' + PageControl2.PainterClassError = 'La clase PCPainter es nula' + PageControl2.StandardStyleError = '%s es un estilo est'#225'ndar no soportado' + PageControl2.StyleNameError = '%s es un nombre de estilo no registrado' + PageControl2.TabCountEqualsZero = 'Tabs.Count = 0' + PageControl2.TabIndexError = 'El '#237'ndice de la pesta'#241'a (%d) est'#225' fuera de l'#237'mites' + PageControl2.TabVisibleIndexOutsOfBounds = 'Propiedad TabVisibleIndex (%d) deber'#225' estar entre 0 y %d' + PageControl2.VisibleTabListEmpty = 'No hay pesta'#241'as visibles' + QuantumGrid5.GridRecursiveLevels = 'No se pueden crear niveles recursivos' + QuantumGrid5.GridDeletingConfirmationCaption = 'Confirmar' + QuantumGrid5.GridDeletingFocusedConfirmationText = #191'Borrar registro?' + QuantumGrid5.GridDeletingSelectedConfirmationText = #191'Borrar todos los registros seleccionados?' + QuantumGrid5.GridNoDataInfoText = '' + QuantumGrid5.GridNewItemRowInfoText = 'Haga click aqu'#237' para agregar una nueva l'#237'nea' + QuantumGrid5.GridFilterIsEmpty = '' + QuantumGrid5.GridCustomizationFormCaption = 'Personalizaci'#243'n' + QuantumGrid5.GridCustomizationFormColumnsPageCaption = 'Columnas' + QuantumGrid5.GridGroupByBoxCaption = 'Arrastre una columna aqu'#237' para agrupar por dicha columna' + QuantumGrid5.GridFilterCustomizeButtonCaption = 'Personalizar...' + QuantumGrid5.GridColumnsQuickCustomizationHint = 'Haga click aqu'#237' para seleccionar las columas visibles' + QuantumGrid5.GridCustomizationFormBandsPageCaption = 'Bandas' + QuantumGrid5.GridBandsQuickCustomizationHint = 'Haga click aqu'#237' para seleccionar las bandas visibles' + QuantumGrid5.GridCustomizationFormRowsPageCaption = 'Rows' + QuantumGrid5.GridConverterIntermediaryMissing = 'Omiti'#243' un componente intermediario!' + QuantumGrid5.GridConverterNotExistGrid = 'cxGrid no existe' + QuantumGrid5.GridConverterNotExistComponent = 'El componente no existe' + QuantumGrid5.ImportErrorCaption = 'Error al importar' + QuantumGrid5.NotExistGridView = 'No existe la vista del grid' + QuantumGrid5.NotExistGridLevel = 'No existe un nivel de grid activo' + QuantumGrid5.CantCreateExportOutputFile = 'No se puede crear el archivo de exportaci'#243'n' + QuantumGrid5.EditRepositoryExtLookupComboBoxItem = + 'ExtLookupComboBox|Representa un ultra avanzado control de busque' + + 'da (lookup) usando el QuantumGrid como su control de despliegue' + Navigator.NavigatorHint_First = 'Primer registro' + Navigator.NavigatorHint_Prior = 'Registro anterior' + Navigator.NavigatorHint_PriorPage = 'P'#225'gina anterior' + Navigator.NavigatorHint_Next = 'Siguiente registro' + Navigator.NavigatorHint_NextPage = 'Siguiente p'#225'gina' + Navigator.NavigatorHint_Last = #218'ltimo registro' + Navigator.NavigatorHint_Insert = 'Insertar registro' + Navigator.NavigatorHint_Delete = 'Borrar registro' + Navigator.NavigatorHint_Edit = 'Editar registro' + Navigator.NavigatorHint_Post = 'Grabar edici'#243'n' + Navigator.NavigatorHint_Cancel = 'Cancelar edici'#243'n' + Navigator.NavigatorHint_Refresh = 'Actualizar datos' + Navigator.NavigatorHint_SaveBookmark = 'Guardar Marca' + Navigator.NavigatorHint_GotoBookmark = 'Volver a Marca' + Navigator.NavigatorHint_Filter = 'Filtrar datos' + Navigator.Navigator_DeleteRecordQuestion = #191'Desea borrar este el registro?' + Editors5.EditDateConvertError = 'El valor no se puede convertir a fecha' + Editors5.EditInvalidRepositoryItem = 'Elemento de repositorio no v'#225'lido' + Editors5.EditNumericValueConvertError = 'No se puede convertir a valor num'#233'rico' + Editors5.EditPopupCircularReferencingError = 'Referencia circular no permitida' + Editors5.EditPostError = 'Ocurri'#243' un error durante el grabado del valor de edici'#243'n' + Editors5.EditTimeConvertError = 'No se puede convertir a valor de tiempo' + Editors5.EditValidateErrorText = 'Valor inv'#225'lido. Use la tecla de escape para cancelar cambios' + Editors5.EditValueOutOfBounds = 'Valor fuera de l'#237'mites' + Editors5.EditCheckBoxChecked = 'True' + Editors5.EditCheckBoxUnchecked = 'False' + Editors5.TextTrue = 'True' + Editors5.TextFalse = 'False' + Editors5.BlobButtonOK = '&Aceptar' + Editors5.BlobButtonCancel = '&Cancelar' + Editors5.BlobButtonClose = '&Cerrar' + Editors5.BlobMemo = '(MEMO)' + Editors5.BlobMemoEmpty = '(memo)' + Editors5.BlobPicture = '(IM'#193'GEN)' + Editors5.BlobPictureEmpty = '(im'#225'gen)' + Editors5.MenuItemCaptionCut = 'Cor&tar' + Editors5.MenuItemCaptionCopy = '&Copiar' + Editors5.MenuItemCaptionPaste = '&Pegar' + Editors5.MenuItemCaptionDelete = '&Borrar' + Editors5.MenuItemCaptionLoad = '&Leer...' + Editors5.MenuItemCaptionSave = 'Guardar &Como...' + Editors5.DatePopupClear = 'Limpiar' + Editors5.DatePopupNow = 'Ahora' + Editors5.DatePopupOK = 'Aceptar' + Editors5.DatePopupToday = 'Hoy' + Editors5.DateError = 'Fecha inv'#225'lida' + Editors5.DateToday = 'hoy' + Editors5.DateYesterday = 'ayer' + Editors5.DateTomorrow = 'ma'#241'ana' + Editors5.DateSunday = 'Domingo' + Editors5.DateMonday = 'Lunes' + Editors5.DateTuesday = 'Martes' + Editors5.DateWednesday = 'Mi'#233'rcoles' + Editors5.DateThursday = 'Jueves' + Editors5.DateFriday = 'Viernes' + Editors5.DateSaturday = 'S'#225'bado' + Editors5.DateFirst = 'Primero' + Editors5.DateSecond = 'segundo' + Editors5.DateThird = 'tercero' + Editors5.DateFourth = 'Cuarto' + Editors5.DateFifth = 'Quinto' + Editors5.DateSixth = 'sexto' + Editors5.DateSeventh = 's'#233'ptimo' + Editors5.DateBOM = 'bom' + Editors5.DateEOM = 'eom' + Editors5.DateNow = 'ahora' + Editors5.CalcError = 'Error' + Editors5.HyperLinkPrefix = 'http://' + Editors5.HyperLinkDoubleSlash = '//' + Editors5.EditRepositoryBlobItem = 'BlobEdit|Representa el editor de BLOB' + Editors5.EditRepositoryButtonItem = + 'ButtonEdit|Representa un control de edici'#243'n con controles incrus' + + 'tados' + Editors5.EditRepositoryCalcItem = + 'CalcEdit|Representa un control de edici'#243'n con una ventana de cal' + + 'culadora desplegable' + Editors5.EditRepositoryCheckBoxItem = + 'CheckBox|Representa un control de caja de marca que permite sele' + + 'ccionar una opci'#243'n' + Editors5.EditRepositoryComboBoxItem = 'ComboBox|Representa el editor de la caja combo' + Editors5.EditRepositoryCurrencyItem = + 'CurrencyEdit|Representa un editor que habilita la edici'#243'n de val' + + 'ores monetarios' + Editors5.EditRepositoryDateItem = + 'DateEdit|Representa un control de edici'#243'n con un calendario desp' + + 'legable' + Editors5.EditRepositoryHyperLinkItem = 'HyperLink|Representa un editor de texto de hiperv'#237'nculos' + Editors5.EditRepositoryImageComboBoxItem = + 'ImageComboBox|Representa un editor que muestra una lista de im'#225'g' + + 'enes y texto en la ventana desplegable' + Editors5.EditRepositoryImageItem = 'Image|Representa un editor de im'#225'genes' + Editors5.EditRepositoryLookupComboBoxItem = 'LookupComboBox|Representa una caja de b'#250'squeda' + Editors5.EditRepositoryMaskItem = 'MaskEdit|Representa un control de edici'#243'n gen'#233'rico con m'#225'scara' + Editors5.EditRepositoryMemoItem = + 'Memo|Representa un control de edici'#243'n que permite editar datos m' + + 'emo' + Editors5.EditRepositoryMRUItem = + 'MRUEdit|Representa un editor de texto mostrando la lista de los ' + + 'elementos m'#225's recientemente usados (MRU) en una ventana desplega' + + 'ble' + Editors5.EditRepositoryPopupItem = + 'PopupEdit|Representa un control de edici'#243'n con una lista despleg' + + 'able' + Editors5.EditRepositorySpinItem = 'SpinEdit|Representa un editor de incrementos/decrementos (spin)' + Editors5.EditRepositoryRadioGroupItem = 'RadioGroup|Represents a group of radio buttons' + Editors5.EditRepositoryTextItem = 'TextEdit|Representa un editor de texto de l'#237'nea sencilla' + Editors5.EditRepositoryTimeItem = 'TimeEdit|Representa un editor mostrando valores de tiempo' + Editors5.RegExprLine = 'L'#237'nea' + Editors5.RegExprChar = 'Char' + Editors5.RegExprNotAssignedSourceStream = 'No se ha asignado el stream fuente' + Editors5.RegExprEmptySourceStream = 'El stream or'#237'gen est'#225' vac'#237'o' + Editors5.RegExprCantUsePlusQuantifier = 'El cuantificador '#39'+'#39' no puede aplicarse aqu'#237 + Editors5.RegExprCantUseStarQuantifier = 'El cuantificador '#39'*'#39' no puede aplicarse aqu'#237 + Editors5.RegExprCantCreateEmptyAlt = 'La alternativa no debe estar vac'#237'a' + Editors5.RegExprCantCreateEmptyBlock = 'El bloque no debe estar vac'#237'o' + Editors5.RegExprIllegalSymbol = 'S'#237'mbolo no permitido '#39'%s'#39 + Editors5.RegExprIllegalQuantifier = 'Cuantificador no permitido '#39'%s'#39 + Editors5.RegExprNotSupportQuantifier = 'El par'#225'metro cuantificador no es soportado' + Editors5.RegExprIllegalIntegerValue = 'Valor entero no permitido' + Editors5.RegExprTooBigReferenceNumber = 'N'#250'mero de referencia demasiado grande' + Editors5.RegExprCantCreateEmptyEnum = 'No puedo crear enumeraci'#243'n vac'#237'a' + Editors5.RegExprSubrangeOrder = 'El caracter de inicio del subrango debe ser menor al de fin' + Editors5.RegExprHexNumberExpected0 = 'Se esperaba n'#250'mero Hexadecimal' + Editors5.RegExprHexNumberExpected = 'N'#250'mero Hexadecimal esperado pero encontr'#243' '#39'%s'#39 + Editors5.RegExprMissing = 'Falta '#39'%s'#39 + Editors5.RegExprUnnecessary = 'Innecesario '#39'%s'#39 + Editors5.RegExprIncorrectSpace = 'Espacio incorrecto despu'#233's de '#39'\'#39 + Editors5.RegExprNotCompiled = 'Expresi'#243'n regular no compila' + Editors5.RegExprIncorrectParameterQuantifier = 'Cuantificador de par'#225'metros incorrecto' + Editors5.RegExprCantUseParameterQuantifier = 'The parameter quantifier cannot be applied here' + Editors5.MaskEditRegExprError = 'Errores en expresiones regulares:' + Editors5.MaskEditInvalidEditValue = 'El valor de edici'#243'n es inv'#225'lido' + Editors5.MaskEditNoMask = 'Ninguno' + Editors5.MaskEditIllegalFileFormat = 'Formato de archivo ilegal' + Editors5.MaskEditEmptyMaskCollectionFile = 'El archivo de colecci'#243'n de m'#225'scaras est'#225' vac'#237'o' + Editors5.MaskEditMaskCollectionFiles = 'Archivos de colecci'#243'n de m'#225'scaras' + Editors5.SpinEditInvalidNumericValue = 'Valor num'#233'rico no v'#225'lido' + Datacontroller.DataReadError = 'Error de lectura en or'#237'gen de datos' + Datacontroller.DataWriteError = 'Error de escritura en or'#237'gen de datos (stream)' + Datacontroller.DataItemExistError = 'El elemento ya existe' + Datacontroller.DataRecordIndexError = #205'ndice de registro fuera de rango' + Datacontroller.DataItemIndexError = #205'ndice de elemento fuera de rango' + Datacontroller.DataProviderModeError = 'La operaci'#243'n no es soportada en modo de proveedor (provider)' + Datacontroller.DataInvalidStreamFormat = 'Origen de datos (Stream) inv'#225'lido' + Datacontroller.DataRowIndexError = #205'ndice del elemento de fila fuera de rango' + Datacontroller.DataCustomDataSourceInvalidCompare = 'Instrucci'#243'n GetInfoForCompare no implementada' + Datacontroller.DBDetailFilterControllerNotFound = 'DetailFilterController no encontrado' + Datacontroller.DBNotInGridMode = 'La controladora de datos no est'#225' en modo de Grid' + Datacontroller.DBKeyFieldNotFound = 'Campo llave no encontrado' + Filter.FilterOperatorEqual = 'igual' + Filter.FilterOperatorNotEqual = 'no es igual' + Filter.FilterOperatorLess = 'es menor que' + Filter.FilterOperatorLessEqual = 'es menor o igual que' + Filter.FilterOperatorGreater = 'es mayor que' + Filter.FilterOperatorGreaterEqual = 'es mayor o igual que' + Filter.FilterOperatorLike = 'como' + Filter.FilterOperatorNotLike = 'no es como' + Filter.FilterOperatorBetween = 'entre' + Filter.FilterOperatorNotBetween = 'no entre' + Filter.FilterOperatorInList = 'en' + Filter.FilterOperatorNotInList = 'no en' + Filter.FilterOperatorYesterday = 'es ayer' + Filter.FilterOperatorToday = 'es hoy' + Filter.FilterOperatorTomorrow = 'es ma'#241'ana' + Filter.FilterOperatorLastWeek = 'es '#250'ltima semana' + Filter.FilterOperatorLastMonth = 'es '#250'ltimo mes' + Filter.FilterOperatorLastYear = 'es a'#241'o pasado' + Filter.FilterOperatorThisWeek = 'es esta semana' + Filter.FilterOperatorThisMonth = 'es este mes' + Filter.FilterOperatorThisYear = 'es este a'#241'o' + Filter.FilterOperatorNextWeek = 'es semana siguiente' + Filter.FilterOperatorNextMonth = 'es mes siguiente' + Filter.FilterOperatorNextYear = 'es a'#241'o pr'#243'ximo' + Filter.FilterAndCaption = 'y' + Filter.FilterOrCaption = 'o' + Filter.FilterNotCaption = 'no' + Filter.FilterBlankCaption = 'vac'#237'o' + Filter.FilterOperatorIsNull = 'es vac'#237'o' + Filter.FilterOperatorIsNotNull = 'no es vac'#237'o' + Filter.FilterOperatorBeginsWith = 'comienza con' + Filter.FilterOperatorDoesNotBeginWith = 'no comienza con' + Filter.FilterOperatorEndsWith = 'termina con' + Filter.FilterOperatorDoesNotEndWith = 'no termina con' + Filter.FilterOperatorContains = 'contiene' + Filter.FilterOperatorDoesNotContain = 'no contiene' + Filter.FilterBoxAllCaption = '(Todos)' + Filter.FilterBoxCustomCaption = '(Personalizado...)' + Filter.FilterBoxBlanksCaption = '(Vac'#237'os)' + Filter.FilterBoxNonBlanksCaption = '(No vac'#237'os)' + Filter.FilterBoolOperatorAnd = 'AND' + Filter.FilterBoolOperatorOr = 'OR' + Filter.FilterBoolOperatorNotAnd = 'NOT AND' + Filter.FilterBoolOperatorNotOr = 'NOT OR' + Filter.FilterRootButtonCaption = 'Filtro' + Filter.FilterAddCondition = 'Agregar &Condici'#243'n' + Filter.FilterAddGroup = 'Agregar &Grupo' + Filter.FilterRemoveRow = '&Remover Fila' + Filter.FilterClearAll = 'Limpiar &Todo' + Filter.FilterFooterAddCondition = 'Agregar una nueva condici'#243'n' + Filter.FilterGroupCaption = 'aplica a las siguientes condiciones' + Filter.FilterRootGroupCaption = '' + Filter.FilterControlNullString = '' + Filter.FilterErrorBuilding = 'No se puede construir filtro desde el or'#237'gen' + Filter.FilterDialogCaption = 'Filtro Personalizado' + Filter.FilterDialogInvalidValue = 'Valor inv'#225'lido' + Filter.FilterDialogUse = 'Usar' + Filter.FilterDialogSingleCharacter = 'para representar un caracter sencillo' + Filter.FilterDialogCharactersSeries = 'para representar cualquier serie de caracteres' + Filter.FilterDialogOperationAnd = 'Y' + Filter.FilterDialogOperationOr = 'O' + Filter.FilterDialogRows = 'Mostrar filas donde:' + Filter.FilterControlDialogCaption = 'Constructor de Filtro' + Filter.FilterControlDialogNewFile = 'sinnombre.flt' + Filter.FilterControlDialogOpenDialogCaption = 'Abrir un filtro existente' + Filter.FilterControlDialogSaveDialogCaption = 'Grabar el filtro activo a archivo' + Filter.FilterControlDialogActionSaveCaption = '&Guardar...' + Filter.FilterControlDialogActionOpenCaption = '&Abrir...' + Filter.FilterControlDialogActionApplyCaption = '&Aplicar' + Filter.FilterControlDialogActionOkCaption = 'Aceptar' + Filter.FilterControlDialogActionCancelCaption = 'Cancelar' + Filter.FilterControlDialogFileExt = 'flt' + Filter.FilterControlDialogFileFilter = 'Filtros (*.flt)|*.flt' + GridPopupMenu.GridNone = 'Ninguno' + GridPopupMenu.GridSortColumnAsc = 'Ordenar Ascendente' + GridPopupMenu.GridSortColumnDesc = 'Ordenar Descendente' + GridPopupMenu.GridClearSorting = 'Clear Sorting' + GridPopupMenu.GridGroupByThisField = 'Agrupar por este campo' + GridPopupMenu.GridRemoveThisGroupItem = 'Remover del grupo' + GridPopupMenu.GridGroupByBox = 'Panel "Agrupar por"' + GridPopupMenu.GridAlignmentSubMenu = 'Alineaci'#243'n' + GridPopupMenu.GridAlignLeft = 'Alineaci'#243'n Izquierda' + GridPopupMenu.GridAlignRight = 'Alineaci'#243'n Derecha' + GridPopupMenu.GridAlignCenter = 'Alineaci'#243'n Centrada' + GridPopupMenu.GridRemoveColumn = 'Remover esta columna' + GridPopupMenu.GridFieldChooser = 'Selector de campos' + GridPopupMenu.GridBestFit = 'Mejor distribuci'#243'n' + GridPopupMenu.GridBestFitAllColumns = 'Mejor distribuci'#243'n (Todas las columnas)' + GridPopupMenu.GridShowFooter = 'Pie' + GridPopupMenu.GridShowGroupFooter = 'Pies de grupo' + GridPopupMenu.GridSumMenuItem = 'Sumar' + GridPopupMenu.GridMinMenuItem = 'M'#237'nimo' + GridPopupMenu.GridMaxMenuItem = 'M'#225'ximo' + GridPopupMenu.GridCountMenuItem = 'Contar' + GridPopupMenu.GridAvgMenuItem = 'Promedio' + GridPopupMenu.GridNoneMenuItem = 'Ninguno' + GridExport.UnsupportedExport = 'Tipo de exportaci'#243'n no soportado: %1' + GridExport.StyleManagerKill = + 'El administrador de estilo esta siendo utilizado y no puede ser ' + + 'liberado en este momento' + GridExport.StyleManagerCreate = 'No se puede crear administrador de estilo' + GridExport.ExportToHtml = 'Exportar a p'#225'gina Web (*.html)' + GridExport.ExportToXml = 'Exportar a documento XML (*.xml)' + GridExport.ExportToText = 'Exportar a formato de texto (*.txt)' + GridExport.EmptyExportCache = 'Cache de exportaci'#243'n vac'#237'o' + GridExport.IncorrectUnion = 'Uni'#243'n de celdas incorrecta' + GridExport.IllegalWidth = 'Ancho de columna ilegal' + GridExport.InvalidColumnRowCount = 'Conteo de columna o fila inv'#225'lido' + GridExport.IllegalHeight = 'Alto de fila ilegal' + GridExport.InvalidColumnIndex = 'El '#237'ndice de columna %d fuera de l'#237'mites' + GridExport.InvalidRowIndex = 'El '#237'ndice de fila %d est'#225' fuera de l'#237'mites' + GridExport.InvalidStyleIndex = #205'ndice de estilo %d inv'#225'lido' + GridExport.ExportToExcel = 'Exportar a MS Excel (*.xls)' + GridExport.WorkbookWrite = 'Error al escribir el archivo XLS' + GridExport.InvalidCellDimension = 'Dimensi'#243'n de celda inv'#225'lida' + GridExport.BoolTrue = 'True' + GridExport.BoolFalse = 'False' + Translate.cxLibrary = True + Translate.PageControl2 = False + Translate.QuantumGrid5 = True + Translate.Editors5 = True + Translate.Datacontroller = True + Translate.Filter = True + Translate.GridPopupMenu = True + Translate.GridExport = True + Translate.Navigator = True + Version = '5.0' + Left = 104 + Top = 16 + end + object cxIntlPrintSys3: TcxIntlPrintSys3 + Connected = True + Version = '3.0' + BtnOK = 'Aceptar' + BtnOKAccelerated = '&Aceptar' + BtnCancel = 'Cancelar' + BtnClose = 'Cerrar' + BtnApply = '&Aplicar' + BtnHelp = 'A&yuda' + BtnFix = '&Arreglar' + BtnNew = '&Nuevo...' + BtnIgnore = '&Ignorar' + BtnYes = '&S'#237 + BtnNo = '&No' + BtnEdit = '&Editar...' + BtnReset = '&Restaurar' + BtnAdd = '&A'#241'adir' + BtnAddComposition = 'A'#241'adir &Comparativa' + BtnDefault = '&Defecto...' + BtnDelete = '&Borrar...' + BtnDescription = '&Descripci'#243'n...' + BtnCopy = '&Copiar...' + BtnYesToAll = 'S'#237' a &Todos' + BtnRestoreDefaults = '&Rest.Defecto' + BtnRestoreOriginal = 'Restaurar &Original' + BtnTitleProperties = 'Prop. del T'#237'tulo...' + BtnProperties = 'P&ropiedades...' + BtnNetwork = 'R&ed...' + BtnBrowse = '&Hojear...' + BtnPageSetup = 'Config. P'#225'&gina...' + BtnPrintPreview = 'Vista Pre&via...' + BtnPreview = '&Ver...' + BtnPrint = 'Imprimir...' + BtnOptions = '&Opciones...' + BtnStyleOptions = 'Opciones de estilo...' + BtnDefinePrintStyles = '&Definir Estilos...' + BtnPrintStyles = 'Estilos de Imp.' + BtnBackground = 'Fondo' + BtnShowToolBar = 'Mostrar &Herramientas' + BtnDesign = 'D&ise'#241'o...' + BtnMoveUp = 'Mover &Arriba' + BtnMoveDown = 'Mover Aba&jo' + BtnMoreColors = '&M'#225's Colores...' + BtnFillEffects = 'Efectos de &Relleno...' + BtnNoFill = '&Sin Relleno' + BtnAutomatic = '&Autom'#225'tico' + BtnNone = '&Ninguno' + BtnOtherTexture = 'Otras Te&xturas...' + BtnInvertColors = 'I&nvertir Colores' + BtnSelectPicture = 'Se&leccionar Imagen...' + EditReports = 'Editar Informes' + Composition = 'Composici'#243'n' + ReportTitleDlgCaption = 'T'#237'tulo del Informe' + Mode = '&Modo:' + Text = '&Texto' + Properties = '&Propiedades' + AdjustOnScale = '&Ajustar Escala' + TitleModeNone = 'Ninguno' + TitleModeOnEveryTopPage = 'En Cada P'#225'gina' + TitleModeOnFirstPage = 'En Primera P'#225'gina' + EditDescription = 'Editar Descripci'#243'n' + Rename = 'Reno&mbrar' + SelectAll = 'Seleccionar Todo' + AddReport = 'A'#241'adir Informe' + AddAndDesignReport = 'A'#241'adir y D&ise'#241'ar Informe...' + NewCompositionCaption = 'Nueva Composici'#243'n' + Name0 = '&Nombre:' + Caption = '&T'#237'tulo:' + AvailableSources = '&Fuente(s) Disponible(s)' + OnlyComponentsInActiveForm = 'S'#243'lamente Componentes en Formulario &Activo' + OnlyComponentsWithoutLinks = 'S'#243'lamente Componentes &sin Enlaces Existentes' + ItemName = 'Nombre' + ItemDescription = 'Descripci'#243'n' + ConfirmDeleteItem = 'Quiere borrar los siguientes elementos: %s ?' + AddItemsToComposition = 'A'#241'adir Elementos a la Composici'#243'n' + HideAlreadyIncludedItems = 'Ocultar Elementos Ya &Incluidas' + AvailableItems = 'Elementos D&isponibles' + Items = '&Elementos' + Enable = '&Habilitar' + Options = 'Opciones' + Show = 'Mostrar' + PaintItemsGraphics = '&Pintar Elementos Gr'#225'ficos' + Description = 'Descripci'#243'n:' + NewReport = 'Nuevo Informe' + OnlySelected = 'S'#243'lo &Seleccionados' + ExtendedSelect = 'Selecci'#243'n &Extendida' + IncludeFixed = '&Incluir Fijos' + Fonts = 'Fuentes' + BtnFont = 'Fue&nte...' + BtnEvenFont = 'Fuente &Par...' + BtnOddFont = 'Fuente &Impar...' + BtnFixedFont = 'Fuente F&ijo...' + BtnGroupFont = 'Fuente de Gru&po...' + BtnChangeFont = 'Cambiar Fue&nte...' + Font = 'Fuente' + OddFont = 'Fuente Impar' + EvenFont = 'Fuente Par' + PreviewFont = 'Fuente Vista Prev.' + CaptionNodeFont = 'Fuente T'#237'tulo del Nivel' + GroupNodeFont = 'Fuente T'#237'tulos de Grupo' + GroupFooterFont = 'Fuente Pies de Grupo' + HeaderFont = 'Fuente Cabecera' + FooterFont = 'Fuente Pie' + BandFont = 'Fuente Groups' + Transparent = '&Transparente' + FixedTransparent = 'Transparente Fijo' + CaptionTransparent = 'T'#237'tulo Transparente' + GroupTransparent = 'Grupo Transparente' + GraphicAsTextValue = '(GRAPHIC)' + Colors = 'Colores' + Color = 'Co&lor:' + OddColor = 'Co&lor Impar:' + EvenColor = 'Color Par:' + PreviewColor = 'Color V.&Previa:' + BandColor = 'Color &Grupos:' + LevelCaptionColor = 'Color T'#237'tulo Ni&vel:' + HeaderColor = 'Color Cab&ecera:' + GroupNodeColor = 'Color &Nodo Grupo:' + GroupFooterColor = 'Color Pie &Grupo:' + FooterColor = 'Color P&ie:' + FixedColor = 'Color F&ijo:' + GroupColor = 'Color Gru&po:' + CaptionColor = 'Color T'#237'tulo:' + GridLinesColor = 'Color L'#237'nea &Rejilla:' + Bands = '&Grupos' + LevelCaptions = 'T'#237'tulo Niveles' + Headers = 'Cab&eceras' + Footers = 'P&ies&' + GroupFooters = 'Pies de &Grupos' + Preview = 'Vista Pre&via' + PreviewLineCount = 'N'#250'm.L'#237'neas V.Previa:' + AutoCalcPreviewLineCount = 'A&uto-Calcular L'#237'neas V.Previa' + Grid = 'Re&jilla&' + NodesGrid = '&Nodos de Rejilla' + GroupFooterGrid = 'Rejilla de Gru&pos Pie' + StateImages = 'Imagenes de E&stado' + Images = '&Imagenes' + TextAlign = '&Alineaci'#243'n Texto' + TextAlignHorz = 'Hori&zontal' + TextAlignVert = '&Vertical' + TextAlignLeft = 'Izquierda' + TextAlignCenter = 'Centrado' + TextAlignRight = 'Derecha' + TextAlignTop = 'Superior' + TextAlignVCenter = 'Centrado' + TextAlignBottom = 'Inferior' + BorderLines = 'L'#237'neas de &Borde' + HorzLines = 'L'#237'neas Hori&zontales' + VertLines = 'L'#237'neas &Verticales' + FixedHorzLines = 'L'#237'neas Horizontales Fi&jas' + FixedVertLines = 'L'#237'neas Verticales Fij&as' + FlatCheckMarks = 'Cajas de Verificaci'#243'n P&lanas' + CheckMarksAsText = '&Mostrar Cajas Verificaci'#243'n como Text' + RowAutoHeight = 'Altura &Fila Auto.' + EndEllipsis = '&Puntos Suspens.' + DrawBorder = '&Dibujar Borde' + FullExpand = '&Expandir Todo' + BorderColor = 'Color &Borde:' + AutoNodesExpand = 'Expandir N&odos' + ExpandLevel = 'Expandir &Niveles:' + FixedRowOnEveryPage = 'Filas Fijas en &Cada P'#225'gina' + DrawMode = '&Modo Dibujo:' + DrawModeStrict = 'Estricto' + DrawModeOddEven = 'Modo Filas Par/Impar' + DrawModeChess = 'Modo '#39'Ajedrez'#39 + DrawModeBorrow = 'Prestar de Fuente' + ThreeDEffects = 'Efectos 3D' + Use3DEffects = 'Usar Efectos &3D' + Soft3D = '3D "Suave"' + Behaviors = 'Comportamiento' + Miscellaneous = 'Miscelaneo' + OnEveryPage = 'En Cada P'#225'gina' + NodeExpanding = 'Expansi'#243'n de Nodos' + Selection = 'Selecci'#243'n' + NodeAutoHeight = 'Altura &Nodo Auto.' + TransparentGraphics = 'Gr'#225'ficos &Transparentes' + AutoWidth = 'An&chura Auto.' + DisplayGraphicsAsText = 'Mostrar Gr'#225'fico Como &Texto' + TransparentColumnGraphics = '&Gr'#225'ficos Transparentes' + BandsOnEveryPage = 'Grupos En C&ada P'#225'gina' + HeadersOnEveryPage = 'Cabeceras en Cada &P'#225'gina' + FootersOnEveryPage = 'Pies en Ca&da P'#225'gina' + Graphics = 'Gr'#225'ficos' + OutOfResources = 'Out of Resources' + FileAlreadyExists = 'Fichero "%s" Ya Existe.' + ConfirmOverWrite = 'Fichero "%s" ya existe. '#191'Sobreescribir?' + InvalidFileName = 'Nombre No V'#225'lido "%s"' + RequiredFileName = 'Entrar nombre de fichero.' + OutsideMarginsMessage = + 'Uno o m'#225's margenes est'#225'n fuera del area de impresi'#243'n de la p'#225'gin' + + 'a.' + OutsideMarginsMessage2 = + 'Uno o m'#225's margenes est'#225'n fuera del area de impresi'#243'n de la p'#225'gin' + + 'a.' + InvalidMarginsMessage = 'Uno o m'#225's margenes tiene valores no v'#225'lidos.' + InvalidMargins = 'Uno o m'#225's valores de los margenes no es v'#225'lido' + OutsideMargins = + 'Uno o m'#225's margenes se ha establecido fuera del area de impresi'#243'n' + + ' de la p'#225'gina' + ThereAreNowItemsForShow = 'No existen elementos en '#233'sta vista' + PageBackground = 'Fondo de P'#225'gina' + PenColor = 'Color del L'#225'piz' + FontColor = 'Color del Fuente' + BrushColor = 'Color de la Brocha' + HighLight = 'HighLight' + ColorBlack = 'Negro' + ColorDarkRed = 'Rojo Oscuro' + ColorRed = 'Rojo' + ColorPink = 'Rosa' + ColorRose = 'Rosado' + ColorBrown = 'Marr'#243'n' + ColorOrange = 'Naranja' + ColorLightOrange = 'Naranja Claro' + ColorGold = 'Oro' + ColorTan = 'Dorado' + ColorOliveGreen = 'Verde Oliva' + ColorDrakYellow = 'Amarillo Oscuro' + ColorLime = 'Lima' + ColorYellow = 'Amarillo' + ColorLightYellow = 'Amarillo Claro' + ColorDarkGreen = 'Verde Oscuro' + ColorGreen = 'Verde' + ColorSeaGreen = 'Verde Mar' + ColorBrighthGreen = 'Verde Florecente' + ColorLightGreen = 'Verde Claro' + ColorDarkTeal = 'VerdeAzul Oscuro' + ColorTeal = 'VerdeAzul' + ColorAqua = 'Aqua' + ColorTurquoise = 'Turquesa' + ColorLightTurquoise = 'Turquesa Claro' + ColorDarkBlue = 'Azul Oscuro' + ColorBlue = 'Azul' + ColorLightBlue = 'Azul Claro' + ColorSkyBlue = 'Azul Cielo' + ColorPaleBlue = 'Azul P'#225'lido' + ColorIndigo = 'Indigo' + ColorBlueGray = 'Azul Gris' + ColorViolet = 'Violeta' + ColorPlum = 'Granate' + ColorLavender = 'Lav'#225'nder' + ColorGray80 = 'Gris-80%' + ColorGray50 = 'Gris-50%' + ColorGray40 = 'Gris-40%' + ColorGray25 = 'Gris-25%' + ColorWhite = 'Blanco' + Texture = '&Textura' + Pattern = '&Dibujo' + Picture = '&Im'#225'gen' + Foreground = '&Primer Plano' + Background = '&Fondo' + Sample = 'Ejemplo:' + FEFCaption = 'Efectos de Relleno' + PaintMode = '&Modo Pintar' + PaintModeCenter = 'Centrar' + PaintModeStretch = 'Estirar' + PaintModeTile = 'Mosaico' + PaintModeProportional = 'Proporcional' + PatternGray5 = '5%' + PatternGray10 = '10%' + PatternGray20 = '20%' + PatternGray25 = '25%' + PatternGray30 = '30%' + PatternGray40 = '40%' + PatternGray50 = '50%' + PatternGray60 = '60%' + PatternGray70 = '70%' + PatternGray75 = '75%' + PatternGray80 = '80%' + PatternGray90 = '90%' + PatternLightDownwardDiagonal = 'Light downward diagonal' + PatternLightUpwardDiagonal = 'Light upward diagonal' + PatternDarkDownwardDiagonal = 'Dark downward diagonal' + PatternDarkUpwardDiagonal = 'Dark upward diagonal' + PatternWideDownwardDiagonal = 'Wide downward diagonal' + PatternWideUpwardDiagonal = 'Wide upward diagonal' + PatternLightVertical = 'Light vertical' + PatternLightHorizontal = 'Light horizontal' + PatternNarrowVertical = 'Narrow vertical' + PatternNarrowHorizontal = 'Narrow horizontal' + PatternDarkVertical = 'Dark vertical' + PatternDarkHorizontal = 'Dark horizontal' + PatternDashedDownward = 'Dashed downward' + PatternDashedUpward = 'Dashed upward' + PatternDashedVertical = 'Dashed vertical' + PatternDashedHorizontal = 'Dashed horizontal' + PatternSmallConfetti = 'Small confetti' + PatternLargeConfetti = 'Large confetti' + PatternZigZag = 'Zig zag' + PatternWave = 'Wave' + PatternDiagonalBrick = 'Diagonal brick' + PatternHorizantalBrick = 'Horizontal brick' + PatternWeave = 'Weave' + PatternPlaid = 'Plaid' + PatternDivot = 'Divot' + PatternDottedGrid = 'Dottedgrid' + PatternDottedDiamond = 'Dotted diamond' + PatternShingle = 'Shingle' + PatternTrellis = 'Trellis' + PatternSphere = 'Sphere' + PatternSmallGrid = 'Small grid' + PatternLargeGrid = 'Large grid' + PatternSmallCheckedBoard = 'Small checked board' + PatternLargeCheckedBoard = 'Large checked board' + PatternOutlinedDiamond = 'Outlined diamond' + PatternSolidDiamond = 'Solid diamond' + TextureNewSprint = 'Newsprint' + TextureGreenMarble = 'Green marble' + TextureBlueTissuePaper = 'Blue tissue paper' + TexturePapyrus = 'Papyrus' + TextureWaterDroplets = 'Water droplets' + TextureCork = 'Cork' + TextureRecycledPaper = 'Recycled paper' + TextureWhiteMarble = 'White marble' + TexturePinkMarble = 'Pink marble' + TextureCanvas = 'Canvas' + TexturePaperBag = 'Paper bag' + TextureWalnut = 'Walnut' + TextureParchment = 'Parchment' + TextureBrownMarble = 'Brown marble' + TexturePurpleMesh = 'Purple mesh' + TextureDenim = 'Denim' + TextureFishFossil = 'Fish fossil' + TextureOak = 'Oak' + TextureStationary = 'Stationary' + TextureGranite = 'Granite' + TextureBouquet = 'Bouquet' + TextureWonenMat = 'Woven mat' + TextureSand = 'Sand' + TextureMediumWood = 'Medium wood' + FSPCaption = 'Vista de Im'#225'gen' + Width = 'Altura' + Height = 'Altura' + BrushDlgCaption = 'Propiedades de la Brocha' + Style = 'E&stilo:' + ENFNCaption = 'Escoge Nombre de Fichero' + EnterNewFileName = 'Introduzca Nuevo Nombre de Fichero' + DefinePrintStylesCaption = 'Definir Estilos de Impresi'#243'n' + DefinePrintStylesTitle = 'E&stilos de Impresi'#243'n' + DefinePrintStylesWarningDelete = #191' Desea borrar "%s" ?' + DefinePrintStylesWarningClear = #191'Desea borrar todos los estilos existentes?' + Clear = 'E&liminar...' + CustomSize = 'Tama'#241'o Personalizado' + DefaultTray = 'Bandeja de Entrada' + InvalidPrintDevice = 'La impresora seleccionada no es v'#225'lida' + NotPrinting = 'La impresora no est'#225' imprimiendo' + Printing = 'Imprimiendo' + DeviceOnPort = '%s en %s' + PrinterIndexError = #205'ndice de Impresora fueera de rango' + NoDefaultPrintDevice = 'No hay ninguna impresora seleccionada' + AutoTextDialogCaption = 'Editar Entidades AutoTexto' + EnterAutoTextEntriesHere = 'Entrar Entidades A&utoTexto Aqu'#237':' + PrintDialogCaption = 'Imprimir' + PrintDialogPrinter = 'Impresora' + PrintDialogName = '&Nombre:' + PrintDialogStatus = 'Estado:' + PrintDialogType = 'Tipo:' + PrintDialogWhere = 'D'#243'nde:' + PrintDialogComment = 'Comentario:' + PrintDialogPrintToFile = 'A &Fichero' + PrintDialogPageRange = 'Rango de P'#225'g.' + PrintDialogAll = '&Todas' + PrintDialogCurrentPage = 'P'#225'g. A&ctual' + PrintDialogSelection = '&Selecci'#243'n' + PrintDialogPages = '&P'#225'ginas:' + PrintDialogRangeLegend = 'Entre el n'#250'mero de p'#225'gina o un rango de p'#225'ginas' + PrintDialogCopies = 'Copias' + PrintDialogNumberOfPages = 'N&'#250'mero de P'#225'g.:' + PrintDialogNumberOfCopies = 'N'#250'mero de &Copias:' + PrintDialogCollateCopies = 'In&tercalar Copias' + PrintDialogAllPages = 'Todas' + PrintDialogEvenPages = 'Pares' + PrintDialogOddPages = 'Impares' + PrintDialogPrintStyles = 'Est&ilos Impresi'#243'n' + PrintDialogOpenDlgTitle = 'Elije un Fichero' + PrintDialogOpenDlgAllFiles = 'Todos los Ficheros' + PrintDialogOpenDlgPrinterFiles = 'Ficheros de Impresora' + PrintDialogPageNumbersOutOfRange = 'N'#250'mero de p'#225'gina fuera de rango (%d - %d)' + PrintDialogInvalidPageRanges = 'Rango de p'#225'ginas no v'#225'lido' + PrintDialogRequiredPageNumbers = 'Introduzca n'#250'meros de p'#225'ginas' + PrintDialogNoPrinters = 'No printers are installed.' + PrintDialogInPrintingState = 'La impresora est'#225' ocupado.' + PrintDialogPSPaused = 'Pausado' + PrintDialogPSPendingDeletion = 'Pendiente Borrar' + PrintDialogPSBusy = 'Ocupado' + PrintDialogPSDoorOpen = 'Puerta Abierta' + PrintDialogPSError = 'Error' + PrintDialogPSInitializing = 'Inicializando' + PrintDialogPSIOActive = 'E/S Activo' + PrintDialogPSManualFeed = 'Alimentaci'#243'n Manual' + PrintDialogPSNoToner = 'Toner Terminado' + PrintDialogPSNotAvailable = 'No Disponible' + PrintDialogPSOFFLine = 'Fuera de L'#237'nea' + PrintDialogPSOutOfMemory = 'Memoria Agotada' + PrintDialogPSOutBinFull = 'Bandeja de Salida Llena' + PrintDialogPSPagePunt = 'Page Punt' + PrintDialogPSPaperJam = 'Papel Enganchado' + PrintDialogPSPaperOut = 'Sin Papel' + PrintDialogPSPaperProblem = 'Problema de Papel' + PrintDialogPSPrinting = 'Imprimiendo' + PrintDialogPSProcessing = 'Procesando' + PrintDialogPSTonerLow = 'Toner Bajo' + PrintDialogPSUserIntervention = 'Intervenci'#243'n del Usuario' + PrintDialogPSWaiting = 'Esperando' + PrintDialogPSWarningUp = 'Precalientamiento' + PrintDialogPSReady = 'Lista' + PrintDialogPSPrintingAndWaiting = 'Imprimiendo: %d documento(s) esperando' + LeftMargin = 'Margen Izquierdo' + TopMargin = 'Margin Superior' + RightMargin = 'Margin Derecho' + BottomMargin = 'Margin Inferior' + GutterMargin = 'Gutter' + HeaderMargin = 'Cabecera' + FooterMargin = 'Pie' + UnitsInches = '"' + UnitsCentimeters = 'cm' + UnitsMillimeters = 'mm' + UnitsPoints = 'pt' + UnitsPicas = 'pi' + UnitsDefaultName = 'Predeterminada' + UnitsInchesName = 'Pulgadas' + UnitsCentimetersName = 'Centimetros' + UnitsMillimetersName = 'Milimetros' + UnitsPointsName = 'Puntos' + UnitsPicasName = 'Picas' + PrintPreview = 'Vista Previa' + ReportDesignerCaption = 'Dise'#241'ador de Informes' + CompositionDesignerCaption = 'Dise'#241'ador de Composici'#243'n' + ComponentNotSupportedByLink = 'Component "%s" not supported by TdxComponentPrinter' + ComponentNotSupported = 'Component "%s" not supported by TdxComponentPrinter' + PrintDeviceNotReady = 'La impresora no est'#225' instalada o no est'#225' preparada' + UnableToGenerateReport = 'No se ha podido generar el informe' + PreviewNotRegistered = 'There is no registered preview form' + ComponentNotAssigned = '%s' + PrintDeviceIsBusy = 'Impresora ocupada' + PrintDeviceError = #161'La impresora ha encontrado un error!' + MissingComponent = 'Missing "Component" property' + DataProviderDontPresent = 'There are no Links with Assigned Component in Composition' + BuildingReport = 'Generando informe: Completado %d%%' + PrintingReport = + 'Imprimiendo Informe: Completado %d p'#225'gina(s). Pulse ESC to abort' + + 'ar...' + DefinePrintStylesMenuItem = 'Definir E&stilos de Impresi'#243'n...' + AbortPrinting = #191'Abortar impresi'#243'n?' + StandardStyle = 'Estilo Estandar' + FontStyleBold = 'Negrita' + FontStyleItalic = 'It'#225'lica' + FontStyleUnderline = 'Subrayado' + FontStyleStrikeOut = 'Tachado' + Pt = 'pt.' + NoPages = '[No p'#225'ginas]' + PageWidth = 'Anchura P'#225'g' + WholePage = 'Pag. Completa' + TwoPages = 'Dos P'#225'ginas' + FourPages = 'Cuatro P'#225'ginas' + WidenToSourceWidth = 'Ajustar a Anchura' + MenuBar = 'MenuBar' + StandardBar = 'Standard' + HeaderFooterBar = 'Header and Footer' + ShortcutMenusBar = 'Shortcut Menus' + AutoTextBar = 'AutoTexto' + MenuFile = '&Ficheros' + MenuFileDesign = '&Dise'#241'o...' + MenuFilePrint = '&Imprimir...' + MenuFilePageSetup = 'Con&fig. P'#225'gina...' + MenuPrintStyles = 'Estilos Impresi'#243'n' + MenuFileExit = '&Cerrar' + MenuEdit = '&Editar' + MenuEditCut = 'Cor&tar' + MenuEditCopy = '&Copiar' + MenuEditPaste = '&Pegar' + MenuEditDelete = '&Borrar' + MenuEditFind = '&Buscar...' + MenuEditFindNext = 'Buscar Si&guiente' + MenuEditReplace = '&Reemplazar...' + MenuLoad = '&Cargar...' + MenuPreview = 'V. Pre&via...' + MenuInsert = '&Insertar' + MenuInsertAutoText = '&AutoTexto' + MenuInsertEditAutoTextEntries = 'AutoTe&xto...' + MenuInsertAutoTextEntries = '&(Lista de Entradas AutoTexto)' + MenuInsertAutoTextEntriesSubItem = 'In&sertar AutoTexto' + MenuInsertPageNumber = 'N'#250'm &P'#225'g.' + MenuInsertTotalPages = '&N'#250'm. de P'#225'g.' + MenuInsertPageOfPages = 'N'#250'm de P'#225'&g. de P'#225'ginas' + MenuInsertDateTime = 'Fechay Hora' + MenuInsertDate = '&Fecha' + MenuInsertTime = '&Hora' + MenuInsertUserName = 'Nombre &Usuario' + MenuInsertMachineName = 'Nombre &Maquina' + MenuView = '&Vista' + MenuViewMargins = '&Margenes' + MenuViewFlatToolBarButtons = 'Botones &Planos' + MenuViewLargeToolBarButtons = 'Botones &Grandes' + MenuViewMarginsStatusBar = 'Barra de M&argenes' + MenuViewPagesStatusBar = 'Barra de E&stado' + MenuViewToolBars = '&Herramientas' + MenuViewPagesHeaders = '&Cabeceras de P'#225'gina' + MenuViewPagesFooters = '&Pies de P'#225'ginas' + MenuViewSwitchToLeftPart = 'Switch to Left Part' + MenuViewSwitchToRightPart = 'Switch to Right Part' + MenuViewSwitchToCenterPart = 'Switch to Center Part' + MenuViewHFSwitchHeaderFooter = 'Mo&strar Cabecera/Pie' + MenuViewHFClose = '&Cerrar' + MenuZoom = '&Aumentar' + MenuZoomPercent100 = 'Porcien &100' + MenuZoomPageWidth = '&Anchura P'#225'gina' + MenuZoomWholePage = 'P'#225'gina C&ompleta' + MenuZoomTwoPages = '&Dos P'#225'ginas' + MenuZoomFourPages = '&Cuatro P'#225'ginas' + MenuZoomMultiplyPages = 'P'#225'ginas &M'#250'ltiples' + MenuZoomWidenToSourceWidth = 'Aju&star a Anchura' + MenuZoomSetup = '&Config...' + MenuPages = '&P'#225'ginas' + MenuGotoPage = '&Saltar' + MenuGotoPageFirst = '&Primera P'#225'g.' + MenuGotoPagePrev = 'P'#225'g. &Anteror' + MenuGotoPageNext = 'Pr'#243'&xima P'#225'g.' + MenuGotoPageLast = #218'l&tima P'#225'g.' + MenuActivePage = 'P'#225'g. Acti&va:' + MenuFormat = 'F&ormato' + MenuFormatHeaderAndFooter = '&Cabeceras y Pies' + MenuFormatAutoTextEntries = 'Entradas &AutoTexto...' + MenuFormatDateTime = 'Fecha y &Hora...' + MenuFormatPageNumbering = '&Numeraci'#243'n P'#225'ginas...' + MenuFormatPageBackground = 'Fon&do...' + MenuFormatShrinkToPage = '&Reducir a P'#225'g.' + MenuShowEmptyPages = 'Mostrar P'#225'g. &Vacias' + MenuFormatHFBackground = 'Fondo de Cabecera/Pie...' + MenuFormatHFClear = 'Vaciar Texto' + MenuTools = '&Herramientas' + MenuToolsCustomize = '&Personalizar...' + MenuToolsOptions = '&Opciones...' + MenuHelp = 'A&yuda' + MenuHelpTopics = '&Temas de Ayuda...' + MenuHelpAbout = '&Acerca de...' + MenuShortcutPreview = 'V.Previa' + MenuShortcutAutoText = 'AutoTexto' + MenuBuiltInMenus = 'Men'#250's Incorporados' + MenuShortCutMenus = 'Men'#250's de Atajos' + MenuNewMenu = 'Men'#250' Nuevo' + HintFileDesign = 'Dise'#241'ar Informe' + HintFilePrint = 'Imprimir' + HintFilePrintDialog = 'Configuarar la Impresora' + HintFilePageSetup = 'Configurar la P'#225'gina' + HintFileExit = 'Cerrar Vista Previa' + HintEditFind = 'Buscar' + HintEditFindNext = 'Buscar Siguiente' + HintEditReplace = 'Reemplazar' + HintInsertEditAutoTextEntries = 'Editar Entradas AutoTexto' + HintInsertPageNumber = 'Insertar N'#250'mero P'#225'gina' + HintInsertTotalPages = 'Insertar N'#250'mero de P'#225'ginas' + HintInsertPageOfPages = 'Insertar P'#225'gina N'#250'mero de P'#225'ginas' + HintInsertDateTime = 'Insertar Fecha y Hora' + HintInsertDate = 'Insertar Fecha' + HintInsertTime = 'Insert Hora' + HintInsertUserName = 'Insertar Nombre Usuario' + HintInsertMachineName = 'Insertar Nombre Maquina' + HintViewMargins = 'Ver Margenes' + HintViewLargeButtons = 'Ver Botones Grandes' + HintViewMarginsStatusBar = 'Ver Barra de Esatdo de Margenes' + HintViewPagesStatusBar = 'Ver Barra de Estado de P'#225'gina' + HintViewPagesHeaders = 'Vee Cabecera de P'#225'gina' + HintViewPagesFooters = 'Ver Pie de P'#225'gina' + HintViewSwitchToLeftPart = 'Cambiar a Cabecera/Pie Izquierda' + HintViewSwitchToRightPart = 'Cambiar a Cabecera/Pie Derecha' + HintViewSwitchToCenterPart = 'Cambiar a Cabecera/Pie Centrada' + HintViewHFSwitchHeaderFooter = 'Cambiar a Cabecera y Pie' + HintViewHFClose = 'Cerrar' + HintViewZoom = 'Aumentar' + HintZoomPercent100 = 'Aumentar al 100%' + HintZoomPageWidth = 'Aumentar a Anchura de P'#225'gina' + HintZoomWholePage = 'P'#225'gina Completa' + HintZoomTwoPages = 'Dos P'#225'ginas' + HintZoomFourPages = 'Cuatro P'#225'ginas' + HintZoomMultiplyPages = 'P'#225'ginas M'#250'ltiples' + HintZoomWidenToSourceWidth = 'Ajustar a la Anchura' + HintZoomSetup = 'Introducir Factor de Aumento' + HintFormatDateTime = 'Formato de Fecha y Hora' + HintFormatPageNumbering = 'Formato de N'#250'mero de P'#225'gina' + HintFormatPageBackground = 'Fondo' + HintFormatShrinkToPage = 'Reducir a P'#225'gina' + HintFormatHFBackground = 'Fondo de Cabecera/Pie' + HintFormatHFClear = 'Vaciar Texto Cabecera/Pie' + HintGotoPageFirst = 'Primera P'#225'gina' + HintGotoPagePrev = 'P'#225'gina Anterior' + HintGotoPageNext = 'Pr'#243'xima P'#225'gina' + HintGotoPageLast = #218'ltima P'#225'gina' + HintActivePage = 'P'#225'gina Activa' + HintToolsCustomize = 'Personalizar Herramientas' + HintToolsOptions = 'Opciones' + HintHelpTopics = 'Temas de Ayuda' + HintHelpAbout = 'Acerca de' + PopupMenuLargeButtons = 'Botones &Grandes' + PopupMenuFlatButtons = 'Botones &Planos' + PaperSize = 'Tama'#241'o Papel' + Status = 'Estado' + StatusReady = 'Lista' + StatusPrinting = 'Imprimiendo. %d p'#225'gina(s) terminada(s)' + StatusGenerateReport = 'Generando Informe. %d%% completado.' + HintDoubleClickForChangePaperSize = 'Doble Clic para Cambiar el Tama'#241'o de P'#225'gina' + HintDoubleClickForChangeMargins = 'Doble Clic para Cambiar Margenes' + DTFormatsCaption = 'Fecha y Hora' + DTFormatsAvailableDateFormats = 'Formatos de &Fecha Disponibes:' + DTFormatsAvailableTimeFormats = 'Formatos de &Hora Disponibles:' + DTFormatsAutoUpdate = 'Act. &Autom'#225'tica' + DTFormatsChangeDefaultFormat = + 'Confirme que desea cambiar el formato de fecha y hora al "%s" -' + + ' "%s" ?' + PNFormatsCaption = 'Formato de N'#250'mero de P'#225'gina' + PageNumbering = 'Numeraci'#243'n de P'#225'ginas' + PNFormatsNumberFormat = '&Format N'#250'mero:' + PNFormatsContinueFromPrevious = '&Continuar desde '#218'ltima Secci'#243'n' + PNFormatsStartAt = 'Empezar &En:' + PNFormatsChangeDefaultFormat = + 'Confirme que desea cambiar el formato de numeraci'#243'n de p'#225'ginas a' + + 'l "%s" ?' + ZoomDlgCaption = 'Aumentar' + ZoomDlgZoomTo = 'Aumentar a' + ZoomDlgPageWidth = '&Ancho P'#225'g.' + ZoomDlgWholePage = 'P'#225'g.C&ompleta' + ZoomDlgTwoPages = '&Dos P'#225'ginas' + ZoomDlgFourPages = '&Cuatro P'#225'g.' + ZoomDlgManyPages = '&Varias P'#225'g.:' + ZoomDlgPercent = 'P&orcien:' + ZoomDlgPreview = 'Vista' + ZoomDlgFontPreview = '10pt Times New Romam' + ZoomDlgFontPreviewString = 'AaBbCcDdEeXxYyZz' + Pages = 'P'#225'ginas' + Cancel = 'Cancelar' + PreferenceDlgCaption = 'Opciones' + PreferenceDlgTab1 = '&General' + PreferenceDlgShow = '&Mostrar' + PreferenceDlgMargins = '&Margenes' + PreferenceDlgMarginsHints = 'A&yudas Margenes' + PreferenceDlgMargingWhileDragging = 'Ayudas Margins con A&rrastre' + PreferenceDlgLargeBtns = 'Botones &Grandes para Barras' + PreferenceDlgFlatBtns = 'Botones &Planos para Barras' + PreferenceDlgMarginsColor = '&Color Margenes:' + PreferenceDlgMeasurementUnits = '&Unidades de Medida:' + PreferenceDlgSaveForRunTimeToo = 'Gua&rdar en Ejecucci'#243'n tambien' + PreferenceDlgZoomScroll = 'Despla&zamiento con IntelliMouse' + PreferenceDlgZoomStep = 'Au&mento:' + CloneStyleCaptionPrefix = 'Copia (%d) de' + InvalideStyleCaption = 'Nombre de estilo "%s" existente. Por favor, introduzca otro.' + PageSetupCaption = 'Configuraci'#243'n de la P'#225'gina' + StyleName = '&Nombre Estilo:' + Page = '&P'#225'gina' + Margins = '&Margenes' + HeaderFooter = '&Cabecera\Pie' + Scaling = '&Escala' + Paper = 'Papel' + PaperType = 'T&ipo' + PaperDimension = 'Dimensi'#243'nes' + PaperWidth = '&Anchura:' + PaperHeight = 'A<ura:' + PaperSource = 'Bande&ja' + Orientation = 'Orientaci'#243'n' + Portrait = 'N&ormal' + Landscape = '&Apaisado' + PrintOrder = 'Orden de Impresi'#243'n' + DownThenOver = '&Abajo, derecha' + OverThenDown = '&Derecha, abajo' + Shading = 'Sombreado' + PrintUsingGrayShading = 'Imprimir usando sombreado &gris' + CenterOnPage = 'Centrar' + Horizontally = 'Hori&zontal' + Vertically = '&Vertical' + Header = 'Cabecera' + BtnHeaderFont = '&Fuente...' + BtnHeaderBackground = '&Fondo' + Footer = 'Pie' + BtnFooterFont = 'Fue&nte...' + BtnFooterBackground = 'F&ondo' + CaptionTop = '&Sup.:' + CaptionLeft = '&Izqu.:' + CaptionRight = '&Derecha:' + CaptionBottom = '&Inferior:' + Header2 = '&Cabec.:' + Footer2 = '&Pie:' + Alignment = 'Alineamiento' + VertAlignment = 'Alineamiento Vertical' + ReverseOnEvenPages = 'Al &rev'#233's en p'#225'ginas pares' + AdjustTo = '&Ajustar a:' + FitTo = 'P'#225'&ginas:' + PercentOfNormalSize = '% tama'#241'o normal' + PagesWideBy = 'p'#225'g(s) de &ancho' + Tall = 'de a<o' + XOfY = 'De' + LastPrinted = #218'ltima Impresi'#243'n' + FileName = 'Fichero' + FileNameAndPath = 'Fichero y camino' + PrintedBy = 'Impreso por' + PrintedOn = 'Impreso el' + CreatedBy = 'Creado por' + CreatedOn = 'Creado el' + Confidential = 'Confidencial' + HFFunctionNameUnknown = 'Desconocido' + HFFunctionNamePageNumber = 'N'#250'm. P'#225'gina' + HFFunctionNameTotalPages = 'P'#225'g. Totales' + HFFunctionNamePageOfPages = 'P'#225'g. # de P'#225'gs. #' + HFFunctionNameDateTime = 'Fecha y Hora' + HFFunctionNameDate = 'Fecha' + HFFunctionNameTime = 'Hora' + HFFunctionNameUserName = 'Nombre Usuario' + HFFunctionNameMachineName = 'Nombre Maquina' + HFFunctionHintPageNumber = 'Page Number' + HFFunctionHintTotalPages = 'Total Pages' + HFFunctionHintPageOfPages = 'Page # of Pages #' + HFFunctionHintDateTime = 'Date and Time Printed' + HFFunctionHintDate = 'Date Printed' + HFFunctionHintTime = 'Time Printed' + HFFunctionHintUserName = 'User Name' + HFFunctionHintMachineName = 'Machine Name' + HFFunctionTemplatePageNumber = 'Page #' + HFFunctionTemplateTotalPages = 'Total Pages' + HFFunctionTemplatePageOfPages = 'Page # of Pages #' + HFFunctionTemplateDateTime = 'Date & Time Printed' + HFFunctionTemplateDate = 'Date Printed' + HFFunctionTemplateTime = 'Time Printed' + HFFunctionTemplateUserName = 'User Name' + HFFunctionTemplateMachineName = 'Machine Name' + January = 'Enero' + February = 'Febrero' + March = 'Marzo' + April = 'Abril' + May = 'Mayo' + June = 'Junio' + July = 'Julio' + August = 'Agosto' + September = 'Septiembre' + October = 'Octubre' + November = 'Noviembre' + December = 'Diciembre' + East = 'Este' + West = 'Oeste' + South = 'Sur' + North = 'Norte' + Total = 'Total' + Plan = 'Plan' + SwimmingPool = 'Swimming-pool' + Administration = 'Administration' + Park = 'Park' + CarParking = 'Car-Parking' + CorporateHeadquarters = 'Corporate' + SalesAndMarketing = 'Sales and' + Engineering = 'Engineering' + FieldOfficeCanada = 'Field Office:' + OrderNoCaption = 'OrderNo' + NameCaption = 'Name' + CountCaption = 'Count' + CompanyCaption = 'Company' + AddressCaption = 'Address' + PriceCaption = 'Price' + CashCaption = 'Cash' + Name1 = 'Jennie Valentine' + Name2 = 'Sam Hill' + Company1 = 'Jennie Inc.' + Company2 = 'Daimler-Chrysler AG' + Address1 = '123 Home Lane' + Address2 = '9333 Holmes Dr.' + CountIs = 'Count is: %d' + Regular = 'Regular' + Irregular = 'Irregular' + TLBand = 'Item Data' + TLColumnName = 'Name' + TLColumnAxisymmetric = 'Axisymmetric' + TLColumnItemShape = 'Shape' + ItemShapeAsText = '(Graphic)' + Item1Name = 'Cone' + Item2Name = 'Cylinder' + Item3Name = 'Pyramid' + Item4Name = 'Box' + Item5Name = 'Free Surface' + Item2Description = 'Axisymmetric geometry figure' + Item3Description = 'Axisymmetric geometry figure' + Item4Description = 'Acute-angled geometry figure' + Item7Description = 'Simple extrusion surface' + PatternIsNotRegistered = 'Pattern "%s" is not registered' + SolidEdgePattern = 'Solid' + ThinSolidEdgePattern = 'Medium Solid' + MediumSolidEdgePattern = 'Medium Solid' + ThickSolidEdgePattern = 'Thick Solid' + DottedEdgePattern = 'Dotted' + DashedEdgePattern = 'Dashed' + DashDotDotEdgePattern = 'Dash Dot Dot' + DashDotEdgePattern = 'Dash Dot' + SlantedDashDotEdgePattern = 'Slanted Dash Dot' + MediumDashDotDotEdgePattern = 'Medium Dash Dot Dot' + HairEdgePattern = 'Hair' + MediumDashDotEdgePattern = 'Medium Dash Dot' + MediumDashedEdgePattern = 'Medium Dashed' + DoubleLineEdgePattern = 'Double Line' + SolidFillPattern = 'Solid' + Gray75FillPattern = '75% Gray' + Gray50FillPattern = '50% Gray' + Gray25FillPattern = '25% Gray' + Gray125FillPattern = '12.5% Gray' + Gray625FillPattern = '6.25% Gray' + HorizontalStripeFillPattern = 'Horizontal Stripe' + VerticalStripeFillPattern = 'Vertical Stripe' + ReverseDiagonalStripeFillPattern = 'Reverse Diagonal Stripe' + DiagonalStripeFillPattern = 'Diagonal Stripe' + DiagonalCrossHatchFillPattern = 'Diagonal Cross Hatch' + ThickCrossHatchFillPattern = 'Thick Cross Hatch' + ThinHorizontalStripeFillPattern = 'Thin Horizontal Stripe' + ThinVerticalStripeFillPattern = 'Thin Vertical Stripe' + ThinReverseDiagonalStripeFillPattern = 'Thin Reverse Diagonal Stripe' + ThinDiagonalStripeFillPattern = 'Thin Diagonal Stripe' + ThinHorizontalCrossHatchFillPattern = 'Thin Horizontal Cross Hatch' + ThinDiagonalCrossHatchFillPattern = 'Thin Diagonal Cross Hatch' + ShowRowAndColumnHeadings = '&Row and column headings' + ShowGridLines = 'GridLines' + SuppressSourceFormats = '&Suppress Source Formats' + RepeatHeaderRowAtTop = 'Repeat header row at top' + DataToPrintDoesnotExist = + 'Can not activate ReportLink because PrintingSystem did not find ' + + 'anything to print.' + JanuaryShort = 'Ene' + FebruaryShort = 'Feb' + MarchShort = 'Mar' + AprilShort = 'Abril' + MayShort = 'Mayo' + JuneShort = 'Jun' + JulyShort = 'Jul' + AugustShort = 'Ago' + SeptemberShort = 'Sept' + OctoberShort = 'Oct' + NovemberShort = 'Nov' + DecemberShort = 'Dic' + TechnicalDepartment = 'Technical Department' + SoftwareDepartment = 'Software Department' + SystemProgrammers = 'System Programmers' + EndUserProgrammers = 'EndUser Programmers' + BetaTesters = 'Beta Testers' + HumanResourceDepartment = 'Human Resource Department' + TreeLines = '&L'#237'neas'#193'rbol' + TreeLinesColor = 'Colore L'#237'neas '#193'rbol:' + ExpandButtons = 'Botones E&xpansi'#243'n' + CheckMarks = 'Cajas Verificaci'#243'n' + TreeEffects = 'Efectos '#193'rbol' + Appearance = 'Apariencia' + CarLevelCaption = 'Coches' + ManufacturerBandCaption = 'Manufacturer Data' + ModelBandCaption = 'Car Data' + ManufacturerNameColumnCaption = 'Name' + ManufacturerLogoColumnCaption = 'Logo' + ManufacturerCountryColumnCaption = 'Country' + CarModelColumnCaption = 'Model' + CarIsSUVColumnCaption = 'SUV' + CarPhotoColumnCaption = 'Photo' + CarManufacturerName1 = 'BMW' + CarManufacturerName2 = 'Ford' + CarManufacturerName3 = 'Audi' + CarManufacturerName4 = 'Land Rover' + CarManufacturerCountry1 = 'Germany' + CarManufacturerCountry2 = 'United States' + CarManufacturerCountry3 = 'Germany' + CarManufacturerCountry4 = 'United Kingdom' + CarModel1 = 'X5 4WD' + CarModel2 = 'Excursion' + CarModel3 = 'S8 Quattro' + CarModel4 = 'G4 Challenge' + True = 'True' + False = 'False' + Auto = 'Auto' + Custom = 'Personal.' + Env = 'Env' + LookAndFeelFlat = 'Plano' + LookAndFeelStandard = 'Estandar' + LookAndFeelUltraFlat = 'UltraPlano' + ViewTab = 'Vista' + BehaviorsTab = 'Comportamiento' + PreviewTab = 'Vista Previa' + CardsTab = 'Fichas' + Formatting = 'Formato' + LookAndFeel = 'Aspecto' + LevelCaption = '&T'#237'tulo' + FilterBar = 'Barra de &Filtro' + Refinements = 'Perfeccionamiento' + ProcessSelection = 'Procesar &Selecci'#243'n' + ProcessExactSelection = 'Procesar Selecci'#243'n E&xacta' + Expanding = 'Despliege' + Groups = '&Grupos' + Details = '&Detalles' + StartFromActiveDetails = 'Empieza desde Detalles Activas' + OnlyActiveDetails = 'S'#243'lo Detalles Activos' + Visible = '&Visible' + PreviewAutoHeight = 'Altura A&utom'#225'tica' + PreviewMaxLineCount = 'L'#237'neas &M'#225'ximas:' + Sizes = 'Tama'#241'os' + KeepSameWidth = 'Manten.Misma Anchura' + KeepSameHeight = 'Manten.Misma Altura' + Framing = 'Marco' + Spacing = 'Espacios' + Shadow = 'Sombra' + Depth = '&Profundidad:' + Position = '&Posici'#243'n' + Positioning = 'Posicionando' + Horizontal = 'H&orizontal:' + Vertical = 'V&ertical:' + SummaryFormat = 'Recuento = 0' + CannotUseOnEveryPageMode = 'Cannot Use OnEveryPage Mode' + IncorrectBandHeadersState = 'Cannot Use BandHeaders OnEveryPage Mode' + IncorrectHeadersState = 'Cannot Use Headers OnEveryPage Mode' + IncorrectFootersState = 'Cannot Use Footers OnEveryPage Mode' + TPicture = 'TPicture' + Copy = '&Copiar' + Save = '&Salvar...' + BaseStyle = 'Estilo Base' + Rectangle = 'Rectangle' + Square = 'Square' + Ellipse = 'Ellipse' + Circle = 'Circle' + RoundRect = 'RoundRect' + RoundSquare = 'RoundSquare' + HorizontalFillPattern = 'Horizontal' + VerticalFillPattern = 'Vertical' + FDiagonalFillPattern = 'FDiagonal' + BDiagonalFillPattern = 'BDiagonal' + CrossFillPattern = 'Cross' + DiagCrossFillPattern = 'DiagCros' + CyclicIDReferences = 'Cyclic ID references %s and %s' + LoadReportDataToFileTitle = 'Cargar Informe' + SaveReportDataToFileTitle = 'Salvar Informe Como' + InvalidExternalStorage = 'Almacenamiento Externo No V'#225'lido' + LinkIsNotIncludedInUsesClause = 'ReportFile contains ReportLink "%0:s"' + InvalidStorageVersion = 'Versi'#243'n de Almacenamiento no V'#225'lido: %d' + PSReportFiles = 'Ficheros de Informes' + ReportFileLoadError = 'No se pudo cargar el informe "%s".' + None = '(Ninguno)' + ReportDocumentIsCorrupted = '(El fichero no es un informe o esta corrupto)' + CloseExplorerHint = 'Cerrar Explorador' + ExplorerCaption = 'Explorador' + ExplorerRootFolderCaption = 'Ra'#237'z' + NewExplorerFolderItem = 'Nueva Carpeta' + CopyOfItem = 'Copia de' + ReportExplorer = 'Explorer de Informes' + DataLoadErrorText = 'No se pudo cargar los datos del informe' + DBBasedExplorerItemDataLoadError = 'No se pudo cargar los datos.' + FileBasedExplorerItemDataLoadError = 'No se pudo cargar los datos.' + DeleteNonEmptyFolderMessageText = 'La carpeta "%s" no est'#225' vacia. A'#250'n as'#237' '#191'desea eliminarlo?' + DeleteFolderMessageText = 'Borrar Carpeta "%s" ?' + DeleteItemMessageText = 'Borrar elemento "%s" ?' + CannotRenameFolderText = + 'Cannot rename folder "%s". A folder with name "%s" already exist' + + 's. Specify a different name.' + CannotRenameItemText = + 'Cannot rename item "%s". An item with name "%s" already exists. ' + + 'Specify a different name.' + OverwriteFolderMessageText = 'This folder "%s" already contains folder named "%s".' + OverwriteItemMessageText = 'This Folder "%s" already contains item named "%s".' + SelectNewRoot = 'Select new Root Directory where the Reports will be stored' + InvalidFolderName = 'Nombre de Carpeta no V'#225'lida "%s"' + InvalidReportName = 'Nombre de Informe no V'#225'lido "%s"' + ExplorerBar = 'Explorador' + MenuFileSave = '&Salvar' + MenuFileSaveAs = 'S&alvar Como...' + MenuFileLoad = '&Cargar' + MenuFileClose = '&Descargar' + HintFileSave = 'Salvar Informe' + HintFileSaveAs = 'Salvar Informe Como' + HintFileLoad = 'Cargar Informe' + HintFileClose = 'Descargar Informe' + MenuExplorer = 'E&xplorador' + MenuExplorerCreateFolder = 'Crear &Carpeta' + MenuExplorerDelete = '&Borrar...' + MenuExplorerRename = 'Reno&mbrar' + MenuExplorerProperties = '&Propiedades...' + MenuExplorerRefresh = 'Refrescar' + MenuExplorerChangeRootPath = 'Cambiar Ra'#237'z...' + MenuExplorerSetAsRoot = 'Establecer Como Ra'#237'z' + MenuExplorerGoToUpOneLevel = 'Subir Un Nivel' + HintExplorerCreateFolder = 'Crear Nueva Carpeta' + HintExplorerDelete = 'Borrar' + HintExplorerRename = 'Renombrar' + HintExplorerProperties = 'Propiedades' + HintExplorerRefresh = 'Refrescar' + HintExplorerChangeRootPath = 'Cambiar Ra'#237'z' + HintExplorerSetAsRoot = 'Establecder Carpeta Actual Como Ra'#237'z' + HintExplorerGoToUpOneLevel = 'Subir Un Nivel' + MenuViewExplorer = 'E&xplorador' + HintViewExplorer = 'Mostar Explorador' + Summary = 'Resumen' + Creator = 'Creado&r:' + CreationDate = 'Crea&do:' + MenuViewThumbnails = 'Miniat&uras' + HintViewThumbnails = 'Mostar Miniaturas' + MenuFormatTitle = 'T&'#237'tulo...' + HintFormatTitle = 'Formatear T'#237'tulo del Informe' + Half = 'Medio' + PredefinedFunctions = 'Funciones Predefinidos' + ZoomParameters = '&Par'#225'metros de Aumento' + WrapData = 'Doblar Datos' + MenuShortcutExplorer = 'Explorador' + ExplorerToolBar = 'Explorador' + MenuThumbnailsSmall = 'Miniaturas &Peque'#241'as' + MenuThumbnailsLarge = 'Miniaturas &Grandes' + MenuShortcutThumbnails = 'Miniaturas' + Buttons = 'Botones' + BtnHeadersFont = 'Fuente &Cabeceras...' + HeadersTransparent = 'Cabeceras Transparentes' + HintListViewDesignerMessage = 'Most Options Are Being Taken Into Account Only In Detailed View' + ColumnHeaders = 'Cabeceras de &Columnas' + ReportGroupNullLookAndFeel = 'Null' + ReportGroupStandardLookAndFeel = 'Standard' + ReportGroupOfficeLookAndFeel = 'Office' + ReportGroupWebLookAndFeel = 'Web' + LayoutGroupDefaultCaption = 'Layout Group' + LayoutItemDefaultCaption = 'Layout Item' + CarManufacturerName5 = 'Volkswagen' + CarManufacturerCountry5 = 'Germany' + CarModel5 = 'Golf GTI' + LuxurySedans = 'Luxury Sedans' + CarManufacturer = 'Manufacturer' + CarModel = 'Model' + CarEngine = 'Engine' + CarTransmission = 'Transmission' + CarTires = 'Tires' + Volvo760V12Manufacturer = 'BMW' + Volvo760V12Model = '760Li V12' + Volvo760V12Engine = + '6.0L DOHC V12 438 HP 48V DI Valvetronic 12-cylinder engine with ' + + '6.0-liter displacement, dual overhead cam valvetrain' + Volvo760V12Transmission = 'Elec 6-Speed Automatic w/Steptronic' + Volvo760V12Tires = + 'P245/45R19 Fr - P275/40R19 Rr Performance. Low Profile tires wit' + + 'h 245mm width, 19.0" rim' + BandHeaderStyle = 'CabeceraGrupo' + CaptionStyle = 'T'#237'tulo' + CardCaptionRowStyle = 'T'#237'tulo Fila Fichas' + CardRowCaptionStyle = 'T'#237'tulo Fila Fichas' + CategoryStyle = 'Categor'#237'a' + ContentStyle = 'Contenido' + ContentEvenStyle = 'Contenido Filas Pares' + ContentOddStyle = 'Contenido Filas Impares' + FilterBarStyle = 'Barra de Filto' + FooterStyle = 'Pie' + FooterRowStyle = 'Pie de Fila' + GroupStyle = 'Grupo' + HeaderStyle = 'Cabecera' + IndentStyle = 'Indentaci'#243'n' + PreviewStyle = 'Vista Previa' + SelectionStyle = 'Selecci'#243'n' + Styles = 'Estilos' + StyleSheets = 'Hojas de Estilos' + BtnTexture = '&Textura...' + BtnTextureClear = 'Elimin&ar' + BtnColor = 'Co&lor...' + BtnSaveAs = 'Salvar &Como...' + BtnRename = '&Renombrar...' + LoadBitmapDlgTitle = 'Cargar Imagen' + DeleteStyleSheet = 'Borrar Hoja de Estilos con Nombre "%s"?' + UnnamedStyleSheet = 'SinNombre' + CreateNewStyleQueryNamePrompt = 'Entre un Nombre de Hoja de Estilo:' + StyleSheetNameAlreadyExists = 'Hoja de Estilo "%s" Ya Existe' + CannotLoadImage = 'No se pudo cargar el imagen "%s"' + UseNativeStyles = '&Usar Estilo Nativo' + SuppressBackgroundBitmaps = '&Suprimir Texturas de Fondo' + ConsumeSelectionStyle = 'Consumir Estilos de Selecci'#243'n' + Size = 'Tama'#241'o' + Levels = 'Niveles' + Unwrap = '&Desdoblar' + UnwrapTopLevel = 'Desdoblar Nivel Superior' + RiseActiveToTop = 'Subir Nivel Activo al Princ'#237'pio' + CannotUseOnEveryPageModeInAggregatedState = 'No se puede usar modo "EnCadaP'#225'gina"' + Pagination = 'Paginaci'#243'n' + ByBands = 'Por Grupos' + ByColumns = 'Por Columnas' + ByRows = 'Por Filas' + ByTopLevelGroups = 'Por Grupos de Primer Nivel' + OneGroupPerPage = 'Un Grupo por P'#225'gina' + Borders = 'Margenes' + ExplicitlyExpandNodes = 'Expandir Expl'#237'citamente los Nodos' + Nodes = '&Nodos' + Separators = 'Separadores' + Thickness = 'Grueso' + TLIncorrectHeadersState = 'No se puede usar el modo EnCadaP'#225'gina' + Rows = '&Filas' + BestFit = 'Ajuste &'#211'ptimo' + KeepSameRecordWidths = '&Mantaner Anchuras Iguales' + WrapRecords = '&Doblar Registros' + ByWrapping = 'Doblando' + OneWrappingPerPage = 'Doblando Uno por P'#225'gina' + PaginateByControlDetails = 'Detalles de Controles' + PaginateByControls = 'Controles' + PaginateByGroups = 'Grupos' + PaginateByItems = 'Elementos' + ControlsPlace = 'Enplazamiento de Controles' + ExpandHeight = 'Expandir Altura' + ExpandWidth = 'Expandir Anchura' + ShrinkHeight = 'Contraer Altura' + ShrinkWidth = 'Contraer Anchura' + CheckAll = 'Check &All' + CheckAllChildren = 'Check All &Children' + ControlsTab = 'Controls' + ExpandAll = 'E&xpand All' + HiddenControlsTab = 'Hidden Controls' + ReportLinksTab = 'Aggregated Designers' + Transparents = 'Transparents' + UncheckAllChildren = 'Uncheck &All Children' + Root = '&Ra'#237'z' + RootBorders = 'Root &Borders' + Controls = '&Controls' + Containers = 'C&ontainers' + HideCustomContainers = '&Hide Custom Containers' + Bytes = 'Bytes' + KiloBytes = 'KB' + MegaBytes = 'MB' + GigaBytes = 'GB' + Left = 184 + Top = 16 + end + object ROMessage: TROBinMessage + Left = 329 + Top = 88 + end + object DABINAdapter: TDABINAdapter + IsCompatibleV4 = False + Left = 424 + Top = 24 + end + object JvAppRegistryStorage: TJvAppRegistryStorage + StorageOptions.BooleanStringTrueValues = 'TRUE, YES, Y' + StorageOptions.BooleanStringFalseValues = 'FALSE, NO, N' + Root = 'Software\%APPL_NAME%' + SubStorages = <> + Left = 184 + Top = 80 + end + object RORemoteService: TRORemoteService + Message = ROMessage + Channel = ROChannel + ServiceName = 'srvLogin' + Left = 424 + Top = 92 + end +end diff --git a/Source/Base/uDMBase.pas b/Source/Base/uDMBase.pas new file mode 100644 index 0000000..ec5a945 --- /dev/null +++ b/Source/Base/uDMBase.pas @@ -0,0 +1,254 @@ +unit uDMBase; + +interface + +uses + Controls, PngImageList, JvComponent, JvNavigationPane, TBXSwitcher, + TBXOffice2003Theme, Classes, ImgList, uROClient, uROBinMessage, + uROServiceComponent, uRORemoteService, uROWinInetHttpChannel, + DataAbstract3_Intf, uDADataTable, uDABINAdapter, cxintl, cxIntlPrintSys3, + JvAppStorage, JvAppRegistryStorage, SysUtils, + JvComponentBase, uDADataStreamer; + +type + TdmBase = class(TDataModule) + ROChannel: TROWinInetHTTPChannel; + SmallImages: TPngImageList; + StyleManager: TJvNavPaneStyleManager; + TBXSwitcher: TTBXSwitcher; + cxIntl: TcxIntl; + cxIntlPrintSys3: TcxIntlPrintSys3; + ROMessage: TROBinMessage; + DABINAdapter: TDABINAdapter; + JvAppRegistryStorage: TJvAppRegistryStorage; + RORemoteService: TRORemoteService; + procedure DAClientDataModuleCreate(Sender: TObject); + procedure ROChannelFailure(Sender: TROTransportChannel; + anException: Exception; var Retry: Boolean); + procedure ROChannelProgress(iSender: TObject; iType: TProgressType; + iDirection: TProgressDirection; iTransferred, iTotal: Integer); + private + FOnThemeChange: TNotifyEvent; + function GetAdapter: TDABINAdapter; + function GetChannel: TROWinInetHTTPChannel; + function GetCodigoEmpresa: Integer; + function GetMessage: TROBinMessage; + procedure InitStyleManager; + procedure OnTBXThemeChange(Sender: TObject); + procedure LeerConfiguracion; + procedure SalvarConfiguracion; + public + function DarVersion : String; + procedure ConfigurarConexion; + function HayConexion(const ATargetURL : String = ''): Boolean; + property Adapter: TDABINAdapter read GetAdapter; + property Channel: TROWinInetHTTPChannel read GetChannel; + property CodigoEmpresa: Integer read GetCodigoEmpresa; + property Message: TROBinMessage read GetMessage; + property OnThemeChange: TNotifyEvent read FOnThemeChange write + FOnThemeChange; + end; + +var + dmBase: TdmBase; + +implementation + +{$R *.DFM} + +uses + Dialogs, TBX, TBXThemes, uConfigurarConexion, WinInet, Forms, Windows, + JclFileUtils, VARELA_Intf, cxControls; + +const + SERVER_URL = 'http://localhost:8099/bin'; + IE_OFFLINE_ERROR = 'Unexpected error in WinInet HTTP Channel (2)'; + +{ +*********************************** TdmBase ************************************ +} +procedure TdmBase.ConfigurarConexion; +begin + with TfConfigurarConexion.Create(NIL) do + try + TargetURL := ROChannel.TargetURL; + if ShowModal = mrOk then + begin + ROChannel.TargetURL := TargetURL; + ROChannel.Connected := False; + ROChannel.Connected := True; + SalvarConfiguracion; + end; + finally + Free; + end; +end; + +procedure TdmBase.DAClientDataModuleCreate(Sender: TObject); +begin + TBXSwitcher.OnThemeChange := OnTBXThemeChange; + TBXSetTheme('Office2003'); + + LeerConfiguracion; +end; + +function TdmBase.GetAdapter: TDABINAdapter; +begin + Result := DABinAdapter; +end; + +function TdmBase.GetChannel: TROWinInetHTTPChannel; +begin + Result := ROChannel; +end; + +function TdmBase.GetCodigoEmpresa: Integer; +begin + Result := 1; +end; + +function TdmBase.GetMessage: TROBinMessage; +begin + Result := ROMessage; +end; + +procedure TdmBase.InitStyleManager; +begin + if not USE_THEMES then + begin + TBXSwitcher.EnableXPStyles := False; + StyleManager.Theme := nptStandard; + end + else begin + TBXSwitcher.EnableXPStyles := True; + with StyleManager do + begin + if CurrentTheme is TTBXOffice2003Theme then + begin + case GetOffice2003Scheme of + osBlue : Theme := nptXPBlue; + osMetallic : Theme := nptXPSilver; + osGreen : Theme := nptXPOlive; + else + Theme := nptStandard; + end; + end; + end; + end; +end; + + +procedure TdmBase.LeerConfiguracion; +begin + ROChannel.TargetURL := JvAppRegistryStorage.ReadString('ServerURL', SERVER_URL); +end; + +procedure TdmBase.OnTBXThemeChange(Sender: TObject); +begin + InitStyleManager; + + if Assigned(FOnThemeChange) then + FOnThemeChange(Sender); +end; + +procedure TdmBase.SalvarConfiguracion; +begin + JvAppRegistryStorage.BeginUpdate; + try + JvAppRegistryStorage.WriteString('ServerURL', ROChannel.TargetURL); + finally + JvAppRegistryStorage.EndUpdate; + end; +end; + +procedure TdmBase.ROChannelFailure(Sender: TROTransportChannel; + anException: Exception; var Retry: Boolean); +begin + if (Pos(anException.Message, IE_OFFLINE_ERROR) > 0) then + begin + // Preguntar al usuario si se quiere conectar + if InternetGoOnline(PAnsiChar(ROChannel.TargetURL), GetDesktopWindow(), 0) then + Retry := True // Si el usuario pulsa en 'Conectar' reintentar la operación + else + Abort; // Si el usuario pulsa en 'Seguir desconectado' parar todo + end + else + Retry := True; +// raise Exception.Create(anException.Message); +end; + +procedure TdmBase.ROChannelProgress(iSender: TObject; iType: TProgressType; + iDirection: TProgressDirection; iTransferred, iTotal: Integer); +begin +{ if iType = ptInProgress then + begin + if not Form1.Visible then + Form1.Show; + end + else + Form1.Hide;} +end; + +function TdmBase.DarVersion: String; +var + Obj : TJclFileVersionInfo; +begin + Obj := TJclFileVersionInfo.Create(Application.ExeName); + try + Result := 'v' + Obj.FileVersion; + finally + FreeAndNil(Obj); + end; +end; + +function TdmBase.HayConexion(const ATargetURL: String): Boolean; +var + AHTTPChannel: TROWinInetHTTPChannel; + AROBinMessage: TROBinMessage; + ACoService: TRORemoteService; +begin + AHTTPChannel := TROWinInetHTTPChannel.Create(Self); + AROBinMessage := TROBinMessage.Create(Self); + ACoService := TRORemoteService.Create(Self); + + ShowHourglassCursor; + try + with AHTTPChannel do + begin + Name := 'HTTPChannel'; + UserAgent := 'AdminPV'; + if Length(ATargetURL) > 0 then + TargetURL := ATargetURL + else + TargetURL := ROChannel.TargetURL; + end; + + with ACoService do + begin + ServiceName := 'srvLogin'; + Message := AROBinMessage; + Channel := AHTTPChannel; + end; + + try + (ACoService as IsrvLogin).Ping; + Result := True; + except + Result := False; + end; + finally + AHTTPChannel.Connected := False; + FreeAndNil(AHTTPChannel); + FreeAndNil(ACoService); + FreeAndNil(AROBinMessage); + HideHourglassCursor; + end; +end; + +initialization + dmBase := TdmBase.Create(NIL); + +finalization + dmBase.Free; + +end. diff --git a/Source/Base/uDataModuleBase.dfm b/Source/Base/uDataModuleBase.dfm index 5f633ba..2c4cf30 100644 --- a/Source/Base/uDataModuleBase.dfm +++ b/Source/Base/uDataModuleBase.dfm @@ -1,1660 +1,5 @@ -object dmBase: TdmBase +object DataModuleBase: TDataModuleBase OldCreateOrder = True - OnCreate = DAClientDataModuleCreate - Height = 352 - Width = 518 - object SmallImages: TPngImageList - PngImages = < - item - PngImage.Data = { - 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF - 610000000970485973000017120000171201679FD252000002224944415478DA - 95935D48936114C77FCB36584A6064161515DEA441108B240293E8A682246805 - DEA45020F40196505D081242DE94512B8C20169937056914D52E726B6083B114 - D44CD3D51A216BB6656B5FEF677B5FF31D23033DF070CE03CFFFF73F1CCE6362 - 29D1806AD44E4C5A32F5F58FAA8BD5D73DD8465757034D4D4EFA4E8C62000ED7 - 56E997647490DFE131BD2ED9584971D98EB9478D2603D279B39EE6733DC6DD00 - 68E2EF7E07E95F2291688C48629ABDC71DACABD8AD0334E7B420104D24F4A3D5 - DDD707E60087F66C2234D0CECF2F41643987556566676799C9C4387AD18FF964 - 91E178EA522DF73ADC851D1CA85ECD27D77948995861B552844C2A9962303441 - DD051FA22473E5095C735B3972DAC6D3DB016EED7BC9FD47CFE601E57CF3B661 - C966D1E62C880299549A696915B6639D4892A243D6B6AC349C0B00DA0C22EF7B - 484EBDCA015424512491125036D751B1CBAE8BB5330F12459937EF860A01DEA0 - 8BA0FB0E5B154BAE832C810CACDF594F4DD5C17FC45AF6FA87F3800D95022DFD - ADC47E84682CDF8F222A3C9CF1303915E6C3E5495DDC7AE379C14E546F5F9307 - F8E4C7BC187F4BA6344E49D24C6E8A24AD12E65809A1895102CD6386B3F8B793 - C0F0C73CC0196927188E2297651096A7D096D4922D6659DCC2E7AF43F8CE8C70 - F5AEEBFF1D9CF5D889C7230BAE6F696939BDF6D7BAABACA87A567279647C320F - A8B16DA1BBD7B3A47FA5850168EB702C596C6CA2AA2EFA332E187F0080F1503E - 182A98A90000000049454E44AE426082} - Name = 'PngImage0' - Background = clWindow - end - item - PngImage.Data = { - 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF - 610000000774494D45000000000000000973942E000000097048597300001712 - 0000171201679FD252000001724944415478DA6364A0103062135CB1E2C26E20 - E5824F63448401235603809AA381D412374F5506413E2EB0D89FBFFF187EFFF9 - 0BC62F3EFD6728A999C0B0795E15A60150CD1540CD3A7B4FDCC5B0D5D94299E1 - CAD3BF0CDD3D53F280064CC666C06EA066176C36FF05B25F7F6544B11DC50098 - D3C3C3F519D6ECBA8C61BBBDA922C38D17FF41B6C384B6020DF261846AFE0FA4 - AE809C0EB21DDD6610FFCF9F7F0CE91553194CF49518A4558D1836AE59037609 - 23C8E6AB4F2E2C2136DAE4B5AC186E9CD9C570F3C1278801B53D0BFE3715C7E3 - D4F0E5C75F86CFDF8118487FF9F18F61C3BA350C12CA260C3B366F4218408CCD - 17AE3D03D3065A520CEC42AA0C278F1CC4EF02749BBF82F0CFBF0CC7F66E64F8 - C92AC970FDE259DC06A06BAE3DEFC390ABB49EE1FEB5530CCF9F3F6778FA919D - E1F5D3FBD80DC066F3AC743D8680EEB30CAFEE9E61D8BEF72C4CA90CD080A770 - 03A62FDB45542C400D006B062724DFA4366920FD84D86844D68C9212C905001F - 16FA1194E3DBC30000000049454E44AE426082} - Name = 'PngImage1' - Background = clWindow - end - item - PngImage.Data = { - 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF - 610000000970485973000017120000171201679FD2520000016A4944415478DA - 63FCFFFF3F03082CDD7212C22000627C2D18616C905E466403A27DCCF16A06AA - 61E89DB290E1FCCEE98C241BF0EFDF3F86E5DB4E33488B093314D5F5810D21DA - 0090E6DF7FFE31ACD97596C1C9429BE1E6BD176043CEED98C688D3804D0F0E30 - F45E6A02B37779EC62E05CC0C6B058EA38D80B3080D30090E6805D4E182E7911 - FC91E1C4E5C70C8F1E3F6298B774137603609AFFA4FC013B1B64738BB13743CD - D9AD0C8FFDDF81C5B6EC3B85DB00A6594C289A91C13DEF3740F1BF0C3B0F9DC5 - 6D0048C1EFDF7F21F49F7F50FA2FC31F181F2877E0E445EC068479988015F02C - E640B1F98EE72BB066CDDD120C676D1E311C3D7B05BB0181CE8660DB049773C3 - FD8DAC3957BB80219A379FE1D4C5EBD80DF0B1D7032B165BCD8B110330CD200B - CE5FBD85DD00776B1DB002E9F502609B13CF8781E50C840DE09A41165CB97907 - BB014EE69A1801060B44986610C06980ADB11AC3A63D2789C994D80D404EA6C4 - 0090010087546EF0ACB0C7920000000049454E44AE426082} - Name = 'PngImage2' - Background = clWindow - end - item - PngImage.Data = { - 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF - 61000000097048597300000AEB00000AEB01828B0D5A000002854944415478DA - A5935D48536118C7FFAFDB8CCD557E7F34B33167F9119617A91596495D781304 - 451021A651362821B1ABA49B6EA4460961D88542055D84DD6545415992174994 - 9625CC8F9C329D9B5F3BE9CED9D9797BCEA1C932A3A0079EC3CBE13CBFE7FF7F - 9FF330CE39FE2798FAB80BA4E61559EB2551E67B07279AE8D51FA98F2CC99546 - 031A3D6E5FF329993F631D80B52227A6D7929F9BAEA459D1D73BE8DC3330D6B8 - 1AD206641414DA5A6224E1E8ECA47779660955D532EF642F1371BD74331A14FA - 9C27A4439F5D88777DAE1B65FD230D11485786B9363D65FD35C1EB4B9817427E - 9F80C335C05BD53E23B2A934132FB23662B71406C2B14698F38AF0E9EB9473E8 - E3C8655BD686D6F858A5DA3F27B04511E37E0195B5C0A00AD6003FE5259758F0 - 3AD1843C15125218CCB6AD707FF34EAC93973217041154ECF608D8770E188BD8 - 5A01A8A1DEC5F60CF4980CB0A890E8A47AFFF477EC3F037C8EBE975F006ADC37 - 60A7351E3D061DE222C522A5270047AD82DBAB27B21AC09EDA373525E9A52BCB - 7E5F4CB4822509BE80848AB3C0C09A806380EE7CA1BDC55EB4CDE17AF2984932 - 75A60CCA088739742A84CE1E49C1010730F41BA03B27CD595C517CB1FFF92B04 - E6035AF142101DCB12DA743AB413243FA468331D0F01E51780D1154057AAF148 - D92E7BE794778E8DB92634C901116FA6451CAA27214EC06802AE5227AA839ED2 - 45A0729AC6A406182DD9329C10A7B7F57D18D63A93DF99D92076905F4FB4DF56 - A08C20ED9476027CD1209C7BD9FBDC947BC1C0E2C9596A4B003E27E2F8E9301E - AEB507B700334968A6631D019C759C5F627780822413BA194312CDFB41958C13 - 7FDB4052739000430ECEDD913F313B568F9B8B326AC8F7CCBFAEB27A073F0058 - 5538F0EAB25B380000000049454E44AE426082} - Name = 'PngImage3' - Background = clWindow - end - item - PngImage.Data = { - 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF - 610000000970485973000017120000171201679FD2520000011F4944415478DA - 63FCFFFF3F03258091620390394975ABC1A6BD79FB8561D3D4444642E220CB31 - 0C985113C8A0E6D6C4F0E040132321711403408A40367CFCF28DE1E1C3970C7A - DA8A60DB708963350064CBF6938F18966C3EC770FAD425B06DB8C409BA000440 - B68908F330A08B631800D23CB73184E1D9CB4F0C775EFD6598B2641FD8A68208 - 2F864BCF1E33A0CB71BF7AC2B0604101380619571EBDFB7FE7CE730CD9518E60 - D3F79CB8C770E6DA23B0013017609373501062983F3F9F111E4820F0F8C52730 - FDFEED5B30CDC2FC91C1CEDA860197FCFDFD8D8CF040DA77EE39C395DBAF182E - DF7DC370F0C051ACD188AE66901A70F2F27D94B8C666004C0DDC801F3F7F323C - 7DF191E1D78F9F0CCF5F7E40896B9801D8D4800DA0343702001BEF6EF0E3CC7C - BD0000000049454E44AE426082} - Name = 'PngImage4' - Background = clWindow - end - item - PngImage.Data = { - 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF - 610000000970485973000017120000171201679FD252000002234944415478DA - A5934F4814511CC7BF6BBAB0AD97225B2A2B4B88ECB014861241ED2190FE9017 - 2D15843A74E8E0A14D3282608935920E092D7A10A44C25A843497FEDA0EB422D - 2DE6A2F647ADA5C542A6DD76DB6CC79979F3DE34F3CA99C4BAB40F1EEF0DEF7D - 3FDFEFFC783F9BA669C865D8EE0FBDCE89C001473D3BF8473631861FB36FF9BE - 7063199C45BBCC8B4C4FAAAA0C44A5E6ACAA3F67010CF19748000BDF0984440A - C2FC1CF61F0F605DE91EA894E17CAFB2C4B9246F18DD7D03BF0087F76E46FCB9 - 1FDF3EC640A97EAA5164321924A5146A5A22A6A391C0E971724097F7B1053858 - B90633835E40B461A5C38115A010B322C6E2D3A83E1BE6E24B7781D676070A1A - 9A40FAAFA3270A74569D5E04B8F039E4835D96757740210A24710173EA6A941F - BBC69D676E3BF169EB3892E37DC86B6EE3294C805103E1553FB21F9EE800BD58 - 84605E54C04AAA515A51CBC5EE230108D38F7073A402EB7D3EC83D7FFC820108 - C506111BEEC07666D713C81895800DBB1BB0E94D9D2936668DBF180F9E85118A - 4C5880E23205CD431791FA1AC749D70130C2702B1944A73DBA4CECA96BE5F12B - DD6B2D4098DEC1C3A91148ABD228CC1640AF223A94977F7526BFDFC2E8C43B0B - 7043F023369B002D92A0E48BF0CA67B09334C2B5EDD032E7C5B1244153B016E9 - B4601E5E75B7E344633DA2DDF95C3CF0F40577A54CE32BD3D7C9A9F716605FF9 - 16F4DE0B9A80B60BA7CC7DCBE5AE7FF68109F05D09FC7F33E5DACE3F0109DB53 - BED36F80890000000049454E44AE426082} - Name = 'PngImage5' - Background = clWindow - end> - PngOptions = [pngBlendOnDisabled, pngGrayscaleOnDisabled] - Left = 24 - Top = 16 - Bitmap = {} - end - object TBXSwitcher: TTBXSwitcher - Theme = 'Default' - Left = 24 - Top = 80 - end - object StyleManager: TJvNavPaneStyleManager - Colors.ButtonColorFrom = clWhite - Colors.ButtonColorTo = 12435133 - Colors.ButtonHotColorFrom = 13009540 - Colors.ButtonHotColorTo = 13009540 - Colors.ButtonSelectedColorFrom = 14602190 - Colors.ButtonSelectedColorTo = 14602190 - Colors.SplitterColorFrom = 13026246 - Colors.SplitterColorTo = 9211532 - Colors.DividerColorFrom = 15725551 - Colors.DividerColorTo = 13026246 - Colors.HeaderColorFrom = 8684164 - Colors.HeaderColorTo = 8684164 - Colors.FrameColor = 8684676 - Colors.ToolPanelHeaderColorFrom = clWhite - Colors.ToolPanelHeaderColorTo = 12435133 - Fonts.NavPanelFont.Charset = DEFAULT_CHARSET - Fonts.NavPanelFont.Color = clWindowText - Fonts.NavPanelFont.Height = -13 - Fonts.NavPanelFont.Name = 'Tahoma' - Fonts.NavPanelFont.Style = [] - Fonts.NavPanelHotTrackFont.Charset = DEFAULT_CHARSET - Fonts.NavPanelHotTrackFont.Color = clWindow - Fonts.NavPanelHotTrackFont.Height = -13 - Fonts.NavPanelHotTrackFont.Name = 'Tahoma' - Fonts.NavPanelHotTrackFont.Style = [] - Fonts.DividerFont.Charset = DEFAULT_CHARSET - Fonts.DividerFont.Color = clWindowText - Fonts.DividerFont.Height = -11 - Fonts.DividerFont.Name = 'Tahoma' - Fonts.DividerFont.Style = [] - Fonts.HeaderFont.Charset = DEFAULT_CHARSET - Fonts.HeaderFont.Color = clWindow - Fonts.HeaderFont.Height = -16 - Fonts.HeaderFont.Name = 'Arial' - Fonts.HeaderFont.Style = [fsBold] - Theme = nptCustom - Left = 104 - Top = 80 - end - object ROChannel: TROWinInetHTTPChannel - OnFailure = ROChannelFailure - OnException = ROChannelFailure - UserAgent = 'RemObjects SDK' - TargetURL = 'http://localhost:8099/bin' - Login.Username = 'zvg' - Login.Password = 'zeus' - KeepConnection = True - OnProgress = ROChannelProgress - ServerLocators = <> - DispatchOptions = [] - Left = 330 - Top = 24 - end - object cxIntl: TcxIntl - Connected = True - cxLibrary.CantCreateRegistryKey = 'No se puede crear la llave de registro : \%s' - PageControl2.ImageListIndexError = 'El '#237'ndice (%d) deber'#225' estar entre 0 y %d' - PageControl2.NoBaseImages = 'BaseImages no est'#225' asignado' - PageControl2.NoRegisteredStyles = 'No hay estilos registrados' - PageControl2.PageIndexError = '%d es un valor inv'#225'lido para PageIndex, debe estar entre 0 y %d' - PageControl2.PainterClassError = 'La clase PCPainter es nula' - PageControl2.StandardStyleError = '%s es un estilo est'#225'ndar no soportado' - PageControl2.StyleNameError = '%s es un nombre de estilo no registrado' - PageControl2.TabCountEqualsZero = 'Tabs.Count = 0' - PageControl2.TabIndexError = 'El '#237'ndice de la pesta'#241'a (%d) est'#225' fuera de l'#237'mites' - PageControl2.TabVisibleIndexOutsOfBounds = 'Propiedad TabVisibleIndex (%d) deber'#225' estar entre 0 y %d' - PageControl2.VisibleTabListEmpty = 'No hay pesta'#241'as visibles' - QuantumGrid5.GridRecursiveLevels = 'No se pueden crear niveles recursivos' - QuantumGrid5.GridDeletingConfirmationCaption = 'Confirmar' - QuantumGrid5.GridDeletingFocusedConfirmationText = #191'Borrar registro?' - QuantumGrid5.GridDeletingSelectedConfirmationText = #191'Borrar todos los registros seleccionados?' - QuantumGrid5.GridNoDataInfoText = '' - QuantumGrid5.GridNewItemRowInfoText = 'Haga click aqu'#237' para agregar una nueva l'#237'nea' - QuantumGrid5.GridFilterIsEmpty = '' - QuantumGrid5.GridCustomizationFormCaption = 'Personalizaci'#243'n' - QuantumGrid5.GridCustomizationFormColumnsPageCaption = 'Columnas' - QuantumGrid5.GridGroupByBoxCaption = 'Arrastre una columna aqu'#237' para agrupar por dicha columna' - QuantumGrid5.GridFilterCustomizeButtonCaption = 'Personalizar...' - QuantumGrid5.GridColumnsQuickCustomizationHint = 'Haga click aqu'#237' para seleccionar las columas visibles' - QuantumGrid5.GridCustomizationFormBandsPageCaption = 'Bandas' - QuantumGrid5.GridBandsQuickCustomizationHint = 'Haga click aqu'#237' para seleccionar las bandas visibles' - QuantumGrid5.GridCustomizationFormRowsPageCaption = 'Rows' - QuantumGrid5.GridConverterIntermediaryMissing = 'Omiti'#243' un componente intermediario!' - QuantumGrid5.GridConverterNotExistGrid = 'cxGrid no existe' - QuantumGrid5.GridConverterNotExistComponent = 'El componente no existe' - QuantumGrid5.ImportErrorCaption = 'Error al importar' - QuantumGrid5.NotExistGridView = 'No existe la vista del grid' - QuantumGrid5.NotExistGridLevel = 'No existe un nivel de grid activo' - QuantumGrid5.CantCreateExportOutputFile = 'No se puede crear el archivo de exportaci'#243'n' - QuantumGrid5.EditRepositoryExtLookupComboBoxItem = - 'ExtLookupComboBox|Representa un ultra avanzado control de busque' + - 'da (lookup) usando el QuantumGrid como su control de despliegue' - Navigator.NavigatorHint_First = 'Primer registro' - Navigator.NavigatorHint_Prior = 'Registro anterior' - Navigator.NavigatorHint_PriorPage = 'P'#225'gina anterior' - Navigator.NavigatorHint_Next = 'Siguiente registro' - Navigator.NavigatorHint_NextPage = 'Siguiente p'#225'gina' - Navigator.NavigatorHint_Last = #218'ltimo registro' - Navigator.NavigatorHint_Insert = 'Insertar registro' - Navigator.NavigatorHint_Delete = 'Borrar registro' - Navigator.NavigatorHint_Edit = 'Editar registro' - Navigator.NavigatorHint_Post = 'Grabar edici'#243'n' - Navigator.NavigatorHint_Cancel = 'Cancelar edici'#243'n' - Navigator.NavigatorHint_Refresh = 'Actualizar datos' - Navigator.NavigatorHint_SaveBookmark = 'Guardar Marca' - Navigator.NavigatorHint_GotoBookmark = 'Volver a Marca' - Navigator.NavigatorHint_Filter = 'Filtrar datos' - Navigator.Navigator_DeleteRecordQuestion = #191'Desea borrar este el registro?' - Editors5.EditDateConvertError = 'El valor no se puede convertir a fecha' - Editors5.EditInvalidRepositoryItem = 'Elemento de repositorio no v'#225'lido' - Editors5.EditNumericValueConvertError = 'No se puede convertir a valor num'#233'rico' - Editors5.EditPopupCircularReferencingError = 'Referencia circular no permitida' - Editors5.EditPostError = 'Ocurri'#243' un error durante el grabado del valor de edici'#243'n' - Editors5.EditTimeConvertError = 'No se puede convertir a valor de tiempo' - Editors5.EditValidateErrorText = 'Valor inv'#225'lido. Use la tecla de escape para cancelar cambios' - Editors5.EditValueOutOfBounds = 'Valor fuera de l'#237'mites' - Editors5.EditCheckBoxChecked = 'True' - Editors5.EditCheckBoxUnchecked = 'False' - Editors5.TextTrue = 'True' - Editors5.TextFalse = 'False' - Editors5.BlobButtonOK = '&Aceptar' - Editors5.BlobButtonCancel = '&Cancelar' - Editors5.BlobButtonClose = '&Cerrar' - Editors5.BlobMemo = '(MEMO)' - Editors5.BlobMemoEmpty = '(memo)' - Editors5.BlobPicture = '(IM'#193'GEN)' - Editors5.BlobPictureEmpty = '(im'#225'gen)' - Editors5.MenuItemCaptionCut = 'Cor&tar' - Editors5.MenuItemCaptionCopy = '&Copiar' - Editors5.MenuItemCaptionPaste = '&Pegar' - Editors5.MenuItemCaptionDelete = '&Borrar' - Editors5.MenuItemCaptionLoad = '&Leer...' - Editors5.MenuItemCaptionSave = 'Guardar &Como...' - Editors5.DatePopupClear = 'Limpiar' - Editors5.DatePopupNow = 'Ahora' - Editors5.DatePopupOK = 'Aceptar' - Editors5.DatePopupToday = 'Hoy' - Editors5.DateError = 'Fecha inv'#225'lida' - Editors5.DateToday = 'hoy' - Editors5.DateYesterday = 'ayer' - Editors5.DateTomorrow = 'ma'#241'ana' - Editors5.DateSunday = 'Domingo' - Editors5.DateMonday = 'Lunes' - Editors5.DateTuesday = 'Martes' - Editors5.DateWednesday = 'Mi'#233'rcoles' - Editors5.DateThursday = 'Jueves' - Editors5.DateFriday = 'Viernes' - Editors5.DateSaturday = 'S'#225'bado' - Editors5.DateFirst = 'Primero' - Editors5.DateSecond = 'segundo' - Editors5.DateThird = 'tercero' - Editors5.DateFourth = 'Cuarto' - Editors5.DateFifth = 'Quinto' - Editors5.DateSixth = 'sexto' - Editors5.DateSeventh = 's'#233'ptimo' - Editors5.DateBOM = 'bom' - Editors5.DateEOM = 'eom' - Editors5.DateNow = 'ahora' - Editors5.CalcError = 'Error' - Editors5.HyperLinkPrefix = 'http://' - Editors5.HyperLinkDoubleSlash = '//' - Editors5.EditRepositoryBlobItem = 'BlobEdit|Representa el editor de BLOB' - Editors5.EditRepositoryButtonItem = - 'ButtonEdit|Representa un control de edici'#243'n con controles incrus' + - 'tados' - Editors5.EditRepositoryCalcItem = - 'CalcEdit|Representa un control de edici'#243'n con una ventana de cal' + - 'culadora desplegable' - Editors5.EditRepositoryCheckBoxItem = - 'CheckBox|Representa un control de caja de marca que permite sele' + - 'ccionar una opci'#243'n' - Editors5.EditRepositoryComboBoxItem = 'ComboBox|Representa el editor de la caja combo' - Editors5.EditRepositoryCurrencyItem = - 'CurrencyEdit|Representa un editor que habilita la edici'#243'n de val' + - 'ores monetarios' - Editors5.EditRepositoryDateItem = - 'DateEdit|Representa un control de edici'#243'n con un calendario desp' + - 'legable' - Editors5.EditRepositoryHyperLinkItem = 'HyperLink|Representa un editor de texto de hiperv'#237'nculos' - Editors5.EditRepositoryImageComboBoxItem = - 'ImageComboBox|Representa un editor que muestra una lista de im'#225'g' + - 'enes y texto en la ventana desplegable' - Editors5.EditRepositoryImageItem = 'Image|Representa un editor de im'#225'genes' - Editors5.EditRepositoryLookupComboBoxItem = 'LookupComboBox|Representa una caja de b'#250'squeda' - Editors5.EditRepositoryMaskItem = 'MaskEdit|Representa un control de edici'#243'n gen'#233'rico con m'#225'scara' - Editors5.EditRepositoryMemoItem = - 'Memo|Representa un control de edici'#243'n que permite editar datos m' + - 'emo' - Editors5.EditRepositoryMRUItem = - 'MRUEdit|Representa un editor de texto mostrando la lista de los ' + - 'elementos m'#225's recientemente usados (MRU) en una ventana desplega' + - 'ble' - Editors5.EditRepositoryPopupItem = - 'PopupEdit|Representa un control de edici'#243'n con una lista despleg' + - 'able' - Editors5.EditRepositorySpinItem = 'SpinEdit|Representa un editor de incrementos/decrementos (spin)' - Editors5.EditRepositoryRadioGroupItem = 'RadioGroup|Represents a group of radio buttons' - Editors5.EditRepositoryTextItem = 'TextEdit|Representa un editor de texto de l'#237'nea sencilla' - Editors5.EditRepositoryTimeItem = 'TimeEdit|Representa un editor mostrando valores de tiempo' - Editors5.RegExprLine = 'L'#237'nea' - Editors5.RegExprChar = 'Char' - Editors5.RegExprNotAssignedSourceStream = 'No se ha asignado el stream fuente' - Editors5.RegExprEmptySourceStream = 'El stream or'#237'gen est'#225' vac'#237'o' - Editors5.RegExprCantUsePlusQuantifier = 'El cuantificador '#39'+'#39' no puede aplicarse aqu'#237 - Editors5.RegExprCantUseStarQuantifier = 'El cuantificador '#39'*'#39' no puede aplicarse aqu'#237 - Editors5.RegExprCantCreateEmptyAlt = 'La alternativa no debe estar vac'#237'a' - Editors5.RegExprCantCreateEmptyBlock = 'El bloque no debe estar vac'#237'o' - Editors5.RegExprIllegalSymbol = 'S'#237'mbolo no permitido '#39'%s'#39 - Editors5.RegExprIllegalQuantifier = 'Cuantificador no permitido '#39'%s'#39 - Editors5.RegExprNotSupportQuantifier = 'El par'#225'metro cuantificador no es soportado' - Editors5.RegExprIllegalIntegerValue = 'Valor entero no permitido' - Editors5.RegExprTooBigReferenceNumber = 'N'#250'mero de referencia demasiado grande' - Editors5.RegExprCantCreateEmptyEnum = 'No puedo crear enumeraci'#243'n vac'#237'a' - Editors5.RegExprSubrangeOrder = 'El caracter de inicio del subrango debe ser menor al de fin' - Editors5.RegExprHexNumberExpected0 = 'Se esperaba n'#250'mero Hexadecimal' - Editors5.RegExprHexNumberExpected = 'N'#250'mero Hexadecimal esperado pero encontr'#243' '#39'%s'#39 - Editors5.RegExprMissing = 'Falta '#39'%s'#39 - Editors5.RegExprUnnecessary = 'Innecesario '#39'%s'#39 - Editors5.RegExprIncorrectSpace = 'Espacio incorrecto despu'#233's de '#39'\'#39 - Editors5.RegExprNotCompiled = 'Expresi'#243'n regular no compila' - Editors5.RegExprIncorrectParameterQuantifier = 'Cuantificador de par'#225'metros incorrecto' - Editors5.RegExprCantUseParameterQuantifier = 'The parameter quantifier cannot be applied here' - Editors5.MaskEditRegExprError = 'Errores en expresiones regulares:' - Editors5.MaskEditInvalidEditValue = 'El valor de edici'#243'n es inv'#225'lido' - Editors5.MaskEditNoMask = 'Ninguno' - Editors5.MaskEditIllegalFileFormat = 'Formato de archivo ilegal' - Editors5.MaskEditEmptyMaskCollectionFile = 'El archivo de colecci'#243'n de m'#225'scaras est'#225' vac'#237'o' - Editors5.MaskEditMaskCollectionFiles = 'Archivos de colecci'#243'n de m'#225'scaras' - Editors5.SpinEditInvalidNumericValue = 'Valor num'#233'rico no v'#225'lido' - Datacontroller.DataReadError = 'Error de lectura en or'#237'gen de datos' - Datacontroller.DataWriteError = 'Error de escritura en or'#237'gen de datos (stream)' - Datacontroller.DataItemExistError = 'El elemento ya existe' - Datacontroller.DataRecordIndexError = #205'ndice de registro fuera de rango' - Datacontroller.DataItemIndexError = #205'ndice de elemento fuera de rango' - Datacontroller.DataProviderModeError = 'La operaci'#243'n no es soportada en modo de proveedor (provider)' - Datacontroller.DataInvalidStreamFormat = 'Origen de datos (Stream) inv'#225'lido' - Datacontroller.DataRowIndexError = #205'ndice del elemento de fila fuera de rango' - Datacontroller.DataCustomDataSourceInvalidCompare = 'Instrucci'#243'n GetInfoForCompare no implementada' - Datacontroller.DBDetailFilterControllerNotFound = 'DetailFilterController no encontrado' - Datacontroller.DBNotInGridMode = 'La controladora de datos no est'#225' en modo de Grid' - Datacontroller.DBKeyFieldNotFound = 'Campo llave no encontrado' - Filter.FilterOperatorEqual = 'igual' - Filter.FilterOperatorNotEqual = 'no es igual' - Filter.FilterOperatorLess = 'es menor que' - Filter.FilterOperatorLessEqual = 'es menor o igual que' - Filter.FilterOperatorGreater = 'es mayor que' - Filter.FilterOperatorGreaterEqual = 'es mayor o igual que' - Filter.FilterOperatorLike = 'como' - Filter.FilterOperatorNotLike = 'no es como' - Filter.FilterOperatorBetween = 'entre' - Filter.FilterOperatorNotBetween = 'no entre' - Filter.FilterOperatorInList = 'en' - Filter.FilterOperatorNotInList = 'no en' - Filter.FilterOperatorYesterday = 'es ayer' - Filter.FilterOperatorToday = 'es hoy' - Filter.FilterOperatorTomorrow = 'es ma'#241'ana' - Filter.FilterOperatorLastWeek = 'es '#250'ltima semana' - Filter.FilterOperatorLastMonth = 'es '#250'ltimo mes' - Filter.FilterOperatorLastYear = 'es a'#241'o pasado' - Filter.FilterOperatorThisWeek = 'es esta semana' - Filter.FilterOperatorThisMonth = 'es este mes' - Filter.FilterOperatorThisYear = 'es este a'#241'o' - Filter.FilterOperatorNextWeek = 'es semana siguiente' - Filter.FilterOperatorNextMonth = 'es mes siguiente' - Filter.FilterOperatorNextYear = 'es a'#241'o pr'#243'ximo' - Filter.FilterAndCaption = 'y' - Filter.FilterOrCaption = 'o' - Filter.FilterNotCaption = 'no' - Filter.FilterBlankCaption = 'vac'#237'o' - Filter.FilterOperatorIsNull = 'es vac'#237'o' - Filter.FilterOperatorIsNotNull = 'no es vac'#237'o' - Filter.FilterOperatorBeginsWith = 'comienza con' - Filter.FilterOperatorDoesNotBeginWith = 'no comienza con' - Filter.FilterOperatorEndsWith = 'termina con' - Filter.FilterOperatorDoesNotEndWith = 'no termina con' - Filter.FilterOperatorContains = 'contiene' - Filter.FilterOperatorDoesNotContain = 'no contiene' - Filter.FilterBoxAllCaption = '(Todos)' - Filter.FilterBoxCustomCaption = '(Personalizado...)' - Filter.FilterBoxBlanksCaption = '(Vac'#237'os)' - Filter.FilterBoxNonBlanksCaption = '(No vac'#237'os)' - Filter.FilterBoolOperatorAnd = 'AND' - Filter.FilterBoolOperatorOr = 'OR' - Filter.FilterBoolOperatorNotAnd = 'NOT AND' - Filter.FilterBoolOperatorNotOr = 'NOT OR' - Filter.FilterRootButtonCaption = 'Filtro' - Filter.FilterAddCondition = 'Agregar &Condici'#243'n' - Filter.FilterAddGroup = 'Agregar &Grupo' - Filter.FilterRemoveRow = '&Remover Fila' - Filter.FilterClearAll = 'Limpiar &Todo' - Filter.FilterFooterAddCondition = 'Agregar una nueva condici'#243'n' - Filter.FilterGroupCaption = 'aplica a las siguientes condiciones' - Filter.FilterRootGroupCaption = '' - Filter.FilterControlNullString = '' - Filter.FilterErrorBuilding = 'No se puede construir filtro desde el or'#237'gen' - Filter.FilterDialogCaption = 'Filtro Personalizado' - Filter.FilterDialogInvalidValue = 'Valor inv'#225'lido' - Filter.FilterDialogUse = 'Usar' - Filter.FilterDialogSingleCharacter = 'para representar un caracter sencillo' - Filter.FilterDialogCharactersSeries = 'para representar cualquier serie de caracteres' - Filter.FilterDialogOperationAnd = 'Y' - Filter.FilterDialogOperationOr = 'O' - Filter.FilterDialogRows = 'Mostrar filas donde:' - Filter.FilterControlDialogCaption = 'Constructor de Filtro' - Filter.FilterControlDialogNewFile = 'sinnombre.flt' - Filter.FilterControlDialogOpenDialogCaption = 'Abrir un filtro existente' - Filter.FilterControlDialogSaveDialogCaption = 'Grabar el filtro activo a archivo' - Filter.FilterControlDialogActionSaveCaption = '&Guardar...' - Filter.FilterControlDialogActionOpenCaption = '&Abrir...' - Filter.FilterControlDialogActionApplyCaption = '&Aplicar' - Filter.FilterControlDialogActionOkCaption = 'Aceptar' - Filter.FilterControlDialogActionCancelCaption = 'Cancelar' - Filter.FilterControlDialogFileExt = 'flt' - Filter.FilterControlDialogFileFilter = 'Filtros (*.flt)|*.flt' - GridPopupMenu.GridNone = 'Ninguno' - GridPopupMenu.GridSortColumnAsc = 'Ordenar Ascendente' - GridPopupMenu.GridSortColumnDesc = 'Ordenar Descendente' - GridPopupMenu.GridClearSorting = 'Clear Sorting' - GridPopupMenu.GridGroupByThisField = 'Agrupar por este campo' - GridPopupMenu.GridRemoveThisGroupItem = 'Remover del grupo' - GridPopupMenu.GridGroupByBox = 'Panel "Agrupar por"' - GridPopupMenu.GridAlignmentSubMenu = 'Alineaci'#243'n' - GridPopupMenu.GridAlignLeft = 'Alineaci'#243'n Izquierda' - GridPopupMenu.GridAlignRight = 'Alineaci'#243'n Derecha' - GridPopupMenu.GridAlignCenter = 'Alineaci'#243'n Centrada' - GridPopupMenu.GridRemoveColumn = 'Remover esta columna' - GridPopupMenu.GridFieldChooser = 'Selector de campos' - GridPopupMenu.GridBestFit = 'Mejor distribuci'#243'n' - GridPopupMenu.GridBestFitAllColumns = 'Mejor distribuci'#243'n (Todas las columnas)' - GridPopupMenu.GridShowFooter = 'Pie' - GridPopupMenu.GridShowGroupFooter = 'Pies de grupo' - GridPopupMenu.GridSumMenuItem = 'Sumar' - GridPopupMenu.GridMinMenuItem = 'M'#237'nimo' - GridPopupMenu.GridMaxMenuItem = 'M'#225'ximo' - GridPopupMenu.GridCountMenuItem = 'Contar' - GridPopupMenu.GridAvgMenuItem = 'Promedio' - GridPopupMenu.GridNoneMenuItem = 'Ninguno' - GridExport.UnsupportedExport = 'Tipo de exportaci'#243'n no soportado: %1' - GridExport.StyleManagerKill = - 'El administrador de estilo esta siendo utilizado y no puede ser ' + - 'liberado en este momento' - GridExport.StyleManagerCreate = 'No se puede crear administrador de estilo' - GridExport.ExportToHtml = 'Exportar a p'#225'gina Web (*.html)' - GridExport.ExportToXml = 'Exportar a documento XML (*.xml)' - GridExport.ExportToText = 'Exportar a formato de texto (*.txt)' - GridExport.EmptyExportCache = 'Cache de exportaci'#243'n vac'#237'o' - GridExport.IncorrectUnion = 'Uni'#243'n de celdas incorrecta' - GridExport.IllegalWidth = 'Ancho de columna ilegal' - GridExport.InvalidColumnRowCount = 'Conteo de columna o fila inv'#225'lido' - GridExport.IllegalHeight = 'Alto de fila ilegal' - GridExport.InvalidColumnIndex = 'El '#237'ndice de columna %d fuera de l'#237'mites' - GridExport.InvalidRowIndex = 'El '#237'ndice de fila %d est'#225' fuera de l'#237'mites' - GridExport.InvalidStyleIndex = #205'ndice de estilo %d inv'#225'lido' - GridExport.ExportToExcel = 'Exportar a MS Excel (*.xls)' - GridExport.WorkbookWrite = 'Error al escribir el archivo XLS' - GridExport.InvalidCellDimension = 'Dimensi'#243'n de celda inv'#225'lida' - GridExport.BoolTrue = 'True' - GridExport.BoolFalse = 'False' - Translate.cxLibrary = True - Translate.PageControl2 = False - Translate.QuantumGrid5 = True - Translate.Editors5 = True - Translate.Datacontroller = True - Translate.Filter = True - Translate.GridPopupMenu = True - Translate.GridExport = True - Translate.Navigator = True - Version = '5.0' - Left = 104 - Top = 16 - end - object cxIntlPrintSys3: TcxIntlPrintSys3 - Connected = True - Version = '3.0' - BtnOK = 'Aceptar' - BtnOKAccelerated = '&Aceptar' - BtnCancel = 'Cancelar' - BtnClose = 'Cerrar' - BtnApply = '&Aplicar' - BtnHelp = 'A&yuda' - BtnFix = '&Arreglar' - BtnNew = '&Nuevo...' - BtnIgnore = '&Ignorar' - BtnYes = '&S'#237 - BtnNo = '&No' - BtnEdit = '&Editar...' - BtnReset = '&Restaurar' - BtnAdd = '&A'#241'adir' - BtnAddComposition = 'A'#241'adir &Comparativa' - BtnDefault = '&Defecto...' - BtnDelete = '&Borrar...' - BtnDescription = '&Descripci'#243'n...' - BtnCopy = '&Copiar...' - BtnYesToAll = 'S'#237' a &Todos' - BtnRestoreDefaults = '&Rest.Defecto' - BtnRestoreOriginal = 'Restaurar &Original' - BtnTitleProperties = 'Prop. del T'#237'tulo...' - BtnProperties = 'P&ropiedades...' - BtnNetwork = 'R&ed...' - BtnBrowse = '&Hojear...' - BtnPageSetup = 'Config. P'#225'&gina...' - BtnPrintPreview = 'Vista Pre&via...' - BtnPreview = '&Ver...' - BtnPrint = 'Imprimir...' - BtnOptions = '&Opciones...' - BtnStyleOptions = 'Opciones de estilo...' - BtnDefinePrintStyles = '&Definir Estilos...' - BtnPrintStyles = 'Estilos de Imp.' - BtnBackground = 'Fondo' - BtnShowToolBar = 'Mostrar &Herramientas' - BtnDesign = 'D&ise'#241'o...' - BtnMoveUp = 'Mover &Arriba' - BtnMoveDown = 'Mover Aba&jo' - BtnMoreColors = '&M'#225's Colores...' - BtnFillEffects = 'Efectos de &Relleno...' - BtnNoFill = '&Sin Relleno' - BtnAutomatic = '&Autom'#225'tico' - BtnNone = '&Ninguno' - BtnOtherTexture = 'Otras Te&xturas...' - BtnInvertColors = 'I&nvertir Colores' - BtnSelectPicture = 'Se&leccionar Imagen...' - EditReports = 'Editar Informes' - Composition = 'Composici'#243'n' - ReportTitleDlgCaption = 'T'#237'tulo del Informe' - Mode = '&Modo:' - Text = '&Texto' - Properties = '&Propiedades' - AdjustOnScale = '&Ajustar Escala' - TitleModeNone = 'Ninguno' - TitleModeOnEveryTopPage = 'En Cada P'#225'gina' - TitleModeOnFirstPage = 'En Primera P'#225'gina' - EditDescription = 'Editar Descripci'#243'n' - Rename = 'Reno&mbrar' - SelectAll = 'Seleccionar Todo' - AddReport = 'A'#241'adir Informe' - AddAndDesignReport = 'A'#241'adir y D&ise'#241'ar Informe...' - NewCompositionCaption = 'Nueva Composici'#243'n' - Name0 = '&Nombre:' - Caption = '&T'#237'tulo:' - AvailableSources = '&Fuente(s) Disponible(s)' - OnlyComponentsInActiveForm = 'S'#243'lamente Componentes en Formulario &Activo' - OnlyComponentsWithoutLinks = 'S'#243'lamente Componentes &sin Enlaces Existentes' - ItemName = 'Nombre' - ItemDescription = 'Descripci'#243'n' - ConfirmDeleteItem = 'Quiere borrar los siguientes elementos: %s ?' - AddItemsToComposition = 'A'#241'adir Elementos a la Composici'#243'n' - HideAlreadyIncludedItems = 'Ocultar Elementos Ya &Incluidas' - AvailableItems = 'Elementos D&isponibles' - Items = '&Elementos' - Enable = '&Habilitar' - Options = 'Opciones' - Show = 'Mostrar' - PaintItemsGraphics = '&Pintar Elementos Gr'#225'ficos' - Description = 'Descripci'#243'n:' - NewReport = 'Nuevo Informe' - OnlySelected = 'S'#243'lo &Seleccionados' - ExtendedSelect = 'Selecci'#243'n &Extendida' - IncludeFixed = '&Incluir Fijos' - Fonts = 'Fuentes' - BtnFont = 'Fue&nte...' - BtnEvenFont = 'Fuente &Par...' - BtnOddFont = 'Fuente &Impar...' - BtnFixedFont = 'Fuente F&ijo...' - BtnGroupFont = 'Fuente de Gru&po...' - BtnChangeFont = 'Cambiar Fue&nte...' - Font = 'Fuente' - OddFont = 'Fuente Impar' - EvenFont = 'Fuente Par' - PreviewFont = 'Fuente Vista Prev.' - CaptionNodeFont = 'Fuente T'#237'tulo del Nivel' - GroupNodeFont = 'Fuente T'#237'tulos de Grupo' - GroupFooterFont = 'Fuente Pies de Grupo' - HeaderFont = 'Fuente Cabecera' - FooterFont = 'Fuente Pie' - BandFont = 'Fuente Groups' - Transparent = '&Transparente' - FixedTransparent = 'Transparente Fijo' - CaptionTransparent = 'T'#237'tulo Transparente' - GroupTransparent = 'Grupo Transparente' - GraphicAsTextValue = '(GRAPHIC)' - Colors = 'Colores' - Color = 'Co&lor:' - OddColor = 'Co&lor Impar:' - EvenColor = 'Color Par:' - PreviewColor = 'Color V.&Previa:' - BandColor = 'Color &Grupos:' - LevelCaptionColor = 'Color T'#237'tulo Ni&vel:' - HeaderColor = 'Color Cab&ecera:' - GroupNodeColor = 'Color &Nodo Grupo:' - GroupFooterColor = 'Color Pie &Grupo:' - FooterColor = 'Color P&ie:' - FixedColor = 'Color F&ijo:' - GroupColor = 'Color Gru&po:' - CaptionColor = 'Color T'#237'tulo:' - GridLinesColor = 'Color L'#237'nea &Rejilla:' - Bands = '&Grupos' - LevelCaptions = 'T'#237'tulo Niveles' - Headers = 'Cab&eceras' - Footers = 'P&ies&' - GroupFooters = 'Pies de &Grupos' - Preview = 'Vista Pre&via' - PreviewLineCount = 'N'#250'm.L'#237'neas V.Previa:' - AutoCalcPreviewLineCount = 'A&uto-Calcular L'#237'neas V.Previa' - Grid = 'Re&jilla&' - NodesGrid = '&Nodos de Rejilla' - GroupFooterGrid = 'Rejilla de Gru&pos Pie' - StateImages = 'Imagenes de E&stado' - Images = '&Imagenes' - TextAlign = '&Alineaci'#243'n Texto' - TextAlignHorz = 'Hori&zontal' - TextAlignVert = '&Vertical' - TextAlignLeft = 'Izquierda' - TextAlignCenter = 'Centrado' - TextAlignRight = 'Derecha' - TextAlignTop = 'Superior' - TextAlignVCenter = 'Centrado' - TextAlignBottom = 'Inferior' - BorderLines = 'L'#237'neas de &Borde' - HorzLines = 'L'#237'neas Hori&zontales' - VertLines = 'L'#237'neas &Verticales' - FixedHorzLines = 'L'#237'neas Horizontales Fi&jas' - FixedVertLines = 'L'#237'neas Verticales Fij&as' - FlatCheckMarks = 'Cajas de Verificaci'#243'n P&lanas' - CheckMarksAsText = '&Mostrar Cajas Verificaci'#243'n como Text' - RowAutoHeight = 'Altura &Fila Auto.' - EndEllipsis = '&Puntos Suspens.' - DrawBorder = '&Dibujar Borde' - FullExpand = '&Expandir Todo' - BorderColor = 'Color &Borde:' - AutoNodesExpand = 'Expandir N&odos' - ExpandLevel = 'Expandir &Niveles:' - FixedRowOnEveryPage = 'Filas Fijas en &Cada P'#225'gina' - DrawMode = '&Modo Dibujo:' - DrawModeStrict = 'Estricto' - DrawModeOddEven = 'Modo Filas Par/Impar' - DrawModeChess = 'Modo '#39'Ajedrez'#39 - DrawModeBorrow = 'Prestar de Fuente' - ThreeDEffects = 'Efectos 3D' - Use3DEffects = 'Usar Efectos &3D' - Soft3D = '3D "Suave"' - Behaviors = 'Comportamiento' - Miscellaneous = 'Miscelaneo' - OnEveryPage = 'En Cada P'#225'gina' - NodeExpanding = 'Expansi'#243'n de Nodos' - Selection = 'Selecci'#243'n' - NodeAutoHeight = 'Altura &Nodo Auto.' - TransparentGraphics = 'Gr'#225'ficos &Transparentes' - AutoWidth = 'An&chura Auto.' - DisplayGraphicsAsText = 'Mostrar Gr'#225'fico Como &Texto' - TransparentColumnGraphics = '&Gr'#225'ficos Transparentes' - BandsOnEveryPage = 'Grupos En C&ada P'#225'gina' - HeadersOnEveryPage = 'Cabeceras en Cada &P'#225'gina' - FootersOnEveryPage = 'Pies en Ca&da P'#225'gina' - Graphics = 'Gr'#225'ficos' - OutOfResources = 'Out of Resources' - FileAlreadyExists = 'Fichero "%s" Ya Existe.' - ConfirmOverWrite = 'Fichero "%s" ya existe. '#191'Sobreescribir?' - InvalidFileName = 'Nombre No V'#225'lido "%s"' - RequiredFileName = 'Entrar nombre de fichero.' - OutsideMarginsMessage = - 'Uno o m'#225's margenes est'#225'n fuera del area de impresi'#243'n de la p'#225'gin' + - 'a.' - OutsideMarginsMessage2 = - 'Uno o m'#225's margenes est'#225'n fuera del area de impresi'#243'n de la p'#225'gin' + - 'a.' - InvalidMarginsMessage = 'Uno o m'#225's margenes tiene valores no v'#225'lidos.' - InvalidMargins = 'Uno o m'#225's valores de los margenes no es v'#225'lido' - OutsideMargins = - 'Uno o m'#225's margenes se ha establecido fuera del area de impresi'#243'n' + - ' de la p'#225'gina' - ThereAreNowItemsForShow = 'No existen elementos en '#233'sta vista' - PageBackground = 'Fondo de P'#225'gina' - PenColor = 'Color del L'#225'piz' - FontColor = 'Color del Fuente' - BrushColor = 'Color de la Brocha' - HighLight = 'HighLight' - ColorBlack = 'Negro' - ColorDarkRed = 'Rojo Oscuro' - ColorRed = 'Rojo' - ColorPink = 'Rosa' - ColorRose = 'Rosado' - ColorBrown = 'Marr'#243'n' - ColorOrange = 'Naranja' - ColorLightOrange = 'Naranja Claro' - ColorGold = 'Oro' - ColorTan = 'Dorado' - ColorOliveGreen = 'Verde Oliva' - ColorDrakYellow = 'Amarillo Oscuro' - ColorLime = 'Lima' - ColorYellow = 'Amarillo' - ColorLightYellow = 'Amarillo Claro' - ColorDarkGreen = 'Verde Oscuro' - ColorGreen = 'Verde' - ColorSeaGreen = 'Verde Mar' - ColorBrighthGreen = 'Verde Florecente' - ColorLightGreen = 'Verde Claro' - ColorDarkTeal = 'VerdeAzul Oscuro' - ColorTeal = 'VerdeAzul' - ColorAqua = 'Aqua' - ColorTurquoise = 'Turquesa' - ColorLightTurquoise = 'Turquesa Claro' - ColorDarkBlue = 'Azul Oscuro' - ColorBlue = 'Azul' - ColorLightBlue = 'Azul Claro' - ColorSkyBlue = 'Azul Cielo' - ColorPaleBlue = 'Azul P'#225'lido' - ColorIndigo = 'Indigo' - ColorBlueGray = 'Azul Gris' - ColorViolet = 'Violeta' - ColorPlum = 'Granate' - ColorLavender = 'Lav'#225'nder' - ColorGray80 = 'Gris-80%' - ColorGray50 = 'Gris-50%' - ColorGray40 = 'Gris-40%' - ColorGray25 = 'Gris-25%' - ColorWhite = 'Blanco' - Texture = '&Textura' - Pattern = '&Dibujo' - Picture = '&Im'#225'gen' - Foreground = '&Primer Plano' - Background = '&Fondo' - Sample = 'Ejemplo:' - FEFCaption = 'Efectos de Relleno' - PaintMode = '&Modo Pintar' - PaintModeCenter = 'Centrar' - PaintModeStretch = 'Estirar' - PaintModeTile = 'Mosaico' - PaintModeProportional = 'Proporcional' - PatternGray5 = '5%' - PatternGray10 = '10%' - PatternGray20 = '20%' - PatternGray25 = '25%' - PatternGray30 = '30%' - PatternGray40 = '40%' - PatternGray50 = '50%' - PatternGray60 = '60%' - PatternGray70 = '70%' - PatternGray75 = '75%' - PatternGray80 = '80%' - PatternGray90 = '90%' - PatternLightDownwardDiagonal = 'Light downward diagonal' - PatternLightUpwardDiagonal = 'Light upward diagonal' - PatternDarkDownwardDiagonal = 'Dark downward diagonal' - PatternDarkUpwardDiagonal = 'Dark upward diagonal' - PatternWideDownwardDiagonal = 'Wide downward diagonal' - PatternWideUpwardDiagonal = 'Wide upward diagonal' - PatternLightVertical = 'Light vertical' - PatternLightHorizontal = 'Light horizontal' - PatternNarrowVertical = 'Narrow vertical' - PatternNarrowHorizontal = 'Narrow horizontal' - PatternDarkVertical = 'Dark vertical' - PatternDarkHorizontal = 'Dark horizontal' - PatternDashedDownward = 'Dashed downward' - PatternDashedUpward = 'Dashed upward' - PatternDashedVertical = 'Dashed vertical' - PatternDashedHorizontal = 'Dashed horizontal' - PatternSmallConfetti = 'Small confetti' - PatternLargeConfetti = 'Large confetti' - PatternZigZag = 'Zig zag' - PatternWave = 'Wave' - PatternDiagonalBrick = 'Diagonal brick' - PatternHorizantalBrick = 'Horizontal brick' - PatternWeave = 'Weave' - PatternPlaid = 'Plaid' - PatternDivot = 'Divot' - PatternDottedGrid = 'Dottedgrid' - PatternDottedDiamond = 'Dotted diamond' - PatternShingle = 'Shingle' - PatternTrellis = 'Trellis' - PatternSphere = 'Sphere' - PatternSmallGrid = 'Small grid' - PatternLargeGrid = 'Large grid' - PatternSmallCheckedBoard = 'Small checked board' - PatternLargeCheckedBoard = 'Large checked board' - PatternOutlinedDiamond = 'Outlined diamond' - PatternSolidDiamond = 'Solid diamond' - TextureNewSprint = 'Newsprint' - TextureGreenMarble = 'Green marble' - TextureBlueTissuePaper = 'Blue tissue paper' - TexturePapyrus = 'Papyrus' - TextureWaterDroplets = 'Water droplets' - TextureCork = 'Cork' - TextureRecycledPaper = 'Recycled paper' - TextureWhiteMarble = 'White marble' - TexturePinkMarble = 'Pink marble' - TextureCanvas = 'Canvas' - TexturePaperBag = 'Paper bag' - TextureWalnut = 'Walnut' - TextureParchment = 'Parchment' - TextureBrownMarble = 'Brown marble' - TexturePurpleMesh = 'Purple mesh' - TextureDenim = 'Denim' - TextureFishFossil = 'Fish fossil' - TextureOak = 'Oak' - TextureStationary = 'Stationary' - TextureGranite = 'Granite' - TextureBouquet = 'Bouquet' - TextureWonenMat = 'Woven mat' - TextureSand = 'Sand' - TextureMediumWood = 'Medium wood' - FSPCaption = 'Vista de Im'#225'gen' - Width = 'Altura' - Height = 'Altura' - BrushDlgCaption = 'Propiedades de la Brocha' - Style = 'E&stilo:' - ENFNCaption = 'Escoge Nombre de Fichero' - EnterNewFileName = 'Introduzca Nuevo Nombre de Fichero' - DefinePrintStylesCaption = 'Definir Estilos de Impresi'#243'n' - DefinePrintStylesTitle = 'E&stilos de Impresi'#243'n' - DefinePrintStylesWarningDelete = #191' Desea borrar "%s" ?' - DefinePrintStylesWarningClear = #191'Desea borrar todos los estilos existentes?' - Clear = 'E&liminar...' - CustomSize = 'Tama'#241'o Personalizado' - DefaultTray = 'Bandeja de Entrada' - InvalidPrintDevice = 'La impresora seleccionada no es v'#225'lida' - NotPrinting = 'La impresora no est'#225' imprimiendo' - Printing = 'Imprimiendo' - DeviceOnPort = '%s en %s' - PrinterIndexError = #205'ndice de Impresora fueera de rango' - NoDefaultPrintDevice = 'No hay ninguna impresora seleccionada' - AutoTextDialogCaption = 'Editar Entidades AutoTexto' - EnterAutoTextEntriesHere = 'Entrar Entidades A&utoTexto Aqu'#237':' - PrintDialogCaption = 'Imprimir' - PrintDialogPrinter = 'Impresora' - PrintDialogName = '&Nombre:' - PrintDialogStatus = 'Estado:' - PrintDialogType = 'Tipo:' - PrintDialogWhere = 'D'#243'nde:' - PrintDialogComment = 'Comentario:' - PrintDialogPrintToFile = 'A &Fichero' - PrintDialogPageRange = 'Rango de P'#225'g.' - PrintDialogAll = '&Todas' - PrintDialogCurrentPage = 'P'#225'g. A&ctual' - PrintDialogSelection = '&Selecci'#243'n' - PrintDialogPages = '&P'#225'ginas:' - PrintDialogRangeLegend = 'Entre el n'#250'mero de p'#225'gina o un rango de p'#225'ginas' - PrintDialogCopies = 'Copias' - PrintDialogNumberOfPages = 'N&'#250'mero de P'#225'g.:' - PrintDialogNumberOfCopies = 'N'#250'mero de &Copias:' - PrintDialogCollateCopies = 'In&tercalar Copias' - PrintDialogAllPages = 'Todas' - PrintDialogEvenPages = 'Pares' - PrintDialogOddPages = 'Impares' - PrintDialogPrintStyles = 'Est&ilos Impresi'#243'n' - PrintDialogOpenDlgTitle = 'Elije un Fichero' - PrintDialogOpenDlgAllFiles = 'Todos los Ficheros' - PrintDialogOpenDlgPrinterFiles = 'Ficheros de Impresora' - PrintDialogPageNumbersOutOfRange = 'N'#250'mero de p'#225'gina fuera de rango (%d - %d)' - PrintDialogInvalidPageRanges = 'Rango de p'#225'ginas no v'#225'lido' - PrintDialogRequiredPageNumbers = 'Introduzca n'#250'meros de p'#225'ginas' - PrintDialogNoPrinters = 'No printers are installed.' - PrintDialogInPrintingState = 'La impresora est'#225' ocupado.' - PrintDialogPSPaused = 'Pausado' - PrintDialogPSPendingDeletion = 'Pendiente Borrar' - PrintDialogPSBusy = 'Ocupado' - PrintDialogPSDoorOpen = 'Puerta Abierta' - PrintDialogPSError = 'Error' - PrintDialogPSInitializing = 'Inicializando' - PrintDialogPSIOActive = 'E/S Activo' - PrintDialogPSManualFeed = 'Alimentaci'#243'n Manual' - PrintDialogPSNoToner = 'Toner Terminado' - PrintDialogPSNotAvailable = 'No Disponible' - PrintDialogPSOFFLine = 'Fuera de L'#237'nea' - PrintDialogPSOutOfMemory = 'Memoria Agotada' - PrintDialogPSOutBinFull = 'Bandeja de Salida Llena' - PrintDialogPSPagePunt = 'Page Punt' - PrintDialogPSPaperJam = 'Papel Enganchado' - PrintDialogPSPaperOut = 'Sin Papel' - PrintDialogPSPaperProblem = 'Problema de Papel' - PrintDialogPSPrinting = 'Imprimiendo' - PrintDialogPSProcessing = 'Procesando' - PrintDialogPSTonerLow = 'Toner Bajo' - PrintDialogPSUserIntervention = 'Intervenci'#243'n del Usuario' - PrintDialogPSWaiting = 'Esperando' - PrintDialogPSWarningUp = 'Precalientamiento' - PrintDialogPSReady = 'Lista' - PrintDialogPSPrintingAndWaiting = 'Imprimiendo: %d documento(s) esperando' - LeftMargin = 'Margen Izquierdo' - TopMargin = 'Margin Superior' - RightMargin = 'Margin Derecho' - BottomMargin = 'Margin Inferior' - GutterMargin = 'Gutter' - HeaderMargin = 'Cabecera' - FooterMargin = 'Pie' - UnitsInches = '"' - UnitsCentimeters = 'cm' - UnitsMillimeters = 'mm' - UnitsPoints = 'pt' - UnitsPicas = 'pi' - UnitsDefaultName = 'Predeterminada' - UnitsInchesName = 'Pulgadas' - UnitsCentimetersName = 'Centimetros' - UnitsMillimetersName = 'Milimetros' - UnitsPointsName = 'Puntos' - UnitsPicasName = 'Picas' - PrintPreview = 'Vista Previa' - ReportDesignerCaption = 'Dise'#241'ador de Informes' - CompositionDesignerCaption = 'Dise'#241'ador de Composici'#243'n' - ComponentNotSupportedByLink = 'Component "%s" not supported by TdxComponentPrinter' - ComponentNotSupported = 'Component "%s" not supported by TdxComponentPrinter' - PrintDeviceNotReady = 'La impresora no est'#225' instalada o no est'#225' preparada' - UnableToGenerateReport = 'No se ha podido generar el informe' - PreviewNotRegistered = 'There is no registered preview form' - ComponentNotAssigned = '%s' - PrintDeviceIsBusy = 'Impresora ocupada' - PrintDeviceError = #161'La impresora ha encontrado un error!' - MissingComponent = 'Missing "Component" property' - DataProviderDontPresent = 'There are no Links with Assigned Component in Composition' - BuildingReport = 'Generando informe: Completado %d%%' - PrintingReport = - 'Imprimiendo Informe: Completado %d p'#225'gina(s). Pulse ESC to abort' + - 'ar...' - DefinePrintStylesMenuItem = 'Definir E&stilos de Impresi'#243'n...' - AbortPrinting = #191'Abortar impresi'#243'n?' - StandardStyle = 'Estilo Estandar' - FontStyleBold = 'Negrita' - FontStyleItalic = 'It'#225'lica' - FontStyleUnderline = 'Subrayado' - FontStyleStrikeOut = 'Tachado' - Pt = 'pt.' - NoPages = '[No p'#225'ginas]' - PageWidth = 'Anchura P'#225'g' - WholePage = 'Pag. Completa' - TwoPages = 'Dos P'#225'ginas' - FourPages = 'Cuatro P'#225'ginas' - WidenToSourceWidth = 'Ajustar a Anchura' - MenuBar = 'MenuBar' - StandardBar = 'Standard' - HeaderFooterBar = 'Header and Footer' - ShortcutMenusBar = 'Shortcut Menus' - AutoTextBar = 'AutoTexto' - MenuFile = '&Ficheros' - MenuFileDesign = '&Dise'#241'o...' - MenuFilePrint = '&Imprimir...' - MenuFilePageSetup = 'Con&fig. P'#225'gina...' - MenuPrintStyles = 'Estilos Impresi'#243'n' - MenuFileExit = '&Cerrar' - MenuEdit = '&Editar' - MenuEditCut = 'Cor&tar' - MenuEditCopy = '&Copiar' - MenuEditPaste = '&Pegar' - MenuEditDelete = '&Borrar' - MenuEditFind = '&Buscar...' - MenuEditFindNext = 'Buscar Si&guiente' - MenuEditReplace = '&Reemplazar...' - MenuLoad = '&Cargar...' - MenuPreview = 'V. Pre&via...' - MenuInsert = '&Insertar' - MenuInsertAutoText = '&AutoTexto' - MenuInsertEditAutoTextEntries = 'AutoTe&xto...' - MenuInsertAutoTextEntries = '&(Lista de Entradas AutoTexto)' - MenuInsertAutoTextEntriesSubItem = 'In&sertar AutoTexto' - MenuInsertPageNumber = 'N'#250'm &P'#225'g.' - MenuInsertTotalPages = '&N'#250'm. de P'#225'g.' - MenuInsertPageOfPages = 'N'#250'm de P'#225'&g. de P'#225'ginas' - MenuInsertDateTime = 'Fechay Hora' - MenuInsertDate = '&Fecha' - MenuInsertTime = '&Hora' - MenuInsertUserName = 'Nombre &Usuario' - MenuInsertMachineName = 'Nombre &Maquina' - MenuView = '&Vista' - MenuViewMargins = '&Margenes' - MenuViewFlatToolBarButtons = 'Botones &Planos' - MenuViewLargeToolBarButtons = 'Botones &Grandes' - MenuViewMarginsStatusBar = 'Barra de M&argenes' - MenuViewPagesStatusBar = 'Barra de E&stado' - MenuViewToolBars = '&Herramientas' - MenuViewPagesHeaders = '&Cabeceras de P'#225'gina' - MenuViewPagesFooters = '&Pies de P'#225'ginas' - MenuViewSwitchToLeftPart = 'Switch to Left Part' - MenuViewSwitchToRightPart = 'Switch to Right Part' - MenuViewSwitchToCenterPart = 'Switch to Center Part' - MenuViewHFSwitchHeaderFooter = 'Mo&strar Cabecera/Pie' - MenuViewHFClose = '&Cerrar' - MenuZoom = '&Aumentar' - MenuZoomPercent100 = 'Porcien &100' - MenuZoomPageWidth = '&Anchura P'#225'gina' - MenuZoomWholePage = 'P'#225'gina C&ompleta' - MenuZoomTwoPages = '&Dos P'#225'ginas' - MenuZoomFourPages = '&Cuatro P'#225'ginas' - MenuZoomMultiplyPages = 'P'#225'ginas &M'#250'ltiples' - MenuZoomWidenToSourceWidth = 'Aju&star a Anchura' - MenuZoomSetup = '&Config...' - MenuPages = '&P'#225'ginas' - MenuGotoPage = '&Saltar' - MenuGotoPageFirst = '&Primera P'#225'g.' - MenuGotoPagePrev = 'P'#225'g. &Anteror' - MenuGotoPageNext = 'Pr'#243'&xima P'#225'g.' - MenuGotoPageLast = #218'l&tima P'#225'g.' - MenuActivePage = 'P'#225'g. Acti&va:' - MenuFormat = 'F&ormato' - MenuFormatHeaderAndFooter = '&Cabeceras y Pies' - MenuFormatAutoTextEntries = 'Entradas &AutoTexto...' - MenuFormatDateTime = 'Fecha y &Hora...' - MenuFormatPageNumbering = '&Numeraci'#243'n P'#225'ginas...' - MenuFormatPageBackground = 'Fon&do...' - MenuFormatShrinkToPage = '&Reducir a P'#225'g.' - MenuShowEmptyPages = 'Mostrar P'#225'g. &Vacias' - MenuFormatHFBackground = 'Fondo de Cabecera/Pie...' - MenuFormatHFClear = 'Vaciar Texto' - MenuTools = '&Herramientas' - MenuToolsCustomize = '&Personalizar...' - MenuToolsOptions = '&Opciones...' - MenuHelp = 'A&yuda' - MenuHelpTopics = '&Temas de Ayuda...' - MenuHelpAbout = '&Acerca de...' - MenuShortcutPreview = 'V.Previa' - MenuShortcutAutoText = 'AutoTexto' - MenuBuiltInMenus = 'Men'#250's Incorporados' - MenuShortCutMenus = 'Men'#250's de Atajos' - MenuNewMenu = 'Men'#250' Nuevo' - HintFileDesign = 'Dise'#241'ar Informe' - HintFilePrint = 'Imprimir' - HintFilePrintDialog = 'Configuarar la Impresora' - HintFilePageSetup = 'Configurar la P'#225'gina' - HintFileExit = 'Cerrar Vista Previa' - HintEditFind = 'Buscar' - HintEditFindNext = 'Buscar Siguiente' - HintEditReplace = 'Reemplazar' - HintInsertEditAutoTextEntries = 'Editar Entradas AutoTexto' - HintInsertPageNumber = 'Insertar N'#250'mero P'#225'gina' - HintInsertTotalPages = 'Insertar N'#250'mero de P'#225'ginas' - HintInsertPageOfPages = 'Insertar P'#225'gina N'#250'mero de P'#225'ginas' - HintInsertDateTime = 'Insertar Fecha y Hora' - HintInsertDate = 'Insertar Fecha' - HintInsertTime = 'Insert Hora' - HintInsertUserName = 'Insertar Nombre Usuario' - HintInsertMachineName = 'Insertar Nombre Maquina' - HintViewMargins = 'Ver Margenes' - HintViewLargeButtons = 'Ver Botones Grandes' - HintViewMarginsStatusBar = 'Ver Barra de Esatdo de Margenes' - HintViewPagesStatusBar = 'Ver Barra de Estado de P'#225'gina' - HintViewPagesHeaders = 'Vee Cabecera de P'#225'gina' - HintViewPagesFooters = 'Ver Pie de P'#225'gina' - HintViewSwitchToLeftPart = 'Cambiar a Cabecera/Pie Izquierda' - HintViewSwitchToRightPart = 'Cambiar a Cabecera/Pie Derecha' - HintViewSwitchToCenterPart = 'Cambiar a Cabecera/Pie Centrada' - HintViewHFSwitchHeaderFooter = 'Cambiar a Cabecera y Pie' - HintViewHFClose = 'Cerrar' - HintViewZoom = 'Aumentar' - HintZoomPercent100 = 'Aumentar al 100%' - HintZoomPageWidth = 'Aumentar a Anchura de P'#225'gina' - HintZoomWholePage = 'P'#225'gina Completa' - HintZoomTwoPages = 'Dos P'#225'ginas' - HintZoomFourPages = 'Cuatro P'#225'ginas' - HintZoomMultiplyPages = 'P'#225'ginas M'#250'ltiples' - HintZoomWidenToSourceWidth = 'Ajustar a la Anchura' - HintZoomSetup = 'Introducir Factor de Aumento' - HintFormatDateTime = 'Formato de Fecha y Hora' - HintFormatPageNumbering = 'Formato de N'#250'mero de P'#225'gina' - HintFormatPageBackground = 'Fondo' - HintFormatShrinkToPage = 'Reducir a P'#225'gina' - HintFormatHFBackground = 'Fondo de Cabecera/Pie' - HintFormatHFClear = 'Vaciar Texto Cabecera/Pie' - HintGotoPageFirst = 'Primera P'#225'gina' - HintGotoPagePrev = 'P'#225'gina Anterior' - HintGotoPageNext = 'Pr'#243'xima P'#225'gina' - HintGotoPageLast = #218'ltima P'#225'gina' - HintActivePage = 'P'#225'gina Activa' - HintToolsCustomize = 'Personalizar Herramientas' - HintToolsOptions = 'Opciones' - HintHelpTopics = 'Temas de Ayuda' - HintHelpAbout = 'Acerca de' - PopupMenuLargeButtons = 'Botones &Grandes' - PopupMenuFlatButtons = 'Botones &Planos' - PaperSize = 'Tama'#241'o Papel' - Status = 'Estado' - StatusReady = 'Lista' - StatusPrinting = 'Imprimiendo. %d p'#225'gina(s) terminada(s)' - StatusGenerateReport = 'Generando Informe. %d%% completado.' - HintDoubleClickForChangePaperSize = 'Doble Clic para Cambiar el Tama'#241'o de P'#225'gina' - HintDoubleClickForChangeMargins = 'Doble Clic para Cambiar Margenes' - DTFormatsCaption = 'Fecha y Hora' - DTFormatsAvailableDateFormats = 'Formatos de &Fecha Disponibes:' - DTFormatsAvailableTimeFormats = 'Formatos de &Hora Disponibles:' - DTFormatsAutoUpdate = 'Act. &Autom'#225'tica' - DTFormatsChangeDefaultFormat = - 'Confirme que desea cambiar el formato de fecha y hora al "%s" -' + - ' "%s" ?' - PNFormatsCaption = 'Formato de N'#250'mero de P'#225'gina' - PageNumbering = 'Numeraci'#243'n de P'#225'ginas' - PNFormatsNumberFormat = '&Format N'#250'mero:' - PNFormatsContinueFromPrevious = '&Continuar desde '#218'ltima Secci'#243'n' - PNFormatsStartAt = 'Empezar &En:' - PNFormatsChangeDefaultFormat = - 'Confirme que desea cambiar el formato de numeraci'#243'n de p'#225'ginas a' + - 'l "%s" ?' - ZoomDlgCaption = 'Aumentar' - ZoomDlgZoomTo = 'Aumentar a' - ZoomDlgPageWidth = '&Ancho P'#225'g.' - ZoomDlgWholePage = 'P'#225'g.C&ompleta' - ZoomDlgTwoPages = '&Dos P'#225'ginas' - ZoomDlgFourPages = '&Cuatro P'#225'g.' - ZoomDlgManyPages = '&Varias P'#225'g.:' - ZoomDlgPercent = 'P&orcien:' - ZoomDlgPreview = 'Vista' - ZoomDlgFontPreview = '10pt Times New Romam' - ZoomDlgFontPreviewString = 'AaBbCcDdEeXxYyZz' - Pages = 'P'#225'ginas' - Cancel = 'Cancelar' - PreferenceDlgCaption = 'Opciones' - PreferenceDlgTab1 = '&General' - PreferenceDlgShow = '&Mostrar' - PreferenceDlgMargins = '&Margenes' - PreferenceDlgMarginsHints = 'A&yudas Margenes' - PreferenceDlgMargingWhileDragging = 'Ayudas Margins con A&rrastre' - PreferenceDlgLargeBtns = 'Botones &Grandes para Barras' - PreferenceDlgFlatBtns = 'Botones &Planos para Barras' - PreferenceDlgMarginsColor = '&Color Margenes:' - PreferenceDlgMeasurementUnits = '&Unidades de Medida:' - PreferenceDlgSaveForRunTimeToo = 'Gua&rdar en Ejecucci'#243'n tambien' - PreferenceDlgZoomScroll = 'Despla&zamiento con IntelliMouse' - PreferenceDlgZoomStep = 'Au&mento:' - CloneStyleCaptionPrefix = 'Copia (%d) de' - InvalideStyleCaption = 'Nombre de estilo "%s" existente. Por favor, introduzca otro.' - PageSetupCaption = 'Configuraci'#243'n de la P'#225'gina' - StyleName = '&Nombre Estilo:' - Page = '&P'#225'gina' - Margins = '&Margenes' - HeaderFooter = '&Cabecera\Pie' - Scaling = '&Escala' - Paper = 'Papel' - PaperType = 'T&ipo' - PaperDimension = 'Dimensi'#243'nes' - PaperWidth = '&Anchura:' - PaperHeight = 'A<ura:' - PaperSource = 'Bande&ja' - Orientation = 'Orientaci'#243'n' - Portrait = 'N&ormal' - Landscape = '&Apaisado' - PrintOrder = 'Orden de Impresi'#243'n' - DownThenOver = '&Abajo, derecha' - OverThenDown = '&Derecha, abajo' - Shading = 'Sombreado' - PrintUsingGrayShading = 'Imprimir usando sombreado &gris' - CenterOnPage = 'Centrar' - Horizontally = 'Hori&zontal' - Vertically = '&Vertical' - Header = 'Cabecera' - BtnHeaderFont = '&Fuente...' - BtnHeaderBackground = '&Fondo' - Footer = 'Pie' - BtnFooterFont = 'Fue&nte...' - BtnFooterBackground = 'F&ondo' - CaptionTop = '&Sup.:' - CaptionLeft = '&Izqu.:' - CaptionRight = '&Derecha:' - CaptionBottom = '&Inferior:' - Header2 = '&Cabec.:' - Footer2 = '&Pie:' - Alignment = 'Alineamiento' - VertAlignment = 'Alineamiento Vertical' - ReverseOnEvenPages = 'Al &rev'#233's en p'#225'ginas pares' - AdjustTo = '&Ajustar a:' - FitTo = 'P'#225'&ginas:' - PercentOfNormalSize = '% tama'#241'o normal' - PagesWideBy = 'p'#225'g(s) de &ancho' - Tall = 'de a<o' - XOfY = 'De' - LastPrinted = #218'ltima Impresi'#243'n' - FileName = 'Fichero' - FileNameAndPath = 'Fichero y camino' - PrintedBy = 'Impreso por' - PrintedOn = 'Impreso el' - CreatedBy = 'Creado por' - CreatedOn = 'Creado el' - Confidential = 'Confidencial' - HFFunctionNameUnknown = 'Desconocido' - HFFunctionNamePageNumber = 'N'#250'm. P'#225'gina' - HFFunctionNameTotalPages = 'P'#225'g. Totales' - HFFunctionNamePageOfPages = 'P'#225'g. # de P'#225'gs. #' - HFFunctionNameDateTime = 'Fecha y Hora' - HFFunctionNameDate = 'Fecha' - HFFunctionNameTime = 'Hora' - HFFunctionNameUserName = 'Nombre Usuario' - HFFunctionNameMachineName = 'Nombre Maquina' - HFFunctionHintPageNumber = 'Page Number' - HFFunctionHintTotalPages = 'Total Pages' - HFFunctionHintPageOfPages = 'Page # of Pages #' - HFFunctionHintDateTime = 'Date and Time Printed' - HFFunctionHintDate = 'Date Printed' - HFFunctionHintTime = 'Time Printed' - HFFunctionHintUserName = 'User Name' - HFFunctionHintMachineName = 'Machine Name' - HFFunctionTemplatePageNumber = 'Page #' - HFFunctionTemplateTotalPages = 'Total Pages' - HFFunctionTemplatePageOfPages = 'Page # of Pages #' - HFFunctionTemplateDateTime = 'Date & Time Printed' - HFFunctionTemplateDate = 'Date Printed' - HFFunctionTemplateTime = 'Time Printed' - HFFunctionTemplateUserName = 'User Name' - HFFunctionTemplateMachineName = 'Machine Name' - January = 'Enero' - February = 'Febrero' - March = 'Marzo' - April = 'Abril' - May = 'Mayo' - June = 'Junio' - July = 'Julio' - August = 'Agosto' - September = 'Septiembre' - October = 'Octubre' - November = 'Noviembre' - December = 'Diciembre' - East = 'Este' - West = 'Oeste' - South = 'Sur' - North = 'Norte' - Total = 'Total' - Plan = 'Plan' - SwimmingPool = 'Swimming-pool' - Administration = 'Administration' - Park = 'Park' - CarParking = 'Car-Parking' - CorporateHeadquarters = 'Corporate' - SalesAndMarketing = 'Sales and' - Engineering = 'Engineering' - FieldOfficeCanada = 'Field Office:' - OrderNoCaption = 'OrderNo' - NameCaption = 'Name' - CountCaption = 'Count' - CompanyCaption = 'Company' - AddressCaption = 'Address' - PriceCaption = 'Price' - CashCaption = 'Cash' - Name1 = 'Jennie Valentine' - Name2 = 'Sam Hill' - Company1 = 'Jennie Inc.' - Company2 = 'Daimler-Chrysler AG' - Address1 = '123 Home Lane' - Address2 = '9333 Holmes Dr.' - CountIs = 'Count is: %d' - Regular = 'Regular' - Irregular = 'Irregular' - TLBand = 'Item Data' - TLColumnName = 'Name' - TLColumnAxisymmetric = 'Axisymmetric' - TLColumnItemShape = 'Shape' - ItemShapeAsText = '(Graphic)' - Item1Name = 'Cone' - Item2Name = 'Cylinder' - Item3Name = 'Pyramid' - Item4Name = 'Box' - Item5Name = 'Free Surface' - Item2Description = 'Axisymmetric geometry figure' - Item3Description = 'Axisymmetric geometry figure' - Item4Description = 'Acute-angled geometry figure' - Item7Description = 'Simple extrusion surface' - PatternIsNotRegistered = 'Pattern "%s" is not registered' - SolidEdgePattern = 'Solid' - ThinSolidEdgePattern = 'Medium Solid' - MediumSolidEdgePattern = 'Medium Solid' - ThickSolidEdgePattern = 'Thick Solid' - DottedEdgePattern = 'Dotted' - DashedEdgePattern = 'Dashed' - DashDotDotEdgePattern = 'Dash Dot Dot' - DashDotEdgePattern = 'Dash Dot' - SlantedDashDotEdgePattern = 'Slanted Dash Dot' - MediumDashDotDotEdgePattern = 'Medium Dash Dot Dot' - HairEdgePattern = 'Hair' - MediumDashDotEdgePattern = 'Medium Dash Dot' - MediumDashedEdgePattern = 'Medium Dashed' - DoubleLineEdgePattern = 'Double Line' - SolidFillPattern = 'Solid' - Gray75FillPattern = '75% Gray' - Gray50FillPattern = '50% Gray' - Gray25FillPattern = '25% Gray' - Gray125FillPattern = '12.5% Gray' - Gray625FillPattern = '6.25% Gray' - HorizontalStripeFillPattern = 'Horizontal Stripe' - VerticalStripeFillPattern = 'Vertical Stripe' - ReverseDiagonalStripeFillPattern = 'Reverse Diagonal Stripe' - DiagonalStripeFillPattern = 'Diagonal Stripe' - DiagonalCrossHatchFillPattern = 'Diagonal Cross Hatch' - ThickCrossHatchFillPattern = 'Thick Cross Hatch' - ThinHorizontalStripeFillPattern = 'Thin Horizontal Stripe' - ThinVerticalStripeFillPattern = 'Thin Vertical Stripe' - ThinReverseDiagonalStripeFillPattern = 'Thin Reverse Diagonal Stripe' - ThinDiagonalStripeFillPattern = 'Thin Diagonal Stripe' - ThinHorizontalCrossHatchFillPattern = 'Thin Horizontal Cross Hatch' - ThinDiagonalCrossHatchFillPattern = 'Thin Diagonal Cross Hatch' - ShowRowAndColumnHeadings = '&Row and column headings' - ShowGridLines = 'GridLines' - SuppressSourceFormats = '&Suppress Source Formats' - RepeatHeaderRowAtTop = 'Repeat header row at top' - DataToPrintDoesnotExist = - 'Can not activate ReportLink because PrintingSystem did not find ' + - 'anything to print.' - JanuaryShort = 'Ene' - FebruaryShort = 'Feb' - MarchShort = 'Mar' - AprilShort = 'Abril' - MayShort = 'Mayo' - JuneShort = 'Jun' - JulyShort = 'Jul' - AugustShort = 'Ago' - SeptemberShort = 'Sept' - OctoberShort = 'Oct' - NovemberShort = 'Nov' - DecemberShort = 'Dic' - TechnicalDepartment = 'Technical Department' - SoftwareDepartment = 'Software Department' - SystemProgrammers = 'System Programmers' - EndUserProgrammers = 'EndUser Programmers' - BetaTesters = 'Beta Testers' - HumanResourceDepartment = 'Human Resource Department' - TreeLines = '&L'#237'neas'#193'rbol' - TreeLinesColor = 'Colore L'#237'neas '#193'rbol:' - ExpandButtons = 'Botones E&xpansi'#243'n' - CheckMarks = 'Cajas Verificaci'#243'n' - TreeEffects = 'Efectos '#193'rbol' - Appearance = 'Apariencia' - CarLevelCaption = 'Coches' - ManufacturerBandCaption = 'Manufacturer Data' - ModelBandCaption = 'Car Data' - ManufacturerNameColumnCaption = 'Name' - ManufacturerLogoColumnCaption = 'Logo' - ManufacturerCountryColumnCaption = 'Country' - CarModelColumnCaption = 'Model' - CarIsSUVColumnCaption = 'SUV' - CarPhotoColumnCaption = 'Photo' - CarManufacturerName1 = 'BMW' - CarManufacturerName2 = 'Ford' - CarManufacturerName3 = 'Audi' - CarManufacturerName4 = 'Land Rover' - CarManufacturerCountry1 = 'Germany' - CarManufacturerCountry2 = 'United States' - CarManufacturerCountry3 = 'Germany' - CarManufacturerCountry4 = 'United Kingdom' - CarModel1 = 'X5 4WD' - CarModel2 = 'Excursion' - CarModel3 = 'S8 Quattro' - CarModel4 = 'G4 Challenge' - True = 'True' - False = 'False' - Auto = 'Auto' - Custom = 'Personal.' - Env = 'Env' - LookAndFeelFlat = 'Plano' - LookAndFeelStandard = 'Estandar' - LookAndFeelUltraFlat = 'UltraPlano' - ViewTab = 'Vista' - BehaviorsTab = 'Comportamiento' - PreviewTab = 'Vista Previa' - CardsTab = 'Fichas' - Formatting = 'Formato' - LookAndFeel = 'Aspecto' - LevelCaption = '&T'#237'tulo' - FilterBar = 'Barra de &Filtro' - Refinements = 'Perfeccionamiento' - ProcessSelection = 'Procesar &Selecci'#243'n' - ProcessExactSelection = 'Procesar Selecci'#243'n E&xacta' - Expanding = 'Despliege' - Groups = '&Grupos' - Details = '&Detalles' - StartFromActiveDetails = 'Empieza desde Detalles Activas' - OnlyActiveDetails = 'S'#243'lo Detalles Activos' - Visible = '&Visible' - PreviewAutoHeight = 'Altura A&utom'#225'tica' - PreviewMaxLineCount = 'L'#237'neas &M'#225'ximas:' - Sizes = 'Tama'#241'os' - KeepSameWidth = 'Manten.Misma Anchura' - KeepSameHeight = 'Manten.Misma Altura' - Framing = 'Marco' - Spacing = 'Espacios' - Shadow = 'Sombra' - Depth = '&Profundidad:' - Position = '&Posici'#243'n' - Positioning = 'Posicionando' - Horizontal = 'H&orizontal:' - Vertical = 'V&ertical:' - SummaryFormat = 'Recuento = 0' - CannotUseOnEveryPageMode = 'Cannot Use OnEveryPage Mode' - IncorrectBandHeadersState = 'Cannot Use BandHeaders OnEveryPage Mode' - IncorrectHeadersState = 'Cannot Use Headers OnEveryPage Mode' - IncorrectFootersState = 'Cannot Use Footers OnEveryPage Mode' - TPicture = 'TPicture' - Copy = '&Copiar' - Save = '&Salvar...' - BaseStyle = 'Estilo Base' - Rectangle = 'Rectangle' - Square = 'Square' - Ellipse = 'Ellipse' - Circle = 'Circle' - RoundRect = 'RoundRect' - RoundSquare = 'RoundSquare' - HorizontalFillPattern = 'Horizontal' - VerticalFillPattern = 'Vertical' - FDiagonalFillPattern = 'FDiagonal' - BDiagonalFillPattern = 'BDiagonal' - CrossFillPattern = 'Cross' - DiagCrossFillPattern = 'DiagCros' - CyclicIDReferences = 'Cyclic ID references %s and %s' - LoadReportDataToFileTitle = 'Cargar Informe' - SaveReportDataToFileTitle = 'Salvar Informe Como' - InvalidExternalStorage = 'Almacenamiento Externo No V'#225'lido' - LinkIsNotIncludedInUsesClause = 'ReportFile contains ReportLink "%0:s"' - InvalidStorageVersion = 'Versi'#243'n de Almacenamiento no V'#225'lido: %d' - PSReportFiles = 'Ficheros de Informes' - ReportFileLoadError = 'No se pudo cargar el informe "%s".' - None = '(Ninguno)' - ReportDocumentIsCorrupted = '(El fichero no es un informe o esta corrupto)' - CloseExplorerHint = 'Cerrar Explorador' - ExplorerCaption = 'Explorador' - ExplorerRootFolderCaption = 'Ra'#237'z' - NewExplorerFolderItem = 'Nueva Carpeta' - CopyOfItem = 'Copia de' - ReportExplorer = 'Explorer de Informes' - DataLoadErrorText = 'No se pudo cargar los datos del informe' - DBBasedExplorerItemDataLoadError = 'No se pudo cargar los datos.' - FileBasedExplorerItemDataLoadError = 'No se pudo cargar los datos.' - DeleteNonEmptyFolderMessageText = 'La carpeta "%s" no est'#225' vacia. A'#250'n as'#237' '#191'desea eliminarlo?' - DeleteFolderMessageText = 'Borrar Carpeta "%s" ?' - DeleteItemMessageText = 'Borrar elemento "%s" ?' - CannotRenameFolderText = - 'Cannot rename folder "%s". A folder with name "%s" already exist' + - 's. Specify a different name.' - CannotRenameItemText = - 'Cannot rename item "%s". An item with name "%s" already exists. ' + - 'Specify a different name.' - OverwriteFolderMessageText = 'This folder "%s" already contains folder named "%s".' - OverwriteItemMessageText = 'This Folder "%s" already contains item named "%s".' - SelectNewRoot = 'Select new Root Directory where the Reports will be stored' - InvalidFolderName = 'Nombre de Carpeta no V'#225'lida "%s"' - InvalidReportName = 'Nombre de Informe no V'#225'lido "%s"' - ExplorerBar = 'Explorador' - MenuFileSave = '&Salvar' - MenuFileSaveAs = 'S&alvar Como...' - MenuFileLoad = '&Cargar' - MenuFileClose = '&Descargar' - HintFileSave = 'Salvar Informe' - HintFileSaveAs = 'Salvar Informe Como' - HintFileLoad = 'Cargar Informe' - HintFileClose = 'Descargar Informe' - MenuExplorer = 'E&xplorador' - MenuExplorerCreateFolder = 'Crear &Carpeta' - MenuExplorerDelete = '&Borrar...' - MenuExplorerRename = 'Reno&mbrar' - MenuExplorerProperties = '&Propiedades...' - MenuExplorerRefresh = 'Refrescar' - MenuExplorerChangeRootPath = 'Cambiar Ra'#237'z...' - MenuExplorerSetAsRoot = 'Establecer Como Ra'#237'z' - MenuExplorerGoToUpOneLevel = 'Subir Un Nivel' - HintExplorerCreateFolder = 'Crear Nueva Carpeta' - HintExplorerDelete = 'Borrar' - HintExplorerRename = 'Renombrar' - HintExplorerProperties = 'Propiedades' - HintExplorerRefresh = 'Refrescar' - HintExplorerChangeRootPath = 'Cambiar Ra'#237'z' - HintExplorerSetAsRoot = 'Establecder Carpeta Actual Como Ra'#237'z' - HintExplorerGoToUpOneLevel = 'Subir Un Nivel' - MenuViewExplorer = 'E&xplorador' - HintViewExplorer = 'Mostar Explorador' - Summary = 'Resumen' - Creator = 'Creado&r:' - CreationDate = 'Crea&do:' - MenuViewThumbnails = 'Miniat&uras' - HintViewThumbnails = 'Mostar Miniaturas' - MenuFormatTitle = 'T&'#237'tulo...' - HintFormatTitle = 'Formatear T'#237'tulo del Informe' - Half = 'Medio' - PredefinedFunctions = 'Funciones Predefinidos' - ZoomParameters = '&Par'#225'metros de Aumento' - WrapData = 'Doblar Datos' - MenuShortcutExplorer = 'Explorador' - ExplorerToolBar = 'Explorador' - MenuThumbnailsSmall = 'Miniaturas &Peque'#241'as' - MenuThumbnailsLarge = 'Miniaturas &Grandes' - MenuShortcutThumbnails = 'Miniaturas' - Buttons = 'Botones' - BtnHeadersFont = 'Fuente &Cabeceras...' - HeadersTransparent = 'Cabeceras Transparentes' - HintListViewDesignerMessage = 'Most Options Are Being Taken Into Account Only In Detailed View' - ColumnHeaders = 'Cabeceras de &Columnas' - ReportGroupNullLookAndFeel = 'Null' - ReportGroupStandardLookAndFeel = 'Standard' - ReportGroupOfficeLookAndFeel = 'Office' - ReportGroupWebLookAndFeel = 'Web' - LayoutGroupDefaultCaption = 'Layout Group' - LayoutItemDefaultCaption = 'Layout Item' - CarManufacturerName5 = 'Volkswagen' - CarManufacturerCountry5 = 'Germany' - CarModel5 = 'Golf GTI' - LuxurySedans = 'Luxury Sedans' - CarManufacturer = 'Manufacturer' - CarModel = 'Model' - CarEngine = 'Engine' - CarTransmission = 'Transmission' - CarTires = 'Tires' - Volvo760V12Manufacturer = 'BMW' - Volvo760V12Model = '760Li V12' - Volvo760V12Engine = - '6.0L DOHC V12 438 HP 48V DI Valvetronic 12-cylinder engine with ' + - '6.0-liter displacement, dual overhead cam valvetrain' - Volvo760V12Transmission = 'Elec 6-Speed Automatic w/Steptronic' - Volvo760V12Tires = - 'P245/45R19 Fr - P275/40R19 Rr Performance. Low Profile tires wit' + - 'h 245mm width, 19.0" rim' - BandHeaderStyle = 'CabeceraGrupo' - CaptionStyle = 'T'#237'tulo' - CardCaptionRowStyle = 'T'#237'tulo Fila Fichas' - CardRowCaptionStyle = 'T'#237'tulo Fila Fichas' - CategoryStyle = 'Categor'#237'a' - ContentStyle = 'Contenido' - ContentEvenStyle = 'Contenido Filas Pares' - ContentOddStyle = 'Contenido Filas Impares' - FilterBarStyle = 'Barra de Filto' - FooterStyle = 'Pie' - FooterRowStyle = 'Pie de Fila' - GroupStyle = 'Grupo' - HeaderStyle = 'Cabecera' - IndentStyle = 'Indentaci'#243'n' - PreviewStyle = 'Vista Previa' - SelectionStyle = 'Selecci'#243'n' - Styles = 'Estilos' - StyleSheets = 'Hojas de Estilos' - BtnTexture = '&Textura...' - BtnTextureClear = 'Elimin&ar' - BtnColor = 'Co&lor...' - BtnSaveAs = 'Salvar &Como...' - BtnRename = '&Renombrar...' - LoadBitmapDlgTitle = 'Cargar Imagen' - DeleteStyleSheet = 'Borrar Hoja de Estilos con Nombre "%s"?' - UnnamedStyleSheet = 'SinNombre' - CreateNewStyleQueryNamePrompt = 'Entre un Nombre de Hoja de Estilo:' - StyleSheetNameAlreadyExists = 'Hoja de Estilo "%s" Ya Existe' - CannotLoadImage = 'No se pudo cargar el imagen "%s"' - UseNativeStyles = '&Usar Estilo Nativo' - SuppressBackgroundBitmaps = '&Suprimir Texturas de Fondo' - ConsumeSelectionStyle = 'Consumir Estilos de Selecci'#243'n' - Size = 'Tama'#241'o' - Levels = 'Niveles' - Unwrap = '&Desdoblar' - UnwrapTopLevel = 'Desdoblar Nivel Superior' - RiseActiveToTop = 'Subir Nivel Activo al Princ'#237'pio' - CannotUseOnEveryPageModeInAggregatedState = 'No se puede usar modo "EnCadaP'#225'gina"' - Pagination = 'Paginaci'#243'n' - ByBands = 'Por Grupos' - ByColumns = 'Por Columnas' - ByRows = 'Por Filas' - ByTopLevelGroups = 'Por Grupos de Primer Nivel' - OneGroupPerPage = 'Un Grupo por P'#225'gina' - Borders = 'Margenes' - ExplicitlyExpandNodes = 'Expandir Expl'#237'citamente los Nodos' - Nodes = '&Nodos' - Separators = 'Separadores' - Thickness = 'Grueso' - TLIncorrectHeadersState = 'No se puede usar el modo EnCadaP'#225'gina' - Rows = '&Filas' - BestFit = 'Ajuste &'#211'ptimo' - KeepSameRecordWidths = '&Mantaner Anchuras Iguales' - WrapRecords = '&Doblar Registros' - ByWrapping = 'Doblando' - OneWrappingPerPage = 'Doblando Uno por P'#225'gina' - PaginateByControlDetails = 'Detalles de Controles' - PaginateByControls = 'Controles' - PaginateByGroups = 'Grupos' - PaginateByItems = 'Elementos' - ControlsPlace = 'Enplazamiento de Controles' - ExpandHeight = 'Expandir Altura' - ExpandWidth = 'Expandir Anchura' - ShrinkHeight = 'Contraer Altura' - ShrinkWidth = 'Contraer Anchura' - CheckAll = 'Check &All' - CheckAllChildren = 'Check All &Children' - ControlsTab = 'Controls' - ExpandAll = 'E&xpand All' - HiddenControlsTab = 'Hidden Controls' - ReportLinksTab = 'Aggregated Designers' - Transparents = 'Transparents' - UncheckAllChildren = 'Uncheck &All Children' - Root = '&Ra'#237'z' - RootBorders = 'Root &Borders' - Controls = '&Controls' - Containers = 'C&ontainers' - HideCustomContainers = '&Hide Custom Containers' - Bytes = 'Bytes' - KiloBytes = 'KB' - MegaBytes = 'MB' - GigaBytes = 'GB' - Left = 184 - Top = 16 - end - object ROMessage: TROBinMessage - Left = 329 - Top = 88 - end - object DABINAdapter: TDABINAdapter - IsCompatibleV4 = False - Left = 424 - Top = 24 - end - object JvAppRegistryStorage: TJvAppRegistryStorage - StorageOptions.BooleanStringTrueValues = 'TRUE, YES, Y' - StorageOptions.BooleanStringFalseValues = 'FALSE, NO, N' - Root = 'Software\%APPL_NAME%' - SubStorages = <> - Left = 184 - Top = 80 - end - object RORemoteService: TRORemoteService - Message = ROMessage - Channel = ROChannel - ServiceName = 'srvLogin' - Left = 424 - Top = 92 - end + Height = 240 + Width = 275 end diff --git a/Source/Base/uDataModuleBase.pas b/Source/Base/uDataModuleBase.pas index ee02d51..c44801a 100644 --- a/Source/Base/uDataModuleBase.pas +++ b/Source/Base/uDataModuleBase.pas @@ -3,252 +3,48 @@ unit uDataModuleBase; interface uses - Controls, PngImageList, JvComponent, JvNavigationPane, TBXSwitcher, - TBXOffice2003Theme, Classes, ImgList, uROClient, uROBinMessage, - uROServiceComponent, uRORemoteService, uROWinInetHttpChannel, - DataAbstract3_Intf, uDADataTable, uDABINAdapter, cxintl, cxIntlPrintSys3, - JvAppStorage, JvAppRegistryStorage, SysUtils, - JvComponentBase, uDADataStreamer; + Classes; type - TdmBase = class(TDataModule) - ROChannel: TROWinInetHTTPChannel; - SmallImages: TPngImageList; - StyleManager: TJvNavPaneStyleManager; - TBXSwitcher: TTBXSwitcher; - cxIntl: TcxIntl; - cxIntlPrintSys3: TcxIntlPrintSys3; - ROMessage: TROBinMessage; - DABINAdapter: TDABINAdapter; - JvAppRegistryStorage: TJvAppRegistryStorage; - RORemoteService: TRORemoteService; - procedure DAClientDataModuleCreate(Sender: TObject); - procedure ROChannelFailure(Sender: TROTransportChannel; - anException: Exception; var Retry: Boolean); - procedure ROChannelProgress(iSender: TObject; iType: TProgressType; - iDirection: TProgressDirection; iTransferred, iTotal: Integer); + TDataModuleBase = class(TDataModule) private - FOnThemeChange: TNotifyEvent; - function GetAdapter: TDABINAdapter; - function GetChannel: TROWinInetHTTPChannel; - function GetCodigoEmpresa: Integer; - function GetMessage: TROBinMessage; - procedure InitStyleManager; - procedure OnTBXThemeChange(Sender: TObject); - procedure LeerConfiguracion; - procedure SalvarConfiguracion; + FRefCount: Integer; + protected + function QueryInterface(const IID: TGUID; out Obj): HResult; override; stdcall; + function _AddRef: Integer; stdcall; + function _Release: Integer; stdcall; public - function DarVersion : String; - procedure ConfigurarConexion; - function HayConexion(const ATargetURL : String = ''): Boolean; - property Adapter: TDABINAdapter read GetAdapter; - property Channel: TROWinInetHTTPChannel read GetChannel; - property CodigoEmpresa: Integer read GetCodigoEmpresa; - property Message: TROBinMessage read GetMessage; - property OnThemeChange: TNotifyEvent read FOnThemeChange write - FOnThemeChange; - end; + property RefCount: integer read fRefCount write fRefCount; -var - dmBase: TdmBase; + end; implementation + {$R *.DFM} -uses - Dialogs, TBX, TBXThemes, uConfigurarConexion, WinInet, Forms, Windows, - JclFileUtils, VARELA_Intf, cxControls; +// Set an implicit refcount so that refcounting +// during construction won't destroy the object. -const - SERVER_URL = 'http://localhost:8099/bin'; - IE_OFFLINE_ERROR = 'Unexpected error in WinInet HTTP Channel (2)'; - -{ -*********************************** TdmBase ************************************ -} -procedure TdmBase.ConfigurarConexion; +function TDataModuleBase.QueryInterface( const IID: TGUID; out Obj): HResult; begin - with TfConfigurarConexion.Create(NIL) do - try - TargetURL := ROChannel.TargetURL; - if ShowModal = mrOk then - begin - ROChannel.TargetURL := TargetURL; - ROChannel.Connected := False; - ROChannel.Connected := True; - SalvarConfiguracion; - end; - finally - Free; - end; + if GetInterface(IID, Obj) + then Result := 0 + else Result := E_NOINTERFACE; end; -procedure TdmBase.DAClientDataModuleCreate(Sender: TObject); +function TDataModuleBase._AddRef: Integer; begin - TBXSwitcher.OnThemeChange := OnTBXThemeChange; - TBXSetTheme('Office2003'); - - LeerConfiguracion; + Inc(fRefCount); + Result := fRefCount; end; -function TdmBase.GetAdapter: TDABINAdapter; +function TDataModuleBase._Release: Integer; begin - Result := DABinAdapter; + Dec(fRefCount); + Result := fRefCount; + if fRefCount = 0 then Destroy; end; -function TdmBase.GetChannel: TROWinInetHTTPChannel; -begin - Result := ROChannel; -end; - -function TdmBase.GetCodigoEmpresa: Integer; -begin - Result := 1; -end; - -function TdmBase.GetMessage: TROBinMessage; -begin - Result := ROMessage; -end; - -procedure TdmBase.InitStyleManager; -begin - if not USE_THEMES then - begin - TBXSwitcher.EnableXPStyles := False; - StyleManager.Theme := nptStandard; - end - else begin - TBXSwitcher.EnableXPStyles := True; - with StyleManager do - begin - if CurrentTheme is TTBXOffice2003Theme then - begin - case GetOffice2003Scheme of - osBlue : Theme := nptXPBlue; - osMetallic : Theme := nptXPSilver; - osGreen : Theme := nptXPOlive; - else - Theme := nptStandard; - end; - end; - end; - end; -end; - - -procedure TdmBase.LeerConfiguracion; -begin - ROChannel.TargetURL := JvAppRegistryStorage.ReadString('ServerURL', SERVER_URL); -end; - -procedure TdmBase.OnTBXThemeChange(Sender: TObject); -begin - InitStyleManager; - - if Assigned(FOnThemeChange) then - FOnThemeChange(Sender); -end; - -procedure TdmBase.SalvarConfiguracion; -begin - JvAppRegistryStorage.BeginUpdate; - try - JvAppRegistryStorage.WriteString('ServerURL', ROChannel.TargetURL); - finally - JvAppRegistryStorage.EndUpdate; - end; -end; - -procedure TdmBase.ROChannelFailure(Sender: TROTransportChannel; - anException: Exception; var Retry: Boolean); -begin - if (Pos(anException.Message, IE_OFFLINE_ERROR) > 0) then - begin - // Preguntar al usuario si se quiere conectar - if InternetGoOnline(PAnsiChar(ROChannel.TargetURL), GetDesktopWindow(), 0) then - Retry := True // Si el usuario pulsa en 'Conectar' reintentar la operación - else - Abort; // Si el usuario pulsa en 'Seguir desconectado' parar todo - end - else - Retry := True; -// raise Exception.Create(anException.Message); -end; - -procedure TdmBase.ROChannelProgress(iSender: TObject; iType: TProgressType; - iDirection: TProgressDirection; iTransferred, iTotal: Integer); -begin -{ if iType = ptInProgress then - begin - if not Form1.Visible then - Form1.Show; - end - else - Form1.Hide;} -end; - -function TdmBase.DarVersion: String; -var - Obj : TJclFileVersionInfo; -begin - Obj := TJclFileVersionInfo.Create(Application.ExeName); - try - Result := 'v' + Obj.FileVersion; - finally - FreeAndNil(Obj); - end; -end; - -function TdmBase.HayConexion(const ATargetURL: String): Boolean; -var - AHTTPChannel: TROWinInetHTTPChannel; - AROBinMessage: TROBinMessage; - ACoService: TRORemoteService; -begin - AHTTPChannel := TROWinInetHTTPChannel.Create(Self); - AROBinMessage := TROBinMessage.Create(Self); - ACoService := TRORemoteService.Create(Self); - - ShowHourglassCursor; - try - with AHTTPChannel do - begin - Name := 'HTTPChannel'; - UserAgent := 'AdminPV'; - if Length(ATargetURL) > 0 then - TargetURL := ATargetURL - else - TargetURL := ROChannel.TargetURL; - end; - - with ACoService do - begin - ServiceName := 'srvLogin'; - Message := AROBinMessage; - Channel := AHTTPChannel; - end; - - try - (ACoService as IsrvLogin).Ping; - Result := True; - except - Result := False; - end; - finally - AHTTPChannel.Connected := False; - FreeAndNil(AHTTPChannel); - FreeAndNil(ACoService); - FreeAndNil(AROBinMessage); - HideHourglassCursor; - end; -end; - -initialization - dmBase := TdmBase.Create(NIL); - -finalization - dmBase.Free; end. diff --git a/Source/Base/uEditorBase.pas b/Source/Base/uEditorBase.pas index ef16e4f54ad03c2309d06db80351e351ceeb0557..3848e9355803105cf8a80611101f19a0fc7df199 100644 GIT binary patch delta 17 Ycmdm~zgd3+rvRhxW+8#)>`V*{05bmsX8-^I delta 22 dcmdn2zf*q$rvPVSNuqClN@-5&W-fu{>;PQR2ebeH diff --git a/Source/Base/uEditorDBBase.ddp b/Source/Base/uEditorDBBase.ddp deleted file mode 100644 index 4370276c196a7fa73d6f8917622cba1c4e033dee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51 zcmZRVaB=ks@bJ`g@pN<#a`e>;@DB=c^Y`)e=VxGe;K0Pl$;KI)SCUzhlbT}4#=r!G E07ZHWvj6}9 diff --git a/Source/Base/uEditorDBBase.dfm b/Source/Base/uEditorDBBase.dfm index 317e217..ed9e52e 100644 --- a/Source/Base/uEditorDBBase.dfm +++ b/Source/Base/uEditorDBBase.dfm @@ -13,7 +13,6 @@ inherited fEditorDBBase: TfEditorDBBase ExplicitWidth = 652 inherited Image1: TImage Left = 625 - Picture.Data = {00} ExplicitLeft = 625 end end diff --git a/Source/Base/uEditorDBBase.pas b/Source/Base/uEditorDBBase.pas index 667d42c..823359f 100644 --- a/Source/Base/uEditorDBBase.pas +++ b/Source/Base/uEditorDBBase.pas @@ -39,9 +39,6 @@ type published end; -var - fEditorDBBase: TfEditorDBBase; - implementation uses @@ -196,35 +193,11 @@ begin end; function TfEditorDBBase.GetModified: Boolean; -var - dtDetails : TList; - i : integer; - bCambiado : Boolean; begin - bCambiado := False; - if Assigned(dsDataTable.DataTable) then - begin - bCambiado := (dsDataTable.DataTable.State = dsEdit) or - DeltaValuesAreDifferent(dsDataTable.DataTable.Delta); - - if (not bCambiado) then - begin - dtDetails := dsDataTable.DataTable.GetDetailDataTables; - for i := 0 to dtDetails.Count - 1 do - begin - bCambiado := bCambiado or - ((TDADataTable(dtDetails.Items[i])).State = dsEdit) or - DeltaValuesAreDifferent((TDADataTable(dtDetails.Items[i])).Delta); - if bCambiado then - Break; - end; - end; - end; - - if (not bCambiado) then - bCambiado := inherited GetModified; - - Result := bCambiado; + if ReadOnly then + Result := False + else + Result := DataTableModified(dsDataTable.DataTable) or inherited GetModified; end; procedure TfEditorDBBase.FormCloseQuery(Sender: TObject; diff --git a/Source/Base/uEditorDBItem.ddp b/Source/Base/uEditorDBItem.ddp deleted file mode 100644 index 4370276c196a7fa73d6f8917622cba1c4e033dee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51 zcmZRVaB=ks@bJ`g@pN<#a`e>;@DB=c^Y`)e=VxGe;K0Pl$;KI)SCUzhlbT}4#=r!G E07ZHWvj6}9 diff --git a/Source/Base/uEditorGridBase.pas b/Source/Base/uEditorGridBase.pas index 673bc61728fa6943ce1912738315e235298994d7..6781ccdc94d0bbb3a74b7f39a1f14f86447cb307 100644 GIT binary patch delta 17 YcmbQL-LJhNiHp&9b2gV2HxmN`05RJHL;wH) delta 22 dcmeCzo~peeiHkF_B+)lNr8FmXb266}Hvn8N2ax~( diff --git a/Source/Base/uEditorItem.dfm b/Source/Base/uEditorItem.dfm index 106f387..36a7056 100644 --- a/Source/Base/uEditorItem.dfm +++ b/Source/Base/uEditorItem.dfm @@ -1,38 +1,50 @@ inherited fEditorItem: TfEditorItem Left = 423 Top = 273 - Width = 686 - Height = 535 Caption = 'fEditorItem' + ClientHeight = 508 + ClientWidth = 678 + ExplicitWidth = 686 + ExplicitHeight = 535 PixelsPerInch = 96 TextHeight = 13 inherited JvNavPanelHeader: TJvNavPanelHeader Width = 678 Visible = False + ExplicitWidth = 678 inherited Image1: TImage Left = 651 + ExplicitLeft = 651 end end object pgPaginas: TPageControl [1] Left = 0 Top = 76 Width = 678 - Height = 406 + Height = 413 ActivePage = pagGeneral Align = alClient TabOrder = 1 + ExplicitHeight = 406 object pagGeneral: TTabSheet Caption = 'General' + ExplicitLeft = 0 + ExplicitTop = 0 + ExplicitWidth = 0 + ExplicitHeight = 0 end end inherited TBXDock: TTBXDock Width = 678 + ExplicitWidth = 678 inherited tbxMain: TTBXToolbar + ExplicitWidth = 524 inherited TBXItem5: TTBXItem Visible = False end end inherited tbxMenu: TTBXToolbar + ExplicitWidth = 678 inherited TBXSubmenuItem4: TTBXSubmenuItem inherited TBXItem10: TTBXItem Visible = False @@ -41,8 +53,10 @@ inherited fEditorItem: TfEditorItem end end inherited StatusBar: TStatusBar - Top = 482 + Top = 489 Width = 678 + ExplicitTop = 482 + ExplicitWidth = 678 end inherited EditorActionList: TActionList Top = 104 diff --git a/Source/Base/uEditorItem.pas b/Source/Base/uEditorItem.pas index 50461c5..5a0ba64 100644 --- a/Source/Base/uEditorItem.pas +++ b/Source/Base/uEditorItem.pas @@ -26,7 +26,7 @@ var implementation -uses uDataModuleBase; +uses uDMBase; {$R *.dfm} diff --git a/Source/Base/uViewGridBase.ddp b/Source/Base/uViewGridBase.ddp deleted file mode 100644 index 4370276c196a7fa73d6f8917622cba1c4e033dee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51 zcmZRVaB=ks@bJ`g@pN<#a`e>;@DB=c^Y`)e=VxGe;K0Pl$;KI)SCUzhlbT}4#=r!G E07ZHWvj6}9 diff --git a/Source/CargaEDI/CargaEDI.dproj b/Source/CargaEDI/CargaEDI.dproj index 2cbf25b..bdad6b9 100644 --- a/Source/CargaEDI/CargaEDI.dproj +++ b/Source/CargaEDI/CargaEDI.dproj @@ -6,7 +6,7 @@ Debug AnyCPU true - BaseD10;Configuracion;FicherosEDI + BaseD10;FicherosEDI DCC32 ..\..\Output\Debug\Cliente\CargaEDI.exe @@ -50,9 +50,11 @@ + CodeGear WebSnap Components CodeGear SOAP Components Microsoft Office XP Sample Automation Server Wrapper Components + VCL for the Web Design Package for CodeGear RAD Studio Microsoft Office 2000 Sample Automation Server Wrapper Components CodeGear C++Builder Office 2000 Servers Package CodeGear C++Builder Office XP Servers Package diff --git a/Source/CargaEDI/CargaEDI.drc b/Source/CargaEDI/CargaEDI.drc index 2868863..4184c89 100644 --- a/Source/CargaEDI/CargaEDI.drc +++ b/Source/CargaEDI/CargaEDI.drc @@ -15,4 +15,4 @@ END /* C:\Archivos de programa\CodeGear\RAD Studio\5.0\Lib\WindowsXP.res */ /* C:\Varela_D2007\Source\CargaEDI\uCargaEDI.dfm */ /* C:\Varela_D2007\Source\CargaEDI\CargaEDI.res */ -/* C:\DOCUME~1\Usuario\CONFIG~1\Temp\dtf26.tmp */ +/* C:\DOCUME~1\Usuario\CONFIG~1\Temp\dtf3B.tmp */ diff --git a/Source/CargaEDI/CargaEDI.identcache b/Source/CargaEDI/CargaEDI.identcache deleted file mode 100644 index f6d811238c0db21c64d0a45694f198570fe60e47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 119 zcmZQ#U|`U7wu%W$EK1EujCV0IFffk^&Mz%WPK|L+EJ{ywb@7ZTg|YMs5{rQv;6R6v OPPoRDf+DysAOirV1RlWv diff --git a/Source/CargaEDI/uCargaEDI.ddp b/Source/CargaEDI/uCargaEDI.ddp deleted file mode 100644 index 4370276c196a7fa73d6f8917622cba1c4e033dee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51 zcmZRVaB=ks@bJ`g@pN<#a`e>;@DB=c^Y`)e=VxGe;K0Pl$;KI)SCUzhlbT}4#=r!G E07ZHWvj6}9 diff --git a/Source/CargaEDI/uCargaEDI.pas b/Source/CargaEDI/uCargaEDI.pas index 3dcebcb..782f40a 100644 --- a/Source/CargaEDI/uCargaEDI.pas +++ b/Source/CargaEDI/uCargaEDI.pas @@ -47,7 +47,7 @@ implementation {$R *.dfm} uses - uCargarFicheros, uDataModuleBase; + uCargarFicheros, uDMBase; procedure TfCargaEDI.FormShow(Sender: TObject); begin diff --git a/Source/Cliente/AdminPV.dpr b/Source/Cliente/AdminPV.dpr index d4006f3..86cddce 100644 --- a/Source/Cliente/AdminPV.dpr +++ b/Source/Cliente/AdminPV.dpr @@ -2,22 +2,26 @@ program AdminPV; uses Forms, - uLoginForm, uPantallaPrincipal in 'uPantallaPrincipal.pas' {fPantallaPrincipal}, - uMenuUtils in 'uMenuUtils.pas', - uSplash in 'uSplash.pas' {SplashScreen}, + uSplash in 'uSplash.pas' {AppSplashForm}, uAcercaDe in 'uAcercaDe.pas' {fAcercaDe}, - uIntegerList in '..\Base\uIntegerList.pas'; + uMenuUtils in 'Utiles\uMenuUtils.pas', + uBootStrap in 'uBootStrap.pas', + uNavPaneUtils in 'Utiles\uNavPaneUtils.pas', + uMainMenuController in 'uMainMenuController.pas', + uNavPaneController in 'uNavPaneController.pas', + uClienteUtils in 'Utiles\uClienteUtils.pas'; {$R *.res} begin Application.Initialize; - Application.Title := 'Administración de puntos de venta'; - Application.CreateForm(TfPantallaPrincipal, fPantallaPrincipal); - Application.MainFormOnTaskBar := True; - Application.Run; - Application.Terminate; + + uBootStrap.Initialize; + uBootStrap.Run; // <- Aquí dentro esta Application.Run + uBootStrap.Terminate; + + Application.Terminate; //<- No descomentar para así ver los Memory Leaks end. diff --git a/Source/Cliente/AdminPV.dproj b/Source/Cliente/AdminPV.dproj index ba9a539..e744c44 100644 --- a/Source/Cliente/AdminPV.dproj +++ b/Source/Cliente/AdminPV.dproj @@ -8,7 +8,7 @@ DCC32 ..\..\Output\Debug\Cliente\AdminPV.exe true - BaseD10;Configuracion;ControlesBaseD10;Usuarios;FicherosEDI;VentasProceso;VentasTerminadas;ReferenciaGenerica + BaseD10;ControlesBaseD10;Parametros;ApplicationBase;FicherosEDI 7.0 @@ -42,10 +42,11 @@ Delphi.Personality VCLApplication - FalseTrueFalseTrueFalse2110FalseFalseFalseFalseFalse30821252Rodax Software S.L.2.1.1.0Administración de puntos de ventaAdministración de puntos de venta1.0.0.0martes, 11 de marzo de 2008 18:44 + FalseTrueFalseTrueFalse2110FalseFalseFalseFalseFalse30821252Rodax Software S.L.2.1.1.0Administración de puntos de ventaAdministración de puntos de venta1.0.0.0miércoles, 12 de marzo de 2008 12:35 CodeGear WebSnap Components CodeGear SOAP Components Microsoft Office XP Sample Automation Server Wrapper Components + VCL for the Web Design Package for CodeGear RAD Studio Microsoft Office 2000 Sample Automation Server Wrapper Components CodeGear C++Builder Office 2000 Servers Package CodeGear C++Builder Office XP Servers Package @@ -56,17 +57,21 @@ MainSource -
fAcercaDe
- + + +
fPantallaPrincipal
-
SplashScreen
+
AppSplashForm
+ + +