/*PROCEDURES que aliementam dados do Dashboard Corporativo*/

create or replace PROCEDURE DASHBOARD_VND_CMV(P_PERIODO IN DATE DEFAULT NULL, 
												P_VERIFICAR_DIA_ANTERIOR IN VARCHAR2 DEFAULT 'S'
											  )


AS 
	V_MESANTERIOR DATE;
	/* VARIAVEL PARA VALIDAR A PROCEDURE NO MES ANTERIOR*/

	V_HOJE DATE;
	/* Variáveis para controle de commit, o commit periódico é necessário para evitar travamentos
		no BD devido a sobrecarga no segmento de rollback */

	V_INSERTCARD NUMBER;
	/*Valida se a uniade possui cards do dia ou não*/

	V_VRCMVREDE FLOAT;
	/* CAMPO PARA CALCULO DO CMV REDE */

	V_VRSALDOESTAN FLOAT;
	/* CAMPO PARA CALCULO DO CMV IDEAL */

	V_CTGMESANT FLOAT;
	V_CTGMES FLOAT;
	V_VRCOMPRAS FLOAT;
	V_VRDEV FLOAT;
	V_CONSFUNC FLOAT;
	/*CAMPOS PARA CALCULO DO CMV REAL */

	V_GASTOS FLOAT;
	/* TOTAL GASTOS CALCULADO */

	V_TOTMESVENDDIA FLOAT;
	/* TOTAL CALCULADO COM BASE NOS DADOS DA TABELA DO DASHBOARD NOVO LEVANDO EM CONSIDERAÇÃO O CAMPO DE TOTAL (TOTVENDCARD) 
		QUE POR SUA VEZ E CALCULADO COM BASE NO VALOR DE TOTAL DA VENDA NA TABELA DE VENDA */

	V_CMVDASHIDEAL FLOAT;
	V_CMVDASHREDE FLOAT;
	V_CMVDASHREAL FLOAT;
	/*CAMPOS COM AS DEVIDAS INFORMAÇÕES DE CMV*/


	N_SEQMOVI VARCHAR2(20);
	/* VARIAVEL DO NOVO CODIGO */
	
	V_DTULTAJUSTE DATE;
	V_DTAJUSTEATU DATE;

	V_DIAINIMES DATE;
	V_DIAINIMES_ANT DATE;
	V_DIAFINMES_ANT DATE;
	
	
	P_IDDASHBOARD VARCHAR2(1);
	/* VARIAVEL QUE VERIFICA QUAL DASHBOARD IRA SER CONSIDERADO PADRAO OU CORPORATIVO */

	PROCEDURE UPDATE_CMV(V_CDFILIAL IN VARCHAR, V_NRORG IN VARCHAR,

						 V_VRCMVREDE IN FLOAT,
						 V_VRSALDOESTAN IN FLOAT,
						 V_CTGMES IN FLOAT,
						 V_CTGMESANT IN FLOAT,
						 V_VRCOMPRAS IN FLOAT,
						 V_VRDEV IN FLOAT,
						 V_CONSFUNC IN FLOAT,

						 V_TOTMESVENDDIA IN FLOAT,

						 V_CMVDASHIDEAL IN FLOAT,
						 V_CMVDASHREDE IN FLOAT,
						 V_CMVDASHREAL IN FLOAT
						 )
	AS
	BEGIN
		BEGIN
			V_INSERTCARD := 0;
			SELECT COUNT(*)
			  INTO V_INSERTCARD
			  FROM VNDCARDS
			 WHERE CDFILIAL = V_CDFILIAL
			   AND DTVNDCARDS = V_HOJE; 
		    EXCEPTION
		    	WHEN NO_DATA_FOUND THEN
		    	V_INSERTCARD := 0;
	    END;
	    IF V_INSERTCARD = 0 THEN
			INSERT INTO VNDCARDS
				(CDFILIAL, DTVNDCARDS, HORAVNDCARDS, NRORG, VRCMVREDE, VRSALDOESTAN, CTGMES, CTGMESANT, VRCOMPRAS, VRDEV, CONSFUNC, TOTMESVENDDIA, CMVDASHIDEAL, CMVDASHREDE, CMVDASHREAL)
			VALUES
				(V_CDFILIAL, V_HOJE, TO_CHAR(SYSDATE, 'HH24:MI'), V_NRORG, V_VRCMVREDE, V_VRSALDOESTAN, V_CTGMES, V_CTGMESANT, V_VRCOMPRAS, V_VRDEV, V_CONSFUNC, V_TOTMESVENDDIA, V_CMVDASHIDEAL, V_CMVDASHREDE, V_CMVDASHREAL);
		ELSE
			UPDATE VNDCARDS
			   SET HORAVNDCARDS = TO_CHAR(SYSDATE, 'HH24:MI'),
			   	   VRCMVREDE = V_VRCMVREDE, 
			   	   VRSALDOESTAN = V_VRSALDOESTAN, 
			   	   CTGMES = V_CTGMES, 
			   	   CTGMESANT = V_CTGMESANT, 
			   	   VRCOMPRAS = V_VRCOMPRAS, 
			   	   VRDEV = V_VRDEV, 
			   	   CONSFUNC = V_CONSFUNC, 
			   	   TOTMESVENDDIA = V_TOTMESVENDDIA, 
			   	   CMVDASHIDEAL = V_CMVDASHIDEAL, 
			   	   CMVDASHREDE = V_CMVDASHREDE, 
			   	   CMVDASHREAL = V_CMVDASHREAL 
			 WHERE CDFILIAL = V_CDFILIAL 
			   AND DTVNDCARDS = V_HOJE;
		END IF;
	END;

BEGIN
	IF (P_PERIODO IS NULL) THEN
		V_HOJE := TRUNC(SYSDATE);
		V_MESANTERIOR := V_HOJE;
	ELSE 
		V_HOJE := TRUNC(P_PERIODO);
		V_MESANTERIOR := V_HOJE;
	END IF;

	V_DIAINIMES := TRUNC(V_HOJE, 'MM');

	V_DIAINIMES_ANT := TRUNC(ADD_MONTHS(V_HOJE, -1), 'MM');
	V_DIAFINMES_ANT := LAST_DAY(V_DIAINIMES_ANT);
	
	
	/* VERIFICA SE O PARAMETRO ESTA PARA DASHBOARD PADRAO OU CORPORATIVO*/
	BEGIN
		P_IDDASHBOARD := 'P';
		SELECT IDDASHBOARD
		  INTO P_IDDASHBOARD
		  FROM PARAMGERAL;		 
		EXCEPTION
			WHEN NO_DATA_FOUND THEN
			P_IDDASHBOARD := 'P';
	END;
	
	/* SO IRA RODAR SE FOR DO TIPO CORPORATIVO*/
	IF (P_IDDASHBOARD = 'C') THEN

		FOR C_UNIDADES IN
			(SELECT CDFILIAL, NRORG
			   FROM FILIAL
			  ORDER BY 1) LOOP
			BEGIN
				V_VRCMVREDE := 1;
				SELECT (NVL(TRUNC(SUM(QTLANCTOEST * CUSTO_PRODUTO(ITLANCTOEST.CDFILIMOVI, ITLANCTOEST.CDPRODMOVI, 6, ITLANCTOEST.DTLANCMOVI, TRUNC(SYSDATE))), 2), 0)) 
				  INTO V_VRCMVREDE
				FROM ITLANCTOEST
			   WHERE ITLANCTOEST.DTLANCMOVI BETWEEN V_DIAINIMES AND V_HOJE
				 AND ITLANCTOEST.CDFILIMOVI = C_UNIDADES.CDFILIAL
				 AND ITLANCTOEST.CDTIPORETI = '04';
			EXCEPTION
				WHEN NO_DATA_FOUND THEN
					V_VRCMVREDE := 1;
			END;

			BEGIN
				V_VRSALDOESTAN := 1;
				SELECT SUM(QTLANCAMENTO * VRCUSTMEDI) + SUM(DECODE(QTLANCAMENTO, 0,DECODE(IDTIPOMOVIEST , '-',NVL(VRCUSTLOGEME,0)+NVL(VRCUSTSEGEME,0),0),0)) AS VRSALDOESTAN
				  INTO V_VRSALDOESTAN
				  FROM RELAT_MOVIEST_ANALI R, PARAMDRE PD
				 WHERE IDTIPOMOVIEST = '3'
				   AND DTLANCMOVIEST BETWEEN V_DIAINIMES AND V_HOJE
				   AND CDFILIMOVIEST = C_UNIDADES.CDFILIAL
				   AND (R.CDTIPORETIME = PD.CDTIPORETIVENDA);
			EXCEPTION
				WHEN NO_DATA_FOUND THEN
					V_VRSALDOESTAN := 1;
			END;
				---------------------------------------------------------------------------------------
				-- CMV REAL (((CTGMESANT - CTGMES) + VRCOMPRAS - VRDEV - CONSFUNC) / FATURAMENTO MES) -
				---------------------------------------------------------------------------------------
				--QRY CTGMESANT(CTGULTMES)
				--QRY CTGMES(CTGESTMES)
			BEGIN
				
				--DATAS DOS ULTIMOS AJUSTES
				SELECT A.DTULTIMOVANT AS DTULTIMOVANT, B.DTULTIMOVATU AS DTULTIMOVATU
				INTO V_DTULTAJUSTE, V_DTAJUSTEATU
				FROM (SELECT MAX(I.DTLANCMOVI) AS DTULTIMOVANT
				FROM ITLANCTOEST I, PRODUTO P
				WHERE I.CDFILIMOVI = C_UNIDADES.CDFILIAL				                         
				AND I.DTLANCMOVI BETWEEN V_DIAINIMES_ANT AND V_DIAFINMES_ANT
				AND I.IDTIPOMOVI = '1'
				AND I.IDEVOLESTOQ = 'S'
				AND P.CDPRODUTO = I.CDPRODMOVI) A,
				(SELECT MAX(I.DTLANCMOVI) AS DTULTIMOVATU
				FROM ITLANCTOEST I, PRODUTO P
				WHERE I.CDFILIMOVI = C_UNIDADES.CDFILIAL
				AND I.DTLANCMOVI BETWEEN TRUNC(TO_DATE(V_HOJE) - 1, 'MM') AND V_HOJE
				AND I.IDTIPOMOVI = '1'
				AND I.IDEVOLESTOQ = 'S'
				AND P.CDPRODUTO = I.CDPRODMOVI) B;
			
			
				--SOMATORIO DOS VALORES DO ULTIMO AJUSTE DO MES ANTERIOR E DO MES ATUAL
				SELECT TRUNC(SUM(CTGESTMES), 2) AS CTGESTMES, TRUNC(SUM(CTGULTMES), 2) AS CTGULTMES
				INTO V_CTGMES, V_CTGMESANT
				FROM
				(
				  SELECT SUM(VRCUSTOPROD * QTESTOQDIA) CTGESTMES, 0 AS CTGULTMES
				  FROM
					(SELECT DISTINCT B.CDPRODUTO, QTESTOQDIA, VRESTOQDIA, VRESTOQBRUT, (VRESTOQDIA/QTESTOQDIA) AS VRMEDIO,
					  NVL(CUSTO_PRODUTO_LCEST(C_UNIDADES.CDFILIAL , B.CDPRODUTO, (SELECT NVL(CDTIPCUSTEST,3) FROM PARAMFILIAL WHERE CDFILIAL = C_UNIDADES.CDFILIAL),
					  V_DTAJUSTEATU, SYSDATE, ' ' , ' ' , B.NRLOTEESTQ, B.NRSUBLOTE),0) AS VRCUSTOPROD
					FROM (SELECT D.CDPRODUTO, D.NMPRODUTO, D.SGUNIDADE, D.CDARVPROD, D.CDPRODESTO,
								 D.NMPRODUTO AS NMPRODNIVEL
							FROM PRODUTO D
						   WHERE D.CDNVPRODUTO = (SELECT MAX(CDNVPRODUTO) FROM PRODUTO)
						 ) A,
					  POSESTDIA B
					WHERE (B.CDFILIAL = C_UNIDADES.CDFILIAL)
					AND (B.CDALMOXARIFE    = ' ' )
					AND (B.CDLOCALESTOQ    = ' ' )
					AND (ABS(B.QTESTOQDIA) > 0.00001)
					AND (B.CDPRODUTO       = A.CDPRODUTO)
					AND (A.CDPRODUTO       = A.CDPRODESTO)
					AND (B.DTPOSIESTQ      = (SELECT MAX(P.DTPOSIESTQ)
											   FROM POSESTDIA P
											   WHERE P.CDFILIAL     = B.CDFILIAL
												 AND P.CDPRODUTO    = B.CDPRODUTO
												 AND P.CDALMOXARIFE = B.CDALMOXARIFE
												 AND P.CDLOCALESTOQ = B.CDLOCALESTOQ
												 AND P.NRLOTEESTQ   = B.NRLOTEESTQ
												 AND P.NRSUBLOTE    = B.NRSUBLOTE
												 AND P.DTPOSIESTQ  <= (V_DTAJUSTEATU + 1)
											  )
					  )
					)
				
					UNION
				
				  SELECT 0 AS CTGESTMES, SUM(VRCUSTOPROD * QTESTOQDIA) CTGULTMES
				  FROM
					(SELECT DISTINCT B.CDPRODUTO, QTESTOQDIA, VRESTOQDIA, VRESTOQBRUT, (VRESTOQDIA/QTESTOQDIA) AS VRMEDIO,
					  NVL(CUSTO_PRODUTO_LCEST(C_UNIDADES.CDFILIAL , B.CDPRODUTO, (SELECT NVL(CDTIPCUSTEST,3) FROM PARAMFILIAL WHERE CDFILIAL = C_UNIDADES.CDFILIAL),
					  V_DTULTAJUSTE, SYSDATE, ' ' , ' ' , B.NRLOTEESTQ, B.NRSUBLOTE),0) AS VRCUSTOPROD
					FROM (SELECT D.CDPRODUTO, D.NMPRODUTO, D.SGUNIDADE, D.CDARVPROD, D.CDPRODESTO,
								 D.NMPRODUTO AS NMPRODNIVEL
							FROM PRODUTO D
						   WHERE D.CDNVPRODUTO = (SELECT MAX(CDNVPRODUTO) FROM PRODUTO)
						 ) A,
					   POSESTDIA B
					WHERE (B.CDFILIAL = C_UNIDADES.CDFILIAL)
					AND (B.CDALMOXARIFE    = ' ' )
					AND (B.CDLOCALESTOQ    = ' ' )
					AND (ABS(B.QTESTOQDIA) > 0.00001)
					AND (B.CDPRODUTO       = A.CDPRODUTO)
					AND (A.CDPRODUTO       = A.CDPRODESTO)
					AND (B.DTPOSIESTQ      = (SELECT MAX(P.DTPOSIESTQ)
											   FROM POSESTDIA P
											   WHERE P.CDFILIAL     = B.CDFILIAL
												 AND P.CDPRODUTO    = B.CDPRODUTO
												 AND P.CDALMOXARIFE = B.CDALMOXARIFE
												 AND P.CDLOCALESTOQ = B.CDLOCALESTOQ
												 AND P.NRLOTEESTQ   = B.NRLOTEESTQ
												 AND P.NRSUBLOTE    = B.NRSUBLOTE
												 AND P.DTPOSIESTQ  <= (V_DTULTAJUSTE + 1)
											  )
					  )
					)
				);
			
				
			END;

			--QRY VRCOMPRAS (VRCOMPRAS)
			BEGIN
				V_VRCOMPRAS := 0;
				SELECT SUM(ROUND(CP.VRATUAPAG, 2) + ((BO.VRFINALBPAG - BO.VRBOLPAG) * (CP.VRATUAPAG/(DECODE(BO.VRBOLPAG, 0, 1, BO.VRBOLPAG)))))
				  INTO V_VRCOMPRAS
				  FROM NOTAFISCAL NF, CONTAPAGAR CP, TIPOCTPAGAR TP, CLASSFINANC CF,  BOLETPAGAR BO, PARAMDRE PD
				 WHERE (NF.CDFILIAL      = CP.CDFILIAL)
				   AND (NF.NRLANCTONF      = CP.NRLANCTONF)
				   AND (BO.CDFILIAL    (+) = CP.CDFILIBPAG)  
				   AND (BO.NRLANBOLPAG (+) = CP.NRLANBOLPAG)  
				   AND (C_UNIDADES.CDFILIAL          = NF.CDFILIRECE)
				   AND (CF.CDCLASSFINA  = CP.CDCLASSFINA)
				   AND (TP.CDTPCTPAGAR  = CP.CDTPCTPAGAR)
				   AND (CF.IDVISUDRE = 'S')
				   AND (CF.CDCLASSFINA = PD.CLASSFINCOMPRA)
				   AND (NF.DTENTRSAID BETWEEN V_DIAINIMES AND V_HOJE);
			EXCEPTION
				WHEN NO_DATA_FOUND THEN
					V_VRCOMPRAS := 0;
			END;

			--QRY VRDEV (VRDEVOLUCOES)
			BEGIN
				V_VRDEV := 0;
				SELECT NVL(TRUNC(SUM(QTLANCTOEST * CUSTO_PRODUTO(ITLANCTOEST.CDFILIMOVI, ITLANCTOEST.CDPRODMOVI, 
					   (SELECT NVL(CDTIPCUSTEST, 3) FROM PARAMFILIAL WHERE CDFILIAL = C_UNIDADES.CDFILIAL), 
					   ITLANCTOEST.DTLANCMOVI, TRUNC(SYSDATE))), 2), 0) 
				  INTO V_VRDEV
				  FROM ITLANCTOEST
				  WHERE ITLANCTOEST.DTLANCMOVI BETWEEN V_DIAINIMES AND V_HOJE
					AND ITLANCTOEST.CDFILIMOVI = C_UNIDADES.CDFILIAL
					AND ITLANCTOEST.IDTIPOMOVI = '5'
					AND ITLANCTOEST.CDPRODMOVI IN (SELECT CDPRODUTO 
													 FROM ITLANCTOEST
													WHERE DTLANCMOVI BETWEEN V_DIAINIMES AND V_HOJE
													  AND IDTIPOMOVI = '5'
													  AND CDFILIAL = C_UNIDADES.CDFILIAL);
			EXCEPTION
				WHEN NO_DATA_FOUND THEN
					V_VRDEV := 0;
			END;

			--QRY CONSFUNC (VRSALDOESTAN)
			BEGIN
				V_VRDEV := 0;

			--Soma consumo funcionario			  
				  SELECT SUM(QTLANCAMENTO * VRCUSTMEDI) + SUM(DECODE(QTLANCAMENTO, 0,DECODE(IDTIPOMOVIEST , '-',NVL(VRCUSTLOGEME,0)+NVL(VRCUSTSEGEME,0),0),0)) AS VRSALDOESTAN
				  INTO V_CONSFUNC
				  FROM RELAT_MOVIEST_ANALI R, PARAMDRE PD
				 WHERE IDTIPOMOVIEST = '3'
				   AND DTLANCMOVIEST BETWEEN V_DIAINIMES AND V_HOJE
				   AND CDFILIMOVIEST = C_UNIDADES.CDFILIAL
				   AND (R.CDTIPORETIME = PD.CDTIPORETIFUNC);
			EXCEPTION
				WHEN NO_DATA_FOUND THEN
					V_CONSFUNC := 0;
			END;
			-- Soma Faturamento
			BEGIN
				V_TOTMESVENDDIA := 1;
			SELECT (NVL(SUM(ACRAT), 0) + NVL(SUM(VRLIQAT), 0) )
				  INTO V_TOTMESVENDDIA
				  FROM ( SELECT TAB1.CDFILIAL, (NVL(TAB1.VRACRESCIMO, 0) - NVL(TAB2.VALOR_TOTAL, 0) - NVL(TAB3.VALOR_TOTAL, 0)) AS ACRAT,
								(NVL(TAB1.VALOR_TOTAL, 0) - NVL(TAB3.VALOR_TOTAL, 0) - NVL(TAB2.VALOR_TOTAL, 0) - (NVL(TAB1.VRACRESCIMO, 0) - NVL(TAB2.VALOR_TOTAL, 0) - NVL(TAB3.VALOR_TOTAL, 0)) - NVL(TAB1.VRREPIQUE, 0)) AS VRLIQAT, 
								0 AS ACRULTMES, 0 AS VRLIQULTMES, 0 AS ACRULTANO, 0 AS VRLIQULTANO, 0 AS VRPREVISAO, NVL(TAB3.VALOR_TOTAL, 0) AS TXENTGAT,
								0 AS TXENTULTMES, 0 AS TXENTULTANO
						  FROM (SELECT VENDA.CDFILIAL, VENDA.NMFILIAL, VENDA.MODALIDADE, SUM(ITEMVENDA.VALOR_VENDIDO) AS VALOR_VENDIDO, SUM(ITEMVENDA.VRDESCONTO) AS VRDESCONTO,
									   SUM(ITEMVENDA.VRACRESCIMO) AS VRACRESCIMO, SUM(ITEMVENDA.VRCANCELAMENTO) AS VRCANCELAMENTO, SUM(ITEMVENDA.VALOR_TOTAL) AS VALOR_TOTAL,
									   SUM(VENDA.VRREPIQUE) AS VRREPIQUE, SUM(VENDA.NROPESSOAS) AS NROPESSOAS
								  FROM (SELECT CDFILIAL, NMFILIAL, MODALIDADE, SUM(VRREPIQUE) AS VRREPIQUE, 
											   SUM(NROPESSOAS) AS NROPESSOAS 
										  FROM (SELECT V.CDFILIAL, F.NMFILIAL, V.NRSEQVENDA,
													   CASE SUBSTR(V.IDORIGEMVENDA, 0, 3)
														 WHEN 'DLV' THEN 'DELIVERY'
														 WHEN 'MES' THEN 'MESA'
														 WHEN 'BAL' THEN (CASE SUBSTR(V.IDORIGEMVENDA, 5, 7) WHEN 'AUT' THEN 'TERMINAL DE AUTO-ATENDIMENTO' ELSE 'BALCAO' END) 
														 WHEN 'TAA' THEN 'TERMINAL DE AUTO-ATENDIMENTO'
														 WHEN 'CMD' THEN 'COMANDA'
														 WHEN 'AJU' THEN 'OUTROS'
														 ELSE 'OUTROS'
													   END AS MODALIDADE,
													   SUM(NVL(V.NRPESMESAVENDA, 1)) AS NROPESSOAS, SUM(NVL(V.VRREPIQUEVENDA, 0)) AS VRREPIQUE, V.CDCAIXA
												  FROM VENDA V
												  JOIN FILIAL F
													ON V.CDFILIAL = F.CDFILIAL
												 WHERE V.CDFILIAL = C_UNIDADES.CDFILIAL
												   AND V.DTENTRVENDA BETWEEN V_DIAINIMES AND V_HOJE
												   AND V.IDSITUVENDA IN( CASE SUBSTR(V.IDORIGEMVENDA, 0, 3)
																 WHEN 'DLV' THEN 'O'
																 WHEN 'MES' THEN 'O'
																 WHEN 'BAL' THEN 'O'
																 WHEN 'TAA' THEN 'O'
																 WHEN 'CMD' THEN 'O'
																 WHEN 'AJU' THEN V.IDSITUVENDA
																END)
												 GROUP BY V.CDFILIAL, F.NMFILIAL, V.NRSEQVENDA, V.IDORIGEMVENDA, V.CDCAIXA
											   ) 
										 GROUP BY CDFILIAL, NMFILIAL, MODALIDADE
									   ) VENDA
								  JOIN (SELECT VENDAS_OK.CDFILIAL, VENDAS_OK.MODALIDADE, NVL(SUM(VENDAS_OK.VALOR_VENDIDO), 0) AS VALOR_VENDIDO, NVL(SUM(VENDAS_OK.VRDESCONTO), 0) AS VRDESCONTO, 
											   NVL(SUM(VENDAS_OK.VRACRESCIMO), 0) AS VRACRESCIMO, NVL(SUM(VENDAS_CANCELAMENTO.VRCANCELAMENTO), 0) AS VRCANCELAMENTO, NVL(SUM(VENDAS_OK.VALOR_TOTAL), 0) AS VALOR_TOTAL
										  FROM (SELECT CDFILIAL, MODALIDADE, CDCAIXA, SUM(VRDESCONTO) AS VRDESCONTO, SUM(VRACRESCIMO) AS VRACRESCIMO, SUM(VALOR_VENDIDO) AS VALOR_VENDIDO, SUM(VALOR_TOTAL) AS VALOR_TOTAL 
												  FROM ( SELECT ITV.CDFILIAL, ITV.CDCAIXA, ITV.NRSEQVENDA,
																CASE SUBSTR(V.IDORIGEMVENDA, 0, 3)
																   WHEN 'DLV' THEN 'DELIVERY'
																   WHEN 'MES' THEN 'MESA'
																   WHEN 'BAL' THEN (CASE SUBSTR(V.IDORIGEMVENDA, 5, 7) WHEN 'AUT' THEN 'TERMINAL DE AUTO-ATENDIMENTO' ELSE 'BALCAO' END) 
																   WHEN 'TAA' THEN 'TERMINAL DE AUTO-ATENDIMENTO'
																   WHEN 'CMD' THEN 'COMANDA'
																   WHEN 'AJU' THEN 'OUTROS'
																   ELSE 'OUTROS'
																 END AS MODALIDADE, SUM(TRUNC(NVL(ITV.VRDESITVEND, 0), 2)) AS VRDESCONTO, 
																CASE V.IDSITUVENDA WHEN 'C' THEN 0 ELSE SUM(TRUNC(NVL(ITV.VRACRITVEND, 0), 2)) END AS VRACRESCIMO,
																CASE V.IDSITUVENDA WHEN 'C' THEN 0 ELSE SUM(TRUNC(ITV.QTPRODVEND * (ITV.VRUNITVEND + NVL(ITV.VRUNITVENDCL,0)),2) - NVL(ITV.VRDESITVEND, 0)) END AS VALOR_VENDIDO,
																SUM(TRUNC(ITV.QTPRODVEND * (ITV.VRUNITVEND + NVL(ITV.VRUNITVENDCL,0)),2) - NVL(ITV.VRDESITVEND, 0) + NVL(ITV.VRACRITVEND,0)) AS VALOR_TOTAL
														   FROM VENDA V
														   JOIN ITEMVENDA ITV
															 ON V.CDFILIAL = ITV.CDFILIAL
															AND V.CDCAIXA = ITV.CDCAIXA
															AND V.NRSEQVENDA = ITV.NRSEQVENDA
														  WHERE V.CDFILIAL = C_UNIDADES.CDFILIAL
															AND V.DTENTRVENDA BETWEEN V_DIAINIMES AND V_HOJE
															AND V.IDSITUVENDA IN( CASE SUBSTR(V.IDORIGEMVENDA, 0, 3)
																 WHEN 'DLV' THEN 'O'
																 WHEN 'MES' THEN 'O'
																 WHEN 'BAL' THEN 'O'
																 WHEN 'TAA' THEN 'O'
																 WHEN 'CMD' THEN 'O'
																 WHEN 'AJU' THEN V.IDSITUVENDA
																END)
														  GROUP BY ITV.CDFILIAL, ITV.CDCAIXA, V.IDORIGEMVENDA, ITV.NRSEQVENDA,  V.IDSITUVENDA
													   ) 
												 GROUP BY CDFILIAL, MODALIDADE, CDCAIXA
									   ) VENDAS_OK
							 LEFT JOIN (SELECT CDFILIAL, CDCAIXA, MODALIDADE, SUM(VRCANCELAMENTO) AS VRCANCELAMENTO 
										  FROM (SELECT ITV.CDFILIAL, ITV.CDCAIXA, ITV.NRSEQVENDA,
													   CASE SUBSTR(V.IDORIGEMVENDA, 0, 3)
														 WHEN 'DLV' THEN 'DELIVERY'
														 WHEN 'MES' THEN 'MESA'
														 WHEN 'BAL' THEN (CASE SUBSTR(V.IDORIGEMVENDA, 5, 7) WHEN 'AUT' THEN 'TERMINAL DE AUTO-ATENDIMENTO' ELSE 'BALCAO' END) 
														 WHEN 'TAA' THEN 'TERMINAL DE AUTO-ATENDIMENTO'
														 WHEN 'CMD' THEN 'COMANDA'
														 WHEN 'AJU' THEN 'OUTROS'
														 ELSE 'OUTROS'
													   END AS MODALIDADE,
													   SUM(TRUNC(ITV.QTPRODVEND * (ITV.VRUNITVEND + NVL(ITV.VRUNITVENDCL,0)),2) + NVL(ITV.VRACRITVEND,0) ) AS VRCANCELAMENTO
												  FROM VENDA V
												  JOIN ITEMVENDA ITV
													ON V.CDFILIAL = ITV.CDFILIAL
												   AND V.CDCAIXA = ITV.CDCAIXA
												   AND V.NRSEQVENDA = ITV.NRSEQVENDA
												 WHERE V.CDFILIAL = C_UNIDADES.CDFILIAL
												   AND V.DTENTRVENDA BETWEEN V_DIAINIMES AND V_HOJE
												   AND V.IDSITUVENDA = 'C'
												   AND NVL(V.IDSTATUSNFCE,'T') <> 'R'                                
												 GROUP BY ITV.CDFILIAL, ITV.CDCAIXA, ITV.NRSEQVENDA, V.IDORIGEMVENDA
												 
												 UNION
												 
												 SELECT ITV.CDFILIAL, ITV.CDCAIXA, ITV.NRSEQVENDA,
													   CASE SUBSTR(V.IDORIGEMVENDA, 0, 3)
														 WHEN 'DLV' THEN 'DELIVERY'
														 WHEN 'MES' THEN 'MESA'
														 WHEN 'BAL' THEN (CASE SUBSTR(V.IDORIGEMVENDA, 5, 7) WHEN 'AUT' THEN 'TERMINAL DE AUTO-ATENDIMENTO' ELSE 'BALCAO' END) 
														 WHEN 'TAA' THEN 'TERMINAL DE AUTO-ATENDIMENTO'
														 WHEN 'CMD' THEN 'COMANDA'
														 WHEN 'AJU' THEN 'OUTROS'
														 ELSE 'OUTROS'
													   END AS MODALIDADE,
													   SUM(TRUNC(ITV.QTPRODVENDC * (ITV.VRUNITVENDC + NVL(ITV.VRUNITVENCLC,0)),2) + NVL(ITV.VRACRITVENDC,0) ) AS VRCANCELAMENTO
												  FROM VENDA V
												  JOIN ITVENDACAN ITV
													ON V.CDFILIAL = ITV.CDFILIAL
												   AND V.CDCAIXA = ITV.CDCAIXA
												   AND V.NRSEQVENDA = ITV.NRSEQVENDA
												 WHERE V.CDFILIAL = C_UNIDADES.CDFILIAL
												   AND V.DTENTRVENDA BETWEEN V_DIAINIMES AND V_HOJE
												   AND NVL(V.IDSTATUSNFCE,'T') <> 'R'                                
												 GROUP BY ITV.CDFILIAL, ITV.CDCAIXA, ITV.NRSEQVENDA, V.IDORIGEMVENDA
											   ) 
										 GROUP BY CDFILIAL, CDCAIXA, MODALIDADE
									   ) VENDAS_CANCELAMENTO
									  ON VENDAS_OK.CDFILIAL = VENDAS_CANCELAMENTO.CDFILIAL
									 AND VENDAS_OK.CDCAIXA = VENDAS_CANCELAMENTO.CDCAIXA
									 AND VENDAS_OK.MODALIDADE = VENDAS_CANCELAMENTO.MODALIDADE
								   GROUP BY VENDAS_OK.CDFILIAL, VENDAS_OK.MODALIDADE
								  ) ITEMVENDA
								 ON VENDA.CDFILIAL = ITEMVENDA.CDFILIAL
								AND VENDA.MODALIDADE = ITEMVENDA.MODALIDADE
						GROUP BY VENDA.CDFILIAL, VENDA.NMFILIAL, VENDA.MODALIDADE) TAB1
						LEFT JOIN (SELECT TB2.CDFILIAL,'', TB2.MODALIDADE, SUM(TB2.VALOR_TOTAL) AS VALOR_TOTAL, 0
								   FROM ( SELECT V.CDFILIAL,'', 
												CASE SUBSTR(V.IDORIGEMVENDA, 0, 3)
												   WHEN 'DLV' THEN 'DELIVERY'
												   WHEN 'MES' THEN 'MESA'
												   WHEN 'BAL' THEN (CASE SUBSTR(V.IDORIGEMVENDA, 5, 7) WHEN 'AUT' THEN 'TERMINAL DE AUTO-ATENDIMENTO' ELSE 'BALCAO' END) 
												   WHEN 'TAA' THEN 'TERMINAL DE AUTO-ATENDIMENTO'
												   WHEN 'CMD' THEN 'COMANDA'
												   WHEN 'AJU' THEN 'OUTROS'
												   ELSE 'OUTROS'
												 END AS MODALIDADE, NVL(SUM(NVL(I.VRACRITVEND,0)), 0) AS VALOR_TOTAL, 0
											  FROM ITEMVENDA I, LOJA L, VENDA V
											 WHERE I.CDPRODUTO   = L.CDPRODTAXASERV  
											   AND V.NRSEQVENDA  = I.NRSEQVENDA      AND V.CDCAIXA     = I.CDCAIXA
											   AND V.CDFILIAL    = I.CDFILIAL        AND L.CDLOJA      = V.CDLOJA          
											   AND L.CDFILIAL    = V.CDFILIAL        AND V.CDFILIAL = C_UNIDADES.CDFILIAL
											   AND L.IDCOMISVENDA IN ('S', 'G')      AND L.IDTRATTAXASERV = 'P'
											   AND V.DTENTRVENDA BETWEEN V_DIAINIMES AND V_HOJE
											   AND V.IDSITUVENDA = 'O'               AND SUBSTR(V.IDORIGEMVENDA, 0, 3) <> 'DLV'                             
											 GROUP BY V.CDFILIAL, V.IDORIGEMVENDA) TB2
									 GROUP BY TB2.CDFILIAL, TB2.MODALIDADE
								  ) TAB2
								 ON TAB1.CDFILIAL = TAB2.CDFILIAL
								AND TAB1.MODALIDADE = TAB2.MODALIDADE
						  LEFT JOIN (SELECT V.CDFILIAL,  '', 
											CASE SUBSTR(V.IDORIGEMVENDA, 0, 3)
														 WHEN 'DLV' THEN 'DELIVERY'
														 WHEN 'MES' THEN 'MESA'
														 WHEN 'BAL' THEN 'BALCAO'
														 WHEN 'TAA' THEN 'TERMINAL DE AUTO-ATENDIMENTO'
														 WHEN 'CMD' THEN 'COMANDA'
														 WHEN 'AJU' THEN 'OUTROS'
														 ELSE 'OUTROS'
													   END AS MODALIDADE,
											NVL(SUM(NVL(I.VRACRITVEND,0))- SUM(NVL(V.VRREPIQUEVENDA,0)), 0)AS VALOR_TOTAL, 0
									   FROM ITEMVENDA I, LOJA L, VENDA V
									  WHERE I.CDPRODUTO   = L.CDPRODTAXAENTR AND V.NRSEQVENDA  = I.NRSEQVENDA
										AND V.CDCAIXA     = I.CDCAIXA           AND V.CDFILIAL    = I.CDFILIAL
										AND L.CDLOJA      = V.CDLOJA AND L.CDFILIAL    = V.CDFILIAL
										AND V.CDFILIAL = C_UNIDADES.CDFILIAL
										AND L.IDTRATTAXAENTR = 'P'              AND SUBSTR(V.IDORIGEMVENDA, 0, 3) = 'DLV' 
										AND V.IDSITUVENDA = 'O' 
										AND V.DTENTRVENDA BETWEEN V_DIAINIMES AND V_HOJE
									  GROUP BY V.CDFILIAL, SUBSTR(V.IDORIGEMVENDA, 0, 3)
									) TAB3
								   ON TAB1.CDFILIAL = TAB3.CDFILIAL
								  AND TAB1.MODALIDADE = TAB3.MODALIDADE);
				EXCEPTION
					WHEN NO_DATA_FOUND THEN
					V_TOTMESVENDDIA := 1;
			END;
			IF V_TOTMESVENDDIA = 0 THEN
				V_TOTMESVENDDIA := 1;
			END IF;
			BEGIN 
				-- CALCULO CMV IDEAL
				V_CMVDASHIDEAL := 0;
				V_CMVDASHIDEAL := (V_VRSALDOESTAN*100)/V_TOTMESVENDDIA;

				-- CALCULO CMV REDE
				V_CMVDASHREDE := 0;
				V_CMVDASHREDE := (V_VRCMVREDE*100)/V_TOTMESVENDDIA;

				-- CALCULO CMV REAL
				V_CMVDASHREAL := 0;
				V_GASTOS := 0;
				V_GASTOS := ((V_CTGMESANT - V_CTGMES) + NVL(V_VRCOMPRAS,0) - V_VRDEV - NVL(V_CONSFUNC, 0 ));
				V_CMVDASHREAL := (((V_GASTOS)*100) / V_TOTMESVENDDIA);
				UPDATE_CMV(C_UNIDADES.CDFILIAL, C_UNIDADES.NRORG, V_VRCMVREDE, V_VRSALDOESTAN, V_CTGMES, V_CTGMESANT, V_VRCOMPRAS, V_VRDEV, V_CONSFUNC, V_TOTMESVENDDIA, V_CMVDASHIDEAL, V_CMVDASHREDE, V_CMVDASHREAL);
			END;
		END LOOP;
		COMMIT;
	END IF;
	IF P_VERIFICAR_DIA_ANTERIOR = 'S' THEN
		IF V_MESANTERIOR = V_HOJE THEN
			V_MESANTERIOR := LAST_DAY(ADD_MONTHS(SYSDATE,-1));
			DASHBOARD_VND_CMV(V_MESANTERIOR, 'N');
		END IF;
        V_HOJE := TRUNC((SYSDATE - 1));
    	DASHBOARD_VND_CMV(V_HOJE, 'N');
	END IF;
END;
/