CREATE OR ALTER procedure SPC_FATURAMENTO_RESSUPRIMENTO (
    ESTABELECIMENTO_ID integer,
    MODELO_ID integer,
    CORES varchar(8000),
    TAMANHO_ID integer,
    PERIODO_INICIAL date,
    PERIODO_FINAL date)
returns (
    QUANTIDADE_FATURADA numeric(15,4))
as
BEGIN
    FOR SELECT
        SUM(COALESCE(V.QUANTIDADE, 0))
    FROM (
        SELECT
            B.QUANTIDADE
            FROM TBNFS A, TBNFS_ITEM B, TBPRODUTO N, TBMODELO M, TBOPERACAO O, TBMODELO_COR MC
            WHERE A.CONTROLE     = B.NFS_CONTROLE
            AND B.PRODUTO_CODIGO = N.CODIGO
            AND N.MODELO_CODIGO  = M.CODIGO
            AND ((A.NATUREZA = 1 AND A.SITUACAO = 2) OR (A.NATUREZA = 2 AND A.SITUACAO = 1))
            AND B.OPERACAO_CODIGO = O.CODIGO
            AND (O.CONTROLE_FATURAMENTO = '1' OR O.TRANSFERENCIA = '1')
            AND MC.MODELO_ID = M.CODIGO
            AND MC.COR_ID    = N.COR_CODIGO
            AND A.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO_ID
            AND M.CODIGO = :MODELO_ID
            AND MC.COR_ID IN (SELECT OSPLIT FROM SPLIT(:CORES, ','))
            AND B.TAMANHO = :TAMANHO_ID
            AND A.DATA_EMISSAO BETWEEN :PERIODO_INICIAL AND :PERIODO_FINAL
    
        UNION ALL
        
        SELECT
            B.QUANTIDADE
            FROM VWMFE A, VWMFE_ITEM B, TBOPERACAO O, TBPRODUTO C, TBMODELO M, TBMODELO_COR MC
            WHERE (O.CONTROLE_FATURAMENTO = '1' OR O.TRANSFERENCIA = '1')
            AND B.OPERACAO_CODIGO =  O.CODIGO
            AND C.CODIGO = B.PRODUTO_CODIGO
            AND M.CODIGO = C.MODELO_CODIGO
            AND A.MFE_ID = B.MFE_ID
            AND MC.MODELO_ID = M.CODIGO
            AND MC.COR_ID    = C.COR_CODIGO
            AND A.SITUACAO = 2
            AND A.NATUREZA = 1
            AND A.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO_ID
            AND M.CODIGO = :MODELO_ID
            AND MC.COR_ID IN (SELECT OSPLIT FROM SPLIT(:CORES, ','))
            AND B.TAMANHO = :TAMANHO_ID
            AND A.DATA_EMISSAO BETWEEN :PERIODO_INICIAL AND :PERIODO_FINAL
    ) V INTO :QUANTIDADE_FATURADA
    DO BEGIN
        SUSPEND;
    END
END