-- creazione export dati stagionali per negozio
CREATE PROCEDURE [dbo].[creaSituazioneVenditeNegozio]
	-- Add the parameters for the stored procedure here
	@anno AS nvarchar(5), 
	@stagione AS nvarchar(5),
	@negozio AS nvarchar(10),
	@datainistg as datetime,
	@datafinestg as datetime,
	@aggiornaArticoli as int

AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;
	
	set @stagione = left(@stagione,1)

	declare @stagione1 as nvarchar(5)
	set @stagione1=case when @stagione ='A' then 'I' else 'E'end

	print 'Stagione: ' +@anno+@stagione+@stagione1

			print 'IDNegozio: ' + @negozio 

			print 'data inizio stagione:' + CAST(@datainistg AS nvarchar(18))
			print 'data fine stagione:' + CAST(@datafinestg AS nvarchar(20))

			-- creazione tabella temporanea dati stagionali
			IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE id=OBJECT_ID('tempdb..#tmpStagione')) DROP TABLE #tmpStagione
print '1' + CAST(getdate() AS nvarchar(18))
			SELECT Movimento.IDArticolo, Movimento.IDNegozio, sum(Movimento.rptCarico * Movimento.Peso) as Carico,  sum(Movimento.rptScarico * Movimento.Peso) as Scarico,  sum(Movimento.rptVenduto * Movimento.Peso) as Venduto,  sum(Movimento.rptVendutoPrezzoImponibile) as VendutoPrezzo,  sum(Movimento.rptVendutoCostoImponibile) as VendutoCosto,  sum(Movimento.rptPackingList * Movimento.Peso) as PackingList,  sum(Movimento.rptPackingList * Movimento.Costo) as PackingListCosto,  sum(Movimento.rptDisponibilita * Movimento.Peso) as Disponibilita,  sum(rptDisponibilitaCostoImponibile) as DisponibilitaCosto, 0 as PlFuture, 0 as PlFutureCosto, 0 as DispPrecedente, 0 as DispPrecedenteCosto, 0 as VendutoPrecedente,0 as VendutoPrecedenteCosto, sum(Movimento.Quantita * Movimento.Peso) as Rimanenza, sum(Movimento.Quantita * Movimento.Costo) as RimanenzaCosto, 0 as QtaPeriodo, 0 as QtaPeriodoCosto, 0 as QtaPeriodoPrezzo, 0 as Ordinato INTO #tmpStagione FROM Movimento LEFT OUTER JOIN Articolo ON Articolo.IDArticolo = Movimento.IDArticolo WHERE (((Movimento.TipoDocumento <> N'Scontrino') AND (Movimento.Data <= @datafinestg ) AND  (Movimento.Stagione = @Stagione) AND (Movimento.Anno = @Anno))OR ((Movimento.TipoDocumento = N'Scontrino') AND (Movimento.Data <= @datafinestg) AND (Movimento.Data >=@datainistg ))) AND ( (IDNegozio = @negozio ) ) GROUP BY Movimento.IdArticolo, Movimento.IDNegozio UNION ALL SELECT  Articolo.IDArticolo, OrdineT.IDNegozio, 0 as Carico, 0 as Scarico, 0 as Venduto,  0 as VendutoPrezzo,  0 as VendutoCosto,  0 as PackingList,  0 as PackingListCosto,  0 as Disponibilita,  0 as DisponibilitaCosto, 0 as PlFuture, 0 as PlFutureCosto, 0 as DispPrecedente, 0 as DispPrecedenteCosto, 0 as VendutoPrecedente, 0 as VendutoPrecedenteCosto, 0 as Rimanenza, 0 as RimanenzaCosto, 0 as QtaPeriodo, 0 as QtaPeriodoCosto, 0 as QtaPeriodoPrezzo, SUM(OrdineD.Quantita) AS Ordinato FROM ( OrdineD INNER JOIN OrdineT ON OrdineD.IDOrdineT = OrdineT.IDOrdineT INNER JOIN Articolo ON OrdineD.IDArticolo = Articolo.IDArticolo) WHERE  (OrdineT.Anno=@anno) AND ((OrdineT.Stagione=@stagione) OR (OrdineT.Stagione=@stagione1)) AND (OrdineT.DataOrd <= @datafinestg)  AND ( (IDNegozio = @negozio) ) GROUP BY Articolo.IdArticolo, OrdineT.IDNegozio

			IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE id=OBJECT_ID('tempdb..#tmpNoStagione')) DROP TABLE #tmpNoStagione 
print '2'+ CAST(getdate() AS nvarchar(18))
			SELECT Movimento.IDMovimento, Movimento.IDNegozio, MIN(Articolo_4.IDArticolo) AS IDArticolo, Movimento.Quantita, Movimento.Data,  Movimento.TipoMovimento, Movimento.CodiceDocumento, Movimento.TipoDocumento, Movimento.Prezzo, Movimento.Costo, Movimento.Stagione,  Movimento.Anno, Movimento.rptPackingList, Movimento.rptCarico, Movimento.rptScarico, Movimento.rptDisponibilita,  Movimento.rptDisponibilitaCostoImponibile, Movimento.rptDisponibilitaCostoIvato, Movimento.rptVenduto, Movimento.rptVendutoPrezzoIvato,  Movimento.rptVendutoPrezzoImponibile, Movimento.rptVendutoCostoImponibile, Movimento.rptVendutoCostoIvato, Movimento.UserIns,  Movimento.DataIns, Movimento.UserMod, Movimento.DataMod, Movimento.FasciaPrezzo, Movimento.Categoria, Movimento.Peso,  Movimento.RigaDocumento, Movimento.Causale INTO #tmpNoStagione FROM Movimento INNER JOIN Articolo ON Articolo.IdArticolo = Movimento.IdArticolo  
			INNER JOIN (select Articolo.Articolo FROM Articolo INNER JOIN #tmpStagione ON Articolo.IdArticolo = #tmpStagione.IdArticolo  WHERE  (#tmpStagione.IDNegozio = @negozio )  UNION  SELECT Articolo.Articolo FROM Articolo WHERE  Articolo.StampaInStagione=1  group by Articolo.Articolo) as CodArticolo  ON Articolo.Articolo = CodArticolo.Articolo
			 INNER JOIN Articolo AS Articolo_3 ON Movimento.IDArticolo = Articolo_3.IDArticolo INNER JOIN  Articolo AS Articolo_4 ON Articolo_3.Articolo = Articolo_4.Articolo AND Articolo_3.Taglia = Articolo_4.Taglia AND  Articolo_3.Colore = Articolo_4.Colore
			  WHERE  (Movimento.IDNegozio = @negozio ) 
			 GROUP BY Movimento.IDMovimento, Movimento.IDNegozio, Movimento.Quantita, Movimento.Data, Movimento.TipoMovimento, Movimento.CodiceDocumento,  Movimento.TipoDocumento, Movimento.Prezzo, Movimento.Costo, Movimento.Stagione, Movimento.Anno, Movimento.rptPackingList,  Movimento.rptCarico, Movimento.rptScarico, Movimento.rptDisponibilita, Movimento.rptDisponibilitaCostoImponibile,  Movimento.rptDisponibilitaCostoIvato, Movimento.rptVenduto, Movimento.rptVendutoPrezzoIvato, Movimento.rptVendutoPrezzoImponibile,  Movimento.rptVendutoCostoImponibile, Movimento.rptVendutoCostoIvato, Movimento.UserIns, Movimento.DataIns, Movimento.UserMod,  Movimento.DataMod, Movimento.FasciaPrezzo, Movimento.Categoria, Movimento.Peso, Movimento.RigaDocumento, Movimento.Causale,  Articolo_4.Articolo, Articolo_4.Taglia, Articolo_4.Colore
		print '3'	+ CAST(getdate() AS nvarchar(18)) 
			IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE id=OBJECT_ID('tempdb..#tmpFinale_NoGroup')) DROP TABLE #tmpFinale_NoGroup
						
			IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE id=OBJECT_ID('tempdb..#tmpFinale')) DROP TABLE #tmpFinale
				print '4'	+ CAST(getdate() AS nvarchar(18))	
			SELECT *, CONVERT(decimal(10,4),0) as QtaVendPrec , CONVERT(decimal(10,4),0) as ValVendPrec , CONVERT(decimal(10,4),0) as PrzVendPrec , CONVERT(decimal(10,4),0) as QtaScarPrec, CONVERT(decimal(10,4),0) as ValScarPrec  INTO #tmpFinale_NoGroup from #tmpStagione UNION ALL SELECT IdArticolo, IdNegozio, 0 as Carico, 0 as Scarico, 0 as Venduto, 0 as VendutoPrezzo, 0 as VendutoCosto, 0 as PackingList, 0 as PackingListCosto, 0 as Disponibilita, 0 as DisponibilitaCosto, sum(rptPackingList) as PlFuture, sum(rptDisponibilitaCostoImponibile) as PlFutureCosto, 0 as DispPrecedente, 0 as DispPrecedenteCosto, 0 as VendutoPrecedente, 0 as VendutoPrecedenteCosto, sum(Quantita * Peso) as Rimanenza, sum(Quantita * Costo) as RimanenzaCosto, 0 as QtaPeriodo, 0 as QtaPeriodoCosto, 0 as QtaPeriodoPrezzo, 0 as Ordinato  ,CONVERT(decimal(10,4),0) as QtaVendPrec , CONVERT(decimal(10,4),0) as ValVendPrec , CONVERT(decimal(10,4),0) as PrzVendPrec , CONVERT(decimal(10,4),0) as QtaScarPrec, CONVERT(decimal(10,4),0) as ValScarPrec FROM #tmpNoStagione WHERE (TipoDocumento = N'PackingList') AND (Data <=@datafinestg AND Data >= @datainistg) AND (Stagione <> @stagione AND Anno <> @anno) GROUP BY IdArticolo, IDNegozio  UNION ALL SELECT IdArticolo, IDNegozio, 0 as Carico, 0 as Scarico, 0 as Venduto, 0 as VendutoPrezzo, 0 as VendutoCosto, 0 as PackingList, 0 as PackingListCosto, 0 as Disponibilita, 0 as DisponibilitaCosto,  0 as PlFuture, 0 as PlFutureCosto, sum(rptDisponibilita * Peso) as DispPrecedente,  sum(rptDisponibilitaCostoImponibile) as DispPrecedenteCosto, sum(rptVenduto * Peso) as VendutoPrecedente,  sum(rptVendutoCostoImponibile) as VendutoPrecedenteCosto,  sum(Quantita * Peso) as Rimanenza,  sum(Quantita * Costo) as RimanenzaCosto,  0 as QtaPeriodo, 0 as QtaPeriodoCosto, 0 as QtaPeriodoPrezzo, 0 as Ordinato  ,CONVERT(decimal(10,4),0) as QtaVendPrec , CONVERT(decimal(10,4),0) as ValVendPrec , CONVERT(decimal(10,4),0) as PrzVendPrec , CONVERT(decimal(10,4),0) as QtaScarPrec, CONVERT(decimal(10,4),0) as ValScarPrec FROM  #tmpNoStagione  WHERE (Data <@datainistg) AND  NOT ((TipoDocumento = N'PackingList') AND   (Stagione = @stagione) AND (Anno = @anno)) GROUP BY IdArticolo, IDNegozio

			SELECT IDArticolo, IDNegozio, sum(Carico) as Carico,  sum(Scarico) as Scarico,  sum(Venduto) as Venduto,  sum(VendutoPrezzo) as VendutoPrezzo,   sum(VendutoCosto) as VendutoCosto,  sum(PackingList) as PackingList,  sum(PackingListCosto) as PackingListCosto,  sum(Disponibilita) as Disponibilita,   sum(DisponibilitaCosto) as DisponibilitaCosto, sum(PlFuture) as PlFuture, sum(PlFutureCosto) as PlFutureCosto, sum(DispPrecedente) as DispPrecedente,  sum(DispPrecedenteCosto) as DispPrecedenteCosto, sum(VendutoPrecedente) as VendutoPrecedente, sum(VendutoPrecedenteCosto) as VendutoPrecedenteCosto,  sum(Rimanenza) as Rimanenza, sum(RimanenzaCosto) as RimanenzaCosto, sum(QtaPeriodo) as QtaPeriodo, sum(QtaPeriodoCosto) as QtaPeriodoCosto,  sum(QtaPeriodoPrezzo) as QtaPeriodoPrezzo, sum(Ordinato) as Ordinato, sum(QtaVendPrec) as QtaVendPrec, sum(ValVendPrec) as ValVendPrec ,  sum(PrzVendPrec) as PrzVendPrec, sum(QtaScarPrec) as QtaScarPrec, sum(ValScarPrec) as ValScarPrec INTO #tmpFinale from #tmpFinale_NoGroup GROUP BY IDArticolo, IDNegozio;
print '5'+ CAST(getdate() AS nvarchar(18))
			UPDATE #tmpFinale SET #tmpFinale.QtaVendPrec = app.Venduto, #tmpFinale.ValVendPrec = app.VendutoCosto, #tmpFinale.PrzVendPrec = app.VendutoPrezzo  FROM #tmpFinale inner join (SELECT sum(Movimento.rptVenduto * Movimento.Peso) as Venduto,  sum(Movimento.rptVendutoPrezzoImponibile) as VendutoPrezzo,  sum(Movimento.rptVendutoCostoImponibile) as VendutoCosto, Movimento.IDArticolo FROM Movimento INNER JOIN (SELECT IDArticolo FROM #tmpFinale WHERE (#tmpFinale.DispPrecedente-#tmpFinale.VendutoPrecedente)<0 and #tmpFinale.DispPrecedente=0 GROUP BY IDArticolo) as Art  ON Movimento.IdArticolo = Art.IdArticolo WHERE  (IDNegozio = @negozio )  AND  (Data < @datainistg)  GROUP BY Movimento.IDArticolo) as app ON #tmpFinale.IDArticolo = app.IDArticolo;

			UPDATE final SET final.QtaVendPrec = Rim.QtaVend,final.ValVendPrec = Rim.ValVend, final.PrzVendPrec = Rim.PrzVend, final.QtaScarPrec = Rim.QtaScar, final.ValScarPrec = Rim.ValScar  FROM #tmpFinale AS final inner join articolo on final.idarticolo=articolo.idarticolo CROSS APPLY dbo.RimanenzaNegativa(articolo.articolo, articolo.taglia, articolo.colore, final.IDNegozio ,  @datainistg, (final.DispPrecedente - final.VendutoPrecedente)) as Rim  WHERE (final.DispPrecedente - final.VendutoPrecedente)<0 AND final.DispPrecedente<>0 ;
print '6'+ CAST(getdate() AS nvarchar(18))
			UPDATE final SET final.QtaScarPrec = (final.DispPrecedente - final.VendutoPrecedente), final.ValScarPrec = (final.DispPrecedenteCosto - final.VendutoPrecedenteCosto)  FROM #tmpFinale AS final WHERE (final.DispPrecedente - final.VendutoPrecedente)>0 ;
	
			-- aggiorno [SituazioneStagione]
			DELETE FROM [NegoziWeb].[dbo].[SituazioneStagione] where Negozio=@negozio and stagioneVendita= @anno + @stagione
print '7'+ CAST(getdate() AS nvarchar(18))
			INSERT INTO [NegoziWeb].[dbo].[SituazioneStagione]([StagioneVendita],[Negozio],[DescNegozio],[CittaNegozio],[RagSocNegozio],[Articolo],[Taglia],[Colore],[DescArticolo],[StagioneArticolo],[PrezzoArticolo],[CostoArticolo],[CMPArticolo],[StampaInStagione]
			,[Carico],[Scarico],[Venduto],[VendutoPrezzoImponibile],[VendutoCostoMovimento],[VendutoCostoAnagrafica],[VendutoCostoCMP],[PackingList],[Disponibilita],[DisponibilitaCostoMovimento],[DisponibilitaCostoAnagrafica],[DisponibilitaCostoCMP],[Ordinato]
			,[Marchio],[DescMarchio],[Fascia],[DescFascia],[Reparto],[DescReparto],[Gruppo],[DescGruppo],[VenditePrec],[VenditePrecCostoMovimento],[VenditePrecCostoAnagrafica],[VenditePrecCostoCMP],[VenditePrecPrezzo],[Rimanenza],[RimanenzaCostoMovimento],[RimanenzaCostoAnagrafica],[RimanenzaCostoCMP])
			SELECT  @anno + @stagione AS StagioneVendita, [#tmpFinale].IdNegozio AS Negozio , Negozio.Descrizione AS DescNegozio, Negozio.Citta AS CittaNegozio, Cliente.RagioneSociale AS RagSocNegozio, Articolo.Articolo, Articolo.Taglia, Articolo.Colore, Articolo.Descrizione as DescArticolo, MAX(Articolo.Anno + REPLACE(REPLACE(Articolo.Stagione,'P','E'),'A','I')) AS StagioneArticolo, AVG(Articolo.Prezzo) AS PrezzoArticolo, AVG(Articolo.Costo) AS CostoArticolo, AVG(Articolo.CMP) AS CMPArticolo, MAX(Articolo.StampaInStagione) AS StampaInStagione,
			SUM(Carico) AS Carico, SUM(Scarico) AS Scarico, SUM(Venduto) AS Venduto, SUM(VendutoPrezzo) AS VendutoPrezzoImponibile, SUM(VendutoCosto)AS VendutoCostoMovimento, SUM(Venduto) * AVG(Articolo.Costo) AS VendutoCostoAnagrafica, SUM(Venduto) * AVG(Articolo.CMP) AS VendutoCostoCMP, SUM(PackingList) AS PackingList, SUM(Disponibilita) AS Disponibilita, SUM(DisponibilitaCosto) AS DisponibilitaCostoMovimento,  SUM(Disponibilita)* AVG(Articolo.Costo) AS DisponibilitaCostoAnagrafica,  SUM(Disponibilita)* AVG (Articolo.CMP) AS DisponibilitaCostoCMP, 
			SUM(Ordinato) AS Ordinato,  Articolo.Marchio, tblMarchio.Descrizione AS DescMarchio,  Articolo.Fascia, tblFascia.Descrizione AS DescFascia,  Articolo.Reparto, tblReparto.Descrizione AS DescReparto,  Articolo.Gruppo, tblGruppo.Descrizione AS DescGruppo,  Sum(QtaVendPrec) as VenditePrec, sum(ValVendPrec)  as VenditePrecCostoMovimento, sum(QtaVendPrec)* AVG(Articolo.Costo) as VenditePrecCostoAnagrafica, sum(QtaVendPrec) * AVG(Articolo.CMP) as VenditePrecCostoCMP, sum(PrzVendPrec) as VenditePrecPrezzo, 
			sum(QtaScarPrec) as Rimanenza, sum(ValScarPrec) as RimanenzaCostoMovimento,sum(QtaScarPrec) * AVG(Articolo.Costo) as RimanenzaCostoAnagrafica,sum(QtaScarPrec) * AVG(Articolo.CMP) as RimanenzaCostoCMP  
			FROM [#tmpFinale] INNER JOIN Articolo ON [#tmpFinale].IdArticolo = Articolo.IDArticolo INNER JOIN  Negozio ON [#tmpFinale].IdNegozio = Negozio.IDNegozio INNER JOIN Cliente ON Negozio.IDCliente = Cliente.IDCliente  LEFT JOIN  tblGruppo ON Articolo.Gruppo = tblGruppo.Codice LEFT OUTER JOIN  tblReparto ON Articolo.Reparto = tblReparto.Codice LEFT OUTER JOIN  tblFascia ON Articolo.Fascia = tblFascia.Codice LEFT OUTER JOIN  tblMarchio ON Articolo.Marchio = tblMarchio.Codice   
			GROUP BY [#tmpFinale].IdNegozio, Negozio.Descrizione,  Negozio.Citta, Cliente.RagioneSociale,  Articolo.Marchio, tblMarchio.Descrizione ,  Articolo.Fascia, tblFascia.Descrizione ,  Articolo.Reparto, tblReparto.Descrizione ,  Articolo.Gruppo, tblGruppo.Descrizione ,  Articolo.Descrizione, Articolo.Articolo , Articolo.Colore, Articolo.Taglia   ORDER BY [#tmpFinale].IdNegozio + ' ' + Negozio.Descrizione,  Articolo.Marchio, tblMarchio.Descrizione ,  Articolo.Fascia, tblFascia.Descrizione ,  Articolo.Reparto, tblReparto.Descrizione ,  Articolo.Gruppo, tblGruppo.Descrizione ,  Articolo.Descrizione, Articolo.Articolo , Articolo.Colore, Articolo.Taglia;
			
		print '8'+ CAST(getdate() AS nvarchar(18))	

	-- aggiorno tblArticolo
	if @aggiornaArticoli=1 begin
	
		print 'Articoli aggiornati!'
	
		DELETE FROM [NegoziWeb].[dbo].[tblArticolo]
				
		INSERT INTO [NegoziWeb].[dbo].[tblArticolo] ([Articolo] ,[Immagine] ,[Documento]) SELECT  Articolo, Articolo +'.png', Articolo +'.pdf' FROM [NegoziWeb].[dbo].[SituazioneStagione] GROUP BY Articolo;
	end
	
	END
