/* Sistemas Integrados TEKNISA

   Nome: 01TF_SUPSTPO_COPIAR_COTACAO.SQL

   Descrição:
   Procedimento para duplicar a cotação. Usada no portal e-commerce

   Criação:
   24/09/2015 Joao Corte

*/
CREATE OR REPLACE PROCEDURE COPIAR_COTACAO
                     (P_CDFILIAL    IN VARCHAR2,
                      P_NRPEDIDOCOL IN VARCHAR2,
                      P_NRORG       IN NUMBER DEFAULT 1)
IS

  V_NRPEDIDOCOL VARCHAR2(20);
  V_NRPEDCOLETA VARCHAR2(20);

  V_DTPEDCOLGERAL   PEDCOLGERAL.DTPEDCOLGERAL%TYPE;
  V_DTINIPERGERAL   PEDCOLGERAL.DTINIPERGERAL%TYPE;
  V_DTFINPERGERAL   PEDCOLGERAL.DTFINPERGERAL%TYPE;
  V_IDPEDCOLCONS    PEDCOLGERAL.IDPEDCOLCONS%TYPE;
  V_CDOPERADOR      PEDCOLGERAL.CDOPERADOR%TYPE;
  V_CDOPERLANC      PEDCOLGERAL.CDOPERLANC%TYPE;
  V_DTEXPIRAPEDCOL  PEDCOLGERAL.DTEXPIRAPEDCOL%TYPE;

  V_CDFILIALFORN    FORNEPEDCOL.CDFILIAL%TYPE;
  V_CDFORNECEDFP    FORNEPEDCOL.CDFORNECED%TYPE;

  V_CDFILIALREGI    REGIAOPEDCOL.CDFILIAL%TYPE;
  V_CDREGIAOREGI    REGIAOPEDCOL.CDREGIAO%TYPE;

  V_CDFILIALPRMARC  PRMARCPEDCOL.CDFILIAL%TYPE;
  V_CDPRODUTOPRMARC PRMARCPEDCOL.CDPRODUTO%TYPE;
  V_CDMARCAPRMARC   PRMARCPEDCOL.CDMARCA%TYPE;
  V_VRULTPRECPRMARC PRMARCPEDCOL.VRULTPRECPRMARC%TYPE;
  V_VRPRECUNIPRMARC PRMARCPEDCOL.VRPRECUNIPRMARC%TYPE;
  V_QTDISPPRODMARC  PRMARCPEDCOL.QTDISPPRODMARC%TYPE;


  CURSOR C_PEDCOLGERAL IS
    SELECT DTPEDCOLGERAL, DTINIPERGERAL, DTFINPERGERAL, IDPEDCOLCONS,
           CDOPERADOR,    CDOPERLANC,    DTEXPIRAPEDCOL
      FROM PEDCOLGERAL
     WHERE PEDCOLGERAL.CDFILIAL    = P_CDFILIAL
       AND PEDCOLGERAL.NRPEDIDOCOL = P_NRPEDIDOCOL
       AND PEDCOLGERAL.NRORG       = P_NRORG;

  CURSOR C_FORNEPEDCOL IS
    SELECT FORNEPEDCOL.CDFILIAL, FORNEPEDCOL.CDFORNECED 
      FROM FORNEPEDCOL
     WHERE FORNEPEDCOL.CDFILIAL    = P_CDFILIAL
       AND FORNEPEDCOL.NRPEDIDOCOL = P_NRPEDIDOCOL
       AND FORNEPEDCOL.NRORG       = P_NRORG; 

  CURSOR C_REGIAOPEDCOL IS
    SELECT REGIAOPEDCOL.CDFILIAL, REGIAOPEDCOL.CDREGIAO 
      FROM REGIAOPEDCOL
     WHERE REGIAOPEDCOL.CDFILIAL    = P_CDFILIAL
       AND REGIAOPEDCOL.NRPEDIDOCOL = P_NRPEDIDOCOL
       AND REGIAOPEDCOL.NRORG       = P_NRORG;   

  CURSOR C_PRMARCPEDCOL(P_FILIAL VARCHAR2,
                        P_PEDIDOCOL VARCHAR2) 
  IS
    SELECT PRMARCPEDCOL.CDFILIAL, PRMARCPEDCOL.CDPRODUTO, PRMARCPEDCOL.CDMARCA,
           PRMARCPEDCOL.VRULTPRECPRMARC, PRMARCPEDCOL.VRPRECUNIPRMARC, PRMARCPEDCOL.QTDISPPRODMARC
      FROM PRMARCPEDCOL
     WHERE PRMARCPEDCOL.CDFILIAL    = P_CDFILIAL
       AND PRMARCPEDCOL.NRPEDIDOCOL = P_NRPEDIDOCOL
       AND PRMARCPEDCOL.NRORG       = P_NRORG;      

BEGIN
  NOVO_CODIGO('PEDCOLGERAL' || P_CDFILIAL, V_NRPEDIDOCOL, 1, P_NRORG);
  V_NRPEDIDOCOL := SUBSTR(V_NRPEDIDOCOL, 11, 10);
  
  /***************************INSERT PEDCOLGERAL***************************/
  OPEN C_PEDCOLGERAL;
  LOOP
    FETCH C_PEDCOLGERAL INTO V_DTPEDCOLGERAL, V_DTINIPERGERAL, V_DTFINPERGERAL, V_IDPEDCOLCONS,
                             V_CDOPERADOR,    V_CDOPERLANC,    V_DTEXPIRAPEDCOL;
    EXIT WHEN C_PEDCOLGERAL%NOTFOUND;

    INSERT INTO PEDCOLGERAL ( CDFILIAL, NRPEDIDOCOL, DTPEDCOLGERAL,
                              DTINIPERGERAL, DTFINPERGERAL, IDPEDCOLCONS,
                              CDOPERADOR, CDOPERLANC, DTEXPIRAPEDCOL, NRORG)
                    VALUES  ( P_CDFILIAL, V_NRPEDIDOCOL, V_DTPEDCOLGERAL,
                              V_DTINIPERGERAL, V_DTFINPERGERAL, V_IDPEDCOLCONS,
                              V_CDOPERADOR, V_CDOPERLANC, V_DTEXPIRAPEDCOL, P_NRORG);
  END LOOP;
  CLOSE C_PEDCOLGERAL;
    
  /***************************INSERT FORNEPEDCOL***************************/                  
  OPEN C_FORNEPEDCOL;
  LOOP
    FETCH C_FORNEPEDCOL INTO V_CDFILIALFORN, V_CDFORNECEDFP;
    EXIT WHEN C_FORNEPEDCOL%NOTFOUND;

    INSERT INTO FORNEPEDCOL ( CDFILIAL,       NRPEDIDOCOL,   CDFORNECED,     NRORG)
                     VALUES ( V_CDFILIALFORN, V_NRPEDIDOCOL, V_CDFORNECEDFP, P_NRORG);
  END LOOP;
  CLOSE C_FORNEPEDCOL;
  
  /***************************INSERT REGIAOPEDCOL***************************/
  OPEN C_REGIAOPEDCOL;
  LOOP
    FETCH C_REGIAOPEDCOL INTO V_CDFILIALREGI, V_CDREGIAOREGI;
    EXIT WHEN C_REGIAOPEDCOL%NOTFOUND;

    INSERT INTO REGIAOPEDCOL ( CDFILIAL,       NRPEDIDOCOL,   CDREGIAO,       NRORG)
                      VALUES ( V_CDFILIALREGI, V_NRPEDIDOCOL, V_CDREGIAOREGI, P_NRORG);
  END LOOP;
  CLOSE C_REGIAOPEDCOL;

  
  /***************************INSERT PRMARCPEDCOL***************************/
  OPEN C_PRMARCPEDCOL(P_CDFILIAL, P_NRPEDIDOCOL);
  LOOP
    FETCH C_PRMARCPEDCOL INTO V_CDFILIALPRMARC,  V_CDPRODUTOPRMARC, V_CDMARCAPRMARC, 
                              V_VRULTPRECPRMARC, V_VRPRECUNIPRMARC, V_QTDISPPRODMARC;
    EXIT WHEN C_PRMARCPEDCOL%NOTFOUND;

    INSERT INTO PRMARCPEDCOL ( CDFILIAL,       NRPEDIDOCOL,     CDPRODUTO,
                               CDMARCA,        VRULTPRECPRMARC, VRPRECUNIPRMARC, 
                               QTDISPPRODMARC, NRORG)
                      VALUES ( V_CDFILIALPRMARC, V_NRPEDIDOCOL, V_CDPRODUTOPRMARC,
                               V_CDMARCAPRMARC,  V_VRULTPRECPRMARC, V_VRPRECUNIPRMARC, 
                               V_QTDISPPRODMARC, P_NRORG);
  END LOOP;
  CLOSE C_PRMARCPEDCOL;

  FOR C_PEDCOLGERAL IN (  SELECT CDREGIAO, CDFORNECED, DTINIPERGERAL, DTFINPERGERAL, CDOPERADOR, DTPEDCOLGERAL
                            FROM PEDCOLGERAL, FORNEPEDCOL, REGIAOPEDCOL
                           WHERE PEDCOLGERAL.CDFILIAL     = P_CDFILIAL
                             AND PEDCOLGERAL.NRPEDIDOCOL  = V_NRPEDIDOCOL
                             AND PEDCOLGERAL.NRORG        = P_NRORG
                             AND FORNEPEDCOL.CDFILIAL     = PEDCOLGERAL.CDFILIAL
                             AND FORNEPEDCOL.NRPEDIDOCOL  = PEDCOLGERAL.NRPEDIDOCOL
                             AND FORNEPEDCOL.NRORG        = P_NRORG
                             AND REGIAOPEDCOL.NRPEDIDOCOL = PEDCOLGERAL.NRPEDIDOCOL
                             AND REGIAOPEDCOL.CDFILIAL    = PEDCOLGERAL.CDFILIAL
                             AND REGIAOPEDCOL.NRORG       = P_NRORG)
  LOOP
    NOVO_CODIGO('PEDCOLETA' || P_CDFILIAL || C_PEDCOLGERAL.CDFORNECED || C_PEDCOLGERAL.CDREGIAO, V_NRPEDCOLETA, 1, P_NRORG);
    V_NRPEDCOLETA := SUBSTR(V_NRPEDCOLETA, 11, 10);

    INSERT INTO PEDCOLETA
      ( CDFILIAL, NRPEDCOLETA, CDFORNECED, DTPEDCOLETA, CDOPERADOR, DTINIPERCOT,
        DTFINPERCOT, CDREGIAO, NRPEDIDOCOL, NRORG)
    VALUES
      ( P_CDFILIAL, V_NRPEDCOLETA, C_PEDCOLGERAL.CDFORNECED, SYSDATE, C_PEDCOLGERAL.CDOPERADOR,
        C_PEDCOLGERAL.DTINIPERGERAL, C_PEDCOLGERAL.DTFINPERGERAL, C_PEDCOLGERAL.CDREGIAO, V_NRPEDIDOCOL, P_NRORG);

    OPEN C_PRMARCPEDCOL(P_CDFILIAL, V_NRPEDIDOCOL);
    LOOP
      FETCH C_PRMARCPEDCOL INTO V_CDFILIALPRMARC,  V_CDPRODUTOPRMARC, V_CDMARCAPRMARC, 
                                V_VRULTPRECPRMARC, V_VRPRECUNIPRMARC, V_QTDISPPRODMARC;
      EXIT WHEN C_PRMARCPEDCOL%NOTFOUND;

      INSERT INTO ITEMPEDCOL ( CDFILIAL,   NRPEDCOLETA,   CDFORNECED, 
                               CDREGIAO, CDPRODUTO, CDMARCA, 
                               VRITEMPEDCOL, VRANTITPEDCOL, NRORG)
                      VALUES ( P_CDFILIAL, V_NRPEDCOLETA, C_PEDCOLGERAL.CDFORNECED, 
                               C_PEDCOLGERAL.CDREGIAO, V_CDPRODUTOPRMARC, V_CDMARCAPRMARC,
                               V_VRPRECUNIPRMARC, V_VRULTPRECPRMARC, P_NRORG);

    END LOOP;
    CLOSE C_PRMARCPEDCOL;
  END LOOP;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('COPIAR_COTACAO','6.05.000'); END;
/