FITOMN of AM v3
8/15/2017 - 4:35 PM

BIT/IAM-2111 - spBuscarResultadosAlumnoSeriadas

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