SET TERM ^ ;

CREATE OR ALTER procedure SPC_FATURAMENTO_CN (
    CENTRO_NEGOCIO_ID integer)
returns (
    VALOR_TOTAL numeric(15,2))
as
declare variable VVALOR_TOTAL numeric(15,2);
BEGIN
    FOR
        SELECT VALOR_TOTAL
    FROM (
        SELECT 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
            )
        ) INTO :vVALOR_TOTAL
        DO BEGIN
            :VALOR_TOTAL            = :vVALOR_TOTAL;

            SUSPEND;

        END

END
^

SET TERM ; ^


SET TERM ^ ;

CREATE OR ALTER procedure SPC_FATURAMENTO_MODELO (
    CENTRO_NEGOCIO_ID integer,
    MODELO_ID integer,
    LINHA_ID integer,
    PERFIL_MODELO varchar(10),
    FAMILIA_ID integer,
    TIPO integer)
returns (
    VALOR_MODELO numeric(15,2))
as
declare variable VVALOR_MODELO numeric(15,2);
BEGIN
    FOR
        SELECT VALOR_MODELO
    FROM (
        SELECT SUM(VALOR_MODELO) VALOR_MODELO
        FROM (
            
            SELECT CAST(SUM(VALOR_TOTAL) AS NUMERIC(15,2)) VALOR_MODELO
            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 IIF(:TIPO = 1, P.MODELO_CODIGO  = :MODELO_ID,
                            IIF(:TIPO = 2, M.CLASSIFICACAO  = :PERFIL_MODELO,
                            IIF(:TIPO = 3, P.LINHA_CODIGO   = :LINHA_ID,
                            IIF(:TIPO = 4, P.FAMILIA_CODIGO = :FAMILIA_ID, TRUE))))
                  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 IIF(:TIPO = 1, P.MODELO_CODIGO  = :MODELO_ID,
                            IIF(:TIPO = 2, M.CLASSIFICACAO  = :PERFIL_MODELO,
                            IIF(:TIPO = 3, P.LINHA_CODIGO   = :LINHA_ID,
                            IIF(:TIPO = 4, P.FAMILIA_CODIGO = :FAMILIA_ID, TRUE))))
                  ) X
            )
        ) INTO :vVALOR_MODELO
        DO BEGIN
            :VALOR_MODELO           = :vVALOR_MODELO;

            SUSPEND;

        END

END
^

SET TERM ; ^


SET TERM ^ ;

CREATE OR ALTER procedure SPC_INDICE_REPRESENTATIVIDADE (
    CENTRO_NEGOCIO_ID integer,
    MODELO_ID integer,
    LINHA_ID integer,
    PERFIL_MODELO varchar(10),
    FAMILIA_ID integer,
    TIPO 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(18,5);
BEGIN
    FOR
        SELECT VALOR_MODELO, VALOR_TOTAL
    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, CAST(B.QUANTIDADE AS DOUBLE PRECISION) AS QUANTIDADE, CAST((CAST(B.QUANTIDADE AS DOUBLE PRECISION)*(CAST(B.VALOR_UNITARIO AS DOUBLE PRECISION)+CAST(COALESCE(B.MARGEM,1) AS DOUBLE PRECISION))) AS DOUBLE PRECISION) 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 ALL
                SELECT 'CF'||B.MFE_ITEM_ID AS ID, CAST(B.QUANTIDADE AS DOUBLE PRECISION) AS QUANTIDADE, CAST((CAST(B.QUANTIDADE AS DOUBLE PRECISION)*(CAST(B.VALOR_UNITARIO AS DOUBLE PRECISION))) AS DOUBLE PRECISION) 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 ALL
            
            SELECT CAST(SUM(VALOR_TOTAL) AS NUMERIC(15,2)) VALOR_MODELO,
                   0.00 AS VALOR_TOTAL
            FROM (
                SELECT 'NF'||B.CONTROLE AS ID, CAST(B.QUANTIDADE AS DOUBLE PRECISION) AS QUANTIDADE, CAST((CAST(B.QUANTIDADE AS DOUBLE PRECISION)*(CAST(B.VALOR_UNITARIO AS DOUBLE PRECISION)+CAST(COALESCE(B.MARGEM,1) AS DOUBLE PRECISION))) AS DOUBLE PRECISION) 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 IIF(:TIPO = 1, P.MODELO_CODIGO  = :MODELO_ID,
                            IIF(:TIPO = 2, M.CLASSIFICACAO  = :PERFIL_MODELO,
                            IIF(:TIPO = 3, P.LINHA_CODIGO   = :LINHA_ID,
                            IIF(:TIPO = 4, P.FAMILIA_CODIGO = :FAMILIA_ID, TRUE))))
                  UNION ALL
                SELECT 'CF'||B.MFE_ITEM_ID AS ID, CAST(B.QUANTIDADE AS DOUBLE PRECISION) AS QUANTIDADE, CAST((CAST(B.QUANTIDADE AS DOUBLE PRECISION)*(CAST(B.VALOR_UNITARIO AS DOUBLE PRECISION))) AS DOUBLE PRECISION) 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 IIF(:TIPO = 1, P.MODELO_CODIGO  = :MODELO_ID,
                            IIF(:TIPO = 2, M.CLASSIFICACAO  = :PERFIL_MODELO,
                            IIF(:TIPO = 3, P.LINHA_CODIGO   = :LINHA_ID,
                            IIF(:TIPO = 4, P.FAMILIA_CODIGO = :FAMILIA_ID, TRUE))))
                  ) X
            )
        ) INTO :vVALOR_MODELO, :vVALOR_TOTAL--, :INDICE_REPRESENTATIVIDADE
        DO BEGIN
            :VALOR_MODELO           = :vVALOR_MODELO;
            :VALOR_TOTAL            = :vVALOR_TOTAL;

            IF(:VALOR_TOTAL > 0) THEN
            BEGIN
                :INDICE_REPRESENTATIVIDADE     = CAST(CAST(:VALOR_MODELO AS DOUBLE PRECISION) / CAST(:VALOR_TOTAL AS DOUBLE PRECISION) AS DOUBLE PRECISION);
                :REPRESENTATIVIDADE     = CAST((:INDICE_REPRESENTATIVIDADE * 100) AS NUMERIC(15,2));
            END


            SUSPEND;

        END

END
^

SET TERM ; ^

