Está en la página 1de 213

UNIVERSIDAD DE

GUAYAQUIL

Facultad de Ciencias

Matemáticas y Físicas

Carrera de Ingeniería en

Sistemas Computacionales
PROYECTO DE GRADO
Sistema De Aula Virtual
”Módulo De Inscripción del
Aula Virtual”
Previo a la Obtención del
Título de:
INGENIERO EN SISTEMAS
COMPUTACIONALES
Autores:
Asqui Yánez Gustavo
Misael
Sánchez Vásquez Wendy
Stalina
GUAYAQUIL - ECUADOR
Año: 2009
AGRADECIMIENTO

En primer lugar agradezco a mi


Dios Todopoderoso en quien
tengo toda mi
confianza, a quien debo lo que
soy, a mis amados padres
Blanca Yánez y César Asqui, a
mis hermanos y hermanas, a la
Familia Loor Cedeño, y a todos
aquellos que contribuyeron con
sus buenos deseos.

Gustavo Misael Asqui Yánez

A Dios por ser la luz que guía


mis pasos, a mis queridos
padres, a mi hermana y
hermano y a todos los que me
apoyaron con sus buenos
anhelos.
Wendy Stalina
Sánchez Vásquez
DEDICATORIA

A mi Bendito Dios que


siempre está junto a mí, a
mis entrañables padres, a la
memoria de mi amado
abuelito Luis Asqui a quien
aún recuerdo con lágrimas a
quien espero ver algún día en
el cielo.
Gustavo Misael Asqui Yánez

Dedico este trabajo a Dios y a


mis padres por su apoyo en
cada cosa que emprendo.
Wendy Stalina Sánchez
Vásquez
TRIBUNAL DE
GRADUACION

Presidente del Tribunal Primer Vocal

Segundo Vocal Secretario


DECLARACION EXPRESA

“La autoría del Proyecto de Grado

corresponde exclusivamente a los

suscritos, perteneciendo a la

universidad de Guayaquil los derechos

que generen la aplicación de la misma”

Gustavo Misael Asqui Yánez

Wendy Stalina Sánchez Vásquez

C.I. 0919017251

C.I. 0920644812
INDICE GENERAL

Pág. No.

AGRADECIMIENTO

II

DEDICATORIA

III

TRIBUNAL DE GRADUACIÓN

IV

DECLARACION EXPRESA

INDICE GENERAL

VI
INDICE GENERAL

1.1 Identificación: Conectarse al Sistema de Aula Virtual

CAPITULO 1

MANUAL DE USUARIO
1.2 Componentes del Sistema de Aula Virtual “Módulo de Inscripción de
Aula Virtual”
1.3 Opciones del Sistema de Aula Virtual “Módulo de Inscripción del
Aula Virtual”
1.3.1 Opciones a nivel de usuario Alumno
1.3.1.1 Registro: Alumno
1.3.2 Opciones a nivel de usuario Administrado
1.3.2.1 Registro: Administrador
1.3.2.2 Consultar o Actualizar
1.3.2.3 Nuevo
1.3.2.4 Pagos
1.3.2.5 Precio de tasa
1.3.2.6 Porcentaje Cuota
1.3.2.7 Reportes

CAPITULO 2
MANUAL TECNICO

2.1 Diagrama de Casos de Usos


2.1.1 Casos de Uso Registro de Materias
2.1.2 Caso de Uso Cambiar Paralelo
2.1.3 Casos de Uso Anular Materias
2.1.4 Caso de Uso Consultar Registro
2.1.5 Caso de uso crear paralelo
2.1.6 Caso de Uso Consultar Paralelo
2.1.7 Caso de uso Asignación de materia
2.1.8 Caso de uso Asignación Paralelo-materia
2.1.9 Caso de uso Actualización/Anulación de paralelo
2.1.10 Caso de uso Crear Categoría de tasa
2.1.11 Caso de uso Asignar Precio a tasa
2.1.12 Caso de uso Asignar Porcentaje a tasa
2.1.13 Caso de uso Actualiza precio de tasa
2.1.14 Caso de uso Generar Orden de pago
2.1.15 Caso de uso Asignación Profesor-Materia
2.1.16 Caso de uso Anula Asignación Profesor-Materia
2.2 Diagrama interacción de objetos
2.2.1 Caso de Uso: Registro de materias.
2.2.2 CASO DE USO: Cambiar Paralelo/Anular Materia
2.2.3 CASO DE USO: Consultar Registro
2.2.4 CASO DE USO: Crear Paralelo
2.2.5 CASO DE USO: Consultar Paralelo
2.2.6 CASO DE USO: Asignación de Materia

2.2.7CASO DE USO: Asignación Paralelo-Materia


2.2.8 CASO DE USO: Actualización/Anulación de paralelo
2.2.9 CASO DE USO: Crear Categoría de Tasa
2.2.10 CASO DE USO: Asignar Precio a tasa
2.2.11 CASO DE USO: Asignar Porcentaje a Tasa
2.2.12 CASO DE USO: Actualiza precio de Tasa
2.2.13 CASO DE USO: Generar Orden de Pago
2.2.14 CASO DE USO: Asignación Profesor _Materia
2.2.15 CASO DE USO: Anula asignación Profesor-Materia
2.3 Diagrama Entidad Relación
2.4 Estándares establecidos
2.4.1 Descripción del segmento de programa
2.4.2 Comentarios
2.4.3 Variables y Parámetros de entrada/salida
2.4.4 Organización visual
2.4.5 Funciones y Procedimientos
2.4.6 Nombres de objetos de módulos
2.5 Procedimiento para enviar mails con Oracle 10G
2.6 Configuración del archivo cgicmd
2.7 Scripts de Creación de Tablas del Sistema de Aula Virtual
“Modulo de Inscripción al Aula Virtual”
INDICE DE FIGURAS

Figura 1: Interfaz de Identificación de usuario


Figura 2: Interfaz de Inscripción a nivel de usuario Alumno
Figura 3: Barra de herramientas
Figura 4: Barra de herramientas opción Salir
Figura 5: Interfaz Inscripción de alumno nivel Administrador
Figura 6: Interfaz Correo electrónico de confirmación de inscripción
Figura 7: Interfaz Inscripción de alumno – Opción Reporte
Figura 8: Interfaz Reporte de Inscripción
Figura 9: Interfaz Mensaje de Alerta
Figura 10: Interfaz Consultar de registro
Figura 11: Interfaz Inscripción de Alumno usuario Administrador
Figura 12: Interfaz Consulta inscripción para actualizar
Figura 13: Interfaz Anular registro
Figura 14: Interfaz Cambiar de paralelo
Figura 15: Interfaz Actualizar Registro-Opción Reporte
Figura 16: Reporte de materias Inscritas
Figura 17: Reporte de Órdenes de pago Hoja1
Figura 18: Reporte de Órdenes de pago Hoja2
Figura 19: Interfaz Consulta Profesor-Asignación
Figura 20: Interfaz Parámetros
Figura 21: Interfaz Crear Paralelos
Figura 22: Interfaz Consulta Paralelos
Figura 23: Interfaz Materias Disponibles

Figura 24: Interfaz Materias Registradas


Figura 25: Interfaz Materias Registradas-Consulta por Malla
Figura 26: Interfaz Paralelo- Materia
Figura 27: Interfaz Consulta Materia por Paralelo-Anula Selección
Figura 28: Interfaz Consulta Materia por Paralelo-Anula Todo
Figura 29: Interfaz Consulta Materia por Paralelo-Modificar Cupos
Figura 30: Interfaz Modificar Paralelo-Materia
Figura 31: Interfaz Profesor-Asignación
Figura 32: Interfaz Periodo Lectivo
Figura 33: Interfaz Grabar Rubros por Alumno
Figura 34. Reporte Materias Inscritas
Figura 35: Ordenes de Pago Hoja1
Figura 36: Ordenes de Pago Hoja2
Figura 37: Ordenes de Pago masivas
Figura 38: Interfaz Crear Categoría Tasa
Figura 39: Interfaz Asignar Precio a Tasa
Figura 40: Interfaz Modificar Precio de tasa
Figura 41: Interfaz Asignar Porcentaje a Tasa
Figura 42: Interfaz Modificar Porcentaje de Tasa
Figura 43: Interfaz Actualizar Porcentaje de Tasa- Modificar
Figura 44: Interfaz Actualizar Porcentaje de Tasa- Anular
Figura 45: Interfaz Consultar Reportes
Figura 46: Reporte Alumnos de todos los paralelos
Figura 47: Reporte Alumnos Inscritos
Figura 48: Reporte Alumnos por Paralelo
Figura 49: Reporte Cupos por Paralelo- HTML
Figura 50: Reporte Cupos por Paralelo- pdf
Figura 51: Reporte Ordenes de Pago masiva- pdf
Figura 52: Casos de Uso Nivel 1
Figura 53: Casos de Uso Nivel 2
Figura 54: Diagrama Interacción de objetos: Registro de materias nivel
alumno
Figura 55: Diagrama Interacción de objetos: Registro de materias
nivel Administrador
Figura 56: Diagrama Interacción de objetos: Cambiar de
Paralelo/Anular Materia
Figura 57: Diagrama Interacción de objetos: Consultar Registro
Figura 58: Diagrama Interacción de objetos: Crear Paralelo
Figura 59: Diagrama Interacción de objetos: Consultar Paralelo
Figura 60: Diagrama Interacción de objetos: Asignación de materia
Figura 61: Diagrama Interacción de objetos: Asignación Paralelo -
Materia
Figura 62: Diagrama Interacción de objetos: Actualización /Anulación
de Paralelos
Figura 63: Diagrama Interacción de objetos: Crear categoría de tasa
Figura 64: Diagrama Interacción de objetos: Asignar Precio a tasa
Figura 65: Diagrama Interacción de objetos: Asignar Porcentaje a
cuota
Figura 66: Diagrama Interacción de objetos: Actualiza Precio de tasa
Figura 67: Diagrama Interacción de objetos: Generar orden de Pago
Figura 68: Diagrama Interacción de objetos: Asignación Profesor -
Materia
Figura 69: Diagrama Interacción de objetos Anula Asignación
Profesor-Materia
Figura 70: Diagrama Entidad-Relación
Figura 71: Permisos de ejecución

INDICE DE TABLAS

Tabla N° 1 Casos de Uso Registro de Materias


Tabla N° 2 Casos de Uso Registro de Materias Administrador
Tabla N° 3 Caso de Uso Cambiar Paralelo
Tabla N° 4 Casos de Uso Anular Materias
Tabla N° 5 Caso de Uso Consultar Registro
Tabla N° 6 Caso de uso crear paralelo
Tabla N° 7 Caso de Uso Consultar Paralelo
Tabla N° 8 Caso de uso Asignación de materia
Tabla N° 9 Caso de uso Asignación Paralelo-materia
Tabla N° 10 Caso de uso Actualización/Anulación de paralelo
Tabla N° 11 Caso de uso Crear Categoría de tasa
Tabla N° 12 Caso de uso Asignar Precio a tasa
Tabla N° 13 Caso de uso Asignar Porcentaje a tasa
Tabla N° 14 Caso de uso Actualiza precio de tasa
Tabla N° 15 Caso de uso Generar Orden de pago
Tabla N° 16 Caso de uso Asignación Profesor-Materia
Tabla N° 17 Caso de uso Anula Profesor-Materia
Tabla Nº 18 Identificación de Objetos
Tabla Nº 19 Identificación de variables y parámetros
Tabla Nº 20 Identificación de objetos de formularios
CAPITULO 1
MANUAL DE USUARIO

Este manual está dirigido a los usuarios

finales del Sistema de Aula Virtual “Módulo

de Inscripción del Aula Virtual” con el

objeto de facilitar el manejo de las

funciones que se pueden realizar en el

sistema.
2

Se detalla cada uno de los pasos a seguir para realizar la inscripción de un

alumno, crear y anular paralelos, asignar materias a paralelos, asignar a un

profesor las materias que dictará en el semestre.

Además, se podrán asignar un precio a una tasa, asignar el porcentaje que

se debe cobrar por una cuota, actualiza precios, generar las órdenes de pago

de los alumnos de manera individual o de forma masiva.

Todos los procesos detallados se realizan en base al período lectivo vigente.


3

1.1 Identificación: Conectarse al Sistema de Aula Virtual

Para ingresar al Sistema de Aula Virtual los usuarios deberán introducir

en la pantalla de identificación su usuario y contraseña los cuales son

otorgados por el personal de administración. Si por algún motivo los

datos no son correctos el sistema los volverá a pedir. Hacer clik en el

botón para ingresar al Sistema del Aula Virtual y si quiere cancelar el

acceso presionar el botón

Digite su usuario

Digite su contraseña

Figura 1: Interfaz de Identificación de usuario

Al completarse este proceso se visualizará la pantalla principal del

Sistema de Aula Virtual.


4

1.2 Componentes del Sistema de Aula Virtual “Módulo de Inscripción

del Aula Virtual”

Las áreas principales del sistema de Aula virtual son:

a.- Titulo, Nombre de usuario y su perfil

c.- Barra de herramientas


Figura 2: Interfaz de Inscripción a nivel de usuario Alumno

b.- Menú lateral d.- Visualización de pantallas

a. Título, Nombre de Usuario y perfil: Será permanente y aparecerá el

titulo de la opción seleccionada en el menú, además del nombre del

usuario y su perfil (Alumno, Administrador, Profesor).


5

b. Menú Lateral: Esta zona cambia de acuerdo al perfil del usuario que

ingresó al sistema de aula virtual. Aquí se presenta las acciones que

se pueden realizar en cada módulo del Sistema de Aula Virtual. Para

acceder a alguna de ellas hay que hacer doble click sobre el nombre

de la opción.

c. Barra de herramientas: En esta parte se ubican los iconos con las

acciones que puede realizar un usuario (Grabar, Eliminar, Salir,

Imprimir, ect.). Cabe mencionar que algunos pueden estar activos o

inactivos dependiendo de los permisos de un usuario.

Grabar Registro anterior

Imprimir Ultimo registro


buscar
Salir
Limpiar
Editar
Consultar registro
Limpiar Bloque
Insertar registro
Bloque anterior
Eliminar registro
Bloque siguiente
Lista
Primer registro
Ayuda
Siguiente registro
Figura 3: Barra de herramientas
6

d. Visualización de pantallas: En esta área se presentan las pantallas

correspondientes a cada opción del menú.

En todas las opciones, si deseamos salir de una pantalla del Aula Virtual

podemos hacer click en el botón salir o en el ícono

Salir

Figura 4: Barra de herramientas opción Salir

y cuando cancele una acción se presentará en pantalla el mensaje

“OPERACIÓN CANCELADA”
7

1.3 Opciones del Sistema de Aula Virtual “Módulo de Inscripción del

Aula Virtual”

Inscripción a la Carrera de Ingeniería en Sistemas Virtuales.

Existen dos formas para inscribirse como estudiante de la Carrera de

Ingeniería en Sistemas Computacionales. El primero es que un empleado

administrativo realice la inscripción previa autorización respectiva y el

segundo es que un alumno se inscriba en línea.

1.3.1 Opciones a nivel de usuario Alumno

A nivel de usuario Alumno se presenta en la parte izquierda de la pantalla

un menú con las siguientes opciones:

INSCRIPCION AULA

 REGISTRO

 ALUMNO

1.3.1.1 Registro: Alumno

En esta pantalla, el alumno deberá seleccionar mínimo una materia para

poder inscribirse, además puede escoger el módulo de Inglés y Carnet.

Para ello el usuario debe hacer click en la casilla correspondiente a la


8

materia en la cual desea inscribirse y seleccionar el paralelo respectivo.

Si desea inscribirse al modulo de Inglés o requiere un carnet estudiantil

marcar las casillas correspondientes.

Luego de realizar la selección, pulsar el botón GRABAR para

culminar con la inscripción. No se podrá continuar con el proceso de

inscripción si no eligió alguna materia.

2.- Si requiere, seleccionar


Módulo de Inglés y carnet
estudiantil

1.- Seleccionar materias en


las que desee inscribirse y
el paralelo

3.- Luego de seleccionar las


materias, pulsar GRABAR
para culminar la inscripción

Figura 5: Interfaz Inscripción de alumno nivel Administrador


9

Recibirá un correo electrónico de confirmación en el cual se detalla las

materias en las que se ha inscrito.

Figura 6: Interfaz Correo electrónico de confirmación de inscripción

Si necesita obtener un reporte de las materias en las cuales se ha

registrado o de las órdenes de pago generadas, debe escoger la opción

respectiva (INSCRIPCION, CUOTAS) en el bloque OPCIONES

REPORTE y seleccionar el formato de presentación (PDF, WEB), luego

debe hacer click en el botón REPORTE para poder visualizarlo.


10

1.-Seleccionar el tipo de reporte


2.- Seleccionar el formato en
el que desea que se visualice el
reporte
3.- pulsar REPORTE

Figura 7: Interfaz Inscripción de alumno – Opción Reporte

Figura 8: Interfaz Reporte de Inscripción


11

Si pulsa el botón antes de confirmar la inscripción se presentará una

pantalla de advertencia indicando que aun no se ha inscrito o que no

tiene órdenes de pago generadas.

Figura 9: Interfaz Mensaje de Alerta

Nota: Según el reglamento de matriculación de la Carrera de Ingeniería

en Sistemas si está repitiendo una materia por tercera vez sólo puede

inscribirse en máximo 4 materias.

1.3.2 Opciones a nivel de usuario Administrador

A nivel de usuario Administrador se presenta en la parte izquierda de la

pantalla un menú con las siguientes funciones.

INSCRIPCION AULA

 REGISTRO

 ADMINISTRADOR

 CONSULTAR O ACTUALIZAR

 REGISTRO

 MATERIA/S DE PROFESOR

 PARAMETROS
12

 NUEVO

 PARALELO

 MATERIAS POR PERIODO LECTIVO

 MATERIA POR PARALELO

 MATERIA/S A PROFESOR

 PERIODO LECTIVO

 PAGOS

 POR ALUMNO

 MASIVA

 TASA CATEGORIA

 PRECIO DE TASA

• NUEVO

• CONSULTA/ACTUALIZA

 PORCENTAJE DE CUOTA

• NUEVO

• CONSULTA/ACTUALIZA

 REPORTES

 CONSULTAR
13

Estas opciones solo estarán disponibles para usuarios definidos como

administradores.

1.3.2.1 Registro: Administrador

Presenta una pantalla en la cual un usuario Administrador podrá inscribir

a un alumno en el presente periodo lectivo.

El usuario puede inscribir a un alumno en el período de matricula

Ordinaria, Extraordinaria y si el alumno ha reprobado una materia por

tercera ocasión puede inscribirlo para rendir un examen de gracia.

Pasos para inscribir a un alumno:

1. Búsqueda de Alumno/s

a.- Matricula Ordinaria/Extraordinaria

En la parte superior de la pantalla está localizado un bloque para

realizar la búsqueda del registro de un estudiante; el usuario debe

seleccionar el criterio de búsqueda (Código, Cedula, Nombres).


14

En base a la selección realizada el administrador debe ingresar en los

campos correspondientes, el número de cedula, código estudiantil o

los nombres y apellidos del estudiante, luego debe hacer click en el

botón BUSCAR . y automáticamente se presenta en pantalla los

datos (CI., código estudiantil, nombre completo y categoría de alumno)

y las materias en las cuales el alumno seleccionado puede inscribirse.

b.- Consulta de alumnos que deben inscribirse para rendir un

Examen de Gracia

Si requiere inscribir a un alumno para rendir un examen de gracia

debe seleccionar la casilla y seguir el paso anterior para

realizar la búsqueda de un determinado estudiante.

Si el usuario no escogió una opción de búsqueda y no ingresó datos

en los campos correspondientes, entonces al hacer click en BUSCAR

se presentará en pantalla los datos de todos los estudiantes

ingresados en la base de datos.

Si selecciona el registro de un estudiante aparecerá automáticamente

en el bloques de Materias Curriculares y Materias Electivas, todas

las materias en las cuales el estudiante puede inscribirse.


15

Si al consultar el registro de un alumno no se visualizan datos en los

bloques de Materias disponibles significa que el alumno no tiene

materias disponibles para inscribirse, es decir ya se ha registrado en

todas las materia.


3.-Para finalizar la
consulta, Pulsar BUSCAR

Para inscribir a
un alumno en
un examen de
gracia, Primero
marcar la casilla
y luego seguir
los pasos 1-3

1.- Seleccionar un criterio 2.- Digitar datos requeridos de acuerdo


de búsqueda a la opción de consulta seleccionada

Figura 10: Interfaz Consulta de registro


16

2. Elegir materias

Seleccionar la/s materia/s y paralelo/s haciendo click en las casillas

correspondientes a las materias en las cuales el alumno desea

inscribirse.

Si el alumno quiere inscribirse al modulo de Inglés o necesita un

carnet estudiantil seleccionar las casillas respectivas

3. Confirmar Inscripción

Si inscribirá a un alumno por primera vez entonces hacer click en el

botón para concluir con la inscripción caso contrario hacer click en

la casilla AÑADIR MATERIA/S y luego en el botón para culminar

con la inscripción del alumno.

4. Enviar Correo electrónico

El usuario tiene la opción de enviar un mail de confirmación luego de

realizada la inscripción.
17

2.-Si requiere el alumno,


seleccionar Módulo de
Inglés y carnet
estudiantil

1.- Seleccionar la/s


materia/s y el paralelo
en el que inscribirá al
alumno seleccionado

3.- Luego de seleccionar el paralelo de


las materias, pulsar GRABAR para
culminar la inscripción.
4.-Si necesita enviar un mail con los
datos de la inscripción presionar el
botón MAIL

Figura 11: Interfaz Inscripción de Alumno usuario Administrador


18

1.3.2.2 Consultar o Actualizar

Registro

Presenta una pantalla en la cual el usuario puede consultar, modificar o

anular el registro de un alumno.

Consultar el registro de un alumno:

En la parte superior de la pantalla está localizado un bloque para realizar

la búsqueda del registro de un estudiante; el usuario debe seleccionar el

criterio de búsqueda (Código, Cedula, Nombres).

En base a la selección realizada el administrador debe ingresar en los

campos correspondientes el número de cedula, código estudiantil o los

nombres y apellidos del estudiante luego debe hacer click en el botón

BUSCAR y automáticamente se presenta en pantalla los datos (CI.,

código estudiantil, nombre completo y fecha de inscripción) y las materias

en las cuales el alumno seleccionado está registrado.

Si el usuario no escogió una opción de búsqueda y no ingresó datos en

los campos correspondientes, entonces al hacer click en BUSCAR

se presenta en pantalla los datos de todos los estudiantes inscritos en el

periodo lectivo vigente.


19

Si selecciona el registro de un estudiante aparecerá automáticamente en

el bloque de MATERIAS REGISTRADAS, todas las materias en las

cuales el estudiante está inscrito.

Figura 12: Interfaz Consulta inscripción para actualizar


20

Modificar

En la parte derecha de la pantalla está ubicado el recuadro

OPERACIONES en el cual el usuario puede seleccionar entre anular o

modificar un registro.

• Opción ANULACION: Al seleccionar esta opción el usuario podrá

anular el registro de una o más materias de un alumno o la

inscripción total.

• Opción CAMBIO PARALELO: Si el usuario selecciona esta opción

podrá cambiar de paralelo la inscripción de un alumno en una o más

materias.

En cualquiera de las dos opciones el usuario puede añadir o quitar la

inscripción al modulo de Inglés y el carnet estudiantil

Los pasos a seguir para realizar estas funciones se detallan a

continuación:
21

Opción ANULACION

1. Marcar la casilla correspondiente a la/s materia/s que quiere anular

y las casillas de carnet y/o el modulo de Ingles en caso de que el

alumno ya no los requiera.

2. Hacer click en el botón ANULAR MATERIA para concluir con la

anulación de la/s materia/as seleccionadas.

Para anular el registro de todas las materias de un alumno no es

necesario seleccionar las materias simplemente hay que hacer click

en el botón ANULAR REGISTRO


Muestra SI cuando el alumno seleccionado tiene
órdenes de pagos generadas, caso contrario
muestra la palabra NO

Números de alumnos 1.-Seleccionar la/s 2.- Realizada la


inscritos actualmente materia/s que será/n selección, pulsar
anulada/s ANULAR MATERIA
Figura 13: Interfaz Anular registro
22

Opción CAMBIAR PARALELO



1. Marcar la casilla correspondiente a la materia en la cual el alumno

desea cambiarse de paralelo.

2. Al marcar una casilla automáticamente se presenta una pantalla en la

cual debe seleccionar el nuevo paralelo. Sólo se presenta en pantalla

los paralelos con cupo disponible.

3. Hacer click en el botón CAMBIAR PARALELO para concluir con la

acción.

Números de alumnos
inscritos actualmente

1.- Marcar las casillas para


elegir el nuevo paralelo de 2.-pulsar CAMBIAR PARALELO
la materia seleccionada para confirmar la acción

Figura 14: Interfaz Cambiar de paralelo


23

Si necesita obtener un reporte de las materias en las que está registrado

el alumno seleccionado o de las órdenes de pago generadas debe

escoger la opción respectiva (INSCRIPCION, CUOTAS) en el bloque

OPCIONES REPORTE y seleccionar el formato de presentación (PDF,

WEB), luego debe hacer click en el botón REPORTE para visualizar el

reporte seleccionado.

1.- Seleccionar el
tipo de reporte y
el formato de
visualización

2.- Pulsar REPORTE


para visualizar el
reporte seleccionado

Figura 15: Interfaz Actualizar Registro-Opción Reporte


24

Figura 16: Reporte de materias Inscritas

Figura 17: Reporte de Órdenes de pago Hoja1


25

Figura 18: Reporte de Órdenes de pago Hoja2

Materias de Profesor

Presenta una pantalla que permite consultar y anular las materias

asignadas a un profesor.

Al seleccionar el registro correspondiente a un profesor automáticamente

se presenta en pantalla la/s materia/s que tiene asignada/s con su

respectiva sección y paralelo en el cual serán dictadas dichas materias.

Para anular una asignación de materia marcar la casilla correspondiente

y pulsar el botón ANULAR. Si desea anular todas las asignaciones


26

marcar la primera casilla ubicada en la parte superior derecha del bloque

de materias Asignadas y luego presionar ANULAR

1.- Seleccionar
el registro de un
profesor.

Marcar esta casilla


para seleccionar todas
las materias

2.- Seleccionar
las materias que
serán anuladas

Figura 19: Interfaz Consulta Profesor-Asignación 3.-Pulsar ANULAR, para


anular la asignación de las
materias seleccionadas
27

Parámetros

Esta pantalla permite consultar y modificar los valores parámetros

establecidos en la aplicación Sistema Aula Virtual “Módulo de Inscripción”

Tales como números de materias que un alumno puede ver por primera

vez, el número máximo de órdenes de pago que se pueden generar por

alumno, el número de veces que se puede inscribir a un alumno, etc.

Ingresar el nuevo valor del parámetro en el campo “VALOR” y hacer

click en MODIFICAR para confirmar la actualización.

Figura 20: Interfaz Parámetros


28

1.3.2.3 Nuevo

Paralelo

Presenta una pantalla en la cual el usuario puede crear paralelos para un

determinado nivel o semestre en el presente período lectivo.

Los pasos a seguir para asignar un paralelo al periodo lectivo vigente se

detallan a continuación:

1. Seleccionar un nivel (0 á 9) en el campo NIVEL ubicado en la parte

superior derecha de la pantalla.

Después de elegir un semestre se presenta en pantalla:

• En el bloque PARALELOS DISPONIBLES ubicado en el lado

izquierdo de la pantalla, los paralelos que aún no han sido

creados en dicho nivel, además, las secciones (Matutina,

Vespertina, Nocturna, Ninguna) por cada paralelo disponible.

• En el bloque PARALELO/S CREADO/S, ubicado en el lado

derecho de la pantalla, los paralelos con su respectiva sección

que están actualmente asignados al nivel seleccionado


29

2. Marcar la/s casilla/s correspondiente/s √ a la descripción del o los

paralelos que necesita asignar al nivel seleccionado y escoger una

sección por cada paralelo.

3. Hacer click en para concluir con la creación de paralelos. Cabe

mencionar que luego confirmar la creación de paralelos en el nivel

seleccionado, automáticamente aparece en el bloque de Paralelos

creados el o los nuevos paralelos.

1.- Seleccionar
un nivel

Nuevos paralelos
creados

Marcar esta casilla para


seleccionar todos los Para consultar los
paralelos. paralelos creados
y actualizar su
sección, pulsar
2.- Dar click en las CONSULTAR
casillas de los paralelos
que serán creados

3.- Pulsar GRABAR para confirmar la


creación de los paralelos seleccionados

Figura 21: Interfaz Crear Paralelos


30

4. Si necesita consultar los paralelos creados en el período lectivo

vigente y cambiar la sección de un determinado paralelo, pulsar el

botón CONSULTAR

Se presenta una pantalla en la cual puede consultar en el actual

período lectivo todos los paralelos creados u organizados por nivel o

sección.

Para consultar los paralelos creados, seleccionar el criterio de

búsqueda e ingresar los datos requeridos en el campo

correspondiente, luego hacer click en BUSCAR

Para cambiar de sección a un paralelo, marcar la casilla

correspondiente y seleccionar la nueva sección, luego hacer click en

ACTUALIZAR para confirmar la acción.


31

2.-Pulsar Buscar
para visualizar los
paralelos creados

1.-Seleccionar un
criterio de búsqueda

5.- Pulsar << para regresar a la


ventana de CREACION DE PARALELOS

3.- Marcar la casilla del


paralelo que desea
4.- Hacer click en ACTUALIZAR para actualizar y seleccionar
confirmar el cambio de sección. la nueva sección
Figura 22: Interfaz Consulta Paralelos
32

Materias por Periodo Lectivo

Pantalla que permite crear las materias que se dictaran en el presente

período lectivo.

Seleccionar una malla y un nivel para visualizar las materias que aún no

han sido asignadas al periodo lectivo vigente.

Luego, elegir la/s materia/s que serán creadas marcando las casillas

correspondientes y hacer click en para confirmar la asignación de

la/s materia/s.

2.-Elegir un nivel
1.-Seleccionar una malla

4.-Click en GRABAR
3.-Marcar las casillas de para concluir con la
las materias que serán creación de materias
creadas

Figura 23: Interfaz Materias Disponibles


33

Consulta materias registradas

Pantalla que permite consultar las materias asignadas al presente

período lectivo.

Para visualizar todas las materias registradas en el actual período lectivo

marcar la casilla y para consultar las materias organizadas

por malla y por semestre seleccionar una malla y un nivel en los campos

respectivos.

Consultar todas las materias

Figura 24: Interfaz Materias Registradas


34

Consultar todas las materias organizadas por malla y por nivel

Figura 25: Interfaz Materias Registradas-Consulta por Malla

Materias por Paralelo

Pantalla que permite asignar las materias que se dictarán en un

determinado paralelo con su correspondiente cupo mínimo y máximo de

alumnos permitidos por cada materia.

Para asignar una materia a un paralelo determinado estos deben estar

asignados al periodo lectivo vigente.

Seleccionar un semestre para visualizar los paralelos y las materias

disponibles.
35

Luego para asignar una materia a uno o varios paralelos, seleccionar el

o los paralelos, la/s materia/s e ingresar el cupo mínimo y máximo de

estudiantes permitidos por cada materia seleccionada.

Hacer click en para confirmar la asignación de materias

1.- Al seleccionar un nivel automáticamente se 4.-Dar click en GRABAR para confirmar

presenta en pantalla los paralelos y materias la creación de la/s materia/s en el/los

3.- Digitar el cupo mínimo y

máximo de estudiantes

Figura 26: Interfaz Paralelo- Materia

2.-Marcar la/s casilla/s para seleccionar

el o los paralelos y la/s materia/s que se


36

Consulta materia por paralelo

Pantalla que permite:

• Modificar el cupo mínimo y máximo de alumnos registrados en un


paralelo por materia.

• Anular una o varias materias asignadas a un paralelo (Cerrar una


materia)

• Anular todas las materias asignadas a un paralelo (Cerrar un


paralelo)

A continuación se detalla los pasos a seguir para realizar cada una de las

acciones descritas:

1. Seleccionar el nivel y el paralelo requerido, para visualizar las

materias asignadas a dicho paralelo con sus correspondientes cupos

máximo y mínimo de estudiantes permitidos, el número de estudiantes

actualmente inscritos y el cupo disponible.

2. Elegir una opción:

Anula Selección: Cerrar una materia en un paralelo

Seleccionar la/s materia/s que será/n anulada/s marcando la/s casilla/s

correspondiente/s, luego seleccionar el motivo por el cual será/n

anulada/s dicha/s materia/s y hacer click en el botón ANULA

SELECCIÓN para confirmar la acción.


37

5.-Click en ANULAR
SELECCIÓN para
1.-Seleccionar un nivel 2.-Elegir la opción
y un paralelo ANULA SELECCION confirmar la acción a

3.-Marcar las casillas


para seleccionar la/s
materia/s que serán
anuladas

Figura 27: Interfaz Consulta Materia por Paralelo-Anula Selección

4.-Hacer click en el botón


para seleccionar el motivo
por el cual anulará la/s
materia/s en el paralelo
seleccionado

Anula Todo: Cerrar un paralelo

Al elegir esta opción automáticamente se visualizan todas las materias

como elegidas por lo cual sólo debe seleccionar el motivo por el cual

se cerrará el paralelo y hacer click en el botón ANULA TODO para

confirmar la acción.
38

4.-Click en ANULAR
TODO para confirmar
1.-Seleccionar un nivel 2.-Elegir la opción la acción a realizar
y un paralelo ANULA TODO

Figura 28: Interfaz Consulta Materia por Paralelo-Anula Todo

3.-Hacer click en el botón


para seleccionar el motivo
por el cual se cerrará el
paralelo seleccionado

Modificar Cupo/s

Marcar la casilla correspondiente a la materia en la cual desea

actualizar el cupo mínimo y máximo de estudiantes permitidos en el

paralelo seleccionado.

Al seleccionar una materia se activan los campos C. MIN y C. MAX en

los cuales debe ingresar el nuevo cupo mínimo y máximo

respectivamente, luego debe seleccionar el motivo por el cual se


39

harán los cambios y hacer click en MODIFICAR CUPOS

SELECIONA.. para confirmar la actualización de cupos.

6.-Click en MODIFICAR
CUPOS SELECCIÓN…
1.-Seleccionar un nivel 2.-Elegir la opción para confirmar la acción a
y un paralelo MODIFICAR CUPOS realizar

3.-Marcar las casillas


para seleccionar la/s
materia/s en la/s que
se actualizará el cupo
mínimo o máximo

Figura 29: Interfaz Consulta Materia por Paralelo-Modificar Cupos


5.-Hacer click en el botón 4.-Ingresar el nuevo
para seleccionar el motivo
por el cual se actualizará el
cupo en el paralelo
seleccionado

Modificar Paralelo Materia

Pantalla que permite asignar las materias que se dictaran en un

determinado paralelo con su correspondiente cupo mínimo y máximo de

alumnos permitidos por cada materia.


40

Para asignar una materia a un paralelo determinado estos deben estar

asignados al periodo lectivo vigente.

Seleccionar un semestre y un paralelo para visualizar las materias que se

le pueden asignar. luego Hacer click en para confirmar la asignación

de materias.

Figura 30: Interfaz Modificar Paralelo.Materia

Materias a Profesor

Pantalla que permite asignar a un profesor las materias que dictará en el

presente periodo lectivo.


41

Elegir el registro de un profesor y hacer click en BUSCAR para visualizar

las materias que se pueden asignar a un profesor, Luego seleccionar las

materias marcado la casilla correspondiente y pulsar en para

confirmar la asignación de materias.

2.- Click en el botón BUSCAR para


consultar las materias que pueden
ser asignadas a un profesor

1.- Click en el botón para


seleccionar el nombre de
un profesor

4.- Pulsar GRABAR para concluir 3.- Seleccionar la/s materia/s que
la asignación de materias serán asignadas al profesor
seleccionado
Figura 31: Interfaz Profesor-Asignación

Período Lectivo

Esta pantalla permite crear un periodo lectivo, para ello ingresar los datos

solicitados y pulsar
42

Antes de confirmar la creación de un nuevo periodo lectivo se presenta

una ventana de advertencia en la cual indica que el periodo lectivo actual

se inactivará y ya no se podrá trabajar con dicho período.

Figura 32: Interfaz Periodo Lectivo

1.3.2.4 Pagos

Por Alumno

Muestra una pantalla en la cual el usuario puede generar las cuotas de

un determinado alumno.

Los pasos a seguir para generar las órdenes de pago correspondientes a

un alumno son:
43

1. Consultar registro de estudiante

En la parte superior de la pantalla está localizado un bloque para

realizar la búsqueda del registro de un estudiante; el usuario debe

seleccionar el criterio de búsqueda (Código, Cedula, Nombres).

En base a la selección realizada el administrador debe ingresar en los

campos correspondientes el número de cedula, código estudiantil o

los nombres y apellidos del estudiante luego debe hacer click en el

botón BUSCAR automáticamente se presenta en pantalla los

datos (CI., código estudiantil, nombre completo y fecha de inscripción)

y las materias en las cuales el alumno seleccionado está registrado.

Si el usuario no escogió una opción de búsqueda y no ingresó datos

en los campos correspondientes, entonces al hacer click en B se

presentará en pantalla los datos de todos los estudiantes inscritos en

el periodo lectivo vigente.

Si selecciona el registro de un estudiante aparecerá automáticamente

en el bloque de MATERIAS REGISTRADAS, todas las materias en

las cuales el estudiante está inscrito.


44

2. Confirmar acción

Hacer click en el botón GRABAR RUBROS para generar las órdenes

de pago del alumno seleccionado.

Si necesita anular las órdenes de pago generadas de un alumno

seleccionado, hacer click en ANULAR RUBROS

Figura 33: Interfaz Grabar Rubros por Alumno

Si necesita obtener un reporte de las materias inscritas de un alumno o

de las órdenes de pago generadas debe escoger la opción respectiva

(INSCRIPCION, CUOTAS) en el bloque OPCIONES REPORTE y

seleccionar el formato de presentación (PDF, WEB), luego debe hacer

click en el botón REPORTE para poder visualizarlo.


45

Figura 34. Reporte Materias Inscritas

Figura 35: Ordenes de Pago Hoja1


46

Figura 36: Ordenes de Pago Hoja2

Masiva

Muestra una pantalla en la cual el usuario puede generar órdenes de

pago de varias inscripciones de alumnos.

Los pasos a seguir para generar órdenes de pago en forma masiva son:

1. Consultar inscripciones

En la parte superior de la pantalla está localizado un bloque para

realizar la búsqueda de inscripciones realizadas entre dos fechas.

Seleccionar una fecha desde y una fecha hasta para visualizar todas

las inscripciones realizadas entre esas dos fechas.


47

2. Confirmar acción

Seleccionar una o varias inscripciones marcando las casillas

correspondientes y hacer click en el botón GENERAR ORDEN/S para

confirmar la creación de órdenes de pago.

2.-Pulsar BUSCAR para consultar las


1.-Seleccionar una fecha desde inscripciones realizadas entre las fechas
y una fecha hasta seleccionadas

Marcar la casilla para


seleccionar todas las
inscripciones consultadas

3.-Marcar la
casillas para
seleccionar las
inscripciones

4.-Click en GENERAR ORDENES para generar las


ordenes de pago correspondientes a las inscripciones
seleccionadas

NOTA: Si presionamos BUSCAR y no


hay alumnos inscritos en la fecha
seleccionada se presenta el siguiente
mensaje.

Figura 37: Interfaz Ordenes de Pago masivas


48

Tasa Categoría

Ventana que permite crear o modificar una categoría de tasa.

En el bloque Crear ubicado al lado izquierdo de la pantalla ingresar en el

campo “CATEGORIA TASA” la descripción de la nueva categoría de

tasa y pulsar GRABAR para concluir con la creación de la categoría.

Automáticamente se presenta en el bloque CONSULTAR la nueva

categoría de tasa.

En el bloque Consultar ubicado al lado derecho de la pantalla, podrá

consultar y modificar el estado (ACTIVO, ANULADO) de una categoría

Ingresar la nueva categoría


de tasa y pulsar GRABAR
Para actualizar el estado de
una categoría, seleccionar
un estado

Figura 38: Interfaz Crear Categoría Tasa


49

1.3.2.5 Precio de tasa

Nuevo

Pantalla que permite asignar el precio a una tasa por categoría de

alumno y por semestre.

En los campos respectivos seleccionar, la tasa a la cual se le asignará un

precio, la categoría de alumno y el semestre al que corresponderá el

precio creado y para culminar con la asignación de precio ingresar en el

campo “Precio” el valor a cobrar por la tasa seleccionada y luego hacer

click en

Figura 39: Interfaz Asignar Precio a Tasa


50

Consulta/Actualiza

Pantalla que permite actualizar el precio de una tasa.

Para consultar el precio de las tasas activas en el período lectivo vigente,

elegir un criterio de búsqueda y hacer click en BUSCAR.

Si requiere cambiar el precio de una tasa, digitar el nuevo precio en el

campo PRECIO y hacer click en el botón MODIFICAR.

Para anular el precio de una tasa, seleccionar el registro de la tasa y dar

click en QUITAR.

Figura 40: Interfaz Modificar Precio de tasa


51

1.3.2.6 Porcentaje Cuota

Nuevo

Pantalla que permite asignar el porcentaje del valor de una tasa que se

cobrará en una determinada cuota.

Ingresar un número de cuota (1-4), luego en el bloque Tasas

Disponibles seleccionar las tasas a las cuales le asignará un porcentaje.

Automáticamente dichas tasas se visualizan en el bloque Tasas

Elegidas en el cual debe ingresar el porcentaje en el campo %cuota.

También se puede seleccionar una tasa con los botones los

cuales permiten añadir o quitar un registro de tasa al bloque TASAS

SELECCIONAS

Para confirmar la acción hacer click en

Figura 41: Interfaz Asignar Porcentaje a Tasa


52

Consulta/Actualiza

Pantalla que permite anular una tasa o modificar el porcentaje del valor

de una tasa que se cobrará en una determinada cuota.

Para actualizar o anular una tasa, previamente debe consultar las tasas.

1. Consultar

En el bloque superior izquierdo de la pantalla seleccionar un criterio de

búsqueda. Si selecciona TODAS se visualizará en pantalla todas las

tasas activas conjuntamente con el número de cuota a la que pertenecen

y el porcentaje que se cobrará por dichas cuotas.

Si selecciona CUOTA N° debe ingresar en el campo respectivo un

número de cuota para visualizar las tasas asignadas al número de cuota

ingresada.

Hacer click en BUSCAR para concluir con la consulta de tasas.


53

Seleccionar un criterio de búsqueda


e ingresar el dato solicitado. Pulsar
BUSCAR para concluir con la
consulta

Figura 42: Interfaz Modificar Porcentaje de Tasa

2. Seleccionar una opción

Modificar

Seleccionar las tasas que serán modificadas marcando la casilla

correspondiente e ingresar el nuevo porcentaje que se cobrará por dicha

tasa en el número de cuota seleccionada. Para confirmar la actualización

del porcentaje hacer click en MODIFICAR PORCENTAJES.


54

Figura 43: Interfaz Actualizar Porcentaje de Tasa- Modificar

Anular

Seleccionar las tasas que serán anuladas marcando las casillas

correspondientes y hacer click en ANULAR SELECCIÓN para confirmar

la acción
55

Figura 44: Interfaz Actualizar Porcentaje de Tasa- Anular

1.3.2.7 Reportes

Consultar

Pantalla que presenta varias opciones de reportes los cuales puede

visualizarlos en formato PDF o HTML.

Los pasos a seguir para visualizar un reporte se detallan a continuación:

1. Elegir una opción

 Alumnos de todos los Paralelos: Presenta un reporte de todos

los alumnos inscritos, organizados por paralelo y por materia.


56

 Alumnos inscritos: Presenta un reporte de todos los alumnos

inscritos en el periodo lectivo vigente organizados en orden

alfabético.

 Alumnos por Paralelo: Presenta un reporte de los alumnos

inscritos en un determinado paralelo en el actual período lectivo.

 Cupos por Paralelo: Presenta un reporte en el cual se lista el cupo

disponible y ocupado por cada materia asignada a un determinado

paralelo.

 Cupos de Paralelo: Muestra en pantalla un reporte que lista el

cupo de alumnos disponible en cada paralelo organizados por

semestre y por materia.

 Órdenes de Pago Masiva: Presenta en pantalla un reporte de

todas las órdenes de pago generadas en el periodo lectivo actual.

Estas estarán ordenadas por nombre de alumno.

Luego de seleccionar las opciones ‘Alumnos por paralelo’ y ‘Cupos

por paralelo’, ingresar la descripción del paralelo que será consultado en

el campo PARALELO.

2. Seleccionar formato

Elegir un formato (PDF, WEB) para visualizar el reporte.


57

3. Presentar reporte

Hacer click en VER REPORTE para visualizar el reporte seleccionad

Figura 45: Interfaz Consultar Reportes


58

Figura 46: Reporte Alumnos de todos los paralelos

Figura 47: Reporte Alumnos Inscritos


59

Figura 48: Reporte Alumnos por Paralelo

Figura 49: Reporte Cupos por Paralelo- HTML


60

Figura 50: Reporte Cupos por Paralelo- pdf

Figura 51: Reporte Ordenes de Pago masiva- pdf


61

CAPITULO 2

MANUAL TECNICO

El presente manual se lo ha desarrollado

para orientar al administrador que vaya a

utilizar el sistema con la finalidad de que

pueda poner en funcionamiento el mismo,

se detallará las configuraciones necesarias

para poner en marcha el sistema de una

forma estructurada y así hacerle una tarea

más fácil.
62

2.1 Diagrama de Casos de Usos


El Diagrama de Casos de Uso va a representar gráficamente el
comportamiento de nuestro módulo.
Actores que intervienen en los Casos de Uso
Actores Principales:
Alumno: Es la persona que se va a inscribir en varias materias como
estudiante de la Carrera en la modalidad del Aula Virtual
Empleado Asistente Administrativo: Persona responsable de
formalizar la inscripción de un alumno, de hacer cambios de paralelo y de
la anulación de 1 o más materias.
Empleado-Administrador: Es la persona que administra el Sistema de
Aula Virtual

Actores Secundarios:

Objetos de datos (Tablas) de Módulo Pagos: De la cual haremos las

consultas necesarias para validar si un alumno tiene órdenes pendientes

de pago.

Objetos de datos (Tablas) de Módulo de Notas: Necesitamos consultar

el promedio y el estado de cada materia de un estudiante a fin de

analizar la fecha y que materia le toca cursar en el próximo periodo.


63

Objetos de datos (Tablas) de Módulo de Malla Curricular:

Necesitamos consultar las materias que componen las mallas

curriculares para validar las materias disponibles.

Nivel 1

SISTEMA AULA VIRTUAL MÓDULO DE INSCRIPCIÓN DEL AULA VIRTUAL

Registro de Materia
«extends»

«extends»
Consultas de
Registro

«extends»
Alumno Actualización de
Registro
«extends»

«extends»
Asignacion de
Materia
«extends»

«extends»
Creacion de
Paralelo
«extends»

«extends» Crear Categoria de


Tasa
Administrador
«extends»

«extends» Asignar Precio a


tasa
«extends»

«extends» Asignar Porcentaje


a tasa

«extends»

Actualiza Tasa

Generar Orden de
Pago

Asignacion
Prefesor_Materia

Anula asignacion
Profesor Materia

Figura 52: Casos de Uso Nivel 1


64

Nivel 2

SISTEMA AULA VIRTUAL:MÓDULO DE INSCRIPCIÓN DEL AULA VIRTUAL

Registro de Materia
«extends»

«extends»
Consultas de
Registro

«extends» Cambiar Paralelo


Alumno «extends» Actualización de
«extends»
Registro
«extends» Anular
Materia/Registro
«extends» Actualiza Cupo de
Asignacion de «uses» Paralelo
«uses»
Materia
«extends»
Asignacion de «uses»
«uses»
Materia a paralelo
«extends» Cierra
Creacion de
Materia-Paralelo
Paralelo
«extends»

«extends»
Crear Categoria de
Tasa
Administrador «extends»

«extends» Asignar Precio a


tasa
«extends»

«extends»
Asignar Porcentaje
a tasa
«extends»

Actualiza Precio
de Tasa
Generar Orden de
«uses» Pago por Alumno
Generar Orden de «uses»
Pago
Generar Orden de
Pago Masiva
Asignacion
Prefesor_Materia

Anula asignacion
Profesor Materia

Figura 53: Casos de Uso Nivel 2


65

2.1.1 Casos de Uso Registro de Materias

Nombre: Registro de Materias


Actor: Alumno
Le permite a un alumno inscribirse para cursar una o más
materias, si es que cuenta con los permisos necesarios. Esta
Descripción:
actividad debe ser realizada en un tiempo establecido.

Eventos
ACTOR Eventos SISTEMA
Flujo Principal: 1. Alumno selecciona 1. El sistema presenta el listado de materias
la/s materia/s y el disponibles (Curriculares, electivas y
paralelo en el que extracurriculares) por alumno y los paralelos con
desea inscribirse cupo disponible (mayor a 0), a partir de la fecha
establecida en el cronograma de inscripción. En
esta pantalla el alumno podrá elegir el paralelo
de la materia en la que desea registrarse, esta
selección se realizara para cada materia
disponible. Además el alumno/a podrá elegir si
desea carnet estudiantil e inscribirse en el curso
de Inglés

2. Alumno confirma la 3.- El sistema almacena la Información de


inscripción de materias Registro.
y finaliza el registro.
4.- El sistema actualiza el cupo disponible y
ocupado de cada paralelo implicado en la
3. Finalizada el registro inscripción.
de materias el alumno
tiene la opción de ver 5.- El Sistema envía un email de confirmación de
un reporte de las registro al alumno/a
materias en las que se
registrado. 6. El sistema muestra un reporte con cada una
de las materias, el número de vez y los paralelos
en los que se ha inscrito el alumno.

El Usuario debe estar logeado en el sistema.


El Alumno no debe tener deudas pendientes de pago
Tener actualizadas las calificaciones del periodo lectivo anterior.
Si el alumno va a primer semestre debe tener aprobado el pre-
Precondición: universitario y el curso de computación.
La opción de inscripción solo estará disponible durante el periodo de
Matriculación establecido por las respectivas autoridades de la
Carrera.

Pos condición: Alumno inscrito en la carrera.


Tabla 1 Casos de Uso Registro de Materias
66

Nombre: Registro de Materias


Actor: Administrador
Le permite al administrador inscribir a un alumno para cursar una
o más materias, si es que cuenta con los permisos necesarios.
Descripción:
Eventos ACTOR Eventos SISTEMA
Flujo Principal: 1. El administrador 1. El sistema presenta una pantalla
busca los datos del la cual permite al administrador
alumno que va a buscar los datos de un alumno y las
inscribir. materias que tiene disponible para
registrarse. Dicha búsqueda se
realiza por cedula, código estudiantil
y por apellidos y nombres. Esta
pantalla permite al administrador
elegir el paralelo de la materia en la
que desea registrar a un alumno y
seleccionar si el alumno quiere
carnet estudiantil o inscribirse en el
curso de Inglés.

2. El administrador 3.- El sistema almacena la


selecciona la/s Información de Registro.
materia/s y el
paralelo en que 4.- El sistema actualiza el cupo
registrará a un disponible y ocupado de cada
alumno. paralelo implicado en la inscripción.

3. Administrador 5.- El Sistema envía un email de


confirma la confirmación de registro al alumno/a
inscripción de
materias y finaliza el 6. El sistema muestra un reporte con
registro. cada una de las materias, el número
de vez y los paralelos en los que se
ha registrado a un alumno.
3. Finalizado el
registro de materias
el administrador tiene
la opción de ver un
reporte de las
materias en las que
ha registrado a un
alumno determinado.

El Administrador debe estar logeado en el sistema.


El Alumno no debe tener deudas pendientes de pago
El Alumno debe tener actualizadas las calificaciones del periodo
Precondición: lectivo anterior.
Si el alumno va a primer semestre debe tener aprobado el pre-
universitario y el curso de computación.
Tener autorización para registrar al alumno.
Pos condición: Alumno inscrito en la carrera.

Tabla N° 2 Casos de Uso Registro de Materias-Administrador


67

2.1.2 Caso de Uso Cambiar Paralelo

ELABORADO POR: Grupo 9 FECHA: /11/2008 Página: 1

Nombre:
Cambiar Paralelo
Actor:
Empleado-Administrador
Descripción: Proceso que permite hacer cambios de paralelos en una o más
materias

Eventos ACTOR Eventos SISTEMA


1. El Usuario accede al 1. El Sistema presenta una pantalla en la
registro del alumno que el usuario podrá consular el registro
ingresando su número de un alumno para poder modificarlo. Se
de cedula, código ingresa digitando el numero de cedula,
estudiantil o nombres. código estudiantil o nombre del alumno.
2. El Usuario selecciona 2. El sistema valida datos.
el nuevo paralelo de la
materia en la que se
realizará el respectivo
cambio.
3. El usuario confirma la 3. Luego de la consulta. El Sistema
Flujo Principal: actualización del registro mostrará información del alumno y el
de materias listado de las materias registradas junto
con el número de vez, el paralelo actual y
los paralelos disponibles. En esta pantalla
el sistema dará la opción de actualizar
algún cambio que se quiera realizar.
4. Sistema valida datos y almacena
en registro.
5. Actualiza el cupo disponible y
ocupado de los paralelos en los
cuales se realizara el cambio de
paralelo
Usuario esté conectado al sistema con rol de "administrador
Usuario esté en la interface de actualización de registro
Alumno Previamente esté Inscrito
La solicitud de cambio de paralelo se debe realizar en el periodo
Precondición: de tiempo establecido en el reglamento de matriculación esto es,
durante los 10 días hábiles después de la inscripción.

Tener la autorización de coordinación para realizar el cambio de


paralelo.

Tiene que haber cupo disponible en otro paralelo.


Pos condición: Cambio de Paralelo realizado, Registro de materias del alumno
actualizado, Cupo de paralelo se actualiza.
Tabla N° 3 Caso de Uso Cambiar Paralelo
68

2.1.3 Casos de Uso Anular Materias

ELABORADO POR: Grupo 9 FECHA: /11/2008 Página:

Nombre: Anular Materia

Empleado-

Actor: Administrador

Descripción: Caso de uso para anular una o más materias

Eventos ACTOR Eventos SISTEMA


1. Usuario selecciona 1. El Sistema presenta una pantalla en la que el
Consultar/Modificar usuario podrá ingresar al registro de un alumno
Materia del menú para poder modificarlo. Se ingresa digitando el
Inscripción y accede al número de cedula, código estudiantil o nombre
registro del alumno del alumno
ingresando el número 2. El sistema valida datos
de cédula, código 3. El Sistema mostrará información del alumno
estudiantil o nombres. y el listado de las materias registradas junto
2. Seleccionar la/s con el número de vez y el paralelo. En esta
Flujo Principal:
materia/s que será/n pantalla el usuario seleccionará la(s) materia(s)
anulada/s. que serán anuladas y también tendrá la
3. Confirmar la opción de seleccionar todas las materias si
anulación de las necesita anular el registro(inscripción o
materias seleccionadas matrícula)
o bien de la totalidad de 4. Sistema valida datos.
estas (registro). 5. Sistema actualiza el registro de alumnos
6. Sistema actualiza el cupo de los paralelos.

Usuario esté conectado al sistema con rol de "administrador"


Alumno Previamente esté Inscrito

La solicitud de anulación de materia se debe realizar en el periodo de


tiempo establecido en el reglamento de matriculación o no tener
Precondición: registrada alguna calificación

En caso de que el Alumno no solicite la anulación de la totalidad de las


materias registradas, el alumno no puede anular una materia que está
cursando por segunda o tercera vez.

Tener la autorización de coordinación para realizar la anulación de la


materia.
Pos condición: Materia Anulada, Registro de materias actualizado, Orden de
pago anulada siempre que se haya anulado la matricula.
Tabla N° 4 Casos de Uso Anular Materias
69

2.1.4 Caso de Uso Consultar Registro

ELABORADO POR: Grupo 9 FECHA: 11/2008 Página: 1

Nombre: Consultar Registro


Alumno, Empleado -
Actor: Administrador
Descripción: Consulta datos de la Inscripción
Eventos ACTOR Eventos SISTEMA
1.- Actor ingresa al sistema 1. Sistema Muestra listado de
académico materias inscritas.
2. Tiene la opción de: 2. Sistema permite la impresión
-Consultar las materias en las que del reporte de materias
se ha inscrito un alumno registradas

-Consultar los alumnos registrados


agrupados por sección, paralelo o
materia.
Flujo Principal:
-Consultar las órdenes de pago
Generadas

-Consultar el cupo disponible en


cada materia de los paralelos
creados.

3.- Actor elige imprimir reporte de


materias inscritas
Usuario esté conectado al sistema con rol de alumno/administrador.
Precondición:
Alumno Previamente este Inscrito.
Pos condición: Mostrar datos de materias registradas, número de veces y el paralelo
Tabla N° 5 Caso de Uso Consultar Registro
70

2.1.5 Caso de uso crear paralelo

ELABORADO POR: Grupo 9 FECHA: 27/11/2008 Página:

Nombre: Abrir Paralelos


Empleado-
Actor: Administrador

Descripción: Proceso que crear paralelos en un periodo lectivo vigente.


Eventos ACTOR Eventos SISTEMA
1. Usuario selecciona 2.-El Sistema muestra una pantalla en la cual
Crear Paralelo del menú permitirá al administrador seleccionar el nivel
principal y selecciona el en el que desea crear los paralelos.
nivel en el que quiere 3. El sistema valida datos de búsqueda
crear uno o varios 4. El sistema muestra los paralelos
paralelos. disponibles y las secciones a las que puede
2. EL Administrador elige pertenecer un paralelo, también presenta los
Flujo Principal:
el o los paralelos que paralelos que ya se han creado en el nivel
serán creados que previamente se ha seleccionado.
3. Confirmar la creación 5. Sistema actualiza la base de datos.
de los paralelos
seleccionadas.

Usuario esté conectado al sistema con rol de Empleado-


Precondición: Administrador.
Tener la autorización correspondiente.

Pos condición:
Tabla N° 6 Caso de uso crear paralelo
71

2.1.6 Caso de Uso Consultar Paralelo

ELABORADO POR: Grupo 9 FECHA: 11/2008 Página: 1

Nombre: Consultar Paralelo

Empleado -
Actor: Administrador
Descripción: Consulta de paralelos creados en el periodo lectivo vigente
Eventos ACTOR Eventos SISTEMA
1.- Administrado ingresa al 1. El Sistema presenta una pantalla en la
sistema académico cual se realizará la búsqueda de los
2. Tiene la opción de buscar: paralelos que se han creado, Permite
-Todos los paralelos creados realizar la búsqueda de los paralelos por
en el periodo lectivo vigente. sección, nivel o de todos los paralelos
-Los paralelos creados en un creados en el periodo lectivo vigente
Flujo Principal:
nivel o sección determinada. 2.-Sistema valida datos.
3.- El usuario elige el criterio 3. El Sistema Muestra en pantalla un
de búsqueda de los paralelos listado de los paralelos creados con su
creados. respectivo nivel y sección en un periodo
4.- El usuario confirma la lectivo vigente.
consultar.
Usuario esté conectado al sistema con rol de Administrador.
Precondición:
Paralelo previamente creado
Pos condición: Mostrar los paralelos creados en un determinado periodo lectivo
Tabla N° 7 Caso de Uso Consultar Paralelo
72

2.1.7 Caso de uso Asignación de materia

ELABORADO POR: Grupo 9 FECHA: /11/2008 Página:

Asignación de
Nombre: materia
Empleado-
Actor: Administrador
Caso de uso para asignar las materias que se dictaran en el
Descripción: periodo lectivo vigente.
Eventos ACTOR Eventos SISTEMA
1. El usuario accede a las 1. El Sistema presenta una pantalla en la
materias disponibles que el usuario podrá consultar las
seleccionando la malla y el materias disponibles que se pueden
nivel. dictar en un periodo lectivo. Se
2. El usuario selecciona la/s visualizan las materias seleccionando
materia/s que será/n una malla y un nivel.
asignadas creadas en el 2. El sistema muestra las materias que
periodo lectivo vigente. pertenecen al nivel y malla seleccionada
3. Confirmar la asignación de las cuales pueden ser asignadas a un
las materias seleccionadas. periodo lectivo vigente.
Flujo Principal: 3. Sistema valida datos.
4. Sistema envía datos de confirmación

Usuario esté conectado al sistema con rol de "administrador"

Precondición: Materias registradas en la base de datos

Pos condición: Materia asignada a un periodo lectivo vigente.


Tabla N° 8 Caso de uso Asignación de materia
73

2.1.8 Caso de uso Asignación Paralelo-materia

ELABORADO POR: Grupo 9 FECHA: 27/11/2008 Página:

Asignación de
Nombre: materias a paralelo
Empleado-
Actor: Administrador
Proceso que permite asignar materias, cupo máximo y
mínimo a uno o varios paralelos que pertenecen a un nivel
Descripción: determinado.
Eventos ACTOR Eventos SISTEMA
1.- Usuario elige la opción 1.-El Sistema muestra una pantalla en la
de crear paralelo-materia. cual el usuario podrá consultar por nivel las
2.-Usuario Selecciona la/s materias y los paralelos creados en un
materia/s y los paralelos en periodo lectivo vigente.
los cuales se crearan las 2.-El sistema muestra la lista de materias
materias elegidas. que pueden ser asignadas a uno o varios
3.-El Usuario digita el cupo paralelos y permite ingresar el cupo de
Flujo Principal: máximo y mínimo de estudiantes mínimo y máximo para cada
estudiantes que se paralelo.
aceptarán para cada 3.- Sistema valida datos.
paralelo. 4. Sistema envía datos de confirmación.
3. Usuario verifica datos y 5. Sistema actualiza el cupo mínimo y
confirma la creación máximo de estudiantes permitidos en uno o
varios paralelos.

Materias, cupo máximo y mínimo de estudiantes asignados a


Pos condición: un paralelo
Tabla N° 9 Caso de uso Asignación Paralelo-materia
74

2.1.9 Caso de uso Actualización/Anulación de paralelo

ELABORADO POR: Grupo 9 FECHA: 27/11/2008 Página:

Nombre: Actualización de paralelos


Empleado-
Actor: Administrador
Proceso que permite actualizar el cupo máximo y mínimo de
un paralelo en una materia y cerrar una materia o un paralelo
Descripción: determinado.
Eventos ACTOR Eventos SISTEMA
1.- Usuario elige la opción 1.-El Sistema muestra una pantalla en la cual
de modificar paralelo el usuario podrá consultar por nivel las
2.-Usuario elige un nivel y materias creadas en un determinado paralelo
un paralelo y escoge una y una lista de opciones para modificar o
opción(anular o cerrar un paralelo.
modificar)
3.-El Usuario selecciona 2.-Si el administrador escoge la opción:
las materias que desea Actualizar
cerrar o digita el nuevo -El sistema permite aumentar o disminuir el
cupo máximo y mínimo de cupo máximo y mínimo de estudiantes.
estudiantes.
4. Usuario verifica datos y Opción Anulación
Flujo Principal: confirma la actualización Anular materia
del paralelo. -El sistema permite cerrar una o más
materias en un determinado paralelo
perteneciente a un nivel seleccionado

Anular Todo
-El sistema permite cerrar un paralelo
perteneciente a un nivel seleccionado
2.- Sistema valida datos.
3.- Sistema envía datos de confirmación.
4.- Sistema actualiza el estado (ANULADO)
de un paralelo o materia y actualiza el cupo
máximo o mínimo de estudiantes.
Pos condición: Paralelo actualizado
Tabla N° 10 Caso de uso Actualización/Anulación de paralelo
75

2.1.10 Caso de uso Crear Categoría de tasa


ELABORADO POR: Grupo 9 FECHA: 27/11/2008 Página:
Nombre: Crear categoría de tasa
Empleado-
Actor: Administrador

Descripción: Proceso que permite crear una categoría de tasa


Eventos ACTOR Eventos SISTEMA
1.Usuario ingresa nueva 1.-El Sistema presenta una pantalla que
categoría permite Crear y consultar las categorías
2.- Usuario elige la opción correspondientes a una tasa.
Grabar 2.- El sistema muestra en pantalla el
3. Usuario verifica datos y listado categorías de tasas creadas y un
confirma la acción. campo de ingreso de una nueva
Flujo Principal:
categoría.
3. El sistema permite anular o activar una
categoría de tasa.
4.El sistema valida datos
5. Sistema envía datos de confirmación.

Usuario esté conectado al sistema con rol de Empleado-


Precondición: Administrador

Pos condición: Categorías de tasas creadas


Tabla N° 11 Caso de uso Crear Categoría de tasa

2.1.11 Caso de uso Asignar Precio a tasa


ELABORADO POR: Grupo 9 FECHA: 27/11/2008 Página:
Nombre: Asignar Precio a tasa
Actor: Empleado-Administrador

Proceso que permite asignar el precio a una tasa por categoría de


Descripción:
alumno y semestre.
Eventos ACTOR Eventos SISTEMA
1.Usuario consulta una tasa 1.-El Sistema presenta una pantalla que
2. Usuario selecciona la permite consultar una tasa y asignarle
categoría de alumno y el un precio
semestre 2.El sistema valida datos
3.- Usuario ingresa un precio 3. Sistema envía datos de confirmación.
Flujo Principal:
para la tasa seleccionada
4. Usuario confirma la
asignación de un precio a una
tasa.

Usuario esté conectado al sistema con rol de Empleado-


Precondición: Administrador
Tener tasas creadas en el periodo lectivo.
Pos condición: Precio asignada a tasa por categoría de alumno y semestre.
Tabla N° 12 Caso de uso Asignar Precio a tasa
76

2.1.12 Caso de uso Asignar Porcentaje a tasa


ELABORADO POR: Grupo 9 FECHA: 27/11/2008 Página:
Nombre: Asignar Porcentaje a tasa
Empleado-Administrador
Actor:
Proceso que permite asignar el porcentaje del precio de una tasa
Descripción: que se debe cobrar en una determinada cuota.
Eventos ACTOR Eventos SISTEMA
1. Usuario ingresa un 1.-El Sistema presenta una pantalla que
número de cuota y permite consultar las tasas disponibles
consulta las tasas que tiene organizadas por numero de cuota
disponible. 3.El sistema permite ingresar los
Flujo Principal: 2. Usuario selecciona una porcentajes.
o más tasas e ingresa el 4.El sistema valida datos
porcentaje 5. Sistema envía datos de confirmación.
3. Usuario confirma acción.

Usuario esté conectado al sistema con rol de Empleado-


Precondición: Administrador
Tener tasas creadas en el periodo lectivo.
Porcentaje asignado que se debe cobrar por una tasa en una
Pos condición: cuota determinada.
Tabla N° 13 Caso de uso Asignar Porcentaje a tasa

2.1.13 Caso de uso Actualiza precio de tasa


ELABORADO POR: Grupo 9 FECHA: 27/11/2008 Página:
Nombre: Actualiza tasa
Empleado-Administrador
Actor:

Descripción: Proceso que permite actualizar el precio de una tasa .


Eventos ACTOR Eventos SISTEMA
1. Usuario Consultar todas las 1.-El Sistema presenta una pantalla
tasas creadas u organizadas que permite consultar las tasas
por cuota que tienen precio y disponibles
porcentaje asignado. 2.El sistema valida datos
2. Usuario selecciona una o 3. Sistema envía datos de
Flujo Principal: más tasas para anular el confirmación.
precio de una tasa o ingresa
un nuevo precio.
3. Usuario confirma acción.

Usuario esté conectado al sistema con rol de Empleado-Administrador


Precondición: Tener tasas creadas en el periodo lectivo, que estén asignadas a una
cuota y que tengan un precio asignado.
Pos condición: Precio de Tasa actualizada.
Tabla N° 14 Caso de uso Actualiza precio de tasa
77

2.1.14 Caso de uso Generar Orden de pago


ELABORADO POR: Grupo 9 FECHA: 27/11/2008 Página:
Nombre: Generar Orden de Pago

Actor: Empleado-Administrador

Proceso que permite generar órdenes de pago en el periodo


Descripción: lectivo vigente
Eventos ACTOR Eventos SISTEMA
1.Usuario consulta las 1.-El Sistema presenta una pantalla que
inscripciones permite consultar los alumnos que están
2.- Usuario elige la opción de registrados en el periodo lectivo
Generar Orden 2.- El sistema muestra en pantalla el
3.-El Usuario selecciona el listado de alumnos inscritos según el
Flujo Principal: registro o los registros que criterio seleccionado
desea generar las órdenes de 3.El sistema valida datos
pago. 4. Sistema envía datos de confirmación.
4. Usuario verifica datos y
confirma la creación de las
órdenes de pago.
Usuario esté conectado al sistema con rol de Empleado-Administrador.
Precondición:
El o los Alumnos/as deben estar registrados en al menos una materia.

Pos condición: Órdenes de pago generadas


Tabla N° 15 Caso de uso Generar Orden de pago

2.1.15 Caso de uso Asignación Profesor-Materia


ELABORADO POR: Grupo 9 FECHA: 27/11/2008 Página:
Nombre: Asignación Profesor- Materia
Actor: Empleado-Administrador

Proceso que permite asignar a un profesor las materias que


Descripción: dictara durante el periodo lectivo vigente.
Eventos ACTOR Eventos SISTEMA
1.Usuario selecciona un 1.-El Sistema presenta una pantalla que
profesor y consulta las permite consultar las materias que
materias disponibles para la pueden ser asignadas a un determinado
asignación profesor.
Flujo Principal: 2.- Usuario selecciona una o 2.El sistema valida datos
más materias. 3. Sistema envía datos de confirmación.
3. Usuario verifica datos y
confirma la asignación de
materias
Usuario esté conectado al sistema con rol de Empleado-Administrador.
Precondición:
Materias asignadas al periodo lectivo vigente.
Pos condición: Materias asignadas a profesor
Tabla N° 16 Caso de uso Asignación Profesor-Materia
78

2.1.16 Caso de uso Anula Asignación Profesor-Materia

ELABORADO POR: Grupo 9 FECHA: 27/11/2008 Página:


Nombre: Consultar/Actualizar Profesor- Materia
Actor: Empleado-Administrador

Proceso que permite consultar y anular las materias que un profesor


Descripción: tiene asignadas
Eventos ACTOR Eventos SISTEMA
1.Usuario consulta las 1.-El Sistema presenta una pantalla que
materias asignadas a un permite consultar las materias asignadas a
profesor un determinado profesor.
2.- Usuario selecciona una o 2.El sistema valida datos
más materias. 3. Sistema envía datos de confirmación.
Flujo Principal: 3. Usuario verifica datos y
confirma acción.

Precondición: Usuario esté conectado al sistema con rol de Empleado-Administrador.


Materias asignadas al periodo lectivo vigente
Materias asignadas a profesor
Pos condición: Asignación de materia a profesor , anulada
Tabla N° 17 Caso de uso Anula Asignación Profesor-Materia
79

2.2 Diagrama interacción de objetos


2.2.1 Caso de Uso: Registro de materias.

:INSCRIPCION :DETALLE _INSCRIPCION :PARALELO :REPORTE


:Interfaz de Usuario :Interfaz de Inscripcion
Paquete superior::Alumno

Envia solicitud:usuario y contraseña:

Valida usuario
Envia datos de usuario

envia materias y paralelo disponible

muestra mat y par. disponible

selecciona materias y paralelo Mensaje20

Mensaje13 Mensaje9

Confirmacion de inscripcion
Transfiere solicitud

Mensaje16 Valida seleccion de datos

crea objeto registrro crea detalle de registro:


Mensaje11
actualizacion de cupo disponible

Conclusión satisfactoria Conclusión satisfactoria


Conclusión satisfactoria
Conclusión satisfactoria

Mensaje Conclusión satisfactoria

Solicitud de consulta Solicitud de consulta


Envia parametros

Envia reporte de registro

Envia reporte de registro

muestra reporte de registro

Figura 54: Diagrama Interacción de objetos: Registro de materias nivel alumno


80

:Interfaz de Inscripcion :ALUMNO :PERSONA :INSCRIPCION :DETALLE _INSCRIPCION :PARALELO_MATERIA


Paquete superior::Administrador

Solicitud de busqueda

Envia criterio de busqueda


Envia datos Transferir solicitud Solicitar detalle

envia mensaje envia mensaje envia mensaje envia mensaje


muestra datos de alumno/s, mat y par. disponible

Selecciona Materia y paralelo

Valida seleccion de datos


muestra seleccion

Confirmacion de inscripcion crea detalle de registro:

actualizacion de cupo

Conclusión satisfactoria

Conclusión satisfactoria
muestra mensaje de conclusion satisfactoria

Figura 55: Diagrama Interacción de objetos: Registro de materias nivel Administrador


81

2.2.2 CASO DE USO: Cambiar Paralelo/Anular Materia

:Interfaz de Inscripcion :ALUMNO :PERSONA :INSCRIPCION :DETALLE _INSCRIPCION :PARALELO_MATERIA


Paquete superior::Administrador

Solicitud de busqueda

Envia criterio de busqueda


Envia datos Envia datos Envia datos

envia mensaje envia mensaje envia mensaje envia mensaje


muestra datos de alumno/s, mat y par. disponible

Selecciona Materia y paralelo

Valida seleccion de datos


muestra seleccion

Confirmacion de actualizar registro actualiza detalle de registro:

actualizacion de cupo

Conclusión satisfactoria
Conclusión satisfactoria
muestra mensaje de conclusion satisfactoria

Confirmacion de anular registro actualiza estado de inscripcion : actualiza detalle de registro:

actualizacion de cupo

Conclusión satisfactoria Conclusión satisfactoria

muestra mensaje de conclusion satisfactoria Conclusión satisfactoria

Figura 56: Diagrama Interacción de objetos: Cambiar de Paralelo/Anular Materia

2.2.3 CASO DE USO: Consultar Registro

:Interfaz de Usuario :Inscripcion Alumno Persona :Inscripcion_Detalle :Paralelo :Materia


Paquete superior::Administrador

Solicitud de busqueda
Transfiere solicitud
Soliditud dato de alumno
envia solicitud

envia datos
envia datos
Muestra paralelos datos de alumnoenvia mensaje

Transfiere solicitud Transfiere solicitud Solicitar descripion de paralelo

devuelve paralelo

Solicitar Descripcion de materias

transfiere mensaje
envia mensaje envia materias
Muestra datos de materias registradas

Figura 57: Diagrama Interacción de objetos: Consultar Registro


82

2.2.4 CASO DE USO: Crear Paralelo

:Interfaz de Usuario :Paralelo_Descripcion :Paralelo :Seccion


Paquete superior::Administrador

Solicitud de busqueda
Solicitar paralelos disponibles

envia paralelos disponibles

Solicitar paralelos creados

envia paralelos creados

Solicitar seccion

envia seccion de paralelos

Muestra paralelos disponibles y creados

Selecciona paralelo y seccion

Valida seleccion de datos


muestra seleccion

Confirmacion de crear paralelo crea objeto paralelo

Conclusión satisfactoria

muestra mensaje de conclusion satisfactoria

Figura 58: Diagrama Interacción de objetos: Crear Paralelo


83

2.2.5 CASO DE USO: Consultar Paralelo

:Interfaz de Usuario :Paralelo :Paralelo_Descripcion :Seccion

Paquete superior::Administrador

Solicitud de busqueda
Solicitar paralelos creados
Solicitar descripion de paralelo

devuelve paralelo creado

Solicitar seccion creados

seccion de paralelo

transfiere mensaje
Muestra paralelos disponibles y creados

Figura 59: Diagrama Interacción de objetos: Consultar Paralelo


84

2.2.6 CASO DE USO: Asignación de Materia

:Interfaz de Usuario :Materia :Periodo_Materia


Paquete superior::Administrador

Solicitud de busqueda
transferir solicitud

envia materias disponibles

Solicitar paralelos creados

envia paralelos creados

Muestra paralelos disponibles y creados

Selecciona materia/s

Valida seleccion de datos


muestra seleccion

Confirmacion de crear materia crea objeto `Periodo_Materia

Conclusión satisfactoria

muestra mensaje de conclusion satisfactoria

Figura 60: Diagrama Interacción de objetos: Asignación de materia


85

2.2.7CASO DE USO: Asignación Paralelo-Materia

:Interfaz de Usuario :Materia :Paralelo_Materia


Paquete superior::Administrador

Solicitud de busqueda
transferir solicitud

envia materias disponibles

Solicitar paralelos creados

envia paralelos creados

Muestra paralelos disponibles y creados

Confirmacion de anulacion x materia

Valida seleccion de datos


muestra seleccion

Confirmacion de crear Paralelo-Materia crea objeto `Periodo_Materia

Conclusión satisfactoria

muestra mensaje de conclusion satisfactoria

Figura 61: Diagrama Interacción de objetos: Asignación Paralelo - Materia


86

2.2.8 CASO DE USO: Actualización/Anulación de paralelo

:Interfaz de Usuario :Materia :Paralelo_Materia


Paquete superior::Administrador

Solicitud de busqueda
transferir solicitud

envia materias disponibles

Solicitar paralelos creados

envia paralelos creados

Muestra paralelos disponibles y creados

Selecciona materia/s y paralelo/s

Valida seleccion de datos


muestra seleccion

Confirmacion de actualizacion de cupo Actualiza cupos

Conclusión satisfactoria

muestra mensaje de conclusion satisfactoria

Confirmacion de anulacion Actualiza estado

Conclusión satisfactoria

muestra mensaje de conclusion satisfactoria

Figura 62: Diagrama Interacción de objetos: Actualización /Anulación de Paralelos


87

2.2.9 CASO DE USO: Crear Categoría de Tasa

:Interfaz de Usuario :Categoria_Tasa


Paquete superior::Administrador

Ingresa categoria
transferir solicitud

Envia conclusion

muestra mensaje de conclusion satisfactoria

Selecciona Categoria transferir solicitud de actualizar

Confirmacion de actualizacion Envia conclusion

Figura 63: Diagrama Interacción de objetos: Crear categoría de tasa

2.2.10 CASO DE USO: Asignar Precio a tasa

:Interfaz de Usuario :Tasa :Semestre :Cat_Alumno :Tasa_Precio


Paquete superior::Administrador

Solicitud de busqueda
transferir solicitud

Envia tasa seleccionada Envia tasa seleccionada

Solicitar semestre

Muestra Semestre envia semestre

Solicitar semestre

envia categoria de alumno

Muestra Categoria

Ingresa precio

Valida dato
Muestra dato

Confirma ingresar Tasa


Crea Obtejo Tasa precio

Mensaje de conclusion satisfactoria

Mensaje de conclusion satisfactoria

Figura 64: Diagrama Interacción de objetos: Asignar Precio a tasa


88

2.2.11 CASO DE USO: Asignar Porcentaje a Tasa

:Interfaz de Usuario :Tasa :Tasa_Cuota


Paquete superior::Administrador

Solicitud de busqueda
transferir solicitud

Envia tasa Envia tasa

Muestra Categoria

Ingresa Porcentaje

Valida dato
Muestra dato

Confirma ingresar Tasa


Crea Obtejo Tasa Cuota

Mensaje de conclusion satisfactoria

Mensaje de conclusion satisfactoria

Figura 65: Diagrama Interacción de objetos: Asignar Porcentaje a cuota

2.2.12 CASO DE USO: Actualiza precio deTasa

:Interfaz de Usuario :Tasa_Cuota


Paquete superior::Administrador

Solicitud de busqueda
transferir solicitud

Envia tasa Envia tasa

Confirma Actualizacion
Crea Obtejo Tasa Cuota

Mensaje de conclusion satisfactoria

Mensaje de conclusion satisfactoria

Figura 66: Diagrama Interacción de objetos: Actualiza Precio de tasa


89

2.2.13 CASO DE USO: Generar Orden de Pago

:Interfaz de Usuario :Inscripcion Alumno Persona :Inscripcion_Detalle :Paralelo :Materia Orden_Pago Detalle_Orden

Paquete superior::Administrador
Solicitud de busqueda
Transfiere solicitud
Soliditud dato de alumno
envia solicitud

envia datos
envia datos
Muestra paralelos datos de alumnoenvia mensaje

Transfiere solicitud Transfiere solicitud Solicitar descripion de paralelo

devuelve paralelo

Solicitar Descripcion de materias

transfiere mensaje
envia mensaje envia materias
Muestra datos de materias registradas

Confirma generar O/P


Crea Orden de pago Crea detalle orden

envia mensaje de conclusion satisfactoria envia mensaje

Presenta mensaje de conclusion

Figura 67: Diagrama Interacción de objetos: Generar orden de Pago


90

2.2.14 CASO DE USO: Asignación Profesor _Materia

:Interfaz de Usuario :Profesor :Materia :Profesor_Asignacion


Paquete superior::Administrador

Solicitud de busqueda
Selecciona Profesor
Envia solicitud de materia

Muestra profesor y materias Envia datos Envia datos

Confirma ingresar Prefesor_Asignacion

Valida dato
Crea Obtejo Profesor_Asignacion

Mensaje de conclusion satisfactoria


Mensaje de conclusion satisfactoria

Figura 68: Diagrama Interacción de objetos: Asignación Profesor - Materia

2.2.15 CASO DE USO: Anula asignación Profesor-Materia

:Interfaz de Usuario :Profesor_Asignacion


Paquete superior::Administrador

Solicitud de busqueda
Transfiere solicitud

Envia datos
Muestra profesor y materias

Confirma Actualizar Prefesor_Asignacion

Valida dato
Actualiza Obtejo Profesor_Asignacion

Mensaje de conclusion satisfactoria


Mensaje de conclusion satisfactoria

Figura 69: Diagrama Interacción de objetos Anula Asignación Profesor-Materia


91

2.3 Diagrama Entidad Relación


El Diagrama Entidad Relación representa las relaciones entre los Objetos
de Datos, es la notación que se usa para realizar la actividad de
Modelado de Datos, los atributos de cada objeto de datos señalados en
el DER se pueden describir mediante una descripción de Objetos de
Datos.

Figura 70: Diagrama Entidad – Relación


92

2.4 Estándares establecidos

Se detallan los estándares utilizados en el desarrollo del sistema de Aula

Virtual: Modulo de Inscripción, con el objetivo de hacer más fácil la

lectura y comprensión del mismo.

OBJETO PREFIJO NOMBRE COMENTARIO EJEMPLO


Nombre de tabla +_P + Describe una clave
PRIMARY KEY TABLA_P MATERIA_P1
posición del campo primaria
Nombre de tabla +_F + Describe una clave
FOREIGN KEY TABLA_F MATERIA_F1
posición del campo foránea
Nombre de tabla +_N +
CONSTRAINTS Describe un restricción
posición del campo
NOT NULL TABLA_N sobre un campo de una MATERIA_N1
Nombre de tabla +_C +
CHECK TABLA_C tabla
posición del campo
PR_ + Nombre de
PROCEDIMIEN Describe el proceso a
PR_ procedimiento que describe PR_INSCRIBE
TO realizar
la funcionalidad del mismo
FUN_ + Nombre de
Describe el proceso a FUN_GET_TAS
FUNCION FUN_ procedimiento que describe
realizar A
la funcionalidad del mismo
Describe el dato que
P+Tipo de dato del PN_ID_ALUMN
PARAMETRO P almacena el parámetro
parámetro+_+nombre O
de entrada/salida
Describe la información
VARIABLE L+Tipo de dato del
L que se almacena en la LV_NOMBRES
LOCAL parámetro+_+nombre
variable
Describe la información
VARIABLE G+Tipo de dato del
G que se almacena en la LV_NOMBRES
GLOBAL parámetro+_+nombre
variable
Tabla Nº 18 Identificación de Objetos

2.4.1 Descripción del segmento de programa

Autor: Nombre del creador(es) de la función o procedimiento

Fecha: Fecha de la última actualización

------- información del segmento de programa ---------

FECHA : 2-04-2008 HORA: 11:50

-------------------------fin de la información--------------------------
93

2.4.2 Comentarios

Cada uno de los bloques de programación están comentados de tal

manera que describa su comportamiento y/o objetivo.

Formato: Especifica como va estar escrito el comentario, el cual deberá

ser con mayúsculas.

Posición: La Ubicación del comentario deberá ser al final de la línea de

código correspondiente

Ejemplo:

A.ID_TIPO_MOVIMIENTO=1 --1 SIGNIFICA INGRESO

2.4.3 Variables y Parámetros de entrada/salida

Para nombrar a las variables y parámetros se sigue el siguiente orden:

1. Clasificación: Especificación del tipo de variable

2. Tipo Dato: Especificación al tipo de datos que corresponde la variable

seguido de un guión bajo ( _ )

3. Nombre: Explicativo del dato que se va a almacenar

4. Comentario: Breve descripción del como, para que y que es la

variable
94

CLASIFICACION DESCRIPCION EJEMPLO


LC Variable de tipo local cursor LN_ID_CICLO
LN Variable de tipo local number(numérico) LN_ID_ALUMNO
LV Variable de tipo local varchar2(alfanumérico) LV_RESULTADO
PC Parámetro de tipo local cursor PC_RESULTADO
PN Parámetro de tipo local number(numérico) PN_ID_PARALELO
PV Parámetro de tipo local varchar2(alfanumérico) PV_OPCION
Tabla Nº 19 Identificación de variables y parámetros

Ejemplo:

LN_ID_ALUMNO ---- ALMACENA EL ID DE UN ALUMNO

2.4.4 Organización visual

• No manejar en el desarrollo del programa más de una instrucción

por línea.

• Declarar las variables en líneas separadas.

Ejemplo:
LN_VALOR NUMBER;

LV_RESULTADO VARCHAR2(100);

• Añadir comentarios descriptivos junto a cada declaración de variables,

si es necesario.

• Los nombres de objetos se escribirán en MAYUSCULA y en

SINGULAR.

2.4.5 Funciones y Procedimientos

Fecha: Fecha de la última actualización o incremento

Objetivo: Breve descripción del proceso que se realizará

Ejemplo:

------------- Inicio de Función o Procedimiento-----------------


95

_GRUPO 9
--FECHA: 27-03-09
--OBJETIVO: ACTUALIZAR EL CUPO DE UNA MATERIA EN UN
--PARALELO

------------Fin de la información------------

PROCEDURE PR_MODIF_PARALELO_MATERIA (…….)IS


BEGIN
…..
EXCEPTION
…..
END PROCEDURE PR_MODIF_PARALELO_MATERIA;

---------Fin de Función o Procedimiento---------------------

2.4.6 Nombres de objetos de módulos

Los controles de los módulos se declaran de la siguiente manera:

Prefijo que identifica el tipo de objeto seguido de un guion bajo (_) y de

un nombre que hace referencia al objeto.

OBJETO PREFIJOS EJEMPLO


ALERTA AL_ AL_INFORMACION
CAMBAS CV_ CV_INSCRIPCION
BLOQUE BL_ BL_CABECERA
TEXT ITEM TXT_ TXT_ID_ALUMNO
BUTTON BTN_ BTN_GRABAR
CHECKBOX CHK_ CHK_INGLES
RADIO GROUP OPT_ OPT_OPERACION
LOV LV_ LV_PARALELOS
RECORD GROUPS RG_ RG_PARALELO_MATERIA
LIST ITEM CMB_ CMB_OPCION_BUSQUEDA
TEXT TEXT_ TEXT_TITULO
Tabla Nº 20 Identificación de objetos de formulario
96

2.5 Procedimiento para enviar mails con Oracle 10G

Pre-requisito:

Ingresar a la base de datos como usuario SYS y conceder al usuario los

privilegios de ejecución de los paquetes UTL_SMTP, UTL_TCP y

UTL_FILE que se utilizan para enviar mails. Para ello ejecutar una por

una las sentencias que se detallan en la figura 69.

grant execute on nombre_paquete to usuario

Figura 71: Permisos de ejecución


97

Procedimiento SEND_EMIAL
CREATE OR REPLACE PROCEDURE SEND_EMAIL(SENDER IN VARCHAR2,RECIPIENT IN
VARCHAR2, SUBJECT IN VARCHAR2,MESSAGE IN VARCHAR2) IS
MAILHOST VARCHAR2(30) := '192.168.1.199';
MAIL_CONN UTL_SMTP.CONNECTION;
LV_MESSAGE VARCHAR2(700);
CRLF VARCHAR2(2) := CHR(13) || CHR(10);
MESG VARCHAR2(15000);
LW_LENGHT_LINE NUMBER;
LW_POS_START NUMBER;
LW_POS_CHAR NUMBER;
V_RECIPIENT VARCHAR2(200);
LN_NUMERO NUMBER;
BEGIN
MAIL_CONN := UTL_SMTP.OPEN_CONNECTION(MAILHOST, 25, 60);
MESG := 'DATE: ' || TO_CHAR(SYSDATE, 'DD MON YY HH24:MI:SS') || CRLF ||
'FROM: <' || SENDER || '>' || CRLF || 'SUBJECT: ' || SUBJECT || CRLF ||
'TO: ' || RECIPIENT || CRLF || '' || CRLF || MESSAGE;
UTL_SMTP.HELO(MAIL_CONN, MAILHOST);
UTL_SMTP.MAIL(MAIL_CONN, SENDER);
LW_LENGHT_LINE := LENGTH(RECIPIENT);
LW_POS_START := 1;
<<LOOPINTERNO>>
LOOP
LW_POS_CHAR := INSTR(RECIPIENT, ';', LW_POS_START);
V_RECIPIENT := SUBSTR(RECIPIENT,
LW_POS_START,
LW_POS_CHAR - LW_POS_START);
UTL_SMTP.RCPT(MAIL_CONN, V_RECIPIENT);
EXIT LOOPINTERNO WHEN LW_POS_CHAR = LW_LENGHT_LINE;
LW_POS_START := LW_POS_CHAR + 1;
END LOOP;
UTL_SMTP.DATA(MAIL_CONN, MESG);
UTL_SMTP.QUIT(MAIL_CONN);
EXCEPTION
WHEN OTHERS THEN
LV_MESSAGE := 'ERROR '||SUBSTR(SQLERRM,1,90);
SELECT NVL(MAX(ERRL_CODE_MESSAGE),0) + 1 INTO LN_NUMERO FROM
CTS_ERRORS_LOG;
INSERT INTO CTS_ERRORS_LOG(ERRL_CODE_MESSAGE, ERRL_CONTAINER,
ERRL_REFERENCE, ERRL_DATA, ERRL_MESSAGE,
ERRL_DATE, ERRL_USER)
VALUES(LN_NUMERO, 'SENDMAIL', NULL, 'NN', LV_MESSAGE, SYSDATE,
USER);
END SEND_EMAIL;
98

2.6 Configuración del archivo cgicmd

Para evitar que se presente en la barra de direcciones del navegador la

cadena de conexión del reporte, el tipo de formato del reporte y los

nombres de los parámetros que recibe el reporte, escribir en el archivo

cdicmd.dat ubicado en la dirección C:\forms\reports\conf\ cgicmd.dat

lo siguiente.

Sintaxis:

Nombre_de_cadena: userid=usuario/contraseña@servicio

report=nombre _del_reporte.rdf desformat=formato_de_reporte(pdf,

html) destype=cache form= nombre_parametro1=%1,

nombre_parametro2=%2,…. %*

%número de orden de parámetro que se recibe = %1, %2

desformat: o Formato del destino o de la salida. Puede ser PDF, HTML,

HTMLCSS, RTF, XML o DELIMITED

destype: Este parámetro indica el tipo de destino o tipo de dispositivo

que captura la salida. Puede ser screen, file, printer, mail, sysout, cache,

localfile.
99

::PARA REPORTES DE CUOTAS_PAGOS


GR9_RPT_CUOTAS_PAGOS_PDF: userid=paralelob/oracle@AulaVirtual
report=CUOTAS_PAGOS.rdf desformat=pdf destype=cache form=no ID_ALUMNO=%1
ID_PERIODO_LECTIVO=%2 %*
GR9_RPT_CUOTAS_PAGOS_HTML: userid=paralelob/oracle@AulaVirtual
report=CUOTAS_PAGOS.rdf desformat=html destype=cache form=no ID_ALUMNO=%1
ID_PERIODO_LECTIVO=%2 %*

;;PARA DATOS DE INSCRIPCION : RPT_DATOS_INSCRIPCION


GR9_RPT_DATOS_INSCRIPCION_PDF: userid=paralelob/oracle@AulaVirtual
report=RPT_DATOS_INSCRIPCION.rdf desformat=pdf destype=cache form=no
PN_ID_ALUMNO=%1 PN_ID_PERIODO_LECTIVO=%2 %*
GR9_RPT_DATOS_INSCRIPCION_HTML: userid=paralelob/oracle@AulaVirtual
report=RPT_DATOS_INSCRIPCION.rdf desformat=html destype=cache form=no
PN_ID_ALUMNO=%1 PN_ID_PERIODO_LECTIVO=%2 %*

;;PARA REPORTE RPT_ALUMNOS_PARALELOS


GR9_RPT_ALUMNOS_PARALELOS_PDF: userid=paralelob/oracle@AulaVirtual
report=RPT_ALUMNOS_PARALELOS.rdf desformat=pdf destype=cache form=no
ID_PERIODO_LECTIVO=%1
GR9_RPT_ALUMNOS_PARALELOS_HTML: userid=paralelob/oracle@AulaVirtual
report=RPT_ALUMNOS_PARALELOS.rdf desformat=html destype=cache form=no
ID_PERIODO_LECTIVO=%1

;;PARA REPORTE RPT_ALUMNOS_INSCRITOS


GR9_RPT_ALUMNOS_INSCRITOS_PDF: userid=paralelob/oracle@AulaVirtual
report=RPT_ALUMNOS_INSCRITOS.rdf desformat=pdf destype=cache form=no
GR9_RPT_ALUMNOS_INSCRITOS_HTML: userid=paralelob/oracle@AulaVirtual
report=RPT_ALUMNOS_INSCRITOS.rdf desformat=html destype=cache form=no

;;PARA REPORTE ALUMNOxPARALELO


GR9_RPT_ALUMNOxPARALELO_PDF: userid=paralelob/oracle@AulaVirtual
report=ALUMNOxPARALELO.rdf desformat=pdf destype=cache form=no PARALELO=%1
GR9_RPT_ALUMNOxPARALELO_HTML: userid=paralelob/oracle@AulaVirtual
report=ALUMNOxPARALELO.rdf desformat=html destype=cache form=no PARALELO=%1

;;PARA REPORTE CUPOxPARALELO


GR9_RPT_CUPOxPARALELO_PDF: userid=paralelob/oracle@AulaVirtual
report=CUPOxPARALELO.rdf desformat=pdf destype=cache form=no PARALELO=%1
GR9_RPT_CUPOxPARALELO_HTML: userid=paralelob/oracle@AulaVirtual
report=CUPOxPARALELO.rdf desformat=html destype=cache form=no PARALELO=%1

;;PARA REPORTE DE LOS CUPOS DE TODOS LOS PARALELOS CUPO_PARALELOS


GR9_RPT_CUPO_PARALELOS_PDF: userid=paralelob/oracle@AulaVirtual
report=RPT_CUPO_PARALELOS.rdf desformat=pdf destype=cache form=no
GR9_RPT_CUPO_PARALELOS_HTML: userid=paralelob/oracle@AulaVirtual
report=RPT_CUPO_PARALELOS.rdf desformat=html destype=cache form=no

;;PARA REPORTE DE ORDENES DE PAGOS MASIVA CUPO_PARALELOS


GR9_RPT_OP_MASIVO_PDF: userid=paralelob/oracle@AulaVirtual
report=RPT_OP_MASIVO.rdf desformat=pdf destype=cache form=no
GR9_RPT_OP_MASIVO_HTML: userid=paralelob/oracle@AulaVirtual
report=RPT_OP_MASIVO.rdf desformat=html destype=cache form=no
100

2.7 Scripts de Creación de Tablas del Sistema de Aula Virtual “Modulo

de Inscripción al Aula Virtual”


CREATE TABLE ALUMNO_CATEGORIA
(
ID_ALUMNO_CATEGORIA NUMBER(5) NOT NULL,
DESCRIPCION VARCHAR2(50),
ABREVIATURA VARCHAR2(50),
ID_ESTADO NUMBER(5));
ALTER TABLE ALUMNO_CATEGORIA
ADD CONSTRAINT ALUMNO_CATEGORIA_P PRIMARY KEY (ID_ALUMNO_CATEGORIA);
ALTER TABLE ALUMNO_CATEGORIA
ADD CONSTRAINT ALUMNO_CATEGORIA_R2 FOREIGN KEY (ID_ESTADO)
REFERENCES ESTADO (ID_ESTADO);
ALTER TABLE ALUMNO_CATEGORIA
ADD CONSTRAINT ALUMNO_CATEGORIA_N2
CHECK ("DESCRIPCION" IS NOT NULL);
ALTER TABLE ALUMNO_CATEGORIA
ADD CONSTRAINT ALUMNO_CATEGORIA_N3
CHECK ("ABREVIATURA" IS NOT NULL);

CREATE TABLE ALUMNO


(ID_ALUMNO NUMBER(5) NOT NULL,
ID_PERSONA NUMBER(5),
ID_ALUMNO_CATEGORIA NUMBER(5),
CODIGO_ESTUDIANTIL VARCHAR2(10),
FECHA_INGRESO_CARRERA DATE,
SEMESTRE_ACTUAL NUMBER(5),
ID_ESTADO NUMBER(5));
ALTER TABLE ALUMNO
ADD CONSTRAINT ALUMNO_P PRIMARY KEY (ID_ALUMNO);
ALTER TABLE ALUMNO
ADD CONSTRAINT ALUMNO_R2 FOREIGN KEY (ID_PERSONA)
REFERENCES PERSONA (ID_PERSONA);
ALTER TABLE ALUMNO
ADD CONSTRAINT ALUMNO_R3 FOREIGN KEY (ID_ALUMNO_CATEGORIA)
REFERENCES ALUMNO_CATEGORIA (ID_ALUMNO_CATEGORIA);
ALTER TABLE ALUMNO
ADD CONSTRAINT ALUMNO_R7 FOREIGN KEY (ID_ESTADO)
REFERENCES ESTADO (ID_ESTADO);
ALTER TABLE ALUMNO
ADD CONSTRAINT ALUMNO_N4
CHECK ("CODIGO_ESTUDIANTIL" IS NOT NULL);
ALTER TABLE ALUMNO
ADD CONSTRAINT ALUMNO_N6
CHECK ("SEMESTRE_ACTUAL" IS NOT NULL);

CREATE TABLE TIPO_MATERIA


(ID_TIPO_MATERIA NUMBER(5) NOT NULL,
DESCRIPCION VARCHAR2(100),
ID_ESTADO NUMBER(5));
ALTER TABLE TIPO_MATERIA
ADD CONSTRAINT TIPO_MATERIA_P PRIMARY KEY (ID_TIPO_MATERIA);
ALTER TABLE TIPO_MATERIA
ADD CONSTRAINT TIPO_MATERIA_R3 FOREIGN KEY (ID_ESTADO)
REFERENCES ESTADO (ID_ESTADO);
ALTER TABLE TIPO_MATERIA
ADD CONSTRAINT TIPO_MATERIA_N2
CHECK ("DESCRIPCION" IS NOT NULL);
101

CREATE TABLE MATERIA


(ID_MATERIA NUMBER(5) NOT NULL,
CODIGO_MATERIA VARCHAR2(50),
ID_TIPO_MATERIA NUMBER(5),
DESCRIPCION VARCHAR2(50),
PERIODO_SEMANAL NUMBER(5),
PERIODO_SEMESTRAL NUMBER(5),
CREDITOS NUMBER(5),
ID_ESTADO NUMBER(5));
ALTER TABLE MATERIA
ADD CONSTRAINT MATERIA_P PRIMARY KEY (ID_MATERIA);
ALTER TABLE MATERIA
ADD CONSTRAINT MATERIA_R3 FOREIGN KEY (ID_TIPO_MATERIA)
REFERENCES TIPO_MATERIA (ID_TIPO_MATERIA);
ALTER TABLE MATERIA
ADD CONSTRAINT MATERIA_R8 FOREIGN KEY (ID_ESTADO)
REFERENCES ESTADO (ID_ESTADO);
ALTER TABLE MATERIA
ADD CONSTRAINT MATERIA_N2
CHECK ("CODIGO_MATERIA" IS NOT NULL);
ALTER TABLE MATERIA
ADD CONSTRAINT MATERIA_N4
CHECK ("DESCRIPCION" IS NOT NULL);

CREATE TABLE PERIODO_DURACION


(ID_DURACION_PERIODO NUMBER(5) NOT NULL,
UNIDAD_TIEMPO VARCHAR2(50),
CANTIDAD NUMBER(5),
DENOMINACION VARCHAR2(50),
ID_ESTADO NUMBER(5));
ALTER TABLE PERIODO_DURACION
ADD CONSTRAINT PERIODO_DURACION_P PRIMARY KEY (ID_DURACION_PERIODO);
ALTER TABLE PERIODO_DURACION
ADD CONSTRAINT PERIODO_DURACION_R5 FOREIGN KEY (ID_ESTADO)
REFERENCES ESTADO (ID_ESTADO);
ALTER TABLE PERIODO_DURACION
ADD CONSTRAINT PERIODO_DURACION_N2
CHECK ("UNIDAD_TIEMPO" IS NOT NULL);
ALTER TABLE PERIODO_DURACION
ADD CONSTRAINT PERIODO_DURACION_N3
CHECK ("CANTIDAD" IS NOT NULL);
ALTER TABLE PERIODO_DURACION
ADD CONSTRAINT PERIODO_DURACION_N4
CHECK ("DENOMINACION" IS NOT NULL);

CREATE TABLE PERIODO_LECTIVO


(ID_PERIODO_LECTIVO NUMBER(5) NOT NULL,
ID_DURACION_PERIODO NUMBER(5),
ANIO NUMBER(5),
CICLO VARCHAR2(10),
FECHA_INICIO_PROGRAMADA DATE,
FECHA_FIN_PROGRAMADA DATE,
FECHA_INICIO_REAL DATE,
FECHA_FIN_REAL DATE,
ID_ESTADO NUMBER(5),
DESCRIPCION VARCHAR2(50),
FECHA_CREACION DATE,
OBSERVACION VARCHAR2(1500));
ALTER TABLE PERIODO_LECTIVO
ADD CONSTRAINT PERIODO_LECTIVO_P PRIMARY KEY (ID_PERIODO_LECTIVO);
ALTER TABLE PERIODO_LECTIVO
ADD CONSTRAINT PERIODO_LECTIVO_R1 FOREIGN KEY (ID_DURACION_PERIODO)
REFERENCES PERIODO_DURACION (ID_DURACION_PERIODO);
ALTER TABLE PERIODO_LECTIVO
102

ADD CONSTRAINT PERIODO_LECTIVO_R9 FOREIGN KEY (ID_ESTADO)


REFERENCES ESTADO (ID_ESTADO);
ALTER TABLE PERIODO_LECTIVO
ADD CONSTRAINT PERIODO_LECTIVO_N11
CHECK ("DESCRIPCION" IS NOT NULL);
ALTER TABLE PERIODO_LECTIVO
ADD CONSTRAINT PERIODO_LECTIVO_N12
CHECK ("FECHA_CREACION" IS NOT NULL);
ALTER TABLE PERIODO_LECTIVO
ADD CONSTRAINT PERIODO_LECTIVO_N14
CHECK ("OBSERVACION" IS NOT NULL);
ALTER TABLE PERIODO_LECTIVO
ADD CONSTRAINT PERIODO_LECTIVO_N3
CHECK ("ANIO" IS NOT NULL);
ALTER TABLE PERIODO_LECTIVO
ADD CONSTRAINT PERIODO_LECTIVO_N4
CHECK ("CICLO" IS NOT NULL);
ALTER TABLE PERIODO_LECTIVO
ADD CONSTRAINT PERIODO_LECTIVO_N5
CHECK ("FECHA_INICIO_PROGRAMADA" IS NOT NULL);
ALTER TABLE PERIODO_LECTIVO
ADD CONSTRAINT PERIODO_LECTIVO_N6
CHECK ("FECHA_FIN_PROGRAMADA" IS NOT NULL);
ALTER TABLE PERIODO_LECTIVO
ADD CONSTRAINT PERIODO_LECTIVO_N7
CHECK ("FECHA_INICIO_REAL" IS NOT NULL);
ALTER TABLE PERIODO_LECTIVO
ADD CONSTRAINT PERIODO_LECTIVO_N8
CHECK ("FECHA_FIN_REAL" IS NOT NULL);

CREATE TABLE SECCION


(ID_SECCION NUMBER(5) NOT NULL,
DESCRIPCION VARCHAR2(50),
ID_ESTADO NUMBER(5));
ALTER TABLE SECCION
ADD CONSTRAINT SECCION_P PRIMARY KEY (ID_SECCION);
ALTER TABLE SECCION
ADD CONSTRAINT SECCION_R3 FOREIGN KEY (ID_ESTADO)
REFERENCES ESTADO (ID_ESTADO);
ALTER TABLE SECCION
ADD CONSTRAINT SECCION_N2
CHECK ("DESCRIPCION" IS NOT NULL);

CREATE TABLE PARALELO


(ID_PARALELO NUMBER(5) NOT NULL,
DESCRIPCION VARCHAR2(50),
ID_PERIODO_LECTIVO NUMBER(5),
ID_SECCION NUMBER(5),
FECHA_REGISTRO DATE,
HORA_REGISTRO DATE,
USUARIO_REGISTRO VARCHAR2(50),
FECHA_MODIFICACION DATE,
HORA_MODIFICACION DATE,
USUARIO_MODIFICACION VARCHAR2(50),
OBSERVACION VARCHAR2(200),
ID_ESTADO NUMBER(5));
ALTER TABLE PARALELO
ADD CONSTRAINT PARALELO_P PRIMARY KEY (ID_PARALELO);
ALTER TABLE PARALELO
ADD CONSTRAINT MA_PARALELO_R4 FOREIGN KEY (ID_SECCION)
REFERENCES SECCION (ID_SECCION);
ALTER TABLE PARALELO
ADD CONSTRAINT PARALELO_R12 FOREIGN KEY (ID_ESTADO)
REFERENCES ESTADO (ID_ESTADO);
ALTER TABLE PARALELO
103

ADD CONSTRAINT PARALELO_R3 FOREIGN KEY (ID_PERIODO_LECTIVO)


REFERENCES PERIODO_LECTIVO (ID_PERIODO_LECTIVO);
ALTER TABLE PARALELO
ADD CONSTRAINT PARALELO_N2
CHECK ("DESCRIPCION" IS NOT NULL);

CREATE TABLE AULA


(ID_AULA NUMBER(5) NOT NULL,
NUMERO VARCHAR2(50),
DESCRIPCION VARCHAR2(50),
ID_ESTADO NUMBER(5),
OBSERVACION VARCHAR2(50));
ALTER TABLE AULA
ADD CONSTRAINT AULA_P PRIMARY KEY (ID_AULA);
ALTER TABLE AULA
ADD CONSTRAINT AULA_R4 FOREIGN KEY (ID_ESTADO)
REFERENCES ESTADO (ID_ESTADO);

CREATE TABLE PARALELO_MATERIA


(ID_PARALELO_MATERIA NUMBER(5) NOT NULL,
ID_PARALELO NUMBER(5),
ID_MATERIA NUMBER(5),
FECHA_EXAMEN_PRIMERO VARCHAR2(10),
FECHA_EXAMEN_SEGUNDO VARCHAR2(10),
FECHA_EXAMEN_RECUPERACION VARCHAR2(10),
CUPO_MAXIMO NUMBER(5),
CUPO_MINIMO NUMBER(5),
CUPO_OCUPADO NUMBER(5),
CUPO_DISPONIBLE NUMBER(5),
ID_AULA NUMBER(5),
ID_ESTADO NUMBER(5),
FECHA_REGISTRO DATE,
HORA_REGISTRO DATE,
USUARIO_REGISTRO VARCHAR2(50),
FECHA_MODIFICACION DATE,
HORA_MODIFICACION DATE,
USUARIO_MODIFICACION VARCHAR2(50),
OBSERVACION VARCHAR2(200));
ALTER TABLE PARALELO_MATERIA
ADD CONSTRAINT PARALELO_MATERIA_P PRIMARY KEY (ID_PARALELO_MATERIA);
ALTER TABLE PARALELO_MATERIA
ADD CONSTRAINT PARALELO_MATERIA_R11 FOREIGN KEY (ID_AULA)
REFERENCES AULA (ID_AULA);
ALTER TABLE PARALELO_MATERIA
ADD CONSTRAINT PARALELO_MATERIA_R12 FOREIGN KEY (ID_ESTADO)
REFERENCES ESTADO (ID_ESTADO);
ALTER TABLE PARALELO_MATERIA
ADD CONSTRAINT PARALELO_MATERIA_R2 FOREIGN KEY (ID_PARALELO)
REFERENCES PARALELO (ID_PARALELO);
ALTER TABLE PARALELO_MATERIA
ADD CONSTRAINT PARALELO_MATERIA_R3 FOREIGN KEY (ID_MATERIA)
REFERENCES MATERIA (ID_MATERIA);

CREATE TABLE PROFESOR_ASIGNACION


(ID_PROFESOR_ASIGNACION NUMBER(5) NOT NULL,
ID_EMPLEADO NUMBER(5),
ID_PERIODO_LECTIVO NUMBER(5),
ID_PARALELO_MATERIA NUMBER(5),
FECHA_REGISTRO DATE,
HORA_REGISTRO DATE,
USUARIO_REGISTRO VARCHAR2(50),
ID_ESTADO NUMBER(5),
FECHA_MODIFICACION DATE,
HORA_MODIFICACION DATE,
104

USUARIO_MODIFICACION VARCHAR2(50));
ALTER TABLE PROFESOR_ASIGNACION
ADD CONSTRAINT PROFESOR_ASIGNACION_P PRIMARY KEY (ID_PROFESOR_ASIGNACION);
ALTER TABLE PROFESOR_ASIGNACION
ADD CONSTRAINT PARALELO_R8 FOREIGN KEY (ID_ESTADO)
REFERENCES ESTADO (ID_ESTADO);
ALTER TABLE PROFESOR_ASIGNACION
ADD CONSTRAINT PROFESOR_ASIGNACION_R2 FOREIGN KEY (ID_EMPLEADO)
REFERENCES EMPLEADO (ID_EMPLEADO);
ALTER TABLE PROFESOR_ASIGNACION
ADD CONSTRAINT PROFESOR_ASIGNACION_R3 FOREIGN KEY (ID_PERIODO_LECTIVO)
REFERENCES PERIODO_LECTIVO (ID_PERIODO_LECTIVO);
ALTER TABLE PROFESOR_ASIGNACION
ADD CONSTRAINT PROFESOR_ASIGNACION_R4 FOREIGN KEY (ID_PARALELO_MATERIA)
REFERENCES PARALELO_MATERIA (ID_PARALELO_MATERIA);
ALTER TABLE PROFESOR_ASIGNACION
ADD CONSTRAINT PROFESOR_ASIGNACION_N7
CHECK ("USUARIO_REGISTRO" IS NOT NULL);

CREATE TABLE INSCRIPCION


(ID_INSCRIPCION NUMBER(5) NOT NULL,
ID_ALUMNO NUMBER(5),
FECHA_INSCRIPCION DATE,
HORA_INSCRIPCION DATE,
FECHA_ACTUALIZACION DATE,
HORA_ACTUALIZACION DATE,
USUARIO_INSCRIBE VARCHAR2(100),
USUARIO_ACTUALIZACION VARCHAR2(15),
ID_EMPLEADO_INSCRIBE NUMBER(5),
ID_ESTADO NUMBER(5));
ALTER TABLE INSCRIPCION
ADD CONSTRAINT INSCRIPCION_P PRIMARY KEY (ID_INSCRIPCION);
ALTER TABLE INSCRIPCION
ADD CONSTRAINT INSCRIPCION_R1 FOREIGN KEY (ID_ALUMNO)
REFERENCES ALUMNO (ID_ALUMNO);
ALTER TABLE INSCRIPCION
ADD CONSTRAINT INSCRIPCION_R2 FOREIGN KEY (ID_ESTADO)
REFERENCES ESTADO (ID_ESTADO);
ALTER TABLE INSCRIPCION
ADD CONSTRAINT MA_ALUMNO_R2 FOREIGN KEY (ID_EMPLEADO_INSCRIBE)
REFERENCES EMPLEADO (ID_EMPLEADO);
ALTER TABLE INSCRIPCION
ADD CONSTRAINT INSCRIPCION_N3
CHECK ("FECHA_INSCRIPCION" IS NOT NULL);
ALTER TABLE INSCRIPCION
ADD CONSTRAINT INSCRIPCION_N4
CHECK ("HORA_INSCRIPCION" IS NOT NULL);

CREATE TABLE INSCRIPCION_DETALLE


(ID_INSCRIPCION_DETALLE NUMBER(5) NOT NULL,
ID_INSCRIPCION NUMBER(5),
ID_PERIODO_LECTIVO NUMBER(5),
ID_PARALELO NUMBER(5),
ID_MATERIA NUMBER(5),
VEZ_TOMADA NUMBER(5),
ID_ESTADO NUMBER(5),
FECHA_REGISTRO DATE,
HORA_REGISTRO DATE,
USUARIO_REGISTRO VARCHAR2(50),
FECHA_MODIFICACION DATE,
HORA_MODIFICACION DATE,
USUARIO_MODIFICACION VARCHAR2(50),
OBSERVACION VARCHAR2(200));
ALTER TABLE INSCRIPCION_DETALLE
105

ADD CONSTRAINT INSCRIPCION_DETALLE_P PRIMARY KEY (ID_INSCRIPCION_DETALLE);


ALTER TABLE INSCRIPCION_DETALLE
ADD CONSTRAINT INSCRIPCION_DETALLE_R2 FOREIGN KEY (ID_INSCRIPCION)
REFERENCES INSCRIPCION (ID_INSCRIPCION);
ALTER TABLE INSCRIPCION_DETALLE
ADD CONSTRAINT INSCRIPCION_DETALLE_R3 FOREIGN KEY (ID_PERIODO_LECTIVO)
REFERENCES PERIODO_LECTIVO (ID_PERIODO_LECTIVO);
ALTER TABLE INSCRIPCION_DETALLE
ADD CONSTRAINT INSCRIPCION_DETALLE_R4 FOREIGN KEY (ID_PARALELO)
REFERENCES PARALELO (ID_PARALELO);
ALTER TABLE INSCRIPCION_DETALLE
ADD CONSTRAINT INSCRIPCION_DETALLE_R5 FOREIGN KEY (ID_MATERIA)
REFERENCES MATERIA (ID_MATERIA);
ALTER TABLE INSCRIPCION_DETALLE
ADD CONSTRAINT INSCRIPCION_DETALLE_R7 FOREIGN KEY (ID_ESTADO)
REFERENCES ESTADO (ID_ESTADO);
ALTER TABLE INSCRIPCION_DETALLE
ADD CONSTRAINT INSCRIPCION_DETALLE_N6
CHECK ("VEZ_TOMADA" IS NOT NULL);

CREATE TABLE SEMESTRE


(ID_SEMESTRE NUMBER(5) NOT NULL,
DESCRIPCION VARCHAR2(50),
ID_ESTADO NUMBER(5));
ALTER TABLE SEMESTRE
ADD CONSTRAINT SEMESTRE_P PRIMARY KEY (ID_SEMESTRE);
ALTER TABLE SEMESTRE
ADD CONSTRAINT SEMESTRE_R3 FOREIGN KEY (ID_ESTADO)
REFERENCES ESTADO (ID_ESTADO);
ALTER TABLE SEMESTRE
ADD CONSTRAINT SEMESTRE_N2
CHECK ("DESCRIPCION" IS NOT NULL);

CREATE TABLE PENSUM_MALLA


(ID_PENSUM_MALLA NUMBER(5) NOT NULL,
ANIO_PENSUM NUMBER(5),
CICLO_PENSUM NUMBER(5),
VIGENTE_DESDE DATE,
VIGENTE_HASTA DATE,
DESCRIPCION VARCHAR2(255),
NUM_SEMESTRES NUMBER(5),
ID_ESTADO NUMBER(5));
ALTER TABLE PENSUM_MALLA
ADD CONSTRAINT PENSUM_MALLA_P PRIMARY KEY (ID_PENSUM_MALLA);
ALTER TABLE PENSUM_MALLA
ADD CONSTRAINT PENSUM_MALLA_R8 FOREIGN KEY (ID_ESTADO)
REFERENCES ESTADO (ID_ESTADO);
ALTER TABLE PENSUM_MALLA
ADD CONSTRAINT PENSUM_MALLA_N2
CHECK ("ANIO_PENSUM" IS NOT NULL);
ALTER TABLE PENSUM_MALLA
ADD CONSTRAINT PENSUM_MALLA_N3
CHECK ("CICLO_PENSUM" IS NOT NULL);
ALTER TABLE PENSUM_MALLA
ADD CONSTRAINT PENSUM_MALLA_N4
CHECK ("VIGENTE_DESDE" IS NOT NULL);
ALTER TABLE PENSUM_MALLA
ADD CONSTRAINT PENSUM_MALLA_N7
CHECK ("NUM_SEMESTRES" IS NOT NULL);

CREATE TABLE TIPO_REQUISITO_MAT


(ID_TIPO_REQUISITO NUMBER(5) NOT NULL,
DESCRIPCION VARCHAR2(50),
ID_ESTADO NUMBER(5));
ALTER TABLE TIPO_REQUISITO_MAT
106

ADD CONSTRAINT TIPO_REQUISITO_MAT_P PRIMARY KEY (ID_TIPO_REQUISITO);


ALTER TABLE TIPO_REQUISITO_MAT
ADD CONSTRAINT TIPO_REQUISITO_MAT_R2 FOREIGN KEY (ID_ESTADO)
REFERENCES ESTADO (ID_ESTADO);
ALTER TABLE TIPO_REQUISITO_MAT
ADD CONSTRAINT TIPO_REQUISITO_MAT_N2
CHECK ("DESCRIPCION" IS NOT NULL);

CREATE TABLE MALLA_DETALLE


(ID_MALLA_DETALLE NUMBER(5) NOT NULL,
ID_PENSUM_MALLA NUMBER(5),
ID_MATERIA NUMBER(5),
ID_MATERIA_REQUISITO NUMBER(5),
ID_TIPO_REQUISITO NUMBER(5),
ID_ESTADO NUMBER(5),
ID_SEMESTRE NUMBER(5),
CREDITOS_REQUERIDOS NUMBER(5),
NIVELES_REQUERIDOS NUMBER(5),
MATERIAS_REQUERIDAS NUMBER(5));
ALTER TABLE MALLA_DETALLE
ADD CONSTRAINT MALLA_DETALLE_P PRIMARY KEY (ID_MALLA_DETALLE);
ALTER TABLE MALLA_DETALLE
ADD CONSTRAINT MALLA_DETALLE_R1 FOREIGN KEY (ID_PENSUM_MALLA)
REFERENCES PENSUM_MALLA (ID_PENSUM_MALLA);
ALTER TABLE MALLA_DETALLE
ADD CONSTRAINT MALLA_DETALLE_R2 FOREIGN KEY (ID_MATERIA)
REFERENCES MATERIA (ID_MATERIA);
ALTER TABLE MALLA_DETALLE
ADD CONSTRAINT MALLA_DETALLE_R3 FOREIGN KEY (ID_MATERIA_REQUISITO)
REFERENCES MATERIA (ID_MATERIA);
ALTER TABLE MALLA_DETALLE
ADD CONSTRAINT MALLA_DETALLE_R5 FOREIGN KEY (ID_TIPO_REQUISITO)
REFERENCES TIPO_REQUISITO_MAT (ID_TIPO_REQUISITO);
ALTER TABLE MALLA_DETALLE
ADD CONSTRAINT MALLA_DETALLE_R56 FOREIGN KEY (ID_ESTADO)
REFERENCES ESTADO (ID_ESTADO);
ALTER TABLE MALLA_DETALLE
ADD CONSTRAINT MALLA_DETALLE_R6 FOREIGN KEY (ID_SEMESTRE)
REFERENCES SEMESTRE (ID_SEMESTRE);

CREATE TABLE MATERIA_ALUMNO


(ID_MATERIA_ALUMNO NUMBER(5) NOT NULL,
ID_ALUMNO NUMBER(5),
ID_MATERIA NUMBER(5));
ALTER TABLE MATERIA_ALUMNO
ADD CONSTRAINT MATERIA_ALUMNO_P PRIMARY KEY (ID_MATERIA_ALUMNO);
ALTER TABLE MATERIA_ALUMNO
ADD CONSTRAINT MATERIA_ALUMNO_R2 FOREIGN KEY (ID_ALUMNO)
REFERENCES ALUMNO (ID_ALUMNO);
ALTER TABLE MATERIA_ALUMNO
ADD CONSTRAINT MATERIA_ALUMNO_R3 FOREIGN KEY (ID_MATERIA)
REFERENCES MATERIA (ID_MATERIA);

CREATE TABLE MATERIA_EQUIVALENTE


(ID_MATERIA_EQUIVALENTE NUMBER(5) NOT NULL,
ID_MATERIA NUMBER(5),
ID_MATERIA_EQUIVALE NUMBER(5),
ID_ESTADO NUMBER(5));
ALTER TABLE MATERIA_EQUIVALENTE
ADD CONSTRAINT MATERIA_EQUIVALENTE_P PRIMARY KEY (ID_MATERIA_EQUIVALENTE);
ALTER TABLE MATERIA_EQUIVALENTE
ADD CONSTRAINT MATERIA_EQUIVALENTE_R2 FOREIGN KEY (ID_MATERIA)
REFERENCES MATERIA (ID_MATERIA);
ALTER TABLE MATERIA_EQUIVALENTE
107

ADD CONSTRAINT MATERIA_EQUIVALENTE_R4 FOREIGN KEY (ID_ESTADO)


REFERENCES ESTADO (ID_ESTADO);
ALTER TABLE MATERIA_EQUIVALENTE
ADD CONSTRAINT MATERIA_EQUIVALENTE_R3
CHECK ("ID_MATERIA_EQUIVALE" IS NOT NULL);

CREATE TABLE MATERIA_OPTATIVA


(ID_MATERIA_OPTATIVA NUMBER(5) NOT NULL,
ID_MATERIA NUMBER(5),
ID_MATERIA_ELECTIVA NUMBER(5),
ID_ESTADO NUMBER(5));
ALTER TABLE MATERIA_OPTATIVA
ADD CONSTRAINT MATERIA_OPTATIVA_P PRIMARY KEY (ID_MATERIA_OPTATIVA);
ALTER TABLE MATERIA_OPTATIVA
ADD CONSTRAINT MATERIA_OPTATIVA_R2 FOREIGN KEY (ID_MATERIA)
REFERENCES MATERIA (ID_MATERIA);
ALTER TABLE MATERIA_OPTATIVA
ADD CONSTRAINT MATERIA_OPTATIVA_R3 FOREIGN KEY (ID_MATERIA_ELECTIVA)
REFERENCES MATERIA (ID_MATERIA);
ALTER TABLE MATERIA_OPTATIVA
ADD CONSTRAINT MATERIA_OPTATIVA_R4 FOREIGN KEY (ID_ESTADO)
REFERENCES ESTADO (ID_ESTADO);

CREATE TABLE PARALELO_DESCRIPCION


(DESCRIPCION VARCHAR2(50) NOT NULL,
SEMESTRE NUMBER(5),
ID_SECCION_POR_DEFECTO NUMBER(5),
ID_ESTADO NUMBER(5));
ALTER TABLE PARALELO_DESCRIPCION
ADD CONSTRAINT PARALELO_DESCRIPCION_P PRIMARY KEY (DESCRIPCION);
ALTER TABLE PARALELO_DESCRIPCION
ADD CONSTRAINT PARALELO_DESCRIPCION_R2 FOREIGN KEY (SEMESTRE)
REFERENCES SEMESTRE (ID_SEMESTRE);
ALTER TABLE PARALELO_DESCRIPCION
ADD CONSTRAINT PARALELO_DESCRIPCION_R3 FOREIGN KEY (ID_SECCION_POR_DEFECTO)
REFERENCES SECCION (ID_SECCION);
ALTER TABLE PARALELO_DESCRIPCION
ADD CONSTRAINT PARALELO_DESCRIPCION_R4 FOREIGN KEY (ID_ESTADO)
REFERENCES ESTADO (ID_ESTADO);

CREATE TABLE PERIODO_INSCRIPCION


(ID_PERIODO_INSCRIPCION NUMBER(5) NOT NULL,
ID_PERIODO_LECTIVO NUMBER(5),
FECHA_DESDE DATE,
FECHA_HASTA DATE,
USUARIO_CREACION VARCHAR2(50),
USUARIO_ACTUALIZA VARCHAR2(50),
FECHA_CREACION DATE,
FECHA_ACTUALIZACION DATE,
ID_ESTADO NUMBER(5));
ALTER TABLE PERIODO_INSCRIPCION
ADD CONSTRAINT PERIODO_INSCRIPCION_P PRIMARY KEY (ID_PERIODO_INSCRIPCION);
ALTER TABLE PERIODO_INSCRIPCION
ADD CONSTRAINT PERIODO_INSCRIPCION_R2 FOREIGN KEY (ID_PERIODO_LECTIVO)
REFERENCES PERIODO_LECTIVO (ID_PERIODO_LECTIVO);
ALTER TABLE PERIODO_INSCRIPCION
ADD CONSTRAINT PERIODO_INSCRIPCION_R5 FOREIGN KEY (ID_ESTADO)
REFERENCES ESTADO (ID_ESTADO);
ALTER TABLE PERIODO_INSCRIPCION
ADD CONSTRAINT PERIODO_INSCRIPCION_N3
CHECK ("FECHA_DESDE" IS NOT NULL);
ALTER TABLE PERIODO_INSCRIPCION
ADD CONSTRAINT PERIODO_INSCRIPCION_N4
CHECK ("FECHA_HASTA" IS NOT NULL);
108

CREATE TABLE PERIODO_MATERIA


(ID_PERIODO_MATERIA NUMBER(5) NOT NULL,
DESCRIPCION VARCHAR2(20),
ID_MATERIA NUMBER(5),
ID_PERIODO_LECTIVO NUMBER(5),
ID_ESTADO NUMBER(5));
ALTER TABLE PERIODO_MATERIA
ADD CONSTRAINT PERIODO_MATERIA_P PRIMARY KEY (ID_PERIODO_MATERIA);
ALTER TABLE PERIODO_MATERIA
ADD CONSTRAINT PERIODO_MATERIA_R3 FOREIGN KEY (ID_MATERIA)
REFERENCES MATERIA (ID_MATERIA);
ALTER TABLE PERIODO_MATERIA
ADD CONSTRAINT PERIODO_MATERIA_R4 FOREIGN KEY (ID_PERIODO_LECTIVO)
REFERENCES PERIODO_LECTIVO (ID_PERIODO_LECTIVO);
ALTER TABLE PERIODO_MATERIA
ADD CONSTRAINT PERIODO_MATERIA_R5 FOREIGN KEY (ID_ESTADO)
REFERENCES ESTADO (ID_ESTADO);

CREATE TABLE ORDEN_PAGO


(ID_ORDEN_PAGO NUMBER(5) NOT NULL,
CUOTA NUMBER(5),
ID_ALUMNO NUMBER(5),
ID_ESTADO NUMBER(5),
FECHA_INGRESO DATE,
ID_PERIODO_LECTIVO NUMBER(5),
ID_FACULTAD NUMBER(5),
ID_CARRERA NUMBER(5),
ID_CUENTA NUMBER(5),
ID_FORMA_PAGO NUMBER(5),
VALOR_TOTAL NUMBER(10,2),
NUM_RECIBO VARCHAR2(20),
FECHA_EMISION DATE,
FECHA_VENCIMIENTO DATE,
CONDICION VARCHAR2(15),
VALOR_DESCUENTO NUMBER(10,2),
VALOR_CUOTA NUMBER(10,2),
ID_INSCRIPCION NUMBER(5),
USUARIO VARCHAR2(50));
ALTER TABLE ORDEN_PAGO
ADD CONSTRAINT ORDEN_PAGO_P PRIMARY KEY (ID_ORDEN_PAGO);
ALTER TABLE ORDEN_PAGO
ADD CONSTRAINT ORDEN_PAGO_R2 FOREIGN KEY (ID_ALUMNO)
REFERENCES ALUMNO (ID_ALUMNO);
ALTER TABLE ORDEN_PAGO
ADD CONSTRAINT ORDEN_PAGO_R3 FOREIGN KEY (ID_ESTADO)
REFERENCES ESTADO (ID_ESTADO);
ALTER TABLE ORDEN_PAGO
ADD CONSTRAINT ORDEN_PAGO_R4 FOREIGN KEY (ID_CUENTA)
REFERENCES CUENTA_BANCARIA (ID_CUENTA);
ALTER TABLE ORDEN_PAGO
ADD CONSTRAINT ORDEN_PAGO_R5 FOREIGN KEY (ID_FORMA_PAGO)
REFERENCES FORMA_PAGO (ID_FORMA_PAGO);
ALTER TABLE ORDEN_PAGO
ADD CONSTRAINT ORDEN_PAGO_R6 FOREIGN KEY (ID_INSCRIPCION)
REFERENCES INSCRIPCION (ID_INSCRIPCION);
ALTER TABLE ORDEN_PAGO
ADD CONSTRAINT ORDEN_PAGO_N1
CHECK ("CUOTA" IS NOT NULL);
ALTER TABLE ORDEN_PAGO
ADD CONSTRAINT ORDEN_PAGO_N2
CHECK ("FECHA_INGRESO" IS NOT NULL);
ALTER TABLE ORDEN_PAGO
ADD CONSTRAINT ORDEN_PAGO_N6
CHECK ("VALOR_TOTAL" IS NOT NULL);
109

CREATE TABLE TASA_CATEGORIA


(ID_TASA_CATEGORIA NUMBER(5) NOT NULL,
DESCRIPCION VARCHAR2(100),
ID_ESTADO NUMBER(5)
);
ALTER TABLE TASA_CATEGORIA
ADD CONSTRAINT TASA_CATEGORIA_P PRIMARY KEY (ID_TASA_CATEGORIA);
ALTER TABLE TASA_CATEGORIA
ADD CONSTRAINT TASA_CATEGORIA_R2 FOREIGN KEY (ID_ESTADO)
REFERENCES ESTADO (ID_ESTADO);
ALTER TABLE TASA_CATEGORIA
ADD CONSTRAINT TASA_CATEGORIA_N2
CHECK ("DESCRIPCION" IS NOT NULL);

CREATE TABLE TASA


(ID_TASA NUMBER(5) NOT NULL,
DESCRIPCION VARCHAR2(100),
ID_TASA_CATEGORIA NUMBER(5),
ID_ESTADO NUMBER(5),
FECHA_INGRESO DATE,
FECHA_DEROGACION DATE,
GRATUIDAD VARCHAR2(2),
OBLIGATORIO VARCHAR2(2),
ID_TIPO_MOVIMIENTO NUMBER(5),
OID VARCHAR2(10));
ALTER TABLE TASA
ADD CONSTRAINT TASA_P PRIMARY KEY (ID_TASA);
ALTER TABLE TASA
ADD CONSTRAINT TASA_R2 FOREIGN KEY (ID_TASA_CATEGORIA)
REFERENCES TASA_CATEGORIA (ID_TASA_CATEGORIA);
ALTER TABLE TASA
ADD CONSTRAINT TASA_R3 FOREIGN KEY (ID_ESTADO)
REFERENCES ESTADO (ID_ESTADO);
ALTER TABLE TASA
ADD CONSTRAINT TASA_R4 FOREIGN KEY (ID_TIPO_MOVIMIENTO)
REFERENCES TIPO_MOVIMIENTO (ID_TIPO_MOVIMIENTO);
ALTER TABLE TASA
ADD CONSTRAINT TASA_N2
CHECK ("DESCRIPCION" IS NOT NULL);
ALTER TABLE TASA
ADD CONSTRAINT TASA_N3
CHECK ("FECHA_INGRESO" IS NOT NULL);

CREATE TABLE TASA_PRECIO


(ID_PRECIO NUMBER(5) NOT NULL,
ID_TASA NUMBER(5),
PRECIO NUMBER(10,2),
ID_ALUMNO_CATEGORIA NUMBER(5),
ID_ESTADO NUMBER(5),
FECHA_INGRESO DATE,
FECHA_DEROGACION DATE,
ID_SEMESTRE NUMBER(5),
ID_PERIODO_LECTIVO NUMBER(5));
ALTER TABLE TASA_PRECIO
ADD CONSTRAINT TASA_PRECIO_P PRIMARY KEY (ID_PRECIO);
ALTER TABLE TASA_PRECIO
ADD CONSTRAINT TASA_PRECIO_R2 FOREIGN KEY (ID_TASA)
REFERENCES TASA (ID_TASA);
ALTER TABLE TASA_PRECIO
ADD CONSTRAINT TASA_PRECIO_R3 FOREIGN KEY (ID_ALUMNO_CATEGORIA)
REFERENCES ALUMNO_CATEGORIA (ID_ALUMNO_CATEGORIA);
ALTER TABLE TASA_PRECIO
ADD CONSTRAINT TASA_PRECIO_R4 FOREIGN KEY (ID_ESTADO)
REFERENCES ESTADO (ID_ESTADO);
110

ALTER TABLE TASA_PRECIO


ADD CONSTRAINT TASA_PRECIO_R6 FOREIGN KEY (ID_SEMESTRE)
REFERENCES SEMESTRE (ID_SEMESTRE);
ALTER TABLE TASA_PRECIO
ADD CONSTRAINT TASA_PRECIO_R7 FOREIGN KEY (ID_PERIODO_LECTIVO)
REFERENCES PERIODO_LECTIVO (ID_PERIODO_LECTIVO);
ALTER TABLE TASA_PRECIO
ADD CONSTRAINT TASA_PRECIO_N2
CHECK ("PRECIO" IS NOT NULL);
ALTER TABLE TASA_PRECIO
ADD CONSTRAINT TASA_PRECIO_N3
CHECK ("FECHA_INGRESO" IS NOT NULL);

CREATE TABLE ORDEN_PAGO_DETALLE


(ID_ORDEN_DETALLE NUMBER(5) NOT NULL,
ID_TASA NUMBER(5),
ID_ORDEN_PAGO NUMBER(5),
ID_ESTADO NUMBER(5),
VALOR_FINAL NUMBER(10,2),
ID_PRECIO NUMBER(5),
PORCENTAJE_TASA NUMBER(3) NOT NULL,
CANTIDAD NUMBER(5));
ALTER TABLE ORDEN_PAGO_DETALLE
ADD CONSTRAINT ORDEN_PAGO_DETALLE_P PRIMARY KEY (ID_ORDEN_DETALLE);
ALTER TABLE ORDEN_PAGO_DETALLE
ADD CONSTRAINT ORDEN_PAGO_DETALLE_R2 FOREIGN KEY (ID_TASA)
REFERENCES TASA (ID_TASA);
ALTER TABLE ORDEN_PAGO_DETALLE
ADD CONSTRAINT ORDEN_PAGO_DETALLE_R3 FOREIGN KEY (ID_ORDEN_PAGO)
REFERENCES ORDEN_PAGO (ID_ORDEN_PAGO);
ALTER TABLE ORDEN_PAGO_DETALLE
ADD CONSTRAINT ORDEN_PAGO_DETALLE_R4 FOREIGN KEY (ID_ESTADO)
REFERENCES ESTADO (ID_ESTADO);
ALTER TABLE ORDEN_PAGO_DETALLE
ADD CONSTRAINT ORDEN_PAGO_DETALLE_R5 FOREIGN KEY (ID_PRECIO)
REFERENCES TASA_PRECIO (ID_PRECIO);
ALTER TABLE ORDEN_PAGO_DETALLE
ADD CONSTRAINT ORDEN_PAGO_DETALLE_N2
CHECK ("VALOR_FINAL" IS NOT NULL);

CREATE TABLE TASA_CUOTA


(ID_TASA NUMBER(5) NOT NULL,
ID_PERIODO_LECTIVO NUMBER(5) NOT NULL,
N_CUOTA NUMBER(5),
PORC_CUOTA NUMBER(5,2),
ID_ESTADO NUMBER(5));
ALTER TABLE TASA_CUOTA
ADD CONSTRAINT TASA_CUOTA_P PRIMARY KEY (ID_TASA, ID_PERIODO_LECTIVO, N_CUOTA);
ALTER TABLE TASA_CUOTA
ADD CONSTRAINT TASA_CUOTA_R1 FOREIGN KEY (ID_TASA)
REFERENCES TASA (ID_TASA);
ALTER TABLE TASA_CUOTA
ADD CONSTRAINT TASA_CUOTA_R2 FOREIGN KEY (ID_PERIODO_LECTIVO)
REFERENCES PERIODO_LECTIVO (ID_PERIODO_LECTIVO);
ALTER TABLE TASA_CUOTA
ADD CONSTRAINT TASA_CUOTA_R3 FOREIGN KEY (ID_ESTADO)
REFERENCES ESTADO (ID_ESTADO);
ALTER TABLE TASA_CUOTA
ADD CONSTRAINT TASA_CUOTA_N3
CHECK ("N_CUOTA" IS NOT NULL);
ALTER TABLE TASA_CUOTA
ADD CONSTRAINT TASA_CUOTA_N4
CHECK ("PORC_CUOTA" IS NOT NULL);
111

CREATE TABLE INSTITUCION_FINANCIERA


(ID_INSTITUCION_FINANCIERA NUMBER(5) NOT NULL,
DESCRIPCION VARCHAR2(100));
ALTER TABLE INSTITUCION_FINANCIERA
ADD CONSTRAINT INSTITUCION_FINANCIERA_P PRIMARY KEY (ID_INSTITUCION_FINANCIERA);
ALTER TABLE INSTITUCION_FINANCIERA
ADD CONSTRAINT INSTITUCION_FINANCIERA_N2
CHECK ("DESCRIPCION" IS NOT NULL);

CREATE TABLE CUENTA_BANCARIA


(ID_CUENTA NUMBER(5) NOT NULL,
NUMERO VARCHAR2(50),
ID_ESTADO NUMBER(5),
TIPO VARCHAR2(50),
ID_INSTITUCION_FINANCIERA NUMBER(5),
FECHA_CREACION DATE,
FECHA_DEROGACION DATE);
ALTER TABLE CUENTA_BANCARIA
ADD CONSTRAINT CUENTA_BANCARIA_P PRIMARY KEY (ID_CUENTA);
ALTER TABLE CUENTA_BANCARIA
ADD CONSTRAINT CUENTA_BANCARIA_R2 FOREIGN KEY (ID_ESTADO)
REFERENCES ESTADO (ID_ESTADO);
ALTER TABLE CUENTA_BANCARIA
ADD CONSTRAINT CUENTA_BANCARIA_R3 FOREIGN KEY (ID_INSTITUCION_FINANCIERA)
REFERENCES INSTITUCION_FINANCIERA (ID_INSTITUCION_FINANCIERA);
ALTER TABLE CUENTA_BANCARIA
ADD CONSTRAINT CUENTA_BANCARIA_N2
CHECK ("NUMERO" IS NOT NULL);
ALTER TABLE CUENTA_BANCARIA
ADD CONSTRAINT CUENTA_BANCARIA_N3
CHECK ("TIPO" IS NOT NULL);
ALTER TABLE CUENTA_BANCARIA
ADD CONSTRAINT CUENTA_BANCARIA_N4
CHECK ("FECHA_CREACION" IS NOT NULL);

CREATE TABLE TIPO_TRANSACCION


(ID_TIPO_TRANS NUMBER(5) NOT NULL,
DESCRIPCION VARCHAR2(200));
ALTER TABLE TIPO_TRANSACCION
ADD CONSTRAINT TIPO_TRANSACCION_P PRIMARY KEY (ID_TIPO_TRANS);

CREATE TABLE FORMA_PAGO


(ID_FORMA_PAGO NUMBER(5) NOT NULL,
DESCRIPCION VARCHAR2(50),
ID_ESTADO NUMBER(5));
ALTER TABLE FORMA_PAGO
ADD CONSTRAINT FORMA_PAGO_P PRIMARY KEY (ID_FORMA_PAGO);
ALTER TABLE FORMA_PAGO
ADD CONSTRAINT FORMA_PAGO_R2 FOREIGN KEY (ID_ESTADO)
REFERENCES ESTADO (ID_ESTADO);
ALTER TABLE FORMA_PAGO
ADD CONSTRAINT FORMA_PAGO_N2
CHECK ("DESCRIPCION" IS NOT NULL);
112

CREATE OR REPLACE PACKAGE BODY PROCESOS_INSCRIPCION AS


--CREADO POR GRUPO 9 --EL 3 DE JUNIO DEL 2009 8:40
FUNCTION GET_NOMBRE_PERSONA(PN_ID_PERSONA NUMBER)RETURN VARCHAR2
IS
LV_NOMBRES VARCHAR2(200);
BEGIN
SELECT NVL(P.APELLIDO_PATERNO,'') ||' '||NVL(P.APELLIDO_MATERNO,'')||' '||NVL(P.PRIMER_NOMBRE,'')||'
'||NVL(P.SEGUNDO_NOMBRE,'') INTO LV_NOMBRES
FROM PERSONA P
WHERE ID_PERSONA=PN_ID_PERSONA;
RETURN LV_NOMBRES;

EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN 'NO SE HA ENCONTRADO NINGÚN DATO';
WHEN OTHERS THEN
RETURN SQLERRM;
END ;
--EXTRAE EL NOMBRE DEL USUARIO
---GRUPO 9 3 DE JUNIO DEL 2009 -- 8:55AM
FUNCTION GET_NOMBRE_USUARIO(PV_USUARIO VARCHAR2)RETURN VARCHAR2 IS
LV_NOMBRE_PERSONA VARCHAR2(200);
BEGIN
SELECT GET_NOMBRE_PERSONA(U.ID_PERSONA)INTO LV_NOMBRE_PERSONA
FROM USUARIO U
WHERE LOWER(U.LOGIN)=LOWER(PV_USUARIO)
AND ROWNUM=1;

RETURN LV_NOMBRE_PERSONA;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN 'NO SE HA ENCONTRADO NINGÚN DATO';
WHEN OTHERS THEN
RETURN SQLERRM;
END;
--EXTRAE EL NOMBRE DEL PERFIL GRUPO 9 3/JUNIO/2009 9:11AM
FUNCTION GET_NOMBRE_PERFIL(PN_ID_PERFIL NUMBER)RETURN VARCHAR2
IS
LV_PERFIL VARCHAR2(50);
BEGIN
SELECT P.DESCRIPCION INTO LV_PERFIL
FROM ADM_PERFILES P
WHERE P.ID_PERFIL=PN_ID_PERFIL;
RETURN LV_PERFIL;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN 'NO SE HA ENCONTRADO NINGÚN DATO';
WHEN OTHERS THEN
RETURN SQLERRM;
END;

--EXTRAER GET_NOMBRE_SECCION 4/06/2009 10:12 AM.


FUNCTION GET_NOMBRE_SECCION(PN_ID_SECCION NUMBER)RETURN VARCHAR2
IS
LV_SECCION VARCHAR2(100);
BEGIN
SELECT DESCRIPCION INTO LV_SECCION
FROM SECCION
WHERE ID_SECCION=PN_ID_SECCION;
RETURN LV_SECCION;
EXCEPTION
WHEN OTHERS THEN
RETURN SQLERRM;
END ;

FUNCTION GET_NOMBRE_ALUMNO(PN_ID_ALUMNO INT)RETURN VARCHAR2


IS
LV_NOMBRES_ALUMNO VARCHAR2(150);
BEGIN
SELECT P.APELLIDO_PATERNO || ' ' || P.APELLIDO_MATERNO || ' ' || P.PRIMER_NOMBRE || ' ' || P.SEGUNDO_NOMBRE INTO
LV_NOMBRES_ALUMNO
FROM PERSONA P,ALUMNO A
WHERE P.ID_PERSONA=A.ID_PERSONA
AND A.ID_ALUMNO=PN_ID_ALUMNO;
113

RETURN NVL(LV_NOMBRES_ALUMNO,'');
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.put_line(SQLERRM);

END;

PROCEDURE INSERTAR_PARALELOS(PV_DESCRIPCION VARCHAR2,


PN_ID_PERIODO_LECTIVO NUMBER,
PN_ID_SECCION NUMBER,
PN_ID_ESTADO NUMBER,PV_USUARIO VARCHAR2)IS
ID_PARALELO NUMBER(5);
BEGIN

SELECT NVL(MAX(ID_PARALELO),0)+1 INTO ID_PARALELO FROM PARALELO;

INSERT INTO
PARALELO(ID_PARALELO,DESCRIPCION,ID_PERIODO_LECTIVO,ID_SECCION,ID_ESTADO,FECHA_REGISTRO,USUARIO_R
EGISTRO)

VALUES(ID_PARALELO,PV_DESCRIPCION,PN_ID_PERIODO_LECTIVO,PN_ID_SECCION,PN_ID_ESTADO,CURRENT_DATE,P
V_USUARIO);

END;
--INSERT_PARALELO_MATERIA
PROCEDURE INSERT_PARALELO_MATERIA(PN_ID_PARALELO NUMBER,PN_ID_MATERIA NUMBER,PN_CUPO_MINIMO
NUMBER,PN_CUPO_MAXIMO NUMBER,PN_CUPO_OCUPADO NUMBER,PN_CUPO_DISPONIBLE NUMBER,PV_USUARIO
VARCHAR2,LV_RESPUESTA OUT VARCHAR2)IS
LN_ID_PARALELO_MATERIA NUMBER(5);
LN_CANT_PM NUMBER(3);

BEGIN
SELECT COUNT(*)INTO LN_CANT_PM
FROM PARALELO_MATERIA PM
WHERE PM.ID_ESTADO=1 AND PM.ID_PARALELO=PN_ID_PARALELO
AND PM.ID_MATERIA=PN_ID_MATERIA;

IF LN_CANT_PM=0 THEN
SELECT NVL(MAX(ID_PARALELO_MATERIA),0)+1 INTO LN_ID_PARALELO_MATERIA
FROM PARALELO_MATERIA;

INSERT INTO
PARALELO_MATERIA(ID_PARALELO_MATERIA,ID_PARALELO,ID_MATERIA,CUPO_MINIMO,CUPO_MAXIMO,CUPO_OCUPAD
O,CUPO_DISPONIBLE,ID_ESTADO,FECHA_REGISTRO,USUARIO_REGISTRO)

VALUES(LN_ID_PARALELO_MATERIA,PN_ID_PARALELO,PN_ID_MATERIA,PN_CUPO_MINIMO,PN_CUPO_MAXIMO,PN_CUP
O_OCUPADO,PN_CUPO_DISPONIBLE,1,CURRENT_DATE,PV_USUARIO);
LV_RESPUESTA:='GRABACIÓN EXITOSA';
ELSIF LN_CANT_PM>0 THEN
LV_RESPUESTA:='NO SE PUEDE GRABAR MATERIA :' || GET_NOMBRE_MATERIA(PN_ID_MATERIA) || ' EN PARALELO: '
||GET_NOMBRE_PARALELO(PN_ID_PARALELO) || ' , PORQUE YA EXISTE EN EL PERIODO LECTIVO VIGENTE';
END IF;
EXCEPTION
WHEN OTHERS THEN
LV_RESPUESTA:=SQLERRM;
END INSERT_PARALELO_MATERIA;

-------------------------
-----------------------

PROCEDURE GET_PARALELOS_DISPONIBLES(PN_NIVEL IN NUMBER,PARALELO OUT


PARALELO_DISPO_TABLE_TYPE,NUM_REGISTROS OUT INT)IS
i BINARY_INTEGER := 0;
BEGIN
FOR PARALELO_RECORD IN (SELECT *--DESCRIPCION,ID_SECCION_POR_DEFECTO
FROM PARALELO_DESCRIPCION WHERE SEMESTRE=PN_NIVEL AND
DESCRIPCION NOT IN (SELECT DESCRIPCION FROM PARALELO))
LOOP
PARALELO(i) := PARALELO_RECORD;
i:= i+1;
NUM_REGISTROS:=i;

END LOOP;
114

END GET_PARALELOS_DISPONIBLES;
----------------------------------
-------------PR_ANULA_PARALELO_MATERIA--POR GUSTAVO ASQUI 24 FEB 09--10:51
PROCEDURE PR_MODIF_PARALELO_MATERIA(PV_OPCION VARCHAR2,PN_ID_PERIODO_LECTIVO
NUMBER,PN_ID_MATERIA NUMBER,PN_ID_PARALELO NUMBER,PV_RESPUESTA OUT VARCHAR2,PV_USUARIO
VARCHAR2,PV_OBSERVACION VARCHAR2,PN_CUPO_MINIMO INT,PN_CUPO_MAXIMO INT)
IS
LN_CUPO_MINIMO NUMBER(5);
LN_CUPO_OCUPADO NUMBER(5);
--LAS CONDICIONES PARA ANULACION DE UNA MATERIA DE UN PARALELO
--SON QUE NO TENGA ALUMNOS INSCRITOS
--O QUE EL NUMERO DE ESTOS NO SUPERE EL MINIMO PERMITIDO
BEGIN

IF PV_OPCION='ANULACION' THEN

--EXTRAER LOS CUPOS OCUPADOS Y CUPOS MINIMOS DE UNA MATERIA EN UN PARALELO


SELECT PM.CUPO_MINIMO,PM.CUPO_OCUPADO INTO LN_CUPO_MINIMO,LN_CUPO_OCUPADO
FROM PARALELO_MATERIA PM
WHERE PM.ID_ESTADO=1 AND PM.ID_PARALELO=PN_ID_PARALELO
AND PM.ID_MATERIA=PN_ID_MATERIA;
-----------------------------------------------------------------

--SI EXISTE ALGUNA NOTA DEL PRIEMR PARCIAL EN EL PARALELO EN UNA MATERIA NO SE PUEDE ANULAR
IF GET_NOTA_1_GENERAL(PN_ID_PERIODO_LECTIVO,PN_ID_MATERIA,PN_ID_PARALELO) =0 THEN
IF LN_CUPO_OCUPADO<LN_CUPO_MINIMO THEN
UPDATE PARALELO_MATERIA
SET
ID_ESTADO=3,FECHA_MODIFICACION=CURRENT_DATE,USUARIO_MODIFICACION=PV_USUARIO,OBSERVACION=PV_OB
SERVACION
WHERE ID_MATERIA=PN_ID_MATERIA AND ID_PARALELO=PN_ID_PARALELO
AND ID_ESTADO=1;

UPDATE INSCRIPCION_DETALLE
SET ID_ESTADO = 3
WHERE ID_ESTADO=1 AND ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND ID_PARALELO=PN_ID_PARALELO
AND ID_MATERIA=PN_ID_MATERIA;
PV_RESPUESTA:='SI SE HA GRABADO CON ÉXITO';

ELSE--NO SE PUEDE ANULARE DEBUDO A QUE YA HA SUPERADO EL CUPO OCUPADO AL CUPO MINIMO
PV_RESPUESTA:='NO SE PUEDE ANULAR DEBIDO A QUE SE HA DETECTADO QUE EL CUPO OCUPADO ES: ' ||
LN_CUPO_OCUPADO || 'SIENDO MAYOR AL CUPO MINIMO DE: ' ||LN_CUPO_MINIMO;
END IF;
ELSE--ES CUANDO YA EXISTE NOTA PERIODO LECTIVA ACTUAL
PV_RESPUESTA:='NO SE PUEDE ELIMINAR DEBIDO A QUE TIENE NOTA ACTUAL EN EL PARALELO: '||
GET_NOMBRE_PARALELO(PN_ID_PARALELO) || ' CON LA MATERIA : ' || GET_NOMBRE_MATERIA(PN_ID_MATERIA);
END IF;--SI
ELSIF PV_OPCION='MODIFICACION' THEN
UPDATE PARALELO_MATERIA
SET CUPO_MINIMO=PN_CUPO_MINIMO,CUPO_MAXIMO=PN_CUPO_MAXIMO,CUPO_DISPONIBLE=PN_CUPO_MAXIMO -
CUPO_OCUPADO,FECHA_MODIFICACION=CURRENT_DATE,USUARIO_MODIFICACION=PV_USUARIO,OBSERVACION=PV_
OBSERVACION
WHERE ID_MATERIA=PN_ID_MATERIA AND ID_PARALELO=PN_ID_PARALELO
AND ID_ESTADO=1;
PV_RESPUESTA:='SI SE HA ACTUALIZADO EXITOSAMENTE LOS CUPOS DE LA/S MATERIA/S EN EL PARALELO: ' ||
GET_NOMBRE_PARALELO(PN_ID_PARALELO);
END IF;
EXCEPTION
WHEN OTHERS THEN
PV_RESPUESTA:=SQLERRM;
END PR_MODIF_PARALELO_MATERIA;

-----------------------------------
----------------GET_NOTA_1 DE UN ALUMNO
FUNCTION GET_NOTA_1_ALUMNO(PN_ID_ALUMNO INT,PN_ID_PERIODO_LECTIVO INT,PN_ID_MATERIA
INT,PN_ID_PARALELO INT)RETURN NUMBER
IS
LN_NOTA1 NUMBER(10,2);
BEGIN
SELECT NVL(N.NOTA_PARCIAL1,0)NOTA_1 INTO LN_NOTA1
FROM NOTAS N
WHERE N.ID_ESTADO<>3 AND N.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
115

AND N.ID_ALUMNO=PN_ID_ALUMNO AND N.ID_MATERIA=PN_ID_MATERIA


AND N.ID_PARALELO=PN_ID_PARALELO;
RETURN NVL(LN_NOTA1,0);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END GET_NOTA_1_ALUMNO;

----------------------
----------------GET_NOTA_1 DE UN ALUMNO
FUNCTION GET_NOTA_1_GENERAL(PN_ID_PERIODO_LECTIVO INT,PN_ID_MATERIA INT,PN_ID_PARALELO INT)RETURN
NUMBER
IS
LN_CUENTA_NOTA1 NUMBER(10,2);
BEGIN
SELECT COUNT(*) INTO LN_CUENTA_NOTA1
FROM NOTAS N
WHERE N.ID_ESTADO<>3 AND N.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND N.ID_MATERIA=PN_ID_MATERIA
AND N.ID_PARALELO=PN_ID_PARALELO
AND NVL(N.NOTA_PARCIAL1,0)>0;
RETURN NVL(LN_CUENTA_NOTA1,0);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END GET_NOTA_1_GENERAL;

----------------------
--*- -*GET_PARAMETRO

FUNCTION GET_PARAMETRO(PV_DESCRIPCION VARCHAR2,PN_ID_MODULO INT)RETURN NUMBER


IS
LN_VALOR NUMBER(5);
BEGIN
SELECT VALOR INTO LN_VALOR
FROM PARAMETROS
WHERE ID_ESTADO=1 AND UPPER(DESCRIPCION)=UPPER(PV_DESCRIPCION)
AND MODULO=PN_ID_MODULO;

RETURN NVL(LN_VALOR,0);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;

PROCEDURE GET_PARALELOS_REGISTRADOS(PN_ID_PERIODO_LECTIVO NUMBER,PN_NIVEL IN NUMBER


,PC_PARALELO OUT r_cursor)IS

BEGIN

OPEN PC_PARALELO FOR


SELECT A.ID_PARALELO,A.DESCRIPCION,A.ID_SECCION
FROM PARALELO A,PARALELO_DESCRIPCION B
WHERE A.DESCRIPCION=B.DESCRIPCION AND ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND B.SEMESTRE=PN_NIVEL AND A.ID_ESTADO=1
ORDER BY A.DESCRIPCION;

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.put_line(SQLERRM);
END GET_PARALELOS_REGISTRADOS;

-----------

---MUESTRAS LOS PARALELOS PERO QUE NO EXISTAN EN LAS TABLA PARALELO_MATERIA


---
PROCEDURE GET_PARALELO_REG_SIN_MATERIAS(PN_ID_PERIODO_LECTIVO NUMBER,PN_NIVEL IN NUMBER
,PC_PARALELO OUT r_cursor)IS

BEGIN

OPEN PC_PARALELO FOR


SELECT A.ID_PARALELO,A.DESCRIPCION,A.ID_SECCION
116

FROM PARALELO A,PARALELO_DESCRIPCION B


WHERE A.DESCRIPCION=B.DESCRIPCION AND ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND B.SEMESTRE=PN_NIVEL AND A.ID_ESTADO=1
AND A.ID_PARALELO NOT IN (SELECT ID_PARALELO FROM PARALELO_MATERIA WHERE ID_ESTADO=1)
ORDER BY A.DESCRIPCION;

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.put_line(SQLERRM);
END GET_PARALELO_REG_SIN_MATERIAS;
-----------

PROCEDURE GET_PERIODO_LECTIVO_VIGENTE(PN_ID_PERIODO_lECTIVO OUT


PERIODO_LECTIVO.ID_PERIODO_LECTIVO%TYPE ,PV_ANIO_PERIODO OUT
PERIODO_LECTIVO.ANIO%TYPE,PV_CICLO_PERIODO OUT PERIODO_LECTIVO.CICLO%TYPE,CUENTA_PERIODOS OUT
NUMBER)IS

BEGIN
SELECT COUNT(*) INTO CUENTA_PERIODOS
FROM PERIODO_LECTIVO
WHERE ID_ESTADO=1;

IF CUENTA_PERIODOS=1 THEN
SELECT ID_PERIODO_LECTIVO,ANIO,CICLO INTO PN_ID_PERIODO_lECTIVO,
PV_ANIO_PERIODO,PV_CICLO_PERIODO
FROM PERIODO_LECTIVO
WHERE ID_ESTADO=1;
ELSIF CUENTA_PERIODOS=0 THEN
PN_ID_PERIODO_lECTIVO:=0;
PV_ANIO_PERIODO:=0;
PV_CICLO_PERIODO:=0;
ELSE
PN_ID_PERIODO_lECTIVO:=-1;
PV_ANIO_PERIODO:=-1;
PV_CICLO_PERIODO:=-1;

END IF;
END GET_PERIODO_LECTIVO_VIGENTE;
------------------------------------------------------------------
PROCEDURE GET_MALLA(REG_MALLA OUT MALLA_TYPE,NUM_REGISTROS OUT INT)IS
LE_ERROR EXCEPTION;
i BINARY_INTEGER := 0;
BEGIN

FOR PARALELO_RECORD IN (SELECT *--ID_PENSUM_MALLA,DESCRIPCION,NUM_SEMESTRES


FROM PENSUM_MALLA
WHERE ID_ESTADO=1)
LOOP
REG_MALLA(i) := PARALELO_RECORD;
i:= i+1;
NUM_REGISTROS:=i;

END LOOP;
EXCEPTION
WHEN OTHERS THEN
NULL;
END GET_MALLA;

--DESARROLLO DEL PROCEDIMIENTO PERIODO_MATERIA


--MODIFICADO 26 DE MAYO DEL 2009
PROCEDURE INSERTA_PERIODO_MATERIA(PN_ID_MATERIA NUMBER,PN_ID_PERIODO_LECTIVO
NUMBER,PN_ID_ESTADO NUMBER)IS
LN_ID_PERIODO_MATERIA NUMBER(5):=0;
LN_NUM_MATERIA_EN_PERIODO NUMBER(5):=0;
BEGIN
SELECT NVL(MAX(ID_PERIODO_MATERIA),0)+1 INTO LN_ID_PERIODO_MATERIA
FROM PERIODO_MATERIA;

SELECT COUNT(*)INTO LN_NUM_MATERIA_EN_PERIODO


FROM PERIODO_MATERIA
WHERE ID_ESTADO=1 AND ID_MATERIA= PN_ID_MATERIA AND ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO;

IF LN_NUM_MATERIA_EN_PERIODO=0 THEN
INSERT INTO PERIODO_MATERIA(ID_PERIODO_MATERIA,ID_MATERIA,ID_PERIODO_LECTIVO,ID_ESTADO)
117

VALUES(LN_ID_PERIODO_MATERIA,PN_ID_MATERIA,PN_ID_PERIODO_LECTIVO,PN_ID_ESTADO);
END IF;

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.put_line(SQLERRM);

END INSERTA_PERIODO_MATERIA;

--RETORNA EL NOMBRE DE UNA MATERIA EN BASE A SU ID


FUNCTION GET_NOMBRE_MATERIA(PN_ID_MATERIA NUMBER)RETURN VARCHAR2
IS
LV_NOMBRE_MATERIA VARCHAR2(100);
BEGIN
SELECT DESCRIPCION INTO LV_NOMBRE_MATERIA
FROM MATERIA
WHERE ID_MATERIA=PN_ID_MATERIA;
RETURN LV_NOMBRE_MATERIA;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END GET_NOMBRE_MATERIA;

-----------------------------------------------------------------------
--------------GET_NOMBRE_PARALELO
FUNCTION GET_NOMBRE_PARALELO(PN_ID_PARALELO INT) RETURN VARCHAR2
IS
LV_NOMBRE_PARARLELO VARCHAR2(50);
BEGIN

SELECT A.DESCRIPCION INTO LV_NOMBRE_PARARLELO


FROM PARALELO A
WHERE A.ID_ESTADO=1 AND A.ID_PARALELO=PN_ID_PARALELO;

RETURN LV_NOMBRE_PARARLELO;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;

--RETORNA LAS MATERIAS CURRICULARES PÀRA EL PERIDO LECTIVO VIGENTE


PROCEDURE GET_PERIODO_MATERIA_CUR(PN_ID_PERIODO_LECTIVO IN NUMBER,PN_ID_SEMESTRE IN
NUMBER,PN_ID_PENSUM IN NUMBER,PC_PERIODO_MATERIA IN OUT r_cursor,PN_ID_PARALELO INT)IS
BEGIN

if PN_ID_PENSUM >0 then--para consultar CON pensum


OPEN PC_PERIODO_MATERIA FOR

SELECT DISTINCT B.ID_MATERIA,C.CODIGO_MATERIA,C.DESCRIPCION


FROM PERIODO_MATERIA A,MALLA_DETALLE B,MATERIA C
WHERE A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_MATERIA=B.ID_MATERIA AND B.ID_MATERIA=C.ID_MATERIA AND
A.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND B.ID_SEMESTRE=PN_ID_SEMESTRE
AND B.ID_PENSUM_MALLA=PN_ID_PENSUM
AND C.ID_TIPO_MATERIA NOT IN (4,5)
ORDER BY C.CODIGO_MATERIA;
elsif PN_ID_PENSUM=0 and PN_ID_SEMESTRE>0 then--para consultar sin pensum

OPEN PC_PERIODO_MATERIA FOR

SELECT DISTINCT B.ID_MATERIA,C.CODIGO_MATERIA,C.DESCRIPCION


FROM PERIODO_MATERIA A,MALLA_DETALLE B,MATERIA C
WHERE A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_MATERIA=B.ID_MATERIA AND B.ID_MATERIA=C.ID_MATERIA AND
A.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND B.ID_SEMESTRE=PN_ID_SEMESTRE
AND C.ID_TIPO_MATERIA NOT IN (4,5)
ORDER BY C.CODIGO_MATERIA;

elsif PN_ID_PENSUM=0 and PN_ID_SEMESTRE=0 then--para consultar sin pensum

OPEN PC_PERIODO_MATERIA FOR

SELECT DISTINCT B.ID_MATERIA,C.CODIGO_MATERIA,C.DESCRIPCION


FROM PERIODO_MATERIA A,MALLA_DETALLE B,MATERIA C
118

WHERE A.ID_ESTADO=1 AND B.ID_ESTADO=1


AND A.ID_MATERIA=B.ID_MATERIA AND B.ID_MATERIA=C.ID_MATERIA AND
A.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND C.ID_TIPO_MATERIA NOT IN (4,5)
ORDER BY C.CODIGO_MATERIA;

elsif PN_ID_PENSUM=-1 then--para consultar DE PARALELO_MATERIA

OPEN PC_PERIODO_MATERIA FOR


SELECT DISTINCT
B.ID_MATERIA,C.CODIGO_MATERIA,C.DESCRIPCION,A.CUPO_MINIMO,A.CUPO_MAXIMO,A.CUPO_OCUPADO,A.CUPO_DIS
PONIBLE
FROM PARALELO_MATERIA A,MALLA_DETALLE B,MATERIA C
WHERE A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_MATERIA=B.ID_MATERIA AND B.ID_MATERIA=C.ID_MATERIA AND
B.ID_SEMESTRE=PN_ID_SEMESTRE
AND C.ID_TIPO_MATERIA NOT IN (4,5)AND A.ID_PARALELO=PN_ID_PARALELO
ORDER BY C.CODIGO_MATERIA;

end if;

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;

--RETORNA LAS MATERIAS OPTATIVAS PÀRA EL PERIDO LECTIVO VIGENTE


--BUSQUEDA POR PENSUM,PERIODO LECTIVO Y SEMESTRE
PROCEDURE GET_PERIODO_MATERIA_OPT(PN_ID_PERIODO_LECTIVO IN NUMBER,PN_ID_SEMESTRE IN
NUMBER,PN_ID_PENSUM IN NUMBER,PC_PERIODO_MATERIA IN OUT r_cursor,PN_ID_PARALELO INT)IS
BEGIN
IF PN_ID_PENSUM > 0 THEN--CON PENSUM

OPEN PC_PERIODO_MATERIA FOR

SELECT DISTINCT B.ID_MATERIA,C.CODIGO_MATERIA,C.DESCRIPCION


FROM PERIODO_MATERIA A,MALLA_DETALLE B,MATERIA C
WHERE A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_MATERIA=B.ID_MATERIA AND B.ID_MATERIA=C.ID_MATERIA AND
A.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND B.ID_SEMESTRE=PN_ID_SEMESTRE
AND B.ID_PENSUM_MALLA=PN_ID_PENSUM
AND C.ID_TIPO_MATERIA IN (4,5)
ORDER BY C.CODIGO_MATERIA;

ELSIF PN_ID_PENSUM = 0 and PN_ID_SEMESTRE>0 THEN--SIN PENSUM

OPEN PC_PERIODO_MATERIA FOR

SELECT DISTINCT B.ID_MATERIA,C.CODIGO_MATERIA,C.DESCRIPCION


FROM PERIODO_MATERIA A,MALLA_DETALLE B,MATERIA C
WHERE A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_MATERIA=B.ID_MATERIA AND B.ID_MATERIA=C.ID_MATERIA AND
A.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND B.ID_SEMESTRE=PN_ID_SEMESTRE

AND C.ID_TIPO_MATERIA IN (4,5)


ORDER BY C.CODIGO_MATERIA;

ELSIF PN_ID_PENSUM = 0 and PN_ID_SEMESTRE=0 THEN--SIN PENSUM

OPEN PC_PERIODO_MATERIA FOR

SELECT DISTINCT B.ID_MATERIA,C.CODIGO_MATERIA,C.DESCRIPCION


FROM PERIODO_MATERIA A,MALLA_DETALLE B,MATERIA C
WHERE A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_MATERIA=B.ID_MATERIA AND B.ID_MATERIA=C.ID_MATERIA AND
A.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO

AND C.ID_TIPO_MATERIA IN (4,5)


ORDER BY C.CODIGO_MATERIA;

elsif PN_ID_PENSUM=-1 then--para consultar DE PARALELO_MATERIA

OPEN PC_PERIODO_MATERIA FOR


119

SELECT DISTINCT
B.ID_MATERIA,C.CODIGO_MATERIA,C.DESCRIPCION,A.CUPO_MINIMO,A.CUPO_MAXIMO,A.CUPO_OCUPADO,A.CUPO_DIS
PONIBLE
FROM PARALELO_MATERIA A,MALLA_DETALLE B,MATERIA C
WHERE A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_MATERIA=B.ID_MATERIA AND B.ID_MATERIA=C.ID_MATERIA AND
B.ID_SEMESTRE=PN_ID_SEMESTRE
AND C.ID_TIPO_MATERIA IN (4,5)AND A.ID_PARALELO=PN_ID_PARALELO
ORDER BY C.CODIGO_MATERIA;

END IF;

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;

--RETORNA TODOS LAS MATERIAS CURRICULARES DEL PERIODO LECTIVO VIGENTE


PROCEDURE GET_TODOS_PERIODO_MATERIA_CUR(PN_ID_PERIODO_LECTIVO IN NUMBER,PC_PERIODO_MATERIA IN
OUT r_cursor)IS
BEGIN
OPEN PC_PERIODO_MATERIA FOR

SELECT DISTINCT B.ID_MATERIA,C.CODIGO_MATERIA,C.DESCRIPCION


FROM PERIODO_MATERIA A,MALLA_DETALLE B,MATERIA C
WHERE A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_MATERIA=B.ID_MATERIA AND B.ID_MATERIA=C.ID_MATERIA AND
A.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND C.ID_TIPO_MATERIA NOT IN (4,5)
ORDER BY C.CODIGO_MATERIA;

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;

--RETORNA TODOS LAS MATERIAS OPTATIVAS DEL PERIODO LECTIVO VIGENTE


PROCEDURE GET_TODOS_PERIODO_MATERIA_OPT(PN_ID_PERIODO_LECTIVO IN NUMBER,PC_PERIODO_MATERIA IN
OUT r_cursor)IS
BEGIN
OPEN PC_PERIODO_MATERIA FOR

SELECT DISTINCT B.ID_MATERIA,C.CODIGO_MATERIA,C.DESCRIPCION


FROM PERIODO_MATERIA A,MALLA_DETALLE B,MATERIA C
WHERE A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_MATERIA=B.ID_MATERIA AND B.ID_MATERIA=C.ID_MATERIA AND
A.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND C.ID_TIPO_MATERIA IN (4,5)
ORDER BY C.CODIGO_MATERIA;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;

------------------------------------------------------
---------------------------------------------------------
--EXTRAE SOLO LOS NIVELES/SEMESTRES DE LOS PARALELOS CREADOSA EN EL PERIODO LECTIVO VIGENTE
PROCEDURE GET_SEMESTRES_PARALELOS(PN_ID_PERIODO_LECTIVO IN NUMBER,PC_SEMESTRES_PARALELOS IN
OUT r_cursor)IS
BEGIN
OPEN PC_SEMESTRES_PARALELOS FOR
SELECT DISTINCT B.SEMESTRE
FROM PARALELO A,PARALELO_DESCRIPCION B
WHERE A.DESCRIPCION=B.DESCRIPCION
AND A.ID_ESTADO=1 AND A.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
ORDER BY B.SEMESTRE;

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;

PROCEDURE EJECUTAR_TRANSACCION IS
BEGIN
COMMIT;
120

END;
PROCEDURE DESHACER_TRANSACCION IS
BEGIN
ROLLBACK;
END;

----------------------------------------------------------
----PARA PANTALLA DE INSCRIPCIUON LO SIGUIENTE
-----------------------------------------------------------
PROCEDURE GET_ALUMNOS(PV_OPCION VARCHAR2,PN_CEDULA VARCHAR2,PV_COD_ESTUDIANTIL
VARCHAR2,PV_APE_PATERNO VARCHAR2,PV_APE_MATERNO VARCHAR2,PV_PRIMER_NOMBRE
VARCHAR2,PV_SEG_NOMBRE VARCHAR2,PC_ALUMNOS OUT r_cursor)IS
BEGIN
IF PV_OPCION='TODOS' THEN
OPEN PC_ALUMNOS FOR
SELECT A.ID_ALUMNO,B.CEDULA,A.CODIGO_ESTUDIANTIL,B.APELLIDO_PATERNO || ' ' || B.APELLIDO_MATERNO || ' ' ||
B.PRIMER_NOMBRE || ' ' || B.SEGUNDO_NOMBRE,C.DESCRIPCION
FROM ALUMNO A,PERSONA B,ALUMNO_CATEGORIA C
WHERE A.ID_PERSONA=B.ID_PERSONA AND A.ID_ALUMNO_CATEGORIA=C.ID_ALUMNO_CATEGORIA
AND A.ID_ESTADO=1
ORDER BY B.APELLIDO_PATERNO || ' ' || B.APELLIDO_MATERNO || ' ' || B.PRIMER_NOMBRE || ' ' || B.SEGUNDO_NOMBRE
;
ELSIF PV_OPCION='CEDULA' THEN--POR C.I.
OPEN PC_ALUMNOS FOR
SELECT A.ID_ALUMNO,B.CEDULA,A.CODIGO_ESTUDIANTIL,B.APELLIDO_PATERNO || ' ' || B.APELLIDO_MATERNO || ' ' ||
B.PRIMER_NOMBRE || ' ' || B.SEGUNDO_NOMBRE,C.DESCRIPCION
FROM ALUMNO A,PERSONA B,ALUMNO_CATEGORIA C
WHERE A.ID_PERSONA=B.ID_PERSONA AND A.ID_ALUMNO_CATEGORIA=C.ID_ALUMNO_CATEGORIA
AND A.ID_ESTADO=1 AND B.CEDULA LIKE TRIM(PN_CEDULA) || '%'
ORDER BY B.APELLIDO_PATERNO || ' ' || B.APELLIDO_MATERNO || ' ' || B.PRIMER_NOMBRE || ' ' || B.SEGUNDO_NOMBRE
;
ELSIF PV_OPCION='CODIGO' THEN--POR CODIGO ESTUDIANTIL
OPEN PC_ALUMNOS FOR
SELECT A.ID_ALUMNO,B.CEDULA,A.CODIGO_ESTUDIANTIL,B.APELLIDO_PATERNO || ' ' || B.APELLIDO_MATERNO || ' ' ||
B.PRIMER_NOMBRE || ' ' || B.SEGUNDO_NOMBRE,C.DESCRIPCION
FROM ALUMNO A,PERSONA B,ALUMNO_CATEGORIA C
WHERE A.ID_PERSONA=B.ID_PERSONA AND A.ID_ALUMNO_CATEGORIA=C.ID_ALUMNO_CATEGORIA
AND A.ID_ESTADO=1 AND A.CODIGO_ESTUDIANTIL LIKE '%' || PV_COD_ESTUDIANTIL || '%'
ORDER BY B.APELLIDO_PATERNO || ' ' || B.APELLIDO_MATERNO || ' ' || B.PRIMER_NOMBRE || ' ' || B.SEGUNDO_NOMBRE
;
ELSIF PV_OPCION='NOMBRES' THEN--POR NOMBRES

OPEN PC_ALUMNOS FOR


SELECT A.ID_ALUMNO,B.CEDULA,A.CODIGO_ESTUDIANTIL,NVL(B.APELLIDO_PATERNO,'') || ' ' ||
NVL(B.APELLIDO_MATERNO,'') || ' ' || NVL(B.PRIMER_NOMBRE,'') || ' ' || NVL(B.SEGUNDO_NOMBRE,''),C.DESCRIPCION
FROM ALUMNO A,PERSONA B,ALUMNO_CATEGORIA C
WHERE A.ID_PERSONA=B.ID_PERSONA AND A.ID_ALUMNO_CATEGORIA=C.ID_ALUMNO_CATEGORIA
AND A.ID_ESTADO=1
AND TRIM(NVL(B.APELLIDO_PATERNO,' ')) LIKE TRIM(NVL(PV_APE_PATERNO,' ')) || '%'
AND TRIM(NVL(B.APELLIDO_MATERNO,' ')) LIKE TRIM(NVL(PV_APE_MATERNO,' ')) || '%'
AND TRIM(NVL(B.PRIMER_NOMBRE,' ')) LIKE TRIM(NVL(PV_PRIMER_NOMBRE,' ')) || '%'
AND TRIM(NVL(B.SEGUNDO_NOMBRE,' ')) LIKE TRIM(NVL(PV_SEG_NOMBRE,' ')) || '%'

ORDER BY NVL(B.APELLIDO_PATERNO,'') || ' ' || NVL(B.APELLIDO_MATERNO,'') || ' ' || NVL(B.PRIMER_NOMBRE,'') || ' ' ||
NVL(B.SEGUNDO_NOMBRE,'')
;

END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END GET_ALUMNOS;

--END;
121

PROCEDURE GET_MATERIAS_INSCRIPCION(PN_ID_ALUMNO NUMBER,PN_ID_PERIODO_LECTIVO


NUMBER,PC_ALUMNO_MATERIAS OUT r_cursor)
IS
--LN_NIVEL_ALUMNO NUMBER(2);
BEGIN
/*LN_NIVEL_ALUMNO:=get_nivel_alumno(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO);
IF NVL(LN_NIVEL_ALUMNO,0)=0 THEN
LN_NIVEL_ALUMNO:=1;
END IF;*/
OPEN PC_ALUMNO_MATERIAS FOR

SELECT * FROM
(
SELECT MD.ID_MATERIA,M.CODIGO_MATERIA,M.DESCRIPCION
NOMBRE_MATERIA,get_vez_tomada_materia(PN_ID_ALUMNO,MD.ID_MATERIA,PN_ID_PERIODO_LECTIVO)VEZ_TOMADA
FROM MALLA_DETALLE MD,MATERIA M
WHERE MD.ID_ESTADO=1-- AND ID_TIPO_REQUISITO=1
--LO SIG ES PARA NO MOSTRAR MATERIA OPTATIVAS O ELECTIVAS
AND MD.ID_MATERIA=M.ID_MATERIA AND M.ID_TIPO_MATERIA IN(0,1,2,3)
--CON TABLA NOTAS
AND
((MD.ID_MATERIA_REQUISITO IN (SELECT DISTINCT ID_MATERIA
FROM NOTAS
WHERE ID_ESTADO=14 AND ID_ALUMNO=PN_ID_ALUMNO AND (NVL(NOTA_PROMEDIO,0)>=7 OR
NVL(NOTA_GRACIA,0)>=7)AND ((ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO AND
TRIM(TIPO_NOTA)='SEM')OR TRIM(TIPO_NOTA) IN('HOM','GRA')))
AND MD.ID_MATERIA NOT IN(SELECT DISTINCT ID_MATERIA
FROM MALLA_DETALLE
WHERE ID_ESTADO=1 AND ID_TIPO_REQUISITO=1 AND ID_MATERIA=MD.ID_MATERIA
AND ID_MATERIA_REQUISITO NOT IN(SELECT DISTINCT ID_MATERIA
FROM NOTAS
WHERE ID_ESTADO=14 AND ID_ALUMNO=PN_ID_ALUMNO
AND (NVL(NOTA_PROMEDIO,0)>=7 OR
NVL(NOTA_GRACIA,0)>=7)AND ((ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO
AND TRIM(TIPO_NOTA)='SEM')OR TRIM(TIPO_NOTA) IN('HOM','GRA')))

)
-- AHORA CON TABLA HISTORIAL_NOTAS
OR
(
ID_MATERIA_REQUISITO IN (SELECT DISTINCT ID_MATERIA
FROM HISTORIAL_NOTAS
WHERE ID_ESTADO=1 AND ID_ALUMNO=PN_ID_ALUMNO AND (NVL(PROMEDIO,0)>=7 OR
NVL(EX_GRACIA,0)>=7)AND NVL(ID_MATERIA,0)<>0)
AND MD.ID_MATERIA NOT IN(SELECT DISTINCT ID_MATERIA
FROM MALLA_DETALLE
WHERE ID_ESTADO=1 AND ID_TIPO_REQUISITO=1 AND ID_MATERIA=MD.ID_MATERIA
AND ID_MATERIA_REQUISITO NOT IN(SELECT DISTINCT ID_MATERIA
FROM HISTORIAL_NOTAS
WHERE ID_ESTADO=1 AND ID_ALUMNO=PN_ID_ALUMNO
AND (NVL(PROMEDIO,0)>=7 OR
NVL(EX_GRACIA,0)>=7)AND NVL(ID_MATERIA,0)<>0)
)
))

--LO SIG. ES PARA EVITAR MOSTRAR MATERIAS INSCRITAS EN PERIODO_LECTIVO VIGENTE


AND MD.ID_MATERIA NOT IN(SELECT ID_MATERIA
FROM INSCRIPCION I,INSCRIPCION_DETALLE ID
WHERE I.ID_INSCRIPCION=ID.ID_INSCRIPCION AND ID.ID_ESTADO=1 AND I.ID_ESTADO=1
AND ID_ALUMNO=PN_ID_ALUMNO AND ID.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO)

AND MD.ID_MATERIA IN (SELECT ID_MATERIA FROM PERIODO_MATERIA WHERE ID_ESTADO=1 AND


ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO)

--AUMENTADO 15 DE MAYO/09 PARA QUE NO MUESTRE LAS MATERIAS YA APROBADAS


AND MD.ID_MATERIA NOT IN(SELECT DISTINCT ID_MATERIA
FROM HISTORIAL_NOTAS
WHERE ID_ESTADO=1 AND ID_ALUMNO=PN_ID_ALUMNO
AND (NVL(PROMEDIO,0)>=7 OR
NVL(EX_GRACIA,0)>=7)AND NVL(ID_MATERIA,0)<>0
)
AND MD.ID_MATERIA NOT IN(SELECT DISTINCT ID_MATERIA--14 es estado aprobado
122

FROM NOTAS
WHERE ID_ESTADO=14 AND ID_ALUMNO=PN_ID_ALUMNO
AND (NVL(NOTA_PROMEDIO,0)>=7 OR
NVL(NOTA_GRACIA,0)>=7)AND NVL(ID_MATERIA,0)<>0
AND ((ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO AND TRIM(TIPO_NOTA)='SEM')OR
TRIM(TIPO_NOTA) IN('HOM','GRA'))
)
--HASTA AQUI AUMENTADO 15/05/2009 12:56 PM
--******************** AUMENTADO EL 9 DE JUNIO 09
-----
AND MD.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM MATERIA_EQUIVALENTE
WHERE ID_MATERIA_EQUIVALE IN
(SELECT DISTINCT ID_MATERIA
FROM HISTORIAL_NOTAS
WHERE ID_ESTADO=1 AND ID_ALUMNO=PN_ID_ALUMNO
AND (NVL(PROMEDIO,0)>=7 OR
NVL(EX_GRACIA,0)>=7)AND NVL(ID_MATERIA,0)<>0
)
AND ID_ESTADO=1
)
/*
AND MD.ID_MATERIA IN (SELECT MDET.ID_MATERIA
FROM MALLA_DETALLE MDET
WHERE MDET.ID_PENSUM_MALLA IN (select distinct(id_pensum_malla)
from malla_detalle
where id_semestre=GET_NIVEL_MATERIA(MD.ID_MATERIA) and id_materia in (select id_materia
from periodo_materia where id_periodo_lectivo=PN_ID_PERIODO_LECTIVO and id_estado=1)
)
AND MDET.ID_SEMESTRE=GET_NIVEL_MATERIA(MD.ID_MATERIA)

AND MDET.ID_ESTADO=1
) */
--******************** HASTA AQUI AUMENTADO EL 9 DE JUNIO 09

UNION
--2--USANDO TABLA DE MATERIAS EQUIVALENTES
SELECT MD.ID_MATERIA,M.CODIGO_MATERIA,M.DESCRIPCION
NOMBRE_MATERIA,get_vez_tomada_materia(PN_ID_ALUMNO,MD.ID_MATERIA,PN_ID_PERIODO_LECTIVO)VEZ_TOMADA
FROM MALLA_DETALLE MD,MATERIA M
WHERE MD.ID_ESTADO=1-- AND ID_TIPO_REQUISITO=1
AND MD.ID_MATERIA=M.ID_MATERIA AND M.ID_TIPO_MATERIA IN(0,1,2,3)
--CON TABLA NOTAS
AND
((ID_MATERIA_REQUISITO IN (SELECT DISTINCT ME.ID_MATERIA
FROM NOTAS N,MATERIA_EQUIVALENTE ME
WHERE N.ID_ESTADO=14 AND ME.ID_ESTADO=1 AND ID_ALUMNO=PN_ID_ALUMNO AND
(NVL(NOTA_PROMEDIO,0)>=7 OR NVL(NOTA_GRACIA,0)>=7)AND
N.ID_MATERIA=ME.ID_MATERIA_EQUIVALE
--AUMENTADO EL 28/05/2009 PARA QUE NO SE MUESTREN LAS MATERIAS VISTAS PERIODO_LECTIVO
VIGENTE COMO
--PREREQUISITOS
AND ((N.ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO AND TRIM(N.TIPO_NOTA)='SEM')OR
TRIM(N.TIPO_NOTA) IN('HOM','GRA'))

)
AND MD.ID_MATERIA NOT IN(SELECT DISTINCT ID_MATERIA
FROM MALLA_DETALLE
WHERE ID_ESTADO=1 AND ID_TIPO_REQUISITO=1 AND ID_MATERIA=MD.ID_MATERIA
AND ID_MATERIA_REQUISITO NOT IN(SELECT DISTINCT ME.ID_MATERIA
FROM NOTAS N,MATERIA_EQUIVALENTE ME
WHERE N.ID_ESTADO=14 AND ME.ID_ESTADO=1 AND ID_ALUMNO=PN_ID_ALUMNO AND
(NVL(NOTA_PROMEDIO,0)>=7 OR NVL(NOTA_GRACIA,0)>=7)AND
N.ID_MATERIA=ME.ID_MATERIA_EQUIVALE
--AUMENTADO EL 28/05/2009 PARA QUE NO SE MUESTREN LAS MATERIAS VISTAS
PERIODO_LECTIVO VIGENTE COMO
--PREREQUISITOS
AND ((N.ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO AND
TRIM(N.TIPO_NOTA)='SEM')OR TRIM(N.TIPO_NOTA) IN('HOM','GRA'))
)
)
)
-- AHORA CON TABLA HISTORIAL_NOTAS
OR
(
ID_MATERIA_REQUISITO IN (SELECT DISTINCT ME.ID_MATERIA
FROM HISTORIAL_NOTAS HN,MATERIA_EQUIVALENTE ME
123

WHERE HN.ID_ESTADO=1 AND ME.ID_ESTADO=1 AND HN.ID_ALUMNO=PN_ID_ALUMNO


AND (NVL(HN.PROMEDIO,0)>=7 OR NVL(HN.EX_GRACIA,0)>=7)
AND HN.ID_MATERIA=ME.ID_MATERIA_EQUIVALE
AND NVL(HN.ID_MATERIA,0)<>0
)
AND MD.ID_MATERIA NOT IN(SELECT DISTINCT ID_MATERIA
FROM MALLA_DETALLE
WHERE ID_ESTADO=1 AND ID_TIPO_REQUISITO=1 AND ID_MATERIA=MD.ID_MATERIA
AND ID_MATERIA_REQUISITO NOT IN(SELECT DISTINCT ME.ID_MATERIA
FROM HISTORIAL_NOTAS HN,MATERIA_EQUIVALENTE ME
WHERE HN.ID_ESTADO=1 AND ME.ID_ESTADO=1 AND HN.ID_ALUMNO=PN_ID_ALUMNO
AND (NVL(HN.PROMEDIO,0)>=7 OR NVL(HN.EX_GRACIA,0)>=7)
AND HN.ID_MATERIA=ME.ID_MATERIA_EQUIVALE
AND NVL(HN.ID_MATERIA,0)<>0
)
)
))

--LO SIG. ES PARA EVITAR MOSTRAR MATERIAS INSCRITAS EN PERIODO_LECTIVO VIGENTE


AND MD.ID_MATERIA NOT IN(SELECT ID_MATERIA
FROM INSCRIPCION I,INSCRIPCION_DETALLE ID
WHERE I.ID_INSCRIPCION=ID.ID_INSCRIPCION AND ID.ID_ESTADO=1
AND ID_ALUMNO=PN_ID_ALUMNO AND ID.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO)

AND MD.ID_MATERIA IN (SELECT ID_MATERIA FROM PERIODO_MATERIA WHERE ID_ESTADO=1 AND


ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO)

--AUMENTADO 15 DE MAYO/09 PARA QUE NO MUESTRE LAS MATERIAS YA APROBADAS


AND MD.ID_MATERIA NOT IN(SELECT DISTINCT ID_MATERIA
FROM HISTORIAL_NOTAS
WHERE ID_ESTADO=1 AND ID_ALUMNO=PN_ID_ALUMNO
AND (NVL(PROMEDIO,0)>=7 OR
NVL(EX_GRACIA,0)>=7)AND NVL(ID_MATERIA,0)<>0
)
AND MD.ID_MATERIA NOT IN(SELECT DISTINCT ID_MATERIA
FROM NOTAS
WHERE ID_ESTADO=14 AND ID_ALUMNO=PN_ID_ALUMNO
AND (NVL(NOTA_PROMEDIO,0)>=7 OR
NVL(NOTA_GRACIA,0)>=7)AND NVL(ID_MATERIA,0)<>0
--AUMENTADO EL 28/05/2009 PARA QUE NO SE MUESTREN LAS MATERIAS VISTAS PERIODO_LECTIVO
VIGENTE COMO
--PREREQUISITOS
AND ((ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO AND TRIM(TIPO_NOTA)='SEM')OR
TRIM(TIPO_NOTA) IN('HOM','GRA'))
)
--HASTA AQUI AUMENTADO 15/05/2009 12:56 PM
--******************** AUMENTADO EL 9 DE JUNIO 09
-----
AND MD.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM MATERIA_EQUIVALENTE
WHERE ID_MATERIA_EQUIVALE IN
(SELECT DISTINCT ID_MATERIA
FROM HISTORIAL_NOTAS
WHERE ID_ESTADO=1 AND ID_ALUMNO=PN_ID_ALUMNO
AND (NVL(PROMEDIO,0)>=7 OR
NVL(EX_GRACIA,0)>=7)AND NVL(ID_MATERIA,0)<>0
)
AND ID_ESTADO=1
)
/*
AND MD.ID_MATERIA IN (SELECT MDET.ID_MATERIA
FROM MALLA_DETALLE MDET
WHERE MDET.ID_PENSUM_MALLA IN (select distinct(id_pensum_malla)
from malla_detalle
where id_semestre=GET_NIVEL_MATERIA(MD.ID_MATERIA) and id_materia in (select id_materia
from periodo_materia where id_periodo_lectivo=PN_ID_PERIODO_LECTIVO and id_estado=1)
)
AND MDET.ID_SEMESTRE=GET_NIVEL_MATERIA(MD.ID_MATERIA)

AND MDET.ID_ESTADO=1
) */

--******************** HASTA AQUI AUMENTADO EL 9 DE JUNIO 09


--3----PARA LAS MATERIAS SIN PRE-REQUISITOS Y SIN OTROS REQUISITOS
UNION
124

SELECT MD.ID_MATERIA,M.CODIGO_MATERIA,M.DESCRIPCION
NOMBRE_MATERIA,get_vez_tomada_materia(PN_ID_ALUMNO,MD.ID_MATERIA,PN_ID_PERIODO_LECTIVO)VEZ_TOMADA
FROM MALLA_DETALLE MD,MATERIA M
WHERE MD.ID_TIPO_REQUISITO=0 AND
MD.ID_SEMESTRE<=get_nivel_alumno(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)+1
--LO SIG ES PARA NO MOSTRAR LAS MATERIAS OPTATIVAS O ELECTIVAS
AND MD.ID_MATERIA=M.ID_MATERIA AND M.ID_TIPO_MATERIA IN(0,1,2,3)
--LO SIG . ES SOLO PARA MOSTRAR LAS MATERIAS QUE ESTEN ACTIVAS EN PERIODO_MATERIA
AND MD.ID_MATERIA IN (SELECT ID_MATERIA FROM PERIODO_MATERIA WHERE
ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND ID_ESTADO=1)
--LO SIG VERIFICA QUE NO ESTEN APROBADAS EN TABLA NOTAS
AND MD.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM NOTAS WHERE ID_ESTADO=14 AND
ID_ALUMNO=PN_ID_ALUMNO AND (NOTA_PROMEDIO>=7 OR
NOTA_GRACIA>=7)
--AUMENTADO EL 28/05/2009 PARA QUE NO SE MUESTREN LAS MATERIAS VISTAS PERIODO_LECTIVO
VIGENTE COMO
--PREREQUISITOS
AND ((ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO AND TRIM(TIPO_NOTA)='SEM')OR
TRIM(TIPO_NOTA) IN('HOM','GRA'))
)
--LO SIG VERIFICA QUE NO ESTEN APROBADAS EN TABLA HISTORIAL_NOTAS
AND MD.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM HISTORIAL_NOTAS WHERE ID_ESTADO=1 AND
ID_ALUMNO=PN_ID_ALUMNO AND (PROMEDIO>=7 OR
EX_GRACIA>=7)AND NVL(ID_MATERIA,0)<>0
)
--LO SIG. ES PARA EVITAR MOSTRAR MATERIAS INSCRITAS EN PERIODO_LECTIVO VIGENTE
AND MD.ID_MATERIA NOT IN(SELECT ID_MATERIA
FROM INSCRIPCION I,INSCRIPCION_DETALLE ID
WHERE I.ID_INSCRIPCION=ID.ID_INSCRIPCION AND ID.ID_ESTADO=1
AND ID_ALUMNO=PN_ID_ALUMNO AND ID.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO)
--LO SIG. EVITA QUE SE MEUSTREN MATERIAS CON OTROS REQUISITOS
AND NVL(MD.CREDITOS_REQUERIDOS,0)=0 AND NVL(MD.NIVELES_REQUERIDOS,0)=0 AND
NVL(MD.MATERIAS_REQUERIDAS,0)=0

--AUMENTADO 15 DE MAYO/09 PARA QUE NO MUESTRE LAS MATERIAS YA APROBADAS


AND MD.ID_MATERIA NOT IN(SELECT DISTINCT ID_MATERIA
FROM HISTORIAL_NOTAS
WHERE ID_ESTADO=1 AND ID_ALUMNO=PN_ID_ALUMNO
AND (NVL(PROMEDIO,0)>=7 OR
NVL(EX_GRACIA,0)>=7)AND NVL(ID_MATERIA,0)<>0
)
AND MD.ID_MATERIA NOT IN(SELECT DISTINCT ID_MATERIA
FROM NOTAS
WHERE ID_ESTADO=14 AND ID_ALUMNO=PN_ID_ALUMNO
AND (NVL(NOTA_PROMEDIO,0)>=7 OR
NVL(NOTA_GRACIA,0)>=7)AND NVL(ID_MATERIA,0)<>0
--AUMENTADO EL 28/05/2009 PARA QUE NO SE MUESTREN LAS MATERIAS VISTAS PERIODO_LECTIVO
VIGENTE COMO
--PREREQUISITOS
AND ((ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO AND TRIM(TIPO_NOTA)='SEM')OR
TRIM(TIPO_NOTA) IN('HOM','GRA'))
)
--HASTA AQUI AUMENTADO 15/05/2009 12:56 PM

--PARA LAS MATERIAS SIN PRERQUISITOS Y CON REQUISITOS DE CREDITOS


--******************** AUMENTADO EL 9 DE JUNIO 09
-----

AND MD.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM MATERIA_EQUIVALENTE


WHERE ID_MATERIA_EQUIVALE IN
(SELECT DISTINCT ID_MATERIA
FROM HISTORIAL_NOTAS
WHERE ID_ESTADO=1 AND ID_ALUMNO=PN_ID_ALUMNO
AND (NVL(PROMEDIO,0)>=7 OR
NVL(EX_GRACIA,0)>=7)AND NVL(ID_MATERIA,0)<>0
)
AND ID_ESTADO=1
)
/*
AND MD.ID_MATERIA IN (SELECT MDET.ID_MATERIA
FROM MALLA_DETALLE MDET
WHERE MDET.ID_PENSUM_MALLA IN (select distinct(id_pensum_malla)
125

from malla_detalle
where id_semestre=GET_NIVEL_MATERIA(MD.ID_MATERIA) and id_materia in (select id_materia
from periodo_materia where id_periodo_lectivo=PN_ID_PERIODO_LECTIVO and id_estado=1)
)
AND MDET.ID_SEMESTRE=GET_NIVEL_MATERIA(MD.ID_MATERIA)

AND MDET.ID_ESTADO=1
)
*/
--******************** HASTA AQUI AUMENTADO EL 9 DE JUNIO 09
--4------
UNION
SELECT MD.ID_MATERIA,M.CODIGO_MATERIA,M.DESCRIPCION
NOMBRE_MATERIA,get_vez_tomada_materia(PN_ID_ALUMNO,MD.ID_MATERIA,PN_ID_PERIODO_LECTIVO)VEZ_TOMADA
FROM MALLA_DETALLE MD,MATERIA M
WHERE MD.ID_TIPO_REQUISITO=0 AND MD.ID_SEMESTRE<=get_nivel_alumno(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO
)+1
--LO SIG ES PARA NO MOSTRAR LAS MATERIAS OPTATIVAS O ELECTIVAS
AND MD.ID_MATERIA=M.ID_MATERIA AND M.ID_TIPO_MATERIA IN(0,1,2,3)
--LO SIG . ES SOLO PARA MOSTRAR LAS MATERIAS QUE ESTEN ACTIVAS EN PERIODO_MATERIA
AND MD.ID_MATERIA IN (SELECT ID_MATERIA FROM PERIODO_MATERIA WHERE
ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND ID_ESTADO=1)
--LO SIG VERIFICA QUE NO ESTEN APROBADAS EN TABLA NOTAS
AND MD.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM NOTAS WHERE ID_ESTADO=14 AND
ID_ALUMNO=PN_ID_ALUMNO AND (NOTA_PROMEDIO>=7 OR
NOTA_GRACIA>=7)
--AUMENTADO EL 28/05/2009 PARA QUE NO SE MUESTREN LAS MATERIAS VISTAS PERIODO_LECTIVO
VIGENTE COMO
--PREREQUISITOS
AND ((ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO AND TRIM(TIPO_NOTA)='SEM')OR
TRIM(TIPO_NOTA) IN('HOM','GRA'))
)
--LO SIG VERIFICA QUE NO ESTEN APROBADAS EN TABLA HISTORIAL_NOTAS
AND MD.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM HISTORIAL_NOTAS WHERE ID_ESTADO=1 AND
ID_ALUMNO=PN_ID_ALUMNO AND (PROMEDIO>=7 OR
EX_GRACIA>=7)AND NVL(ID_MATERIA,0)<>0
)
--LO SIG. ES PARA EVITAR MOSTRAR MATERIAS INSCRITAS EN PERIODO_LECTIVO VIGENTE
AND MD.ID_MATERIA NOT IN(SELECT ID_MATERIA
FROM INSCRIPCION I,INSCRIPCION_DETALLE ID
WHERE I.ID_INSCRIPCION=ID.ID_INSCRIPCION AND ID.ID_ESTADO=1
AND ID_ALUMNO=PN_ID_ALUMNO AND ID.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO)
--LO SIG. ES PARA MOSTRAR SOLO LAS MATERIAS QUE HAYAN SIDO CUMPLIDOS LOS CREDITOS REQUERIDOS
AND GET_NUMERO_CREDITOS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)>=NVL(MD.CREDITOS_REQUERIDOS,0)

AND NVL(MD.CREDITOS_REQUERIDOS,0)>0

--AUMENTADO 15 DE MAYO/09 PARA QUE NO MUESTRE LAS MATERIAS YA APROBADAS


AND MD.ID_MATERIA NOT IN(SELECT DISTINCT ID_MATERIA
FROM HISTORIAL_NOTAS
WHERE ID_ESTADO=1 AND ID_ALUMNO=PN_ID_ALUMNO
AND (NVL(PROMEDIO,0)>=7 OR
NVL(EX_GRACIA,0)>=7)AND NVL(ID_MATERIA,0)<>0
)
AND MD.ID_MATERIA NOT IN(SELECT DISTINCT ID_MATERIA
FROM NOTAS
WHERE ID_ESTADO=14 AND ID_ALUMNO=PN_ID_ALUMNO
AND (NVL(NOTA_PROMEDIO,0)>=7 OR
NVL(NOTA_GRACIA,0)>=7)AND NVL(ID_MATERIA,0)<>0
--AUMENTADO EL 28/05/2009 PARA QUE NO SE MUESTREN LAS MATERIAS VISTAS PERIODO_LECTIVO
VIGENTE COMO
--PREREQUISITOS
AND ((ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO AND TRIM(TIPO_NOTA)='SEM')OR
TRIM(TIPO_NOTA) IN('HOM','GRA'))
)
--HASTA AQUI AUMENTADO 15/05/2009 12:56 PM
--******************** AUMENTADO EL 9 DE JUNIO 09
-----
AND MD.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM MATERIA_EQUIVALENTE
WHERE ID_MATERIA_EQUIVALE IN
(SELECT DISTINCT ID_MATERIA
FROM HISTORIAL_NOTAS
WHERE ID_ESTADO=1 AND ID_ALUMNO=PN_ID_ALUMNO
AND (NVL(PROMEDIO,0)>=7 OR
NVL(EX_GRACIA,0)>=7)AND NVL(ID_MATERIA,0)<>0
)
126

AND ID_ESTADO=1
)
/*
AND MD.ID_MATERIA IN (SELECT MDET.ID_MATERIA
FROM MALLA_DETALLE MDET
WHERE MDET.ID_PENSUM_MALLA IN (select distinct(id_pensum_malla)
from malla_detalle
where id_semestre=GET_NIVEL_MATERIA(MD.ID_MATERIA) and id_materia in (select id_materia
from periodo_materia where id_periodo_lectivo=PN_ID_PERIODO_LECTIVO and id_estado=1)
)
AND MDET.ID_SEMESTRE=GET_NIVEL_MATERIA(MD.ID_MATERIA)

AND MDET.ID_ESTADO=1
) */

--******************** HASTA AQUI AUMENTADO EL 9 DE JUNIO 09


UNION
--5 MOSTRARA MATERIAS SIN IMPOTAR SI TIENEN PREREQUISITOS PERO CON REQUISITOS DE NIVELES
SELECT MD.ID_MATERIA,M.CODIGO_MATERIA,M.DESCRIPCION
NOMBRE_MATERIA,get_vez_tomada_materia(PN_ID_ALUMNO,MD.ID_MATERIA,PN_ID_PERIODO_LECTIVO)VEZ_TOMADA
FROM MALLA_DETALLE MD ,MATERIA M
WHERE MD.ID_SEMESTRE<=get_nivel_alumno(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)+1
--LO SIG ES PARA NO MOSTRAR LAS MATERIAS OPTATIVAS O ELECTIVAS
AND MD.ID_MATERIA=M.ID_MATERIA AND M.ID_TIPO_MATERIA IN(0,1,2,3)
--LO SIG . ES SOLO PARA MOSTRAR LAS MATERIAS QUE ESTEN ACTIVAS EN PERIODO_MATERIA
AND MD.ID_MATERIA IN (SELECT ID_MATERIA FROM PERIODO_MATERIA WHERE
ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND ID_ESTADO=1)
--LO SIG VERIFICA QUE NO ESTEN APROBADAS EN TABLA NOTAS
AND MD.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM NOTAS WHERE ID_ESTADO=14 AND
ID_ALUMNO=PN_ID_ALUMNO AND (NOTA_PROMEDIO>=7 OR
NOTA_GRACIA>=7)
--AUMENTADO EL 28/05/2009 PARA QUE NO SE MUESTREN LAS MATERIAS VISTAS PERIODO_LECTIVO
VIGENTE COMO
--PREREQUISITOS
AND ((ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO AND TRIM(TIPO_NOTA)='SEM')OR
TRIM(TIPO_NOTA) IN('HOM','GRA'))
)
--LO SIG VERIFICA QUE NO ESTEN APROBADAS EN TABLA HISTORIAL_NOTAS
AND MD.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM HISTORIAL_NOTAS WHERE ID_ESTADO=1 AND
ID_ALUMNO=PN_ID_ALUMNO AND (PROMEDIO>=7 OR
EX_GRACIA>=7)AND NVL(ID_MATERIA,0)<>0
)
--LO SIG. ES PARA EVITAR MOSTRAR MATERIAS INSCRITAS EN PERIODO_LECTIVO VIGENTE
AND MD.ID_MATERIA NOT IN(SELECT ID_MATERIA
FROM INSCRIPCION I,INSCRIPCION_DETALLE ID
WHERE I.ID_INSCRIPCION=ID.ID_INSCRIPCION AND ID.ID_ESTADO=1
AND ID_ALUMNO=PN_ID_ALUMNO AND ID.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO)
--LO SIG. ES PARA MOSTRAR SOLO LAS MATERIAS QUE HAYAN SIDO CUMPLIDOS LOS CREDITOS REQUERIDOS
AND get_nivel_alumno(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)>=NVL(MD.NIVELES_REQUERIDOS,0)
AND
FU_MATERIAS_APRO_SEMESTRE(PN_ID_ALUMNO,NVL(MD.NIVELES_REQUERIDOS,0),PN_ID_PERIODO_LECTIVO)>=NVL(
MD.MATERIAS_REQUERIDAS,0)
AND NVL(MD.NIVELES_REQUERIDOS,0)>0

--AUMENTADO 15 DE MAYO/09 PARA QUE NO MUESTRE LAS MATERIAS YA APROBADAS


AND MD.ID_MATERIA NOT IN(SELECT DISTINCT ID_MATERIA
FROM HISTORIAL_NOTAS
WHERE ID_ESTADO=1 AND ID_ALUMNO=PN_ID_ALUMNO
AND (NVL(PROMEDIO,0)>=7 OR
NVL(EX_GRACIA,0)>=7)AND NVL(ID_MATERIA,0)<>0
)
AND MD.ID_MATERIA NOT IN(SELECT DISTINCT ID_MATERIA
FROM NOTAS
WHERE ID_ESTADO=14 AND ID_ALUMNO=PN_ID_ALUMNO
AND (NVL(NOTA_PROMEDIO,0)>=7 OR
NVL(NOTA_GRACIA,0)>=7)AND NVL(ID_MATERIA,0)<>0
--AUMENTADO EL 28/05/2009 PARA QUE NO SE MUESTREN LAS MATERIAS VISTAS PERIODO_LECTIVO
VIGENTE COMO
--PREREQUISITOS
AND ((ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO AND TRIM(TIPO_NOTA)='SEM')OR
TRIM(TIPO_NOTA) IN('HOM','GRA'))
)
--HASTA AQUI AUMENTADO 15/05/2009 12:56 PM
--******************** AUMENTADO EL 9 DE JUNIO 09
127

-----
AND MD.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM MATERIA_EQUIVALENTE
WHERE ID_MATERIA_EQUIVALE IN
(SELECT DISTINCT ID_MATERIA
FROM HISTORIAL_NOTAS
WHERE ID_ESTADO=1 AND ID_ALUMNO=PN_ID_ALUMNO
AND (NVL(PROMEDIO,0)>=7 OR
NVL(EX_GRACIA,0)>=7)AND NVL(ID_MATERIA,0)<>0
)
AND ID_ESTADO=1
)
/*
AND MD.ID_MATERIA IN (SELECT MDET.ID_MATERIA
FROM MALLA_DETALLE MDET
WHERE MDET.ID_PENSUM_MALLA IN (select distinct(id_pensum_malla)
from malla_detalle
where id_semestre=GET_NIVEL_MATERIA(MD.ID_MATERIA) and id_materia in (select id_materia
from periodo_materia where id_periodo_lectivo=PN_ID_PERIODO_LECTIVO and id_estado=1)
)
AND MDET.ID_SEMESTRE=GET_NIVEL_MATERIA(MD.ID_MATERIA)

AND MDET.ID_ESTADO=1
) */
)
--------------
WHERE ID_MATERIA NOT IN (

--MODIFICADO 10 DE JUNIO DEL 10 JUNIO DEL 2009


SELECT ID_MATERIA FROM MALLA_DETALLE
WHERE ID_ESTADO=1 AND ID_MATERIA IN (SELECT ID_MATERIA FROM PERIODO_MATERIA WHERE
ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND ID_ESTADO=1)
AND ID_SEMESTRE IN (SELECT DISTINCT GET_NIVEL_MATERIA(ID_MATERIA)
FROM
(
SELECT DISTINCT ID_MATERIA FROM MALLA_DETALLE MD
WHERE ID_ESTADO=1 AND ID_SEMESTRE IN(SELECT DISTINCT GET_NIVEL_MATERIA(ID_MATERIA) FROM
HISTORIAL_NOTAS WHERE ID_ALUMNO=PN_ID_ALUMNO AND ID_ESTADO=1)
AND ID_PENSUM_MALLA IN(SELECT DISTINCT GET_MALLA_MATERIA(ID_MATERIA) FROM HISTORIAL_NOTAS
WHERE ID_ALUMNO=PN_ID_ALUMNO AND ID_ESTADO=1)
INTERSECT
SELECT HN.ID_MATERIA FROM HISTORIAL_NOTAS HN
WHERE ID_ESTADO=1 AND ID_ALUMNO=PN_ID_ALUMNO
AND (PROMEDIO>=7 OR EX_GRACIA>=7)
)
MINUS
--
SELECT DISTINCT GET_NIVEL_MATERIA(ID_MATERIA)
FROM
(
SELECT DISTINCT ID_MATERIA FROM MALLA_DETALLE MD
WHERE ID_ESTADO=1 AND ID_SEMESTRE IN(SELECT DISTINCT GET_NIVEL_MATERIA(ID_MATERIA) FROM
HISTORIAL_NOTAS WHERE ID_ALUMNO=PN_ID_ALUMNO AND ID_ESTADO=1)
AND ID_PENSUM_MALLA IN(SELECT DISTINCT GET_MALLA_MATERIA(ID_MATERIA) FROM HISTORIAL_NOTAS
WHERE ID_ALUMNO=PN_ID_ALUMNO AND ID_ESTADO=1)
MINUS
SELECT HN.ID_MATERIA FROM HISTORIAL_NOTAS HN
WHERE ID_ESTADO=1 AND ID_ALUMNO=PN_ID_ALUMNO
AND (PROMEDIO>=7 OR EX_GRACIA>=7)
)
)

--
)
--PARA NO MOSTRAR MATERIAS YA APROBADAS ESPECIALMENTE D ELA MALLA NUEVA
AND ID_MATERIA NOT IN (SELECT ID_MATERIA FROM MATERIA_EQUIVALENTE WHERE ID_MATERIA_EQUIVALE IN
(SELECT ID_MATERIA FROM HISTORIAL_NOTAS WHERE ID_ESTADO=1 AND ID_ALUMNO=PN_ID_ALUMNO AND
(PROMEDIO>=7 OR EX_GRACIA>=7)))
------MODFI
--******************** HASTA AQUI AUMENTADO EL 9 DE JUNIO 09
;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END GET_MATERIAS_INSCRIPCION;

-------------------
128

---------------GET_TIPO_MATERIA
FUNCTION GET_TIPO_MATERIA(PN_ID_MATERIA INT)RETURN VARCHAR2
IS
LV_TIPO_MATERIA VARCHAR2(50);
BEGIN
SELECT UPPER(TRIM(NVL(B.DESCRIPCION,' ')))INTO LV_TIPO_MATERIA
FROM MATERIA A,TIPO_MATERIA B
WHERE A.ID_TIPO_MATERIA=B.ID_TIPO_MATERIA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_MATERIA=PN_ID_MATERIA;
RETURN LV_TIPO_MATERIA;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;

---PARA EXTRAER TODOS LOS PARALELOS QUE HAYAN SIDO REGISTRADOS UNA MATERIA
--CUYO CUPO DISPONIBLE >0
PROCEDURE GET_PARALELOS_MATERIA(PV_OPCION VARCHAR2,PN_ID_PERIODO_LECTIVO NUMBER,PN_ID_MATERIA
NUMBER,PC_PARALELOS_MATERIA OUT r_cursor)
IS
BEGIN
IF PV_OPCION='POR MATERIA' THEN
OPEN PC_PARALELOS_MATERIA FOR
SELECT a.id_paralelo,b.descripcion,B.ID_SECCION
FROM PARALELO_MATERIA A,PARALELO B
WHERE A.ID_ESTADO=1 AND A.ID_PARALELO=B.ID_PARALELO
AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND B.ID_ESTADO=1
AND A.ID_MATERIA=PN_ID_MATERIA AND A.CUPO_DISPONIBLE>0;
ELSIF PV_OPCION='TODOS' THEN
OPEN PC_PARALELOS_MATERIA FOR
SELECT DISTINCT a.id_paralelo,b.descripcion--,B.ID_SECCION
FROM PARALELO_MATERIA A,PARALELO B,PARALELO_DESCRIPCION C
WHERE A.ID_ESTADO=1 AND A.ID_PARALELO=B.ID_PARALELO
AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND B.ID_ESTADO=1
AND B.DESCRIPCION=C.DESCRIPCION
AND C.SEMESTRE=PN_ID_MATERIA
AND C.ID_ESTADO=1
ORDER BY b.descripcion
;

END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);

END GET_PARALELOS_MATERIA;

----------------------------------------------------------
----------------------------------------------------------
PROCEDURE PR_INSCRIBIR(PN_ID_INSCRIPCION OUT NUMBER,PN_ID_ALUMNO NUMBER,PN_ID_EMPLEADO
NUMBER,PN_ID_ESTADO NUMBER,PV_RESULTADO OUT VARCHAR2,PV_USUARIO_INSCRIBE VARCHAR2)IS
LN_ID_INSCRIPCION NUMBER(5);

BEGIN
SELECT NVL(MAX(ID_INSCRIPCION),0)+1 INTO LN_ID_INSCRIPCION
FROM INSCRIPCION;

--IF FUN_FUE_ALUMNO_INSCRITO(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)=FALSE OR
FUN_FUE_ALUMNO_INSCRITO_GRACIA
(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO,PN_ID_MATERIA,LV_RESPUESTA)=FALSE THEN

INSERT INTO
INSCRIPCION(ID_INSCRIPCION,ID_ALUMNO,FECHA_INSCRIPCION,HORA_INSCRIPCION,ID_EMPLEADO_INSCRIBE,ID_EST
ADO,USUARIO_INSCRIBE)
VALUES(LN_ID_INSCRIPCION,PN_ID_ALUMNO,CURRENT_DATE,CURRENT_DATE,PN_ID_EMPLEADO,PN_ID_ESTADO,PV_
USUARIO_INSCRIBE);
--END IF;
PN_ID_INSCRIPCION:=LN_ID_INSCRIPCION;

PV_RESULTADO:='GRABACIÓN EXITOSA';
EXCEPTION
WHEN OTHERS THEN
PV_RESULTADO:=SQLERRM;
END PR_INSCRIBIR;
129

------------------------------PR_INSCRIBE_DETALLE
PROCEDURE PR_INSCRIBE_DETALLE(PN_ID_INSCRIPCION NUMBER,PN_PERIODO_LECTIVO NUMBER,PN_PARALELO
NUMBER,PN_MATERIA NUMBER,PN_VEZ_TOMADA NUMBER,PN_ID_ESTADO NUMBER,PV_USUARIO
VARCHAR2,PV_OBSERVACION VARCHAR2,PV_RESULTADO OUT VARCHAR2,PN_ID_ALUMNO INT)
IS
LN_ID_PARALELO_MATERIA INT;
LN_CUPO_DISPONIBLE INT;
--PARA ASIGNARLE EL VALOR DE LA INSCRIPCION
LN_ID_INSCRIPCION INT;
LV_OBSERVACION VARCHAR2(100);
LV_TIPO_INSCRIPCION VARCHAR2(100);
--
LN_PAR_MAT_REP NUMBER(5);
LE_ERROR EXCEPTION;
BEGIN

LV_TIPO_INSCRIPCION:=UPPER(TRIM(SUBSTR(PV_OBSERVACION,1,INSTR(PV_OBSERVACION,'-',1,1)-1)));

IF LV_TIPO_INSCRIPCION='ORDINARIA' OR LV_TIPO_INSCRIPCION='EXTRAORDINARIA' THEN


--LO SIGUIENTE VERIFICA SI HAY UN/A ALUMNO/A INSCRITO/A
IF FUN_FUE_ALUMNO_INSCRITO(PN_ID_ALUMNO,PN_PERIODO_LECTIVO)=TRUE THEN

SELECT A.ID_INSCRIPCION,B.OBSERVACION INTO LN_ID_INSCRIPCION,LV_OBSERVACION


FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_ESTADO=1 AND A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO
AND B.ID_PERIODO_LECTIVO=PN_PERIODO_LECTIVO
AND ROWNUM=1
--AUMENTADO POR GR9 24/05/2009 18:19
AND UPPER(TRIM(SUBSTR(B.OBSERVACION,1,INSTR(B.OBSERVACION,'-',1,1)-1)))IN ('ORDINARIA','EXTRAORDINARIA');
ELSE
LN_ID_INSCRIPCION:=PN_ID_INSCRIPCION;
LV_OBSERVACION:=PV_OBSERVACION;
END IF;
ELSIF LV_TIPO_INSCRIPCION='EXAMEN DE GRACIA' THEN
IF
FUN_FUE_ALUMNO_INSCRITO_GRACIA(PN_ID_ALUMNO,PN_PERIODO_LECTIVO,PN_MATERIA,PV_RESULTADO)=TRUE
THEN

SELECT A.ID_INSCRIPCION,B.OBSERVACION INTO LN_ID_INSCRIPCION,LV_OBSERVACION


FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_ESTADO=1 AND A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO
AND B.ID_PERIODO_LECTIVO=PN_PERIODO_LECTIVO
AND ROWNUM=1
--AUMENTADO POR GR9 24/05/2009 18:19
AND UPPER(TRIM(SUBSTR(B.OBSERVACION,1,INSTR(B.OBSERVACION,'-',1,1)-1)))IN ('EXAMEN DE GRACIA');
ELSE
LN_ID_INSCRIPCION:=PN_ID_INSCRIPCION;
LV_OBSERVACION:=PV_OBSERVACION;
END IF;

END IF;
------------------------------
IF SUBSTR(PV_RESULTADO,1,2)='NO' OR SUBSTR(PV_RESULTADO,1,3)='ORA' THEN
RAISE LE_ERROR;
END IF;

LN_ID_PARALELO_MATERIA:=GET_PARALELO_MATERIA(PN_PARALELO,PN_MATERIA);
--ACTUALIZA CUPOS
IF NVL(LN_ID_PARALELO_MATERIA,0)<>0 THEN
PR_ACTUALIZA_CUPOS(LN_ID_PARALELO_MATERIA,LN_CUPO_DISPONIBLE);
ELSE
LN_CUPO_DISPONIBLE:=1;--ESTE 1 SOLO SIRVE EN EL CASO DE QUE SEA EXAMENES DE GRACIA
END IF;

IF LN_CUPO_DISPONIBLE>=0 THEN
SELECT COUNT(*)INTO LN_PAR_MAT_REP
FROM INSCRIPCION_DETALLE
WHERE ID_INSCRIPCION=LN_ID_INSCRIPCION AND ID_ESTADO=1
AND ID_PERIODO_LECTIVO=PN_PERIODO_LECTIVO
AND ID_MATERIA=PN_MATERIA;
--------------------------------------------------------
130

--------------------------------------------------------
IF LN_PAR_MAT_REP>0 THEN
PV_RESULTADO:='NO SE PUEDE GRABAR MATERIA: ' ||GET_NOMBRE_MATERIA(PN_MATERIA) || ' EN PARALELO: ' ||
GET_NOMBRE_PARALELO(PN_PARALELO) || ' , DEBIDO A QUE EL ALUMNO A INSCRIBIR YA HA GRABADO ESTA MATERIA
EN OTRO PARALELO';
RAISE LE_ERROR;
END IF;

INSERT INTO INSCRIPCION_DETALLE(ID_INSCRIPCION_DETALLE,


ID_INSCRIPCION,ID_PERIODO_LECTIVO,ID_PARALELO,ID_MATERIA,
VEZ_TOMADA,ID_ESTADO,FECHA_REGISTRO,HORA_REGISTRO,
USUARIO_REGISTRO,OBSERVACION)
SELECT NVL(MAX(A.ID_INSCRIPCION_DETALLE),0)+1,LN_ID_INSCRIPCION,
PN_PERIODO_LECTIVO,PN_PARALELO,PN_MATERIA,PN_VEZ_TOMADA,
PN_ID_ESTADO,CURRENT_DATE,CURRENT_DATE,PV_USUARIO,LV_OBSERVACION
FROM INSCRIPCION_DETALLE A;
PV_RESULTADO:='SI';
ELSE
PV_RESULTADO:='NO SE PUEDE REALIZAR LA INSCRIPCIÓN PORQUE NO EXISTE EL CUPO EN DISPONIBLE EN LA
MATERIA :'|| get_nombre_materia(PN_MATERIA) || ' EN EL PARALELO:' || GET_NOMBRE_PARALELO(PN_PARALELO) ;
RAISE LE_ERROR;
END IF;

EXCEPTION
WHEN LE_ERROR THEN
PV_RESULTADO:=PV_RESULTADO;
WHEN OTHERS THEN
PV_RESULTADO:=SQLERRM;

END PR_INSCRIBE_DETALLE;
--------------FUN_TIPO_MATRICULA---------------------
FUNCTION FUN_TIPO_MATRICULA RETURN VARCHAR2 IS
--LN_FECHA_DESDE DATE;
--LN_FECHA_HASTA DATE;
--MODIFICADO 16 DE JUNIO DEL 2009
LV_TIPO_INSCRIPCION VARCHAR2(100):=' ';
LN_FECHA_ACTUAL DATE;
CURSOR CUR IS
SELECT FECHA_DESDE,FECHA_HASTA,TIPO_INSCRIPCION
FROM PERIODO_INSCRIPCION
WHERE ID_ESTADO=1;
BEGIN

SELECT CURRENT_DATE INTO LN_FECHA_ACTUAL


FROM DUAL;

FOR REG IN CUR LOOP


IF TO_DATE(LN_FECHA_ACTUAL,'DD/MM/YYYY')>=TO_DATE(REG.FECHA_DESDE,'DD/MM/YYYY') AND
TO_DATE(LN_FECHA_ACTUAL,'DD/MM/YYYY')<=TO_DATE(REG.FECHA_HASTA,'DD/MM/YYYY') THEN
LV_TIPO_INSCRIPCION:= REG.TIPO_INSCRIPCION;

END IF;
END LOOP;
IF LV_TIPO_INSCRIPCION=' ' THEN
LV_TIPO_INSCRIPCION:='NO ES TIEMPO DE INSCRIPCION';
END IF;
RETURN LV_TIPO_INSCRIPCION;
/*
SELECT FECHA_DESDE,FECHA_HASTA INTO LN_FECHA_DESDE,LN_FECHA_HASTA
FROM PERIODO_INSCRIPCION
WHERE ID_ESTADO=1 ;
IF TO_DATE(LN_FECHA_ACTUAL,'DD/MM/YYYY')>=TO_DATE(LN_FECHA_DESDE,'DD/MM/YYYY') AND
TO_DATE(LN_FECHA_HASTA,'DD/MM/YYYY')>=TO_DATE(LN_FECHA_ACTUAL,'DD/MM/YYYY') THEN
RETURN 'ORDINARIA';
ELSIF TO_DATE(LN_FECHA_ACTUAL,'DD/MM/YYYY')>TO_DATE(LN_FECHA_HASTA,'DD/MM/YYYY') THEN
RETURN 'EXTRAORDINARIA';
END IF;*/
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);

END FUN_TIPO_MATRICULA;
--------------------------------------------------------------
---------PR_MATERIAS_OPTATIVAS_DISPONIBLES
PROCEDURE PR_MATERIAS_OPTATIVAS_DISP(PN_ID_ALUMNO INT,PN_ID_PERIODO_LECTIVO
131

INT,PC_ALUMNO_MATERIAS OUT r_cursor)


IS
--
--LN_NIVEL_ALUMNO NUMBER(2);

--
BEGIN
/*LN_NIVEL_ALUMNO:=get_nivel_alumno(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO);
IF NVL(LN_NIVEL_ALUMNO,0)=0 THEN
LN_NIVEL_ALUMNO:=1;
END IF;*/
OPEN PC_ALUMNO_MATERIAS FOR

/*SELECT DISTINCT
MO.ID_MATERIA,M.CODIGO_MATERIA,get_nombre_materia(MO.ID_MATERIA)nombre_materia,get_vez_tomada_materia(PN_ID_
ALUMNO,MO.id_materia,PN_ID_PERIODO_LECTIVO)vez_tomada
FROM MATERIA_OPTATIVA MO,MATERIA M
WHERE MO.ID_MATERIA_ELECTIVA IN(
SELECT DISTINCT A.ID_MATERIA--
,B.CODIGO_MATERIA,get_nombre_materia(A.ID_MATERIA),get_nombre_materia(A.ID_MATERIA_REQUISITO)
FROM MALLA_DETALLE A,MATERIA B
WHERE A.ID_MATERIA=B.ID_MATERIA
AND B.ID_TIPO_MATERIA IN(6,7) AND A.ID_ESTADO=1
AND B.ID_ESTADO=1 AND A.ID_MATERIA_REQUISITO IN(SELECT ID_MATERIA
FROM HISTORIAL_NOTAS HN
WHERE HN.ID_ALUMNO=PN_ID_ALUMNO AND (PROMEDIO>=7 OR EX_GRACIA>=7) AND
ID_ESTADO=1
)
AND A.ID_MATERIA NOT IN (SELECT ID_MATERIA FROM MALLA_DETALLE WHERE ID_MATERIA=A.ID_MATERIA AND
ID_MATERIA_REQUISITO NOT IN
(SELECT ID_MATERIA
FROM HISTORIAL_NOTAS HN
WHERE HN.ID_ALUMNO=PN_ID_ALUMNO AND (PROMEDIO>=7 OR EX_GRACIA>=7) AND ID_ESTADO=1
)
)
)
AND MO.ID_MATERIA IN (SELECT ID_MATERIA FROM PERIODO_MATERIA WHERE
ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND ID_ESTADO=1)
AND MO.ID_MATERIA NOT IN(SELECT ID.ID_MATERIA FROM INSCRIPCION I,INSCRIPCION_DETALLE ID WHERE
I.ID_INSCRIPCION=ID.ID_INSCRIPCION
AND I.ID_ESTADO=1 AND ID.ID_ESTADO=1 AND ID.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND
I.ID_ALUMNO=PN_ID_ALUMNO)
AND MO.ID_MATERIA=M.ID_MATERIA
UNION
--LO SIG . ES PARA MATERIAS ELECTIVAS
SELECT DISTINCT
MD.ID_MATERIA,M.CODIGO_MATERIA,get_nombre_materia(M.ID_MATERIA),get_vez_tomada_materia(PN_ID_ALUMNO,M.ID_M
ATERIA,PN_ID_PERIODO_LECTIVO)VEZ_TOMADA
FROM MALLA_DETALLE MD,MATERIA M
WHERE MD.ID_MATERIA=M.ID_MATERIA
AND M.ID_TIPO_MATERIA IN (4)AND (MD.ID_MATERIA_REQUISITO IN(SELECT ID_MATERIA
FROM HISTORIAL_NOTAS HN
WHERE HN.ID_ESTADO=1 AND HN.ID_ALUMNO=PN_ID_ALUMNO AND
(HN.PROMEDIO>=7 OR HN.EX_GRACIA>=7)
)
OR MD.ID_MATERIA_REQUISITO=0)
AND MD.ID_ESTADO=1 AND M.ID_ESTADO=1
AND MD.ID_MATERIA IN (SELECT ID_MATERIA FROM PERIODO_MATERIA WHERE
ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND ID_ESTADO=1)
AND MD.ID_MATERIA NOT IN(SELECT ID.ID_MATERIA FROM INSCRIPCION I,INSCRIPCION_DETALLE ID WHERE
I.ID_INSCRIPCION=ID.ID_INSCRIPCION
AND I.ID_ESTADO=1 AND ID.ID_ESTADO=1 AND ID.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND
I.ID_ALUMNO=PN_ID_ALUMNO)

;*/
--MODIFICADO 10 DE MAYO 2009 14:33
/*COMENTADO 11 DE JUNIO DEL 2009
SELECT DISTINCT
MO.ID_MATERIA,M.CODIGO_MATERIA,get_nombre_materia(MO.ID_MATERIA)nombre_materia,get_vez_tomada_materia(PN_ID_
ALUMNO,MO.id_materia,PN_ID_PERIODO_LECTIVO)vez_tomada
132

FROM MATERIA_OPTATIVA MO,MATERIA M


WHERE MO.ID_MATERIA_ELECTIVA IN(
SELECT DISTINCT A.ID_MATERIA--
,B.CODIGO_MATERIA,get_nombre_materia(A.ID_MATERIA),get_nombre_materia(A.ID_MATERIA_REQUISITO)
FROM MALLA_DETALLE A,MATERIA B
WHERE A.ID_MATERIA=B.ID_MATERIA
AND B.ID_TIPO_MATERIA IN(6,7) AND A.ID_ESTADO=1
AND B.ID_ESTADO=1 AND A.ID_MATERIA_REQUISITO IN(SELECT ID_MATERIA
FROM HISTORIAL_NOTAS HN
WHERE HN.ID_ALUMNO=PN_ID_ALUMNO AND (PROMEDIO>=7 OR EX_GRACIA>=7) AND
ID_ESTADO=1
)
AND A.ID_MATERIA NOT IN (SELECT ID_MATERIA FROM MALLA_DETALLE WHERE ID_MATERIA=A.ID_MATERIA AND
ID_MATERIA_REQUISITO NOT IN
(SELECT ID_MATERIA
FROM HISTORIAL_NOTAS HN
WHERE HN.ID_ALUMNO=PN_ID_ALUMNO AND (PROMEDIO>=7 OR EX_GRACIA>=7) AND ID_ESTADO=1
)
)
)
AND MO.ID_MATERIA IN (SELECT ID_MATERIA FROM PERIODO_MATERIA WHERE
ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND ID_ESTADO=1)
AND MO.ID_MATERIA NOT IN(SELECT ID.ID_MATERIA FROM INSCRIPCION I,INSCRIPCION_DETALLE ID WHERE
I.ID_INSCRIPCION=ID.ID_INSCRIPCION
AND I.ID_ESTADO=1 AND ID.ID_ESTADO=1 AND ID.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND
I.ID_ALUMNO=PN_ID_ALUMNO)
AND MO.ID_MATERIA=M.ID_MATERIA
--******************** AUMENTADO EL 9 DE JUNIO 09
-----
AND MO.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM MATERIA_EQUIVALENTE
WHERE ID_MATERIA_EQUIVALE IN
(SELECT DISTINCT ID_MATERIA
FROM HISTORIAL_NOTAS
WHERE ID_ESTADO=1 AND ID_ALUMNO=PN_ID_ALUMNO
AND (NVL(PROMEDIO,0)>=7 OR
NVL(EX_GRACIA,0)>=7)AND NVL(ID_MATERIA,0)<>0
)
AND ID_ESTADO=1
)

AND MO.ID_MATERIA IN (SELECT MD.ID_MATERIA


FROM MALLA_DETALLE MD
WHERE MD.ID_PENSUM_MALLA IN (
SELECT DISTINCT MDE.ID_PENSUM_MALLA
FROM MALLA_DETALLE MDE
WHERE MDE.ID_SEMESTRE=LN_NIVEL_ALUMNO
AND MDE.ID_MATERIA IN (SELECT ID_MATERIA FROM PERIODO_MATERIA WHERE ID_ESTADO=1 AND
ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO)
)
AND MD.ID_ESTADO=1
)
--******************** HASTA AQUI AUMENTADO EL 9 DE JUNIO 09
UNION
--LO SIG . ES PARA MATERIAS ELECTIVAS
SELECT DISTINCT
MD.ID_MATERIA,M.CODIGO_MATERIA,get_nombre_materia(M.ID_MATERIA),get_vez_tomada_materia(PN_ID_ALUMNO,M.ID_M
ATERIA,PN_ID_PERIODO_LECTIVO)VEZ_TOMADA
FROM MALLA_DETALLE MD,MATERIA M
WHERE MD.ID_MATERIA=M.ID_MATERIA
AND M.ID_TIPO_MATERIA IN (4)AND (MD.ID_MATERIA_REQUISITO IN(SELECT ID_MATERIA
FROM HISTORIAL_NOTAS HN
WHERE HN.ID_ESTADO=1 AND HN.ID_ALUMNO=PN_ID_ALUMNO AND
(HN.PROMEDIO>=7 OR HN.EX_GRACIA>=7)
)
OR MD.ID_MATERIA_REQUISITO=0)
AND MD.ID_ESTADO=1 AND M.ID_ESTADO=1
AND MD.ID_MATERIA IN (SELECT ID_MATERIA FROM PERIODO_MATERIA WHERE
ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND ID_ESTADO=1)
AND MD.ID_MATERIA NOT IN(SELECT ID.ID_MATERIA FROM INSCRIPCION I,INSCRIPCION_DETALLE ID WHERE
I.ID_INSCRIPCION=ID.ID_INSCRIPCION
AND I.ID_ESTADO=1 AND ID.ID_ESTADO=1 AND ID.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND
I.ID_ALUMNO=PN_ID_ALUMNO)

--******************** AUMENTADO EL 9 DE JUNIO 09


-----
AND MD.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM MATERIA_EQUIVALENTE
133

WHERE ID_MATERIA_EQUIVALE IN
(SELECT DISTINCT ID_MATERIA
FROM HISTORIAL_NOTAS
WHERE ID_ESTADO=1 AND ID_ALUMNO=PN_ID_ALUMNO
AND (NVL(PROMEDIO,0)>=7 OR
NVL(EX_GRACIA,0)>=7)AND NVL(ID_MATERIA,0)<>0
)
AND ID_ESTADO=1
)

AND MD.ID_MATERIA IN (SELECT MD.ID_MATERIA


FROM MALLA_DETALLE MD
WHERE MD.ID_PENSUM_MALLA IN (
SELECT DISTINCT MDE.ID_PENSUM_MALLA
FROM MALLA_DETALLE MDE
WHERE MDE.ID_SEMESTRE=LN_NIVEL_ALUMNO
AND MDE.ID_MATERIA IN (SELECT ID_MATERIA FROM PERIODO_MATERIA WHERE ID_ESTADO=1 AND
ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO)
)
AND MD.ID_ESTADO=1
)
--******************** HASTA AQUI AUMENTADO EL 9 DE JUNIO 09
UNION--ESTO ES PARA MANEJO DE MATERIAS OPTATIVAS EN TABLA NOTAS
--***********************************

SELECT DISTINCT
MO.ID_MATERIA,M.CODIGO_MATERIA,get_nombre_materia(MO.ID_MATERIA)nombre_materia,get_vez_tomada_materia(PN_ID_
ALUMNO,MO.id_materia,PN_ID_PERIODO_LECTIVO)vez_tomada
FROM MATERIA_OPTATIVA MO,MATERIA M
WHERE MO.ID_MATERIA_ELECTIVA IN(
SELECT DISTINCT A.ID_MATERIA--
,B.CODIGO_MATERIA,get_nombre_materia(A.ID_MATERIA),get_nombre_materia(A.ID_MATERIA_REQUISITO)
FROM MALLA_DETALLE A,MATERIA B
WHERE A.ID_MATERIA=B.ID_MATERIA
AND B.ID_TIPO_MATERIA IN(6,7) AND A.ID_ESTADO=1
AND B.ID_ESTADO=1 AND A.ID_MATERIA_REQUISITO IN(SELECT ID_MATERIA
FROM NOTAS HN
WHERE HN.ID_ALUMNO=PN_ID_ALUMNO AND (HN.NOTA_PROMEDIO>=7
OR HN.NOTA_GRACIA>=7) AND HN.ID_ESTADO=14
--AUMENTADO EL 28/05/2009 PARA QUE NO SE MUESTREN LAS
MATERIAS VISTAS PERIODO_LECTIVO VIGENTE COMO
--PREREQUISITOS
AND HN.ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO
)
AND A.ID_MATERIA NOT IN (SELECT ID_MATERIA FROM MALLA_DETALLE WHERE
ID_MATERIA=A.ID_MATERIA AND ID_MATERIA_REQUISITO NOT IN
(SELECT ID_MATERIA
FROM NOTAS HN
WHERE HN.ID_ALUMNO=PN_ID_ALUMNO AND (HN.NOTA_PROMEDIO>=7 OR HN.NOTA_GRACIA>=7) AND
HN.ID_ESTADO=14
--AUMENTADO EL 28/05/2009 PARA QUE NO SE MUESTREN LAS MATERIAS VISTAS PERIODO_LECTIVO
VIGENTE COMO
--PREREQUISITOS
AND HN.ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO
)
)
)
AND MO.ID_MATERIA IN (SELECT ID_MATERIA FROM PERIODO_MATERIA WHERE
ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND ID_ESTADO=1)
AND MO.ID_MATERIA NOT IN(SELECT ID.ID_MATERIA FROM INSCRIPCION I,INSCRIPCION_DETALLE ID WHERE
I.ID_INSCRIPCION=ID.ID_INSCRIPCION
AND I.ID_ESTADO=1 AND ID.ID_ESTADO=1 AND ID.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND
I.ID_ALUMNO=PN_ID_ALUMNO)
AND MO.ID_MATERIA=M.ID_MATERIA
--******************** AUMENTADO EL 9 DE JUNIO 09
-----
AND MO.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM MATERIA_EQUIVALENTE
WHERE ID_MATERIA_EQUIVALE IN
(SELECT DISTINCT ID_MATERIA
FROM HISTORIAL_NOTAS
WHERE ID_ESTADO=1 AND ID_ALUMNO=PN_ID_ALUMNO
AND (NVL(PROMEDIO,0)>=7 OR
NVL(EX_GRACIA,0)>=7)AND NVL(ID_MATERIA,0)<>0
)
AND ID_ESTADO=1
)
134

AND MO.ID_MATERIA IN (SELECT MD.ID_MATERIA


FROM MALLA_DETALLE MD
WHERE MD.ID_PENSUM_MALLA IN (
SELECT DISTINCT MDE.ID_PENSUM_MALLA
FROM MALLA_DETALLE MDE
WHERE MDE.ID_SEMESTRE=LN_NIVEL_ALUMNO
AND MDE.ID_MATERIA IN (SELECT ID_MATERIA FROM PERIODO_MATERIA WHERE ID_ESTADO=1 AND
ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO)
)
AND MD.ID_ESTADO=1
)
--******************** HASTA AQUI AUMENTADO EL 9 DE JUNIO 09
UNION
--LO SIG . ES PARA MATERIAS ELECTIVAS
SELECT DISTINCT
MD.ID_MATERIA,M.CODIGO_MATERIA,get_nombre_materia(M.ID_MATERIA),get_vez_tomada_materia(PN_ID_ALUMNO,M.ID_M
ATERIA,PN_ID_PERIODO_LECTIVO)VEZ_TOMADA
FROM MALLA_DETALLE MD,MATERIA M
WHERE MD.ID_MATERIA=M.ID_MATERIA
AND M.ID_TIPO_MATERIA IN (4)AND (MD.ID_MATERIA_REQUISITO IN(SELECT ID_MATERIA
FROM NOTAS HN
WHERE HN.ID_ESTADO=14 AND HN.ID_ALUMNO=PN_ID_ALUMNO AND
(HN.NOTA_PROMEDIO>=7 OR HN.NOTA_GRACIA>=7)
--AUMENTADO EL 28/05/2009 PARA QUE NO SE MUESTREN LAS MATERIAS VISTAS
PERIODO_LECTIVO VIGENTE COMO
--PREREQUISITOS
AND ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO
)
OR MD.ID_MATERIA_REQUISITO=0)
AND MD.ID_ESTADO=1 AND M.ID_ESTADO=1
AND MD.ID_MATERIA IN (SELECT ID_MATERIA FROM PERIODO_MATERIA WHERE
ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND ID_ESTADO=1)
AND MD.ID_MATERIA NOT IN(SELECT ID.ID_MATERIA FROM INSCRIPCION I,INSCRIPCION_DETALLE ID WHERE
I.ID_INSCRIPCION=ID.ID_INSCRIPCION
AND I.ID_ESTADO=1 AND ID.ID_ESTADO=1 AND ID.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND
I.ID_ALUMNO=PN_ID_ALUMNO)

--******************** AUMENTADO EL 9 DE JUNIO 09


-----
AND MD.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM MATERIA_EQUIVALENTE
WHERE ID_MATERIA_EQUIVALE IN
(SELECT DISTINCT ID_MATERIA
FROM HISTORIAL_NOTAS
WHERE ID_ESTADO=1 AND ID_ALUMNO=PN_ID_ALUMNO
AND (NVL(PROMEDIO,0)>=7 OR
NVL(EX_GRACIA,0)>=7)AND NVL(ID_MATERIA,0)<>0
)
AND ID_ESTADO=1
)

AND MD.ID_MATERIA IN (SELECT MD.ID_MATERIA


FROM MALLA_DETALLE MD
WHERE MD.ID_PENSUM_MALLA IN (
SELECT DISTINCT MDE.ID_PENSUM_MALLA
FROM MALLA_DETALLE MDE
WHERE
MDE.ID_SEMESTRE=PROCESOS_INSCRIPCION.get_nivel_alumno(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)
AND MDE.ID_MATERIA IN (SELECT ID_MATERIA FROM PERIODO_MATERIA WHERE ID_ESTADO=1 AND
ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO)
)
AND MD.ID_ESTADO=1
)
--******************** HASTA AQUI AUMENTADO EL 9 DE JUNIO 09
;
*/
SELECT DISTINCT
MO.ID_MATERIA,M.CODIGO_MATERIA,PROCESOS_INSCRIPCION.GET_NOMBRE_MATERIA(MO.ID_MATERIA)nombre_materi
a,PROCESOS_INSCRIPCION.get_vez_tomada_materia(PN_ID_ALUMNO,MO.id_materia,PN_ID_PERIODO_LECTIVO)vez_tomad
a
FROM MATERIA_OPTATIVA MO,MATERIA M
WHERE MO.ID_MATERIA=M.ID_MATERIA AND MO.ID_MATERIA_ELECTIVA IN(
SELECT DISTINCT A.ID_MATERIA--
,B.CODIGO_MATERIA,PROCESOS_INSCRIPCION.GET_NOMBRE_MATERIA(A.ID_MATERIA),PROCESOS_INSCRIPCION.GET
135

_NOMBRE_MATERIA(A.ID_MATERIA_REQUISITO)
FROM MALLA_DETALLE A,MATERIA B
WHERE A.ID_MATERIA=B.ID_MATERIA
AND B.ID_TIPO_MATERIA IN(6,7) AND A.ID_ESTADO=1
AND B.ID_ESTADO=1 AND A.ID_MATERIA_REQUISITO IN(SELECT ID_MATERIA
FROM HISTORIAL_NOTAS HN
WHERE HN.ID_ALUMNO=PN_ID_ALUMNO AND (PROMEDIO>=7 OR EX_GRACIA>=7) AND
ID_ESTADO=1
)
AND A.ID_MATERIA NOT IN (SELECT ID_MATERIA FROM MALLA_DETALLE WHERE ID_MATERIA=A.ID_MATERIA AND
ID_MATERIA_REQUISITO NOT IN
(SELECT ID_MATERIA
FROM HISTORIAL_NOTAS HN
WHERE HN.ID_ALUMNO=PN_ID_ALUMNO AND (PROMEDIO>=7 OR EX_GRACIA>=7) AND ID_ESTADO=1
)
)
)
--

AND MO.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM HISTORIAL_NOTAS WHERE ID_ESTADO=1 AND
ID_ALUMNO=PN_ID_ALUMNO AND (PROMEDIO>=7 OR EX_GRACIA>=7))
AND MO.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM MATERIA_EQUIVALENTE WHERE ID_MATERIA_EQUIVALE IN(
SELECT ID_MATERIA FROM HISTORIAL_NOTAS WHERE ID_ESTADO=1 AND ID_ALUMNO=PN_ID_ALUMNO AND
(PROMEDIO>=7 OR EX_GRACIA>=7)))

AND MO.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM NOTAS WHERE ID_ALUMNO=PN_ID_ALUMNO AND
(NOTA_PROMEDIO>=7 OR NOTA_GRACIA>=7)AND ((ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO AND
TRIM(TIPO_NOTA)='SEM')OR TRIM(TIPO_NOTA) IN('HOM','GRA')) AND ID_ESTADO=14)
AND MO.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM MATERIA_EQUIVALENTE WHERE ID_MATERIA_EQUIVALE IN(
SELECT ID_MATERIA FROM NOTAS WHERE ID_ALUMNO=PN_ID_ALUMNO AND (NOTA_PROMEDIO>=7 OR
NOTA_GRACIA>=7)AND ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO AND ID_ESTADO=14))

--
AND MO.ID_MATERIA IN (SELECT ID_MATERIA FROM PERIODO_MATERIA WHERE
ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND ID_ESTADO=1)
AND MO.ID_MATERIA NOT IN(SELECT ID.ID_MATERIA FROM INSCRIPCION I,INSCRIPCION_DETALLE ID WHERE
I.ID_INSCRIPCION=ID.ID_INSCRIPCION
AND I.ID_ESTADO=1 AND ID.ID_ESTADO=1 AND ID.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND
I.ID_ALUMNO=PN_ID_ALUMNO)

UNION
--LO SIG . ES PARA MATERIAS ELECTIVAS
SELECT DISTINCT
MD.ID_MATERIA,M.CODIGO_MATERIA,PROCESOS_INSCRIPCION.GET_NOMBRE_MATERIA(M.ID_MATERIA),PROCESOS_IN
SCRIPCION.get_vez_tomada_materia(PN_ID_ALUMNO,M.ID_MATERIA,PN_ID_PERIODO_LECTIVO)VEZ_TOMADA
FROM MALLA_DETALLE MD,MATERIA M
WHERE MD.ID_MATERIA=M.ID_MATERIA
AND M.ID_TIPO_MATERIA IN (4)AND (MD.ID_MATERIA_REQUISITO IN(SELECT ID_MATERIA
FROM HISTORIAL_NOTAS HN
WHERE HN.ID_ESTADO=1 AND HN.ID_ALUMNO=PN_ID_ALUMNO AND
(HN.PROMEDIO>=7 OR HN.EX_GRACIA>=7)
)
OR MD.ID_MATERIA_REQUISITO=0)
AND MD.ID_ESTADO=1 AND M.ID_ESTADO=1
AND MD.ID_MATERIA IN (SELECT ID_MATERIA FROM PERIODO_MATERIA WHERE
ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND ID_ESTADO=1)
AND MD.ID_MATERIA NOT IN(SELECT ID.ID_MATERIA FROM INSCRIPCION I,INSCRIPCION_DETALLE ID WHERE
I.ID_INSCRIPCION=ID.ID_INSCRIPCION
AND I.ID_ESTADO=1 AND ID.ID_ESTADO=1 AND ID.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND
I.ID_ALUMNO=PN_ID_ALUMNO)

--
AND MD.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM HISTORIAL_NOTAS WHERE ID_ESTADO=1 AND
ID_ALUMNO=PN_ID_ALUMNO AND (PROMEDIO>=7 OR EX_GRACIA>=7))
AND MD.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM MATERIA_EQUIVALENTE WHERE ID_MATERIA_EQUIVALE IN(
SELECT ID_MATERIA FROM HISTORIAL_NOTAS WHERE ID_ESTADO=1 AND ID_ALUMNO=PN_ID_ALUMNO AND
(PROMEDIO>=7 OR EX_GRACIA>=7)))

AND MD.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM NOTAS WHERE ID_ALUMNO=PN_ID_ALUMNO AND
(NOTA_PROMEDIO>=7 OR NOTA_GRACIA>=7)AND ((ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO AND
TRIM(TIPO_NOTA)='SEM')OR TRIM(TIPO_NOTA) IN('HOM','GRA')) AND ID_ESTADO=14)
AND MD.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM MATERIA_EQUIVALENTE WHERE ID_MATERIA_EQUIVALE IN(
SELECT ID_MATERIA FROM NOTAS WHERE ID_ALUMNO=PN_ID_ALUMNO AND (NOTA_PROMEDIO>=7 OR
NOTA_GRACIA>=7)AND ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO AND ID_ESTADO=14))
136

--
UNION--ESTO ES PARA MANEJO DE MATERIAS OPTATIVAS EN TABLA NOTAS
--***********************************

SELECT DISTINCT
MO.ID_MATERIA,M.CODIGO_MATERIA,PROCESOS_INSCRIPCION.GET_NOMBRE_MATERIA(MO.ID_MATERIA)nombre_materi
a,PROCESOS_INSCRIPCION.get_vez_tomada_materia(PN_ID_ALUMNO,MO.id_materia,PN_ID_PERIODO_LECTIVO)vez_tomad
a
FROM MATERIA_OPTATIVA MO,MATERIA M
WHERE MO.ID_MATERIA_ELECTIVA IN(
SELECT DISTINCT A.ID_MATERIA--
,B.CODIGO_MATERIA,PROCESOS_INSCRIPCION.GET_NOMBRE_MATERIA(A.ID_MATERIA),PROCESOS_INSCRIPCION.GET
_NOMBRE_MATERIA(A.ID_MATERIA_REQUISITO)
FROM MALLA_DETALLE A,MATERIA B
WHERE A.ID_MATERIA=B.ID_MATERIA
AND B.ID_TIPO_MATERIA IN(6,7) AND A.ID_ESTADO=1
AND B.ID_ESTADO=1 AND A.ID_MATERIA_REQUISITO IN(SELECT ID_MATERIA
FROM NOTAS HN
WHERE HN.ID_ALUMNO=PN_ID_ALUMNO AND (HN.NOTA_PROMEDIO>=7
OR HN.NOTA_GRACIA>=7) AND HN.ID_ESTADO=14
--AUMENTADO EL 28/05/2009 PARA QUE NO SE MUESTREN LAS
MATERIAS VISTAS PERIODO_LECTIVO VIGENTE COMO
--PREREQUISITOS
AND HN.ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO
)
AND A.ID_MATERIA NOT IN (SELECT ID_MATERIA FROM MALLA_DETALLE WHERE
ID_MATERIA=A.ID_MATERIA AND ID_MATERIA_REQUISITO NOT IN
(SELECT ID_MATERIA
FROM NOTAS HN
WHERE HN.ID_ALUMNO=PN_ID_ALUMNO AND (HN.NOTA_PROMEDIO>=7 OR HN.NOTA_GRACIA>=7) AND
HN.ID_ESTADO=14
--AUMENTADO EL 28/05/2009 PARA QUE NO SE MUESTREN LAS MATERIAS VISTAS PERIODO_LECTIVO
VIGENTE COMO
--PREREQUISITOS
AND ((HN.ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO AND TRIM(HN.TIPO_NOTA)='SEM')OR
TRIM(HN.TIPO_NOTA) IN('HOM','GRA'))
)
)
)
AND MO.ID_MATERIA IN (SELECT ID_MATERIA FROM PERIODO_MATERIA WHERE
ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND ID_ESTADO=1)
AND MO.ID_MATERIA NOT IN(SELECT ID.ID_MATERIA FROM INSCRIPCION I,INSCRIPCION_DETALLE ID WHERE
I.ID_INSCRIPCION=ID.ID_INSCRIPCION
AND I.ID_ESTADO=1 AND ID.ID_ESTADO=1 AND ID.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND
I.ID_ALUMNO=PN_ID_ALUMNO)
AND MO.ID_MATERIA=M.ID_MATERIA

--

AND MO.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM HISTORIAL_NOTAS WHERE ID_ESTADO=1 AND
ID_ALUMNO=PN_ID_ALUMNO AND (PROMEDIO>=7 OR EX_GRACIA>=7))
AND MO.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM MATERIA_EQUIVALENTE WHERE ID_MATERIA_EQUIVALE IN(
SELECT ID_MATERIA FROM HISTORIAL_NOTAS WHERE ID_ESTADO=1 AND ID_ALUMNO=PN_ID_ALUMNO AND
(PROMEDIO>=7 OR EX_GRACIA>=7)))

AND MO.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM NOTAS WHERE ID_ALUMNO=PN_ID_ALUMNO AND
(NOTA_PROMEDIO>=7 OR NOTA_GRACIA>=7)AND ((ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO AND
TRIM(TIPO_NOTA)='SEM')OR TRIM(TIPO_NOTA) IN('HOM','GRA')) AND ID_ESTADO=14)
AND MO.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM MATERIA_EQUIVALENTE WHERE ID_MATERIA_EQUIVALE IN(
SELECT ID_MATERIA FROM NOTAS WHERE ID_ALUMNO=PN_ID_ALUMNO AND (NOTA_PROMEDIO>=7 OR
NOTA_GRACIA>=7)AND ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO AND ID_ESTADO=14))

--

UNION
--LO SIG . ES PARA MATERIAS ELECTIVAS
SELECT DISTINCT
MD.ID_MATERIA,M.CODIGO_MATERIA,PROCESOS_INSCRIPCION.GET_NOMBRE_MATERIA(M.ID_MATERIA),PROCESOS_IN
SCRIPCION.get_vez_tomada_materia(PN_ID_ALUMNO,M.ID_MATERIA,PN_ID_PERIODO_LECTIVO)VEZ_TOMADA
FROM MALLA_DETALLE MD,MATERIA M
WHERE MD.ID_MATERIA=M.ID_MATERIA
AND M.ID_TIPO_MATERIA IN (4)AND (MD.ID_MATERIA_REQUISITO IN(SELECT ID_MATERIA
FROM NOTAS HN
WHERE HN.ID_ESTADO=14 AND HN.ID_ALUMNO=PN_ID_ALUMNO AND
(HN.NOTA_PROMEDIO>=7 OR HN.NOTA_GRACIA>=7)
137

--AUMENTADO EL 28/05/2009 PARA QUE NO SE MUESTREN LAS MATERIAS VISTAS


PERIODO_LECTIVO VIGENTE COMO
--PREREQUISITOS
AND ((HN.ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO AND
TRIM(HN.TIPO_NOTA)='SEM')OR TRIM(HN.TIPO_NOTA) IN('HOM','GRA'))
)
OR MD.ID_MATERIA_REQUISITO=0)
AND MD.ID_ESTADO=1 AND M.ID_ESTADO=1
AND MD.ID_MATERIA IN (SELECT ID_MATERIA FROM PERIODO_MATERIA WHERE
ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND ID_ESTADO=1)
AND MD.ID_MATERIA NOT IN(SELECT ID.ID_MATERIA FROM INSCRIPCION I,INSCRIPCION_DETALLE ID WHERE
I.ID_INSCRIPCION=ID.ID_INSCRIPCION
AND I.ID_ESTADO=1 AND ID.ID_ESTADO=1 AND ID.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND
I.ID_ALUMNO=PN_ID_ALUMNO)

--
AND MD.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM HISTORIAL_NOTAS WHERE ID_ESTADO=1 AND
ID_ALUMNO=PN_ID_ALUMNO AND (PROMEDIO>=7 OR EX_GRACIA>=7))
AND MD.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM MATERIA_EQUIVALENTE WHERE ID_MATERIA_EQUIVALE IN(
SELECT ID_MATERIA FROM HISTORIAL_NOTAS WHERE ID_ESTADO=1 AND ID_ALUMNO=PN_ID_ALUMNO AND
(PROMEDIO>=7 OR EX_GRACIA>=7)))

AND MD.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM NOTAS WHERE ID_ALUMNO=PN_ID_ALUMNO AND
(NOTA_PROMEDIO>=7 OR NOTA_GRACIA>=7)AND ((ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO AND
TRIM(TIPO_NOTA)='SEM')OR TRIM(TIPO_NOTA) IN('HOM','GRA')) AND ID_ESTADO=14)
AND MD.ID_MATERIA NOT IN(SELECT ID_MATERIA FROM MATERIA_EQUIVALENTE WHERE ID_MATERIA_EQUIVALE IN(
SELECT ID_MATERIA FROM NOTAS WHERE ID_ALUMNO=PN_ID_ALUMNO AND (NOTA_PROMEDIO>=7 OR
NOTA_GRACIA>=7)AND ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO AND ID_ESTADO=14))

--

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END PR_MATERIAS_OPTATIVAS_DISP;
---------------------------------------------------------------
------------------GET_PARALELO_MATERIA------------------
FUNCTION GET_PARALELO_MATERIA(PN_ID_PARALELO IN INT,PN_ID_MATERIA IN INT)RETURN INT

IS
LN_CUENTA_REG INT;
LN_RESULTADO INT;
BEGIN
SELECT COUNT(*)INTO LN_CUENTA_REG
FROM PARALELO_MATERIA
WHERE ID_ESTADO=1
AND ID_PARALELO=PN_ID_PARALELO
AND ID_MATERIA=PN_ID_MATERIA;

IF LN_CUENTA_REG>1 THEN
LN_RESULTADO:=-1;
ELSIF LN_CUENTA_REG=1 THEN
SELECT ID_PARALELO_MATERIA INTO LN_RESULTADO
FROM PARALELO_MATERIA
WHERE ID_ESTADO=1
AND ID_PARALELO=PN_ID_PARALELO
AND ID_MATERIA=PN_ID_MATERIA;
ELSE
LN_RESULTADO:=0;
END IF ;
RETURN LN_RESULTADO;
END GET_PARALELO_MATERIA;
---------------------------------------------------------------
----------------FUN_FUE_ALUMNO_INSCRITO
FUNCTION FUN_FUE_ALUMNO_INSCRITO(PN_ID_ALUMNO INT,PN_ID_PERIDO_LECTIVO INT) RETURN BOOLEAN
IS
LN_CANT INT;
BEGIN
SELECT COUNT(*)INTO LN_CANT
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_ESTADO=1 AND A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND B.ID_ESTADO=1
AND UPPER(TRIM(SUBSTR(B.OBSERVACION,1,INSTR(B.OBSERVACION,'-',1,1)-1))) IN('ORDINARIA','EXTRAORDINARIA')
138

AND A.ID_ALUMNO=PN_ID_ALUMNO
AND B.ID_PERIODO_LECTIVO=PN_ID_PERIDO_LECTIVO;

IF LN_CANT>0 THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;

--------------------------------------------------------------
----------------FUN_FUE_ALUMNO_INSCRITO_GRACIA
FUNCTION FUN_FUE_ALUMNO_INSCRITO_GRACIA(PN_ID_ALUMNO INT,PN_ID_PERIDO_LECTIVO INT,PN_ID_MATERIA
NUMBER,LV_RESPUESTA OUT VARCHAR2) RETURN BOOLEAN
IS
LN_CANT INT;
BEGIN
SELECT COUNT(*)INTO LN_CANT
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_ESTADO=1 AND A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND B.ID_ESTADO=1 AND UPPER(TRIM(SUBSTR(B.OBSERVACION,1,INSTR(B.OBSERVACION,'-',1,1)-1)))='EXAMEN DE
GRACIA'
AND A.ID_ALUMNO=PN_ID_ALUMNO
AND B.ID_PERIODO_LECTIVO=PN_ID_PERIDO_LECTIVO
--AUMENTADO JUEVES 11 DE JUNIO DEL 2009 A LAS 20:59 PARA VALIDAR
--QUE SOLO EMITA EL VALOR TRUE SOLO SI YAN HA SIDO ALUMNO INSCRITO EN
--LA MATERIA DE LA ORDEN.
AND B.ID_MATERIA=PN_ID_MATERIA;

IF LN_CANT>0 THEN
LV_RESPUESTA:='NO PUEDE INSCRIBIR LA MATERIA: '|| GET_NOMBRE_MATERIA(PN_ID_MATERIA)|| ' PARA EXÁMEN DE
GRACIA DEBIDO A QUE EL ALUMNO: ' || GET_NOMBRE_ALUMNO(PN_ID_ALUMNO) || ' , YA TIENE UN EXÁMEN EN ESTA
MATERIA REGISTRADO ACTUALMENTE';
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;

EXCEPTION
WHEN OTHERS THEN
LV_RESPUESTA:=SQLERRM;
END;
-----
------------------------------------------------------------------------
-----------------PR_ACTUALIZA_CUPOS----------------
PROCEDURE PR_ACTUALIZA_CUPOS(PN_ID_PARALELO_MATERIA IN INT,PV_RESULTADO OUT INT)
IS

BEGIN

UPDATE PARALELO_MATERIA
SET CUPO_OCUPADO=CUPO_OCUPADO +1,CUPO_DISPONIBLE=CUPO_DISPONIBLE - 1
WHERE ID_PARALELO_MATERIA=PN_ID_PARALELO_MATERIA
AND ID_ESTADO=1;

SELECT CUPO_DISPONIBLE INTO PV_RESULTADO


FROM PARALELO_MATERIA
WHERE ID_ESTADO=1 AND ID_PARALELO_MATERIA=PN_ID_PARALELO_MATERIA;

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);

END PR_ACTUALIZA_CUPOS;
--------------------------------------------------
--------------------GET_ALUMNO_INSCRITO
PROCEDURE GET_ALUMNO_INSCRITO(PV_OPCION VARCHAR2,PV_ARGUMENTO VARCHAR2,PN_ID_ALUMNO
INT,PN_ID_PERIODO_LECTIVO INT,PC_ALUMNO_INCRITO OUT r_cursor,PV_APELLIDO_MATERNO
VARCHAR2,PV_PRIMER_NOMBRE VARCHAR2,PV_SEGUNDO_NOMBRE VARCHAR2)
139

IS

BEGIN
IF PN_ID_ALUMNO=0 THEN
IF PV_OPCION='CEDULA'THEN

OPEN PC_ALUMNO_INCRITO FOR


SELECT DISTINCT TO_CHAR(A.FECHA_INSCRIPCION,'DD/MM/YYYY HH24:MI:SS'),
D.APELLIDO_PATERNO || ' ' || D.APELLIDO_MATERNO || ' ' || D.PRIMER_NOMBRE || ' ' || NVL(D.SEGUNDO_NOMBRE,'
')ALUMNO,
D.CEDULA,C.CODIGO_ESTUDIANTIL,c.id_alumno
FROM INSCRIPCION A,INSCRIPCION_DETALLE B,ALUMNO C,PERSONA D
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
--AND A.ID_ALUMNO=PN_ID_ALUMNO
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND C.ID_PERSONA=D.ID_PERSONA
AND C.ID_ALUMNO=A.ID_ALUMNO AND D.CEDULA LIKE TRIM(PV_ARGUMENTO) || '%'
AND B.OBSERVACION<>TRIM('EXAMEN DE GRACIA-0-0')
--ORDER BY A.ID_INSCRIPCION
;

ELSIF PV_OPCION='CODIGO'THEN
OPEN PC_ALUMNO_INCRITO FOR
SELECT DISTINCT TO_CHAR(A.FECHA_INSCRIPCION,'DD/MM/YYYY HH24:MI:SS'),
D.APELLIDO_PATERNO || ' ' || D.APELLIDO_MATERNO || ' ' || D.PRIMER_NOMBRE || ' ' || NVL(D.SEGUNDO_NOMBRE,'
')ALUMNO,
D.CEDULA,C.CODIGO_ESTUDIANTIL,c.id_alumno
FROM INSCRIPCION A,INSCRIPCION_DETALLE B,ALUMNO C,PERSONA D
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
--AND A.ID_ALUMNO=PN_ID_ALUMNO
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND C.ID_PERSONA=D.ID_PERSONA
AND C.ID_ALUMNO=A.ID_ALUMNO AND C.CODIGO_ESTUDIANTIL LIKE '%' || PV_ARGUMENTO || '%'
AND B.OBSERVACION<>TRIM('EXAMEN DE GRACIA-0-0')
--ORDER BY A.ID_INSCRIPCION
;

ELSIF PV_OPCION='NOMBRES'THEN
--NOMBRES VARCHAR2(100):=TRIM('GUSTAVO ASQUI YANEZ DS');

OPEN PC_ALUMNO_INCRITO FOR


SELECT DISTINCT TO_CHAR(A.FECHA_INSCRIPCION,'DD/MM/YYYY HH24:MI:SS'),
D.APELLIDO_PATERNO || '' || D.APELLIDO_MATERNO || '' || D.PRIMER_NOMBRE || '' ||
NVL(D.SEGUNDO_NOMBRE,'')ALUMNO,
D.CEDULA,C.CODIGO_ESTUDIANTIL,c.id_alumno
FROM INSCRIPCION A,INSCRIPCION_DETALLE B,ALUMNO C,PERSONA D
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
--AND A.ID_ALUMNO=PN_ID_ALUMNO
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND C.ID_PERSONA=D.ID_PERSONA
AND C.ID_ALUMNO=A.ID_ALUMNO
AND TRIM(NVL(D.APELLIDO_PATERNO,'')) LIKE TRIM(NVL(PV_ARGUMENTO,'')) || '%'
AND TRIM(NVL(D.APELLIDO_MATERNO,'')) LIKE TRIM(NVL(PV_APELLIDO_MATERNO,' ')) || '%'
AND TRIM(NVL(D.PRIMER_NOMBRE,'')) LIKE TRIM(NVL(PV_PRIMER_NOMBRE,'')) || '%'
AND TRIM(NVL(D.SEGUNDO_NOMBRE,'')) LIKE TRIM(NVL(PV_SEGUNDO_NOMBRE,'')) || '%'
AND B.OBSERVACION<>TRIM('EXAMEN DE GRACIA-0-0')
--ORDER BY A.ID_INSCRIPCION
;

END IF;

--LO SIG ES PARA MOSTRAR LAS MATERIAS DEL ALUMNO


ELSE--SI PN_ID_ALUMNO <> 0 CERO
OPEN PC_ALUMNO_INCRITO FOR
SELECT DISTINCT B.ID_MATERIA,E.CODIGO_MATERIA,get_nombre_materia(B.ID_MATERIA)MATERIA,
B.VEZ_TOMADA,B.OBSERVACION,B.ID_PARALELO,GET_NOMBRE_PARALELO(B.ID_PARALELO)PARALELO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B,ALUMNO C,PERSONA D,MATERIA E
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ALUMNO=PN_ID_ALUMNO
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND C.ID_PERSONA=D.ID_PERSONA
AND C.ID_ALUMNO=A.ID_ALUMNO
140

AND B.ID_MATERIA=E.ID_MATERIA
AND B.OBSERVACION<>TRIM('EXAMEN DE GRACIA-0-0')
ORDER BY E.CODIGO_MATERIA
;
END IF;

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END GET_ALUMNO_INSCRITO;
------------------------------------------------------------------------*-
-------------------PRO_ANULA_INSCRIPCION
PROCEDURE PRO_ANULA_INSCRIPCION(PN_ID_ALUMNO INT,PN_ID_PARALELO INT,PN_ID_MATERIA
INT,PN_ID_PERIODO_LECTIVO INT,PV_USUARIO VARCHAR2,PV_RESULTADO OUT VARCHAR2)
IS
LN_ID_INSCRIPCION INT;
LN_DETALLES_ACTIVOS INT;
--NUEVAS 28/05/2009
LN_EXISTE_REGISTRO NUMBER(3);
LN_EXISTE_NOTAS_ACTUALES NUMBER(3);
LE_ERROR EXCEPTION;
BEGIN
SELECT DISTINCT A.ID_INSCRIPCION INTO LN_ID_INSCRIPCION
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND B.OBSERVACION LIKE '%ORDINARIA%';
-->>>>>>>>>>>>>>>>>>>>>>>>>><
/*--VALIDACIONES AÑADIDAS EL 28/05/2009 20:50
--LO SIG VALIDA QUE NO TENGA ORDNENES DE PAGO ACTUAL GENERADA PARA PODER
--ACTUALIZAR CARNET
--ACTUALIZADO 28/05/2009 19:06 PM
SELECT COUNT(*)INTO LN_EXISTE_ORDEN_PAGO
FROM ORDEN_PAGO OP,ORDEN_PAGO_DETALLE OPD
WHERE OP.ID_ORDEN_PAGO=OPD.ID_ORDEN_PAGO AND OP.ID_ESTADO=1
AND OPD.ID_ESTADO=1 AND OP.ID_ALUMNO=PN_ID_ALUMNO AND
OP.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO ;*/

--*************************************
--LO SIG. VERIFICA QUE NO EXISTAN NOTAS EN PERIODO LECTIVO VIGENTE
SELECT NVL(MAX(NVL(N.NOTA_PARCIAL1,0)),0)INTO LN_EXISTE_NOTAS_ACTUALES
FROM NOTAS N
WHERE ID_ESTADO<>3 AND ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND N.ID_ALUMNO=PN_ID_ALUMNO AND N.ID_MATERIA=PN_ID_MATERIA AND N.TIPO_NOTA='SEM';

-----HASTA AQUI VALIDACIONES AÑADIDAS EL 28/05/2009 20:50


--====================================================================
IF LN_EXISTE_NOTAS_ACTUALES=0 THEN

--ACTUALIZAR INSCRIPCION DETALLE UNO O POR UNO

SELECT COUNT(*) INTO LN_EXISTE_REGISTRO


FROM INSCRIPCION_DETALLE
WHERE ID_INSCRIPCION=LN_ID_INSCRIPCION AND ID_ESTADO=1
AND ID_PARALELO=PN_ID_PARALELO AND ID_MATERIA=PN_ID_MATERIA;
--
IF LN_EXISTE_REGISTRO>0 THEN
UPDATE INSCRIPCION_DETALLE
SET ID_ESTADO=3,FECHA_MODIFICACION=CURRENT_DATE,USUARIO_MODIFICACION=PV_USUARIO
WHERE ID_INSCRIPCION=LN_ID_INSCRIPCION AND ID_ESTADO=1
AND ID_PARALELO=PN_ID_PARALELO AND ID_MATERIA=PN_ID_MATERIA;
--ACTUALIZAR INSCRIPCION UNO POR UNO
SELECT COUNT(*)INTO LN_DETALLES_ACTIVOS
FROM INSCRIPCION_DETALLE
WHERE ID_INSCRIPCION=LN_ID_INSCRIPCION AND ID_ESTADO=1;

IF LN_DETALLES_ACTIVOS=0 THEN--SI TODOS LOS DETALLES DE LA INSCRIPCION SE HAN


--ANULADO SE ANULA TAMBIEN SU CABECERA
UPDATE INSCRIPCION
SET ID_ESTADO=3,FECHA_ACTUALIZACION=CURRENT_DATE,USUARIO_ACTUALIZACION=PV_USUARIO
WHERE ID_INSCRIPCION=LN_ID_INSCRIPCION AND ID_ESTADO=1;
END IF;
141

--ACTUALIZA CUPOS
UPDATE PARALELO_MATERIA A
SET A.CUPO_OCUPADO=A.CUPO_OCUPADO-1,A.CUPO_DISPONIBLE=A.CUPO_DISPONIBLE+1
WHERE A.ID_PARALELO=PN_ID_PARALELO AND A.ID_MATERIA=PN_ID_MATERIA
AND A.ID_ESTADO=1;
ELSE
PV_RESULTADO:='NO SE PUEDE ANULAR DEBIDO A QUE NO EXISTE PARALELO:'
||GET_NOMBRE_PARALELO(PN_ID_PARALELO) || ' CON LA MATERIA : ' || GET_NOMBRE_MATERIA(PN_ID_MATERIA) || ' O
YA SE ANULÓ ';
RAISE LE_ERROR;
END IF;
PV_RESULTADO:='SI SE HA ANULADO EXITOSAMENTE,LAS MATERIAS ELEGIDAS';
ELSE
PV_RESULTADO:='NO SE PUEDE ANULAR LA MATERIA : ' || GET_NOMBRE_MATERIA(PN_ID_MATERIA) || ' EN LA
INSCRIPCIÓN DEL ALUMNO, DEBIDO A QUE LA MATERIA YA TIENE NOTAS ';
RAISE LE_ERROR;
END IF;

EXCEPTION
WHEN LE_ERROR THEN
PV_RESULTADO:=PV_RESULTADO;
WHEN OTHERS THEN
PV_RESULTADO:=SQLERRM;
END PRO_ANULA_INSCRIPCION;
--------------------------------------------------------------
---------------------------PRO_ACTUALIZAR_INGLES
FUNCTION PRO_ACTUALIZAR_INGLES(PN_ID_ALUMNO INT,PN_ID_PERIODO_LECTIVO INT,PN_INGLES INT)RETURN
VARCHAR2
IS
LN_ID_INSCRIPCION INT;
LV_RESULTADO VARCHAR2(1000);

LN_EXISTE_ORDEN_PAGO NUMBER(3);
LN_EXISTE_NOTAS_ACTUALES NUMBER(3);
BEGIN
--LO SIG VALIDA QUE NO TENGA ORDNE DE PAGO ACTUAL GENERADA PARA PODER
--ACTUALIZAR CARNET
--ACTUALIZADO 28/05/2009 19:06 PM
SELECT COUNT(*)INTO LN_EXISTE_ORDEN_PAGO
FROM ORDEN_PAGO OP,ORDEN_PAGO_DETALLE OPD
WHERE OP.ID_ORDEN_PAGO=OPD.ID_ORDEN_PAGO AND OP.ID_ESTADO=1
AND OPD.ID_ESTADO=1 AND OP.ID_ALUMNO=PN_ID_ALUMNO AND
OP.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO ;
--LO SIG. VERIFICA QUE NO EXISTAN NOTAS EN PERIODO LECTIVO VIGENTE
SELECT NVL(MAX(NVL(N.NOTA_PARCIAL1,0)),0) INTO LN_EXISTE_NOTAS_ACTUALES
FROM NOTAS N
WHERE N.ID_ESTADO<>3 AND ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND N.ID_ALUMNO=PN_ID_ALUMNO;
--************************************
SELECT DISTINCT A.ID_INSCRIPCION INTO LN_ID_INSCRIPCION
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO;

IF LN_EXISTE_ORDEN_PAGO=0 AND LN_EXISTE_NOTAS_ACTUALES=0 THEN


UPDATE INSCRIPCION_DETALLE
SET OBSERVACION=SUBSTR(OBSERVACION,1,INSTR(OBSERVACION,'-',1,1))|| TO_CHAR(PN_INGLES)||'-
'||SUBSTR(OBSERVACION,INSTR(OBSERVACION,'-',1,2)+1,1)
WHERE ID_INSCRIPCION=LN_ID_INSCRIPCION;
IF PN_INGLES=1 THEN
LV_RESULTADO:='SE HA AGREGADO CON ÉXITO MÓDULO DE INGLES AL REGISTRO DEL ALUMNO';
ELSE
LV_RESULTADO:='SE HA QUITADO CON ÉXITO MÓDULO DE INGLES AL REGISTRO DEL ALUMNO';
END IF;
ELSE
IF PN_INGLES=1 THEN
LV_RESULTADO:='NO SE PUEDE AGREGAR MÓDULO DE INGLES AL REGISTRO DEL ALUMNO, PORQUE YA TIENE NOTAS
AL MENOS DEL PRIMER PARCIAL O YA SE GENERARON LAS ORDENES DE PAGO';
ELSE
LV_RESULTADO:='NO SE PUEDE QUITAR MÓDULO DE INGLES DEL REGISTRO DEL ALUMNO PORQUE YA TIENE NOTAS
AL MENOS DEL PRIMER PARCIAL O YA SE GENERARON LAS ORDENES DE PAGO';
END IF;
END IF;
RETURN LV_RESULTADO;
142

EXCEPTION
WHEN OTHERS THEN
LV_RESULTADO:=SQLERRM;
RETURN LV_RESULTADO;
END;

-------------------
---------------------------PRO_ACTUALIZAR_CARNET
FUNCTION PRO_ACTUALIZAR_CARNET(PN_ID_ALUMNO INT,PN_ID_PERIODO_LECTIVO INT,PN_CARNET INT)RETURN
VARCHAR2
IS
LN_ID_INSCRIPCION INT;
LV_RESULTADO VARCHAR2(1000);
LN_EXISTE_ORDEN_PAGO NUMBER(3);
LN_EXISTE_NOTAS_ACTUALES NUMBER(3);
BEGIN
SELECT DISTINCT A.ID_INSCRIPCION INTO LN_ID_INSCRIPCION
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO;
--LO SIG VALIDA QUE NO TENGA ORDNE DE PAGO ACTUAL GENERADA PARA PODER
--ACTUALIZAR CARNET
--ACTUALIZADO 28/05/2009 19:06 PM
SELECT COUNT(*)INTO LN_EXISTE_ORDEN_PAGO
FROM ORDEN_PAGO OP,ORDEN_PAGO_DETALLE OPD
WHERE OP.ID_ORDEN_PAGO=OPD.ID_ORDEN_PAGO AND OP.ID_ESTADO=1
AND OPD.ID_ESTADO=1 AND OP.ID_ALUMNO=PN_ID_ALUMNO AND
OP.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO ;
--LO SIG. VERIFICA QUE NO EXISTAN NOTAS EN PERIODO LECTIVO VIGENTE
SELECT NVL(MAX(NVL(N.NOTA_PARCIAL1,0)),0)INTO LN_EXISTE_NOTAS_ACTUALES
FROM NOTAS N
WHERE N.ID_ESTADO<>3 AND ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND N.ID_ALUMNO=PN_ID_ALUMNO;

IF LN_EXISTE_ORDEN_PAGO=0 AND LN_EXISTE_NOTAS_ACTUALES=0 THEN


UPDATE INSCRIPCION_DETALLE
SET OBSERVACION=SUBSTR(OBSERVACION,1,INSTR(OBSERVACION,'-',1,2))|| TO_CHAR(PN_CARNET)
WHERE ID_INSCRIPCION=LN_ID_INSCRIPCION;
IF PN_CARNET=1 THEN
LV_RESULTADO:='SE HA ASIGNADO CON ÉXITO EL CARNET AL REGISTRO DEL ALUMNO';
ELSE
LV_RESULTADO:='SE HA QUITADO CON ÉXITO EL CARNET DEL REGISTRO DEL ALUMNO';
END IF;
ELSE
IF PN_CARNET=1 THEN
LV_RESULTADO:='NO SE PUEDE ASIGNAR CARNET AL REGISTRO DEL ALUMNO, PORQUE YA TIENE NOTAS AL MENOS
DEL PRIMER PARCIAL O YA SE GENERARON LAS ORDENES DE PAGO';
ELSE
LV_RESULTADO:='NO SE PUEDE QUITAR CARNET DEL REGISTRO DEL ALUMNO PORQUE YA TIENE NOTAS AL MENOS
DEL PRIMER PARCIAL O YA SE GENERARON LAS ORDENES DE PAGO';
END IF;
END IF;
RETURN LV_RESULTADO;
EXCEPTION
WHEN OTHERS THEN
LV_RESULTADO:=SQLERRM;
RETURN LV_RESULTADO;
END;
----------------------------------------------------------------------------
----------------------PRO_CAMBIO_PARALELO
PROCEDURE PRO_CAMBIO_PARALELO(PN_ID_ALUMNO INT,PN_ID_PERIODO_LECTIVO INT,
PN_ID_MATERIA INT,PN_ID_PARALELO_OLD INT,
PN_ID_PARALELO_NEW INT,PV_USUARIO VARCHAR2,
PV_RESULTADO OUT VARCHAR2)
IS
LN_ID_INSCRIPCION INT;
LN_VEZ_TOMADA INT;
LV_OBSERVACION VARCHAR2(1000);

LN_CUPO_DISPONIBLE_NEW INT;
--28/05/2009 22:18
LN_EXISTE_NOTAS_ACTUALES NUMBER(3);
BEGIN
SELECT DISTINCT A.ID_INSCRIPCION INTO LN_ID_INSCRIPCION
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
143

WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ALUMNO=PN_ID_ALUMNO
AND A.ID_ESTADO=1
AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND B.OBSERVACION LIKE '%ORDINARIA%';

SELECT VEZ_TOMADA,OBSERVACION INTO LN_VEZ_TOMADA,LV_OBSERVACION


FROM INSCRIPCION_DETALLE
WHERE ID_INSCRIPCION=LN_ID_INSCRIPCION AND ID_MATERIA=PN_ID_MATERIA
AND ID_PARALELO=PN_ID_PARALELO_OLD AND ID_ESTADO=1;

--<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
---AUMENTADO 28/05/2009 22:18
--LO SIG. VERIFICA QUE NO EXISTAN NOTAS DEL SEMESTRE PARA EL ALUMNO EN LA MATERIA
--QUE DESEA CAMBIAR DE PARALELO EN PERIODO LECTIVO VIGENTE
SELECT NVL(MAX(NVL(N.NOTA_PARCIAL1,0)),0)INTO LN_EXISTE_NOTAS_ACTUALES
FROM NOTAS N
WHERE N.ID_ESTADO<>3 AND N.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND N.ID_ALUMNO=PN_ID_ALUMNO AND N.ID_MATERIA=PN_ID_MATERIA AND N.TIPO_NOTA='SEM';

-->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><>>>>>>>>>>>
IF LN_EXISTE_NOTAS_ACTUALES=0 THEN--SI NO TIENE NOTAS EN PERIODO LECTVO VIGENTE
--ANULA ANTES DE VOLVER A INSERTAR UN NUEVO REGISTRO AL CAMBIAR DE PARALELO
UPDATE INSCRIPCION_DETALLE
SET ID_ESTADO=3,HORA_MODIFICACION=CURRENT_DATE,USUARIO_MODIFICACION=PV_USUARIO
WHERE ID_INSCRIPCION=LN_ID_INSCRIPCION AND ID_MATERIA=PN_ID_MATERIA
AND ID_PARALELO=PN_ID_PARALELO_OLD AND ID_ESTADO=1;

INSERT INTO INSCRIPCION_DETALLE(ID_INSCRIPCION_DETALLE,ID_INSCRIPCION,ID_PERIODO_LECTIVO,


ID_PARALELO,ID_MATERIA,VEZ_TOMADA,ID_ESTADO,FECHA_REGISTRO,USUARIO_REGISTRO,OBSERVACION)
SELECT
NVL(MAX(ID_INSCRIPCION_DETALLE),0)+1,LN_ID_INSCRIPCION,PN_ID_PERIODO_LECTIVO,PN_ID_PARALELO_NEW,
PN_ID_MATERIA,LN_VEZ_TOMADA,1,CURRENT_DATE,PV_USUARIO,LV_OBSERVACION
FROM INSCRIPCION_DETALLE;
--ACTUALIZAR CUPOS EN TABLA PARALELO MATERIA
--1.- SE VERIFICA SI EN EL NUEVO PARALELO EXISTEN CUPOS
SELECT CUPO_DISPONIBLE INTO LN_CUPO_DISPONIBLE_NEW
FROM PARALELO_MATERIA
WHERE ID_PARALELO=PN_ID_PARALELO_NEW AND ID_MATERIA=PN_ID_MATERIA
--AND ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ID_ESTADO=1;

IF LN_CUPO_DISPONIBLE_NEW>0 THEN--SI EL CUPO ES MAYOR A CERO


--ACTUALIZO EN NUEVO PARALELO_MATERIA
--AUMENTO CUPO OCUPADO Y DISMINUYE CUPO DISPONIBLE
UPDATE PARALELO_MATERIA
SET CUPO_OCUPADO=CUPO_OCUPADO+1 , CUPO_DISPONIBLE=CUPO_DISPONIBLE-1
WHERE ID_PARALELO=PN_ID_PARALELO_NEW AND ID_MATERIA=PN_ID_MATERIA
--AND ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ID_ESTADO=1;
--ACTUALIZO EL CUPO DEL PARALELO ANTIGUO
--AUMENTO CUPO DISPONIBLE Y DISMINUYE CUPO OCUPADO
UPDATE PARALELO_MATERIA
SET CUPO_OCUPADO=CUPO_OCUPADO- 1 , CUPO_DISPONIBLE=CUPO_DISPONIBLE+1
WHERE ID_PARALELO=PN_ID_PARALELO_OLD AND ID_MATERIA=PN_ID_MATERIA
--AND ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ID_ESTADO=1;
END IF;
--VERIFICO FINALMENTE SI EL CUPO_DISPONIBLE ES >=0 LUEGO DE ACTUALIZAR
SELECT CUPO_DISPONIBLE INTO LN_CUPO_DISPONIBLE_NEW
FROM PARALELO_MATERIA
WHERE ID_PARALELO=PN_ID_PARALELO_NEW AND ID_MATERIA=PN_ID_MATERIA
--AND ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ID_ESTADO=1;

IF LN_CUPO_DISPONIBLE_NEW>=0 THEN
PV_RESULTADO:='SI';
ELSE
PV_RESULTADO:='NO SE PUEDE CAMBIAR LA MATERIA :'|| get_nombre_materia(PN_ID_MATERIA) || ' AL PARALELO : ' ||
GET_NOMBRE_PARALELO(PN_ID_PARALELO_NEW) || ' ,PORQUE NO EXISTE CUPO EN ESTE PARALELO';
END IF;
ELSE--QUE SI TIENE NOTAS
PV_RESULTADO:='NO SE PUEDE CAMBIAR LA MATERIA :'|| get_nombre_materia(PN_ID_MATERIA) || ' AL PARALELO : ' ||
GET_NOMBRE_PARALELO(PN_ID_PARALELO_NEW) || ' ,PORQUE LA MATERIA YA TIENE NOTAS ';
END IF;
144

EXCEPTION
WHEN OTHERS THEN
PV_RESULTADO:=SQLERRM;
END PRO_CAMBIO_PARALELO;
---------------------------------------------------------------------
--------------------FUN_NIVELES_CURSA_ALUMNO
FUNCTION FUN_NIVELES_CURSA_ALUMNO(PN_ID_ALUMNO INT,PN_ID_PERIODO_LECTIVO INT)RETURN INT
IS
LN_NUMERO_NIVELES INT;
BEGIN
SELECT COUNT(DISTINCT M.ID_SEMESTRE) INTO LN_NUMERO_NIVELES
FROM MALLA_DETALLE M
WHERE M.ID_MATERIA IN(SELECT B.ID_MATERIA
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO)
AND M.ID_ESTADO=1;
RETURN LN_NUMERO_NIVELES;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);

END FUN_NIVELES_CURSA_ALUMNO;
----------------------------------------------------------
----------------FUN_CUENTA_VECES_TOMADAS_MATERIA
FUNCTION FUN_CUENTA_VECES_MATERIA_INS(PN_ID_ALUMNO INT,PN_ID_PERIODO_LECTIVO INT)RETURN INT
IS
LN_COUNT_DIF_VEZ_TOMADAS_MAT INT;
BEGIN
SELECT COUNT(DISTINCT(B.VEZ_TOMADA))INTO LN_COUNT_DIF_VEZ_TOMADAS_MAT
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO;
RETURN LN_COUNT_DIF_VEZ_TOMADAS_MAT;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.put_line(SQLERRM);
END FUN_CUENTA_VECES_MATERIA_INS;
--------------------------------------------
---------------------FUN_CUENTA_MATERIAS_INSCRITAS
FUNCTION FUN_CUENTA_MATERIAS_INSCRITAS(PN_ID_ALUMNO INT,PN_ID_PERIODO_LECTIVO INT)RETURN INT
IS
LN_NUM_MATERIAS_INSCRIPCION INT;
BEGIN
SELECT COUNT(DISTINCT(B.ID_MATERIA))INTO LN_NUM_MATERIAS_INSCRIPCION
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO;
RETURN LN_NUM_MATERIAS_INSCRIPCION;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END FUN_CUENTA_MATERIAS_INSCRITAS;

--

------------------------------------
------------------------FUNCION PRO_CALCULA_PAGOS
/*FUNCTION PRO_CALCULA_PAGOS(PN_ID_ALUMNO INT,PN_ID_PERIODO_LECTIVO INT)RETURN NUMBER
IS
LN_VEZ_TOMADA_UNICA INT;
LN_COSTO NUMBER(10,2);

BEGIN
--LO SIG. ES SI UN ALUMNO SOLO CURSA UN SOLO NIVEL
IF FUN_NIVELES_CURSA_ALUMNO(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)=1 AND
FUN_CUENTA_VECES_MATERIA_INS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)=1 THEN--SI TIENE DIFERENETES
VECES TOMADAS EJM
--1ERA VEZ,2DA VEZ(SERIAN 2 PORQUE EN LA INSCRIPCION HAY 2 VECES TOMADAS DIFERENTES
145

SELECT DISTINCT( B.VEZ_TOMADA) INTO LN_VEZ_TOMADA_UNICA--MUESTRA LA UNICA VEZ


FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO;

IF LN_VEZ_TOMADA_UNICA=1 AND
FUN_CUENTA_MATERIAS_INSCRITAS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)>=4 THEN
--ES DECIR SI SOLO SE VE TODAS MATERIAS POR PRIMERA VEZ Y 1 SOLO NIVEL
--Y SI VE 4 O MAS MATERIAS SE APLICA EL COSTO DE COMBO
SELECT SUM(NVL(PRECIO,0))INTO LN_COSTO
FROM
(
SELECT PRECIO--MUESTRA EL COSTO DEL COMBO EN BASE A LA CATEGORIA DEL ALUMNO
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND A.DESCRIPCION LIKE '%COMBO%'
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
UNION ALL
SELECT PRECIO --AGREGAR LOS RUBROS OBLIGATORIOS
FROM TASA A,TASA_PRECIO B,TASA_CATEGORIA C
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND C.ID_ESTADO=1 AND C.DESCRIPCION='PAGOS OBLIGATORIOS'
AND C.ID_TASA_CATEGORIA=A.ID_TASA_CATEGORIA
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
UNION ALL
---AGREGAR EL COSTO DE INGLES SI TIENE
SELECT DISTINCT SUBSTR(B.OBSERVACION,INSTR(B.OBSERVACION,'-')+1,1)* (
SELECT B.PRECIO --PRECIO INGLES
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.DESCRIPCION LIKE '%INGLES%'
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA
FROM ALUMNO WHERE ID_ALUMNO=PN_ID_ALUMNO))
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ROWNUM=1
)TABLA;
--lo sig si cursa un solo nivel y por priemra vez pero menos de 4 materra
ELSIF LN_VEZ_TOMADA_UNICA=1 AND
FUN_CUENTA_MATERIAS_INSCRITAS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)<4 THEN
SELECT SUM(NVL(PRECIO,0))INTO LN_COSTO
FROM
(
SELECT NVL(B.VEZ_TOMADA,0)* (SELECT PRECIO--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND trim(A.DESCRIPCION)='MATRICULA POR CADA MATERIA 1ERA VEZ'
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
)PRECIO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO

UNION ALL
SELECT PRECIO --AGREGAR LOS RUBROS OBLIGATORIOS
FROM TASA A,TASA_PRECIO B,TASA_CATEGORIA C
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND C.ID_ESTADO=1 AND C.DESCRIPCION='PAGOS OBLIGATORIOS'
AND C.ID_TASA_CATEGORIA=A.ID_TASA_CATEGORIA
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
146

UNION ALL
---AGREGAR EL COSTO DE INGLES SI TIENE
SELECT DISTINCT SUBSTR(B.OBSERVACION,INSTR(B.OBSERVACION,'-')+1,1)* (
SELECT B.PRECIO --PRECIO INGLES
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.DESCRIPCION LIKE '%INGLES%'
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA
FROM ALUMNO WHERE ID_ALUMNO=PN_ID_ALUMNO))
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ROWNUM=1
)TABLA;

END IF;
--LO SIG. ES PARA ALUNOS DE 1 SOLO NIVEL Y QUE TIENEN MAS DE 1 VEZ
ELSIF FUN_NIVELES_CURSA_ALUMNO(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)=1 AND
FUN_CUENTA_VECES_MATERIA_INS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)>1 THEN--SI TIENE DIFERENETES
VECES TOMADAS EJM
SELECT SUM(NVL(PRECIO,0))INTO LN_COSTO
FROM
(
SELECT NVL(B.VEZ_TOMADA,0)* (SELECT PRECIO--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND trim(A.DESCRIPCION)='MATRICULA POR CADA MATERIA 1ERA VEZ'
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
)PRECIO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO

UNION ALL
SELECT PRECIO --AGREGAR LOS RUBROS OBLIGATORIOS
FROM TASA A,TASA_PRECIO B,TASA_CATEGORIA C
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND C.ID_ESTADO=1 AND C.DESCRIPCION='PAGOS OBLIGATORIOS'
AND C.ID_TASA_CATEGORIA=A.ID_TASA_CATEGORIA
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
UNION ALL
---AGREGAR EL COSTO DE INGLES SI TIENE
SELECT DISTINCT SUBSTR(B.OBSERVACION,INSTR(B.OBSERVACION,'-')+1,1)* (
SELECT B.PRECIO --PRECIO INGLES
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.DESCRIPCION LIKE '%INGLES%'
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA
FROM ALUMNO WHERE ID_ALUMNO=PN_ID_ALUMNO))
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ROWNUM=1
)TABLA;
--LO SIG. ES PARA ALUNOS DE MAS DE 1 NIVEL /SEMESTRE
ELSIF FUN_NIVELES_CURSA_ALUMNO(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)>1 THEN
SELECT SUM(NVL(PRECIO,0))INTO LN_COSTO
FROM
(
--LO SIG ES PARA AUMNETRA EL VALOR DEL COMBO AL PRECIO CALCULADO DE CADA MATERIA
SELECT PRECIO--MUESTRA EL COSTO DEL COMBO EN BASE A LA CATEGORIA DEL ALUMNO
FROM TASA A,TASA_PRECIO B
147

WHERE A.ID_TASA=B.ID_TASA
AND A.DESCRIPCION LIKE '%COMBO%'
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
UNION ALL
SELECT NVL(B.VEZ_TOMADA,0)* (SELECT PRECIO--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND trim(A.DESCRIPCION)='MATRICULA POR CADA MATERIA 1ERA VEZ'
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
)PRECIO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO

UNION ALL
SELECT PRECIO --AGREGAR LOS RUBROS OBLIGATORIOS
FROM TASA A,TASA_PRECIO B,TASA_CATEGORIA C
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND C.ID_ESTADO=1 AND C.DESCRIPCION='PAGOS OBLIGATORIOS'
AND C.ID_TASA_CATEGORIA=A.ID_TASA_CATEGORIA
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
UNION ALL
---AGREGAR EL COSTO DE INGLES SI TIENE
SELECT DISTINCT SUBSTR(B.OBSERVACION,INSTR(B.OBSERVACION,'-')+1,1)* (
SELECT B.PRECIO --PRECIO INGLES
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.DESCRIPCION LIKE '%INGLES%'
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA
FROM ALUMNO WHERE ID_ALUMNO=PN_ID_ALUMNO))
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ROWNUM=1
)TABLA;
END IF;
RETURN NVL(LN_COSTO,0);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
-----
-----------------PR_CALCULA_PAGOS2
FUNCTION PR_CALCULA_PAGOS2(PN_ID_ALUMNO INT,PN_ID_PERIODO_LECTIVO INT)RETURN NUMBER
IS
LN_VEZ_TOMADA_UNICA INT;
LN_COSTO NUMBER(10,2);

BEGIN
--LO SIG. ES SI UN ALUMNO TIENE SOLO UNA VEZ DE ESTUDIO DIFERENTE
IF FUN_CUENTA_VECES_MATERIA_INS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)=1 THEN--SI TIENE DIFERENETES
VECES TOMADAS EJM
--1ERA VEZ,2DA VEZ(SERIAN 2 PORQUE EN LA INSCRIPCION HAY 2 VECES TOMADAS DIFERENTES

SELECT DISTINCT( B.VEZ_TOMADA) INTO LN_VEZ_TOMADA_UNICA--MUESTRA LA UNICA VEZ


FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO;

IF LN_VEZ_TOMADA_UNICA=1 THEN
--SI TODAS LAS VECES SON POR PRIMERA VEZ NO IMPORTANDO EL NIVEL
--ES GRATIS TODO EXCETUANDO INTERNET Y CARNET POSTERIOR A LA 2DA VEZ.
148

SELECT NVL(SUM(PRECIO),0) INTO LN_COSTO--AGREGAR LOS RUBROS OBLIGATORIOS--EN ESTE CASO ES INTERNET
FROM TASA A,TASA_PRECIO B,TASA_CATEGORIA C,ALUMNO_CATEGORIA AC
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND C.ID_ESTADO=1 AND C.DESCRIPCION='PAGOS OBLIGATORIOS'
AND C.ID_TASA_CATEGORIA=A.ID_TASA_CATEGORIA
AND B.ID_ALUMNO_CATEGORIA=AC.ID_ALUMNO_CATEGORIA AND AC.ID_ESTADO=1
AND (B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)OR
AC.DESCRIPCION LIKE '%INDIFERENTE%')
;
end if;
--FALTARIA EL CARNET EN CASO DE TENERLO

--LO SIG. ES PARA ALUNOS DE 1 SOLO NIVEL Y QUE TIENEN MAS DE 1 VEZ
--AQUI SI DEBE PAGAR LA AUTOFINANCIACION
ELSIF FUN_CUENTA_VECES_MATERIA_INS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)>1 THEN--SI TIENE
DIFERENETES VECES TOMADAS EJM

SELECT SUM(NVL(PRECIO,0))INTO LN_COSTO


FROM
(
SELECT B.ID_TASA,B.ID_PRECIO,PRECIO
FROM TASA A,TASA_PRECIO B,ALUMNO_CATEGORIA C
WHERE A.ID_TASA=B.ID_TASA
AND A.DESCRIPCION LIKE '%AUTOFINA%'
AND B.ID_ALUMNO_CATEGORIA=C.ID_ALUMNO_CATEGORIA AND C.ID_ESTADO=1
AND (B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
OR C.DESCRIPCION LIKE '%INDIFERENTE%')
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1 AND B.ID_SEMESTRE=(SELECT NVL(MAX(PD.SEMESTRE),0) FROM
INSCRIPCION I,INSCRIPCION_DETALLE ID,PARALELO P,PARALELO_DESCRIPCION PD
WHERE P.DESCRIPCION=PD.DESCRIPCION AND I.ID_INSCRIPCION=ID.ID_INSCRIPCION
AND ID.ID_PERIODO_LECTIVO=1 AND ID.ID_PARALELO=P.ID_PARALELO AND I.ID_ALUMNO=PN_ID_ALUMNO )

UNION ALL
SELECT TABLA.ID_TASA,TABLA.ID_PRECIO,SUM(TABLA.PRECIO)PRECIO
FROM
(
SELECT (SELECT B.ID_TASA--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND trim(A.DESCRIPCION)='MATRICULA POR CADA MATERIA 1ERA VEZ'
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1)ID_TASA,--PARA ID_TASA
(SELECT B.ID_PRECIO--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND trim(A.DESCRIPCION)='MATRICULA POR CADA MATERIA 1ERA VEZ'
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1)ID_PRECIO,--PARA ID_PRECIO
(NVL(B.VEZ_TOMADA,0)* (SELECT PRECIO--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND trim(A.DESCRIPCION)='MATRICULA POR CADA MATERIA 1ERA VEZ'
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
))PRECIO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND B.VEZ_TOMADA>1
)TABLA
GROUP BY TABLA.ID_TASA,TABLA.ID_PRECIO
--
UNION ALL
SELECT B.ID_TASA,B.ID_PRECIO,PRECIO --AGREGAR LOS RUBROS OBLIGATORIOS--EN ESTE CASO ES INTERNET
149

FROM TASA A,TASA_PRECIO B,TASA_CATEGORIA C,ALUMNO_CATEGORIA AC


WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND C.ID_ESTADO=1 AND C.DESCRIPCION='PAGOS OBLIGATORIOS'
AND C.ID_TASA_CATEGORIA=A.ID_TASA_CATEGORIA
AND B.ID_ALUMNO_CATEGORIA=AC.ID_ALUMNO_CATEGORIA AND AC.ID_ESTADO=1
AND (B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)OR
AC.DESCRIPCION LIKE '%INDIFERENTE%')

UNION ALL
---AGREGAR EL COSTO DE INGLES SI TIENE

SELECT B.ID_TASA,B.ID_PRECIO,( SELECT DISTINCT SUBSTR(B.OBSERVACION,INSTR(B.OBSERVACION,'-')+1,1) *


B.PRECIO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ROWNUM=1)SUBTOTAL
FROM TASA A,TASA_PRECIO B,ALUMNO_CATEGORIA AC
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.DESCRIPCION LIKE '%INGLES%'
AND AC.ID_ALUMNO_CATEGORIA=B.ID_ALUMNO_CATEGORIA AND AC.ID_ESTADO=1
AND (B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)OR
AC.DESCRIPCION LIKE '%INDIFERENTE%')
);

END IF;
RETURN NVL(LN_COSTO,0);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END PR_CALCULA_PAGOS2;
----------------------
-------PR_COSTO_NIVEL_DIF : ES PARA CALCULAR LOS PAGOS DE UN ALUMNO CON DIFERENTES
---NIVELES

PROCEDURE PR_COSTO_NIVEL_DIF(PN_ID_ALUMNO INT,PN_ID_PERIODO_LECTIVO INT)


IS
LN_ID_ORDEN_PAGO INT;
LN_CANT_RECIBOS INT:=0;
LN_NUM_RECIBO INT:=1;
LN_DIAS_VENCIMIENTO INT:=30;
LN_VALOR_CUOTA NUMBER(10,2):=0;
LN_VALOR_CUOTA_ACUMULADO NUMBER(10,2):=0;

CURSOR CUR_PAGOS IS
SELECT B.ID_TASA,B.ID_PRECIO,PRECIO--MUESTRA EL COSTO DEL COMBO EN BASE A LA CATEGORIA DEL ALUMNO
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND A.DESCRIPCION LIKE '%COMBO%'
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
UNION ALL
SELECT TABLA.ID_TASA,TABLA.ID_PRECIO,SUM(TABLA.PRECIO)PRECIO
FROM
(
SELECT (SELECT B.ID_TASA--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND trim(A.DESCRIPCION)='MATRICULA POR CADA MATERIA 1ERA VEZ'
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1)ID_TASA,--PARA ID_TASA
(SELECT B.ID_PRECIO--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND trim(A.DESCRIPCION)='MATRICULA POR CADA MATERIA 1ERA VEZ'
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
150

ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1)ID_PRECIO,--PARA ID_PRECIO
(NVL(B.VEZ_TOMADA,0)* (SELECT PRECIO--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND trim(A.DESCRIPCION)='MATRICULA POR CADA MATERIA 1ERA VEZ'
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
))PRECIO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
)TABLA
GROUP BY TABLA.ID_TASA,TABLA.ID_PRECIO

----

----

UNION ALL
SELECT B.ID_TASA,B.ID_PRECIO,PRECIO --AGREGAR LOS RUBROS OBLIGATORIOS
FROM TASA A,TASA_PRECIO B,TASA_CATEGORIA C
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND C.ID_ESTADO=1 AND C.DESCRIPCION='PAGOS OBLIGATORIOS'
AND C.ID_TASA_CATEGORIA=A.ID_TASA_CATEGORIA
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
UNION ALL
---AGREGAR EL COSTO DE INGLES SI TIENE

SELECT B.ID_TASA,B.ID_PRECIO,( SELECT DISTINCT SUBSTR(B.OBSERVACION,INSTR(B.OBSERVACION,'-')+1,1) *


B.PRECIO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ROWNUM=1)SUBTOTAL
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.DESCRIPCION LIKE '%INGLES%'
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO) ;
---
LN_VALOR_MATRICULA NUMBER(10,2):=0;
LN_RUBRO_TOTAL NUMBER(10,2):=0;
LN_VALORES_ADICIONALES NUMBER(10,2):=0;

BEGIN

--LO SIG . ES PARA OBTENER EL VALOR DE LA MATRICULA


FOR REG1 IN CUR_PAGOS LOOP
IF REG1.ID_TASA=1 OR REG1.ID_TASA=2 THEN
LN_VALOR_MATRICULA:=LN_VALOR_MATRICULA+REG1.PRECIO;
END IF;
END LOOP;

LN_RUBRO_TOTAL:=PRO_CALCULA_PAGOS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO);
LN_VALORES_ADICIONALES:=LN_RUBRO_TOTAL - LN_VALOR_MATRICULA;

--INSERTAR EN ORDEN PAGO


\* INSERT INTO
ORDEN_PAGO(ID_ORDEN_PAGO,CANTIDAD_RECIBOS,ID_ALUMNO,ID_ESTADO,FECHA_INGRESO,ID_PERIODO_LECTIVO,
ID_FACULTAD,ID_CARRERA,ID_CUENTA,ID_FORMA_PAGO,VALOR_TOTAL)
SELECT LN_ID_ORDEN_PAGO ,get_parametro('NUMERO DE CUOTAS ORDEN PAGO',9),PN_ID_ALUMNO,1,
CURRENT_DATE,PN_ID_PERIODO_LECTIVO,1,1,1,1,PRO_CALCULA_PAGOS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)
FROM DUAL;*\
LN_CANT_RECIBOS:=get_parametro('NUMERO DE CUOTAS ORDEN PAGO',9);

WHILE LN_NUM_RECIBO <= LN_CANT_RECIBOS LOOP


151

SELECT NVL(MAX(ID_ORDEN_PAGO),0)+1 INTO LN_ID_ORDEN_PAGO


FROM ORDEN_PAGO;
LN_VALOR_CUOTA:=LN_VALOR_MATRICULA * (get_parametro('PORCENTAJE ORDEN PAGO CUOTA
'||TO_CHAR(LN_NUM_RECIBO),9)/100);
IF LN_NUM_RECIBO=1 THEN--AL PRIEMER RECIBO SE LE AGREGA LOS COSTOS ADICIONALES
LN_VALOR_CUOTA:=LN_VALOR_CUOTA+LN_VALORES_ADICIONALES;
END IF;
LN_VALOR_CUOTA_ACUMULADO:=LN_VALOR_CUOTA_ACUMULADO + LN_VALOR_CUOTA;
IF LN_NUM_RECIBO=LN_CANT_RECIBOS-1 THEN
LN_VALOR_CUOTA:=LN_RUBRO_TOTAL - LN_VALOR_CUOTA_ACUMULADO;
END IF;

INSERT INTO ORDEN_PAGO(ID_ORDEN_PAGO,ID_ALUMNO,ID_ESTADO,FECHA_INGRESO,


ID_PERIODO_LECTIVO,ID_FACULTAD,ID_CARRERA,ID_CUENTA,ID_FORMA_PAGO,VALOR_TOTAL,
NUM_RECIBO,FECHA_EMISION,FECHA_VENCIMIENTO,CONDICION)
SELECT LN_ID_ORDEN_PAGO ,PN_ID_ALUMNO,1,
CURRENT_DATE,PN_ID_PERIODO_LECTIVO,1,1,1,1,
LN_VALOR_CUOTA,LN_NUM_RECIBO,
CURRENT_DATE,CURRENT_DATE + LN_DIAS_VENCIMIENTO,'PEN'
FROM DUAL;
--LO SIG ES PARA GRABAR ORDEN_DETALLE
FOR REG IN CUR_PAGOS LOOP
IF REG.PRECIO<>0 THEN
IF LN_NUM_RECIBO=1 THEN
INSERT INTO ORDEN_PAGO_DETALLE(ID_ORDEN_DETALLE,ID_TASA,ID_ORDEN_PAGO,
ID_ESTADO,VALOR_FINAL,ID_PRECIO,VALOR_TASA,PORCENTAJE_TASA)
SELECT NVL(MAX(ID_ORDEN_DETALLE),0)+1,REG.ID_TASA,LN_ID_ORDEN_PAGO,1,
REG.PRECIO * ((CASE
WHEN REG.ID_TASA=1 OR REG.ID_TASA=2 THEN
get_parametro('PORCENTAJE ORDEN PAGO CUOTA '||TO_CHAR(LN_NUM_RECIBO),9)
ELSE
100
END)/100)
,REG.ID_PRECIO,GET_VALOR_TASA(REG.ID_TASA,PN_ID_ALUMNO),
(CASE
WHEN REG.ID_TASA=1 OR REG.ID_TASA=2 THEN
get_parametro('PORCENTAJE ORDEN PAGO CUOTA '||TO_CHAR(LN_NUM_RECIBO),9)
ELSE
100
END)PORCENTAJE

FROM ORDEN_PAGO_DETALLE;
ELSIF LN_NUM_RECIBO <> 1 AND (REG.ID_TASA =1 OR REG.ID_TASA =2 ) THEN
INSERT INTO ORDEN_PAGO_DETALLE(ID_ORDEN_DETALLE,ID_TASA,ID_ORDEN_PAGO,
ID_ESTADO,VALOR_FINAL,ID_PRECIO,VALOR_TASA,PORCENTAJE_TASA)
SELECT NVL(MAX(ID_ORDEN_DETALLE),0)+1,REG.ID_TASA,LN_ID_ORDEN_PAGO,1,
REG.PRECIO * ((CASE
WHEN REG.ID_TASA=1 OR REG.ID_TASA=2 THEN
get_parametro('PORCENTAJE ORDEN PAGO CUOTA '||TO_CHAR(LN_NUM_RECIBO),9)
ELSE
100
END)/100)
,REG.ID_PRECIO,GET_VALOR_TASA(REG.ID_TASA,PN_ID_ALUMNO),
(CASE
WHEN REG.ID_TASA=1 OR REG.ID_TASA=2 THEN
get_parametro('PORCENTAJE ORDEN PAGO CUOTA '||TO_CHAR(LN_NUM_RECIBO),9)
ELSE
100
END)PORCENTAJE

FROM ORDEN_PAGO_DETALLE;
END IF;
END IF;
END LOOP;

-------------

LN_NUM_RECIBO:=LN_NUM_RECIBO+1;
LN_DIAS_VENCIMIENTO:=LN_DIAS_VENCIMIENTO + 30;
END LOOP;

--INSERTAR EN ORDEN_PAGO_DETALLE
\* FOR REG IN CUR_PAGOS LOOP
IF REG.PRECIO<>0 THEN
INSERT INTO ORDEN_PAGO_DETALLE
152

SELECT NVL(MAX(ID_ORDEN_DETALLE),0)+1,REG.ID_TASA,LN_ID_ORDEN_PAGO,1,REG.PRECIO,REG.ID_PRECIO
FROM ORDEN_PAGO_DETALLE;
END IF;
END LOOP;*\

--INSERTAR EN RECIBO_PAGO
\*LN_CANT_RECIBOS:=get_parametro('NUMERO DE CUOTAS ORDEN PAGO',9);

WHILE LN_NUM_RECIBO <= LN_CANT_RECIBOS LOOP

LN_VALOR_CUOTA:=PRO_CALCULA_PAGOS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)*
(get_parametro('PORCENTAJE ORDEN PAGO CUOTA '||TO_CHAR(LN_NUM_RECIBO),9)/100);
LN_VALOR_CUOTA_ACUMULADO:=LN_VALOR_CUOTA_ACUMULADO + LN_VALOR_CUOTA;
IF LN_NUM_RECIBO=LN_CANT_RECIBOS-1 THEN
LN_VALOR_CUOTA:=PRO_CALCULA_PAGOS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)-
LN_VALOR_CUOTA_ACUMULADO;
END IF;

INSERT INTO RECIBO_PAGO


SELECT NVL(MAX(ID_RECIBO),0)+1 ,LN_NUM_RECIBO,LN_ID_ORDEN_PAGO,1,CURRENT_DATE,CURRENT_DATE +
LN_DIAS_VENCIMIENTO,
'PEN',LN_VALOR_CUOTA
FROM RECIBO_PAGO;
LN_NUM_RECIBO:=LN_NUM_RECIBO + 1;
LN_DIAS_VENCIMIENTO:=LN_DIAS_VENCIMIENTO + 30;
END LOOP;*\

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;

--********

----------------------------------------------------
-----------------PR_COSTO_UN_NIVEL_UNA_VEZ_
---GRABA EN LAS TABLAS DE ORDEN Y ORDEN_DETALLE Y RECIBO_PAGOS
---CUANDO EL ALUMNO EN EL PEIRODO VIGENTE VE 1 SOLO NIVEL Y 1 SOLA VEZ Y MAS DE 4 MATERIA

PROCEDURE PR_COSTO_UN_NIVEL_UNA_VEZ_(PN_ID_ALUMNO INT,PN_ID_PERIODO_LECTIVO INT)


IS
LN_ID_ORDEN_PAGO INT;
LN_CANT_RECIBOS INT:=0;
LN_NUM_RECIBO INT:=1;
LN_DIAS_VENCIMIENTO INT:=30;
LN_VALOR_CUOTA NUMBER(10,2):=0;
LN_VALOR_CUOTA_ACUMULADO NUMBER(10,2):=0;
CURSOR CUR_PAGOS IS
SELECT B.ID_TASA,B.ID_PRECIO,PRECIO--MUESTRA EL COSTO DEL COMBO EN BASE A LA CATEGORIA DEL ALUMNO
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND A.DESCRIPCION LIKE '%COMBO%'
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1

UNION ALL

SELECT B.ID_TASA,B.ID_PRECIO,PRECIO --AGREGAR LOS RUBROS OBLIGATORIOS


FROM TASA A,TASA_PRECIO B,TASA_CATEGORIA C
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND C.ID_ESTADO=1 AND C.DESCRIPCION='PAGOS OBLIGATORIOS'
AND C.ID_TASA_CATEGORIA=A.ID_TASA_CATEGORIA
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
UNION ALL
---AGREGAR EL COSTO DE INGLES SI TIENE
SELECT B.ID_TASA,B.ID_PRECIO,( SELECT DISTINCT SUBSTR(B.OBSERVACION,INSTR(B.OBSERVACION,'-')+1,1) *
B.PRECIO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
153

AND ROWNUM=1)SUBTOTAL
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.DESCRIPCION LIKE '%INGLES%'
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO) ;

LN_VALOR_MATRICULA NUMBER(10,2):=0;
LN_RUBRO_TOTAL NUMBER(10,2):=0;
LN_VALORES_ADICIONALES NUMBER(10,2):=0;

BEGIN

--LO SIG . ES PARA OBTENER EL VALOR DE LA MATRICULA


FOR REG1 IN CUR_PAGOS LOOP
IF REG1.ID_TASA=1 OR REG1.ID_TASA=2 THEN
LN_VALOR_MATRICULA:=LN_VALOR_MATRICULA+REG1.PRECIO;
END IF;
END LOOP;

LN_RUBRO_TOTAL:=PRO_CALCULA_PAGOS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO);
LN_VALORES_ADICIONALES:=LN_RUBRO_TOTAL - LN_VALOR_MATRICULA;

--INSERTAR EN ORDEN PAGO


\* INSERT INTO
ORDEN_PAGO(ID_ORDEN_PAGO,CANTIDAD_RECIBOS,ID_ALUMNO,ID_ESTADO,FECHA_INGRESO,ID_PERIODO_LECTIVO,
ID_FACULTAD,ID_CARRERA,ID_CUENTA,ID_FORMA_PAGO,VALOR_TOTAL)
SELECT LN_ID_ORDEN_PAGO ,get_parametro('NUMERO DE CUOTAS ORDEN PAGO',9),PN_ID_ALUMNO,1,
CURRENT_DATE,PN_ID_PERIODO_LECTIVO,1,1,1,1,PRO_CALCULA_PAGOS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)
FROM DUAL;*\
LN_CANT_RECIBOS:=get_parametro('NUMERO DE CUOTAS ORDEN PAGO',9);

WHILE LN_NUM_RECIBO <= LN_CANT_RECIBOS LOOP


SELECT NVL(MAX(ID_ORDEN_PAGO),0)+1 INTO LN_ID_ORDEN_PAGO
FROM ORDEN_PAGO;
LN_VALOR_CUOTA:=LN_VALOR_MATRICULA * (get_parametro('PORCENTAJE ORDEN PAGO CUOTA
'||TO_CHAR(LN_NUM_RECIBO),9)/100);
IF LN_NUM_RECIBO=1 THEN--AL PRIEMER RECIBO SE LE AGREGA LOS COSTOS ADICIONALES
LN_VALOR_CUOTA:=LN_VALOR_CUOTA+LN_VALORES_ADICIONALES;
END IF;
LN_VALOR_CUOTA_ACUMULADO:=LN_VALOR_CUOTA_ACUMULADO + LN_VALOR_CUOTA;
IF LN_NUM_RECIBO=LN_CANT_RECIBOS-1 THEN
LN_VALOR_CUOTA:=LN_RUBRO_TOTAL - LN_VALOR_CUOTA_ACUMULADO;
END IF;

INSERT INTO ORDEN_PAGO(ID_ORDEN_PAGO,ID_ALUMNO,ID_ESTADO,FECHA_INGRESO,


ID_PERIODO_LECTIVO,ID_FACULTAD,ID_CARRERA,ID_CUENTA,ID_FORMA_PAGO,VALOR_TOTAL,
NUM_RECIBO,FECHA_EMISION,FECHA_VENCIMIENTO,CONDICION)
SELECT LN_ID_ORDEN_PAGO ,PN_ID_ALUMNO,1,
CURRENT_DATE,PN_ID_PERIODO_LECTIVO,1,1,1,1,
LN_VALOR_CUOTA,LN_NUM_RECIBO,
CURRENT_DATE,CURRENT_DATE + LN_DIAS_VENCIMIENTO,'PEN'
FROM DUAL;
--LO SIG ES PARA GRABAR ORDEN_DETALLE
FOR REG IN CUR_PAGOS LOOP
IF REG.PRECIO<>0 THEN
IF LN_NUM_RECIBO=1 THEN
INSERT INTO ORDEN_PAGO_DETALLE(ID_ORDEN_DETALLE,ID_TASA,ID_ORDEN_PAGO,
ID_ESTADO,VALOR_FINAL,ID_PRECIO,VALOR_TASA,PORCENTAJE_TASA)
SELECT NVL(MAX(ID_ORDEN_DETALLE),0)+1,REG.ID_TASA,LN_ID_ORDEN_PAGO,1,
REG.PRECIO * ((CASE
WHEN REG.ID_TASA=1 OR REG.ID_TASA=2 THEN
get_parametro('PORCENTAJE ORDEN PAGO CUOTA '||TO_CHAR(LN_NUM_RECIBO),9)
ELSE
100
END)/100)
,REG.ID_PRECIO,GET_VALOR_TASA(REG.ID_TASA,PN_ID_ALUMNO),
(CASE
WHEN REG.ID_TASA=1 OR REG.ID_TASA=2 THEN
get_parametro('PORCENTAJE ORDEN PAGO CUOTA '||TO_CHAR(LN_NUM_RECIBO),9)
ELSE
100
END)PORCENTAJE
154

FROM ORDEN_PAGO_DETALLE;
ELSIF LN_NUM_RECIBO <> 1 AND (REG.ID_TASA =1 OR REG.ID_TASA =2 ) THEN
INSERT INTO ORDEN_PAGO_DETALLE(ID_ORDEN_DETALLE,ID_TASA,ID_ORDEN_PAGO,
ID_ESTADO,VALOR_FINAL,ID_PRECIO,VALOR_TASA,PORCENTAJE_TASA)
SELECT NVL(MAX(ID_ORDEN_DETALLE),0)+1,REG.ID_TASA,LN_ID_ORDEN_PAGO,1,
REG.PRECIO * ((CASE
WHEN REG.ID_TASA=1 OR REG.ID_TASA=2 THEN
get_parametro('PORCENTAJE ORDEN PAGO CUOTA '||TO_CHAR(LN_NUM_RECIBO),9)
ELSE
100
END)/100)
,REG.ID_PRECIO,GET_VALOR_TASA(REG.ID_TASA,PN_ID_ALUMNO),
(CASE
WHEN REG.ID_TASA=1 OR REG.ID_TASA=2 THEN
get_parametro('PORCENTAJE ORDEN PAGO CUOTA '||TO_CHAR(LN_NUM_RECIBO),9)
ELSE
100
END)PORCENTAJE

FROM ORDEN_PAGO_DETALLE;
END IF;
END IF;
END LOOP;

-------------

LN_NUM_RECIBO:=LN_NUM_RECIBO+1;
LN_DIAS_VENCIMIENTO:=LN_DIAS_VENCIMIENTO + 30;
END LOOP;

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
\*BEGIN

SELECT NVL(MAX(ID_ORDEN_PAGO),0)+1 INTO LN_ID_ORDEN_PAGO


FROM ORDEN_PAGO;
--INSERTAR EN ORDEN PAGO
INSERT INTO
ORDEN_PAGO(ID_ORDEN_PAGO,CANTIDAD_RECIBOS,ID_ALUMNO,ID_ESTADO,FECHA_INGRESO,ID_PERIODO_LECTIVO,
ID_FACULTAD,ID_CARRERA,ID_CUENTA,ID_FORMA_PAGO,VALOR_TOTAL)
SELECT LN_ID_ORDEN_PAGO ,get_parametro('NUMERO DE CUOTAS ORDEN PAGO',9),PN_ID_ALUMNO,1,
CURRENT_DATE,PN_ID_PERIODO_LECTIVO,1,1,1,1,PRO_CALCULA_PAGOS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)
FROM DUAL;

--INSERTAR EN ORDEN_PAGO_DETALLE
FOR REG IN CUR_PAGOS LOOP
IF REG.PRECIO<>0 THEN
INSERT INTO ORDEN_PAGO_DETALLE
SELECT NVL(MAX(ID_ORDEN_DETALLE),0)+1,REG.ID_TASA,LN_ID_ORDEN_PAGO,1,REG.PRECIO,REG.ID_PRECIO
FROM ORDEN_PAGO_DETALLE;
END IF;
END LOOP;
--INSERTAR EN RECIBO_PAGO
LN_CANT_RECIBOS:=get_parametro('NUMERO DE CUOTAS ORDEN PAGO',9);

WHILE LN_NUM_RECIBO <= LN_CANT_RECIBOS LOOP

LN_VALOR_CUOTA:=PRO_CALCULA_PAGOS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)*
(get_parametro('PORCENTAJE ORDEN PAGO CUOTA '||TO_CHAR(LN_NUM_RECIBO),9)/100);
LN_VALOR_CUOTA_ACUMULADO:=LN_VALOR_CUOTA_ACUMULADO + LN_VALOR_CUOTA;
IF LN_NUM_RECIBO=LN_CANT_RECIBOS-1 THEN
LN_VALOR_CUOTA:=PRO_CALCULA_PAGOS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)-
LN_VALOR_CUOTA_ACUMULADO;
END IF;

INSERT INTO RECIBO_PAGO


SELECT NVL(MAX(ID_RECIBO),0)+1 ,LN_NUM_RECIBO,LN_ID_ORDEN_PAGO,1,CURRENT_DATE,CURRENT_DATE +
LN_DIAS_VENCIMIENTO,
'PEN',LN_VALOR_CUOTA
FROM RECIBO_PAGO;
LN_NUM_RECIBO:=LN_NUM_RECIBO + 1;
155

LN_DIAS_VENCIMIENTO:=LN_DIAS_VENCIMIENTO + 30;
END LOOP;

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;*\
------------------------
--PR_COSTO_UN_NIVEL_UNA_VEZ_MENOS_MAT->>INSERTA 1 NIVEL 1 VEZ MENOS DE 4 MATERIA
PROCEDURE PR_COSTO_UN_NIV_UN_VEZ_MM(PN_ID_ALUMNO INT,PN_ID_PERIODO_LECTIVO INT)
IS
LN_ID_ORDEN_PAGO INT;
LN_CANT_RECIBOS INT:=0;
LN_NUM_RECIBO INT:=1;
LN_DIAS_VENCIMIENTO INT:=30;
LN_VALOR_CUOTA NUMBER(10,2):=0;
LN_VALOR_CUOTA_ACUMULADO NUMBER(10,2):=0;
CURSOR CUR_PAGOS IS
SELECT TABLA.ID_TASA,TABLA.ID_PRECIO,SUM(TABLA.PRECIO)PRECIO
FROM
(SELECT (SELECT B.ID_TASA--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND trim(A.DESCRIPCION)='MATRICULA POR CADA MATERIA 1ERA VEZ'
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1)ID_TASA,--PARA ID_TASA
(SELECT B.ID_PRECIO--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND trim(A.DESCRIPCION)='MATRICULA POR CADA MATERIA 1ERA VEZ'
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1)ID_PRECIO,--PARA ID_PRECIO
(NVL(B.VEZ_TOMADA,0)* (SELECT PRECIO--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND trim(A.DESCRIPCION)='MATRICULA POR CADA MATERIA 1ERA VEZ'
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
))PRECIO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
)TABLA
GROUP BY TABLA.ID_TASA,TABLA.ID_PRECIO

UNION ALL
SELECT B.ID_TASA,B.ID_PRECIO,PRECIO --AGREGAR LOS RUBROS OBLIGATORIOS
FROM TASA A,TASA_PRECIO B,TASA_CATEGORIA C
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND C.ID_ESTADO=1 AND C.DESCRIPCION='PAGOS OBLIGATORIOS'
AND C.ID_TASA_CATEGORIA=A.ID_TASA_CATEGORIA
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
UNION ALL
---AGREGAR EL COSTO DE INGLES SI TIENE
SELECT B.ID_TASA,B.ID_PRECIO,( SELECT DISTINCT SUBSTR(B.OBSERVACION,INSTR(B.OBSERVACION,'-')+1,1) *
B.PRECIO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ROWNUM=1)SUBTOTAL
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.DESCRIPCION LIKE '%INGLES%'
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO) ;
156

LN_VALOR_MATRICULA NUMBER(10,2):=0;
LN_RUBRO_TOTAL NUMBER(10,2):=0;
LN_VALORES_ADICIONALES NUMBER(10,2):=0;

BEGIN

--LO SIG . ES PARA OBTENER EL VALOR DE LA MATRICULA


FOR REG1 IN CUR_PAGOS LOOP
IF REG1.ID_TASA=1 OR REG1.ID_TASA=2 THEN
LN_VALOR_MATRICULA:=LN_VALOR_MATRICULA+REG1.PRECIO;
END IF;
END LOOP;

LN_RUBRO_TOTAL:=PRO_CALCULA_PAGOS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO);
LN_VALORES_ADICIONALES:=LN_RUBRO_TOTAL - LN_VALOR_MATRICULA;

--INSERTAR EN ORDEN PAGO


\* INSERT INTO
ORDEN_PAGO(ID_ORDEN_PAGO,CANTIDAD_RECIBOS,ID_ALUMNO,ID_ESTADO,FECHA_INGRESO,ID_PERIODO_LECTIVO,
ID_FACULTAD,ID_CARRERA,ID_CUENTA,ID_FORMA_PAGO,VALOR_TOTAL)
SELECT LN_ID_ORDEN_PAGO ,get_parametro('NUMERO DE CUOTAS ORDEN PAGO',9),PN_ID_ALUMNO,1,
CURRENT_DATE,PN_ID_PERIODO_LECTIVO,1,1,1,1,PRO_CALCULA_PAGOS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)
FROM DUAL;*\
LN_CANT_RECIBOS:=get_parametro('NUMERO DE CUOTAS ORDEN PAGO',9);

WHILE LN_NUM_RECIBO <= LN_CANT_RECIBOS LOOP


SELECT NVL(MAX(ID_ORDEN_PAGO),0)+1 INTO LN_ID_ORDEN_PAGO
FROM ORDEN_PAGO;
LN_VALOR_CUOTA:=LN_VALOR_MATRICULA * (get_parametro('PORCENTAJE ORDEN PAGO CUOTA
'||TO_CHAR(LN_NUM_RECIBO),9)/100);
IF LN_NUM_RECIBO=1 THEN--AL PRIEMER RECIBO SE LE AGREGA LOS COSTOS ADICIONALES
LN_VALOR_CUOTA:=LN_VALOR_CUOTA+LN_VALORES_ADICIONALES;
END IF;
LN_VALOR_CUOTA_ACUMULADO:=LN_VALOR_CUOTA_ACUMULADO + LN_VALOR_CUOTA;
IF LN_NUM_RECIBO=LN_CANT_RECIBOS-1 THEN
LN_VALOR_CUOTA:=LN_RUBRO_TOTAL - LN_VALOR_CUOTA_ACUMULADO;
END IF;

INSERT INTO ORDEN_PAGO(ID_ORDEN_PAGO,ID_ALUMNO,ID_ESTADO,FECHA_INGRESO,


ID_PERIODO_LECTIVO,ID_FACULTAD,ID_CARRERA,ID_CUENTA,ID_FORMA_PAGO,VALOR_TOTAL,
NUM_RECIBO,FECHA_EMISION,FECHA_VENCIMIENTO,CONDICION)
SELECT LN_ID_ORDEN_PAGO ,PN_ID_ALUMNO,1,
CURRENT_DATE,PN_ID_PERIODO_LECTIVO,1,1,1,1,
LN_VALOR_CUOTA,LN_NUM_RECIBO,
CURRENT_DATE,CURRENT_DATE + LN_DIAS_VENCIMIENTO,'PEN'
FROM DUAL;
--LO SIG ES PARA GRABAR ORDEN_DETALLE
FOR REG IN CUR_PAGOS LOOP
IF REG.PRECIO<>0 THEN
IF LN_NUM_RECIBO=1 THEN
INSERT INTO ORDEN_PAGO_DETALLE(ID_ORDEN_DETALLE,ID_TASA,ID_ORDEN_PAGO,
ID_ESTADO,VALOR_FINAL,ID_PRECIO,VALOR_TASA,PORCENTAJE_TASA)
SELECT NVL(MAX(ID_ORDEN_DETALLE),0)+1,REG.ID_TASA,LN_ID_ORDEN_PAGO,1,
REG.PRECIO * ((CASE
WHEN REG.ID_TASA=1 OR REG.ID_TASA=2 THEN
get_parametro('PORCENTAJE ORDEN PAGO CUOTA '||TO_CHAR(LN_NUM_RECIBO),9)
ELSE
100
END)/100)
,REG.ID_PRECIO,GET_VALOR_TASA(REG.ID_TASA,PN_ID_ALUMNO),
(CASE
WHEN REG.ID_TASA=1 OR REG.ID_TASA=2 THEN
get_parametro('PORCENTAJE ORDEN PAGO CUOTA '||TO_CHAR(LN_NUM_RECIBO),9)
ELSE
100
END)PORCENTAJE

FROM ORDEN_PAGO_DETALLE;
ELSIF LN_NUM_RECIBO <> 1 AND (REG.ID_TASA =1 OR REG.ID_TASA =2 ) THEN
INSERT INTO ORDEN_PAGO_DETALLE(ID_ORDEN_DETALLE,ID_TASA,ID_ORDEN_PAGO,
ID_ESTADO,VALOR_FINAL,ID_PRECIO,VALOR_TASA,PORCENTAJE_TASA)
SELECT NVL(MAX(ID_ORDEN_DETALLE),0)+1,REG.ID_TASA,LN_ID_ORDEN_PAGO,1,
REG.PRECIO * ((CASE
WHEN REG.ID_TASA=1 OR REG.ID_TASA=2 THEN
get_parametro('PORCENTAJE ORDEN PAGO CUOTA '||TO_CHAR(LN_NUM_RECIBO),9)
157

ELSE
100
END)/100)
,REG.ID_PRECIO,GET_VALOR_TASA(REG.ID_TASA,PN_ID_ALUMNO),
(CASE
WHEN REG.ID_TASA=1 OR REG.ID_TASA=2 THEN
get_parametro('PORCENTAJE ORDEN PAGO CUOTA '||TO_CHAR(LN_NUM_RECIBO),9)
ELSE
100
END)PORCENTAJE

FROM ORDEN_PAGO_DETALLE;
END IF;
END IF;
END LOOP;

-------------

LN_NUM_RECIBO:=LN_NUM_RECIBO+1;
LN_DIAS_VENCIMIENTO:=LN_DIAS_VENCIMIENTO + 30;
END LOOP;

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
\*BEGIN

SELECT NVL(MAX(ID_ORDEN_PAGO),0)+1 INTO LN_ID_ORDEN_PAGO


FROM ORDEN_PAGO;
--INSERTAR EN ORDEN PAGO
INSERT INTO
ORDEN_PAGO(ID_ORDEN_PAGO,CANTIDAD_RECIBOS,ID_ALUMNO,ID_ESTADO,FECHA_INGRESO,ID_PERIODO_LECTIVO,
ID_FACULTAD,ID_CARRERA,ID_CUENTA,ID_FORMA_PAGO,VALOR_TOTAL)
SELECT LN_ID_ORDEN_PAGO ,get_parametro('NUMERO DE CUOTAS ORDEN PAGO',9),PN_ID_ALUMNO,1,
CURRENT_DATE,PN_ID_PERIODO_LECTIVO,1,1,1,1,PRO_CALCULA_PAGOS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)
FROM DUAL;

--INSERTAR EN ORDEN_PAGO_DETALLE
FOR REG IN CUR_PAGOS LOOP
IF REG.PRECIO<>0 THEN
INSERT INTO ORDEN_PAGO_DETALLE
SELECT NVL(MAX(ID_ORDEN_DETALLE),0)+1,REG.ID_TASA,LN_ID_ORDEN_PAGO,1,REG.PRECIO,REG.ID_PRECIO
FROM ORDEN_PAGO_DETALLE;
END IF;
END LOOP;
--INSERTAR EN RECIBO_PAGO
LN_CANT_RECIBOS:=get_parametro('NUMERO DE CUOTAS ORDEN PAGO',9);

WHILE LN_NUM_RECIBO <= LN_CANT_RECIBOS LOOP

LN_VALOR_CUOTA:=PRO_CALCULA_PAGOS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)*
(get_parametro('PORCENTAJE ORDEN PAGO CUOTA '||TO_CHAR(LN_NUM_RECIBO),9)/100);
LN_VALOR_CUOTA_ACUMULADO:=LN_VALOR_CUOTA_ACUMULADO + LN_VALOR_CUOTA;
IF LN_NUM_RECIBO=LN_CANT_RECIBOS-1 THEN
LN_VALOR_CUOTA:=PRO_CALCULA_PAGOS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)-
LN_VALOR_CUOTA_ACUMULADO;
END IF;

INSERT INTO RECIBO_PAGO


SELECT NVL(MAX(ID_RECIBO),0)+1 ,LN_NUM_RECIBO,LN_ID_ORDEN_PAGO,1,CURRENT_DATE,CURRENT_DATE +
LN_DIAS_VENCIMIENTO,
'PEN',LN_VALOR_CUOTA
FROM RECIBO_PAGO;
LN_NUM_RECIBO:=LN_NUM_RECIBO + 1;
LN_DIAS_VENCIMIENTO:=LN_DIAS_VENCIMIENTO + 30;
END LOOP;

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
*\
158

---------------------------------
---
PROCEDURE PR_COSTO_UN_NIVEL_VECES_DIF(PN_ID_ALUMNO INT,PN_ID_PERIODO_LECTIVO INT)
IS
LN_ID_ORDEN_PAGO INT;
LN_CANT_RECIBOS INT:=0;
LN_NUM_RECIBO INT:=1;
LN_DIAS_VENCIMIENTO INT:=30;
LN_VALOR_CUOTA NUMBER(10,2):=0;
LN_VALOR_CUOTA_ACUMULADO NUMBER(10,2):=0;
CURSOR CUR_PAGOS IS
SELECT TABLA.ID_TASA,TABLA.ID_PRECIO,SUM(TABLA.PRECIO)PRECIO
FROM
(
SELECT (SELECT B.ID_TASA--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND trim(A.DESCRIPCION)='MATRICULA POR CADA MATERIA 1ERA VEZ'
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1)ID_TASA,--PARA ID_TASA
(SELECT B.ID_PRECIO--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND trim(A.DESCRIPCION)='MATRICULA POR CADA MATERIA 1ERA VEZ'
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1)ID_PRECIO,--PARA ID_PRECIO
(NVL(B.VEZ_TOMADA,0)* (SELECT PRECIO--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND trim(A.DESCRIPCION)='MATRICULA POR CADA MATERIA 1ERA VEZ'
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
))PRECIO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
)TABLA
GROUP BY TABLA.ID_TASA,TABLA.ID_PRECIO
----

----

UNION ALL
SELECT B.ID_TASA,B.ID_PRECIO,PRECIO --AGREGAR LOS RUBROS OBLIGATORIOS
FROM TASA A,TASA_PRECIO B,TASA_CATEGORIA C
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND C.ID_ESTADO=1 AND C.DESCRIPCION='PAGOS OBLIGATORIOS'
AND C.ID_TASA_CATEGORIA=A.ID_TASA_CATEGORIA
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
UNION ALL
---AGREGAR EL COSTO DE INGLES SI TIENE

SELECT B.ID_TASA,B.ID_PRECIO,( SELECT DISTINCT SUBSTR(B.OBSERVACION,INSTR(B.OBSERVACION,'-')+1,1) *


B.PRECIO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ROWNUM=1)SUBTOTAL
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.DESCRIPCION LIKE '%INGLES%'
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO) ;

LN_VALOR_MATRICULA NUMBER(10,2):=0;
LN_RUBRO_TOTAL NUMBER(10,2):=0;
159

LN_VALORES_ADICIONALES NUMBER(10,2):=0;

BEGIN

--LO SIG . ES PARA OBTENER EL VALOR DE LA MATRICULA


FOR REG1 IN CUR_PAGOS LOOP
IF REG1.ID_TASA=1 OR REG1.ID_TASA=2 THEN
LN_VALOR_MATRICULA:=LN_VALOR_MATRICULA+REG1.PRECIO;
END IF;
END LOOP;

LN_RUBRO_TOTAL:=PRO_CALCULA_PAGOS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO);
LN_VALORES_ADICIONALES:=LN_RUBRO_TOTAL - LN_VALOR_MATRICULA;

LN_CANT_RECIBOS:=get_parametro('NUMERO DE CUOTAS ORDEN PAGO',9);

WHILE LN_NUM_RECIBO <= LN_CANT_RECIBOS LOOP


SELECT NVL(MAX(ID_ORDEN_PAGO),0)+1 INTO LN_ID_ORDEN_PAGO
FROM ORDEN_PAGO;
LN_VALOR_CUOTA:=LN_VALOR_MATRICULA * (get_parametro('PORCENTAJE ORDEN PAGO CUOTA
'||TO_CHAR(LN_NUM_RECIBO),9)/100);
IF LN_NUM_RECIBO=1 THEN--AL PRIEMER RECIBO SE LE AGREGA LOS COSTOS ADICIONALES
LN_VALOR_CUOTA:=LN_VALOR_CUOTA+LN_VALORES_ADICIONALES;
END IF;
LN_VALOR_CUOTA_ACUMULADO:=LN_VALOR_CUOTA_ACUMULADO + LN_VALOR_CUOTA;
IF LN_NUM_RECIBO=LN_CANT_RECIBOS-1 THEN
LN_VALOR_CUOTA:=LN_RUBRO_TOTAL - LN_VALOR_CUOTA_ACUMULADO;
END IF;

INSERT INTO ORDEN_PAGO(ID_ORDEN_PAGO,ID_ALUMNO,ID_ESTADO,FECHA_INGRESO,


ID_PERIODO_LECTIVO,ID_FACULTAD,ID_CARRERA,ID_CUENTA,ID_FORMA_PAGO,VALOR_TOTAL,
NUM_RECIBO,FECHA_EMISION,FECHA_VENCIMIENTO,CONDICION)
SELECT LN_ID_ORDEN_PAGO ,PN_ID_ALUMNO,1,
CURRENT_DATE,PN_ID_PERIODO_LECTIVO,1,1,1,1,
LN_VALOR_CUOTA,LN_NUM_RECIBO,
CURRENT_DATE,CURRENT_DATE + LN_DIAS_VENCIMIENTO,'PEN'
FROM DUAL;
--LO SIG ES PARA GRABAR ORDEN_DETALLE
FOR REG IN CUR_PAGOS LOOP
IF REG.PRECIO<>0 THEN
IF LN_NUM_RECIBO=1 THEN
INSERT INTO ORDEN_PAGO_DETALLE(ID_ORDEN_DETALLE,ID_TASA,ID_ORDEN_PAGO,
ID_ESTADO,VALOR_FINAL,ID_PRECIO,VALOR_TASA,PORCENTAJE_TASA)
SELECT NVL(MAX(ID_ORDEN_DETALLE),0)+1,REG.ID_TASA,LN_ID_ORDEN_PAGO,1,
REG.PRECIO * ((CASE
WHEN REG.ID_TASA=1 OR REG.ID_TASA=2 THEN
get_parametro('PORCENTAJE ORDEN PAGO CUOTA '||TO_CHAR(LN_NUM_RECIBO),9)
ELSE
100
END)/100)
,REG.ID_PRECIO,GET_VALOR_TASA(REG.ID_TASA,PN_ID_ALUMNO),
(CASE
WHEN REG.ID_TASA=1 OR REG.ID_TASA=2 THEN
get_parametro('PORCENTAJE ORDEN PAGO CUOTA '||TO_CHAR(LN_NUM_RECIBO),9)
ELSE
100
END)PORCENTAJE

FROM ORDEN_PAGO_DETALLE;
ELSIF LN_NUM_RECIBO <> 1 AND (REG.ID_TASA =1 OR REG.ID_TASA =2 ) THEN
INSERT INTO ORDEN_PAGO_DETALLE(ID_ORDEN_DETALLE,ID_TASA,ID_ORDEN_PAGO,
ID_ESTADO,VALOR_FINAL,ID_PRECIO,VALOR_TASA,PORCENTAJE_TASA)
SELECT NVL(MAX(ID_ORDEN_DETALLE),0)+1,REG.ID_TASA,LN_ID_ORDEN_PAGO,1,
REG.PRECIO * ((CASE
WHEN REG.ID_TASA=1 OR REG.ID_TASA=2 THEN
get_parametro('PORCENTAJE ORDEN PAGO CUOTA '||TO_CHAR(LN_NUM_RECIBO),9)
ELSE
100
END)/100)
,REG.ID_PRECIO,GET_VALOR_TASA(REG.ID_TASA,PN_ID_ALUMNO),
(CASE
WHEN REG.ID_TASA=1 OR REG.ID_TASA=2 THEN
get_parametro('PORCENTAJE ORDEN PAGO CUOTA '||TO_CHAR(LN_NUM_RECIBO),9)
ELSE
160

100
END)PORCENTAJE

FROM ORDEN_PAGO_DETALLE;
END IF;
END IF;
END LOOP;

-------------

LN_NUM_RECIBO:=LN_NUM_RECIBO+1;
LN_DIAS_VENCIMIENTO:=LN_DIAS_VENCIMIENTO + 30;
END LOOP;

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
\*BEGIN

SELECT NVL(MAX(ID_ORDEN_PAGO),0)+1 INTO LN_ID_ORDEN_PAGO


FROM ORDEN_PAGO;
--INSERTAR EN ORDEN PAGO
INSERT INTO
ORDEN_PAGO(ID_ORDEN_PAGO,CANTIDAD_RECIBOS,ID_ALUMNO,ID_ESTADO,FECHA_INGRESO,ID_PERIODO_LECTIVO,
ID_FACULTAD,ID_CARRERA,ID_CUENTA,ID_FORMA_PAGO,VALOR_TOTAL)
SELECT LN_ID_ORDEN_PAGO ,get_parametro('NUMERO DE CUOTAS ORDEN PAGO',9),PN_ID_ALUMNO,1,
CURRENT_DATE,PN_ID_PERIODO_LECTIVO,1,1,1,1,PRO_CALCULA_PAGOS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)
FROM DUAL;

--INSERTAR EN ORDEN_PAGO_DETALLE
FOR REG IN CUR_PAGOS LOOP
IF REG.PRECIO<>0 THEN
INSERT INTO ORDEN_PAGO_DETALLE
SELECT NVL(MAX(ID_ORDEN_DETALLE),0)+1,REG.ID_TASA,LN_ID_ORDEN_PAGO,1,REG.PRECIO,REG.ID_PRECIO
FROM ORDEN_PAGO_DETALLE;
END IF;
END LOOP;
--INSERTAR EN RECIBO_PAGO
LN_CANT_RECIBOS:=get_parametro('NUMERO DE CUOTAS ORDEN PAGO',9);

WHILE LN_NUM_RECIBO <= LN_CANT_RECIBOS LOOP

LN_VALOR_CUOTA:=PRO_CALCULA_PAGOS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)*
(get_parametro('PORCENTAJE ORDEN PAGO CUOTA '||TO_CHAR(LN_NUM_RECIBO),9)/100);
LN_VALOR_CUOTA_ACUMULADO:=LN_VALOR_CUOTA_ACUMULADO + LN_VALOR_CUOTA;
IF LN_NUM_RECIBO=LN_CANT_RECIBOS-1 THEN
LN_VALOR_CUOTA:=PRO_CALCULA_PAGOS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)-
LN_VALOR_CUOTA_ACUMULADO;
END IF;

INSERT INTO RECIBO_PAGO


SELECT NVL(MAX(ID_RECIBO),0)+1 ,LN_NUM_RECIBO,LN_ID_ORDEN_PAGO,1,CURRENT_DATE,CURRENT_DATE +
LN_DIAS_VENCIMIENTO,
'PEN',LN_VALOR_CUOTA
FROM RECIBO_PAGO;
LN_NUM_RECIBO:=LN_NUM_RECIBO + 1;
LN_DIAS_VENCIMIENTO:=LN_DIAS_VENCIMIENTO + 30;
END LOOP;

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;*\
----------------------
--PR_GRABA_RUBROS_ALUMNO
--***********************************
PROCEDURE PR_GRABA_RUBROS_ALUMNO(PN_ID_ALUMNO INT,PN_ID_PERIODO_LECTIVO INT,LV_RESPUESTA OUT
VARCHAR2)
IS
LN_VEZ_TOMADA_UNICA INT;
--LN_COSTO NUMBER(10,2);
LN_ALUMNO_TIENE_RUBROS INT;
161

BEGIN
SELECT COUNT(*) INTO LN_ALUMNO_TIENE_RUBROS
FROM ORDEN_PAGO
WHERE ID_ESTADO=1 AND ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ID_ALUMNO=PN_ID_ALUMNO;

IF LN_ALUMNO_TIENE_RUBROS=0 THEN--PREGUNTA SI ALUMNO YA HA SIDO GRABADO SUS


--RUBROS EN EL PERIODO VIGENTE

--LO SIG. ES SI UN ALUMNO SOLO CURSA UN SOLO NIVEL


IF FUN_NIVELES_CURSA_ALUMNO(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)=1 AND
FUN_CUENTA_VECES_MATERIA_INS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)=1 THEN--SI TIENE DIFERENETES
VECES TOMADAS EJM
--1ERA VEZ,2DA VEZ(SERIAN 2 PORQUE EN LA INSCRIPCION HAY 2 VECES TOMADAS DIFERENTES

SELECT DISTINCT( B.VEZ_TOMADA) INTO LN_VEZ_TOMADA_UNICA--MUESTRA LA UNICA VEZ


FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO;

IF LN_VEZ_TOMADA_UNICA=1 AND
FUN_CUENTA_MATERIAS_INSCRITAS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)>=4 THEN
--ES DECIR SI SOLO SE VE TODAS MATERIAS POR PRIMERA VEZ Y 1 SOLO NIVEL
--Y SI VE 4 O MAS MATERIAS SE APLICA EL COSTO DE COMBO

PR_COSTO_UN_NIVEL_UNA_VEZ_(PN_ID_ALUMNO ,PN_ID_PERIODO_LECTIVO );

--lo sig si cursa un solo nivel y por priemra vez pero menos de 4 materra
ELSIF LN_VEZ_TOMADA_UNICA=1 AND
FUN_CUENTA_MATERIAS_INSCRITAS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)<4 THEN
PR_COSTO_UN_NIV_UN_VEZ_MM (PN_ID_ALUMNO ,PN_ID_PERIODO_LECTIVO );

END IF;
--LO SIG. ES PARA ALUNOS DE 1 SOLO NIVEL Y QUE TIENEN MAS DE 1 VEZ
ELSIF FUN_NIVELES_CURSA_ALUMNO(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)=1 AND
FUN_CUENTA_VECES_MATERIA_INS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)>1 THEN--SI TIENE DIFERENETES
VECES TOMADAS EJM

PR_COSTO_UN_NIVEL_VECES_DIF(PN_ID_ALUMNO ,PN_ID_PERIODO_LECTIVO );
--LO SIG. ES PARA ALUNOS DE MAS DE 1 NIVEL /SEMESTRE
ELSIF FUN_NIVELES_CURSA_ALUMNO(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)>1 THEN
PR_COSTO_NIVEL_DIF(PN_ID_ALUMNO ,PN_ID_PERIODO_LECTIVO );
END IF;

LV_RESPUESTA:='SI SE GRABÓ LOS RUBROS DEL ALUMNO';


ELSE
LV_RESPUESTA:='NO SE PUEDE GRABAR,EL ALUMNO YA TIENE REGISTRADO RUBROS';
END IF;

EXCEPTION
WHEN OTHERS THEN
LV_RESPUESTA:=SQLERRM;
END;
*/

--PR_GRABA_RUBROS_ALUMNO ---ES LA VERSION FINAL


--***********************************
--MODIFICADO 17 MAYO 09
PROCEDURE PR_GRABA_RUBROS_ALUMNO(PN_ID_ALUMNO INT,PN_ID_PERIODO_LECTIVO INT,LV_RESPUESTA OUT
VARCHAR2,PV_USUARIO VARCHAR2)
IS
LN_VEZ_TOMADA_UNICA INT;
--LN_COSTO NUMBER(10,2);
LN_ALUMNO_TIENE_RUBROS INT;
LN_CUENTA_VECES INT;
LV_RESP VARCHAR2(1000);--PARA RESPUESTA DE PROCEDIMIENTO DE
--PR_GRAB_COSTO_CON_EXO

BEGIN
----------------------
SELECT COUNT(DISTINCT( B.VEZ_TOMADA)) INTO LN_CUENTA_VECES--ESTO ES PARA CONTAR
--CUANTAS VECES VE LAS MATERIAS DE SU INSCRIPCION
162

FROM INSCRIPCION A,INSCRIPCION_DETALLE B


WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO;
IF LN_CUENTA_VECES=1 THEN
SELECT DISTINCT( B.VEZ_TOMADA) INTO LN_VEZ_TOMADA_UNICA--MUESTRA LA UNICA VEZ
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO;
END IF;
--------------------
SELECT COUNT(*) INTO LN_ALUMNO_TIENE_RUBROS
FROM ORDEN_PAGO
WHERE ID_ESTADO=1 AND ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ID_ALUMNO=PN_ID_ALUMNO;

IF LN_ALUMNO_TIENE_RUBROS=0 THEN--PREGUNTA SI ALUMNO YA HA SIDO GRABADO SUS


--RUBROS EN EL PERIODO VIGENTE

--LO SIG. ES SI UN ALUMNO SOLO CURSA MATERIAS POR UNA VEZ


IF FUN_CUENTA_VECES_MATERIA_INS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)=1 AND LN_VEZ_TOMADA_UNICA=1
THEN--SI TIENE DIFERENETES VECES TOMADAS EJM
--1ERA VEZ,2DA VEZ(SERIAN 2 PORQUE EN LA INSCRIPCION HAY 2 VECES TOMADAS DIFERENTES

PR_GRAB_COSTO_CON_EXO(PN_ID_ALUMNO ,PN_ID_PERIODO_LECTIVO ,LV_RESP,PV_USUARIO);

ELSE--ESTO ES PARA GRABAR A LOS ALUMNOS SIN EXONERACION


PR_GRAB_COSTO_SIN_EXO(PN_ID_ALUMNO ,PN_ID_PERIODO_LECTIVO ,LV_RESP);
END IF;
IF LV_RESP='SI'THEN
LV_RESPUESTA:='SI SE GRABÓ LOS RUBROS DEL ALUMNO';
ELSE
LV_RESPUESTA:=LV_RESP;
END IF;
ELSE
LV_RESPUESTA:='NO SE PUEDE GRABAR,EL ALUMNO YA TIENE REGISTRADO RUBROS';
END IF;

EXCEPTION
WHEN OTHERS THEN
LV_RESPUESTA:=SQLERRM;
END;

FUNCTION FU_DEUDAS_PENDIENTES_ANT(PN_ID_ALUMNO INT,PN_ID_PERIODO_LECTIVO INT)RETURN BOOLEAN


IS
LN_CANTIDAD_CUOTAS_PEN INT;
BEGIN
/* SELECT COUNT(*)INTO LN_CANTIDAD_CUOTAS_PEN
FROM RECIBO_PAGO A,ORDEN_PAGO B
WHERE B.ID_ALUMNO=PN_ID_ALUMNO AND A.ID_ORDEN_PAGO = B.ID_ORDEN_PAGO
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1 AND B.ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO
AND A.CONDICION='PEN';*/
--MODIFICADO 13 MAYO DEL 2009
--ULTIMA MODIFICACION 7 DE JUNIO DEL 2009 COMENTARIADO DEBIDO
--===================================
--A QUE NO SE TIENE DETALLE DE ORDEN DE PAGOS
--CONSECUENTEMENTE NO SE PUEDE HACER RELACION ENTRE LAS
--TABLAS: ORDEN Y ORDEN_DETALLE
--=======================================00
/*
SELECT COUNT(*)INTO LN_CANTIDAD_CUOTAS_PEN
FROM ORDEN_PAGO_DETALLE A,ORDEN_PAGO B
WHERE B.ID_ALUMNO=PN_ID_ALUMNO AND A.ID_ORDEN_PAGO = B.ID_ORDEN_PAGO
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1 AND B.ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO
AND B.CONDICION='PEN';
*/
--ESTO FUE AÑADIDO DOMINGO 7/06/2009 A LAS 10:53 AM.
SELECT COUNT(*)INTO LN_CANTIDAD_CUOTAS_PEN
FROM ORDEN_PAGO B
WHERE B.ID_ALUMNO=PN_ID_ALUMNO
AND B.ID_ESTADO=1 AND NVL(B.ID_PERIODO_LECTIVO,0)<>PN_ID_PERIODO_LECTIVO
AND UPPER(B.CONDICION)='PEN';
--
163

IF LN_CANTIDAD_CUOTAS_PEN>0 THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END ;
-----------------FU_CONECTAR
/*FUNCTION FU_CONECTAR (PV_USUARIO VARCHAR2,CLAVE VARCHAR2)RETURN VARCHAR2
IS
LN_EXISTE_USUARIO INT;
LV_TIPO_USUARIO VARCHAR2(100);
BEGIN
SELECT COUNT(*)INTO LN_EXISTE_USUARIO
FROM USUARIO
WHERE upper(LOGIN)=upper(PV_USUARIO) AND PASSWORD=CLAVE
AND ID_ESTADO=1;

IF LN_EXISTE_USUARIO>0 THEN
IF CLAVE IS NOT NULL THEN
SELECT A.TIPO_USUARIO INTO LV_TIPO_USUARIO
FROM USUARIO A,PERSONA P
WHERE upper(A.LOGIN)=upper(PV_USUARIO)
AND A.ID_PERSONA=P.ID_PERSONA
AND A.ID_ESTADO=1 AND A.PASSWORD=CLAVE;
IF LV_TIPO_USUARIO IS NOT NULL THEN
RETURN LV_TIPO_USUARIO;
ELSE
RETURN 'NO LA CONSTRASEÑA NO ES CORRECTA';
END IF;
ELSE

RETURN 'NO DEBE INTRODUCIR LA CONTRASEÑA ANTES DE CONECTARSE';


END IF;

ELSE
RETURN 'NO USUARIO NO EXISTE/CONTRASEÑA INCORRECTA';

END IF;

EXCEPTION
WHEN OTHERS THEN
RETURN 'NO ' ||SQLERRM;
END;*/
---PARA SACAR LOS DATOS DE UNA PERSONA CONECTADA
/*FUNCTION GET_DATOS_CONECTADO(PV_USUARIO VARCHAR2,PV_CLAVE VARCHAR2)RETURN REG_CONECTADO
IS
LR_PERS_CONECTADA REG_CONECTADO;
BEGIN
IF FU_CONECTAR(PV_USUARIO,PV_CLAVE)='ALUMNO' THEN
SELECT A.TIPO_USUARIO,AL.ID_ALUMNO,GET_NOMBRE_ALUMNO(AL.ID_ALUMNO),P.CEDULA,AL.CODIGO_ESTUDIANTIL
INTO LR_PERS_CONECTADA --LV_TIPO_USUARIO
FROM USUARIO A,PERSONA P,ALUMNO AL
WHERE upper(A.LOGIN)=upper(PV_USUARIO)
AND A.ID_PERSONA=P.ID_PERSONA
AND AL.ID_PERSONA=P.ID_PERSONA
AND A.ID_ESTADO=1 AND A.PASSWORD=PV_CLAVE
AND ROWNUM=1;
elsif FU_CONECTAR(PV_USUARIO,PV_CLAVE)='INS-ADMIN' THEN
SELECT U.TIPO_USUARIO,E.ID_EMPLEADO,P.APELLIDO_PATERNO|| ' ' || P.APELLIDO_MATERNO || ' ' || P.PRIMER_NOMBRE
|| ' ' || P.SEGUNDO_NOMBRE EMPLEADO,P.CEDULA,'O' INTO LR_PERS_CONECTADA
FROM PERSONA P,USUARIO U,EMPLEADO E
WHERE P.ID_ESTADO=1 AND P.ID_PERSONA=U.ID_PERSONA
AND E.ID_PERSONA=P.ID_PERSONA AND E.ID_ESTADO=1
AND U.ID_ESTADO=1 AND upper(U.LOGIN)=upper(PV_USUARIO)
AND U.PASSWORD=PV_CLAVE
AND ROWNUM=1;

END IF;
RETURN LR_PERS_CONECTADA;
EXCEPTION
WHEN OTHERS THEN
164

DBMS_OUTPUT.PUT_LINE(SQLERRM);

END;*/

-------------GET_VALOR_TASA
FUNCTION GET_VALOR_TASA(PN_ID_TASA INT,PN_ID_ALUMNO INT)RETURN NUMBER
IS
LN_PRECIO NUMBER(10,2);
BEGIN

SELECT PRECIO INTO LN_PRECIO


FROM TASA_PRECIO
WHERE ID_TASA=PN_ID_TASA AND ID_ESTADO=1
AND ID_ALUMNO_CATEGORIA=(SELECT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE ID_ALUMNO=PN_ID_ALUMNO)
;
RETURN NVL(LN_PRECIO,0);
EXCEPTION
WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM);
END GET_VALOR_TASA;

---EXTRAER EL NUMERO DE CUOTAS EN EL PERIODO LECTIVO VIGENTE


FUNCTION GET_NUMERO_CUOTAS(PN_ID_PERIODO_LECTIVO INT)RETURN INT
IS
LN_NUMERO_CUOTAS INT;
BEGIN
SELECT NVL(MAX(N_CUOTA),0) INTO LN_NUMERO_CUOTAS
FROM TASA_CUOTA
WHERE ID_ESTADO=1 AND
ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO;

RETURN LN_NUMERO_CUOTAS;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);

END;
-----------------------------------
-------------------------esto es paralas funciones y procedimientos
-----externos
-----ES_TASA_DE_CUOTA
FUNCTION ES_TASA_DE_CUOTA(PN_ID_TASA INT,PN_ID_PERIODO_LECTIVO INT,PN_ID_CUOTA INT)RETURN BOOLEAN
IS
LN_ES_TASA_DE_CUOTA INT;
BEGIN
SELECT COUNT(*) INTO LN_ES_TASA_DE_CUOTA
FROM TASA_CUOTA
WHERE ID_TASA=PN_ID_TASA AND ID_ESTADO=1 AND ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND N_CUOTA=PN_ID_CUOTA;

IF LN_ES_TASA_DE_CUOTA > 0 THEN


RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
--get_nivel_alumno
/* function get_nivel_alumno(pn_id_alumno number)return number
is
ln_nivel_aprobado number;
begin
select nvl(max(b.id_semestre),0)into ln_nivel_aprobado
from historial_notas a, malla_detalle b
where a.id_materia=b.id_materia and a.promedio>=7
and a.id_alumno=pn_id_alumno
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1;

return ln_nivel_aprobado;

end;*/
--GET_NIVEL ALUMNO MODIFICADO EL 10 DE MAYO DEL 2009
function get_nivel_alumno(pn_id_alumno number,PN_ID_PERIODO_LECTIVO number)return number
is
ln_nivel_aprobado number;
165

begin
SELECT MAX(NIVEL)NIVEL_MAXIMO into ln_nivel_aprobado
FROM
(
select nvl(max(b.id_semestre),0) NIVEL--into ln_nivel_aprobado
from historial_notas a, malla_detalle b
where a.id_materia=b.id_materia and (a.promedio>=7 OR A.EX_GRACIA>=7)
and a.id_alumno=pn_id_alumno
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
UNION
select nvl(max(b.id_semestre),0)NIVEL--into ln_nivel_aprobado
from notas a, malla_detalle b
where a.id_materia=b.id_materia and (a.nota_promedio>=7 OR A.NOTA_GRACIA>=7)
and a.id_alumno=pn_id_alumno
AND A.ID_ESTADO=14 AND B.ID_ESTADO=1
--AUMENTADO EL 28/05/2009 PARA QUE NO SE MUESTREN LAS MATERIAS VISTAS PERIODO_LECTIVO VIGENTE COMO
--PREREQUISITOS
AND ((a.ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO AND TRIM(a.TIPO_NOTA)='SEM')OR TRIM(a.TIPO_NOTA)
IN('HOM','GRA'))
);

return ln_nivel_aprobado;

end;
---GET_NOMBRE_MATERIA
/*CREATE OR REPLACE FUNCTION GET_NOMBRE_MATERIA(PN_ID_MATERIA NUMBER)RETURN VARCHAR2 IS
NOMBRE_MATERIA VARCHAR2(100);
BEGIN
SELECT DESCRIPCION INTO NOMBRE_MATERIA FROM MATERIA
WHERE ID_MATERIA=PN_ID_MATERIA;
RETURN NOMBRE_MATERIA;

END;
*/
/*HASTA 10 MAYO 2009
FUNCTION GET_NUMERO_CREDITOS(PN_ID_ALUMNO NUMBER,PN_ID_PERIODO_LECTIVO NUMBER)RETURN NUMBER
IS
LN_NUMERO_CREDITOS NUMBER(3);
BEGIN

select NVL(SUM(CREDITOS),0)INTO LN_NUMERO_CREDITOS


FROM MATERIA
WHERE ID_MATERIA IN(
SELECT Y.ID_MATERIA
from historial_notas y
where y.ID_estado=1 and y.id_alumno=PN_ID_ALUMNO and(y.promedio>=7 or y.ex_gracia>=7)
and y.id_materia in(select id_materia from periodo_materia where id_estado=1 and
id_periodo_lectivo=PN_ID_PERIODO_LECTIVO)

union
select id_materia
from materia_equivalente
where id_estado=1 and id_materia_equivale in(
select y.id_materia
from historial_notas y
where y.id_materia not in(select id_materia from periodo_materia where id_estado=1
and id_periodo_lectivo=PN_ID_PERIODO_LECTIVO)
and y.ID_estado=1 and y.id_alumno=PN_ID_ALUMNO and(y.promedio>=7 or y.ex_gracia>=7)
)
);
RETURN LN_NUMERO_CREDITOS;
END;
*/

--GET_NUMERO_CREDITOS MODIFICADO 10 DE MAYO DEL 2009


FUNCTION GET_NUMERO_CREDITOS(PN_ID_ALUMNO NUMBER,PN_ID_PERIODO_LECTIVO NUMBER)RETURN NUMBER
IS
LN_NUMERO_CREDITOS NUMBER(3);
BEGIN

select NVL(SUM(CREDITOS),0)INTO LN_NUMERO_CREDITOS


FROM MATERIA
WHERE ID_MATERIA IN(
SELECT Y.ID_MATERIA
from historial_notas y
where y.ID_estado=1 and y.id_alumno=PN_ID_ALUMNO and(y.promedio>=7 or y.ex_gracia>=7)
166

and y.id_materia in(select id_materia from periodo_materia where id_estado=1 and


id_periodo_lectivo=PN_ID_PERIODO_LECTIVO)

union
select id_materia
from materia_equivalente
where id_estado=1 and id_materia_equivale in(
select y.id_materia
from historial_notas y
where y.id_materia not in(select id_materia from periodo_materia where id_estado=1
and id_periodo_lectivo=PN_ID_PERIODO_LECTIVO)
and y.ID_estado=1 and y.id_alumno=PN_ID_ALUMNO and(y.promedio>=7 or y.ex_gracia>=7)
)
)
OR
ID_MATERIA IN(
SELECT Y.ID_MATERIA
from notas y
where y.ID_estado=14 and y.id_alumno=PN_ID_ALUMNO and(y.NOTA_promedio>=7 or y.NOTA_gracia>=7)
and y.id_materia in(select id_materia from periodo_materia where id_estado=1 and
id_periodo_lectivo=PN_ID_PERIODO_LECTIVO)
--AUMENTADO EL 28/05/2009 PARA QUE NO SE MUESTREN LAS MATERIAS VISTAS PERIODO_LECTIVO VIGENTE
COMO
--PREREQUISITOS
--modificado el 14 de junio de 2009 6:57am
AND ((y.ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO AND TRIM(y.TIPO_NOTA)='SEM')OR
TRIM(y.TIPO_NOTA) IN('HOM','GRA'))

union
select id_materia
from materia_equivalente
where id_estado=1 and id_materia_equivale in(
select y.id_materia
from notas y
where y.id_materia not in(select id_materia from periodo_materia where id_estado=1
and id_periodo_lectivo=PN_ID_PERIODO_LECTIVO)
and y.ID_estado=14 and y.id_alumno=PN_ID_ALUMNO and(y.NOTA_promedio>=7 or y.NOTA_gracia>=7)
--AUMENTADO EL 28/05/2009 PARA QUE NO SE MUESTREN LAS MATERIAS VISTAS PERIODO_LECTIVO
VIGENTE COMO
--PREREQUISITOS
--ult modificacion 14 Junio 2009 6:58 am
AND ((y.ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO AND TRIM(y.TIPO_NOTA)='SEM')OR
TRIM(y.TIPO_NOTA) IN('HOM','GRA'))
)
)
;
RETURN LN_NUMERO_CREDITOS;
END;
--FU_MATERIAS_APRO_SEMESTRE PARA EXTRAER LA CANTIDAD DE MATERIAS DE UN NIVEL
function FU_MATERIAS_APRO_SEMESTRE(PN_ID_ALUMNO number,PN_SEMESTRE NUMBER,PN_ID_PERIODO_LECTIVO
NUMBER)return number
is
LN_CANT_MATERIA number;
begin
SELECT COUNT(ID_MATERIA)INTO LN_CANT_MATERIA
FROM
(
select A.ID_MATERIA--into ln_nivel_aprobado
from historial_notas a, malla_detalle b
where a.id_materia=b.id_materia and (a.promedio>=7 OR A.EX_GRACIA>=7)
and a.id_alumno=PN_ID_ALUMNO
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1 AND B.ID_SEMESTRE=PN_SEMESTRE
AND A.ID_MATERIA IN (SELECT ID_MATERIA FROM PERIODO_MATERIA WHERE ID_ESTADO=1)
UNION
select A.ID_MATERIA--into ln_nivel_aprobado
from notas a, malla_detalle b
where a.id_materia=b.id_materia and (a.nota_promedio>=7 OR A.NOTA_GRACIA>=7)
and a.id_alumno=PN_ID_ALUMNO
AND A.ID_ESTADO=14 AND B.ID_ESTADO=1 AND B.ID_SEMESTRE=PN_SEMESTRE
AND A.ID_MATERIA IN (SELECT ID_MATERIA FROM PERIODO_MATERIA WHERE ID_ESTADO=1)
--AUMENTADO EL 28/05/2009 PARA QUE NO SE MUESTREN LAS MATERIAS VISTAS PERIODO_LECTIVO VIGENTE COMO
--PREREQUISITOS
--ult modificacion 14 Junio 09 6:59 am
AND ((a.ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO AND TRIM(a.TIPO_NOTA)='SEM')OR TRIM(a.TIPO_NOTA)
IN('HOM','GRA'))
UNION
167

SELECT ID_MATERIA
FROM MATERIA_EQUIVALENTE
WHERE ID_MATERIA_EQUIVALE IN(select A.ID_MATERIA--into ln_nivel_aprobado
from notas a, malla_detalle b
where a.id_materia=b.id_materia and (a.nota_promedio>=7 OR A.NOTA_GRACIA>=7)
and a.id_alumno=PN_ID_ALUMNO
AND A.ID_ESTADO=14 AND B.ID_ESTADO=1 AND B.ID_SEMESTRE=PN_SEMESTRE
--AUMENTADO EL 28/05/2009 PARA QUE NO SE MUESTREN LAS MATERIAS VISTAS PERIODO_LECTIVO
VIGENTE COMO
--PREREQUISITOS
AND ((a.ID_PERIODO_LECTIVO<>PN_ID_PERIODO_LECTIVO AND TRIM(a.TIPO_NOTA)='SEM')OR
TRIM(a.TIPO_NOTA) IN('HOM','GRA'))
)
AND ID_ESTADO=1

UNION

SELECT ID_MATERIA
FROM MATERIA_EQUIVALENTE
WHERE ID_MATERIA_EQUIVALE IN(select A.ID_MATERIA--into ln_nivel_aprobado
from HISTORIAL_NOTAS a, malla_detalle b
where a.id_materia=b.id_materia and (a.promedio>=7 OR A.EX_GRACIA>=7)
and a.id_alumno=PN_ID_ALUMNO
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1 AND B.ID_SEMESTRE=PN_SEMESTRE
)
AND ID_ESTADO=1

);

return LN_CANT_MATERIA;

end;

--GET_NUMERO_RECIBO
FUNCTION GET_NUMERO_RECIBO(PN_ID_PERIODO_LECTIVO INT)RETURN NUMBER
IS
LN_NUMERO_RECIBO NUMBER(5);
BEGIN
SELECT NVL(MAX(NUM_RECIBO),0)+1 INTO LN_NUMERO_RECIBO
FROM ORDEN_PAGO
WHERE ID_ESTADO=1 AND ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO;

RETURN LN_NUMERO_RECIBO;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
--GET_PARAMETRO
/*FUNCTION GET_PARAMETRO(PV_DESCRIPCION VARCHAR2,PN_ID_MODULO INT)RETURN NUMBER
IS
LN_VALOR NUMBER(5);
BEGIN
SELECT VALOR INTO LN_VALOR
FROM PARAMETROS
WHERE ID_ESTADO=1 AND UPPER(DESCRIPCION)=UPPER(PV_DESCRIPCION)
AND MODULO=PN_ID_MODULO;

RETURN NVL(LN_VALOR,0);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;*/

--GET_PORCENTAJE
FUNCTION GET_PORCENTAJE(PN_ID_TASA INT,PN_ID_PERIODO_LECTIVO INT,PN_ID_CUOTA INT)RETURN NUMBER
IS
LN_ES_TASA_DE_CUOTA INT;
LN_PORCENTAJE NUMBER(10,2);
BEGIN
SELECT COUNT(*) INTO LN_ES_TASA_DE_CUOTA
FROM TASA_CUOTA
WHERE ID_TASA=PN_ID_TASA AND ID_ESTADO=1 AND ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND N_CUOTA=PN_ID_CUOTA;

IF LN_ES_TASA_DE_CUOTA > 0 THEN


168

SELECT NVL(PORC_CUOTA,0) INTO LN_PORCENTAJE


FROM TASA_CUOTA
WHERE ID_TASA=PN_ID_TASA AND ID_ESTADO=1 AND ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND N_CUOTA=PN_ID_CUOTA;
RETURN LN_PORCENTAJE;
ELSE
RETURN 0;
END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
--GET_PRECIO
FUNCTION GET_PRECIO(PN_ID_PRECIO INT)RETURN NUMBER
IS
LN_PRECIO NUMBER(10,2);
BEGIN
SELECT NVL(PRECIO,0) INTO LN_PRECIO
FROM TASA_PRECIO
WHERE ID_PRECIO=PN_ID_PRECIO;

RETURN LN_PRECIO;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;

--GET_TOTAL_CUOTA
FUNCTION GET_TOTAL_CUOTA(PN_ID_PERIODO_LECTIVO INT,PN_ID_ALUMNO INT,PN_CUOTA
INT,PN_ID_TIPO_MOVIMIENTO INT)RETURN NUMBER
IS
LN_VALOR_CUOTA NUMBER(10,2);
LN_VEZ_TOMADA_UNICA INT;
LN_CUENTA_VECES INT;
BEGIN
SELECT COUNT(DISTINCT( B.VEZ_TOMADA)) INTO LN_CUENTA_VECES--MUESTRA LA UNICA VEZ
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO;

IF LN_CUENTA_VECES=1 THEN--SI TIENE UNA VEZ


SELECT DISTINCT( B.VEZ_TOMADA) INTO LN_VEZ_TOMADA_UNICA--MUESTRA LA UNICA VEZ
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO;

END IF;

--------------------
-------------------
IF FUN_CUENTA_VECES_MATERIA_INS(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)=1 AND LN_VEZ_TOMADA_UNICA=1
THEN--SI TIENE DIFERENETES VECES TOMADAS EJM
--1ERA VEZ,2DA VEZ(SERIAN 2 PORQUE EN LA INSCRIPCION HAY 2 VECES TOMADAS DIFERENTES

--COSTO DE AUTOFINANCIAMIENTO
SELECT NVL(SUM((TABLA_FINAL.PRECIO * TC.PORC_CUOTA)/100),0)INTO LN_VALOR_CUOTA
FROM TASA_CUOTA TC,(
--RUBROS OBLIGATORIOS

SELECT COUNT(TABLA.ID_TASA)CANTIDAD,TABLA.ID_TASA,TABLA.ID_PRECIO,SUM(TABLA.PRECIO)PRECIO
FROM
(
SELECT B.ID_TASA,B.ID_PRECIO,PRECIO
FROM TASA A,TASA_PRECIO B,ALUMNO_CATEGORIA C
WHERE A.ID_TASA=B.ID_TASA
AND UPPER(A.DESCRIPCION) =UPPER('AUTOFINANCIAMIENTO')
AND B.ID_ALUMNO_CATEGORIA=C.ID_ALUMNO_CATEGORIA AND C.ID_ESTADO=1
AND (B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
OR UPPER(C.DESCRIPCION) LIKE '%TODOS%')
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1 AND B.ID_SEMESTRE=(SELECT NVL(MAX(PD.SEMESTRE),0) FROM
169

INSCRIPCION I,INSCRIPCION_DETALLE ID,PARALELO P,PARALELO_DESCRIPCION PD


WHERE P.DESCRIPCION=PD.DESCRIPCION AND I.ID_INSCRIPCION=ID.ID_INSCRIPCION
AND ID.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND ID.ID_PARALELO=P.ID_PARALELO AND
I.ID_ALUMNO=PN_ID_ALUMNO )
AND A.ID_TIPO_MOVIMIENTO=1--1 ES INGRESO

UNION ALL
------- LO SIGUIENTE ES APLICABLE A LOS ALUMNOS QUE VEAN LA MATERIAS POR UNA SOLA VEZ
SELECT B.ID_TASA,B.ID_PRECIO,PRECIO
FROM TASA A,TASA_PRECIO B,ALUMNO_CATEGORIA C
WHERE A.ID_TASA=B.ID_TASA
AND UPPER(A.DESCRIPCION) ='EXONERACION DE AUTOFINANCIAMIENTO'
AND B.ID_ALUMNO_CATEGORIA=C.ID_ALUMNO_CATEGORIA AND C.ID_ESTADO=1
AND (B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
OR UPPER(C.DESCRIPCION) LIKE '%TODOS%')
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1 AND B.ID_SEMESTRE=(SELECT NVL(MAX(PD.SEMESTRE),0) FROM
INSCRIPCION I,INSCRIPCION_DETALLE ID,PARALELO P,PARALELO_DESCRIPCION PD
WHERE P.DESCRIPCION=PD.DESCRIPCION AND I.ID_INSCRIPCION=ID.ID_INSCRIPCION
AND ID.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND ID.ID_PARALELO=P.ID_PARALELO AND
I.ID_ALUMNO=PN_ID_ALUMNO )
AND A.ID_TIPO_MOVIMIENTO=2--2 ES EGRESO
-----------
UNION ALL
--LO SIG DEBEN PAGAR TODOS AUNQUE TENGAN BENEFICIOS DE EXONERACION
SELECT B.ID_TASA,B.ID_PRECIO,PRECIO --AGREGAR LOS RUBROS OBLIGATORIOS--EN ESTE CASO ES INTERNET
FROM TASA A,TASA_PRECIO B,ALUMNO_CATEGORIA AC
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.OBLIGATORIO='SI'

AND B.ID_ALUMNO_CATEGORIA=AC.ID_ALUMNO_CATEGORIA AND AC.ID_ESTADO=1


AND (B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)OR
UPPER(AC.DESCRIPCION) LIKE '%TODOS%')

UNION ALL
---AGREGAR EL COSTO DE INGLES SI TIENE

SELECT B.ID_TASA,B.ID_PRECIO,( SELECT DISTINCT SUBSTR(B.OBSERVACION,INSTR(B.OBSERVACION,'-',1,1)+1,1) *


B.PRECIO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ROWNUM=1)SUBTOTAL
FROM TASA A,TASA_PRECIO B,ALUMNO_CATEGORIA AC
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND UPPER(TRIM(A.DESCRIPCION)) =TRIM('MODULO DE INGLES')
AND AC.ID_ALUMNO_CATEGORIA=B.ID_ALUMNO_CATEGORIA AND AC.ID_ESTADO=1
AND (B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)OR
UPPER(AC.DESCRIPCION) LIKE '%TODOS%')

UNION ALL

--ESTO ES EN CASO DE QUE SEA ALUMNO EXONERADO DEBERA QUITARSELE EL VALOR DE INGLES SI TIENE
SELECT B.ID_TASA,B.ID_PRECIO,( SELECT DISTINCT SUBSTR(B.OBSERVACION,INSTR(B.OBSERVACION,'-',1,1)+1,1) *
B.PRECIO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ROWNUM=1)SUBTOTAL
FROM TASA A,TASA_PRECIO B,ALUMNO_CATEGORIA AC
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND UPPER(TRIM(A.DESCRIPCION)) =UPPER(TRIM('EXONERACION MODULO DE INGLES'))
AND AC.ID_ALUMNO_CATEGORIA=B.ID_ALUMNO_CATEGORIA AND AC.ID_ESTADO=1
AND (B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)OR
UPPER( AC.DESCRIPCION) LIKE '%TODOS%')
170

UNION ALL
---------------------------------
--lo sif es para el carnet
SELECT B.ID_TASA,B.ID_PRECIO,( SELECT DISTINCT SUBSTR(B.OBSERVACION,INSTR(B.OBSERVACION,'-',1,2)+1,1) *
B.PRECIO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ROWNUM=1)SUBTOTAL
FROM TASA A,TASA_PRECIO B,ALUMNO_CATEGORIA AC
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND UPPER(TRIM(A.DESCRIPCION)) =TRIM('CARNET')
AND AC.ID_ALUMNO_CATEGORIA=B.ID_ALUMNO_CATEGORIA AND AC.ID_ESTADO=1
AND (B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)OR
UPPER(AC.DESCRIPCION) LIKE '%TODOS%')

UNION ALL
---PARA EXPONERAR EL CARNET SU COSTO
SELECT B.ID_TASA,B.ID_PRECIO,( SELECT DISTINCT SUBSTR(B.OBSERVACION,INSTR(B.OBSERVACION,'-',1,2)+1,1) *
B.PRECIO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ROWNUM=1)SUBTOTAL
FROM TASA A,TASA_PRECIO B,ALUMNO_CATEGORIA AC
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND UPPER(TRIM(A.DESCRIPCION)) =TRIM('EXONERACION DE CARNET')
AND AC.ID_ALUMNO_CATEGORIA=B.ID_ALUMNO_CATEGORIA AND AC.ID_ESTADO=1
AND (B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)OR
UPPER(AC.DESCRIPCION) LIKE '%TODOS%')

)TABLA
GROUP BY TABLA.ID_TASA,TABLA.ID_PRECIO
)TABLA_FINAL,TASA T
WHERE TC.ID_ESTADO=1 AND TC.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND N_CUOTA=PN_CUOTA
AND TC.ID_TASA=TABLA_FINAL.ID_TASA AND T.ID_TASA=TABLA_FINAL.ID_TASA
AND TC.ID_TASA=T.ID_TASA AND T.ID_TIPO_MOVIMIENTO=PN_ID_TIPO_MOVIMIENTO;
-------------------------
------------------
ELSE
SELECT NVL(SUM((TABLA_FINAL.PRECIO * TC.PORC_CUOTA)/100),0)INTO LN_VALOR_CUOTA
FROM TASA_CUOTA TC,(
--RUBROS OBLIGATORIOS

SELECT COUNT(TABLA.ID_TASA)CANTIDAD,TABLA.ID_TASA,TABLA.ID_PRECIO,SUM(TABLA.PRECIO)PRECIO
FROM
(
SELECT B.ID_TASA,B.ID_PRECIO,PRECIO --AGREGAR LOS RUBROS OBLIGATORIOS--EN ESTE CASO ES INTERNET
FROM TASA A,TASA_PRECIO B,ALUMNO_CATEGORIA AC
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND UPPER(A.OBLIGATORIO)='SI'

AND B.ID_ALUMNO_CATEGORIA=AC.ID_ALUMNO_CATEGORIA AND AC.ID_ESTADO=1


AND (B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)OR
UPPER(AC.DESCRIPCION) LIKE '%TODOS%')
)TABLA
GROUP BY TABLA.ID_TASA,TABLA.ID_PRECIO

---LO SIG ES PRA LOS PAGOS DE EL AUTOFINANCIAMIENTO


UNION ALL
--AUTOFINANCIAMIENTO
SELECT COUNT(TABLA.ID_TASA),TABLA.ID_TASA,TABLA.ID_PRECIO,SUM(TABLA.PRECIO)PRECIO
FROM
(
SELECT B.ID_TASA,B.ID_PRECIO,PRECIO
FROM TASA A,TASA_PRECIO B,ALUMNO_CATEGORIA C
WHERE A.ID_TASA=B.ID_TASA
171

AND UPPER(A.DESCRIPCION) =UPPER('AUTOFINANCIAMIENTO')


AND B.ID_ALUMNO_CATEGORIA=C.ID_ALUMNO_CATEGORIA AND C.ID_ESTADO=1
AND (B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
OR UPPER(C.DESCRIPCION) LIKE '%TODOS%')
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1 AND B.ID_SEMESTRE=(SELECT NVL(MAX(PD.SEMESTRE),0) FROM
INSCRIPCION I,INSCRIPCION_DETALLE ID,PARALELO P,PARALELO_DESCRIPCION PD
WHERE P.DESCRIPCION=PD.DESCRIPCION AND I.ID_INSCRIPCION=ID.ID_INSCRIPCION
AND ID.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND ID.ID_PARALELO=P.ID_PARALELO AND
I.ID_ALUMNO=PN_ID_ALUMNO )
AND A.ID_TIPO_MOVIMIENTO=1--1 ES INGRESO
)TABLA
GROUP BY TABLA.ID_TASA,TABLA.ID_PRECIO

UNION ALL
--MODULO DE INGLES
SELECT COUNT(TABLA.ID_TASA)CANTIDAD, TABLA.ID_TASA,TABLA.ID_PRECIO,SUM(TABLA.SUBTOTAL )PRECIO
FROM
(
SELECT B.ID_TASA,B.ID_PRECIO,( SELECT DISTINCT SUBSTR(B.OBSERVACION,INSTR(B.OBSERVACION,'-',1,1)+1,1) *
B.PRECIO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ROWNUM=1)SUBTOTAL
FROM TASA A,TASA_PRECIO B,ALUMNO_CATEGORIA AC
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND UPPER(TRIM(A.DESCRIPCION)) =UPPER(TRIM('MODULO DE INGLES'))
AND AC.ID_ALUMNO_CATEGORIA=B.ID_ALUMNO_CATEGORIA AND AC.ID_ESTADO=1
AND (B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)OR
UPPER(AC.DESCRIPCION) LIKE '%TODOS%')
)TABLA
GROUP BY TABLA.ID_TASA,TABLA.ID_PRECIO
UNION ALL
--CARNET
SELECT COUNT(TABLA.ID_TASA)CANTIDAD,TABLA.ID_TASA,TABLA.ID_PRECIO,SUM(SUBTOTAL)PRECIO
FROM
(
SELECT B.ID_TASA,B.ID_PRECIO,( SELECT DISTINCT SUBSTR(B.OBSERVACION,INSTR(B.OBSERVACION,'-',1,2)+1,1) *
B.PRECIO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ROWNUM=1)SUBTOTAL
FROM TASA A,TASA_PRECIO B,ALUMNO_CATEGORIA AC
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND UPPER(TRIM(A.DESCRIPCION)) =UPPER(TRIM('CARNET'))
AND AC.ID_ALUMNO_CATEGORIA=B.ID_ALUMNO_CATEGORIA AND AC.ID_ESTADO=1
AND (B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)OR
UPPER(AC.DESCRIPCION) LIKE '%TODOS%')
)TABLA
GROUP BY TABLA.ID_TASA,TABLA.ID_PRECIO

UNION ALL
--MATRICULA POR CADA MATERIA 1ERA VEZ'
SELECT COUNT(TABLA.ID_TASA)CANTIDAD,TABLA.ID_TASA,TABLA.ID_PRECIO,SUM(TABLA.PRECIO)PRECIO
FROM
(
SELECT (SELECT B.ID_TASA--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND UPPER(trim(A.DESCRIPCION))=UPPER('MATRICULA POR CADA MATERIA 1ERA VEZ')
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1)ID_TASA,--PARA ID_TASA
(SELECT B.ID_PRECIO--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND UPPER(trim(A.DESCRIPCION))=UPPER('MATRICULA POR CADA MATERIA 1ERA VEZ')
172

AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE


ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1)ID_PRECIO,--PARA ID_PRECIO
(SELECT PRECIO--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND UPPER(trim(A.DESCRIPCION))=UPPER('MATRICULA POR CADA MATERIA 1ERA VEZ')
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
)PRECIO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND B.VEZ_TOMADA>1
)TABLA
GROUP BY TABLA.ID_TASA,TABLA.ID_PRECIO

UNION ALL
--RECARGO POR REPETICION SEGUNDA VEZ
SELECT COUNT(TABLA.ID_TASA)CANTIDAD,TABLA.ID_TASA,TABLA.ID_PRECIO,SUM(TABLA.PRECIO)PRECIO
FROM
(
SELECT (SELECT B.ID_TASA--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND UPPER(trim(A.DESCRIPCION))=UPPER('RECARGO POR REPETICION SEGUNDA VEZ')
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1)ID_TASA,--PARA ID_TASA
(SELECT B.ID_PRECIO--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND UPPER(trim(A.DESCRIPCION))='RECARGO POR REPETICION SEGUNDA VEZ'
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1)ID_PRECIO,--PARA ID_PRECIO
(SELECT PRECIO--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND UPPER(trim(A.DESCRIPCION))=UPPER('RECARGO POR REPETICION SEGUNDA VEZ')
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
)PRECIO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND B.VEZ_TOMADA=2
)TABLA
GROUP BY TABLA.ID_TASA,TABLA.ID_PRECIO

UNION ALL

--LO SIG ES PARA EL RECARGO EN CASO DE QUE ALUMNO TIENE MATERIA POR TERCERA VEZ
SELECT COUNT(TABLA.ID_TASA)CANTIDAD,TABLA.ID_TASA,TABLA.ID_PRECIO,SUM(TABLA.PRECIO)PRECIO
FROM
(
SELECT (SELECT B.ID_TASA--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND UPPER(trim(A.DESCRIPCION))=UPPER('RECARGO POR REPETICION TERCERA VEZ')
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1)ID_TASA,--PARA ID_TASA
(SELECT B.ID_PRECIO--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND UPPER(trim(A.DESCRIPCION))=UPPER('RECARGO POR REPETICION TERCERA VEZ')
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1)ID_PRECIO,--PARA ID_PRECIO
173

(SELECT PRECIO--MUESTRA EL COSTO por cada materia


FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND UPPER(trim(A.DESCRIPCION))=UPPER('RECARGO POR REPETICION TERCERA VEZ')
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
)PRECIO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND B.VEZ_TOMADA=3
)TABLA
GROUP BY TABLA.ID_TASA,TABLA.ID_PRECIO
)TABLA_FINAL,TASA T
WHERE TC.ID_ESTADO=1 AND TC.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND N_CUOTA=PN_CUOTA
AND TC.ID_TASA=TABLA_FINAL.ID_TASA AND T.ID_TASA=TABLA_FINAL.ID_TASA
AND TC.ID_TASA=T.ID_TASA AND T.ID_TIPO_MOVIMIENTO=PN_ID_TIPO_MOVIMIENTO;

END IF;
RETURN LN_VALOR_CUOTA;
EXCEPTION
WHEN OTHERS THEN
RETURN 0;
END ;

--get_vez_tomada_materia
--MODIFICADO 11 DE MAYO DEL 2009
function get_vez_tomada_materia(pn_id_alumno number,pn_id_materia number,pn_id_perido_lectivo number)return number
is
ln_vez_tomada number(3):=0;--representa la vez en que se tomara una materia es decir las veces que existen el
--el historial de notas sumado(+) 1 (uno)
ln_id_materia number(4):=0;
ln_cuenta number(3):=0;
--AUMENTADO 11 DE JUNIO DE 2009
LN_CUENTA_EQUIVALENTE NUMBER(2):=0;
EXISTE_MATERIA NUMBER(3):=0;
begin
--ojo es necesario comprobar si una materia que no existe pero es equivalente se la cuenta como
--primera vez o se le suma a la materia equivalente reprobada

select count(*)into ln_cuenta


from periodo_materia a
where a.id_materia=pn_id_materia and a.id_periodo_lectivo=pn_id_perido_lectivo and a.id_estado=1;
if ln_cuenta=0 then
select COUNT(*) into LN_CUENTA_EQUIVALENTE
from materia_equivalente me
where me.id_estado=1 and me.id_materia=pn_id_materia;
IF LN_CUENTA_EQUIVALENTE>0 THEN
select DISTINCT NVL(id_materia_EQUIVALE,pn_id_materia) into ln_id_materia
from materia_equivalente me
where me.id_estado=1 and me.id_materia=pn_id_materia
AND ROWNUM=1;
ELSE
ln_id_materia:=pn_id_materia;
END IF;

else
ln_id_materia:=pn_id_materia;
end if;
-----------------------
SELECT MAX(CANT) INTO EXISTE_MATERIA
FROM
(
SELECT COUNT(*)CANT
FROM HISTORIAL_NOTAS
WHERE ID_ESTADO=1 AND ID_MATERIA= ln_id_materia AND ID_ALUMNO=PN_ID_ALUMNO
UNION
SELECT COUNT(*)CANT
FROM NOTAS
WHERE ID_ESTADO<>3 AND ID_MATERIA= ln_id_materia AND ID_ALUMNO=PN_ID_ALUMNO
);
-------------------------
IF EXISTE_MATERIA=0 THEN
SELECT NVL(MAX(VECES),0)into ln_vez_tomada
174

FROM
(
select nvl(max(numero_veces),0)VECES--into ln_vez_tomada
from historial_notas
where ID_estado=1 and id_alumno=PN_ID_ALUMNO and id_materia in (select id_materia_equivale from materia_equivalente
where id_materia=ln_id_materia)
UNION
select nvl(max(N.NO_VEZ),0)VECES--into ln_vez_tomada
from NOTAS N
where N.ID_estado<>3 and N.id_alumno=PN_ID_ALUMNO and id_materia in (select id_materia_equivale from materia_equivalente
where id_materia=ln_id_materia)
--AUMENTADO EL 28/05/2009 PARA QUE NO SE MUESTREN LAS MATERIAS VISTAS PERIODO_LECTIVO VIGENTE COMO
--PREREQUISITOS
AND N.ID_PERIODO_LECTIVO<>pn_id_perido_lectivo
);
-------------------------
------------------------
ELSE

SELECT NVL(MAX(VECES),0)into ln_vez_tomada


FROM
(
select nvl(max(numero_veces),0)VECES--into ln_vez_tomada
from historial_notas
where ID_estado=1 and id_alumno=pn_id_alumno and id_materia=ln_id_materia
UNION
select nvl(max(N.NO_VEZ),0)VECES--into ln_vez_tomada
from NOTAS N
where N.ID_estado<>3 and N.id_alumno=pn_id_alumno and id_materia=ln_id_materia
--AUMENTADO EL 28/05/2009 PARA QUE NO SE MUESTREN LAS MATERIAS VISTAS PERIODO_LECTIVO VIGENTE COMO
--PREREQUISITOS
AND N.ID_PERIODO_LECTIVO<>pn_id_perido_lectivo
);
END IF;

return ln_vez_tomada + 1;

end get_vez_tomada_materia;

--PR_GRAB_COSTO_CON_EXO
PROCEDURE PR_GRAB_COSTO_CON_EXO(PN_ID_ALUMNO INT,PN_ID_PERIODO_LECTIVO INT,LV_RESULTA OUT
VARCHAR2,PV_USUARIO VARCHAR2)
IS
LN_NUMERO_CUOTAS INT;
LN_CUOTA INT:=1;
LN_ID_INSCRIPCION INT;
LN_NUM_MESES INT:=1;
LN_ID_ORDEN_PAGO INT;
LN_NUMERO_RECIBO NUMBER(5);
CURSOR CUR_PAGOS IS
SELECT COUNT(TABLA.ID_TASA)CANTIDAD,TABLA.ID_TASA,TABLA.ID_PRECIO,SUM(TABLA.PRECIO)PRECIO
FROM
(
SELECT B.ID_TASA,B.ID_PRECIO,PRECIO
FROM TASA A,TASA_PRECIO B,ALUMNO_CATEGORIA C
WHERE A.ID_TASA=B.ID_TASA
AND UPPER(A.DESCRIPCION) ='AUTOFINANCIAMIENTO'
AND B.ID_ALUMNO_CATEGORIA=C.ID_ALUMNO_CATEGORIA AND C.ID_ESTADO=1
AND (B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
OR UPPER(C.DESCRIPCION) LIKE '%TODOS%')
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1 AND B.ID_SEMESTRE=(SELECT NVL(MAX(PD.SEMESTRE),0) FROM
INSCRIPCION I,INSCRIPCION_DETALLE ID,PARALELO P,PARALELO_DESCRIPCION PD
WHERE P.DESCRIPCION=PD.DESCRIPCION AND I.ID_INSCRIPCION=ID.ID_INSCRIPCION
AND ID.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND ID.ID_PARALELO=P.ID_PARALELO AND
I.ID_ALUMNO=PN_ID_ALUMNO )
AND A.ID_TIPO_MOVIMIENTO=1--1 ES INGRESO

UNION ALL
------- LO SIGUIENTE ES APLICABLE A LOS ALUMNOS QUE VEAN LA MATERIAS POR UNA SOLA VEZ
SELECT B.ID_TASA,B.ID_PRECIO,PRECIO
FROM TASA A,TASA_PRECIO B,ALUMNO_CATEGORIA C
WHERE A.ID_TASA=B.ID_TASA
AND UPPER(A.DESCRIPCION) =UPPER('EXONERACION DE AUTOFINANCIAMIENTO')
AND B.ID_ALUMNO_CATEGORIA=C.ID_ALUMNO_CATEGORIA AND C.ID_ESTADO=1
175

AND (B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE


ID_ALUMNO=PN_ID_ALUMNO)
OR UPPER(C.DESCRIPCION) LIKE '%TODOS%')
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1 AND B.ID_SEMESTRE=(SELECT NVL(MAX(PD.SEMESTRE),0) FROM
INSCRIPCION I,INSCRIPCION_DETALLE ID,PARALELO P,PARALELO_DESCRIPCION PD
WHERE P.DESCRIPCION=PD.DESCRIPCION AND I.ID_INSCRIPCION=ID.ID_INSCRIPCION
AND ID.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND ID.ID_PARALELO=P.ID_PARALELO AND
I.ID_ALUMNO=PN_ID_ALUMNO )
AND A.ID_TIPO_MOVIMIENTO=2--2 ES EGRESO
-----------
UNION ALL
--LO SIG DEBEN PAGAR TODOS AUNQUE TENGAN BENEFICIOS DE EXONERACION
SELECT B.ID_TASA,B.ID_PRECIO,PRECIO --AGREGAR LOS RUBROS OBLIGATORIOS--EN ESTE CASO ES INTERNET
FROM TASA A,TASA_PRECIO B,ALUMNO_CATEGORIA AC
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND UPPER(A.OBLIGATORIO)='SI'

AND B.ID_ALUMNO_CATEGORIA=AC.ID_ALUMNO_CATEGORIA AND AC.ID_ESTADO=1


AND (B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)OR
UPPER(AC.DESCRIPCION) LIKE '%TODOS%')

UNION ALL
---AGREGAR EL COSTO DE INGLES SI TIENE

SELECT B.ID_TASA,B.ID_PRECIO,( SELECT DISTINCT SUBSTR(B.OBSERVACION,INSTR(B.OBSERVACION,'-',1,1)+1,1) *


B.PRECIO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ROWNUM=1)SUBTOTAL
FROM TASA A,TASA_PRECIO B,ALUMNO_CATEGORIA AC
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND UPPER(TRIM(A.DESCRIPCION)) =UPPER(TRIM('MODULO DE INGLES'))
AND AC.ID_ALUMNO_CATEGORIA=B.ID_ALUMNO_CATEGORIA AND AC.ID_ESTADO=1
AND (B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)OR
UPPER(AC.DESCRIPCION) LIKE '%TODOS%')

UNION ALL

--ESTO ES EN CASO DE QUE SEA ALUMNO EXONERADO DEBERA QUITARSELE EL VALOR DE INGLES SI TIENE
SELECT B.ID_TASA,B.ID_PRECIO,( SELECT DISTINCT SUBSTR(B.OBSERVACION,INSTR(B.OBSERVACION,'-',1,1)+1,1) *
B.PRECIO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ROWNUM=1)SUBTOTAL
FROM TASA A,TASA_PRECIO B,ALUMNO_CATEGORIA AC
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND UPPER(TRIM(A.DESCRIPCION)) =UPPER(TRIM('EXONERACION MODULO DE INGLES'))
AND AC.ID_ALUMNO_CATEGORIA=B.ID_ALUMNO_CATEGORIA AND AC.ID_ESTADO=1
AND (B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)OR
UPPER(AC.DESCRIPCION) LIKE '%TODOS%')

UNION ALL
---------------------------------
--lo sif es para el carnet
SELECT B.ID_TASA,B.ID_PRECIO,( SELECT DISTINCT SUBSTR(B.OBSERVACION,INSTR(B.OBSERVACION,'-',1,2)+1,1) *
B.PRECIO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ROWNUM=1)SUBTOTAL
FROM TASA A,TASA_PRECIO B,ALUMNO_CATEGORIA AC
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND UPPER(TRIM(A.DESCRIPCION)) =UPPER(TRIM('CARNET'))
176

AND AC.ID_ALUMNO_CATEGORIA=B.ID_ALUMNO_CATEGORIA AND AC.ID_ESTADO=1


AND (B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)OR
UPPER(AC.DESCRIPCION) LIKE '%TODOS%')

UNION ALL
---PARA EXPONERAR EL CARNET SU COSTO
SELECT B.ID_TASA,B.ID_PRECIO,( SELECT DISTINCT SUBSTR(B.OBSERVACION,INSTR(B.OBSERVACION,'-',1,2)+1,1) *
B.PRECIO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ROWNUM=1)SUBTOTAL
FROM TASA A,TASA_PRECIO B,ALUMNO_CATEGORIA AC
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND UPPER(TRIM(A.DESCRIPCION)) =UPPER(TRIM('EXONERACION DE CARNET'))
AND AC.ID_ALUMNO_CATEGORIA=B.ID_ALUMNO_CATEGORIA AND AC.ID_ESTADO=1
AND (B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)OR
UPPER(AC.DESCRIPCION) LIKE '%TODOS%')

)TABLA
GROUP BY TABLA.ID_TASA,TABLA.ID_PRECIO

;
BEGIN
SELECT GET_NUMERO_CUOTAS(PN_ID_PERIODO_LECTIVO)INTO LN_NUMERO_CUOTAS
FROM DUAL;
--ID_INSCRIPCION
SELECT DISTINCT I.ID_INSCRIPCION INTO LN_ID_INSCRIPCION
FROM INSCRIPCION I,INSCRIPCION_DETALLE ID
WHERE I.ID_INSCRIPCION=ID.ID_INSCRIPCION AND I.ID_ESTADO=1 AND ID.ID_ESTADO=1
AND I.ID_ALUMNO=PN_ID_ALUMNO AND ID.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO;

IF LN_NUMERO_CUOTAS>0 THEN

WHILE LN_CUOTA<=LN_NUMERO_CUOTAS LOOP


SELECT NVL(MAX(ID_ORDEN_PAGO),0)+1 INTO LN_ID_ORDEN_PAGO
FROM ORDEN_PAGO;

SELECT GET_NUMERO_RECIBO(PN_ID_PERIODO_LECTIVO)INTO LN_NUMERO_RECIBO


FROM DUAL;

INSERT INTO ORDEN_PAGO(ID_ORDEN_PAGO,CUOTA,ID_ALUMNO,ID_ESTADO,FECHA_INGRESO,ID_PERIODO_LECTIVO,


ID_FACULTAD,ID_CARRERA,ID_CUENTA,ID_FORMA_PAGO,VALOR_TOTAL,NUM_RECIBO
,FECHA_EMISION,FECHA_VENCIMIENTO,CONDICION,VALOR_DESCUENTO,VALOR_CUOTA
,ID_INSCRIPCION,USUARIO)
SELECT LN_ID_ORDEN_PAGO,LN_CUOTA,PN_ID_ALUMNO,1,CURRENT_DATE,PN_ID_PERIODO_LECTIVO,
'030','400',1,1,GET_TOTAL_CUOTA(PN_ID_PERIODO_LECTIVO,PN_ID_ALUMNO,LN_CUOTA,1),LN_NUMERO_RECIBO,
CURRENT_DATE,ADD_MONTHS(CURRENT_DATE,LN_NUM_MESES),'PEN',GET_TOTAL_CUOTA(PN_ID_PERIODO_LECTIVO,
PN_ID_ALUMNO,LN_CUOTA,2),
GET_TOTAL_CUOTA(PN_ID_PERIODO_LECTIVO,PN_ID_ALUMNO,LN_CUOTA,1)-
GET_TOTAL_CUOTA(PN_ID_PERIODO_LECTIVO,PN_ID_ALUMNO,LN_CUOTA,2),
LN_ID_INSCRIPCION,PV_USUARIO
FROM DUAL;
--AHORA PARA ORDEN_PAGO_DETALLE
FOR REG IN CUR_PAGOS LOOP
IF ES_TASA_DE_CUOTA(REG.ID_TASA,PN_ID_PERIODO_LECTIVO,LN_CUOTA)=TRUE AND REG.PRECIO>0 THEN

INSERT INTO ORDEN_PAGO_DETALLE(ID_ORDEN_DETALLE,ID_TASA,ID_ORDEN_PAGO,ID_ESTADO,VALOR_FINAL,


ID_PRECIO,PORCENTAJE_TASA,CANTIDAD)
SELECT NVL(MAX(ID_ORDEN_DETALLE),0)+1,REG.ID_TASA,LN_ID_ORDEN_PAGO,1,
(REG.CANTIDAD *
GET_PRECIO(REG.ID_PRECIO))*(GET_PORCENTAJE(REG.ID_TASA,PN_ID_PERIODO_LECTIVO,LN_CUOTA)/100),
REG.ID_PRECIO,GET_PORCENTAJE(REG.ID_TASA,PN_ID_PERIODO_LECTIVO,LN_CUOTA),REG.CANTIDAD
FROM ORDEN_PAGO_DETALLE;

END IF;

END LOOP;

LN_NUM_MESES:=LN_NUM_MESES + 1;
177

LN_CUOTA:=LN_CUOTA +1;
LN_NUMERO_RECIBO:=LN_NUMERO_RECIBO +1;
END LOOP;
LV_RESULTA:='SI';
ELSE
LV_RESULTA:='NO PUEDE GRABAR DEBIDO A QUE NO EXISTE VALORES ASIGNADOS PARA LAS CUOTAS DE LAS TASAS';
END IF;

EXCEPTION
WHEN OTHERS THEN
LV_RESULTA:=SQLERRM;

END;
-------PR_GRAB_COSTO_SIN_EXO-------------
PROCEDURE PR_GRAB_COSTO_SIN_EXO(PN_ID_ALUMNO INT,PN_ID_PERIODO_LECTIVO INT,LV_RESULTA OUT
VARCHAR2)
IS
LN_NUMERO_CUOTAS INT;
LN_CUOTA INT:=1;
LN_ID_INSCRIPCION INT;
LN_NUM_MESES INT:=1;
LN_ID_ORDEN_PAGO INT;
LN_NUMERO_RECIBO NUMBER(5);
CURSOR CUR_PAGOS IS
SELECT
COUNT(TABLA_FINAL.ID_TASA)CANTIDAD,TABLA_FINAL.ID_TASA,TABLA_FINAL.ID_PRECIO,SUM(TABLA_FINAL.PRECIO)P
RECIO
FROM
(
--RUBROS OBLIGATORIOS
SELECT B.ID_TASA,B.ID_PRECIO,PRECIO --AGREGAR LOS RUBROS OBLIGATORIOS--EN ESTE CASO ES INTERNET
FROM TASA A,TASA_PRECIO B,ALUMNO_CATEGORIA AC
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND UPPER(A.OBLIGATORIO)='SI'

AND B.ID_ALUMNO_CATEGORIA=AC.ID_ALUMNO_CATEGORIA AND AC.ID_ESTADO=1


AND (B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)OR
UPPER(AC.DESCRIPCION) LIKE '%TODOS%')
---LO SIG ES PRA LOS PAGOS DE EL AUTOFINANCIAMIENTO
UNION ALL
--AUTOFINANCIAMIENTO
SELECT B.ID_TASA,B.ID_PRECIO,PRECIO
FROM TASA A,TASA_PRECIO B,ALUMNO_CATEGORIA C
WHERE A.ID_TASA=B.ID_TASA
AND UPPER(A.DESCRIPCION) =UPPER(TRIM('AUTOFINANCIAMIENTO'))
AND B.ID_ALUMNO_CATEGORIA=C.ID_ALUMNO_CATEGORIA AND C.ID_ESTADO=1
AND (B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
OR UPPER(C.DESCRIPCION) LIKE '%TODOS%')
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1 AND B.ID_SEMESTRE=(SELECT NVL(MAX(PD.SEMESTRE),0) FROM
INSCRIPCION I,INSCRIPCION_DETALLE ID,PARALELO P,PARALELO_DESCRIPCION PD
WHERE P.DESCRIPCION=PD.DESCRIPCION AND I.ID_INSCRIPCION=ID.ID_INSCRIPCION
AND ID.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND ID.ID_PARALELO=P.ID_PARALELO AND
I.ID_ALUMNO=PN_ID_ALUMNO )
AND A.ID_TIPO_MOVIMIENTO=1--1 ES INGRESO

UNION ALL
--MODULO DE INGLES
SELECT B.ID_TASA,B.ID_PRECIO,( SELECT DISTINCT SUBSTR(B.OBSERVACION,INSTR(B.OBSERVACION,'-',1,1)+1,1) *
B.PRECIO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ROWNUM=1)SUBTOTAL
FROM TASA A,TASA_PRECIO B,ALUMNO_CATEGORIA AC
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND UPPER(TRIM(A.DESCRIPCION)) =UPPER(TRIM('MODULO DE INGLES'))
AND AC.ID_ALUMNO_CATEGORIA=B.ID_ALUMNO_CATEGORIA AND AC.ID_ESTADO=1
AND (B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)OR
UPPER(AC.DESCRIPCION) LIKE '%TODOS%')
178

UNION ALL
--CARNET
SELECT B.ID_TASA,B.ID_PRECIO,( SELECT DISTINCT SUBSTR(B.OBSERVACION,INSTR(B.OBSERVACION,'-',1,2)+1,1) *
B.PRECIO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ROWNUM=1)SUBTOTAL
FROM TASA A,TASA_PRECIO B,ALUMNO_CATEGORIA AC
WHERE A.ID_TASA=B.ID_TASA
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND UPPER(TRIM(A.DESCRIPCION)) =UPPER(TRIM('CARNET'))
AND AC.ID_ALUMNO_CATEGORIA=B.ID_ALUMNO_CATEGORIA AND AC.ID_ESTADO=1
AND (B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)OR
UPPER(AC.DESCRIPCION) LIKE '%TODOS%')

UNION ALL
--MATRICULA POR CADA MATERIA 1ERA VEZ'
SELECT (SELECT B.ID_TASA--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND UPPER(trim(A.DESCRIPCION))=UPPER('MATRICULA POR CADA MATERIA 1ERA VEZ')
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1)ID_TASA,--PARA ID_TASA
(SELECT B.ID_PRECIO--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND UPPER(trim(A.DESCRIPCION))=UPPER('MATRICULA POR CADA MATERIA 1ERA VEZ')
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1)ID_PRECIO,--PARA ID_PRECIO
(SELECT PRECIO--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND UPPER(TRIM(A.DESCRIPCION))=UPPER('MATRICULA POR CADA MATERIA 1ERA VEZ')
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
)PRECIO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND B.VEZ_TOMADA>1

UNION ALL
--RECARGO POR REPETICION SEGUNDA VEZ
SELECT TABLA.ID_TASA,TABLA.ID_PRECIO,SUM(TABLA.PRECIO)PRECIO
FROM
(
SELECT (SELECT B.ID_TASA--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND UPPER(trim(A.DESCRIPCION))=UPPER('RECARGO POR REPETICION SEGUNDA VEZ')
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1)ID_TASA,--PARA ID_TASA
(SELECT B.ID_PRECIO--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND UPPER(trim(A.DESCRIPCION))=UPPER('RECARGO POR REPETICION SEGUNDA VEZ')
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1)ID_PRECIO,--PARA ID_PRECIO
(SELECT PRECIO--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND UPPER(trim(A.DESCRIPCION))=UPPER('RECARGO POR REPETICION SEGUNDA VEZ')
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
)PRECIO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
179

WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND B.VEZ_TOMADA=2
)TABLA
GROUP BY TABLA.ID_TASA,TABLA.ID_PRECIO

UNION ALL

--LO SIG ES PARA EL RECARGO EN CASO DE QUE ALUMNO TIENE MATERIA POR TERCERA VEZ
SELECT TABLA.ID_TASA,TABLA.ID_PRECIO,SUM(TABLA.PRECIO)PRECIO
FROM
(
SELECT (SELECT B.ID_TASA--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND UPPER(trim(A.DESCRIPCION))=UPPER('RECARGO POR REPETICION TERCERA VEZ')
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1)ID_TASA,--PARA ID_TASA
(SELECT B.ID_PRECIO--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND UPPER(trim(A.DESCRIPCION))=UPPER('RECARGO POR REPETICION TERCERA VEZ')
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1)ID_PRECIO,--PARA ID_PRECIO
(SELECT PRECIO--MUESTRA EL COSTO por cada materia
FROM TASA A,TASA_PRECIO B
WHERE A.ID_TASA=B.ID_TASA
AND UPPER(trim(A.DESCRIPCION))=UPPER('RECARGO POR REPETICION TERCERA VEZ')
AND B.ID_ALUMNO_CATEGORIA=(SELECT DISTINCT ID_ALUMNO_CATEGORIA FROM ALUMNO WHERE
ID_ALUMNO=PN_ID_ALUMNO)
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
)PRECIO
FROM INSCRIPCION A,INSCRIPCION_DETALLE B
WHERE A.ID_INSCRIPCION=B.ID_INSCRIPCION
AND A.ID_ESTADO=1 AND B.ID_ESTADO=1
AND A.ID_ALUMNO=PN_ID_ALUMNO AND B.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND B.VEZ_TOMADA=3
)TABLA
GROUP BY TABLA.ID_TASA,TABLA.ID_PRECIO
)TABLA_FINAL
GROUP BY TABLA_FINAL.ID_TASA,TABLA_FINAL.ID_PRECIO
;
BEGIN
SELECT GET_NUMERO_CUOTAS(PN_ID_PERIODO_LECTIVO)INTO LN_NUMERO_CUOTAS
FROM DUAL;
--ID_INSCRIPCION
SELECT DISTINCT I.ID_INSCRIPCION INTO LN_ID_INSCRIPCION
FROM INSCRIPCION I,INSCRIPCION_DETALLE ID
WHERE I.ID_INSCRIPCION=ID.ID_INSCRIPCION AND I.ID_ESTADO=1 AND ID.ID_ESTADO=1
AND I.ID_ALUMNO=PN_ID_ALUMNO AND ID.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO;

IF LN_NUMERO_CUOTAS>0 THEN
WHILE LN_CUOTA<=LN_NUMERO_CUOTAS LOOP
SELECT NVL(MAX(ID_ORDEN_PAGO),0)+1 INTO LN_ID_ORDEN_PAGO
FROM ORDEN_PAGO;

SELECT GET_NUMERO_RECIBO(PN_ID_PERIODO_LECTIVO)INTO LN_NUMERO_RECIBO


FROM DUAL;

INSERT INTO ORDEN_PAGO(ID_ORDEN_PAGO,CUOTA,ID_ALUMNO,ID_ESTADO,FECHA_INGRESO,ID_PERIODO_LECTIVO,


ID_FACULTAD,ID_CARRERA,ID_CUENTA,ID_FORMA_PAGO,VALOR_TOTAL,NUM_RECIBO
,FECHA_EMISION,FECHA_VENCIMIENTO,CONDICION,VALOR_DESCUENTO,VALOR_CUOTA
,ID_INSCRIPCION)
SELECT LN_ID_ORDEN_PAGO,LN_CUOTA,PN_ID_ALUMNO,1,CURRENT_DATE,PN_ID_PERIODO_LECTIVO,
'030','400',1,1,GET_TOTAL_CUOTA(PN_ID_PERIODO_LECTIVO,PN_ID_ALUMNO,LN_CUOTA,1),LN_NUMERO_RECIBO,
CURRENT_DATE,ADD_MONTHS(CURRENT_DATE,LN_NUM_MESES),'PEN',GET_TOTAL_CUOTA(PN_ID_PERIODO_LECTIVO,
PN_ID_ALUMNO,LN_CUOTA,2),
GET_TOTAL_CUOTA(PN_ID_PERIODO_LECTIVO,PN_ID_ALUMNO,LN_CUOTA,1)-
GET_TOTAL_CUOTA(PN_ID_PERIODO_LECTIVO,PN_ID_ALUMNO,LN_CUOTA,2),
LN_ID_INSCRIPCION
FROM DUAL;
--AHORA PARA ORDEN_PAGO_DETALLE
180

FOR REG IN CUR_PAGOS LOOP


IF ES_TASA_DE_CUOTA(REG.ID_TASA,PN_ID_PERIODO_LECTIVO,LN_CUOTA)=TRUE AND REG.PRECIO>0 THEN

INSERT INTO ORDEN_PAGO_DETALLE(ID_ORDEN_DETALLE,ID_TASA,ID_ORDEN_PAGO,ID_ESTADO,VALOR_FINAL,


ID_PRECIO,PORCENTAJE_TASA,CANTIDAD)
SELECT NVL(MAX(ID_ORDEN_DETALLE),0)+1,REG.ID_TASA,LN_ID_ORDEN_PAGO,1,
(REG.CANTIDAD *
GET_PRECIO(REG.ID_PRECIO))*(GET_PORCENTAJE(REG.ID_TASA,PN_ID_PERIODO_LECTIVO,LN_CUOTA)/100),
REG.ID_PRECIO,GET_PORCENTAJE(REG.ID_TASA,PN_ID_PERIODO_LECTIVO,LN_CUOTA),REG.CANTIDAD
FROM ORDEN_PAGO_DETALLE;

END IF;

END LOOP;

LN_NUM_MESES:=LN_NUM_MESES + 1;
LN_CUOTA:=LN_CUOTA +1;
LN_NUMERO_RECIBO:=LN_NUMERO_RECIBO +1;
END LOOP;
LV_RESULTA:='SI';
ELSE
LV_RESULTA:='NO PUEDE GRABAR DEBIDO A QUE NO EXISTE VALORES ASIGNADOS PARA LAS CUOTAS DE LAS TASAS';
END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);

END;

---LO SIGUIENTE ES PARA CONTROL DE TASA


PROCEDURE GET_TASA_CATEGORIA(PC_TASA_CAT OUT R_CURSOR)IS
BEGIN
OPEN PC_TASA_CAT FOR
SELECT TC.ID_TASA_CATEGORIA,TC.DESCRIPCION,TC.ID_ESTADO
FROM TASA_CATEGORIA TC;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);

END;

--GRABAR TASA CATEGORIA NUEVA


PROCEDURE SET_TASA_CATEGORIA(PV_NOMBRE_TASA_CATEGORIA VARCHAR2,LV_RESPUESTA OUT VARCHAR2)
IS
LN_CANT_REPETIDOS INT;
BEGIN
SELECT COUNT(TC.DESCRIPCION)INTO LN_CANT_REPETIDOS
FROM TASA_CATEGORIA TC
WHERE UPPER(TC.DESCRIPCION)=UPPER(PV_NOMBRE_TASA_CATEGORIA);

IF LN_CANT_REPETIDOS=0 THEN

INSERT INTO TASA_CATEGORIA(ID_TASA_CATEGORIA,DESCRIPCION,ID_ESTADO)


SELECT NVL(MAX(ID_TASA_CATEGORIA),0)+1 ,UPPER(PV_NOMBRE_TASA_CATEGORIA),1
FROM TASA_CATEGORIA;
LV_RESPUESTA:='CREACIÓN EXITOSA DE LA TASA CATEGORÍA: '||UPPER(PV_NOMBRE_TASA_CATEGORIA);
ELSIF LN_CANT_REPETIDOS>0 THEN
LV_RESPUESTA:='NO SE PUEDE CREAR TASA CATEGORIA YA EXISTE';
END IF;
EXCEPTION
WHEN OTHERS THEN
LV_RESPUESTA:=SQLERRM;

END;

--extraer las tasa activas o validas


PROCEDURE GET_TASAS(PC_TASA OUT R_CURSOR)IS
BEGIN
OPEN PC_TASA FOR
SELECT ID_TASA,DESCRIPCION
FROM TASA
WHERE ID_ESTADO=1;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
181

END;

--GET_TASA_CUOTA
PROCEDURE GET_TASA_CUOTA(PV_OPCION VARCHAR2,PN_NUM_CUOTA INT,PN_ID_PERIODO_LECTIVO
INT,PC_TASA_CUOTA OUT R_CURSOR)
IS
BEGIN
IF PV_OPCION='TODAS' THEN
OPEN PC_TASA_CUOTA FOR
select tc.ID_TASA,t.descripcion TASA,TC.N_CUOTA,TC.PORC_CUOTA
from tasa_cuota tc,tasa t
where tc.id_periodo_lectivo=PN_ID_PERIODO_LECTIVO
and t.id_tasa=tc.id_tasa
and tc.id_estado=1 and t.id_estado=1
order by tc.n_cuota,tc.id_tasa;
ELSIF PV_OPCION='CUOTA' THEN
OPEN PC_TASA_CUOTA FOR
select tc.ID_TASA,t.descripcion TASA,TC.N_CUOTA,TC.PORC_CUOTA
from tasa_cuota tc,tasa t
where tc.id_periodo_lectivo=PN_ID_PERIODO_LECTIVO
and t.id_tasa=tc.id_tasa
and tc.id_estado=1 and t.id_estado=1
AND TC.N_CUOTA=PN_NUM_CUOTA
order by tc.n_cuota,tc.id_tasa;
END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);

END;
---ACTUALIZA TASA_CUOTA
PROCEDURE ACTUALIZA_TASA_CUOTA(PN_ID_PERIODO_LECTIVO INT,PN_ID_TASA INT,PN_NUM_CUOTA
INT,PN_PORCENTAJE NUMBER,PV_RESULTADO OUT VARCHAR2)IS
--AUMENTADO 12 DE JUNIO 18:35
LN_SUMA_PORCENTAJE NUMBER(5,2):=0.00;
BEGIN
UPDATE TASA_CUOTA
SET PORC_CUOTA=PN_PORCENTAJE
WHERE ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ID_TASA=PN_ID_TASA AND N_CUOTA=PN_NUM_CUOTA
AND ID_ESTADO=1;
------------------------------------------
--AUMENTADO 12 DE JUNIO DEL 2009 A LAS 18:35
SELECT NVL(SUM(NVL(PORC_CUOTA,0)),0) INTO LN_SUMA_PORCENTAJE
FROM TASA_CUOTA
WHERE ID_ESTADO=1 AND ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ID_TASA=PN_ID_TASA;
-------------------------------------------------------------
--VALIDA QUE UNA TASA SUPERE EN PORCENTAJE AL 100 EN LAS DIFERENTES
--CUOTAS
IF LN_SUMA_PORCENTAJE >100 THEN
PV_RESULTADO:='NO SE PUEDE ACTUALIZAR PORCENTAJE DE TASA DEBIDO A QUE LAS SUMA DE PORCENTAJES EN
DIFERENTES CUOTAS SUPERA AL 100%, SIENDO :'|| LN_SUMA_PORCENTAJE || '%';
ELSE
PV_RESULTADO:='SE ACTUALIZO CON ÉXITO EL/LOS PORCENTAJE/S DE LA TASA/S SELECCIONADAS';
END IF;
EXCEPTION
WHEN OTHERS THEN
PV_RESULTADO:=SQLERRM;
END;
---ANULA TASA_CUOTA
PROCEDURE ANULA_TASA_CUOTA(PN_ID_PERIODO_LECTIVO INT,PN_ID_TASA INT,PN_NUM_CUOTA
INT,PV_RESULTADO OUT VARCHAR2)IS
BEGIN
UPDATE TASA_CUOTA
SET ID_ESTADO=3--3 EQUIVALE A ANULADO EL REGISTRO
WHERE ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ID_TASA=PN_ID_TASA AND N_CUOTA=PN_NUM_CUOTA
AND ID_ESTADO=1;
PV_RESULTADO:='SE HA ANULADO CON ÉXITO LA TASA EN LA CUOTA SOLICITADA';
EXCEPTION
WHEN OTHERS THEN
PV_RESULTADO:=SQLERRM;
END;
--INSERTA EN TABLA TASA_CUOTA
----------------------------------------------------------
182

PROCEDURE PR_INSERTA_TASA_CUOTA(PV_RESPUESTA OUT VARCHAR2,PN_ID_TASA


NUMBER,PN_ID_PERIODO_LECTIVO NUMBER,
PN_NUM_CUOTA INT,PN_PORC_CUOTA NUMBER)

IS
LN_TASA_CUOTA_EXISTENTE INT;
--AUMENTADO 12 DE JUNIO 18:00
LN_SUMA_PORCENTAJE NUMBER(5,2):=0.00;
BEGIN
SELECT COUNT(*)INTO LN_TASA_CUOTA_EXISTENTE
FROM TASA_CUOTA
WHERE ID_TASA=PN_ID_TASA AND ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND
N_CUOTA=PN_NUM_CUOTA AND ID_ESTADO=1;
--
IF LN_TASA_CUOTA_EXISTENTE=0 THEN
INSERT INTO TASA_CUOTA(ID_TASA,ID_PERIODO_LECTIVO,N_CUOTA,PORC_CUOTA,ID_ESTADO)
VALUES(PN_ID_TASA,PN_ID_PERIODO_LECTIVO,PN_NUM_CUOTA,PN_PORC_CUOTA,1);
------------------------------------------
--AUMENTADO 12 DE JUNIO DEL 2009 A LAS 17:59
SELECT NVL(SUM(NVL(PORC_CUOTA,0)),0) INTO LN_SUMA_PORCENTAJE
FROM TASA_CUOTA
WHERE ID_ESTADO=1 AND ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ID_TASA=PN_ID_TASA;
-------------------------------------------------------------
--VALIDA QUE UNA TASA SUPERE EN PORCENTAJE AL 100 EN LAS DIFERENTES
--CUOTAS
IF LN_SUMA_PORCENTAJE >100 THEN
PV_RESPUESTA:='NO SE PUEDE GRABAR PORCENTAJE DE TASA DEBIDO A QUE LAS SUMA DE PORCENTAJES EN
DIFERENTES CUOTAS SUPERA AL 100%, SIENDO :'|| LN_SUMA_PORCENTAJE || '%';
ELSE
PV_RESPUESTA:='GRABACIÓN EXITOSA DE LOS PORCENTAJES DE LA/S TASA/S DE LA CUOTA: ' || PN_NUM_CUOTA;
END IF;
ELSE
PV_RESPUESTA:='NO SE PUEDE GRABAR PORCENTAJE PARA LA TASA SOLICITADA DEBIDO A QUE EN LA CUOTA: '||
PN_NUM_CUOTA || ' YA HA SIDO GRABADA' ;
END IF;

EXCEPTION
WHEN OTHERS THEN
PV_RESPUESTA:=SQLERRM;
END PR_INSERTA_TASA_CUOTA;
--------------------------------------------------------

--12/ABRIL/2009
--PR_GET_TASA_PRECIO
PROCEDURE PR_GET_TASA_PRECIO(PV_RESPUESTA OUT VARCHAR2,PN_ID_PERIODO_LECTIVO INT,PC_TASA_PRECIO
OUT R_CURSOR,PV_OPCION VARCHAR2,PN_VALOR NUMBER)
IS
BEGIN
IF PV_OPCION='TODOS' THEN
OPEN PC_TASA_PRECIO FOR
select DISTINCT a.id_precio,a.id_tasa,b.descripcion tasa,a.precio,a.id_alumno_categoria,c.descripcion,a.id_semestre,(select
nvl(descripcion,'') from semestre where id_semestre=a.id_semestre)semestre
from tasa_precio a,tasa b,alumno_categoria c
where a.id_periodo_lectivo=PN_ID_PERIODO_LECTIVO
and a.id_estado=1 and a.id_tasa=b.id_tasa
and a.id_alumno_categoria=c.id_alumno_categoria
order by a.id_tasa,a.id_alumno_categoria,a.id_semestre;

ELSIF PV_OPCION='TASAS'THEN--POR TASAS


OPEN PC_TASA_PRECIO FOR
select DISTINCT a.id_precio,a.id_tasa,b.descripcion tasa,a.precio,a.id_alumno_categoria,c.descripcion,a.id_semestre,(select
nvl(descripcion,'') from semestre where id_semestre=a.id_semestre)semestre
from tasa_precio a,tasa b,alumno_categoria c
where a.id_periodo_lectivo=PN_ID_PERIODO_LECTIVO
and a.id_estado=1 and a.id_tasa=b.id_tasa
and a.id_alumno_categoria=c.id_alumno_categoria
AND A.ID_TASA=PN_VALOR
order by a.id_tasa,a.id_alumno_categoria,a.id_semestre;

ELSIF PV_OPCION='SEMESTRES'THEN--POR SEMESTRES


OPEN PC_TASA_PRECIO FOR
select DISTINCT a.id_precio,a.id_tasa,b.descripcion tasa,a.precio,a.id_alumno_categoria,c.descripcion,a.id_semestre,(select
nvl(descripcion,'') from semestre where id_semestre=a.id_semestre)semestre
from tasa_precio a,tasa b,alumno_categoria c
where a.id_periodo_lectivo=PN_ID_PERIODO_LECTIVO
183

and a.id_estado=1 and a.id_tasa=b.id_tasa


and a.id_alumno_categoria=c.id_alumno_categoria
AND A.ID_SEMESTRE=PN_VALOR
order by a.id_tasa,a.id_alumno_categoria,a.id_semestre;

ELSIF PV_OPCION='CAT_ALUMNO'THEN--POR CATEGORIA ALUMNO


OPEN PC_TASA_PRECIO FOR
select DISTINCT a.id_precio,a.id_tasa,b.descripcion tasa,a.precio,a.id_alumno_categoria,c.descripcion,a.id_semestre,(select
nvl(descripcion,'') from semestre where id_semestre=a.id_semestre)semestre
from tasa_precio a,tasa b,alumno_categoria c
where a.id_periodo_lectivo=PN_ID_PERIODO_LECTIVO
and a.id_estado=1 and a.id_tasa=b.id_tasa
and a.id_alumno_categoria=c.id_alumno_categoria
AND A.ID_ALUMNO_CATEGORIA=PN_VALOR
order by a.id_tasa,a.id_alumno_categoria,a.id_semestre;

END IF;

EXCEPTION
WHEN NO_DATA_FOUND THEN
PV_RESPUESTA:='NO EXISTE NADA QUE MOSTRAR';
WHEN OTHERS THEN
PV_RESPUESTA:=SQLERRM;
END PR_GET_TASA_PRECIO;

--PR_GET_SEMESTRES 12/04/2009
PROCEDURE PR_GET_SEMESTRES(PC_SEMESTRES OUT R_CURSOR)
IS
BEGIN
OPEN PC_SEMESTRES FOR
SELECT ID_SEMESTRE,DESCRIPCION SEMESTRE FROM SEMESTRE
WHERE ID_ESTADO=1;
END PR_GET_SEMESTRES;
--PR_GET_ALUMNO_CATEGORIA 12/04/2009
PROCEDURE PR_GET_ALUMNO_CATEGORIA(PC_ALUMNO_CATEGORIA OUT R_CURSOR)
IS
BEGIN
OPEN PC_ALUMNO_CATEGORIA FOR
SELECT ID_ALUMNO_CATEGORIA,DESCRIPCION ALUMNO_CATEGORIA
FROM ALUMNO_CATEGORIA
WHERE ID_ESTADO=1;
END PR_GET_ALUMNO_CATEGORIA;

--ACTUALIZA TASA_PRECIO 9/04/2009 18:16


PROCEDURE PR_ACTUALIZA_TASA_PRECIO(PN_ID_PRECIO INT,PN_PRECIO NUMBER,PV_RESULTADO OUT VARCHAR2)
IS
BEGIN

UPDATE TASA_PRECIO TP
SET TP.PRECIO=PN_PRECIO
WHERE TP.ID_PRECIO=PN_ID_PRECIO AND TP.ID_ESTADO=1;
PV_RESULTADO:='SI';
EXCEPTION
WHEN OTHERS THEN
PV_RESULTADO:=SQLERRM;

END PR_ACTUALIZA_TASA_PRECIO;

--ANULA TASA_PRECIO 29/04/2009 18:16


PROCEDURE PR_ANULA_TASA_PRECIO(PN_ID_PRECIO INT,PV_RESULTADO OUT VARCHAR2)
IS
BEGIN

UPDATE TASA_PRECIO
SET ID_ESTADO=3
WHERE ID_PRECIO=PN_ID_PRECIO AND ID_ESTADO=1;
PV_RESULTADO:='SI';
EXCEPTION
WHEN OTHERS THEN
PV_RESULTADO:='NO';

END PR_ANULA_TASA_PRECIO;

-- PR_INSERTA_TASA_PRECIO
PROCEDURE PR_INSERTA_TASA_PRECIO(PN_ID_TASA NUMBER,PN_ID_ALUMNO_CATEGORIA
NUMBER,PN_ID_SEMESTRE NUMBER,
184

PN_ID_PERIODO_LECTIVO NUMBER,PN_PRECIO NUMBER,PV_RESULTADO OUT VARCHAR2)


IS
LN_EXISTE NUMBER(4);
LN_EXISTE_TODAS_CATEGORIAS NUMBER(4);
LN_EXISTE_TODOS_SEMESTRES NUMBER(4);
BEGIN
--LO SIG. PREGUNTA SI EXISTE YA EL PRECIO ASIGNADO PARA LA TASA
--JUNTO CON LA CATEGORIA DEL ALUMNO Y EL SEMESTRE
SELECT NVL(COUNT(*),0)INTO LN_EXISTE
FROM TASA_PRECIO
WHERE ID_TASA=PN_ID_TASA AND NVL(ID_ALUMNO_CATEGORIA,0)=NVL(PN_ID_ALUMNO_CATEGORIA,0) AND
NVL(ID_SEMESTRE,0)=NVL(PN_ID_SEMESTRE,0)
AND ID_ESTADO=1 AND ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO;

--LO SIG. ES PARA SABER SI UNA TASA YA HA SIDO ASIGNADA TODAS LAS
--CAT DE ALUMNO
SELECT NVL(COUNT(*),0)INTO LN_EXISTE_TODAS_CATEGORIAS
FROM TASA_PRECIO
WHERE ID_TASA=PN_ID_TASA AND ID_ALUMNO_CATEGORIA=0
AND ID_ESTADO=1 AND ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO;

--LO SIG. ES PARA SABER SI UNA TASA YA HA SIDO ASIGNADA TODAS LAS
--SEMESTRE
SELECT NVL(COUNT(*),0)INTO LN_EXISTE_TODOS_SEMESTRES
FROM TASA_PRECIO
WHERE ID_TASA=PN_ID_TASA AND
NVL(ID_SEMESTRE,0)=0
AND ID_ESTADO=1 AND ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO;

IF LN_EXISTE=0 AND LN_EXISTE_TODAS_CATEGORIAS=0 AND LN_EXISTE_TODOS_SEMESTRES=0 THEN


INSERT INTO
TASA_PRECIO(ID_PRECIO,ID_TASA,ID_ALUMNO_CATEGORIA,ID_SEMESTRE,ID_PERIODO_LECTIVO,PRECIO,
FECHA_INGRESO,ID_ESTADO)
SELECT NVL(MAX(ID_PRECIO),0) + 1,
PN_ID_TASA,PN_ID_ALUMNO_CATEGORIA,PN_ID_SEMESTRE,PN_ID_PERIODO_LECTIVO,
PN_PRECIO,CURRENT_DATE,1
FROM TASA_PRECIO;
PV_RESULTADO:='SI';
ELSIF LN_EXISTE>0 AND (LN_EXISTE_TODAS_CATEGORIAS=0 OR LN_EXISTE_TODOS_SEMESTRES=0)THEN
PV_RESULTADO:='NO SE PUEDE GRABAR DEBIDO A QUE LA TASA YA ESTÁ REPETIDA';
ELSIF LN_EXISTE_TODAS_CATEGORIAS>0 THEN
PV_RESULTADO:='NO SE PUEDE GRABAR DEBIDO A QUE LA TASA YA TIENE ASIGNADA LA CATEGORIA SOLICITADA';
ELSIF LN_EXISTE_TODOS_SEMESTRES>0 THEN
PV_RESULTADO:='NO SE PUEDE GRABAR DEBIDO A QUE LA TASA YA TIENE EL SEMESTRE SOLICITADO';

END IF;

EXCEPTION
WHEN OTHERS THEN
PV_RESULTADO:=SQLERRM;
END;

--PR_UPDATE_SECCION_PARALELO
PROCEDURE PR_UPDATE_SECCION_PARALELO(PN_ID_SECCION_NEW NUMBER,PN_ID_SECCION_OLD
NUMBER,PN_ID_PERIODO_LECTIVO NUMBER,PV_PARALELO VARCHAR2)
IS
BEGIN
UPDATE PARALELO SET ID_SECCION=PN_ID_SECCION_NEW,FECHA_MODIFICACION=CURRENT_DATE,
OBSERVACION='MODIFICADO LA SECCION DE: ' ||PN_ID_SECCION_OLD || 'A : ' || PN_ID_SECCION_NEW
WHERE ID_ESTADO=1 AND ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND DESCRIPCION=PV_PARALELO;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.put_line(SQLERRM);
END PR_UPDATE_SECCION_PARALELO;

--VALIDACION PARA INSCRIPCION ADMINISTRADOR 11/MAYO/2009


FUNCTION FU_VALIDA_INSCRIPCION(PN_ID_ALUMNO INT,PN_ID_PERIODO_LECTIVO INT) RETURN VARCHAR2
IS
LN_ID_INCRIPCION INT:=0;
LN_3_VEZ INT;
LN_MATERIAS_MAX_3_VEZ INT;
LN_NUMERO_MATERIAS_INS INT;
LN_MAX_MATERIAS_CURR INT;
185

LV_RESPUESTA VARCHAR2(150):='SI SE PUEDE INSCRIBIR';


BEGIN
--<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
--MAX PERMITIDO POR TERCERA VEZ
SELECT VALOR INTO LN_MATERIAS_MAX_3_VEZ
FROM PARAMETROS
WHERE MODULO=9 AND ID_ESTADO=1 AND DESCRIPCION='NUMERO MATERIAS TERCERA VEZ';

--MAX MATEERIAS PERMITIDAS CURRICULAR


SELECT VALOR INTO LN_MAX_MATERIAS_CURR
FROM PARAMETROS
WHERE MODULO=9 AND ID_ESTADO=1 AND DESCRIPCION='NUMERO MAXIMO DE MATERIAS NO CURRICULARES';
--NUMERO DE MATERIAS INSCRITAS
SELECT COUNT(ID.ID_MATERIA)INTO LN_NUMERO_MATERIAS_INS
FROM INSCRIPCION I,INSCRIPCION_DETALLE ID,MATERIA M
WHERE I.ID_INSCRIPCION=ID.ID_INSCRIPCION
AND I.ID_ESTADO=1 AND ID.ID_ESTADO=1 AND I.ID_ALUMNO=PN_ID_ALUMNO AND
ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND M.ID_MATERIA=ID.ID_MATERIA AND M.ID_TIPO_MATERIA IN(0,1,2,3);

--<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
SELECT COUNT(I.ID_INSCRIPCION) INTO LN_ID_INCRIPCION
FROM INSCRIPCION I,INSCRIPCION_DETALLE ID
WHERE I.ID_INSCRIPCION=ID.ID_INSCRIPCION
AND I.ID_ESTADO=1 AND ID.ID_ESTADO=1 AND I.ID_ALUMNO=PN_ID_ALUMNO AND
ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO;
--SI HA SIDO INSCRITO
IF NVL(LN_ID_INCRIPCION,0)>0 THEN

SELECT COUNT(VEZ_TOMADA) INTO LN_3_VEZ


FROM INSCRIPCION I,INSCRIPCION_DETALLE ID
WHERE I.ID_INSCRIPCION=ID.ID_INSCRIPCION
AND I.ID_ESTADO=1 AND ID.ID_ESTADO=1 AND I.ID_ALUMNO=PN_ID_ALUMNO AND
ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND VEZ_TOMADA=3;
-- SI UNA MATERIA FUE TOMADA POR TERCERA VEZ SOLO PUEDE COGER LA S MATERIAS PERMITIDAS ACTUALMENTE
SON SOLO 4
IF LN_3_VEZ>0 AND LN_NUMERO_MATERIAS_INS > LN_MATERIAS_MAX_3_VEZ THEN
LV_RESPUESTA:='NO SE PUEDE GRABAR DEBIDO A QUE CUANDO CURSA UNA O MAS MATERIAS POR TERCERA VEZ
SOLO DEBE INSCRIBIRSE HASTA EN : ' || LN_MATERIAS_MAX_3_VEZ || ' MATERIAS';
ELSIF LN_3_VEZ=0 AND LN_NUMERO_MATERIAS_INS>LN_MAX_MATERIAS_CURR THEN
LV_RESPUESTA:='NO SE PUEDE GRABAR DEBIDO A QUE EL NUMERO DE MATERIAS ELEGIDAS SUPERA AL MAXIMO
PERMITIDO QUE ES : ' || LN_MAX_MATERIAS_CURR;

END IF;

END IF;
RETURN LV_RESPUESTA;
END;
-->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
--PR_LISTADO_GRACIA 15 DE MAYO 0:43 AM
PROCEDURE PR_LISTADO_GRACIA(PV_OPCION VARCHAR2,PN_CEDULA VARCHAR2,PV_COD_ESTUDIANTIL
VARCHAR2,PV_APE_PATERNO VARCHAR2,PV_APE_MATERNO VARCHAR2,PV_PRIMER_NOMBRE
VARCHAR2,PV_SEG_NOMBRE VARCHAR2,PC_ALUMNOS OUT r_cursor,PV_ERROR OUT VARCHAR2)
IS
BEGIN

IF PV_OPCION='TODOS' THEN
OPEN PC_ALUMNOS FOR
SELECT A.ID_ALUMNO,B.CEDULA,A.CODIGO_ESTUDIANTIL,B.APELLIDO_PATERNO || ' ' || B.APELLIDO_MATERNO || ' ' ||
B.PRIMER_NOMBRE || ' ' || B.SEGUNDO_NOMBRE,C.DESCRIPCION,EG.ID_SOLICITUD
FROM ALUMNO A,PERSONA B,ALUMNO_CATEGORIA C,ADM_EXAMEN_GRACIA EG
WHERE A.ID_PERSONA=B.ID_PERSONA AND A.ID_ALUMNO_CATEGORIA=C.ID_ALUMNO_CATEGORIA
AND A.ID_ESTADO=1
--MODIFICADO A PARTIR DE GET_ALUMNOS
AND EG.ID_ALUMNO=A.ID_ALUMNO AND EG.ID_ESTADO=1
--///
ORDER BY B.APELLIDO_PATERNO || ' ' || B.APELLIDO_MATERNO || ' ' || B.PRIMER_NOMBRE || ' ' ||
B.SEGUNDO_NOMBRE,EG.ID_SOLICITUD
;
ELSIF PV_OPCION='CEDULA' THEN--POR C.I.
186

OPEN PC_ALUMNOS FOR


SELECT A.ID_ALUMNO,B.CEDULA,A.CODIGO_ESTUDIANTIL,B.APELLIDO_PATERNO || ' ' || B.APELLIDO_MATERNO || ' ' ||
B.PRIMER_NOMBRE || ' ' || B.SEGUNDO_NOMBRE,C.DESCRIPCION,EG.ID_SOLICITUD
FROM ALUMNO A,PERSONA B,ALUMNO_CATEGORIA C,ADM_EXAMEN_GRACIA EG
WHERE A.ID_PERSONA=B.ID_PERSONA AND A.ID_ALUMNO_CATEGORIA=C.ID_ALUMNO_CATEGORIA
AND A.ID_ESTADO=1 AND B.CEDULA LIKE TRIM(PN_CEDULA) || '%'
--MODIFICADO A PARTIR DE GET_ALUMNOS
AND EG.ID_ALUMNO=A.ID_ALUMNO AND EG.ID_ESTADO=1
--///
ORDER BY B.APELLIDO_PATERNO || ' ' || B.APELLIDO_MATERNO || ' ' || B.PRIMER_NOMBRE || ' ' ||
B.SEGUNDO_NOMBRE,EG.ID_SOLICITUD
;
ELSIF PV_OPCION='CODIGO' THEN--POR CODIGO ESTUDIANTIL
OPEN PC_ALUMNOS FOR
SELECT A.ID_ALUMNO,B.CEDULA,A.CODIGO_ESTUDIANTIL,B.APELLIDO_PATERNO || ' ' || B.APELLIDO_MATERNO || ' ' ||
B.PRIMER_NOMBRE || ' ' || B.SEGUNDO_NOMBRE,C.DESCRIPCION,EG.ID_SOLICITUD
FROM ALUMNO A,PERSONA B,ALUMNO_CATEGORIA C,ADM_EXAMEN_GRACIA EG
WHERE A.ID_PERSONA=B.ID_PERSONA AND A.ID_ALUMNO_CATEGORIA=C.ID_ALUMNO_CATEGORIA
AND A.ID_ESTADO=1 AND A.CODIGO_ESTUDIANTIL LIKE '%' || PV_COD_ESTUDIANTIL || '%'
--MODIFICADO A PARTIR DE GET_ALUMNOS
AND EG.ID_ALUMNO=A.ID_ALUMNO AND EG.ID_ESTADO=1
--///
ORDER BY B.APELLIDO_PATERNO || ' ' || B.APELLIDO_MATERNO || ' ' || B.PRIMER_NOMBRE || ' ' ||
B.SEGUNDO_NOMBRE,EG.ID_SOLICITUD
;
ELSIF PV_OPCION='NOMBRES' THEN--POR NOMBRES

OPEN PC_ALUMNOS FOR


SELECT A.ID_ALUMNO,B.CEDULA,A.CODIGO_ESTUDIANTIL,NVL(B.APELLIDO_PATERNO,'') || ' ' ||
NVL(B.APELLIDO_MATERNO,'') || ' ' || NVL(B.PRIMER_NOMBRE,'') || ' ' ||
NVL(B.SEGUNDO_NOMBRE,''),C.DESCRIPCION,EG.ID_SOLICITUD
FROM ALUMNO A,PERSONA B,ALUMNO_CATEGORIA C,ADM_EXAMEN_GRACIA EG
WHERE A.ID_PERSONA=B.ID_PERSONA AND A.ID_ALUMNO_CATEGORIA=C.ID_ALUMNO_CATEGORIA
AND A.ID_ESTADO=1
AND TRIM(NVL(B.APELLIDO_PATERNO,' ')) LIKE TRIM(NVL(PV_APE_PATERNO,' ')) || '%'
AND TRIM(NVL(B.APELLIDO_MATERNO,' ')) LIKE TRIM(NVL(PV_APE_MATERNO,' ')) || '%'
AND TRIM(NVL(B.PRIMER_NOMBRE,' ')) LIKE TRIM(NVL(PV_PRIMER_NOMBRE,' ')) || '%'
AND TRIM(NVL(B.SEGUNDO_NOMBRE,' ')) LIKE TRIM(NVL(PV_SEG_NOMBRE,' ')) || '%'
--MODIFICADO A PARTIR DE GET_ALUMNOS
AND EG.ID_ALUMNO=A.ID_ALUMNO AND EG.ID_ESTADO=1
--///

ORDER BY NVL(B.APELLIDO_PATERNO,'') || ' ' || NVL(B.APELLIDO_MATERNO,'') || ' ' || NVL(B.PRIMER_NOMBRE,'') || ' ' ||
NVL(B.SEGUNDO_NOMBRE,''),EG.ID_SOLICITUD
;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
PV_ERROR:='NO EXISTEN DATOS QUE MOSTRAR';
WHEN OTHERS THEN
PV_ERROR:=SQLERRM;
END;

-----------GET_MATERIAS_GRACIA_PEN:>>EXTRAE LAS MATERIAS QUE SE VAN A TOMAR EN UN EXAMEN DE GRACIA

PROCEDURE GET_MATERIAS_GRACIA_PEN(PN_ID_SOLICITUD NUMBER,PN_ID_ALUMNO


NUMBER,PC_ALUMNO_MATERIAS OUT r_cursor,PV_ERROR OUT VARCHAR2)

IS

BEGIN
OPEN PC_ALUMNO_MATERIAS FOR

SELECT EG.ID_MATERIA,M.CODIGO_MATERIA,M.DESCRIPCION NOMBRE_MATERIA,'0'


VEZ_TOMADA,ID_SOLICITUD,FECHA_INGRESO
FROM ADM_EXAMEN_GRACIA EG,MATERIA M
WHERE EG.ID_ESTADO=1 AND EG.ID_MATERIA=M.ID_MATERIA AND EG.ID_ALUMNO=PN_ID_ALUMNO
AND EG.ID_SOLICITUD=PN_ID_SOLICITUD;
EXCEPTION
WHEN OTHERS THEN
PV_ERROR:=SQLERRM;
END;
187

--CREADO PR GRUPO 9 : LUNES 18 DE MAYO DEL 2009 11:54 AM.


--MUESTRA LOS ALUMNOS INSCRITOS PERO QUE AUN NO SE LES HA EMITIDO
--LA ORDEN DE PAGO RESPECTIVA.
PROCEDURE PR_ALUMNOS_INSCRITOS_SOP(PN_ID_PERIODO_LECTIVO IN NUMBER,PV_FECHA_DESDE IN
VARCHAR2,PV_FECHA_HASTA IN VARCHAR2,PC_INSCRITOS OUT R_CURSOR,LV_RESPUESTA OUT VARCHAR2)
IS
--LV_FECHA_DESDE DATE ;
--LV_FECHA_HASTA DATE;
BEGIN
--LV_FECHA_DESDE:=TO_DATE(PV_FECHA_DESDE,'DD/MM/YYYY');
--LV_FECHA_HASTA:=TO_DATE(PV_FECHA_HASTA,'DD/MM/YYYY');

OPEN PC_INSCRITOS FOR


SELECT distinct
I.ID_ALUMNO,A.CODIGO_ESTUDIANTIL,GET_NOMBRE_ALUMNO(I.ID_ALUMNO)ESTUDIANTE,TO_CHAR(I.FECHA_INSCRIPC
ION,'DD/MM/YYYY')FECHA_INS,SUBSTR(ID.OBSERVACION,1,INSTR(ID.OBSERVACION,'-',1)-1)INSCRIPCION
FROM INSCRIPCION I,INSCRIPCION_DETALLE ID,ALUMNO A
WHERE I.ID_INSCRIPCION=ID.ID_INSCRIPCION
AND I.ID_ESTADO=1 AND ID.ID_ESTADO=1
AND ID.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND I.ID_ALUMNO NOT IN(SELECT ID_ALUMNO
FROM ORDEN_PAGO
WHERE ID_ESTADO=1 AND ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO

)
AND A.ID_ALUMNO=I.ID_ALUMNO
AND UPPER(SUBSTR(ID.OBSERVACION,1,INSTR(ID.OBSERVACION,'-',1)-1)) <>UPPER('EXAMEN DE GRACIA')
AND TO_DATE(TO_CHAR(I.FECHA_INSCRIPCION,'DD/MM/YYYY'),'DD/MM/YYYY') BETWEEN
TO_DATE(PV_FECHA_DESDE,'DD/MM/YYYY') AND TO_DATE(PV_FECHA_HASTA,'DD/MM/YYYY')
--and TO_DATE(I.FECHA_INSCRIPCION)<=TO_DATE(PV_FECHA_HASTA)
ORDER BY ESTUDIANTE,FECHA_INS;

EXCEPTION
WHEN NO_DATA_FOUND THEN
LV_RESPUESTA:='NO EXISTE ALUMNOS INSCRITOS EN EN RANGO DE FECHAS DESDE: ' || PV_FECHA_DESDE || ' HASTA: '
|| PV_FECHA_HASTA;
WHEN OTHERS THEN
LV_RESPUESTA:=SQLERRM;
END;
--CREADO POR GRUPO 9 --20/05/2009 -- 10:45
FUNCTION FU_DATOS_INS_EMAIL(PN_ID_ALUMNO NUMBER,PN_ID_PERIODO_LECTIVO NUMBER)RETURN VARCHAR2
IS
LV_CADENA_CONTENIDO VARCHAR2(7000):='';
LV_CAD_REMPLAZO VARCHAR2(100):=' ';
LV_CAD_REMPLAZO2 VARCHAR2(100):=' ';
CURSOR CUR_INSCRIPCION IS
select 1 ORDEN,'______________' CODIGO_MATERIA,'______________________________'
MATERIA,'______________'PARALELO ,'______________' VEZ_TOMADA
from DUAL
UNION
select 2 ORDEN,'COD. MATERIA' CODIGO_MATERIA,' MATERIA ' MATERIA,'PARALELO'PARALELO ,'VEZ TOMADA'
VEZ_TOMADA
from DUAL
UNION
select 3 ORDEN,'______________' CODIGO_MATERIA,'______________________________'
MATERIA,'______________'PARALELO ,'______________' VEZ_TOMADA
from DUAL
UNION
select 4
ORDEN,M.CODIGO_MATERIA,GET_NOMBRE_MATERIA(id.id_materia)MATERIA,GET_NOMBRE_PARALELO(id.id_paralelo)PAR
ALELO ,TO_CHAR(id.vez_tomada) VEZ_TOMADA
from inscripcion i,inscripcion_detalle id,MATERIA M
where i.id_inscripcion=id.id_inscripcion
and i.id_estado=1 and id.id_estado=1
and i.id_alumno=PN_ID_ALUMNO AND ID.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND M.ID_MATERIA=ID.ID_MATERIA
UNION
select 5 ORDEN,'______________' CODIGO_MATERIA,'______________________________'
MATERIA,'______________'PARALELO ,'______________' VEZ_TOMADA
from DUAL
ORDER BY ORDEN;

BEGIN
FOR REG IN CUR_INSCRIPCION LOOP
LV_CADENA_CONTENIDO:=LV_CADENA_CONTENIDO ||'| '||
REPLACE(REG.CODIGO_MATERIA,REG.CODIGO_MATERIA,REG.CODIGO_MATERIA
188

||SUBSTR(LV_CAD_REMPLAZO2,1,LENGTH(LV_CAD_REMPLAZO2)- LENGTH(REG.CODIGO_MATERIA) )) || '| ' ||


REPLACE(REG.MATERIA,REG.MATERIA,REG.MATERIA ||SUBSTR(LV_CAD_REMPLAZO,1,LENGTH(LV_CAD_REMPLAZO)-
LENGTH(REG.MATERIA) )) || '| ' || REPLACE(REG.PARALELO,REG.PARALELO,REG.PARALELO
||SUBSTR(LV_CAD_REMPLAZO2,1,LENGTH(LV_CAD_REMPLAZO2)- LENGTH(REG.PARALELO) )) || '| ' ||
REPLACE(REG.VEZ_TOMADA,REG.VEZ_TOMADA,REG.VEZ_TOMADA
||SUBSTR(LV_CAD_REMPLAZO2,1,LENGTH(LV_CAD_REMPLAZO2)- LENGTH(REG.VEZ_TOMADA) ))|| '|' || CHR(13);
END LOOP;
RETURN LV_CADENA_CONTENIDO;
EXCEPTION
WHEN OTHERS THEN
RETURN SQLERRM;
END;

----CREADO POR GRUPO 9 --20/05/2009 -- 11:10


--RETORNA EL EMAIL DEL ALUMNO
FUNCTION FU_MAIL_ALUMNO(PN_ID_ALUMNO NUMBER)RETURN VARCHAR2
IS
LV_EMAIL VARCHAR2(500);
BEGIN
select distinct p.email INTO LV_EMAIL
from alumno a,persona p
where a.id_persona=p.id_persona
and a.id_estado=1 and p.id_estado=1
and a.id_alumno=PN_ID_ALUMNO;
RETURN LV_EMAIL;
EXCEPTION
WHEN OTHERS THEN
RETURN SQLERRM;
END;

---PR_GRABA_PROFESOR_ASIGNACION PARA GRABAR EN TABLA PROFESOR ASIGNACION


--CREADO POR GRUPO 9 A LAS 17:51 DEL 21/05/2009
PROCEDURE PR_GRABA_PROFESOR_ASIGNACION(PN_ID_EMPLEADO NUMBER,PN_ID_PERIODO_LECTIVO
NUMBER,PN_ID_PARALELO_MATERIA NUMBER,PV_USUARIO_REGISTRO VARCHAR2,LV_RESULTADO OUT VARCHAR2)
IS
LN_EXISTE NUMBER(3):=0;
BEGIN
SELECT COUNT(*) INTO LN_EXISTE
FROM PROFESOR_ASIGNACION PA
WHERE PA.ID_ESTADO=1 AND PA.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND PA.ID_PARALELO_MATERIA=PN_ID_PARALELO_MATERIA;

IF LN_EXISTE=0 THEN--SI ESE PARALELO_MATERIA NO HA SIDO ASIGNADO


--A OTRO PROFESOR DEBIDO QUE SOLO SE PUEDE ASIGNA A UNO SOLAMENTE.
INSERT INTO
PROFESOR_ASIGNACION(ID_PROFESOR_ASIGNACION,ID_EMPLEADO,ID_PERIODO_LECTIVO,ID_PARALELO_MATERIA,F
ECHA_REGISTRO,USUARIO_REGISTRO,ID_ESTADO)
SELECT NVL(MAX(ID_PROFESOR_ASIGNACION),0)+1
,PN_ID_EMPLEADO,PN_ID_PERIODO_LECTIVO,PN_ID_PARALELO_MATERIA,CURRENT_DATE,PV_USUARIO_REGISTRO,1
FROM PROFESOR_ASIGNACION;
LV_RESULTADO:='SE HA GRABADO EXITOSAMENTE LA/S MATERIA/S Y PARALELO/S AL PROFESOR ELEGIDO';
ELSE
LV_RESULTADO:='NO PUEDE GRABARSE DEBIDO A QUE EL MATERIA Y PARALELO YA HA SIDO ASIGNADO A OTRO
PROFESOR';
END IF;
EXCEPTION
WHEN OTHERS THEN
LV_RESULTADO:=SQLERRM;

END;
--ANULA PROFESOR_ASIGNACION 22 DE MAYO 09 11:41 AM
PROCEDURE PR_ANULA_PROFESOR_ASIGNA(PN_ID_PROFESOR_ASIGNACION NUMBER,PV_RESULTADO OUT
VARCHAR2,PV_USUARIO VARCHAR2)
IS
LN_REG_ACT NUMBER(5);
BEGIN
SELECT COUNT(*)INTO LN_REG_ACT
FROM PROFESOR_ASIGNACION
WHERE ID_PROFESOR_ASIGNACION=PN_ID_PROFESOR_ASIGNACION
AND ID_ESTADO=1;
IF LN_REG_ACT>0 THEN
UPDATE PROFESOR_ASIGNACION SET
ID_ESTADO=3,FECHA_MODIFICACION=CURRENT_DATE,USUARIO_MODIFICACION=PV_USUARIO
WHERE ID_PROFESOR_ASIGNACION=PN_ID_PROFESOR_ASIGNACION
AND ID_ESTADO=1;
END IF;
189

IF LN_REG_ACT>0 THEN
PV_RESULTADO:='SE ANULÓ EXITOSAMENTE LAS MATERIAS DEL PROFESOR SELECCIONADO';
ELSE
PV_RESULTADO:='NO SE HA ENCONTRADO NADA QUE ACTUALIZAR';
END IF;
EXCEPTION
WHEN OTHERS THEN
PV_RESULTADO:=SQLERRM;
END;

---PR_GET_MATERIAS_SIN_PARALELO
--CREADA 25/05/2009 ALA LAS 19:59
PROCEDURE PR_GET_MATERIAS_SIN_PARALELO(PN_ID_PERIODO_LECTIVO NUMBER,PN_ID_SEMESTRE
NUMBER,PN_ID_PARALELO NUMBER,LC_MATERIAS OUT R_CURSOR,PV_RESPUESTA OUT VARCHAR2,PV_TIPO_MAT
VARCHAR2)
IS
BEGIN
--1
IF PN_ID_SEMESTRE>0 AND PV_TIPO_MAT='CURR' THEN
OPEN LC_MATERIAS FOR
select PEMA.ID_MATERIA,MAT.CODIGO_MATERIA,MAT.DESCRIPCION MATERIA
from PERIODO_MATERIA PEMA,MATERIA MAT
WHERE PEMA.ID_ESTADO=1 AND PEMA.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND PEMA.ID_MATERIA IN(SELECT B.ID_MATERIA
FROM PENSUM_MALLA A,MALLA_DETALLE B
WHERE A.ID_PENSUM_MALLA=B.ID_PENSUM_MALLA AND B.ID_ESTADO=1
AND B.ID_SEMESTRE=PN_ID_SEMESTRE
)
AND PEMA.ID_MATERIA NOT IN(
select PM.ID_MATERIA
from PARALELO_MATERIA PM,MATERIA M,PARALELO P,PARALELO_DESCRIPCION PD
WHERE PM.ID_MATERIA=M.ID_MATERIA
AND PM.ID_ESTADO=1 AND M.ID_ESTADO=1
AND PM.ID_PARALELO=P.ID_PARALELO
AND P.DESCRIPCION=PD.DESCRIPCION AND P.ID_ESTADO=1
AND PM.ID_MATERIA IN(SELECT ID_MATERIA FROM PERIODO_MATERIA WHERE ID_ESTADO=1 AND
ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO)
AND PD.SEMESTRE=PN_ID_SEMESTRE AND PM.ID_PARALELO=PN_ID_PARALELO
)
AND PEMA.ID_MATERIA=MAT.ID_MATERIA AND MAT.ID_TIPO_MATERIA NOT IN(4,5)
ORDER BY MAT.CODIGO_MATERIA
;
--2--
ELSIF PN_ID_SEMESTRE>0 AND PV_TIPO_MAT='OPT' THEN
OPEN LC_MATERIAS FOR
select PEMA.ID_MATERIA,MAT.CODIGO_MATERIA,MAT.DESCRIPCION MATERIA
from PERIODO_MATERIA PEMA,MATERIA MAT
WHERE PEMA.ID_ESTADO=1 AND PEMA.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND PEMA.ID_MATERIA IN(SELECT B.ID_MATERIA
FROM PENSUM_MALLA A,MALLA_DETALLE B
WHERE A.ID_PENSUM_MALLA=B.ID_PENSUM_MALLA AND B.ID_ESTADO=1
AND B.ID_SEMESTRE=PN_ID_SEMESTRE
)
AND PEMA.ID_MATERIA NOT IN(
select PM.ID_MATERIA
from PARALELO_MATERIA PM,MATERIA M,PARALELO P,PARALELO_DESCRIPCION PD
WHERE PM.ID_MATERIA=M.ID_MATERIA
AND PM.ID_ESTADO=1 AND M.ID_ESTADO=1
AND PM.ID_PARALELO=P.ID_PARALELO
AND P.DESCRIPCION=PD.DESCRIPCION AND P.ID_ESTADO=1
AND PM.ID_MATERIA IN(SELECT ID_MATERIA FROM PERIODO_MATERIA WHERE ID_ESTADO=1 AND
ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO)
AND PD.SEMESTRE=PN_ID_SEMESTRE AND PM.ID_PARALELO=PN_ID_PARALELO
)
AND PEMA.ID_MATERIA=MAT.ID_MATERIA AND MAT.ID_TIPO_MATERIA IN(4,5)
ORDER BY MAT.CODIGO_MATERIA
;
--3
ELSIF PN_ID_SEMESTRE=0 AND PV_TIPO_MAT='CURR' THEN--ESTO ES PARA PARALELOS ESPECIALES
OPEN LC_MATERIAS FOR
select PEMA.ID_MATERIA,MAT.CODIGO_MATERIA,MAT.DESCRIPCION MATERIA
from PERIODO_MATERIA PEMA,MATERIA MAT
WHERE PEMA.ID_ESTADO=1 AND PEMA.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND PEMA.ID_MATERIA IN(SELECT B.ID_MATERIA
FROM PENSUM_MALLA A,MALLA_DETALLE B
WHERE A.ID_PENSUM_MALLA=B.ID_PENSUM_MALLA AND B.ID_ESTADO=1
190

)
AND PEMA.ID_MATERIA NOT IN(
select PM.ID_MATERIA
from PARALELO_MATERIA PM,MATERIA M,PARALELO P,PARALELO_DESCRIPCION PD
WHERE PM.ID_MATERIA=M.ID_MATERIA
AND PM.ID_ESTADO=1 AND M.ID_ESTADO=1
AND PM.ID_PARALELO=P.ID_PARALELO
AND P.DESCRIPCION=PD.DESCRIPCION AND P.ID_ESTADO=1
AND PM.ID_MATERIA IN(SELECT ID_MATERIA FROM PERIODO_MATERIA WHERE ID_ESTADO=1 AND
ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO)
AND PM.ID_PARALELO=PN_ID_PARALELO
)

AND PEMA.ID_MATERIA=MAT.ID_MATERIA AND MAT.ID_TIPO_MATERIA NOT IN(4,5)


ORDER BY MAT.CODIGO_MATERIA
;
--4
ELSIF PN_ID_SEMESTRE=0 AND PV_TIPO_MAT='OPT' THEN--ESTO ES PARA PARALELOS ESPECIALES
OPEN LC_MATERIAS FOR
select PEMA.ID_MATERIA,MAT.CODIGO_MATERIA,MAT.DESCRIPCION MATERIA
from PERIODO_MATERIA PEMA,MATERIA MAT
WHERE PEMA.ID_ESTADO=1 AND PEMA.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND PEMA.ID_MATERIA IN(SELECT B.ID_MATERIA
FROM PENSUM_MALLA A,MALLA_DETALLE B
WHERE A.ID_PENSUM_MALLA=B.ID_PENSUM_MALLA AND B.ID_ESTADO=1

)
AND PEMA.ID_MATERIA NOT IN(
select PM.ID_MATERIA
from PARALELO_MATERIA PM,MATERIA M,PARALELO P,PARALELO_DESCRIPCION PD
WHERE PM.ID_MATERIA=M.ID_MATERIA
AND PM.ID_ESTADO=1 AND M.ID_ESTADO=1
AND PM.ID_PARALELO=P.ID_PARALELO
AND P.DESCRIPCION=PD.DESCRIPCION AND P.ID_ESTADO=1
AND PM.ID_MATERIA IN(SELECT ID_MATERIA FROM PERIODO_MATERIA WHERE ID_ESTADO=1 AND
ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO)
AND PM.ID_PARALELO=PN_ID_PARALELO
)

AND PEMA.ID_MATERIA=MAT.ID_MATERIA AND MAT.ID_TIPO_MATERIA IN(4,5)


ORDER BY MAT.CODIGO_MATERIA
;

END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
PV_RESPUESTA:='NO SE HAN ENCONTRADO MATERIAS PARA EL PARALELO: ' ||
GET_NOMBRE_PARALELO(PN_ID_PARALELO);
WHEN OTHERS THEN
PV_RESPUESTA :=SQLERRM;
END;
--PARA EXTRAER LOS PARALELOS CREADOS 25/05/2009 23:52
PROCEDURE PR_PARALELOS_CREADOS(PN_ID_PERIODO_LECTIVO NUMBER,PN_SEMESTRE NUMBER,PC_PARALELO
OUT R_CURSOR)
IS
BEGIN
OPEN PC_PARALELO FOR
SELECT DISTINCT P.ID_PARALELO,P.DESCRIPCION
FROM PARALELO P,PARALELO_DESCRIPCION PD
WHERE P.DESCRIPCION=PD.DESCRIPCION AND P.ID_ESTADO=1
AND PD.ID_ESTADO=1 AND P.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND PD.SEMESTRE=PN_SEMESTRE;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
--CREA UN NUEVO PERIODO_LECTIVO
PROCEDURE PR_NEW_PERIODO_LECTIVO(PN_ID_DURACION NUMBER,PN_ANIO NUMBER,PV_CICLO
VARCHAR2,PD_FECHA_INI_PROG DATE,PD_FECHA_FIN_PROG DATE,PV_DESCRIPCION VARCHAR2,PV_OBSERVACION
VARCHAR2,LV_RESULTADO OUT VARCHAR2)
IS
LN_EXISTE_PARALELO NUMBER(4);

BEGIN
191

SELECT COUNT(*)INTO LN_EXISTE_PARALELO


FROM PERIODO_LECTIVO
WHERE ANIO=PN_ANIO AND CICLO=PV_CICLO AND ID_ESTADO IN(1,2);
--ACTUALIZA TODOS LOS ESTADOS DE LOS PERIODOS LECTIVOS
IF LN_EXISTE_PARALELO=0 THEN
UPDATE PERIODO_LECTIVO SET ID_ESTADO=2 WHERE ID_ESTADO=1;
INSERT INTO
PERIODO_LECTIVO(ID_PERIODO_LECTIVO,ID_DURACION_PERIODO,ANIO,CICLO,FECHA_INICIO_PROGRAMADA,FECHA_F
IN_PROGRAMADA,FECHA_INICIO_REAL,FECHA_FIN_REAL,ID_ESTADO,DESCRIPCION,FECHA_CREACION,OBSERVACION)
SELECT NVL(MAX(ID_PERIODO_LECTIVO),0)+1
,PN_ID_DURACION,PN_ANIO,PV_CICLO,PD_FECHA_INI_PROG,PD_FECHA_FIN_PROG,PD_FECHA_INI_PROG,PD_FECHA_F
IN_PROG,1,NVL(PV_DESCRIPCION,''),CURRENT_DATE,NVL(PV_OBSERVACION,'')
FROM PERIODO_LECTIVO;
LV_RESULTADO:='SE HA CREADO EXITOSAMENTE EL PERIODO LECTIVO';
ELSE
LV_RESULTADO:='NO SE PUEDE GRABAR PERIODO LECTIVO YA QUE ESTE AÑO Y CICLO YA FUERON USADOS
ANTERIORMENTE';
END IF;
EXCEPTION
WHEN OTHERS THEN
LV_RESULTADO:=SQLERRM;
END;

/*--ANULAR ORDNES DE PAGO


PROCEDURE ANULA_ORDEN_PAGO(
IS
BEGIN
IF
END;*/

--RETORNA EL NUMERO DE EXMENES DE GRACOA REPROBADOS ALUMNO


--GRUPO 9 3 DE JUNIO 09 18:40
FUNCTION FU_CANT_GRACIA_REPROBADOS(PN_ID_ALUMNO NUMBER)RETURN NUMBER
IS
LN_CANTIDAD_REP NUMBER(3);
BEGIN
SELECT SUM(CANTIDAD)CANT_REP_GRACIA INTO LN_CANTIDAD_REP
FROM
(
SELECT COUNT(*)CANTIDAD
FROM HISTORIAL_NOTAS
WHERE ID_ESTADO=1 AND ID_ALUMNO=PN_ID_ALUMNO AND NVL(EX_GRACIA,0) >0 AND NVL(EX_GRACIA,0)<7
UNION
SELECT COUNT(*)CANTIDAD
FROM NOTAS
WHERE NVL(NOTA_GRACIA,0)>0 AND NVL(NOTA_GRACIA,0)<7
AND ID_ALUMNO=PN_ID_ALUMNO
)
;
RETURN LN_CANTIDAD_REP;
EXCEPTION
WHEN OTHERS THEN
RETURN 0;
END;
--GET_NIVEL_MATERIA CREADO EL DOMINGO 7 DE JUNIO DEL 2009 A
--LAS 11:12 AM
FUNCTION GET_NIVEL_MATERIA(PN_ID_MATERIA NUMBER)RETURN NUMBER
IS
LN_SEMESTRE NUMBER(5);
BEGIN
SELECT distinct MD.ID_SEMESTRE INTO LN_SEMESTRE
FROM MATERIA M,MALLA_DETALLE MD
WHERE M.ID_MATERIA=MD.ID_MATERIA
AND M.ID_ESTADO=1 AND MD.ID_ESTADO=1
AND MD.ID_MATERIA=PN_ID_MATERIA;

RETURN NVL(LN_SEMESTRE,0);

END;

--GET_MALLA_MATERIA CREADO 10 DE JUNIO DEL 2009


FUNCTION GET_MALLA_MATERIA(PN_ID_MATERIA number)return number
is
LN_MALLA NUMBER(2):=0;
begin
SELECT DISTINCT(ID_PENSUM_MALLA) INTO LN_MALLA
192

FROM MALLA_DETALLE
WHERE ID_ESTADO=1 AND ID_MATERIA=PN_ID_MATERIA AND ROWNUM=1;
RETURN NVL(LN_MALLA,0);
end;

--CUENTA EL NUMERO DE VECES QUE UNA MATERIA HA SIDO ANULADA


--POR ALUMNO EN EL PERIODO_LECTIVO_VIGENTE.
--CREADA POR GRUPO 9 --- MARTES 16 DE JUNIO DE,2009 A LAS 11:38 AM
FUNCTION GET_VEZ_ANULADA_MATERIA(PN_ID_PERIODO_LECTIVO NUMBER,PN_ID_MATERIA NUMBER,PN_ID_ALUMNO
NUMBER)RETURN NUMBER
IS
LN_VECES_FUE_ANULADA NUMBER(2):=0;
BEGIN
SELECT COUNT(*) INTO LN_VECES_FUE_ANULADA
FROM INSCRIPCION I,INSCRIPCION_DETALLE ID
WHERE I.ID_INSCRIPCION=ID.ID_INSCRIPCION AND ID.ID_ESTADO=3
AND ID.ID_MATERIA=PN_ID_MATERIA AND ID_ALUMNO=PN_ID_ALUMNO AND
ID.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO;

RETURN LN_VECES_FUE_ANULADA;
END;
--GET_VECES_INSCRIPCION CUENTA LAS VECES QUE UN ALUMNO HA SIDO INSCRITO EN
--PERIODO VIGENTE INCLUIDA INSCRIPCIONES ACTIVAS Y ANULADAS
--GRUPO 9 16/06/2009 13:00 PM
FUNCTION GET_VECES_INSCRIPCION(PN_ID_PERIODO_LECTIVO NUMBER,PN_ID_ALUMNO NUMBER)RETURN NUMBER
IS
LN_VECES_FUE_ANULADA NUMBER(2);
BEGIN
SELECT COUNT(DISTINCT I.ID_INSCRIPCION) INTO LN_VECES_FUE_ANULADA
FROM INSCRIPCION I,INSCRIPCION_DETALLE ID
WHERE I.ID_INSCRIPCION=ID.ID_INSCRIPCION
AND I.ID_ALUMNO=PN_ID_ALUMNO AND ID.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
;

RETURN LN_VECES_FUE_ANULADA;
END;
---VECES QUE UN PARALELO SE MODIFICO EN UNA INSCRIPCION Y EN UNA MATERIA
--GRUPO 9 16/06/2009 14:15PM
FUNCTION GET_VEZ_MODIFICADO_PARALELO(PN_ID_PERIODO_LECTIVO NUMBER,PN_ID_MATERIA
NUMBER,PN_ID_ALUMNO NUMBER)RETURN NUMBER
IS
LN_VECES_MOD_PARALELO NUMBER(2);
BEGIN
SELECT COUNT(DISTINCT ID.ID_PARALELO) -1 INTO LN_VECES_MOD_PARALELO
FROM INSCRIPCION I,INSCRIPCION_DETALLE ID
WHERE I.ID_INSCRIPCION=ID.ID_INSCRIPCION AND
I.ID_ALUMNO=PN_ID_ALUMNO AND ID.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND
ID.ID_MATERIA=PN_ID_MATERIA
;

RETURN LN_VECES_MOD_PARALELO;
END;
---GET_VEZ_INSCRITA_MATERIA
--MUESTRA LAS VECES QUE UNA MATERIA FUE INSCRITA POR CADA INSCRIPCION DEL
--PERIODO LECTIVO VIGENTE
--CREADO POR: GRUPO 9
--16/06/2009 A LAS 18:11 PM.
FUNCTION GET_VEZ_INSCRITA_MATERIA(PN_ID_PERIODO_LECTIVO NUMBER,PN_ID_MATERIA NUMBER,PN_ID_ALUMNO
NUMBER)RETURN NUMBER
IS
LN_VECES_INS_MAT NUMBER(2);
BEGIN
SELECT COUNT(DISTINCT ID.ID_INSCRIPCION_DETALLE) INTO LN_VECES_INS_MAT
FROM INSCRIPCION I,INSCRIPCION_DETALLE ID
WHERE I.ID_INSCRIPCION=ID.ID_INSCRIPCION AND
I.ID_ALUMNO=PN_ID_ALUMNO AND ID.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO AND
ID.ID_MATERIA=PN_ID_MATERIA
--ESTO ES CUANDO CAMBIO PARALELO Y NO DEBE CONTARSE COMO VEZ DE INSCRIPCION
--DE MATERIA
AND ID.HORA_MODIFICACION IS NULL
;

RETURN LN_VECES_INS_MAT;
END GET_VEZ_INSCRITA_MATERIA;

--ACTUALIZA LOS VALORES DE LOS PARAMETROS


193

--CREADO 16/06/2009 A LAS 20:17 PM


PROCEDURE PR_UPDATE_PARAMETRO(PV_VALOR VARCHAR2,PN_ID_PARAMETRO NUMBER,PV_RESULTADO OUT
VARCHAR2)
IS
BEGIN
UPDATE PARAMETROS SET VALOR=PV_VALOR
WHERE ID_ESTADO=1 AND ID_PARAMETRO=PN_ID_PARAMETRO;
PV_RESULTADO:='UPDATE EXITOSO';
EXCEPTION
WHEN OTHERS THEN
PV_RESULTADO:=SQLERRM;
END ;

--PERMITE MOSTRAR LOS RUBROS DE UN ALLUMNO EN PERIODO LECTIVO VIGENTE


--CREADO 17 DE JUNIO DEL 2009 A LAS 15:04 PM
PROCEDURE PR_CUOTAS_ALUMNO(PN_ID_ALUMNO NUMBER,PN_ID_PERIODO_LECTIVO NUMBER ,PC_RUBROS OUT
R_CURSOR)
IS

BEGIN
OPEN PC_RUBROS FOR
SELECT DISTINCT OP.ID_ORDEN_PAGO,OP.CUOTA,
(SELECT IFI.DESCRIPCION FROM INSTITUCION_FINANCIERA IFI , CUENTA_BANCARIA CB WHERE
IFI.ID_INSTITUCION_FINANCIERA=CB.ID_INSTITUCION_FINANCIERA AND CB.ID_CUENTA= OP.ID_CUENTA)BANCO,
(SELECT NUMERO FROM CUENTA_BANCARIA WHERE ID_CUENTA=OP.ID_CUENTA)CUENTA_BANCO,
OP.NUM_RECIBO,TO_CHAR(OP.FECHA_EMISION,'DD/MM/YYYY'),TO_CHAR(OP.FECHA_VENCIMIENTO,'DD/MM/YYYY'),OP.C
ONDICION,OP.VALOR_TOTAL SUBTOTAL,OP.VALOR_DESCUENTO DESCUENTO,OP.VALOR_CUOTA VALOR_FINAL
FROM ORDEN_PAGO OP,ORDEN_PAGO_DETALLE OPD
WHERE OP.ID_ORDEN_PAGO=OPD.ID_ORDEN_PAGO AND ID_ALUMNO=PN_ID_ALUMNO
AND OP.ID_ESTADO=1 AND OPD.ID_ESTADO=1 AND OP.ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
ORDER BY OP.ID_ORDEN_PAGO;

END;

--DEVUELVE UN BOOLEAN INDICANDO SI ALUMNO


--TIENE O NO RUBROS EL PERIODO LECTIVO VIGENTE
--17/06/2009 17:40 PM
FUNCTION FUN_TIENE_RUBROS_ALUMNO(PN_ID_ALUMNO INT ,PN_ID_PERIODO_LECTIVO NUMBER)RETURN BOOLEAN
IS
LN_ALUMNO_TIENE_RUBROS NUMBER(2);
BEGIN
SELECT COUNT(*) INTO LN_ALUMNO_TIENE_RUBROS
FROM ORDEN_PAGO
WHERE ID_ESTADO=1 AND ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO
AND ID_ALUMNO=PN_ID_ALUMNO;

IF LN_ALUMNO_TIENE_RUBROS>0 THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
END FUN_TIENE_RUBROS_ALUMNO;
--PARA ANULACION DE ORDNES DE PAGO DE UN ALUMNO
--18 DE JUNIO DEL 2009 5:29 AM.
PROCEDURE PR_ANULA_ORDEN_PAGO(PN_ID_ORDEN_PAGO NUMBER,PN_ID_ALUMNO
NUMBER,PN_ID_PERIODO_LECTIVO NUMBER,PV_RESULTADO OUT VARCHAR2)
IS
LN_VECES_ANULADO_RUBROS NUMBER(4,2):=0.00;
LN_VECES_ANULADO_RUBROS_PERMI NUMBER(2):=0;
LN_NUMERO_CUOTAS NUMBER(2):=0;
LV_RESULTADO VARCHAR2(200):='SI';
LV_CONDICION VARCHAR2(10);
LV_CUOTA_PAGADA NUMBER(2):=0;
LE_ERROR EXCEPTION;
BEGIN
--OBTIENE EL NUMERO DE CUOTAS DEL PERIODO_LECTIVO VIGENTE
SELECT NVL(MAX(N_CUOTA),0)INTO LN_NUMERO_CUOTAS
FROM TASA_CUOTA
WHERE ID_ESTADO=1 AND ID_PERIODO_LECTIVO=PN_ID_PERIODO_LECTIVO;
IF LN_NUMERO_CUOTAS=0 THEN
LV_RESULTADO:='NO EXISTEN ASIGNADOS LOS PORCENTAJES DE LAS CUOTAS EN PERIODO LECTIVO VIGENTE,NO
SE PUEDE ANULAR';
RAISE LE_ERROR;
194

END IF;

--VECES ANULADA RUBROS A ALUMNO


SELECT COUNT (DISTINCT ID_ORDEN_PAGO)/ LN_NUMERO_CUOTAS INTO LN_VECES_ANULADO_RUBROS
FROM ORDEN_PAGO WHERE ID_ALUMNO=PN_ID_ALUMNO AND ID_ESTADO=3;
--
--EXTRAE LA CONDICION PAG O PEN PARA VER SI ALUMNO YA HA PAGADO O NO
SELECT CONDICION,CUOTA INTO LV_CONDICION ,LV_CUOTA_PAGADA
FROM ORDEN_PAGO
WHERE ID_ESTADO=1 AND ID_ORDEN_PAGO=PN_ID_ORDEN_PAGO;
IF LV_CONDICION='PAG' THEN
LV_RESULTADO:=' NO SE PUEDE ANULAR LAS ORDENES DE PAGO DEBIDO A QUE YA ESTÁ CANCELADA/PAGADA LA
CUOTA :'||LV_CUOTA_PAGADA;
RAISE LE_ERROR;
END IF;

LN_VECES_ANULADO_RUBROS_PERMI:=PROCESOS_INSCRIPCION.GET_PARAMETRO('VECES ANULAR ORDEN PAGO',9);


--LA SIGUIENTE FINCION USAMOS PARA VER SI TIENE ALUMNO RUBROS ACTIVOS EN PERIODO_LECTIVO_VIGENTE
IF PROCESOS_INSCRIPCION.FUN_TIENE_RUBROS_ALUMNO(PN_ID_ALUMNO,PN_ID_PERIODO_LECTIVO)=TRUE THEN
IF LN_VECES_ANULADO_RUBROS<LN_VECES_ANULADO_RUBROS_PERMI THEN
UPDATE ORDEN_PAGO_DETALLE SET ID_ESTADO=3 WHERE ID_ORDEN_PAGO=PN_ID_ORDEN_PAGO AND
ID_ESTADO=1;
UPDATE ORDEN_PAGO SET ID_ESTADO=3 WHERE ID_ORDEN_PAGO=PN_ID_ORDEN_PAGO AND ID_ESTADO=1;
ELSE
LV_RESULTADO:='NO SE PUEDE ANULAR ORDENES DE PAGO ACTIVAS DEBIDO A QUE HA SUPERADO HA LLEGADO
AL LÍMITE PERMITIDO QUE ES '|| LN_VECES_ANULADO_RUBROS_PERMI || (CASE LN_VECES_ANULADO_RUBROS_PERMI
WHEN 1 THEN ' VEZ' ELSE ' VECES' END) ;
RAISE LE_ERROR;
END IF;
ELSE
LV_RESULTADO:='NO EXISTEN ORDENES DE PAGO ACTIVAS PARA EL ALUMNO,NO HAY NADA QUE ANULAR';
RAISE LE_ERROR;
END IF;

EXCEPTION
WHEN LE_ERROR THEN
PV_RESULTADO:=LV_RESULTADO;
WHEN OTHERS THEN
PV_RESULTADO:=SQLERRM;
END;

END PROCESOS_INSCRIPCION;-------DEL PAQUETE

También podría gustarte