DECLARE @Dadata DATETIME;
DECLARE @Adata DATETIME;
DECLARE @Clicod VARCHAR(36);
DECLARE @AllDoc TINYINT;

--SET @Dadata = {?Dadata};
--SET @Adata = {?Adata};
--SET @Clicod ='{?Cli_cod}'
--SET @AllDoc = {?Documenti};

SET @Dadata = '20210101';
SET @Adata = '20211231';
SET @Clicod ='876a25a8-b1e7-49fe-a5b8-152124616e6c'
SET @AllDoc = 1;

-- Tutti i documenti

IF @AllDoc = 0 

BEGIN 

SELECT DISTINCT
	doc_super_tipo
	,doc_tipo
	,doc_tipo_doc_fisc
	,doc_data
	,doc_numero
	,doc_num_alt
	,
	CASE
		WHEN doc_tipo = 115 THEN - doc_tot_imponibile
		ELSE doc_tot_imponibile
	END AS doc_tot_imponibile
	,
	CASE
		WHEN doc_tipo = 115 THEN - doc_tot_imposta
		ELSE doc_tot_imposta
	END AS doc_tot_imposta
	,
	CASE
		WHEN doc_tipo = 115 THEN - doc_tot_generale
		ELSE doc_tot_generale
	END AS doc_tot_generale
	,incassi_x_doc.tot_incassato
	,clienti.cli_cod
  	,clienti.cli_nome
 	,clienti.cli_nome_f
 	,clienti.cli_nome_l
 	,clienti.cli_indi
 	,clienti.cli_cap
 	,clienti.cli_citta
 	,clienti.cli_prov
 	,clienti.cli_nazione
 	,clienti.cli_tel
 	,clienti.cli_tel2
 	,clienti.cli_fax
 	,clienti.cli_tel_cell
 	,clienti.cli_email
 	,clienti.cli_cod_fisc
 	,clienti.cli_part_iva
	,veicoli.vei_descr
	,veicoli.vei_targa
	,veicoli.vei_telaio
	,pag_descr
	,'' IntestatarioFatt
FROM documenti
LEFT JOIN 
	(SELECT 
		doc_cod
		, sum(incassato) OVER (PARTITION BY doc_cod) AS tot_incassato
	 FROM 
		(SELECT 
			doc_cod
			,doc_tot_incassato AS incassato
		 FROM documenti
		 WHERE (doc_super_tipo =2 OR doc_super_tipo =3 OR doc_super_tipo =4) AND doc_tot_incassato > 0
		 UNION ALL
		 SELECT 
			doc_cod_provv
			,acc_doc_provv_tot AS incassato
		 FROM acconti) T1
	) incassi_x_doc ON 
		documenti.doc_cod = incassi_x_doc.doc_cod
INNER JOIN pratiche ON 
	documenti.pra_cod=pratiche.pra_cod
INNER JOIN veicoli ON 
	pratiche.vei_cod=veicoli.vei_cod
INNER JOIN clienti ON 
	veicoli.cli_cod=clienti.cli_cod 
LEFT JOIN pagamenti ON 
	documenti.pag_cod=pagamenti.pag_cod
WHERE 
	(doc_tipo =105
	OR doc_tipo=106
	OR doc_tipo=107
	OR doc_tipo=108
	OR doc_tipo=109
	OR doc_tipo =110
	OR doc_tipo=111
	OR doc_tipo=112
	OR doc_tipo=113
	OR doc_tipo=114
	OR doc_tipo=115
	OR doc_tipo=119
	OR doc_tipo=120
	OR doc_tipo=121)
	AND doc_data BETWEEN @Dadata AND @Adata
	AND documenti.doc_bound = 1
	AND clienti.cli_cod = @Clicod

UNION ALL

SELECT DISTINCT
	doc_super_tipo
	,doc_tipo
	,doc_tipo_doc_fisc
	,doc_data
	,doc_numero
	,doc_num_alt
	,
	CASE
		WHEN doc_tipo = 115 THEN - doc_tot_imponibile
		ELSE doc_tot_imponibile
	END AS doc_tot_imponibile
	,
	CASE
		WHEN doc_tipo = 115 THEN - doc_tot_imposta
		ELSE doc_tot_imposta
	END AS doc_tot_imposta
	,
	CASE
		WHEN doc_tipo = 115 THEN - doc_tot_generale
		ELSE doc_tot_generale
	END AS doc_tot_generale
	,incassi_x_doc.tot_incassato
	,clienti.cli_cod
 	,clienti.cli_nome
 	,clienti.cli_nome_f
 	,clienti.cli_nome_l
 	,clienti.cli_indi
 	,clienti.cli_cap
 	,clienti.cli_citta
 	,clienti.cli_prov
 	,clienti.cli_nazione
 	,clienti.cli_tel
 	,clienti.cli_tel2
 	,clienti.cli_fax
 	,clienti.cli_tel_cell
 	,clienti.cli_email
 	,clienti.cli_cod_fisc
 	,clienti.cli_part_iva
	,veicoli.vei_descr
	,veicoli.vei_targa
	,veicoli.vei_telaio
	,pag_descr  
	,
	CASE
		WHEN parti_x_documenti.cli_part_iva <> '' THEN parti_x_documenti.cli_nome_l + ' '+ parti_x_documenti.cli_nome_f + ' ' + 'P.I.'+ parti_x_documenti.cli_part_iva
		WHEN parti_x_documenti.cli_part_iva = '' AND parti_x_documenti.cli_cod_fisc <> '' THEN parti_x_documenti.cli_nome_l + ' '+ parti_x_documenti.cli_nome_f + ' ' + 'C.F.'+ parti_x_documenti.cli_cod_fisc
		WHEN parti_x_documenti.cli_part_iva = '' AND parti_x_documenti.cli_cod_fisc = '' THEN parti_x_documenti.cli_nome_l + ' '+ parti_x_documenti.cli_nome_f
	END IntestatarioFatt
FROM documenti
LEFT JOIN
	(SELECT 
		doc_cod
		, sum(incassato) OVER (PARTITION BY doc_cod) AS tot_incassato
	 FROM 
		(SELECT 
			doc_cod
			,doc_tot_incassato AS incassato
		 FROM documenti
		 WHERE (doc_super_tipo =2 OR doc_super_tipo =3 OR doc_super_tipo =4) AND doc_tot_incassato > 0
		 UNION ALL
		 SELECT
			doc_cod_provv
			,acc_doc_provv_tot AS incassato
		 FROM acconti) T1
	) incassi_x_doc ON 
		documenti.doc_cod = incassi_x_doc.doc_cod
INNER JOIN parti_x_documenti ON
	parti_x_documenti.parxdoc_cod_u = documenti.doc_cod
INNER JOIN pratiche ON 
	documenti.pra_cod=pratiche.pra_cod
INNER JOIN veicoli ON
	pratiche.vei_cod=veicoli.vei_cod
INNER JOIN clienti ON
	veicoli.cli_cod=clienti.cli_cod 
LEFT JOIN pagamenti ON 
	documenti.pag_cod=pagamenti.pag_cod
WHERE 
	(doc_tipo =105
	OR doc_tipo=106
	OR doc_tipo=107
	OR doc_tipo=108
	OR doc_tipo=109
	OR doc_tipo=110
	OR doc_tipo=111
	OR doc_tipo=112
	OR doc_tipo=113
	OR doc_tipo=114
	OR doc_tipo=115
	OR doc_tipo=119
	OR doc_tipo=120
	OR doc_tipo=121)
	AND doc_data BETWEEN @Dadata AND @Adata
	AND documenti.doc_bound = 0
	AND clienti.cli_cod = @Clicod
END 

 -- Solo i documenti non incassati
IF @AllDoc = 1 

BEGIN

SELECT DISTINCT
	doc_super_tipo
	,doc_tipo
	,doc_tipo_doc_fisc
	,doc_data
	,doc_numero
	,doc_num_alt
	,
	CASE
		WHEN doc_tipo = 115 THEN - doc_tot_imponibile
		ELSE doc_tot_imponibile
	END AS doc_tot_imponibile
	,
	CASE
		WHEN doc_tipo = 115 THEN - doc_tot_imposta
		ELSE doc_tot_imposta
	END AS doc_tot_imposta
	,
	CASE
		WHEN doc_tipo = 115 THEN - doc_tot_generale
		ELSE doc_tot_generale
	END AS doc_tot_generale
	,incassi_x_doc.tot_incassato
	,clienti.cli_cod
  	,clienti.cli_nome
 	,clienti.cli_nome_f
 	,clienti.cli_nome_l
 	,clienti.cli_indi
 	,clienti.cli_cap
 	,clienti.cli_citta
 	,clienti.cli_prov
 	,clienti.cli_nazione
 	,clienti.cli_tel
 	,clienti.cli_tel2
 	,clienti.cli_fax
 	,clienti.cli_tel_cell
 	,clienti.cli_email
 	,clienti.cli_cod_fisc
 	,clienti.cli_part_iva
	,veicoli.vei_descr
	,veicoli.vei_targa
	,veicoli.vei_telaio
	,pag_descr  
	,'' IntestatarioFatt
FROM documenti
left join 
	(SELECT 
		doc_cod
		, SUM(incassato) OVER (PARTITION BY doc_cod) AS tot_incassato
	FROM 
		(SELECT 
			doc_cod
			,doc_tot_incassato AS incassato
		 FROM documenti
		 WHERE (doc_super_tipo =2 OR doc_super_tipo =3 OR doc_super_tipo =4) 
				AND doc_tot_incassato > 0
		 UNION ALL
		 SELECT doc_cod_provv
			,acc_doc_provv_tot AS incassato
		 FROM acconti) T1
	) incassi_x_doc ON 
	documenti.doc_cod = incassi_x_doc.doc_cod
INNER JOIN pratiche ON 
	documenti.pra_cod=pratiche.pra_cod
INNER JOIN veicoli ON 
	pratiche.vei_cod=veicoli.vei_cod
INNER JOIN clienti ON 
	veicoli.cli_cod=clienti.cli_cod 
LEFT JOIN pagamenti ON 
	documenti.pag_cod=pagamenti.pag_cod
WHERE 
	(doc_tipo =105
	OR doc_tipo=106
	OR doc_tipo=107
	OR doc_tipo=108
	OR doc_tipo=109
	OR doc_tipo =110
	OR doc_tipo=111
	OR doc_tipo=112
	OR doc_tipo=113
	OR doc_tipo=114
	OR doc_tipo=115)
	AND doc_data BETWEEN @Dadata AND @Adata
	AND documenti.doc_bound = 1
	AND clienti.cli_cod = @Clicod
	AND ((doc_tot_generale - incassi_x_doc.tot_incassato > 0) OR (doc_tot_generale IS NOT NULL AND incassi_x_doc.tot_incassato IS NULL))

UNION ALL

SELECT DISTINCT
	doc_super_tipo
	,doc_tipo
	,doc_tipo_doc_fisc
	,doc_data
	,doc_numero
	,doc_num_alt
	,
	CASE
		WHEN doc_tipo = 115 THEN - doc_tot_imponibile
		ELSE doc_tot_imponibile
	END AS doc_tot_imponibile
	,
	CASE
		WHEN doc_tipo = 115 THEN - doc_tot_imposta
		ELSE doc_tot_imposta
	END AS doc_tot_imposta
	,
	CASE
		WHEN doc_tipo = 115 THEN - doc_tot_generale
		ELSE doc_tot_generale
	END AS doc_tot_generale
	,incassi_x_doc.tot_incassato
	,clienti.cli_cod
 	,clienti.cli_nome
 	,clienti.cli_nome_f
 	,clienti.cli_nome_l
 	,clienti.cli_indi
 	,clienti.cli_cap
 	,clienti.cli_citta
 	,clienti.cli_prov
 	,clienti.cli_nazione
 	,clienti.cli_tel
 	,clienti.cli_tel2
 	,clienti.cli_fax
 	,clienti.cli_tel_cell
 	,clienti.cli_email
 	,clienti.cli_cod_fisc
 	,clienti.cli_part_iva
	,parti_x_documenti.vei_descr
	,parti_x_documenti.vei_targa
	,parti_x_documenti.vei_telaio
	,pag_descr  
	,
	CASE
		WHEN parti_x_documenti.cli_part_iva <> '' THEN parti_x_documenti.cli_nome_l + ' '+ parti_x_documenti.cli_nome_f + ' ' + 'P.I.'+ parti_x_documenti.cli_part_iva
		WHEN parti_x_documenti.cli_part_iva = '' AND parti_x_documenti.cli_cod_fisc <> '' THEN parti_x_documenti.cli_nome_l + ' '+ parti_x_documenti.cli_nome_f + ' ' + 'C.F.'+ parti_x_documenti.cli_cod_fisc
		WHEN parti_x_documenti.cli_part_iva = '' AND parti_x_documenti.cli_cod_fisc = '' THEN parti_x_documenti.cli_nome_l + ' '+ parti_x_documenti.cli_nome_f
	END IntestatarioFatt
FROM documenti
LEFT JOIN 
	(SELECT 
		doc_cod
		, sum(incassato) over (partition by doc_cod) as tot_incassato
	 FROM 
		(SELECT 
			doc_cod
			,doc_tot_incassato AS incassato
		 FROM documenti
		 WHERE (doc_super_tipo =2 OR doc_super_tipo =3 OR doc_super_tipo =4) AND doc_tot_incassato > 0
		 UNION ALL
		 SELECT
			doc_cod_provv
			,acc_doc_provv_tot AS incassato
		 FROM acconti) T1
	) incassi_x_doc ON 
		documenti.doc_cod = incassi_x_doc.doc_cod
INNER JOIN parti_x_documenti ON 
	parti_x_documenti.parxdoc_cod_u = documenti.doc_cod
INNER JOIN pratiche ON
	documenti.pra_cod=pratiche.pra_cod
INNER JOIN veicoli ON
	pratiche.vei_cod=veicoli.vei_cod
INNER JOIN clienti ON
	veicoli.cli_cod=clienti.cli_cod 
LEFT JOIN pagamenti ON
	documenti.pag_cod=pagamenti.pag_cod
WHERE 
	(doc_tipo =105
	OR doc_tipo=106
	OR doc_tipo=107
	OR doc_tipo=108
	OR doc_tipo=109
	OR doc_tipo =110
	OR doc_tipo=111
	OR doc_tipo=112
	OR doc_tipo=113
	OR doc_tipo=114
	OR doc_tipo=115)
	AND doc_data BETWEEN @Dadata AND @Adata
	AND documenti.doc_bound = 0
	AND clienti.cli_cod = @Clicod
	AND ((doc_tot_generale - incassi_x_doc.tot_incassato > 0) OR (doc_tot_generale IS NOT NULL AND incassi_x_doc.tot_incassato IS NULL))
END
