-- Crear Recurrencia Semanal de Domingos por Tienda

BEGIN TRY
	DROP TABLE IF EXISTS #TConfiguraciones

	CREATE TABLE #TConfiguraciones 
	(
		Id				INT IDENTITY(1,1)
		, TiendaId		BIGINT
		, OrigenVentaId	INT
		, TipoClienteId	INT
		, FechaInicio	DATE
		, FechaFin		DATE
		, Entregas		INT
	)

	INSERT #TConfiguraciones VALUES (8775,1,1,'2024.12.01','2025.01.31',0)
INSERT #TConfiguraciones VALUES (8706,1,1,'2024.12.01','2025.01.31',0)



	/*
	INSERT #TConfiguraciones VALUES (8094, 2, 1, '2024.11.15', '2025.01.15', 0)
	INSERT #TConfiguraciones VALUES (8094, 2, 2, '2024.11.15', '2025.01.15', 0)
	INSERT #TConfiguraciones VALUES (8094, 1, 1, '2024.11.15', '2025.01.15', 0)
	INSERT #TConfiguraciones VALUES (8094, 1, 2, '2024.11.15', '2025.01.15', 0)
	INSERT #TConfiguraciones VALUES (8085, 2, 1, '2024.11.15', '2025.01.15', 0)
	INSERT #TConfiguraciones VALUES (8085, 2, 2, '2024.11.15', '2025.01.15', 0)
	INSERT #TConfiguraciones VALUES (8085, 1, 1, '2024.11.15', '2025.01.15', 0)
	INSERT #TConfiguraciones VALUES (8085, 1, 2, '2024.11.15', '2025.01.15', 0)
	*/
	--SELECT * FROM #TConfiguraciones
	
	BEGIN TRANSACTION

	DECLARE @TiendaId	BIGINT
		, @FechaInicio	DATE
		, @FechaFin		DATE

	DECLARE Cur_Conf CURSOR FOR
	SELECT DIstinct TiendaId, FechaInicio, FechaFin
	FROM #TConfiguraciones

	OPEN Cur_Conf

	FETCH NEXT FROM Cur_Conf
	INTO @TiendaId, @FechaInicio, @FechaFin


	DECLARE @RecurrenciaId	INT

	CREATE TABLE #NuevaConfiguracionVariables
		(
			Fecha				DATETIME
			, Tienda			INT
			, Turno				INT
			, Entregas			INT
			, Monto				DECIMAL(18,4)
			, Peso				DECIMAL(10,4)
			, Cubicaje			DECIMAL(10,3)
			, TipoClienteId		INT
			, TipoVentaId		INT
		)

	WHILE @@FETCH_STATUS = 0
	BEGIN
		-- Consulta Temporal de Tienda y Rango de Fechas
		SELECT TiendaId = @TiendaId
		, FechaInicio	= @FechaInicio
		, FechaFin		= @FechaFin

		-- Crear la Recurrencia
		INSERT INTO Recurrencia
			(
				FechaInicio, FechaFin, TipoRecurrenciaId, DiaSemanaId, RepetirCadaSemana, DiasDelMes, Mes, Dia, LimiteMes
			)
				VALUES
			(
				@FechaInicio, @FechaFin, 3, 0, 1, 0, 0, 0, 0
			)

		SELECT @RecurrenciaId = SCOPE_IDENTITY()

			-- Asignar los Dias de la Semana a la Recurrencia
		INSERT INTO RelRecurrenciaDiaSemana (RecurrenciaId, DiaSemanaId)
			VALUES (@RecurrenciaId, 1)
		--VALUES (@RecurrenciaId, 2)
		--	, (@REcurrenciaId, 3)
		--	, (@REcurrenciaId, 4)
		--	, (@REcurrenciaId, 5)
		--	, (@REcurrenciaId, 6)
		--	, (@REcurrenciaId, 7)

		-- Asignar Cantidad y Tienda a la Recurrencia creada
		INSERT INTO VariableCapacidad
			SELECT 
				TiendaId			= T.TiendaId
				,Entregas			= T.Entregas
				,Monto				= NULL
				,Peso				= NULL
				,Cubicaje			= NULL
				,RecurrenciaId		= @RecurrenciaId
				,TurnoId			= 1
				,FechaModificacion	= GETDATE()
				,TipoClienteID		= T.TipoClienteId
				,TipoVentaID		= T.OrigenVentaId
			FROM #TConfiguraciones AS T
			WHERE TiendaId = @TiendaId
				AND FechaInicio = @FechaInicio
				AND FechaFin = @FechaFin

		-- Consulta Temporal Recurrencia Creada
		SELECT * FROM Recurrencia WITH(NOLOCK) Where RecurrenciaId = @RecurrenciaId

		-- Consultar Dias de Semana de la Recurrecia Creada
		SELECT * FROM RelRecurrenciaDiaSemana WITH(NOLOCK) Where RecurrenciaId = @RecurrenciaId

		-- Consultar Configuracion de Tienda de la Recurrencia Creada
		SELECT * FROM VariableCapacidad WITH(NOLOCK) Where RecurrenciaId = @RecurrenciaId

		DECLARE @TiendasIdDestino VARCHAR(4000)
		DECLARE @Recurrencias VARCHAR(4000)

		SET @TiendasIdDestino	= CAST(@TiendaId AS VARCHAR(MAX))
		SET @Recurrencias		= CAST(@RecurrenciaId AS VARCHAR(MAX))

		-- Consulta Temporal Tienda y Recurrencia
		SELECT TiendasDestino = @TiendasIdDestino, Recurrencias = @Recurrencias

		-- Borrar configuraciones iteracion anterior
		DELETE #NuevaConfiguracionVariables

		-- Obtener la configuracion para la tabla ConfiguracionDiaria
		INSERT INTO #NuevaConfiguracionVariables 
		EXEC VariablesCapacidad_ObtenerConfiguracionGeneradaPorRecurrencia @TiendasIdDestino, @Recurrencias 

		--Consulta temporal nuevas configuraciones
		--SELECT * FROM #NuevaConfiguracionVariables

		DECLARE @xmlInput AS XML

		-- Crear XML para la Configuracion Diaria
		SET @xmlInput = 
						(
							SELECT   
								FechaFormato = CONVERT(VARCHAR(10), FECHA, 120)  
								, TiendaId	= TIENDA   
								, TurnoId	= TURNO  
								, Entregas	= ENTREGAS  
								, TipoClienteID = TipoClienteId  
								, TipoVentaID = TipoVentaId  
							FROM #NuevaConfiguracionVariables
							FOR XML RAW ('VariableCapacidadInfo'), ROOT ('Root'), ELEMENTS  
						)

		-- Select Temporal XML de configuraciones
		--SELECT @xmlInput AS XML

		-- Insertar en ConfiguracionDiaria
		EXEC VariablesCapacidad_ActualizarConfiguracionDiaria  @Configuraciones = @xmlInput  

		SELECT * FROM ConfiguracionDiaria WITH(NOLOCK) WHERE TiendaId = @TiendaId AND Dia >= @FechaInicio and Dia <= @FechaFin
		ORDER BY Dia, TipoClienteId, TipoVentaId


		FETCH NEXT FROM Cur_Conf INTO @TiendaId, @FechaInicio, @FechaFin
	END

	CLOSE Cur_Conf;
	DEALLOCATE Cur_Conf;

	COMMIT TRANSACTION

	DROP TABLE #TConfiguraciones 
	DROP TABLE #NuevaConfiguracionVariables

	
END TRY
BEGIN CATCH  
	SELECT
    ERROR_NUMBER() AS ErrorNumber,
    ERROR_STATE() AS ErrorState,
    ERROR_SEVERITY() AS ErrorSeverity,
    ERROR_PROCEDURE() AS ErrorProcedure,
    ERROR_LINE() AS ErrorLine,
    ERROR_MESSAGE() AS ErrorMessage;

	IF (XACT_STATE()) = -1
		ROLLBACK TRANSACTION

END CATCH