universidad de guayaquil facultad de ciencias...
TRANSCRIPT
1
UNIVERSIDAD DE GUAYAQUIL
Facultad de Ciencias Matemáticas y Físicas
Carrera de Ingeniería en Sistemas Computacionales
“Customer Relationship Management”
PROYECTO DE GRADO
Previo a la Obtención del Título de:
INGENIERO EN SISTEMAS COMPUTACIONALES
Autores:
Esteves Mariño Mario Enrique
González Laje Edigta Marina
Holguín Holguín Gissella María
GUAYAQUIL-ECUADOR
2009
2
AGRADECIMIENTO
En primer lugar a Dios por permitirnos vivir un día
más y por permitirnos llegar hasta esta etapa de
nuestras vidas que recordaremos para siempre.
A nuestros padres y hermanos que con sus
palabras de aliento nos animaban a seguir y no
desmayar.
A conocidos y amigos, que con sus oraciones, nos
dieron su apoyo incondicional.
3
DEDICATORIA
Dedicado a Dios porque su presencia siempre
estuvo con nosotros, animándonos a seguir
adelante y a no darnos por vencidos.
Nosotros hicimos lo posible, pero Dios hizo lo
imposible.
4
TRIBUNAL DE GRADUACIÓN
Ing. Ing.
Decano Director de Tesis
Ing. Ing.
Vocal Vocal
Ing.
Secretario
5
DECLARACIÓN EXPRESA
“La autoría de la tesis de grado corresponde exclusivamente al suscrito(s),
perteneciendo a la Universidad de Guayaquil los derechos que generen la
aplicación de la misma”
(Reglamento de Graduación de la Carrera de Ingeniería en sistemas
Computacionales, Art. 26)
Esteves Mariño Mario Enrique
González Laje Edigta Marina
Holguín Holguín Gissella María
6
RESUMEN
Actualmente las Organizaciones han optimizado y mejorado la forma de llevar a cabo sus actividades habituales con los clientes mediante el uso de implementaciones tecnológicas. Sin embargo, debido a la necesidad de mejorar y atender eficientemente los Requerimientos/Necesidades de sus clientes, se desarrolló “MEG CRM” con la finalidad de permitir administrar todas las interacciones y negocios con los clientes. Esta aplicación fue diseñada usando la arquitectura tres capas, implementado la tecnología Oracle 10g R2 como servidor de la Base de Datos, OC4J de Jdeveloper 10.1.2.1.0 como Servidor de Aplicaciones y Ext Js 3.0.0 como Front End. El acceso al sistema será evaluado mediante los roles, privilegios y permisos que tenga configurado el usuario del mismo, proporcionándole así un username y password de conexión a la Base de Datos.
7
INDICE GENERAL
AGRADECIMIENTO II
DEDICATORIA III
TRIBUNAL DE GRADUACIÓN IV
DECLARACIÓN EXPRESA V
RESUMEN VI
INDICE GENERAL VII
TABLA DE CONTENIDO
MANUAL TÉCNICO..........................................................................................18
1.1. Creación del “Tablespace” y “Temporary Tablespace”.........................18
1.2. Creación del “Profile”............................................................................19
1.3. Creación del usuario megAdmin ..........................................................19
1.4. Creación de Permisos para el usuario megAdmin ...............................20
1.5. Creación del Rol megDba ....................................................................20
1.6. Creación de Permisos para el usuario megDba ...................................20
1.7. Creación de Tablas ..............................................................................21
1.7.1. Tabla MEG_ACT_COM.....................................................................21
1.7.2. Tabla MEG_PROFS..........................................................................22
1.7.3. Tabla MEG_ROLS.............................................................................23
8
1.7.4. Tabla MEG_ZONS ............................................................................24
1.7.5. Tabla MEG_DEPTS ..........................................................................25
1.7.6. Tabla MEG_EMPS ............................................................................26
1.7.7. Tabla MEG_CLIS ..............................................................................28
1.7.8. Tabla MEG_PARS ............................................................................30
1.7.9. Tabla MEG_BITS_CLIS ....................................................................31
1.7.10. Tabla MEG_COTZS ........................................................................31
1.7.11. Tabla MEG_BITS_COTZS ..............................................................33
1.7.12. Tabla MEG_TARS...........................................................................34
1.7.13. Tabla MEG_BITS_TARS.................................................................35
1.7.14. Tabla MEG_CONTS........................................................................36
1.7.15. Tabla MEG_PRODS........................................................................36
1.7.16. Tabla MEG_DETS_COTZS.............................................................37
1.7.17. Tabla MEG_VENTS ........................................................................39
1.7.18. Tabla MEG_DETS_VENTS.............................................................40
1.7.19. Tabla MEG_INCIDS ........................................................................42
1.7.20. Tabla MEG_INCIDS_BITS ..............................................................43
1.7.21. Tabla MEG_RECS ..........................................................................44
1.7.22. Tabla MEG_ROLS_RECS...............................................................45
1.7.23. Tabla MEG_SUCS ..........................................................................45
1.8. Creación de los paquetes.....................................................................46
1.8.1. MEG_PCKG_DELETE ......................................................................47
1.8.2. MEG_PCKG_INSERT.......................................................................51
9
1.8.3. MEG_PCKG_SELECT ......................................................................61
1.8.4. MEG_PCKG_UPDATE....................................................................108
1.8.5. MEG_PCKG_FUNCTIONS .............................................................113
1.9. Codificación del desarrollo del Proyecto.............................................114
1.9.1. Código en Java ...............................................................................114
1.9.1.1. Clases: Atributos ..........................................................................114
1.9.1.2. Clases Métodos............................................................................114
1.9.1.3. Conexión a la base de datos ........................................................116
1.9.2. Páginas creadas en Java (JSP) ......................................................117
1.9.3. Java Script.......................................................................................118
1.10. Instalación del Framework ExtJS .....................................................119
1.10.1. Importar el Framework en un HTML..............................................121
1.11. Instalación de Oracle 10g.................................................................123
1.11.1. Requerimientos para la Instalación ...............................................123
1.11.2. Pasos para la Instalación ..............................................................124
1.12. Instalación y Configuración de Oracle Developer.............................137
1.13. Configuración del Centos 5.5 ...........................................................143
1.13.1. Requerimientos para la instalación ...............................................143
1.13.2. Instalación de Centos 5.5 ..............................................................144
1.13.3. Instalación de Oracle 10g en Linux Centos 5.5 .............................154
MANUAL DE USUARIO ..............................................................................165
2. FUNCIONAMIENTO DEL SISTEMA ....................................................165
2.1. Pantalla de Login de Cliente del Sistema...........................................166
10
2.2. Pantalla de Login de Usuario del Sistema..........................................167
2.3. Menú Principal....................................................................................170
2.4. Gestión Comercial ..............................................................................170
2.4.1. Ventana de Cotizaciones.................................................................171
2.4.1.1. Número de cotización...................................................................172
2.4.1.2. Campo Cliente..............................................................................172
2.4.1.3. Fecha de Emisión y Validez de la Cotización...............................173
2.4.1.4. Campo Empleado.........................................................................173
2.4.1.5. Detalle ..........................................................................................174
2.4.1.6. Detalle de la Cotización................................................................174
2.4.2. Ventana de Ventas..........................................................................175
2.5. Gestión de Contactos.........................................................................185
2.5.1. Ventana de Clientes ........................................................................177
2.5.2. Ventana de Tareas..........................................................................178
2.5.2.1 Código de Tarea............................................................................178
2.5.2.2 Fecha Inicio de la Tarea ................................................................179
2.5.2.3 Fecha Final de la Tarea.................................................................179
2.5.2.4 Nombre del Empleado Asignado a la Tarea..................................180
2.5.2.5 Asunto de la Tarea ........................................................................181
2.5.2.6 Aviso de la Tarea ..........................................................................182
2.5.2.7 Prioridad de la Tarea.....................................................................182
2.5.2.8 Porcentaje Completado de la Tarea..............................................183
2.5.2.9 Tipo de Tarea ................................................................................183
11
2.5.2.10 Nota de la Tarea..........................................................................184
2.6. Mantimientos ......................................................................................184
2.6.1. Toolbar de las ventanas de mantimiento.........................................186
2.6.2. Ayuda de búsqueda.........................................................................190
2.6.3. Formulario de Zonas ........................................................................190
2.7. Post-Venta..........................................................................................191
2.7.1 Ventana de Incidencias ...................................................................192
2.7.1.1 Nùmero de la Incidencia ...............................................................192
2.7.1.2 Tipo de Incidencia ........................................................................193
2.7.1.3 Fecha de la Incidencia ..................................................................193
2.7.1.4 Prioridad de la Incidencia .............................................................194
2.7.1.5 Estado de la Incidencia ................................................................194
2.7.1.6 Número de Factura o Contrato .....................................................195
2.7.1.7 Descripciòn de la Incidencia .........................................................195
2.7.1.8 Detalle de la Incidencia ................................................................196
2.7.2 Ventana de Bitácora de Incidencias ................................................196
2.7.2.1 Criterios de Bùsqueda ..................................................................197
2.7.2.2 Filtro de las Etapas de la incidencia .............................................198
2.7.2.3 Resultado de la Bùsqueda ............................................................198
2.7.2.4 Editar Incidencia............................................................................199
2.8. Seguridad ...........................................................................................200
2.8.1 Roles ................................................................................................200
2.8.1.1 Listado de Roles............................................................................201
12
2.8.1.2 Listado de Persmisos ....................................................................202
2.8.1.3 Formulario .....................................................................................202
2.8.1.4 Asignar Roles a Usuarios ..............................................................203
INDICE DE FIGURAS
MÉTODO DE INSTALACIÓN .........................................................................124 TIPO DE INSTALACIÓN.................................................................................125 SELECCIÓN DEL DIRECTORIO RAÍZ...........................................................125 REQUISITOS DE ORACLE ............................................................................126 OPCIÓN DE CONFIGURACIÓN ....................................................................126 CONFIGURACIÓN DE BASE DE DATOS......................................................127 ESPECIFICAR OPCIONES DE CONFIGURACIÓN DE BASE DE DATOS ...127 OPCIÓN DE GESTIÓN DE BASE DE DATOS...............................................128 ESPECIFICAR OPCIÓN DE ALMACENAMIENTO DE BASE DE DATOS.....128 OPCIONES DE COPIA DE SEGURIDAD Y RECUPERACIÓN......................129 CONTRASEÑAS DE ESQUEMA DE BASE DE DATOS ................................129 RESUMEN......................................................................................................130 INSTALACIÓN DE ORACLE DATABASE ......................................................130 ASISTENTE DE CONFIGURACIÓN DE BASE DE DATOS...........................131 INFORMACIÓN DE LA BASE DE DATOS .....................................................131 GESTIÓN DE CONTRASEÑAS......................................................................132 FIN DE INSTALACIÓN ...................................................................................132 ORACLE ENTERPRISE MANAGER ..............................................................133 INSTANCIA DE LA BASE DE DATOS............................................................134 PESTAÑA DE ADMINISTRACIÓN .................................................................135 OPCIÓN DE “USUARIOS Y PRIVILEGIOS”...................................................135 BUSCAR USUARIOS .....................................................................................136 EDITAR USUARIOS.......................................................................................136 ESPACIO DE TRABAJO ................................................................................137 GESTOR DE RED DE ORACLE.....................................................................138 ASISTENTE DE NOMBRE DE SERVICIO DE RED.......................................139 PROTOCOLO.................................................................................................139 VALORES DE PROTOCOLO .........................................................................140 SERVICIO.......................................................................................................140 PRUEBA .........................................................................................................141 PRUEBA DE CONEXIÓN ...............................................................................141 CAMBIAR CONEXIÓN ...................................................................................142 CONFIGURACIÓN DE DIRECCIONES..........................................................142 GUARDAR CONFIGURACIÓN DE RED ........................................................143 CONFIGURACIÓN DE CENTOS....................................................................144
13
CONFIGURACIÓN DE AUTENTICACIÓN .....................................................144 CONFIGURACIÓN DEL FIREWALL...............................................................145 DESHABILITAR EL FIREWALL......................................................................145 CONFIGURACIÓN DE RED...........................................................................145 EDITAR DISPOSITIVO...................................................................................146 SELECCIONAR DISPOSITIVO ......................................................................146 CONFIGURACIÓN .........................................................................................147 DISPOSITIVO AVANZADO ............................................................................147 EDITAR CONFIGURACIÓN DEL DNS...........................................................147 CONFIGURACIÓN DEL DNS.........................................................................148 SERVICIOS DEL SISTEMA............................................................................148 SERVICIOS ....................................................................................................149 CONSOLA PASO 1 ........................................................................................149 CONSOLA PASO 2 ........................................................................................149 CONSOLA PASO 3 ........................................................................................149 CONSOLA PASO 4 ........................................................................................150 CONSOLA PASO 5 ........................................................................................150 CONSOLA PASO 6 ........................................................................................151 CONSOLA PASO 7 ........................................................................................151 CONSOLA PASO 8 ........................................................................................152 CONSOLA PASO 9 ........................................................................................152 CONSOLA PASO 10 ......................................................................................153 CONSOLA PASO 11 ......................................................................................153 TERMINAL......................................................................................................154 DESCARGAS .................................................................................................156 DESCARGAR ORACLE 10G..........................................................................157 INSTALACIÓN DEL ORACLE EN CENTOS ..................................................158 OPCIÓN “INSTALACIÓN AVANZADA” ..........................................................159 ESPECIFICAR DIRECTORIO.........................................................................159 TIPO DE INSTALACIÓN.................................................................................159 SELECCIONAR IDIOMA ................................................................................160 ESPECIFICAR DESTINO ...............................................................................160 ESPECIFICACIONES DEL PRODUCTO .......................................................160 SELECCIONAR OPCIONES DE CONFIGURACIÓN.....................................161 CONFIGURACIÓN DE LA BASE DE DATOS ................................................161 ESPECIFICAR OPCIONES DE CONFIGURACIÓN DE LA BASE DE DATOS161 OPCIONES DE ADMINISTRACIÓN DE LA BASE DE DATOS......................162 OPCIONES DE ALMACENAMIENTO DE LA BASE DE DATOS ...................162 OPCIONES DE COPIA DE SEGURIDAD Y DE RECUPERACIÓN................162 ESPECIFICAR CONTRASEÑAS....................................................................163 RESUMEN DE LA BASE DE DATOS.............................................................163 INSTALACIÓN DE LA BASE DE DATOS EN CENTOS .................................163 ASISTENTE DE CONFIGURACIÓN...............................................................164 TERMINAL......................................................................................................164
14
FIN DE LA INSTALACIÓN EN CENTOS ........................................................164 VENTANA DEL CHAT DEL SISTEMA MEG-CRM .........................................166 VENTANA DE LOGIN DEL SISTEMA MEG-CRM..........................................167 INGRESO A MEG-CRM .................................................................................168 DESKTOP DEL SISTEMA MEG-CRM............................................................168 OPCIONES DEL BOTÓN INICIO ...................................................................169 MENÚ PRINCIPAL .........................................................................................170 OPCIÓN “GESTIÓN COMERCIAL” ................................................................171 VENTANA DE COTIZACIONES .....................................................................171 CAMPO NÚMERO DE COTIZACIÓN.............................................................172 CAMPO CLIENTE...........................................................................................172 CAMPO FECHA DE EMISIÓN Y VALIDEZ ....................................................173 CAMPO CÓDIGO Y NOMBRE DE EMPLEADO ............................................173 CAMPO DETALLE..........................................................................................174 DETALLE DE LA COTIZACIÓN......................................................................174 VENTANA DE BÚSQUEDA DE PRODUCTO.................................................175 VENTANA DE VENTAS..................................................................................175 OPCIÓN DE GESTIÓN DE CONTACTOS .....................................................176 VENTANA DE CLIENTE.................................................................................177 VENTANA DE TAREAS..................................................................................178 CAMPO CODIGO DE TAREA ........................................................................178 CAMPO FECHA INICIO DE TAREA...............................................................179 CAMPO FECHA FINAL DE TAREA................................................................179 CAMPO EMPLEADO DE LA TAREA..............................................................180 VENTANA BUSCAR EMPLEADO ..................................................................181 CAMPO EMPLEADO ASIGNADO A LA TAREA ............................................181 CAMPO ASUNTO DE TAREA........................................................................181 CAMPO AVISO DE LA TAREA.......................................................................182 COMBO PRIORIDAD DE LA TAREA .............................................................182 LISTA DE PORCENTAJE DE LA TAREA.......................................................183 LISTA TIPO DE TAREA..................................................................................183 NOTA DE LA TAREA......................................................................................184 OPCIÓN DE MANTENIMIENTO.....................................................................185 MANTENIMIENTO DE ZONAS.......................................................................185 VENTANA DE BÚSQUEDA............................................................................190 FORMULARIO DE ZONAS.............................................................................190 OPCIÓN DE POST-VENTA............................................................................191 VENTANA DE INCIDENCIAS.........................................................................192 NUMERO DE LA INCIDENCIA.......................................................................192 TIPO DE INCIDENCIA....................................................................................193 FECHA DE LA INCIDENCIA...........................................................................193 PRIORIDAD DE LA INCIDENCIA ..................................................................194 ESTADO DE LA INCIDENCIA ........................................................................194 NUMERO DE FACTURA O CONTRATO .......................................................195
15
VENTANA DE BUSQUEDA DE FACTURA Y CONTRATO............................195 DESCRIPCION DE LA INCIDENCIA ..............................................................195 DETALLE DE LA INCIDENCIA.......................................................................196 VENTANA DE BITÁCORA DE INCIDENCIAS................................................196 CRITERIOS DE BUSQUEDA DE LA INCIDENCIA ........................................197 ETAPAS DE LA INCIDENCIA.........................................................................198 RESULTADO DE LA BUSQUEDA DE INCIDENCIAS....................................199 VENTANA DE EDICION DE LA INCIDENCIA ................................................199 OPCIÓN DE SEGURIDAD..............................................................................200 MANTENIMIENTO DE ROLES.......................................................................201 LISTADO DE ROLES .....................................................................................201 LISTADO DE PERMISOS...............................................................................202 FORMULARIO DE ROLES.............................................................................202 LISTA DE USUARIOS Y SUS ROLES ...........................................................203
INDICE DE TABLAS
MEG_PCKG_DELETE......................................................................................48 FUNCIÓN MEG_FNC_ROLS_RECS_DELETE................................................48 FUNCIÓN MEG_FNC_ZONS_DELETE ..........................................................49 FUNCIÓN MEG_FNC_ROLS_DELETE ...........................................................49 FUNCIÓN MEG_FNC_EMPS_DELETE ...........................................................49 FUNCIÓN MEG_DEPTS_DELETE...................................................................49 FUNCIÓN MEG_FNC_PARS_DELETE ...........................................................50 FUNCIÓN MEG_PROFS_DELETE ..................................................................50 FUNCIÓN MEG_FNC_SUCS_DELETE ...........................................................50 FUNCIÓN MEG_FNC_CLIS_DELETE .............................................................50 MEG_PCKG_INSERT ......................................................................................51 FUNCIÓN MEG_FNC_NEXT_ID......................................................................52 FUNCIÓN MEG_FNC_CHAT_OPERADOR.....................................................53 FUNCIÓN MEG_FNC_RECS_INSERT ............................................................53 FUNCIÓN MEG_FNC_ZONS_INSERT ............................................................53 FUNCIÓN MEG_FNC_ROLS_INSERT ............................................................54 FUNCIÓN MEG_FNC_EMPS_INSERT............................................................54 FUNCIÓN MEG_FNC_DEPTS_INSERT ..........................................................55 FUNCIÓN MEG_FNC_PARS_INSERT ............................................................56 FUNCIÓN MEG_FNC_PROFS_INSERT..........................................................56 FUNCIÓN MEG_FNC_SUCS_INSERT ............................................................56 FUNCIÓN MEG_FNC_INCID_INSERT ............................................................57 FUNCIÓN MEG_FNC_CLIS_INSERT ..............................................................57 FUNCIÓN MEG_FNC_PRODS_INSERT .........................................................58 FUNCIÓN MEG_FNC_COTZS_INSERT_CAB.................................................59 FUNCIÓN MEG_FNC_COTZS_INSERT_DET.................................................59 FUNCIÓN MEG_FNC_VENTS_INSERT_CAB.................................................60
16
FUNCIÓN MEG_FNC_DETS_VENTS_INSERT_DET .....................................60 FUNCIÓN MEG_FNC_BIT_INCID_INSERT.....................................................61 MEG_PCKG_SELECT......................................................................................62 PROCEDIMIENTO MEG_PRC_LOGIN............................................................65 FUNCIÓN MEG_FNC_PERMISOS_SELECT ..................................................65 FUNCIÓN MEG_FNC_SELECT_ZONAS.........................................................66 FUNCIÓN MEG_FNC_ZONAS_COMBO .........................................................66 FUNCIÓN MEG_FNC_ZONAS_TREE .............................................................67 FUNCIÓN MEG_FNC_SELECT_CODE_ZONA...............................................68 FUNCIÓN MEG_FNC_SELECT_ROL..............................................................69 FUNCIÓN MEG_FNC_ROLES_COMBO .........................................................70 FUNCIÓN MEG_FNC_ROLES_PERMS_TREE...............................................70 FUNCIÓN MEG_FNC_SEEK_PERMS.............................................................71 FUNCIÓN MEG_FNC_ROLES_TREE .............................................................72 FUNCIÓN MEG_FNC_SELECT_DEPTS .........................................................73 FUNCIÓN MEG_FNC_DEPTS_COMBO..........................................................73 FUNCIÓN MEG_FNC_DEPTS_TREE..............................................................74 FUNCIÓN MEG_FNC_SELECT_CODE_DEPT ...............................................75 FUNCIÓN MEG_FNC_SELECT_PARS ...........................................................75 FUNCIÓN MEG_FNC_PARS_COMBO............................................................76 FUNCIÓN MEG_FNC_PARS_TREE................................................................77 FUNCIÓN MEG_FNC_SELECT_CODE_PAR..................................................78 FUNCIÓN MEG_FNC_CLIS_COMBO..............................................................78 FUNCIÓN MEG_FNC_CLIS_TREE..................................................................79 FUNCIÓN MEG_FNC_SELECT_CLIS .............................................................79 FUNCIÓN MEG_FNC_SELECT_PROFS.........................................................80 FUNCIÓN MEG_FNC_SELECT_PROFS_COMBO .........................................80 FUNCIÓN MEG_FNC_SELECT_PROFS_TREE .............................................81 FUNCIÓN MEG_FNC_SELECT_SUCS ...........................................................82 FUNCIÓN MEG_FNC_SUCS_TREE................................................................82 FUNCIÓN MEG_FNC_SELECT_CODE_SUC .................................................83 FUNCIÓN MEG_FNC_PAR_INFO_TREE........................................................84 FUNCIÓN MEG_FNC_SEEK_GRID_CLIS.......................................................85 FUNCIÓN MEG_FNC_SEEK_GRID_EMPS.....................................................86 FUNCIÓN MEG_FNC_GRIDS_EMPS_ROLS..................................................87 FUNCIÓN MEG_FNC_SEEK_GRIDS_PRODS................................................88 FUNCIÓN MEG_FNC_SELECT_CLIS .............................................................90 FUNCIÓN MEG_FNC_ACT_COM_COMBO ....................................................91 FUNCIÓN MEG_FNC_TAREAS_PRIOR_COMBO..........................................92 FUNCIÓN MEG_FNC_SELECT_EMPS ...........................................................93 FUNCIÓN MEG_FNC_SEEK_GRID_COTZS...................................................95 FUNCIÓN MEG_FNC_SELECT_TAREAS.......................................................96 FUNCIÓN MEG_FNC_SEEK_GRID_TARS .....................................................97 FUNCIÓN MEG_FNC_SELECT_INCIDS .........................................................99
17
FUNCIÓN MEG_FNC_INCIDS_COMBO .......................................................100 FUNCIÓN MEG_FNC_SELECT_CODE_INCID .............................................101 FUNCIÓN MEG_FNC_INCID_PRIOR_COMBO.............................................101 FUNCIÓN MEG_FNC_INCID_STAT_COMBO...............................................102 FUNCIÓN MEG_FNC_SELECT_CTZS_CAB.................................................102 FUNCIÓN MEG_FNC_SELECT_CTZS_DET.................................................104 FUNCIÓN MEG_PRC_LOGIN_CLI_WEB ......................................................106 FUNCIÓN MEG_FNC_SEEK_GRID_VENTAS ..............................................106 MEG_PCKG_UPDATE ...................................................................................108 FUNCIÓN MEG_FNC_RECS_UPDATE.........................................................108 FUNCIÓN MEG_FNC_ZONS_UPDATE.........................................................109 FUNCIÓN MEG_FNC_ROLS_UPDATE.........................................................109 FUNCIÓN MEG_FNC_EMPS_UPDATE ........................................................110 FUNCIÓN MEG_FNC_DEPTS_UPDATE.......................................................110 FUNCIÓN MEG_FNC_PARS_UPDATE.........................................................111 FUNCIÓN MEG_FNC_PROFS_UPDATE ......................................................111 FUNCIÓN MEG_FNC_SUCS_UPDATE.........................................................111 FUNCIÓN MEG_FNC_CLIS_UPDATE...........................................................111 FUNCIÓN MEG_FNC_INCIDS_UPDATE ......................................................112 MEG_PCKG_FUNCTIONS.............................................................................113 PROCEDIMIENTO MEG_PROC_SEND_MAIL ..............................................113 TOOLBAR DE LAS VENTANAS DE MANTENIMIENTO................................186
18
MANUAL TÉCNICO
1.1. Creación del “Tablespace” y “Temporary Tablesp ace”
CONNECT SYS/guile6893 AS SYSDBA;
CREATE TABLESPACE MEG_DATA DATAFILE
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\MEGCRM\MEG_DATA.DBF' SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED LOGGING EXTENT
MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
ALTER DATABASE DEFAULT TABLESPACE MEG_DATA;
CREATE TEMPORARY TABLESPACE MEG_TMP TEMPFILE
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\MEGCRM\MEG_TMP.DBF' SIZE 50M
AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL
UNIFORM SIZE 1M;
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE MEG_TMP;
19
1.2. Creación del “Profile”
CREATE PROFILE megPerfil LIMIT CPU_PER_SESSION UNLIMITED
CPU_PER_CALL UNLIMITED
CONNECT_TIME 30
IDLE_TIME DEFAULT
SESSIONS_PER_USER 10
LOGICAL_READS_PER_SESSION DEFAULT
LOGICAL_READS_PER_CALL DEFAULT
PRIVATE_SGA DEFAULT
COMPOSITE_LIMIT DEFAULT
PASSWORD_LIFE_TIME 60
PASSWORD_GRACE_TIME 30
PASSWORD_REUSE_MAX DEFAULT
PASSWORD_REUSE_TIME DEFAULT
PASSWORD_LOCK_TIME 5
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_VERIFY_FUNCTION DEFAULT;
1.3. Creación del usuario megAdmin
CREATE USER megAdmin PROFILE megPerfil IDENTIFIED BY mesteves74 DEFAULT
TABLESPACE MEG_DATA TEMPORARY TABLESPACE MEG_TMP ACCOUNT UNLOCK;
20
1.4. Creación de Permisos para el usuario megAdmin
GRANT CONNECT TO megAdmin;
ALTER USER megAdmin QUOTA UNLIMITED ON MEG_DATA;
GRANT UNLIMITED TABLESPACE TO megAdmin;
1.5. Creación del Rol megDba
CREATE ROLE megDba IDENTIFIED BY mesteves74;
1.6. Creación de Permisos para el usuario megDba
GRANT CREATE USER TO megDba WITH ADMIN OPTION;
GRANT CREATE SESSION TO megDba WITH ADMIN OPTION;
GRANT ALTER SESSION TO megDba WITH ADMIN OPTION;
GRANT CREATE DATABASE LINK TO megDba WITH ADMIN OPTION;
GRANT CREATE SEQUENCE TO megDba WITH ADMIN OPTION;
GRANT CREATE SYNONYM TO megDba WITH ADMIN OPTION;
GRANT CREATE TRIGGER TO megDba WITH ADMIN OPTION;
GRANT CREATE PROCEDURE TO megDba WITH ADMIN OPTION;
GRANT CREATE TABLE TO megDba WITH ADMIN OPTION;
GRANT CREATE VIEW TO megDba WITH ADMIN OPTION;
GRANT CREATE SYNONYM TO megDba WITH ADMIN OPTION;
GRANT SELECT ANY DICTIONARY TO megDba WITH ADMIN OPTION;
21
GRANT EXECUTE ANY PROCEDURE TO megDba WITH ADMIN OPTION;
GRANT DEBUG ANY PROCEDURE TO megDBA WITH ADMIN OPTION;
GRANT DEBUG CONNECT SESSION TO megDBA WITH ADMIN OPTION;
GRANT DROP ANY SEQUENCE TO megDba WITH ADMIN OPTION;
GRANT DROP ANY SYNONYM TO megDba WITH ADMIN OPTION;
GRANT ALTER ANY TYPE TO megDba;
GRANT CREATE ANY TYPE TO megDba;
GRANT DROP ANY TYPE TO megDba;
GRANT megDba TO megAdmin;
CONNECT megAdmin/mesteves74;
1.7. Creación de Tablas
1.7.1. Tabla MEG_ACT_COM
create table MEG_ACT_COM (
ACT_COM$ID$C CHAR(10) not null, ACT_COM$COD$V VARCHAR2(15), ACT_COM$NOM$V VARCHAR2(50), ACT_COM$NOTA$V VARCHAR2(1024), ACT_COM$FEC$CRE$D DATE, ACT_COM$CRE$POR$V VARCHAR2(10), ACT_COM$FEC$EDT$D DATE, ACT_COM$EDT$POR$V VARCHAR2(10) default '', ACT_COM$FEC$ANU$D DATE, ACT_COM$ANU$POR$V VARCHAR2(10) default '', ACT_COM$EST$C CHAR(1) default '0'
); alter table MEG_ACT_COM add constraint ACT_COM#ID#PK primary key (ACT_COM$ID$C); alter table MEG_ACT_COM add constraint ACT_COM#COD#UK unique (ACT_COM$COD$V); alter table MEG_ACT_COM add constraint ACT_COM#NOM#UK unique (ACT_COM$NOM$V);
22
alter table MEGADMIN.MEG_ACT_COM add constraint ACT_COM#COD#NN check ("ACT_COM$COD$V" IS NOT NULL); alter table MEG_ACT_COM add constraint ACT_COM#CRE#POR#NN check ("ACT_COM$CRE$POR$V" IS NOT NULL); alter table MEG_ACT_COM add constraint ACT_COM#EST#CK check (act_com$est$c = '0' OR act_com$est$c = '1'); alter table MEG_ACT_COM add constraint ACT_COM#EST#NN check ("ACT_COM$EST$C" IS NOT NULL); alter table MEG_ACT_COM add constraint ACT_COM#FEC#CRE#NN check ("ACT_COM$FEC$CRE$D" IS NOT NULL);
alter table MEGADMIN.MEG_ACT_COM add constraint ACT_COM#NOM#NN check ("ACT_COM$NOM$V" IS NOT NULL);
1.7.2. Tabla MEG_PROFS
create table MEG_PROFS (
PROF$ID$C CHAR(10) not null, PROF$COD$V VARCHAR2(15), PROF$NOM$V VARCHAR2(50), PROF$FEC$CRE$D DATE, PROF$CRE$POR$V VARCHAR2(10), PROF$EST$C CHAR(1) default '0', PROF$FEC$EDT$D DATE, PROF$EDT$POR$V VARCHAR2(10) default '', PROF$ANU$POR$V VARCHAR2(10) default '', PROF$ANU$FEC$D DATE
); alter table MEG_PROFS add constraint PROF#ID#PK primary key (PROF$ID$C); alter table MEG_PROFS add constraint PROF#COD#UK unique (PROF$COD$V); alter table MEG_PROFS add constraint PROF#NOM#UK unique (PROF$NOM$V); alter table MEG_PROFS add constraint PROF#COD#NN check ("PROF$COD$V" IS NOT NULL); alter table MEG_PROFS add constraint
23
PROF#CRE#POR#NN check ("PROF$CRE$POR$V" IS NOT NULL); alter table MEG_PROFS add constraint PROF#EST#CK check (prof$est$c = '0' OR prof$est$c = '1'); alter table MEG_PROFS add constraint PROF#EST#NN check ("PROF$EST$C" IS NOT NULL); alter table MEG_PROFS add constraint PROF#FEC#CRE#NN check ("PROF$FEC$CRE$D" IS NOT NULL); alter table MEG_PROFS add constraint PROF#NOM#NN check ("PROF$NOM$V" IS NOT NULL);
grant select, insert, update, delete on MEGADMIN.MEG_PROFS to MEGUSER;
1.7.3. Tabla MEG_ROLS
create table MEG_ROLS (
ROL$ID$C CHAR(10) not null, ROL$COD$V VARCHAR2(15), ROL$NOM$V VARCHAR2(50), ROL$FEC$CRE$D DATE, ROL$CRE$POR$V VARCHAR2(10), ROL$EST$C CHAR(1) default '0', ROL$FEC$EDT$D DATE, ROL$EDT$POR$V VARCHAR2(10) default '', ROL$ANU$POR$V VARCHAR2(10) default '', ROL$ANU$FEC$D DATE
);
alter table MEG_ROLS add constraint ROL#ID#PK primary key (ROL$ID$C); alter table MEG_ROLS add constraint ROL#COD#UK unique (ROL$COD$V); alter table MEG_ROLS add constraint ROL#NOM#UK unique (ROL$NOM$V); alter table MEG_ROLS add constraint ROL#COD#NN check ("ROL$COD$V" IS NOT NULL); alter table MEG_ROLS add constraint ROL#CRE#POR#NN check ("ROL$CRE$POR$V" IS NOT NULL); alter table MEG_ROLS add constraint ROL#EST#CK check (rol$est$c = '0' OR rol$est$c = '1');
24
alter table MEG_ROLS add constraint ROL#EST#NN check ("ROL$EST$C" IS NOT NULL); alter table MEG_ROLS add constraint ROL#FEC#CRE#NN check ("ROL$FEC$CRE$D" IS NOT NULL); alter table MEG_ROLS add constraint ROL#NOM#NN check ("ROL$NOM$V" IS NOT NULL); grant select, insert, update, delete on MEGADMIN.MEG_ROLS to MEGUSER;
1.7.4. Tabla MEG_ZONS
create table MEG_ZONS (
ZON$ID$C CHAR(10) not null, ZON$COD$V VARCHAR2(15), ZON$NOM$V VARCHAR2(50), ZON$FEC$CRE$D DATE, ZON$CRE$POR$V VARCHAR2(10), ZON$EST$C CHAR(1) default '0', PAD$ID$C CHAR(10) default '', ZON$FEC$EDT$D DATE default '', ZON$EDT$POR$V VARCHAR2(10) default '', ZON$ANU$POR$V VARCHAR2(10) default '', ZON$ANU$FEC$D DATE
);
alter table MEG_ZONS add constraint ZON#ID#PK primary key (ZON$ID$C); alter table MEG_ZONS add constraint ZON#COD#UK unique (ZON$COD$V); alter table MEG_ZONS add constraint ZON#NOM#UK unique (ZON$NOM$V); alter table MEG_ZONS add constraint ZON_ZON#FK foreign key (PAD$ID$C) references MEG_ZONS (ZON$ID$C); alter table MEG_ZONS add constraint ZON#COD#NN check ("ZON$COD$V" IS NOT NULL); alter table MEG_ZONS add constraint ZON#CRE#POR#NN check ("ZON$CRE$POR$V" IS NOT NULL); alter table MEG_ZONS
25
add constraint ZON#EST#CK check (zon$est$c = '0' OR zon$est$c = '1'); alter table MEG_ZONS add constraint ZON#EST#NN check ("ZON$EST$C" IS NOT NULL); alter table MEG_ZONS add constraint ZON#FEC#CRE#NN check ("ZON$FEC$CRE$D" IS NOT NULL); alter table MEG_ZONS add constraint ZON#NOM#NN check ("ZON$NOM$V" IS NOT NULL); grant select, insert, update, delete on MEGADMIN.MEG_ZONS to MEGUSER;
1.7.5. Tabla MEG_DEPTS
create table MEG_DEPTS (
DEPT$ID$C CHAR(10) not null, DEPT$COD$V VARCHAR2(15), DEPT$NOM$V VARCHAR2(50), DEPT$FEC$CRE$D DATE, DEPT$CRE$POR$V VARCHAR2(10), DEPT$EST$C CHAR(1) default '0', DEPT$FEC$EDT$D DATE, DEPT$EDT$POR$V VARCHAR2(10) default '', DEPT$ANU$POR$V VARCHAR2(10) default '', DEPT$ANU$FEC$D DATE, PAD$ID$C CHAR(10)
);
alter table MEG_DEPTS add constraint DEPT#ID#PK primary key (DEPT$ID$C); alter table MEG_DEPTS add constraint DEPT#COD#UK unique (DEPT$COD$V); alter table MEG_DEPTS add constraint DEPT#NOM#UK unique (DEPT$NOM$V); alter table MEG_DEPTS add constraint DEPT#COD#NN check ("DEPT$COD$V" IS NOT NULL); alter table MEG_DEPTS add constraint DEPT#CRE#POR#NN check ("DEPT$CRE$POR$V" IS NOT NULL); alter table MEG_DEPTS add constraint DEPT#EST#CK check (dept$est$c = '0' OR dept$est$c = '1');
26
alter table MEG_DEPTS add constraint DEPT#EST#NN check ("DEPT$EST$C" IS NOT NULL); alter table MEG_DEPTS add constraint DEPT#FEC#CRE#NN check ("DEPT$FEC$CRE$D" IS NOT NULL); alter table MEG_DEPTS add constraint DEPT#NOM#NN check ("DEPT$NOM$V" IS NOT NULL); grant select, insert, update, delete on MEGADMIN.MEG_DEPTS to MEGUSER;
1.7.6. Tabla MEG_EMPS
create table MEG_EMPS (
EMP$ID$C CHAR(10) not null, EMP$COD$V VARCHAR2(15), EMP$TIP$DOC$C CHAR(1), EMP$NUM$DOC$V VARCHAR2(13), EMP$NOMB$V VARCHAR2(150), EMP$DIR$V VARCHAR2(250), EMP$FEC$NAC$D DATE, EMP$TELF$V VARCHAR2(9) default '', EMP$MAIL$V VARCHAR2(50) default '', EMP$SEXO$C CHAR(1), EMP$EST$CIV$C CHAR(1), EMP$CARG$FAM$N NUMBER(2) default 0, EMP$CUEN$BANC$V VARCHAR2(25) default '', DEPT$ID$C CHAR(10), ZON$ID$C CHAR(10), PROF$ID$C CHAR(10), ROL$ID$C CHAR(10), EMP$EST$C CHAR(1) default '0', EMP$CLAVE$V VARCHAR2(10) default '', EMP$BLOQ$C CHAR(1) default '0' not null, EMP$FEC$EDT$D DATE, EMP$EDT$POR$V VARCHAR2(10) default '', EMP$ANU$POR$V VARCHAR2(10) default '', EMP$ANU$FEC$D DATE, EMP$CRE$POR$V VARCHAR2(10) default '', EMP$FEC$CRE$D DATE
);
alter table MEG_EMPS add constraint EMP#ID#PK primary key (EMP$ID$C); alter table MEG_EMPS add constraint EMP#COD#UK unique (EMP$COD$V);
27
alter table MEG_EMPS add constraint DEPT_EMP#FK foreign key (DEPT$ID$C) references MEG_DEPTS (DEPT$ID$C); alter table MEG_EMPS add constraint PROF_EMP#FK foreign key (PROF$ID$C) references MEG_PROFS (PROF$ID$C); alter table MEG_EMPS add constraint ROL_EMP#FK foreign key (ROL$ID$C) references MEG_ROLS (ROL$ID$C); alter table MEG_EMPS add constraint ZON_EMP#FK foreign key (ZON$ID$C) references MEG_ZONS (ZON$ID$C);
alter table MEG_EMPS add constraint EMP#COD#NN check ("EMP$COD$V" IS NOT NULL); alter table MEG_EMPS add constraint EMP#DIR#NN check ("EMP$DIR$V" IS NOT NULL); alter table MEG_EMPS add constraint EMP#EST#CIV#CK check (emp$est$civ$c = 'S' OR emp$est$civ$c = 'C' OR emp$est$civ$c = 'D' OR emp$est$civ$c = 'V' OR emp$est$civ$c = 'U'); alter table MEG_EMPS add constraint EMP#EST#CIV#NN check ("EMP$EST$CIV$C" IS NOT NULL); alter table MEG_EMPS add constraint EMP#EST#CK check (EMP$EST$C = '0' OR EMP$EST$C = '1'); alter table MEG_EMPS add constraint EMP#EST#NN check ("EMP$EST$C" IS NOT NULL); alter table MEG_EMPS add constraint EMP#FEC#NAC#NN check ("EMP$FEC$NAC$D" IS NOT NULL); alter table MEG_EMPS add constraint EMP#NOMB#NN check ("EMP$NOMB$V" IS NOT NULL); alter table MEG_EMPS add constraint EMP#NUM#DOC#NN check ("EMP$NUM$DOC$V" IS NOT NULL); alter table MEG_EMPS add constraint EMP#SEXO#CK check (emp$sexo$c = 'F' OR emp$sexo$c = 'M');
alter table MEG_EMPS add constraint EMP#TIP#DOC#CK check (emp$tip$doc$c = 'C' OR emp$tip$doc$c = 'P'); alter table MEG_EMPS add constraint EMP#TIP#DOC#NN check ("EMP$TIP$DOC$C" IS NOT NULL); grant select, insert, update, delete on MEGADMIN.MEG_EMPS to MEGUSER;
28
1.7.7. Tabla MEG_CLIS
create table MEG_CLIS (
CLI$ID$C CHAR(10) not null, CLI$COD$V VARCHAR2(15), CLI$TIP$CLI$C CHAR(1), CLI$TIP$IDE$C CHAR(1), CLI$NUM$IDE$V VARCHAR2(13), CLI$NOM$V VARCHAR2(150), CLI$DIR$V VARCHAR2(200), CLI$TEL$V VARCHAR2(50) default '', CLI$FAX$V VARCHAR2(50) default '', CLI$EST$CIV$C CHAR(1), CLI$MAIL$V VARCHAR2(50) default '', CLI$PASS$C CHAR(8) default '', CLI$DESD$D DATE not null, CLI$SEXO$C CHAR(1) default '', PROF$ID$C CHAR(10) not null, ACT_COM$ID$C CHAR(10) not null, ZON$ID$C CHAR(10) not null, EMP$ID$C CHAR(10) not null, CLI$FEC$NAC$D DATE, CLI$PAG$WEB$V VARCHAR2(50) default '', CLI$REC$MAIL$V VARCHAR2(4) default '', CLI$EST$C CHAR(1) default '0', CLI$FEC$EDT$D DATE, CLI$EDT$POR$V VARCHAR2(10) default '', CLI$ANU$POR$V VARCHAR2(10) default '', CLI$ANU$FEC$D DATE, CLI$CRE$POR$V VARCHAR2(10) default '', CLI$FEC$CRE$D DATE, CLI$CONTAC$V VARCHAR2(150) default ''
);
alter table MEG_CLIS add constraint CLI#ID#PK primary key (CLI$ID$C); alter table MEG_CLIS add constraint CLI#COD#UK unique (CLI$COD$V); alter table MEG_CLIS add constraint CLI#NOMB#UK unique (CLI$NOM$V); alter table MEG_CLIS add constraint CLI#NUM#IDE#UK unique (CLI$NUM$IDE$V); alter table MEG_CLIS add constraint ACT_COM#FK foreign key (ACT_COM$ID$C) references MEG_ACT_COM (ACT_COM$ID$C); alter table MEG_CLIS add constraint EMP_CLI#FK foreign key (EMP$ID$C)
29
references.MEG_EMPS (EMP$ID$C); alter table MEG_CLIS add constraint PROF_CLI#FK foreign key (PROF$ID$C) references MEG_PROFS (PROF$ID$C); alter table MEG_CLIS add constraint ZON_CLI#FK foreign key (ZON$ID$C) references MEG_ZONS (ZON$ID$C);
alter table MEG_CLIS add constraint CLI#COD#NN check ("CLI$COD$V" IS NOT NULL); alter table MEG_CLIS add constraint CLI#DIR#NN check ("CLI$DIR$V" IS NOT NULL); alter table MEG_CLIS add constraint CLI#EST#CIV#CK check (cli$est$civ$c = 'S' OR cli$est$civ$c = 'C' OR cli$est$civ$c = 'D' OR cli$est$civ$c = 'V' OR cli$est$civ$c = 'U'); alter table MEG_CLIS add constraint CLI#EST#CK check (cli$est$c = '0' OR cli$est$c = '1'); alter table MEG_CLIS add constraint CLI#EST#NN check ("CLI$EST$C" IS NOT NULL); alter table MEG_CLIS add constraint CLI#NOM#NN check ("CLI$NOM$V" IS NOT NULL); alter table MEG_CLIS add constraint CLI#NUM#IDE#NN check ("CLI$NUM$IDE$V" IS NOT NULL); alter table MEG_CLIS add constraint CLI#SEXO#CK check (cli$sexo$c='F' OR cli$sexo$c='M');
alter table MEG_CLIS add constraint CLI#TIP#CLI#CK check ( cli$tip$cli$c = 'P' OR cli$tip$cli$c = 'E' OR cli$tip$cli$c = 'C' ); alter table MEG_CLIS add constraint CLI#TIP#CLI#NN check ("CLI$TIP$CLI$C" IS NOT NULL); alter table MEG_CLIS add constraint CLI#TIP#IDE#CK check (cli$tip$ide$c = 'C' OR cli$tip$ide$c = 'P' OR cli$tip$ide$c = 'R'); alter table MEG_CLIS add constraint CLI#TIP#IDE#NN check ("CLI$TIP$IDE$C" IS NOT NULL); grant select, insert, update, delete on MEGADMIN.MEG_CLIS to MEGUSER;
30
1.7.8. Tabla MEG_PARS
create table MEG_PARS (
PAR$ID$C CHAR(10) not null, PAR$COD$V VARCHAR2(15), PAR$NOM$V VARCHAR2(150), PAR$VAL$V VARCHAR2(20), PAR$TIP$V VARCHAR2(10), PAD$ID$C CHAR(10), PAR$FEC$CRE$D DATE, PAR$CRE$POR$V VARCHAR2(10), PAR$EST$C CHAR(1), PAR$FEC$EDT$D DATE, PAR$EDT$POR$V VARCHAR2(10) default '', PAR$ANU$POR$V VARCHAR2(10) default '', PAR$ANU$FEC$D DATE
);
alter table MEG_PARS add constraint PAR#ID#PK primary key (PAR$ID$C); alter table MEG_PARS add constraint PAR#PAR#FK foreign key (PAD$ID$C) references MEG_PARS (PAR$ID$C); alter table MEG_PARS add constraint PAR#COD#NN check ("PAR$COD$V" IS NOT NULL); alter table MEG_PARS add constraint PAR#CRE#POR#NN check ("PAR$CRE$POR$V" IS NOT NULL); alter table MEG_PARS add constraint PAR#EST#CK check (par$est$c = '0' OR par$est$c = '1'); alter table MEG_PARS add constraint PAR#EST#NN check ("PAR$EST$C" IS NOT NULL);
alter table MEG_PARS add constraint PAR#FEC#CRE#NN check ("PAR$FEC$CRE$D" IS NOT NULL); alter table MEG_PARS add constraint PAR#NOM#NN check ("PAR$NOM$V" IS NOT NULL); alter table MEG_PARS add constraint PAR#TIP#NN check ("PAR$TIP$V" IS NOT NULL); alter table MEG_PARS add constraint PAR#VAL#NN check ("PAR$VAL$V" IS NOT NULL); grant select, insert, update, delete on MEGADMIN.MEG_PARS to MEGUSER;
31
1.7.9. Tabla MEG_BITS_CLIS
create table MEG_BITS_CLIS (
CLI$ID$C CHAR(10), BIT_CLI$FEC$D DATE, BIT_CLI$HORA$C CHAR(5), BIT_CLI$NOTA$V VARCHAR2(800), EMP$ID$C CHAR(10), TIP$ID$C CHAR(10), BIT_CLI$EST$C CHAR(1)
);
alter table MEG_BITS_CLIS add constraint CLI_BIT_CLI#FK foreign key (CLI$ID$C) references MEG_CLIS (CLI$ID$C);
alter table MEG_BITS_CLIS add constraint EMP_BIT_CLI#FK foreign key (EMP$ID$C) references MEG_EMPS (EMP$ID$C); alter table MEG_BITS_CLIS add constraint PAR_BIT_CLI#FK foreign key (TIP$ID$C) references MEG_PARS (PAR$ID$C); alter table MEG_BITS_CLIS add constraint BIT_CLI#EST#CK check (bit_cli$est$c = '0' OR bit_cli$est$c = '1'); alter table MEG_BITS_CLIS add constraint BIT_CLI#EST#NN check ("BIT_CLI$EST$C" IS NOT NULL); alter table MEG_BITS_CLIS add constraint BIT_CLI#FEC#NN check ("BIT_CLI$FEC$D" IS NOT NULL); alter table MEG_BITS_CLIS add constraint BIT_CLI#HORA#NN check ("BIT_CLI$HORA$C" IS NOT NULL); alter table MEG_BITS_CLIS add constraint BIT_CLI#NOTA#NN check ("BIT_CLI$NOTA$V" IS NOT NULL); grant select, insert, update, delete on MEGADMIN.MEG_BITS_CLIS to MEGUSER;
1.7.10. Tabla MEG_COTZS
create table MEG_COTZS (
COTZ$ID$C CHAR(10) not null, COTZ$FEC$D DATE, COTZ$NOTA$V VARCHAR2(1024),
32
CLI$ID$C CHAR(10), EMP$ID$C CHAR(10), COTZ$SUBT$N NUMBER(8,2), COTZ$PORC$DESC$N NUMBER(4,2) default 0, COTZ$VAL$DESC$N NUMBER(8,2) default 0, COTZ$PORC$IMP$N NUMBER(4,2) default 0, COTZ$VAL$IMP$N NUMBER(8,2) default 0, COTZ$TOT$N NUMBER(8,2), COTZ$VALZ$D DATE, EST$ID$C CHAR(10), COTZ$EST$C CHAR(1) default '0', COT$FEC$EDT$D DATE, COT$EDT$POR$V VARCHAR2(10) default '', COT$ANU$POR$V VARCHAR2(10) default '', COT$ANU$FEC$D DATE, COTZ$NUM$C CHAR(10), COTZ$CRE$POR$V VARCHAR2(15) default '', COTZ$CRE$D DATE
);
alter table MEG_COTZS add constraint COTZ#ID#PK primary key (COTZ$ID$C); alter table MEG_COTZS add constraint COTZ#NUM#UK unique (COTZ$NUM$C); alter table MEG_COTZS add constraint CLI_COTZ#FK foreign key (CLI$ID$C) references MEG_CLIS (CLI$ID$C); alter table MEG_COTZS add constraint EMP_COTZ#FK foreign key (EMP$ID$C) references MEG_EMPS (EMP$ID$C); alter table MEG_COTZS add constraint PAR_COTZ#FK foreign key (EST$ID$C) references MEG_PARS (PAR$ID$C); alter table MEG_COTZS add constraint COTZ#EST#CK check (cotz$est$c = '0' OR cotz$est$c = '1'); alter table MEG_COTZS add constraint COTZ#EST#NN check ("COTZ$EST$C" IS NOT NULL); alter table MEG_COTZS add constraint COTZ#FEC#NN check ("COTZ$FEC$D" IS NOT NULL); alter table MEG_COTZS add constraint COTZ#NOTA#NN check ("COTZ$NOTA$V" IS NOT NULL); alter table MEG_COTZS add constraint COTZ#NUM#NN check ("COTZ$NUM$C" IS NOT NULL);
33
alter table MEG_COTZS add constraint COTZ#PORC#DESC#NN check ("COTZ$PORC$DESC$N" IS NOT NULL);
alter table MEG_COTZS add constraint COTZ#PORC#IMP#NN check ("COTZ$PORC$IMP$N" IS NOT NULL); alter table MEG_COTZS add constraint COTZ#SUBT#CK check (cotz$subt$n > 0); alter tableMEG_COTZS add constraint COTZ#SUBT#NN check ("COTZ$SUBT$N" IS NOT NULL); alter table MEG_COTZS add constraint COTZ#TOT#CK check (cotz$tot$n > 0);
alter table MEG_COTZS add constraint COTZ#TOT#NN check ("COTZ$TOT$N" IS NOT NULL); alter table MEG_COTZS add constraint COTZ#VAL#DESC#NN check ("COTZ$VAL$DESC$N" IS NOT NULL); alter table MEG_COTZS add constraint COTZ#VAL#IMP#NN check ("COTZ$VAL$IMP$N" IS NOT NULL); alter table MEG_COTZS add constraint COTZ#VALZ#NN check ("COTZ$VALZ$D" IS NOT NULL); grant select, insert, update, delete on MEGADMIN.MEG_COTZS to MEGUSER;
1.7.11. Tabla MEG_BITS_COTZS
create table MEG_BITS_COTZS (
COTZ$ID$C CHAR(10), BIT_COTZ$FEC$D DATE, BIT_COTZ$HORA$C CHAR(5), BIT_COTZ$NOTA$V VARCHAR2(800), EMP$ID$C CHAR(10), TIP$ID$C CHAR(10), BIT_COTZ$EST$C CHAR(1)
);
alter table MEG_BITS_COTZS add constraint CLI_BIT_COTZ#FK foreign key (COTZ$ID$C) references MEG_COTZS (COTZ$ID$C); alter table MEG_BITS_COTZS add constraint EMP_BIT_COTZ#FK foreign key (EMP$ID$C) references MEG_EMPS (EMP$ID$C);
34
alter table MEG_BITS_COTZS add constraint PAR_BIT_COTZ#FK foreign key (TIP$ID$C) references MEGADMIN.MEG_PARS (PAR$ID$C); alter table MEG_BITS_COTZS add constraint BIT_COTZ#EST#CK check (bit_cotz$est$c = '0' OR bit_cotz$est$c = '1'); alter table MEG_BITS_COTZS add constraint BIT_COTZ#EST#NN check ("BIT_COTZ$EST$C" IS NOT NULL); alter table MEG_BITS_COTZS add constraint BIT_COTZ#FEC#NN check ("BIT_COTZ$FEC$D" IS NOT NULL); alter table MEG_BITS_COTZS add constraint BIT_COTZ#HORA#NN check ("BIT_COTZ$HORA$C" IS NOT NULL);
alter table MEG_BITS_COTZS add constraint BIT_COTZ#NOTA#NN check ("BIT_COTZ$NOTA$V" IS NOT NULL); grant select, insert, update, delete on MEGADMIN.MEG_BITS_COTZS to MEGUSER;
1.7.12. Tabla MEG_TARS
create table MEG_TARS (
TAR$ID$C CHAR(10) not null, TAR$COD$V VARCHAR2(15), EMP$ID$C CHAR(10), TAR$ASUN$V VARCHAR2(150), TAR$INI$D DATE, TAR$FIN$D DATE, PRIOR$ID$C CHAR(10), TAR$COMP$N NUMBER(3), TAR$AVIS$D DATE, TAR$NOTA$V VARCHAR2(1024), TIP$ID$C CHAR(10), TAR$EST$C CHAR(1) default '0'
);
alter table MEG_TARS add constraint TAR#ID#PK primary key (TAR$ID$C); alter table MEG_TARS add constraint TAR#EMP#ID#FK foreign key (EMP$ID$C) references MEG_EMPS (EMP$ID$C); alter table MEG_TARS add constraint TAR#PRIOR#ID#FK foreign key (PRIOR$ID$C) references MEG_PARS (PAR$ID$C);
35
alter table MEG_TARS add constraint TAR#TIP#ID#FK foreign key (TIP$ID$C) references MEG_PARS (PAR$ID$C); alter table MEG_TARS add constraint TAR#ASUN#NN check ("TAR$ASUN$V" IS NOT NULL); alter table MEG_TARS add constraint TAR#EST#CK check (tar$est$c = '0' OR tar$est$c = '1'); alter table MEG_TARS add constraint TAR#EST#NN check ("TAR$EST$C" IS NOT NULL); alter table MEG_TARS add constraint TAR#FIN#NN check ("TAR$FIN$D" IS NOT NULL); alter table MEG_TARS add constraint TAR#INI#NN check ("TAR$INI$D" IS NOT NULL);
alter table MEG_TARS add constraint TAR#NOTA#NN check ("TAR$NOTA$V" IS NOT NULL); alter table MEG_TARS add constraint TAR#PRIO#CK check (PRIOR$ID$C = 'B' OR PRIOR$ID$C = 'M' OR PRIOR$ID$C = 'A') disable;
1.7.13. Tabla MEG_BITS_TARS
create table MEG_BITS_TARS (
TAR$ID$C CHAR(10), BIT$FEC$D DATE, BIT$HOR$C CHAR(10), BIT$OBS$V VARCHAR2(250)
);
alter table MEG_BITS_TARS add constraint BIT_TAR#TAR#ID#FK foreign key (TAR$ID$C) references MEG_TARS (TAR$ID$C); alter table MEG_BITS_TARS add constraint BIT#FEC#NN check ("BIT$FEC$D" IS NOT NULL); alter table MEG_BITS_TARS add constraint BIT#HOR#NN check ("BIT$HOR$C" IS NOT NULL);
36
1.7.14. Tabla MEG_CONTS
create table MEG_CONTS (
CONT$COD$V VARCHAR2(15), NUM$ID$N NUMBER(5) default 0
);
alter table MEG_CONTS add constraint MEG_CONTS#COD#UK unique (CONT$COD$V) alter table MEG_CONTS add constraint MEG_CONTS#COD#NN check ("CONT$COD$V" IS NOT NULL); alter table MEG_CONTS add constraint MEG_CONTS#ID#NN check ("NUM$ID$N" IS NOT NULL); grant select, insert, update, delete on MEGADMIN.MEG_CONTS to MEGUSER;
1.7.15. Tabla MEG_PRODS
create table MEG_PRODS (
PROD$ID$C CHAR(10) not null, PROD$COD$V VARCHAR2(15), PROD$NOM$V VARCHAR2(150), PROD$ULT$ING$D DATE, PROD$CANT$BOD$N NUMBER(9,2), PROD$PREC$1$N NUMBER(9,2), PROD$PREC$2$N NUMBER(9,2) default 0.00, PROD$PREC$3$N NUMBER(9,2) default 0.00, PROD$PREC$4$N NUMBER(9,2) default 0.00, PROD$PREC$5$N NUMBER(9,2) default 0.00, PROD$TIP$PROD$C CHAR(10), PROD$EST$C CHAR(1) default '0', PROD$FEC$EDT$D DATE, PROD$EDT$POR$V VARCHAR2(15) default '', PROD$ANU$POR$V VARCHAR2(15) default '', PROD$ANU$FEC$D DATE, PROD$CRE$V VARCHAR2(15) not null, PROD$FEC$CRE$D DATE default SYSDATE not null, PROD$DESC$V VARCHAR2(500) default '' not null
); alter table MEG_PRODS add constraint PROD#ID#PK primary key (PROD$ID$C); alter table MEG_PRODS add constraint PROD#COD#UK unique (PROD$COD$V);
37
alter table MEG_PRODS add constraint PROD#TIP#ID#FK foreign key (PROD$TIP$PROD$C) references MEG_PARS (PAR$ID$C); alter table MEG_PRODS add constraint PROD#CANT#BOD#CK check (prod$cant$bod$n > 0); alter table MEG_PRODS add constraint PROD#CANT#BOD#NN check ("PROD$CANT$BOD$N" IS NOT NULL); alter table MEG_PRODS add constraint PROD#COD#NN check ("PROD$COD$V" IS NOT NULL);
alter table MEG_PRODS add constraint PROD#EST#CK check (prod$est$c = '0' OR prod$est$c = '1'); alter table MEG_PRODS add constraint PROD#EST#NN check ("PROD$EST$C" IS NOT NULL); alter table MEG_PRODS add constraint PROD#NOM#NN check ("PROD$NOM$V" IS NOT NULL); alter table MEG_PRODS add constraint PROD#PREC#1#CK check (prod$prec$1$n > 0); alter table MEG_PRODS add constraint PROD#PREC#1#NN check ("PROD$PREC$1$N" IS NOT NULL); alter table MEG_PRODS add constraint PROD#TIP#PROD#NN check ("PROD$TIP$PROD$C" IS NOT NULL); grant select, insert, update, delete on MEGADMIN.MEG_PRODS to MEGUSER;
1.7.16. Tabla MEG_DETS_COTZS
create table MEG_DETS_COTZS (
COTZ$ID$C CHAR(10), PROD$ID$C CHAR(10), DET_COTZ$CANT$N NUMBER(8,2), DET_COTZ$PREC$N NUMBER(8,2), DET_COTZ$SUBT$N NUMBER(8,2), DET_COTZ$PORC$DESC$N NUMBER(4,2) default 0, DET_COTZ$VAL$DESC$N NUMBER(8,2) default 0, DET_COTZ$PORC$IMP$N NUMBER(4,2) default 0, DET_COTZ$VAL$IMP$N NUMBER(8,2) default 0, DET_COTZ$TOT$N NUMBER(8,2)
);
38
alter table MEG_DETS_COTZS add constraint COTZ_DET_COTZ#FK foreign key (COTZ$ID$C) references MEG_COTZS (COTZ$ID$C); alter table MEG_DETS_COTZS add constraint PROD_DET_COTZ#FK foreign key (PROD$ID$C) references MEG_PRODS (PROD$ID$C);
alter table MEG_DETS_COTZS add constraint DET_COTZ#CANT#CK check (det_cotz$cant$n > 0); alter table MEG_DETS_COTZS add constraint DET_COTZ#CANT#NN check ("DET_COTZ$CANT$N" IS NOT NULL); alter table MEG_DETS_COTZS add constraint DET_COTZ#DESC#NN check ("DET_COTZ$VAL$DESC$N" IS NOT NULL); alter table MEG_DETS_COTZS add constraint DET_COTZ#IMP#NN check ("DET_COTZ$VAL$IMP$N" IS NOT NULL); alter table MEG_DETS_COTZS add constraint DET_COTZ#PRD#TOT#NN check ("DET_COTZ$TOT$N" IS NOT NULL); alter table MEG_DETS_COTZS add constraint DET_COTZ#PREC#CK check (det_cotz$prec$n > 0);
alter table MEG_DETS_COTZS add constraint DET_COTZ#PREC#NN check ("DET_COTZ$PREC$N" IS NOT NULL); alter table MEG_DETS_COTZS add constraint DET_COTZ#SUBT#CK check (det_cotz$subt$n > 0); alter table MEG_DETS_COTZS add constraint DET_COTZ#SUBT#NN check ("DET_COTZ$SUBT$N" IS NOT NULL); alter table MEG_DETS_COTZS add constraint DET_COTZ#TOT#CK check (det_cotz$tot$n > 0); alter table MEG_DETS_COTZS add constraint DET_COTZ#VAL#DESC#NN check ("DET_COTZ$PORC$DESC$N" IS NOT NULL); alter table MEG_DETS_COTZS add constraint DET_COTZ#VAL#IMP#NN check ("DET_COTZ$PORC$IMP$N" IS NOT NULL); grant select, insert, update, delete on MEGADMIN.MEG_DETS_COTZS to MEGUSER;
39
1.7.17. Tabla MEG_VENTS
create table MEG_VENTS (
VENT$ID$C CHAR(10) not null, VENT$NUM$C CHAR(10), VENT$FEC$D DATE, VENT$NOTA$V VARCHAR2(1024), CLI$ID$C CHAR(10), EMP$ID$C CHAR(10), VENT$SUBT$N NUMBER(8,2), VENT$PORC$DESC$N NUMBER(4,2) default 0, VENT$VAL$DESC$N NUMBER(8,2) default 0, VENT$PORC$IMP$N NUMBER(4,2) default 0, VENT$VAL$IMP$N NUMBER(8,2) default 0, VENT$TOT$N NUMBER(8,2), FORM$PAGO$ID$C CHAR(10), VENT$PLAZ$N NUMBER(4) default 0, VENT$EST$C CHAR(1) default '0', VENT$FEC$EDT$D DATE, VENT$EDT$POR$V VARCHAR2(15) default '', VENT$ANU$POR$V VARCHAR2(15) default '', VENT$ANU$FEC$D DATE, VENT$CRE$POR VARCHAR2(15) default '', VENT$CRE$D DATE
);
alter table MEG_VENTS add constraint VENT#ID#PK primary key (VENT$ID$C); alter table MEG_VENTS add constraint VENT#NUM#UK unique (VENT$NUM$C) alter table MEG_VENTS add constraint CLI_VENT#FK foreign key (CLI$ID$C) references MEG_CLIS (CLI$ID$C); alter table MEG_VENTS add constraint EMP_VENT#FK foreign key (EMP$ID$C) references MEG_EMPS (EMP$ID$C); alter table MEG_VENTS add constraint PAR_VENT#FK foreign key (FORM$PAGO$ID$C) references MEG_PARS (PAR$ID$C);
alter table MEG_VENTS add constraint VENT#EST#CK check (vent$est$c = '0' OR vent$est$c = '1'); alter table MEG_VENTS add constraint VENT#EST#NN check ("VENT$EST$C" IS NOT NULL); alter table MEG_VENTS add constraint VENT#FEC#NN check ("VENT$FEC$D" IS NOT NULL);
40
alter table MEG_VENTS add constraint VENT#NOTA#NN check ("VENT$NOTA$V" IS NOT NULL); alter table MEG_VENTS add constraint VENT#NUM#NN check ("VENT$NUM$C" IS NOT NULL); alter table MEG_VENTS add constraint VENT#PLAZ#NN check ("VENT$PLAZ$N" IS NOT NULL);
alter table MEG_VENTS add constraint VENT#PORC#DESC#NN check ("VENT$PORC$DESC$N" IS NOT NULL); alter table MEG_VENTS add constraint VENT#PORC#IMP#NN check ("VENT$PORC$IMP$N" IS NOT NULL); alter table MEG_VENTS add constraint VENT#SUBT#CK check (vent$subt$n > 0); alter table MEG_VENTS add constraint VENT#SUBT#NN check ("VENT$SUBT$N" IS NOT NULL); alter table MEG_VENTS add constraint VENT#TOT#CK check (vent$tot$n > 0);
alter table MEG_VENTS add constraint VENT#TOT#NN check ("VENT$TOT$N" IS NOT NULL); alter table MEG_VENTS add constraint VENT#VAL#DESC#NN check ("VENT$VAL$DESC$N" IS NOT NULL); alter table MEG_VENTS add constraint VENT#VAL#IMP#NN check ("VENT$VAL$IMP$N" IS NOT NULL); grant select, insert, update, delete on MEGADMIN.MEG_VENTS to MEGUSER;
1.7.18. Tabla MEG_DETS_VENTS
create table MEG_DETS_VENTS (
VENT$ID$C CHAR(10) not null, PROD$ID$C CHAR(10) not null, DET_VENT$CANT$N NUMBER(8,2), DET_VENT$PREC$N NUMBER(8,2), DET_VENT$SUBT$N NUMBER(8,2), DET_VENT$PORC$DESC$N NUMBER(4,2) default 0, DET_VENT$VAL$DESC$N NUMBER(8,2) default 0, DET_VENT$PORC$IMP$N NUMBER(4,2) default 0, DET_VENT$VAL$IMP$N NUMBER(8,2) default 0,
41
DET_VENT$TOT$N NUMBER(8,2) );
alter table MEG_DETS_VENTS add constraint VNT#ID_PRD#ID_PK primary key (VENT$ID$C, PROD$ID$C) alter table MEG_DETS_VENTS add constraint PROD_DET_VENT#FK foreign key (PROD$ID$C) references MEG_PRODS (PROD$ID$C); alter table MEG_DETS_VENTS add constraint VENT_DET_VENT#FK foreign key (VENT$ID$C) references MEG_VENTS (VENT$ID$C); alter table MEG_DETS_VENTS add constraint DET_VENT#CANT#CK check (det_vent$cant$n > 0); alter table MEG_DETS_VENTS add constraint DET_VENT#CANT#NN check ("DET_VENT$CANT$N" IS NOT NULL); alter table MEG_DETS_VENTS add constraint DET_VENT#PORC#IMP#NN check ("DET_VENT$PORC$IMP$N" IS NOT NULL); alter table MEG_DETS_VENTS add constraint DET_VENT#PREC#CK check (det_vent$prec$n > 0); alter table MEG_DETS_VENTS add constraint DET_VENT#PREC#NN check ("DET_VENT$PREC$N" IS NOT NULL);
alter table MEG_DETS_VENTS add constraint DET_VENT#SUBT#CK check (det_vent$subt$n > 0); alter table MEG_DETS_VENTS add constraint DET_VENT#SUBT#NN check ("DET_VENT$SUBT$N" IS NOT NULL); alter table MEG_DETS_VENTS add constraint DET_VENT#TOT#CK check (det_vent$tot$n > 0); alter table MEG_DETS_VENTS add constraint DET_VENT#TOT#NN check ("DET_VENT$TOT$N" IS NOT NULL); alter table MEG_DETS_VENTS add constraint DET_VENT#VAL#DESC#NN check ("DET_VENT$VAL$DESC$N" IS NOT NULL); alter table MEG_DETS_VENTS add constraint DET_VENT#VAL#IMP#NN check ("DET_VENT$VAL$IMP$N" IS NOT NULL); alter table MEG_DETS_VENTS add constraint DET_VENT#VAL#PORC#DESC#NN check ("DET_VENT$PORC$DESC$N" IS NOT NULL);
42
grant select, insert, update, delete on MEGADMIN.MEG_DETS_VENTS to MEGUSER;
1.7.19. Tabla MEG_INCIDS
create table MEG_INCIDS (
INCID$ID$C CHAR(10) not null, INCID$COD$V VARCHAR2(15), INCID$TP$C CHAR(1), INCID$FEC$D DATE, INCID$NOTA$V VARCHAR2(1024), INCID$DESC$V VARCHAR2(4000) default '', CLI$ID$C CHAR(10), EMP$ID$C CHAR(10), PRIO$ID$C CHAR(10), STAT$ID$C CHAR(10), FACT$ID$C CHAR(10) default '', INCID$CRE$POR$V VARCHAR2(10), INCID$FEC$CRE$D DATE default SYSDATE, INCID$EDT$POR$V VARCHAR2(10), INCID$FEC$EDT$D DATE, INCID$ANU$POR$V VARCHAR2(10), INCID$FEC$ANU$D DATE, INCID$EST$C CHAR(1) default '0'
); alter table MEG_INCIDS add constraint INCID#ID#PK primary key (INCID$ID$C); alter table MEG_INCIDS add constraint INCID#COD#UK unique (INCID$COD$V); alter table MEG_INCIDS add constraint CLI_INCID#FK foreign key (CLI$ID$C) references MEG_CLIS (CLI$ID$C); alter table MEG_INCIDS add constraint EMP_INCID#FK foreign key (EMP$ID$C) references MEG_EMPS (EMP$ID$C); alter table MEG_INCIDS add constraint PAR_INCID#PRIO#FK foreign key (PRIO$ID$C) references MEG_PARS (PAR$ID$C); alter table MEG_INCIDS add constraint PAR_INCID#STAT#FK foreign key (STAT$ID$C) references MEG_PARS (PAR$ID$C);
alter table MEG_INCIDS
43
add constraint INCID#COD#NN check ("INCID$COD$V" IS NOT NULL); alter table MEG_INCIDS add constraint INCID#EST#CK check ( incid$est$c = '0' OR incid$est$c = '1'); alter table MEG_INCIDS add constraint INCID#EST#NN check ("INCID$EST$C" IS NOT NULL); alter table MEG_INCIDS add constraint INCID#FEC#NN check ("INCID$FEC$D" IS NOT NULL); alter table MEG_INCIDS add constraint INCID#TP#CK check ( incid$tp$c = 'Q' OR incid$tp$c = 'R'); alter table MEG_INCIDS add constraint INCID#TP#NN check ("INCID$TP$C" IS NOT NULL); alter table MEG_INCIDS add constraint RECL#NOTA#NN check ("INCID$NOTA$V" IS NOT NULL);
1.7.20. Tabla MEG_INCIDS_BITS
create table MEG_INCIDS_BITS (
INCID$ID$C CHAR(10), BITA$FEC$D DATE, BITA$HORA$C CHAR(5), BITA$NOTA$V VARCHAR2(800), BITA$CRE$POR$V VARCHAR2(10), BITA$FEC$CRE$D DATE default SYSDATE, BITA$TIP$ID$C CHAR(10), BITA$EST$C CHAR(1)
);
alter table MEG_INCIDS_BITS add constraint INCID_INCID_BIT#FK foreign key (INCID$ID$C) references MEGADMIN.MEG_INCIDS (INCID$ID$C); alter table MEG_INCIDS_BITS add constraint PAR_INCID_BIT#FK foreign key (BITA$TIP$ID$C) references MEGADMIN.MEG_PARS (PAR$ID$C); alter table MEG_INCIDS_BITS add constraint BIT_QUEJ#FEC#NN check ("BITA$FEC$D" IS NOT NULL); alter table MEG_INCIDS_BITS add constraint BIT_QUEJ#HORA#NN check ("BITA$HORA$C" IS NOT NULL);
alter table MEG_INCIDS_BITS
44
add constraint BIT_QUEJ#NOTA#NN check ("BITA$NOTA$V" IS NOT NULL); alter table MEG_INCIDS_BITS add constraint INCID_BIT#EST#CK check ( bita$est$c = '0' OR bita$est$c = '1' );
1.7.21. Tabla MEG_RECS
create table MEG_RECS (
REC$ID$C CHAR(10) not null, REC$COD$V VARCHAR2(15), REC$NOM$V VARCHAR2(50), REC$TIP$RECR$V VARCHAR2(20), REC$ID$REC$ID$C CHAR(10), REC$FEC$CRE$D DATE, REC$CRE$POR$V VARCHAR2(10), REC$EST$C CHAR(1) default '0', REC$FEC$EDT$D DATE, REC$EDT$POR$V VARCHAR2(10) default '', REC$ANU$POR$V VARCHAR2(10) default '', REC$ANU$FEC$D DATE
);
alter table MEG_RECS add constraint REC#ID#PK primary key (REC$ID$C); alter table MEG_RECS add constraint REC#COD#UK unique (REC$COD$V); alter table MEG_RECS add constraint REC_REC#FK foreign key (REC$ID$REC$ID$C) references MEGADMIN.MEG_RECS (REC$ID$C); alter table MEG_RECS add constraint REC#COD#NN check ("REC$COD$V" IS NOT NULL); alter table MEG_RECS add constraint REC#CRE#POR#NN check ("REC$CRE$POR$V" IS NOT NULL); alter table MEG_RECS add constraint REC#EST#CK check (rec$est$c = '0' OR rec$est$c = '1'); alter table MEG_RECS add constraint REC#EST#NN check ("REC$EST$C" IS NOT NULL); alter table MEG_RECS add constraint REC#FEC#CRE#NN check ("REC$FEC$CRE$D" IS NOT NULL); alter table MEG_RECS
45
add constraint REC#NOM#NN check ("REC$NOM$V" IS NOT NULL); alter table MEG_RECS add constraint REC#TIP#RECR#NN check ("REC$TIP$RECR$V" IS NOT NULL); grant select, insert, update, delete on MEGADMIN.MEG_RECS to MEGUSER;
1.7.22. Tabla MEG_ROLS_RECS
create table MEG_ROLS_RECS (
ROL$ID$C CHAR(10) not null, REC$ID$C CHAR(10) not null, ROL_REC$FEC$CRE$D DATE, ROL_REC$CRE$POR$V VARCHAR2(10)
);
alter table MEG_ROLS_RECS add constraint ROL_REC#PK primary key (ROL$ID$C, REC$ID$C); alter table MEG_ROLS_RECS add constraint ROL_REC#REC#FK foreign key (REC$ID$C) references MEG_RECS (REC$ID$C); alter table MEG_ROLS_RECS add constraint ROL_REC#ROL#FK foreign key (ROL$ID$C) references MEG_ROLS (ROL$ID$C); alter table MEG_ROLS_RECS add constraint ROL_REC#CRE#POR#NN check ("ROL_REC$CRE$POR$V" IS NOT NULL); alter table MEG_ROLS_RECS add constraint ROL_REC#FEC#CRE#NN check ("ROL_REC$FEC$CRE$D" IS NOT NULL); grant select, insert, update, delete on MEGADMIN.MEG_ROLS_RECS to MEGUSER;
1.7.23. Tabla MEG_SUCS
create table MEG_SUCS (
SUC$ID$C CHAR(10) not null, SUC$COD$V VARCHAR2(15), SUC$NOM$V VARCHAR2(50),
46
SUC$FEC$CRE$D DATE, SUC$CRE$POR$V VARCHAR2(10), SUC$EST$C CHAR(1) default '0', SUC$FEC$EDT$D DATE, SUC$EDT$POR$V VARCHAR2(10) default '', SUC$ANU$POR$V VARCHAR2(10) default '', SUC$ANU$FEC$D DATE
);
alter table MEG_SUCS add constraint SUC#ID#PK primary key (SUC$ID$C) alter table MEG_SUCS add constraint SUC#COD#UK unique (SUC$COD$V); alter table MEG_SUCS add constraint SUC#NOM#UK unique (SUC$NOM$V); alter table MEGADMIN.MEG_SUCS add constraint SUC#COD#NN check ("SUC$COD$V" IS NOT NULL); alter table MEG_SUCS add constraint SUC#CRE#POR#NN check ("SUC$CRE$POR$V" IS NOT NULL); alter table MEG_SUCS add constraint SUC#EST#CK check (suc$est$c = '0' OR suc$est$c = '1'); alter table MEG_SUCS add constraint SUC#EST#NN check ("SUC$EST$C" IS NOT NULL); alter table MEG_SUCS add constraint SUC#FEC#CRE#NN check ("SUC$FEC$CRE$D" IS NOT NULL); alter table MEG_SUCS add constraint SUC#NOM#NN check ("SUC$NOM$V" IS NOT NULL); grant select, insert, update, delete on MEGADMIN.MEG_SUCS to MEGUSER;
1.8. Creación de los paquetes
El estándar que hemos utilizado en la creación de los paquetes, los
hemos definido de la siguiente manera:
���� MEG_PCKG_DELETE
���� MEG_PCKG_INSERT
47
���� MEG_PCKG_SELECT
���� MEG_PCKG_UPDATE
���� MEG_PCKG_FUNCTION
El estándar que hemos utilizado para la creación de los campos, los
hemos definido de la siguiente manera: nombre de la tabla en singular sin
el prefijo “meg_”, separador “$”, nombre del campo (utilizando solo las
primeras 3 o 4 letras por lo general), separador “$”, y tipo de dato, ejemplo:
• zon$id$v, id de la tabla meg_zons del tipo varchar2.
• cli$est$civ$c, estado civil de la tabla meg_clis del tipo char.
1.8.1. MEG_PCKG_DELETE
Este paquete contendrá las funciones que permitirán la eliminación de
los registros de la tabla meg_rols_recs y la actualización de los
campos de las tablas restantes. Se actualizarán los campos que
corresponderán a: “eliminado por”, este campo contendrá el nombre
del usuario que eliminó el registro; “fecha de eliminación”, fecha en
que se realizó la eliminación del registro y que será guardada
automáticamente por el sistema; y “estado”, la función setea este
valor de activo a inactivo.
48
A continuación se detallan las funciones del paquete
MEG_PCKG_DELETE:
PROCEDIMIENTO ALMACENADO
DESCRIPCION
meg_fnc_rols_recs_delete Elimina los registros de la tabla meg_rols_recs.
meg_fnc_zons_delete Actualiza los campos zon$anu$por$v, zon$anu$fec$d y zon$est$c de la tabla meg_zons.
meg_fnc_rols_delete Actualiza los campos rol$anu$por$v, rol$anu$fec$d y rol$est$c de la tabla meg_rols
meg_fnc_emps_delete Actualiza los campos emp$anu$por$v, emp$anu$fec$d y emp$est$c de la tabla meg_emps.
meg_fnc_depts_delete Actualiza los campos dept$anu$por$v, dept$anu$fec$d y dept$est$c de la tabla meg_depts.
meg_fnc_pars_delete Actualiza los campos par$anu$por$v, par$anu$fec$d y par$est$c de la tabla meg_pars.
meg_fnc_profs_delete Actualiza los campos prof$anu$por$v, prof$anu$fec$d y prof$est$c de la tabla meg_profs.
meg_fnc_sucs_delete Actualiza los campos suc$anu$por$v, suc$anu$fec$d y suc$est$c de la tabla meg_sucs.
meg_fnc_clis_delete Actualiza los campos cli$anu$por$v, cli$anu$fec$d y cli$est$c de la tabla meg_clis.
FUNCIÓN MEG_FNC_ROLS_RECS_DELETE FUNCTION meg_fnc_rols_recs_delete ( pc_rec_rol_id meg_rols_recs.rol$id$c%TYPE ) RETURN NUMBER IS BEGIN DELETE FROM meg_rols_recs WHERE rol$id$c = pc_rec_rol_id; RETURN ( SQL%ROWCOUNT );
49
END meg_fnc_rols_recs_delete; FUNCIÓN MEG_FNC_ZONS_DELETE
FUNCTION meg_fnc_zons_delete( pc_id meg_zons.zon$id$c%TYPE, pv_user meg_zons.zon$anu$por$v%TYPE) RETURN NUMBER IS BEGIN UPDATE meg_zons SET zon$anu$por$v = pv_user, zon$anu$fec$d = SYSDATE, zon$est$c = '1' WHERE zon$id$c = pc_id; RETURN ( SQL%ROWCOUNT ); END meg_fnc_zons_delete;
FUNCIÓN MEG_FNC_ROLS_DELETE
FUNCTION meg_fnc_rols_delete( pc_id meg_rols.rol$id$c%TYPE, pv_user meg_rols.rol$anu$por$v%TYPE) RETURN NUMBER IS BEGIN UPDATE meg_rols SET rol$anu$por$v = pv_user, rol$anu$fec$d = SYSDATE, rol$est$c = '1' WHERE rol$id$c = pc_id; RETURN ( SQL%ROWCOUNT ); END meg_fnc_rols_delete;
FUNCIÓN MEG_FNC_EMPS_DELETE
FUNCTION meg_fnc_emps_delete( pc_id meg_emps.emp$id$c%TYPE, pv_user meg_emps.emp$anu$por$v%TYPE) RETURN NUMBER IS BEGIN UPDATE meg_emps SET emp$anu$por$v = pv_user, emp$anu$fec$d = SYSDATE, emp$est$c = '1' WHERE emp$id$c = pc_id; RETURN ( SQL%ROWCOUNT); END meg_fnc_emps_delete;
FUNCIÓN MEG_FNC_DEPTS_DELETE
FUNCTION meg_fnc_depts_delete( pc_id meg_depts.dept$id$c%TYPE, pv_user meg_depts.dept$anu$por$v%TYPE) RETURN NUMBER IS BEGIN UPDATE meg_depts SET dept$anu$por$v = pv_user, dept$anu$fec$d = SYSDATE, dept$est$c = '1'
50
WHERE dept$id$c = pc_id; RETURN ( SQL%ROWCOUNT ); END meg_fnc_depts_delete;
FUNCIÓN MEG_FNC_PARS_DELETE
FUNCTION meg_fnc_pars_delete( pc_id meg_pars.par$id$c%TYPE, pv_user meg_pars.par$anu$por$v%TYPE) RETURN NUMBER IS BEGIN UPDATE meg_pars SET par$anu$por$v = pv_user, par$anu$fec$d = SYSDATE, par$est$c = '1' WHERE par$id$c = pc_id; RETURN ( SQL%ROWCOUNT ); END meg_fnc_pars_delete;
FUNCIÓN MEG_FNC_PROFS_DELETE
FUNCTION meg_fnc_profs_delete( pc_id meg_profs.prof$id$c%TYPE, pv_user meg_profs.prof$anu$por$v%TYPE) RETURN NUMBER IS BEGIN UPDATE meg_profs SET prof$anu$por$v = pv_user, prof$anu$fec$d = SYSDATE, prof$est$c = '1' WHERE prof$id$c = pc_id; RETURN ( SQL%ROWCOUNT ); END meg_fnc_profs_delete;
FUNCIÓN MEG_FNC_SUCS_DELETE
FUNCTION meg_fnc_sucs_delete( pc_id meg_sucs.suc$id$c%TYPE, pv_user meg_sucs.suc$anu$por$v%TYPE) RETURN NUMBER IS BEGIN UPDATE meg_sucs SET suc$anu$por$v = pv_user, suc$anu$fec$d = SYSDATE, suc$est$c = '1' WHERE suc$id$c = pc_id; RETURN ( SQL%ROWCOUNT ); END meg_fnc_sucs_delete;
FUNCIÓN MEG_FNC_CLIS_DELETE
FUNCTION meg_fnc_clis_delete( pc_id meg_clis.cli$id$c%TYPE, pv_user meg_clis.cli$anu$por$v%TYPE) RETURN NUMBER IS BEGIN UPDATE meg_clis SET cli$anu$por$v = pv_user,
51
cli$anu$fec$d = SYSDATE, cli$est$c = '1' WHERE cli$id$c = pc_id; RETURN ( SQL%ROWCOUNT ); END meg_fnc_clis_delete;
1.8.2. MEG_PCKG_INSERT
Este paquete contendrá las funciones que permitirán la inserción en
los registros de las tablas.
A continuación se detallan las funciones del paquete
MEG_PCKG_INSERT:
PROCEDIMIENTO ALMACENADO
DESCRIPCION
meg_fnc_next_id Inserta el campo ID de forma automatica.
meg_fnc_chat_operador
meg_fnc_recs_insert Inserta un registro en la tabla meg_recs.
meg_fnc_zons_insert Inserta un registro en la tabla meg_zons.
meg_fnc_rols_insert Inserta un registro en la tabla meg_rols.
meg_fnc_emps_insert Inserta un registro en la tabla meg_emps.
meg_fnc_depts_insert Inserta un registro en la tabla meg_depts.
meg_fnc_pars_insert Inserta un registro en la tabla meg_pars.
meg_fnc_profs_insert Inserta un registro en la tabla meg_profs
52
meg_fnc_sucs_insert Inserta un registro en la tabla meg_sucs.
meg_fnc_incid_insert Inserta un registro en la tabla meg_incids.
meg_fnc_clis_insert Inserta un registro en la tabla meg_clis.
meg_fnc_prods_insert Inserta un registro en la tabla meg_prods.
meg_fnc_cotzs_insert_cab Inserta un registro en la tabla meg_cotzs.
meg_fnc_cotzs_insert_det Inserta un registro en la tabla meg_dets_cotzs.
meg_fnc_vents_insert_cab Inserta un registro en la tabla meg_vents.
meg_fnc_vents_insert_det Inserta un registro en la tabla meg_dets_vents.
meg_fnc_bits_incid_insert Inserta un registro en la tabla meg_bits_incid.
meg_fnc_bits_clis_insert Inserta un registro en la tabla meg_bits_clis.
meg_fnc_bits_cotzs_insert Inserta un registro en la tabla meg_bits_cotzs.
meg_fnc_tars_insert Inserta un registro en la tabla meg_tars.
FUNCIÓN MEG_FNC_NEXT_ID
FUNCTION meg_fnc_next_id ( pv_cod meg_conts.cont$cod$v%TYPE ) RETURN VARCHAR2 IS ln_next_id VARCHAR2(10) := ''; BEGIN BEGIN SELECT ( MAX(num$id$n) + 1 ) INTO ln_next_id FROM meg_conts WHERE cont$cod$v = pv_cod; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO meg_conts( cont$cod$v, num$id$n ) VALUES (pv_cod, 1); ln_next_id := 1; END; IF ln_next_id > 0 THEN UPDATE meg_conts SET num$id$n = ln_next_id WHERE cont$cod$v = pv_cod; ELSE
53
INSERT INTO meg_conts( cont$cod$v, num$id$n ) VALUES (pv_cod, 1); ln_next_id := 1; END IF; RETURN( LPAD(RTRIM(LTRIM(TO_CHAR( ln_next_id ))), 10, '0') ); END meg_fnc_next_id;
FUNCIÓN MEG_FNC_CHAT_OPERADOR
FUNCTION meg_fnc_chat_operador ( pv_emp_id IN meg_emps.emp$id$c%TYPE ) RETURN NUMBER IS ln_num_reg NUMBER := 0; BEGIN INSERT INTO meg_chats_emps ( opr$id$c, chat$fec$d, chat$disp$c ) VALUES ( pv_emp_id, SYSDATE, '0' ); ln_num_reg := SQL%ROWCOUNT; RETURN(ln_num_reg); END meg_fnc_chat_operador;
FUNCIÓN MEG_FNC_RECS_INSERT FUNCTION meg_fnc_recs_insert ( pc_id meg_recs.rec$id$c%TYPE, pv_cod meg_recs.rec$cod$v%TYPE, pv_nom meg_recs.rec$nom$v%TYPE, pv_tip meg_recs.rec$tip$recr$v%TYPE, pc_pad meg_recs.rec$id$rec$id$c%TYPE, pd_fec meg_recs.rec$fec$cre$d%TYPE, pv_cre meg_recs.rec$cre$por$v%TYPE ) RETURN NUMBER IS ln_num_reg NUMBER := 0; BEGIN INSERT INTO meg_recs ( rec$id$c, rec$cod$v, rec$nom$v, rec$tip$recr$v, rec$id$rec$id$c, rec$fec$cre$d, rec$cre$por$v, rec$est$c ) VALUES ( pc_id, pv_cod, pv_nom, pv_tip, pc_pad, pd_fec, pv_cre, '0' ); ln_num_reg := SQL%ROWCOUNT; RETURN(ln_num_reg); END meg_fnc_recs_insert;
FUNCIÓN MEG_FNC_ZONS_INSERT
FUNCTION meg_fnc_zons_insert ( pc_id meg_zons.zon$id$c%TYPE, pv_cod meg_zons.zon$cod$v%TYPE, pv_nom meg_zons.zon$nom$v%TYPE, pc_pad meg_zons.pad$id$c%TYPE, pv_usr meg_zons.zon$cre$por$v%TYPE ) RETURN NUMBER IS ln_num_reg NUMBER := 0; BEGIN INSERT INTO meg_zons ( zon$id$c, zon$cod$v, zon$nom$v,pad$id$c, zon$fec$cre$d, zon$cre$por$v, zon$est$c ) VALUES ( pc_id, pv_cod, pv_nom, pc_pad, SYSDATE, pv_usr, '0' );
54
ln_num_reg := SQL%ROWCOUNT; RETURN(ln_num_reg); END meg_fnc_zons_insert;
FUNCIÓN MEG_FNC_ROLS_INSERT
FUNCTION meg_fnc_rols_insert ( pc_id meg_rols.rol$id$c%TYPE, pv_cod meg_rols.rol$cod$v%TYPE, pv_nom meg_rols.rol$nom$v%TYPE, pv_cre meg_rols.rol$cre$por$v%TYPE, pa_recs_id ARRAY_ID, pa_emps_id ARRAY_ID) RETURN NUMBER IS ln_num_reg NUMBER := 0; BEGIN INSERT INTO meg_rols ( rol$id$c, rol$cod$v, rol$nom$v, rol$fec$cre$d, rol$cre$por$v, rol$est$c ) VALUES ( pc_id, pv_cod, pv_nom, SYSDATE, pv_cre, '0' ); ln_num_reg := SQL%ROWCOUNT; /*****************************************************************************************/ /**** Insertando en la tabla de ROLES_RECURSOS los accesos seleccionados para ese rol ****/ IF pa_recs_id.COUNT > 0 THEN FOR cont_recs IN 1 .. pa_recs_id.COUNT LOOP INSERT INTO meg_rols_recs( rol$id$c, rec$id$c, rol_rec$cre$por$v, rol_rec$fec$cre$d) VALUES( pc_id, pa_recs_id(cont_recs), pv_cre, SYSDATE ); END LOOP; END IF; /*****************************************************************************************/ /***** Actualizando en la tabla de EMPLEADOS el rol seleccionado para esos empleados *****/ IF pa_emps_id.COUNT > 0 THEN FOR cont_emps IN 1 .. pa_emps_id.COUNT LOOP UPDATE meg_emps SET rol$id$c = pc_id WHERE emp$id$c = pa_emps_id( cont_emps ); END LOOP; END IF; /*****************************************************************************************/ RETURN(ln_num_reg); EXCEPTION WHEN OTHERS THEN RETURN -1; END meg_fnc_rols_insert;
FUNCIÓN MEG_FNC_EMPS_INSERT
FUNCTION meg_fnc_emps_insert ( pc_id meg_emps.emp$id$c%TYPE, pv_cod meg_emps.emp$cod$v%TYPE, pc_tip_cod meg_emps.emp$tip$doc$c%TYPE, pv_num_doc meg_emps.emp$num$doc$v%TYPE,
55
pv_nom meg_emps.emp$nomb$v%TYPE, pv_dir meg_emps.emp$dir$v%TYPE, pd_fec_nac meg_emps.emp$fec$nac$d%TYPE, pv_telf meg_emps.emp$telf$v%TYPE, pv_mail meg_emps.emp$mail$v%TYPE, pc_sexo meg_emps.emp$sexo$c%TYPE, pc_est_civ meg_emps.emp$est$civ$c%TYPE, pn_car_fam meg_emps.emp$carg$fam$n%TYPE, pv_cuen_banc meg_emps.emp$cuen$banc$v%TYPE, pv_clave meg_emps.emp$clave$v%TYPE, pc_dept_id meg_emps.dept$id$c%TYPE, pc_zon_id meg_emps.zon$id$c%TYPE, pc_prof_id meg_emps.prof$id$c%TYPE, pc_rol_id meg_emps.rol$id$c%TYPE ) RETURN NUMBER IS ln_num_reg NUMBER := 0; BEGIN INSERT INTO meg_emps ( emp$id$c, emp$cod$v, emp$tip$doc$c, emp$num$doc$v, emp$nomb$v, emp$dir$v, emp$fec$nac$d, emp$telf$v, emp$mail$v, emp$sexo$c, emp$est$civ$c, emp$carg$fam$n, emp$cuen$banc$v, emp$clave$v, emp$bloq$c, dept$id$c, zon$id$c, prof$id$c, rol$id$c, emp$est$c ) VALUES ( pc_id, pv_cod, pc_tip_cod, pv_num_doc, pv_nom, pv_dir, pd_fec_nac, pv_telf, pv_mail, pc_sexo, pc_est_civ, pn_car_fam, pv_cuen_banc, pv_clave, pc_bloq, pc_dept_id, pc_zon_id, pc_prof_id, pc_rol_id,'0'); ln_num_reg := SQL%ROWCOUNT; RETURN(ln_num_reg); END meg_fnc_emps_insert;
FUNCIÓN MEG_FNC_DEPTS_INSERT
FUNCTION meg_fnc_depts_insert ( pc_id meg_depts.dept$id$c%TYPE, pv_cod meg_depts.dept$cod$v%TYPE, pv_nom meg_depts.dept$nom$v%TYPE, pc_pad meg_depts.pad$id$c%TYPE, pv_usr meg_depts.dept$cre$por$v%TYPE ) RETURN NUMBER IS ln_num_reg NUMBER := 0; BEGIN INSERT INTO meg_depts ( dept$id$c, dept$cod$v, dept$nom$v, pad$id$c, dept$fec$cre$d, dept$cre$por$v, dept$est$c ) VALUES ( pc_id, pv_cod, pv_nom,pc_pad, SYSDATE, pv_usr,'0'); ln_num_reg := SQL%ROWCOUNT; RETURN(ln_num_reg); END meg_fnc_depts_insert;
56
FUNCIÓN MEG_FNC_PARS_INSERT
FUNCTION meg_fnc_pars_insert ( pc_id meg_pars.par$id$c%TYPE, pv_cod meg_pars.par$cod$v%TYPE, pv_nom meg_pars.par$nom$v%TYPE, pv_val meg_pars.par$val$v%TYPE, pv_tip meg_pars.par$tip$v%TYPE, pc_pad meg_pars.pad$id$c%TYPE, pv_usr meg_pars.par$cre$por$v%TYPE ) RETURN NUMBER IS ln_num_reg NUMBER := 0; BEGIN INSERT INTO meg_pars ( par$id$c, par$cod$v, par$nom$v, par$val$v, par$tip$v, pad$id$c, par$fec$cre$d, par$cre$por$v, par$est$c ) VALUES ( pc_id, pv_cod, pv_nom, pv_val, pv_tip, pc_pad, SYSDATE, pv_usr,'0' ); ln_num_reg := SQL%ROWCOUNT; RETURN(ln_num_reg); END meg_fnc_pars_insert;
FUNCIÓN MEG_FNC_PROFS_INSERT
FUNCTION meg_fnc_profs_insert( pc_id meg_profs.prof$id$c%TYPE, pv_cod meg_profs.prof$cod$v%TYPE, pv_nom meg_profs.prof$nom$v%TYPE, pv_usr meg_profs.prof$cre$por$v%TYPE ) RETURN NUMBER IS ln_num_reg NUMBER := 0; BEGIN INSERT INTO meg_profs ( prof$id$c, prof$cod$v, prof$nom$v, prof$fec$cre$d, prof$cre$por$v, prof$est$c ) VALUES ( pc_id, pv_cod, pv_nom, SYSDATE, pv_usr, '0'); ln_num_reg := SQL%ROWCOUNT; RETURN(ln_num_reg); END meg_fnc_profs_insert;
FUNCIÓN MEG_FNC_SUCS_INSERT
FUNCTION meg_fnc_sucs_insert ( pc_id meg_sucs.suc$id$c%TYPE, pv_cod meg_sucs.suc$cod$v%TYPE, pv_nom meg_sucs.suc$nom$v%TYPE, pv_usr meg_sucs.suc$cre$por$v%TYPE ) RETURN NUMBER IS ln_num_reg NUMBER := 0; BEGIN INSERT INTO meg_sucs (suc$id$c, suc$cod$v, suc$nom$v, suc$fec$cre$d, suc$cre$por$v, suc$est$c ) VALUES ( pc_id, pv_cod, pv_nom, SYSDATE, pv_usr, '0' );
57
ln_num_reg := SQL%ROWCOUNT; RETURN(ln_num_reg); END meg_fnc_sucs_insert;
FUNCIÓN MEG_FNC_INCID_INSERT
FUNCTION meg_fnc_incid_insert ( pc_id meg_incids.incid$id$c%TYPE, pv_code meg_incids.incid$cod$v%TYPE, pc_tipo meg_incids.incid$tp$c%TYPE, pd_fec meg_incids.incid$fec$d%TYPE, pv_desc meg_incids.incid$desc$v%TYPE, pv_det meg_incids.incid$det$v%TYPE, pc_cli_id meg_incids.cli$id$c%TYPE, pc_emp_id meg_incids.emp$id$c%TYPE, pc_prio_id meg_incids.prio$id$c%TYPE, pc_stat_id meg_incids.stat$id$c%TYPE, pc_fact_id meg_incids.fact$id$c%TYPE, pv_cre_por meg_incids.incid$cre$por$v%TYPE ) RETURN NUMBER IS ln_num_reg NdUMBER := 0; BEGIN INSERT INTO meg_incids ( incid$id$c, incid$cod$v, incid$tp$c, incid$fec$d, incid$desc$v, incid$det$v, cli$id$c, emp$id$c, prio$id$c, stat$id$c, fact$id$c, incid$cre$por$v,incid$fec$cre$d, incid$est$c ) VALUES ( pc_id, pv_code, pc_tipo, pd_fec, pv_desc, pv_det, pc_cli_id, pc_emp_id, pc_prio_id, pc_stat_id, pc_fact_id, pv_cre_por, SYSDATE, '0' ); ln_num_reg := SQL%ROWCOUNT; RETURN(ln_num_reg); END meg_fnc_incid_insert;
FUNCIÓN MEG_FNC_CLIS_INSERT
FUNCTION meg_fnc_clis_insert ( pc_id meg_clis.cli$id$c%TYPE, pv_cod meg_clis.cli$cod$v%TYPE, pc_tip_cli meg_clis.cli$tip$cli$c%TYPE, pc_tip_ide meg_clis.cli$tip$ide$c%TYPE, pv_num_ide meg_clis.cli$num$ide$v%TYPE, pv_nom meg_clis.cli$nom$v%TYPE, pv_contac meg_clis.cli$contac$v%TYPE, pv_dir meg_clis.cli$dir$v%TYPE, pv_tel meg_clis.cli$tel$v%TYPE, pv_fax meg_clis.cli$fax$v%TYPE, pc_est_civ meg_clis.cli$est$civ$c%TYPE, pv_mail meg_clis.cli$mail$v%TYPE, pc_pass meg_clis.cli$pass$c%TYPE, pd_desd meg_clis.cli$desd$d%TYPE, pc_sexo meg_clis.cli$sexo$c%TYPE, pc_prof_id meg_clis.prof$id$c%TYPE,
58
pc_act_com_id meg_clis.act_com$id$c%TYPE, pc_zon_id meg_clis.zon$id$c%TYPE, pc_emp_id meg_clis.emp$id$c%TYPE, pd_fec_nac meg_clis.cli$fec$nac$d%TYPE, pv_pag_web meg_clis.cli$pag$web$v%TYPE, pc_rec_mail meg_clis.cli$rec$mail$v%TYPE, pv_usr meg_clis.cli$cre$por$v%TYPE ) RETURN NUMBER IS ln_num_reg NUMBER := 0; BEGIN INSERT INTO meg_clis ( cli$id$c, cli$cod$v, cli$tip$cli$c, cli$tip$ide$c, cli$num$ide$v,cli$nom$v, cli$contac$v, cli$dir$v, cli$tel$v, cli$fax$v, cli$est$civ$c, cli$mail$v, cli$pass$c, cli$desd$d, cli$sexo$c, prof$id$c, act_com$id$c, zon$id$c, emp$id$c, cli$fec$nac$d, cli$pag$web$v, cli$rec$mail$v, cli$est$c, cli$cre$por$v, cli$fec$cre$d ) VALUES ( pc_id, pv_cod, pc_tip_cli, pc_tip_ide, pv_num_ide, pv_nom, pv_contac, pv_dir, pv_tel, pv_fax, pc_est_civ, pv_mail, pc_pass, pd_desd, pc_sexo, pc_prof_id, pc_act_com_id, pc_zon_id, pc_emp_id, pd_fec_nac, pv_pag_web, pc_rec_mail, '0', pv_usr, SYSDATE); ln_num_reg := SQL%ROWCOUNT; RETURN(ln_num_reg); END meg_fnc_clis_insert;
FUNCIÓN MEG_FNC_PRODS_INSERT
FUNCTION meg_fnc_prods_insert( pc_id in meg_prods.prod$id$c%TYPE, pv_cod in meg_prods.prod$cod$c%TYPE, pv_nom in meg_prods.prod$nom$v%TYPE, pd_ult_ingreso in meg_prods.prod$ult$ing$d%TYPE, pn_cant_bodega in meg_prods.prod$cant$bod$n%TYPE, pn_precio1 in meg_prods.prod$prec$1$n%TYPE, pn_precio2 in meg_prods.prod$prec$2$n%TYPE, pn_precio3 in meg_prods.prod$prec$3$n%TYPE, pn_precio4 in meg_prods.prod$prec$4$n%TYPE, pn_precio5 in meg_prods.prod$prec$5$n%TYPE, pv_tipo_prod in meg_prods.prod$tip$prod$c%TYPE, pc_est in meg_prods.prod$est$c%TYPE ) RETURN NUMBER IS ln_num_reg NUMBER := 0; BEGIN INSERT INTO meg_prods ( prod$id$c, prod$cod$c, prod$nom$v, prod$ult$ing$d, prod$cant$bod$n, prod$prec$1$n, prod$prec$2$n, prod$prec$3$n, prod$prec$4$n, prod$prec$5$n, prod$tip$prod$c, prod$est$c ) VALUES ( pc_id, pv_cod, pv_nom, pd_ult_ingreso, pn_cant_bodega, pn_precio1, pn_precio2, pn_precio3,
59
pn_precio4, pn_precio5, pv_tipo_prod, pc_est); ln_num_reg := SQL%ROWCOUNT; RETURN(ln_num_reg); END meg_fnc_prods_insert;
FUNCIÓN MEG_FNC_COTZS_INSERT_CAB
FUNCTION meg_fnc_ctzs_insert_cab( pc_id in meg_cotzs.cotz$id$c%TYPE, pc_num in meg_cotzs.cotz$num$c%TYPE, pd_fec in meg_cotzs.cotz$fec$d%TYPE, pv_det in meg_cotzs.cotz$nota$v%TYPE, pc_cli_id in meg_cotzs.cli$id$c%TYPE, pc_emp_id in meg_cotzs.emp$id$c%TYPE, pn_subt in meg_cotzs.cotz$subt$n%TYPE, pn_porc_desc in meg_cotzs.cotz$porc$desc$n%TYPE, pn_val_desc in meg_cotzs.cotz$val$desc$n%TYPE, pn_porc_iva in meg_cotzs.cotz$porc$imp$n%TYPE, pn_val_iva in meg_cotzs.cotz$val$imp$n%TYPE, pn_val_tot in meg_cotzs.cotz$tot$n%TYPE, pd_valid in meg_cotzs.cotz$valz$d%TYPE, pc_est_ctz in meg_cotzs.est$id$c%TYPE, pc_est in meg_cotzs.cotz$est$c%TYPE, pv_cre_por in meg_cotzs.cotz$cre$por$v%TYPE ) RETURN NUMBER IS ln_num_reg NUMBER := 0; BEGIN INSERT INTO meg_cotzs ( cotz$id$c, cotz$num$c, cotz$fec$d, cotz$nota$v, cli$id$c, emp$id$c, cotz$subt$n, cotz$porc$desc$n, cotz$val$desc$n, cotz$porc$imp$n, cotz$val$imp$n, cotz$tot$n, cotz$valz$d, est$id$c, cotz$est$c, cotz$cre$por$v, cotz$cre$d ) VALUES ( pc_id, pc_num, pd_fec, pv_det, pc_cli_id, pc_emp_id, pn_subt, pn_porc_desc, pn_val_desc, pn_porc_iva, pn_val_iva, pn_val_tot, pd_valid, pc_est_ctz, pc_est, pv_cre_por, SYSDATE ); ln_num_reg := SQL%ROWCOUNT; RETURN(ln_num_reg); END meg_fnc_ctzs_insert_cab;
FUNCIÓN MEG_FNC_COTZS_INSERT_DET
FUNCTION meg_fnc_ctzs_insert_det(pc_ctz_id in meg_dets_cotzs.cotz$id$c%TYPE, pc_prd_id in meg_dets_cotzs.prod$id$c%TYPE, pn_cant in meg_dets_cotzs.det_cotz$cant$n%TYPE, pn_prec in meg_dets_cotzs.det_cotz$prec$n%TYPE, pn_subt in meg_dets_cotzs.det_cotz$subt$n%TYPE, pn_porc_desc in meg_dets_cotzs.det_cotz$porc$desc$n%TYPE, pn_val_desc in meg_dets_cotzs.det_cotz$val$desc$n%TYPE, pn_porc_iva in meg_dets_cotzs.det_cotz$porc$imp$n%TYPE, pn_val_iva in meg_dets_cotzs.det_cotz$val$imp$n%TYPE, pn_tot in meg_dets_cotzs.det_cotz$tot$n%TYPE )
60
RETURN NUMBER IS ln_num_reg NUMBER := 0; BEGIN INSERT INTO meg_dets_cotzs ( cotz$id$c, prod$id$c, det_cotz$cant$n, det_cotz$prec$n, det_cotz$subt$n, det_cotz$porc$desc$n,det_cotz$val$desc$n, det_cotz$porc$imp$n, det_cotz$val$imp$n, det_cotz$tot$n ) VALUES ( pc_ctz_id, pc_prd_id, pn_cant, pn_prec, pn_subt, pn_porc_desc, pn_val_desc, pn_porc_iva, pn_val_iva, pn_tot ); ln_num_reg := SQL%ROWCOUNT; RETURN(ln_num_reg); END meg_fnc_ctzs_insert_det;
FUNCIÓN MEG_FNC_VENTS_INSERT_CAB
FUNCTION meg_fnc_vnts_insert_cab( pc_id in meg_vents.vent$id$c%TYPE, pc_num in meg_vents.vent$num$c%TYPE, pd_fec in meg_vents.vent$fec$d%TYPE, pv_det in meg_vents.vent$nota$v%TYPE, pc_cli_id in meg_vents.cli$id$c%TYPE, pc_emp_id in meg_vents.emp$id$c%TYPE, pn_subt in meg_vents.vent$subt$n%TYPE, pn_porc_desc in meg_vents.vent$porc$desc$n%TYPE, pn_val_desc in meg_vents.vent$val$desc$n%TYPE, pn_porc_iva in meg_vents.vent$porc$imp$n%TYPE, pn_val_iva in meg_vents.vent$val$imp$n%TYPE, pn_val_tot in meg_vents.vent$tot$n%TYPE, pc_est in meg_vents.vent$est$c%TYPE, pv_cre_por in meg_vents.vent$cre$por$v%TYPE ) RETURN NUMBER IS ln_num_reg NUMBER := 0; BEGIN INSERT INTO meg_vents ( vent$id$c, vent$num$c, vent$fec$d, vent$nota$v, cli$id$c, emp$id$c, vent$subt$n, vent$porc$desc$n, vent$val$desc$n, vent$porc$imp$n, vent$val$imp$n, vent$tot$n, vent$est$c, vent$cre$por$v, vent$cre$d ) VALUES ( pc_id, pc_num, pd_fec, pv_det, pc_cli_id, pc_emp_id, pn_subt, pn_porc_desc, pn_val_desc, pn_porc_iva, pn_val_iva, pn_val_tot, pc_est, pv_cre_por, SYSDATE ); ln_num_reg := SQL%ROWCOUNT; RETURN(ln_num_reg); END meg_fnc_vnts_insert_cab;
FUNCIÓN MEG_FNC_DETS_VENTS_INSERT_DET
FUNCTION meg_fnc_vnts_insert_det(pc_vnt_id in meg_dets_vents.vent$id$c%TYPE, pc_prd_id in meg_dets_vents.prod$id$c%TYPE,
61
pn_cant in meg_dets_vents.det_vent$cant$n%TYPE, pn_prec in meg_dets_vents.det_vent$prec$n%TYPE, pn_subt in meg_dets_vents.det_vent$subt$n%TYPE, pn_porc_desc in meg_dets_vents.det_vent$porc$desc$n%TYPE, pn_val_desc in meg_dets_vents.det_vent$val$desc$n%TYPE, pn_porc_iva in meg_dets_vents.det_vent$porc$imp$n%TYPE, pn_val_iva in meg_dets_vents.det_vent$val$imp$n%TYPE, pn_tot in meg_dets_vents.det_vent$tot$n%TYPE ) RETURN NUMBER IS ln_num_reg NUMBER := 0; BEGIN INSERT INTO meg_dets_vents ( vent$id$c, prod$id$c, det_vent$cant$n, det_vent$prec$n, det_vent$subt$n, det_vent$porc$desc$n, det_vent$val$desc$n, det_vent$porc$imp$n, det_vent$val$imp$n, det_vent$tot$n ) VALUES ( pc_vnt_id, pc_prd_id, pn_cant, pn_prec, pn_subt, pn_porc_desc, pn_val_desc, pn_porc_iva, pn_val_iva, pn_tot ); ln_num_reg := SQL%ROWCOUNT; RETURN(ln_num_reg); END meg_fnc_vnts_insert_det;
FUNCIÓN MEG_FNC_BIT_INCID_INSERT
FUNCTION meg_fnc_bit_incid_insert ( pc_id meg_incids_bits.incid$id$c%TYPE, pc_hora meg_incids_bits.bita$hora$c%TYPE, pv_nota meg_incids_bits.bita$nota$v%TYPE, pv_usr meg_incids_bits.bita$cre$por$v%TYPE, pc_stat meg_incids_bits.stat$id$c%TYPE ) RETURN NUMBER IS ln_num_reg NUMBER := 0; BEGIN insert into meg_incids_bits (incid$id$c, bita$fec$d, bita$hora$c, bita$nota$v, bita$cre$por$v, bita$fec$cre$d, stat$id$c, bita$est$c) values (pc_id, SYSDATE, pc_hora, pv_nota, pv_usr, SYSDATE, pc_stat, '0'); ln_num_reg := SQL%ROWCOUNT; RETURN(ln_num_reg); END meg_fnc_bit_incid_insert;
1.8.3. MEG_PCKG_SELECT
Este paquete contendrá las funciones y procedimientos que permitirán
la consulta de los registros de las tablas.
62
A continuación se detallan las funciones del paquete
MEG_PCKG_SELECT:
PROCEDIMIENTO ALMACENADO
DESCRIPCION
meg_prc_login Consulta si existe el usuario y qué rol tiene para poder accesar al sistema. Se utilizan los campos emp$id$c, emp$cod$v, emp$clave$v y emp$nomb$v de la tabla meg_emps; y rol$id$c de la tabla meg_rols.
meg_fnc_permisos_select Consulta los permisos a los que tiene acceso el usuario.
meg_fnc_select_zonas Consulta los registros de la tabla meg_zons.
meg_fnc_zonas_combo Consulta los campos zon$id$c y zon$nom$v de la tabla meg_zons
meg_fnc_zonas_tree Consulta los campos zon$cod$v y zon$nom$v de la tabla meg_zons
meg_fnc_select_code_zona Consulta el campo zon$cod$v de la tabla meg_zons.
meg_fnc_select_rol Consulta los campos rol$cod$v, rol$nom$v, rol$est$c de la tabla meg_rols.
meg_fnc_roles_combo Consulta los campos rol$id$c, rol$nom$v de la tabla meg_rols.
meg_fnc_roles_perms_tree Consulta los campos rec$cod$v, rec$nom$v registros de la tabla meg_recs.
meg_fnc_seek_perms Consulta el campo rol$id$c de la tabla meg_rols_recs
meg_fnc_roles_tree Consulta los campos rol$cod$v y rol$nom$v de la tabla meg_rols
meg_fnc_select_depts Consulta los registros de la tabla meg_depts.
meg_fnc_depts_combo Consulta los campos dept$id$c y dept$nom$v de la tabla meg_depts
meg_fnc_depts_tree Consulta los campos dept$cod$v y dept$nom$v de la tabla meg_depts.
63
meg_fnc_select_code_dept Consulta el campo dept$cod$v de la tabla meg_depts.
meg_fnc_select_pars Consulta los registros de la tabla meg_pars.
meg_fnc_pars_combo Consulta los campos par$id$c, par$nom$v de la tabla megpars.
meg_fnc_pars_tree Consulta los campos par$cod$v, par$nom$v de la tabla meg_pars.
meg_fnc_select_code_par Consulta el campo par$cod$v de la tabla meg_pars.
meg_fnc_select_clis Consulta los registros de la tabla meg_clis.
meg_fnc_clis_combo Consulta los campos cli$id$c y cli$nom$v de la tabla meg_clis.
meg_fnc_clis_tree Consulta los campos cli$cod$v y cli$nom$v de la tabla meg_clis.
meg_fnc_select_profs Consulta los registros de la tabla meg_profs.
meg_fnc_profs_combo Consulta los campos prof$id$c, prof$nom$v de la tabla meg_profs.
meg_fnc_profs_tree Consulta los campos prof$cod$v y prof$nom$v de la tabla meg_profs.
meg_fnc_select_sucs Consulta los registros de la tabla meg_sucs.
meg_fnc_sucs_tree Consulta los campos suc$cod$v y suc$nom$v de la tabla meg_sucs.
meg_fnc_select_code_suc Consulta el campo suc$cod$v de la tabla meg_sucs.
meg_fnc_par_info_tree Consulta los campos par$nom$v, par$id$c de la tabla meg_pars, carga árbol en la ventana Mantenimiento de Parametros
meg_fnc_seek_grid_clis Muestra los clientes según el criterio de búsqueda seleccionado: cli$cod$v (código), cli$num$doc$v (cédula, pasaporte o RUC) o cli$nomb$v (nombre).
meg_fnc_seek_grid_emps Muestra los empleados según el criterio de búsqueda seleccionado: emp$cod$v (código), emp$num$doc$v (cédula, pasaporte o RUC) o emp$nomb$v (nombre).
64
meg_fnc_grids_emps_rols Muestra a los empleados y los roles a los que tienen acceso.
meg_fnc_seek_grid_prods Muestra los productos según el criterio de búsqueda seleccionado: prod$cod$v (código), prod$nom$v (nombre), prod$stock$n (stock), prod$prec$1$n (precio), iva$calc$b (Paga_Iva).
meg_fnc_act_com_combo Consulta los campos act_com$id$c, act_com$nom$v de la tabla meg_act_com.
meg_fnc_tareas_prior_combo Consulta los campos par$id$c, par$nom$v de la tabla meg_pars.
meg_fnc_select_emps Consulta los registros de la tabla meg_emps.
meg_fnc_seek_grid_cotzc Muestra las cotizaciones según el criterio de búsqueda seleccionado: cotz$num$c (Número_Documento), cotz$fec$d (Fecha_creación), cli$nom$v (Nombre_Cliente), cotz$nota$v (Detalle_Cotizacion).
meg_fnc_select_tareas Consulta los registros de la tabla meg_tars.
meg_fnc_seek_grid_tars Muestra los empleados según el criterio de búsqueda seleccionado: tar$cod$v (código), tar$asun$v(asunto), emp$id$c (Id_Empleado), emp$nomb$v (Nombre_Empleado).
meg_fnc_select_incids Consulta los registros de la tabla meg_incids.
meg_fnc_incids_combo Consulta los campos incid$id$c, incid$desc$v.
meg_fnc_select_code_incid Consulta el campo incid$cod$v de la tabla meg_incids.
meg_fnc_incid_prior_combo Consulta los campos par$id$c, par$nom$v de la tabla meg_pars.
meg_fnc_select_ctzs_cab Consulta los registros de la tabla meg_cotzs.
meg_fnc_select_ctzs_det Consulta los registros de la tabla meg_dets_cotzs.
meg_prc_login_cli_web Consulta si existe el cliente para poder accesar al sistema desde el
65
Sitio Web. Se utilizan los campos cli$id$c, cli$nom$v, cli$pass$c de la tabla meg_clis y rol$id$c de la tabla meg_rols.
PROCEDIMIENTO MEG_PRC_LOGIN PROCEDURE meg_prc_login ( pv_user IN meg_emps.emp$cod$v%TYPE, pc_id_user OUT meg_emps.emp$id$c%TYPE, pv_cod_user OUT meg_emps.emp$cod$v%TYPE, pv_pass_user OUT meg_emps.emp$clave$v%TYPE, pv_nom_user OUT meg_emps.emp$nomb$v%TYPE, pc_rol_id OUT meg_emps.rol$id$c%TYPE, pc_op_chat OUT meg_emps.emp$chat$c%TYPE ) IS BEGIN BEGIN SELECT emp$id$c, emp$cod$v, emp$clave$v, emp$nomb$v, rol$id$c, emp$chat$c INTO pc_id_user, pv_cod_user, pv_pass_user, pv_nom_user, pc_rol_id, pc_op_chat FROM meg_emps WHERE UPPER(emp$cod$v) = UPPER(pv_user); EXCEPTION WHEN NO_DATA_FOUND THEN pv_cod_user := NULL; WHEN OTHERS THEN pv_cod_user := NULL; END; END meg_prc_login;
FUNCIÓN MEG_FNC_PERMISOS_SELECT
FUNCTION meg_fnc_permisos_select ( pc_rol_id IN meg_rols.rol$id$c%TYPE ) RETURN VARCHAR2 IS lv_permisos VARCHAR2(4000); ln_tot_regs NUMBER := 0; CURSOR cursor_perm (pc_rol meg_rols.rol$id$c%TYPE ) IS SELECT recs.rec$cod$v FROM meg_recs recs, meg_rols_recs perms, meg_rols rols WHERE recs.rec$id$c = perms.rec$id$c AND perms.rol$id$c = rols.rol$id$c AND rols.rol$id$c = pc_rol AND rols.rol$est$c = '0' ORDER BY recs.rec$cod$v; BEGIN lv_permisos := '['; BEGIN FOR perm_record IN cursor_perm(pc_rol_id) LOOP lv_permisos := TRIM(lv_permisos) || '"' || TRIM(perm_record.rec$cod$v) || '",'; ln_tot_regs := ln_tot_regs + 1; END LOOP; IF ln_tot_regs > 0 THEN lv_permisos := SUBSTR(TRIM(lv_permisos), 0,(
66
LENGTH(TRIM(lv_permisos)) - 1) ); END IF; lv_permisos := lv_permisos || ']'; EXCEPTION WHEN NO_DATA_FOUND THEN lv_permisos := '[]'; WHEN OTHERS THEN lv_permisos := '[]'; END; RETURN lv_permisos; END meg_fnc_permisos_select;
FUNCIÓN MEG_FNC_SELECT_ZONAS FUNCTION meg_fnc_select_zonas( pc_id_zona IN meg_zons.zon$id$c%TYPE, pv_code_zona OUT meg_zons.zon$cod$v%TYPE, pv_name_zona OUT meg_zons.zon$nom$v%TYPE, pc_est_zona OUT meg_zons.zon$est$c%TYPE, pc_padre_id OUT meg_zons.zon$id$c%TYPE, pv_padre_zona OUT meg_zons.zon$nom$v%TYPE ) RETURN NUMBER IS ln_respuesta NUMBER; BEGIN ln_respuesta := 0; BEGIN SELECT zons.zon$cod$v, zons.zon$nom$v, zons.zon$est$c, CASE WHEN zons.pad$id$c IS NULL THEN ' ' ELSE zons.pad$id$c END, CASE WHEN pad.zon$id$c IS NULL THEN ' ' ELSE pad.zon$nom$v END, 1 INTO pv_code_zona, pv_name_zona, pc_est_zona, pc_padre_id, pv_padre_zona, ln_respuesta FROM meg_zons zons, meg_zons pad WHERE zons.pad$id$c = pad.zon$id$c(+) AND zons.zon$id$c = pc_id_zona; EXCEPTION WHEN NO_DATA_FOUND THEN ln_respuesta := 0; WHEN OTHERS THEN ln_respuesta := 0; END; RETURN ln_respuesta; END meg_fnc_select_zonas;
FUNCIÓN MEG_FNC_ZONAS_COMBO FUNCTION meg_fnc_zonas_combo RETURN VARCHAR2 IS lv_cmb_zonas VARCHAR2(10000); ln_zonas_regs NUMBER(3) := 0; CURSOR cursor_zona IS SELECT zon$id$c, zon$nom$v FROM meg_zons WHERE pad$id$c IS NULL AND zon$est$c = '0'
67
ORDER BY zon$nom$v; BEGIN lv_cmb_zonas := '{"data" : ['; BEGIN FOR zona_record IN cursor_zona LOOP lv_cmb_zonas := lv_cmb_zonas || '{"ZonaID": "' || zona_record.zon$id$c || '", "ZonaName": "' || zona_record.zon$nom$v || '"},'; ln_zonas_regs := ln_zonas_regs + 1; END LOOP; IF ln_zonas_regs > 0 THEN lv_cmb_zonas := SUBSTR(lv_cmb_zonas, 0,( LENGTH(lv_cmb_zonas) - 1) ); END IF; lv_cmb_zonas := lv_cmb_zonas || ']}'; EXCEPTION WHEN NO_DATA_FOUND THEN lv_cmb_zonas := '{"data" : []}'; WHEN OTHERS THEN lv_cmb_zonas := '{"data" : []}'; END; RETURN RTRIM(LTRIM(lv_cmb_zonas)); END meg_fnc_zonas_combo;
FUNCIÓN MEG_FNC_ZONAS_TREE FUNCTION meg_fnc_zonas_tree RETURN VARCHAR2 IS lv_tree_zonas VARCHAR2(10000); ln_zonas_nodo NUMBER(3) := 0; ln_level_ant NUMBER(3) := 0; ln_num_childs NUMBER(3) := 0; CURSOR cursor_zona IS SELECT 1, level, CONCAT( CONCAT( zons.zon$cod$v, ' - '), zons.zon$nom$v ) AS Elementos, zons.zon$id$c AS id FROM meg_zons zons -- WHERE zons.zon$est$c = '0' START WITH zons.pad$id$c IS NULL CONNECT BY zons.pad$id$c = PRIOR zons.zon$id$c; BEGIN lv_tree_zonas := '[{'; BEGIN FOR zona_record IN cursor_zona LOOP IF ln_level_ant > 0 THEN IF zona_record.level <= ln_level_ant THEN IF ln_zonas_nodo > 0 THEN ln_num_childs := ( ln_level_ant - zona_record.level ); WHILE ln_num_childs > 0 LOOP lv_tree_zonas := TRIM(lv_tree_zonas) || '}]'; ln_num_childs := ln_num_childs - 1; ln_zonas_nodo := ln_zonas_nodo - 1; END LOOP; END IF; lv_tree_zonas := TRIM(lv_tree_zonas) || '},{'; ELSE
68
lv_tree_zonas := TRIM(lv_tree_zonas) || ',"children":[{'; ln_zonas_nodo := ln_zonas_nodo + 1; END IF; END IF; lv_tree_zonas := TRIM(lv_tree_zonas) || '"id":"' || RTRIM(LTRIM(zona_record.id)) || '","text":"' || RTRIM(LTRIM(zona_record.elementos)) || '","leaf": false'; ln_level_ant := zona_record.level; END LOOP; WHILE ln_zonas_nodo > 0 LOOP lv_tree_zonas := TRIM(lv_tree_zonas) || '}]'; ln_zonas_nodo := ln_zonas_nodo -1; END LOOP; lv_tree_zonas := TRIM(lv_tree_zonas) || '}]'; EXCEPTION WHEN NO_DATA_FOUND THEN lv_tree_zonas := '[{}]'; WHEN OTHERS THEN lv_tree_zonas := '[{}]'; END; RETURN RTRIM(LTRIM(lv_tree_zonas)); END meg_fnc_zonas_tree;
FUNCIÓN MEG_FNC_SELECT_CODE_ZONA
FUNCTION meg_fnc_select_code_zona( pv_code_zona IN meg_zons.zon$cod$v%TYPE ) RETURN NUMBER IS ln_respuesta NUMBER; lv_code_zona meg_zons.zon$cod$v%TYPE; BEGIN ln_respuesta := 0; lv_code_zona := null; BEGIN SELECT zon$cod$v INTO lv_code_zona FROM meg_zons WHERE UPPER(RTRIM(zon$cod$v)) = UPPER(RTRIM(pv_code_zona)); IF lv_code_zona IS NOT NULL THEN ln_respuesta := 1; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN ln_respuesta := 0; WHEN OTHERS THEN ln_respuesta := 0; END; RETURN ln_respuesta; END meg_fnc_select_code_zona;
69
FUNCIÓN MEG_FNC_SELECT_ROL
FUNCTION meg_fnc_select_rol( pc_id_rol IN meg_rols.rol$id$c%TYPE, pv_code_rol OUT meg_rols.rol$cod$v%TYPE, pv_name_rol OUT meg_rols.rol$nom$v%TYPE, pc_est_rol OUT meg_rols.rol$est$c%TYPE, pv_emps_id OUT VARCHAR2, pv_recs_id OUT VARCHAR2 ) RETURN NUMBER IS ln_respuesta NUMBER; CURSOR cursor_emps ( pl_rol_id meg_rols.rol$id$c%TYPE ) IS SELECT emp$id$c FROM meg_emps WHERE rol$id$c = pc_id_rol; CURSOR cursor_recs ( pl_rol_id meg_rols.rol$id$c%TYPE ) IS SELECT rec$id$c FROM meg_rols_recs WHERE rol$id$c = pc_id_rol; BEGIN ln_respuesta := 0; BEGIN pv_emps_id := ''; pv_recs_id := ''; SELECT rol$cod$v, rol$nom$v, rol$est$c, 1 INTO pv_code_rol, pv_name_rol, pc_est_rol, ln_respuesta FROM meg_rols rols WHERE rols.rol$id$c = pc_id_rol; FOR reg_aux_id IN cursor_emps(pc_id_rol) LOOP pv_emps_id := pv_emps_id || ';' || TRIM(reg_aux_id.emp$id$c); END LOOP; IF LENGTH(TRIM(pv_emps_id)) > 0 THEN pv_emps_id := SUBSTR( pv_emps_id, 2, ( LENGTH(pv_emps_id) - 1) ); END IF; FOR reg_aux_id IN cursor_recs(pc_id_rol) LOOP pv_recs_id := pv_recs_id || ';' || TRIM(reg_aux_id.rec$id$c); END LOOP; IF LENGTH(TRIM(pv_recs_id)) > 0 THEN pv_recs_id := SUBSTR( pv_recs_id, 2, ( LENGTH(pv_recs_id) - 1) ); END IF; EXCEPTION WHEN NO_DATA_FOUND THEN ln_respuesta := 0; WHEN OTHERS THEN ln_respuesta := 0; END;
70
RETURN ln_respuesta; END meg_fnc_select_rol;
FUNCIÓN MEG_FNC_ROLES_COMBO
FUNCTION meg_fnc_roles_combo RETURN VARCHAR2 IS lv_cmb_roles VARCHAR2(10000); ln_roles_regs NUMBER(3) := 0; CURSOR cursor_rol IS SELECT rol$id$c, rol$nom$v FROM meg_rols ORDER BY rol$nom$v; begin lv_cmb_roles := '{"data" : ['; BEGIN FOR rol_record IN cursor_rol LOOP lv_cmb_roles := lv_cmb_roles || '{"RolID": "' || rol_record.rol$id$c || '", "RolName": "' || rol_record.rol$nom$v || '"},'; ln_roles_regs := ln_roles_regs + 1; END LOOP; IF ln_roles_regs > 0 THEN lv_cmb_roles := SUBSTR(lv_cmb_roles,0,( LENGTH(lv_cmb_roles) - 1) ); END IF; lv_cmb_roles := lv_cmb_roles || ']}'; EXCEPTION WHEN NO_DATA_FOUND THEN lv_cmb_roles := '{"data" : []}'; WHEN OTHERS THEN lv_cmb_roles := '{"data" : []}'; END; RETURN RTRIM(LTRIM(lv_cmb_roles)); END;
FUNCIÓN MEG_FNC_ROLES_PERMS_TREE
FUNCTION meg_fnc_roles_perms_tree( pc_rol_id meg_rols.rol$id$c%TYPE ) RETURN VARCHAR2 IS lv_tree_roles VARCHAR2(20000); ln_nodo_roles NUMBER(3) := 0; ln_level_ant NUMBER(3) := 0; ln_num_childs NUMBER(3) := 0; lb_exite_perm BOOLEAN := false; CURSOR cursor_rol IS SELECT 1, level, CONCAT( CONCAT( recs.rec$cod$v, ' - '), recs.rec$nom$v ) AS Elementos, recs.rec$id$c AS id FROM meg_recs recs START WITH recs.rec$id$c = '0000000001' CONNECT BY recs.rec$id$rec$id$c = PRIOR recs.rec$id$c; BEGIN lv_tree_roles := '[{';
71
BEGIN FOR rol_record IN cursor_rol LOOP IF ln_level_ant > 0 THEN IF rol_record.level <= ln_level_ant THEN IF ln_nodo_roles > 0 THEN ln_num_childs := ( ln_level_ant - rol_record.level ); WHILE ln_num_childs > 0 LOOP lv_tree_roles := TRIM(lv_tree_roles) || '}]'; ln_num_childs := ln_num_childs - 1; ln_nodo_roles := ln_nodo_roles -1; END LOOP; END IF; lv_tree_roles := TRIM(lv_tree_roles) || '},{'; ELSE lv_tree_roles := TRIM(lv_tree_roles) || ',"children":[{'; ln_nodo_roles := ln_nodo_roles + 1; END IF; END IF; IF LENGTH(TRIM(pc_rol_id)) > 0 OR pc_rol_id IS NOT NULL THEN lb_exite_perm := meg_pckg_select.meg_fnc_seek_perms( rol_record.id, pc_rol_id ); ELSE lb_exite_perm := false; END IF; lv_tree_roles := TRIM(lv_tree_roles) || '"id":"' || RTRIM(LTRIM(rol_record.id)) || '","text": "' || RTRIM(LTRIM(rol_record.elementos)) || '","leaf": false,"checked":' || CASE WHEN lb_exite_perm THEN 'true' ELSE 'false' END; ln_level_ant := rol_record.level; END LOOP; WHILE ln_nodo_roles > 0 LOOP lv_tree_roles := TRIM(lv_tree_roles) || '}]'; ln_nodo_roles := ln_nodo_roles - 1; END LOOP; lv_tree_roles := TRIM(lv_tree_roles) || '}]'; EXCEPTION WHEN NO_DATA_FOUND THEN lv_tree_roles := '[{}]'; WHEN OTHERS THEN lv_tree_roles := '[{}]'; END; RETURN RTRIM(LTRIM(lv_tree_roles)); END meg_fnc_roles_perms_tree;
FUNCIÓN MEG_FNC_SEEK_PERMS
FUNCTION meg_fnc_seek_perms( pc_perm_id meg_recs.rec$id$c%TYPE, pc_rol_id meg_rols.rol$id$c%TYPE ) RETURN BOOLEAN IS lb_seek_perm BOOLEAN := FALSE;
72
lc_perm_id meg_recs.rec$id$c%TYPE := NULL; BEGIN BEGIN SELECT rol$id$c INTO lc_perm_id FROM meg_rols_recs WHERE rol$id$c = pc_rol_id AND rec$id$c = pc_perm_id; IF SQL%ROWCOUNT = 1 THEN lb_seek_perm := TRUE; ELSE lb_seek_perm := FALSE; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN lb_seek_perm := FALSE; WHEN OTHERS THEN lb_seek_perm := FALSE; END; RETURN lb_seek_perm; END meg_fnc_seek_perms;
FUNCIÓN MEG_FNC_ROLES_TREE FUNCTION meg_fnc_roles_tree RETURN VARCHAR2 IS lv_tree_roles VARCHAR2(20000); ln_num_regs NUMBER := 0; CURSOR cursor_rol IS SELECT CONCAT(CONCAT( TRIM(rol$cod$v), ' - '), TRIM(rol$nom$v)) AS deta, rol$id$c AS id FROM meg_rols; BEGIN lv_tree_roles := '['; BEGIN FOR rol_record IN cursor_rol LOOP lv_tree_roles := TRIM(lv_tree_roles) || '{"id":"' || RTRIM(LTRIM(rol_record.id)) || '","text":"' || RTRIM(LTRIM(rol_record.deta)) || '","leaf":false},'; ln_num_regs := ln_num_regs + 1; END LOOP; IF ln_num_regs > 0 THEN lv_tree_roles := SUBSTR(lv_tree_roles, 0, ( LENGTH(lv_tree_roles) - 1) ); lv_tree_roles := TRIM(lv_tree_roles) || ']'; ELSE lv_tree_roles := '[{}]'; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN lv_tree_roles := '[{}]'; WHEN OTHERS THEN lv_tree_roles := '[{}]'; END; RETURN RTRIM(LTRIM(lv_tree_roles)); END meg_fnc_roles_tree;
73
FUNCIÓN MEG_FNC_SELECT_DEPTS
FUNCTION meg_fnc_select_depts( pc_id_dept IN meg_depts.dept$id$c%TYPE, pv_code_dept OUT meg_depts.dept$cod$v%TYPE, pv_name_dept OUT meg_depts.dept$nom$v%TYPE, pc_est_dept OUT meg_depts.dept$est$c%TYPE, pc_padre_id OUT meg_depts.dept$id$c%TYPE, pv_padre_dept OUT meg_depts.dept$nom$v%TYPE ) RETURN NUMBER IS ln_respuesta NUMBER; BEGIN ln_respuesta := 0; BEGIN SELECT depts.dept$cod$v, depts.dept$nom$v, depts.dept$est$c, CASE WHEN depts.pad$id$c IS NULL THEN '' ELSE depts.pad$id$c END, CASE WHEN pad.dept$id$c IS NULL THEN '' ELSE pad.dept$nom$v END, 1 INTO pv_code_dept, pv_name_dept, pc_est_dept, pc_padre_id, pv_padre_dept, ln_respuesta FROM meg_depts depts, meg_depts pad WHERE depts.pad$id$c = pad.dept$id$c(+) AND depts.dept$id$c = pc_id_dept; EXCEPTION WHEN NO_DATA_FOUND THEN ln_respuesta := 0; WHEN OTHERS THEN ln_respuesta := 0; END; RETURN ln_respuesta; END meg_fnc_select_depts;
FUNCIÓN MEG_FNC_DEPTS_COMBO
FUNCTION meg_fnc_depts_combo RETURN VARCHAR2 IS lv_cmb_depts VARCHAR2(10000); ln_depts_regs NUMBER(3) := 0; CURSOR cursor_dept IS SELECT dept$id$c, dept$nom$v FROM meg_depts WHERE pad$id$c IS NULL AND dept$est$c = '0' ORDER BY dept$nom$v; BEGIN lv_cmb_depts := '{"data":['; BEGIN FOR dept_record IN cursor_dept LOOP lv_cmb_depts := lv_cmb_depts || '{"DeptID":"' || dept_record.dept$id$c || '","DeptName":"' || dept_record.dept$nom$v || '"},'; ln_depts_regs := ln_depts_regs + 1; END LOOP; IF ln_depts_regs > 0 THEN lv_cmb_depts := SUBSTR(lv_cmb_depts,0,( LENGTH(lv_cmb_depts) - 1) );
74
END IF; lv_cmb_depts := lv_cmb_depts || ']}'; EXCEPTION WHEN NO_DATA_FOUND THEN lv_cmb_depts := '{"data":[]}'; WHEN OTHERS THEN lv_cmb_depts := '{"data":[]}'; END; RETURN RTRIM(LTRIM(lv_cmb_depts)); END meg_fnc_depts_combo;
FUNCIÓN MEG_FNC_DEPTS_TREE
FUNCTION meg_fnc_depts_tree RETURN VARCHAR2 IS lv_tree_depts VARCHAR2(10000); ln_depts_nodo NUMBER(3) := 0; ln_level_ant NUMBER(3) := 0; ln_num_childs NUMBER(3) := 0; CURSOR cursor_dept IS SELECT 1, level, CONCAT( CONCAT( depts.dept$cod$v, ' - '), depts.dept$nom$v ) AS Elementos, depts.dept$id$c AS id FROM meg_depts depts START WITH depts.pad$id$c IS NULL CONNECT BY depts.pad$id$c = PRIOR depts.dept$id$c; BEGIN lv_tree_depts := '[{'; BEGIN FOR dept_record IN cursor_dept LOOP IF ln_level_ant > 0 THEN IF dept_record.level <= ln_level_ant THEN IF ln_depts_nodo > 0 THEN ln_num_childs := ( ln_level_ant - dept_record.level ); WHILE ln_num_childs > 0 LOOP lv_tree_depts := TRIM(lv_tree_depts) || '}]'; ln_num_childs := ln_num_childs - 1; ln_depts_nodo := ln_depts_nodo - 1; END LOOP; END IF; lv_tree_depts := TRIM(lv_tree_depts) || '},{'; ELSE lv_tree_depts := TRIM(lv_tree_depts) || ', "children":[{'; ln_depts_nodo := ln_depts_nodo + 1; END IF; END IF; lv_tree_depts := TRIM(lv_tree_depts) || '"id":"' || RTRIM(LTRIM(dept_record.id)) || '","text":"' || RTRIM(LTRIM(dept_record.elementos)) || '","leaf":false'; ln_level_ant := dept_record.level; END LOOP; WHILE ln_depts_nodo > 0 LOOP lv_tree_depts := TRIM(lv_tree_depts) || '}]'; ln_depts_nodo := ln_depts_nodo -1;
75
END LOOP; lv_tree_depts := TRIM(lv_tree_depts) || '}]'; EXCEPTION WHEN NO_DATA_FOUND THEN lv_tree_depts := '[{}]'; WHEN OTHERS THEN lv_tree_depts := '[{}]'; END; RETURN RTRIM(LTRIM(lv_tree_depts)); END meg_fnc_depts_tree;
FUNCIÓN MEG_FNC_SELECT_CODE_DEPT
FUNCTION meg_fnc_select_code_dept( pv_code_dept IN meg_depts.dept$cod$v%TYPE ) RETURN NUMBER IS ln_respuesta NUMBER; lv_code_dept meg_depts.dept$cod$v%TYPE; BEGIN ln_respuesta := 0; lv_code_dept := null; BEGIN SELECT dept$cod$v INTO lv_code_dept FROM meg_depts WHERE UPPER(RTRIM(dept$cod$v)) = UPPER(RTRIM(pv_code_dept)); IF lv_code_dept IS NOT NULL THEN ln_respuesta := 1; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN ln_respuesta := 0; WHEN OTHERS THEN ln_respuesta := 0; END; RETURN ln_respuesta; END meg_fnc_select_code_dept;
FUNCIÓN MEG_FNC_SELECT_PARS
FUNCTION meg_fnc_select_pars ( pc_id_par IN meg_pars.par$id$c%TYPE, pv_code_par OUT meg_pars.par$cod$v%TYPE, pv_name_par OUT meg_pars.par$nom$v%TYPE, pv_valor_par OUT meg_pars.par$val$v%TYPE, pv_tip_par OUT meg_pars.par$tip$v%TYPE, pc_est_par OUT meg_pars.par$est$c%TYPE, pc_padre_id OUT meg_pars.pad$id$c%TYPE, pv_padre_par OUT meg_pars.par$nom$v%TYPE ) RETURN NUMBER IS ln_respuesta NUMBER; BEGIN
76
ln_respuesta := 0; BEGIN SELECT pars.par$cod$v, pars.par$nom$v, pars.par$val$v, pars.par$tip$v, pars.par$est$c, CASE WHEN pars.pad$id$c IS NULL THEN '' ELSE pars.pad$id$c END, CASE WHEN pad.par$id$c IS NULL THEN '' ELSE pad.par$nom$v END, 1 INTO pv_code_par, pv_name_par, pv_valor_par, pv_tip_par, pc_est_par, pc_padre_id, pv_padre_par, ln_respuesta FROM meg_pars pars, meg_pars pad WHERE pars.pad$id$c = pad.par$id$c(+) AND pars.par$id$c = pc_id_par; EXCEPTION WHEN NO_DATA_FOUND THEN ln_respuesta := 0; WHEN OTHERS THEN ln_respuesta := 0; END; RETURN ln_respuesta; END meg_fnc_select_pars;
FUNCIÓN MEG_FNC_PARS_COMBO
FUNCTION meg_fnc_pars_combo RETURN VARCHAR2 IS lv_cmb_pars VARCHAR2(10000); ln_pars_regs NUMBER(3) := 0; CURSOR cursor_par IS SELECT par$id$c, par$nom$v FROM meg_pars WHERE pad$id$c IS NULL AND par$est$c = '0' ORDER BY par$nom$v; BEGIN lv_cmb_pars := '{"data":['; BEGIN FOR par_record IN cursor_par LOOP lv_cmb_pars := lv_cmb_pars || '{"parID":"' || par_record.par$id$c || '","parName":"' || par_record.par$nom$v || '"},'; ln_pars_regs := ln_pars_regs + 1; END LOOP; IF ln_pars_regs > 0 THEN lv_cmb_pars := SUBSTR(lv_cmb_pars,0,( LENGTH(lv_cmb_pars) - 1) ); END IF; lv_cmb_pars := lv_cmb_pars || ']}'; EXCEPTION WHEN NO_DATA_FOUND THEN lv_cmb_pars := '{"data":[]}'; WHEN OTHERS THEN lv_cmb_pars := '{"data":[]}'; END; RETURN RTRIM(LTRIM(lv_cmb_pars)); END meg_fnc_pars_combo; RETURN RTRIM(LTRIM(lv_tree_clientes));
77
FUNCIÓN MEG_FNC_PARS_TREE
FUNCTION meg_fnc_pars_tree RETURN VARCHAR2 IS lv_tree_pars VARCHAR2(10000); ln_pars_nodo NUMBER(3) := 0; ln_level_ant NUMBER(3) := 0; ln_num_childs NUMBER(3) := 0; CURSOR cursor_par IS SELECT 1, level, CONCAT( CONCAT( pars.par$cod$v, ' - '), pars.par$nom$v ) AS Elementos, pars.par$id$c AS id FROM meg_pars pars START WITH pars.pad$id$c IS NULL CONNECT BY pars.pad$id$c = PRIOR pars.par$id$c; BEGIN lv_tree_pars := '[{'; BEGIN FOR par_record IN cursor_par LOOP IF ln_level_ant > 0 THEN IF par_record.level <= ln_level_ant THEN IF ln_pars_nodo > 0 THEN ln_num_childs := ( ln_level_ant - par_record.level ); WHILE ln_num_childs > 0 LOOP lv_tree_pars := TRIM(lv_tree_pars) || '}]'; ln_num_childs := ln_num_childs - 1; ln_pars_nodo := ln_pars_nodo - 1; END LOOP; END IF; lv_tree_pars := TRIM(lv_tree_pars) || '},{'; ELSE lv_tree_pars := TRIM(lv_tree_pars) || ', "children":[{'; ln_pars_nodo := ln_pars_nodo + 1; END IF; END IF; lv_tree_pars := TRIM(lv_tree_pars) || '"id":"' || RTRIM(LTRIM(par_record.id)) || '","text":"' || RTRIM(LTRIM(par_record.elementos)) || '","leaf":false'; ln_level_ant := par_record.level; END LOOP; WHILE ln_pars_nodo > 0 LOOP lv_tree_pars := TRIM(lv_tree_pars) || '}]'; ln_pars_nodo := ln_pars_nodo -1; END LOOP; lv_tree_pars := TRIM(lv_tree_pars) || '}]'; EXCEPTION WHEN NO_DATA_FOUND THEN lv_tree_pars := '[{}]'; WHEN OTHERS THEN lv_tree_pars := '[{}]'; END; RETURN RTRIM(LTRIM(lv_tree_pars)); END meg_fnc_pars_tree;
78
FUNCIÓN MEG_FNC_SELECT_CODE_PAR
FUNCTION meg_fnc_pars_combo RETURN VARCHAR2 IS lv_cmb_pars VARCHAR2(10000); ln_pars_regs NUMBER(3) := 0; CURSOR cursor_par IS SELECT par$id$c, par$nom$v FROM meg_pars WHERE pad$id$c IS NULL AND par$est$c = '0' ORDER BY par$nom$v; BEGIN lv_cmb_pars := '{"data":['; BEGIN FOR par_record IN cursor_par LOOP lv_cmb_pars := lv_cmb_pars || '{"parID":"' || par_record.par$id$c || '","parName":"' || par_record.par$nom$v || '"},'; ln_pars_regs := ln_pars_regs + 1; END LOOP; IF ln_pars_regs > 0 THEN lv_cmb_pars := SUBSTR(lv_cmb_pars,0,( LENGTH(lv_cmb_pars) - 1) ); END IF; lv_cmb_pars := lv_cmb_pars || ']}'; EXCEPTION WHEN NO_DATA_FOUND THEN lv_cmb_pars := '{"data":[]}'; WHEN OTHERS THEN lv_cmb_pars := '{"data":[]}'; END; RETURN RTRIM(LTRIM(lv_cmb_pars)); END meg_fnc_pars_combo; RETURN RTRIM(LTRIM(lv_tree_clientes));
FUNCIÓN MEG_FNC_CLIS_COMBO lv_cmb_clientes VARCHAR2(4000); ln_clientes_regs NUMBER(3) := 0; CURSOR cursor_cliente IS SELECT cli$id$c, cli$nom$v FROM meg_clis WHERE pad$id$c IS NULL ORDER BY cli$nom$v; BEGIN lv_cmb_clientes := '{"data" : ['; BEGIN FOR cliente_record IN cursor_cliente LOOP lv_cmb_clientes := lv_cmb_clientes || '{"ClienteID": "' || cliente_record.cli$id$c || '", "ClienteName": "' || cliente_record.cli$nom$v || '"},'; ln_clientes_regs := ln_clientes_regs + 1; END LOOP; IF ln_clientes_regs > 0 THEN
79
lv_cmb_clientes := SUBSTR(lv_cmb_clientes,0, ( LENGTH(lv_cmb_clientes) - 1) ); END IF; lv_cmb_clientes := lv_cmb_clientes || ']}'; EXCEPTION WHEN NO_DATA_FOUND THEN lv_cmb_clientes := '{"data" : []}'; WHEN OTHERS THEN lv_cmb_clientes := '{"data" : []}'; END; RETURN RTRIM(LTRIM(lv_cmb_clientes));
FUNCIÓN MEG_FNC_CLIS_TREE lv_tree_clientes VARCHAR2(4000); BEGIN lv_tree_clientes := '[{"id": "0000000007", "nodeID": "0000000007", "pnodeID": "1", "text":"107 - EL ORO", "leaf":false},{"id": "0000000010", "nodeID": "0000000010", "pnodeID": "1", "text":"120 - GUAYAS", "leaf":false},{"id": "0000000001", "nodeID": "0000000001", "pnodeID": "1", "text":"201 - AZUAY", "leaf":false, "children":[{"id":"0000000011", "nodeID":"0000000011", "pnodeID":"0000000001", "text":"20115 - CAMILO PONCE ENRIQUEZ", "leaf":false},{"id":"0000000012", "nodeID":"0000000012", "pnodeID":"0000000001", "text":"20111 - CHORDELEG", "leaf":false}]},{"id": "0000000002", "nodeID": "0000000002", "pnodeID": "1", "text":"202 - BOLIVAR", "leaf":false},{"id": "0000000003", "nodeID": "0000000003", "pnodeID": "1", "text":"203 - CAÑAR", "leaf":false},{"id": "0000000004", "nodeID": "0000000004", "pnodeID": "1", "text":"204 - CARCHI", "leaf":false},{"id": "0000000005", "nodeID": "0000000005", "pnodeID": "1", "text":"206 - CHIMBORAZO", "leaf":false}]'; RETURN RTRIM(LTRIM(lv_tree_clientes));
FUNCIÓN MEG_FNC_SELECT_CLIS ln_respuesta NUMBER; BEGIN ln_respuesta := 0; BEGIN SELECT cli$cod$v, cli$id$c, cli$cod$v, cli$tip$cli$c, cli$tip$ide$c, cli$num$ide$v, cli$nom$v, cli$dir$v, cli$tel$v, cli$fax$v, cli$est$civ$c, cli$mail$v, cli$pass$c, cli$desd$d, cli$sexo$c, prof$id$c, act$com$id$c, zon$id$c, emp$id$c, cli$fec$nac$d, cli$pag$web$v, cli$rec$mail$c, cli$est$c INTO pv_code_cli, pv_code_cli, pc_tip_cli, pc_tip_ide_cli, pv_num_ide_cli, pv_nom_cli, pv_dir_cli, pv_tel_cli, pv_fax_cli, pc_est_civ_cli, pv_mail_cli, pc_pass_cli, pd_desd_cli, pc_sexo_cli, pc_prof_cli, pc_act_com_cli, pc_zon_cli, pc_emp_cli, pd_fec_nac_cli, pv_pag_web_cli, pc_rec_mail_cli, pc_est_cli, ln_respuesta FROM meg_clis
80
WHERE cli$id$c = pc_id_cli; EXCEPTION WHEN NO_DATA_FOUND THEN ln_respuesta := 0; WHEN OTHERS THEN ln_respuesta := 0; END; RETURN ln_respuesta;
FUNCIÓN MEG_FNC_SELECT_PROFS
FUNCTION meg_fnc_select_profs( pc_id_prof IN meg_profs.prof$id$c%TYPE, pv_code_prof OUT meg_profs.prof$cod$v%TYPE, pv_name_prof OUT meg_profs.prof$nom$v%TYPE, pc_est_prof OUT meg_profs.prof$est$c%TYPE ) RETURN NUMBER IS ln_respuesta NUMBER; BEGIN ln_respuesta := 0; BEGIN SELECT prof$cod$v, prof$nom$v, prof$est$c, 1 INTO pv_code_prof, pv_name_prof, pc_est_prof, ln_respuesta FROM meg_profs WHERE prof$id$c = pc_id_prof; EXCEPTION WHEN NO_DATA_FOUND THEN ln_respuesta := 0; WHEN OTHERS THEN ln_respuesta := 0; END; RETURN ln_respuesta; END meg_fnc_select_profs;
FUNCIÓN MEG_FNC_PROFS_COMBO
FUNCTION meg_fnc_profs_combo RETURN VARCHAR2 IS lv_cmb_profs VARCHAR2(10000); ln_profs_regs NUMBER(3) := 0; CURSOR cursor_prof IS SELECT prof$id$c, prof$nom$v FROM meg_profs --WHERE pad$id$c IS NULL AND dept$est$c = '0' ORDER BY prof$nom$v; BEGIN lv_cmb_profs := '{"data" : ['; BEGIN FOR prof_record IN cursor_prof LOOP lv_cmb_profs := lv_cmb_profs || '{"ProfID": "' || prof_record.prof$id$c || '", "ProfName": "' || prof_record.prof$nom$v || '"},'; ln_profs_regs := ln_profs_regs + 1;
81
END LOOP; IF ln_profs_regs > 0 THEN lv_cmb_profs := SUBSTR(lv_cmb_profs,0,( LENGTH(lv_cmb_profs) - 1) ); END IF; lv_cmb_profs := lv_cmb_profs || ']}'; EXCEPTION WHEN NO_DATA_FOUND THEN lv_cmb_profs := '{"data" : []}'; WHEN OTHERS THEN lv_cmb_profs := '{"data" : []}'; END; RETURN RTRIM(LTRIM(lv_cmb_profs)); END meg_fnc_profs_combo;
FUNCIÓN MEG_FNC_PROFS_TREE
FUNCTION meg_fnc_profs_tree RETURN VARCHAR2 IS lv_tree_profs VARCHAR2(10000); ln_profs_nodo NUMBER(3) := 0; ln_level_ant NUMBER(3) := 0; ln_num_childs NUMBER(3) := 0; CURSOR cursor_prof IS SELECT 1, level, CONCAT( CONCAT( profs.prof$cod$v, ' - '), profs.prof$nom$v ) AS Elementos, profs.prof$id$c AS id FROM meg_profs profs CONNECT BY profs.prof$id$c = NULL; BEGIN lv_tree_profs := '[{'; BEGIN FOR profs_record IN cursor_prof LOOP IF ln_level_ant > 0 THEN IF profs_record.level <= ln_level_ant THEN IF ln_profs_nodo > 0 THEN ln_num_childs := ( ln_level_ant - profs_record.level ); WHILE ln_num_childs > 0 LOOP lv_tree_profs := TRIM(lv_tree_profs) || '}]'; ln_num_childs := ln_num_childs - 1; ln_profs_nodo := ln_profs_nodo - 1; END LOOP; END IF; lv_tree_profs := TRIM(lv_tree_profs) || '},{'; ELSE lv_tree_profs := TRIM(lv_tree_profs) || ', "children":[{'; ln_profs_nodo := ln_profs_nodo + 1; END IF; END IF; lv_tree_profs := TRIM(lv_tree_profs) || '"id": "' || RTRIM(LTRIM(profs_record.id)) || '","text":"' || RTRIM(LTRIM(profs_record.elementos)) || '","leaf":false'; ln_level_ant := profs_record.level; END LOOP; WHILE ln_profs_nodo > 0 LOOP
82
lv_tree_profs := TRIM(lv_tree_profs) || '}]'; ln_profs_nodo := ln_profs_nodo -1; END LOOP; lv_tree_profs := TRIM(lv_tree_profs) || '}]'; EXCEPTION WHEN NO_DATA_FOUND THEN lv_tree_profs := '[{}]'; WHEN OTHERS THEN lv_tree_profs := '[{}]'; END; RETURN RTRIM(LTRIM(lv_tree_profs)); END meg_fnc_profs_tree;
FUNCIÓN MEG_FNC_SELECT_SUCS
FUNCTION meg_fnc_select_sucs( pc_id_suc IN meg_sucs.suc$id$c%TYPE, pv_code_suc OUT meg_sucs.suc$cod$v%TYPE, pv_name_suc OUT meg_sucs.suc$nom$v%TYPE, pc_est_suc OUT meg_sucs.suc$est$c%TYPE ) RETURN NUMBER IS ln_respuesta NUMBER; BEGIN ln_respuesta := 0; BEGIN SELECT suc$cod$v, suc$nom$v, suc$est$c, 1 INTO pv_code_suc, pv_name_suc, pc_est_suc, ln_respuesta FROM meg_sucs WHERE suc$id$c = pc_id_suc; EXCEPTION WHEN NO_DATA_FOUND THEN ln_respuesta := 0; WHEN OTHERS THEN ln_respuesta := 0; END; RETURN ln_respuesta; END meg_fnc_select_sucs;
FUNCIÓN MEG_FNC_SUCS_TREE
FUNCTION meg_fnc_sucs_tree RETURN VARCHAR2 IS lv_tree_sucs VARCHAR2(10000); ln_sucs_nodo NUMBER(3) := 0; ln_level_ant NUMBER(3) := 0; ln_num_childs NUMBER(3) := 0; CURSOR cursor_suc IS SELECT 1, level, CONCAT( CONCAT( sucs.suc$cod$v, ' - '), sucs.suc$nom$v ) AS Elementos, sucs.suc$id$c AS id FROM meg_sucs sucs CONNECT BY sucs.suc$id$c = NULL;
83
BEGIN lv_tree_sucs := '[{'; BEGIN FOR sucs_record IN cursor_suc LOOP IF ln_level_ant > 0 THEN IF sucs_record.level <= ln_level_ant THEN IF ln_sucs_nodo > 0 THEN ln_num_childs := ( ln_level_ant - sucs_record.level ); WHILE ln_num_childs > 0 LOOP lv_tree_sucs := TRIM(lv_tree_sucs) || '}]'; ln_num_childs := ln_num_childs - 1; ln_sucs_nodo := ln_sucs_nodo - 1; END LOOP; END IF; lv_tree_sucs := TRIM(lv_tree_sucs) || '},{'; ELSE lv_tree_sucs := TRIM(lv_tree_sucs) || ', "children":[{'; ln_sucs_nodo := ln_sucs_nodo + 1; END IF; END IF; lv_tree_sucs := TRIM(lv_tree_sucs) || '"id": "' || RTRIM(LTRIM(sucs_record.id)) || '","text":"' || RTRIM(LTRIM(sucs_record.elementos)) || '","leaf":false'; ln_level_ant := sucs_record.level; END LOOP; WHILE ln_sucs_nodo > 0 LOOP lv_tree_sucs := TRIM(lv_tree_sucs) || '}]'; ln_sucs_nodo := ln_sucs_nodo -1; END LOOP; lv_tree_sucs := TRIM(lv_tree_sucs) || '}]'; EXCEPTION WHEN NO_DATA_FOUND THEN lv_tree_sucs := '[{}]'; WHEN OTHERS THEN lv_tree_sucs := '[{}]'; END; RETURN RTRIM(LTRIM(lv_tree_sucs)); END meg_fnc_sucs_tree; WHEN OTHERS THEN lv_tree_sucs := '[{}]'; END; RETURN RTRIM(LTRIM(lv_tree_sucs));
FUNCIÓN MEG_FNC_SELECT_CODE_SUC
FUNCTION meg_fnc_select_code_suc( pv_code_suc IN meg_sucs.suc$cod$v%TYPE ) RETURN NUMBER IS ln_respuesta NUMBER; lv_code_suc meg_sucs.suc$cod$v%TYPE; BEGIN ln_respuesta := 0; lv_code_suc := null;
84
BEGIN SELECT suc$cod$v INTO lv_code_suc FROM meg_sucs WHERE UPPER(RTRIM(suc$cod$v)) = UPPER(RTRIM(pv_code_suc)); IF lv_code_suc IS NOT NULL THEN ln_respuesta := 1; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN ln_respuesta := 0; WHEN OTHERS THEN ln_respuesta := 0; END; RETURN ln_respuesta; END meg_fnc_select_code_suc;
FUNCIÓN MEG_FNC_PAR_INFO_TREE
FUNCTION meg_fnc_par_info_tree( pc_id_par meg_pars.par$id$c%TYPE ) RETURN VARCHAR2 IS lv_tree_info_pars VARCHAR2(20000); ln_num_regs NUMBER := 0; CURSOR cursor_par IS SELECT TRIM(par$nom$v) AS nomb, par$id$c AS id FROM meg_pars WHERE pad$id$c = pc_id_par; BEGIN lv_tree_info_pars := '['; BEGIN FOR record_par IN cursor_par LOOP lv_tree_info_pars := TRIM(lv_tree_info_pars) || '{"id":"' || RTRIM(LTRIM(record_par.id)) || '","text":"' || RTRIM(LTRIM(record_par.nomb)) || '","leaf":false},'; ln_num_regs := ln_num_regs + 1; END LOOP; IF ln_num_regs > 0 THEN lv_tree_info_pars := SUBSTR(lv_tree_info_pars, 0, ( LENGTH(lv_tree_info_pars) - 1) ); lv_tree_info_pars := TRIM(lv_tree_info_pars) || ']'; ELSE lv_tree_info_pars := '[{}]'; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN lv_tree_info_pars := '[{}]'; WHEN OTHERS THEN lv_tree_info_pars := '[{}]'; END; RETURN RTRIM(LTRIM(lv_tree_info_pars)); END meg_fnc_par_info_tree;
85
FUNCIÓN MEG_FNC_SEEK_GRID_CLIS
FUNCTION meg_fnc_seek_grid_clis ( pv_cod meg_clis.cli$cod$v%TYPE, pv_doc meg_clis.cli$num$ide$v%TYPE, pv_nam meg_clis.cli$nom$v%TYPE ) RETURN VARCHAR2 IS pi_cursor_sql integer; pi_execute_sql integer; pv_cad_exec varchar2(1000); pr_clis meg_clis%ROWTYPE; pv_json_grd_clis VARCHAR(20000); pn_tot_reg_clis NUMBER(3, 0) := 0; BEGIN BEGIN pv_cad_exec := 'SELECT cli$id$c, cli$cod$v, cli$num$ide$v, cli$nom$v FROM meg_clis WHERE cli$est$c = ''0'' AND cli$cod$v LIKE ''%' || pv_cod || '%'' AND cli$num$ide$v LIKE ''%' || pv_doc || '%'' AND cli$nom$v LIKE ''%' || pv_nam || '%'''; pi_cursor_sql := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( pi_cursor_sql, pv_cad_exec, DBMS_SQL.NATIVE ); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 1, pr_clis.cli$id$c, 10); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 2, pr_clis.cli$cod$v, 10); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 3, pr_clis.cli$num$ide$v, 13); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 4, pr_clis.cli$nom$v, 150); pi_execute_sql := DBMS_SQL.EXECUTE ( pi_cursor_sql ); LOOP EXIT WHEN DBMS_SQL.FETCH_ROWS( pi_cursor_sql ) = 0; DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 1, pr_clis.cli$id$c); DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 2, pr_clis.cli$cod$v); DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 3, pr_clis.cli$num$ide$v); DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 4, pr_clis.cli$nom$v); pv_json_grd_clis := TRIM(pv_json_grd_clis) || '{"id":"' || pr_clis.cli$id$c || '","code":"' || pr_clis.cli$cod$v || '","doc":"' || pr_clis.cli$num$ide$v || '","name":"' || pr_clis.cli$nom$v || '"},'; pn_tot_reg_clis := pn_tot_reg_clis + 1; END LOOP; DBMS_SQL.CLOSE_CURSOR( pi_cursor_sql ); IF pn_tot_reg_clis > 0 THEN pv_json_grd_clis := SUBSTR(pv_json_grd_clis, 0, (LENGTH(pv_json_grd_clis) - 1) ); pv_json_grd_clis := '{"tot_clis":' ||pn_tot_reg_clis || ',"dat_clis":[' || pv_json_grd_clis || ']}'; ELSE pv_json_grd_clis := '{"tot_clis":0,"dat_clis":[{}]}'; END IF; EXCEPTION WHEN OTHERS THEN pv_json_grd_clis := '{"tot_clis":0,"dat_clis":[{}]}'; END; RETURN TRIM(pv_json_grd_clis); END meg_fnc_seek_grid_clis;
86
FUNCIÓN MEG_FNC_SEEK_GRID_EMPS
FUNCTION meg_fnc_seek_grid_emps ( pv_cod meg_emps.emp$cod$v%TYPE, pv_doc meg_emps.emp$num$doc$v%TYPE, pv_nam meg_emps.emp$nomb$v%TYPE ) RETURN VARCHAR2 IS pi_cursor_sql integer; pi_execute_sql integer; pv_cad_exec varchar2(1000); pr_emps meg_emps%ROWTYPE; pv_json_grd_emps VARCHAR(20000); pn_tot_reg_emps NUMBER(3, 0) := 0; BEGIN BEGIN pv_cad_exec := 'SELECT emp$id$c, emp$cod$v, emp$num$doc$v, emp$nomb$v FROM meg_emps WHERE emp$est$c = ''0'' AND emp$cod$v LIKE ''%' || pv_cod || '%'' AND emp$num$doc$v LIKE ''%' || pv_doc || '%'' AND emp$nomb$v LIKE ''%' || pv_nam || '%'''; pi_cursor_sql := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( pi_cursor_sql, pv_cad_exec, DBMS_SQL.NATIVE ); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 1, pr_emps.emp$id$c,10); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 2, pr_emps.emp$cod$v,10); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 3, pr_emps.emp$num$doc$v,13); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 4, pr_emps.emp$nomb$v,150); pi_execute_sql := DBMS_SQL.EXECUTE ( pi_cursor_sql ); LOOP EXIT WHEN DBMS_SQL.FETCH_ROWS( pi_cursor_sql ) = 0; DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 1, pr_emps.emp$id$c); DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 2, pr_emps.emp$cod$v); DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 3, pr_emps.emp$num$doc$v); DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 4, pr_emps.emp$nomb$v); pv_json_grd_emps := TRIM(pv_json_grd_emps) || '{"id":"' || pr_emps.emp$id$c || '","code":"' || pr_emps.emp$cod$v || '","doc":"' || pr_emps.emp$num$doc$v || '","name":"' || pr_emps.emp$nomb$v || '"},'; pn_tot_reg_emps := pn_tot_reg_emps + 1; END LOOP; DBMS_SQL.CLOSE_CURSOR( pi_cursor_sql ); IF pn_tot_reg_emps > 0 THEN pv_json_grd_emps := SUBSTR(pv_json_grd_emps, 0, (LENGTH(pv_json_grd_emps) - 1) ); pv_json_grd_emps := '{"tot_emps":' ||pn_tot_reg_emps || ',"dat_emps":[' || pv_json_grd_emps || ']}'; ELSE pv_json_grd_emps := '{"tot_emps":0,"dat_emps":[{}]}'; END IF;
87
EXCEPTION WHEN OTHERS THEN pv_json_grd_emps := '{"tot_emps":0,"dat_emps":[{}]}'; END; RETURN TRIM(pv_json_grd_emps); END meg_fnc_seek_grid_emps;
FUNCIÓN MEG_FNC_GRIDS_EMPS_ROLS
FUNCTION meg_fnc_grids_emps_rols ( pv_rol_id meg_rols.rol$id$c%TYPE, pc_filtro NUMBER ) RETURN VARCHAR2 IS pi_cursor_sql integer; pi_execute_sql integer; pv_cad_exec varchar2(1000); pr_emps meg_emps%ROWTYPE; pv_json_grd_emps VARCHAR(20000); pn_tot_reg_emps NUMBER(3, 0) := 0; BEGIN BEGIN IF pc_filtro = 1 THEN pv_cad_exec := 'SELECT emp$id$c, emp$cod$v, emp$nomb$v FROM meg_emps WHERE rol$id$c = ''' || pv_rol_id || ''''; ELSE IF LENGTH(TRIM(pv_rol_id)) = 0 THEN pv_cad_exec := 'SELECT emp$id$c, emp$cod$v, emp$nomb$v FROM meg_emps'; ELSE pv_cad_exec := 'SELECT emp$id$c, emp$cod$v, emp$nomb$v FROM meg_emps WHERE rol$id$c <> ''' || pv_rol_id || ''' OR rol$id$c IS NULL'; END IF; END IF; pi_cursor_sql := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( pi_cursor_sql, pv_cad_exec, DBMS_SQL.NATIVE ); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 1, pr_emps.emp$id$c, 10); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 2, pr_emps.emp$cod$v, 10); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 3, pr_emps.emp$nomb$v, 150); pi_execute_sql := DBMS_SQL.EXECUTE ( pi_cursor_sql ); LOOP EXIT WHEN DBMS_SQL.FETCH_ROWS( pi_cursor_sql ) = 0; DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 1, pr_emps.emp$id$c); DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 2, pr_emps.emp$cod$v); DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 3, pr_emps.emp$nomb$v); pv_json_grd_emps := TRIM(pv_json_grd_emps) || '{"id":"' || pr_emps.emp$id$c || '","code":"' || pr_emps.emp$cod$v || '","name":"' || pr_emps.emp$nomb$v || '"},'; pn_tot_reg_emps := pn_tot_reg_emps + 1; END LOOP; DBMS_SQL.CLOSE_CURSOR( pi_cursor_sql );
88
IF pn_tot_reg_emps > 0 THEN pv_json_grd_emps := SUBSTR(pv_json_grd_emps, 0, ( LENGTH(pv_json_grd_emps) - 1) ); pv_json_grd_emps := CASE WHEN pc_filtro = 1 THEN '{"emps_rol":' ||pn_tot_reg_emps || ',"dat_rol":[' || pv_json_grd_emps || ']}' ELSE '{"tot_emps":' ||pn_tot_reg_emps || ',"dat_emps":[' || pv_json_grd_emps || ']}' END; ELSE pv_json_grd_emps := CASE WHEN pc_filtro = 1 THEN '{"emps_rol":0,"dat_rol":[]}' ELSE '{"tot_emps":0,"dat_emps":[]}' END; END IF; EXCEPTION WHEN OTHERS THEN dbms_output.put_line( SQLCODE || ' - ' || SQLERRM); pv_json_grd_emps := CASE WHEN pc_filtro = 1 THEN '{"emps_rol":0,"dat_rol":[]}' ELSE '{"tot_emps":0,"dat_emps":[]}' END; END; RETURN TRIM(pv_json_grd_emps); END meg_fnc_grids_emps_rols;
FUNCIÓN MEG_FNC_SEEK_GRID_PRODS
FUNCTION meg_fnc_seek_grid_prods ( pv_code meg_ext_prods.prod$cod$v%TYPE, pv_name meg_ext_prods.prod$desc$v%TYPE, pn_row_init NUMBER, pn_row_cant NUMBER ) RETURN VARCHAR2 IS pi_cursor_sql INTEGER; pi_execute_sql INTEGER; pn_tot_sel NUMBER(6) := 0; pv_cad_exec varchar2(1000); pr_prods meg_prods%ROWTYPE; pv_json_grd_prods VARCHAR2(32767); pn_tot_reg_prods NUMBER(3, 0) := 0; pn_paga_iva NUMBER(1) := 0; BEGIN BEGIN ------ Para calcular el total de Registros a Paginar ----- pv_cad_exec := 'SELECT MAX(ROWNUM) AS row$total$n FROM meg_prods WHERE prod$cod$v LIKE ''%' || pv_code || '%'' AND prod$nom$v LIKE ''%' || pv_name || '%'''; pi_cursor_sql := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( pi_cursor_sql, pv_cad_exec, DBMS_SQL.NATIVE ); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 1, pn_tot_sel); pi_execute_sql := DBMS_SQL.EXECUTE ( pi_cursor_sql ); LOOP
89
EXIT WHEN DBMS_SQL.FETCH_ROWS( pi_cursor_sql ) = 0; DBMS_SQL.COLUMN_VALUE(pi_cursor_sql, 1, pn_tot_sel); END LOOP; DBMS_SQL.CLOSE_CURSOR( pi_cursor_sql ); ------- El SELECT que corresponde a la Página que voy a mostrar ----- pi_cursor_sql := 0; pi_execute_sql := 0; pv_cad_exec := ''; pv_cad_exec := 'SELECT prod$id$c, prod$cod$v, prod$nom$v, prod$stock$n, prod$prec$1$n, iva$calc$b FROM ( SELECT prd_ord.*, ROWNUM row$num$n FROM ( SELECT prod$id$c, CASE WHEN NVL( LENGTH( TRIM(prod$cod$v) ), 0) = 0 THEN '' '' ELSE TRIM(prod$cod$v) END AS prod$cod$v, CASE WHEN NVL( LENGTH( TRIM(prod$desc$v) ), 0) = 0 THEN TRIM( REPLACE(prod$nom$v, ''"'') ) ELSE TRIM( REPLACE(prod$desc$v, ''"'') ) END AS prod$nom$v, NVL( prod$cant$bod$n, 0.00 ) AS prod$stock$n, NVL( prod$prec$1$n, 0.00 ) AS prod$prec$1$n, 1 AS iva$calc$b FROM meg_prods WHERE prod$cod$v LIKE ''%' || pv_code || '%'' AND prod$nom$v LIKE ''%' || pv_name || '%'' ORDER BY prod$cod$v ) prd_ord WHERE ROWNUM <= ' || ( pn_row_init + pn_row_cant ) || ' ) WHERE row$num$n > ' || pn_row_init ; pi_cursor_sql := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( pi_cursor_sql, pv_cad_exec, DBMS_SQL.NATIVE ); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 1, pr_prods.prod$id$c, 10 ); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 2, pr_prods.prod$cod$v, 15 ); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 3, pr_prods.prod$desc$v, 150 ); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 4, pr_prods.prod$cant$bod$n ); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 5, pr_prods.prod$prec$1$n); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 6, pn_paga_iva ); pi_execute_sql := DBMS_SQL.EXECUTE ( pi_cursor_sql ); LOOP EXIT WHEN DBMS_SQL.FETCH_ROWS( pi_cursor_sql ) = 0; DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 1, pr_prods.prod$id$c ); DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 2, pr_prods.prod$cod$v ); DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 3, pr_prods.prod$desc$v); DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 4, pr_prods.prod$cant$bod$n ); DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 5, pr_prods.prod$prec$1$n ); DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 6, pn_paga_iva ); pv_json_grd_prods := TRIM(pv_json_grd_prods) || '{"id":"' || TRIM(pr_prods.prod$id$c) || '","code":"' || TRIM(pr_prods.prod$cod$v) || '","name":"' || TRIM(pr_prods.prod$desc$v) || '","precio":' || TRIM( TO_CHAR( pr_prods.prod$prec$1$n, '999999990.99') ) || ',"stock":' || TRIM( TO_CHAR( pr_prods.prod$cant$bod$n, '999999990.99') ) || ',"ivaP":' || CASE WHEN pn_paga_iva = 1
90
THEN 'true' ELSE 'false' END || '},'; END LOOP; DBMS_SQL.CLOSE_CURSOR( pi_cursor_sql ); IF pn_tot_sel > 0 THEN pv_json_grd_prods := SUBSTR(pv_json_grd_prods, 0, ( LENGTH(pv_json_grd_prods) - 1) ); pv_json_grd_prods := '{"success":true,"total":' || pn_tot_sel || ',"data":[' || TRIM(pv_json_grd_prods) || ']}'; ELSE pv_json_grd_prods := '{"success":false,"tot_prods":0,"dat_prods":[{}]}'; END IF; EXCEPTION WHEN OTHERS THEN dbms_output.put_line( SQLCODE || ' -> ' || sqlerrm ); pv_json_grd_prods := '{"success":false,"tot_prods":0,"dat_prods":[{}]}'; END; RETURN TRIM(pv_json_grd_prods); END meg_fnc_seek_grid_prods;
FUNCIÓN MEG_FNC_ACT_COM
FUNCTION meg_fnc_act_com_combo RETURN VARCHAR2 IS lv_cmb_act_com VARCHAR2(10000); ln_act_com_regs NUMBER(3) := 0; CURSOR cursor_act_com IS SELECT act_com$id$c, act_com$nom$v FROM meg_act_com ORDER BY act_com$nom$v; BEGIN lv_cmb_act_com := '{"data" : ['; BEGIN FOR act_com_record IN cursor_act_com LOOP lv_cmb_act_com := lv_cmb_act_com || '{"ActComID": "' || act_com_record.act_com$id$c || '", "ActComName": "' || act_com_record.act_com$nom$v || '"},'; ln_act_com_regs := ln_act_com_regs + 1; END LOOP; IF ln_act_com_regs > 0 THEN lv_cmb_act_com := SUBSTR(lv_cmb_act_com, 0,( LENGTH(lv_cmb_act_com) - 1) ); END IF; lv_cmb_act_com := lv_cmb_act_com || ']}'; EXCEPTION WHEN NO_DATA_FOUND THEN lv_cmb_act_com := '{"data" : []}'; WHEN OTHERS THEN lv_cmb_act_com := '{"data" : []}'; END; RETURN RTRIM(LTRIM(lv_cmb_act_com)); END meg_fnc_act_com_combo;
91
FUNCIÓN MEG_FNC_SELECT_CLIS
FUNCTION meg_fnc_select_clis( pc_id_cli IN meg_clis.cli$id$c%TYPE, pv_code_cli OUT meg_clis.cli$cod$v%TYPE, pc_tip_cli OUT meg_clis.cli$tip$cli$c%TYPE, pc_tip_ide_cli OUT meg_clis.cli$tip$ide$c%TYPE, pv_num_ide_cli OUT meg_clis.cli$num$ide$v%TYPE, pv_nom_cli OUT meg_clis.cli$nom$v%TYPE, pv_contac OUT meg_clis.cli$contac$v%TYPE, pv_dir_cli OUT meg_clis.cli$dir$v%TYPE, pv_tel_cli OUT meg_clis.cli$tel$v%TYPE, pv_fax_cli OUT meg_clis.cli$fax$v%TYPE, pc_est_civ_cli OUT meg_clis.cli$est$civ$c%TYPE, pv_mail_cli OUT meg_clis.cli$mail$v%TYPE, pc_pass_cli OUT meg_clis.cli$pass$c%TYPE, pd_desd_cli OUT VARCHAR2, pc_sexo_cli OUT meg_clis.cli$sexo$c%TYPE, pc_prof_id_cli OUT meg_clis.prof$id$c%TYPE, pv_prof_nom_cli OUT meg_profs.prof$nom$v%TYPE, pc_act_com_cli OUT meg_clis.act_com$id$c%TYPE, pv_act_com_nom_cli OUT meg_act_com.act_com$nom$v%TYPE, pc_zon_cli OUT meg_clis.zon$id$c%TYPE, pv_zon_nom_cli OUT meg_zons.zon$nom$v%TYPE, pc_emp_cli OUT meg_clis.emp$id$c%TYPE, pv_emp_nom_cli OUT meg_emps.emp$nomb$v%TYPE, pd_fec_nac_cli OUT VARCHAR2, pv_pag_web_cli OUT meg_clis.cli$pag$web$v%TYPE, pc_rec_mail_cli OUT meg_clis.cli$rec$mail$v%TYPE, pc_est_cli OUT meg_clis.cli$est$c%TYPE ) RETURN NUMBER IS ln_respuesta NUMBER; BEGIN ln_respuesta := 0; BEGIN SELECT CASE WHEN clis.cli$cod$v IS NULL THEN ' ' ELSE clis.cli$cod$v END, CASE WHEN clis.cli$tip$cli$c IS NULL THEN ' ' ELSE clis.cli$tip$cli$c END, CASE WHEN clis.cli$tip$ide$c IS NULL THEN ' ' ELSE clis.cli$tip$ide$c END, CASE WHEN clis.cli$num$ide$v IS NULL THEN ' ' ELSE clis.cli$num$ide$v END, CASE WHEN clis.cli$nom$v IS NULL THEN ' ' ELSE clis.cli$nom$v END, CASE WHEN clis.cli$contac$v IS NULL THEN ' ' ELSE clis.cli$contac$v END, CASE WHEN clis.cli$dir$v IS NULL THEN ' ' ELSE clis.cli$dir$v END, CASE WHEN clis.cli$tel$v IS NULL THEN ' ' ELSE clis.cli$tel$v END, CASE WHEN clis.cli$fax$v IS NULL THEN ' ' ELSE clis.cli$fax$v END, CASE WHEN clis.cli$est$civ$c IS NULL THEN ' ' ELSE clis.cli$est$civ$c END, CASE WHEN clis.cli$mail$v IS NULL THEN ' ' ELSE clis.cli$mail$v END, CASE WHEN clis.cli$pass$c IS NULL THEN ' ' ELSE clis.cli$pass$c END,
92
CASE WHEN TO_CHAR(clis.cli$desd$d,'DD/MM/YYYY') IS NULL THEN ' ' ELSE TO_CHAR(clis.cli$desd$d,'DD/MM/YYYY') END, CASE WHEN clis.cli$sexo$c IS NULL THEN ' ' ELSE clis.cli$sexo$c END, CASE WHEN prof.prof$id$c IS NULL THEN ' ' ELSE prof.prof$id$c END, CASE WHEN prof.prof$nom$v IS NULL THEN ' ' ELSE prof.prof$nom$v END, CASE WHEN act_com.act_com$id$c IS NULL THEN ' ' ELSE act_com.act_com$id$c END, CASE WHEN act_com.act_com$nom$v IS NULL THEN ' ' ELSE act_com.act_com$nom$v END, CASE WHEN zon.zon$id$c IS NULL THEN ' ' ELSE zon.zon$id$c END, CASE WHEN zon.zon$nom$v IS NULL THEN ' ' ELSE zon.zon$nom$v END, CASE WHEN clis.emp$id$c IS NULL THEN ' ' ELSE clis.emp$id$c END, CASE WHEN emp.emp$nomb$v IS NULL THEN ' ' ELSE emp.emp$nomb$v END, CASE WHEN TO_CHAR(clis.cli$fec$nac$d,'DD/MM/YYYY') IS NULL THEN ' ' ELSE TO_CHAR(clis.cli$fec$nac$d,'DD/MM/YYYY') END, CASE WHEN clis.cli$pag$web$v IS NULL THEN ' ' ELSE clis.cli$pag$web$v END, CASE WHEN clis.cli$rec$mail$v IS NULL THEN ' ' ELSE clis.cli$rec$mail$v END, CASE WHEN clis.cli$est$c IS NULL THEN ' ' ELSE clis.cli$est$c END,1 INTO pv_code_cli, pc_tip_cli, pc_tip_ide_cli, pv_num_ide_cli, pv_nom_cli, pv_contac, pv_dir_cli, pv_tel_cli, pv_fax_cli, pc_est_civ_cli, pv_mail_cli, pc_pass_cli, pd_desd_cli, pc_sexo_cli, pc_prof_id_cli, pv_prof_nom_cli, pc_act_com_cli, pv_act_com_nom_cli, pc_zon_cli, pv_zon_nom_cli, pc_emp_cli, pv_emp_nom_cli, pd_fec_nac_cli, pv_pag_web_cli, pc_rec_mail_cli, pc_est_cli, ln_respuesta FROM meg_clis clis, meg_profs prof, meg_act_com act_com, meg_zons zon, meg_emps emp WHERE clis.cli$id$c = pc_id_cli AND clis.prof$id$c = prof.prof$id$c(+) and clis.act_com$id$c = act_com.act_com$id$c(+) and clis.zon$id$c = zon.zon$id$c (+) and clis.emp$id$c = emp.emp$id$c (+); EXCEPTION WHEN NO_DATA_FOUND THEN ln_respuesta := 0; WHEN OTHERS THEN ln_respuesta := 0; END; RETURN ln_respuesta; END meg_fnc_select_clis;
FUNCIÓN MEG_FNC_TAREAS_PRIOR_COMBO
FUNCTION meg_fnc_tareas_prior_combo RETURN VARCHAR2 IS lv_cmb_tars VARCHAR2(10000); ln_tars_regs NUMBER(3) := 0;
93
CURSOR cursor_tar IS SELECT par$id$c, par$nom$v FROM meg_pars WHERE pad$id$c = '0000000014'; BEGIN lv_cmb_tars := '{"data" : ['; BEGIN FOR tar_record IN cursor_tar LOOP lv_cmb_tars := lv_cmb_tars || '{"ParID": "' || tar_record.par$id$c || '", "ParName": "' || tar_record.par$nom$v || '"},'; ln_tars_regs := ln_tars_regs + 1; END LOOP; IF ln_tars_regs > 0 THEN lv_cmb_tars := SUBSTR(lv_cmb_tars, 0,( LENGTH(lv_cmb_tars) - 1) ); END IF; lv_cmb_tars := lv_cmb_tars || ']}'; EXCEPTION WHEN NO_DATA_FOUND THEN lv_cmb_tars := '{"data" : []}'; WHEN OTHERS THEN lv_cmb_tars := '{"data" : []}'; END; RETURN RTRIM(LTRIM(lv_cmb_tars)); END meg_fnc_tareas_prior_combo;
FUNCIÓN MEG_FNC_SELECT_EMPS
FUNCTION meg_fnc_select_emps( pc_id_emp IN meg_emps.emp$id$c%TYPE, pv_cod_emp OUT meg_emps.emp$cod$v%TYPE, pc_tip_cod_emp OUT meg_emps.emp$tip$doc$c%TYPE, pv_num_doc_emp OUT meg_emps.emp$num$doc$v%TYPE, pv_nom_emp OUT meg_emps.emp$nomb$v%TYPE, pv_dir_emp OUT meg_emps.emp$dir$v%TYPE, pd_fec_nac_emp OUT varchar2, pv_telf_emp OUT meg_emps.emp$telf$v%TYPE, pv_mail_emp OUT meg_emps.emp$mail$v%TYPE, pc_sexo_emp OUT meg_emps.emp$sexo$c%TYPE, pc_est_civ_emp OUT meg_emps.emp$est$civ$c%TYPE, pn_car_fam_emp OUT meg_emps.emp$carg$fam$n%TYPE, pv_cuen_banc_emp OUT meg_emps.emp$cuen$banc$v%TYPE, pv_clave_emp OUT meg_emps.emp$clave$v%TYPE, pc_bloq_emp OUT meg_emps.emp$bloq$c%TYPE, pc_dept_id_emp OUT meg_emps.dept$id$c%TYPE, pv_dept_name_emp OUT meg_depts.dept$nom$v%TYPE, pc_zon_id_emp OUT meg_emps.zon$id$c%TYPE, pv_zon_name_emp OUT meg_zons.zon$nom$v%TYPE, pc_prof_id_emp OUT meg_emps.prof$id$c%TYPE, pv_prof_name_emp OUT meg_profs.prof$nom$v%TYPE, pc_rol_id_emp OUT meg_emps.rol$id$c%TYPE, pv_rol_name_emp OUT meg_rols.rol$nom$v%TYPE, pc_est OUT meg_emps.emp$est$c%TYPE )
94
RETURN NUMBER IS ln_respuesta NUMBER; BEGIN ln_respuesta := 0; BEGIN select CASE WHEN emps.emp$cod$v IS NULL THEN ' ' ELSE emps.emp$cod$v END As emp$cod$v, CASE WHEN emps.emp$tip$doc$c IS NULL THEN ' ' ELSE emps.emp$tip$doc$c END As emp$tip$doc$c, CASE WHEN emps.emp$num$doc$v IS NULL THEN ' ' ELSE emps.emp$num$doc$v END As emp$num$doc$v, CASE WHEN emps.emp$nomb$v IS NULL THEN ' ' ELSE emps.emp$nomb$v END As emp$nomb$v, CASE WHEN emps.emp$dir$v IS NULL THEN ' ' ELSE emps.emp$dir$v END As emp$dir$v, CASE WHEN TO_CHAR(emps.emp$fec$nac$d,'DD/MM/YYYY') IS NULL THEN ' ' ELSE TO_CHAR(emps.emp$fec$nac$d,'DD/MM/YYYY')END As emp$fec$nac$d, CASE WHEN emps.emp$telf$v IS NULL THEN ' ' ELSE emps.emp$telf$v END As emp$telf$v, CASE WHEN emps.emp$mail$v IS NULL THEN ' ' ELSE emps.emp$mail$v END As emp$mail$v, CASE WHEN emps.emp$sexo$c IS NULL THEN ' ' ELSE emps.emp$sexo$c END As emp$sexo$c, CASE WHEN emps.emp$est$civ$c IS NULL THEN ' ' ELSE emps.emp$est$civ$c END AS emp$est$civ$c, CASE WHEN emps.emp$carg$fam$n IS NULL THEN 0 ELSE emps.emp$carg$fam$n END AS emp$carg$fam$n, CASE WHEN emps.emp$cuen$banc$v IS NULL THEN ' ' ELSE emps.emp$cuen$banc$v END As emp$cuen$banc$v, CASE WHEN emps.emp$clave$v IS NULL THEN ' ' ELSE emps.emp$clave$v END As emp$clave$v, CASE WHEN emps.emp$bloq$c IS NULL THEN ' ' ELSE emps.emp$bloq$c END As emp$bloq$c, CASE WHEN emps.dept$id$c IS NULL THEN ' ' ELSE emps.dept$id$c END As dept$id$c, CASE WHEN depts.dept$nom$v IS NULL THEN ' ' ELSE depts.dept$nom$v END As dept$nom$v, CASE WHEN emps.zon$id$c IS NULL THEN ' ' ELSE emps.zon$id$c END As zon$id$c, CASE WHEN zons.zon$nom$v IS NULL THEN ' ' ELSE zons.zon$nom$v END As zon$nom$v, CASE WHEN emps.prof$id$c IS NULL THEN ' ' ELSE emps.prof$id$c END As prof$id$c, CASE WHEN profs.prof$nom$v IS NULL THEN ' ' ELSE profs.prof$nom$v END As prof$nom$v, CASE WHEN emps.rol$id$c IS NULL THEN ' ' ELSE emps.rol$id$c END As rol$id$c, CASE WHEN rols.rol$nom$v IS NULL THEN ' ' ELSE rols.rol$nom$v END As rol$nom$v, CASE WHEN emps.emp$est$c IS NULL THEN ' ' ELSE emps.emp$est$c
95
END As emp$est$c,1 INTO pv_cod_emp, pc_tip_cod_emp, pv_num_doc_emp, pv_nom_emp, pv_dir_emp,pd_fec_nac_emp, pv_telf_emp, pv_mail_emp,pc_sexo_emp, pc_est_civ_emp, pn_car_fam_emp, pv_cuen_banc_emp,pv_clave_emp, pc_bloq_emp,pc_dept_id_emp, pv_dept_name_emp, pc_zon_id_emp, pv_zon_name_emp,pc_prof_id_emp, pv_prof_name_emp,pc_rol_id_emp, pv_rol_name_emp, pc_est, ln_respuesta FROM meg_emps emps,meg_depts depts,meg_zons zons, meg_profs profs,meg_rols rols WHERE emps.emp$id$c = pc_id_emp AND emps.dept$id$c= depts.dept$id$c(+)AND emps.zon$id$c = zons.zon$id$c(+)AND emps.prof$id$c= profs.prof$id$c(+)AND emps.rol$id$c = rols.rol$id$c(+); EXCEPTION WHEN NO_DATA_FOUND THEN ln_respuesta := 0; WHEN OTHERS THEN ln_respuesta := 0; END; RETURN ln_respuesta; END meg_fnc_select_emps;
FUNCIÓN MEG_FNC_SEEK_GRID_COTZS
FUNCTION meg_fnc_seek_grid_cotzs (pv_numero meg_cotzs.cotz$num$c%TYPE, pv_fecha meg_cotzs.cotz$fec$d%TYPE, pv_nom_cliente meg_clis.cli$nom$v%TYPE, pv_nota meg_cotzs.cotz$nota$v%TYPE) RETURN VARCHAR2 IS pi_cursor_sql integer; pi_execute_sql integer; pv_cad_exec varchar2(1000); pr_cotz meg_cotzs%ROWTYPE; pr_clis meg_clis%ROWTYPE; pv_json_grd_cotz VARCHAR(20000); pn_tot_reg_cotz NUMBER(3, 0) := 0; BEGIN BEGIN pv_cad_exec := 'SELECT cotz$id$c, cotz$num$c, cotz$fec$d, clis.cli$nom$v, cotz$nota$v FROM meg_cotzs cotz, meg_clis clis
96
WHERE cotz$est$c = ''0'' AND cotz.cli$id$c=clis.cli$id$c AND cotz$num$c LIKE ''%' || pv_numero || '%'' AND cotz$fec$d LIKE ''%' || pv_fecha || '%'' AND clis.cli$nom$v LIKE ''%' || pv_nom_cliente || '%'' AND cotz$nota$v LIKE ''%' || pv_nota || '%'''; pi_cursor_sql := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( pi_cursor_sql, pv_cad_exec, DBMS_SQL.NATIVE ); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 1, pr_cotz.cotz$id$c,10); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 2, pr_cotz.cotz$num$c,10); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 3, pr_cotz.cotz$fec$d); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 4, pr_clis.cli$nom$v,150); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 5, pr_cotz.cotz$nota$v,1024); pi_execute_sql := DBMS_SQL.EXECUTE ( pi_cursor_sql ); LOOP EXIT WHEN DBMS_SQL.FETCH_ROWS( pi_cursor_sql ) = 0; DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 1, pr_cotz.cotz$id$c); DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 2, pr_cotz.cotz$num$c); DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 3, pr_cotz.cotz$fec$d); DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 4, pr_clis.cli$nom$v); DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 5, pr_cotz.cotz$nota$v); pv_json_grd_cotz := TRIM(pv_json_grd_cotz) || '{"id":"' || pr_cotz.cotz$id$c || '","numero":"' || pr_cotz.cotz$num$c || '","fecha":"' || TO_CHAR(pr_cotz.cotz$fec$d,'DD/MM/YYYY') || '","cliente":"' || pr_clis.cli$nom$v || '","detalle":"' || pr_cotz.cotz$nota$v || '"},'; pn_tot_reg_cotz := pn_tot_reg_cotz + 1; END LOOP; DBMS_SQL.CLOSE_CURSOR( pi_cursor_sql ); IF pn_tot_reg_cotz > 0 THEN pv_json_grd_cotz := SUBSTR(pv_json_grd_cotz, 0, (LENGTH(pv_json_grd_cotz) - 1) ); pv_json_grd_cotz := '{"tot_cotz":' ||pn_tot_reg_cotz || ',"dat_cotz":[' || pv_json_grd_cotz || ']}'; ELSE pv_json_grd_cotz := '{"tot_cotz":0,"dat_cotz":[{}]}'; END IF; EXCEPTION WHEN OTHERS THEN pv_json_grd_cotz := '{"tot_cotz":0,"dat_cotz":[{}]}'; END; RETURN TRIM(pv_json_grd_cotz); END meg_fnc_seek_grid_cotzs;
FUNCIÓN MEG_FNC_SELECT_TAREAS
FUNCTION meg_fnc_select_tareas(pc_id in meg_tars.tar$id$c%TYPE, pv_cod out meg_tars.tar$cod$v%TYPE, pc_emp_id out meg_emps.emp$id$c%TYPE, pv_emp_name out meg_emps.emp$nomb$v%TYPE, pv_asun out meg_tars.tar$asun$v%TYPE, pd_fec_ini out varchar2, pd_fec_fin out varchar2,
97
pc_prior_id out meg_pars.par$id$c%TYPE, pv_prior_name out meg_pars.par$nom$v%TYPE, pn_comp out meg_tars.tar$comp$n%TYPE, pd_avis out varchar2, pv_nota out meg_tars.tar$nota$v%TYPE, pc_tip_id out meg_pars.par$id$c%TYPE, pv_tip_name out meg_pars.par$nom$v%TYPE) RETURN NUMBER IS ln_respuesta NUMBER; BEGIN ln_respuesta := 0; BEGIN SELECT CASE WHEN tar.tar$cod$v IS NULL THEN ' ' ELSE tar.tar$cod$v END, CASE WHEN tar.emp$id$c IS NULL THEN ' ' ELSE emp.emp$id$c END, CASE WHEN emp.emp$nomb$v IS NULL THEN ' ' ELSE emp.emp$nomb$v END, CASE WHEN tar.tar$asun$v IS NULL THEN ' ' ELSE tar.tar$asun$v END, CASE WHEN TO_CHAR(tar.tar$ini$d,'DD/MM/YYYY') IS NULL THEN ' ' ELSE TO_CHAR(tar.tar$ini$d,'DD/MM/YYYY') END, CASE WHEN TO_CHAR(tar.tar$fin$d,'DD/MM/YYYY') IS NULL THEN ' ' ELSE TO_CHAR(tar.tar$fin$d,'DD/MM/YYYY') END, CASE WHEN prio.par$id$c IS NULL THEN ' ' ELSE prio.par$id$c END, CASE WHEN prio.par$nom$v IS NULL THEN ' ' ELSE prio.par$nom$v END, CASE WHEN TO_CHAR(tar.tar$avis$d,'DD/MM/YYYY') IS NULL THEN ' ' ELSE TO_CHAR(tar.tar$avis$d,'DD/MM/YYYY') END, CASE WHEN tar.tar$nota$v IS NULL THEN ' ' ELSE tar.tar$nota$v END, CASE WHEN tip.par$id$c IS NULL THEN ' ' ELSE tip.par$id$c END, CASE WHEN tip.par$nom$v IS NULL THEN ' ' ELSE tip.par$nom$v END,1 INTO pv_cod, pc_emp_id, pv_emp_name, pv_asun, pd_fec_ini, pd_fec_fin, pc_prior_id, pv_prior_name, pn_comp, pd_avis, pv_nota, pc_tip_id, pv_tip_name, ln_respuesta FROM meg_tars tar, meg_emps emp, meg_pars prio, meg_pars tip WHERE tar.tar$id$c = pc_id AND tar.emp$id$c = emp.emp$id$c(+) AND tar.prior$id$c = prio.par$id$c(+) AND tar.tip$id$c = tip.par$id$c(+); EXCEPTION WHEN NO_DATA_FOUND THEN ln_respuesta := 0; WHEN OTHERS THEN ln_respuesta := 0; END; RETURN ln_respuesta; END meg_fnc_select_tareas;
FUNCIÓN MEG_FNC_SEEK_GRID_TARS
FUNCTION meg_fnc_seek_grid_tars ( pv_cod meg_tars.tar$cod$v%TYPE,
98
pv_asun meg_tars.tar$asun$v%TYPE, pv_emp_name meg_emps.emp$nomb$v%TYPE) RETURN VARCHAR2 IS pi_cursor_sql integer; pi_execute_sql integer; pv_cad_exec varchar2(1000); pr_tars meg_tars%ROWTYPE; pr_emps meg_emps%ROWTYPE; pv_json_grd_tars VARCHAR(30000); pn_tot_reg_tars NUMBER(3, 0) := 0; BEGIN BEGIN pv_cad_exec := 'SELECT tar.tar$id$c, tar.tar$cod$v, tar.tar$asun$v, emp.emp$nomb$v FROM meg_tars tar, meg_emps emp WHERE tar$est$c = ''0'' AND tar.emp$id$c = emp.emp$id$c AND tar$cod$v LIKE ''%' || pv_cod || '%'' AND tar$asun$v LIKE ''%' || pv_asun || '%'' AND emp.emp$nomb$v LIKE ''%' || pv_emp_name || '%'''; pi_cursor_sql := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( pi_cursor_sql, pv_cad_exec, DBMS_SQL.NATIVE ); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 1, pr_tars.tar$id$c, 10); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 2, pr_tars.tar$cod$v, 10); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 3, pr_tars.tar$asun$v,150); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 4, pr_emps.emp$nomb$v, 150); pi_execute_sql := DBMS_SQL.EXECUTE ( pi_cursor_sql ); LOOP EXIT WHEN DBMS_SQL.FETCH_ROWS( pi_cursor_sql ) = 0; DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 1, pr_tars.tar$id$c); DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 2, pr_tars.tar$cod$v); DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 3, pr_tars.tar$asun$v); DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 4,pr_emps.emp$nomb$v); pv_json_grd_tars := TRIM(pv_json_grd_tars) || '{"id":"' || pr_tars.tar$id$c || '","code":"' || pr_tars.tar$cod$v || '","asun":"' || pr_tars.tar$asun$v || '","emp":"' || pr_emps.emp$nomb$v || '"},'; pn_tot_reg_tars := pn_tot_reg_tars + 1; END LOOP; DBMS_SQL.CLOSE_CURSOR( pi_cursor_sql ); IF pn_tot_reg_tars > 0 THEN pv_json_grd_tars := SUBSTR(pv_json_grd_tars, 0, ( LENGTH(pv_json_grd_tars) - 1) ); pv_json_grd_tars := '{"tot_tars":' ||pn_tot_reg_tars || ',"dat_tars":[' || pv_json_grd_tars || ']}'; ELSE pv_json_grd_tars := '{"tot_tars":0,"dat_tars":[{}]}'; END IF; EXCEPTION WHEN OTHERS THEN pv_json_grd_tars := '{"tot_tars":0,"dat_tars":[{}]}'; END;
99
RETURN TRIM(pv_json_grd_tars); END meg_fnc_seek_grid_tars;
FUNCIÓN MEG_FNC_SELECT_INCIDS
FUNCTION meg_fnc_select_incids( pc_id IN meg_incids.incid$id$c%TYPE, pv_code OUT meg_incids.incid$cod$v%TYPE, pc_tipo OUT meg_incids.incid$tp$c%TYPE, pd_fec OUT VARCHAR2, pv_cli_cod OUT meg_clis.cli$cod$v%TYPE, pv_cli_name OUT meg_clis.cli$nom$v%TYPE, pc_prio_id OUT meg_pars.par$id$c%TYPE, pv_prio_name OUT meg_pars.par$nom$v%TYPE, pc_stat_id OUT meg_pars.par$id$c%TYPE, pv_stat_name OUT meg_pars.par$nom$v%TYPE, pc_num_id OUT meg_vents.vent$id$c%TYPE, pc_num_fact OUT meg_vents.vent$num$c%TYPE, pc_emp_cod OUT meg_emps.emp$cod$v%TYPE, pv_emp_name OUT meg_emps.emp$nomb$v%TYPE, pv_desc OUT meg_incids.incid$desc$v%TYPE, pv_det OUT meg_incids.incid$det$v%TYPE, pc_est OUT meg_incids.incid$est$c%TYPE ) RETURN NUMBER IS ln_respuesta NUMBER; BEGIN ln_respuesta := 0; BEGIN SELECT CASE WHEN incids.incid$cod$v IS NULL THEN ' ' ELSE incids.incid$cod$v END, CASE WHEN incids.incid$tp$c IS NULL THEN ' ' ELSE incids.incid$tp$c END, CASE WHEN TO_CHAR(incids.incid$fec$d,'DD/MM/YYYY') IS NULL THEN ' ' ELSE TO_CHAR(incids.incid$fec$d,'DD/MM/YYYY') END, CASE WHEN clis.cli$cod$v IS NULL THEN ' ' ELSE clis.cli$cod$v END, CASE WHEN clis.cli$nom$v IS NULL THEN ' ' ELSE clis.cli$nom$v END, CASE WHEN prio.par$id$c IS NULL THEN ' ' ELSE prio.par$id$c END, CASE WHEN prio.par$nom$v IS NULL THEN ' ' ELSE prio.par$nom$v END, CASE WHEN stat.par$id$c IS NULL THEN ' ' ELSE stat.par$id$c END, CASE WHEN stat.par$nom$v IS NULL THEN ' ' ELSE stat.par$nom$v END, CASE WHEN venta.vent$id$c IS NULL THEN ' ' ELSE venta.vent$id$c END, CASE WHEN venta.vent$num$c IS NULL THEN ' ' ELSE venta.vent$num$c END, CASE WHEN emps.emp$cod$v IS NULL THEN ' ' ELSE emps.emp$cod$v END, CASE WHEN emps.emp$nomb$v IS NULL THEN ' ' ELSE emps.emp$nomb$v END, CASE WHEN incids.incid$desc$v IS NULL THEN ' ' ELSE incids.incid$desc$v END,
100
CASE WHEN incids.incid$det$v IS NULL THEN ' ' ELSE incids.incid$det$v END, CASE WHEN incids.incid$est$c IS NULL THEN ' ' ELSE incids.incid$est$c END,1 INTO pv_code, pc_tipo, pd_fec, pv_cli_cod, pv_cli_name, pc_prio_id, pv_prio_name, pc_stat_id, pv_stat_name, pc_num_id, pc_num_fact, pc_emp_cod, pv_emp_name, pv_desc, pv_det, pc_est, ln_respuesta FROM meg_incids incids, meg_clis clis, meg_emps emps, meg_pars prio, meg_pars stat, meg_vents venta WHERE incids.incid$id$c = pc_id AND incids.cli$id$c = clis.cli$id$c(+) AND incids.emp$id$c = emps.emp$id$c(+) AND incids.prio$id$c = prio.par$id$c (+)AND incids.fact$id$c = venta.vent$id$c (+) AND incids.stat$id$c = stat.par$id$c (+); EXCEPTION WHEN NO_DATA_FOUND THEN ln_respuesta := 0; WHEN OTHERS THEN ln_respuesta := 0; END; RETURN ln_respuesta; END meg_fnc_select_incids;
FUNCIÓN MEG_FNC_INCIDS_COMBO
FUNCTION meg_fnc_incids_combo RETURN VARCHAR2 IS lv_cmb_incids VARCHAR2(10000); ln_incids_regs NUMBER(3) := 0; CURSOR cursor_incid IS SELECT incid$id$c, incid$desc$v FROM meg_incids ORDER BY incid$det$v; BEGIN lv_cmb_incids := '{"data" : ['; BEGIN FOR incid_record IN cursor_incid LOOP lv_cmb_incids := lv_cmb_incids || '{"IncidID": "' || incid_record.incid$id$c || '", "IncidNota": "' || incid_record.incid$desc$v || '"},'; ln_incids_regs := ln_incids_regs + 1; END LOOP; IF ln_incids_regs > 0 THEN lv_cmb_incids := SUBSTR(lv_cmb_incids,0,( LENGTH(lv_cmb_incids) – 1) ); END IF; lv_cmb_incids := lv_cmb_incids || ']}'; EXCEPTION WHEN NO_DATA_FOUND THEN lv_cmb_incids := '{"data" : []}';
101
WHEN OTHERS THEN lv_cmb_incids := '{"data" : []}'; END; RETURN RTRIM(LTRIM(lv_cmb_incids)); END meg_fnc_incids_combo;
FUNCIÓN MEG_FNC_SELECT_CODE_INCID
FUNCTION meg_fnc_select_code_incid( pv_code_incid IN meg_incids.incid$cod$v%TYPE ) RETURN NUMBER IS ln_respuesta NUMBER; lv_code_incid meg_incids.incid$cod$v%TYPE; BEGIN ln_respuesta := 0; lv_code_incid := null; BEGIN SELECT incid$cod$v INTO lv_code_incid FROM meg_incids WHERE UPPER(RTRIM(incid$cod$v)) = UPPER(RTRIM(pv_code_incid)); IF lv_code_incid IS NOT NULL THEN ln_respuesta := 1; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN ln_respuesta := 0; WHEN OTHERS THEN ln_respuesta := 0; END; RETURN ln_respuesta; END meg_fnc_select_code_incid;
FUNCIÓN MEG_FNC_INCID_PRIOR_COMBO
FUNCTION meg_fnc_incid_prior_combo RETURN VARCHAR2 IS lv_cmb_incid VARCHAR2(10000); ln_incid_regs NUMBER(3) := 0; CURSOR cursor_incid IS SELECT par$id$c, par$nom$v FROM meg_pars WHERE pad$id$c = '0000000010'; BEGIN lv_cmb_incid := '{"data" : ['; BEGIN FOR incid_record IN cursor_incid LOOP lv_cmb_incid := lv_cmb_incid || '{"prioID": "' || incid_record.par$id$c || '", "prioName": "' || incid_record.par$nom$v || '"},'; ln_incid_regs := ln_incid_regs + 1; END LOOP; IF ln_incid_regs > 0 THEN
102
lv_cmb_incid := SUBSTR(lv_cmb_incid, 0,( LENGTH(lv_cmb_incid) - 1)); END IF; lv_cmb_incid := lv_cmb_incid || ']}'; EXCEPTION WHEN NO_DATA_FOUND THEN lv_cmb_incid := '{"data" : []}'; WHEN OTHERS THEN lv_cmb_incid := '{"data" : []}'; END; RETURN RTRIM(LTRIM(lv_cmb_incid)); END meg_fnc_incid_prior_combo;
FUNCIÓN MEG_FNC_INCID_STAT_COMBO
FUNCTION meg_fnc_incid_stat_combo RETURN VARCHAR2 IS lv_cmb_incid VARCHAR2(10000); ln_incid_regs NUMBER(3) := 0; CURSOR cursor_incid_tip IS SELECT par$id$c, par$nom$v FROM meg_pars WHERE pad$id$c = '0000000003' AND par$val$v < '3' ORDER BY par$id$c; BEGIN lv_cmb_incid := '{"data" : ['; BEGIN FOR incid_record_tip IN cursor_incid_tip LOOP lv_cmb_incid := lv_cmb_incid || '{"statID": "' || incid_record_tip.par$id$c || '", "statName": "' || incid_record_tip.par$nom$v || '"},'; ln_incid_regs := ln_incid_regs + 1; END LOOP; IF ln_incid_regs > 0 THEN lv_cmb_incid := SUBSTR(lv_cmb_incid, 0,( LENGTH(lv_cmb_incid) -1) ); END IF; lv_cmb_incid := lv_cmb_incid || ']}'; EXCEPTION WHEN NO_DATA_FOUND THEN lv_cmb_incid := '{"data" : []}'; WHEN OTHERS THEN lv_cmb_incid := '{"data" : []}'; END; RETURN RTRIM(LTRIM(lv_cmb_incid)); END meg_fnc_incid_stat_combo;
FUNCIÓN MEG_FNC_SELECT_CTZS_CAB
FUNCTION meg_fnc_select_ctzs_cab (pc_id_cotz IN meg_cotzs.cotz$id$c%TYPE, pc_num_cotz OUT meg_cotzs.cotz$num$c%TYPE, pc_id_cli OUT meg_cotzs.cli$id$c%TYPE, pc_cod_cli OUT meg_clis.cli$cod$v%TYPE,
103
pv_name_cli OUT meg_clis.cli$nom$v%TYPE, pc_id_emp OUT meg_cotzs.emp$id$c%TYPE, pv_cod_emp OUT meg_emps.emp$cod$v%TYPE, pv_name_emp OUT meg_emps.emp$nomb$v%TYPE, pd_fec_cotz OUT varchar2, pd_valid_cotz OUT varchar2, pv_detalle_cotz OUT meg_cotzs.cotz$nota$v%TYPE, pn_subt_cotz OUT meg_cotzs.cotz$subt$n%TYPE, pn_val_desc_cotz OUT meg_cotzs.cotz$val$desc$n%TYPE, pn_val_iva_cotz OUT meg_cotzs.cotz$val$imp$n%TYPE, pn_val_tot_cotz OUT meg_cotzs.cotz$tot$n%TYPE, pc_est_ctz OUT meg_cotzs.cotz$est$c%TYPE) RETURN NUMBER IS ln_respuesta NUMBER; BEGIN ln_respuesta := 0; BEGIN select CASE WHEN ctz.cotz$num$c IS NULL THEN ' ' ELSE ctz.cotz$num$c END As cotz$num$c, CASE WHEN ctz.cli$id$c IS NULL THEN ' ' ELSE ctz.cli$id$c END As cli$id$c, CASE WHEN clis.cli$cod$v IS NULL THEN ' ' ELSE clis.cli$cod$v END As cli$cod$v, CASE WHEN clis.cli$nom$v IS NULL THEN ' ' ELSE clis.cli$nom$v END As cli$nom$v, CASE WHEN ctz.emp$id$c IS NULL THEN ' ' ELSE ctz.emp$id$c END As emp$id$c, CASE WHEN emps.emp$cod$v IS NULL THEN ' ' ELSE emps.emp$cod$v END As emp$cod$v, CASE WHEN emps.emp$nomb$v IS NULL THEN ' ' ELSE emps.emp$nomb$v END As emp$nomb$v, CASE WHEN TO_CHAR(ctz.cotz$fec$d,'DD/MM/YYYY') IS NULL THEN ' ' ELSE TO_CHAR(ctz.cotz$fec$d,'DD/MM/YYYY')END As cotz$fec$d, CASE WHEN TO_CHAR(ctz.cotz$valz$d,'DD/MM/YYYY') IS NULL THEN ' ' ELSE TO_CHAR(ctz.cotz$valz$d,'DD/MM/YYYY')END As cotz$valz$d, CASE WHEN ctz.cotz$nota$v IS NULL THEN ' ' ELSE ctz.cotz$nota$v END As cotz$nota$v, CASE WHEN ctz.cotz$subt$n IS NULL THEN 0.00 ELSE ctz.cotz$subt$n END AS cotz$subt$n, CASE WHEN ctz.cotz$val$desc$n IS NULL THEN 0.00 ELSE ctz.cotz$val$desc$n END AS cotz$val$desc$n, CASE WHEN ctz.cotz$val$imp$n IS NULL THEN 0.00 ELSE ctz.cotz$val$imp$n END As cotz$val$imp$n, CASE WHEN ctz.cotz$tot$n IS NULL THEN 0.00 ELSE ctz.cotz$tot$n END As cotz$tot$n, CASE WHEN ctz.cotz$est$c IS NULL THEN ' ' ELSE ctz.cotz$est$c END As cotz$est$c, 1 INTO pc_num_cotz, pc_id_cli, pc_cod_cli, pv_name_cli,
104
pc_id_emp, pv_cod_emp, pv_name_emp, pd_fec_cotz, pd_valid_cotz, pv_detalle_cotz, pn_subt_cotz, pn_val_desc_cotz, pn_val_iva_cotz, pn_val_tot_cotz, pc_est_ctz, ln_respuesta FROM meg_cotzs ctz INNER JOIN meg_clis clis on clis.cli$id$c = ctz.cli$id$c INNER JOIN meg_emps emps on emps.emp$id$c = ctz.emp$id$c WHERE ctz.cotz$id$c = pc_id_cotz; EXCEPTION WHEN NO_DATA_FOUND THEN ln_respuesta := 0; WHEN OTHERS THEN ln_respuesta := 0; END; RETURN ln_respuesta; END meg_fnc_select_ctzs_cab;
FUNCIÓN MEG_FNC_SELECT_CTZS_DET
FUNCTION meg_fnc_select_ctzs_det( pc_ctz_id meg_dets_cotzs.cotz$id$c%TYPE) RETURN VARCHAR2 IS pi_cursor_sql integer; pi_execute_sql integer; pv_cad_exec varchar2(1000);
pr_cotzdet meg_dets_cotzs%ROWTYPE; pr_prod meg_prods%ROWTYPE; pv_json_grd_cotz VARCHAR(20000); pn_tot_reg_cotz NUMBER(3,0) := 0; BEGIN BEGIN pv_cad_exec := 'SELECT ctzdet.prod$id$c, prod.prod$cod$v, prod.prod$nom$v, ctzdet.det_cotz$cant$n, ctzdet.det_cotz$prec$n, ctzdet.det_cotz$subt$n, ctzdet.det_cotz$val$desc$n, ctzdet.det_cotz$val$imp$n, ctzdet.det_cotz$tot$n FROM meg_dets_cotzs ctzdet INNER JOIN meg_cotzs ctz on ctz.cotz$id$c = ctzdet.cotz$id$c INNER JOIN meg_prods prod on prod.prod$id$c = ctzdet.prod$id$c WHERE ctzdet.cotz$id$c = pc_ctz_id'; pi_cursor_sql := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( pi_cursor_sql, pv_cad_exec, DBMS_SQL.NATIVE ); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql,1,pr_cotzdet.prod$id$c,10); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 2, pr_prod.prod$cod$v,15); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 3, pr_prod.prod$nom$v,150); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 4, pr_cotzdet.det_cotz$cant$n,8.2);
105
DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 5, pr_cotzdet.det_cotz$prec$n,8.2); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 6, pr_cotzdet.det_cotz$subt$n,8.2); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 7, pr_cotzdet.det_cotz$val$desc$n,8.2); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 8, pr_cotzdet.det_cotz$val$imp$n,8.2); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 9, pr_cotzdet.det_cotz$tot$n,8.2); pi_execute_sql := DBMS_SQL.EXECUTE (pi_cursor_sql); LOOP EXIT WHEN DBMS_SQL.FETCH_ROWS( pi_cursor_sql ) = 0; DBMS_SQL.COLUMN_VALUE(pi_cursor_sql, 1, pr_cotzdet.prod$id$c); DBMS_SQL.COLUMN_VALUE(pi_cursor_sql, 2, pr_prod.prod$cod$v); DBMS_SQL.COLUMN_VALUE(pi_cursor_sql, 3, pr_prod.prod$nom$v); DBMS_SQL.COLUMN_VALUE(pi_cursor_sql, 4, pr_cotzdet.det_cotz$cant$n); DBMS_SQL.COLUMN_VALUE(pi_cursor_sql, 5, pr_cotzdet.det_cotz$prec$n); DBMS_SQL.COLUMN_VALUE(pi_cursor_sql, 6, pr_cotzdet.det_cotz$subt$n); DBMS_SQL.COLUMN_VALUE(pi_cursor_sql, 7, pr_cotzdet.det_cotz$val$desc$n); DBMS_SQL.COLUMN_VALUE(pi_cursor_sql, 8, pr_cotzdet.det_cotz$val$imp$n); DBMS_SQL.COLUMN_VALUE(pi_cursor_sql, 9, pr_cotzdet.det_cotz$tot$n); pv_json_grd_cotz := TRIM(pv_json_grd_cotz) || '{"detID":"' || pr_cotzdet.prod$id$c || '","codeProd":"' || pr_prod.prod$cod$v || '","descProd":"' || pr_prod.prod$nom$v || '","cantProd":"' || pr_cotzdet.det_cotz$cant$n || '","precProd":"' || pr_cotzdet.det_cotz$prec$n || '","subtProd":"' || pr_cotzdet.det_cotz$subt$n || '","dctoProd":"' || pr_cotzdet.det_cotz$val$desc$n || '","ivaProd":"' || pr_cotzdet.det_cotz$val$imp$n || '","totProd":"' || pr_cotzdet.det_cotz$tot$n || '"},'; pn_tot_reg_cotz := pn_tot_reg_cotz + 1; END LOOP; DBMS_SQL.CLOSE_CURSOR( pi_cursor_sql ); IF pn_tot_reg_cotz > 0 THEN pv_json_grd_cotz := SUBSTR(pv_json_grd_cotz, 0, (LENGTH(pv_json_grd_cotz) - 1) ); pv_json_grd_cotz := '{"tot_prods":' ||pn_tot_reg_cotz || ',"dat_prods":[' || pv_json_grd_cotz || ']}'; ELSE pv_json_grd_cotz := '{"tot_prods":0,"dat_prods":[{}]}'; END IF; EXCEPTION WHEN OTHERS THEN pv_json_grd_cotz := '{"tot_prods":0,"dat_prods":[{}]}'; END;
106
RETURN TRIM(pv_json_grd_cotz); END meg_fnc_select_ctzs_det;
FUNCIÓN MEG_PRC_LOGIN_CLI_WEB
PROCEDURE meg_prc_login_cli_web ( pv_usr_cli IN meg_clis.cli$cod$v%TYPE, pc_id_cli OUT meg_clis.cli$id$c%TYPE, pv_cod_cli OUT meg_clis.cli$cod$v%TYPE, pv_pass_cli OUT meg_clis.cli$pass$c%TYPE, pv_nom_cli OUT meg_clis.cli$nom$v%TYPE ) IS BEGIN BEGIN SELECT cli$id$c, cli$cod$v, cli$nom$v, cli$pass$c INTO pc_id_cli, pv_cod_cli, pv_nom_cli, pv_pass_cli FROM meg_clis WHERE UPPER(cli$cod$v) = UPPER(pv_usr_cli); EXCEPTION WHEN NO_DATA_FOUND THEN pv_cod_cli := NULL; WHEN OTHERS THEN pv_cod_cli := NULL; END; END meg_prc_login_cli_web;
FUNCIÓN MEG_FNC_SEEK_GRID_VENTAS
FUNCTION meg_fnc_seek_grid_ventas (pv_num meg_vents.vent$num$c%TYPE, pd_fec meg_vents.vent$fec$d%TYPE, pv_nom_cli meg_clis.cli$nom$v%TYPE, pv_nom_emp meg_emps.emp$nomb$v%TYPE) RETURN VARCHAR2 IS pi_cursor_sql integer; pi_execute_sql integer; pv_cad_exec varchar2(1000); pr_vnt meg_vents%ROWTYPE; pr_clis meg_clis%ROWTYPE; pr_emps meg_emps%ROWTYPE; pv_json_grd_vnt VARCHAR(31000); pn_tot_reg_vnt NUMBER(3, 0) := 0; BEGIN BEGIN pv_cad_exec :='SELECT vnt.vent$id$c, vnt.vent$num$c, vnt.vent$fec$d, clis.cli$nom$v, emp.emp$nomb$v FROM meg_vents vnt, meg_clis clis, meg_emps emp WHERE vnt.vent$est$c = ''0'' AND vnt.vent$id$c between ''0000000001'' and ''0000000020''AND vnt.cli$id$c = clis.cli$id$c (+) AND vnt.emp$id$c = emp.emp$id$c (+) AND vnt.vent$num$c LIKE ''%' || pv_num || '%'' AND
107
vnt.vent$fec$d LIKE ''%' || pd_fec || '%'' AND clis.cli$nom$v LIKE ''%' || pv_nom_cli || '%'' AND emp.emp$nomb$v LIKE ''%' || pv_nom_emp || '%'''; pi_cursor_sql := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE( pi_cursor_sql, pv_cad_exec, DBMS_SQL.NATIVE); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 1, pr_vnt.vent$id$c,10); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 2, pr_vnt.vent$num$c,10); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 3, pr_vnt.vent$fec$d); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 4, pr_clis.cli$nom$v,150); DBMS_SQL.DEFINE_COLUMN( pi_cursor_sql, 5, pr_emps.emp$nomb$v,150); pi_execute_sql := DBMS_SQL.EXECUTE ( pi_cursor_sql ); LOOP EXIT WHEN DBMS_SQL.FETCH_ROWS( pi_cursor_sql ) = 0; DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 1, pr_vnt.vent$id$c); DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 2, pr_vnt.vent$num$c); DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 3, pr_vnt.vent$fec$d); DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 4, pr_clis.cli$nom$v); DBMS_SQL.COLUMN_VALUE( pi_cursor_sql, 5, pr_emps.emp$nomb$v); pv_json_grd_vnt:=TRIM(pv_json_grd_vnt) || '{"id":"' || pr_vnt.vent$id$c || '","num":"' || pr_vnt.vent$num$c || '","fec":"' || TO_CHAR(pr_vnt.vent$fec$d,'DD/MM/YYYY')|| '","cli":"' || pr_clis.cli$nom$v || '","emp":"' || pr_emps.emp$nomb$v ||'"},'; pn_tot_reg_vnt := pn_tot_reg_vnt + 1; END LOOP; DBMS_SQL.CLOSE_CURSOR( pi_cursor_sql ); IF pn_tot_reg_vnt > 0 THEN pv_json_grd_vnt := SUBSTR(pv_json_grd_vnt, 0, ( LENGTH(pv_json_grd_vnt) - 1) ); pv_json_grd_vnt := '{"tot_vnt":' ||pn_tot_reg_vnt || ',"dat_vnt":[' || pv_json_grd_vnt || ']}'; ELSE pv_json_grd_vnt := '{"tot_vnt":0,"dat_vnt":[{}]}'; END IF; EXCEPTION WHEN OTHERS THEN pv_json_grd_vnt := '{"tot_vnt":0,"dat_vnt":[{}]}'; END; RETURN TRIM(pv_json_grd_vnt); END meg_fnc_seek_grid_ventas; END meg_pckg_select;
108
1.8.4. MEG_PCKG_UPDATE
Este paquete contendrá las funciones y procedimientos que permitirán
la consulta de los registros de todas las tablas del sistema MEG-
CRM.
A continuación se detallan las funciones del paquete
MEG_PCKG_UPDATE:
PROCEDIMIENTO ALMACENADO
DESCRIPCION
meg_fnc_recs_update Actualiza los registros de la tabla meg_recs.
meg_fnc_rols_update Actualiza los registros de la tabla meg_rols.
meg_fnc_zons_update Actualiza los registros de la tabla meg_zons.
meg_fnc_emps_update Actualiza los registros de la tabla meg_emps.
meg_fnc_depts_update Actualiza los registros de la tabla meg_depts.
meg_fnc_pars_update Actualiza los registros de la tabla meg_pars.
meg_fnc_profs_update Actualiza los registros de la tabla meg_profs.
meg_fnc_sucs_update Actualiza los registros de la tabla meg_sucs.
meg_fnc_clis_update Actualiza los registros de la tabla meg_clis.
meg_fnc_incids_bits_update Actualiza los registros de la tabla meg_incids_bits
FUNCIÓN MEG_FNC_RECS_UPDATE
ln_num_reg NUMBER := 0; BEGIN UPDATE meg_recs SET rec$nom$v = pv_nom, rec$tip$recr$v = pv_tip, rec$id$rec$id$c = pc_pad,
109
rec$fec$cre$d = pd_fec, rec$cre$por$v = pv_cre, rec$est$c = pc_est WHERE rec$id$c = pc_id; ln_num_reg := SQL%ROWCOUNT; RETURN(ln_num_reg);
FUNCIÓN MEG_FNC_ZONS_UPDATE
ln_num_reg NUMBER := 0; BEGIN UPDATE meg_zons SET zon$cod$v = pv_cod, zon$nom$v = pv_nom, pad$id$c = pc_padre_id, zon$fec$edt$d = SYSDATE, zon$edt$por$v = pv_user, zon$est$c = pc_est WHERE zon$id$c = pc_id; ln_num_reg := SQL%ROWCOUNT; RETURN ln_num_reg;
FUNCIÓN MEG_FNC_ROLS_UPDATE
ln_num_reg NUMBER := 0; BEGIN UPDATE meg_rols SET rol$nom$v = pv_nom, rol$cod$v = pv_code, rol$fec$edt$d = SYSDATE, rol$edt$por$v = pc_usr, rol$est$c = pc_est WHERE rol$id$c = pc_id;
/********* Insertando en la tabla de ROLES_RECURSOS los accesos*********/ seleccionados para ese rol ****/ IF pa_recs_id.COUNT > 0 THEN DELETE FROM meg_rols_recs WHERE rol$id$c = pc_id; FOR cont_recs IN 1 .. pa_recs_id.COUNT LOOP INSERT INTO meg_rols_recs( rol$id$c, rec$id$c, rol_rec$cre$por$v, rol_rec$fec$cre$d) VALUES( pc_id, pa_recs_id(cont_recs), pc_usr, SYSDATE ); END LOOP; END IF; /***** Actualizando en la tabla de EMPLEADOS el rol seleccionado para esos empleados *****/ UPDATE meg_emps SET rol$id$c = NULL, emp$edt$por$v = pc_usr, emp$fec$edt$d = SYSDATE WHERE rol$id$c = pc_id; IF pa_emps_id.COUNT > 0 THEN FOR cont_emps IN 1 .. pa_emps_id.COUNT LOOP
110
UPDATE meg_emps SET rol$id$c = pc_id, emp$edt$por$v = pc_usr, emp$fec$edt$d = SYSDATE WHERE emp$id$c = pa_emps_id( cont_emps ); END LOOP; END IF; ln_num_reg := SQL%ROWCOUNT; RETURN(ln_num_reg);
FUNCIÓN MEG_FNC_EMPS_UPDATE
ln_num_reg NUMBER := 0; BEGIN UPDATE meg_emps SET emp$cod$v = pv_cod, emp$tip$doc$c = pc_tip_cod, emp$num$doc$v = pv_num_doc, emp$nomb$v = pv_nom, emp$dir$v = pv_dir, emp$fec$nac$d = pd_fec_nac, emp$telf$v = pv_telf, emp$mail$v = pv_mail, emp$sexo$c = pc_sexo, emp$est$civ$c = pc_est_civ, emp$carg$fam$n = pn_car_fam, emp$cuen$banc$v = pv_cuen_banc, emp$clave$v = pv_clave, emp$bloq$c = pc_bloq, dept$id$c = pc_dept_id, zon$id$c = pc_zon_id, prof$id$c = pc_prof_id, rol$id$c = pc_rol_id, emp$fec$edt$d = SYSDATE, emp$edt$por$v = pv_user, emp$est$c = pc_estd WHERE emp$id$c = pc_id; ln_num_reg := SQL%ROWCOUNT; RETURN(ln_num_reg);
FUNCIÓN MEG_FNC_DEPTS_UPDATE ln_num_reg NUMBER := 0; BEGIN UPDATE meg_depts SET dept$cod$v = pv_cod, dept$nom$v = pv_nom, pad$id$c = pc_padre_id, dept$fec$edt$d = SYSDATE, dept$edt$por$v = pv_usr, dept$est$c = pc_est WHERE dept$id$c = pc_id; ln_num_reg := SQL%ROWCOUNT;
111
RETURN ln_num_reg; FUNCIÓN MEG_FNC_PARS_UPDATE
ln_num_reg NUMBER := 0; BEGIN UPDATE meg_pars SET par$cod$v = pv_cod, par$nom$v = pv_nom, par$val$v = pv_val, par$tip$v = pv_tip, par$id$par$id$c = pc_par_id, par$fec$edt$d = SYSDATE, par$edt$por$v = pv_usr, par$est$c = pc_est WHERE par$id$c = pc_id; ln_num_reg := SQL%ROWCOUNT; RETURN ln_num_reg;
FUNCIÓN MEG_FNC_PROFS_UPDATE ln_num_reg NUMBER := 0; BEGIN UPDATE meg_profs SET prof$cod$v = pv_cod, prof$nom$v = pv_nom, prof$fec$edt$d = SYSDATE, prof$edt$por$v = pv_usr, prof$est$c = pc_est WHERE prof$id$c = pc_id; ln_num_reg := SQL%ROWCOUNT; RETURN ln_num_reg;
FUNCIÓN MEG_FNC_SUCS_UPDATE ln_num_reg NUMBER := 0; BEGIN UPDATE meg_sucs SET suc$cod$v = pv_cod, suc$nom$v = pv_nom, suc$fec$edt$d = SYSDATE, suc$edt$por$v = pv_usr, suc$est$c = pc_est WHERE suc$id$c = pc_id; ln_num_reg := SQL%ROWCOUNT; RETURN ln_num_reg;
FUNCIÓN MEG_FNC_CLIS_UPDATE
ln_num_reg NUMBER := 0; BEGIN UPDATE meg_clis SET cli$cod$v = pv_cod,
112
cli$tip$cli$c = pc_tip_cli, cli$tip$ide$c = pc_tip_ide, cli$num$ide$v = pv_num_ide, cli$nom$v = pv_nom, cli$dir$v = pv_dir, cli$tel$v = pv_tel, cli$fax$v = pv_fax, cli$est$civ$c = pc_est_civ, cli$mail$v = pv_mail, cli$pass$c = pc_pass, cli$desd$d = pd_desd, cli$sexo$c = pc_sexo, prof$id$c = pc_prof_id, act$com$id$c = pc_act_com_id, zon$id$c = pc_zon_id, emp$id$c = pc_emp_id, cli$fec$nac$d = pd_fec_nac, cli$pag$web$v = pv_pag_web, cli$rec$mail$c = pc_rec_mail, cli$est$c = pc_est WHERE cli$id$c = pc_id; ln_num_reg := SQL%ROWCOUNT; RETURN ln_num_reg;
FUNCIÓN MEG_FNC_INCIDS_UPDATE
ln_num_reg NUMBER := 0; BEGIN UPDATE meg_clis SET cli$cod$v = pv_cod, cli$tip$cli$c = pc_tip_cli, cli$tip$ide$c = pc_tip_ide, cli$num$ide$v= pv_num_ide, cli$nom$v = pv_nom, cli$dir$v = pv_dir, cli$tel$v = pv_tel, cli$fax$v = pv_fax, cli$est$civ$c = pc_est_civ, cli$mail$v = pv_mail, cli$pass$c = pc_pass, cli$desd$d = pd_desd, cli$sexo$c = pc_sexo, prof$id$c = pc_prof_id, act$com$id$c= pc_act_com_id, zon$id$c = pc_zon_id, emp$id$c = pc_emp_id, cli$fec$nac$d = pd_fec_nac, cli$pag$web$v = pv_pag_web, cli$rec$mail$c= pc_rec_mail, cli$est$c = pc_est WHERE cli$id$c = pc_id; ln_num_reg := SQL%ROWCOUNT; RETURN ln_num_reg;
113
1.8.5. MEG_PCKG_FUNCTIONS
Este paquete contiene las funciones y procedimientos que se utilizan
en otros paquetes del sistema MEG-CRM.
A continuación se detallan las funciones del paquete
MEG_PCKG_FUNCTIONS:
PROCEDIMIENTO ALMACENADO
DESCRIPCION
meg_proc_send_mail Envía correos.
meg_proc_send_html_email Envìa correos html.
address_email Añade una dirección de correo.
send Envía correo del remitente.
meg_prc_check_stock
Chequea el stock de ventas
PROCEDIMIENTO MEG_PROC_SEND_MAIL ln_num_reg NUMBER := 0; BEGIN UPDATE meg_recs SET rec$nom$v = pv_nom, rec$tip$recr$v = pv_tip, rec$id$rec$id$c = pc_pad, rec$fec$cre$d = pd_fec, rec$cre$por$v = pv_cre, rec$est$c = pc_est WHERE rec$id$c = pc_id; ln_num_reg := SQL%ROWCOUNT; RETURN(ln_num_reg);
114
1.9. Codificación del desarrollo del Proyecto
1.9.1. Código en Java
1.9.1.1. Clases: Atributos
Las clases que contendrán la declaración y definición de los
atributos de un objeto son: megDepts, megIncidencias, megPars,
megProfs, megRoles, megSucs, megUser, megZonas.
1.9.1.2. Clases: Métodos
Los métodos que utilizarán los objetos de las clases serán:
megDeptsBD: selectDept, consulta de los registros; insertDept,
inserta un registro; updateDept, actualiza los registros
pertenecientes al usuario, a la fecha de modificación y el estado;
deleteDept, actualiza los campos pertenecientes al usuario, a la
fecha de eliminación y el estado; validaCodeDept, valida que no
existan códigos duplicados; comboDept, carga el combo; treeDept,
carga el árbol en la ventana.
megIncidenciasBD: insertIncidencia, inserta un registro.
megParsBD: selectPar, consulta de los registros; insertPar,
inserta un registro; updatePar, actualiza los registros
115
pertenecientes al usuario, a la fecha de modificación y el estado;
deletePar, actualiza los campos pertenecientes al usuario, a la
fecha de eliminación y el estado; validaCodePar, valida que no
existan códigos duplicados; comboPar, carga el combo; treePar,
carga el árbol en la ventana.
megProfsBD: selectProf, consulta de los registros; insertProf,
inserta un registro; updateProf, actualiza los registros
pertenecientes al usuario, a la fecha de modificación y el estado;
deleteProf, actualiza los campos pertenecientes al usuario, a la
fecha de eliminación y el estado; validaCodeProf, valida que no
existan códigos duplicados; comboProf, carga el combo; treeProf,
carga el árbol en la ventana.
megRolesBD: selectRol, consulta de los registros; insertRol,
inserta un registro; updateRol, actualiza los registros
pertenecientes al usuario, a la fecha de modificación y el estado;
deleteRol, actualiza los campos pertenecientes al usuario, a la
fecha de eliminación y el estado; validaCodeRol, valida que no
existan códigos duplicados; treeRolesPermisos, carga el árbol de
roles y permisos en la ventana; treeRoles, carga el árbol de roles
en la ventana.
megSeekBD: jSonClientes jSonEmpleados
116
megSucsBD: selectSuc, consulta de los registros; insertSuc,
inserta un registro; updateSuc, actualiza los registros
pertenecientes al usuario, a la fecha de modificación y el estado;
deleteSuc, actualiza los campos pertenecientes al usuario, a la
fecha de eliminación y el estado; validaCodeSuc, valida que no
existan códigos duplicados; treeSuc, carga el árbol de sucursales
en la ventana.
megUserBD: getUserBD
megZonasBD: selectZona, consulta de los registros; insertZona,
inserta un registro; updateZona, actualiza los registros
pertenecientes al usuario, a la fecha de modificación y el estado;
deleteZona, actualiza los campos pertenecientes al usuario, a la
fecha de eliminación y el estado; validaCodeZona, valida que no
existan códigos duplicados; comboZona, carga el combo; treeZona,
carga el árbol de sucursales en la ventana.
1.9.1.3. Conexión a la base de datos
megParmsBase: conexionBD, establece la conexión a la base de
datos; rollbackCloseConnection, deshace los cambios y cierra la
conexión a la base de datos.
117
1.9.2. Páginas creadas en Java (JSP)
cargarGrid: Carga el grid con los datos recuperados de la
consulta en la ventana de Bitácora de Clientes.
jsonCombos: Carga los combos que serán utilizados en varias
ventanas.
jsonTree: Carga los árboles que serán utilizados en varias ventanas.
logOut: Cierra la sesión
megDept: Recupera los datos ingesados en la ventana de
Mantenimientos de Departamentos.
megDesktop: Carga el html que invoca todas las funciones del java
script que contiene los módulos y al ambiente del sistema.
megIncidencias: Recupera los datos ingresados en la ventana de
Ingreso de Incidencias.
megPars: Recupera los datos ingresados en la ventana de
Mantenimiento de Parametros.
megProfs: Recupera los datos ingresados en la ventana de
Mantenimiento de Profesiones.
118
megRoles: Recupera los datos ingresados en la ventana de
Mantenimiento de Roles.
megSeekClientes: Recupera el parámetro por el cual se va a filtrar la
consulta en la ventana de Bitácora de Clientes.
megSeekEmps: Recupera el parámetro por el cual se va a filtrar la
consulta en la ventana de Bitácora de Empleados.
megSucs: Recupera los datos ingresados en la ventana de
Mantenimientos de Sucursales.
megValidaUsuario: Recupera el usuario y la clave de la ventana del
Login del sistema.
megZonas : Recupera los datos ingresados en la ventana de
Mantenimiento de Zonas.
1.9.3. Java Script
meg-fnc-modules: fn_seek_clis, dibuja la ventana de búsqueda de
clientes; fn_seek_emps, dibuja la ventana de búsqueda de
empleados.
119
meg-mant-modules: fn_mant_zonas, dibuja la ventana de
Mantenimiento de Zonas; fn_mant_roles, dibuja la ventana de
Mantenimiento de Roles; fn_mant_depts, dibuja la ventana de
Mantenimiento de Departamentos; fn_mant_pars, dibuja la ventana de
Mantenimiento de Parametros; fn_mant_profs, dibuja la ventana de
Mantenimiento de Profesiones; fn_mant_sucs, dibujaba la ventana de
Mantenimiento de Sucursales.
meg-inicial: En este java script se encontrarán las funciones que
dibujan las ventanas del sistema.
1.10. Instalación del FrameWork ExtJS.
Framework de javascript, basado originalmente en YUI, con pocas líneas
de código es posible realizar interfaces amigables para los usuarios. Es la
librería más avanzada para el desarrollo de aplicaciones con una
apariencia totalmente novedosa y una arquitectura flexible.
Pasos para la Instalación del FrameWork ExtJS.
Crear una carpeta llamada jmegCrm en la unidad de su preferencia, puede
ser la C: de su máquina.
C:\jmegCrm\
120
En esta carpeta se debe crear directorios para los archivos CSS,
JavaScript, JSP, Imagenes.
C:\ jmegCrm\ | |-- css | |-- jsp | |-- Images | |-- javaScript | |-- ext-3.0.0
El siguiente paso es descargar el Framework ExtJS y copiar solo los
archivos necesarios para que funcione. Esos archivos deben de estar en la
Carpeta C:\jmegCrm\ext-3.0.0 y son los siguientes: ext-all.js y ext-all-
debug.js. Además copiar las carpetas ADAPTER y RESOURCES y
pegarlas en la misma carpeta.
• ext-all.js: en este archivo se encuentran todos los widgets y
componentes del framework.
• Adapter: en esta carpeta se encuentran varias librerías como
prototype, jQuery, YUI y Ext JS.
• Resources: en esta carpeta se encuentran las imágenes y estilos
necesarios para los componentes del framework.
121
1.10.1. Importar el Framework en un HTML
Para importar el Framework a un documento HTML, es necesario
importar el estilo, el adapter y los componentes. A continuación se
muestran las respectivas rutas:
• ext-3.0.0/resources/css/ext-all.css
• ext-3.0.0/adapter/ext/ext-base.js
• ext-3.0.0/ext-all.js
Para importar los archivos mencionados lo hacemos de la siguiente
manera:
1. <link rel="stylesheet" type="text/css" href="../ext-
3.0.0/resources/css/ext-all.css" />
2. <script type="text/javascript" src="../ext-3.0.0/adapter/ext/ext-
base.js"></script>
3. <script type="text/javascript" src="../ext-3.0.0/ext-
all.js"></script>
En el Directorio raíz, es decir en jmegCrm se debe de crear una
página HTML que contenga la siguiente codificación, para este
proyecto es meg-login.html:
122
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=utf-8">
<title>Ingresar a megCRM - Universidad de Guayaquil</title>
<!--Libreria CSS de ext para que funcione el Framework -->
<link href="ext-3.0.0/resources/css/ext-all.css" type="text/css"
rel="stylesheet">
<!-- Fin de la invocación a las librerías ExtJS -->
<!-- Hoja de estilos de megCRM -->
< link href="css/megCss.css" type="text/css" rel="stylesheet">
<!-- Libreria JS de ext para que funcione el Framework -->
<script src="ext-3.0.0/adapter/ext/ext-base.js"
type="text/javascript"></script>
<script src="ext-3.0.0/ext-all.js" type="text/javascript"></script>
<!-- Fin de la invocación a las librerías -->
</head>
<body>
<!-- uso del JS que contiene la programación de la Plantilla
Ventana -->
<script type="text/javascript" src="javaScript/meg-
login.js"></script>
123
</body>
</html>
Para que el navegador sepa que va a utilizar codificación JavaScript
hay que escribir las etiquetas <SCRIPT> y se le especifica que tipo de
codigo es con el parámetro TYPE="text/javascript". Se puede poner
código entre las etiquetas <SCRIPT TYPE="text/javascript">
</SCRIPT> o en su defecto, crear un archivo como meg-login.js y
colocarlo en el Directorio JavaScript, para lo cual el navegador debe
saber donde esta ubicado el archivo JS a través del parametro SRC
(source).
1.11. Instalación de Oracle 10g
1.11.1. Requerminientos para la instalación
Oracle es exigente tanto en espacio físico como en memoria ram.
Requiere una buena cantidad de ram, 128Mb solamente para la Base
de Datos, obviamente si se instala en el mismo equipo de desarrollo
entonces se necesita mas memoria para las herramientas de
desarrollo.
124
En este sentido, con 256Mb se puede trabajar con la Base de Datos
arriba y la herramienta de desarrollo, aunque un poco lento.
Es recomendable tener 512Mb, para trabajar bien.
En cuanto a espacio en disco:
• Aproximadamente 1GB para oracle database (instalación
completa).
• Aproximadamente 1GB para oracle developer (instalación
completa).
1.11.2. Pasos para la instalación
MÉTODO DE INSTALACIÓN
125
TIPO DE INSTALACIÓN
SELECCIÓN DEL DIRECTORIO RAÍZ
126
REQUISITOS DE ORACLE
OPCIÓN DE CONFIGURACIÓN
127
CONFIGURACIÓN DE BASE DE DATOS
ESPECIFICAR OPCIONES DE CONFIGURACIÓN DE BASE DE DATOS
128
OPCIÓN DE GESTIÓN DE BASE DE DATOS
ESPECIFICAR OPCIÓN DE ALMACENAMIENTO DE BASE DE DATOS
129
OPCIONES DE COPIA DE SEGURIDAD Y RECUPERACIÓN
CONTRASEÑAS DE ESQUEMA DE BASE DE DATOS
130
RESUMEN
INSTALACIÓN DE ORACLE DATABASE
131
ASISTENTE DE CONFIGURACIÓN DE BASE DE DATOS
INFORMACIÓN DE LA BASE DE DATOS
132
GESTIÓN DE CONTRASEÑAS
FIN DE INSTALACIÓN
URL de Enterprise Manager Database Control - (orcl) :
http://localhost:1158/em.
133
Los archivos de configuración de la base de datos se han instalado en
C:\oracle\product\10.2.0 mientras que los demás componentes
seleccionados se han instalado en C:\oracle\product\10.2.0\db_1.
Hay que tener cuidado de no suprimir por accidente estos archivos de
configuración.
La dirección URL de iSQL*Plus es:
ttp://localhost:5560/isqlplus
La dirección URL de DBA de iSQL*Plus es:
http://localhost:5560/isqlplus/dba
ORACLE ENTERPRISE MANAGER
134
INSTANCIA DE BASE DE DATOS
Para editar los usuarios escogeremos la pestaña “Administración”. En
esta ventana se muestran varias opciones entre ellas: “Usuarios y
Privilegios”. Dentro de esta ventana se podrá administrar los
usuarios.
135
PESTAÑA DE ADMINISTRACIÓN
OPCIÓN DE “USUARIOS Y PRIVILEGIOS”
136
BUSCAR USUARIOS
EDITAR USUARIOS
Espacio de trabajo del iSQL Plus.
137
ESPACIO DE TRABAJO
1.12. Instalación y Configuración de Oracle Develop er
En esta opción debemos configurar el Servicio para las Herramientas de
Desarrollo, y encuentrar la BD.
138
GESTOR DE RED DE ORACLE
Pulsamos el botón ”Agregar” y se abre una ventana para que
podamos darle un nombre a nuestra conexión.
Para este caso escogimos el nombre de DESARROLLO .
139
ASISTENTE DE NOMBRE DE SERVICIO DE RED
Elegimos la opción TCP/IP (Protocolo Internet).
PROTOCOLO
Aquí escribimos el nombre de nuestra PC o su dirección IP (si no se
la saben pueden usar localhost ).
140
VALORES DEL PROTOCOLO
El nombre del SID de nuestra base de datos (ORCL)
SERVICIO
Lo siguiente es pulsar el botón PROBAR , para verificar que nuestra
configuración esta correcta.
141
PRUEBA
Al hacer la prueba, le realiza con el Usuario por defecto (SCOTT) y su
contraseña inicial (TIGER), si la misma esta bloqueada dará el error
en la prueba. Podemos cambiar el Usuario y contraseña de la Prueba
con el botón CAMBIAR CONEXIÓN .
PRUEBA DE CONEXIÓN
142
CAMBIAR CONEXIÓN
Pulsamos TERMINAR y nuestra configuración debe de mostrarse en
el GESTOR DE RED de Oracle.
CONFIGURACIÓN DE DIRECCIONES
143
Guardamos la configuración y ya la podremos usar para las
conexiones de desarrollo.
GUARDAR CONFIGURACION DE RED
1.13. Configuración del Centos 5.5
1.13.1. Requerimientos para la instalación
CentOS (Community ENTerprise Operating System) es un clon a nivel
binario de la distribución Linux Red Hat Enterprise Linux RHEL,
compilado por voluntarios a partir del código fuente.
Red Hat Enterprise Linux, o RHEL, es la versión comercial de la
conocida distribución de Red Hat. CentOS se basa en su código
fuente, creando una nueva distribución con prácticamente las mismas
características y funcionalidades y abierto al público.
El hardware recomendado para la instalación de Centos 5.5 es el
siguiente:
144
Memoria RAM : 192 MB (Minimo) .
Espacio en Disco Duro: 850 MB (Minimo) - 2 GB (Recomendado)
Procesador: Intel Pentium I/II/III/IV/Celeron, AMD K6/II/III, AMD Duron,
AMD Athlon/XP/MP.
1.13.2. Instalación de Centros 5.5
CONFIGURACIÓN DE CENTOS
CONFIGURACIÓN DE AUTENTICACIÓN
145
CONFIGURACIÓN DEL FIREWALL
DESHABILITAR EL FIREWALL
CONFIGURACIÓN DE RED
146
Para modificar la configuración de red en Centos 5.5 desde la consola
de comandos escribimos (con el acceso de root):
system-config-network
Y se mostrará esta ventana:
EDITAR DISPOSITIVO
Escogemos la tarjeta de red a modificar (por defecto la que tiene el
nombre de eth0) y pulsamos ENTER
SELECCIONAR DISPOSITIVO
Luego modificamos la configuración de eth0 (que por defecto es
DHCP) y le damos una IP fija de la red que estamos usando
147
(192.168.0.104), la mascara (255.255.255.0) y el Gateway (de nuevo
la IP del router 192.168.0.1). Pulsamos OK.
CONFIGURACIÓN
Regresamos a la Pantalla Anterior y esta vez nos situamos en el
botón SAVE y pulsamos ENTER
DISPOSITIVO AVANZADO
Regresaremos a la Pantalla de NETWORK CONFIGURATION y esta
vez escogeremos EDIT DNS CONFIGURATION.
148
EDITAR CONFIGURACIÓN DEL DNS
Aquí le daremos nombre a la PC (mail-srv) y el nombre que debería
tener el dominio (meg-crm.com).
Y ponemos en todo lo demás, DNS’s y DNS de Busqueda la IP del
Router (192.168.0.1). Pulsamos OK.
CONFIGURACIÓN DEL DNS
SERVICIOS DEL SISTEMA
149
SERVICIOS
CONSOLA PASO 1
CONSOLA PASO 2
CONSOLA PASO 3
150
CONSOLA PASO 4
CONSOLA PASO 5
151
CONSOLA PASO 6
CONSOLA PASO 7
152
CONSOLA PASO 8
CONSOLA PASO 9
153
CONSOLA PASO 10
CONSOLA PASO 11
154
1.13.3. Instalación de Oracle 10g en Linux Centos 5 .5
Para instalar Oracle 10g R2 en Linux debemos seguir los siguientes
pasos, ejecutando todas estos comandos de una terminal como root .
for i in binutils compat-db compat-gcc compat-gcc-c++ compat-
libstdc++ compat-libstdc++-devel control-center cpp gcc gcc-c++ gdb
glibc glibc-common glibc-devel gnome-libs glibc-headers glibc-
kernheaders libstdc++ libstdc++-devel libaio libai-devel make
openmotif pdksh setarch libXtst sysstat xscreensaver; do yum install $i
-y;done
TERMINAL
cat > /etc/hosts <<EOF 127.0.0.1 localhost.localdomain localhost $(ifconfig $(netstat -rn | grep "^0.0.0.0" | awk '{ print $NF }') |
155
grep "inet addr" | cut -f 2 -d':' | awk '{ print $1 }') $(cat /etc/sysconfig/network | grep HOSTNAME | sed 's/HOSTNAME\s*=\s*//' | sed 's/^\([^\.]*\).*/\1/') $(cat /etc/sysconfig/network | grep HOSTNAME | sed 's/HOSTNAME\s*=\s*//')
EOF echo "export ORACLE_HOSTNAME=$(cat /etc/sysconfig/network | grep HOSTNAME | sed 's/HOSTNAME\s*=\s*//')" >> /etc/profile
source /etc/profile /usr/sbin/groupadd oinstall /usr/sbin/groupadd dba /usr/sbin/useradd -g oinstall -G dba oracle cat /etc/passwd | cut -f 1 -d':' | grep nobody >/dev/null|| /usr/sbin/useradd nobody cat >> /etc/sysctl.conf <<EOF kernel.shmall = 2097152 kernel.shmmax = 2147483648 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 fs.file-max = 65536 net.ipv4.ip_local_port_range = 1024 65000 net.core.rmem_default = 262144 net.core.rmem_max = 262144 net.core.wmem_default = 262144 net.core.wmem_max = 262144 EOF /sbin/sysctl -p cat >> /etc/security/limits.conf <<EOF oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 EOF cat >> /etc/profile <<EOF if [ \$USER = "oracle" ]; then if [ \$SHELL = "/bin/ksh" ]; then ulimit -p 16384
156
ulimit -n 65536 else ulimit -u 16384 -n 65536 fi fi EOF
mkdir -p /oracle/ chown oracle.oinstall /oracle/ -R chmod 755 /oracle/
DESCARGAS
Para evitar que muestre alguna alerta por la Distribucion, tenemos
que editar el archivo /etc/redhat-release sacando previamente una
copia de respaldo.
cp /etc/redhat-release /etc/BCK_redhat-release vim /etc/redhat-release
Comentariamos la línea que allí se encuentra y escribimos esto:
#CentOS release 5.5 (Final) redhat-4 Guardamos los cambios y ejecutamos este comando en la terminal:
157
xhost +
Descargamnos el instalador desde la página web de Oracle teniendo
en cuenta la versión del Sistema Operativo (Linux x86 para Sistemas
Operativos de 32 bits)
http://www.oracle.com/technetwork/database/10201linuxsoft-
097986.html y lo guardamos en la ruta /usr/local/src/
DESCARGAR ORACLE 10g
Luego digitamos:
cd /home/oracle unzip 10201_database_linux32.zip
Este comando descomprimirá el Instalador de la Base de Datos y
creara una carpeta database en el directorio antes nombrado
(/home/oracle /database).
158
Luego escribimos en la terminal: su - oracle
Para cambiar de usuario y a continuación nos ubicamos donde se
descomprimió el instalador de la Base.
cd /home/oracle /database
Y luego la siguiente instrucción para ejecutar el instalador de la Base.
./runInstaller
INSTALACIÓN DEL ORACLE EN CENTOS
159
OPCIÓN “INSTALACIÓN AVANZADA”
ESPECIFICAR DIRECTORIO
TIPO DE INSTALACIÓN
160
SELECCIONAR IDIOMA
ESPECIFICAR DESTINO
ESPECIFICACIONES DEL PRODUCTO
161
SELECCIONAR OPCIONES DE CONFIGURACIÓN
CONFIGURACIÓN DE LA BASE DE DATOS
ESPECIFICAR OPCIONES DE CONFIGURACIÓN
DE LA BASE DE DATOS
162
OPCIONES DE ADMINISTRACIÓN DE LA BASE DE DATOS
OPCIONES DE ALMACENAMIENTO DE LA BASE DE DATOS
OPCIONES DE COPIA DE SEGURIDAD Y DE RECUPERACIÓN
163
ESPECIFICAR CONTRASEÑAS
RESUMEN DE LA BASE DE DATOS
INSTALACIÓN DE LA BA SE DE DATOS EN CENTOS
164
ASISTENTE DE CONFIGURACIÓN
TERMINAL
FIN DE LA INSTALACIÓN EN CENTOS
165
MANUAL DE USUARIO
El presente manual de usuario tiene como objetivo proporcionar una guía sobre
el sistema de la Administración de la relación comercial con los clientes MEG
CRM (Customer Relationship Management), que actualmente se encuentra en
marcha, a medida que se avance con la lectura del manual veremos a nivel de
detalle los diferentes procesos que realiza el Sistema.
2. FUNCIONAMIENTO DEL SISTEMA
La Aplicación está diseñada para trabajar en ambiente web, por lo que los
clientes de la empresa deben realizar los siguientes pasos para acceder al
sistema:
166
1.- Abrir el navegador de internet ya sea este: Internet Explorer,
Mozilla Firefox o cualquier otro.
2.- Digitar en el navegador de internet la dirección del Web Server:
http://200.200.100.4:8989/ViewController/jsp/megDes ktop.jsp
donde se aloja el chat de nuestra aplicación megCrm y
automáticamente se cargará la página de validación de usuario y
contraseña.
2.1. Pantalla de Login de Cliente del Sistema
El nombre de usuario y clave del cliente deben ser proporcionados por el
departamento de sistemas, para que el cliente pueda tener acceso al chat.
VENTANA DEL CHAT DEL SISTEMA MEG-CRM
167
2.2. Pantalla de Login de Usuario del Sistema
Esta página contiene la pantalla que permite accesar al sistema al usuario
de la empresa mediante un Usuario y una Contraseña.
El usuario (empleado de la empresa) tendrá acceso al sistema de la misma
forma que el cliente (a través de un navegador de internet).
En la barra de dirección del navegador de internet debe digitar la siguiente
dirección: http://200.200.100.4:8989/ViewController/meg-login. html y
automáticamente se cargará la página de validación de usuario y
contraseña siguiente:
VENTANA DE LOGIN DEL SISTEMA ME G-CRM
168
El nombre de usuario y contraseña deben ser ingresados obligatoriamente
por el usuario, porque de lo contrario no puede accesar al sistema.
INGRESO A MEG-CRM
Una vez que se registra el usuario, se va a cargar el Web Desktop de la
aplicación, que es un entorno de escritorio similar al de Windows.
DESKTOP DEL SISTEMA MEG-CRM
169
En la parte inferior de la ventana se encuentra el botón “Inicio”, al dar clic
sobre este botón se muestra un menú con los diferentes módulos que
conforman el sistema MEGCRM (Gestión comercial, Gestión de contactos,
Mantenimiento, Post-Venta y Seguridad) dependiendo de los privilegios
que se le haya asignado al usuario. En este caso se ingresó con el usuario
“Admin” que tiene acceso a todos los módulos.
OPCIONES DEL BOTÓN INICIO
El acceso al Sistema está validado por Roles. Cada rol tiene los permisos
o acciones de crear, editar, eliminar, consultar y guardar información.
Todo depende de los privilegios que se le haya asignado al usuario.
El usuario “Admin” tiene rol de Administrador del Sistema, por lo tanto
tendrá acceso a todos los módulos del Sistema.
170
2.3. Menu Principal
Esta será la pantalla principal que se mostrará después de ingresar su
Usuario y Contraseña.
MENÚ PRINCIPAL
2.4. Gestión Comercial
Este módulo va a tener un menú de opciones que se desplegarán al dar
clic sobre la opción “Gestión Comercial”.
171
OPCIÓN “GESTIÓN COMERCIAL”
2.4.1. Ventana de Cotizaciones
VENTANA DE COTIZACIONES
172
La ventana de cotizaciones permite crear una nueva cotización, editar
una cotización, eliminar una cotización, guardar una cotización o
realizar la búsqueda de una cotizáción existente en la base de datos.
2.4.1.1. Número de Cotización
CAMPO NÚMERO DE COTIZACIÓN
Es el número de la cotización que se está realizando. Este campo
se generará automáticamente.
2.4.1.2. Campo Cliente
CAMPO CLIENTE
Permite hacer una consulta global de todos los clientes a través de
un grid, para esto se necesita dar click sobre el botón que está en
el centro y seleccionar el nombre del cliente que luego se mostrará
en el campo de texto que se encuentra en el lado derecho,
mientras que en el lado izquierdo se mostrará el código del cliente.
173
2.4.1.3. Fecha de Emisión y Validez de la Cotizació n
CAMPO FECHA DE EMISION Y VALIDEZ
Para seleccionar la fecha de la cotización y la fecha de validez de
la cotización es necesario dar click sobre el date field, que es el
cuadro que se encuentra en el lado derecho de cada fecha.
2.4.1.4. Campo Empleado
CAMPO CÓDIGO Y NOMBRE DE EMPLEADO
Permite hacer una consulta global de todos los empleados a través
de un grid, para esto se necesita dar click sobre el botón que está
en el centro y seleccionar el nombre del empleado que luego se
mostrará en el campo de texto que se encuentra en el lado
derecho, mientras que en el lado izquierdo se mostrará el código
del empleado.
174
2.4.1.5. Detalle
CAMPO DETALLE
Permite ingresar algún detalle u observación respecto de la
cotización que se está realizando para un mejor control de la
misma.
2.4.1.6. Detalle de la Cotización
DETALLE DE LA COTIZACIÓN
Al dar click sobre el botón “Agregar” se visualiza un grid con todos
los productos existentes. Se debe seleccionar haciendo doble click
sobre el o los productos que se necesiten para la cotización.
175
VENTANA DE BÚSQUEDA DE PRODUCTO
Posteriormente el Código del producto, Descripción del Producto,
Precio Unitario, SubTotal, Descuento, IVA y Total se van a ubicar
automáticamente en el detalle de la cotización excepto la cantidad
que debe ser ingresada obligatoriamente para poder obtener el
Subtotal, Descuento, Base Imponible y Total de la factura.
2.4.2. Ventana de Ventas
VENTANA DE VENTAS
Esta ventana de Ventas permite realizar las ventas a los clientes
existentes en la base de datos.
176
A diferencia de la ventana de cotizaciones lleva el campo de Forma
de Pago, el cual va a permitir elegir la forma de pago del cliente.
2.5. Gestión de Contactos
En el módulo “Gestión de Contactos” encontraremos las siguientes
opciones: Clientes, al dar clic en esta opción, se visualizará una ventana de
mantenimiento de Cliente en la que se podrá almacenar y tener acceso a la
información del cliente de manera eficaz y precisa. Tareas, en esta opción
se visualizará una ventana de mantenimiento de tareas en las que
podremos, crear, asignar y revisar tareas planificadas del empleado.
Bitácora de Tareas, esta opción nos permite dar seguimiento a las tareas.
OPCIÓN DE GESTIÓN DE CONTACTOS
177
2.5.1. Ventana de Clientes
VENTANA DE CLIENTE
En esta ventana se debe ingresar la información del cliente. En caso
de que el Cliente sea una Empresa se ingresará el Tipo de Cliente,
Código, Tipo de identificación, Número de Identificación, Nombre de
la Empresa, Contacto, Dirección, Teléfono, Fax, Correo Electrónico,
Página web, Clave, Si recibe correo, Fecha desde cuando es cliente
de la empresa, Actividad comercial, La zona y el Empleado que
ingresa los datos. En caso de que el Cliente sea una Persona se
deben ingresar los datos mencionados anteriormente además Fecha
de nacimiento, Sexo, Estado civil y Profesión.
Esta ventana también tiene una toolbar, la cual está conformada por
los botones Nuevo, Editar, Eliminar, Cancelar, Grabar y Buscar, que
178
le van a permitir al usuario que posee el permiso respectivo realizar
estas acciones.
2.5.2. Ventana de Tareas
VENTANA DE TAREAS
Esta ventana permite asignar tareas a los empleados de la empresa
referente a actividades que deben realizar, para poder llevar un
control de dichas tareas.
2.5.2.1. Código de Tarea
CAMPO CÓDIGO DE TAREA
Es el código de la tarea que se le está asignando a la tarea.
179
2.5.2.2. Fecha Inicio de la Tarea
CAMPO FECHA INICIO DE TAREA
Es la fecha de inicio que se le está asignando a la tarea. Se debe
dar click sobre el ícono de calendario que se encuentra al lado
derecho del campo fecha, desplegándose así un calendario en el
que se debe seleccionar la fecha de inicio de la tarea.
2.5.2.3. Fecha Final de la Tarea
CAMPO FECHA FINAL DE TAREA
180
Es la fecha de finalización que se le está asignando a la tarea. Se
debe dar click sobre el icono de calendario que se encuentra al
lado derecho del campo fecha, desplegándose así un calendario
que permite seleccionar la fecha de fin de la tarea.
2.5.2.4. Nombre del Empleado Asignado a la Tarea
CAMPO EMPLEADO DE LA TAREA
En este campo de texto se mostrará el nombre del empleado al que
se le ha asignado la tarea. Se debe dar click sobre el botón que se
encuentra al lado derecho de la caja de texto de Empleado,
aparecerá una ventana que permite seleccionar el nombre del
empleado al que se le va a asignar la tarea.
181
VENTANA BUSCAR EMPLEADO
En este caso se ha seleccionado el siguiente empleado:
CAMPO EMPLEADO ASIGNADO A LA TAREA
2.5.2.5. Asunto de la Tarea
CAMPO ASUNTO DE TAREA
Es el asunto de la tarea a realizar.
182
2.5.2.6. Aviso de la Tarea
CAMPO AVISO DE LA TAREA
Es el Aviso de la tarea que se debe seleccionar al dar click sobre el
icono de calendario que se encuentra al lado derecho del datafield,
desplegándose una ventana de calendario en la cual se debe
seleccionar la fecha de aviso de la tarea.
2.5.2.7. Prioridad de la Tarea
COMBO PRIORIDAD DE LA TAREA
183
Es la prioridad que se le asigna a la tarea. Esta debe
seleccionarse de una lista desplegable.
2.5.2.8. Pocentaje Completado de de la Tarea
LISTA DE PORCENTAJE DE LA TAREA
Es el porcentaje en que se ha completado la tarea. Esta debe
seleccionarse de una lista desplegable.
2.5.2.9. Tipo de Tarea
LISTA TIPO DE TAREA
184
Es la etapa en que se encuentra la tarea. Esta debe seleccionarse
de una lista desplegable.
2.5.2.10. Nota de la Tarea
LISTA DEL TIPO DE TAREA
Es una descripción más amplia del motivo de la tarea. Se debe de
ingresar dentro del Area de Texto de Nota.
2.6. Mantenimientos
La opción “Mantenimientos” muestra los distintos mantenimientos con que
cuenta el sistema MEGCRM.
185
OPCIÓN DE MANTENIMIENTO
Cada mantenimiento tendrá una toolbar, la cual estará conformada por los
botones Nuevo, Editar, Eliminar, Cancelar y Grabar.
MANTENIMIENTO DE ZONAS
186
2.6.1. Toolbar de las ventanas de mantenimiento
Al dar click en el botón NUEVO, los campos
del formulario se borraran (si hubiere
información en ellos) y se activarán para poder
ingresar los datos que se guardarán en la
Tabla.
El botón EDITAR inicialmente estará
desactivado. Para poder activar el botón es
necesario que hayan datos. Una vez
seleccionada la información que se desea
editar, el botón se activará. Se deberá
presionar el botón y automáticamente el botón
CANCELAR, GRABAR y los campos del
formulario se activarán para poder hacer la
modificación de la información. Una vez
realizada la modificación en el formulario se
debe pulsar el botón GRABAR para que los
cambios sean almacenados en la Tabla, y los
campos del formulario se desactiven al igual
que el botón CANCELAR y GRABAR para
permitir realizar una nueva modificación.
187
Al igual que en el Botón EDITAR, para eliminar
es necesario que hayan datos. Una vez
seleccionada la información que se desea
eliminar, el botón ELIMINAR se activará. Se
deberá presionar el botón y el registro
seleccionado se marca como eliminado en la
Tabla (pidiendo confirmación ANTES de
hacerlo) y se habilita el checkbox para indicar
que dicho registro está marcado como
eliminado (fisicamente no se borra de la
Tabla).
Este botón se lo utiliza cuando se ha llenado la
información en el formulario y no se la desea
grabar en la base de datos, es decir, una vez
que se ha presionado el botón NUEVO o
EDITAR, automáticamente se activa este
botón y los campos del formulario para
ingresar la información. Si se desea cancelar
el ingreso o edición de la información se
presiona el botón cancelar. Se presentará un
mensaje diciendo si desea guardar el registro
188
o no.
Si elige SI, la informacion se graba en la
Tabla. Caso contrario, el formulario volverá a
su estado Original (sea el momento de
CREACIÓN o EDICIÓN).
Al momento de invocar a la ventana este
botón por defecto saldrá desactivado. Se
activará cuando se pulsen uno de los botones
NUEVO o EDITAR.
Realiza el proceso de almacenar la
información digitada o modificada en el
formulario a la Tabla.
Si este proceso es exitoso, mostrara un
mensaje de Confirmación.
Al momento de invocar a la ventana este
botón por defecto se va a activar con la
finalidad que el usuario pueda realizar la
busqueda de la informaciòn que necesita.
189
Realiza el proceso de buscar la información
seleccionada.
Al dar click en el botón BUSCAR, se va a
mostrar una ventana en la cual se visualiza la
información guardada en la Tabla.
Al momento de invocar a la ventana de
cotizaciones y ventas este botón por defecto
saldrá desactivado. Se activará cuando se
pulsen uno de los botones NUEVO o EDITAR.
Realiza el proceso de imprimir los reportes de
la información digitada o modificada en el
formulario a la Tabla.
190
2.6.2 Ayuda de búsqueda
VENTANA DE BÚSQUEDA
Esta parte de la ventana me permite buscar de manera rápida la
información almacenada en las tablas, ingresando el código o un
nombre, o parte del nombre ó código que se desea buscar en el campo
de texto que se encuentra en la parte superior de la ventana.
2.6.3 Formulario de Zonas
FORMULARIO DE ZONAS
191
El mantenimiento de Zonas estará conformado por un formulario, que
contiene el campo Código, Nombre, y un Checkbox que se activará
solo cuando una zona ha sido eliminado. Algunos mantenimientos
van a tener un Combo que permitirá seleccionar información.
El combo es un componente de Ext JS en el cual se despliega varias
opciones que pueden ser seleccionadas.
2.7 Post-Venta
Este módulo tiene las siguientes opciones: Incidencias, Bitácora de
Incidencias.
OPCIÓN DE POST-VENTA
192
2.7.1 Ventana de Incidencias
La Ventana de Incidencias me va a permitir ingresar una queja o un
reclamo del cliente.
VENTANA DE INCIDENCIAS
2.7.1.1 Número de la Incidencia
NÚMERO DE LA INCIDENCIA
El número de la incidencia se genera automáticamente por el
sistema y no es necesario que el usuario lo registre.
193
2.7.1.2 Tipo de Incidencia
TIPO DE INCIDENCIA
Este campo muestra una lista desplegable con dos opciones:
Reclamo y Queja.
2.7.1.3 Fecha de la Incidencia
FECHA DE LA INCI DENCIA
En este campo seleccionaremos la fecha de la incidencia de un
calendario que se despliega cuando damos clic en la imagen que
se encuentra a lado del campo fecha.
194
2.7.1.4 Prioridad de la Incidencia
PRIORIDAD DE LA INCI DENCIA
Al dar click en este campo se muestra una lista desplegable que
permite eligir la prioridad que se le asigna a la incidencia.
2.7.1.5 Estado de la Incidencia
ESTADO DE LA INCIDENCIA
En la ventana de Incidencias solo se van a mostrar dos estados de
los cinco estados que existen. Al crear una nueva incidencia si
elegimos el estado “Nueva”, la incidencia seguira su curso hasta
que el estado de esta sea “Finalizada”. Si por el contrario elegimos
al opción “Rechazada”, entonces se finaliza con el curso de la
incidencia.
Para poder editar una incidencia y asignarle un nuevo estado es
necesario hacerlo en la ventana de Bitácora de Incidencias.
195
2.7.1.6 Número de Factura o Contrato
NÚMERO DE FACTURA O CONTRATO
Este campo solo estará activo si la incidencia es un Reclamo.
Al dar click en el botón que se encuentra a lado del campo de texto,
se mostrará una ventana con los datos de facturas y contratos que
tiene el cliente con la empresa.
VENTANA DE BÚSQUEDA DE FACTURA Y CON TRATO
2.7.1.7 Descripción de la Incidencia
DESCRIPCIÓN DE LA INCIDENCIA
Aquí se debe escribir una breve descripción de la incidencia.
196
2.7.1.8 Detalle de la Incidencia
DETALLE DE LA INCIDE NCIA
Aquí se debe escribir los por menores de la incidencia. No es
obligatorio que este campo este lleno.
2.7.2 Ventana de Bitácora de Incidencias
La Ventana de Bitácora de Incidencias me va a permitir hacer el
seguimiento de una queja o un reclamo del cliente.
VENTANA DE BITÁCORA DE IN CIDENCIAS
197
Esta ventana permite filtrar por diferentes criterios. Además de poder
visualizar en que etapa se encuentra la incidencia y editarla.
2.7.2.1 Criterios de Búsqueda
CRITERIOS DE BÚSQUEDA DE LA INCIDENCIA
Para realizar una búsqueda de incidencias se cuenta con los
siguientes criterios:
• Desde: Fecha desde donde se iniciará la búsqueda las
incidencia. La fecha puede escribirse o en su defecto se la
puede seleccionar del calendario desplegable del campo fecha.
Este campo es obligatorio.
• Hasta: Es la fecha donde se finalizará con la búsqueda de
incidencias. Este campo es obligatorio.
• Cliente: Al dar clic en el botón que se encuentra a lado del
campo Cliente se puede seleccionar el nombre del Cliente a
quién pertenece la o las incidencias. Este campo es opcional.
• Empleado: Al dar clic en el botón que se encuentra a lado del
campo Empleado se puede seleccionar el nombre del
Empleado que atendió la incidencia.
198
2.7.2.2. Filtro de las Etapas de la incidencia
ETAPAS DE INCIDENCIAS
Además de los criterios de búsqueda que se encuentran en la parte
superior de la ventana de Bitácora de Incidencias, existe
adicionalmente un filtro que me permite visualizar las incidencias
por su etapa: Nueva, Asignada, Finalizada, Pendiente, Rechazada,
Duplicada.
2.7.2.3. Resultado de la Búsqueda
Después de haber seleccionado los criterios de búsqueda, estos
resultados se muestran en una malla.
199
RESULTADO DE LA BÚSQUEDA DE INCIDENCIAS
2.7.2.4. Editar Incidencia
Si el usuario desea editar una incidencia, sólo debe de seleccionar
en la ventana que muestra los resultados de la búsqueda de
incidencias, aquella incidencia que desea editar y esta aparecerá
en la parte inferior de la ventana lista para ser modificada.
VENTANA DE EDICIÓN DE LA INCIDENCIA
Tanto la fecha como la hora se generan automáticamente. Se
debe escribir una observación y quién realizó el cambio.
200
2.8. Seguridad
Este módulo va a tener un menu denominado Roles, el cual va a contener
el Mantenimiento de Roles.
OPCIÓN DE SEGURIDAD
2.8.1. Roles
La ventana de Roles muestra los roles que existen, un formulario para
crear un nuevo rol, los permisos que tiene el rol, usuarios que
pertenecen al rol y usuarios que no pertenecen al rol.
201
MANTENIMIENTO DE ROLES
2.8.1.1 Listado de Roles
LISTADO DE ROLES
En esta sección de la ventana se muestran los roles existentes en
el sistema. Al dar click sobre uno de ellos se puede modificar el rol
o se puede observar los permisos que tiene el rol.
202
2.8.1.2. Listado de Permisos
LISTADO DE PERMISOS
En esta sección de la ventana podemos ver el listado de permisos
con que cuenta un rol seleccionado.
2.8.1.3. Formulario
FORMULARIO DE ROLES
Al igual que el formulario de zonas, el formulario de roles me
permite crear, modificar o eliminar un rol.
203
2.8.1.4. Asignar Roles a Usuarios
LISTA DE USUARIOS Y SUS ROLES
Al elegir un rol se carga dos listas. La lista de la izquierda se carga
con los usuarios que no pertenecen al rol y la lista de la derecha se
carga con los usuarios que pertencen al rol.
Para asignar un rol a un usuario solo se debe seleccionar el
nombre del usuario y arrastrarlo hasta la lista de los usuarios que
pertenecen al rol o viceversa.