
-- =============================================
-- Author:		<Hans Marcell R.L.>
-- Create date: <20/09/2019>
-- Description:	<Crea json da dare all'appliccativo SimplePrintServer per stampare ricevute fiscali>
-- =============================================
CREATE PROCEDURE [dbo].[spJsonMaker]
	-- Add the parameters for the stored procedure here
	@id varchar(20)
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

	DECLARE @id_vendita int

	SET @id_vendita = (SELECT id_vendita FROM vwRicevute WHERE numerofull = @id)

	-- SELEZIONE DELLE VOCI IVA
	declare @tempTb table (tipo_riga int, importo money, imponibile money, iva_money money, aliquota int)

	INSERT INTO @tempTb (tipo_riga, importo, imponibile, iva_money, aliquota)
	SELECT 	 
			-- in base al campo id_vendita_originale (se compilato) deve essere esguita una vendita o un annullo
			CASE
			WHEN (sum(importo) >= 0) -- se id_vendita_originale is null => NON è uno STORNO/ANNULLO
				THEN 1							-- quindi il tipo è 1 (vendita)
			ELSE 
				4	-- altrimenti è 4 = ANNULLO			
			END AS tipo_riga,
			sum(importo) as Totale, (sum(importo) - sum(iva_money)) as Imponibile, sum(iva_money) as Iva, Aliquota 
			from (
				SELECT
					round(isnull(pagamento.importo,0)*isnull(totale,0)/totale_vendita,2) as importo,  
					round(isnull(pagamento.importo,0)*isnull(totale,0)/totale_vendita,2) as imponibile, 
					0 AS iva_money, 
					0 AS Aliquota
				FROM	pagamento INNER JOIN
						vendita ON pagamento.id_vendita = vendita.id_vendita INNER JOIN
						dettaglio_vendita ON vendita.id_vendita = dettaglio_vendita.id_vendita						 
				WHERE  (totale_vendita<>0) 
						and  (CONVERT(varchar(MAX), pagamento.numeroricevuta) + '|' + CONVERT(varchar(MAX), ISNULL(pagamento.annoricevuta, '9999'))=@id) 
						and (vendita.rateale=1)   
				UNION ALL
				select 
					isnull(dettaglio_vendita.totale,0) as Totale, 
					isnull(totale,0) - isnull(tassazione_importo,0) as Imponibile, 
					isnull(tassazione_importo,0) as iva_money, 
					isnull(tassazione_percentuale,0) as aliquota
				from 
					dettaglio_vendita 
						where dettaglio_vendita.id_vendita in (
							select distinct pagamento.id_vendita from pagamento inner join vendita on pagamento.id_vendita=vendita.id_vendita
							where (vendita.id_vendita_originale is null) and (vendita.Rateale=0) and (totale_vendita<>0) 
							and  (CONVERT(varchar(MAX), pagamento.numeroricevuta) + '|' + CONVERT(varchar(MAX), ISNULL(pagamento.annoricevuta, '9999'))=@id) 
							)
				UNION ALL
						SELECT   
							round(isnull(pagamento.importo,0)*isnull(totale,0)/totale_vendita,2) as Totale,  
							round(isnull(pagamento.importo,0)*isnull(totale,0)/totale_vendita,2) as imponibile,
							isnull(dettaglio_vendita.tassazione_importo,0) as iva,
							isnull(tassazione_percentuale,0) as Aliquota
							FROM            
								dettaglio_vendita INNER JOIN
								vendita ON vendita.id_vendita=dettaglio_vendita.id_vendita
								inner join pagamento on vendita.id_vendita=pagamento.id_vendita
								where dettaglio_vendita.id_vendita in (
									select distinct pagamento.id_vendita from pagamento inner join vendita on pagamento.id_vendita=vendita.id_vendita
									where (vendita.id_vendita_originale is not null) and (vendita.Rateale=0) and (totale_vendita<>0) 
									and  (CONVERT(varchar(MAX), pagamento.numeroricevuta) + '|' + CONVERT(varchar(MAX), ISNULL(pagamento.annoricevuta, '9999'))=@id) 
							)
			) t
			GROUP BY Aliquota
			ORDER BY Aliquota, Totale

	

-- FINE BLOCCO SELEZIONE IVA: Usare la tabella @tempTb per la select dei servizi

	--Righe di dettaglio vendita
	declare @jsonRighe nvarchar(max)

	set @jsonRighe = (
		select * from (
			SELECT 0 as tipo_riga , rtrim(ltrim(descrizione)) as descrizione, 0 as importo, id_dettaglio_vendita, 0 as ordine, '00' as cod_reparto FROM [dbo].[vwDettaglioVendite] WHERE id_vendita = 90796
			union 
			SELECT 0 as tipo_riga, ' Note: ' + rtrim(ltrim(noteVendita)) as descrizione, 0 as importo,id_dettaglio_vendita, 1 as ordine,'00' as cod_reparto FROM [dbo].[vwDettaglioVendite] WHERE id_vendita = 90796 and sconto_importo>0
			union
			select 0 as tipo_riga , '' as descrizione, 0 as importo, 10000001 id_dettaglio_vendita, 3 as ordine, '00' as cod_reparto
			union
			select tipo_riga , 'Servizi con iva a '+CONVERT(varchar(4),aliquota) as descrizione, 
				-- l'importo DEVE essere sempre positivo
				CASE 
				WHEN (importo >= 0) 
					THEN importo			
				ELSE 
					(importo * -1)	-- ANNULLO			
				END 
				as importo, 
				10000002 id_dettaglio_vendita, 3 as ordine,
			 (SELECT TOP(1) cod_reparto from dbo.iva WHERE iva = dbo.iva.iva) as cod_reparto FROM @tempTb 
			--select 1 as tipo_riga , 'Servizi acquistati' as descrizione, max(dapagare) as importo, 10000002 id_dettaglio_vendita, 3 as ordine FROM [dbo].[vwDettaglioVendite] WHERE id_vendita = 90796 group by id_dettaglio_vendita
			
		) righe 
		order by 4, 5
		FOR JSON AUTO		
	)

	declare @importo money
	set @importo = (SELECT importo FROM vwRicevute WHERE numerofull = @id)

	declare @totale_vendita money
	set @totale_vendita = (SELECT totale_vendita FROM vwRicevute WHERE numerofull = @id)

	declare @pagato bit
	if(@importo = @totale_vendita)
	set @pagato = 1;
	else
	set @pagato = 0;
	;

	declare @stampa_subtotale bit
	set @stampa_subtotale = 0


	--pacchetto JSON completo
	declare @jsonCompleto nvarchar(max)

	set @jsonCompleto = (
		select * from (
			SELECT TOP(1) @jsonRighe as righe, TipoPagamento as descr_pagamento, importo as importo_pagamento, @pagato as pagato, @stampa_subtotale as stampa_subtotale, '' as riga_aggiuntiva,Nominativo as cliente, (SELECT [codfiscale] FROM [dbo].[Contatto] C WHERE C.Id_Contatto = vwRicevute.Id_Contatto) AS 'codfisc_cliente' FROM [dbo].[vwRicevute] where numerofull = @id
		) data FOR JSON AUTO
	)


	declare @UltimateJSON nvarchar(max)
	set @UltimateJSON = (
		select * from (
			select 2 as tipo_operazione, @jsonCompleto as data
		) pacchetto FOR JSON AUTO
	)

	set @UltimateJSON = REPLACE(@UltimateJSON,'\','')
	set @UltimateJSON = REPLACE(@UltimateJSON,'"[','[')
	set @UltimateJSON = REPLACE(@UltimateJSON,']"',']')

	set @UltimateJSON = REPLACE(@UltimateJSON,'[{"tipo_operazione','{"tipo_operazione')
	set @UltimateJSON = REPLACE(@UltimateJSON,'"data":[','"data":')
	set @UltimateJSON = REPLACE(@UltimateJSON,'}]}]','}}')

	

		select @UltimateJSON

END
