TOMOII-CRM.pdf

Anuncio
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
[email protected]
González Laje Edigta Marina
[email protected]
Holguín Holguín Gissella María
[email protected]
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 Tablespace”
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
meg_fnc_rols_recs_delete
meg_fnc_zons_delete
meg_fnc_rols_delete
meg_fnc_emps_delete
meg_fnc_depts_delete
meg_fnc_pars_delete
meg_fnc_profs_delete
meg_fnc_sucs_delete
meg_fnc_clis_delete
DESCRIPCION
Elimina los registros de la tabla
meg_rols_recs.
Actualiza los campos
zon$anu$por$v, zon$anu$fec$d
y zon$est$c de la tabla meg_zons.
Actualiza los campos
rol$anu$por$v, rol$anu$fec$d
y rol$est$c de la tabla meg_rols
Actualiza los campos
emp$anu$por$v, emp$anu$fec$d
y emp$est$c de la tabla
meg_emps.
Actualiza los campos
dept$anu$por$v, dept$anu$fec$d
y dept$est$c de la tabla
meg_depts.
Actualiza los campos
par$anu$por$v, par$anu$fec$d
y par$est$c de la tabla meg_pars.
Actualiza los campos
prof$anu$por$v, prof$anu$fec$d
y prof$est$c de la tabla meg_profs.
Actualiza los campos
suc$anu$por$v, suc$anu$fec$d y
suc$est$c de la tabla meg_sucs.
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
meg_fnc_next_id
DESCRIPCION
Inserta el campo ID de forma
automatica.
meg_fnc_chat_operador
meg_fnc_recs_insert
meg_fnc_zons_insert
meg_fnc_rols_insert
meg_fnc_emps_insert
meg_fnc_depts_insert
meg_fnc_pars_insert
meg_fnc_profs_insert
Inserta un registro
meg_recs.
Inserta un registro
meg_zons.
Inserta un registro
meg_rols.
Inserta un registro
meg_emps.
Inserta un registro
meg_depts.
Inserta un registro
meg_pars.
Inserta un registro
meg_profs
en la tabla
en la tabla
en la tabla
en la tabla
en la tabla
en la tabla
en la tabla
52
meg_fnc_sucs_insert
meg_fnc_incid_insert
meg_fnc_clis_insert
meg_fnc_prods_insert
meg_fnc_cotzs_insert_cab
meg_fnc_cotzs_insert_det
meg_fnc_vents_insert_cab
meg_fnc_vents_insert_det
meg_fnc_bits_incid_insert
meg_fnc_bits_clis_insert
meg_fnc_bits_cotzs_insert
meg_fnc_tars_insert
Inserta un registro
meg_sucs.
Inserta un registro
meg_incids.
Inserta un registro
meg_clis.
Inserta un registro
meg_prods.
Inserta un registro
meg_cotzs.
Inserta un registro
meg_dets_cotzs.
Inserta un registro
meg_vents.
Inserta un registro
meg_dets_vents.
Inserta un registro
meg_bits_incid.
Inserta un registro
meg_bits_clis.
Inserta un registro
meg_bits_cotzs.
Inserta un registro
meg_tars.
en la tabla
en la tabla
en la tabla
en la tabla
en la tabla
en la tabla
en la tabla
en la tabla
en la tabla
en la tabla
en la tabla
en la tabla
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
meg_prc_login
meg_fnc_permisos_select
meg_fnc_select_zonas
meg_fnc_zonas_combo
meg_fnc_zonas_tree
meg_fnc_select_code_zona
meg_fnc_select_rol
meg_fnc_roles_combo
meg_fnc_roles_perms_tree
meg_fnc_seek_perms
meg_fnc_roles_tree
meg_fnc_select_depts
meg_fnc_depts_combo
meg_fnc_depts_tree
DESCRIPCION
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.
Consulta los permisos a los que
tiene acceso el usuario.
Consulta los registros de la tabla
meg_zons.
Consulta los campos zon$id$c y
zon$nom$v de la tabla meg_zons
Consulta los campos zon$cod$v y
zon$nom$v de la tabla meg_zons
Consulta el campo zon$cod$v de la
tabla meg_zons.
Consulta los campos rol$cod$v,
rol$nom$v, rol$est$c de la tabla
meg_rols.
Consulta los campos rol$id$c,
rol$nom$v de la tabla meg_rols.
Consulta los campos rec$cod$v,
rec$nom$v registros de la tabla
meg_recs.
Consulta el campo rol$id$c de la
tabla meg_rols_recs
Consulta los campos rol$cod$v y
rol$nom$v de la tabla meg_rols
Consulta los registros de la tabla
meg_depts.
Consulta los campos dept$id$c y
dept$nom$v de la tabla meg_depts
Consulta los campos dept$cod$v y
dept$nom$v de la tabla meg_depts.
63
meg_fnc_select_code_dept
meg_fnc_select_pars
meg_fnc_pars_combo
meg_fnc_pars_tree
meg_fnc_select_code_par
meg_fnc_select_clis
meg_fnc_clis_combo
meg_fnc_clis_tree
meg_fnc_select_profs
meg_fnc_profs_combo
meg_fnc_profs_tree
meg_fnc_select_sucs
meg_fnc_sucs_tree
meg_fnc_select_code_suc
meg_fnc_par_info_tree
meg_fnc_seek_grid_clis
meg_fnc_seek_grid_emps
Consulta el campo dept$cod$v de la
tabla meg_depts.
Consulta los registros de la tabla
meg_pars.
Consulta los campos par$id$c,
par$nom$v de la tabla megpars.
Consulta los campos par$cod$v,
par$nom$v de la tabla meg_pars.
Consulta el campo par$cod$v de la
tabla meg_pars.
Consulta los registros de la tabla
meg_clis.
Consulta los campos cli$id$c y
cli$nom$v de la tabla meg_clis.
Consulta los campos cli$cod$v y
cli$nom$v de la tabla meg_clis.
Consulta los registros de la tabla
meg_profs.
Consulta los campos prof$id$c,
prof$nom$v de la tabla meg_profs.
Consulta los campos prof$cod$v y
prof$nom$v de la tabla meg_profs.
Consulta los registros de la tabla
meg_sucs.
Consulta los campos suc$cod$v y
suc$nom$v de la tabla meg_sucs.
Consulta el campo suc$cod$v de la
tabla meg_sucs.
Consulta los campos par$nom$v,
par$id$c de la tabla meg_pars,
carga
árbol
en
la
ventana
Mantenimiento de Parametros
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).
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 MEGCRM.
A
continuación
se
detallan
las
funciones
del
paquete
MEG_PCKG_UPDATE:
PROCEDIMIENTO
ALMACENADO
meg_fnc_recs_update
meg_fnc_rols_update
meg_fnc_zons_update
meg_fnc_emps_update
meg_fnc_depts_update
meg_fnc_pars_update
meg_fnc_profs_update
meg_fnc_sucs_update
meg_fnc_clis_update
meg_fnc_incids_bits_update
DESCRIPCION
Actualiza los registros de la
tabla meg_recs.
Actualiza los registros de la
tabla meg_rols.
Actualiza los registros de la
tabla meg_zons.
Actualiza los registros de la
tabla meg_emps.
Actualiza los registros de la
tabla meg_depts.
Actualiza los registros de la
tabla meg_pars.
Actualiza los registros de la
tabla meg_profs.
Actualiza los registros de la
tabla meg_sucs.
Actualiza los registros de la
tabla meg_clis.
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:
inserta
un
selectPar, consulta de los registros; insertPar,
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;
empleados.
fn_seek_emps, dibuja la ventana de búsqueda de
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-alldebug.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="../ext3.0.0/resources/css/ext-all.css" />
2. <script type="text/javascript" src="../ext-3.0.0/adapter/ext/extbase.js"></script>
3. <script type="text/javascript" src="../ext-3.0.0/extall.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/meglogin.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”.
usuarios.
Dentro de esta ventana se podrá administrar los
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 Developer
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++ compatlibstdc++ compat-libstdc++-devel control-center cpp gcc gcc-c++ gdb
glibc glibc-common glibc-devel gnome-libs glibc-headers glibckernheaders
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
oracle
oracle
oracle
soft nproc 2047
hard nproc 16384
soft nofile 1024
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
http://www.oracle.com/technetwork/database/10201linuxsoft097986.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).
bits)
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 BASE 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/megDesktop.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 MEG-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 INCIDENCIA
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 INCIDENCIA
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 CONTRATO
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 INCIDENCIA
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 INCIDENCIAS
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.
debe escribir una observación y quién realizó el cambio.
Se
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.
Descargar