﻿-- @NumTrim = 0 (Corrente)
-- @NumTrim = 1 (Precedente)
-- @NumTrim = 2 (Precedente - 1)
-- @WhichDate = 0 (Inizio Trimestre)
-- @WhichDate = 1 (Fine Trimestre (prec.))
-- @DataFineGenerazione = 0 (Data Fine del Trim (prec.))
-- @DataFineGenerazione = 1 (Data Fine generazione del Trimestre indicato da @NumTrim, ha senso solo quando @WhichDate = 1)
-- select [C6MartPeriodico].[getDateTrimestre] (0, 1, 0)
CREATE function [C6MartPeriodico].[getDateTrimestre](
	@NumTrim int,
	@WhichDate bit,
	@DataFineGenerazione bit
)
returns varchar(8)
as
begin
	declare @data datetime
	declare @retData varchar(8)
-- set @NumTrim = 2
-- set @WhichDate = 0
-- set @DataFineGenerazione = 1
	 if @WhichDate = 0 --(Inizio)
		-- Data Inizio
		set @data = dateadd(d, 1, dateadd(m, -@NumTrim * 3, C6MartPeriodico.getTrimestre(getdate(),0)))
	else
		if @DataFineGenerazione = 0
			-- Data Fine Trimestre
			set @data = dateadd(m, -@NumTrim * 3, C6MartPeriodico.getTrimestre(getdate(),0))
		else
			-- Data Fine Generazione del Trimestre indicato dal parametri @NumTrim
			--set @data = dateadd(m, 1, dateadd(m, -@NumTrim * 3, C6MartPeriodico.getTrimestre(getdate(),0)))
			set @data = dateadd(d, -1, dateadd(m, 1, dateadd(d, 1, dateadd(m, -@NumTrim * 3, C6MartPeriodico.getTrimestre(getdate(),0)))))
	set @retData = convert(varchar(4), year(@data)) + right('0' + convert(varchar(2), month(@data)), 2) + right('0' + convert(varchar(2), day(@data)), 2)
	return @retData
end