UNIVERSIDAD DE GUAYAQUIL
Facultad de Ciencias Matemáticas y Físicas
Carrera de Ingeniería en Sistemas Computacionales
“Gestión de Proyecto Informático
Módulo de Gestión de Pre-Proyecto”
4TO. CURSO DE GRADUACION
Previo a la Obtención del Título de:
INGENIERO EN SISTEMAS COMPUTACIONALES
Autores:
Mendoza Burgos Evelyn Alexandra
Recillo Reinado María De Los Ángeles
Villavicencio López Johnny Fernando
GUAYAQUIL-ECUADOR
2007
AGRADECIMIENTO
A nuestros padres, quienes con su amor,
paciencia y desdén siempre nos animaron a
escoger una carrera de la cual nos podamos sentir
orgullosos.
Al personal docente, que nos hicieron partícipes
de sus conocimientos y experiencias adquiridas a
lo largo de su carrera profesional; a Dios, quien
siempre puso en nuestro corazón, el amor, el
coraje y la voluntad para seguir adelante y
permitirnos ser profesionales de una carrera digna
de recomendar a nuestros hijos.
Al amor, porque siempre estuvo presente en
nuestros corazones y es el motor para lograr
grandes propósitos.
DEDICATORIA
La tesis va dirigida a Dios, por darnos la fuerza y
la sabiduría para seguir adelante hasta conseguir
nuestros propósitos y anhelos; A nuestros padres
quienes estuvieron motivándonos a lo largo de
nuestra preparación profesional hasta lograr
vernos convertidos en Ingenieros; Al amor, que
siempre está presente en todas las actividades
que deseemos emprender.
TRIBUNAL DE GRADUACIÓN
Presidente Tribunal 1er. Vocal
2do. Vocal Secretario
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)
Mendoza Burgos Evelyn Alexandra
Recillo Reinado María De Los Ángeles
Villavicencio López Johnny Fernando
RESUMEN
Actualmente las Organizaciones han optimizado y mejorado la forma de
llevar a cabo sus actividades habituales mediante la implementación de la
tecnología.
Sin embargo, debido a la necesidad de mejorar y atender eficientemente los
Requerimientos/Necesidades de mejoras en los mecanismos de trabajo de
las áreas de la Empresa, se desarrolló un “Módulo de Gestión de Pre-
Proyecto” con la finalidad de optimizar el tiempo de recepción y análisis de lo
requerimientos solicitados por el área cliente, áreas de la Empresa, y la
respectiva planificación para llevar a cabo el proyecto que se requiere para
dicha mejora.
Esta aplicación fue diseñada usando la arquitectura de Aplicaciones Cliente /
Servidor, implementado la tecnología Oracle 9i como servidor de la Base de
Datos y MyEclipse para Java como lenguaje de programación de la
aplicación.
El acceso al módulo será evaluado mediante los roles, privilegios y permisos
que tenga configurado el usuario del mismo, proporcionándole así un
username, password y string de conexión a la Base de Datos.
SUMMARY
Nowadays, Organizations have optimized and improved their way to perform
their usual activities through the use of technology.
However, given the fact that is necessary to fulfill the needs of improval in the
different areas of the company, a “Pre Project Module of Management” was
developed with the objective to optimize the time of reception an analysis of
the requirements of the Client Areas, Enterprise areas, and the planning
needed to materialize the project, necessary for the improvementents.
This technique was designed using the architectures related to Client/Server
Appliccations, implementing Oracle 9i Technology, as a Data Base Server
and My Eclipse for Java as a program code for the application.
The access to the module will be evaluated by means of the roles, privileges
and permissions that the user of the same one has formed, providing to him
this way a username, password and string of connection to the Database.
INDICE GENERAL
AGRADECIMIENTO II
DEDICATORIA III
TRIBUNAL DE GRADUACIÓN IV
DECLARACIÓN EXPRESA V
RESUMEN VI
INDICE GENERAL VIII
TABLA DE CONTENIDOS
1 INTRODUCCIÓN ................................................................................... 15
1.1 Antecedentes y Problemática ......................................................... 15
1.2 Soluciones a la problemática .......................................................... 16
1.3 Opciones del Módulo ...................................................................... 16
1.4 Opciones de Acceso a la aplicación: .............................................. 17
1.5 VISIÓN ........................................................................................... 18
1.6 MISIÓN ........................................................................................... 19
1.7 OBJETIVOS GENERALES ............................................................. 19
1.8 OBJETIVOS ESPECÍFICOS .......................................................... 20
1.9 ALCANCES DEL PROYECTO ....................................................... 21
1.9.1 Ingreso de Proyectos al Sistema (requerimientos) .................. 21
1.9.2 Nivel Gerencial ........................................................................ 22
1.9.3 Asignación de Códigos por Proyecto ....................................... 23
1.9.4 Asignación de Recursos (Líder de Proyecto) .......................... 24
1.9.5 Asignación de Recursos (Líder SIS) ........................................ 25
1.9.6 Asignación de Recurso Humano ............................................. 27
1.9.7 Asignación de Recursos Informáticos ..................................... 28
1.9.8 Cronograma de actividades para el Pre-Proyecto .................. 28
1.9.9 Definición de configuraciones generales ................................. 31
1.9.10 Estados del Proyecto ............................................................... 31
1.9.11 Definición de Tipo de Proyecto. ............................................... 32
1.9.12 Aprobación del Plan Técnico del Proyecto. ............................. 32
1.9.13 Reportes de Detalles ............................................................... 32
1.10 FODA DEL MÓDULO DE GESTION DE PRE-PROYECTOS ....... 33
1.10.1 Fortaleza ................................................................................. 33
1.10.2 Oportunidades ......................................................................... 34
1.10.3 Debilidades .............................................................................. 35
1.10.4 Amenazas ............................................................................... 35
1.11 METODOLOGIA ............................................................................. 36
1.12 ARQUITECTURA ........................................................................... 38
1.13 TECNOLOGIA ................................................................................ 39
1.14 RECURSOS ................................................................................... 41
1.14.1 Hardware: ................................................................................ 41
1.14.2 Software: ................................................................................. 42
1.14.3 Recurso Humano: .................................................................... 42
1.15 CRONOGRAMA DE TRABAJO DEL PROYECTO ......................... 42
2 ANALISIS DEL MODELO DE GESTIÓN DE PRE-PROYECTOS ......... 48
2.1 REQUERIMIENTOS ....................................................................... 48
2.2 MODELO ENTIDAD RELACION .................................................... 49
2.2.1 Análisis del Modelo Entidad Relación. ..................................... 49
2.3 CASOS DE USO ............................................................................ 59
2.4 DIAGRAMAS DE PROCESOS ....................................................... 88
2.5 DIAGRAMA DE FLUJO DE DATOS ............................................. 101
3 DISEÑO DEL MODELO DE GESTIÓN DE PRE-PROYECTOS ......... 105
3.1 Descripción de Clases Principales ............................................... 105
3.1.1 LiderProyecto ........................................................................ 105
3.1.1.1 Descripción de los campos ............................................ 105
3.1.1.2 Descripción de funciones y procedimientos .................. 106
3.1.2 AsignaRecurso ...................................................................... 107
3.1.2.1 Descripción de los campos ............................................ 107
3.1.2.2 Descripción de funciones y procedimientos .................. 108
3.1.3 AsignaInfor ............................................................................ 109
3.1.3.1 Descripción de los campos ............................................ 109
3.1.3.2 Descripción de funciones y procedimientos .................. 110
3.1.4 AsignaSIS .............................................................................. 111
3.1.4.1 Descripción de los campos ............................................ 111
3.1.4.2 Descripción de funciones y procedimientos .................. 112
3.1.5 Configuración ........................................................................ 113
3.1.5.1 Descripción de los campos ............................................ 113
3.1.5.2 Descripción de funciones y procedimientos .................. 114
3.1.6 DefineProyecto ...................................................................... 115
3.1.6.1 Descripción de los campos ............................................ 115
3.1.6.2 Descripción de funciones y procedimientos .................. 116
3.1.7 Cronograma .......................................................................... 117
3.1.7.1 Descripción de los campos ............................................ 118
3.1.7.2 Descripción de funciones y procedimientos .................. 119
3.1.8 Estado ................................................................................... 121
3.1.8.1 Descripción de los campos ............................................ 122
3.1.8.2 Descripción de funciones y procedimientos .................. 123
3.1.9 Aprueba ................................................................................. 124
3.1.9.1 Descripción de los campos ............................................ 125
3.1.9.2 Descripción de funciones y procedimientos .................. 125
3.2 Diseño de Pantallas ...................................................................... 126
3.2.1 Asignaciones ......................................................................... 126
3.2.1.1 Asignación de Líder SIS ................................................. 126
3.2.1.2 Asignación de Recurso Humano .................................... 127
3.2.1.3 Asignación de Recurso Informático ................................ 128
3.2.1.4 Consulta del Líder de Proyectos .................................... 129
3.2.2 Configuración de Parámetros ................................................ 130
3.2.3 Definición de Tipo de Proyectos ............................................ 131
3.2.4 Cronograma de Actividades .................................................. 131
3.2.5 Estados y Aprobaciones ........................................................ 132
3.2.5.1 Estados del Proyecto ..................................................... 132
3.2.5.2 Aprobación del Plan Técnico .......................................... 133
3.2.6 Reportería ............................................................................. 134
3.2.6.1 Reporte de Estados del Proyecto. .................................. 134
3.2.6.2 Reporte de Líderes Asignados al Proyecto .................... 135
3.2.6.3 Reporte de Actividades del Proyecto ............................. 136
4 CODIFICACIÓN DEL MODELO DE GESTIÓN DE PRE-PROYECTOS 138
4.1 ESTÁNDARES ............................................................................. 138
4.1.1 Estándares sobre la Base de Datos ...................................... 139
4.1.1.1 Usuarios y Tablas ........................................................... 139
4.1.1.2 Sinónimos y Secuencias ................................................ 140
4.1.1.3 Paquetes, procedimientos y funciones ........................... 141
4.1.2 Estándares sobre la Codificación .......................................... 142
4.1.2.1 Codificación PL/SQL ...................................................... 142
4.1.2.2 Codificación Java ........................................................... 143
4.1.2.3 Codificación JSP – My Esclipse ..................................... 143
4.1.2.4 Interfaces........................................................................ 144
4.2 DEFINICIÓN DE PRINCIPALES PROCESOS ............................. 145
4.2.1 Proceso Líder de Proyecto .................................................... 145
4.2.2 Proceso Líder SIS ................................................................. 145
4.2.3 Proceso Asigna Recurso ....................................................... 146
4.2.4 Proceso Asigna Recurso Informático .................................... 146
4.2.5 Proceso Cronograma ............................................................ 147
4.2.6 Proceso Estado ..................................................................... 147
4.2.7 Proceso Aprueba ................................................................... 148
4.3 DIAGRAMA DE FLUJO ................................................................ 148
5 PRUEBAS ............................................................................................ 150
5.1 RECOMENDACIONES ................................................................. 150
5.2 Modelo de Flujo de Pruebas ......................................................... 151
5.3 Pruebas de Caja Blanca ............................................................... 151
5.3.1 Asignación Líder SIS ............................................................. 151
5.3.2 Ingreso de Actividades de un proyecto. ................................. 173
5.3.3 Recursos Humanos ............................................................... 196
5.4 Pruebas de Caja Blanca ............................................................... 200
5.4.1 Asignación de Recursos Informáticos. .................................. 200
6 RECOMENDACIONES Y CONCLUSIONES ....................................... 202
6.1 RECOMENDACIONES ................................................................. 202
6.2 CONCLUSIONES ......................................................................... 203
13
INDICE DE FIGURAS
El modelo de construcción de prototipos ...................................................... 36
Modelo en Espiral ......................................................................................... 38
Arquitectura Cliente – Servidor ..................................................................... 39
Cronograma de Trabajo General – Fase 1 ................................................... 43
Cronograma de Trabajo – Fase 2 ................................................................. 47
Modelo Entidad Relación – Inicial ................................................................. 58
Modelo Entidad Relación – Final .................................................................. 58
Casos de uso – Actores de los casos de Uso ............................................... 59
Caso de uso 1 – Asignación de Líderes ....................................................... 60
Caso de uso 2 – Revisión ............................................................................. 61
Caso de uso 3 – Cronograma Estimado ....................................................... 63
Caso de uso 4 – Fases del Cronograma ...................................................... 64
Caso de uso 5 – Actividades del Cronograma .............................................. 66
Caso de uso 6 – Envío del Cronograma ....................................................... 67
Caso de uso 7 – Elaboración Plan Técnico por Líder SIS ............................ 69
Caso de uso 8 – Verificar Presupuesto ......................................................... 70
Caso de uso 9 – Aplica transferencia de Dinero ........................................... 72
Caso de uso 10 – Envío de Plan Técnico al Gerente ................................... 73
Caso de uso 11 – Gerente Aprueba Plan Técnico ........................................ 75
Caso de uso 12 – Selección recurso Informático .......................................... 77
Caso de uso 13 – Selección recurso Humano .............................................. 78
Caso de uso 14 – Emitir solicitud .................................................................. 80
Caso de uso 15 – Asigno recurso Informático .............................................. 81
Caso de uso 16 – Verificar disponibilidad del Recurso Humano................... 83
Caso de uso 17 – Solicitud de Recurso Humano .......................................... 84
Caso de uso 18 – Asignación de Recurso Humano ...................................... 85
Caso de uso 19 – Configuraciones Generales ............................................. 87
Diagrama de procesos 1: Asignación de líderes ........................................... 89
Diagrama de procesos 2: Revisión DDF ....................................................... 90
Diagrama de procesos 3: Elaboración Cronograma Estimado ..................... 90
Diagrama de procesos 4: Fases del Cronograma ......................................... 91
Diagrama de procesos 5: Definir Actividades dentro del Cronograma .......... 92
Diagrama de procesos 6: Enviar Cronograma al Gerente ............................ 93
Diagrama de procesos 7: Aprobación del plan técnico por líder SIS ............ 93
Diagrama de procesos 8: Verificar Presupuesto ........................................... 94
Diagrama de procesos 9: Aplica transferencia de dinero .............................. 95
Diagrama de procesos 10: Envió plan técnico al Gerente ............................ 95
Diagrama de procesos 11: Gerente aprueba plan técnico ............................ 96
Diagrama de procesos 12: Selección recurso Informático ............................ 96
14
Diagrama de procesos 13: Selección recurso Humano ................................ 97
Diagrama de procesos 14: Emitir Solicitud ................................................... 98
Diagrama de procesos 15: Asignación Recurso Informáticos ....................... 98
Diagrama de procesos 16: Verificar disponibilidad recurso Humano ............ 99
Diagrama de procesos 17: Solicitud Recurso Humano ................................. 99
Diagrama de procesos 18: Asignación de Recurso Humano ...................... 100
Diagrama de procesos 19: Configuraciones Generales .............................. 100
Diagrama de Flujo de Datos ....................................................................... 101
15
CAPÍTULO 1
1 INTRODUCCIÓN
1.1 Antecedentes y Problemática
Actualmente las Empresas se encuentran en la constante búsqueda
de la automatización de sus sistemas, que genere ahorro de tiempo,
dinero y esfuerzo físico y que mediante ello se logre llevar a cabo las
transacciones rutinarias que se realizan en el día a día y lo más
importante de todo, que se lleve a cabo en el menor tiempo posible.
Ante todo este preámbulo, las organizaciones han optado por
proporcionar una solución al actual esquema de control y recepción de
proyectos que se realizan manualmente implementando así un módulo
que permita ayudar y llevar un mayor control, recepción y evaluación
de las necesidades que puedan existir en las diversas áreas de la
Empresa, la cuales serán evaluadas y llevadas a cabo por el área de
Sistemas.
Esta automatización mejorará la Gestión del Pre –Proyecto entre el
Gerente y el Líder del proyecto, permitiendo que la comunicación y el
16
tiempo de respuesta se den en un lapso de tiempo considerablemente
corto.
1.2 Soluciones a la problemática
El Gestor de Pre-proyectos permitirá una administración óptima y
eficaz sobre los requerimientos solicitados por las diferentes áreas que
conforman la Organización, optimizando el uso eficiente de los
recursos, debido a que las transacciones serán automatizadas gracias
a la tecnología implementada, otorgándole así un valor agregado a las
actividades desempeñadas ya que se presenta una ventaja potencial
sobre las diferentes aplicaciones que se hayan implementado
anteriormente en la Empresa
El Gestor proveerá al Gerente y al Líder de proyecto todas las
opciones necesarias para el correcto análisis, diseño, desarrollo e
implementación del mismo.
1.3 Opciones del Módulo
El Gerente y Líder de proyecto que hagan uso del módulo dispondrán
de algunas opciones, tales como:
Analizar el requerimiento
17
Realizar solicitud de Recursos
Asignar recursos a cada proyecto
Cambio de Estados del Proyecto
Cambio de Estados del documento - Plan Técnico
Elaborar cronograma por Proyecto
Definir actividades principales (hitos) y secundarias
Asignar tiempos estimados para la realización de cada
actividad
El Gerente y Líder de proyecto serán considerados usuarios finales los
que podrán hacer uso de estas opciones en forma segura desde
cualquier terminal conectada en red, teniendo en cuenta los privilegios
y su autenticación sobre el módulo implementado.
1.4 Opciones de Acceso a la aplicación:
Los Usuarios finales del Proyecto al momento de utilizar el aplicativo
necesitan ingresar la siguiente información:
Código de usuario
Clave de usuario
18
Tanto el Gerente y Líder de Proyecto podrán acceder a las opciones
que dispondrá el módulo de acuerdo a los roles que se les haya
configurado.
Para el desarrollo de este aplicativo nos basaremos en el uso de las
herramientas Netbeans o Eclipse. Cabe recalcar que esta aplicación
será desarrollada usando la tecnología Java en conjunto con la
potente base de datos Oracle 9i.
1.5 VISIÓN
Lograr que la solicitud de proyectos o requerimientos futuros se
convierta en una secuencia sencilla y transparente de procesos
interrelacionados que den como resultado soluciones rápidas,
altamente funcionales que satisfagan en su totalidad las necesidades
plasmadas en los requerimientos; permitiendo así a la empresa una
mayor proyección de crecimiento en el medio en el cual se
desempeña.
19
1.6 MISIÓN
Ofrecer a las personas involucradas en la gestión y desarrollo de
proyectos informáticos una herramienta altamente funcional, capaz de
automatizar la mayoría de los procesos inherentes a la administración
de los mismos teniendo como premisa fundamental la disponibilidad
de información totalmente confiable que sirva como base para la toma
de decisiones de manera oportuna y acertada.
1.7 OBJETIVOS GENERALES
Ofrecer una herramienta funcional capaz de automatizar, en gran
parte, los procesos que involucran la administración de los proyectos
informáticos, otorgando la información necesaria para la adecuada
toma de decisiones.
Implementación del módulo de Gestión de Pre - Proyectos que permita
la administración y control de los requerimientos informáticos
solicitados por las diversas áreas que integran la organización, las
cuales se llevarán a cabo por los ingenieros del área de Sistemas.
20
1.8 OBJETIVOS ESPECÍFICOS
Se tendrán presente los siguientes objetivos:
Lograr el ingreso y control de los requerimientos del área solicitante
por medio de una interfaz.
Asignación de los Ingenieros en Sistemas que participarán en el
desarrollo del proyecto.
La asignación adecuada de la infraestructura necesaria para llevar
a cabo la implementación del proyecto.
Limitar la asignación de Proyectos al líder SIS con la finalidad que
no se le sobrecargue de actividades.
Controlar las fases o etapas del proyecto mediante el cronograma
estimado de realización del proyecto.
Generación automática de las actividades del proyecto, tales como
fases de análisis, documentación, desarrollo, etc.
21
Generación de un cronograma estimado para la realización del
proyecto.
1.9 ALCANCES DEL PROYECTO
El alcance del presente módulo es implementar en el Sistema la
automatización de los registros de los pre-proyectos que son
requeridos por las diversas áreas que conforman la Compañía
(Financiero, Sistemas, Cobranzas, Inventario, etc.)
1.9.1 Ingreso de Proyectos al Sistema (requerimientos)
El ingreso será por departamento o área de la Empresa.
Asignar a cada proyecto la prioridad, indicando cual es el
que deberá ser desarrollado de manera urgente.
Prioridades Pesos
ALTA 3
MEDIA 2
BAJA 1
22
Nota: Este punto se encuentra soportado por el Módulo 2
de Gestión de Requerimientos, lo cual implica que ya no se
contemple como parte de nuestro alcance.
Asignar a cada proyecto la dimensión, para ser evaluado
por el módulo que le corresponde realizar el presupuesto.
Dimensión Valor
PEQUEÑO 1
MEDIANO 2
GRANDE 3
Nota: Este punto ya fue cubierto por el alcance del Módulo 2,
lo cual implica que ya no se contemple como parte de nuestro
alcance.
1.9.2 Nivel Gerencial
Una vez que la Gerencia atendió el requerimiento del área
solicitante, se considerarán los siguientes puntos:
Identificar la bitácora en donde estén almacenados
los recursos de Hardware, Software y Humano que
23
posee la Empresa junto con las pruebas de
conocimientos correspondientes para cada recurso
humano.
Por medio de una interfaz ingresar las características
de los recursos, requeridos por proyectos, sean estos
de Hardware, Software o Humano.
Bitacorizar los recursos seleccionados por Proyectos
y Departamentos para que el Módulo de presupuesto
pueda obtener dichos datos, junto con el módulo de
proveedores.
1.9.3 Asignación de Códigos por Proyecto
Se deberá seguir el siguiente formato:
[COD_DEPARTAMENTO + SECUENCIAL 4
DIGITOS] - NOMBRE_PROYECTO
Ejemplo:
Departamento de Contabilidad 12
Dígitos del Proyecto 1000
Nombre del Proyecto Cuentas por pagar
Código del proyecto [121000] – Cuentas por pagar
24
Nota: Este punto ya fue cubierto por el alcance del Módulo 2,
lo cual implica que ya no se contemple como parte de nuestro
alcance.
1.9.4 Asignación de Recursos (Líder de Proyecto)
Por medio de una interfaz o pantalla se presentará un
listado de los candidatos a líderes de proyectos al
Gerente de Proyectos, los cuales podrán ser escogidos
dependiendo de la capacidad y nivel de conocimiento
que se requiera, esto se lo efectuará por medio de un
check box u otra alternativa de selección.
Además se tendrá por cada uno de ellos una caja de
texto para registrar el proyecto al cual ha sido asignado,
esta última opción será obligatoria.
Una vez que el líder ha sido asignado a un proyecto, se
deberá notificar dicha asignación a través de un mail u
otro medio de comunicación.
25
Nota: La asignación del Líder de Proyectos ya no se
contempla como parte de nuestro alcance puesto que ya
se encuentra asignado una vez que se generó el
requerimiento.
1.9.5 Asignación de Recursos (Líder SIS)
Por medio de una interfaz o pantalla se presentará un
listado de los candidatos a líder SIS del Proyecto al
Gerente de Proyectos, los cuales podrán ser escogidos
por medio de un check box u otra alternativa de
selección.
Luego de que el líder tiene conocimiento del proyecto al
que fue asignado, este emitirá las características o
perfiles de los recursos que requiere para el desarrollo
del proyecto.
Por cada proyecto que posea el estado procesado o
terminado se deberá actualizar la bitácora de pesos que
posea el líder con respecto a los proyectos que tiene a su
26
cargo, para poder asignarle un nuevo proyecto y liberar
recursos para ser reutilizados.
Límite de asignación de Proyectos a un líder el cual se
llevará a cabo de la siguiente manera:
Se proveerá una interfaz mediante la cual se
permitirá configurar el límite de proyectos que
serán asignados al líder SIS.
Se tendrá un máximo de proyectos asignados al
líder que consiste en el siguiente esquema:
Se sumarán los pesos de los proyectos asignados
al líder, esa sumatoria se la verificará contra el
valor límite configurado; si ese valor límite es
inferior indica que aún se puede asignar proyecto
al líder, caso contrario no se realizará la
asignación del proyecto al líder.
Anteriormente se establecía de la siguiente manera:
Se establecerá un máximo de proyectos al tiempo
por cada líder, donde dicho límite será dinámico,
27
ya que dependerá de la sumatoria de los pesos de
las alternativas mostradas en la siguiente tabla:
Parámetros Pesos
Prioridad Máximo 21 de peso
Cantidad de Recursos Máximo 30 personas
Se establece como mayor prioridad 21 ya que es
la sumatoria de los mayores pesos por rangos, es
decir:
10(ALTA) + 7(MEDIA) + 4(BAJA) = 21
1.9.6 Asignación de Recurso Humano
Se mostrará por medio de una interfaz, al Líder SIS del
proyecto los posibles candidatos que colaborarán en el
desarrollo del Proyecto asignado, para que sean
escogidos dependiendo de la capacidad y nivel de
conocimiento que se requiera, los cuales serán
escogidos por medio de un check box u otra alternativa
de selección.
28
1.9.7 Asignación de Recursos Informáticos
Se mostrará por medio de una interfaz, al Líder SIS del
proyecto todos los recursos informáticos, sean esos
Hardware o Software, los cuales serán escogidos por
medio de un check box u otra alternativa de selección.
1.9.8 Cronograma de actividades para el Pre-Proyecto
Luego de la asignación del Líder SIS al Proyecto, se
deberá emitir el cronograma de trabajo con los hitos
principales presentados en la siguiente tabla:
ACTIVIDADES TIPO
- Inicio de Proyecto 0
- Capacitación a Recursos 0
- Introducción 1
- Modelo Entidad Relación 1
- Descripción de Estándares 1
- Descripción de motores o Sistemas 1
- Otras actividades 1
- Fin de la Capacitación 0
- Plan Técnico 0
- Elaboración Plan Técnico 1
- Aprobación del plan Técnico 1
29
- Plan Técnico Aprobado 0
- Fase de Análisis 0
- Análisis detallado 1
- Elaborar Dercas 1
- Revisar Dercas internamente 1
- Ajustes al documento 1
- Revisar y aprobar Dercas con Usuarios 1
- Dercas Aprobado 0
- Fase de diseño (Desarrollos Preliminares) 0
- Elaborar Manual de Diseño 1
- Diseño terminado 0
- Fase de Desarrollo 0
- Configuraciones 1
- Procesos 1
- Transacciones 1
- Reportes 1
- Desarrollo Terminado 0
- Pruebas y Correcciones 0
- Preparar ambiente 1
- Elaborar informe de pruebas internas 1
- Elaborar plan de pruebas 1
- Pruebas internas y correcciones 1
- Cambios probados 0
- Capacitación 0
- Elaborar Manual de Usuario 1
- Capacitación al Usuario 1
- Personal capacitado 0
- Instalación y soporte 0
30
- Elaborar control de objetos 1
- Elaborar plan de puesta en producción 1
- Elaborar informe de verificaciones post-
producción 1
- Instalación 1
- Verificación post – producción 1
- Elaborar manual del operador 1
- Capacitación al operador 1
- Soporte post – producción 1
- Instalación y soporte culminado 0
- Fin del Proyecto 0
Se debe tomar en consideración, que las actividades detalladas
en la tabla anterior pueden llegar a ser modificadas por parte
del usuario según las necesidades que requiera cubrir el
proyecto al cual fue asignado.
Las Actividades o tareas que posean Tipo H, serán llamadas
Hitos, mientras que las que tienen especificado Tipo A
continuarán con su antigua definición, es decir, actividad.
Estos Hitos y Actividades podrán ser visualizados por el Usuario
encargado de crear el cronograma, ya que este ingresará por
parámetros los tiempos necesarios para cada actividad y
además se brindará la opción de añadir y modificar actividades.
31
Una vez ingresados los tiempos y las actividades del
cronograma, el usuario visualizará las barras que indicarán los
tiempos requeridos para cada uno de los hitos.
También se podrá visualizar un diagrama de barras por las
actividades descritas para cada proyecto.
Se definieron los siguientes alcances adicionales para el
proyecto.
1.9.9 Definición de configuraciones generales
Se configurará mediante una interfaz la cantidad máxima
de proyectos que se asignarán al líder SIS del Proyecto.
1.9.10 Estados del Proyecto
Se proveerá una interfaz mediante la cual se realizará el
cambio de estadio del proyecto. Es decir, si el proyecto
esta “En curso, Suspendido, Stand By, etc”.
32
1.9.11 Definición de Tipo de Proyecto.
Se proveerá una interfaz mediante la cual se realizará la
definición del tipo de Proyecto. Esto es con la finalidad
de identificar si el Proyecto es de tipo informático,
software, telemática, contable, etc.
1.9.12 Aprobación del Plan Técnico del Proyecto.
Se proveerá una interfaz mediante la cual se definirá si el
Plan Técnico de dicho proyecto fue Aceptado o No.
1.9.13 Reportes de Detalles
Se muestra a nivel de detalle los siguientes reportes:
Detalle de los estados del Proyecto.
Detalle de Líderes Asignados a Proyectos.
Detalle de Actividades del Proyecto.
33
1.10 FODA DEL MÓDULO DE GESTION DE PRE-
PROYECTOS
1.10.1 Fortaleza
El módulo permitirá llevar un estándar de flujo de información,
sus obligaciones y restricciones a cada persona que esta
involucrada directa o indirectamente en el flujo.
Debido a la especificación de roles y privilegios existirá un
mayor control sobre la data que posee la Empresa.
Manejo Visual de los requerimientos solicitados por la empresa.
Manejo visual de los recursos que dispone la empresa y si
estos están disponibles o no para ser asignados a un proyecto.
Llevar un control de los proyectos asignados a cada participante
y líder SIS para optimizar la asignación de los proyectos a
realizar.
Permitirá disponer una base de líderes y colaboradores con
experiencia y profesionalismo ya que se encontrarán en
continua capacitación para la participación en un proyecto,
obteniendo personal eficiente y bien calificado acorde a sus
conocimientos.
Llevar un mejor control de las actividades que involucra un
proyecto.
34
Administración eficaz del tiempo para llevar a cabo las tareas
estipuladas en el cronograma.
Minimización de los recursos suministros, tiempo y humano.
1.10.2 Oportunidades
Ampliar los conocimientos por parte del staff de
programación.
La realización de los updates de las plataformas
(herramientas de programación) sin afectar a nuestro módulo
gestor de proyectos.
La realización de upgrades sobre la plataforma de trabajo
(Sistemas Operativos), lo cual mejorará la velocidad de
funcionamiento de consultas y reportes que genere nuestro
módulo.
Expansión en el mercado debido a la automatización del
100% de las actividades de la empresa.
Realizar un Help Desk para poder ayudar al personal de otras
áreas para que puedan formular sus requerimientos y por
tanto darles un encaminamiento correcto hacia sus
soluciones.
Ahorro de recursos utilizados por la Empresa.
35
1.10.3 Debilidades
Fallas repentinas de los componentes de un computador, red,
servidor, etc., que hagan uso del módulo, el cual interferirá
en la realización del proyecto de manera continua ya que esto
involucra paralizar las actividades hasta que se den
soluciones al inconveniente suscitado.
Mal uso de la aplicación por parte de los usuarios debido a la
falta de experiencia o conocimiento del mismo.
1.10.4 Amenazas
Saturación del ordenador o computador; instalación de
software o aplicaciones innecesarias que afectarían el
rendimiento del Módulo Gestor de Pre-Proyectos y del
experto en sistemas.
Filtración u obtención de información de la empresa por
medio de algún programa o accesos de hackers a la red.
Mal uso del módulo por usuarios nuevos o inexpertos que
podrían afectar el rendimiento del mismo.
La instalación de alguna herramienta que cause conflictos o
afecte el normal funcionamiento del computador o servidor
central.
36
Cambio de políticas de uso sobre la herramienta o flujo de
información.
Orientación por parte del Cliente hacia otras aplicaciones
expuestas al mercado por la competencia.
1.11 METODOLOGIA
El modelo utilizado para la implementación del módulo será el Modelo
en Espiral, debido a que combina dos modelos importantes como son:
el modelo lineal secuencial y el modelo de construcción de prototipos.
El modelo lineal secuencial (Ciclo de vida clásico)
Es un enfoque sistemático y secuencial del desarrollo del software que
comienza en un nivel de sistemas y progresa de la siguiente manera:
El modelo de construcción de prototipos
Análisis Diseño
Prueba Mantenimiento
Código
37
En este modelo se identifican un conjunto de requisitos del módulo a
desarrollar, tales como, entradas, procesamientos y salidas. Con esto
se elabora un prototipo inicial como punto de |partida que sirve para
detallar objetivos más concretos del producto final y que satisfaga al
usuario.
Por otra parte el Modelo en Espiral proporciona el potencial para el
refinamiento continuo del modelo inicial y desarrollo de versiones
incrementales del software así como también el análisis de riesgos del
mismo.
Atender Requerimiento
Elaboración Prototipo
Probar Prototipo
38
Modelo en Espiral
La finalidad como tal, es maximizar la reutilización de código, así como
construir y almacenar objetos complejos.
1.12 ARQUITECTURA
Para el desarrollo de nuestro sistema se utilizará la arquitectura 3
capas – 3 Tier. En la aplicación Cliente – Servidor se nos presenta la
ventaja que se tendrá dividida a la aplicación en capas, tales como:
Composición Visual, Reglas y Objetos del negocio. Esto permitirá
mantener un estándar de programación, manejar el concepto de los
roles de trabajo sobre el aplicativo, privilegios de acceso, etc.
Planificación Análisis de Riesgos
Comunicación con el Cliente
Ingeniería
Evaluación del Cliente
Construcción y Adaptación
39
Arquitectura Cliente – Servidor
1.13 TECNOLOGIA
En este módulo nos hemos enfocado en la tecnología J2EE y la
potente base de datos Oracle 9i como plataforma de desarrollo, donde
dicho lenguaje será el apropiado para la creación de nuestros objetos.
Java y Oracle son considerados hasta la actualidad una de las
mejores opciones para construir aplicaciones cliente/servidor gracias a
la potencialidad que ofrece al momento de implementar un nuevo
sistema.
40
Debido a que la mayor parte del desarrollo será realizado en Java, la
herramienta que usaremos para crear los applets de Java, las
aplicaciones, sus objetos, etc. están entre Eclipse y JCreator para
Java.
Eclipse
Eclipse posee un editor visual, que ofrece, compilación incremental de
código, un potente depurador, un navegador de clases, un gestor de
archivos y proyectos, pero no se limita sólo a esto. La versión estándar
de Eclipse proporciona también una biblioteca de refactorización de
código y una lista de tareas e incluye una herramienta para completar
código.
El asistente de contenido, encargado de mostrar los métodos y
atributos de las clases con las que se está trabajando, ya formen parte
de las APIs de JAVA o de cualquier otra clase en el build path, aunque
estén en ficheros JAR.
Cabe notar que la herramienta Eclipse es una aplicación amigable
para el usuario; la desventaja que se presenta en esta aplicación al
momento de su ejecución es que se necesita de un mayor
performance y capacidad de los equipos.
41
Otra herramienta a usar para el diseño de las interfaces que va a
interactuar en el módulo es el Netbeans, la misma que están en un
libre acceso para la comunidad informática.
PL/SQL
PL/SQL es un lenguaje procedimental que ORACLE desarrolló como
extensión al SQL estándar con el objetivo de proveer un medio para la
ejecución de lógica procedimental en la base de datos.
La aplicación PL/SQL se instala como un cliente de la Base de Datos
Oracle. El PL/SQL es un lenguaje procedimental, no declarativo, es
decir, que en el código a desarrollar, su código debe especificar
exactamente cómo se deben realizar las tareas o actividades.
1.14 RECURSOS
1.14.1 Hardware:
Una Equipo con todas las aplicaciones necesarias para
el desarrollo del Módulo.
Servidor de base de datos transaccionales
42
Switch de 5 puertos
Cableado estructurado
Capacidad disponible en disco duro aproximadamente
será de 300 MB
515 de memoria RAM como mínimo
1.14.2 Software:
Sistema operativo Windows XP Professional.
Aplicación Eclipse.
Base de Datos Oracle 9i.
1.14.3 Recurso Humano:
Para el desarrollo del proyecto será necesario contar con 3
Ingenieros en Sistemas, los cuales se citan a continuación:
Evelyn Alexandra Mendoza Burgos
María De Los Ángeles Recillo Reinado
Johnny Fernando Villavicencio López
1.15 CRONOGRAMA DE TRABAJO DEL PROYECTO
En el gráfico que se muestra se puede notar un cronograma de trabajo
general para llevar a cabo la realización del proyecto, este se llevará a
cabo por el Módulo 3:
43
Cronograma de Trabajo General – Fase 1
Se cita a continuación una breve descripción del contenido del
cronograma de manera general.
Capacitación del módulo a implementar.
Reunión con el usuario para conocer los requerimientos el
gestor de proyectos a implementar.
44
Análisis y elaboración del Alcance del módulo del Gestor de
proyectos.
Análisis del módulo de Gestor de Pre-Proyectos y definición de
los alcances propuestos para lograr el desarrollo del proyecto.
Revisión Alcances
Reunión realizada por el Departamento de Graduación para
notificar a cada grupo la aceptación, modificación o rechazo de
los alcances.
Elaboración del Modelo Entidad Relación (MER)
Análisis y revisiones previas con integrantes de cada grupo
para la realización del Modelo Entidad Relación.
Integración del Modelo Entidad Relación - MER
Reunión realizada dentro de las instalaciones de la Carrera con
la finalidad de definir las estructuras generales y principales con
sus respectivos atributos.
Se definieron las dependencias entre los grupos, para evitar
conflictos e inconsistencias en la data, logrando así la
Integridad de la misma.
45
Reunión efectuada por el Departamento de Graduación
Capacitación final a cargo del Ing. Juan Morales sobre la visión
Macro del Modelo del Gestor de Proyectos, es decir el flujo de
información entre los módulos.
Entrega del MER Integrado y su documentación
La documentación realizada sobre las estructuras que
contendrá el Modelo Entidad Relación fue entregada al Ing.
Fausto Saltos para su posterior análisis y aprobación.
Elaboración de los Scripts del MER
Elaboración de los scripts de las estructuras del Modelo Entidad
Relación Integrado que se insertarán en la Base de Datos, los
cuales fueron enviados por correo electrónico a todos los
grupos.
Elaboración del DFD (Diagrama de Flujo de Datos)
Reunión efectuada para definir las actividades y los procesos
que realiza el módulo.
46
Entrega del DFD
La entrega se realizo en el departamento de graduación al Ing.
Abel Alarcón.
En el gráfico que se muestra se puede notar un cronograma de trabajo
para llevar a cabo la realización del proyecto en su segunda Fase:
47
Cronograma de Trabajo – Fase 2
48
CAPÍTULO 2
2 ANALISIS DEL MODELO DE GESTIÓN DE PRE-PROYECTOS
2.1 REQUERIMIENTOS
Mediante la implementación del Gestor de Pre-Proyecto se proveerá
al Gerente y al Líder de proyecto todas las opciones necesarias para
el correcto análisis, diseño, desarrollo e implementación del mismo.
Su funcionalidad básica inicia con la solicitud del recurso y culminando
con la elaboración del Cronograma en el cual se establecerán tiempos
estimados para cada una de las actividades a realizar.
Este Gestor brindará los siguientes servicios:
Consulta de Recursos Humanos, de Software y Hardware que se
encuentran disponibles para la asignación de proyectos.
Solicitud de Recursos Informáticos y Humanos, cuando no existe
disponibilidad en la organización.
49
Elaboración del Plan Técnico
Elaboración y Visualización del cronograma inicial del Proyecto
Consulta del Presupuesto para la implementación del proyecto
aceptado, lo que incluye transferencia de dinero entre los proyectos
de las mimas áreas, si su presupuesto pasa de lo proyectado.
Al recibir el estatus del proyecto por parte del Módulo de Aprobación
del Presupuesto se definirá el estado adecuado al proyecto para
definir que esta en curso.
Para la utilización de estas aplicaciones debe tener el rol necesario
para poder tener acceso a dichas interfaces.
2.2 MODELO ENTIDAD RELACION
2.2.1 Análisis del Modelo Entidad Relación.
El modelo entidad relación correspondiente al Módulo a
implementar contendrá las siguientes estructuras a detallar:
50
GPP_ACTIVIDADES
La estructura permitirá describir las actividades principales
que se deben llevar a cabo para la implementación del
proyecto, así como también el tiempo estimado de
implementación del mismo, por ejemplo, las fases de un
proyecto como lo son el análisis, desarrollo, puesta en
marcha, etc..
A continuación se citarán los campos que contendrá la
estructura:
CAMPO DESCRIPCION
CODIGO_ACTIVIDAD Es un secuencial dependiendo del departamento
ACTIVIDAD_PROYECTO
Este campo contiene el secuencial de las actividades de un proyecto
CODIGO_PROYECTO
Este campo contiene el código del proyecto, en el cual esta ingresando las actividades
CODIGO_ESTADO
Este campo contiene el código del estado de la actividad, si esta realizada o no
51
DESCRIPCION_ACTIVIDAD Este campo contiene el nombre de la actividad o hito
ACTIVIDAD_PREDECESORA Este campo contiene el código de la actividad predecesora
ACTIVIDAD_HITO Este campo nos indica si la actividad es un Hito o no.
FECHA_INICIAL_REAL
Este campo es la fecha de inicio de una actividad este dato no es ingresado por usuario sino es el dato real de la iniciación de la actividad
FECHA_FINAL_REAL
Este campo es la fecha de final de una actividad este dato no es ingresado por usuario sino es el dato real de la finalización de la actividad
TIEMPO_ACTIVIDAD
Este campo es el tiempo que se demora en efectuar determinada actividad es un dato real no es ingresado por un usuario
FECHA_INICIAL_ESTIMADA
Este dato es ingresado por el usuario es un dato aproximado cuando empezará una actividad se lo maneja por un margen de error humano
FECHA_FINAL_ESTIMADA
Este dato es ingresado por el usuario es un dato aproximado cuando culminará una actividad se lo maneja por un margen de error humano
TIEMPO_ESTIMADO
Este dato es el tiempo que se podrá demorar una actividad esto lo ingresa el usuario
OBSERVACION
Es para agregar algún comentario relevante de alguna actividad o un hito
ASIGNACION_ACTIVIDAD
Este campo nos indicará que grupo hizo el ultimo cambio al registro
PARTIC_ACTIVIDAD
Este campo contendrá a todos los recursos humanos que están asignados a esa actividad
52
GPP_TIPO_PROYECTO
La estructura permitirá describir el tipo de proyecto que se
este implementando para las diferentes áreas o un proyecto
especifico.
A continuación se citarán los campos que contendrá la
estructura:
CAMPO DESCRIPCION
CODIGO_TIPO_PROYECTO Este campo contiene el código del tipo de proyecto
CODIGO_ESTADO
Este campo contiene el código del estado del tipo de proyecto
DESCRIPCION
Este campo contiene la descripción del tipo de proyecto
53
GPP_PRIVILEGIOS
La estructura permitirá obtener los privilegios que contiene
cada usuario.
A continuación se citarán los campos que contendrá la
estructura:
CAMPO DESCRIPCION
CODIGO_PRIVILEGIO
Este campo contiene el código del privilegio que tiene asignado un usuario
DESCRIPCION
Este campo contiene la descripción de los privilegios que tiene un usuario
VALOR_PRIVILEGIO
Este campo tiene el valor de los privilegios asignados a un usuario
GPP_CARACERISTICAS_PROYECTOS
La estructura permitirá obtener las características del
proyecto y los conocimientos aplicados para poder
desarrollar el proyecto.
54
A continuación se citarán los campos que contendrá la
estructura:
CAMPO DESCRIPCION
CODIGO_CARACTERISTICA_PROYECTO
Este campo contiene el código de la característica del proyecto
CODIGO_PROYECTO
Este campo contendrá el código del proyecto el cual es recibido por la tabla gen_proyectos.
DESCRIPCION_RECURSO
Este campo contiene los recursos aplicados para este proyecto.
CONOCIMIENTO_1
Este campo almacenará el perfil en que fue desarrollado el proyecto.
CONOCIMIENTO_2
Este campo almacenará el perfil en que fue desarrollado el proyecto.
CONOCIMIENTO_3
Este campo almacenará el perfil en que fue desarrollado el proyecto.
CONOCIMIENTO_4
Este campo almacenará el perfil en que fue desarrollado el proyecto.
MGI_EQUIPOS
La estructura permitirá registrar y llevar un control de los
equipos existentes en la organización los cuales son usados
para la elaboración de proyectos.
55
A continuación se citarán los campos que contendrá la
estructura:
CAMPO DESCRIPCION
CODIGO_EQUIPO Este campo contiene el código del equipo
DESCRIPCION
Este campo contiene la descripción detallada del equipo hardware.
CODIGO_ESTADO
Este campo contiene el código del estado del equipo; es para catalogarlo como disponible o no, según su estado.
FECHA_INGRESO Este campo contiene la fecha de ingreso de un equipo.
OBSERVACION
Este campo contiene alguna observación del equipo ya sea si puedes estar sujeto alguna garantía por contrato.
CODIGO_SUB_TIPO_SERVICIO
Este campo contiene el código del subtipo servicio el cual se encuentra relacionado a la tabla GPC_SUB_TIPO_SERVICIO.
MGI_SOFTWARE
La estructura permitirá registrar y llevar un control de las
aplicaciones e instaladores existentes en la organización los
cuales son usados para la elaboración de proyectos.
A continuación se citarán los campos que contendrá la
estructura:
56
CAMPO DESCRIPCION
CODIGO_SOFTWARE Este campo contiene el código del software.
DESCRIPCION
Este campo contiene la descripción detallada del software.
FECHA_INGRESO Este campo contiene la fecha de ingreso de un software.
CODIGO_ESTADO
Este campo contiene el código del estado del software; es para catalogarlo como disponible o no, según su estado.
CODIGO_SUB_TIPO_SERVICIO
Este campo contiene el código del subtipo servicio el cual se encuentra relacionado a la tabla GPC_SUB_TIPO_SERVICIO.
MGI_ASIGNACION
La estructura permitirá registrar todos los equipos y software
que están asignados a un proyecto.
A continuación se citarán los campos que contendrá la
estructura:
57
CAMPO DESCRIPCION
CODIGO_ASIGNACION Este campo contiene el código de la asignación.
CODIGO_PROYECTO
Este campo contiene el código del proyecto que esta relacionada con la tabla GEN_PROYECTOS.
CODIGO_EQUIPO
Este campo contiene el código de equipo que fue asignado al proyecto en algún momento.
CODIGO_SOFTWARE
Este campo contiene el código del software que fue asignado al proyecto en algún momento.
CODIGO_ESTADO
Este campo contiene el código del estado de la asignación; es para catalogarlo como disponible o no según su estado.
FECHA_ASIGNACION Este campo contiene la fecha de asignación del proyecto.
A continuación se muestra el Modelo Entidad Relación de manera
general:
GPP_ACTIVIDADES
GPP_PRIVILEGIO
GPP_DIMENSION
GPP_DETALLE_ACTIVI_RECU
GPP_RECURSO_ASIGNADO
GPP_SOLICITUD_RECURSO
GPP_ESTADO_ACTIVIDAD
GPP_TIPO_RECURSO
GEN_PROYECTOS
CLC_PARTICIPANTE
GPP_DOCUMENTACION
58
Modelo Entidad Relación – Inicial
Este MER Inicial es con el cual se comenzó a desarrollar nuestro
módulo, el mismo fue cambiando a lo largo del desarrollo del mismo,
por motivos de integración y duplicidad en la información de las tablas
se fueron reduciendo lo cual será mostrado en la imagen siguiente:
Modelo Entidad Relación – Final
GPP_TIPO_PROYECTO
GEN_ESTADO
GPP_PRIVILEGIO GEN_PROYECTOS
CLC_PARTICIPANTE_PROYECTO GPP_ACTIVIDADES
GPP_CARACTERISTICAS_PROYECTOS
CEH_HISTORICO_HITO
CEH_DET_ACT_RECURSO
MGI_EQUIPOS MGI_SOFTWARE
MGI_ASIGNACION
GPC_SUB_TIPO_SERVICIO
59
El MER que se visualiza esta seccionado por 2 colores: el primero es el
color negro el cual indica que son las estructuras de nuestro Módulo;
las de color azul indican que son las tablas de los módulos con las
cuáles se interactuará. Se nota la reducción de tablas, las mismas
fueron eliminadas puesto que se presentaban problemas por la
duplicidad de datos a nivel de la Base de Datos.
Para mayor detalle acerca del Modelo Entidad Relación ver Anexo 1
2.3 CASOS DE USO
Un diagrama de Casos de Uso nos permitirá mostrar las diversas
secuencias de acciones, que el módulo realiza para obtener un resultado
útil para el usuario.
Actores que intervienen
Casos de uso – Actores de los casos de Uso
Líder de Proyecto
Gerente de Proyecto
Actores externos
60
Asignación de Líderes
Asignación de Líderes del Proyecto.-
En este caso de uso se muestra al Gerente de Proyecto (actor), quien va
a asignar un líder SIS a un Proyecto determinado.
En el gráfico que se muestra a continuación se verán los tres procesos
involucrados:
Caso de uso 1 – Asignación de Líderes
Nombre: Asignación de Lideres
Descripción: Permite al gerente seleccionar los posibles lideres de proyectos donde se escogerá el mas idóneo para llevar a cabo el control del mismo, esta información se lo obtendrá del Módulo de Control de Líderes y Colaboradores.
Actores:1 Gerente de Proyecto (Principal)
Selecciona
r líder SIS
Bajar
DDF
Gerente de
Proyecto
Módulo de Control de
Líderes y
Colaboradores
61
Módulo de Control de Líderes y Colaboradores (Secundarios)
Precondiciones: El gerente baja el DDF y analiza su contenido, por medio de una interfaz selecciona un líder del modulo de Control de lideres y colaboradores;
Flujo Normal: 1. El sistema de manera grafica muestra el nombre y código del
proyecto. En una matriz. 2. Al momento de hacer clic en el nombre del proyecto se le
mostrará la opción para bajar el DDF de forma impresa o digital.
3. El sistema le proporciona al usuario un listado de todos los líderes de proyecto que tiene la empresa.
4. El usuario selecciona el líder y selecciona los proyectos que se le va asignar al líder.
5. El sistema realiza la lógica de negocio estandarizada al momento de asignarle un proyecto a un líder.
1. El sistema si la asignación del líder no cumple con la lógica del negocio se presentara un mensaje el cual indique que escoja otro líder
Poscondiciones: El líder del proyecto ya fue asignado.
Revisión del DDF
Este caso fue implementado para que el actor verifique los datos y
procesos mencionados dentro de un proyecto por medio del DDF.
Caso de uso 2 – Revisión
Revisión DDF
Líder de Proyecto
62
Nombre: Revisión del DDF
Descripción: Permite al líder de proyecto revisar el DDF (Documento de Definiciones Funcionales) y darle el visto bueno para seguir con el análisis del requerimiento solicitado.
Actores: Líder de proyectos.
Precondiciones: El líder de proyectos verifica el DDF para indicar si se debe realizar algún cambio o mejorar el DDF planteado.
Flujo Normal:
1. El sistema le brinda por medio de interfaz todos los proyectos que le fueron asignados.
2. El líder le da clic en nombre del proyecto y se le abrirá el DDF o se lo podrá descargar, el sistema hace las gestiones para ver los privilegios que tiene el usuario que desea descargar el archivo.
3. El líder analiza el DDF
Flujo Alternativo:
1. El DDF esta incompleto
Poscondiciones: El líder elabora el plan técnico.
Elaboración de Cronograma Estimado
Este caso fue implementado para la elaboración del cronograma con la
información necesaria para desarrollar el proyecto, esto se realiza
mediante la revisión del DDF que fue previamente revisado en el caso
de uso Revisión de DDF.
63
Caso de uso 3 – Cronograma Estimado
Nombre: Elaboración de Cronograma Estimado
Descripción: Líder del proyecto efectúa el cronograma estimado para el proyecto.
Actor: Líder de Proyecto
Precondiciones: El DDF debió ser aprobado previamente por el líder del proyecto
Flujo Normal: 1. El actor elabora el cronograma estimado. 2. El sistema le brinda al actor una interfaz donde él
podrá almacenar los tiempos estipulados a desarrollarse el proyecto.
3. Al momento de ingresar cada actividad correspondiente a un proyecto el sistema realiza la lógica del negocio para verificar los datos antes de ser almacenado en la Base.
Flujo Alternativo:
1. El sistema le pide al usuario ingresar bien los datos ya que hay inconsistencia en alguno de ellos.
Poscondiciones: Definir las fases.
Elaboración de Cronograma
Estimado
<<include>>
Elaborar
Cronogram
a
Revisión
DDF
Líder de
Proyecto
64
Definir Fases dentro del Cronograma
Este caso lo usa el líder del proyecto para almacenar las fases del
cronograma usando la información almacenada con anterioridad en el
caso de Elaborar Cronograma.
Caso de uso 4 – Fases del Cronograma
Nombre: Definir fases dentro del Cronograma
Descripción: Permite al actor definir las fases dentro de un cronograma para que esta información sea utilizada para los siguientes procesos del módulo.
Actores: Líder del Proyecto
Precondiciones: El líder del proyecto definirá las fases que se van a incluir
Definir Fases dentro del
Cronograma
<<Include>>
Definir
fases del
cronograma
Elaborar
Cronogram
a
Líder de
Proyecto
65
en el proyecto
Flujo Normal:
1. El actor recibirá de manera grafica el nombre del Proyecto.
2. El sistema le brinda de forma grafica los campos que debe ingresar las fases.
3. La manera que se tiene para diferenciar que es una fases es que las fases se las considera como hito.
4. El sistema guarda la información al momento que el actor presiona Enter o presiona el botón Guardar
Flujo Alternativo:
1. El sistema verifica si no ha ingresado ninguna fase el actor, en este caso se le notificara al actor que ingrese las fases del proyecto
Poscondiciones: Fases definidas
Definir Actividades dentro del Cronograma
Se utiliza este caso para definir las actividades que llevará un
cronograma la información necesaria para poder realizar esto es el
código del proyecto y tener previamente definido las fases del
cronograma.
66
Definir Actividades dentro del
Cronograma
<<include>>
Caso de uso 5 – Actividades del Cronograma
Nombre: Definir Actividades dentro del Cronograma
Descripción: Permite al actor elaborar las actividades que incluyen en el cronograma definiendo como fases las actividades que se las consideran como hitos.
Actores: Líder del Proyecto
Precondiciones: El líder del proyecto definirá las actividades que van a efectuarse para poder llegar a cumplir con el proyecto asignado al líder del proyecto.
Flujo Normal:
1. El actor recibirá de manera grafica el nombre del Proyecto.
2. El sistema le genera una matriz con todas las actividades ya asignadas para ese proyecto; si desea continuar asignándole actividades a un proyecto la cual se podrá hacer en la fila adicional que el sistema le brindará.
3. El actor deberá ingresar datos en la fila vacía, presiona enter.
Líder de
Proyecto
Definir
actividades
del
cronograma
Definir
fases del
cronograma
67
Envió cronograma estimado al
Gerente
4. El sistema hace las gestiones para poder ingresar los datos en la base, la cual es ejecuta por la regla del negocio.
5. El sistema realiza una consulta al actor si desea guardar los datos.
6. Realiza un Commit en la base de datos.
Flujo Alternativo:
1. El sistema realiza un Rollback.
Poscondiciones: Actividades definidas
Envió cronograma estimado al Gerente
Este caso lo utiliza el líder del proyecto para poder enviarle el
cronograma estimado al Gerente de Proyecto; la información que el
necesita, es tener asignado los tiempos a las Fases y Actividades del
proyecto del cronograma.
Caso de uso 6 – Envío del Cronograma
Líder de
Proyecto
Gerente de
Proyecto
Envió de
cronograma
estimado
Revisión DDF
Asignar tiempo a las
fases y actividades
68
Nombre: Envió cronograma estimado al Gerente
Descripción: Permite al actor principal enviare el cronograma estimado por medio del sistema al actor secundario.
Actores: Líder del Proyecto (Actor Principal) Gerente de proyecto (Actor secundario)
Precondiciones: El líder del proyecto cuando haya terminado de asignar los tiempos a las actividades y fases deberá enviar el cronograma al gerente de Proyecto.
Flujo Normal: 1. El actor principal ingresa el código del proyecto y presiona
el botón generar 2. El sistema le muestra de manera visual el cronograma. 3. El actor principal presiona el botón enviar 4. El sistema envía el cronograma estimado al Gerente de
Proyecto
Flujo Alternativo:
1. El sistema verifica si al momento de ejecutar la acción de enviar el cronograma se encuentre seleccionado el cronograma, si no es así, el sistema le envía una alerta al actor.
Poscondiciones: cronograma enviado
Aprobar el Plan Técnico por Líder SIS
Este caso se lo efectúa para poder definir los recursos a utilizar en el
proyecto, esto será el recurso Humano e Informático en el plan técnico.
69
Caso de uso 7 – Elaboración Plan Técnico por Líder SIS
Nombre: Aprobación del Plan Técnico por Líder SIS
Descripción: Permite al actor que en este caso es el líder del proyecto a revisar el plan técnico en el cual incluyen en el área la solicitud de recursos humano e Informáticos que va a ser usado en un determinado proyecto.
Actores: Líder del Proyecto
Precondiciones: El líder del proyecto ya debió haber aprobado el DDF recibido para poder pasar a esta fase del modulo.
Flujo Normal: 1. El actor principal selecciona el área. 2. El sistema presenta por medio de una interfaz la matriz
donde están todos los proyectos de esa área con su plan técnico y el estado del plan técnico.
3. El actor selecciona el estado que desea darle al plan técnico y presiona el botón OK.
4. El actor hace un clic encima del estado.
Aprobar el Plan Técnico por Líder SIS
<<include>>
Líder de
Proyecto
Recibe el
Plan Técnico
Aprobar el
Plan Técnico
Revisión
DDF
70
5. El sistema realiza la gestión de cambiar el estado al plan técnico.
6. EL sistema llama a la matriz ya con el nuevo estado asignado por el actor.
Flujo Alternativo:
1. El actor aprueba con un estado que no es Aprobado.
Poscondiciones: Fue aprobado el plan Técnico, notificar si hay disponibilidad de presupuesto
Verificar Presupuesto
En este caso de uso se notificara al actor después de haber procesado
el plan técnico si este tiene el presupuesto correcto o si el presupuesto
excede a lo estipulado en las normativas del modulo Módulo de Control
Presupuesto y Costos del Proyecto
Caso de uso 8 – Verificar Presupuesto
Líder de
Proyecto
Verificar
Presupuesto
Módulo de Control
Presupuesto y Costos del
Proyecto
71
Nombre: Verificar Presupuesto
Descripción: Permite al actor saber por medio de un mensaje si este proyecto esta en los rangos predeterminados para asignarle el presupuesto o se excede del valor.
Actores: Líder del Proyecto (Actor Principal) Módulo de Control Presupuesto y Costos del Proyecto (Actor Secundario)
Precondiciones: El líder debió haber pasado por el caso de uso de Elaboración del Plan Técnico por Líder SIS sin ninguna novedad para que este caso lo pueda analizar.
Flujo Normal:
1. El actor selecciona el botón Presupuesto 2. El sistema va a verificar los valores para el presupuesto del
proyecto
3. El sistema le notifica que si hay presupuesto disponible
Flujo Alternativo:
1. El sistema verifica y si no hay presupuesto, el sistema generará una interfaz grafica indicándole que no hay presupuesto disponible
Poscondiciones: Según las salidas de flujo podrá ir al envió del plan técnico o aplicar transferencia de dinero
Aplica Transferencia de Dinero
Este caso fue implementado para que el usuario decida consultar si
existe algún modo de llevar que exista disponibilidad de presupuesto de
este proyecto esto se lo consulta al modulo de Control y Costos del
Proyecto.
72
Aplica Transferencia de
Dinero
<<include>>
Caso de uso 9 – Aplica transferencia de Dinero
Nombre: Aplica Transferencia de Dinero
Descripción: Permite al actor saber si existe la posibilidad de poder seguir con el proyecto ya que sobrepasa el presupuesto si se puede aplicar la transferencia de dinero entre proyectos.
Actores: Líder del Proyecto (Actor Principal) Módulo de Control Presupuesto y Costos del Proyecto (Actor Secundario)
Precondiciones: El sistema le envía una notificación al actor principal, indicándole que no hay presupuesto disponible.
Flujo Normal: 1. El actor presiona le botón de aplicar transferencia. 2. El sistema hace las gestiones para consultar con el modulo
de control de Presupuestos y costos del Proyecto para saber si es aplicable la transferencia
3. El sistema notifica que si es aplicable la transferencia
Aplica
Transferenci
a de Dinero
Verificar
Presupuesto
Líder de
Proyecto Módulo de Control
Presupuesto y Costos del
Proyecto
73
<<include>>
<<include>>
Envió del Plan Técnico al Gerente
Flujo Alternativo:
1. El sistema verifica y si no hay presupuesto, el sistema regresará al caso de uso Elaboración del Plan Técnico por Líder SIS
Poscondiciones: Según las salidas este podrá ir al envió del plan técnico al gerente o directamente a la elaboración del plan técnico.
Envío del Plan Técnico al Gerente
El líder del proyecto le envía el plan técnico al Gerente sin antes de
haber pasado por la verificación del presupuesto y si no fue aprobada en
esta instancia verificar si este proyecto se le podría aplicar la
transferencia de dinero.
Caso de uso 10 – Envío de Plan Técnico al Gerente
Líder de
Proyecto
Aplica
Transferenci
a de Dinero
Envió Plan
Técnico al
Gerente
Verificar
Presupuesto
<<include>>
<<include>>
74
Nombre: Envió del Plan Técnico al Gerente
Descripción: Permite al actor enviar el plan técnico ya aprobado, verificado su presupuesto y asignado los recursos al proyecto.
Actores: Líder del Proyecto
Precondiciones: El sistema recibe la información de los casos de Verificar presupuesto y aplicar transferencia de dinero.
Flujo Normal:
1. El actor selecciona el proyecto el cual va a ser enviado al Gerente de Proyecto
2. El sistema genera el código, el nombre y el líder del proyecto en una interfaz grafica.
3. El sistema mostrara los atributos del proyecto su presupuesto, si fue asignada alguna transferencia.
4. El actor deberá presionar el botón enviar plan técnico. 5. El sistema hace las gestiones para enviar esa información al
Gerente de Proyecto.
Flujo Alternativo:
1. El sistema verifica si el proyecto seleccionado ya fue verificado el presupuesto y asignado los recursos necesarios sino el sistema le generará un mensaje indicándole que el proyecto le falta llenar las solicitudes de Recursos humanos e Informáticos.
Poscondiciones: Esta información enviada por el líder deberá ser verificada por el Gerente de Proyecto.
75
Gerente aprueba Plan Técnico
Gerente Aprueba Plan Técnico
El gerente deberá aprobar el plan técnico, obteniendo la información del
cronograma y del Plan técnico ya realizado por el líder del proyecto.
Caso de uso 11 – Gerente Aprueba Plan Técnico
Nombre: Gerente Aprueba Plan Técnico
Descripción: Permite al actor revisar el cronograma y el plan técnico realizado por el líder del proyecto para analizar y aprobar o no el plan técnico.
Actores: Gerente del Proyecto
Precondiciones: El sistema debió darle la información necesaria del cronograma y el plan técnico realizado por el líder del proyecto.
Gerente de
Proyecto
Envió de
cronograma
estimado
Gerente
Aprueba Plan
Técnico
Envió Plan
Técnico al
Gerente
<<include>
>
<<include>>
76
Flujo Normal:
1. El actor selecciona el proyecto de una matriz 2. El sistema genera el código, el nombre y el líder del
proyecto 3. El sistema le muestra al actor el plan técnico y el
cronograma elaborado por el líder de proyecto. 4. El gerente aprueba el plan técnico presionando el botón
aprobar.
Flujo Alternativo: Si el Gerente presiona el botón No aprobar el sistema hace las gestione para realizar el caso de uso Elaboración del Plan Técnico por Líder SIS
Poscondiciones: Si el caso termino con el flujo normal este seguirá a selección del recurso información y humano si sale por el flujo alternativo regresa al líder para que este realice el plan técnico.
Selección Recurso Informático
El líder por medio del sistema verificará si el modulo de Módulo de
Gestión de Infraestructura del Proyecto tiene las especificaciones
necesarias de los recursos que necesita para el proyecto.
77
Selección recurso Informático
Caso de uso 12 – Selección recurso Informático
Nombre: Selección recurso Informático
Descripción: Permite al actor revisar los recursos informáticos que constan con la empresa y si pueden ser asignados al proyecto.
Actores: Líder del Proyecto (Actor principal) Modulo de Gestión de infraestructura del Proyecto (Actor Secundario)
Precondiciones: El gerente aprobó el plan técnico elaborado por el Líder del Proyecto.
Flujo Normal:
1. El actor principal buscar proyecto y lo selecciona. 2. El sistema le da el código, nombre y líder del proyecto 3. El sistema gestiona con el actor secundario para poder
mostrarle de forma visual los recursos informáticos que posee la empresa.
4. El actor principal escoge los recursos que necesita 5. el sistema almacena la información de los recursos
Líder de
Proyecto
<<include>>
Gerente
Aprueba
Plan Técnico
Selección
recurso
Informático
Módulo de Gestión de
Infraestructura del
Proyecto
78
Selección recurso Humano
seleccionados por el actor.
Flujo Alternativo:
1. Si el líder no selecciona un proyecto no aprobado por el gerente, el sistema le enviara una alerta indicando que no ha sido aprobado aún; si el sistema verificará si aun no se han escogido los recursos si es así no se guardará la información que relacione el proyecto con el recurso.
Poscondiciones: Si el recurso asignado por el actor al proyecto esta disponible, asigno el recurso informático, si no esta disponible hacer las gestiones necesarias para emitir solicitud de recurso informático.
Selección Recurso Humano
El líder por medio del sistema verificará si el modulo de Módulo de
Control de Líderes y Colaboradores tiene las especificaciones
necesarias de los recursos que necesita para el proyecto.
Caso de uso 13 – Selección recurso Humano
<<include>>
Líder de
Proyecto
Gerente
Aprueba
Plan Técnico
Selección
recurso
Humano Módulo de Control de
Líderes y Colaboradores
79
Nombre: Selección recurso Humano
Descripción: Permite al actor revisar los recursos humano que constan con la empresa y si pueden ser asignados al proyecto.
Actores: Líder del Proyecto (Actor principal) Módulo de Control de Líderes y Colaboradores (Actor Secundario)
Precondiciones: El gerente aprobó el plan técnico elaborado por el Líder del Proyecto.
Flujo Normal:
1. El actor principal buscar proyecto y lo selecciona. 2. El sistema le da el código, nombre y líder del proyecto 3. El actor efectúa un filtro para poder ver la información que
el desea, es decir, con el perfil que el desee. 4. El sistema gestiona con el actor secundario para poder
mostrarle de forma visual los recursos humanos idóneas. 5. El actor principal escoge los recursos que necesita 6. El sistema almacena la información de los recursos
seleccionados por el actor.
Flujo Alternativo: 1. Si el líder no selecciona un proyecto no aprobado por el
gerente, el sistema le enviara una alerta indicando que no ha sido aprobado aún; si el sistema verificará si aun no se han escogido los recursos humanos si es así no se guardará la información que relacione el proyecto con el recurso.
Poscondiciones: El recurso humano esta seleccionado.
Emitir solicitud de recurso Informático nuevo
Este caso se lo realiza ya que no constamos con la infraestructura
necesaria para hacer el proyecto o debemos hacerle un update a un
equipo o algún software.
80
Emitir solicitud de recurso
informático nuevo o para
mejoras
Caso de uso 14 – Emitir solicitud
Nombre: Emitir solicitud de recurso Informático nuevo
Descripción: Permite al actor enviarle al modulo de Gestión de Infraestructura del Proyecto una solicitud para realizar un update o upgrade a un equipo o alguna aplicación necesaria para desarrollar el proyecto.
Actores: Líder del Proyecto (Actor principal) Módulo de Gestión de Infraestructura del Proyecto (Actor Secundario)
Precondiciones: No existe un equipo o una aplicación para desarrollar el proyecto, o se necesita realizar alguna mejora en un equipo existente.
Flujo Normal:
1. El actor principal buscar proyecto y lo selecciona. 2. El sistema genera el nombre, código y líder del proyecto.
Líder de
Proyecto
Emitir solicitud de
Recurso
Informático
nuevo
Selección
recurso
Informático
Módulo de Gestión de
Infraestructura del
Proyecto
<<include>>
81
3. El sistema por medio de una interfaz grafica le muestra los campos a llenar
4. El actor principal llena los campos con los recursos informáticos que desea adquirir
5. El sistema emite la solicitud al actor secundario.
Flujo Alternativo:
1. Si el líder no selecciona un proyecto no aprobado por el gerente, el sistema le enviara una alerta indicando que no ha sido aprobado aún.
Poscondiciones: La solicitud fue emitida al Módulo de Gestión de Infraestructura del Proyecto.
Asignación de Recurso Informático
En este caso se realiza la asignación definitiva de los recursos
informáticos al proyecto
Caso de uso 15 – Asigno recurso Informático
Asigno recurso Informático
Líder de
Proyecto
<<include>>
Emitir solicitud de
Recurso
Informático
nuevo o para
mejoras Selección
recurso
Informático
Asigno
Recurso
Informático <<include>>
82
Nombre: Asigno recurso Informático
Descripción: Permite al actor definir a todos los recursos que ya fueron entregados al proyecto y gestionados con el modulo de infraestructura.
Actores: Líder del Proyecto (Actor principal)
Precondiciones: Si hay disponibilidad de los recursos informáticos; o ya fue emitida la solicitud de recurso informático nuevo o mejora.
Flujo Normal:
1. El actor principal buscar proyecto y lo selecciona. 2. El sistema genera el nombre, código y líder del proyecto. 3. El sistema por medio de una interfaz visual muestra la relación
que existe entre los recursos informáticos y el proyecto el cual ya le pertenece
4. El actor verifica los datos y presiona el botón continuar 5. El sistema almacena la información.
Flujo Alternativo:
1. Si el líder no selecciona un proyecto no aprobado por el gerente, el sistema le enviara una alerta indicando que no ha sido aprobado aún o la solicitud todavía no es emitida.
Poscondiciones: Elaborar el cronograma final en base al estimado.
Verificar disponibilidad de Recurso Humano
El líder debe saber cuando esta libre un colaborador o un participante de
proyecto, toma información del caso de uso de Selección de Recurso
Humano.
83
Caso de uso 16 – Verificar disponibilidad del Recurso Humano
Nombre: Verificar disponibilidad de Recurso Humano
Descripción: Permite al actor verificar de los recursos humanos que el selecciono cual de ellos esta disponible o no.
Actores: Líder del Proyecto (Actor principal)
Precondiciones: EL caso de uso Selección del Recurso Humano
Flujo Normal:
1. El actor principal buscar proyecto y lo selecciona. 2. El sistema genera el nombre, código y líder del proyecto. 3. El sistema de manera visual le muestra al actor el personal
que están disponible y el personal que no esta disponible.
Flujo Alternativo:
1. Si el líder no selecciona un proyecto no aprobado por el gerente, el sistema le enviara una alerta indicando que no ha sido aprobado aún.
Poscondiciones: Si el recurso esta disponible irá a asignación de recurso humano y si no esta disponible tendrá que realizar una solicitud de recurso humano.
Verificar
disponibilidad
de recurso
humano Líder de
Proyecto
84
Solicitud de Recurso Humano
Solicitud de Recurso Humano
El Líder del proyecto le enviara al Módulo de Control de Líderes y
Colaboradores el perfil de las personas que necesitan integrarlas al
proyecto.
Caso de uso 17 – Solicitud de Recurso Humano
Nombre: Solicitud de Recurso Humano
Descripción: Permite al actor solicitar por medio del sistema al modulo de control de lideres y Colaboradores el personal que se necesita para comenzar a realizar el proyecto con los respectivos perfiles.
Actores: Líder del Proyecto (Actor principal) Módulo de Control de Líderes y Colaboradores (Actor secundario)
Precondiciones: El caso de uso Verificar disponibilidad de Recurso Humano
Módulo de Control de
Líderes y Colaboradores
Verificar
disponibilidad
de recurso
humano
Solicitud
Recurso
Humano
<<include>>
Líder de
Proyecto
85
Flujo Normal:
1. El actor principal buscar proyecto y lo selecciona. 2. El sistema genera el nombre, código y líder del proyecto. 3. el sistema le brinda una interfaz al actor principal 4. EL actor principal digitara a las personas que necesita ese
proyecto con sus respectivos perfiles y porcentajes de conocimiento.
5. El sistema almacena la información y gestiona para enviársela al actor secundario los datos ingresados por el actor principal.
Flujo Alternativo:
1. Si el líder no selecciona un proyecto no aprobado por el gerente, el sistema le enviara una alerta indicando que no ha sido aprobado aún; o todavía esta en una fase previa a esta.
Poscondiciones: Va a ir al caso de uso Selección de Recurso Humano para que el modulo haga las gestiones pertinentes para contratar el personal.
Asignación de Recurso Humano
En esta etapa el líder ya tiene definido las personas que participaran en
el proyecto por que están disponibles.
Caso de uso 18 – Asignación de Recurso Humano
Asignación de Recurso Humano
Líder de
Proyecto
Verificar
disponibilidad
de recurso
humano
Asignación
Recurso
Humano
<<Include>> Módulo de Control de
Líderes y Colaboradores
86
Nombre: Asignación de Recurso Humano
Descripción: Permite al actor tener definido todas las personas que van a entrar en el proyecto
Actores: Líder del Proyecto (Actor principal) Módulo de Control de Líderes y Colaboradores (Actor secundario)
Precondiciones: EL caso de uso Verificar disponibilidad de Recurso Humano
Flujo Normal:
1. El actor principal busca el proyecto y lo selecciona. 2. El sistema genera el nombre, código y líder del proyecto. 3. El sistema por medio de una interfaz visual mostrara todas las
personas que estarán en el proyecto. 4. El sistema guarda y almacena la relación entre el proyecto y el
recurso humano.
Flujo Alternativo:
1. Si el líder no selecciona un proyecto no aprobado por el gerente, el sistema le enviara una alerta indicando que no ha sido aprobado aún; o todavía esta en una fase previa a esta.
Poscondiciones: Elaborará el cronograma final en base al estimado.
Configuraciones Generales
El Gerente de Sistemas realiza las configuraciones necesarias para
tener la cantidad máxima de proyectos que se le puede asignar a un
líder y el peso máximo que puede tener un líder.
87
Configuraciones Generales
Caso de uso 19 – Configuraciones Generales
Nombre: Configuraciones Generales
Descripción: Permite al actor definir las reglas de negocios para poder asignarle proyectos a los lideres.
Actores: Gerente de Proyecto
Precondiciones: EL caso de uso debe verificar que es un gerente de proyecto para poder realizar estos ingresos a la base de datos.
Flujo Normal: 1. El actor hace clic en el botón Generar. 2. El sistema genera la matriz donde se encuentra la
Cantidad de Proyectos, Prioridad y Peso del Proyecto actual.
3. El actor si desea cambiar estas configuraciones deberá actualizar el campo Cantidad.
4. El actor debe presionar Enter o el Botón Guardar.
Gerente de
Proyecto Verificar
Prioridad de la
Empresa
Ingresar Cantidad
Máxima
Cantidad
<<include>>
Asignar el
Peso a
Proyecto
88
5. El sistema hace las gestiones para actualizar los datos, los otros campos se actualizan con referencia de la cantidad de Proyecto y la prioridad más alta que se encuentra en la tabla Gen_proyectos.
Flujo Alternativo:
1. No se cambia los datos ya existentes en la tabla.
Poscondiciones: Elaborará el cronograma final en base al estimado.
2.4 DIAGRAMAS DE PROCESOS
Diagrama de procesos es una herramienta que permite visualizar un
sistema como una red de procesos funcionales, conectados entre sí por
conductos y almacenes de datos. Siendo éste, una de las herramientas
más comúnmente usadas, sobre todo por sistemas operacionales en los
cuales las funciones del sistema son de gran importancia y son más
complejos que los datos que éste maneja.
Especificaciones:
Flecha. Indica el sentido y trayectoria del proceso de información o
tarea.
Rectángulo. Se usa para representar un evento o proceso determinado.
Rombo. Se utiliza para representar una condición. Normalmente el flujo
de información entra por arriba y sale por un lado si la condición se
cumple o sale por el lado opuesto si la condición no se cumple.
89
INICIO
Presentar Nombre y código de
Proyecto
DeseaDescargar
DDF
Descargar DDF
No
Si
Elegir Lider SIS
No
Si
Guardar Datos en la
Base
FIN
Tiene
Permiso Descargar
Si
No
Líder Es Apto
Círculo. Representa un punto de conexión entre procesos. Se utiliza
cuando es necesario dividir un diagrama de flujo en varias partes.
Diagrama de procesos 1: Asignación de líderes
90
INICIO
Seleccionar
Proyecto
Descargar
DDF
Aprobar
DDF
Si
Cambiar
estado al
DDF
FINNo
Diagrama de procesos 2: Revisión DDF
INICIO
Seleccionar
Proyecto
Asignar
Tiempo
FIN
Diagrama de procesos 3: Elaboración Cronograma Estimado
91
INICIO
Seleccionar
Proyecto
Elaborar
Fases
Desea
Guardar
FIN
Si
No
Diagrama de procesos 4: Fases del Cronograma
92
INICIO
Seleccionar
Proyecto
Ingresar
Datos
Desea
Guardar
Si
No
Consultar
Regla de
Negocio
Desea
Guardar
Si
Guardar en
la Base
No
Ingresar
Otra
Actividad
No
1
1
FIN
Si
Diagrama de procesos 5: Definir Actividades dentro del Cronograma
93
INICIO
Seleccionar
Proyecto
Enviar
Cronograma
Gerente
Recibe
FIN
Diagrama de procesos 6: Enviar Cronograma al Gerente
INICIO
Seleccionar
Proyecto
Si
Aprobar
Plan
Técnico
FIN
No
Diagrama de procesos 7: Aprobación del plan técnico por líder SIS
94
INICIO
Seleccionar
Proyecto
Verificar
Presupuesto
Presupuesto
disponible
FIN
Si
No
Presupuesto
Disponible
Diagrama de procesos 8: Verificar Presupuesto
95
INICIO
Seleccionar
Proyecto
Aplicar
Transferencia
Apto para
transferencia
Realizar
Transferencia
Si
Desea
salir
No
Si
FIN
Diagrama de procesos 9: Aplica transferencia de dinero
INICIO
Seleccionar
Proyecto
Enviar Plan
Tècnico
FIN
Diagrama de procesos 10: Envió plan técnico al Gerente
96
Diagrama de procesos 11: Gerente aprueba plan técnico
INICIO
Seleccionar
Proyecto
Seleccionar los
Recursos
Informaticos
Desea
Guardar
No
Si
Almacenar
en la Base
FIN
Diagrama de procesos 12: Selección recurso Informático
INICIO
Seleccionar Proyecto
Revisar Plan tècnico y
cronograma
FIN
Aprobar Plan Tècnico
Si
No
97
INICIO
Seleccionar
Proyecto
Seleccionar el
perfil de los
participante
Ingresar el
número de
participantes
Desea seleccionar
otros participantes
Si
No
Guardar
datos en la
Base
Desea
Seleccionar
otro proyecto
FIN
Si
No
Diagrama de procesos 13: Selección recurso Humano
98
INICIO
Seleccionar
Proyecto
Ingresar datos
para emitir
solicitud
Emitir
Solicitud
Enviar
olicitud
Si
No
Desea
salir
No
FINSi
Diagrama de procesos 14: Emitir Solicitud
INICIO
Seleccionar
Proyecto
Proyecto
Aprobado por
Gerente
No
Asignar
Recursos
Si
FIN
Diagrama de procesos 15: Asignación Recurso Informáticos
99
INICIO
Seleccionar
Proyecto
Seleccionar
los RRHH
no asignado
FIN
Diagrama de procesos 16: Verificar disponibilidad recurso Humano
INICIO
Seleccionar
Proyecto
Seleccionar
Perfil
Seleccionar
el número
de RRHH
Existe otro
perfil para
proyecto
No
Si
Enviar
Solicitud
FIN
Diagrama de procesos 17: Solicitud Recurso Humano
100
Asignar
Recurso a
otro proyecto
INICIO
Seleccionar
Proyecto
Seleccionar
RRHH al
proyecto
Guardar
relaciòn
Si
FIN
No
Diagrama de procesos 18: Asignación de Recurso Humano
INICIO
Generar
Configuraciones
generales actuales
Cambiar el registro
de Proyecto máximo
asignados a lideres
Guardar
cambios
No
Guardar
cambios
Si
FIN
Diagrama de procesos 19: Configuraciones Generales
101
2.5 DIAGRAMA DE FLUJO DE DATOS
Durante la etapa de análisis se obtuvo el DFD (Diagrama de Flujo de
Datos), el cual se encargará de definir paso a paso todas las actividades
que se llevarán a cabo a lo largo de la implementación del proyecto y
las que deberán interactuar con los demás módulos.
A continuación se muestra, de manera general y breve, el diagrama de
flujo de datos.
GERENTE
ATIENDE
REQUERIMIENTO
GERENTE ASIGNA
LÍDER SIS Y
CONSULTA LÍDER
PROYECTO
ENVÍO Y REVISIÓN
DE DDF POR
LÍDER SIS
LÍDER SIS
ELLABORA PLAN
TÉCNICO Y
CRONOGRAMA
DEFINIR FASES
DENTRO DEL
CRONOGRAMA
DEFINIR
ACTIVIDADES
DENTRO DEL
CRONOGRAMA
ASIGNAR TIEMPO
A LAS FASES Y
ACTIVIDADES
CRONOGRAMA
PRE-FINALIZADO
DISPONIBILIDAD
RECURSOS
REQUERIMIENTO
ATENDIDO
DDF
REVISADO
IDENTIFICAR
LAS FASES
ACTIVIDADES
DEFINIDAS
TIEMPO
DEFINIDO
PLAN
TÉCNICO
LÍDERES
SELECCIONADOS
O & M
ENVÍA
REQUERIMIENTO
A SISTEMAS
VERIFICAR
PRESUPUESTO
PRESUPUESTO
APROBADO
REVISIÓN CRONOGRAMA
PARA PRESUPUESTO
PRESUPUESTO
NO APROBADO
CAMBIO ESTADO
PROYECTO
ASIGNAR
RECURSO
HUMANO /
INFORMATICO
FASES
DEFINIDAS
GERENTE
REVISA
PLAN
TÉCNICO
PLAN TECNICO
GERENTE
LIDER RECIBE
PLAN TECNICO
ENVIO PLAN
TECNICO
PLAN TECNICO
APROBADO
P. TEC. NO APROBADO
SELECCIONA
RECURSO
SI
ASIGNACIÓN
RECURSO
HUMANO /
INFORMATICO
NO
SOLICITUD
RECURSO
HUMANO E
INFORMÁTICO
RECURSOS
ASIGNADOS
ELABORO
CRONOGRAMA
FINAL EN BASE AL
ESTIMADO
SOLICITUD
APROBADA /
CONTRATO
VENCE
FECHA PLAZO
CAMBIO ESTADO
PROYECTO
Diagrama de Flujo de Datos
102
Se explica, de manera general, los procesos que se involucran en el
Diagrama de Flujo de Datos.
PROYECTO SELECCIONADO
El Gerente de Proyectos obtiene el proyecto por parte del departamento
O&M, este se encargará de actualizar el proyecto obteniendo el Líder del
Proyecto, para luego realizar la respectiva selección del Líder SIS.
Dicha selección la podrá realizar una vez que se visualice a manera de
reporte los líderes que cumplan con el perfil requerido para dicho
proyecto.
LIDER SIS ELABORA PLAN TECNICO Y CRONOGRAMA ESTIMADO
Líder SIS procederá a realizar el cronograma inicial de trabajo y el Plan
Técnico para poder comenzar con el desarrollo del proyecto requerido
SOLICITUD RECURSO HUMANO E INFORMATICO
Se solicitará mediante interfaz los recursos necesarios para la
elaboración del proyecto.
CONSULTAR PRESUPUESTO
103
Se consulta la disponibilidad del presupuesto con que cuente el área
solicitante del requerimiento, en caso de que no exista el presupuesto
necesario, se procederá a aplicar la transferencia de dinero de un área a
otra, previa autorización; en caso de que no se apruebe la transferencia
de dinero el líder de Proyecto deberá modificar el Plan Técnico
ajustándolo al presupuesto existente en cada área de la organización.
Cabe tomar en consideración que la elaboración del Plan técnico y el
cronograma deberán ser realizadas en paralelo, es decir, de manera
conjunta.
CRONOGRAMA INICIAL
En este caso, luego que el DDF esté completo, a más de realizar el Plan
Técnico, el Líder SIS elaborará el cronograma estimado en donde
definirá las fases del proyecto y sus correspondientes hitos que
involucran el desarrollo del mismo.
Una vez que se hayan definido dichas actividades se les asignarán el
tiempo de realización (en días) por parte del desarrollador. Tanto el
Cronograma como el Plan Técnico serán emitidos al Gerente de
Proyectos.
104
ASIGNACION DE RECURSOS
Debido a que el Plan Técnico está aprobado se procederá a la
asignación de recursos sean estos Informáticos o Humano; en caso de
que no exista disponibilidad por parte del mismo, se emitirá una solicitud
correspondiente al recurso humano / recurso informático
Al momento de la asignación del recurso humano se deberá seleccionar
dicho participantes que cumplan con el perfil requerido, en caso de que
dicho recurso no esté disponible (asignado a un proyecto). Una vez
realizada la asignación del recurso informático y humano se elaborará el
cronograma final en base al cronograma inicial.
Para mayor detalle acerca del Diagrama de Flujo de Datos ver
Anexo 2.
105
CAPÍTULO 3
3 DISEÑO DEL MODELO DE GESTIÓN DE PRE-PROYECTOS
3.1 Descripción de Clases Principales
3.1.1 LiderProyecto
Esta clase servirá para registrar los líderes del proyecto, es decir,
el gerente del área generadora del requerimiento.
LIDERPROYECTO CodigoProyecto Area NombreProyecto Respondable
getArea() setArea(String area) getCodigoProyecto() setCodigoProyecto(Integer codigoProyecto) getNombreProyecto() setNombreProyecto(String nombreProyecto) getRespondable() setRespondable(String respondable)
3.1.1.1 Descripción de los campos
CodigoProyecto: Obtiene el código del proyecto.
Area: Describe el área del proyecto
NombreProyecto: Describe el nombre del proyecto.
106
Responsable: Describe el nombre del responsable del
área generadora del proyecto.
3.1.1.2 Descripción de funciones y
procedimientos
getArea(): función que obtiene el área al cual pertenece el
proyecto.
setArea(String area): función que recibe como parámetro
el área del proyecto.
getCodigoProyecto(): función que obtiene el código del
proyecto.
setCodigoProyecto(Integer codigoProyecto): función
que recibe como parámetro el código del proyecto.
getNombreProyecto(): función que obtiene el nombre del
proyecto.
setNombreProyecto(String nombreProyecto): función
que recibe como parámetro el nombre del proyecto.
getResponsable(): función que obtiene el código del
responsable del proyecto, es decir, el responsable del área
generadora del proyecto.
107
setResponsable(String responsable): función que recibe
como parámetro el nombre del responsable del área
generadora del proyecto.
3.1.2 AsignaRecurso
Esta clase servirá para asignar a los recursos (colaboradores) que
participarán en un proyecto, de acuerdo a los conocimientos
escogidos y requeridos por el líder SIS.
ASIGNARECURSO descripcion_area descripcion_proyecto recurso
getDescripcion_area() setDescripcion_area(String descripcion_area) getDescripcion_proyecto() setDescripcion_proyecto(String descripcion_proyecto) getRecurso() setRecurso(String recurso)
3.1.2.1 Descripción de los campos
Descripcion_area: Describe el área al cual pertenece el
proyecto y sobre el cual se asignará el recurso.
108
Descripcion_proyecto: Describe el proyecto actual
Recurso: identificará la recurso que se va asignar.
3.1.2.2 Descripción de funciones y
procedimientos
getDescripcion_area(): función que obtiene la descripción
del área al que pertenece el proyecto.
setDescripcion_area(String descripcion_area):
función que recibe como parámetro la descripción del área
del proyecto.
getDescripcion_proyecto() : función que obtiene la
descripción del proyecto.
setDescripcion_proyecto(String descripcion_proyecto)
: función que recibe como parámetro la descripción del
proyecto.
GetRecurso() : función que obtiene el recurso que
participará en el proyecto.
setRecurso(String recurso) : función que recibe como
parámetro el recurso que participará en el proyecto.
109
3.1.3 AsignaInfor
Esta clase servirá para asignar a los recursos informáticos
(hardware y/o software). Estos serán asignados por el Gerente de
Proyectos.
AsignaInfor descripcion_area descripcion_proyecto recurso
getDescripcion_area() setDescripcion_area(String descripcion_area) getDescripcion_proyecto() setDescripcion_proyecto(String descripcion_proyecto) getRecurso() setRecurso(String recurso)
3.1.3.1 Descripción de los campos
Descripcion_area: Describe el área al cual pertenece el
proyecto y sobre el cual se asignará el recurso.
Descripcion_proyecto: Describe el proyecto actual
Recurso: identificará la recurso que se va asignar.
110
3.1.3.2 Descripción de funciones y
procedimientos
getDescripcion_area(): función que obtiene la descripción
del área al que pertenece el proyecto.
setDescripcion_area(String descripcion_area):
función que recibe como parámetro la descripción del área
del proyecto.
getDescripcion_proyecto() : función que obtiene la
descripción del proyecto.
setDescripcion_proyecto(String descripcion_proyecto)
: función que recibe como parámetro la descripción del
proyecto.
GetRecurso() : función que obtiene el recurso que
participará en el proyecto.
setRecurso(String recurso) : función que recibe como
parámetro el recurso que participará en el proyecto.
111
3.1.4 AsignaSIS
Esta clase servirá para asignar a los recursos (líderes del
proyecto). Estos serán asignados por el Gerente de Proyectos
AsignaSIS codigoProyecto proyecto areas liderSIS
getAreas() setAreas(String areas) getCodigoProyecto() setCodigoProyecto(Integer codigoProyecto) getLiderSIS() setLiderSIS(String liderSIS) getProyecto() setProyecto(String proyecto)
3.1.4.1 Descripción de los campos
CodigoProyecto: Obtiene el código del proyecto con el
cual se va a realizar la asignación.
Proyecto: Describe el proyecto actual
Áreas: identificará el área al cual se hace referencia.
Recurso: identificará la recurso que se va asignar, en este
caso el líder SIS.
112
3.1.4.2 Descripción de funciones y
procedimientos
getAreas(): función que obtiene la descripción del área al
que pertenece el proyecto.
setAreas(String areas): función que recibe como
parámetro la descripción del área del proyecto.
getCodigoProyecto(): función que obtiene el código del
proyecto.
setCodigoProyecto(Integer codigoProyecto) : función
que recibe como parámetro el código del proyecto.
getLiderSIS(): función que obtiene el líder que participará
en el proyecto.
setLiderSIS(String liderSIS): función que recibe como
parámetro el líder que participará en el proyecto.
getProyecto(): función que obtiene la descripción del
proyecto.
setProyecto(String proyecto):función que recibe como
parámetro la descripción del proyecto.
113
3.1.5 Configuración
Esta clase servirá para realizar la configuración de la cantidad
límite de proyectos que se le serán asignados al líder SIS.
Configuracion id_tipo_parametro descripcion_tipo_parametro id_parametro desripcion_parametro peso cantidad prioridad
getCantidad() setCantidad(String cantidad) getPeso() setPeso(String peso) getPrioridad() setPrioridad(Integer prioridad)
3.1.5.1 Descripción de los campos
id_tipo_parametro: es el código del tipo de parámetro se
quiere capturar, ya sea cantidad límite o el peso del
proyecto.
descripcion_tipo_parametro: descripción del tipo de
parámetro
id_parametro: código del parámetro al que se va a
referenciar.
descripcion_parametro: descripción del parámetro.
valor: valor numérico del parámetro
114
peso: peso que se asignará al líder de proyectos de
acuerdo a la cantidad de proyectos que se le haya
asignado.
cantidad: cantidad de proyectos que se le asignan al
Líder SIS
prioridad: se describe la prioridad del proyecto, es decir, la
necesidad de que se lleve a cabo lo más pronto posible.
3.1.5.2 Descripción de funciones y
procedimientos
getCantidad(): función que obtiene la cantidad de
proyectos que le serán asignados al líder SIS.
setCantidad(String cantidad): función que recibe como
parámetro la cantidad de proyectos que le serán asignados
al líder SIS.
getPeso() : función que obtiene el peso del proyecto que
se le asignó al líder.
setPeso(String peso): función que recibe como parámetro
el peso del proyecto que se le asignó al líder.
getPrioridad() : función que obtiene la prioridad del
proyecto.
115
setPrioridad(Integer prioridad) : función que recibe como
parámetro la prioridad del proyecto.
3.1.6 DefineProyecto
Esta clase servirá para realizar la configuración de la cantidad
límite de proyectos que se le serán asignados al líder SIS.
DefineProyecto codigo_proy descripcionTipo descripcionProyecto
getCodigo_proy setCodigo_proy(Integer codigo_proy) getDescripcionProyecto() setDescripcionProyecto(String descripcionProyecto) getDescripcionTipo() setDescripcionTipo(String descripcionTipo)
3.1.6.1 Descripción de los campos
codigo_proy: describe el código del proyecto.
descripcionTipo: descripción del tipo de proyecto a
implementarse.
descripcionProyecto: descripción del proyecto.
116
3.1.6.2 Descripción de funciones y
procedimientos
getCodigo_proy: función que obtiene el código del
proyecto.
setCodigo_proy(Integer codigo_proy): función que
recibe como parámetro el código del proyecto.
getDescripcionProyecto(): función que obtiene la
descripción del proyecto.
setDescripcionProyecto(String descripcionProyecto):
función que recibe como parámetro la descripción del
proyecto.
getDescripcionTipo(): función que obtiene la descripción
del tipo de proyecto a implementarse.
setDescripcionTipo(String descripcionTipo): función
que recibe como parámetro la descripción del tipo de
proyecto a implementarse.
117
3.1.7 Cronograma
Esta clase servirá para identificar las diferentes actividades e hitos
ingresados al Cronograma por parte del Líder junto con sus
correspondientes tiempos de duración, incluidas las fechas y su
actividad predecesora.
CRONOGRAMA CodigoProyecto codigoArea porcentaje orden cod_actividad actividad hito ls_hito predecesora fechaInicio fechaFin asignacionActividad estado tiempo recurso observación
GetActividad(); setActividad(String actividad) getFechaFin() setFechaFin(Date fechaFin) getFechaInicio() setFechaInicio(Date fechaInicio) getHito() setHito(Boolean hito) getObservacion() setObservacion(String observacion) getOrden() setOrden(Integer orden) getPredecesora() setPredecesora(Integer predecesora) getRecurso() setRecurso(String recurso) getTiempo()
118
setTiempo(Integer tiempo) getCodigoProyecto() setCodigoProyecto(Integer codigoProyecto) getCod_actividad() setCod_actividad(Integer cod_actividad) getLs_hito() setLs_hito(String ls_hito)
3.1.7.1 Descripción de los campos
CodigoProyecto: código del proyecto actual
CodigoArea: código del área al que pertenece el proyecto.
Porcentaje: porcentaje de avance del proyecto Orden: orden o secuencial de la tabla
Cod_actividad: código de la actividad del proyecto
Actividad: descripción de la actividad.
Hito: valor del hito (boolean).
Ls_hito: valor del hito (String).
Predecesora: actividad que precede o depende de otra
FechaInicio: fecha en la cual inicia la actividad
FechaFin: fecha en la cual finaliza la actividad
AsignacionActividad: grupo q realiza la asignación de
la actividad
Estado: indica el estado de la actividad
Tiempo: indica el tiempo que se tomará en llevar a cabo la
actividad.
119
Recurso: asesor que llevará a cabo dicha actividad.
Observacion: observación que se desee citar sobre la
actividad que se está ingresando.
3.1.7.2 Descripción de funciones y
procedimientos
GetActividad(): función que obtiene la descripción de la
actividad que se está registrando.
setActividad(String actividad) : función que recibe como
parámetro la descripción de la actividad
getFechaFin() : función que obtiene la fecha fin de la
actividad que se está registrando.
setFechaFin(Date fechaFin): función que recibe como
parámetro la fecha fin de la actividad
getFechaInicio(): función que obtiene la fecha de inicio de
la actividad que se está registrando.
setFechaInicio(Date fechaInicio): función que recibe
como parámetro la fecha de inicio de la actividad
getHito(): función que obtiene si la actividad es hito o no en
valor booleano.
120
setHito(Boolean hito): función que recibe como parámetro
el hito de la actividad en valor booleano
getObservacion() : función que obtiene la observación de
la actividad.
setObservacion(String observacion): función que recibe
como parámetro la observación adicional a la
actividad.
GetOrden(): función que obtiene el secuencial de la
actividad.
setOrden(Integer orden): función que recibe como
parámetro el secuencial de la actividad.
GetPredecesora(): función que obtiene la actividad.
Predecesora.
setPredecesora(Integer predecesora): función que recibe
como parámetro la actividad predecesora.
GetRecurso() : función que obtiene el recurso de la
actividad.
setRecurso(String recurso) : función que recibe como
parámetro el recurso que participa en la actividad.
GetTiempo(): función que obtiene el tiempo en el que se
llevará a cabo la actividad.
121
setTiempo(Integer tiempo): función que recibe como
parámetro el tiempo de la actividad.
GetCodigoProyecto() : función que obtiene el código del
proyecto.
setCodigoProyecto(Integer codigoProyecto): función
que recibe como parámetro el código del proyecto.
getCod_actividad(): función que obtiene el código de la
actividad a ser identificada
setCod_actividad(Integer cod_actividad) : función que
recibe como parámetro el código de la actividad.
getLs_hito() : función que obtiene si la actividad es hito o
no en valor String.
setLs_hito(String ls_hito): función que recibe como
parámetro el hito de la actividad en valor String que puede
ser H o A.
3.1.8 Estado
Esta Clase es creada para obtener el detalle de los estados, los
cuales serán utilizados para cambiar el estado del proyecto, se
detallan los campos y las funciones a utilizarse.
122
ESTADO
Codigo_proy Descripcion_proyecto descripcion_area estado sec
setCodigo_proy(Integer codigo_proy) getCodigo_proy() setDescripcion_proyecto(String descripcion_proyecto) getDescripcion_proyecto() setDescripcion_area(String descripcion_area) getDescripcion_area() setEstado(String estado) getEstado() getSec() setSec(Integer sec)
3.1.8.1 Descripción de los campos
Codigo_proy: Código del Proyecto el cual servirá para
actualizar el estado del proyecto.
Descripcion_proyecto: Describe el proyecto al que se
está referenciando.
Descripcion_area: Describe el área solicitante del
proyecto
Estado: Describe el estado actual del Proyecto
Sec: Identificar el secuencial que se visualiza en pantalla.
123
3.1.8.2 Descripción de funciones y
procedimientos
getCodigo_proy(): Función que retornará el código del
proyecto.
setCodigo_proy(Integer codigo_proy): Esta función va a
recibir el parámetro del código del proyecto con el cual se
realizará la actualización del estado del proyecto.
getDescripcion_proyecto(): Función que va a devolver al
descripción del proyecto.
setDescripcion_proyecto(String descripcion_proyecto):
Esta función va a recibir como parámetro la descripción del
proyecto que identificará el nombre del proyecto que se
está aplicando.
getDescripcion_area(): Función que devolverá el área al
que pertenece el proyecto.
setDescripcion_area(String descripcion_area):
Esta función va a recibir como parámetro la descripción del
área del proyecto
getEstado(): Función que devolverá el estado del proyecto.
setEstado(String estado):
124
Esta función va a recibir como parámetro la descripción del
estado del proyecto
getSec() :función que devuelve el secuencial u orden de la
tabla
setSec(Integer sec): función que recibe como parámetro
el orden de la tabla
3.1.9 Aprueba
Esta clase es creada para obtener las aprobaciones de los
documentos del plan técnico, los cuáles serán de utilización para
el líder SIS y para el Gerente de Sistemas, a continuación se
detallan los campos y las funciones a utilizarse.
APRUEBA
codigo_doc codigo_proy descripcion descripcion_proyecto
getCodigo_doc() setCodigo_doc(Integer codigo_doc) getCodigo_proy() setCodigo_proy(Integer codigo_proy) getDescripcion() setDescripcion(String descripcion) getDescripcion_proyecto() setDescripcion_proyecto(String descripcion_proyecto)
125
3.1.9.1 Descripción de los campos
Codigo_doc : Código del Documento mediante el cual se
actualizará el estado del plan técnico.
Codigo_proy: Código del proyecto al que se está
referenciando.
Descripcion: Describe el estado del actual el pan técnico.
Descripcion_proyecto: Describe el nombre del proyecto
actual.
3.1.9.2 Descripción de funciones y
procedimientos
getCodigo_doc(): Función que retornará el código del
documento que será actualizado, con el estado Documento
Aprobado Plan Técnico, Documento Sin Aprobar Plan
Técnico.
setCodigo_doc(Integer codigo_doc): Esta función va a
recibir el parámetro del código del documento que me
permitirá actualizar el estado del Plan Técnico.
126
getCodigo_proy(): Función que retornará el código del
proyecto con el cual se obtiene el documento del proyecto.
setCodigo_proy(Integer codigo_proy): Esta función va a
recibir el parámetro del código del proyecto que me
permitirá obtener el documento a actualizar.
getDescripcion(): Función que retornará la descripción del
estado actual del plan técnico.
setDescripcion(String descripcion): Esta función va a
recibir como parámetro la descripción del estado actual del
plan técnico.
getDescripcion_proyecto(): Función que retornará la
descripción del proyecto.
setDescripcion_proyecto(String descripcion_proyecto):
Esta función va a recibir como parámetro la descripción del
proyecto.
3.2 Diseño de Pantallas
3.2.1 Asignaciones
3.2.1.1 Asignación de Líder SIS
Esta sección permitirá al Gerente de Proyectos
asignar al Líder SIS de un determinado proyecto.
127
La interfaz mediante la cual se realizará la
asignación es la siguiente:
3.2.1.2 Asignación de Recurso Humano
Esta sección permitirá al Líder SIS asignar al los
asesores o participantes requeridos para la
realización de un proyecto.
Los recursos humanos serán asignados en base a
sus conocimientos.
La interfaz mediante la cual se realizará la
asignación es la siguiente:
128
3.2.1.3 Asignación de Recurso Informático
Esta sección permitirá al Líder SIS asignar al los
recursos informáticos, sean estos hardware o
software que se requieran para el desarrollo del
proyecto.
La interfaz mediante la cual se realizará la
asignación es la siguiente:
129
3.2.1.4 Consulta del Líder de Proyectos
En esta interfaz se consultarán los líderes de Proyecto o
Líderes que generaron el requerimiento hacia Sistemas.
La interfaz mediante la cual se consultarán a los líderes de
los proyectos es la siguiente:
130
3.2.2 Configuración de Parámetros
Esta sección permitirá definir la cantidad máxima de
proyectos que le será asignado al Líder SIS del Proyecto.
131
3.2.3 Definición de Tipo de Proyectos
Esta sección permitirá definir el tipo de Proyecto al cual
estará relacionado el Proyecto.
3.2.4 Cronograma de Actividades
Esta sección permitirá mostrar todas las actividades
concernientes a un proyecto que le haya sido asignado al
Líder SIS.
La interfaz mediante la cual se tendrá el cronograma de
trabajo es la siguiente:
132
3.2.5 Estados y Aprobaciones
3.2.5.1 Estados del Proyecto
Esta sección permitirá cambiar el estado del
proyecto de acuerdo a la situación en la cual se
presente, es decir, si el estado actual del proyecto
es 'Suspendido' y se quiere actualizar dicho estado a
'En Curso', mediante la aplicación de esta opción se
logrará dicho propósito.
La interfaz a aplicar es la siguiente:
133
3.2.5.2 Aprobación del Plan Técnico
Esta sección permitirá cambiar el estado de
aprobación del Plan Técnico de un proyecto.
Los estados pueden ser 'Documento Aprobado –
Plan Técnico' y 'Documento no Aprobado – Plan
Técnico'.
La interfaz a aplicar es la siguiente:
134
3.2.6 Reportería
3.2.6.1 Reporte de Estados del Proyecto.
Esta sección permitirá consultar a manera de reporte
los estados del proyecto.
La interfaz que permite dicho propósito es la
siguiente:
135
3.2.6.2 Reporte de Líderes Asignados al
Proyecto
Esta sección permitirá consultar a manera de reporte
los proyectos asignados por líder.
La interfaz que permite dicho propósito es la
siguiente:
136
3.2.6.3 Reporte de Actividades del Proyecto
Esta sección permitirá consultar a manera de reporte
las actividades que se llevarán a cabo dentro de un
proyecto (Cronograma de actividades).
La interfaz que permite dicho propósito es la
siguiente:
137
138
CAPÍTULO 4
4 CODIFICACIÓN DEL MODELO DE GESTIÓN DE PRE-PROYECTOS
4.1 ESTÁNDARES
Al momento de desarrollar un Sistema Computacional se deben seguir
ciertos lineamientos, debido a que el desarrollo es realizado por un
grupo de trabajo los cuales poseen diferentes maneras de codificar; si
dicha codificación llegase a ser implementada, la parte externa deberá
revisar aquellos estándares definidos por los desarrolladores, es por ello
que en nuestro Gestor de Pre-Proyecto se especificaron atributos,
estándares, reglas de negocio, entre otras; donde los principales
procesos de nuestro módulo reflejan la correcta lógica del negocio.
La funcionalidad básica de nuestro módulo inicia con la solicitud del
recurso humano e informático; elaboración de la documentación,
culminando con la asignación de los recursos a un proyecto
especificado.
Más adelante se muestra en forma detallada el desarrollo de los
principales procesos que conforman nuestro módulo.
139
4.1.1 Estándares sobre la Base de Datos
Durante la realización del Modelo Entidad Relación se definieron
estándares sobre los usuarios, tablas, sinónimos, secuencias,
paquetes, procedimientos y funciones ha se utilizadas dentro de
cada módulo.
4.1.1.1 Usuarios y Tablas
El nombre del usuario fue definido utilizando las tres
primeras iniciales que identifican al módulo, seguido
del estándar _user.
Lo que corresponde a la contraseña, esta sería igual
al usuario anteriormente definido, para que en un
futuro cada módulo modifique dicha clave.
GPP_USER / GPP_USER
Las tablas creadas dentro de la base de datos deben
tener el siguiente formato:
140
Las tres primeras letras describen al módulo
propietario de dichas tablas, seguido del nombre de
la tabla en plural.
GPP_ACTIVIDADES – GEN_ESTADOS
4.1.1.2 Sinónimos y Secuencias
Los sinónimos se dan a nivel de tablas,
procedimientos y paquetes los cuales iban a ser
creados, conservando el nombre inicial del objeto.
La creación de la secuencia fue definida de la
siguiente forma:
Las tres primeras letras corresponden a las iniciales
que describen al módulo al cual le corresponde dicha
secuencia, seguido de la constante SEQ y por último
el nombre de la secuencia.
GPP_SEQ_SOLICITUD
141
4.1.1.3 Paquetes, procedimientos y
funciones
Los nombres de los paquetes, procedimientos y
funciones deben ser muy descriptivos, indicando de
manera implícita la funcionalidad y transaccionalidad
del paquete.
Lo que corresponde a los paquetes estos fueron
divididos en dos tipos, los transaccionales conocidos
como trx y los funcionales como obj.
Los paquetes transaccionales manejarán todo lo que
corresponde a validaciones y cálculos sobre
variables y campos, mientras que los obj realizarán
acciones directas sobre las tablas, tales como
insert, update, y delete.
El formato es el siguiente:
GPPK_TRX_NOMBREPAQUETE
GPPK_OBJ_NOMBREPAQUETE
142
4.1.2 Estándares sobre la Codificación
Antes de iniciar con la codificación o programación se definieron
estándares a nivel de grupo tales como, nombres de variables,
caja de texto, combos, clases e interfaces, así como también
comentarios antes de cada codificación, los cuales describen el
funcionamiento de aquella línea.
4.1.2.1 Codificación PL/SQL
El estándar definido para las variables a ser usadas
dentro de los procedimientos, funciones y paquetes
es el siguiente:
ESTANDAR TIPO DATO
LN_ PN_ NUMBER
LV_ PV_ VARCHAR2
LD_ PD_ DATE
LC_ CURSOR
El primer caracter indica que es una variable local (L)
o un parámetro(P) de entrada o salida, seguida de la
primera inicial del tipo de dato, a continuación el
nombre de la variable anteponiéndole el signo „_‟,
cabe recalcar que los nombres de las variables
deben ser descriptivas.
Por ejemplo: LN_CONT; LD_FECHA_INICIO;
143
4.1.2.2 Codificación Java
El estándar establecido sobre la creación de las
clases se basó en la funcionalidad que se desea
realizar sobre las tablas incluidas dentro de la base
de datos, por ejemplo:
PUBLIC CLASS CRONOGRAMA
{
…
}
Más adelante se detallan las clases utilizadas dentro
de los procesos prioritarios para nuestro módulo.
4.1.2.3 Codificación JSP – My Esclipse
Previa la codificación se definieron estándares sobre
eventos y variables, tales como se muestran en la
siguiente tabla:
ESTANDAR TIPO DE EVENTO
CMB_ COMBO
TXT_ TEXTO
B_ BOTÓN
CHECK_ CKECK BOX
Después del estándar seguirá el nombre de la
variable definido para el evento a utilizar.
144
Adicionalmente, a esto se estableció que para
declarar una variable, la cual tendrá almacenado un
query, seguirá el siguiente formato:
LS_NOMBRE
4.1.2.4 Interfaces
Sobre las interfaces se han aplicados estándares
definidos por el Módulo de Personalización,
Administración de Usuarios y Seguridades, los
cuales definieron la hoja de estilos, la que involucra
colores, fuentes, estilo de la fuente y su tamaño,
entre otras características, embebidas en diferentes
estilos.
145
4.2 DEFINICIÓN DE PRINCIPALES PROCESOS
Después de haber definido las reglas del negocio para la transacción
que debe realizar nuestro módulo, se establecieron los principales
procesos que se ejecutan y detallan a continuación:
4.2.1 Proceso Líder de Proyecto
Mediante la consulta del líder de proyectos asignado por el
Departamento de O & M, podremos identificar quien es la persona
responsable del requerimiento enviado al área de Sistema.
4.2.2 Proceso Líder SIS
La asignación del Líder SIS dependerá de los lineamientos
establecidos por el departamento de Sistemas, ya que antes de
realizar dicha asignación se deberá realizar una sumatoria de la
cantidad y los pesos de los proyectos al cual se encuentra
asignado actualmente y verificar en que fase se encuentra.
Si la sumatoria de la cantidad y el peso de los proyectos excede el
valor definido, no se podrá asignar dicho recurso al Proyecto
actual.
146
Luego de haber verificado los lineamientos se procederá a
bitacorizar dicha transacción en caso de que el flujo haya tenido
su secuencia normal.
4.2.3 Proceso Asigna Recurso
A través de la interfaz se presentarán todos los proyectos que
posean como estado „PA‟, lo que indica que el módulo de
Presupuesto da por aprobada la factibilidad del proyecto.
Para realizar la transacción de asignación de recursos, el Líder
SIS seleccionará el Proyecto y a su vez escogerá los
conocimientos necesarios para su desarrollo, lo cual le permitirá
visualizar todos los recursos disponibles y los cuales podrán ser
asignados al Proyecto seleccionado, de no existir recursos se
emitirá una solicitud para la respectiva contratación del personal.
4.2.4 Proceso Asigna Recurso Informático
Previa la asignación del recurso informático el líder SIS deberá
realizar el respectivo ingreso de los recursos necesarios para
dicha asignación, debido a que el módulo de presupuesto requiere
esa información para aprobar el presupuesto.
147
Una vez aprobado el presupuesto, se podrá asignar los recursos a
través de una interfaz en la cual se visualizará lo antes
seleccionado. De no existir el recurso se emitirá una solicitud para
la respectiva compra y la asignación se la realizará de manera
transparente para el usuario.
4.2.5 Proceso Cronograma
Esta interfaz le permite realizar un cronograma por proyecto; aquí
deberá ingresar la cantidad de recursos a utilizar además de
seleccionar el código del Proyecto, lo que le permitirá digitar las
actividades necesarias a través de una matriz, junto con la
actividad que la precede seguida de sus fechas de inicio y fin,
también podrá asignar al(los) recurso(s) que tendrán la
responsabilidad de realizar dicha tarea o actividad; de forma
automática se visualizará el tiempo para cada tarea y como
elemento importante el usuario o líder SIS deberá identificar si la
actividad ingresada es un Hito o una actividad normal.
4.2.6 Proceso Estado
Este proceso brinda la oportunidad de actualizar o modificar el
estado de los proyectos que pertenecen a un área en particular.
Por ejemplo, si un proyecto en particular posee el estado de
148
„Suspendido‟ y se desea cambiar a „En curso‟, a través de esta
interfaz se puede lograr dicho objetivo.
4.2.7 Proceso Aprueba
A través de este proceso se podrá realizar la aprobación de
Documento „Plan Técnico‟ de un Proyecto escogido. Los estados
pueden ser 'Documento Aprobado – Plan Técnico' y 'Documento
no Aprobado – Plan Técnico'. Además podrá definir y bitacorizar
que tipo de proyecto se esta realizado.
4.3 DIAGRAMA DE FLUJO
Los procesos anteriormente identificados y detallados conforman una
transacción, la cual podrá ser visualizada a través del siguiente
diagrama de flujo elaborado para su mayor comprensión:
149
INICIO
VISUALIZACIÓN DEL LÍDER DE
PROYECTO
ASIGNACIÓN DE LÍDER SIS
ELABORAR PLAN
TÉCNICO ELABORAR
CRONOGRAMA
PLAN TÉCNICO APROBADO
DISPONIBILIDAD RECURSOS
ASIGNO RECURSOS
EMITO SOLICITUD
SOLICITUD APROBADA
CAMBIO DE ESTADO POR PROYECTOS
FIN
APROBACION DE PRESUPUESTO
150
CAPÍTULO 5
5 PRUEBAS
5.1 RECOMENDACIONES
Hay multitud de conceptos asociados a las tareas de pruebas;
clasificarlas es difícil, pues no son mutuamente disjuntas, sino muy
entrelazadas. En lo que sigue usaremos la siguiente estructura para la
presentación:
Fases de prueba:
CAJA BLANCA: En estas pruebas estamos siempre observando el
código que las pruebas se dedican a ejecutar con ánimo de "probarlo
todo". Esta noción de prueba total se formaliza en lo que se llama
"cobertura".
CAJA NEGRA: Las pruebas de caja negra se centran en lo que se
espera de un módulo, es decir, intentan encontrar casos en que el
módulo no se atiene a su especificación. Por ello se denominan
pruebas funcionales, y el probador se limita a suministrarle datos como
151
entrada y estudiar la salida, sin preocuparse de lo que pueda estar
haciendo el módulo por dentro.
5.2 Modelo de Flujo de Pruebas
5.3 Pruebas de Caja Blanca
5.3.1 Asignación Líder SIS
La prueba de asignación Líder SIS se lo realizará verificando el
máximo de Proyectos que se puede asignar, el peso máximo que
puede ser asignado; los valores máximos serán parametrizados y
se podrán cambiar por medio de una interfaz.
Evaluación Depuración
Ejecución de Pruebas
Configuración de Pruebas
Correcciones
Planificación de Pruebas
Diseño de Pruebas
Plan de pruebas
Análisis de errores
Estadísticas de errores
152
Para esta prueba vamos asignarle un máximo de Proyecto de 5,
este valor se multiplicará para sacar su peso máximo que en este
caso es 15.
PROCEDURE asig_lider_sis (pn_codigo_lider IN clc_participante.codigo_participante%TYPE, pn_codigo_proy IN gen_proyectos.codigo_proyecto%TYPE, pv_user IN VARCHAR2, pv_error OUT VARCHAR2)IS -------------------------------------------------- -- CANTIDAD DE PROYECTOS POR LIDER -- ASUMIENDO QUE EN EL COMBO SE -- ESCOJE A UN LIDER (TIPO_PARTICIPANTE = LIDER) -------------------------------------------------- CURSOR c_cant_proy (pn_codigo_lider NUMBER) IS SELECT COUNT(*) FROM GEN_PROYECTOS PY WHERE PY.LIDER_SIS = pn_codigo_lider AND PY.CODIGO_ESTADO IN ('AO'); -- debe estar en el estado que lo deja Nathalie /* SELECT COUNT(*) FROM GEN_PROYECTOS PY, CLC_PARTICIPANTE_PROYECTO PP WHERE PP.CODIGO_PARTICIPANTE = PN_CODIGO_LIDER AND PP.ESTADO = 'A' AND PP.CODIGO_TIPO_PARTICIPANTE = 1 AND PP.CODIGO_PROYECTO = PY.CODIGO_PROYECTO AND PY.CODIGO_ESTADO IN ('EC', 'PA'); -- en curso o en desarrollo cuando yo lo apruebo*/ ----------------------- -- PESO DE PROYECTOS ----------------------- CURSOR c_peso_proy (pn_codigo_lider NUMBER) IS SELECT SUM(PY.PESO_PROYECTO) FROM GEN_PROYECTOS PY WHERE PY.LIDER_SIS = pn_codigo_lider AND PY.CODIGO_ESTADO IN ('AO'); -- debe estar en el estado que lo deja Nathalie /*SELECT SUM(py.PESO_PROYECTO) FROM GEN_PROYECTOS py, CLC_PARTICIPANTE_PROYECTO pp WHERE pp.CODIGO_PARTICIPANTE = pn_codigo_lider AND pp.ESTADO = 'A' AND pp.CODIGO_TIPO_PARTICIPANTE = 1 AND pp.CODIGO_PROYECTO = py.codigo_proyecto AND py.CODIGO_ESTADO IN('EC', 'PA'); -- en curso o en desarrollo*/ ------------------------------------ -- LOS PROYECTOS QUE POSEE UN LIDER ------------------------------------ CURSOR c_proyectos_lider (pn_codigo_lider NUMBER) IS SELECT DISTINCT PY.CODIGO_PROYECTO FROM GEN_PROYECTOS PY WHERE PY.LIDER_SIS = pn_codigo_lider AND PY.CODIGO_ESTADO IN ('AO'); /*SELECT DISTINCT py.CODIGO_PROYECTO FROM GEN_PROYECTOS py, CLC_PARTICIPANTE_PROYECTO pp WHERE pp.CODIGO_PARTICIPANTE = pn_codigo_lider AND pp.ESTADO = 'A' AND pp.CODIGO_PROYECTO = py.codigo_proyecto AND py.CODIGO_ESTADO IN('EC', 'PA');*/
153
-------------------------------------------------------- -- PARA OBTENER EL VALOR DE LA PRIORIDAD DE UN PROYECTO -------------------------------------------------------- CURSOR c_prioridad_proy (pn_codigo_proy NUMBER) IS SELECT PR.PRIORIDAD_INICIAL FROM GEN_PROYECTOS PY, GRE_PRIORIDAD PR WHERE PY.CODIGO_PROYECTO = PN_CODIGO_PROY AND PR.CODIGO_PRIORIDAD = PY.CODIGO_PRIORIDAD AND PY.CODIGO_ESTADO = 'AO'; -------------------------- -- FASE DE LOS PROYECTOS -------------------------- CURSOR c_fase_proy (pn_codigo_proyecto NUMBER) IS SELECT PY.CODIGO_PROYECTO, PY.NOMBRE_PROYECTO, D.CODIGO_ACTIVIDAD, D.PORCENTAJE_CUMPLIMIENTO, A.DESCRIPCION_ACTIVIDAD, A.TIEMPO_REAL FROM GEN_PROYECTOS PY, GPP_ACTIVIDADES A, CEH_DET_ACT_RECURSO D WHERE PY.CODIGO_PROYECTO = PN_CODIGO_PROYECTO AND A.CODIGO_PROYECTO = PY.CODIGO_PROYECTO AND A.CODIGO_PROYECTO = D.CODIGO_PROYECTO AND A.CODIGO_ACTIVIDAD = D.CODIGO_ACTIVIDAD AND D.PORCENTAJE_CUMPLIMIENTO > 0 AND PY.CODIGO_ESTADO IN('EC', 'PA'); CURSOR C_ACT (PN_CODIGO_ACTIVIDAD NUMBER)IS SELECT DISTINCT 'X'--, A.PORCENTAJE_CUMPLIMIENTO FROM GPP_ACTIVIDADES A, CEH_DET_ACT_RECURSO D WHERE A.CODIGO_ACTIVIDAD = PN_CODIGO_ACTIVIDAD AND A.CODIGO_ACTIVIDAD = D.CODIGO_ACTIVIDAD AND A.DESCRIPCION_ACTIVIDAD LIKE '%PRUEBAS%' OR A.DESCRIPCION_ACTIVIDAD LIKE '%IMPLEMENTACION%' AND D.PORCENTAJE_CUMPLIMIENTO NOT IN (100) AND A.PORCENTAJE_CUMPLIMIENTO NOT IN (100); ---------------------------------------------- -- CURSOR QUE OBTIENE LA CANTIDAD Y EL PESO -- MAXIMO DE PROYECTOS PARA UN LIDER SIS ---------------------------------------------- CURSOR C_MAXIMO IS SELECT TO_NUMBER(P.VALOR) CANTIDAD, TO_NUMBER(PT.VALOR) PESO FROM GEN_PARAMETROS P, GEN_PARAMETROS PT WHERE P.ID_PARAMETRO = 'CANT_PROY' AND PT.ID_PARAMETRO = 'PESO_PROY'; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- CURSOR QUE OBTIENE EL TIPO PARTICIPANTE -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- CURSOR c_participante (pn_codigo_lider NUMBER) IS SELECT p.codigo_tipo_participante FROM clc_participante p WHERE p.codigo_participante = pn_codigo_lider; BAND NUMBER := 1; ln_cant_proy NUMBER := 0; ln_peso_proy NUMBER := 0; ln_prioridad NUMBER := 0; ln_peso_total NUMBER := 0; LN_CANT_MAX NUMBER := 0;
154
LN_PESO_MAX NUMBER := 0; ln_tipo_participante NUMBER := 0; LB_GUARDADO BOOLEAN := TRUE; LB_ASIGNA_LIDER BOOLEAN := FALSE; LV_FASE VARCHAR2(2); lv_hito VARCHAR2(100); lv_error VARCHAR2(100); lv_aplicacion VARCHAR2(100):= 'GPPK_TRX_ASIGNACION.ASIG_LIDER_SIS'; le_error EXCEPTION; le_error_general EXCEPTION; BEGIN -- cantidad de proyectos por lideres OPEN c_cant_proy (pn_codigo_lider); FETCH c_cant_proy INTO ln_cant_proy; CLOSE c_cant_proy; IF ln_cant_proy = 0 THEN BAND := 0; -- NO TIENE PROYECTOS END IF; IF BAND = 1 THEN -- SI TIENE PROYECTOS -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- total de pesos de proyectos asignados a un lider -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- OPEN c_peso_proy (pn_codigo_lider); FETCH c_peso_proy INTO ln_peso_proy; CLOSE c_peso_proy; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- OBTIENE LOS LIMITES PARA EL LIDER SIS -- -- -- -- -- -- -- -- -- -- -- -- -- -- OPEN C_MAXIMO; FETCH C_MAXIMO INTO LN_CANT_MAX, LN_PESO_MAX; CLOSE C_MAXIMO; LN_CANT_MAX := nvl(LN_CANT_MAX, 5); LN_PESO_MAX := nvl(LN_PESO_MAX, 15); -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- el valor de 5 es por efectos de prueba -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF ln_cant_proy > LN_CANT_MAX THEN -- 5 proyectos como máximo lv_error := 'No se pueden asignar más de ' || LN_CANT_MAX || ' proyectos al Líder seleccionado. ' || ln_cant_proy; RAISE le_error; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- obtengo la prioridad del proyecto actual, -- la cual se convierte en peso del proyecto -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- OPEN c_prioridad_proy(pn_codigo_proy); FETCH c_prioridad_proy INTO ln_prioridad; CLOSE c_prioridad_proy; -- -- -- -- -- -- -- -- -- -- -- Codigo del participante -- -- -- -- -- -- -- -- -- -- OPEN c_participante (pn_codigo_lider); FETCH c_participante INTO ln_tipo_participante; CLOSE c_participante; -- -- -- -- -- -- -- -- -- -- -- calculo del peso total
155
-- -- -- -- -- -- -- -- -- -- ln_peso_total := nvl(ln_prioridad, 0) + nvl(ln_peso_proy, 0); IF ln_peso_total > LN_PESO_MAX THEN -- 5 proy * 3 peso(alta) LV_ERROR := 'El Líder está sobrecargado, no se puede asignar. El peso máximo es ' || LN_PESO_MAX; RAISE le_error; END IF; FOR x IN c_proyectos_lider (pn_codigo_lider) LOOP --BEGIN lv_hito := NULL; LV_FASE := NULL; FOR i IN c_fase_proy (x.CODIGO_PROYECTO) LOOP -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- solo almacena el ultimo hito porque se esta evaluando -- actividad por actividad, no varias actividades a la vez -- entonces solo habra un hito en curso -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- BEGIN LV_FASE := NULL; -- -- -- -- -- -- -- -- -- -- -- OPEN C_ACT (I.CODIGO_ACTIVIDAD); FETCH C_ACT INTO LV_FASE; --, LN_PORC; CLOSE C_ACT; -- -- -- -- -- -- -- -- -- -- -- IF LV_FASE IS NOT NULL THEN--((i.DESCRIPCION_ACTIVIDAD = fase_critica_1) OR (i.DESCRIPCION_ACTIVIDAD = fase_critica_2)) THEN LV_HITO := i.DESCRIPCION_ACTIVIDAD; END IF; IF LV_FASE IS NOT NULL AND (I.PORCENTAJE_CUMPLIMIENTO >= 85 AND I.PORCENTAJE_CUMPLIMIENTO <= 100) THEN lv_hito := 'T'; -- indica que ya termino la etapa critica LB_ASIGNA_LIDER := TRUE; END IF; IF I.PORCENTAJE_CUMPLIMIENTO < 85 THEN LB_ASIGNA_LIDER := FALSE; END IF; EXCEPTION WHEN OTHERS THEN -- BITACORIZAR EL ERROR GENK_BITACORIZACION.P_BITACORIZA_ERROR(lv_aplicacion, sysdate, user, lv_error, null, null, null, pv_error); if pv_error is not null then pv_error := lv_error || ' - ' || pv_error; else pv_error := lv_error; end if; END; END LOOP; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- insertar la fase de acuerdo a lo quemado -- en la declaracion, esto es momentaneo -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF NOT LB_ASIGNA_LIDER THEN
156
lv_error := 'El líder se encuentra en una etapa crítica, imposible asignar'; RAISE le_error_general; END IF; -- LB_ASIGNA_LIDER := TRUE; END LOOP; ELSE -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- obtiene los datos e insetar -- insertar en la tabla de clc_participante proyecto -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- INSERT INTO CLC_PARTICIPANTE_PROYECTO (CODIGO_PARTICIPANTE, CODIGO_PROYECTO, CODIGO_PRIVILEGIO, CODIGO_TIPO_PARTICIPANTE, DESCRIPCION, FECHA_ASIGNACION, FECHA_ING, FECHA_MOD, CODIGO_USUARIO_ING, ESTADO_PARTICIPANTE, ESTADO) VALUES (PN_CODIGO_LIDER, PN_CODIGO_PROY, 'A', ln_tipo_participante, 'El líder será asignado al proyecto ' || PN_CODIGO_PROY, SYSDATE, SYSDATE, SYSDATE, pv_user, 'S', 'A'); UPDATE CLC_PARTICIPANTE PT SET PT.NO_PROY_ASIGNADOS = (PT.NO_PROY_ASIGNADOS + 1) WHERE PT.codigo_participante = PN_CODIGO_LIDER; UPDATE GEN_PROYECTOS D SET D.LIDER_SIS = PN_CODIGO_LIDER WHERE D.CODIGO_PROYECTO = PN_CODIGO_PROY; COMMIT; IF LB_GUARDADO THEN -- pv_error := 'BIEN'; GENK_BITACORIZACION.P_BITACORIZA_INFO(lv_aplicacion, SYSDATE, USER, 'EL LIDER ' || pn_codigo_lider || 'FUE ASIGNADO CON EXITO AL PROYECTO '|| pn_codigo_proy, 'MODULO_GPP', NULL, NULL, pv_error); END IF; END IF; IF LB_ASIGNA_LIDER THEN -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- obtiene los datos e insetar -- insertar en la tabla de clc_participante proyecto
157
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- INSERT INTO CLC_PARTICIPANTE_PROYECTO (CODIGO_PARTICIPANTE, CODIGO_PROYECTO, CODIGO_PRIVILEGIO, CODIGO_TIPO_PARTICIPANTE, DESCRIPCION, FECHA_ASIGNACION, FECHA_ING, FECHA_MOD, CODIGO_USUARIO_ING, ESTADO_PARTICIPANTE, ESTADO) VALUES (PN_CODIGO_LIDER, PN_CODIGO_PROY, 'A', ln_tipo_participante, 'El líder serà asigando al proyecto ' || PN_CODIGO_PROY, SYSDATE, SYSDATE, SYSDATE, pv_user, 'S', 'A'); END IF; EXCEPTION WHEN le_error THEN pv_error := lv_error; -- BITACORIZAR EL ERROR GENK_BITACORIZACION.P_BITACORIZA_ERROR(lv_aplicacion, sysdate, user, lv_error, null, null, null, pv_error); WHEN le_error_general THEN pv_error := lv_error; -- BITACORIZAR EL ERROR GENK_BITACORIZACION.P_BITACORIZA_ERROR(lv_aplicacion, sysdate, user, lv_error, null, null, null, pv_error); WHEN OTHERS THEN pv_error := SQLERRM; -- BITACORIZAR EL ERROR GENK_BITACORIZACION.P_BITACORIZA_ERROR(lv_aplicacion, sysdate, user, lv_error, null, null, null, pv_error); END;
158
Manejaremos tres posibles casos:
Caso a: Líder SIS tiene asignado tres proyectos y cada uno tiene
los Pesos 2, 3, 1.
Caso b: Líder SIS tiene asignado cuatro proyectos y cada uno
pesa 4, 3, 3, 4.
Caso c: Líder SIS tiene asignado dos proyectos los cuales están
en las fases de pruebas.
Caso a:
-- cantidad de proyectos por lideres OPEN c_cant_proy (pn_codigo_lider); FETCH c_cant_proy INTO ln_cant_proy; CLOSE c_cant_proy; IF ln_cant_proy = 0 THEN BAND := 0; -- NO TIENE PROYECTOS END IF; IF BAND = 1 THEN -- SI TIENE PROYECTOS -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- total de pesos de proyectos asignados a un lider -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- OPEN c_peso_proy (pn_codigo_lider); FETCH c_peso_proy INTO ln_peso_proy; CLOSE c_peso_proy; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- OBTIENE LOS LIMITES PARA EL LIDER SIS -- -- -- -- -- -- -- -- -- -- -- -- -- -- OPEN C_MAXIMO; FETCH C_MAXIMO INTO LN_CANT_MAX, LN_PESO_MAX; CLOSE C_MAXIMO; LN_CANT_MAX := nvl(LN_CANT_MAX, 5); LN_PESO_MAX := nvl(LN_PESO_MAX, 15); -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- el valor de 5 es por efectos de prueba -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF ln_cant_proy > LN_CANT_MAX THEN -- 5 proyectos como máximo lv_error := 'No se pueden asignar más de ' || LN_CANT_MAX || ' proyectos al Líder seleccionado. ' || ln_cant_proy; RAISE le_error; END IF;
159
Abrir Cursor
Cantidad de
Proyectos
Recorrer cursor y
obtener número de
proyectos
Número de
Proyectos = 0
No
Número de
Proyectos = 1
Si
Abrir Cursor
C_maximo
Recorrer cursor y
obtener Peso de los
proyectos
Abrir Cursor
Peso de
Proyectos
Recorrer cursor y
obtener la
cantidad y el peso
maximo
Cantidad de
Proyecto > a
cantidad Máxima
Abrir Cursor
Prioridad
proyecto
Recorrer cursor y
obtener la Prioridad
del proyectos
Sumar la
prioridad con el
peso total de
los proyectos
La suma es >
al peso
màximo
No
No
No
1
160
Esta parte recibe el código del proyecto y abre el cursor
obteniendo la cantidad de proyecto en la variable ln_cant_proy,
En la condición pregunta si el valor de esta variable es igual a
cero esto indicará que el líder no tiene asignado proyectos.
Pregunta si band igual a 1 entonces indica que si tiene proyecto.
En el cursor c_peso_proyec me retorna el peso de todos los
proyectos asignados a ese líder en este caso es de 6 en la
variable ln_peso_proy.
En el cursor c_maximo me retorna el número de proyectos
máximo y el peso máximo que son 5 y 15 respectivamente.
En esta parte se identifica la cantidad de proyectos que tiene
asignado el líder verificando que no pase del máximo permitido,
luego obtiene la prioridad del proyecto que se le desea asignar al
líder.
161
FOR x IN c_proyectos_lider (pn_codigo_lider) LOOP --BEGIN lv_hito := NULL; LV_FASE := NULL; FOR i IN c_fase_proy (x.CODIGO_PROYECTO) LOOP -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- solo almacena el ultimo hito porque se esta evaluando -- actividad por actividad, no varias actividades a la vez -- entonces solo habra un hito en curso -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- BEGIN LV_FASE := NULL; -- -- -- -- -- -- -- -- -- -- -- OPEN C_ACT (I.CODIGO_ACTIVIDAD); FETCH C_ACT INTO LV_FASE; --, LN_PORC; CLOSE C_ACT; -- -- -- -- -- -- -- -- -- -- -- IF LV_FASE IS NOT NULL THEN--((i.DESCRIPCION_ACTIVIDAD = fase_critica_1) OR (i.DESCRIPCION_ACTIVIDAD = fase_critica_2)) THEN LV_HITO := i.DESCRIPCION_ACTIVIDAD; END IF; IF LV_FASE IS NOT NULL AND (I.PORCENTAJE_CUMPLIMIENTO >= 85 AND I.PORCENTAJE_CUMPLIMIENTO <= 100) THEN lv_hito := 'T'; -- indica que ya termino la etapa critica LB_ASIGNA_LIDER := TRUE; END IF; IF I.PORCENTAJE_CUMPLIMIENTO < 85 THEN LB_ASIGNA_LIDER := FALSE; END IF; EXCEPTION WHEN OTHERS THEN -- BITACORIZAR EL ERROR GENK_BITACORIZACION.P_BITACORIZA_ERROR(lv_aplicacion, sysdate, user, lv_error, null, null, null, pv_error); if pv_error is not null then pv_error := lv_error || ' - ' || pv_error; else pv_error := lv_error; end if; END; END LOOP; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- insertar la fase de acuerdo a lo quemado -- en la declaracion, esto es momentaneo -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF NOT LB_ASIGNA_LIDER THEN lv_error := 'El líder se encuentra en una etapa crítica, imposible asignar'; RAISE le_error_general; END IF; -- LB_ASIGNA_LIDER := TRUE; END LOOP; ELSE
162
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- obtiene los datos e insetar -- insertar en la tabla de clc_participante proyecto -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- INSERT INTO CLC_PARTICIPANTE_PROYECTO (CODIGO_PARTICIPANTE, CODIGO_PROYECTO, CODIGO_PRIVILEGIO, CODIGO_TIPO_PARTICIPANTE, DESCRIPCION, FECHA_ASIGNACION, FECHA_ING, FECHA_MOD, CODIGO_USUARIO_ING, ESTADO_PARTICIPANTE, ESTADO) VALUES (PN_CODIGO_LIDER, PN_CODIGO_PROY, 'A', ln_tipo_participante, 'El líder será asignado al proyecto ' || PN_CODIGO_PROY, SYSDATE, SYSDATE, SYSDATE, pv_user, 'S', 'A'); UPDATE CLC_PARTICIPANTE PT SET PT.NO_PROY_ASIGNADOS = (PT.NO_PROY_ASIGNADOS + 1) WHERE PT.codigo_participante = PN_CODIGO_LIDER; UPDATE GEN_PROYECTOS D SET D.LIDER_SIS = PN_CODIGO_LIDER WHERE D.CODIGO_PROYECTO = PN_CODIGO_PROY; COMMIT; IF LB_GUARDADO THEN -- pv_error := 'BIEN'; GENK_BITACORIZACION.P_BITACORIZA_INFO(lv_aplicacion, SYSDATE, USER, 'EL LIDER ' || pn_codigo_lider || 'FUE ASIGNADO CON EXITO AL PROYECTO '|| pn_codigo_proy, 'MODULO_GPP', NULL, NULL, pv_error); END IF; END IF;
163
En esta parte verifica si el líder tiene algún proyecto en las fases
críticas lo cual significa que no se podrá asignar otro proyecto en
este momento ya que la carga del Líder es muy alta.
Si es así, la variable lb_asigna_lider va estar en TRUE o FALSE
dependiendo si está o no en alguna fase critica en el cual no se
podrá asignarle proyectos; pero en este caso los proyectos que
está asignado el líder no están en las fases críticas.
Como el líder está disponible va a grabar en la tabla
CLC_PARTICIPANTE_PROYECTO, por medio de la función que
accesamos del módulo de Colaboradores.
Actualiza en la tabla GEN _ PROYECTOS el campo lider_SIS.
Informe de Análisis
Nombre: Asignación Líder SIS
Caso: Líder SIS tiene asignado tres proyectos y cada uno tiene los Pesos 2, 3, 1.
Evaluación: Evaluando el flujo de las líneas de códigos minuciosamente se ha llegado a la conclusión que no hay problemas al momento de evaluar este caso.
Análisis: En este caso no hay novedades que reportar a los desarrolladores porque se han cumplido con los estándares definidos y correctamente se ha llevado su flujo.
164
Caso b
-- cantidad de proyectos por lideres OPEN c_cant_proy (pn_codigo_lider); FETCH c_cant_proy INTO ln_cant_proy; CLOSE c_cant_proy; IF ln_cant_proy = 0 THEN BAND := 0; -- NO TIENE PROYECTOS END IF; IF BAND = 1 THEN -- SI TIENE PROYECTOS -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- total de pesos de proyectos asignados a un lider -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- OPEN c_peso_proy (pn_codigo_lider); FETCH c_peso_proy INTO ln_peso_proy; CLOSE c_peso_proy; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- OBTIENE LOS LIMITES PARA EL LIDER SIS -- -- -- -- -- -- -- -- -- -- -- -- -- -- OPEN C_MAXIMO; FETCH C_MAXIMO INTO LN_CANT_MAX, LN_PESO_MAX; CLOSE C_MAXIMO; LN_CANT_MAX := nvl(LN_CANT_MAX, 5); LN_PESO_MAX := nvl(LN_PESO_MAX, 15); -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- el valor de 5 es por efectos de prueba -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF ln_cant_proy > LN_CANT_MAX THEN -- 5 proyectos como máximo lv_error := 'No se pueden asignar más de ' || LN_CANT_MAX || ' proyectos al Líder seleccionado. ' || ln_cant_proy; RAISE le_error; END IF;
165
Abrir Cursor
Cantidad de
Proyectos
Recorrer cursor y
obtener número de
proyectos
Número de
Proyectos = 0
No
Número de
Proyectos = 1
Si
Abrir Cursor
C_maximo
Recorrer cursor y
obtener Peso de los
proyectos
Abrir Cursor
Peso de
Proyectos
Recorrer cursor y
obtener la
cantidad y el peso
maximo
Cantidad de
Proyecto > a
cantidad Máxima
Abrir Cursor
Prioridad
proyecto
Recorrer cursor y
obtener la Prioridad
del proyectos
Sumar la
prioridad con el
peso total de
los proyectos
La suma es >
al peso
màximo
Si
No
No
El Líder está sobrecargado, no se
puede asignar. El peso máximo es ' ||
LN_PESO_MAX
166
Esta parte recibe el código del proyecto y abre el cursor
obteniendo la cantidad de proyectos en la variable ln_cant_proy,
En la condición pregunta si el valor de esta variable es igual a
cero, esto indicará que el líder no tiene proyecto a cargo.
Pregunta si band es igual a 1, entonces indica que si tiene
proyectos.
El cursor c_peso_proyec retorna el peso de todos los proyectos
asignados a ese líder, en este caso es de 14 en la variable
ln_peso_proy.
El cursor c_maximo retorna el número de proyectos máximo y el
peso máximo que son 5 y 15 respectivamente.
En esta parte se verifica la cantidad de proyectos que tiene
asignado el líder más la prioridad del proyecto que se quiere
asignar verificando que no pase del máximo permitido, pero en
este caso sobrepasa del peso máximo y presenta un mensaje.
167
Informe de Análisis
Nombre: Asignación Líder SIS
Caso: Líder SIS tiene asignado cuatro proyectos y cada uno pesa 4, 3, 3, 4.
Evaluación: Evaluando el flujo de las líneas de códigos minuciosamente se ha llegado a la conclusión que la restricción de asignarle un Líder al proyecto se lo está realizando adecuadamente.
Análisis: No existe ninguna novedad que reportar ya que esta siendo bien analizado la lógica del negocio.
Caso c:
-- cantidad de proyectos por lideres OPEN c_cant_proy (pn_codigo_lider); FETCH c_cant_proy INTO ln_cant_proy; CLOSE c_cant_proy; IF ln_cant_proy = 0 THEN BAND := 0; -- NO TIENE PROYECTOS END IF; IF BAND = 1 THEN -- SI TIENE PROYECTOS -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- total de pesos de proyectos asignados a un lider -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- OPEN c_peso_proy (pn_codigo_lider); FETCH c_peso_proy INTO ln_peso_proy; CLOSE c_peso_proy; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- OBTIENE LOS LIMITES PARA EL LIDER SIS -- -- -- -- -- -- -- -- -- -- -- -- -- -- OPEN C_MAXIMO; FETCH C_MAXIMO INTO LN_CANT_MAX, LN_PESO_MAX; CLOSE C_MAXIMO; LN_CANT_MAX := nvl(LN_CANT_MAX, 5); LN_PESO_MAX := nvl(LN_PESO_MAX, 15); -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- el valor de 5 es por efectos de prueba -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF ln_cant_proy > LN_CANT_MAX THEN -- 5 proyectos como máximo lv_error := 'No se pueden asignar más de ' || LN_CANT_MAX || ' proyectos al Líder seleccionado. ' || ln_cant_proy; RAISE le_error; END IF;
168
Abrir Cursor
Cantidad de
Proyectos
Recorrer cursor y
obtener número de
proyectos
Número de
Proyectos = 0
No
Número de
Proyectos = 1
Si
Abrir Cursor
C_maximo
Recorrer cursor y
obtener Peso de los
proyectos
Abrir Cursor
Peso de
Proyectos
Recorrer cursor y
obtener la
cantidad y el peso
maximo
Cantidad de
Proyecto > a
cantidad Máxima
Abrir Cursor
Prioridad
proyecto
Recorrer cursor y
obtener la Prioridad
del proyectos
Sumar la
prioridad con el
peso total de
los proyectos
La suma es >
al peso
màximo
No
No
No
1
169
Esta parte recibe el código del proyecto y abre el cursor
obteniendo la cantidad de proyecto en la variable ln_cant_proy,
En la condición pregunta si el valor de esta variable es igual a
cero esto indicará que el líder no tiene asignado proyectos.
Pregunta si band igual a 1 entonces indica que si tiene proyecto.
En el cursor c_peso_proyec me retorna el peso de todos los
proyectos asignados a ese líder en este caso es de 6 en la
variable ln_peso_proy.
En el cursor c_maximo me retorna el número de proyectos
máximo y el peso máximo que son 5 y 15 respectivamente.
En esta parte se identifica la cantidad de proyectos que tiene
asignado el líder verificando que no pase del máximo permitido,
luego obtiene la prioridad del proyecto que se le desea asignar al
líder.
170
FOR x IN c_proyectos_lider (pn_codigo_lider) LOOP --BEGIN lv_hito := NULL; LV_FASE := NULL; FOR i IN c_fase_proy (x.CODIGO_PROYECTO) LOOP -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- solo almacena el ultimo hito porque se esta evaluando -- actividad por actividad, no varias actividades a la vez -- entonces solo habra un hito en curso -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- BEGIN LV_FASE := NULL; -- -- -- -- -- -- -- -- -- -- -- OPEN C_ACT (I.CODIGO_ACTIVIDAD); FETCH C_ACT INTO LV_FASE; --, LN_PORC; CLOSE C_ACT; -- -- -- -- -- -- -- -- -- -- -- IF LV_FASE IS NOT NULL THEN--((i.DESCRIPCION_ACTIVIDAD = fase_critica_1) OR (i.DESCRIPCION_ACTIVIDAD = fase_critica_2)) THEN LV_HITO := i.DESCRIPCION_ACTIVIDAD; END IF; IF LV_FASE IS NOT NULL AND (I.PORCENTAJE_CUMPLIMIENTO >= 85 AND I.PORCENTAJE_CUMPLIMIENTO <= 100) THEN lv_hito := 'T'; -- indica que ya termino la etapa critica LB_ASIGNA_LIDER := TRUE; END IF; IF I.PORCENTAJE_CUMPLIMIENTO < 85 THEN LB_ASIGNA_LIDER := FALSE; END IF; EXCEPTION WHEN OTHERS THEN -- BITACORIZAR EL ERROR GENK_BITACORIZACION.P_BITACORIZA_ERROR(lv_aplicacion, sysdate, user, lv_error, null, null, null, pv_error); if pv_error is not null then pv_error := lv_error || ' - ' || pv_error; else pv_error := lv_error; end if; END; END LOOP; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- insertar la fase de acuerdo a lo quemado -- en la declaracion, esto es momentaneo -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF NOT LB_ASIGNA_LIDER THEN lv_error := 'El líder se encuentra en una etapa crítica, imposible asignar'; RAISE le_error_general; END IF; -- LB_ASIGNA_LIDER := TRUE; END LOOP; ELSE
171
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- obtiene los datos e insetar -- insertar en la tabla de clc_participante proyecto -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- INSERT INTO CLC_PARTICIPANTE_PROYECTO (CODIGO_PARTICIPANTE, CODIGO_PROYECTO, CODIGO_PRIVILEGIO, CODIGO_TIPO_PARTICIPANTE, DESCRIPCION, FECHA_ASIGNACION, FECHA_ING, FECHA_MOD, CODIGO_USUARIO_ING, ESTADO_PARTICIPANTE, ESTADO) VALUES (PN_CODIGO_LIDER, PN_CODIGO_PROY, 'A', ln_tipo_participante, 'El líder será asignado al proyecto ' || PN_CODIGO_PROY, SYSDATE, SYSDATE, SYSDATE, pv_user, 'S', 'A'); UPDATE CLC_PARTICIPANTE PT SET PT.NO_PROY_ASIGNADOS = (PT.NO_PROY_ASIGNADOS + 1) WHERE PT.codigo_participante = PN_CODIGO_LIDER; UPDATE GEN_PROYECTOS D SET D.LIDER_SIS = PN_CODIGO_LIDER WHERE D.CODIGO_PROYECTO = PN_CODIGO_PROY; COMMIT; IF LB_GUARDADO THEN -- pv_error := 'BIEN'; GENK_BITACORIZACION.P_BITACORIZA_INFO(lv_aplicacion, SYSDATE, USER, 'EL LIDER ' || pn_codigo_lider || 'FUE ASIGNADO CON EXITO AL PROYECTO '|| pn_codigo_proy, 'MODULO_GPP', NULL, NULL, pv_error); END IF; END IF;
172
Verificar si el
líder SIS tiene un
proyecto en la
Fase crítica
1
Ciclo hasta terminar
todos loe proyectos
Si
El líder se encuentra en una etapa
crítica, imposible asignar
El programa verifica si el líder que esta por ser asignado al
proyecto esta disponible, en este caso no se le puede asignar
más proyectos al líder ya que en este momento el líder se
encuentra en las fases criticas de un determinado proyecto.
Informe de Análisis
Nombre: Asignación Líder SIS
Caso: Líder SIS tiene asignado dos proyectos los cuales están en las fases de pruebas
Evaluación: Evaluando el flujo de las líneas de códigos minuciosamente se ha llegado a la conclusión que la restricción de asignarle un Líder al proyecto se lo está realizando adecuadamente.
Análisis: No existe ninguna novedad que reportar ya que esta siendo bien analizado la lógica del negocio.
173
5.3.2 Ingreso de Actividades de un proyecto.
Al ingresar las actividades de un proyecto primero se debe
escoger el proyecto antes de realizar el ingreso de nuevas
actividades, si el proyecto tiene actividades asignadas, se genera
un reporte donde salen todas las actividades ingresadas
anteriormente y una línea en blanco en la cual se pueda ingresar
las actividades por proyecto.
PROCEDURE CNP_TIEMPO_HITO(PN_CODIGO_PROYECTO IN GEN_PROYECTOS.CODIGO_PROYECTO%TYPE, PV_ERROR OUT VARCHAR2); PROCEDURE CNP_REC_ESTANDAR(PV_RECURSO IN VARCHAR2, PN_CODIGO_PROY IN NUMBER, PV_CADENA OUT VARCHAR2, PV_ERROR OUT VARCHAR2); PROCEDURE CNP_ACTIVIDADES (PN_ACTIVIDAD_PROYECTO IN NUMBER, --GPP_ACTIVIDADES.ACTIVIDAD_PROYECTO%TYPE, -- ORDEN PV_DESCRIPCION_ACTIVIDAD IN VARCHAR2, --GPP_ACTIVIDADES.DESCRIPCION_ACTIVIDAD%TYPE, -- ACTIVIDAD PV_HITO IN VARCHAR2, --GPP_ACTIVIDADES.ACTIVIDAD_HITO%TYPE, -- HITO PN_ACTIVIDAD_PREDECESORA IN NUMBER DEFAULT 0, --GPP_ACTIVIDADES.DESCRIPCION_ACTIVIDAD%TYPE, -- PREDECESORA PV_FECHA_INICIAL IN VARCHAR2, --GPP_ACTIVIDADES.FECHA_INICIAL_REAL%TYPE, PV_FECHA_FINAL IN VARCHAR2,-----, --GPP_ACTIVIDADES.FECHA_FINAL_REAL%TYPE, PN_TIEMPO IN OUT NUMBER, --GPP_ACTIVIDADES.TIEMPO_REAL%TYPE, -- TIEMPO PV_RECURSO IN OUT VARCHAR2, --GPP_ACTIVIDADES.PARTIC_ACTIVIDAD%TYPE, -- RECURSO PV_OBSERVACION IN VARCHAR2, --GPP_ACTIVIDADES.OBSERVACION%TYPE, -- OBSERVACION PN_CODIGO_PROYECTO IN NUMBER, --GEN_PROYECTOS.CODIGO_PROYECTO%TYPE, PV_ERROR OUT VARCHAR2); PROCEDURE CNP_ACTUALIZA_ACT(PN_ACTIVIDAD_PROYECTO IN NUMBER, --GPP_ACTIVIDADES.ACTIVIDAD_PROYECTO%TYPE, -- ORDEN PV_DESCRIPCION_ACTIVIDAD IN VARCHAR2, --GPP_ACTIVIDADES.DESCRIPCION_ACTIVIDAD%TYPE, -- ACTIVIDAD PV_HITO IN VARCHAR2, --GPP_ACTIVIDADES.ACTIVIDAD_HITO%TYPE, -- HITO PN_ACTIVIDAD_PREDECESORA IN NUMBER DEFAULT 0, --GPP_ACTIVIDADES.DESCRIPCION_ACTIVIDAD%TYPE, -- PREDECESORA PV_FECHA_INICIAL IN VARCHAR2, --GPP_ACTIVIDADES.FECHA_INICIAL_REAL%TYPE,
174
PV_FECHA_FINAL IN VARCHAR2,-----, --GPP_ACTIVIDADES.FECHA_FINAL_REAL%TYPE, PN_TIEMPO IN OUT NUMBER, --GPP_ACTIVIDADES.TIEMPO_REAL%TYPE, -- TIEMPO PV_RECURSO IN OUT VARCHAR2, --GPP_ACTIVIDADES.PARTIC_ACTIVIDAD%TYPE, -- RECURSO PV_OBSERVACION IN VARCHAR2, --GPP_ACTIVIDADES.OBSERVACION%TYPE, -- OBSERVACION PN_CODIGO_PROYECTO IN NUMBER, --GEN_PROYECTOS.CODIGO_PROYECTO%TYPE, PV_ERROR OUT VARCHAR2); end GPPK_TRX_ACTIVIDADES; / create or replace package body GPPK_TRX_ACTIVIDADES IS /* ACTUALIZA LOS DATOS DEL CAMPO DEL CONOGRAMA QUE CORRESPONDE A RECURSOS R1-R2 */ /* PROCEDURE CN_ACTUALIZA_RECURSOS(PN_CODIGO_PROYECTO IN GEN_PROYECTOS.CODIGO_PROYECTO%TYPE, PV_ERROR OUT VARCHAR2) IS LV_ERROR VARCHAR2(100); LV_APLICACION VARCHAR2(50); BEGIN LV_ERROR := NULL; IF PN_CODIGO_PROYECTO IS NULL THEN LV_ERROR := 'NO '; EXCEPTION WHEN LE_ERROR THEN pv_error := lv_error; -- BITACORIZAR EL ERROR GENK_BITACORIZACION.P_BITACORIZA_ERROR(lv_aplicacion, sysdate, user, lv_error, null, null, null, pv_error); WHEN OTHERS THEN pv_error := lv_error; -- BITACORIZAR EL ERROR GENK_BITACORIZACION.P_BITACORIZA_ERROR(lv_aplicacion, sysdate, user, lv_error, null, null, null, pv_error); END;*/ -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ACTUALIZA LOS VALORES REALES DE LOS -- HITOS DE ACUERDO A SUS ACTIVIDADES. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- PROCEDURE CNP_TIEMPO_HITO(PN_CODIGO_PROYECTO IN GEN_PROYECTOS.CODIGO_PROYECTO%TYPE, PV_ERROR OUT VARCHAR2) AS CURSOR OBTIENE_HITOS (PN_CODIGO_PROYECTO NUMBER) IS
175
SELECT A.CODIGO_ACTIVIDAD FROM GPP_ACTIVIDADES A WHERE A.CODIGO_PROYECTO = PN_CODIGO_PROYECTO AND A.ACTIVIDAD_HITO = 'H' AND A.CODIGO_ESTADO = 'A' ORDER BY A.CODIGO_ACTIVIDAD; CURSOR OBTIENE_CRONOGRAMA (PN_CODIGO_PROYECTO NUMBER, PN_CODIGO_ACT NUMBER) IS SELECT A.CODIGO_ACTIVIDAD, A.ACTIVIDAD_PROYECTO, A.ACTIVIDAD_HITO, A.TIEMPO_ESTIMADO, A.FECHA_FINAL_ESTIMADA FROM GPP_ACTIVIDADES A WHERE A.CODIGO_PROYECTO = PN_CODIGO_PROYECTO AND A.CODIGO_ACTIVIDAD > PN_CODIGO_ACT AND A.CODIGO_ESTADO ='A' ORDER BY A.CODIGO_ACTIVIDAD; LE_ERROR EXCEPTION; LN_TIEMPO NUMBER := 0; LN_VALOR NUMBER := 0; LV_ERROR VARCHAR2(100); LV_APLICACION VARCHAR2(100):= 'GPPK_TRX_ACTIVIDADES.CNP_TIEMPO_HITO'; LD_FECHA_FIN GPP_ACTIVIDADES.FECHA_FINAL_ESTIMADA%TYPE; BEGIN LV_ERROR := NULL; IF PN_CODIGO_PROYECTO IS NULL THEN LV_ERROR := 'El código del proyecto no debe ser nulo'; RAISE LE_ERROR; END IF; FOR I IN OBTIENE_HITOS(PN_CODIGO_PROYECTO) LOOP FOR J IN OBTIENE_CRONOGRAMA (PN_CODIGO_PROYECTO, I.CODIGO_ACTIVIDAD) LOOP IF J.ACTIVIDAD_HITO = 'A' THEN LN_VALOR := 1; LD_FECHA_FIN := J.FECHA_FINAL_ESTIMADA; LN_TIEMPO := LN_TIEMPO + J.TIEMPO_ESTIMADO; END IF; EXIT WHEN J.ACTIVIDAD_HITO = 'H'; END LOOP; BEGIN IF LN_VALOR = 0 THEN UPDATE GPP_ACTIVIDADES SET TIEMPO_ESTIMADO = TIEMPO_ESTIMADO, FECHA_FINAL_ESTIMADA = FECHA_FINAL_ESTIMADA WHERE CODIGO_PROYECTO = PN_CODIGO_PROYECTO AND CODIGO_ACTIVIDAD = I.CODIGO_ACTIVIDAD; ELSE UPDATE GPP_ACTIVIDADES SET TIEMPO_ESTIMADO = LN_TIEMPO, FECHA_FINAL_ESTIMADA = LD_FECHA_FIN WHERE CODIGO_PROYECTO = PN_CODIGO_PROYECTO AND CODIGO_ACTIVIDAD = I.CODIGO_ACTIVIDAD; END IF; COMMIT; LN_TIEMPO := 0; EXCEPTION WHEN OTHERS THEN
176
PV_ERROR := SQLERRM || ' - CNP_TIEMPO_HITO'; END; END LOOP; EXCEPTION WHEN LE_ERROR THEN pv_error := lv_error; -- BITACORIZAR EL ERROR GENK_BITACORIZACION.P_BITACORIZA_ERROR(lv_aplicacion, sysdate, user, lv_error, null, null, null, pv_error); WHEN OTHERS THEN pv_error := lv_error; -- BITACORIZAR EL ERROR GENK_BITACORIZACION.P_BITACORIZA_ERROR(lv_aplicacion, sysdate, user, lv_error, null, null, null, pv_error); END; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- PROCEDIMIENTO QUE REGULARIZA EL INGRESO DE -- LOS RECURSOS QUE CORRESPONDEN A LA ACTIVIDAD -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- PROCEDURE CNP_REC_ESTANDAR(PV_RECURSO IN VARCHAR2, PN_CODIGO_PROY IN NUMBER, PV_CADENA OUT VARCHAR2, PV_ERROR OUT VARCHAR2)IS -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- CURSOR QUE VERIFICA LA CANTIDAD DE -- RECURSOS ASIGNADOS A UN PROYECTO -- -- -- -- -- -- -- -- -- -- -- -- -- -- CURSOR C_CANT_RECURSOS (PN_CODIGO_PROY NUMBER)IS SELECT P.TOTAL_RECURSO_HUMANO FROM GEN_PROYECTOS P WHERE P.CODIGO_PROYECTO = PN_CODIGO_PROY; LE_ERROR EXCEPTION; LV_R1 VARCHAR2(3); LV_R2 VARCHAR2(3); LV_R3 VARCHAR2(3); LV_R4 VARCHAR2(3); LV_CARACT VARCHAR2(1); LV_CARACTER VARCHAR2(5); LV_CARACTER_1 VARCHAR2(20); LV_CARACTER_2 VARCHAR2(20); LV_CADENA_TOTAL VARCHAR2(15); LV_ERROR VARCHAR2(100); LV_CADENA VARCHAR2(100); LV_SUBST VARCHAR2(100); LN_LONGITUD NUMBER:=0; LN_EXTRAE NUMBER:=0; LN_R1 NUMBER:=0;
177
LN_R2 NUMBER:=0; LN_R3 NUMBER:=0; LN_R4 NUMBER:=0; --LN_B NUMBER:=0; LN_A NUMBER:=0; LN_CONT NUMBER:=0; LN_INDICE NUMBER:=0; LN_ASCII NUMBER:=0; LN_CARACT NUMBER:=0; LN_SIGNOS NUMBER:=0; LN_CANT_RECURSOS NUMBER:=0; LN_CARACTERES NUMBER:=0; --BAND BOOLEAN:=FALSE; BEGIN LV_ERROR := NULL; LV_CADENA := REPLACE(PV_RECURSO, ' ', ''); LV_CARACTER_1 := SUBSTR(LV_CADENA, 1,1); LV_CARACTER_2 := SUBSTR(LV_CADENA, LENGTH(LV_CADENA),1); -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VALIDA QUE AL INICIO NO HAYA UNA RAYA -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF LV_CARACTER_1 = '-' THEN LV_CARACTER_1 := SUBSTR(LV_CADENA, 2,LENGTH(LV_CADENA)); LV_CADENA := LV_CARACTER_1; LN_CARACT := LN_CARACT + 1; -- SUMA LAS RAYITAS END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VALIDO CUAL CADENA USAR EN EL CASO DE QUE -- PRIMERO TENGA LA RAYA - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF LV_CARACTER_2 = '-'THEN LV_CARACTER_2 := SUBSTR(LV_CADENA, 1, LENGTH(LV_CADENA)-1); LV_CADENA := LV_CARACTER_2; LN_CARACT := LN_CARACT + 1;-- SUMA LAS RAYITAS END IF; BEGIN LN_ASCII := TO_NUMBER(LV_CADENA); LN_LONGITUD := LENGTH(LV_CADENA); EXCEPTION WHEN OTHERS THEN LN_LONGITUD := 0; END; IF LN_CARACT BETWEEN 0 AND 2 THEN IF LN_LONGITUD > 1 THEN LV_ERROR := 'Debe ingresar los recursos que esten en el siguiente rango 1 - 4'; RAISE LE_ERROR; END IF; END IF; -- -- -- -- -- -- -- -- SETEO VARIABLES -- -- -- -- -- -- -- --LN_B := 0; LN_A := 1; LN_ASCII := 0; LN_EXTRAE := 0; LN_SIGNOS := 0; LN_CARACTERES := 0; LN_LONGITUD := LENGTH (LV_CADENA);
178
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VALIDO CARACTERES POR MEDIO DEL ASCII -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- LOOP LN_INDICE := LN_INDICE + 1; LV_CARACT := SUBSTR(LV_CADENA, LN_INDICE, 1); LN_ASCII := ASCII(LV_CARACT); EXIT WHEN LV_CARACT IS NULL; IF (LN_ASCII > 48 AND LN_ASCII < 53) OR LN_ASCII = 45 THEN LN_CARACTERES := LN_CARACTERES + 1; -- SUMO LA CANTIDAD DE RECURSOS ELSE LN_SIGNOS := LN_SIGNOS + 1; END IF; END LOOP; IF LN_SIGNOS > 0 THEN LV_ERROR := 'Debe ingresar los recursos que esten en el siguiente rango 1 - 4'; RAISE LE_ERROR; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- CICLO PARA SETEAR LOS RECURSOS R1-R2 ETC. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- LN_CARACTERES := 0; LOOP IF (LN_LONGITUD = LN_EXTRAE) THEN EXIT; ELSE LN_EXTRAE := INSTR (LV_CADENA, '-', 1 , LN_A); IF LN_EXTRAE = 0 THEN LV_SUBST := LV_CADENA; ELSE LV_SUBST := SUBSTR(LV_CADENA , 1, LN_EXTRAE - 1); LV_CADENA := SUBSTR(LV_CADENA , LN_EXTRAE + 1); END IF; END IF; LV_CARACTER := SUBSTR (LV_SUBST, LENGTH(LV_SUBST),1); LN_CARACTERES := LN_CARACTERES + 1; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- RECURSOS SETEADOS PARA EL CRONOGRAMA -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF LV_SUBST IS NULL THEN LV_ERROR := 'RECURSO MAL INGRESADO'; RAISE LE_ERROR; END IF; IF LV_CARACTER = '1' THEN LV_R1 := 'R1'; LN_R1 := LN_R1 + 1; -- PARA QUE NO SE REPITA LN_CONT := LN_CONT + 1; END IF; IF LV_CARACTER = '2' THEN LV_R2 := 'R2'; LN_R2 := LN_R2 + 1; -- PARA QUE NO SE REPITA LN_CONT := LN_CONT + 1; END IF; IF LV_CARACTER = '3' THEN LV_R3 := 'R3'; LN_R3 := LN_R3 + 1; -- PARA QUE NO SE REPITA LN_CONT := LN_CONT + 1; END IF;
179
IF LV_CARACTER = '4' THEN LV_R4 := 'R4'; LN_R4 := LN_R4 + 1; -- PARA QUE NO SE REPITA LN_CONT := LN_CONT + 1; END IF; IF (LV_CARACTER = '5' OR LV_CARACTER = '6' OR LV_CARACTER = '7' OR LV_CARACTER = '8' OR LV_CARACTER = '9' OR LV_CARACTER = '0') THEN LV_ERROR := 'No debe ingresar más de 4 recursos.'; RAISE LE_ERROR; END IF; EXIT WHEN LN_CONT = 4 OR LN_EXTRAE = 0; END LOOP; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VALIDO QUE NO SE INGRESE UN RECURSO 2 VECES -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF LN_R1 > 1 OR LN_R2 > 1 OR LN_R3 > 1 OR LN_R4 > 1 THEN LV_ERROR := 'No debe ingresar el mismo recurso dos veces'; RAISE LE_ERROR; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VALIDO QUE SOLO INGRESE 4 RECURSOS O LO QUE INDICA EN LA TABLA -- VALIDO QUE NO INGRESE CARACTERES ESPECIALES -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- OPEN C_CANT_RECURSOS(PN_CODIGO_PROY); FETCH C_CANT_RECURSOS INTO LN_CANT_RECURSOS; CLOSE C_CANT_RECURSOS; IF LN_CARACTERES > LN_CANT_RECURSOS THEN LV_ERROR := 'La cantidad de recursos es diferente a la especificada (' || LN_CANT_RECURSOS || ') - (1 - 4)'; RAISE LE_ERROR; END IF; LV_CADENA_TOTAL := LV_R1 || '-' || LV_R2 || '-' || LV_R3 || '-' || LV_R4; -- -- -- -- -- -- -- -- -- -- -- -- -- -- REEMPLAZO CARACTERES DUPLICADOS -- -- -- -- -- -- -- -- -- -- -- -- -- LV_CADENA_TOTAL := REPLACE(LV_CADENA_TOTAL, '---', '-'); LV_CADENA_TOTAL := REPLACE(LV_CADENA_TOTAL, '--', '-'); LV_CARACTER_1 := SUBSTR(LV_CADENA_TOTAL, 1, 1); LV_CARACTER_2 := SUBSTR(LV_CADENA_TOTAL, LENGTH(LV_CADENA_TOTAL), 1); -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ELIMINO EL PRIMER CARACTER DE LA CADENA -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF LV_CARACTER_1 = '-' THEN LV_CADENA_TOTAL := SUBSTR(LV_CADENA_TOTAL, 2, LENGTH(LV_CADENA_TOTAL)); END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ELIMINO EL ULTIMO CARACTER DE LA CADENA -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF LV_CARACTER_2 = '-' THEN LV_CADENA_TOTAL := SUBSTR(LV_CADENA_TOTAL, 1, LENGTH(LV_CADENA_TOTAL)-1); END IF; PV_CADENA := LV_CADENA_TOTAL; EXCEPTION WHEN le_error THEN PV_ERROR := LV_ERROR; END;
180
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- PROGRAMA PRINCIPAL QUE REALIZA EL CRONOGRAMA -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- PROCEDURE CNP_ACTIVIDADES (PN_ACTIVIDAD_PROYECTO IN NUMBER, --GPP_ACTIVIDADES.ACTIVIDAD_PROYECTO%TYPE, -- ORDEN PV_DESCRIPCION_ACTIVIDAD IN VARCHAR2, --GPP_ACTIVIDADES.DESCRIPCION_ACTIVIDAD%TYPE, -- ACTIVIDAD PV_HITO IN VARCHAR2, --GPP_ACTIVIDADES.ACTIVIDAD_HITO%TYPE, -- HITO PN_ACTIVIDAD_PREDECESORA IN NUMBER DEFAULT 0, --GPP_ACTIVIDADES.DESCRIPCION_ACTIVIDAD%TYPE, -- PREDECESORA PV_FECHA_INICIAL IN VARCHAR2, --GPP_ACTIVIDADES.FECHA_INICIAL_REAL%TYPE, PV_FECHA_FINAL IN VARCHAR2,-----, --GPP_ACTIVIDADES.FECHA_FINAL_REAL%TYPE, PN_TIEMPO IN OUT NUMBER, --GPP_ACTIVIDADES.TIEMPO_REAL%TYPE, -- TIEMPO PV_RECURSO IN OUT VARCHAR2, --GPP_ACTIVIDADES.PARTIC_ACTIVIDAD%TYPE, -- RECURSO PV_OBSERVACION IN VARCHAR2, --GPP_ACTIVIDADES.OBSERVACION%TYPE, -- OBSERVACION PN_CODIGO_PROYECTO IN NUMBER, --GEN_PROYECTOS.CODIGO_PROYECTO%TYPE, PV_ERROR OUT VARCHAR2)IS -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- OBTIENE LA PRIMERA FECHA DE UN CRONOGRAMA -- EN CASO DE QUE EXISTE REGISTROS ANTERIORES -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- CURSOR C_FECHA_FIN(PN_CODIGO_PROYECTO NUMBER) IS SELECT MIN(A.FECHA_INICIAL_ESTIMADA) FROM GPP_ACTIVIDADES A WHERE A.CODIGO_PROYECTO = PN_CODIGO_PROYECTO; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VERIFICA LA ULTIMA ACTIVIDAD DEL CRONOGRAMA -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- CURSOR C_VERIF_ULTIMA_ACTIV (PN_CODIGO_PROYECTO NUMBER) IS SELECT COUNT(*) FROM GPP_ACTIVIDADES AC WHERE AC.CODIGO_ACTIVIDAD = (SELECT MAX(A.CODIGO_ACTIVIDAD) FROM GPP_ACTIVIDADES A WHERE A.CODIGO_PROYECTO = PN_CODIGO_PROYECTO) AND UPPER(AC.DESCRIPCION_ACTIVIDAD) LIKE '%FIN % PROY%'; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VERIFICA LA FECHA MINIMA Y MAXIMA DEL PROYECTO -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- CURSOR C_FECHAS_MIN_MAX(PN_CODIGO_PROYECTO NUMBER) IS SELECT MIN(A.FECHA_INICIAL_ESTIMADA), MAX(A.FECHA_FINAL_ESTIMADA) FROM GPP_ACTIVIDADES A WHERE A.CODIGO_PROYECTO = PN_CODIGO_PROYECTO; LE_ERROR EXCEPTION; LN_PREDECESORA NUMBER:=0; LN_CANT_RECURSOS NUMBER:=0; LN_ACTIVIDAD NUMBER:=0; LB_NOT_FOUND BOOLEAN; LB_BAND BOOLEAN; LV_ACT VARCHAR2(1); AUX_FI VARCHAR2(20); AUX_FF VARCHAR2(20); AUX_FIC VARCHAR2(20);
181
LD_FECHA_INICIO DATE; LD_FECHA_FIN DATE; LD_SYSDATE DATE; LD_FECHA_INIC_CRONOG DATE; LD_FECHA_MIN DATE; LD_FECHA_MAX DATE; LV_RECURSOS VARCHAR2(20); LV_HITO VARCHAR2(1):= 'A'; LV_ERROR VARCHAR2(100); LV_APLICACION VARCHAR2(100):= 'GPPK_TRX_ACTIVIDADES.CNP_ACTIVIDADES'; BEGIN LV_ERROR := NULL; PN_TIEMPO := 0; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VALIDO QUE LAS VARIABLES NO SEAN NULAS -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- BEGIN SELECT F.ACTIVIDAD_PROYECTO INTO LV_ACT FROM GPP_ACTIVIDADES F WHERE F.ACTIVIDAD_PROYECTO = PN_ACTIVIDAD_PROYECTO AND F.CODIGO_PROYECTO = PN_CODIGO_PROYECTO; EXCEPTION WHEN OTHERS THEN NULL; --LV_ERROR := 'La actividad u orden que quiere ingresar ya existe en el Proyecto'; --RAISE LE_ERROR; END; IF LV_ACT = 'X' THEN LV_ERROR := 'La actividad u orden que quiere ingresar ya existe en el Proyecto'; RAISE LE_ERROR; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- INICIO EL PROCESO DE VALIDACION -- -- -- -- -- -- -- -- -- -- -- -- -- IF PN_ACTIVIDAD_PROYECTO IS NULL THEN lv_error := 'El orden de la actividad no debe ser nulo'; RAISE le_error; END IF; IF pn_codigo_proyecto IS NULL THEN lv_error := 'El código del proyecto no debe ser nulo'; RAISE le_error; END IF; IF PV_DESCRIPCION_ACTIVIDAD IS NULL THEN lv_error := 'La actividad no debe ser nula'; RAISE le_error; END IF; LV_HITO := UPPER(PV_HITO); IF (LV_HITO <> 'A' AND LV_HITO <> 'H') OR LV_HITO IS NULL THEN lv_error := 'El hito debe estar entre A o H'; RAISE le_error; END IF; IF PN_ACTIVIDAD_PREDECESORA IS NULL THEN ln_predecesora := 0; ELSE --HECHO POR JOHNNY PRUEBA PARA QUE NO INGRESE LOS NUMEROS INVALIDOS BEGIN SELECT F.ACTIVIDAD_PROYECTO INTO LN_ACTIVIDAD
182
FROM GPP_ACTIVIDADES F WHERE F.ACTIVIDAD_PROYECTO = PN_ACTIVIDAD_PREDECESORA AND F.CODIGO_PROYECTO = PN_CODIGO_PROYECTO; EXCEPTION WHEN OTHERS THEN NULL; END; IF LN_ACTIVIDAD IS NULL OR LN_ACTIVIDAD = 0 THEN LV_ERROR := 'La actividad predecesora que quiere ingresar no existe en el Proyecto'; RAISE LE_ERROR; END IF; ln_predecesora := PN_ACTIVIDAD_PREDECESORA; END IF; IF lv_hito = 'A' THEN IF PV_FECHA_INICIAL IS NULL THEN LV_ERROR := 'Ingrese la fecha de inicio de la actividad'; RAISE LE_ERROR; END IF; IF PV_FECHA_FINAL IS NULL THEN LV_ERROR := 'Ingrese la fecha fin de la actividad'; RAISE LE_ERROR; END IF; ELSE IF PV_FECHA_INICIAL IS NULL THEN LV_ERROR := 'Ingrese la fecha inicio del hito'; RAISE LE_ERROR; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- SI PERMITE LA FECHA FINAL NULA PARA EL HITO -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --SELECT TO_DATE(PV_FECHA_INICIAL, 'DD/MM/YYYY') INTO LV_FI FROM DUAL; LD_FECHA_FIN := TO_DATE(PV_FECHA_INICIAL,'DD-MM-YYYY'); LB_BAND := TRUE; END IF; IF LB_BAND THEN LD_FECHA_INICIO := TO_DATE(PV_FECHA_INICIAL, 'DD-MM-YYYY'); ELSE LD_FECHA_INICIO := TO_DATE(PV_FECHA_INICIAL, 'DD-MM-YYYY'); LD_FECHA_FIN := TO_DATE(PV_FECHA_FINAL, 'DD-MM-YYYY'); END IF; LB_BAND := FALSE; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- CURSOR QUE VERIFICA LA PRIMERA FECHA DEL CRONOGRAMA -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- OPEN C_FECHA_FIN(PN_CODIGO_PROYECTO); FETCH C_FECHA_FIN INTO LD_FECHA_INIC_CRONOG; LB_NOT_FOUND := C_FECHA_FIN%NOTFOUND; CLOSE C_FECHA_FIN; AUX_FI := TO_CHAR(LD_FECHA_INICIO, 'MM-YYYY'); AUX_FF := TO_CHAR(LD_FECHA_FIN, 'MM-YYYY'); -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VALIDAR QUE LAS FECHAS SEAN MAYORES A LA PRIMERA FECHA -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF LB_NOT_FOUND THEN LD_SYSDATE := TO_CHAR(SYSDATE, 'MM-YYYY'); -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VALIDA QUE LAS FECHAS NO SEAN MENORES A LA PRIMERA FECHA INGRESADA -- EN CASO QUE NO HAYA VALIDA EL MES Y AÑO EN CURSO -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
183
IF (AUX_FI <= LD_SYSDATE) OR (AUX_FF <= LD_SYSDATE) THEN LV_ERROR := 'La fecha ingresada está fuera del rango inicial del cronograma'; RAISE LE_ERROR; END IF; ELSE AUX_FIC := TO_CHAR(LD_FECHA_INIC_CRONOG, 'MM-YYYY'); IF AUX_FIC IS NOT NULL THEN IF (AUX_FI < AUX_FIC) OR (AUX_FF < AUX_FIC) THEN LV_ERROR := 'La fecha ingresada está fuera del rango inicial del cronograma'; RAISE LE_ERROR; END IF; END IF; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- CALCULO EL TIEMPO ENTRE LAS FECHAS -- -- -- -- -- -- -- -- -- -- -- -- -- PN_TIEMPO := LD_FECHA_FIN - LD_FECHA_INICIO + 1; -- SUMAR EL DIA QUE SE QUEDA EN LA RESTA IF PN_TIEMPO < 0 THEN LV_ERROR := 'La fecha de inicio debe ser menor que la fecha final'; RAISE LE_ERROR; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VALIDAR LA CAJA DE TEXTO QUE INVOLUCRA A LOS RECURSOS -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF PV_RECURSO IS NULL THEN LV_ERROR := 'Ingrese el o los recursos responsables de la actividad'; RAISE LE_ERROR; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- INDICA LAS 4 VARIABLES ESTANDARES -- -- -- -- -- -- -- -- -- -- -- -- -- CNP_REC_ESTANDAR(PV_RECURSO, PN_CODIGO_PROYECTO, LV_RECURSOS, LV_ERROR); IF LV_ERROR IS NOT NULL THEN RAISE LE_ERROR; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- INSERTA LAS ACTIVIDADES DEL CRONOGRAMA -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- GPPK_OBJ_ACTIVIDADES.INSERT_ACTIVIDADES(PN_ACTIVIDAD_PROYECTO, PN_CODIGO_PROYECTO, upper(PV_DESCRIPCION_ACTIVIDAD), upper(LV_HITO), LN_PREDECESORA, LD_FECHA_INICIO, --/*TO_DATE(LD_FECHA_INICIO, 'DD-MM-YYYY'),--*/PV_FECHA_INICIAL, LD_FECHA_FIN, --/*TO_DATE(LD_FECHA_FIN, 'DD-MM-YYYY'), --*/PV_FECHA_FINAL, upper(PV_OBSERVACION), LV_RECURSOS, PN_TIEMPO, LV_ERROR); IF LV_ERROR IS NOT NULL THEN RAISE LE_ERROR; END IF;
184
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VERIFICA SI ES LA ULTIMA ACTIVIDAD -- PARA ACTUALIZAR LOS TIEMPOS -- -- -- -- -- -- -- -- -- -- -- -- -- -- OPEN C_VERIF_ULTIMA_ACTIV(PN_CODIGO_PROYECTO); FETCH C_VERIF_ULTIMA_ACTIV INTO LN_CANT_RECURSOS; CLOSE C_VERIF_ULTIMA_ACTIV; IF LN_CANT_RECURSOS > 0 THEN GPPK_TRX_ACTIVIDADES.CNP_TIEMPO_HITO(PN_CODIGO_PROYECTO, LV_ERROR); IF LV_ERROR IS NOT NULL THEN RAISE LE_ERROR; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- OBTENER FECHA MINIMA Y MAXIMA -- -- -- -- -- -- -- -- -- -- -- -- OPEN C_FECHAS_MIN_MAX(PN_CODIGO_PROYECTO); FETCH C_FECHAS_MIN_MAX INTO LD_FECHA_MIN, LD_FECHA_MAX; CLOSE C_FECHAS_MIN_MAX; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- CAMBIAR EL ESTADO DEL PROYECTO Y ACTUALIZA LAS FECHAS -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- UPDATE GEN_PROYECTOS P SET P.CODIGO_ESTADO = 'CR', P.FECHA_INICIO = LD_FECHA_MIN, P.FECHA_FIN = LD_FECHA_MAX, P.FECHA_INICIO_REAL = LD_FECHA_MIN, P.FECHA_FIN_REAL = LD_FECHA_MAX, P.TIEMPO_PROYECTO = TO_NUMBER((LD_FECHA_FIN - LD_FECHA_INICIO) + 1) WHERE P.CODIGO_PROYECTO = PN_CODIGO_PROYECTO; COMMIT; END IF; COMMIT; EXCEPTION WHEN le_error THEN pv_error := lv_error; -- BITACORIZAR EL ERROR GENK_BITACORIZACION.P_BITACORIZA_ERROR(lv_aplicacion, sysdate, user, lv_error, null, null, null, pv_error); IF PV_ERROR IS NOT NULL THEN PV_ERROR := LV_ERROR /*|| ' - ' || pv_error*/; END IF; END; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ACTUALIZA LA ACTIVIDAD DE UN PROYECTO SIGUIENDO LAS -- MISMAS CONSIDERACIONES QUE SE TOMAN PARA REALIZA UN INSERT -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- PROCEDURE CNP_ACTUALIZA_ACT(PN_ACTIVIDAD_PROYECTO IN NUMBER, --GPP_ACTIVIDADES.ACTIVIDAD_PROYECTO%TYPE, -- ORDEN PV_DESCRIPCION_ACTIVIDAD IN VARCHAR2, --
185
GPP_ACTIVIDADES.DESCRIPCION_ACTIVIDAD%TYPE, -- ACTIVIDAD PV_HITO IN VARCHAR2, --GPP_ACTIVIDADES.ACTIVIDAD_HITO%TYPE, -- HITO PN_ACTIVIDAD_PREDECESORA IN NUMBER DEFAULT 0, --GPP_ACTIVIDADES.DESCRIPCION_ACTIVIDAD%TYPE, -- PREDECESORA PV_FECHA_INICIAL IN VARCHAR2, --GPP_ACTIVIDADES.FECHA_INICIAL_REAL%TYPE, PV_FECHA_FINAL IN VARCHAR2,-----, --GPP_ACTIVIDADES.FECHA_FINAL_REAL%TYPE, PN_TIEMPO IN OUT NUMBER, --GPP_ACTIVIDADES.TIEMPO_REAL%TYPE, -- TIEMPO PV_RECURSO IN OUT VARCHAR2, --GPP_ACTIVIDADES.PARTIC_ACTIVIDAD%TYPE, -- RECURSO PV_OBSERVACION IN VARCHAR2, --GPP_ACTIVIDADES.OBSERVACION%TYPE, -- OBSERVACION PN_CODIGO_PROYECTO IN NUMBER, --GEN_PROYECTOS.CODIGO_PROYECTO%TYPE, PV_ERROR OUT VARCHAR2)IS -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- OBTIENE LA PRIMERA FECHA DE UN CRONOGRAMA -- EN CASO DE QUE EXISTE REGISTROS ANTERIORES -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- CURSOR C_FECHA_FIN(PN_CODIGO_PROYECTO NUMBER) IS SELECT MIN(A.FECHA_INICIAL_ESTIMADA) FROM GPP_ACTIVIDADES A WHERE A.CODIGO_PROYECTO = PN_CODIGO_PROYECTO; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VERIFICA LA ULTIMA ACTIVIDAD DEL CRONOGRAMA -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- CURSOR C_VERIF_ULTIMA_ACTIV (PN_CODIGO_PROYECTO NUMBER) IS SELECT COUNT(*) FROM GPP_ACTIVIDADES AC WHERE AC.CODIGO_ACTIVIDAD = (SELECT MAX(A.CODIGO_ACTIVIDAD) FROM GPP_ACTIVIDADES A WHERE A.CODIGO_PROYECTO = PN_CODIGO_PROYECTO) AND UPPER(AC.DESCRIPCION_ACTIVIDAD) LIKE '%FIN % PROY%'; LE_ERROR EXCEPTION; LN_PREDECESORA NUMBER:=0; LN_CANT_RECURSOS NUMBER:=0; LN_ACTIVIDAD NUMBER:=0; LB_NOT_FOUND BOOLEAN; LB_BAND BOOLEAN; --LV_ACT VARCHAR2(1); AUX_FI VARCHAR2(20); AUX_FF VARCHAR2(20); AUX_FIC VARCHAR2(20); LD_FECHA_INICIO DATE; LD_FECHA_FIN DATE; LD_SYSDATE DATE; LD_FECHA_INIC_CRONOG DATE; LV_RECURSOS VARCHAR2(20); LV_HITO VARCHAR2(1); LV_ERROR VARCHAR2(100); LV_APLICACION VARCHAR2(100):= 'GPPK_TRX_ACTIVIDADES.CNP_ACTIVIDADES'; BEGIN LV_ERROR := NULL; PN_TIEMPO := 0; -- -- -- -- -- -- -- -- -- -- -- -- -- -- INICIO EL PROCESO DE VALIDACION
186
-- -- -- -- -- -- -- -- -- -- -- -- -- IF PN_ACTIVIDAD_PROYECTO IS NULL THEN lv_error := 'Especifique la actividad a modificar'; RAISE le_error; END IF; IF pn_codigo_proyecto IS NULL THEN lv_error := 'El código del proyecto no debe ser nulo'; RAISE le_error; END IF; IF PN_ACTIVIDAD_PREDECESORA IS NOT NULL THEN -- PARA QUE NO INGRESE LOS NUMEROS INVALIDOS BEGIN SELECT F.ACTIVIDAD_PROYECTO INTO LN_ACTIVIDAD FROM GPP_ACTIVIDADES F WHERE F.ACTIVIDAD_PROYECTO = PN_ACTIVIDAD_PREDECESORA AND F.CODIGO_PROYECTO = PN_CODIGO_PROYECTO; EXCEPTION WHEN OTHERS THEN NULL; END; IF LN_ACTIVIDAD IS NULL OR LN_ACTIVIDAD = 0 THEN LV_ERROR := 'La actividad predecesora que quiere ingresar no existe en el Proyecto'; RAISE LE_ERROR; END IF; ln_predecesora := PN_ACTIVIDAD_PREDECESORA; END IF; IF lv_hito IS NOT NULL THEN IF lv_hito = 'H' OR lv_hito = 'A' THEN IF lv_hito = 'A' THEN IF PV_FECHA_INICIAL IS NULL THEN LV_ERROR := 'Ingrese la fecha de inicio de la actividad'; RAISE LE_ERROR; END IF; IF PV_FECHA_FINAL IS NULL THEN LV_ERROR := 'Ingrese la fecha fin de la actividad'; RAISE LE_ERROR; END IF; ELSE IF PV_FECHA_INICIAL IS NULL THEN LV_ERROR := 'Ingrese la fecha inicio del hito'; RAISE LE_ERROR; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- SI PERMITE LA FECHA FINAL NULA PARA EL HITO -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --SELECT TO_DATE(PV_FECHA_INICIAL, 'DD/MM/YYYY') INTO LV_FI FROM DUAL; LD_FECHA_FIN := TO_DATE(PV_FECHA_INICIAL,'DD-MM-YYYY'); LB_BAND := TRUE; END IF; IF LB_BAND THEN LD_FECHA_INICIO := TO_DATE(PV_FECHA_INICIAL, 'DD-MM-YYYY'); ELSE LD_FECHA_INICIO := TO_DATE(PV_FECHA_INICIAL, 'DD-MM-YYYY'); LD_FECHA_FIN := TO_DATE(PV_FECHA_FINAL, 'DD-MM-YYYY'); END IF; LB_BAND := FALSE; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
187
-- CURSOR QUE VERIFICA LA PRIMERA FECHA DEL CRONOGRAMA -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- OPEN C_FECHA_FIN(PN_CODIGO_PROYECTO); FETCH C_FECHA_FIN INTO LD_FECHA_INIC_CRONOG; LB_NOT_FOUND := C_FECHA_FIN%NOTFOUND; CLOSE C_FECHA_FIN; AUX_FI := TO_CHAR(LD_FECHA_INICIO, 'MM-YYYY'); AUX_FF := TO_CHAR(LD_FECHA_FIN, 'MM-YYYY'); -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VALIDAR QUE LAS FECHAS SEAN MAYORES A LA PRIMERA FECHA -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF LB_NOT_FOUND THEN LD_SYSDATE := TO_CHAR(SYSDATE, 'MM-YYYY'); -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VALIDA QUE LAS FECHAS NO SEAN MENORES A LA PRIMERA FECHA INGRESADA -- EN CASO QUE NO HAYA VALIDA EL MES Y AÑO EN CURSO -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF (AUX_FI <= LD_SYSDATE) OR (AUX_FF <= LD_SYSDATE) THEN LV_ERROR := 'La fecha ingresada está fuera del rango inicial del cronograma'; RAISE LE_ERROR; END IF; ELSE AUX_FIC := TO_CHAR(LD_FECHA_INIC_CRONOG, 'MM-YYYY'); IF AUX_FIC IS NOT NULL THEN IF (AUX_FI < AUX_FIC) OR (AUX_FF < AUX_FIC) THEN LV_ERROR := 'La fecha ingresada está fuera del rango inicial del cronograma'; RAISE LE_ERROR; END IF; END IF; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- CALCULO EL TIEMPO ENTRE LAS FECHAS -- -- -- -- -- -- -- -- -- -- -- -- -- PN_TIEMPO := LD_FECHA_FIN - LD_FECHA_INICIO + 1; -- SUMAR EL DIA QUE SE QUEDA EN LA RESTA IF PN_TIEMPO < 0 THEN LV_ERROR := 'La fecha de inicio debe ser menor que la fecha final'; RAISE LE_ERROR; END IF; END IF; END IF; IF LV_HITO IS NULL THEN LD_FECHA_INICIO := NULL; LD_FECHA_FIN := NULL; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VALIDAR LA CAJA DE TEXTO QUE INVOLUCRA A LOS RECURSOS -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF PV_RECURSO IS NOT NULL THEN -- -- -- -- -- -- -- -- -- -- -- -- -- -- INDICA LAS 4 VARIABLES ESTANDARES -- -- -- -- -- -- -- -- -- -- -- -- -- CNP_REC_ESTANDAR(PV_RECURSO, PN_CODIGO_PROYECTO, LV_RECURSOS, LV_ERROR); IF LV_ERROR IS NOT NULL THEN RAISE LE_ERROR;
188
END IF; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- INSERTA LAS ACTIVIDADES DEL CRONOGRAMA -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- GPPK_OBJ_ACTIVIDADES.ACT_ACTIVIDADES(pn_codigo_actividad => PN_ACTIVIDAD_PROYECTO, pn_codigo_proyecto => PN_CODIGO_PROYECTO, pv_descripcion => upper(PV_DESCRIPCION_ACTIVIDAD), pv_hito => upper(LV_HITO), pn_predecesora => LN_PREDECESORA, pd_fecha_inicial => LD_FECHA_INICIO, --/*TO_DATE(LD_FECHA_INICIO, 'DD-MM-YYYY'),--*/PV_FECHA_INICIAL, pd_fecha_final => LD_FECHA_FIN, --/*TO_DATE(LD_FECHA_FIN, 'DD-MM-YYYY'), --*/PV_FECHA_FINAL, pv_observacion => upper(PV_OBSERVACION), pv_recurso => LV_RECURSOS, pn_tiempo => PN_TIEMPO, pv_msg_error => LV_ERROR); IF LV_ERROR IS NOT NULL THEN RAISE LE_ERROR; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VERIFICA SI ES LA ULTIMA ACTIVIDAD -- PARA ACTUALIZAR LOS TIEMPOS -- -- -- -- -- -- -- -- -- -- -- -- -- -- OPEN C_VERIF_ULTIMA_ACTIV(PN_CODIGO_PROYECTO); FETCH C_VERIF_ULTIMA_ACTIV INTO LN_CANT_RECURSOS; CLOSE C_VERIF_ULTIMA_ACTIV; IF LN_CANT_RECURSOS > 0 THEN GPPK_TRX_ACTIVIDADES.CNP_TIEMPO_HITO(PN_CODIGO_PROYECTO, LV_ERROR); IF LV_ERROR IS NOT NULL THEN RAISE LE_ERROR; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ENVIAR LA ALARMA AL GRUPO DE NORKA INDICANDO -- QUE EL CRONOGRAMA YA FUE CULMINADO -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- COMMIT; END IF; COMMIT; EXCEPTION WHEN le_error THEN pv_error := lv_error; -- BITACORIZAR EL ERROR GENK_BITACORIZACION.P_BITACORIZA_ERROR(lv_aplicacion, sysdate, user, lv_error, null, null, null, pv_error); IF PV_ERROR IS NOT NULL THEN PV_ERROR := LV_ERROR /*|| ' - ' || pv_error*/;
189
END IF; END; end GPPK_TRX_ACTIVIDADES;
Manejaremos los siguientes casos:
Caso a: La actividad que se vaya asignar es la quinta actividad
ingresada en el mismo proyecto.
Caso b: En la actividad ingreso en el campo de partic_proyecto
se va a insertar un símbolo (ASCII), para ver la funcionalidad del
proceso que realiza la inserción en gpp_Actividades.
190
Caso a:
Ingresa
Datos de la
actividad
Verifica si existen
campos nulos
No
Verifica si es hito
No
SiPermitir que sea
nula la fecha final
Valida que la f.
de Ingreso mayor
a la f. Inicial
Abrir Cursor
Fecha Inicio
Proyectos
Si
Sumar las
fechas de
actividades
Valida que
ingrese el
responsable de
la act.
Si
Llama
procedimiento
que
estandariza los
recursos
Valida que
ingrese el
responsable de
la act.
Insertar actividad
191
En el primer caso antes de ingresar la actividad a la tabla se debe
validar los parámetros que reciben el procedimiento que va a
realizar la inserción; pero en este caso los valores ingresados son
completos y correctos.
Luego se verifica si la actividad por ingresarse es hito; para saber
si es permitido el que no tenga la fecha fin o si debe ser
obligatorio, en este caso si es un hito y no lleva la fecha fin de la
actividad.
Se recorre un cursor para obtener la fecha que comenzó la
primera actividad del proyecto; para poderlo comparar con las
fechas que se esta ingresando la cual no deben ser mayores.
Realiza la inserción de las actividades de un proyecto
192
Informe de Análisis
Nombre: Ingreso de Actividades de un proyecto
Caso: La actividad que se vaya asignar es la quinta actividad ingresada en el mismo proyecto.
Evaluación: Evaluando el flujo de las líneas de códigos minuciosamente se ha llegado a la conclusión que el correcto manejo de información conlleva al ingreso exitoso de una actividad.
Análisis: No existe novedad o alguna sugerencia de este caso y no se levantará ningún tema de atención sobre el proyecto.
Caso B:
En este caso solo vamos a revisar el modelo que realiza las
validaciones para líder.
193
PROCEDURE CNP_REC_ESTANDAR(PV_RECURSO IN VARCHAR2, PN_CODIGO_PROY IN NUMBER, PV_CADENA OUT VARCHAR2, PV_ERROR OUT VARCHAR2)IS CURSOR C_CANT_RECURSOS (PN_CODIGO_PROY NUMBER)IS SELECT P.TOTAL_RECURSO_HUMANO FROM GEN_PROYECTOS P WHERE P.CODIGO_PROYECTO = PN_CODIGO_PROY; LE_ERROR EXCEPTION; LV_R1 VARCHAR2(3); LV_R2 VARCHAR2(3); LV_R3 VARCHAR2(3); LV_R4 VARCHAR2(3); LV_CARACT VARCHAR2(1); LV_CARACTER VARCHAR2(5); LV_CARACTER_1 VARCHAR2(20); LV_CARACTER_2 VARCHAR2(20); LV_CADENA_TOTAL VARCHAR2(15); LV_ERROR VARCHAR2(100); LV_CADENA VARCHAR2(100); LV_SUBST VARCHAR2(100); LN_LONGITUD NUMBER:=0; LN_EXTRAE NUMBER:=0; LN_R1 NUMBER:=0; LN_R2 NUMBER:=0; LN_R3 NUMBER:=0; LN_R4 NUMBER:=0; --LN_B NUMBER:=0; LN_A NUMBER:=0; LN_CONT NUMBER:=0; LN_INDICE NUMBER:=0; LN_ASCII NUMBER:=0; LN_CARACT NUMBER:=0; LN_SIGNOS NUMBER:=0; LN_CANT_RECURSOS NUMBER:=0; LN_CARACTERES NUMBER:=0; BAND BOOLEAN:=FALSE; BEGIN J_ LV_ERROR := NULL; LV_CADENA := REPLACE(PV_RECURSO, ' ', ''); LV_CARACTER_1 := SUBSTR(LV_CADENA, 1,1); LV_CARACTER_2 := SUBSTR(LV_CADENA, LENGTH(LV_CADENA),1); IF LV_CARACTER_1 = '-' THEN LV_CARACTER_1 := SUBSTR(LV_CADENA, 2,LENGTH(LV_CADENA)); LV_CADENA := LV_CARACTER_1; LN_CARACT := LN_CARACT + 1; -- SUMA LAS RAYITAS END IF; IF LV_CARACTER_2 = '-'THEN LV_CARACTER_2 := SUBSTR(LV_CADENA, 1, LENGTH(LV_CADENA)-1); LV_CADENA := LV_CARACTER_2; LN_CARACT := LN_CARACT + 1;-- SUMA LAS RAYITAS END IF; BEGIN LN_ASCII := TO_NUMBER(LV_CADENA); LN_LONGITUD := LENGTH(LV_CADENA); EXCEPTION WHEN OTHERS THEN LN_LONGITUD := 0; END;
194
Abrir Cursor
Cantidad de
Recursos
Elimina espacio
en blanco
Ln_signos > 0
Si
Suma los
signo que
encuentre
Valida si inicia
con raya o no
Suma el número
de rayas
Verifica por medio de
código ASCII, para no
coger caracteres
especiales
Si
Debe Ingresar los recursos que estén
en el siguiente rango 1 - 4
195
Primero lo que se analiza es el número de recursos que están
asignados a un proyecto, para luego recopilarlos y en algún
momento poder saber cuantos participantes se van asignar a un
proyecto esto permitirá tener una restricción cuando se vayan
asignar.
Luego verifica por medio del código Ascii que los datos que están
ingresando no son caracteres especiales; pero en este caso si lo
son por ende salio el mensaje de error.
Informe de Análisis
Nombre: Ingreso de Actividades de un proyecto
Caso: En la actividad ingreso en el campo de partic_proyecto se va a insertar un símbolo (ASCII), para ver la funcionalidad del proceso que realiza la inserción en gpp_Actividades.
Evaluación: Evaluando el flujo de las líneas de codificación después de un exhaustivo desarrollo de pruebas y hemos notado la gran robustez a nivel de seguridades.
Análisis: No existe novedad o alguna sugerencia de este caso y no se levantará ningún tema de atención sobre el proyecto.
196
5.3.3 Recursos Humanos
Para insertar los recursos humanos debemos recuperar de
gen_proyectos el número de recursos que se le puede asignar a
un proyecto basándonos en eso vamos asignar los recursos.
procedure gpp_asigna_recursos ( pv_codigo in varchar2 ,pv_participantes in varchar2 ,pn_cant_recursos in number ,pv_msg_error out varchar2) is lv_trama varchar2(50); lv_caracter varchar2(50); lv_parametro varchar2(50); lv_campo varchar2(50); lv_valor varchar2(50); cadena_resultante varchar2(100); lv_msg_error varchar2(100):=NULL; ln_contador number := 0; ln_codigoProyecto number; ln_codigoParticipante number; le_mi_error exception; --lb_guardar boolean:= true; ln_totalRecursos number:= 0; begin if pv_codigo is null then lv_msg_error:= 'Código del proyecto con valor Nulo'; raise le_mi_error; end if; if pv_participantes is null then lv_msg_error:= 'La trama de los participantes esta vacía '; raise le_mi_error; end if; if pn_cant_recursos is null then lv_msg_error:= 'No hay cantidad de recursos para el proyecto'; raise le_mi_error; end if; lv_trama := pv_participantes; -- se tiene la trama de los participantes lv_parametro := pv_codigo; -- se tiene el codigo del participante ln_codigoProyecto := to_number (pv_codigo); -- convierte a number el código del proyecto --lv_trama := lv_trama||'|'; for i in 1 .. length(lv_trama) loop lv_caracter:=substr(lv_trama,i,1); if lv_caracter not in ('|') then lv_campo:=lv_campo||lv_caracter; elsif lv_caracter = '|' then ln_contador := ln_contador + 1; if ln_contador = 1 then
197
lv_parametro := nvl(lv_campo,0); elsif ln_contador = 2 then lv_valor := lv_campo; ln_codigoParticipante := to_number(lv_valor); ln_totalRecursos := ln_totalRecursos + 1; INSERT INTO CLC_PARTICIPANTE_PROYECTO (CODIGO_PARTICIPANTE, CODIGO_PROYECTO, CODIGO_PRIVILEGIO, DESCRIPCION, FECHA_ASIGNACION, fecha_ing , fecha_mod , CODIGO_USUARIO_ING, ESTADO_PARTICIPANTE, ESTADO) VALUES (ln_codigoParticipante, ln_codigoProyecto, 'R', 'El participante será asignado al proyecto:' || ln_codigoProyecto, SYSDATE, SYSDATE, SYSDATE, 'GRUPO3', 'N',-- NO SE ENCUENTRA DISPONIBLE 'A' ); commit; -- llamada a paquete para que realice la asignacion del recurso humano /*BEGIN lb_guardar:= admin.clck_guardar_datos.f_asignar_partic_proyecto (ln_codigoParticipante ,ln_codigoProyecto ,'R' ,'El participante será asignado al proyecto:' || ln_codigoProyecto ,sysdate ,'N' -- estado de participante que ya no estará disponible ,'P' -- estado pendiente ,'GRUPO3' ,'A'); if lb_guardar then genk_bitacorizacion.p_bitacoriza_info(lv_aplicacion, sysdate, user, 'el participante ' || ln_codigoParticipante || 'fue asignado con exito al proyecto '|| ln_codigoProyecto, 'modulo_gpp', null, NULL, lv_msg_error ); end if; if lb_guardar = false then lv_msg_error := lv_aplicacion|| ' Problemas al asignar el participante en clck_guardar_datos. function f_asignar_partic_proyecto: '|| sqlerrm; raise le_mi_error; end if; EXCEPTION
198
WHEN OTHERS THEN lv_msg_error := SQLERRM; RAISE le_mi_error; END; */ -- llamada a pck para que inserte en gpp_caracteristicas_proyecto BEGIN gppk_obj_caracteristicas.inserta_caracteristicas(pv_codigo_caract => ln_codigoParticipante ,pv_codigo_proy => ln_codigoProyecto ,pv_descripcion => 'RECURSO ASIGNADO' ,pv_msg_error =>lv_msg_error ); if lv_msg_error is not null then raise le_mi_error ; end if; EXCEPTION WHEN OTHERS THEN pv_msg_error := SQLERRM; END; cadena_resultante := cadena_resultante||'|'||lv_valor; ln_contador := 0; end if; lv_campo := ''; end if; end loop; dbms_output.put_line(cadena_resultante); cadena_resultante := substr(cadena_resultante,2); -- muestra solo la cadena que se desea dbms_output.put_line(cadena_resultante); if ln_totalRecursos = pn_cant_recursos then lv_msg_error := 'Participantes Asignados Satisfactoriamente'; dbms_output.put_line(lv_msg_error); --====== Se actualiza la cantidad de recursos que participarán en el proyecto==========-- gppk_trx_recurso_humano.gpp_actualiza_recursos( ln_codigoProyecto,ln_totalRecursos, lv_msg_error); if lv_msg_error is not null then raise le_mi_error; end if; else lv_msg_error := 'Sólo se asignaron '||ln_totalRecursos ||' participantes'; dbms_output.put_line(lv_msg_error); --====== Se actualiza la cantidad de recursos que participarán en el proyecto==========-- gppk_trx_recurso_humano.gpp_actualiza_recursos( ln_codigoProyecto, pn_cant_recursos, lv_msg_error); if lv_msg_error is not null then raise le_mi_error; end if; end if; exception when le_mi_error then pv_msg_error := lv_msg_error; GENK_BITACORIZACION.P_BITACORIZA_ERROR(lv_aplicacion, sysdate, user, lv_msg_error, null, null, null, pv_msg_error); when others then pv_msg_error := lv_aplicacion|| 'GPP_ASIGNA_RECURSOS - No se encontraron datos : '||
199
sqlerrm; GENK_BITACORIZACION.P_BITACORIZA_ERROR(lv_aplicacion, sysdate, user, pv_msg_error, null, null, null, pv_msg_error); end gpp_asigna_recursos;
Revisa si al
momento de
ingresa no existe
datos en null
Obtiene el perfil
de las personas
que necesitan
para el proyecto
Desea guardar datos en
la tabla
clc_participante_proyect
o
Si
Grabar datos en la
tabla
clc_participante_pr
oyecto
Grabar datos en
la tabla
gpp_caracteristica
s_proyecto
Para proceder con la asignación, los recursos que se seleccionan
serán aquellos que poseen el conocimiento requerido para llevar a
cabo el proyecto.
200
Una vez seleccionados los participantes del proyecto se
procederá con la definición de los participantes lo cual se
almacenará en GPP_CARATERISTICAS_PROYECTOS el código
de los participantes asignados al proyecto los cuales tendrán
relación con el campo partic_proyecto de la tabla
GEN_PROYECTOS.
Informe de Análisis
Nombre: Recursos Humanos
Caso: Definición de los participantes de un proyecto
Evaluación: Evaluando la lógica de negocio que es aplicada en la definición de los participantes de un proyecto es muy acertada.
Análisis: No existe ninguna irregularidad al momento de la definición de los participantes que se necesite ser notificada.
5.4 Pruebas de Caja Blanca
5.4.1 Asignación de Recursos Informáticos.
La asignación de los recursos informáticos a un proyecto se lo
realiza de la siguiente manera:
201
Verifica si hay disponibilidad en la empresa, para poder cambiar el
estado a asignado, en el caso de no existir disponibilidad en la
empresa lo que se realiza es genera una interfaz por dónde la
cual se solicite la compra de un equipo.
Asignación de
Recursos Informàticos
Salida
SalidaSolicitud de recurso
Actualizar en
MGI_DISPONIBLE
código DEL
PROYECTO.
El modulo de recursos informáticos se recibe el código del
proyecto y la fecha que se le asigne a la transacción, luego
dependiendo de la salida verifica si hay recursos para insertarlos
en MGI_ASIGNACION, de no existir recursos para asignar se
emitirá una solicitud de recurso.
Informe de Análisis
Nombre: Recursos Informáticos
Caso: Participante Proyecto
Evaluación: Evaluando la lógica de negocio que es aplicada en el modelo de asignación de recursos informáticos; solos existen dos posibles salidas.
Análisis: No existe ninguna irregularidad al momento de la definición de los recursos que se necesite ser notificada.
202
CAPÍTULO 6
6 RECOMENDACIONES Y CONCLUSIONES
6.1 RECOMENDACIONES
Al momento de hacer uso del Gestor de Pre – Proyectos es necesario
que se realice una breve revisión del manual de diseño para que la
navegación por las diferentes páginas les sea más fácil y entendible, es
decir, realizar un preámbulo antes de comenzar a trabajar en el Módulo
que se presenta.
Las diferentes opciones que provee el módulo permitirán al usuario
realizar las diversas tareas pertinentes según le haya sido asignado su
rol de una manera sencilla y sin la necesidad de recurrir a los
documentos impresos, puesto que estos se encuentran digitalizados.
Las opciones e interfaces que posee el módulo son una visión global y
básica del gran mundo de la programación usando la tecnología Oracle
con Java, de tal manera que a posteriori puedan ser ampliados por
Ingenieros en Sistemas de acuerdo a las necesidades que se presenten
a lo largo de la implementación de la Aplicación.
203
Se recomienda a las generaciones futuras que al momento de escoger el
tópico de graduación autoevalúen sus conocimientos, para que de esta
manera puedan examinar sus deficiencias y/o carencias a fin de
afianzarlos y poder aportar un valor agregado al proyecto que
emprendan.
También se debe tomar en consideración que no sólo el aplicativo Web
es necesario para emprender su proyecto sino también el acceso a la
Base de Datos, en nuestro caso Oracle 9I, mediante la herramienta
PL/SQL Developer, la interacción de ambas herramientas hicieron
posible que el proyecto esté actualmente en sus manos.
6.2 CONCLUSIONES
Mediante la automatización de Sistemas se llevan a cabo tareas de
manera simplificada y sencilla, sin la necesidad de recurrir a procesos
complejos. El proyecto en cuestión provee interfaces para que el usuario
realice las diferentes tareas concernientes a su cargo.
Cabe destacar que la integración del proyecto en cuestión nos preparó y
capacitó para tener la facilidad de comprensión ante situaciones
204
adversas, complejidad de procesos, análisis de factibilidad de los
proyectos, establecer comunicaciones interpersonales y tecnológicas, la
compatibilidad entre versiones existentes de los aplicativos
implementados y todos aquellos factores que intervienen en un mundo
competitivo y de avanzada tecnología. Cabe mencionar también que se
tomó en consideración la capacidad de Gestionar Proyectos, esto es, la
administración de proyectos en su totalidad, tales como costos en
infraestructura, costos en tiempos para llevar a cabo el desarrollo del
proyecto, cantidad de recursos humanos necesarios, etc.
El Curso de Graduación Oracle y Java ha aportado un valor potencial
para nuestro crecimiento profesional y académico, logrando que los
percances y dificultades presentadas a lo largo del curso hayan sido
resueltos y sobrepuestos gracias a la persistencia e ímpetu que poseen
los Ingenieros en Sistemas.
El Sistema Gestor de Pre-Proyectos fue desarrollado con la finalidad de
cubrir las expectativas y necesidades del Cliente, las cuales fueron
expuestas en su momento; poniendo a manifiesto que las solicitudes o
requerimientos del Cliente pueden divergir por lo que sería necesario
contemplar la Gestión de Proyectos (análisis, estudio de factibilidad,
diseño, presupuestos, etc.) ante un nuevo requerimiento, para que la
205
implementación de una versión posterior a este Proyecto se culmine con
éxito.
Por lo que podemos concluir que el Proyecto se llevó a cabo con éxito
cubriendo los puntos del alcance previamente analizados y recordar
que: "No es cuánto hagamos, sino cuánto amor ponemos en lo que
hacemos. No es cuánto damos, sino cuánto amor ponemos en lo que
damos."
206
ANEXOS
ANEXO 1
Modelo Entidad Relación
GPP_ACTIVIDADES
PK CODIGO_ACTIVIDAD INTEGER
ACTIVIDAD_PROYECTO NUMERIC(4;0)FK1 CODIGO_PROYECTO INTEGER ACTIVIDAD_HITO VARCHAR(1) PORCENTAJE_CUMPLIMIENTO INTEGER DESCRIPCION_ACTIVIDAD VARCHAR(100) ACTIVIDAD_PREDECESORA NUMERIC(3;0) FECHA_INICIAL_REAL DATETIME FECHA_FINAL_REAL DATETIME TIEMPO_REAL NUMERIC(3;0) FECHA_INICIAL_ESTIMADA DATETIME FECHA_FINAL_ESTIMADA DATETIME TIEMPO_ESTIMADO NUMERIC(3;0) OBSERVACION VARCHAR(100) ASIGNACION_ACTIVIDAD VARCHAR(4) PARTIC_ACTIVIDAD VARCHAR(100)FK2 CODIGO_ESTADO VARCHAR(3) PESO_AVANCE_PORCENTUAL_EST NUMERIC(4;0) PESO_AVANCE_PORCENTUAL_REA NUMERIC(4;0)
GPP_PRIVILEGIO
PK CODIGO_PRIVILEGIO VARCHAR(2)
DESCRIPCION VARCHAR(100) VALOR_PRIVILEGIO NUMERIC(1,0)
MÓDULO DE GESTIÓN DEL PRE-PROYECTOGRUPO Nº 3
GPP_CARACTERISTICAS_PROYECTO
PK CODIGO_CARACTERISTICA_PROYECTO INTEGER
FK1 CODIGO_PROYECTO INTEGER DESCRIPCION_RECURSO VARCHAR(100) CONOCIMIENTO_1 VARCHAR(50) CONOCIMIENTO_2 VARCHAR(50) CONOCIMIENTO_3 VARCHAR(50) CONOCIMIENTO_4 VARCHAR(50)
GPP_TIPO_PROYECTO
PK CODIGO_TIPO_PROYECTO INTEGER
FK1 CODIGO_ESTADO VARCHAR(3) DESCRIPCION VARCHAR(100)
MGI_ASIGNACION
PK CODIGO_ASIGNACION INTEGER
FK1 CODIGO_PROYECTO INTEGER CODIGO_EQUIPO INTEGER CODIGO_SOFTWARE INTEGERFK2 CODIGO_ESTADO VARCHAR(3) FECHA_ASIGNACION DATETIME
MGI_EQUIPOS
PK CODIGO_EQUIPO INTEGER
DESCRIPCION VARCHAR(100)FK1 CODIGO_ESTADO VARCHAR(3) FECHA_INGRESO DATETIME OBSERVACION VARCHAR(100)FK2 CODIGO_SUB_TIPO_SERVICIO VARCHAR(10)
MGI_SOFTWARE
PK CODIGO_SOFTWARE INTEGER
DESCRIPCION VARCHAR(100) FECHA_INGRESO DATETIME CODIGO_ESTADO VARCHAR(3)FK1 CODIGO_SUB_TIPO_SERVICIO VARCHAR(10)
GERENTE ATIENDE
REQUERIMIENTO
GERENTE ASIGNA LÍDER SIS Y
CONSULTA LÍDER PROYECTO
ENVÍO Y REVISIÓN DE DDF POR
LÍDER SIS
LÍDER SIS ELLABORA PLAN
TÉCNICO Y CRONOGRAMA
DEFINIR FASES DENTRO DEL
CRONOGRAMA
DEFINIR ACTIVIDADES DENTRO DEL
CRONOGRAMA
ASIGNAR TIEMPO A LAS FASES Y ACTIVIDADES
CRONOGRAMA PRE-FINALIZADO
DISPONIBILIDADRECURSOS
REQUERIMIENTO
ATENDIDO
DDF
REVISADO
IDENTIFICARLAS FASES
ACTIVIDADESDEFINIDAS
TIEMPODEFINIDO
PLAN TÉCNICO
LÍDERES
SELECCIONADOS
O & M
ENVÍA REQUERIMIENTO
A SISTEMAS
VERIFICAR PRESUPUESTO
PRESUPUESTO
APROBADO
REVISIÓN CRONOGRAMA PARA PRESUPUESTO
PRESUPUESTO
NO APROBADO
CAMBIO ESTADO PROYECTO
ASIGNAR RECURSO HUMANO /
INFORMATICO
FASES
DEFINIDAS
GERENTE REVISA PLAN
TÉCNICO
PLAN TECNICO
GERENTE
LIDER RECIBE PLAN TECNICO
ENVIO PLAN TECNICO
PLAN TECNICO APROBADO
P. TEC. NO APROBADO
SELECCIONA RECURSO
SI
ASIGNACIÓN RECURSO HUMANO /
INFORMATICO
NO
SOLICITUD RECURSO HUMANO E
INFORMÁTICO
RECURSOSASIGNADOS
ELABORO CRONOGRAMA
FINAL EN BASE AL ESTIMADO
SOLICITUD
APROBADA / CONTRATO
VENCE
FECHA PLAZO
CAMBIO ESTADO PROYECTO
ANEXO 2
Diagrama de Flujo de Datos
BIBLIOGRAFÍA
www.programacion.net Sección Java
www.elprisma.com
www.ingenierosoftware.com/analisisydiseno/uml.php
www.clikear.com/manuales/uml/index.asp
es.tldp.org/Tutoriales/doc-modelado-sistemas-UML/multiple-
html/index.html
The Object Management Group (OMG) http://www.omg.org
IBM Racional Software http://www.rational.com
Brigde Point UML Suite http://www.projtech.com
10
UNIVERSIDAD DE GUAYAQUIL
Facultad de Ciencias Matemáticas y Físicas
Carrera de Ingeniería en Sistemas Computacionales
“Gestión de Proyecto Informático
Módulo de Gestión de Pre-Proyecto”
4TO. CURSO DE GRADUACION
Previo a la Obtención del Título de:
INGENIERO EN SISTEMAS COMPUTACIONALES
Autores:
Mendoza Burgos Evelyn Alexandra
Recillo Reinado María De Los Ángeles
Villavicencio López Johnny Fernando
GUAYAQUIL-ECUADOR
2007
10
AGRADECIMIENTO
A nuestros padres, quienes con su amor,
paciencia y desdén siempre nos animaron a
escoger una carrera de la cual nos podamos sentir
orgullosos.
Al personal docente, que nos hicieron partícipes
de sus conocimientos y experiencias adquiridas a
lo largo de su carrera profesional; a Dios, quien
siempre puso en nuestro corazón, el amor, el
coraje y la voluntad para seguir adelante y
permitirnos ser profesionales de una carrera digna
de recomendar a nuestros hijos.
Al amor, porque siempre estuvo presente en
nuestros corazones y es el motor para lograr
grandes propósitos.
DEDICATORIA
La tesis va dirigida a Dios, por darnos la fuerza y
la sabiduría para seguir adelante hasta conseguir
nuestros propósitos y anhelos; A nuestros padres
quienes estuvieron motivándonos a lo largo de
nuestra preparación profesional hasta lograr
vernos convertidos en Ingenieros; Al amor, que
siempre está presente en todas las actividades
que deseemos emprender.
TRIBUNAL DE GRADUACIÓN
Presidente Tribunal 1er. Vocal
2do. Vocal Secretario
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)
Mendoza Burgos Evelyn Alexandra
Recillo Reinado María De Los Ángeles
Villavicencio López Johnny Fernando
RESUMEN
Actualmente las Organizaciones han optimizado y mejorado la forma de
llevar a cabo sus actividades habituales mediante la implementación de la
tecnología.
Sin embargo, debido a la necesidad de mejorar y atender eficientemente los
Requerimientos/Necesidades de mejoras en los mecanismos de trabajo de
las áreas de la Empresa, se desarrolló un “Módulo de Gestión de Pre-
Proyecto” con la finalidad de optimizar el tiempo de recepción y análisis de lo
requerimientos solicitados por el área cliente, áreas de la Empresa, y la
respectiva planificación para llevar a cabo el proyecto que se requiere para
dicha mejora.
Esta aplicación fue diseñada usando la arquitectura de Aplicaciones Cliente /
Servidor, implementado la tecnología Oracle 9i como servidor de la Base de
Datos y MyEclipse para Java como lenguaje de programación de la
aplicación.
El acceso al módulo será evaluado mediante los roles, privilegios y permisos
que tenga configurado el usuario del mismo, proporcionándole así un
username, password y string de conexión a la Base de Datos.
SUMMARY
Nowadays, Organizations have optimized and improved their way to perform
their usual activities through the use of technology.
However, given the fact that is necessary to fulfill the needs of improval in the
different areas of the company, a “Pre Project Module of Management” was
developed with the objective to optimize the time of reception an analysis of
the requirements of the Client Areas, Enterprise areas, and the planning
needed to materialize the project, necessary for the improvementents.
This technique was designed using the architectures related to Client/Server
Appliccations, implementing Oracle 9i Technology, as a Data Base Server
and My Eclipse for Java as a program code for the application.
The access to the module will be evaluated by means of the roles, privileges
and permissions that the user of the same one has formed, providing to him
this way a username, password and string of connection to the Database.
INDICE GENERAL
AGRADECIMIENTO II
DEDICATORIA III
TRIBUNAL DE GRADUACIÓN IV
DECLARACIÓN EXPRESA V
RESUMEN VI
INDICE GENERAL VIII
TABLA DE CONTENIDOS
MANUAL TECNICO ...................................................................................... 10
1 INSTALACIÓN DE ORACLE 9I ......................................................... 10
2 INSTALACIÓN DEL ENTORNO DE UN DESARROLLO INTEGRADO (IDE). 16
3 INSTALACIÓN DE JAVA. .................................................................. 17
Descarga del software ........................................................................... 17
Instalación del jdk .................................................................................. 17
4 Configuración del jdk .......................................................................... 18
5 INSTALACIÓN DE TOMCAT 5. ......................................................... 19
6 DIAGRAMA ENTIDAD RELACION .................................................... 24
7 IMPLEMENTACIÓN DE LA HERRAMIENTA PL/SQL ....................... 25
8 CREACION DE PAQUETES .............................................................. 29
GPPK_OBJ_PROYECTOS .......................................................................... 29
GPPK_OBJ_ESTADO_PROYECTO ............................................................ 30
GPPK_OBJ_CARACT_PROYECTO ............................................................ 31
GPPK_OBJ_ACTIVIDADES ......................................................................... 32
GPPK_TRX_RECURSO_HUMANO ............................................................. 33
GPPK_TRX_CONFIGURACION .................................................................. 34
GPPK_TRX_ASIGNACION .......................................................................... 35
GPPK_TRX_ACTIVIDADES ......................................................................... 36
9 CODIFICACION DEL DESARROLLO DEL PROYECTO ................... 37
IMPLEMENTACION DE PAQUETERA EN PL/SQL .............................. 37
IMPLEMENTACION DE CODIGO EN JAVA ......................................... 67
MANUAL DE USUARIO ................................................................................ 93
1 MANUAL PARA EL GERENTE DE SISTEMAS ................................. 93
1.1. Asignación Líder de Sistemas – Líder SIS ........................................ 93
1.2. Consulta del Líder de Proyectos ........................................................ 94
1.3. Configuración de Cantidad Máxima Proyectos .................................. 95
1.4. Estados del Proyecto ......................................................................... 96
1.5. Plan Técnico del Proyecto .................................................................. 97
1.6. Reportes ............................................................................................. 99
1.6.1. Reporte de Estados del Proyecto ....................................................... 99
1.6.2. Reporte de Líderes SIS ................................................................... 100
1.6.3. Reporte de Actividades del Proyecto ............................................... 101
2 MANUAL PARA EL LIDER SIS ........................................................ 102
2.1. Definiciones del Proyecto ................................................................. 102
2.2. Cronograma ..................................................................................... 103
2.3. Asignación de Recurso Humano ...................................................... 106
2.4. Definición de Recursos Informáticos ................................................ 109
2.5. Asignación de Recursos Informáticos .............................................. 110
2.6. Definición de Recursos Humanos Solicitados .................................. 112
2.7. Reportes ........................................................................................... 113
2.7.1. Reporte de Estados del Proyecto ..................................................... 113
2.7.2. Reporte de Líderes SIS ................................................................... 113
2.7.3. Reporte de Actividades del Proyecto ............................................... 114
10
MANUAL TECNICO
Antes de proceder a la introducción del Manual Técnico, se debe considerar la
instalación previa al desarrollo del proyecto.
Para lograr dicho objetivo se necesitó de la instalación de:
Instalación de Oracle 9i
Instalación del Entorno de un Desarrollo Integrado (IDE).
Instalación de Java.
Instalación de Tomcat 5.
1 INSTALACIÓN DE ORACLE 9I
Al instalar el programa, se solicitará la ruta en la cual se instalarán los
archivos de configuración del instalador.
11
A continuación, después de presionar el botón Siguiente
seleccionaremos el tipo de instalación que deseemos:
En nuestro caso, puesto que crearemos la base de datos en el
servidor donde estamos realizando la instalación seleccionaremos
12
Oracle9i Database 9.2.0.1.0. Luego procedemos a seleccionar el
tipo de instalación deseada.
Seleccionamos la opción Personalizada para proceder con la
instalación, en este caso aparecería una ventana como esta:
13
Luego seleccionaremos la siguiente opción Uso General .
El siguiente paso es seleccionar el puerto el cual es 2030.
14
Además se debe especificar el nombre de la base de datos.
Nota: el SID es el identificador interno que utilizará Oracle para
referenciar a la base de datos.
15
Se debe seleccionar la ubicación de los archivos de la base de
datos que la instalación creará.
Luego se visualizará el resumen de los productos a instalar.
Luego se insertan los siguientes Cd’s de Instalación.
La siguiente ventana indica que la instalación ha finalizado:
16
2 INSTALACIÓN DEL ENTORNO DE UN DESARROLLO
INTEGRADO (IDE).
Para proceder con la instalación del Entorno IDE se debe descargar
la aplicación de la siguiente ruta: http://www.eclipse.org/ en forma de
archivo ZIP y solo tenemos que descomprimirlo en la carpeta donde
desee tenerlo instalado. Para ejecutarlo solo hay que arrancar el
fichero Eclipse.exe Una vez arrancado lo único que nos pedirá es
que le demos la ruta por defecto donde se desee que el eclipse nos
vaya guardando los proyectos que creemos:
17
Después de esto nos aparecerá la ventana principal de Eclipse:
3 INSTALACIÓN DE JAVA.
Descarga del software
Primero es necesario descargar los programas, de sus sitios web
de origen:
1. Abre la página de J2SE 1.4.2.
Instalación del jdk
1.- Se deberá dar clic en el programa de instalación del jdk:
"j2sdk-1_4_2_06-windows-i586-p.exe".
2.- Luego una vez que se hayan aceptado los acuerdos de
lincencia, dar clic en Next, luego Install.
18
4 Configuración del jdk
Para configurar el Jdk se deberá abrir la consola de Windows pero
también lo podemos ver en "Menú Inicio" > Programas >
Accesorios. O desde el "Menú Inicio" >Ejecutar y escribir "cmd" o
“command”.
En consola de Windows se deberá escribir java, si no lo tienes
configurado se debe:
1. Pulsamos con el botón derecho del Mouse sobre "Mi PC" y
seleccionamos la opción "Propiedades".
2. Luego seleccionamos la pestaña "Opciones avanzadas" y
pulsamos en el botón inferior "Variables de entorno".
3. Sobre la variable Path dar clic y debemos pulsar el botón
"Modificar”.
4. En el cuadro de valor de variable del sistema se añade al
final => c:\j2sdk1.4.2_06\bin y luego Aceptar los cambios
19
5 INSTALACIÓN DE TOMCAT 5.
Para proceder con la instalación del Apache Tomcat 5.5 debemos
descargar => Tomcat 5.5 para Windows
Luego de esto procedemos a crear en el Directorio C: la carpeta Tomcat.
( C:\Tomcat ), una vez creada la carpeta se debe descomprimir los
archivos en dicha carpeta.
Una vez descomprimido el archivo, procedemos a la configuración del
entorno desarrollo Eclipse, damos clic en la opción Window =>
Preferentes
20
Debemos dar clic en el árbol con la Opción Server, dentro del cual
se escoge la opción > Installed Runtimes y dar click en el botón
Add.
21
Procedemos a elegir la carpeta con el nombre de Apache >
opción Apache Tomcat v5.5 y dar clic en botón Next
Luego debemos elegir donde está el Tomcat 5.5, para lo cual
elegiremos la opción Browse y elegiremos la ruta donde se
encuentra.
22
Una vez que eligió donde esta instalado Tomcat 5.5 deberá hacer
clic en el botón aceptar y después en el botón Finish y después
clic en el botón Ok
23
Al final obtendrá un Server para poder realizar el deploy de sus
proyectos en eclipse en ambiente de desarrollo
24
6 DIAGRAMA ENTIDAD RELACION
El presente Diagrama muestra las estructuras que serán
necesarias para llevar a cabo el desarrollo del módulo.
Cabe resaltar que el módulo interactúa con otros componentes
adicionales que son parte del proyecto como tal.
Modelo Entidad Relación
25
7 IMPLEMENTACIÓN DE LA HERRAMIENTA PL/SQL
Las estructuras creadas para el desarrollo del presente proyectos
son:
Gpp_actividades
Gpp_caracteristicas_proyecto
Gpp_privilegio
Gpp_tipo_proyecto
Se muestra la estructura GPP_ACTIVIDADES y sus respectivos
campos.
TABLE GPP_ACTIVIDADES
26
La finalidad de la creación de esta estructura es registrar todas las
actividades que se llevarán a cabo en un proyecto.
A continuación se describirán cada uno de los campos de la
estructura:
NOMBRE TIPO DATO
DESCRIPCION
CODIGO_ACTIVIDAD NUMBER Código de la actividad que pertenece a un proyecto
ACTIVIDAD_PROYECTO NUMBER(4) secuencial de la Actividad del proyecto
CODIGO_PROYECTO NUMBER Código del Proyecto
ACTIVIDAD_HITO VARCHAR2(1) Indica si dicha Actividad es un Hito => 'H' o una Actividad => 'A'
PORCENTAJE_CUMPLIMIENTO NUMBER Registra el porcentaje de cumplimiento de dicha tarea
DESCRIPCION_ACTIVIDAD VARCHAR2(100) Descripción de la actividad
ACTIVIDAD_PREDECESORA NUMBER(3) Indica si dicha tarea depende de otra
FECHA_INICIAL_REAL DATE Fecha de inicio de la actividad
FECHA_FINAL_REAL DATE Fecha Final de la actividad
TIEMPO_REAL NUMBER(3) Tiempo que se llevará a cabo la actividad
FECHA_INICIAL_ESTIMADA DATE Fecha de inicio de la actividad
FECHA_FINAL_ESTIMADA DATE Fecha Final de la actividad
TIEMPO_ESTIMADO NUMBER(3) Tiempo que se llevará a cabo la actividad
OBSERVACION VARCHAR2(100) Descripción General
ASIGNACION_ACTIVIDAD VARCHAR2(4) Indica el grupo que realizó el registro de la actividad
PARTIC_ACTIVIDAD VARCHAR2(100) Registra el participante de la actividad
CODIGO_ESTADO VARCHAR2(3) Indica el codigo de la actividad
PESO_AVANCE_PORCENTUAL_EST NUMBER(4) Indica el peso porcentual estimado
PESO_AVANCE_PORCENTUAL_REA NUMBER(4) Indica el peso porcentual real
27
Se muestra la estructura GPP_CARACTERISTICAS_PROYECTO y
sus respectivos campos.
TABLE GPP_CARACTERITICAS_PROYECTO
A continuación se describirán cada uno de los campos de la
estructura:
NOMBRE TIPO DATO DESCRIPCION CODIGO_CARACTERISTICA_PROYECTO
NUMBER
Código de la característica del proyecto
CODIGO_PROYECTO NUMBER
Describe el código del proyecto
DESCRIPCION_RECURSO
VARCHAR2(100)
Describe el recurso que se encuentra registrado en dicha estructura
CONOCIMIENTO_1
VARCHAR2(50)
Describe el área de conocimiento o información del recurso
CONOCIMIENTO_2
VARCHAR2(50)
Describe el área de conocimiento o información del recurso
CONOCIMIENTO_3
VARCHAR2(50)
Describe el área de conocimiento o información del recurso
CONOCIMIENTO_4
VARCHAR2(50)
Describe el área de conocimiento o información del recurso
CARACT_RECURSOS VARCHAR2(5)
Indica la característica del recurso
Se muestra la estructura GPP_PRIVILEGIO y sus respectivos
campos.
28
TABLE GPP_PRIVILEGIO
A continuación se describirán cada uno de los campos de la
estructura:
NOMBRE TIPO DATO DESCRIPCION CODIGO_PRIVILEGIO VARCHAR2(2) Código del privilegio que tiene el usuario
DESCRIPCION VARCHAR2(100) Decribe el privilegio
VALOR_PRIVILEGIO NUMBER(1) El valor del privilegio
Se muestra la estructura GPP_TIPO_PROYECTO y sus respectivos
campos.
TABLE GPP_TIPO_PROYECTO
A continuación se describirán cada uno de los campos de la
estructura:
NOMBRE TIPO DATO DESCRIPCION CODIGO_TIPO_PROYECTO NUMBER Código del Tipo de Proyecto
CODIGO_ESTADO VARCHAR2(3)
Estado del tipo de Proyecto, A=> activo
DESCRIPCION
VARCHAR2(100)
Describe el tipo de Proyecto que puede ser: Informático, Software, etc
29
8 CREACION DE PAQUETES
Los paquetes realizados y utilizados a lo largo del desarrollo
de nuestro módulo nos han ayudado a realizar diferentes
tareas sobre los campos y registros de la base de datos.
Existe una calificación:
1. TRX Transaccionales
2. OBJ Funcionales
Los TRX son aquellos en donde se realizan procesos de
barrido, comparaciones, transacciones sobre la base de
datos, mientras que los OBJ ejecutan los insert, delete,
truncate entre otros.
GPPK_OBJ_PROYECTOS
Se creó el siguiente paquete con la finalidad de actualizar
los campos peso y estado del proyecto.
A continuación se muestra una breve descripción de los
mismos.
PROCESO DESCRIPCION
procedure actp_proyectos Actualiza el campo estado del proyecto
procedure actpeso_proyectos Actualiza el peso del proyecto
30
GPPK_OBJ_ESTADO_PROYECTO
Se creó el siguiente paquete con la finalidad de actualizar
los campos peso y estado del proyecto.
A continuación se muestra una breve descripción de los
mismos.
PROCESO DESCRIPCION
procedure gpp_actualizar Actualiza el estado dependiendo del proyecto
procedure actp_proyectos
update gen_proyectos set codigo_estado = pv_codigo_estado where gen_proyectos.codigo_proyecto = pn_codigo_proyecto;
update gen_proyectos set codigo_estado = pv_codigo_estado where gen_proyectos.codigo_proyecto = pn_codigo_proyecto;
procedure actpeso_proyectos
update gen_proyectos set peso_proyecto = pn_peso_proyecto where gen_proyectos.codigo_proyecto = pn_codigo_proyecto;
31
GPPK_OBJ_CARACT_PROYECTO
Este paquete se creo con la finalidad de poseer bitacorizada
información adicional. A continuación se muestra una breve
descripción de los mismos.
PROCESO DESCRIPCION
procedure ingreso_caract_proyecto Inserta datos en la tabla
insert into gpp_caracteristicas_proyecto (codigo_caracteristica_proyecto, codigo_proyecto, descripcion_recurso, conocimiento_1, conocimiento_2, conocimiento_3 ) values (ln_seq, pn_codigo_proyecto, pv_descripcion, pv_conocimiento_1, pv_conocimiento_2, pv_conocimiento_3);
32
GPPK_OBJ_ACTIVIDADES
Este paquete tiene la finalidad de bitacorizar las diferentes
actividades que se realizan sobre un proyecto, junto con los
responsables de ejecutarla, además de las fechas inicio y fin,
junto con el tiempo en días de las mismas.
A continuación se muestra una breve descripción de los
mismos.
PROCESO DESCRIPCION
procedure insert_actividades Inserta datos a la tabla
procedure act_actividades Actualiza los registros dependiendo del código del proyecto
update gpp_actividades set fecha_inicial_real = pd_fecha_inicial, fecha_final_real = pd_fecha_final, tiempo_real = pn_tiempo, actividad_hito = pv_hito, fecha_inicial_estimada = nvl(pd_fecha_inicial,SYSDATE), fecha_final_estimada = nvl(pd_fecha_final, SYSDATE), tiempo_estimado = nvl(pn_tiempo,0), codigo_actividad = pn_codigo_actividad, descripcion_actividad = pv_descripcion, actividad_predecesora = pn_predecesora, observacion = pv_observacion, partic_actividad = pv_recurso where codigo_actividad = pn_codigo_actividad and codigo_proyecto = pn_codigo_proyecto;
33
GPPK_TRX_RECURSO_HUMANO
Para realizar la asignación de recurso humano se realizó un
paquete el cual valida la información, filtrándola de tal
manera que los datos bitacorizados en la base estén
consistentes para posibles reportes; por integridad.
A continuación se muestra una breve descripción de los
mismos.
PROCESO DESCRIPCION
procedure gpp_actualiza_recursos Actualiza el total de recursos humanos por proyecto
update gen_proyectos p set p.total_recurso_humano = pn_cantRecursos where p.codigo_proyecto = pn_codigoProyecto;
34
GPPK_TRX_CONFIGURACION
Antes de realizar la asignación del líder se debe almacena la
cantidad máxima de proyectos asignados a un líder junto con
su mayor peso; es por ello que se creo este paquete, el cual
inserta y actualiza dicha transacción.
Esta información deberá ser ingresada por el Gerente de
Proyectos.
A continuación se muestra una breve descripción de los
mismos.
PROCESO DESCRIPCION
procedure cnp_limite_proyectos Inserción directa a la tabla
INSERT INTO GEN_TIPOS_PARAMETROS
(ID_TIPO_PARAMETRO, DESCRIPCION) VALUES (NVL(ln_tipo_parametro,1),
'LIMITANTES PARA EL LIDER SIS'); COMMIT; INSERT INTO GEN_PARAMETROS
(ID_TIPO_PARAMETRO, ID_PARAMETRO, DESCRIPCION, VALOR, TIPO_DATO)
VALUES(NVL(ln_tipo_parametro,1), 'CANT_PROY', 'CANTIDAD MAXIMA DE PROYECTOS', pv_cantidad, 'NUMBER');
COMMIT; INSERT INTO GEN_PARAMETROS
(ID_TIPO_PARAMETRO, ID_PARAMETRO, DESCRIPCION, VALOR, TIPO_DATO)
VALUES(NVL(ln_tipo_parametro,1), 'PESO_PROY', 'PESO MAXIMO DE PROYECTOS', ln_peso, 'NUMBER');
COMMIT;
35
GPPK_TRX_ASIGNACION
Dentro de esta codificación se realiza la respectiva
asignación del Líder SIS y el Líder de Proyectos. El líder SIS
deberá ser evaluado antes de realizarse dicha asignación,
por ejemplo, ver el peso de los proyectos que él tiene hasta
el momento, entre otros.
Con respecto al Líder de Proyectos, este podrá ser
visualizado a través de un proceso.
A continuación se muestra una breve descripción de los
mismos.
PROCESO DESCRIPCION
procedure asig_lider_proy Presenta el nombre del Lider del Proyecto
procedure asig_lider_sis Actualización del Líder SIS en la tabla GEN_PROYECTOS
----------------------------------------------------- -- total de pesos de proyectos asignados a un lider ----------------------------------------------------- OPEN c_peso_proy (pn_codigo_lider); FETCH c_peso_proy INTO ln_peso_proy; CLOSE c_peso_proy; ----------------------------------------- -- OBTIENE LOS LIMITES PARA EL LIDER SIS ----------------------------------------- OPEN C_MAXIMO; FETCH C_MAXIMO INTO LN_CANT_MAX, LN_PESO_MAX; CLOSE C_MAXIMO; LN_CANT_MAX := nvl(LN_CANT_MAX, 5); LN_PESO_MAX := nvl(LN_PESO_MAX, 15); IF ln_cant_proy > LN_CANT_MAX THEN lv_error := 'No se pueden asignar más de ' || LN_CANT_MAX || ' proyectos al Líder seleccionado. ' || ln_cant_proy; RAISE le_error; END IF;
36
GPPK_TRX_ACTIVIDADES
Al momento de realizar el cronograma, se deberá ingresar
varias actividades con sus respectivos responsables, ya que
cada actividad será evaluada antes de ser insertada, también
se actualizarán los recursos asignados, de esta manera el
proyecto continuará el flujo requerido.
A continuación se muestra una breve descripción de los
mismos.
PROCESO DESCRIPCION
procedure CNP_TIEMPO_HITO Actualiza las fechas del cronograma por hitos.
procedure CNP_REC_ESTANDAR Actualización el recurso ingresado por el usuario
procedure CNP_ACTIVIDADES Inserta y valida las actividades
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VALIDO CARACTERES POR MEDIO DEL ASCII -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- LOOP LN_INDICE := LN_INDICE + 1; LV_CARACT := SUBSTR(LV_CADENA, LN_INDICE, 1); LN_ASCII := ASCII(LV_CARACT); EXIT WHEN LV_CARACT IS NULL; IF (LN_ASCII > 48 AND LN_ASCII < 53) OR LN_ASCII = 45 THEN LN_CARACTERES := LN_CARACTERES + 1; -- SUMO LA CANTIDAD DE RECURSOS ELSE LN_SIGNOS := LN_SIGNOS + 1; END IF; END LOOP; IF LN_SIGNOS > 0 THEN LV_ERROR := 'Debe ingresar los recursos que esten en el siguiente rango 1 - 4'; RAISE LE_ERROR; END IF;
37
9 CODIFICACION DEL DESARROLLO DEL PROYECTO
IMPLEMENTACION DE PAQUETERA EN PL/SQL
La parametrización más considerable a nivel de paquetería en
Oracle son:
Asignación Líder SIS,
Elaboración del Cronograma,
Asignación de Recursos Humanos,
Asignación de Recursos Informáticos.
Asignación de líder SIS:
Dentro de la codificación que nos permite realizar la asignación
del Líder SIS, se ha establecido el control de la cantidad de
proyectos asignados actualmente a un lider, al igual que el peso
que reflejan dichas asignaciones.
Tambien se realiza una verificación sobre la etapa en que se
encuentra ya que de estar en una crítica no se le deberá asignar
proyectos.
38
PROCEDURE asig_lider_sis (pn_codigo_lider IN clc_participante.codigo_participante%TYPE, pn_codigo_proy IN gen_proyectos.codigo_proyecto%TYPE, pv_user IN VARCHAR2, pv_error OUT VARCHAR2)IS -------------------------------------------------- -- CANTIDAD DE PROYECTOS POR LIDER -- ASUMIENDO QUE EN EL COMBO SE -- ESCOJE A UN LIDER (TIPO_PARTICIPANTE = LIDER) -------------------------------------------------- CURSOR c_cant_proy (pn_codigo_lider NUMBER) IS SELECT COUNT(*) FROM GEN_PROYECTOS PY WHERE PY.LIDER_SIS = pn_codigo_lider AND PY.CODIGO_ESTADO IN ('AO'); -- debe estar en el estado que lo deja Nathalie /* SELECT COUNT(*) FROM GEN_PROYECTOS PY, CLC_PARTICIPANTE_PROYECTO PP WHERE PP.CODIGO_PARTICIPANTE = PN_CODIGO_LIDER AND PP.ESTADO = 'A' AND PP.CODIGO_TIPO_PARTICIPANTE = 1 AND PP.CODIGO_PROYECTO = PY.CODIGO_PROYECTO AND PY.CODIGO_ESTADO IN ('EC', 'PA'); -- en curso o en desarrollo cuando yo lo apruebo*/ ----------------------- -- PESO DE PROYECTOS ----------------------- CURSOR c_peso_proy (pn_codigo_lider NUMBER) IS SELECT SUM(PY.PESO_PROYECTO) FROM GEN_PROYECTOS PY WHERE PY.LIDER_SIS = pn_codigo_lider AND PY.CODIGO_ESTADO IN ('AO'); -- debe estar en el estado que lo deja Nathalie /*SELECT SUM(py.PESO_PROYECTO) FROM GEN_PROYECTOS py, CLC_PARTICIPANTE_PROYECTO pp WHERE pp.CODIGO_PARTICIPANTE = pn_codigo_lider AND pp.ESTADO = 'A' AND pp.CODIGO_TIPO_PARTICIPANTE = 1 AND pp.CODIGO_PROYECTO = py.codigo_proyecto AND py.CODIGO_ESTADO IN('EC', 'PA'); -- en curso o en desarrollo*/ ------------------------------------ -- LOS PROYECTOS QUE POSEE UN LIDER ------------------------------------ CURSOR c_proyectos_lider (pn_codigo_lider NUMBER) IS SELECT DISTINCT PY.CODIGO_PROYECTO FROM GEN_PROYECTOS PY WHERE PY.LIDER_SIS = pn_codigo_lider AND PY.CODIGO_ESTADO IN ('AO'); /*SELECT DISTINCT py.CODIGO_PROYECTO FROM GEN_PROYECTOS py, CLC_PARTICIPANTE_PROYECTO pp WHERE pp.CODIGO_PARTICIPANTE = pn_codigo_lider AND pp.ESTADO = 'A' AND pp.CODIGO_PROYECTO = py.codigo_proyecto AND py.CODIGO_ESTADO IN('EC', 'PA');*/ -------------------------------------------------------- -- PARA OBTENER EL VALOR DE LA PRIORIDAD DE UN PROYECTO -------------------------------------------------------- CURSOR c_prioridad_proy (pn_codigo_proy NUMBER) IS SELECT PR.PRIORIDAD_INICIAL FROM GEN_PROYECTOS PY, GRE_PRIORIDAD PR WHERE PY.CODIGO_PROYECTO = PN_CODIGO_PROY
39
AND PR.CODIGO_PRIORIDAD = PY.CODIGO_PRIORIDAD AND PY.CODIGO_ESTADO = 'AO'; -------------------------- -- FASE DE LOS PROYECTOS -------------------------- CURSOR c_fase_proy (pn_codigo_proyecto NUMBER) IS SELECT PY.CODIGO_PROYECTO, PY.NOMBRE_PROYECTO, D.CODIGO_ACTIVIDAD, D.PORCENTAJE_CUMPLIMIENTO, A.DESCRIPCION_ACTIVIDAD, A.TIEMPO_REAL FROM GEN_PROYECTOS PY, GPP_ACTIVIDADES A, CEH_DET_ACT_RECURSO D WHERE PY.CODIGO_PROYECTO = PN_CODIGO_PROYECTO AND A.CODIGO_PROYECTO = PY.CODIGO_PROYECTO AND A.CODIGO_PROYECTO = D.CODIGO_PROYECTO AND A.CODIGO_ACTIVIDAD = D.CODIGO_ACTIVIDAD AND D.PORCENTAJE_CUMPLIMIENTO > 0 AND PY.CODIGO_ESTADO IN('EC', 'PA'); CURSOR C_ACT (PN_CODIGO_ACTIVIDAD NUMBER)IS SELECT DISTINCT 'X'--, A.PORCENTAJE_CUMPLIMIENTO FROM GPP_ACTIVIDADES A, CEH_DET_ACT_RECURSO D WHERE A.CODIGO_ACTIVIDAD = PN_CODIGO_ACTIVIDAD AND A.CODIGO_ACTIVIDAD = D.CODIGO_ACTIVIDAD AND A.DESCRIPCION_ACTIVIDAD LIKE '%PRUEBAS%' OR A.DESCRIPCION_ACTIVIDAD LIKE '%IMPLEMENTACION%' AND D.PORCENTAJE_CUMPLIMIENTO NOT IN (100) AND A.PORCENTAJE_CUMPLIMIENTO NOT IN (100); ---------------------------------------------- -- CURSOR QUE OBTIENE LA CANTIDAD Y EL PESO -- MAXIMO DE PROYECTOS PARA UN LIDER SIS ---------------------------------------------- CURSOR C_MAXIMO IS SELECT TO_NUMBER(P.VALOR) CANTIDAD, TO_NUMBER(PT.VALOR) PESO FROM GEN_PARAMETROS P, GEN_PARAMETROS PT WHERE P.ID_PARAMETRO = 'CANT_PROY' AND PT.ID_PARAMETRO = 'PESO_PROY'; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- CURSOR QUE OBTIENE EL TIPO PARTICIPANTE -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- CURSOR c_participante (pn_codigo_lider NUMBER) IS SELECT p.codigo_tipo_participante FROM clc_participante p WHERE p.codigo_participante = pn_codigo_lider; BAND NUMBER := 1; ln_cant_proy NUMBER := 0; ln_peso_proy NUMBER := 0; ln_prioridad NUMBER := 0; ln_peso_total NUMBER := 0; LN_CANT_MAX NUMBER := 0; LN_PESO_MAX NUMBER := 0; ln_tipo_participante NUMBER := 0; LB_GUARDADO BOOLEAN := TRUE; LB_ASIGNA_LIDER BOOLEAN := FALSE; LV_FASE VARCHAR2(2); lv_hito VARCHAR2(100); lv_error VARCHAR2(100); lv_aplicacion VARCHAR2(100):= 'GPPK_TRX_ASIGNACION.ASIG_LIDER_SIS';
40
le_error EXCEPTION; le_error_general EXCEPTION; BEGIN -- cantidad de proyectos por lideres OPEN c_cant_proy (pn_codigo_lider); FETCH c_cant_proy INTO ln_cant_proy; CLOSE c_cant_proy; IF ln_cant_proy = 0 THEN BAND := 0; -- NO TIENE PROYECTOS END IF; IF BAND = 1 THEN -- SI TIENE PROYECTOS -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- total de pesos de proyectos asignados a un lider -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- OPEN c_peso_proy (pn_codigo_lider); FETCH c_peso_proy INTO ln_peso_proy; CLOSE c_peso_proy; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- OBTIENE LOS LIMITES PARA EL LIDER SIS -- -- -- -- -- -- -- -- -- -- -- -- -- -- OPEN C_MAXIMO; FETCH C_MAXIMO INTO LN_CANT_MAX, LN_PESO_MAX; CLOSE C_MAXIMO; LN_CANT_MAX := nvl(LN_CANT_MAX, 5); LN_PESO_MAX := nvl(LN_PESO_MAX, 15); -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- el valor de 5 es por efectos de prueba -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF ln_cant_proy > LN_CANT_MAX THEN -- 5 proyectos como máximo lv_error := 'No se pueden asignar más de ' || LN_CANT_MAX || ' proyectos al Líder seleccionado. ' || ln_cant_proy; RAISE le_error; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- obtengo la prioridad del proyecto actual, -- la cual se convierte en peso del proyecto -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- OPEN c_prioridad_proy(pn_codigo_proy); FETCH c_prioridad_proy INTO ln_prioridad; CLOSE c_prioridad_proy; -- -- -- -- -- -- -- -- -- -- -- Codigo del participante -- -- -- -- -- -- -- -- -- -- OPEN c_participante (pn_codigo_lider); FETCH c_participante INTO ln_tipo_participante; CLOSE c_participante; -- -- -- -- -- -- -- -- -- -- -- calculo del peso total -- -- -- -- -- -- -- -- -- -- ln_peso_total := nvl(ln_prioridad, 0) + nvl(ln_peso_proy, 0); IF ln_peso_total > LN_PESO_MAX THEN -- 5 proy * 3 peso(alta) LV_ERROR := 'El Líder está sobrecargado, no se puede asignar. El peso máximo es ' || LN_PESO_MAX; RAISE le_error; END IF;
41
FOR x IN c_proyectos_lider (pn_codigo_lider) LOOP --BEGIN lv_hito := NULL; LV_FASE := NULL; FOR i IN c_fase_proy (x.CODIGO_PROYECTO) LOOP -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- solo almacena el ultimo hito porque se esta evaluando -- actividad por actividad, no varias actividades a la vez -- entonces solo habra un hito en curso -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- BEGIN LV_FASE := NULL; -- -- -- -- -- -- -- -- -- -- -- OPEN C_ACT (I.CODIGO_ACTIVIDAD); FETCH C_ACT INTO LV_FASE; --, LN_PORC; CLOSE C_ACT; -- -- -- -- -- -- -- -- -- -- -- IF LV_FASE IS NOT NULL THEN--((i.DESCRIPCION_ACTIVIDAD = fase_critica_1) OR (i.DESCRIPCION_ACTIVIDAD = fase_critica_2)) THEN LV_HITO := i.DESCRIPCION_ACTIVIDAD; END IF; IF LV_FASE IS NOT NULL AND (I.PORCENTAJE_CUMPLIMIENTO >= 85 AND I.PORCENTAJE_CUMPLIMIENTO <= 100) THEN lv_hito := 'T'; -- indica que ya termino la etapa critica LB_ASIGNA_LIDER := TRUE; END IF; IF I.PORCENTAJE_CUMPLIMIENTO < 85 THEN LB_ASIGNA_LIDER := FALSE; END IF; EXCEPTION WHEN OTHERS THEN -- BITACORIZAR EL ERROR GENK_BITACORIZACION.P_BITACORIZA_ERROR(lv_aplicacion, sysdate, user, lv_error, null, null, null, pv_error); if pv_error is not null then pv_error := lv_error || ' - ' || pv_error; else pv_error := lv_error; end if; END; END LOOP; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- insertar la fase de acuerdo a lo quemado -- en la declaracion, esto es momentaneo -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF NOT LB_ASIGNA_LIDER THEN lv_error := 'El líder se encuentra en una etapa crítica, imposible asignar'; RAISE le_error_general; END IF; -- LB_ASIGNA_LIDER := TRUE; END LOOP; ELSE
42
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- obtiene los datos e insetar -- insertar en la tabla de clc_participante proyecto -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- INSERT INTO CLC_PARTICIPANTE_PROYECTO (CODIGO_PARTICIPANTE, CODIGO_PROYECTO, CODIGO_PRIVILEGIO, CODIGO_TIPO_PARTICIPANTE, DESCRIPCION, FECHA_ASIGNACION, FECHA_ING, FECHA_MOD, CODIGO_USUARIO_ING, ESTADO_PARTICIPANTE, ESTADO) VALUES (PN_CODIGO_LIDER, PN_CODIGO_PROY, 'A', ln_tipo_participante, 'El líder será asignado al proyecto ' || PN_CODIGO_PROY, SYSDATE, SYSDATE, SYSDATE, pv_user, 'S', 'A'); UPDATE CLC_PARTICIPANTE PT SET PT.NO_PROY_ASIGNADOS = (PT.NO_PROY_ASIGNADOS + 1) WHERE PT.codigo_participante = PN_CODIGO_LIDER; UPDATE GEN_PROYECTOS D SET D.LIDER_SIS = PN_CODIGO_LIDER WHERE D.CODIGO_PROYECTO = PN_CODIGO_PROY; COMMIT; IF LB_GUARDADO THEN -- pv_error := 'BIEN'; GENK_BITACORIZACION.P_BITACORIZA_INFO(lv_aplicacion, SYSDATE, USER, 'EL LIDER ' || pn_codigo_lider || 'FUE ASIGNADO CON EXITO AL PROYECTO '|| pn_codigo_proy, 'MODULO_GPP', NULL, NULL, pv_error); END IF; END IF; IF LB_ASIGNA_LIDER THEN -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- obtiene los datos e insetar -- insertar en la tabla de clc_participante proyecto -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- INSERT INTO CLC_PARTICIPANTE_PROYECTO (CODIGO_PARTICIPANTE, CODIGO_PROYECTO, CODIGO_PRIVILEGIO, CODIGO_TIPO_PARTICIPANTE, DESCRIPCION, FECHA_ASIGNACION,
43
FECHA_ING, FECHA_MOD, CODIGO_USUARIO_ING, ESTADO_PARTICIPANTE, ESTADO) VALUES (PN_CODIGO_LIDER, PN_CODIGO_PROY, 'A', ln_tipo_participante, 'El líder serà asigando al proyecto ' || PN_CODIGO_PROY, SYSDATE, SYSDATE, SYSDATE, pv_user, 'S', 'A'); END IF; EXCEPTION WHEN le_error THEN pv_error := lv_error; -- BITACORIZAR EL ERROR GENK_BITACORIZACION.P_BITACORIZA_ERROR(lv_aplicacion, sysdate, user, lv_error, null, null, null, pv_error); WHEN le_error_general THEN pv_error := lv_error; -- BITACORIZAR EL ERROR GENK_BITACORIZACION.P_BITACORIZA_ERROR(lv_aplicacion, sysdate, user, lv_error, null, null, null, pv_error); WHEN OTHERS THEN pv_error := SQLERRM; -- BITACORIZAR EL ERROR GENK_BITACORIZACION.P_BITACORIZA_ERROR(lv_aplicacion, sysdate, user, lv_error, null, null, null, pv_error); END;
44
Elaboración del Cronograma:
Para la elaboracion del cronograma es necesario que el líder SIS
establezca las actividades a realizar por cada proyecto junto con
el recurso responsable de la misma, además del tiempo y sus
fechas iniciales y finales.
También deberá establecer si dicha actividad es un hito o no.
PROCEDURE CNP_TIEMPO_HITO(PN_CODIGO_PROYECTO IN GEN_PROYECTOS.CODIGO_PROYECTO%TYPE, PV_ERROR OUT VARCHAR2) AS CURSOR OBTIENE_HITOS (PN_CODIGO_PROYECTO NUMBER) IS SELECT A.CODIGO_ACTIVIDAD FROM GPP_ACTIVIDADES A WHERE A.CODIGO_PROYECTO = PN_CODIGO_PROYECTO AND A.ACTIVIDAD_HITO = 'H' AND A.CODIGO_ESTADO = 'A' ORDER BY A.CODIGO_ACTIVIDAD; CURSOR OBTIENE_CRONOGRAMA (PN_CODIGO_PROYECTO NUMBER, PN_CODIGO_ACT NUMBER) IS SELECT A.CODIGO_ACTIVIDAD, A.ACTIVIDAD_PROYECTO, A.ACTIVIDAD_HITO, A.TIEMPO_ESTIMADO, A.FECHA_FINAL_ESTIMADA FROM GPP_ACTIVIDADES A WHERE A.CODIGO_PROYECTO = PN_CODIGO_PROYECTO AND A.CODIGO_ACTIVIDAD > PN_CODIGO_ACT AND A.CODIGO_ESTADO ='A' ORDER BY A.CODIGO_ACTIVIDAD; LE_ERROR EXCEPTION; LN_TIEMPO NUMBER := 0; LN_VALOR NUMBER := 0; LV_ERROR VARCHAR2(100); LV_APLICACION VARCHAR2(100):= 'GPPK_TRX_ACTIVIDADES.CNP_TIEMPO_HITO'; LD_FECHA_FIN GPP_ACTIVIDADES.FECHA_FINAL_ESTIMADA%TYPE; BEGIN LV_ERROR := NULL; IF PN_CODIGO_PROYECTO IS NULL THEN LV_ERROR := 'El código del proyecto no debe ser nulo'; RAISE LE_ERROR; END IF; FOR I IN OBTIENE_HITOS(PN_CODIGO_PROYECTO) LOOP FOR J IN OBTIENE_CRONOGRAMA (PN_CODIGO_PROYECTO, I.CODIGO_ACTIVIDAD) LOOP IF J.ACTIVIDAD_HITO = 'A' THEN LN_VALOR := 1;
45
LD_FECHA_FIN := J.FECHA_FINAL_ESTIMADA; LN_TIEMPO := LN_TIEMPO + J.TIEMPO_ESTIMADO; END IF; EXIT WHEN J.ACTIVIDAD_HITO = 'H'; END LOOP; BEGIN IF LN_VALOR = 0 THEN UPDATE GPP_ACTIVIDADES SET TIEMPO_ESTIMADO = TIEMPO_ESTIMADO, FECHA_FINAL_ESTIMADA = FECHA_FINAL_ESTIMADA WHERE CODIGO_PROYECTO = PN_CODIGO_PROYECTO AND CODIGO_ACTIVIDAD = I.CODIGO_ACTIVIDAD; ELSE UPDATE GPP_ACTIVIDADES SET TIEMPO_ESTIMADO = LN_TIEMPO, FECHA_FINAL_ESTIMADA = LD_FECHA_FIN WHERE CODIGO_PROYECTO = PN_CODIGO_PROYECTO AND CODIGO_ACTIVIDAD = I.CODIGO_ACTIVIDAD; END IF; COMMIT; LN_TIEMPO := 0; EXCEPTION WHEN OTHERS THEN PV_ERROR := SQLERRM || ' - CNP_TIEMPO_HITO'; END; END LOOP; EXCEPTION WHEN LE_ERROR THEN pv_error := lv_error; -- BITACORIZAR EL ERROR GENK_BITACORIZACION.P_BITACORIZA_ERROR(lv_aplicacion, sysdate, user, lv_error, null, null, null, pv_error); WHEN OTHERS THEN pv_error := lv_error; -- BITACORIZAR EL ERROR GENK_BITACORIZACION.P_BITACORIZA_ERROR(lv_aplicacion, sysdate, user, lv_error, null, null, null, pv_error); END; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- PROCEDIMIENTO QUE REGULARIZA EL INGRESO DE -- LOS RECURSOS QUE CORRESPONDEN A LA ACTIVIDAD -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- PROCEDURE CNP_REC_ESTANDAR(PV_RECURSO IN VARCHAR2, PN_CODIGO_PROY IN NUMBER, PV_CADENA OUT VARCHAR2, PV_ERROR OUT VARCHAR2)IS
46
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- CURSOR QUE VERIFICA LA CANTIDAD DE -- RECURSOS ASIGNADOS A UN PROYECTO -- -- -- -- -- -- -- -- -- -- -- -- -- -- CURSOR C_CANT_RECURSOS (PN_CODIGO_PROY NUMBER)IS SELECT P.TOTAL_RECURSO_HUMANO FROM GEN_PROYECTOS P WHERE P.CODIGO_PROYECTO = PN_CODIGO_PROY; LE_ERROR EXCEPTION; LV_R1 VARCHAR2(3); LV_R2 VARCHAR2(3); LV_R3 VARCHAR2(3); LV_R4 VARCHAR2(3); LV_CARACT VARCHAR2(1); LV_CARACTER VARCHAR2(5); LV_CARACTER_1 VARCHAR2(20); LV_CARACTER_2 VARCHAR2(20); LV_CADENA_TOTAL VARCHAR2(15); LV_ERROR VARCHAR2(100); LV_CADENA VARCHAR2(100); LV_SUBST VARCHAR2(100); LN_LONGITUD NUMBER:=0; LN_EXTRAE NUMBER:=0; LN_R1 NUMBER:=0; LN_R2 NUMBER:=0; LN_R3 NUMBER:=0; LN_R4 NUMBER:=0; --LN_B NUMBER:=0; LN_A NUMBER:=0; LN_CONT NUMBER:=0; LN_INDICE NUMBER:=0; LN_ASCII NUMBER:=0; LN_CARACT NUMBER:=0; LN_SIGNOS NUMBER:=0; LN_CANT_RECURSOS NUMBER:=0; LN_CARACTERES NUMBER:=0; --BAND BOOLEAN:=FALSE; BEGIN LV_ERROR := NULL; LV_CADENA := REPLACE(PV_RECURSO, ' ', ''); LV_CARACTER_1 := SUBSTR(LV_CADENA, 1,1); LV_CARACTER_2 := SUBSTR(LV_CADENA, LENGTH(LV_CADENA),1); -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VALIDA QUE AL INICIO NO HAYA UNA RAYA -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF LV_CARACTER_1 = '-' THEN LV_CARACTER_1 := SUBSTR(LV_CADENA, 2,LENGTH(LV_CADENA)); LV_CADENA := LV_CARACTER_1; LN_CARACT := LN_CARACT + 1; -- SUMA LAS RAYITAS END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VALIDO CUAL CADENA USAR EN EL CASO DE QUE -- PRIMERO TENGA LA RAYA - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF LV_CARACTER_2 = '-'THEN LV_CARACTER_2 := SUBSTR(LV_CADENA, 1, LENGTH(LV_CADENA)-1); LV_CADENA := LV_CARACTER_2; LN_CARACT := LN_CARACT + 1;-- SUMA LAS RAYITAS
47
END IF; BEGIN LN_ASCII := TO_NUMBER(LV_CADENA); LN_LONGITUD := LENGTH(LV_CADENA); EXCEPTION WHEN OTHERS THEN LN_LONGITUD := 0; END; IF LN_CARACT BETWEEN 0 AND 2 THEN IF LN_LONGITUD > 1 THEN LV_ERROR := 'Debe ingresar los recursos que esten en el siguiente rango 1 - 4'; RAISE LE_ERROR; END IF; END IF; -- -- -- -- -- -- -- -- SETEO VARIABLES -- -- -- -- -- -- -- --LN_B := 0; LN_A := 1; LN_ASCII := 0; LN_EXTRAE := 0; LN_SIGNOS := 0; LN_CARACTERES := 0; LN_LONGITUD := LENGTH (LV_CADENA); -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VALIDO CARACTERES POR MEDIO DEL ASCII -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- LOOP LN_INDICE := LN_INDICE + 1; LV_CARACT := SUBSTR(LV_CADENA, LN_INDICE, 1); LN_ASCII := ASCII(LV_CARACT); EXIT WHEN LV_CARACT IS NULL; IF (LN_ASCII > 48 AND LN_ASCII < 53) OR LN_ASCII = 45 THEN LN_CARACTERES := LN_CARACTERES + 1; -- SUMO LA CANTIDAD DE RECURSOS ELSE LN_SIGNOS := LN_SIGNOS + 1; END IF; END LOOP; IF LN_SIGNOS > 0 THEN LV_ERROR := 'Debe ingresar los recursos que esten en el siguiente rango 1 - 4'; RAISE LE_ERROR; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- CICLO PARA SETEAR LOS RECURSOS R1-R2 ETC. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- LN_CARACTERES := 0; LOOP IF (LN_LONGITUD = LN_EXTRAE) THEN EXIT; ELSE LN_EXTRAE := INSTR (LV_CADENA, '-', 1 , LN_A); IF LN_EXTRAE = 0 THEN LV_SUBST := LV_CADENA; ELSE LV_SUBST := SUBSTR(LV_CADENA , 1, LN_EXTRAE - 1); LV_CADENA := SUBSTR(LV_CADENA , LN_EXTRAE + 1); END IF; END IF;
48
LV_CARACTER := SUBSTR (LV_SUBST, LENGTH(LV_SUBST),1); LN_CARACTERES := LN_CARACTERES + 1; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- RECURSOS SETEADOS PARA EL CRONOGRAMA -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF LV_SUBST IS NULL THEN LV_ERROR := 'RECURSO MAL INGRESADO'; RAISE LE_ERROR; END IF; IF LV_CARACTER = '1' THEN LV_R1 := 'R1'; LN_R1 := LN_R1 + 1; -- PARA QUE NO SE REPITA LN_CONT := LN_CONT + 1; END IF; IF LV_CARACTER = '2' THEN LV_R2 := 'R2'; LN_R2 := LN_R2 + 1; -- PARA QUE NO SE REPITA LN_CONT := LN_CONT + 1; END IF; IF LV_CARACTER = '3' THEN LV_R3 := 'R3'; LN_R3 := LN_R3 + 1; -- PARA QUE NO SE REPITA LN_CONT := LN_CONT + 1; END IF; IF LV_CARACTER = '4' THEN LV_R4 := 'R4'; LN_R4 := LN_R4 + 1; -- PARA QUE NO SE REPITA LN_CONT := LN_CONT + 1; END IF; IF (LV_CARACTER = '5' OR LV_CARACTER = '6' OR LV_CARACTER = '7' OR LV_CARACTER = '8' OR LV_CARACTER = '9' OR LV_CARACTER = '0') THEN LV_ERROR := 'No debe ingresar más de 4 recursos.'; RAISE LE_ERROR; END IF; EXIT WHEN LN_CONT = 4 OR LN_EXTRAE = 0; END LOOP; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VALIDO QUE NO SE INGRESE UN RECURSO 2 VECES -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF LN_R1 > 1 OR LN_R2 > 1 OR LN_R3 > 1 OR LN_R4 > 1 THEN LV_ERROR := 'No debe ingresar el mismo recurso dos veces'; RAISE LE_ERROR; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VALIDO QUE SOLO INGRESE 4 RECURSOS O LO QUE INDICA EN LA TABLA -- VALIDO QUE NO INGRESE CARACTERES ESPECIALES -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- OPEN C_CANT_RECURSOS(PN_CODIGO_PROY); FETCH C_CANT_RECURSOS INTO LN_CANT_RECURSOS; CLOSE C_CANT_RECURSOS; IF LN_CARACTERES > LN_CANT_RECURSOS THEN LV_ERROR := 'La cantidad de recursos es diferente a la especificada (' || LN_CANT_RECURSOS || ') - (1 - 4)'; RAISE LE_ERROR; END IF; LV_CADENA_TOTAL := LV_R1 || '-' || LV_R2 || '-' || LV_R3 || '-' || LV_R4; -- -- -- -- -- -- -- -- -- -- -- -- --
49
-- REEMPLAZO CARACTERES DUPLICADOS -- -- -- -- -- -- -- -- -- -- -- -- -- LV_CADENA_TOTAL := REPLACE(LV_CADENA_TOTAL, '---', '-'); LV_CADENA_TOTAL := REPLACE(LV_CADENA_TOTAL, '--', '-'); LV_CARACTER_1 := SUBSTR(LV_CADENA_TOTAL, 1, 1); LV_CARACTER_2 := SUBSTR(LV_CADENA_TOTAL, LENGTH(LV_CADENA_TOTAL), 1); -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ELIMINO EL PRIMER CARACTER DE LA CADENA -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF LV_CARACTER_1 = '-' THEN LV_CADENA_TOTAL := SUBSTR(LV_CADENA_TOTAL, 2, LENGTH(LV_CADENA_TOTAL)); END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ELIMINO EL ULTIMO CARACTER DE LA CADENA -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF LV_CARACTER_2 = '-' THEN LV_CADENA_TOTAL := SUBSTR(LV_CADENA_TOTAL, 1, LENGTH(LV_CADENA_TOTAL)-1); END IF; PV_CADENA := LV_CADENA_TOTAL; EXCEPTION WHEN le_error THEN PV_ERROR := LV_ERROR; END; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- PROGRAMA PRINCIPAL QUE REALIZA EL CRONOGRAMA -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- PROCEDURE CNP_ACTIVIDADES (PN_ACTIVIDAD_PROYECTO IN NUMBER, --GPP_ACTIVIDADES.ACTIVIDAD_PROYECTO%TYPE, -- ORDEN PV_DESCRIPCION_ACTIVIDAD IN VARCHAR2, --GPP_ACTIVIDADES.DESCRIPCION_ACTIVIDAD%TYPE, -- ACTIVIDAD PV_HITO IN VARCHAR2, --GPP_ACTIVIDADES.ACTIVIDAD_HITO%TYPE, -- HITO PN_ACTIVIDAD_PREDECESORA IN NUMBER DEFAULT 0, --GPP_ACTIVIDADES.DESCRIPCION_ACTIVIDAD%TYPE, -- PREDECESORA PV_FECHA_INICIAL IN VARCHAR2, --GPP_ACTIVIDADES.FECHA_INICIAL_REAL%TYPE, PV_FECHA_FINAL IN VARCHAR2,-----, --GPP_ACTIVIDADES.FECHA_FINAL_REAL%TYPE, PN_TIEMPO IN OUT NUMBER, --GPP_ACTIVIDADES.TIEMPO_REAL%TYPE, -- TIEMPO PV_RECURSO IN OUT VARCHAR2, --GPP_ACTIVIDADES.PARTIC_ACTIVIDAD%TYPE, -- RECURSO PV_OBSERVACION IN VARCHAR2, --GPP_ACTIVIDADES.OBSERVACION%TYPE, -- OBSERVACION PN_CODIGO_PROYECTO IN NUMBER, --GEN_PROYECTOS.CODIGO_PROYECTO%TYPE, PV_ERROR OUT VARCHAR2)IS -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- OBTIENE LA PRIMERA FECHA DE UN CRONOGRAMA -- EN CASO DE QUE EXISTE REGISTROS ANTERIORES -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- CURSOR C_FECHA_FIN(PN_CODIGO_PROYECTO NUMBER) IS SELECT MIN(A.FECHA_INICIAL_ESTIMADA) FROM GPP_ACTIVIDADES A WHERE A.CODIGO_PROYECTO = PN_CODIGO_PROYECTO; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VERIFICA LA ULTIMA ACTIVIDAD DEL CRONOGRAMA
50
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- CURSOR C_VERIF_ULTIMA_ACTIV (PN_CODIGO_PROYECTO NUMBER) IS SELECT COUNT(*) FROM GPP_ACTIVIDADES AC WHERE AC.CODIGO_ACTIVIDAD = (SELECT MAX(A.CODIGO_ACTIVIDAD) FROM GPP_ACTIVIDADES A WHERE A.CODIGO_PROYECTO = PN_CODIGO_PROYECTO) AND UPPER(AC.DESCRIPCION_ACTIVIDAD) LIKE '%FIN % PROY%'; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VERIFICA LA FECHA MINIMA Y MAXIMA DEL PROYECTO -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- CURSOR C_FECHAS_MIN_MAX(PN_CODIGO_PROYECTO NUMBER) IS SELECT MIN(A.FECHA_INICIAL_ESTIMADA), MAX(A.FECHA_FINAL_ESTIMADA) FROM GPP_ACTIVIDADES A WHERE A.CODIGO_PROYECTO = PN_CODIGO_PROYECTO; LE_ERROR EXCEPTION; LN_PREDECESORA NUMBER:=0; LN_CANT_RECURSOS NUMBER:=0; LN_ACTIVIDAD NUMBER:=0; LB_NOT_FOUND BOOLEAN; LB_BAND BOOLEAN; LV_ACT VARCHAR2(1); AUX_FI VARCHAR2(20); AUX_FF VARCHAR2(20); AUX_FIC VARCHAR2(20); LD_FECHA_INICIO DATE; LD_FECHA_FIN DATE; LD_SYSDATE DATE; LD_FECHA_INIC_CRONOG DATE; LD_FECHA_MIN DATE; LD_FECHA_MAX DATE; LV_RECURSOS VARCHAR2(20); LV_HITO VARCHAR2(1):= 'A'; LV_ERROR VARCHAR2(100); LV_APLICACION VARCHAR2(100):= 'GPPK_TRX_ACTIVIDADES.CNP_ACTIVIDADES'; BEGIN LV_ERROR := NULL; PN_TIEMPO := 0; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VALIDO QUE LAS VARIABLES NO SEAN NULAS -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- BEGIN SELECT F.ACTIVIDAD_PROYECTO INTO LV_ACT FROM GPP_ACTIVIDADES F WHERE F.ACTIVIDAD_PROYECTO = PN_ACTIVIDAD_PROYECTO AND F.CODIGO_PROYECTO = PN_CODIGO_PROYECTO; EXCEPTION WHEN OTHERS THEN NULL; --LV_ERROR := 'La actividad u orden que quiere ingresar ya existe en el Proyecto'; --RAISE LE_ERROR; END; IF LV_ACT = 'X' THEN LV_ERROR := 'La actividad u orden que quiere ingresar ya existe en el Proyecto'; RAISE LE_ERROR; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- INICIO EL PROCESO DE VALIDACION -- -- -- -- -- -- -- -- -- -- -- -- --
51
IF PN_ACTIVIDAD_PROYECTO IS NULL THEN lv_error := 'El orden de la actividad no debe ser nulo'; RAISE le_error; END IF; IF pn_codigo_proyecto IS NULL THEN lv_error := 'El código del proyecto no debe ser nulo'; RAISE le_error; END IF; IF PV_DESCRIPCION_ACTIVIDAD IS NULL THEN lv_error := 'La actividad no debe ser nula'; RAISE le_error; END IF; LV_HITO := UPPER(PV_HITO); IF (LV_HITO <> 'A' AND LV_HITO <> 'H') OR LV_HITO IS NULL THEN lv_error := 'El hito debe estar entre A o H'; RAISE le_error; END IF; IF PN_ACTIVIDAD_PREDECESORA IS NULL THEN ln_predecesora := 0; ELSE --HECHO POR JOHNNY PRUEBA PARA QUE NO INGRESE LOS NUMEROS INVALIDOS BEGIN SELECT F.ACTIVIDAD_PROYECTO INTO LN_ACTIVIDAD FROM GPP_ACTIVIDADES F WHERE F.ACTIVIDAD_PROYECTO = PN_ACTIVIDAD_PREDECESORA AND F.CODIGO_PROYECTO = PN_CODIGO_PROYECTO; EXCEPTION WHEN OTHERS THEN NULL; END; IF LN_ACTIVIDAD IS NULL OR LN_ACTIVIDAD = 0 THEN LV_ERROR := 'La actividad predecesora que quiere ingresar no existe en el Proyecto'; RAISE LE_ERROR; END IF; ln_predecesora := PN_ACTIVIDAD_PREDECESORA; END IF; IF lv_hito = 'A' THEN IF PV_FECHA_INICIAL IS NULL THEN LV_ERROR := 'Ingrese la fecha de inicio de la actividad'; RAISE LE_ERROR; END IF; IF PV_FECHA_FINAL IS NULL THEN LV_ERROR := 'Ingrese la fecha fin de la actividad'; RAISE LE_ERROR; END IF; ELSE IF PV_FECHA_INICIAL IS NULL THEN LV_ERROR := 'Ingrese la fecha inicio del hito'; RAISE LE_ERROR; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- SI PERMITE LA FECHA FINAL NULA PARA EL HITO -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --SELECT TO_DATE(PV_FECHA_INICIAL, 'DD/MM/YYYY') INTO LV_FI FROM DUAL; LD_FECHA_FIN := TO_DATE(PV_FECHA_INICIAL,'DD-MM-YYYY'); LB_BAND := TRUE; END IF; IF LB_BAND THEN LD_FECHA_INICIO := TO_DATE(PV_FECHA_INICIAL, 'DD-MM-YYYY');
52
ELSE LD_FECHA_INICIO := TO_DATE(PV_FECHA_INICIAL, 'DD-MM-YYYY'); LD_FECHA_FIN := TO_DATE(PV_FECHA_FINAL, 'DD-MM-YYYY'); END IF; LB_BAND := FALSE; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- CURSOR QUE VERIFICA LA PRIMERA FECHA DEL CRONOGRAMA -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- OPEN C_FECHA_FIN(PN_CODIGO_PROYECTO); FETCH C_FECHA_FIN INTO LD_FECHA_INIC_CRONOG; LB_NOT_FOUND := C_FECHA_FIN%NOTFOUND; CLOSE C_FECHA_FIN; AUX_FI := TO_CHAR(LD_FECHA_INICIO, 'MM-YYYY'); AUX_FF := TO_CHAR(LD_FECHA_FIN, 'MM-YYYY'); -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VALIDAR QUE LAS FECHAS SEAN MAYORES A LA PRIMERA FECHA -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF LB_NOT_FOUND THEN LD_SYSDATE := TO_CHAR(SYSDATE, 'MM-YYYY'); -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VALIDA QUE LAS FECHAS NO SEAN MENORES A LA PRIMERA FECHA INGRESADA -- EN CASO QUE NO HAYA VALIDA EL MES Y AÑO EN CURSO -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF (AUX_FI <= LD_SYSDATE) OR (AUX_FF <= LD_SYSDATE) THEN LV_ERROR := 'La fecha ingresada está fuera del rango inicial del cronograma'; RAISE LE_ERROR; END IF; ELSE AUX_FIC := TO_CHAR(LD_FECHA_INIC_CRONOG, 'MM-YYYY'); IF AUX_FIC IS NOT NULL THEN IF (AUX_FI < AUX_FIC) OR (AUX_FF < AUX_FIC) THEN LV_ERROR := 'La fecha ingresada está fuera del rango inicial del cronograma'; RAISE LE_ERROR; END IF; END IF; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- CALCULO EL TIEMPO ENTRE LAS FECHAS -- -- -- -- -- -- -- -- -- -- -- -- -- PN_TIEMPO := LD_FECHA_FIN - LD_FECHA_INICIO + 1; -- SUMAR EL DIA QUE SE QUEDA EN LA RESTA IF PN_TIEMPO < 0 THEN LV_ERROR := 'La fecha de inicio debe ser menor que la fecha final'; RAISE LE_ERROR; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VALIDAR LA CAJA DE TEXTO QUE INVOLUCRA A LOS RECURSOS -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF PV_RECURSO IS NULL THEN LV_ERROR := 'Ingrese el o los recursos responsables de la actividad'; RAISE LE_ERROR; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- INDICA LAS 4 VARIABLES ESTANDARES -- -- -- -- -- -- -- -- -- -- -- -- -- CNP_REC_ESTANDAR(PV_RECURSO, PN_CODIGO_PROYECTO,
53
LV_RECURSOS, LV_ERROR); IF LV_ERROR IS NOT NULL THEN RAISE LE_ERROR; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- INSERTA LAS ACTIVIDADES DEL CRONOGRAMA -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- GPPK_OBJ_ACTIVIDADES.INSERT_ACTIVIDADES(PN_ACTIVIDAD_PROYECTO, PN_CODIGO_PROYECTO, upper(PV_DESCRIPCION_ACTIVIDAD), upper(LV_HITO), LN_PREDECESORA, LD_FECHA_INICIO, --/*TO_DATE(LD_FECHA_INICIO, 'DD-MM-YYYY'),--*/PV_FECHA_INICIAL, LD_FECHA_FIN, --/*TO_DATE(LD_FECHA_FIN, 'DD-MM-YYYY'), --*/PV_FECHA_FINAL, upper(PV_OBSERVACION), LV_RECURSOS, PN_TIEMPO, LV_ERROR); IF LV_ERROR IS NOT NULL THEN RAISE LE_ERROR; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VERIFICA SI ES LA ULTIMA ACTIVIDAD -- PARA ACTUALIZAR LOS TIEMPOS -- -- -- -- -- -- -- -- -- -- -- -- -- -- OPEN C_VERIF_ULTIMA_ACTIV(PN_CODIGO_PROYECTO); FETCH C_VERIF_ULTIMA_ACTIV INTO LN_CANT_RECURSOS; CLOSE C_VERIF_ULTIMA_ACTIV; IF LN_CANT_RECURSOS > 0 THEN GPPK_TRX_ACTIVIDADES.CNP_TIEMPO_HITO(PN_CODIGO_PROYECTO, LV_ERROR); IF LV_ERROR IS NOT NULL THEN RAISE LE_ERROR; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- OBTENER FECHA MINIMA Y MAXIMA -- -- -- -- -- -- -- -- -- -- -- -- OPEN C_FECHAS_MIN_MAX(PN_CODIGO_PROYECTO); FETCH C_FECHAS_MIN_MAX INTO LD_FECHA_MIN, LD_FECHA_MAX; CLOSE C_FECHAS_MIN_MAX; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- CAMBIAR EL ESTADO DEL PROYECTO Y ACTUALIZA LAS FECHAS -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- UPDATE GEN_PROYECTOS P SET P.CODIGO_ESTADO = 'CR', P.FECHA_INICIO = LD_FECHA_MIN, P.FECHA_FIN = LD_FECHA_MAX, P.FECHA_INICIO_REAL = LD_FECHA_MIN, P.FECHA_FIN_REAL = LD_FECHA_MAX, P.TIEMPO_PROYECTO = TO_NUMBER((LD_FECHA_FIN - LD_FECHA_INICIO) + 1) WHERE P.CODIGO_PROYECTO = PN_CODIGO_PROYECTO; COMMIT; END IF; COMMIT;
54
EXCEPTION WHEN le_error THEN pv_error := lv_error; -- BITACORIZAR EL ERROR GENK_BITACORIZACION.P_BITACORIZA_ERROR(lv_aplicacion, sysdate, user, lv_error, null, null, null, pv_error); IF PV_ERROR IS NOT NULL THEN PV_ERROR := LV_ERROR /*|| ' - ' || pv_error*/; END IF; END; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ACTUALIZA LA ACTIVIDAD DE UN PROYECTO SIGUIENDO LAS -- MISMAS CONSIDERACIONES QUE SE TOMAN PARA REALIZA UN INSERT -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- PROCEDURE CNP_ACTUALIZA_ACT(PN_ACTIVIDAD_PROYECTO IN NUMBER, --GPP_ACTIVIDADES.ACTIVIDAD_PROYECTO%TYPE, -- ORDEN PV_DESCRIPCION_ACTIVIDAD IN VARCHAR2, --GPP_ACTIVIDADES.DESCRIPCION_ACTIVIDAD%TYPE, -- ACTIVIDAD PV_HITO IN VARCHAR2, --GPP_ACTIVIDADES.ACTIVIDAD_HITO%TYPE, -- HITO PN_ACTIVIDAD_PREDECESORA IN NUMBER DEFAULT 0, --GPP_ACTIVIDADES.DESCRIPCION_ACTIVIDAD%TYPE, -- PREDECESORA PV_FECHA_INICIAL IN VARCHAR2, --GPP_ACTIVIDADES.FECHA_INICIAL_REAL%TYPE, PV_FECHA_FINAL IN VARCHAR2,-----, --GPP_ACTIVIDADES.FECHA_FINAL_REAL%TYPE, PN_TIEMPO IN OUT NUMBER, --GPP_ACTIVIDADES.TIEMPO_REAL%TYPE, -- TIEMPO PV_RECURSO IN OUT VARCHAR2, --GPP_ACTIVIDADES.PARTIC_ACTIVIDAD%TYPE, -- RECURSO PV_OBSERVACION IN VARCHAR2, --GPP_ACTIVIDADES.OBSERVACION%TYPE, -- OBSERVACION PN_CODIGO_PROYECTO IN NUMBER, --GEN_PROYECTOS.CODIGO_PROYECTO%TYPE, PV_ERROR OUT VARCHAR2)IS -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- OBTIENE LA PRIMERA FECHA DE UN CRONOGRAMA -- EN CASO DE QUE EXISTE REGISTROS ANTERIORES -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- CURSOR C_FECHA_FIN(PN_CODIGO_PROYECTO NUMBER) IS SELECT MIN(A.FECHA_INICIAL_ESTIMADA) FROM GPP_ACTIVIDADES A WHERE A.CODIGO_PROYECTO = PN_CODIGO_PROYECTO; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VERIFICA LA ULTIMA ACTIVIDAD DEL CRONOGRAMA -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- CURSOR C_VERIF_ULTIMA_ACTIV (PN_CODIGO_PROYECTO NUMBER) IS SELECT COUNT(*) FROM GPP_ACTIVIDADES AC WHERE AC.CODIGO_ACTIVIDAD = (SELECT MAX(A.CODIGO_ACTIVIDAD) FROM GPP_ACTIVIDADES A WHERE A.CODIGO_PROYECTO = PN_CODIGO_PROYECTO) AND UPPER(AC.DESCRIPCION_ACTIVIDAD) LIKE '%FIN % PROY%';
55
LE_ERROR EXCEPTION; LN_PREDECESORA NUMBER:=0; LN_CANT_RECURSOS NUMBER:=0; LN_ACTIVIDAD NUMBER:=0; LB_NOT_FOUND BOOLEAN; LB_BAND BOOLEAN; --LV_ACT VARCHAR2(1); AUX_FI VARCHAR2(20); AUX_FF VARCHAR2(20); AUX_FIC VARCHAR2(20); LD_FECHA_INICIO DATE; LD_FECHA_FIN DATE; LD_SYSDATE DATE; LD_FECHA_INIC_CRONOG DATE; LV_RECURSOS VARCHAR2(20); LV_HITO VARCHAR2(1); LV_ERROR VARCHAR2(100); LV_APLICACION VARCHAR2(100):= 'GPPK_TRX_ACTIVIDADES.CNP_ACTIVIDADES'; BEGIN LV_ERROR := NULL; PN_TIEMPO := 0; -- -- -- -- -- -- -- -- -- -- -- -- -- -- INICIO EL PROCESO DE VALIDACION -- -- -- -- -- -- -- -- -- -- -- -- -- IF PN_ACTIVIDAD_PROYECTO IS NULL THEN lv_error := 'Especifique la actividad a modificar'; RAISE le_error; END IF; IF pn_codigo_proyecto IS NULL THEN lv_error := 'El código del proyecto no debe ser nulo'; RAISE le_error; END IF; IF PN_ACTIVIDAD_PREDECESORA IS NOT NULL THEN --HECHO POR JOHNNY PRUEBA PARA QUE NO INGRESE LOS NUMEROS INVALIDOS BEGIN SELECT F.ACTIVIDAD_PROYECTO INTO LN_ACTIVIDAD FROM GPP_ACTIVIDADES F WHERE F.ACTIVIDAD_PROYECTO = PN_ACTIVIDAD_PREDECESORA AND F.CODIGO_PROYECTO = PN_CODIGO_PROYECTO; EXCEPTION WHEN OTHERS THEN NULL; END; IF LN_ACTIVIDAD IS NULL OR LN_ACTIVIDAD = 0 THEN LV_ERROR := 'La actividad predecesora que quiere ingresar no existe en el Proyecto'; RAISE LE_ERROR; END IF; ln_predecesora := PN_ACTIVIDAD_PREDECESORA; END IF; IF lv_hito IS NOT NULL THEN IF lv_hito = 'H' OR lv_hito = 'A' THEN IF lv_hito = 'A' THEN IF PV_FECHA_INICIAL IS NULL THEN LV_ERROR := 'Ingrese la fecha de inicio de la actividad'; RAISE LE_ERROR; END IF;
56
IF PV_FECHA_FINAL IS NULL THEN LV_ERROR := 'Ingrese la fecha fin de la actividad'; RAISE LE_ERROR; END IF; ELSE IF PV_FECHA_INICIAL IS NULL THEN LV_ERROR := 'Ingrese la fecha inicio del hito'; RAISE LE_ERROR; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- SI PERMITE LA FECHA FINAL NULA PARA EL HITO -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --SELECT TO_DATE(PV_FECHA_INICIAL, 'DD/MM/YYYY') INTO LV_FI FROM DUAL; LD_FECHA_FIN := TO_DATE(PV_FECHA_INICIAL,'DD-MM-YYYY'); LB_BAND := TRUE; END IF; IF LB_BAND THEN LD_FECHA_INICIO := TO_DATE(PV_FECHA_INICIAL, 'DD-MM-YYYY'); ELSE LD_FECHA_INICIO := TO_DATE(PV_FECHA_INICIAL, 'DD-MM-YYYY'); LD_FECHA_FIN := TO_DATE(PV_FECHA_FINAL, 'DD-MM-YYYY'); END IF; LB_BAND := FALSE; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- CURSOR QUE VERIFICA LA PRIMERA FECHA DEL CRONOGRAMA -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- OPEN C_FECHA_FIN(PN_CODIGO_PROYECTO); FETCH C_FECHA_FIN INTO LD_FECHA_INIC_CRONOG; LB_NOT_FOUND := C_FECHA_FIN%NOTFOUND; CLOSE C_FECHA_FIN; AUX_FI := TO_CHAR(LD_FECHA_INICIO, 'MM-YYYY'); AUX_FF := TO_CHAR(LD_FECHA_FIN, 'MM-YYYY'); -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VALIDAR QUE LAS FECHAS SEAN MAYORES A LA PRIMERA FECHA -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF LB_NOT_FOUND THEN LD_SYSDATE := TO_CHAR(SYSDATE, 'MM-YYYY'); -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VALIDA QUE LAS FECHAS NO SEAN MENORES A LA PRIMERA FECHA INGRESADA -- EN CASO QUE NO HAYA VALIDA EL MES Y AÑO EN CURSO -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF (AUX_FI <= LD_SYSDATE) OR (AUX_FF <= LD_SYSDATE) THEN LV_ERROR := 'La fecha ingresada está fuera del rango inicial del cronograma'; RAISE LE_ERROR; END IF; ELSE AUX_FIC := TO_CHAR(LD_FECHA_INIC_CRONOG, 'MM-YYYY'); IF AUX_FIC IS NOT NULL THEN IF (AUX_FI < AUX_FIC) OR (AUX_FF < AUX_FIC) THEN LV_ERROR := 'La fecha ingresada está fuera del rango inicial del cronograma'; RAISE LE_ERROR; END IF; END IF; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- CALCULO EL TIEMPO ENTRE LAS FECHAS -- -- -- -- -- -- -- -- -- -- -- -- -- PN_TIEMPO := LD_FECHA_FIN - LD_FECHA_INICIO + 1; -- SUMAR EL DIA QUE SE QUEDA EN LA RESTA
57
IF PN_TIEMPO < 0 THEN LV_ERROR := 'La fecha de inicio debe ser menor que la fecha final'; RAISE LE_ERROR; END IF; END IF; END IF; IF LV_HITO IS NULL THEN LD_FECHA_INICIO := NULL; LD_FECHA_FIN := NULL; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VALIDAR LA CAJA DE TEXTO QUE INVOLUCRA A LOS RECURSOS -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- IF PV_RECURSO IS NOT NULL THEN -- -- -- -- -- -- -- -- -- -- -- -- -- -- INDICA LAS 4 VARIABLES ESTANDARES -- -- -- -- -- -- -- -- -- -- -- -- -- CNP_REC_ESTANDAR(PV_RECURSO, PN_CODIGO_PROYECTO, LV_RECURSOS, LV_ERROR); IF LV_ERROR IS NOT NULL THEN RAISE LE_ERROR; END IF; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- INSERTA LAS ACTIVIDADES DEL CRONOGRAMA -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- GPPK_OBJ_ACTIVIDADES.ACT_ACTIVIDADES(pn_codigo_actividad => PN_ACTIVIDAD_PROYECTO, pn_codigo_proyecto => PN_CODIGO_PROYECTO, pv_descripcion => upper(PV_DESCRIPCION_ACTIVIDAD), pv_hito => upper(LV_HITO), pn_predecesora => LN_PREDECESORA, pd_fecha_inicial => LD_FECHA_INICIO, --/*TO_DATE(LD_FECHA_INICIO, 'DD-MM-YYYY'),--*/PV_FECHA_INICIAL, pd_fecha_final => LD_FECHA_FIN, --/*TO_DATE(LD_FECHA_FIN, 'DD-MM-YYYY'), --*/PV_FECHA_FINAL, pv_observacion => upper(PV_OBSERVACION), pv_recurso => LV_RECURSOS, pn_tiempo => PN_TIEMPO, pv_msg_error => LV_ERROR); IF LV_ERROR IS NOT NULL THEN RAISE LE_ERROR; END IF; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VERIFICA SI ES LA ULTIMA ACTIVIDAD -- PARA ACTUALIZAR LOS TIEMPOS -- -- -- -- -- -- -- -- -- -- -- -- -- -- OPEN C_VERIF_ULTIMA_ACTIV(PN_CODIGO_PROYECTO); FETCH C_VERIF_ULTIMA_ACTIV INTO LN_CANT_RECURSOS; CLOSE C_VERIF_ULTIMA_ACTIV; IF LN_CANT_RECURSOS > 0 THEN GPPK_TRX_ACTIVIDADES.CNP_TIEMPO_HITO(PN_CODIGO_PROYECTO, LV_ERROR); IF LV_ERROR IS NOT NULL THEN RAISE LE_ERROR; END IF;
58
COMMIT; END IF; COMMIT; EXCEPTION WHEN le_error THEN pv_error := lv_error; -- BITACORIZAR EL ERROR GENK_BITACORIZACION.P_BITACORIZA_ERROR(lv_aplicacion, sysdate, user, lv_error, null, null, null, pv_error); IF PV_ERROR IS NOT NULL THEN PV_ERROR := LV_ERROR /*|| ' - ' || pv_error*/; END IF; END;
Asignación de Recurso Humano al Proyecto:
El líder SIS se encarga de seleccionar los perfiles necesarios de
acorde a lo requerido por el proyecto, previa selección deberá
escoger los conocimientos para realizar la asignación.
procedure gpp_actualiza_recursos (pv_codigo in varchar2 , pn_cantidad in number ,pv_msg_error out varchar2) is lv_msg_error VARCHAR2(1000):= NULL; le_mi_error EXCEPTION; begin if pv_codigo is null then lv_msg_error:= 'Código del proyecto con valor Nulo'; raise le_mi_error; end if; if pn_cantidad is null then lv_msg_error:= 'Número de recursos con valor Nulo'; raise le_mi_error; end if; begin
59
update gen_proyectos p set p.total_recurso_humano = pn_cantidad where p.codigo_proyecto = pv_codigo ; commit; exception when others then pv_msg_error := sqlerrm; end; EXCEPTION when le_mi_error then pv_msg_error := lv_msg_error; GENK_BITACORIZACION.P_BITACORIZA_ERROR(lv_aplicacion, sysdate, user, lv_msg_error, null, null, null, pv_msg_error); when others then pv_msg_error := 'ocurrió el siguiente error ' || sqlerrm || '. ' || lv_aplicacion; end gpp_actualiza_recursos; --================ procedimiento que asigna los recursos humanos al proyecto =============-- procedure gpp_asigna_recursos ( pv_codigo in varchar2 ,pv_participantes in varchar2 ,pn_cant_recursos in NUMBER ,ps_codigo_user in varchar2 ,pv_msg_error out varchar2) is lv_trama varchar2(50); lv_caracter varchar2(50); lv_parametro varchar2(50); lv_campo varchar2(50); lv_valor varchar2(50); cadena_resultante varchar2(100); lv_msg_error varchar2(100):=NULL; ln_contador number := 0; ln_codigoProyecto number; ln_codigoParticipante number; le_mi_error exception; lb_guardar boolean:= true; ln_totalrecursos number:= 0; LN_CANTIDAD NUMBER :=0; lv_guarda varchar2(100); ln_cantidad_proy NUMBER :=0; ln_tipo_participante number:=0; CURSOR C_CANT_REC (PN_CODIGO NUMBER)IS SELECT P.TOTAL_RECURSO_HUMANO FROM GEN_PROYECTOS P WHERE P.CODIGO_PROYECTO = PN_CODIGO; cursor c_cant_proyectos (pn_codigo number, pn_codigo_participante number)is select p.no_proy_asignados from clc_participante p, clc_participante_proyecto pp where p.codigo_participante = pp.codigo_participante and pp.codigo_participante = pn_codigo_participante and pp.codigo_proyecto = pn_codigo;
60
begin if pv_codigo is null then lv_msg_error:= 'Código del proyecto con valor Nulo'; raise le_mi_error; end if; if pv_participantes is null then lv_msg_error:= 'La trama de los participantes esta vacía '; raise le_mi_error; end if; if pn_cant_recursos is null then lv_msg_error:= 'No hay cantidad de recursos para el proyecto'; raise le_mi_error; end if; lv_trama := pv_participantes; -- se tiene la trama de los participantes lv_parametro := pv_codigo; -- se tiene el codigo del participante ln_codigoProyecto := to_number (pv_codigo); -- convierte a number el código del proyecto --lv_trama := lv_trama||'|'; OPEN C_CANT_REC(ln_codigoProyecto); FETCH C_CANT_REC INTO LN_CANTIDAD; CLOSE C_CANT_REC; for i in 1 .. length(lv_trama) loop lv_caracter:=substr(lv_trama,i,1); if lv_caracter not in ('|') then lv_campo:=lv_campo||lv_caracter; elsif lv_caracter = '|' then ln_contador := ln_contador + 1; if ln_contador = 1 then lv_parametro := nvl(lv_campo,0); elsif ln_contador = 2 then lv_valor := lv_campo; ln_codigoParticipante := to_number(lv_valor); ln_totalRecursos := ln_totalRecursos + 1; select p.CODIGO_TIPO_PARTICIPANTE into ln_tipo_participante from CLC_PARTICIPANTE p where p.CODIGO_PARTICIPANTE = ln_codigoParticipante; INSERT INTO CLC_PARTICIPANTE_PROYECTO (CODIGO_PARTICIPANTE, CODIGO_PROYECTO, CODIGO_PRIVILEGIO, CODIGO_TIPO_PARTICIPANTE, DESCRIPCION, FECHA_ASIGNACION, fecha_ing , fecha_mod , CODIGO_USUARIO_ING, ESTADO_PARTICIPANTE, ESTADO) VALUES (ln_codigoParticipante, ln_codigoProyecto, 'R', ln_tipo_participante, 'El participante será asignado al proyecto:' || ln_codigoProyecto, SYSDATE, SYSDATE, SYSDATE,
61
ps_codigo_user, 'N',-- NO SE ENCUENTRA DISPONIBLE 'A' ); update clc_participante d set d.disponibilidad ='N' where d.codigo_participante = ln_codigoParticipante; commit; BEGIN OPEN c_cant_proyectos (ln_codigoProyecto, ln_codigoParticipante ); FETCH c_cant_proyectos INTO ln_cantidad_proy; CLOSE c_cant_proyectos; IF ln_cantidad_proy IS NOT NULL THEN update clc_participante d set d.no_proy_asignados = ln_cantidad_proy + 1 where d.codigo_participante = ln_codigoParticipante; commit; END IF; EXCEPTION WHEN no_data_found THEN NULL; WHEN OTHERS THEN NULL; END; -- llamada a pck para que inserte en gpp_caracteristicas_proyecto BEGIN gppk_obj_caracteristicas.inserta_caracteristicas(pv_codigo_caract => ln_codigoParticipante ,pv_codigo_proy => ln_codigoProyecto ,pv_descripcion => 'RECURSO ASIGNADO' ,pv_msg_error =>lv_msg_error ); if lv_msg_error is not null then raise le_mi_error ; end if; EXCEPTION WHEN OTHERS THEN pv_msg_error := SQLERRM; END; cadena_resultante := cadena_resultante||'|'||lv_valor; ln_contador := 0; end if; lv_campo := ''; end if; end loop; dbms_output.put_line(cadena_resultante); cadena_resultante := substr(cadena_resultante,2); -- muestra solo la cadena que se desea dbms_output.put_line(cadena_resultante); IF ln_totalrecursos <= LN_CANTIDAD THEN if ln_totalRecursos = pn_cant_recursos THEN lv_msg_error := 'Participantes Asignados Satisfactoriamente'; dbms_output.put_line(lv_msg_error); else lv_msg_error := 'Sólo se asignaron '||ln_totalRecursos ||' participantes'; dbms_output.put_line(lv_msg_error); end if; END IF; exception
62
when le_mi_error then pv_msg_error := lv_msg_error; GENK_BITACORIZACION.P_BITACORIZA_ERROR(lv_aplicacion, sysdate, user, lv_msg_error, null, null, null, pv_msg_error); when others then pv_msg_error := lv_aplicacion|| 'GPP_ASIGNA_RECURSOS - No se encontraron datos : '|| sqlerrm; GENK_BITACORIZACION.P_BITACORIZA_ERROR(lv_aplicacion, sysdate, user, pv_msg_error, null, null, null, pv_msg_error); end gpp_asigna_recursos;
Asignación de Recurso Informático:
Para proceder con la asignación de los recursos informáticos al
proyecto se lo subdividiendo en dos grupos los cuales son
hardware y software.
---------------------------------------------------------- ---para ingresar en la tabla de mg_asignacion --esto ocurre cuando se asigna un hardware a un proyecto ---------------------------------------------------------- PROCEDURE gpp_ingresa_recursos(pv_codigo IN VARCHAR2, pv_trama1 IN VARCHAR2, pv_error OUT VARCHAR2 )IS CURSOR c_proyecto IS SELECT COUNT(*) FROM MGI_ASIGNACION A, MGI_EQUIPOS E, GPC_SUB_TIPO_SERVICIO S WHERE A.CODIGO_PROYECTO = PV_CODIGO AND A.CODIGO_EQUIPO = E.CODIGO_EQUIPO AND E.CODIGO_SUB_TIPO_SERVICIO = S.CODIGO_SUB_TIPO_SERVICIO AND S.CODIGO_TIPO_SERVICIO = 10; lv_trama VARCHAR2(100); lv_error VARCHAR2(100); le_error EXCEPTION; le_mi_error EXCEPTION; ln_codigoProyecto NUMBER; lv_parametro VARCHAR2(100); ln_equipo NUMBER; ln_sec NUMBER;
63
cadena_resultante varchar2(100); ln_contador NUMBER:=0; lv_caracter VARCHAR2(100); LV_CAMPO VARCHAR2(50); --ln_cantidad_infor number := 0; lv_valor VARCHAR2(50); ln_cantidad NUMBER:=0; ln_maximo NUMBER:=0; ln_cantidad_asig NUMBER:=0; BEGIN IF pv_codigo IS NULL THEN lv_error := 'Ingresar el Codigo del Proyecto'; RAISE le_error; END IF; IF pv_trama1 IS NULL THEN lv_error := 'Ingrese los Equipos'; RAISE le_error; END IF; lv_trama := pv_trama1; -- se tiene la trama de los participantes lv_parametro := pv_codigo; -- se tiene el codigo del participante ln_codigoProyecto := to_number (pv_codigo); --para sacar la cantidad maxima de los recursos informaticos SELECT sum(b.conocimiento_2) INTO ln_maximo FROM gpp_caracteristicas_proyecto b WHERE b.codigo_proyecto = ln_codigoProyecto AND b.descripcion_recurso = '10'; --para recuperar cuantos equipos fueron asignados previamente -- por si acaso se olvido o algo asi por asignar OPEN c_proyecto; FETCH c_proyecto INTO ln_cantidad_asig; CLOSE c_proyecto; --sumo todo que tengo asignado IF ln_cantidad_asig >= ln_maximo THEN lv_error := 'Los recursos seleccionados exceden de lo definido'; RAISE le_mi_error; END IF; ln_maximo := ln_maximo - ln_cantidad_asig; for i in 1 .. length(lv_trama) loop lv_caracter:=substr(lv_trama,i,1); if lv_caracter not in ('|') then lv_campo:=lv_campo||lv_caracter; elsif lv_caracter = '|' then ln_contador := ln_contador + 1; if ln_contador = 1 then lv_parametro := nvl(lv_campo,0); elsif ln_contador = 2 then lv_valor := lv_campo; ln_equipo := to_number(lv_valor); ln_cantidad := ln_cantidad + 1; --comprobar si sobrepasa de lo preasignado que fue aprobado por Norka IF ln_cantidad > ln_maximo THEN
64
lv_error := 'Los recursos seleccionados exceden de lo Definido'; RAISE le_mi_error; END IF; SELECT MGI_SEQ_ASIGNA.NEXTVAL INTO LN_SEC FROM DUAL; BEGIN INSERT INTO mgi_asignacion( codigo_asignacion, codigo_proyecto, codigo_equipo, codigo_software, codigo_estado, fecha_asignacion ) VALUES( ln_sec, ln_codigoProyecto, --codigo del proyecto ln_equipo, NULL, 'AS',--CODIGO DE ASIGNADO SYSDATE ); COMMIT; ----------------------------------------- --para actuzalizar el estado de equipos-- ----------------------------------------- UPDATE mgi_equipos d SET d.codigo_estado = 'AS' WHERE d.codigo_equipo = ln_equipo; COMMIT; EXCEPTION WHEN OTHERS THEN lv_error := 'Error en el insert de mgi_asignacion'; RAISE le_error; END; cadena_resultante := cadena_resultante||'|'||lv_valor; ln_contador := 0; end if; lv_campo := ''; end if; end loop; EXCEPTION WHEN LE_MI_ERROR THEN PV_ERROR := LV_ERROR; WHEN LE_ERROR THEN PV_ERROR := 'ERROR EN EL PAQUETE: ' || LV_ERROR; WHEN OTHERS THEN PV_ERROR := 'ERROR EN EL PAQUETE: ' || SQLERRM; END; PROCEDURE gpp_ingresa_software(pv_codigo IN VARCHAR2, pv_trama1 IN VARCHAR2, pv_error OUT VARCHAR2 ) IS CURSOR c_proyecto IS SELECT COUNT(*)
65
FROM MGI_ASIGNACION A, MGI_EQUIPOS E, GPC_SUB_TIPO_SERVICIO S WHERE A.CODIGO_PROYECTO = PV_CODIGO AND A.CODIGO_EQUIPO = E.CODIGO_EQUIPO AND E.CODIGO_SUB_TIPO_SERVICIO = S.CODIGO_SUB_TIPO_SERVICIO AND S.CODIGO_TIPO_SERVICIO = 20; lv_trama VARCHAR2(100); lv_error VARCHAR2(100); le_error EXCEPTION; ln_codigoProyecto NUMBER; lv_parametro VARCHAR2(100); ln_software NUMBER; ln_sec NUMBER; cadena_resultante varchar2(100); ln_contador NUMBER:=0; lv_caracter VARCHAR2(100); LV_CAMPO VARCHAR2(50); --ln_cantidad_infor number := 0; lv_valor VARCHAR2(50); ln_cantidad NUMBER:=0; ln_maximo NUMBER:=0; ln_cantidad_soft NUMBER; BEGIN IF pv_codigo IS NULL THEN lv_error := 'Ingresar el Codigo del Proyecto'; RAISE le_error; END IF; IF pv_trama1 IS NULL THEN lv_error := 'Ingrese los Equipos'; RAISE le_error; END IF; lv_trama := pv_trama1; -- se tiene la trama de los participantes lv_parametro := pv_codigo; -- se tiene el codigo del participante ln_codigoProyecto := to_number (pv_codigo); OPEN c_proyecto; FETCH c_proyecto INTO ln_cantidad_soft; CLOSE c_proyecto; --para sacar la cantidad maxima de los recursos informaticos (software) SELECT sum(b.conocimiento_2) INTO ln_maximo FROM gpp_caracteristicas_proyecto b WHERE b.codigo_proyecto = ln_codigoProyecto AND b.descripcion_recurso = '20'; ln_maximo := ln_maximo + ln_cantidad_soft; for i in 1 .. length(lv_trama) loop lv_caracter:=substr(lv_trama,i,1); if lv_caracter not in ('|') then lv_campo:=lv_campo||lv_caracter; elsif lv_caracter = '|' then ln_contador := ln_contador + 1; if ln_contador = 1 then lv_parametro := nvl(lv_campo,0); elsif ln_contador = 2 then lv_valor := lv_campo; ln_software := to_number(lv_valor);
66
ln_cantidad := ln_cantidad + 1; --comprobar si sobrepasa de lo preasignado que fue aprobado por Norka IF ln_cantidad > ln_maximo THEN lv_error := 'Los recursos seleccionados exceden de lo definido'; RAISE le_error; END IF; SELECT MGI_SEQ_ASIGNA.NEXTVAL INTO LN_SEC FROM DUAL; BEGIN INSERT INTO mgi_asignacion( codigo_asignacion, codigo_proyecto, codigo_equipo, codigo_software, codigo_estado, fecha_asignacion ) VALUES( ln_sec, ln_codigoProyecto, --codigo del proyecto NULL, ln_software, 'AS',--CODIGO DE ASIGNADO SYSDATE ); COMMIT; ------------------------------------------ --para actualizar el estado del software-- ------------------------------------------ UPDATE mgi_software d SET d.codigo_estado = 'AS' WHERE d.codigo_software = ln_software; COMMIT; EXCEPTION WHEN OTHERS THEN lv_error := 'Error en el insert de mgi_asignacion'; RAISE le_error; END; cadena_resultante := cadena_resultante||'|'||lv_valor; ln_contador := 0; end if; lv_campo := ''; end if; end loop; EXCEPTION WHEN LE_ERROR THEN PV_ERROR := LV_ERROR; WHEN OTHERS THEN PV_ERROR := SQLERRM; END;
67
IMPLEMENTACION DE CODIGO EN JAVA
Para proceder con la codificación del proyecto damos a conocer el
tipo de conexión que se ha establecido con la base, realizando así
actualizaciones e inserciones de información sobre la misma.
public class BeanBD implements ConstantesSistema { protected PageContext contextoPagina; //private DataSource dataSource; protected Connection conexion; public BeanBD(){} public BeanBD(PageContext p_contextoPagina) throws SQLException { contextoPagina=p_contextoPagina; try { Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url = "jdbc:oracle:thin:@//localhost:1521/SGPI9I"; String user = "admin"; String pass = "admin"; conexion = DriverManager.getConnection(url, user, pass); } catch (Exception e) { } conexion.setAutoCommit(false); System.out.println("Creado BeanBD "+hashCode()+"."); } public PageContext getContextoPagina() { return contextoPagina; } public void setContextoPagina(PageContext contextoPagina) { this.contextoPagina = contextoPagina; } public ResultSet crearResultSet(String ps_query) throws SQLException { return conexion.createStatement().executeQuery(ps_query); }
68
Para la creación de Combos dinámicos y la elaboración de
vectores a nivel de JSP se lo implementó de la siguiente forma:
// Este proceso permite crear un combo con la opción TODOS además de lo seleccionado public String crearComboT(String ps_query,String ps_name,String ps_funcionOnChange) throws SQLException { String ls_ini="<select class='text_system' id='"+ps_name+"' name='"+ps_name+"' class='combo' onChange='javascript:"+ps_funcionOnChange+"();' >\n"; String ls_opciones="<option value=''></option>\n"; ls_opciones+="<option value='0'>-- TODOS --</option>\n"; String ls_fin="</select>\n"; ResultSet l_rs=null; try { l_rs=conexion.createStatement().executeQuery(ps_query); while(l_rs.next()) ls_opciones=ls_opciones+"<option value='"+l_rs.getString(1)+"'>"+l_rs.getString(2)+"</option>\n"; } finally { if(l_rs!=null) l_rs.close(); } return ls_ini+ls_opciones+ls_fin; } public Vector consultarEstados1(String estado) { ResultSet l_rs = null; try{ Vector v = new Vector(); String ps_query1; ps_query1 ="select a.nombre_area, p.nombre_proyecto, e.descripcion "+ "from gen_proyectos p, gen_areas a, gen_estados e " + "where p.codigo_area = a.codigo_area " + "and p.codigo_estado = e.codigo_estado "+ "and e.codigo_estado = nvl(decode('" + estado + "','0',e.codigo_estado),'" + estado +"') "+ "order by e.descripcion"; l_rs=conexion.createStatement().executeQuery(ps_query1); while (l_rs.next()) { Estado c=new Estado(); c.setDescripcion_area(l_rs.getString(1)); c.setDescripcion_proyecto(l_rs.getString(2)); c.setEstado(l_rs.getString(3)); v.addElement(c); } l_rs.close(); return v; } catch (SQLException e) {
69
System.out.println("Error - Consultar Estados1"); return null; } finally { if(l_rs != null) try { l_rs.close(); } catch (SQLException e) { System.out.println("Error - Consultar Estados1"); }}
Para la llamada de los paquetes desde Java se implementó las
siguiente metodología, las cuales realizan la validación de
conexión con la base y el usuario para poder realizar un cambio
en la misma.
public class Cronograma extends BeanBD { Integer codigoProyecto; Integer codigoArea; Integer porcentaje; Integer orden; Integer cod_actividad; String actividad; String hito; String ls_hito; Integer predecesora; //Date fechaInicio; //Date fechaFin; String fechaInicio; String fechaFin; String asignacionActividad; String estado; Integer tiempo; String recurso; String observacion; String nombre_proyecto; public Cronograma() { //Constructor por default } public Cronograma(PageContext p_contextoPagina) throws SQLException { super(p_contextoPagina); } /** * Funcion para guardar una actividad * @param request
70
* @param response * @throws SQLException */ public String grabar_cronograma (ServletRequest request, ServletResponse response)throws SQLException { System.out.println("Lee parametros"); leeParametros(request); return cnpActividades(); } /** * Llama al Paquete que procesa las actividades */ String cnpActividades() { try { CallableStatement statement = conexion.prepareCall( "begin GPPK_TRX_ACTIVIDADES.CNP_ACTIVIDADES(?, ?, ?, ?, ?, ?, " + " ?, ?, ?, ?, ?); end;"); statement.setInt(1, orden); statement.setString(2, actividad); statement.setString(3, hito); if (predecesora == null) predecesora = 0; statement.setInt(4, predecesora); statement.setString(5, fechaInicio); statement.setString(6, fechaFin); if (tiempo == null) tiempo = 0; statement.setInt(7, tiempo); statement.setString(8, recurso); if (observacion == null) observacion = "-"; statement.setString(9, observacion); statement.setInt(10, codigoProyecto); statement.registerOutParameter(11, java.sql.Types.VARCHAR); statement.execute(); conexion.commit(); System.out.println("EJECUTA EL COMMIT"); //Exito return statement.getString(11); } catch (SQLException e) { e.printStackTrace(); } catch (Exception e2) { e2.printStackTrace(); } //Error return "No se pudo guardar la actividad :("; }
71
Asignación Lider SIS:
Líder SIS: Para seleccionar un lider SIS a nivel de JSP se lo
realiza escogiendo el área y por medio de una interfaz gráfica se
creará una matriz la cual enviará los proyectos que no tienen lider
asignado.
Para asignarlo como Lider SIS de ese proyecto se debe
seleccionar el lider de su combo, luego haciendo clic en el boton
Ok y seleccionar el proyecto que desee y automáticamente se
actualizará el proyecto con el lider SIS.
ProcesaLiderSIS lider = new ProcesaLiderSIS(pageContext); try { lider.procesaLider(ln_lider, ln_cod_proyecto, lsbError); lsError = lsbError.toString(); %> <script> window.open("../blanco.jsp","hd_resultado"); window.open("tabla_sis.jsp?cod="+<%=cod_area%>, target="hd_resultado"); </script> <%} catch (Exception e) { //e.printStackTrace(); // no queremos mostrar la pila System.out.println("Error al actualizar el Estado del Proyecto: "+e); %> <script> alert("<%=e%>"); </script> <%} %> </body> </html>
72
<body class = "Mantenimiento"> <FORM name="detalle" method="post"> <input type="hidden" name="cod_area" value=<%=codigo2%>> <table width="750" border="2" align="center" class="text_system"> <tr> <th width="50" scope="col" align="justify" valign="middle" class="menu_system" bgcolor="#A9A9D3" ><span class="Estilo1">Orden</span></th> <th width="150" scope="col" align="justify" valign="middle" class="menu_system" bgcolor="#A9A9D3" ><span class="Estilo1">Área de Proyecto</span></th> <th width="300" scope="col" align="justify" valign="middle" class="menu_system" bgcolor="#A9A9D3"><span class="Estilo1">Descripción del Proyecto </span></th> <th width="180" scope="col" align="justify" valign="middle" class="menu_system" bgcolor="#A9A9D3" ><span class="Estilo1">Lider SIS </span></th> </tr> <% v_conexiones = l_dcw.asignaLiderSIS(codigo2); for (int i=0; i<v_conexiones.size(); i++) { AsignaSIS obj_asig = new AsignaSIS(); obj_asig = (AsignaSIS)v_conexiones.elementAt(i); int pos= i+1; String descripcion_area = obj_asig.getAreas(); String descripcion_proyecto = obj_asig.getProyecto(); String descripcion_lider = obj_asig.getLiderSIS(); Integer codigo=obj_asig.getCodigoProyecto(); if (descripcion_lider == null) { descripcion_lider = "No definido"; } //System.out.println("Codigo Proyecto:" + codigo); %> <tr> <td><%=pos%></td> <td><%=descripcion_area%></td> <td><%=descripcion_proyecto%></td> <td><a href="javascript:valida(<%=codigo%>)"><%=descripcion_lider%></a></td> </tr> <% } %> </table> </FORM> </body> </html>
73
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <link href="../estilos/estilo.css" rel="stylesheet" type="text/css"> <style type="text/css"> <!-- .style1 {font-size: 9} --> </style> <body class = "Mantenimiento"> <% // Obtiene el valor del lider SIS y lo envia al pck String ls_cod_lider =(String)session.getAttribute("code"); //out.println("<script> alert('recibiendo codigo lider : " + ls_cod_lider + "'); </script>"); Integer ln_lider = new Integer(Integer.parseInt(ls_cod_lider)); // Obtiene el código del Proyecto y lo transforma a Integer String cod = request.getParameter("codigo"); Integer ln_cod_proyecto = new Integer(Integer.parseInt(cod)); // Obtiene el código del area y lo envia al jsp String cod_area = request.getParameter("cod_area"); StringBuffer lsbError = new StringBuffer(""); String lsError = ""; // Muestra por consola los valores que recibe la página // Nos asegura que se estén cargando los valores System.out.println("Valor Codigo: "+ln_cod_proyecto); System.out.println("Valor Lider: " +ln_lider); // Llama a la clase ProcesaEstado el cual llama al pck para realizar // el update de los estados del proyecto ProcesaLiderSIS lider = new ProcesaLiderSIS(pageContext); try { lider.procesaLider(ln_lider, ln_cod_proyecto, lsbError); lsError = lsbError.toString(); %> <script> window.open("../blanco.jsp","hd_resultado"); window.open("tabla_sis.jsp?cod="+<%=cod_area%>, target="hd_resultado"); </script> <%} catch (Exception e) { //e.printStackTrace(); // no queremos mostrar la pila System.out.println("Error al actualizar el Estado del Proyecto: "+e); %> <script> alert("<%=e%>"); </script> <%} %> </body> </html>
74
Cambio de Estado:
Para realizar un cambio de estado de un proyecto se lo efectua de
la siguiente manera:
En un combo constarán todas las áreas de la empresa, al
seleccionar una áerea especifica, una interfaz gráfica le mostrará
todos lo proyectos que existan en esa área por medio de una
matriz, luego en una combo que se llama codigo de estado se
seleccionará el estado que desea cambiar y presiona el botón
OK; luego se hace clic en el link del proyecto y se actualizará el
estado en el proyecto.
<% String ls_codigo_estado = request.getParameter("cmb_estados"); if(ls_codigo_estado!=null) { session.setAttribute("code",ls_codigo_estado); } else ls_codigo_estado=""; // String ls_userApp = (String)session.getAttribute("codigoUsuarioLogin"); String ls_userApp = codigoUsuario; // se crea un objeto para poder llamar a todos los componentes que posea el DibujadorComponentesWeb DibujadorComponentesWeb l_dcw = new DibujadorComponentesWeb(pageContext); String ls_queryRec = " select g.codigo_estado, g.descripcion" + " from gen_estados g" + " where g.codigo_estado in ('EC', 'SB')" + " order by g.descripcion"; String ls_queryLider = "SELECT c.codigo_participante, p.nombre_completo " + "FROM clc_participante c, gen_personas p " + "WHERE c.codigo_persona = p.codigo_persona " + "AND c.codigo_tipo_participante = 1 "; // lider SimpleDateFormat l_df = new SimpleDateFormat("dd/MM/yyyy"); %>
75
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Estados del Proyecto</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <script type="text/JavaScript"> <!-- //--> </script> <link href="../estilos/estilo.css" rel="stylesheet" type="text/css"> <style type="text/css"> <!-- .style1 {font-size: 9} --> </style> <script> <!-- function cargar() { var codigo=document.estados.cmb_lider_p.value; // captura el codigo del combo if (codigo != null && codigo != '' ) { var url1 = "tabla_estado.jsp?cod="+codigo; // nuevo jsp en el que se dibujara la grid window.open(url1,target="hd_resultado"); // carga la pagina y ubica la inf. en la parte inferior de la misma } } function valida() { var cod_estado=document.estados.cmb_estados.value; var url2 = "estados.jsp?code="+cod_estado; // nuevo jsp en el que se dibujara la grid document.estados.action=url2; document.estados.target="_self"; document.estados.method="get"; document.estados.submit(); } function MM_goToURL() { //v3.0 var i, args=MM_goToURL.arguments; document.MM_returnValue = false; for (i=0; i<(args.length-1); i+=2) eval(args[i]+".location='"+args[i+1]+"'"); } //--> </script> <link href="../estilos/hojaEstiloBlc.css" rel="stylesheet" type="text/css"> </head> <body class = "Mantenimiento"> <form name="estados" class="hover"> <table width="820" border="0" cellpadding="0" cellspacing="0"> <!--DWLayoutTable--> <tr>
76
<td width="117" height="66"> </td> <td width="696"> </td> <td width="7"> </td> <!-- <td width="476"> </td> --> <!-- <td width="99"> </td>--> </tr> <tr> <td height="161"> </td> <td valign="top"><table width="100%" border="0" cellpadding="0" cellspacing="0"> <!--DWLayoutTable--> <tr> <td width="312" height="21" align="left" valign="middle" class="TituloMantenimiento">ESTADOS DEL PROYECTO</td> <td width="357"> </td> <td width="27"> </td> </tr> <tr> <td height="21" colspan="2" align="left" valign="middle" class="MenuBanner"><!--DWLayoutEmptyCell--> </td> <td> </td> </tr> <tr> <td height="3"></td> <td></td> <td></td> </tr> <tr> <td height="108" colspan="2" valign="top"><table width="100%" border="0" cellpadding="0" cellspacing="0" class="menu_system"> <!--DWLayoutTable--> <tr> <td width="71" height="22"></td> <td width="197"></td> <td width="36"></td> <td width="9"></td> <td width="27"></td> <td width="39"></td> <td width="80"></td> <td width="37"> </td> <td width="75" align="left" valign="middle" class="CampoLabel"><em>Fecha:</em></td> <td width="70" align="left" valign="middle" class="TituloAplicacion"> <em><%=l_df.format(new java.util.Date())%></em></td> </tr> <tr> <td height="22" colspan="2" align="left" valign="middle" class="CampoLabel">Gerente de Proyectos:</td> <td colspan="5" align="left" valign="middle" class="UsuarioLogin"> <em><%=ls_userApp%></em></td> <td> </td> <td> </td> <td> </td> </tr> <tr> <td colspan="2" rowspan="2" align="left" valign="middle" class="CampoLabel">Líder SIS: </td> <td colspan="2" rowspan="2" align="left" valign="middle" class="menu_system"> <%=l_dcw.crearComboT(ls_queryLider,"cmb_lider_p", "cargar")%></td> <td height="21"> </td> <td> </td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="1"></td>
77
<td rowspan="4" align="left" valign="middle" class="CampoLabel"><input name="b_select" type="button" class="UsuarioLogin" id="b_select" value="Ok" onClick="valida()"></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="20" colspan="2" align="left" valign="middle" class="CampoLabel">Estados del Proyecto:</td> <td rowspan="2" align="left" valign="middle" class="menu_system"> <%=l_dcw.crearCombo(ls_queryRec,"cmb_estados")%></td> <td> </td> <td> </td> <td></td> <td> </td> <td> </td> <td></td> </tr> <tr> <td rowspan="3" align="left" valign="middle" class="CampoLabel"><input name="b_regresar" type="submit" class="UsuarioLogin" id="b_regresar" onClick="MM_goToURL('parent','../frame.jsp');return document.MM_returnValue" value="Regresar"></td>
<html> <head> <title> </title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> <link href="../estilos/estilo.css" rel="stylesheet" type="text/css"> <style type="text/css"> <!-- .style1 {font-size: 9} --> </style> <script> // función que obtiene el código de líder function valida(codigo) { var cod_estado=codigo; // codigo del proyecto para actualizar el estado //alert ("Codigo en tabla_estado "+cod_estado); var cod_lider=document.detalle.cod_lider.value; var url2 = "actualiza_estado.jsp?codigo="+cod_estado+"&cod_lider="+cod_lider; window.open(url2,target="hd_limpiar"); } </script> <link href="../estilos/hojaEstiloBlc.css" rel="stylesheet" type="text/css"> </head> <% // se crea un objeto para poder llamar a todos los componentes que posea el DibujadorComponentesWeb DibujadorComponentesWeb l_dcw = new DibujadorComponentesWeb(pageContext); Vector v_conexiones = new Vector(); String codigo2 =request.getParameter("cod"); // recibe parámetro de la pantalla estados.jsp
78
%> <body class = "Mantenimiento"> <FORM method="post" name="detalle" lass = "Mantenimiento" id="detalle_estado"> <input type="hidden" name="cod_lider" value=<%=codigo2%>> <table width="700" align="center" class="CampoLabel"> <!--DWLayoutTable--> <tr> <th width="690" height="23" align="left" valign="middle" class="TituloMantenimiento" scope="col"><span class="TituloMantenimiento">DETALLE DE ESTADOS DEL PROYECTO </span></th> <tr><th height="1" ></th> </table> <table width="700" border="2" align="center" class="CampoLabel"> <tr> <th width="50" scope="col" align="justify" valign="middle" class="CampoLabel">Orden</th> <th width="150" scope="col" align="justify" valign="middle" class="CampoLabel">Área de Proyecto</th> <th width="300" scope="col" align="justify" valign="middle" class="CampoLabel">Descripción del Proyecto </th> <th width="180" scope="col" align="justify" valign="middle" class="CampoLabel">Estado del Proyecto </th> </tr> <% v_conexiones = l_dcw.consultarEstado(codigo2); for (int i=0; i<v_conexiones.size(); i++) { Estado obj_est = new Estado(); obj_est = (Estado)v_conexiones.elementAt(i); int pos= i+1; String descripcion_area = obj_est.getDescripcion_area(); String descripcion_proyecto = obj_est.getDescripcion_proyecto(); String estado = obj_est.getEstado(); Integer codigo=obj_est.getCodigo_proy(); %> <tr> <td class="CampoLabel"><%=pos%></td> <td class="CampoLabel"><%=descripcion_area%></td> <td class="CampoLabel"><%=descripcion_proyecto%></td> <td class="CampoLabel"><a href="javascript:valida(<%=codigo%>)"><%=estado%></a></td> </tr> <% } %> </table>
<html> <style type="text/css"> <!-- .style1 {font-size: 9} --> </style> <body class = "Mantenimiento"> <% // Obtiene el valor del estado String ls_codigo_estado=(String)session.getAttribute("code");
79
//String codigoUsuario=(String)request.getSession().getAttribute("codigoUsuario"); // Obtiene el código del líder String cod_lider = request.getParameter("cod_lider"); // Obtiene el código del Proyecto y lo transforma a Integer String cod = request.getParameter("codigo"); Integer ln_codigo_proyecto = new Integer(Integer.parseInt(cod)); StringBuffer lsbError = new StringBuffer(""); String lsError = ""; // Muestra por consola los valores que recibe la página // Nos asegura que se estén cargando los valores System.out.println("Valor Codigo: "+ln_codigo_proyecto); System.out.println("Valor Estado: "+ls_codigo_estado); System.out.println("Valor Codigo User: "+codigoUsuario); // Llama a la clase ProcesaEstado el cual llama al pck para realizar // el update de los estados del proyecto ProcesaEstado estado = new ProcesaEstado(pageContext); try { estado.procesaEstado(ln_codigo_proyecto, ls_codigo_estado, codigoUsuario, lsbError); lsError = lsbError.toString(); %> <script> window.open("../blanco.jsp","hd_resultado"); window.open("tabla_estado.jsp?cod="+<%=cod_lider%>, target="hd_resultado"); alert ("Estado Actualizado"); </script> <%} catch (Exception e) { //e.printStackTrace(); // no queremos mostrar la pila System.out.println("Error al actualizar el Estado del Proyecto: "+e); %> <script> alert("<%=e%>"); </script> <%} %> </body> </html>
Elaboración del Cronograma
En la elaboración del cronograma, existirán dos clases de
ingresos, cuando sea esta una actividad o sea esta un hito.
80
Hay algunas validaciones al momento de ingresar las fechas; la
fecha de tope minimo que se puede ingresar es la que no pase de
la fecha de inicialización del proyecto.
Si la actividad que se esta ingresando es un hito no es necesario
que le ponga fecha fin, ya que esta se actualizará cuando se
ingrese otro hito.
Al momento de ingresar una actvidad predecesora y si esta
actividad no esta en el proyecto; saltará un error el cual indicará
que la actividad que ingreso como predecesora no existe en el
proyecto.
<% // String ls_userApp = (String)session.getAttribute("codigoUsuarioLogin"); String ls_userApp = codigoUsuario; String ls_proyectos_crono= "select d.codigo_proyecto, d.nombre_proyecto " + "from gen_proyectos d " + "where d.codigo_estado ='AO' " + "order by d.codigo_proyecto" ; // se crea un objeto para poder llamar a todos los componentes que posea el DibujadorComponentesWeb DibujadorComponentesWeb l_dcw=new DibujadorComponentesWeb(pageContext); SimpleDateFormat l_df = new SimpleDateFormat("dd/MM/yyyy"); String band; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Cronograma Estimado del Proyecto</title> <link href="../estilos/estilo.css" rel="stylesheet" type="text/css"> <script> function inserta_cant(){ var cod_proy = document.cronograma.cmb_cron_proyectos.value;
81
if (cod_proy != null && cod_proy != ''){ /* Permite reducir la pantalla al tamaño deseado o especificado */ window.open('cantidad_recursos.jsp?cod='+cod_proy,'','width=370,height=230,menubar=no,scrollbars=no,toolbar=no,location=no,directories=no,resizable=no,top=250,left=350'); }else{ alert ("Seleccione un proyecto"); } } function cargar() { var codigo=document.cronograma.cmb_cron_proyectos.value; // captura el codigo del combo if (codigo != null && codigo != '' ) { var url1 = "detalle_cronograma.jsp?cod=" + codigo; // nuevo jsp en el que se dibujara la grid window.open(url1,target="hd_resultado"); // carga la pagina y ubica la inf. en la parte inferior de la misma window.open('cronograma2.jsp?ps_id_proyecto='+codigo,"topFrcro2"); }else{ alert('Debe escoger un Proyecto'); } } function barras() { var codigo=document.cronograma.cmb_cron_proyectos.value; // captura el codigo del combo if (codigo != null && codigo != ' ' ) { //alert (codigo); var url1 = "barras_cronograma.jsp?cod=" + codigo; // nuevo jsp en el que se dibujara la grid window.open(url1); // carga la pagina y ubica la inf. en la parte inferior de la misma }else { alert('Debe escoger un Proyecto'); } } function elimina(){ var cod_proy = document.cronograma.cmb_cron_proyectos.value; if (cod_proy != null && cod_proy != ''){ /* Permite reducir la pantalla al tamaño deseado o especificado */ window.open('elimina_cronograma.jsp?cod='+cod_proy,'','width=350,height=250,menubar=no,scrollbars=no,toolbar=no,location=no,directories=no,resizable=no,top=250,left=350'); }else{ alert ("Seleccione un proyecto"); } } function actualiza(){ var cod_proy = document.cronograma.cmb_cron_proyectos.value; if (cod_proy != null && cod_proy != ''){ /* Permite reducir la pantalla al tamaño deseado o especificado */ window.open('actualiza_cronograma.jsp?cod='+cod_proy,'','width=550,height=300,menubar=no,sc
82
rollbars=no,toolbar=no,location=no,directories=no,resizable=no,top=250,left=350'); }else{ alert ("Seleccione un proyecto"); } } </script> <link href="../estilos/hojaEstiloBlc.css" rel="stylesheet" type="text/css"> </head> <body class = "Mantenimiento"> <form name="cronograma" class="hover"> <table width="910" border="0" cellpadding="0" cellspacing="0"> <!--DWLayoutTable--> <tr> <td width="126" height="59"> </td> <td width="763"> </td> <td width="21"> </td> <!-- <td width="476"> </td> --> <!-- <td width="99"> </td>--> </tr> <tr> <td height="114"></td> <td valign="top"><table width="100%" border="0" cellpadding="0" cellspacing="0"> <!--DWLayoutTable--> <tr> <td width="748" height="103" valign="top"><table width="100%" border="0" cellpadding="0" cellspacing="0"> <!--DWLayoutTable--> <tr> <td height="22" colspan="9" align="left" valign="top" class="TituloMantenimiento">CRONOGRAMA</td> <td width="10"> </td> <td width="58"> </td> <td width="88"> </td> </tr> <tr> <td height="22" colspan="11" valign="top" class="MenuBanner"><!--DWLayoutEmptyCell--> </td> <td></td> </tr> <tr> <td width="133" height="1"></td> <td width="237"></td> <td width="21"></td> <td width="75"></td> <td width="9"></td> <td width="25"></td> <td width="30"></td> <td width="11"></td> <td width="35"></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="18"></td> <td></td> <td></td> <td></td> <td></td> <td colspan="3" valign="top" class="CampoLabel"><em>Fecha:</em></td> <td colspan="3" rowspan="2" align="left" valign="top"
83
class="CampoLabel"><em><%=l_df.format(new java.util.Date())%></em></td> <td></td> </tr> <tr> <td rowspan="2" align="left" valign="middle" class="CampoLabel">Líder SIS: </td> <td colspan="5" rowspan="2" align="left" valign="middle" class="UsuarioLogin"> <em><%=ls_userApp%></em></td> <td height="4"></td> <td></td> <td></td> </tr>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title> </title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> <style type="text/css"> <!-- .style1 {font-size: 9} --> </style> <link href="../estilos/hojaEstiloBlc.css" rel="stylesheet" type="text/css"> </head> <body class = "Mantenimiento"> <% int sec = 1; String resultado = null; String accion = request.getParameter("accion"); if ("add".equals(accion)) { //Añadir un linea Cronograma crono = new Cronograma(pageContext); resultado = crono.grabar_cronograma(request, response); pageContext.setAttribute("result", resultado); } Vector datos=new Vector(); Crono crono2 = new Crono(pageContext); datos=crono2.query_cronograma(request.getParameter("cod")); Cronograma cro=new Cronograma(); %> <form name="pagina" method="post" action="?accion=add" onsubmit="if (confirm('Esta seguro de guardar datos?')) return true; else return false;"> <% System.out.println("PARAMETRO DEL CODIGO DEL PROYECTO: " + request.getParameter("cod")); String cod= request.getParameter("cod");%> <input name="cod" type="hidden" value="<%=cod%>"/>
84
<table width="750" border="2" align="center" class="CampoLabel"> <tr> <th width="74" scope="col" align="justify" valign="middle" class="CampoLabel">Orden</th> <th width="300" scope="col" align="justify" valign="middle" class="CampoLabel">Actividad</th> <th width="46" scope="col" align="justify" valign="middle" class="CampoLabel" >Hito</th> <th width="67" scope="col" align="justify" valign="middle" class="CampoLabel" >Pred.</th> <th width="178" scope="col" align="justify" valign="middle" class="CampoLabel" >Fecha Inicio</th> <th width="166" scope="col" align="justify" valign="middle" class="CampoLabel" >Fecha Fin</th> <th width="41" scope="col" align="justify" valign="middle" class="CampoLabel" >Tiempo</th> <th width="100" scope="col" align="justify" valign="middle" class="CampoLabel" >Recurso</th> <th width="178" scope="col" align="justify" valign="middle" class="CampoLabel" >Observación</th> </tr> </table> <table width="750" border="2" align="center" cellpadding="0" cellspacing="0" class="CampoLabel" > <% for (int i=0; i<datos.size(); i++) { cro = (Cronograma)datos.elementAt(i); %> <tr> <!-- Aqui lleno un campo oculto tipo Array para tener los codigos Actividad q se presentan en la tabla --> <input name="cod_actividad[]" type="hidden" value="<%=cro.getCod_actividad()%>"/> <td height="19" colspan="2" align="center" valign="middle" class="CampoLabel"><input readonly= "readonly" name="orden<%=cro.getCod_actividad()%>" type="text" class="CampoLabel" size="4" value="<%=cro.getActividadProyecto() %>"/></td> <td align="center" valign="middle" class="CampoLabel"><input readonly= "readonly" name="actividad<%=cro.getCod_actividad() %>" type="text" class="CampoLabel" size="19" value="<%=cro.getActividad()%>"/></td> <td align="center" valign="middle"><input readonly= "readonly" name="hito<%=cro.getCod_actividad() %>" type="text" class="CampoLabel" size = "1" value="<%=cro.getLs_hito()%>"/></td> <td align="center" valign="middle" class="CampoLabel"><input readonly= "readonly" name="predecesora <%=cro.getCod_actividad() %>" type="text" class="CampoLabel" size="3" value="<%=cro.getPredecesora()%>"/></td> <td align="center" valign="middle" class="CampoLabel"><input readonly= "readonly" name="fecha_inicio<%=cro.getCod_actividad() %>" type="text" class="CampoLabel" size="10" value="<%=cro.getFechaInicio()%>" /></td> <td align="center" valign="middle" class="CampoLabel"><input readonly= "readonly" name="fecha_fin <%=cro.getCod_actividad() %>" type="text" class="CampoLabel" size="9" value="<%=cro.getFechaFin()%>"/></td> <td align="center" valign="middle" class="CampoLabel"><input readonly= "readonly" name="tiempo <%=cro.getCod_actividad() %>" type="text" class="CampoLabel" size="3" value="<%=cro.getTiempo()%>"/></td> <td align="center" valign="middle" class="CampoLabel"><input readonly= "readonly" name="recurso <%=cro.getCod_actividad() %>" type="text" class="CampoLabel" size="7" value="<%=cro.getRecurso()%>"/></td> <td align="center" valign="middle" class="CampoLabel"><input readonly= "readonly"
85
name="observacion <%=cro.getCod_actividad() %>" type="text" class="CampoLabel" size="14" value="<%=cro.getObservacion()%>"/> </td> </tr> <% sec = (Integer.parseInt(cro.getActividadProyecto()))+1; System.out.println("Valor sec= " + sec); } %> <tr> <td height="19" colspan="2" align="center" valign="middle" class="CampoLabel"><input name="orden" readonly="readonly" type="text" class="CampoLabel" size="4" value="<%=sec++%>"/></td> <td align="center" valign="middle" class="CampoLabel" ><input name="actividad" type="text" class="CampoLabel" size="19" value=""/></td> <td align="center" valign="middle" ><input name="hito" type="text" class="CampoLabel" size="1" value=""/></td> <td align="center" valign="middle" class="CampoLabel" ><input name="predecesora" type="text" class="CampoLabel" size="3" value=""/></td> <td align="center" valign="middle" class="CampoLabel" ><input name="fecha_inicio" type="text" class="CampoLabel" size="10" value=""/></td> <td align="center" valign="middle" class="CampoLabel" ><input name="fecha_fin" type="text" class="CampoLabel" size="9" value=""/></td> <td align="center" valign="middle" class="CampoLabel" ><input name="tiempo" type="text" class="CampoLabel" size="3" value=""/></td> <td align="center" valign="middle" class="CampoLabel" ><input name="recurso" type="text" class="CampoLabel" size="7" value=""/></td> <td align="center" valign="middle" class="CampoLabel" ><input name="observacion" type="text" class="CampoLabel" size="14" value=""/></td> </tr> </table> <br> <table width="82" align="center" > <!--DWLayoutTable--> <tr> <td height="22"><input valign="middle" name="b_guardar" type=submit class="UsuarioLogin" value="Guardar"/></td> <td width="1"> </td> </tr> </table> <script type="text/javascript"> window.open('cronograma2.jsp?ps_id_proyecto='+ <%=request.getParameter("cod")%>,"topFrcro2"); </script> </form> <script type="text/javascript"> var msg_presentacion='<%=pageContext.getAttribute("result") %>'; if (msg_presentacion!='null') { alert(msg_presentacion); } </script> </body> </html>
86
Barras del Cronograma
Para presenter la interfaz que muestre las barras de las
actividades solo recibe por medio de URL el codigo del proyecto,
este método realiza un barrido a la base para retornar las
actividades del proyecto que ingreso y el tiempo en días.
<%@ include file="/WEB-INF/include.jsp"%> <% String ls_userApp="select user from dual"; String ls_actividad; // para las actividades String ls_fecha_ini_act; String ls_fecha_fin_act; String ls_nombre; // Datos para obtener las actividades BarrasCronograma barras_act = new BarrasCronograma(pageContext); BarrasCronograma barras_act2 = new BarrasCronograma(pageContext); int ln_tiempo; String proyecto = request.getParameter("cod"); System.out.println("codigo del proyecto en las barras: " + proyecto); Vector v_barras_act = barras_act.query_actividades(proyecto); %> <script> //window.close("barras_cronograma.jsp"); </script> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Gráfico de Actividades del Proyecto</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <script type="text/JavaScript"> //--> function salir(){ window.close(); } //--> </script>
87
Definición de Tipo de Proyecto
Esta definición es de gran ayuda para el módulo de reporteria ya
que ellos visualizan el tipo que pertenece el proyecto en curso.
function cargar() { var codigo_proy=document.definicion.cmb_proy.value; // captura el codigo del combo if (codigo_proy != null && codigo_proy != '') { var url1 = "tabla_tipoProyecto.jsp?codProy="+codigo_proy; window.open(url1,target="hd_resultado"); // carga la pagina y ubica la inf. en la parte inferior de la misma } } function valida() { var codigo_tipo=document.definicion.cmb_tipoProy.value; if (codigo_tipo != null && codigo_tipo != '') { var url2 = "define_tipoProyecto.jsp?code_tipo="+codigo_tipo; // nuevo jsp en el que se dibujara la grid document.definicion.action=url2; document.definicion.target="_self"; document.definicion.method="get"; document.definicion.submit(); } } function MM_goToURL() { //v3.0 var i, args=MM_goToURL.arguments; document.MM_returnValue = false; for (i=0; i<(args.length-1); i+=2) eval(args[i]+".location='"+args[i+1]+"'"); } //--> </script> <link href="../estilos/hojaEstilo.css" rel="stylesheet" type="text/css"> </head> <body class = "Mantenimiento"> <form name="definicion" class="hover"> <table width="881" border="0" cellpadding="0" cellspacing="0"> <!--DWLayoutTable--> <tr> <td width="127" height="66"> </td> <td width="720"> </td> <td width="34"> </td> </tr> <tr> <td height="163"></td> <td valign="top"><table width="100%" border="0" cellpadding="0" cellspacing="0"> <!--DWLayoutTable--> <tr> <td width="309" height="21" align="left" valign="middle" class="TituloMantenimiento">DEFINICIONES DEL PROYECTO</td> <td width="393"> </td> <td width="18"> </td> </tr> <tr>
88
<td height="21" colspan="2" align="left" valign="middle" class="MenuBanner"><!--DWLayoutEmptyCell--> </td> <td></td> </tr> <tr> <td height="8"></td> <td></td> <td></td> </tr> <tr> <td height="108" colspan="2" valign="top"><table width="100%" border="0" cellpadding="0" cellspacing="0" class="CampoLabel"> <!--DWLayoutTable--> <tr> <td width="71" height="21"></td> <td width="145"></td> <td width="9"></td> <td width="32"></td> <td width="18"></td> <td width="39"></td> <td width="370"></td> </tr> <tr> <td height="22" colspan="2" align="left" valign="middle" class="CampoLabel"> Proyecto: </td> <td> </td> <td align="left" valign="middle" class="CampoLabel"> <%=l_dcw.crearComboT(ls_queryPro,"cmb_proy", "cargar")%></td> <td> </td> <td> </td> <td> </td> </tr> <tr> <td height="26" colspan="2" align="left" valign="middle" class="CampoLabel">Tipo de Proyecto:</td> <td> </td> <td align="left" valign="middle" class="CampoLabel"> <%=l_dcw.crearCombo(ls_queryTipo,"cmb_tipoProy")%></td> <td> </td> <td align="left" valign="middle" class="CampoLabel"> <input name="b_select" type="button" class="UsuarioLogin" id="b_select" value="Ok" onClick="valida()"></td> <td> </td> </tr> <tr> <td height="4"></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="26" align="left" valign="middle" class="CampoLabel"><input name="b_regresar" type="submit" class="UsuarioLogin" id="b_regresar" onClick="MM_goToURL('parent','../frame.jsp');return document.MM_returnValue" value="Regresar"></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="14"></td>
89
<td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr>
<head> <title> </title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> <link href="../estilos/estilo.css" rel="stylesheet" type="text/css"> <style type="text/css"> <!-- .style1 {font-size: 9} --> </style> <script> // función que obtiene el código de líder function valida(codigo) { var cod_Proyecto=codigo; var cod_Proy=document.detalle.cod_Proy.value; var url2 = "define_tipo.jsp?codigo="+cod_Proyecto+"&cod_Proy="+cod_Proy; window.open(url2,target="hd_limpiar"); } </script> <link href="../estilos/hojaEstiloBlc.css" rel="stylesheet" type="text/css"> </head> <% // se crea un objeto para poder llamar a todos los componentes que posea el DibujadorComponentesWeb DibujadorComponentesWeb l_dcw = new DibujadorComponentesWeb(pageContext); Vector v_conexiones = new Vector(); String codProyecto =request.getParameter("codProy"); // recibe parámetro de la pantalla estados.jsp %> <body class = "Mantenimiento"> <FORM id="detalle_tipo" name="detalle" method="post"> <input type="hidden" name="cod_Proy" value=<%=codProyecto%>> <table width="650" align="center" class="CampoLabel"> <!--DWLayoutTable--> <tr> <th width="640" height="23" align="left" valign="middle" class="TituloMantenimiento" scope="col" ><span class="TextoEnDefault">DETALLE DE TIPOS DE PROYECTOS</span></th> <tr><th height="5" ></th> </table> <table width="650" border="2" align="center" class="CampoLabel">
90
<tr> <th width="50" align="center" valign="middle" class="CampoLabel" scope="col" >Orden</th> <th width="280" scope="col" align="center" valign="middle" class="CampoLabel" >Descripción del Proyecto </th> <th width="120" scope="col" align="center" valign="middle" class="CampoLabel" >Tipo de Proyecto </th> </tr> <% v_conexiones = l_dcw.consultarTipoProyecto(codProyecto); for (int i=0; i<v_conexiones.size(); i++) { DefineProyecto tipo = new DefineProyecto(); tipo = (DefineProyecto)v_conexiones.elementAt(i); int pos= i+1; String descripcionProyecto = tipo.getDescripcionProyecto(); String descripcionTipo = tipo.getDescripcionTipo(); if (descripcionTipo == null) { descripcionTipo ="No definido"; } Integer codigo=tipo.getCodigo_proy(); %> <tr> <td class="CampoLabel"><%=pos%></td> <td class="CampoLabel"><%=descripcionProyecto%></td> <td class="CampoLabel"><a href="javascript:valida(<%=codigo%>)"><%=descripcionTipo%></a></td> </tr> <% } %> </table> </FORM> </body> </html>
<link href="../estilos/estilo.css" rel="stylesheet" type="text/css"> <%@ include file="/WEB-INF/include.jsp"%> <style type="text/css"> <!-- .style1 {font-size: 9} --> </style> <body class = "Mantenimiento"> <% // Obtiene el valor del tipo de proyecto y lo transforma a Integer // Se lo enviará al pck para que actualice el tipo de proyecto String tipo_proy = (String)session.getAttribute("code_tipo"); Integer ln_tipo_proyecto = new Integer (Integer.parseInt(tipo_proy)); // Obtiene el valor del proyecto y lo transforma a Integer // se lo enviará al pck para que se asigne el tipo de proyecto String cod_Proyecto = request.getParameter("codigo"); Integer ln_codigo = new Integer (Integer.parseInt(cod_Proyecto));
91
// Obtiene el valor del proyecto y lo envía al jsp tabla_tipoProyecto // para que se actualicen los resultados String cod_Proy = request.getParameter("cod_Proy"); StringBuffer lsbError = new StringBuffer(""); String lsError = ""; // Muestra por consola los valores que recibe la página // Nos asegura que se estén cargando los valores System.out.println("Valor Codigo Proyecto que recibe el pck : "+ln_codigo); System.out.println("Valor Codigo Proyecto que se recibe : "+cod_Proy); System.out.println("Valor Tipo Proyecto que recibe el pck : "+ln_tipo_proyecto); // Llama a la clase DefineTipoProyecto el cual llama al pck para realizar // el update de los tipos de proyecto DefineTipoProyecto defineProyecto = new DefineTipoProyecto(pageContext); try { defineProyecto.defineTipo(ln_codigo, ln_tipo_proyecto, lsbError); lsError = lsbError.toString(); %> <script> window.open("../blanco.jsp",target="hd_resultado"); window.open("tabla_tipoProyecto.jsp?codProy="+<%=cod_Proy%>, target="hd_resultado"); alert("Tipo de Proyecto Definido"); </script> <%} catch (Exception e) { //e.printStackTrace(); // no queremos mostrar la pila System.out.println("Error al actualizar el Tipo de Proyecto => define_tipo.jsp: "+e); %> <script> alert("<%=e%>"); </script> <%} %> </body> </html>
92
Recursos Informáticos:
Al igual que la asignación de recurso humano, se deberá escoger
de una lista los recursos necesarios para el desarrollo del
proyecto; de no haber stock se emitirá una solicitud para la
adquisición de la misma, al momento de aprobar dicha solicitud el
módulo realizará la asignación de manera transparente para el
usuario.
<%@ page language="java" %>
<%@ page import="project.pojo.GrabaRecurso"%> <%@ include file="/WEB-INF/include.jsp"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html> <style type="text/css">
<!--
.style1 {font-size: 9} -->
</style>
<body class = "Mantenimiento"> <%
// Id del proyecto
String ls_codigo_proyecto=request.getParameter("pid_proyecto");
// Los proyectos seleccionados
String trama = request.getParameter("trama");
StringBuffer lsbError = new StringBuffer("");
String lsError = ""; // Muestra por consola los valores que recibe la página
// Nos asegura que se estén cargando los valores
System.out.println("Valor Codigo: "+ls_codigo_proyecto); System.out.println("Trama : "+trama);
//System.out.println("Cantidad RRHH: "+cant_ri);
// Llama a la clase ProcesaEstado el cual llama al pck para realizar
// el update de los estados del proyecto GrabaRecurso recInf = new GrabaRecurso(pageContext);
try
{ recInf.inserta_hardware(ls_codigo_proyecto,trama,lsbError);
//recInf.asignar_rrinfor (ls_codigo_proyecto,trama,cant_ri,lsbError);
lsError = lsbError.toString(); %>
<%}
catch (Exception e) {
//e.printStackTrace(); // no queremos mostrar la pila
System.out.println("Error al asignar recursos informáticos al Proyecto: "+e); %>
<%}
93
MANUAL DE USUARIO
El presente manual de usuario tiene como objetivo proporcionar una guía del
Aplicativo 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 la Aplicación.
1 MANUAL PARA EL GERENTE DE SISTEMAS
1.1. Asignación Líder de Sistemas – Líder SIS
Para proceder a la asignación del Líder SIS se debe acceder a la
pantalla Asigna Líder SIS la misma permitirá asignar al líder que
se encargará de llevar a cabo el proyecto.
Para ello se debe seleccionar el Área del Proyecto, allí se listarán
los proyectos que se tienen en dicha área, luego se deberá
escoger mediante un combo el nombre del Líder a quién se le
designará un proyecto determinado presionando el botón OK.
Botón mediante el cual se escoge el líder
94
Una vez que se haya presionado el botón OK se deberá dar clic
en la leyenda que dice No Asignado el cual indica que para ese
proyecto no se encuentra asignado un Líder, después de haber
dado clic en el globito que se indica en la figura, se habrá
asignado el Líder al proyecto seleccionado.
1.2. Consulta del Líder de Proyectos
Para proceder a la consulta del Líder de Proyectos, es decir, el
Gerente del Requerimiento, se debe acceder a la pantalla
Consulta Líder Proyectos, la misma permitirá consultar al líder de
Proyectos que originó el requerimiento.
Link que permitirá asignar al líder.
95
Para ello se debe seleccionar el Área del Proyecto, allí se listarán
los proyectos que se tienen en dicha área y el responsable de
haber generado dicho requerimiento.
1.3. Configuración de Cantidad Máxima Proyectos
Para proceder a la configuración se debe acceder a la pantalla
Configuraciones Generales, la misma permitirá definir la cantidad
máxima de proyectos que le será asignado al líder SIS.
La pantalla es la siguiente:
Responsable Req.
96
1.4. Estados del Proyecto
Para proceder a la actualización de los Estados del Proyecto se
debe acceder a la pantalla Estados del Proyecto, la misma
permitirá definir el estado actual del Proyecto. La pantalla es la
siguiente:
Campo donde se ingresará cantidad máxima de proyectos
97
Primero se deberá escoger el Líder SIS del Proyecto, como
resultado de esta selección se listarán los proyectos que el líder
tiene asignado.
Luego se deberá escoger en el combo el Estado a cambiar y
presionando el botón OK indicará que aceptará dicha selección.
Luego se deberá dar clic sobre el hipervínculo para aceptar
dicho cambio de estado.
1.5. Plan Técnico del Proyecto
Para proceder a la aceptación del Plan Técnico del Proyecto se
debe acceder a la pantalla Aprobaciones del Plan Técnico, la
misma permitirá definir el estado del Documento que puede ser:
Botón para seleccionar el Estado
98
Documento Aprobado
Documento sin Aprobar
La pantalla es la siguiente:
Primero se deberá escoger el Código del Proyecto, como
resultado de esta selección se listará el proyecto y el estado del
documento.
Luego se deberá escoger en el combo el Estado del Plan Técnico
el estado a cambiar y presionando el botón OK indicará que
aceptará dicha selección.
99
Luego se deberá dar clic sobre el hipervínculo para aceptar dicho
cambio de estado.
1.6. Reportes
1.6.1. Reporte de Estados del Proyecto
Para proceder al reporte de Estados del proyecto se deberá
acceder a la pantalla Reporte de Estados del Proyecto, en primer
lugar se deberá escoger el estado deseado con el cual se listarán
los proyectos.
Botón para seleccionar el Estado
Link
Combo de estados del proyecto
Listado de proyectos
100
1.6.2. Reporte de Líderes SIS
Esta sección permitirá consultar los líderes que se encuentran
asignados a proyectos de Sistemas.
Para proceder al reporte de Líderes SIS se deberá acceder a la
pantalla Reporte de Proyectos Asignados al Líder, en primer lugar
se deberá escoger el Líder SIS del Proyecto deseado con el cual
se listarán los proyectos que le fueron asignados.
Proyectos Asignados
101
1.6.3. Reporte de Actividades del Proyecto
Esta sección permitirá consultar las actividades que se llevarán a
cabo dentro de un proyecto (Cronograma de actividades).
Para proceder al reporte de Actividades se deberá acceder a la
pantalla Reporte de Actividades del Proyecto, en primer lugar se
deberá escoger el Código y Nombre del Proyecto, mediante ello
se listarán las actividades correspondientes al proyecto y que se
llevarán a cabo por los Ingenieros en Sistemas.
Listado de Proyectos
Actividades del Proyecto
102
2 MANUAL PARA EL LIDER SIS
2.1. Definiciones del Proyecto
Para proceder a la definición del Proyecto se debe acceder a la
Interfaz Definiciones del Proyecto, la misma permitirá realizar la
definición de un Proyecto.
Para proceder a la Interfaz de Definiciones del Proyecto se debe
acceder por medio del link Definir Tipo de Proyecto desde el menú
principal.
En el primer combo se seleccionará el nombre del proyecto o
todos como resultado de esta selección se listarán los proyectos y
el tipo de proyecto.
Luego se deberá escoger el tipo de Proyecto accionando el botón
OK mediante el cual se obtendrá el Tipo del proyecto,
Luego se deberá dar clic sobre el hipervínculo para poder
asignarle el tipo de Proyecto y automáticamente se actualiza el
Tipo de Proyecto.
103
2.2. Cronograma
Para proceder a la Elaboración del Cronograma para un proyecto
se debe acceder a la Interfaz Cronograma, la misma que realiza la
elaboración del cronograma Inicial del proyecto.
Para proceder a la Interfaz de Elaboración de Cronograma se
debe acceder por medio del link de Cronograma de actividades
desde el menú principal.
En la Interfaz se debe seleccionar el nombre del proyecto
automáticamente se genera un listado de todas las actividades
que tenga el proyecto, y un registro adicional donde se ingresara
Link
Botón Seleccionar
el Tipo de Proyecto
104
una actividad del cronograma, luego se hace clic en el botón
guardar para ingresar una actividad al proyecto.
En la parte Detalle de Actividades se obtiene el tiempo y la
cantidad de los recursos; cada vez que se ingrese una actividad
nueva se actualizará el campo del tiempo total del proyecto.
Al momento de hacer clic en el botón Actualizar, se genera
automáticamente una ventana donde permitirá actualizar una
determinada actividad del proyecto seleccionado.
105
Al momento de hacer clic en el botón Eliminar, se genera
automáticamente una ventana donde permitirá eliminar una
determinada actividad del proyecto seleccionado.
Al momento de hacer clic en el botón Barras, se genera
automáticamente una ventana donde mostrará a manera de
diagrama de barras, las actividades del proyecto.
106
Al momento de hacer clic en el botón RRHH, se genera
automáticamente una ventana donde se registra el número de
recursos humanos que se necesitan para el proyecto.
2.3. Asignación de Recurso Humano
Para proceder a la Asignación de Recurso Humano para un
proyecto se debe acceder a la Interfaz Asignación de Recurso
107
Humano, la misma que realizara una secuencia de procesos para
dicha asignación.
Para proceder a la Interfaz de Asignación de Recurso Humano se
debe acceder por medio del link de Recurso Humanos desde el
menú principal.
En la página Inicial se deberá seleccionar el Área específica o
todas las áreas, en el cual genera un listado de todos los
proyectos que están en el área seleccionada, luego se hace clic
en el link de descripción del Proyecto para seleccionar un
Proyecto.
Áreas de la Empresa
Link
108
Al momento de hacer clic en un proyecto especifico, se genera
una interfaz la cual obtendrá un listado de todos los conocimientos
que pueden poseer un recurso humano, se seleccionará todos los
conocimientos necesarios que requiere para el proyecto
seleccionado, máximo aceptado son de 4 conocimientos, se hace
clic en Aceptar.
Al momento de seleccionar todos los conocimientos en la interfaz
siguiente aparecerán todos los recursos humanos que coinciden
con los conocimientos seleccionados anteriormente los cuales se
podrán seleccionar a activa el check, y luego hacer clic en
Asignar.
Conocimientos para Seleccionar
109
Luego de haber seleccionado el participante para el proyecto,
pasa a realizar la definición de los recursos.
2.4. Definición de Recursos Informáticos
Antes de proceder a la Asignación de Recursos Informáticos para
un proyecto se debe definir los mismos que serán parte del
proyecto.
Mediante la cual se listarán los proyectos al cual se le definirán los
recursos sean estos Hardware o Software.
110
Luego de esto al seleccionar el Proyecto, se listarán los equipos /
software que podrían ser los posibles implementos a utilizarse en el
proyecto.
Luego que se hayan escogido los recursos informáticos, se tendrá
definido el recurso informático para su posterior asignación.
2.5. Asignación de Recursos Informáticos
Para proceder a la Asignación de Recursos Informáticos para un
proyecto se debe acceder a la Interfaz Asignación de Recursos
Informáticos, la misma que realizara una secuencia de procesos
para dicha asignación.
Para proceder a la Interfaz de Asignación de Recursos
Informáticos se debe acceder por medio del link de Recursos
Informáticos desde el menú principal.
111
En la página Inicial se deberá seleccionar el Área específica o
todas las áreas, mediante el cual se genera una interfaz que
indicará el tipo de asignación que se desee realizar, es decir,
Hardware o Software.
Al momento de hacer clic en determinado botón se desplegará
una pantallita por Hardware o Software, listando los recursos que
se encuentren disponibles para la respectiva asignación al
proyecto.
Áreas de la Empresa
112
2.6. Definición de Recursos Humanos Solicitados
En caso de que haya sido necesario adquirir Personal o Recurso
Humano para que colabore en un proyecto, este deberá ser
definido luego de su respectiva asignación.
113
2.7. Reportes
2.7.1. Reporte de Estados del Proyecto
Para proceder al reporte de Estados del proyecto se deberá
acceder a la pantalla Reporte de Estados del Proyecto, en primer
lugar se deberá escoger el estado deseado con el cual se listarán
los proyectos.
2.7.2. Reporte de Líderes SIS
Esta sección permitirá consultar los líderes que se encuentran
asignados a proyectos de Sistemas.
Para proceder al reporte de Líderes SIS se deberá acceder a la
pantalla Reporte de Proyectos Asignados al Líder, en primer lugar
Combo de estados del proyecto
Listado de proyectos
114
se deberá escoger el Líder SIS del Proyecto deseado con el cual
se listarán los proyectos que le fueron asignados.
2.7.3. Reporte de Actividades del Proyecto
Esta sección permitirá consultar las actividades que se llevarán a
cabo dentro de un proyecto (Cronograma de actividades).
Para proceder al reporte de Actividades se deberá acceder a la
pantalla Reporte de Actividades del Proyecto, en primer lugar se
deberá escoger el Código y Nombre del Proyecto, mediante ello
se listarán las actividades correspondientes al proyecto y que se
llevarán a cabo por los Ingenieros en Sistemas.
Proyectos Asignados
115
Listado de Proyectos
Actividades del Proyecto