CREATE OR REPLACE PROCEDURE ATU_PROD_RECEITA (
	P_NRTMPATUPRODRECE NUMBER,
	P_IDQTLIQUBRUT IN VARCHAR2
)
IS
	V_COUNT NUMBER;
	V_APREPROD VARCHAR2(3);
	
	V_AUXQUANTIDADE NUMBER;
	V_AUXQTDEBRUTA NUMBER;
	V_QTDENUTR NUMBER;
	V_AUXQTDEREQ NUMBER;	
	
	V_STCDPRODUTO  VARCHAR2(10);
	V_STUNIDADE    VARCHAR2(10);
	V_STUNIDPROD   VARCHAR2(10);
	V_DBQUANTIDADE NUMBER;
	V_DBQTDEBRUTA  NUMBER;
	V_DBGANHCOC    NUMBER;
	V_DBPERLIMP    NUMBER;
	V_DBAPROVNUTR  NUMBER;
	
   FUNCTION APREPROD (PI_PRODUTO VARCHAR2, PI_CDAPRERECE VARCHAR2) RETURN VARCHAR2
	AS
		V_TEMREG NUMBER;
	BEGIN
		
		SELECT COUNT(1)
		  INTO V_TEMREG
		  FROM APREPROD
		 WHERE CDPRODUTO  = PI_PRODUTO    AND
				 CDAPRERECE = PI_CDAPRERECE;	
		
		IF (V_TEMREG = 0) THEN
			RETURN '';
		ELSE
			RETURN PI_CDAPRERECE;
		END IF;
	END;
	
	FUNCTION CALCQTDE(P_QTDE NUMBER, P_GANHCOC NUMBER, P_PERLIMP NUMBER, P_STTIPO VARCHAR2) RETURN NUMBER
   AS
      V_DBQTDEBRUTA NUMBER;
      V_DBPERCOC NUMBER;
      V_DBPERLIMP NUMBER;
      V_DBQTDECALC NUMBER;
   BEGIN
      V_DBQTDEBRUTA := P_QTDE;
      V_DBPERCOC    := P_GANHCOC;
      V_DBPERLIMP   := P_PERLIMP;

      IF P_STTIPO = 'L' THEN
         V_DBQTDECALC := V_DBQTDEBRUTA / (100 / (100 + V_DBPERCOC));
         RETURN V_DBQTDECALC / (100 / (100 - V_DBPERLIMP));
      ELSE
         V_DBQTDECALC := V_DBQTDEBRUTA * (100 / (100 + V_DBPERCOC));
         RETURN V_DBQTDECALC * (100 / (100 - V_DBPERLIMP));
      END IF;
   END;
   
   FUNCTION QTDE_BRUTA(P_DBQTDEBRUTA NUMBER, P_STCDPRODUTO VARCHAR2, P_STUNIDADE VARCHAR2, P_STUNIDPROD VARCHAR2) RETURN NUMBER
   AS
      V_DBQTDEREQ NUMBER;
      V_COUNT NUMBER;
      V_SGUNIDADE VARCHAR2(10);
      V_VRFATOCONVES NUMBER;
      V_IDTIPOPE VARCHAR2(1);
   BEGIN
      V_DBQTDEREQ := P_DBQTDEBRUTA;

      --CONVERTE SE A UNIDADE NA RECEITA FOR DIFERENTE DA UNIDADE DE ESTOQUE DO PRODUTO
     IF NOT (P_STUNIDADE IS NULL) THEN
         IF (P_STUNIDADE <> P_STUNIDPROD) THEN
            SELECT COUNT(1) QT
              INTO V_COUNT
              FROM (SELECT SGUNIDADE, VRFATOCONVES, '*' IDTIPOPE
                      FROM CONVPRODUTO
                     WHERE CDPRODUTO = P_STCDPRODUTO
                     UNION ALL
                    SELECT SGUNIDDE SGUNIDADE, VRFTCONVER VRFATOCONVES, IDTIPOPE
                      FROM CONVUNID
                     WHERE SGUNIDPARA = P_STUNIDPROD
                     UNION ALL
                    SELECT SGUNIDADE, VRFATOCONV, '*' AS IDTIPOPE
                      FROM PRODUTO
                     WHERE CDPRODUTO = P_STCDPRODUTO)
               WHERE SGUNIDADE = P_STUNIDADE;

            --VERIFICA SE O PRODUTO POSSUI UNIDADE ADICIONAL. CASO POSSUA, O SISTEMA CALCULA O NOVO VALOR CONVERTIDO
            IF (V_COUNT > 0) THEN
               SELECT LTRIM(LPAD(SGUNIDADE, 5, ' ')) SGUNIDADE,VRFATOCONVES, LTRIM(LPAD(IDTIPOPE, 1, ' ')) IDTIPOPE
                 INTO V_SGUNIDADE, V_VRFATOCONVES, V_IDTIPOPE
                 FROM (SELECT SGUNIDADE, VRFATOCONVES, '*' IDTIPOPE
                         FROM CONVPRODUTO
                        WHERE CDPRODUTO = P_STCDPRODUTO
                        UNION ALL
                       SELECT SGUNIDDE SGUNIDADE, VRFTCONVER VRFATOCONVES, IDTIPOPE
                         FROM CONVUNID
                        WHERE SGUNIDPARA = P_STUNIDPROD
                        UNION ALL
                       SELECT SGUNIDADE, VRFATOCONV, '*' AS IDTIPOPE
                         FROM PRODUTO
                        WHERE CDPRODUTO = P_STCDPRODUTO)
                  WHERE SGUNIDADE = P_STUNIDADE;
                  
               --CÁLCULO DO NOVO VALOR CONVERTIDO
               V_DBQTDEREQ := ROUND(V_DBQTDEREQ * V_VRFATOCONVES, 5);
            END IF;
         END IF;
      END IF;
      RETURN ROUND(V_DBQTDEREQ, 5);
   END;
	
	PROCEDURE SETVARIAVEIS (PI_CDPRODNOVO VARCHAR2, PI_SGUNIDADE VARCHAR2, PI_SGUNIDPROD VARCHAR2,
									PI_QTPRODPRAT NUMBER, PI_QTBRUTAPRUNR NUMBER, PI_VRPEFATCOCPR NUMBER,
									PI_VRPEFATCORPR NUMBER, PI_VRPEFATNUTPR NUMBER)
	IS
	BEGIN
	   --PI na nomenclatura dos parâmetros é para indicar que são internos ao procedimento.
		
		V_STCDPRODUTO  := PI_CDPRODNOVO;
		V_STUNIDADE    := PI_SGUNIDADE;
		V_STUNIDPROD   := PI_SGUNIDPROD;
		V_DBQUANTIDADE := PI_QTPRODPRAT;
		V_DBQTDEBRUTA  := PI_QTBRUTAPRUNR;
		V_DBGANHCOC    := PI_VRPEFATCOCPR;
		V_DBPERLIMP    := PI_VRPEFATCORPR;
		V_DBAPROVNUTR  := PI_VRPEFATNUTPR;
	END;

	PROCEDURE UPD_RECEPADR (PI_QTPRODPRAT NUMBER, PI_SGUNIDADE VARCHAR2, PI_VRPEFATCOCPR NUMBER, PI_VRPEFATCORPR NUMBER, 
									PI_HRTEMPPREPPR VARCHAR2, PI_QTBRUTAPRUNR NUMBER, PI_VRPEFATNUTPR NUMBER,
					            PI_CDFILAUXPRAT VARCHAR2, PI_CDPRATO VARCHAR2, PI_CDPROD VARCHAR2)
	IS
	BEGIN	
		--qryUpRecPR
		UPDATE RECEPADR
		SET
			QTPRODPRAT   = PI_QTPRODPRAT, --:QUANTIDADE,
			SGUNIDADE    = PI_SGUNIDADE,
			VRPEFATCOCPR = PI_VRPEFATCOCPR, --:GANHOCOC,
			VRPEFATCORPR = PI_VRPEFATCORPR, --:PERDALIMP,
			HRTEMPPREPPR = PI_HRTEMPPREPPR, --:TEMPO,
			QTBRUTAPRUNR = PI_QTBRUTAPRUNR, --:QTDEBRUTA,
			VRPEFATNUTPR = PI_VRPEFATNUTPR --:APROVNUTR
		WHERE
			(CDFILAUXPRAT = PI_CDFILAUXPRAT) AND
			(CDPRATO      = PI_CDPRATO)      AND
			(CDPRODUTO    = PI_CDPROD); --Em alguns casos pode ser o CDPRODNOVO ou o CDPRODORIG ou o CDPRODUTO
	END;
	
	PROCEDURE UPD_RECETPCARD (PI_QTPRODPRAT NUMBER, PI_SGUNIDADE VARCHAR2, PI_VRPEFATCOCPR NUMBER, PI_VRPEFATCORPR NUMBER, 
									  PI_HRTEMPPREPPR VARCHAR2, PI_QTBRUTAPRUNR NUMBER, PI_VRPEFATNUTPR NUMBER,
					              PI_CDFILAUXPRAT VARCHAR2, PI_CDPRATO VARCHAR2, PI_CDFILCENTPME VARCHAR2, PI_CDTIPOCARD VARCHAR2, PI_CDPROD VARCHAR2)
	IS
	BEGIN
		--qryUpRecTC
		UPDATE RECETPCARD
		SET
			QTPRODPRATTP   = PI_QTPRODPRAT, --:QUANTIDADE
			SGUNIDADE      = PI_SGUNIDADE,
			VRPEFATCOCPRTP = PI_VRPEFATCOCPR, --:GANHOCOC
			VRPEFATCORPRTP = PI_VRPEFATCORPR, --:PERDALIMP,
			HRTEMPPREPPRTP = PI_HRTEMPPREPPR, --:TEMPO,
			QTBRUTAPRUNRTP = PI_QTBRUTAPRUNR, --:QTDEBRUTA,
			VRPEFATNUTPRTP = PI_VRPEFATNUTPR --:APROVNUTR
		WHERE
			(CDFILAUXPRAT = PI_CDFILAUXPRAT) AND
			(CDPRATO      = PI_CDPRATO)      AND
			(CDFILCENTPME = PI_CDFILCENTPME) AND
			(CDTIPOCARD   = PI_CDTIPOCARD)   AND
			(CDPRODUTO    = PI_CDPROD); --Em alguns casos pode ser o CDPRODNOVO ou o CDPRODORIG ou o CDPRODUTO
	END;

	PROCEDURE UPD_RECEFILI (PI_QTPRODPRAT NUMBER, PI_SGUNIDADE VARCHAR2, PI_VRPEFATCOCPR NUMBER, PI_VRPEFATCORPR NUMBER, 
									PI_HRTEMPPREPPR VARCHAR2, PI_QTBRUTAPRUNR NUMBER, PI_VRPEFATNUTPR NUMBER,
					            PI_CDFILAUXPRAT VARCHAR2, PI_CDPRATO VARCHAR2, PI_CDFILIAL VARCHAR2, PI_CDPROD VARCHAR2)
	IS
	BEGIN	
			--qryUpRecLO
		UPDATE RECEFILI
		SET
			QTPRODRECLOC = PI_QTPRODPRAT, --:QUANTIDADE,
			SGUNIDADE    = PI_SGUNIDADE,
			VRPEFATCOCLO = PI_VRPEFATCOCPR, --:GANHOCOC,
			VRPEFATCORLO = PI_VRPEFATCORPR, --:PERDALIMP
			HRTEMPPREPLO = PI_HRTEMPPREPPR, --:TEMPO,
			QTBRUTALOUNR = PI_QTBRUTAPRUNR, --:QTDEBRUTA,
			VRPEFATNUTLO = PI_VRPEFATNUTPR --:APROVNUTR
		WHERE
			(CDFILAUXPRAT = PI_CDFILAUXPRAT) AND
			(CDPRATO      = PI_CDPRATO)      AND
			(CDFILIAL     = PI_CDFILIAL)     AND
			(CDPRODUTO    = PI_CDPROD); --Em alguns casos pode ser o CDPRODNOVO ou o CDPRODORIG ou o CDPRODUTO
	END;
	
	PROCEDURE UPD_RECESERV (PI_QTPRODPRAT NUMBER, PI_SGUNIDADE VARCHAR2, PI_VRPEFATCOCPR NUMBER, PI_VRPEFATCORPR NUMBER, 
									PI_HRTEMPPREPPR VARCHAR2, PI_QTBRUTAPRUNR NUMBER, PI_VRPEFATNUTPR NUMBER,
					            PI_CDFILAUXPRAT VARCHAR2, PI_CDPRATO VARCHAR2, PI_CDFILIAL VARCHAR2, PI_CDSERVFILI VARCHAR2, PI_CDPROD VARCHAR2)
	IS
	BEGIN
		--qryUpRecSE
		UPDATE RECESERV
		SET
			QTPRODRECSER = PI_QTPRODPRAT, --:QUANTIDADE,
			SGUNIDADE    = PI_SGUNIDADE,
			VRPEFATCOCSE = PI_VRPEFATCOCPR, --:GANHOCOC,
			VRPEFATCORSE = PI_VRPEFATCORPR, --:PERDALIMP,
			HRTEMPPREPSE = PI_HRTEMPPREPPR, --:TEMPO,
			QTBRUTASEUNR = PI_QTBRUTAPRUNR, --:QTDEBRUTA,
			VRPEFATNUTSE = PI_VRPEFATNUTPR --:APROVNUTR
		WHERE
			(CDFILAUXPRAT = PI_CDFILAUXPRAT) AND
			(CDPRATO      = PI_CDPRATO)      AND
			(CDFILIAL     = PI_CDFILIAL)     AND
			(CDSERVFILI   = PI_CDSERVFILI)   AND
			(CDPRODUTO    = PI_CDPROD); --Em alguns casos pode ser o CDPRODNOVO ou o CDPRODORIG ou o CDPRODUTO
	END;
	
	PROCEDURE CALC_UPD_RECEPADR (PI_CDFILAUXPRAT VARCHAR2, PI_CDPRATO VARCHAR2, PI_CDPROD VARCHAR2, 
										  PI_QUANTIDADE NUMBER, PI_QTDEBRUTA NUMBER, PI_QTDEREQ NUMBER, PI_QTDENUTR NUMBER)
	IS
	BEGIN
		UPDATE RECEPADR
		   SET QTPRODPRAT   = PI_QUANTIDADE,
				 QTBRUTAPRUNR = PI_QTDEBRUTA,
				 QTBRUTAPR    = PI_QTDEREQ,
				 QTCALCNUTRPR = PI_QTDENUTR,
				 QTUNIDESTPR  = PI_QTDEREQ
		 WHERE (CDFILAUXPRAT = PI_CDFILAUXPRAT) AND
			    (CDPRATO      = PI_CDPRATO)      AND
			    (CDPRODUTO    = PI_CDPROD);
	END;
	
	PROCEDURE CALC_UPD_RECETPCARD (PI_CDFILAUXPRAT VARCHAR2, PI_CDPRATO VARCHAR2, PI_CDFILCENTPME VARCHAR2, PI_CDTIPOCARD VARCHAR2, 
											 PI_CDPROD VARCHAR2, PI_QUANTIDADE NUMBER, PI_QTDEBRUTA NUMBER, PI_QTDEREQ NUMBER, PI_QTDENUTR NUMBER)
	IS
	BEGIN
		UPDATE RECETPCARD
			SET QTPRODPRATTP   = PI_QUANTIDADE,
				 QTBRUTAPRUNRTP = PI_QTDEBRUTA,
				 QTBRUTAPRTP    = PI_QTDEREQ,
				 QTCALCNUTRPRTP = PI_QTDENUTR,
				 QTUNIDESTPRTP = PI_QTDEREQ
		 WHERE (CDFILAUXPRAT = PI_CDFILAUXPRAT) AND
				 (CDPRATO      = PI_CDPRATO)      AND
				 (CDFILCENTPME = PI_CDFILCENTPME) AND
				 (CDTIPOCARD   = PI_CDTIPOCARD)   AND
				 (CDPRODUTO    = PI_CDPROD);
	END;
	
	PROCEDURE CALC_UPD_RECEFILI (PI_CDFILAUXPRAT VARCHAR2, PI_CDPRATO VARCHAR2, PI_CDFILIAL VARCHAR2, PI_CDPROD VARCHAR2,
										  PI_QUANTIDADE NUMBER, PI_QTDEBRUTA NUMBER, PI_QTDEREQ NUMBER, PI_QTDENUTR NUMBER)
	IS
	BEGIN
		UPDATE RECEFILI
			SET QTPRODRECLOC = PI_QUANTIDADE,
				 QTBRUTALOUNR = PI_QTDEBRUTA,
				 QTBRUTALO    = PI_QTDEREQ,
				 QTCALCNUTRLO = PI_QTDENUTR,
				 QTUNIDESTLO = PI_QTDEREQ
		 WHERE (CDFILAUXPRAT = PI_CDFILAUXPRAT) AND
				 (CDPRATO      = PI_CDPRATO)      AND
				 (CDFILIAL     = PI_CDFILIAL)     AND
				 (CDPRODUTO    = PI_CDPROD);

	END;
	
	PROCEDURE CALC_UPD_RECESERV (PI_CDFILAUXPRAT VARCHAR2, PI_CDPRATO VARCHAR2, PI_CDFILIAL VARCHAR2, PI_CDSERVFILI VARCHAR2, PI_CDPROD VARCHAR2,
										  PI_QUANTIDADE NUMBER, PI_QTDEBRUTA NUMBER, PI_QTDEREQ NUMBER, PI_QTDENUTR NUMBER)
	IS
	BEGIN
		UPDATE RECESERV
			SET QTPRODRECSER = PI_QUANTIDADE,
				 QTBRUTASEUNR = PI_QTDEBRUTA,
				 QTBRUTASE    = PI_QTDEREQ,
				 QTCALCNUTRSE = PI_QTDENUTR,
				 QTUNIDESTSE = PI_QTDEREQ
		 WHERE (CDFILAUXPRAT = PI_CDFILAUXPRAT) AND
 				 (CDPRATO      = PI_CDPRATO)      AND
 				 (CDFILIAL     = PI_CDFILIAL)     AND
				 (CDSERVFILI   = PI_CDSERVFILI)   AND
				 (CDPRODUTO    = PI_CDPROD);
	
	END;
BEGIN
	FOR C_CURSOR IN (SELECT NMTABLE, CDFILAUXPRAT, CDPRATO, CDFILCENTPME,
									CDTIPOCARD, CDFILIAL, CDSERVFILI, HRTEMPPREPPR, SGUNIDADE,
									IDPRODBASEPR, CDAPRERECE, SGUNIDPROD, CDPRODUTO, CDPRODNOVO,
								   CDPRODORIG, QTPRODPRAT, VRPEFATCOCPR, VRPEFATCORPR, QTUNIDESTPR,
									QTBRUTAPR, VRPEFATNUTPR, QTCALCNUTRPR, QTBRUTAPRUNR, DTULTATURECP
							 FROM TMP_ATUPRODRECE
							WHERE NRTMPATUPRODRECE = P_NRTMPATUPRODRECE) LOOP
		IF (C_CURSOR.CDPRODNOVO IS NOT NULL) THEN

			--Verifica se o Novo Produto já existe na Receita
			IF (C_CURSOR.NMTABLE = 'RECEPADR') THEN
				--qryVerGPratPR
				SELECT COUNT(1) CDPRATO
				  INTO V_COUNT
				  FROM RECEPADR
				 WHERE CDFILAUXPRAT = C_CURSOR.CDFILAUXPRAT AND
						 CDPRATO      = C_CURSOR.CDPRATO    AND
						 CDPRODUTO    = C_CURSOR.CDPRODNOVO;
				--qryDelRecPR
				DELETE 
				  FROM RECEPADR
				 WHERE (CDFILAUXPRAT = C_CURSOR.CDFILAUXPRAT) AND
						 (CDPRATO      = C_CURSOR.CDPRATO)      AND
						 (CDPRODUTO    = C_CURSOR.CDPRODORIG);
				
				IF (V_COUNT = 0) THEN
					V_APREPROD := APREPROD(C_CURSOR.CDPRODNOVO, C_CURSOR.CDAPRERECE);
					--qryInsRecPR
					INSERT INTO RECEPADR
						(CDFILAUXPRAT, CDPRATO, CDPRODUTO, QTPRODPRAT, VRPEFATCOCPR, VRPEFATCORPR,
						 HRTEMPPREPPR, SGUNIDADE, QTUNIDESTPR, QTBRUTAPR, IDPRODBASEPR, CDAPRERECE,
						 DTULTATURECP, VRPEFATNUTPR, QTCALCNUTRPR, QTBRUTAPRUNR)
					VALUES
						(C_CURSOR.CDFILAUXPRAT, C_CURSOR.CDPRATO, C_CURSOR.CDPRODNOVO, C_CURSOR.QTPRODPRAT, C_CURSOR.VRPEFATCOCPR, C_CURSOR.VRPEFATCORPR,
						 C_CURSOR.HRTEMPPREPPR, C_CURSOR.SGUNIDADE, C_CURSOR.QTUNIDESTPR, C_CURSOR.QTBRUTAPR, C_CURSOR.IDPRODBASEPR, V_APREPROD,
						 C_CURSOR.DTULTATURECP, C_CURSOR.VRPEFATNUTPR, C_CURSOR.QTCALCNUTRPR, C_CURSOR.QTBRUTAPRUNR);
					
					SETVARIAVEIS(C_CURSOR.CDPRODNOVO, C_CURSOR.SGUNIDADE, C_CURSOR.SGUNIDPROD, C_CURSOR.QTPRODPRAT, C_CURSOR.QTBRUTAPRUNR, 
									 C_CURSOR.VRPEFATCOCPR, C_CURSOR.VRPEFATCORPR, C_CURSOR.VRPEFATNUTPR);
				ELSE
					UPD_RECEPADR (C_CURSOR.QTPRODPRAT, C_CURSOR.SGUNIDADE, C_CURSOR.VRPEFATCOCPR, C_CURSOR.VRPEFATCORPR, 
									  C_CURSOR.HRTEMPPREPPR, C_CURSOR.QTBRUTAPRUNR, C_CURSOR.VRPEFATNUTPR,
									  C_CURSOR.CDFILAUXPRAT, C_CURSOR.CDPRATO, C_CURSOR.CDPRODNOVO);

					SETVARIAVEIS(C_CURSOR.CDPRODNOVO, C_CURSOR.SGUNIDADE, C_CURSOR.SGUNIDPROD, C_CURSOR.QTPRODPRAT, C_CURSOR.QTBRUTAPRUNR, 
									 C_CURSOR.VRPEFATCOCPR, C_CURSOR.VRPEFATCORPR, C_CURSOR.VRPEFATNUTPR);					
				END IF;
						 
			ELSIF (C_CURSOR.NMTABLE = 'RECETPCARD') THEN
				V_APREPROD := APREPROD(C_CURSOR.CDPRODNOVO, C_CURSOR.CDAPRERECE);
				--qryVerGPratTC
				SELECT COUNT(1) CDPRATO
				  INTO V_COUNT
				  FROM RECETPCARD
				 WHERE CDFILAUXPRAT = C_CURSOR.CDFILAUXPRAT 
					AND CDPRATO      = C_CURSOR.CDPRATO      
					AND CDFILCENTPME = C_CURSOR.CDFILCENTPME
					AND CDTIPOCARD   = C_CURSOR.CDTIPOCARD
					AND CDPRODUTO    = C_CURSOR.CDPRODNOVO;
				--qryDelRecTC	
				DELETE 
				  FROM RECETPCARD
				 WHERE (CDFILCENTPME   = C_CURSOR.CDFILCENTPME)
					AND (CDTIPOCARD     = C_CURSOR.CDTIPOCARD)
					AND (CDFILAUXPRAT   = C_CURSOR.CDFILAUXPRAT) 
					AND (CDPRATO        = C_CURSOR.CDPRATO)      
					AND (CDPRODUTO      = C_CURSOR.CDPRODORIG);
					
				IF (V_COUNT = 0) THEN
					--qryInsRecTC
					INSERT INTO RECETPCARD
						(CDFILAUXPRAT, CDPRATO, CDPRODUTO, QTPRODPRATTP, VRPEFATCOCPRTP, VRPEFATCORPRTP,
						 HRTEMPPREPPRTP, SGUNIDADE, QTUNIDESTPRTP, QTBRUTAPRTP, IDPRODBASEPRTP, CDAPRERECE,
						 DTULTATURECPTP, VRPEFATNUTPRTP, QTCALCNUTRPRTP, QTBRUTAPRUNRTP, CDFILCENTPME, CDTIPOCARD)
						VALUES
						(C_CURSOR.CDFILAUXPRAT, C_CURSOR.CDPRATO, C_CURSOR.CDPRODNOVO, C_CURSOR.QTPRODPRAT, C_CURSOR.VRPEFATCOCPR, C_CURSOR.VRPEFATCORPR,
						 C_CURSOR.HRTEMPPREPPR, C_CURSOR.SGUNIDADE, C_CURSOR.QTUNIDESTPR, C_CURSOR.QTBRUTAPR, C_CURSOR.IDPRODBASEPR, V_APREPROD,
						 C_CURSOR.DTULTATURECP, C_CURSOR.VRPEFATNUTPR, C_CURSOR.QTCALCNUTRPR, C_CURSOR.QTBRUTAPRUNR, C_CURSOR.CDFILCENTPME, C_CURSOR.CDTIPOCARD);
				
					SETVARIAVEIS(C_CURSOR.CDPRODNOVO, C_CURSOR.SGUNIDADE, C_CURSOR.SGUNIDPROD, C_CURSOR.QTPRODPRAT, 
									 C_CURSOR.QTBRUTAPRUNR, C_CURSOR.VRPEFATCOCPR, C_CURSOR.VRPEFATCORPR, C_CURSOR.VRPEFATNUTPR);
				ELSE
					UPD_RECETPCARD (C_CURSOR.QTPRODPRAT, C_CURSOR.SGUNIDADE, C_CURSOR.VRPEFATCOCPR, C_CURSOR.VRPEFATCORPR , 
										 C_CURSOR.HRTEMPPREPPR, C_CURSOR.QTBRUTAPRUNR, C_CURSOR.VRPEFATNUTPR,
										 C_CURSOR.CDFILAUXPRAT, C_CURSOR.CDPRATO, C_CURSOR.CDFILCENTPME, C_CURSOR.CDTIPOCARD, C_CURSOR.CDPRODNOVO);
					
					SETVARIAVEIS(C_CURSOR.CDPRODNOVO, C_CURSOR.SGUNIDADE, C_CURSOR.SGUNIDPROD, C_CURSOR.QTPRODPRAT, C_CURSOR.QTBRUTAPRUNR, 
									 C_CURSOR.VRPEFATCOCPR, C_CURSOR.VRPEFATCORPR, C_CURSOR.VRPEFATNUTPR);
				END IF;
					
			ELSIF (C_CURSOR.NMTABLE = 'RECEFILI') THEN
				V_APREPROD := APREPROD(C_CURSOR.CDPRODNOVO, C_CURSOR.CDAPRERECE);
				--qryVerGPratLO
				SELECT COUNT(1) CDPRATO
				  INTO V_COUNT
				  FROM RECEFILI
				 WHERE CDFILAUXPRAT = C_CURSOR.CDFILAUXPRAT AND
						 CDPRATO      = C_CURSOR.CDPRATO      AND
						 CDFILIAL     = C_CURSOR.CDFILIAL     AND
						 CDPRODUTO    = C_CURSOR.CDPRODNOVO;
				--qryDelRecLO
				DELETE 
				  FROM RECEFILI
				 WHERE
					(CDFILAUXPRAT = C_CURSOR.CDFILAUXPRAT) AND
					(CDPRATO      = C_CURSOR.CDPRATO)      AND
					(CDFILIAL     = C_CURSOR.CDFILIAL)     AND
					(CDPRODUTO    = C_CURSOR.CDPRODORIG);
				
				IF (V_COUNT = 0) THEN
					--qryInsRecLO
					INSERT INTO RECEFILI
						(CDFILAUXPRAT, CDPRATO, CDFILIAL, CDPRODUTO, QTPRODRECLOC, VRPEFATCOCLO, VRPEFATCORLO,
						 HRTEMPPREPLO, SGUNIDADE, QTUNIDESTLO, QTBRUTALO, IDPRODBASELO, CDAPRERECE,
						 DTULTATURECF, VRPEFATNUTLO, QTCALCNUTRLO, QTBRUTALOUNR)
					VALUES
						(C_CURSOR.CDFILAUXPRAT, C_CURSOR.CDPRATO, C_CURSOR.CDFILIAL, C_CURSOR.CDPRODNOVO, C_CURSOR.QTPRODPRAT, C_CURSOR.VRPEFATCOCPR, C_CURSOR.VRPEFATCORPR,
						 C_CURSOR.HRTEMPPREPPR, C_CURSOR.SGUNIDADE, C_CURSOR.QTUNIDESTPR, C_CURSOR.QTBRUTAPR, C_CURSOR.IDPRODBASEPR, V_APREPROD,
						 C_CURSOR.DTULTATURECP, C_CURSOR.VRPEFATNUTPR, C_CURSOR.QTCALCNUTRPR, C_CURSOR.QTBRUTAPRUNR);
						 
					SETVARIAVEIS(C_CURSOR.CDPRODNOVO, C_CURSOR.SGUNIDADE, C_CURSOR.SGUNIDPROD, C_CURSOR.QTPRODPRAT, 
									 C_CURSOR.QTBRUTAPRUNR, C_CURSOR.VRPEFATCOCPR, C_CURSOR.VRPEFATCORPR, C_CURSOR.VRPEFATNUTPR);
				ELSE 
					UPD_RECEFILI (C_CURSOR.QTPRODPRAT, C_CURSOR.SGUNIDADE, C_CURSOR.VRPEFATCOCPR, C_CURSOR.VRPEFATCORPR, C_CURSOR.HRTEMPPREPPR, C_CURSOR.QTBRUTAPRUNR, C_CURSOR.VRPEFATNUTPR,
									  C_CURSOR.CDFILAUXPRAT, C_CURSOR.CDPRATO, C_CURSOR.CDFILIAL, C_CURSOR.CDPRODNOVO);
					
					SETVARIAVEIS(C_CURSOR.CDPRODNOVO, C_CURSOR.SGUNIDADE, C_CURSOR.SGUNIDPROD, C_CURSOR.QTPRODPRAT, 
									 C_CURSOR.QTBRUTAPRUNR, C_CURSOR.VRPEFATCOCPR, C_CURSOR.VRPEFATCORPR, C_CURSOR.VRPEFATNUTPR);
				END IF;
			ELSIF (C_CURSOR.NMTABLE = 'RECESERV') THEN
				V_APREPROD := APREPROD(C_CURSOR.CDPRODNOVO, C_CURSOR.CDAPRERECE);
				--qryVerGPratSE
				SELECT COUNT(1) CDPRATO
				  INTO V_COUNT
				  FROM RECESERV
				 WHERE CDFILAUXPRAT = C_CURSOR.CDFILAUXPRAT AND
						 CDPRATO      = C_CURSOR.CDPRATO      AND
						 CDFILIAL     = C_CURSOR.CDFILIAL     AND
						 CDSERVFILI   = C_CURSOR.CDSERVFILI   AND
						 CDPRODUTO    = C_CURSOR.CDPRODNOVO;			
				--qryDelRecSE
				DELETE 
				  FROM RECESERV
				 WHERE (CDFILAUXPRAT = C_CURSOR.CDFILAUXPRAT) AND
						 (CDPRATO      = C_CURSOR.CDPRATO)      AND
						 (CDFILIAL     = C_CURSOR.CDFILIAL)     AND
						 (CDSERVFILI   = C_CURSOR.CDSERVFILI)   AND
						 (CDPRODUTO    = C_CURSOR.CDPRODORIG);
						 
				IF (V_COUNT = 0) THEN
					--qryInsRecSE
					INSERT INTO RECESERV
						(CDFILAUXPRAT, CDPRATO, CDFILIAL, CDSERVFILI, CDPRODUTO, QTPRODRECSER, VRPEFATCOCSE, VRPEFATCORSE,
						 HRTEMPPREPSE, SGUNIDADE, QTUNIDESTSE, QTBRUTASE, IDPRODBASESE, CDAPRERECE,
						 DTULTATURECS, VRPEFATNUTSE, QTCALCNUTRSE, QTBRUTASEUNR)
					VALUES
						(C_CURSOR.CDFILAUXPRAT, C_CURSOR.CDPRATO, C_CURSOR.CDFILIAL, C_CURSOR.CDSERVFILI, C_CURSOR.CDPRODNOVO, C_CURSOR.QTPRODPRAT,
						 C_CURSOR.VRPEFATCOCPR, C_CURSOR.VRPEFATCORPR, C_CURSOR.HRTEMPPREPPR, C_CURSOR.SGUNIDADE, C_CURSOR.QTUNIDESTPR,
						 C_CURSOR.QTBRUTAPR, C_CURSOR.IDPRODBASEPR, V_APREPROD,
						 C_CURSOR.DTULTATURECP, C_CURSOR.VRPEFATNUTPR, C_CURSOR.QTCALCNUTRPR, C_CURSOR.QTBRUTAPRUNR);
					
					SETVARIAVEIS(C_CURSOR.CDPRODNOVO, C_CURSOR.SGUNIDADE, C_CURSOR.SGUNIDPROD, C_CURSOR.QTPRODPRAT, 
									 C_CURSOR.QTBRUTAPRUNR, C_CURSOR.VRPEFATCOCPR, C_CURSOR.VRPEFATCORPR, C_CURSOR.VRPEFATNUTPR);
				ELSE
					UPD_RECESERV(C_CURSOR.QTPRODPRAT, C_CURSOR.SGUNIDADE, C_CURSOR.VRPEFATCOCPR, C_CURSOR.VRPEFATCORPR, C_CURSOR.HRTEMPPREPPR, C_CURSOR.QTBRUTAPRUNR, C_CURSOR.VRPEFATNUTPR,
									 C_CURSOR.CDFILAUXPRAT, C_CURSOR.CDPRATO, C_CURSOR.CDFILIAL, C_CURSOR.CDSERVFILI, C_CURSOR.CDPRODNOVO);
					
					SETVARIAVEIS(C_CURSOR.CDPRODNOVO, C_CURSOR.SGUNIDADE, C_CURSOR.SGUNIDPROD, C_CURSOR.QTPRODPRAT, 
									 C_CURSOR.QTBRUTAPRUNR, C_CURSOR.VRPEFATCOCPR, C_CURSOR.VRPEFATCORPR, C_CURSOR.VRPEFATNUTPR);
				END IF;
			END IF;
		ELSE
			IF (C_CURSOR.NMTABLE = 'RECEPADR') THEN
				UPD_RECEPADR (C_CURSOR.QTPRODPRAT, C_CURSOR.SGUNIDADE, C_CURSOR.VRPEFATCOCPR, C_CURSOR.VRPEFATCORPR, C_CURSOR.HRTEMPPREPPR, C_CURSOR.QTBRUTAPRUNR, C_CURSOR.VRPEFATNUTPR,
								  C_CURSOR.CDFILAUXPRAT, C_CURSOR.CDPRATO, C_CURSOR.CDPRODUTO);
								 
				SETVARIAVEIS(C_CURSOR.CDPRODUTO, C_CURSOR.SGUNIDADE, C_CURSOR.SGUNIDPROD, C_CURSOR.QTPRODPRAT, 
								 C_CURSOR.QTBRUTAPRUNR, C_CURSOR.VRPEFATCOCPR, C_CURSOR.VRPEFATCORPR, C_CURSOR.VRPEFATNUTPR);
				
			ELSIF (C_CURSOR.NMTABLE = 'RECETPCARD') THEN
				UPD_RECETPCARD (C_CURSOR.QTPRODPRAT, C_CURSOR.SGUNIDADE, C_CURSOR.VRPEFATCOCPR, C_CURSOR.VRPEFATCORPR, C_CURSOR.HRTEMPPREPPR, C_CURSOR.QTBRUTAPRUNR, C_CURSOR.VRPEFATNUTPR,
									 C_CURSOR.CDFILAUXPRAT, C_CURSOR.CDPRATO, C_CURSOR.CDFILCENTPME, C_CURSOR.CDTIPOCARD, C_CURSOR.CDPRODUTO);
								 
				SETVARIAVEIS(C_CURSOR.CDPRODUTO, C_CURSOR.SGUNIDADE, C_CURSOR.SGUNIDPROD, C_CURSOR.QTPRODPRAT, 
								 C_CURSOR.QTBRUTAPRUNR, C_CURSOR.VRPEFATCOCPR, C_CURSOR.VRPEFATCORPR, C_CURSOR.VRPEFATNUTPR);
				
			ELSIF (C_CURSOR.NMTABLE = 'RECEFILI') THEN
				UPD_RECEFILI (C_CURSOR.QTPRODPRAT, C_CURSOR.SGUNIDADE, C_CURSOR.VRPEFATCOCPR, C_CURSOR.VRPEFATCORPR, C_CURSOR.HRTEMPPREPPR, C_CURSOR.QTBRUTAPRUNR, C_CURSOR.VRPEFATNUTPR,
								  C_CURSOR.CDFILAUXPRAT, C_CURSOR.CDPRATO, C_CURSOR.CDFILIAL, C_CURSOR.CDPRODUTO);
								 
				SETVARIAVEIS(C_CURSOR.CDPRODUTO, C_CURSOR.SGUNIDADE, C_CURSOR.SGUNIDPROD, C_CURSOR.QTPRODPRAT, 
								 C_CURSOR.QTBRUTAPRUNR, C_CURSOR.VRPEFATCOCPR, C_CURSOR.VRPEFATCORPR, C_CURSOR.VRPEFATNUTPR);
				
			ELSIF (C_CURSOR.NMTABLE = 'RECESERV') THEN
				UPD_RECESERV(C_CURSOR.QTPRODPRAT, C_CURSOR.SGUNIDADE, C_CURSOR.VRPEFATCOCPR, C_CURSOR.VRPEFATCORPR, C_CURSOR.HRTEMPPREPPR, C_CURSOR.QTBRUTAPRUNR, C_CURSOR.VRPEFATNUTPR,
								 C_CURSOR.CDFILAUXPRAT, C_CURSOR.CDPRATO, C_CURSOR.CDFILIAL, C_CURSOR.CDSERVFILI, C_CURSOR.CDPRODUTO);
								 
				SETVARIAVEIS(C_CURSOR.CDPRODUTO, C_CURSOR.SGUNIDADE, C_CURSOR.SGUNIDPROD, C_CURSOR.QTPRODPRAT,
				             C_CURSOR.QTBRUTAPRUNR, C_CURSOR.VRPEFATCOCPR, C_CURSOR.VRPEFATCORPR, C_CURSOR.VRPEFATNUTPR);
			END IF;
		END IF;
		
		V_AUXQUANTIDADE := 0;
		V_AUXQTDEBRUTA  := 0;
		V_QTDENUTR 		 := 0;
		V_AUXQTDEREQ 	 := 0;
		
		IF (P_IDQTLIQUBRUT = 'B') THEN
			V_AUXQUANTIDADE := V_DBQUANTIDADE;
			V_AUXQTDEBRUTA  := CALCQTDE(V_DBQUANTIDADE, V_DBGANHCOC, V_DBPERLIMP, 'B');
		ELSE
			V_AUXQUANTIDADE := CALCQTDE(V_DBQTDEBRUTA, V_DBGANHCOC, V_DBPERLIMP, 'L');
			V_AUXQTDEBRUTA  := V_DBQTDEBRUTA;
		END IF;
		
		V_AUXQTDEREQ := QTDE_BRUTA(V_AUXQTDEBRUTA, V_STCDPRODUTO, V_STUNIDADE, V_STUNIDPROD);
		V_QTDENUTR   := ((V_AUXQUANTIDADE * V_DBAPROVNUTR)/100);	
		
		IF (C_CURSOR.NMTABLE = 'RECEPADR') THEN
			CALC_UPD_RECEPADR (C_CURSOR.CDFILAUXPRAT, C_CURSOR.CDPRATO, V_STCDPRODUTO, 
									 V_AUXQUANTIDADE, V_AUXQTDEBRUTA, V_AUXQTDEREQ, V_QTDENUTR);

		ELSIF (C_CURSOR.NMTABLE = 'RECETPCARD') THEN
			CALC_UPD_RECETPCARD (C_CURSOR.CDFILAUXPRAT, C_CURSOR.CDPRATO, C_CURSOR.CDFILCENTPME, C_CURSOR.CDTIPOCARD, V_STCDPRODUTO,
										V_AUXQUANTIDADE, V_AUXQTDEBRUTA, V_AUXQTDEREQ, V_QTDENUTR);
			
		ELSIF (C_CURSOR.NMTABLE = 'RECEFILI') THEN
			CALC_UPD_RECEFILI (C_CURSOR.CDFILAUXPRAT, C_CURSOR.CDPRATO, C_CURSOR.CDFILIAL, V_STCDPRODUTO,
									 V_AUXQUANTIDADE, V_AUXQTDEBRUTA, V_AUXQTDEREQ, V_QTDENUTR);
			
		ELSIF (C_CURSOR.NMTABLE = 'RECESERV') THEN
			CALC_UPD_RECESERV (C_CURSOR.CDFILAUXPRAT, C_CURSOR.CDPRATO, C_CURSOR.CDFILIAL, C_CURSOR.CDSERVFILI, V_STCDPRODUTO,
									 V_AUXQUANTIDADE, V_AUXQTDEBRUTA, V_AUXQTDEREQ, V_QTDENUTR);
		END IF;
	END LOOP;
	COMMIT;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('ATU_PROD_RECEITA','6.19.124'); END;
/

