BIT/IAM-2111 - spBuscarResultadosAlumnoSeriadas
----------------------------INICIO PROCEDIMIENTO ------------------------
IF OBJECT_ID('spBuscarResultadosAlumnoSeriadas', 'P') IS NOT NULL
DROP PROC spBuscarResultadosAlumnoSeriadas
GO
CREATE PROCEDURE [dbo].[spBuscarResultadosAlumnoSeriadas]
@idAsignatura SMALLINT,
@iFolioInscripcion BIGINT,
@idPlanEstudios SMALLINT
/* --------------------------------------------------------------------------------------------------------------
FECHA | AUTOR | DESCRIPCION
15/ago./2017 | Luis Bernal | BIT/IAM-2111 - Se agrega consideración de calificación CUALITATIVA en evaluación ordinaria
--------------------------------------------------------------------------------------------------------------*/
AS
BEGIN
SET NOCOUNT ON;
DECLARE @idAsig SMALLINT,
@iFolioInsc BIGINT,
@idPlanEst SMALLINT;
SET @idAsig=@idAsignatura;
SET @iFolioInsc =@iFolioInscripcion;
SET @idPlanEst= @idPlanEstudios;
--**evaluación
DECLARE @TEvOr TABLE
(
idAsignatura SMALLINT PRIMARY KEY,
idFormEvaluacion SMALLINT,
bTaller BIT,
idEvaluacion SMALLINT,
iOrden TINYINT,
bExtraordinaria BIT,
dMinimaAprobatoria DECIMAL(7, 3)
)
INSERT @TEvOr
SELECT T1.idAsignaturaReq,
T1.idFormEvaluacion,
T3.bTaller,
T2.idEvaluacion,
T2.iOrden,
T2.bExtraordinaria,
T3.dMinimaAprobatoria
FROM (SELECT ser.idAsignaturaReq,
ev.idFormEvaluacion,
MAX(ev.iOrden) AS iOrdenMax
FROM Cat_PlanEstudios planes
INNER JOIN Ctrl_PlanEstudios asigplan
ON planes.idPlanEstudios = @idPlanEst
AND asigplan.idPlanEstudios = planes.idPlanEstudios
INNER JOIN ctrl_seriacionAsignaturas ser
ON ser.idPlanEstudios = planes.idPlanEstudios
AND ser.idAsignatura = @idAsig
AND bSimultanea = 0
AND ser.idAsignaturaReq = asigplan.idAsignatura
INNER JOIN Ctrl_FormEvaluacion ev
ON ev.idFormEvaluacion = CASE
WHEN asigplan.idFormEvaluacion IS NULL THEN planes.idFormEvaluacion
ELSE asigplan.idFormEvaluacion
END
WHERE bExtraordinaria = 0
GROUP BY idAsignaturaReq,
ev.idFormEvaluacion) T1
INNER JOIN Ctrl_FormEvaluacion T2
ON T2.idFormEvaluacion = T1.idFormEvaluacion
AND T2.iOrden = T1.iordenMax
INNER JOIN Cat_FormEvaluacion T3
ON T3.idFormEvaluacion = T1.idFormEvaluacion;
--*******evaluación
DECLARE @idAlumno INT
DECLARE @iNoPeriodo TINYINT
DECLARE @iAnioInicial SMALLINT
DECLARE @iMesInicial TINYINT
SELECT @idAlumno = idAlumno,
@iNoPeriodo = iNoPeriodo,
@iAnioInicial = iAnioInicial,
@iMesInicial = iMesInicial
FROM Ctrl_Inscripciones
INNER JOIN ctrl_periodos
ON Ctrl_Inscripciones.iFolio = @iFolioInsc
AND Ctrl_Inscripciones.iFolioPeriodo = Ctrl_periodos.iFolio
SELECT Cat_Asignaturas.idAsignatura,
sAsignatura,
O.sEvaluacion AS sEvalOrdinaria,
ISNULL(O.dCalificacion, O.dValorNumerico) AS dCalifOrdinaria, -- BIT/IAM-2111
O.iDecimalesCalif AS iDecimalesOrdinaria,
Cat_FormEvaluacion.dMinimaAprobatoria,
E.sEvaluacion AS sEvalExtra,
E.dCalificacion AS dCalifExtra,
E.iDecimalesCalif AS iDecimalesExtra,
eq.dCalificacion AS dCalifEq,
eq.sAbreviatura AS sEstatusEq,
CAST(CASE
WHEN eq.bAprobado IS NULL THEN 0
ELSE eq.bAprobado
END AS BIT) AS bAprobadoEq
FROM Ctrl_SeriacionAsignaturas
INNER JOIN Cat_Asignaturas
ON Ctrl_SeriacionAsignaturas.idAsignatura = @idAsig
AND Cat_Asignaturas.idAsignatura = Ctrl_SeriacionAsignaturas.idAsignaturaReq
AND bSimultanea = 0
AND Ctrl_SeriacionAsignaturas.idPlanestudios = @idPlanEst --limita asignaturas de éste plan
OUTER APPLY (SELECT TOP 1 eq.dCalificacion,
est.sAbreviatura,
est.bAprobado
FROM Ctrl_Equivalencias eq
LEFT JOIN Cat_EstatusEvaluacion est
ON eq.idEstatus IS NOT NULL
AND eq.idEstatus = est.idEstatus
WHERE eq.idAlumno = @idAlumno
AND eq.idAsignatura = Cat_Asignaturas.idAsignatura
AND eq.idPlanEstudios = Ctrl_SeriacionAsignaturas.idPlanEstudios) eq
OUTER APPLY(
--***** ÚLTIMA ORDINARIA
SELECT TOP 1 Ctrl_TrayectoriaAcademica.idAsignatura,
acadet.idEvaluacion,
sNombre AS sEvaluacion,
est.sAbreviatura,
est.dValorNumerico,
est.bAprobado,
acadet.dCalificacion,
iDecimalesCalif
FROM Ctrl_TrayectoriaAcademica
INNER JOIN Ctrl_Inscripciones
ON Ctrl_Inscripciones.idAlumno = @idAlumno
AND Ctrl_Inscripciones.iFolio = Ctrl_TrayectoriaAcademica.iFolioInscripcion
AND Ctrl_TrayectoriaAcademica.idAsignatura = Cat_Asignaturas.idAsignatura
INNER JOIN Ctrl_periodos per
ON Ctrl_Inscripciones.iFolioPeriodo = per.iFolio
AND ( ( per.iAnioInicial = @iAnioInicial
AND per.iMesFinal <= @iMesInicial )
OR ( per.iAnioInicial < @iAnioInicial ) )
INNER JOIN Ctrl_TrayectoriaAcademicaDet acadet
ON Ctrl_TrayectoriaAcademica.iFolio = acadet.iFolioTrayectoria
INNER JOIN @TEvOr tEv
ON tEv.idAsignatura = Ctrl_TrayectoriaAcademica.idAsignatura
AND tEv.idEvaluacion = acadet.idEvaluacion
INNER JOIN Ctrl_FormEvaluacion evOrd
ON acadet.idEvaluacion = evOrd.idEvaluacion
AND evOrd.bExtraordinaria = 0
LEFT JOIN Cat_EstatusEvaluacion est
ON acadet.idEstatus IS NOT NULL
AND est.idEstatus = acadet.idEstatus
ORDER BY iAnioInicial DESC,
iMesInicial DESC,
Ctrl_TrayectoriaAcademica.iOrden DESC) O--***** ÚLTIMA ORDINARIA
OUTER APPLY (
--***** ÚLTIMA EXTRA
SELECT TOP 1 Ctrl_TrayectoriaAcademica.idAsignatura,
Ctrl_TrayectoriaAcademicaDet.idEvaluacion,
sNombre AS sEvaluacion,
evExtra.iOrden,
evExtra.bExtraordinaria,
idEstatus,
dCalificacion,
iDecimalesCalif
FROM Ctrl_TrayectoriaAcademica
INNER JOIN Ctrl_Inscripciones
ON Ctrl_Inscripciones.idAlumno = @idAlumno
AND Ctrl_Inscripciones.iFolio = Ctrl_TrayectoriaAcademica.iFolioInscripcion
AND Ctrl_TrayectoriaAcademica.idAsignatura = Cat_Asignaturas.idAsignatura
INNER JOIN Ctrl_periodos per
ON Ctrl_Inscripciones.iFolioPeriodo = per.iFolio
AND ( ( per.iAnioInicial = @iAnioInicial
AND per.iMesFinal <= @iMesInicial )
OR ( per.iAnioInicial < @iAnioInicial ) )
INNER JOIN Ctrl_TrayectoriaAcademicaDet
ON Ctrl_TrayectoriaAcademica.iFolio = Ctrl_TrayectoriaAcademicaDet.iFolioTrayectoria
INNER JOIN @TEvOr tEv
ON tEv.idAsignatura = Ctrl_TrayectoriaAcademica.idAsignatura
INNER JOIN Ctrl_FormEvaluacion evExtra
ON Ctrl_TrayectoriaAcademicaDet.idEvaluacion = evExtra.idEvaluacion
AND tEv.iOrden < evExtra.iOrden
AND evExtra.bExtraordinaria = 1
ORDER BY
iAnioInicial DESC,
iMesInicial DESC,
Ctrl_TrayectoriaAcademica.iOrden DESC,
evExtra.iOrden DESC) E--***** ÚLTIMA EXTRA
INNER JOIN Ctrl_PlanEstudios
ON Ctrl_PlanEstudios.idPlanEstudios = @idPlanEst
AND Ctrl_PlanEstudios.idAsignatura = Cat_Asignaturas.idAsignatura
INNER JOIN Cat_PlanEstudios
ON Cat_PlanEstudios.idPlanEstudios = @idPlanEst
INNER JOIN Cat_FormEvaluacion
ON CASE
WHEN Ctrl_PlanEstudios.idFormEvaluacion IS NULL THEN Cat_PlanEstudios.idFormEvaluacion
ELSE Ctrl_PlanEstudios.idFormEvaluacion
END = Cat_FormEvaluacion.idFormEvaluacion
ORDER BY sAsignatura
END