/* Sistemas Integrados TEKNISA
ID'S

E - ENTRADA
S - SAIDA
C - CUSTO PRODUCAO
P - CONTRA - PROVA
M - CMV
A - AJUSTE
I - IMPLANTACAO
*/

CREATE OR REPLACE FUNCTION CONTCTBL_PRODUTO(
    P_CDPRODUTO  IN PRODUTO.CDPRODUTO%TYPE,
    P_IDENTRSAID IN VARCHAR2,
    P_CDFILIAL IN FILIAL.CDFILIAL%TYPE)RETURN VARCHAR2
IS
    V_CDARVPROD  VARCHAR2(20);
    V_CDCTBLENTR VARCHAR2(20);   
    V_CDCTBLSAI VARCHAR2(20);
    V_CDCTBLPROD VARCHAR2(20);
    V_CDCTBLCPRO VARCHAR2(20);
    V_CDCTBLPRA VARCHAR2(20);
    V_CDCTBLIMPL VARCHAR2(20);
    V_CDCTBLAJUS VARCHAR2(20);
    V_RETORNA VARCHAR2(20);
    V_CDARVPROD1 VARCHAR2(20);
BEGIN
   BEGIN
      SELECT CDARVPROD
        INTO V_CDARVPROD
        FROM PRODUTO
       WHERE CDPRODUTO = P_CDPRODUTO;
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_CDARVPROD := NULL;
   END;
   
   BEGIN
     SELECT CDCTBLENTRPF, CDCTBLSAIDPF, 
            CDCTBLPRODPF, CDCTBLCPROPF,
            CDCTBLPRACPF, CDCTBLIMPLPF,
            CDCTBLAJUSPF
       INTO V_CDCTBLENTR, V_CDCTBLSAI,
            V_CDCTBLPROD, V_CDCTBLCPRO,
            V_CDCTBLPRA, V_CDCTBLIMPL,
            V_CDCTBLAJUS
       FROM PRODFILI PF
      WHERE PF.CDFILIAL = P_CDFILIAL
        AND PF.CDPRODUTO = P_CDPRODUTO;
   EXCEPTION
     WHEN NO_DATA_FOUND THEN
       V_CDCTBLENTR := NULL;
       V_CDCTBLSAI := NULL;
       V_CDCTBLPROD := NULL;
       V_CDCTBLCPRO := NULL;
       V_CDCTBLPRA := NULL;
       V_CDCTBLIMPL := NULL; 
       V_CDCTBLAJUS := NULL;
   END;
   
   CASE P_IDENTRSAID
    WHEN 'E' THEN V_RETORNA := V_CDCTBLENTR;
    WHEN 'S' THEN V_RETORNA := V_CDCTBLSAI;
    WHEN 'C' THEN V_RETORNA := V_CDCTBLPROD;
    WHEN 'P' THEN V_RETORNA := V_CDCTBLCPRO;
    WHEN 'M' THEN V_RETORNA := V_CDCTBLPRA;
    WHEN 'A' THEN V_RETORNA := V_CDCTBLAJUS;
    WHEN 'I' THEN V_RETORNA := V_CDCTBLIMPL;
   END CASE; 
    
    
   IF V_RETORNA IS NULL THEN 
      CASE P_IDENTRSAID
        WHEN 'E' THEN   BEGIN
                         SELECT MAX(CDARVPROD) AS CDARVPROD
                           INTO V_CDARVPROD1
                           FROM PRODUTO C
                           WHERE V_CDARVPROD LIKE C.CDARVPROD ||'%'
                           AND NOT CDCTBLENTRPR IS NULL;
                        EXCEPTION
                          WHEN NO_DATA_FOUND THEN
             		   V_CDARVPROD1 := NULL;
                        END;

                        IF V_CDARVPROD1 IS NOT NULL THEN
                       
                          BEGIN
                            SELECT PR.CDCTBLENTRPR AS CDCTBLENTRPR
                              INTO V_CDCTBLENTR
                              FROM PRODUTO PR
                             WHERE PR.CDARVPROD = V_CDARVPROD1;
                          EXCEPTION
                             WHEN NO_DATA_FOUND THEN
                              V_CDCTBLENTR := NULL;
                          END;
                        END IF;
                   
                        V_RETORNA := V_CDCTBLENTR; 
        WHEN 'S' THEN BEGIN
                        SELECT MAX(CDARVPROD) AS CDARVPROD
                          INTO V_CDARVPROD1
                          FROM PRODUTO C
                         WHERE V_CDARVPROD LIKE C.CDARVPROD ||'%'
                       AND NOT CDCTBLSAIDPR IS NULL;
                      EXCEPTION
                        WHEN NO_DATA_FOUND THEN
             		   V_CDARVPROD1 := NULL;
                      END;
 	
                      IF V_CDARVPROD1 IS NOT NULL THEN
                         BEGIN
                           SELECT PR.CDCTBLSAIDPR AS CDCTBLSAIDPR
                             INTO V_CDCTBLSAI
                             FROM PRODUTO PR
                            WHERE PR.CDARVPROD = V_CDARVPROD1;
                         EXCEPTION
                          WHEN NO_DATA_FOUND THEN
                           V_CDCTBLSAI := NULL;
                         END;
                     END IF;
                     
                     V_RETORNA := V_CDCTBLSAI; 
        WHEN 'C' THEN BEGIN
                        SELECT MAX(CDARVPROD) AS CDARVPROD
                          INTO V_CDARVPROD1
                          FROM PRODUTO C
                         WHERE V_CDARVPROD LIKE C.CDARVPROD ||'%'
                       AND NOT CDCTBLPRODPR IS NULL;
                      EXCEPTION
                        WHEN NO_DATA_FOUND THEN
             		   V_CDARVPROD1 := NULL;
                      END;
                      
                      IF V_CDARVPROD1 IS NOT NULL THEN
                         BEGIN
                          SELECT PR.CDCTBLPRODPR AS CDCTBLPRODPR
                            INTO V_CDCTBLPROD
                            FROM PRODUTO PR
                           WHERE PR.CDARVPROD = V_CDARVPROD1;
                         EXCEPTION
                          WHEN NO_DATA_FOUND THEN
                            V_CDCTBLPROD := NULL;
                         END;
                      END IF;
                      
                      V_RETORNA := V_CDCTBLPROD;
        WHEN 'P' THEN BEGIN
                        SELECT MAX(CDARVPROD) AS CDARVPROD
                          INTO V_CDARVPROD1
                          FROM PRODUTO C
                         WHERE V_CDARVPROD LIKE C.CDARVPROD ||'%'
                       AND NOT CDCTBLCPROPR IS NULL;
                      EXCEPTION
                        WHEN NO_DATA_FOUND THEN
             		   V_CDARVPROD1 := NULL;
                      END;
      
                      IF V_CDARVPROD1 IS NOT NULL THEN
                         
                         BEGIN
                           SELECT PR.CDCTBLCPROPR AS CDCTBLCPROPR
                             INTO V_CDCTBLCPRO
                             FROM PRODUTO PR
                            WHERE PR.CDARVPROD = V_CDARVPROD1;
                         EXCEPTION
                          WHEN NO_DATA_FOUND THEN
                           V_CDCTBLCPRO := NULL;
                         END;
                      END IF;
                      
                      V_RETORNA := V_CDCTBLCPRO;
        WHEN 'M' THEN BEGIN 
                        SELECT MAX(CDARVPROD) AS CDARVPROD
                          INTO V_CDARVPROD1
                          FROM PRODUTO C
                         WHERE V_CDARVPROD LIKE C.CDARVPROD ||'%'
                           AND NOT CDCTBLPRACPR IS NULL;
                      EXCEPTION 
                        WHEN NO_DATA_FOUND THEN
                         V_CDARVPROD1 := NULL;
                      END;
                      
                      IF V_CDARVPROD1 IS NOT NULL THEN
                         BEGIN
                           SELECT PR.CDCTBLPRACPR AS CDCTBLCPROPR
                             INTO V_CDCTBLPRA
                             FROM PRODUTO PR
                            WHERE PR.CDARVPROD = V_CDARVPROD1;
                         EXCEPTION
                           WHEN NO_DATA_FOUND THEN
                             V_CDCTBLPRA := NULL;
                         END;
                      END IF;
                   
                      V_RETORNA := V_CDCTBLPRA;
        WHEN 'A' THEN BEGIN 
                        SELECT MAX(CDARVPROD) AS CDARVPROD
                          INTO V_CDARVPROD1
                          FROM PRODUTO C
                         WHERE V_CDARVPROD LIKE C.CDARVPROD ||'%'
                           AND NOT CDCTBLAJUSPR IS NULL;
                      EXCEPTION 
                        WHEN NO_DATA_FOUND THEN
                         V_CDARVPROD1 := NULL;
                      END;
        
                      IF V_CDARVPROD1 IS NOT NULL THEN
                         BEGIN
                          SELECT PR.CDCTBLAJUSPR AS CDCTBLAJUSPR
                            INTO V_CDCTBLAJUS
                            FROM PRODUTO PR
                           WHERE PR.CDARVPROD = V_CDARVPROD1;
                         EXCEPTION
                           WHEN NO_DATA_FOUND THEN
                            V_CDCTBLAJUS := NULL;
                         END; 
                      END IF;
                      
                      V_RETORNA := V_CDCTBLAJUS; 
        WHEN 'I' THEN BEGIN 
                        SELECT MAX(CDARVPROD) AS CDARVPROD
                          INTO V_CDARVPROD1
                          FROM PRODUTO C
                         WHERE V_CDARVPROD LIKE C.CDARVPROD ||'%'
                           AND NOT CDCTBLIMPLPR IS NULL;
                      EXCEPTION 
                        WHEN NO_DATA_FOUND THEN
                         V_CDARVPROD1 := NULL;
                      END;
                    
                      IF V_CDARVPROD1 IS NOT NULL THEN 
                         BEGIN
                          SELECT PR.CDCTBLIMPLPR AS CDCTBLIMPLPR
                            INTO V_CDCTBLIMPL
                            FROM PRODUTO PR
                           WHERE PR.CDARVPROD = V_CDARVPROD1;
                         EXCEPTION
                          WHEN NO_DATA_FOUND THEN
                           V_CDCTBLIMPL := NULL;
                         END; 
                      END IF;
                      
                      V_RETORNA := V_CDCTBLIMPL;
      END CASE;
   END IF;
   
   RETURN(V_RETORNA);
END;
/

