FITOMN of AM v3
4/11/2017 - 3:07 PM

Adición de condición en bloque de concepto OfPeAsigEv para distinguir de manera adecuada asignaturas con misma clave pero en diferente Plan

Adición de condición en bloque de concepto OfPeAsigEv para distinguir de manera adecuada asignaturas con misma clave pero en diferente Plan de Estudios. - BIT/IAM-1444

----------------------------INICIO PROCEDIMIENTO ------------------------
IF OBJECT_ID('spValidaExistenciaEntCombinada', 'P') IS NOT NULL
      DROP PROC spValidaExistenciaEntCombinada
GO

CREATE PROCEDURE spValidaExistenciaEntCombinada
    @sValoresTexto lista4VarcharMed READONLY ,
    @sConcepto VARCHAR(20)
/* --------------------------------------------------------------------------------------------------------------
   FECHA	   |    AUTOR		|	DESCRIPCION
11/Abr/2017    | Luis Bernal	| Se agrega condición, en concepto OfPeAsigEv, para identificar adecuadamente asignaturas con misma clave pero en diferente Plan de Estudios
--------------------------------------------------------------------------------------------------------------*/
AS
    BEGIN 	
        SET NOCOUNT ON; 	

        DECLARE @TRM TABLE
            (
              sTexto VARCHAR(200) ,
              sTexto1 VARCHAR(200) ,
              sTexto2 VARCHAR(200) ,
              sTexto3 VARCHAR(200) ,
              iLlave SMALLINT ,
              iLlave1 SMALLINT ,
              iLlave2 SMALLINT ,
              iLlave3 BIGINT
            );

        IF @sConcepto = 'PlantelPlanOfPer'
            BEGIN
                INSERT  INTO @TRM
                        ( sTexto ,
                          sTexto1 ,
                          sTexto2 ,
                          sTexto3 ,
                          iLlave ,
                          iLlave1 ,
                          iLlave2 ,
                          iLlave3
	                    )
                        SELECT  vals.texto AS sTexto --plantel 	
                                ,
                                vals.texto1 AS sTexto1 --plan 	
                                ,
                                vals.texto2 AS sTexto2--oferta educativa 	
                                ,
                                vals.texto3 AS sTexto3 --periodo 	
                                ,
                                plant.idPlantel AS iLlave ,
                                ofertaPlan.idPlan AS iLlave1 ,
                                ofertaPlan.idOfEduc AS iLlave2 ,
                                per.iFolio AS iLlave3
                        FROM    @sValoresTexto vals
                                LEFT JOIN Cat_Planteles plant ON plant.sNombre COLLATE Latin1_General_CI_AI = vals.texto
                                OUTER APPLY ( SELECT    CAST(Ctrl_PlantelesOfEduc.idPlan AS SMALLINT) AS idPlan ,
                                                        Ctrl_PlantelesOfEduc.idOfEduc
                                              FROM      Cat_OfEduc
                                                        INNER JOIN Ctrl_PlantelesOfEduc ON Ctrl_PlantelesOfEduc.idPlantel = plant.idPlantel
                                                                                           AND Ctrl_PlantelesOfEduc.idOfEduc = Cat_OfEduc.idOfEduc
                                                                                           AND Cat_OfEduc.sAbreviatura COLLATE Latin1_General_CI_AI = vals.texto2
                                                        INNER JOIN Cat_Planes ON Cat_Planes.idPlan = Ctrl_PlantelesOfEduc.idPlan
                                                                                 AND SUBSTRING(Cat_Planes.sPlan, 0, 4) COLLATE Latin1_General_CI_AI = SUBSTRING(vals.texto1,
                                                                                                                                                0, 4)
                                            ) ofertaPlan
                                LEFT JOIN Ctrl_Periodos per ON per.idPlan = ofertaPlan.idPlan
                                                               AND per.sAbPeriodo COLLATE Latin1_General_CI_AI = vals.texto3; 	
            END;
                         
        ELSE
            IF @sConcepto = 'PlantelPlanPeGrupo'
                BEGIN	
	 
                    INSERT  INTO @TRM
                            ( sTexto ,
                              sTexto1 ,
                              sTexto2 ,
                              sTexto3 ,
                              iLlave ,
                              iLlave1 ,
                              iLlave2 ,
                              iLlave3
	                        )
                            SELECT  vals.texto AS sTexto --plantel 	
                                    ,
                                    vals.texto1 AS sTexto1 --plan 	
                                    ,
                                    vals.texto2 AS sTexto2 --plan de estudios 	
                                    ,
                                    vals.texto3 AS sTexto3 --grupo 	
                                    ,
                                    plant.idPlantel AS iLlave ,
                                    CASE WHEN planes.idPlan IS NOT NULL THEN CAST(planes.idPlan AS SMALLINT)
                                    END AS iLlave1 ,
                                    grupo.idPlanEstudios AS iLlave2 ,
                                    grupo.idGrupo AS iLlave3
                            FROM    @sValoresTexto vals
                                    LEFT JOIN Cat_Planteles plant ON plant.sNombre COLLATE Latin1_General_CI_AI = vals.texto
                                    LEFT JOIN Cat_Planes planes ON SUBSTRING(planes.sPlan, 0, 4) COLLATE Latin1_General_CI_AI = SUBSTRING(vals.texto1, 0, 4)
                                    OUTER APPLY ( SELECT    plantelesoferta.idPlan ,
                                                            grp.idPlanEstudios ,
                                                            grp.idGrupo
                                                  FROM      Ctrl_Grupos grp
                                                            INNER JOIN Cat_PlanEstudios planest ON grp.sNombre COLLATE Latin1_General_CI_AI = vals.texto3
                                                                                                   AND planest.sNombre + ' ' + planest.sVersion COLLATE Latin1_General_CI_AI = vals.texto2
                                                                                                   AND grp.idPlanEstudios = planest.idPlanEstudios
                                                            INNER JOIN Ctrl_PlantelesOfEduc plantelesoferta ON plantelesoferta.idPlantel = plant.idPlantel
                                                                                                               AND plantelesoferta.idOfEduc = planest.idOfEduc
                                                                                                               AND plantelesoferta.idPlan = planest.idPlan
                                                ) grupo; 	
                END;
                                              
            ELSE
                IF @sConcepto = 'OfPeAsigEv'
                    BEGIN
                        DECLARE @iTroncoComun VARCHAR(50)= 0;
                        SELECT  @iTroncoComun = CSP.sValor
                        FROM    dbo.Cat_SistemaParametros CSP
                        WHERE   CSP.idParametro = 47;
                        INSERT  INTO @TRM
                                ( sTexto ,
                                  sTexto1 ,
                                  sTexto2 ,
                                  sTexto3 ,
                                  iLlave ,
                                  iLlave1 ,
                                  iLlave2 ,
                                  iLlave3
	                            )
                                SELECT  vals.texto AS sTexto --oferta educativa 	
                                        ,
                                        vals.texto1 AS sTexto1 --plan estudios 	
                                        ,
                                        vals.texto2 AS sTexto2 -- asignatura 	
                                        ,
                                        vals.texto3 AS sTexto3 -- evaluacion 	
                                        ,
                                        ofeduc.idOfEduc AS iLlave ,
                                        planest.idPlanEstudios AS iLlave1 ,
                                        asignatura.idAsignatura AS iLlave2 ,
                                        evs.idEvaluacion AS iLlave3
                                FROM    @sValoresTexto vals
                                        LEFT JOIN Cat_OfEduc ofeduc ON ofeduc.sAbreviatura COLLATE Latin1_General_CI_AI = vals.texto
                                        LEFT JOIN Cat_PlanEstudios planest ON planest.sNombre + ' ' + planest.sVersion COLLATE Latin1_General_CI_AI = vals.texto1
                                                                              AND planest.idOfEduc = ofeduc.idOfEduc
                                        OUTER APPLY ( SELECT    asig.idAsignatura ,
                                                                planestdet.idFormEvaluacion
                                                      FROM      dbo.Cat_Asignaturas AS asig
                                                                INNER JOIN dbo.Ctrl_PlanEstudios AS planestdet ON planestdet.idAsignatura = asig.idAsignatura
                                                      WHERE     asig.sClave + '|' + asig.sAsignatura COLLATE Latin1_General_CI_AI = vals.texto2
																AND planestdet.idPlanEstudios = (SELECT idPlanEstudios 
																								 FROM dbo.Cat_PlanEstudios 
																								 WHERE sNombre + ' ' + sVersion COLLATE Latin1_General_CI_AI = vals.texto1)	-- Se agrega condición para filtrar adecuadamente asignaturas con misma clave 
																																											-- pero con diferentes planes de estudio. BIT/IAM-1444 10/Abr/2017
                                                                AND ( ( planestdet.idPlanEstudios = planest.idPlanEstudios
                                                                        AND @iTroncoComun = 0
                                                                      )
                                                                      OR @iTroncoComun = 1
                                                                    )
                                                    ) asignatura-- se agrego este and porque no traia la asignatua al plan de estudios correspondiente
                                        LEFT JOIN Ctrl_FormEvaluacion evs ON evs.idFormEvaluacion = CASE WHEN asignatura.idFormEvaluacion IS NULL
                                                                                                         THEN planest.idFormEvaluacion
                                                                                                         ELSE asignatura.idFormEvaluacion
                                                                                                    END
                                                                             AND ( evs.sAbreviatura COLLATE Latin1_General_CI_AI = vals.texto3
                                                                                   OR evs.sNombre COLLATE Latin1_General_CI_AI = vals.texto3
                                                                                 ); 
                    END;
        
                ELSE
                    IF @sConcepto = 'AsigPlanEstudios'
                        BEGIN
		  /*------------------------------------------------------------------------------------------------------------------------------------*/
                            DECLARE @planestudiosaux VARCHAR(200) ,
                                @asignaturaaux VARCHAR(200),
                                @plantelaux VARCHAR(200) ,
                                @ofeducaux VARCHAR(200) ,
                                @planestudiosaux2 VARCHAR(200) ,
                                @bValido BIT ,
                                @idPlanEstudios SMALLINT ,
                                @idAsignatura SMALLINT ,
                                @idPlantel SMALLINT ,
                                @idOferta SMALLINT;
		            
                            DECLARE cCursor CURSOR LOCAL
                            FOR
                                SELECT  vals.texto ,--plan deestudios
                                        vals.texto1 ,--asignatura
                                        vals.texto2 ,--plantel
                                        vals.texto3 --ofeduc
                                FROM    @sValoresTexto vals; 
		          
                            DECLARE @TR TABLE
                                (
                                  texto1 VARCHAR(200) ,
                                  texto2 VARCHAR(200) ,
                                  texto3 VARCHAR(200) ,
                                  texto4 VARCHAR(200) ,
                                  idPlanEstudios SMALLINT NOT NULL ,
                                  idAsignatura SMALLINT NOT NULL ,
                                  idPlantel SMALLINT NOT NULL ,
                                  idOferta SMALLINT NOT NULL
                                );
                            SET @bValido = 1;
                            OPEN cCursor;
                            FETCH cCursor INTO @planestudiosaux, @asignaturaaux, @plantelaux, @ofeducaux;
		          				  --@idFamilia int,@sRazonSocial varchar(250)
		      
                            WHILE ( @@FETCH_STATUS = 0 )
                                BEGIN
                                    SET @planestudiosaux2 = '';
									
                                    SELECT  @planestudiosaux2 = CONCAT(CPE2.sNombre, ' ', CPE2.sVersion) ,
                                            @idPlanEstudios = CPE2.idPlanEstudios
                                    FROM    dbo.Ctrl_PlanEstudios CPE
                                            INNER JOIN dbo.Cat_Asignaturas CA ON CA.idAsignatura = CPE.idAsignatura
                                            INNER JOIN dbo.Cat_PlanEstudios CPE2 ON CPE2.idPlanEstudios = CPE.idPlanEstudios
                                    WHERE   CA.sClave = @asignaturaaux
                                            AND CONCAT(CPE2.sNombre, ' ', CPE2.sVersion) = @planestudiosaux;

                                    IF @planestudiosaux2 = ''
                                        BEGIN
                                            INSERT  INTO @TR
                                                    ( texto1 ,
                                                      texto2 ,
                                                      texto3 ,
                                                      texto4 ,
                                                      idPlanEstudios ,
                                                      idAsignatura ,
                                                      idPlantel ,
                                                      idOferta
											        )
                                            VALUES  ( @planestudiosaux ,
                                                      NULL ,
                                                      @plantelaux ,
                                                      @ofeducaux ,
                                                      CAST(0 AS SMALLINT) ,
                                                      CAST(0 AS SMALLINT) ,
                                                      CAST(0 AS SMALLINT) ,
                                                      CAST(0 AS BIGINT)
													 );
                                        END;
                                    ELSE
                                        BEGIN
					
                                            IF @planestudiosaux2 != @planestudiosaux
                                                BEGIN
                                                    INSERT  INTO @TR
                                                            ( texto1 ,
                                                              texto2 ,
                                                              texto3 ,
                                                              texto4 ,
                                                              idPlanEstudios ,
                                                              idAsignatura ,
                                                              idPlantel ,
                                                              idOferta
                                                            )
                                                    VALUES  ( NULL ,
                                                              @asignaturaaux ,
                                                              @plantelaux ,
                                                              @ofeducaux ,
                                                              CAST(@idPlanEstudios AS SMALLINT) ,
                                                              CAST(0 AS SMALLINT) ,
                                                              CAST(0 AS SMALLINT) ,
                                                              CAST(0 AS BIGINT)
															 );	
                                                END;

                                            ELSE
                                                BEGIN
                                                    INSERT  INTO @TR
                                                            ( texto1 ,
                                                              texto2 ,
                                                              texto3 ,
                                                              texto4 ,
                                                              idPlanEstudios ,
                                                              idAsignatura ,
                                                              idPlantel ,
                                                              idOferta
													        )
                                                    VALUES  ( @planestudiosaux ,
                                                              @asignaturaaux ,
                                                              @plantelaux ,
                                                              @ofeducaux ,
                                                              CAST(@idPlanEstudios AS SMALLINT) ,
                                                              CAST(0 AS SMALLINT) ,
                                                              CAST(0 AS SMALLINT) ,
                                                              CAST(0 AS BIGINT)
															 );
                                                END;
                    
                                        END;
                    
		            
                                    FETCH cCursor INTO @planestudiosaux, @asignaturaaux, @plantelaux, @ofeducaux;
                                END;
		      
                            CLOSE cCursor;
                            DEALLOCATE cCursor;
		      				  /*------------------------------------------------------------------------------------------------------------------------------------*/
                            INSERT  INTO @TRM
                                    ( sTexto ,
                                      sTexto1 ,
                                      sTexto2 ,
                                      sTexto3 ,
                                      iLlave ,
                                      iLlave1 ,
                                      iLlave2 ,
                                      iLlave3
	                                )
                                    SELECT  T.texto1 ,
                                            T.texto2 ,
                                            T.texto3 ,
                                            T.texto4 ,
                                            T.idPlanEstudios ,
                                            T.idAsignatura ,
                                            T.idPlantel ,
                                            T.idOferta
                                    FROM    @TR T; 
                        END;
        SELECT  T.sTexto ,
                T.sTexto1 ,
                T.sTexto2 ,
                T.sTexto3 ,
                T.iLlave ,
                T.iLlave1 ,
                T.iLlave2 ,
                T.iLlave3
        FROM    @TRM T;   	
    END;