if exists (select 1 from sys.procedures where name='sp_duplicarCheckList')
	drop procedure [sp_duplicarCheckList];
go

CREATE PROCEDURE [dbo].[sp_duplicarCheckList] 
	@p_idCheckList int,
	@p_nombreCheckList as varchar(200),
	@p_codigo as varchar (200)
AS
BEGIN
	
	SET NOCOUNT ON;
	
	declare @licencia as varchar(100)
	select @licencia = uid from seg_usuario where id = 1
	--crear checklist
	declare @id_checkList_duplicado as int
	exec @id_checkList_duplicado = [dbo].[ins_cat_pruebaCheckList] @licencia,'01', 1, 1, @p_nombreCheckList, @p_codigo, 1

	--secciones y atributos del checklist original que se duplicaran
	--declare @t_checklistOriginal table (id_seccion int,	seccion varchar(300),	seccion_codigo varchar(10),	seccion_orden int,	seccion_id_usoSeccionAtributo int,	id_atributo int,	atributo varchar(300),	atributo_codigo varchar(300),	atributo_nombreControl varchar(300),	atributo_esVariable bit,	atributo_resaltado bit,	minimo float,	maximo float,	tipo int,	id_unidad int,	obligatorio bit,	IDsOpciones varchar(300),	textosOpciones varchar(600),	pruebaCheckList_orden int,	id_pruebaCheckList int,	vrDefecto varchar(300))
	--insert into @t_checklistOriginal (id_seccion, seccion, seccion_codigo, seccion_orden, seccion_id_usoSeccionAtributo, id_atributo, atributo, atributo_codigo, atributo_nombreControl, atributo_esVariable, atributo_resaltado, minimo, maximo, tipo, id_unidad, obligatorio, IDsOpciones, textosOpciones, pruebaCheckList_orden, id_pruebaCheckList, vrDefecto)
	--SELECT --seccion 
 --       SA.id AS id_seccion ,
 --       SA.seccionAtributo AS seccion ,
 --       SA.seccionAtributo_codigo AS seccion_codigo ,
 --       SA.orden AS seccion_orden ,
 --       SA.id_usoSeccionAtributo AS seccion_id_usoSeccionAtributo, 
	--	--atributo
 --       CLA.id_atributo id_atributo ,
 --       CLA.cat_atributo_atributo AS atributo ,
 --       CLA.cat_atributo_atributo_codigo AS atributo_codigo ,
 --       CLA.cat_atributo_nombreControl AS atributo_nombreControl ,
 --       CLA.cat_atributo_esVariable AS atributo_esVariable ,
 --       CLA.cat_atributo_resaltado AS atributo_resaltado ,
 --       CLA.cat_atributo_valorMinimo minimo ,
 --       CLA.cat_atributo_ValorMaximo maximo ,
 --       CLA.cat_atributo_id_tipoAtributo AS tipo ,
 --       CLA.cat_atributo_id_unidad AS id_unidad ,
 --       CLA.cat_atributo_esObligatorio AS obligatorio ,
 --       dbo.f_opcionesAtributo(CLA.id_atributo, 1) AS IDsOpciones ,
 --       dbo.f_opcionesAtributo(CLA.id_atributo, 0) AS textosOpciones ,
	--	--checklist
 --       CLA.orden AS pruebaCheckList_orden ,
 --       CLA.id_pruebaCheckList AS id_pruebaCheckList ,
 --       CLA.pruebaCheckList_atributo AS vrDefecto
	--FROM view_cat_pruebaCheckList_atributo CLA
	--INNER JOIN cat_seccionAtributo SA
	--	ON SA.id=CLA.cat_atributo_id_seccionAtributo
	--WHERE CLA.id_pruebachecklist= @p_idCheckList
	--		AND CLA.active=1
	--		AND SA.active = 1  
	--ORDER BY SA.id  

	declare @id_seccionActual as int, @id_seccionActual_duplicada as int, @id_atributoActual_duplicado as int, @id_atributoUtilizado as int
	set @id_seccionActual = 0
	set @id_atributoUtilizado = 0
	declare @id_seccion int, @seccion varchar(300),	@seccion_codigo varchar(10), @seccion_orden int, @seccion_id_usoSeccionAtributo int, @id_atributo int, @atributo varchar(300), @atributo_codigo varchar(300), @atributo_nombreControl varchar(300),	@atributo_esVariable bit, @atributo_resaltado bit, @minimo float, @maximo float, @tipo int,	@id_unidad int, @obligatorio bit, @IDsOpciones varchar(300), @textosOpciones varchar(600), @pruebaCheckList_orden int,	@id_pruebaCheckList int, @vrDefecto varchar(300)
	declare c_checklist_original cursor for 
		
		SELECT --seccion 
        SA.id AS id_seccion ,
        SA.seccionAtributo AS seccion ,
        SA.seccionAtributo_codigo AS seccion_codigo ,
        SA.orden AS seccion_orden ,
        SA.id_usoSeccionAtributo AS seccion_id_usoSeccionAtributo, 
		--atributo
        CLA.id_atributo id_atributo ,
        CLA.cat_atributo_atributo AS atributo ,
        CLA.cat_atributo_atributo_codigo AS atributo_codigo ,
        CLA.cat_atributo_nombreControl AS atributo_nombreControl ,
        CLA.cat_atributo_esVariable AS atributo_esVariable ,
        CLA.cat_atributo_resaltado AS atributo_resaltado ,
        CLA.cat_atributo_valorMinimo minimo ,
        CLA.cat_atributo_ValorMaximo maximo ,
        CLA.cat_atributo_id_tipoAtributo AS tipo ,
        CLA.cat_atributo_id_unidad AS id_unidad ,
        CLA.cat_atributo_esObligatorio AS obligatorio ,
        dbo.f_opcionesAtributo(CLA.id_atributo, 1) AS IDsOpciones ,
        dbo.f_opcionesAtributo(CLA.id_atributo, 0) AS textosOpciones ,
		--checklist
        CLA.orden AS pruebaCheckList_orden ,
        CLA.id_pruebaCheckList AS id_pruebaCheckList ,
        CLA.pruebaCheckList_atributo AS vrDefecto
	FROM view_cat_pruebaCheckList_atributo CLA
	INNER JOIN cat_seccionAtributo SA
		ON SA.id=CLA.cat_atributo_id_seccionAtributo
	WHERE CLA.id_pruebachecklist= @p_idCheckList
			AND CLA.active=1
			AND SA.active = 1  
	ORDER BY SA.id  


		open c_checklist_original
			
			while @@FETCH_STATUS = 0
			begin
				fetch c_checklist_original into @id_seccion, @seccion, @seccion_codigo, @seccion_orden,  @seccion_id_usoSeccionAtributo, @id_atributo, @atributo, @atributo_codigo, @atributo_nombreControl, @atributo_esVariable, @atributo_resaltado, @minimo, @maximo, @tipo, @id_unidad, @obligatorio, @IDsOpciones, @textosOpciones, @pruebaCheckList_orden, @id_pruebaCheckList, @vrDefecto
				--valida si ya se creo la seccion

				if @id_atributoUtilizado <> @id_atributo
				begin
					set @id_atributoUtilizado = @id_atributo
				

					if @id_seccionActual < @id_seccion 
					begin
						--asigna la seccion que actualmente se esta utilizando
						set @id_seccionActual = @id_seccion
						--se crea la seccion
						exec @id_seccionActual_duplicada = [ins_cat_seccionAtributo] @licencia,'01', 1, 1, @seccion, @seccion_codigo, @seccion_orden,  @seccion_id_usoSeccionAtributo
					end
					--se crea el atributo
					exec @id_atributoActual_duplicado = [ins_cat_atributo] @licencia,'01', 1, 1, @atributo, @atributo_codigo, @atributo_nombreControl, @atributo_esVariable, @atributo_resaltado, @minimo, @maximo, @id_seccionActual_duplicada, @tipo, @id_unidad, @obligatorio
					--se crean las opciones del atributo si este las tiene
					if @IDsOpciones <> '' and @tipo in (4, 5)
					begin
						insert into equ_opcionatributo (uid, eid, id_usuario_modifico, id_usuario_creo, fechaModificacion, fechaCreacion, active, opcionAtributo, opcionAtributo_codigo, orden, id_atributo)
						select @licencia + '_', '01', 1, 1, getdate(), getdate(), 1, opcionAtributo, opcionAtributo_codigo, orden, @id_atributoActual_duplicado 
						from equ_opcionatributo 
						where id_atributo = @id_atributo and active = 1

						UPDATE [equ_opcionAtributo] set [uid] = @licencia + '_' + id where [uid] = @licencia + '_'
					end
					--se agrega el atributo al checklist
					exec [ins_cat_pruebaCheckList_atributo] @licencia,'01', 1, 1, @vrDefecto, @id_checkList_duplicado, @id_atributoActual_duplicado, @pruebaCheckList_orden
				end
			end
		close c_checklist_original
	deallocate c_checklist_original

	select @id_checkList_duplicado id_checkList_duplicado
END
go
