CREATE OR ALTER procedure SPC_INDICE_REPRESENTATIVIDADE (
    CENTRO_NEGOCIO_ID integer,
    MODELO_ID integer)
returns (
    VALOR_MODELO numeric(15,2),
    VALOR_TOTAL numeric(15,2),
    REPRESENTATIVIDADE numeric(15,2))
as
declare variable VVALOR_MODELO numeric(15,2);
declare variable VVALOR_TOTAL numeric(15,2);
declare variable INDICE_REPRESENTATIVIDADE numeric(15,2);
BEGIN
    FOR
        SELECT VALOR_MODELO, VALOR_TOTAL, VALOR_MODELO/VALOR_TOTAL INDICE_REPRESENTATIVIDADE
    FROM (
        SELECT SUM(VALOR_MODELO) VALOR_MODELO, SUM(VALOR_TOTAL) VALOR_TOTAL
        FROM (
            SELECT 0.00 AS VALOR_MODELO,
                   CAST(SUM(VALOR_TOTAL) AS NUMERIC(15,2)) VALOR_TOTAL
            FROM (
                SELECT B.CONTROLE AS ID, B.QUANTIDADE, B.QUANTIDADE*(B.VALOR_UNITARIO+COALESCE(B.MARGEM,1)) VALOR_TOTAL
                  FROM TBNFS A, TBNFS_ITEM B, TBPRODUTO P, TBMODELO M, TBOPERACAO O, TBCENTRO_NEGOCIO_FAMILIA F
                 WHERE A.CONTROLE = B.NFS_CONTROLE
                   AND A.DATA_EMISSAO >= CURRENT_DATE - 90
                   AND B.PRODUTO_CODIGO = P.CODIGO
                   AND P.MODELO_CODIGO = M.CODIGO
                   AND B.OPERACAO_CODIGO = O.CODIGO
                   AND O.CONTROLE_FATURAMENTO = '1'
                   AND F.FAMILIA_ID = P.FAMILIA_ALTERNATIVA
                   AND ((A.NATUREZA = 1 AND A.SITUACAO = 2) OR
                        (A.NATUREZA = 2 AND A.SITUACAO = 1))
                   AND F.CENTRO_NEGOCIO_ID = :CENTRO_NEGOCIO_ID
                  UNION
                SELECT 'CF'||B.MFE_ITEM_ID AS ID, B.QUANTIDADE, B.QUANTIDADE*(B.VALOR_UNITARIO) VALOR_TOTAL
                  FROM VWMFE A, VWMFE_ITEM B, TBPRODUTO P, TBMODELO M, TBOPERACAO O, TBCENTRO_NEGOCIO_FAMILIA F
                 WHERE A.MFE_ID = B.MFE_ID
                   AND A.DATA_EMISSAO >= CURRENT_DATE - 90
                   AND B.PRODUTO_CODIGO = P.CODIGO
                   AND P.MODELO_CODIGO = M.CODIGO
                   AND B.OPERACAO_CODIGO = O.CODIGO
                   AND O.CONTROLE_FATURAMENTO = '1'
                   AND F.FAMILIA_ID = P.FAMILIA_ALTERNATIVA
                   AND ((A.NATUREZA = 1 AND A.SITUACAO = 2) OR
                        (A.NATUREZA = 2 AND A.SITUACAO = 1))
                   AND F.CENTRO_NEGOCIO_ID = :CENTRO_NEGOCIO_ID
                  ) X
            UNION
            
            SELECT CAST(SUM(VALOR_TOTAL) AS NUMERIC(15,2)) VALOR_MODELO,
                   0.00 AS VALOR_TOTAL
            FROM (
                SELECT 'NF'||B.CONTROLE AS ID, B.QUANTIDADE, B.QUANTIDADE*(B.VALOR_UNITARIO+COALESCE(B.MARGEM,1)) VALOR_TOTAL
                  FROM TBNFS A, TBNFS_ITEM B, TBPRODUTO P, TBMODELO M, TBOPERACAO O, TBCENTRO_NEGOCIO_FAMILIA F
                 WHERE A.CONTROLE = B.NFS_CONTROLE
                   AND A.DATA_EMISSAO >= CURRENT_DATE - 90
                   AND B.PRODUTO_CODIGO = P.CODIGO
                   AND P.MODELO_CODIGO = M.CODIGO
                   AND B.OPERACAO_CODIGO = O.CODIGO
                   AND O.CONTROLE_FATURAMENTO = '1'
                   AND F.FAMILIA_ID = P.FAMILIA_ALTERNATIVA
                   AND ((A.NATUREZA = 1 AND A.SITUACAO = 2) OR
                        (A.NATUREZA = 2 AND A.SITUACAO = 1))
                       AND F.CENTRO_NEGOCIO_ID = :CENTRO_NEGOCIO_ID
                       AND P.MODELO_CODIGO = :MODELO_ID
                    -- AND M.CLASSIFICACAO = :PERFIL_MOD
                    -- AND P.LINHA_CODIGO  = :LINHA
                  UNION
                SELECT 'CF'||B.MFE_ITEM_ID AS ID, B.QUANTIDADE, B.QUANTIDADE*(B.VALOR_UNITARIO) VALOR_TOTAL
                  FROM VWMFE A, VWMFE_ITEM B, TBPRODUTO P, TBMODELO M, TBOPERACAO O, TBCENTRO_NEGOCIO_FAMILIA F
                 WHERE A.MFE_ID = B.MFE_ID
                   AND A.DATA_EMISSAO >= CURRENT_DATE - 90
                   AND B.PRODUTO_CODIGO = P.CODIGO
                   AND P.MODELO_CODIGO = M.CODIGO
                   AND B.OPERACAO_CODIGO = O.CODIGO
                   AND O.CONTROLE_FATURAMENTO = '1'
                   AND F.FAMILIA_ID = P.FAMILIA_ALTERNATIVA
                   AND ((A.NATUREZA = 1 AND A.SITUACAO = 2) OR
                        (A.NATUREZA = 2 AND A.SITUACAO = 1))
                       AND F.CENTRO_NEGOCIO_ID = :CENTRO_NEGOCIO_ID
                       AND P.MODELO_CODIGO = :MODELO_ID
                    -- AND M.CLASSIFICACAO = :PERFIL_MOD
                    -- AND P.LINHA_CODIGO  = :LINHA
                  ) X
            )
        ) INTO :vVALOR_MODELO, :vVALOR_TOTAL, :INDICE_REPRESENTATIVIDADE
        DO BEGIN
            :VALOR_MODELO           = :vVALOR_MODELO;
            :VALOR_TOTAL            = :vVALOR_TOTAL;
            :REPRESENTATIVIDADE     = :INDICE_REPRESENTATIVIDADE;

            SUSPEND;

        END

END;