-- Schema: C6MartPeriodico
-- Stored Procedure: DM_MONITORAGGIO_INIZIALE_AGGIORNAMENTO_RFA


--exec C6MartPeriodico.DM_MONITORAGGIO_INIZIALE_AGGIORNAMENTO_RFA
CREATE procedure [C6MartPeriodico].[DM_MONITORAGGIO_INIZIALE_AGGIORNAMENTO_RFA]
as
begin

	DECLARE @DataCongelamento DATETIME;
	DECLARE @DataCongelamento_Day int;
	DECLARE @DataCongelamento_Month int;
	DECLARE @DataCongelamento_Year int;
	SET @DataCongelamento		= C6MartPeriodico.getDataCongelamento();
	SET @DataCongelamento_Day	= day(@DataCongelamento);
	SET @DataCongelamento_Month	= month(@DataCongelamento);
	SET @DataCongelamento_Year = year(@DataCongelamento);

	-------------------------------------------------------------------
	-- Preparazione del tracciato dei valori
	-- da inserire in MONITORAGGIO_INIZIALE e PHOTO_DATA
	-------------------------------------------------------------------
	declare @NuoviValori table
	(
		Rete						varchar(1)
		,Cod_Fiscale				varchar(16)
		,Data_Foto					datetime
		,Ctv_Totale					decimal(15, 2)
		,Ctv_Ext					decimal(15, 2)
		,Ctv_Inv					decimal(15, 2)
		,Ctv_Ris					decimal(15, 2)
		,Ctv_Pre					decimal(15, 2)
		,Ctv_Liq					decimal(15, 2)
		,Ctv_Cc						decimal(15, 2)
		,Ctv_Na						decimal(15, 2)
		,ImportoPartiteViaggianti	decimal(15, 2)
		,Var_Complessivo			decimal(15, 3)
		,Var_Copertura				decimal(15, 3)
	);

	with K as
	(	select distinct Rete, Cod_Fiscale, Data_Foto
		from	C6MartPeriodico.MONITORAGGIO_INIZIALE
		where	(	day(Data_Foto) = 31			and month(Data_Foto) = 12		and year(data_foto) = @dataCongelamento_year and
					@DataCongelamento_Day = 31	and @DataCongelamento_Month = 12)
				or
				(	day(Data_Foto) = 31			and month(Data_Foto) = 3		and year(data_foto) = @dataCongelamento_year and
					@DataCongelamento_Day = 1	and @DataCongelamento_Month = 4)
				or
				(	day(Data_Foto) = 30			and month(Data_Foto) = 6		and year(data_foto) = @dataCongelamento_year and
					@DataCongelamento_Day = 1	and @DataCongelamento_Month = 7)
				or
				(	day(Data_Foto) = 30			and month(Data_Foto) = 9		and year(data_foto) = @dataCongelamento_year and
					@DataCongelamento_Day = 1	and @DataCongelamento_Month = 10)
	)
	, Controvalore_Totale as
	(
		select	K.Rete, K.Cod_Fiscale,
				Sum(C.Ctv) as Ctv_Totale
		from	K
		inner join
		(
		select	Rete, Cod_Fiscale, Ctv
		from	C6MartPeriodico.Patrimonio_Bf
		) C
		on	K.Rete = C.Rete and
			K.Cod_Fiscale = C.Cod_Fiscale
		group by K.Rete, K.Cod_Fiscale
	)
	, Controvalore_Ext as
	(
		select	K.Rete, K.Cod_Fiscale,
				Sum(C.Ctv) as Ctv_Ext
		from	K
		inner join
		(
		select	Rete, Cod_Fiscale, Ctv
		from	C6MartPeriodico.Patrimonio_Bf
		where	id_Area = 'Ext'
		) C
		on	K.Rete = C.Rete and
			K.Cod_Fiscale = C.Cod_Fiscale
		group by K.Rete, K.Cod_Fiscale
	)
	, Controvalore_Inv as
	(
		select	K.Rete, K.Cod_Fiscale,
				Sum(C.Ctv) as Ctv_Inv
		from	K
		inner join
		(
		select	Rete, Cod_Fiscale, Ctv
		from	C6MartPeriodico.Patrimonio_Bf
		where	id_Area = 'Inv'
		) C
		on	K.Rete = C.Rete and
			K.Cod_Fiscale = C.Cod_Fiscale
		group by K.Rete, K.Cod_Fiscale
	)
	, Controvalore_Ris as
	(
		select	K.Rete, K.Cod_Fiscale,
				Sum(C.Ctv) as Ctv_Ris
		from	K
		inner join
		(
		select	Rete, Cod_Fiscale, Ctv
		from	C6MartPeriodico.Patrimonio_Bf
		where	id_Area = 'Ris'
		) C
		on	K.Rete = C.Rete and
			K.Cod_Fiscale = C.Cod_Fiscale
		group by K.Rete, K.Cod_Fiscale
	)
	, Controvalore_Pre as
	(
		select	K.Rete, K.Cod_Fiscale,
				Sum(C.Ctv) as Ctv_Pre
		from	K
		inner join
		(
		select	Rete, Cod_Fiscale, Ctv
		from	C6MartPeriodico.Patrimonio_Bf
		where	id_Area in ('Pre','Pre1','Pre2')
		) C
		on	K.Rete = C.Rete and
			K.Cod_Fiscale = C.Cod_Fiscale
		group by K.Rete, K.Cod_Fiscale
	)
	, Controvalore_Liq as
	(
		select	K.Rete, K.Cod_Fiscale,
				Sum(C.Ctv) as Ctv_Liq
		from	K
		inner join
		(
		select	Rete, Cod_Fiscale, Ctv
		from	C6MartPeriodico.Patrimonio_Bf
		where	id_Area = 'Liq'
		) C
		on	K.Rete = C.Rete and
			K.Cod_Fiscale = C.Cod_Fiscale
		group by K.Rete, K.Cod_Fiscale

