/*Relatório Fecho Dia Detalhado Resumo vendas por zona, turno e estatísticas de pessoas MÁRIO ALVES | v1.05 | 2020-11-26 Pressupostos: Versão 2019.0.2.40 do ZSrest que implementa o registo de pessoas por documentos Release review: Ajuste na definição das zonas para identificar os pedidos integrados da Glovo*/ DECLARE @datainicio as DATETIME, @datafim as DATETIME SET @datainicio = %Date SET @datafim = @datainicio --TOTAL select cast (cast (x.data as date) as varchar) data, 'TOTAL' as zonaGrupo, right(' '+convert(varchar(20),format(sum(x.totalciva_lin),'C','pt-PT')),12) vendas_CIVA, right(' '+convert(varchar(20),format(sum(x.totalsiva_lin),'C','pt-PT')),12) vendas_SIVA, right(' '+convert(varchar(4),sum(x.pessoas)),4) pessoas, right(' '+convert(varchar(20),format(sum(x.totalciva_lin) / case when sum(x.pessoas) = 0 then 1 else sum(x.pessoas) end ,'C','pt-PT')),12) percapita_CIVA, right(' '+convert(varchar(20),format(sum(x.totalsiva_lin) / case when sum(x.pessoas) = 0 then 1 else sum(x.pessoas) end ,'C','pt-PT')),12) percapita_SIVA from ( select distinct y.data, y.zonaCod, y.zonaDescr, y.zonaGrupo, y.doc, y.serie, y.numero, y.turno, y.pessoas, y.totalciva, y.totalsiva, sum(y.totalciva_lin) totalciva_lin, sum(y.totalsiva_lin) totalsiva_lin, sum(y.totalIliquido) totalIliquido, sum(y.desconto_lin) desconto from ( SELECT d.nome as entidade, d.Contribuinte contribuinte, d.data, d.descricao, d.descanulado, c.codigo as caixaCod, c.descricao as caixa, d.idcx, cx.periodo as turno, v.posto, d.mesa, z.codigo as zonaCod, z.descricao as zonaDescr, case when z.descricao like '%ESPLANADA%' then 'ESPLANADA' when z.descricao like '%TOPO%' then 'TOPO' when z.descricao like '%FUNDO%' then 'FUNDO' when z.descricao like '%BALCAO BAR%' then 'BALCAO BAR' when z.descricao like '%BALCAO COZINHA%' then 'BALCAO COZINHA' when z.descricao like '%Uber%' then 'Ubereats' when z.descricao like '%Glovo%' then 'Glovo' when z.descricao like '%Takeaway%' then 'Takeaway' when z.descricao like '%RESTAURANTE%' then 'RESTAURANTE' when z.descricao like '%BOARDING%' then 'BOARDING PASS' when z.descricao like '%DELIVERY%' then 'DELIVERY' when d.mesa < -2000 and d.pagamento = 28 then 'Ubereats' when d.mesa < -2000 and d.pagamento = 36 then 'Glovo' --nova opção para identificação dos pedidos integrados Glovo else 'Não Definida' end zonaGrupo, case when ISNULL(dp.pessoas, 0) = 0 then (case when d.doc = 'NC' then -1 else 1 end) else dp.pessoas end as pessoas, d.doc as doc, d.serie serie, d.numero, d.liquido as totalsiva, d.total as totalciva, v.Codigo as produtoCod, v.Descricao as produto, v.IVA as iva, v.qtd as qtdmov, v.Punit as precounitario, v.qtd * v.Punit as totalIliquido, v.Desconto as desconto_lin, v.Valor as totalsiva_lin, v.Total as totalciva_lin, v.liquido as totalliquido_lin, d.descricao as obs, f.descricao as familia, sf.descricao as subfamilia, dd.doc as docOrigem, dd.serie as serieOrigem, dd.numero as numeroOrigem, dd.descanulado as descAnuladoOrigem FROM documentos d INNER JOIN vendas v ON v.doc = d.doc AND v.serie = d.serie AND v.numero = d.numero INNER JOIN produtos p on p.codigo = v.codigo LEFT JOIN familias f on f.codigo = p.familia LEFT JOIN subfamilias sf on sf.codigo = p.subfam LEFT JOIN caixa cx on cx.idcx = d.idcx LEFT JOIN caixas c on c.codigo = cx.caixa LEFT JOIN documentos_pessoas dp ON dp.doc = d.doc AND dp.serie = d.serie AND dp.numero = d.numero LEFT JOIN documentos dd on dd.doc = substring(d.descricao, 14,2) and dd.serie = substring(d.descricao, 17,LEN(v.serie)) and dd.numero = substring(d.descricao, 18 + LEN(v.serie),6) LEFT JOIN ( SELECT distinct d.mesa, case when ISNULL(z.codigo, 0) = 0 then pst.zona else z.codigo end as codigo, case when ISNULL(z.codigo, 0) = 0 then (case when ISNULL(zp.descricao, ' ') = ' ' then 'NÃO DEFINIDA' else zp.descricao end ) else z.descricao end as descricao, pst.descricao posto, pst.zona as postoZonaCod, zp.descricao as postoZona FROM documentos d LEFT JOIN mapamesas mm on mm.numeroobjecto = d.mesa LEFT JOIN zonas z on z.codigo = mm.zona LEFT JOIN postos pst on pst.codigo = SUBSTRING( (convert(varchar(10),d.mesa) ), 3 , 2 ) and d.mesa > 1000 LEFT JOIN zonas zp on zp.codigo = pst.zona WHERE (d.doc IN ('FS', 'FT', 'FA', 'NC')) AND d.anulado = 0 and d.data >=@datainicio and d.data <= @datafim ) z on z.mesa = d.mesa WHERE d.doc IN ('FA','NC','FS','FT') AND d.anulado = 0 and d.data >= @datainicio and d.data <= @datafim ) y GROUP BY y.data, y.zonaCod, y.zonaDescr, y.zonaGrupo, y.doc, y.serie, y.numero, y.turno, y.pessoas, y.totalciva, y.totalsiva )x GROUP BY x.data union all --TOTAL ZONA select cast (cast (x.data as date) as varchar) data, x.zonaGrupo, right(' '+convert(varchar(20),format(sum(x.totalciva_lin),'C','pt-PT')),12) vendas_CIVA, right(' '+convert(varchar(20),format(sum(x.totalsiva_lin),'C','pt-PT')),12) vendas_SIVA, right(' '+convert(varchar(4),sum(x.pessoas)),4) pessoas, right(' '+convert(varchar(20),format(sum(x.totalciva_lin) / case when sum(x.pessoas) = 0 then 1 else sum(x.pessoas) end ,'C','pt-PT')),12) percapita_CIVA, right(' '+convert(varchar(20),format(sum(x.totalsiva_lin) / case when sum(x.pessoas) = 0 then 1 else sum(x.pessoas) end ,'C','pt-PT')),12) percapita_SIVA from ( select distinct y.data, y.zonaCod, y.zonaDescr, y.zonaGrupo, y.doc, y.serie, y.numero, y.turno, y.pessoas, y.totalciva, y.totalsiva, sum(y.totalciva_lin) totalciva_lin, sum(y.totalsiva_lin) totalsiva_lin, sum(y.totalIliquido) totalIliquido, sum(y.desconto_lin) desconto from ( SELECT d.nome as entidade, d.Contribuinte contribuinte, d.data, d.descricao, d.descanulado, c.codigo as caixaCod, c.descricao as caixa, d.idcx, cx.periodo as turno, v.posto, d.mesa, z.codigo as zonaCod, z.descricao as zonaDescr, case when z.descricao like '%ESPLANADA%' then 'ESPLANADA' when z.descricao like '%TOPO%' then 'TOPO' when z.descricao like '%FUNDO%' then 'FUNDO' when z.descricao like '%BALCAO BAR%' then 'BALCAO BAR' when z.descricao like '%BALCAO COZINHA%' then 'BALCAO COZINHA' when z.descricao like '%Uber%' then 'Ubereats' when z.descricao like '%Glovo%' then 'Glovo' when z.descricao like '%Takeaway%' then 'Takeaway' when z.descricao like '%RESTAURANTE%' then 'RESTAURANTE' when z.descricao like '%BOARDING%' then 'BOARDING PASS' when z.descricao like '%DELIVERY%' then 'DELIVERY' when d.mesa < -2000 and d.pagamento = 28 then 'Ubereats' when d.mesa < -2000 and d.pagamento = 36 then 'Glovo' --nova opção para identificação dos pedidos integrados Glovo else 'Não Definida' end zonaGrupo, case when ISNULL(dp.pessoas, 0) = 0 then (case when d.doc = 'NC' then -1 else 1 end) else dp.pessoas end as pessoas, d.doc as doc, d.serie serie, d.numero, d.liquido as totalsiva, d.total as totalciva, v.Codigo as produtoCod, v.Descricao as produto, v.IVA as iva, v.qtd as qtdmov, v.Punit as precounitario, v.qtd * v.Punit as totalIliquido, v.Desconto as desconto_lin, v.Valor as totalsiva_lin, v.Total as totalciva_lin, v.liquido as totalliquido_lin, d.descricao as obs, f.descricao as familia, sf.descricao as subfamilia, dd.doc as docOrigem, dd.serie as serieOrigem, dd.numero as numeroOrigem, dd.descanulado as descAnuladoOrigem FROM documentos d INNER JOIN vendas v ON v.doc = d.doc AND v.serie = d.serie AND v.numero = d.numero INNER JOIN produtos p on p.codigo = v.codigo LEFT JOIN familias f on f.codigo = p.familia LEFT JOIN subfamilias sf on sf.codigo = p.subfam LEFT JOIN caixa cx on cx.idcx = d.idcx LEFT JOIN caixas c on c.codigo = cx.caixa LEFT JOIN documentos_pessoas dp ON dp.doc = d.doc AND dp.serie = d.serie AND dp.numero = d.numero LEFT JOIN documentos dd on dd.doc = substring(d.descricao, 14,2) and dd.serie = substring(d.descricao, 17,LEN(v.serie)) and dd.numero = substring(d.descricao, 18 + LEN(v.serie),6) LEFT JOIN ( SELECT distinct d.mesa, case when ISNULL(z.codigo, 0) = 0 then pst.zona else z.codigo end as codigo, case when ISNULL(z.codigo, 0) = 0 then (case when ISNULL(zp.descricao, ' ') = ' ' then 'NÃO DEFINIDA' else zp.descricao end ) else z.descricao end as descricao, pst.descricao posto, pst.zona as postoZonaCod, zp.descricao as postoZona FROM documentos d LEFT JOIN mapamesas mm on mm.numeroobjecto = d.mesa LEFT JOIN zonas z on z.codigo = mm.zona LEFT JOIN postos pst on pst.codigo = SUBSTRING( (convert(varchar(10),d.mesa) ), 3 , 2 ) and d.mesa > 1000 LEFT JOIN zonas zp on zp.codigo = pst.zona WHERE (d.doc IN ('FS', 'FT', 'FA', 'NC')) AND d.anulado = 0 and d.data >=@datainicio and d.data <= @datafim ) z on z.mesa = d.mesa WHERE d.doc IN ('FA','NC','FS','FT') AND d.anulado = 0 and d.data >= @datainicio and d.data <= @datafim ) y GROUP BY y.data, y.zonaCod, y.zonaDescr, y.zonaGrupo, y.doc, y.serie, y.numero, y.turno, y.pessoas, y.totalciva, y.totalsiva )x GROUP BY x.data, x.zonaGrupo UNION ALL --SEPARADOR SELECT ' ' data, ' ' zonaGrupo, ' ' vendas_CIVA, ' ' vendas_SIVA, ' ' pessoas, ' ' percapita_CIVA, ' ' percapita_SIVA UNION ALL --TOTAL TURNO 1 select cast (cast (x.data as date) as varchar) data, case when x.turno = 1 then 'T1' when x.turno = 2 then 'T2' else 'Tx' end as zonaGrupo, right(' '+convert(varchar(20),format(sum(x.totalciva_lin),'C','pt-PT')),12) vendas_CIVA, right(' '+convert(varchar(20),format(sum(x.totalsiva_lin),'C','pt-PT')),12) vendas_SIVA, right(' '+convert(varchar(4),sum(x.pessoas)),4) pessoas, right(' '+convert(varchar(20),format(sum(x.totalciva_lin) / case when sum(x.pessoas) = 0 then 1 else sum(x.pessoas) end ,'C','pt-PT')),12) percapita_CIVA, right(' '+convert(varchar(20),format(sum(x.totalsiva_lin) / case when sum(x.pessoas) = 0 then 1 else sum(x.pessoas) end ,'C','pt-PT')),12) percapita_SIVA from ( select distinct y.data, y.zonaCod, y.zonaDescr, y.zonaGrupo, y.doc, y.serie, y.numero, y.turno, y.pessoas, y.totalciva, y.totalsiva, sum(y.totalciva_lin) totalciva_lin, sum(y.totalsiva_lin) totalsiva_lin, sum(y.totalIliquido) totalIliquido, sum(y.desconto_lin) desconto from ( SELECT d.nome as entidade, d.Contribuinte contribuinte, d.data, d.descricao, d.descanulado, c.codigo as caixaCod, c.descricao as caixa, d.idcx, cx.periodo as turno, v.posto, d.mesa, z.codigo as zonaCod, z.descricao as zonaDescr, case when z.descricao like '%ESPLANADA%' then 'ESPLANADA' when z.descricao like '%TOPO%' then 'TOPO' when z.descricao like '%FUNDO%' then 'FUNDO' when z.descricao like '%BALCAO BAR%' then 'BALCAO BAR' when z.descricao like '%BALCAO COZINHA%' then 'BALCAO COZINHA' when z.descricao like '%Uber%' then 'Ubereats' when z.descricao like '%Glovo%' then 'Glovo' when z.descricao like '%Takeaway%' then 'Takeaway' when z.descricao like '%RESTAURANTE%' then 'RESTAURANTE' when z.descricao like '%BOARDING%' then 'BOARDING PASS' when z.descricao like '%DELIVERY%' then 'DELIVERY' when d.mesa < -2000 and d.pagamento = 28 then 'Ubereats' when d.mesa < -2000 and d.pagamento = 36 then 'Glovo' --nova opção para identificação dos pedidos integrados Glovo else 'Não Definida' end zonaGrupo, case when ISNULL(dp.pessoas, 0) = 0 then (case when d.doc = 'NC' then -1 else 1 end) else dp.pessoas end as pessoas, d.doc as doc, d.serie serie, d.numero, d.liquido as totalsiva, d.total as totalciva, v.Codigo as produtoCod, v.Descricao as produto, v.IVA as iva, v.qtd as qtdmov, v.Punit as precounitario, v.qtd * v.Punit as totalIliquido, v.Desconto as desconto_lin, v.Valor as totalsiva_lin, v.Total as totalciva_lin, v.liquido as totalliquido_lin, d.descricao as obs, f.descricao as familia, sf.descricao as subfamilia, dd.doc as docOrigem, dd.serie as serieOrigem, dd.numero as numeroOrigem, dd.descanulado as descAnuladoOrigem FROM documentos d INNER JOIN vendas v ON v.doc = d.doc AND v.serie = d.serie AND v.numero = d.numero INNER JOIN produtos p on p.codigo = v.codigo LEFT JOIN familias f on f.codigo = p.familia LEFT JOIN subfamilias sf on sf.codigo = p.subfam LEFT JOIN caixa cx on cx.idcx = d.idcx LEFT JOIN caixas c on c.codigo = cx.caixa LEFT JOIN documentos_pessoas dp ON dp.doc = d.doc AND dp.serie = d.serie AND dp.numero = d.numero LEFT JOIN documentos dd on dd.doc = substring(d.descricao, 14,2) and dd.serie = substring(d.descricao, 17,LEN(v.serie)) and dd.numero = substring(d.descricao, 18 + LEN(v.serie),6) LEFT JOIN ( SELECT distinct d.mesa, case when ISNULL(z.codigo, 0) = 0 then pst.zona else z.codigo end as codigo, case when ISNULL(z.codigo, 0) = 0 then (case when ISNULL(zp.descricao, ' ') = ' ' then 'NÃO DEFINIDA' else zp.descricao end ) else z.descricao end as descricao, pst.descricao posto, pst.zona as postoZonaCod, zp.descricao as postoZona FROM documentos d LEFT JOIN mapamesas mm on mm.numeroobjecto = d.mesa LEFT JOIN zonas z on z.codigo = mm.zona LEFT JOIN postos pst on pst.codigo = SUBSTRING( (convert(varchar(10),d.mesa) ), 3 , 2 ) and d.mesa > 1000 LEFT JOIN zonas zp on zp.codigo = pst.zona WHERE (d.doc IN ('FS', 'FT', 'FA', 'NC')) AND d.anulado = 0 and d.data >=@datainicio and d.data <= @datafim ) z on z.mesa = d.mesa WHERE d.doc IN ('FA','NC','FS','FT') AND d.anulado = 0 and d.data >= @datainicio and d.data <= @datafim ) y GROUP BY y.data, y.zonaCod, y.zonaDescr, y.zonaGrupo, y.doc, y.serie, y.numero, y.turno, y.pessoas, y.totalciva, y.totalsiva )x where x.turno = 1 GROUP BY x.data, x.turno union all --DETALHES ZONA TURNO1 select cast (cast (x.data as date) as varchar) data, x.zonaGrupo, right(' '+convert(varchar(20),format(sum(x.totalciva_lin),'C','pt-PT')),12) vendas_CIVA, right(' '+convert(varchar(20),format(sum(x.totalsiva_lin),'C','pt-PT')),12) vendas_SIVA, right(' '+convert(varchar(4),sum(x.pessoas)),4) pessoas, right(' '+convert(varchar(20),format(sum(x.totalciva_lin) / case when sum(x.pessoas) = 0 then 1 else sum(x.pessoas) end ,'C','pt-PT')),12) percapita_CIVA, right(' '+convert(varchar(20),format(sum(x.totalsiva_lin) / case when sum(x.pessoas) = 0 then 1 else sum(x.pessoas) end ,'C','pt-PT')),12) percapita_SIVA from ( select distinct y.data, y.zonaCod, y.zonaDescr, y.zonaGrupo, y.doc, y.serie, y.numero, y.turno, y.pessoas, y.totalciva, y.totalsiva, sum(y.totalciva_lin) totalciva_lin, sum(y.totalsiva_lin) totalsiva_lin, sum(y.totalIliquido) totalIliquido, sum(y.desconto_lin) desconto from ( SELECT d.nome as entidade, d.Contribuinte contribuinte, d.data, d.descricao, d.descanulado, c.codigo as caixaCod, c.descricao as caixa, d.idcx, cx.periodo as turno, v.posto, d.mesa, z.codigo as zonaCod, z.descricao as zonaDescr, case when z.descricao like '%ESPLANADA%' then 'ESPLANADA' when z.descricao like '%TOPO%' then 'TOPO' when z.descricao like '%FUNDO%' then 'FUNDO' when z.descricao like '%BALCAO BAR%' then 'BALCAO BAR' when z.descricao like '%BALCAO COZINHA%' then 'BALCAO COZINHA' when z.descricao like '%Uber%' then 'Ubereats' when z.descricao like '%Glovo%' then 'Glovo' when z.descricao like '%Takeaway%' then 'Takeaway' when z.descricao like '%RESTAURANTE%' then 'RESTAURANTE' when z.descricao like '%BOARDING%' then 'BOARDING PASS' when z.descricao like '%DELIVERY%' then 'DELIVERY' when d.mesa < -2000 and d.pagamento = 28 then 'Ubereats' when d.mesa < -2000 and d.pagamento = 36 then 'Glovo' --nova opção para identificação dos pedidos integrados Glovo else 'Não Definida' end zonaGrupo, case when ISNULL(dp.pessoas, 0) = 0 then (case when d.doc = 'NC' then -1 else 1 end) else dp.pessoas end as pessoas, d.doc as doc, d.serie serie, d.numero, d.liquido as totalsiva, d.total as totalciva, v.Codigo as produtoCod, v.Descricao as produto, v.IVA as iva, v.qtd as qtdmov, v.Punit as precounitario, v.qtd * v.Punit as totalIliquido, v.Desconto as desconto_lin, v.Valor as totalsiva_lin, v.Total as totalciva_lin, v.liquido as totalliquido_lin, d.descricao as obs, f.descricao as familia, sf.descricao as subfamilia, dd.doc as docOrigem, dd.serie as serieOrigem, dd.numero as numeroOrigem, dd.descanulado as descAnuladoOrigem FROM documentos d INNER JOIN vendas v ON v.doc = d.doc AND v.serie = d.serie AND v.numero = d.numero INNER JOIN produtos p on p.codigo = v.codigo LEFT JOIN familias f on f.codigo = p.familia LEFT JOIN subfamilias sf on sf.codigo = p.subfam LEFT JOIN caixa cx on cx.idcx = d.idcx LEFT JOIN caixas c on c.codigo = cx.caixa LEFT JOIN documentos_pessoas dp ON dp.doc = d.doc AND dp.serie = d.serie AND dp.numero = d.numero LEFT JOIN documentos dd on dd.doc = substring(d.descricao, 14,2) and dd.serie = substring(d.descricao, 17,LEN(v.serie)) and dd.numero = substring(d.descricao, 18 + LEN(v.serie),6) LEFT JOIN ( SELECT distinct d.mesa, case when ISNULL(z.codigo, 0) = 0 then pst.zona else z.codigo end as codigo, case when ISNULL(z.codigo, 0) = 0 then (case when ISNULL(zp.descricao, ' ') = ' ' then 'NÃO DEFINIDA' else zp.descricao end ) else z.descricao end as descricao, pst.descricao posto, pst.zona as postoZonaCod, zp.descricao as postoZona FROM documentos d LEFT JOIN mapamesas mm on mm.numeroobjecto = d.mesa LEFT JOIN zonas z on z.codigo = mm.zona LEFT JOIN postos pst on pst.codigo = SUBSTRING( (convert(varchar(10),d.mesa) ), 3 , 2 ) and d.mesa > 1000 LEFT JOIN zonas zp on zp.codigo = pst.zona WHERE (d.doc IN ('FS', 'FT', 'FA', 'NC')) AND d.anulado = 0 and d.data >=@datainicio and d.data <= @datafim ) z on z.mesa = d.mesa WHERE d.doc IN ('FA','NC','FS','FT') AND d.anulado = 0 and d.data >= @datainicio and d.data <= @datafim ) y GROUP BY y.data, y.zonaCod, y.zonaDescr, y.zonaGrupo, y.doc, y.serie, y.numero, y.turno, y.pessoas, y.totalciva, y.totalsiva )x where x.turno = 1 GROUP BY x.data, x.turno, x.zonaGrupo UNION ALL --SEPARADOR SELECT ' ' data, ' ' zonaGrupo, ' ' vendas_CIVA, ' ' vendas_SIVA, ' ' pessoas, ' ' percapita_CIVA, ' ' percapita_SIVA UNION ALL --TOTAL TURNO 2 select cast (cast (x.data as date) as varchar) data, case when x.turno = 1 then 'T1' when x.turno = 2 then 'T2' else 'Tx' end as zonaGrupo, right(' '+convert(varchar(20),format(sum(x.totalciva_lin),'C','pt-PT')),12) vendas_CIVA, right(' '+convert(varchar(20),format(sum(x.totalsiva_lin),'C','pt-PT')),12) vendas_SIVA, right(' '+convert(varchar(4),sum(x.pessoas)),4) pessoas, right(' '+convert(varchar(20),format(sum(x.totalciva_lin) / case when sum(x.pessoas) = 0 then 1 else sum(x.pessoas) end ,'C','pt-PT')),12) percapita_CIVA, right(' '+convert(varchar(20),format(sum(x.totalsiva_lin) / case when sum(x.pessoas) = 0 then 1 else sum(x.pessoas) end ,'C','pt-PT')),12) percapita_SIVA from ( select distinct y.data, y.zonaCod, y.zonaDescr, y.zonaGrupo, y.doc, y.serie, y.numero, y.turno, y.pessoas, y.totalciva, y.totalsiva, sum(y.totalciva_lin) totalciva_lin, sum(y.totalsiva_lin) totalsiva_lin, sum(y.totalIliquido) totalIliquido, sum(y.desconto_lin) desconto from ( SELECT d.nome as entidade, d.Contribuinte contribuinte, d.data, d.descricao, d.descanulado, c.codigo as caixaCod, c.descricao as caixa, d.idcx, cx.periodo as turno, v.posto, d.mesa, z.codigo as zonaCod, z.descricao as zonaDescr, case when z.descricao like '%ESPLANADA%' then 'ESPLANADA' when z.descricao like '%TOPO%' then 'TOPO' when z.descricao like '%FUNDO%' then 'FUNDO' when z.descricao like '%BALCAO BAR%' then 'BALCAO BAR' when z.descricao like '%BALCAO COZINHA%' then 'BALCAO COZINHA' when z.descricao like '%Uber%' then 'Ubereats' when z.descricao like '%Glovo%' then 'Glovo' when z.descricao like '%Takeaway%' then 'Takeaway' when z.descricao like '%RESTAURANTE%' then 'RESTAURANTE' when z.descricao like '%BOARDING%' then 'BOARDING PASS' when z.descricao like '%DELIVERY%' then 'DELIVERY' when d.mesa < -2000 and d.pagamento = 28 then 'Ubereats' when d.mesa < -2000 and d.pagamento = 36 then 'Glovo' --nova opção para identificação dos pedidos integrados Glovo else 'Não Definida' end zonaGrupo, case when ISNULL(dp.pessoas, 0) = 0 then (case when d.doc = 'NC' then -1 else 1 end) else dp.pessoas end as pessoas, d.doc as doc, d.serie serie, d.numero, d.liquido as totalsiva, d.total as totalciva, v.Codigo as produtoCod, v.Descricao as produto, v.IVA as iva, v.qtd as qtdmov, v.Punit as precounitario, v.qtd * v.Punit as totalIliquido, v.Desconto as desconto_lin, v.Valor as totalsiva_lin, v.Total as totalciva_lin, v.liquido as totalliquido_lin, d.descricao as obs, f.descricao as familia, sf.descricao as subfamilia, dd.doc as docOrigem, dd.serie as serieOrigem, dd.numero as numeroOrigem, dd.descanulado as descAnuladoOrigem FROM documentos d INNER JOIN vendas v ON v.doc = d.doc AND v.serie = d.serie AND v.numero = d.numero INNER JOIN produtos p on p.codigo = v.codigo LEFT JOIN familias f on f.codigo = p.familia LEFT JOIN subfamilias sf on sf.codigo = p.subfam LEFT JOIN caixa cx on cx.idcx = d.idcx LEFT JOIN caixas c on c.codigo = cx.caixa LEFT JOIN documentos_pessoas dp ON dp.doc = d.doc AND dp.serie = d.serie AND dp.numero = d.numero LEFT JOIN documentos dd on dd.doc = substring(d.descricao, 14,2) and dd.serie = substring(d.descricao, 17,LEN(v.serie)) and dd.numero = substring(d.descricao, 18 + LEN(v.serie),6) LEFT JOIN ( SELECT distinct d.mesa, case when ISNULL(z.codigo, 0) = 0 then pst.zona else z.codigo end as codigo, case when ISNULL(z.codigo, 0) = 0 then (case when ISNULL(zp.descricao, ' ') = ' ' then 'NÃO DEFINIDA' else zp.descricao end ) else z.descricao end as descricao, pst.descricao posto, pst.zona as postoZonaCod, zp.descricao as postoZona FROM documentos d LEFT JOIN mapamesas mm on mm.numeroobjecto = d.mesa LEFT JOIN zonas z on z.codigo = mm.zona LEFT JOIN postos pst on pst.codigo = SUBSTRING( (convert(varchar(10),d.mesa) ), 3 , 2 ) and d.mesa > 1000 LEFT JOIN zonas zp on zp.codigo = pst.zona WHERE (d.doc IN ('FS', 'FT', 'FA', 'NC')) AND d.anulado = 0 and d.data >=@datainicio and d.data <= @datafim ) z on z.mesa = d.mesa WHERE d.doc IN ('FA','NC','FS','FT') AND d.anulado = 0 and d.data >= @datainicio and d.data <= @datafim ) y GROUP BY y.data, y.zonaCod, y.zonaDescr, y.zonaGrupo, y.doc, y.serie, y.numero, y.turno, y.pessoas, y.totalciva, y.totalsiva )x where x.turno = 2 GROUP BY x.data, x.turno union all --DETALHES TURNO 2 select cast (cast (x.data as date) as varchar) data, --case when x.turno = 1 then 'T1' when x.turno = 2 then 'T2' else 'Tx' end as turno, x.zonaGrupo, right(' '+convert(varchar(20),format(sum(x.totalciva_lin),'C','pt-PT')),12) vendas_CIVA, right(' '+convert(varchar(20),format(sum(x.totalsiva_lin),'C','pt-PT')),12) vendas_SIVA, right(' '+convert(varchar(4),sum(x.pessoas)),4) pessoas, right(' '+convert(varchar(20),format(sum(x.totalciva_lin) / case when sum(x.pessoas) = 0 then 1 else sum(x.pessoas) end ,'C','pt-PT')),12) percapita_CIVA, right(' '+convert(varchar(20),format(sum(x.totalsiva_lin) / case when sum(x.pessoas) = 0 then 1 else sum(x.pessoas) end ,'C','pt-PT')),12) percapita_SIVA from ( select distinct y.data, y.zonaCod, y.zonaDescr, y.zonaGrupo, y.doc, y.serie, y.numero, y.turno, y.pessoas, y.totalciva, y.totalsiva, sum(y.totalciva_lin) totalciva_lin, sum(y.totalsiva_lin) totalsiva_lin, sum(y.totalIliquido) totalIliquido, sum(y.desconto_lin) desconto from ( SELECT d.nome as entidade, d.Contribuinte contribuinte, d.data, d.descricao, d.descanulado, c.codigo as caixaCod, c.descricao as caixa, d.idcx, cx.periodo as turno, v.posto, d.mesa, z.codigo as zonaCod, z.descricao as zonaDescr, case when z.descricao like '%ESPLANADA%' then 'ESPLANADA' when z.descricao like '%TOPO%' then 'TOPO' when z.descricao like '%FUNDO%' then 'FUNDO' when z.descricao like '%BALCAO BAR%' then 'BALCAO BAR' when z.descricao like '%BALCAO COZINHA%' then 'BALCAO COZINHA' when z.descricao like '%UBER%' then 'Ubereats' when z.descricao like '%Glovo%' then 'Glovo' when z.descricao like '%Takeaway%' then 'Takeaway' when z.descricao like '%RESTAURANTE%' then 'RESTAURANTE' when z.descricao like '%BOARDING%' then 'BOARDING PASS' when z.descricao like '%DELIVERY%' then 'DELIVERY' when d.mesa < -2000 and d.pagamento = 28 then 'Ubereats' when d.mesa < -2000 and d.pagamento = 36 then 'Glovo' --nova opção para identificação dos pedidos integrados Glovo else 'Não Definida' end zonaGrupo, case when ISNULL(dp.pessoas, 0) = 0 then (case when d.doc = 'NC' then -1 else 1 end) else dp.pessoas end as pessoas, d.doc as doc, d.serie serie, d.numero, d.liquido as totalsiva, d.total as totalciva, v.Codigo as produtoCod, v.Descricao as produto, v.IVA as iva, v.qtd as qtdmov, v.Punit as precounitario, v.qtd * v.Punit as totalIliquido, v.Desconto as desconto_lin, v.Valor as totalsiva_lin, v.Total as totalciva_lin, v.liquido as totalliquido_lin, d.descricao as obs, f.descricao as familia, sf.descricao as subfamilia, dd.doc as docOrigem, dd.serie as serieOrigem, dd.numero as numeroOrigem, dd.descanulado as descAnuladoOrigem FROM documentos d INNER JOIN vendas v ON v.doc = d.doc AND v.serie = d.serie AND v.numero = d.numero INNER JOIN produtos p on p.codigo = v.codigo LEFT JOIN familias f on f.codigo = p.familia LEFT JOIN subfamilias sf on sf.codigo = p.subfam LEFT JOIN caixa cx on cx.idcx = d.idcx LEFT JOIN caixas c on c.codigo = cx.caixa LEFT JOIN documentos_pessoas dp ON dp.doc = d.doc AND dp.serie = d.serie AND dp.numero = d.numero LEFT JOIN documentos dd on dd.doc = substring(d.descricao, 14,2) and dd.serie = substring(d.descricao, 17,LEN(v.serie)) and dd.numero = substring(d.descricao, 18 + LEN(v.serie),6) LEFT JOIN ( SELECT distinct d.mesa, case when ISNULL(z.codigo, 0) = 0 then pst.zona else z.codigo end as codigo, case when ISNULL(z.codigo, 0) = 0 then (case when ISNULL(zp.descricao, ' ') = ' ' then 'NÃO DEFINIDA' else zp.descricao end ) else z.descricao end as descricao, pst.descricao posto, pst.zona as postoZonaCod, zp.descricao as postoZona FROM documentos d LEFT JOIN mapamesas mm on mm.numeroobjecto = d.mesa LEFT JOIN zonas z on z.codigo = mm.zona LEFT JOIN postos pst on pst.codigo = SUBSTRING( (convert(varchar(10),d.mesa) ), 3 , 2 ) and d.mesa > 1000 LEFT JOIN zonas zp on zp.codigo = pst.zona WHERE (d.doc IN ('FS', 'FT', 'FA', 'NC')) AND d.anulado = 0 and d.data >=@datainicio and d.data <= @datafim ) z on z.mesa = d.mesa WHERE d.doc IN ('FA','NC','FS','FT') AND d.anulado = 0 and d.data >= @datainicio and d.data <= @datafim ) y GROUP BY y.data, y.zonaCod, y.zonaDescr, y.zonaGrupo, y.doc, y.serie, y.numero, y.turno, y.pessoas, y.totalciva, y.totalsiva )x where x.turno = 2 GROUP BY x.data, x.turno, x.zonaGrupo