ALTER TABLE TBPROGRAMACAO
    ADD STATUS_SOLICITACAO INTEGER;

ALTER TABLE TBPROGRAMACAO
    ADD DATA_SOLICITACAO TIMESTAMP,
    ADD OPERADOR_SOLICITACAO INTEGER;


SET TERM ^ ;

CREATE OR ALTER procedure SPC_FERRAMENTA_PAINEL
returns (
    PRODUTO_ID integer,
    QUANTIDADE numeric(18,4),
    TAMANHO varchar(50),
    MODELO_ID integer,
    COR integer,
    REMESSA varchar(15),
    TALAO integer,
    MODELOS varchar(300),
    REQUISICAO varchar(10),
    PROGRAMACAO_ID integer,
    TALAO_ID integer,
    GP_ID integer,
    GP_DESCRICAO varchar(100),
    UP_ID integer,
    UP_DESCRICAO varchar(100),
    ESTACAO integer,
    ESTACAO_DESCRICAO varchar(100),
    ESTACAO_STATUS varchar(10),
    ESTACAO_STATUS_DESCRICAO varchar(500),
    FERRAMENTA_ID varchar(50),
    FERRAMENTA_DESCRICAO varchar(100),
    FERRAMENTA_SERIE varchar(20),
    FERRAMENTA_BARRAS varchar(100),
    FERRAMENTA_SITUACAO_TALAO varchar(10),
    FERRAMENTA_SITUACAO varchar(10),
    FERRAMENTA_STATUS varchar(10),
    FERRAMENTA_ENDERECAMENTO varchar(50),
    FERRAMENTA_ITEM_DETALHE_COD varchar(50),
    NAVALHA_ID integer,
    NAVALHA_BARRAS varchar(100),
    DATAHORA_INICIO timestamp,
    CODE varchar(600),
    TEMPO integer,
    ORDEM_STATUS integer,
    DATA_SOLICITACAO timestamp)
as
declare variable DESCANSO_DATAHORA timestamp;
declare variable DESCANSO_DATAHORA_EXPIRACAO timestamp;
BEGIN

    FERRAMENTA_ID = 0;

    FOR
        SELECT
            *
        FROM(
            SELECT
                produto_id,
                quantidade,
                fn_tamanho_produto(produto_id,tamanho) as TAMANHO,
                modelo_id,
                coalesce((select first 1
                        c.codigo
                    from tbproduto j, tbcor c
                    where j.codigo = produto_id
                    and c.codigo = j.cor_codigo
                ),'') as COR,
                remessa,
                TALAO,
    
                coalesce((select
                        ''
                        --||''||j.codigo
                        --||''||j.descricao
                        ||''||n.codigo
                        ||' - '||n.descricao
                        --||''||c.codigo
                        ||' ('||c.descricao||')'
                    from tbproduto j, tbmodelo n, tbcor c
                    where j.codigo = produto_id
                    and n.codigo = j.modelo_codigo
                    and c.codigo = j.cor_codigo
                ),'') as MODELOS,
    
                CODE,   
                REQUISICAO,
                PROGRAMACAO_ID,
                TALAO_ID,
                DATAHORA_INICIO,
                GP_ID,
                GP_DESCRICAO,
                UP_ID,
                UP_DESCRICAO,
                ESTACAO,
                ESTACAO_DESCRICAO,
                ESTACAO_STATUS,
                (SELECT FIRST 1 J.DESCRICAO FROM TBJUSTIFICATIVA J WHERE J.ID = ESTACAO_STATUS)ESTACAO_STATUS_DESCRICAO,
                FERRAMENTA_ID,
                FERRAMENTA_DESCRICAO,
                FERRAMENTA_SERIE,
                FERRAMENTA_BARRAS,
                FERRAMENTA_SITUACAO,
                FERRAMENTA_SITUACAO_TALAO,
                FERRAMENTA_STATUS,
                FERRAMENTA_ENDERECAMENTO,
                FERRAMENTA_ITEM_DETALHE_COD,
                NAVALHA_ID,
                FERRAMENTA_ITEM_DETALHE_COD NAVALHA_BARRAS,
                TEMPO,
                ORDEM_STATUS,
                DATA_SOLICITACAO
            
            FROM (
                SELECT FIRST 200
                    p.produto_id,
                    p.quantidade,
                    p.tamanho,
                    t.modelo_id,
                    coalesce((select first 1 r.remessa from tbremessa r where r.numero = p.remessa_id and r.estabelecimento_codigo = p.estabelecimento_id),'') as REMESSA,
                    coalesce((select first 1 s.remessa_talao_id from vwremessa_talao s where s.id = p.tabela_id),0) as TALAO,
    
                    (P.GP_ID || '-' || P.UP_ID || '-' || P.ESTACAO || '-' || P.FERRAMENTA_ID || '-' || DATAHORA_INICIO || '-' || R.REQUISICAO || '-' || COALESCE(ENDERECAMENTO,'') || '-' || COALESCE(P.FERRAMENTA_ITEM_DETALHE_ID,0) ) CODE,
                    IIF(P.STATUS_REQUISICAO = 1 AND P.STATUS <> 1,'1','0') REQUISICAO,
                    P.ID PROGRAMACAO_ID,
                    T.ID TALAO_ID,
                    P.DATAHORA_INICIO,
                    P.GP_ID,
                    G.DESCRICAO GP_DESCRICAO,
                    P.UP_ID, 
                    U.DESCRICAO UP_DESCRICAO,
                    P.ESTACAO,
                    SU.DESCRICAO ESTACAO_DESCRICAO,
                    COALESCE((SELECT FIRST 1 S.STATUS
                                FROM TBREGISTRO_PARADA S
                               WHERE S.TABELA_ID     = P.ESTACAO
                                 AND S.TABELA        = 'ESTACAO'
                                 AND S.VINCULO_ID    = P.GP_ID
                                 AND S.SUBVINCULO_ID = P.UP_ID
                               ORDER BY S.ID DESC),0) ESTACAO_STATUS,
                
                    LPAD(P.FERRAMENTA_ID,4,'0') FERRAMENTA_ID,
                    F.DESCRICAO FERRAMENTA_DESCRICAO,
                    LPAD(F.SERIE,4,'0') FERRAMENTA_SERIE,
                    F.CODBARRAS FERRAMENTA_BARRAS,
                    COALESCE(F.SITUACAO,'E') FERRAMENTA_SITUACAO,
                    IIF(F.ID = P.FERRAMENTA_ID AND F.TALAO_ID = T.ID,F.SITUACAO,'E') FERRAMENTA_SITUACAO_TALAO,
                    F.STATUS FERRAMENTA_STATUS,
                    F.ENDERECAMENTO FERRAMENTA_ENDERECAMENTO,
                    P.FERRAMENTA_ITEM_DETALHE_ID NAVALHA_ID,
                    (SELECT FIRST 1 D.CODBARRAS
                       FROM TBFERRAMENTARIA_ITEM_DETALHE D
                      WHERE D.ID = P.FERRAMENTA_ITEM_DETALHE_ID) FERRAMENTA_ITEM_DETALHE_COD,
                    0 TEMPO,
                    coalesce(p.STATUS_SOLICITACAO,0) as ORDEM_STATUS,
                    IIF(coalesce(p.STATUS_SOLICITACAO,0) > 0, coalesce(p.DATA_SOLICITACAO,P.DATAHORA_INICIO), P.DATAHORA_INICIO) as DATA_SOLICITACAO
                FROM
                    TBPROGRAMACAO P,
                    TBFERRAMENTARIA F,
                    TBGP G,
                    TBUP U,
                    TBSUB_UP SU,
                    VWREMESSA_TALAO T,
                    VWREMESSA R
                
                WHERE
                    P.FERRAMENTA_ID          > 1
                AND P.TEMPO_SETUP_FERRAMENTA > 0
                AND P.STATUS                 < 2  
                AND P.TIPO                   = 'A'
                AND F.ID                     = P.FERRAMENTA_ID
                AND G.ID                     = P.GP_ID
                AND U.ID                     = P.UP_ID
                AND SU.UP_ID                 = P.UP_ID
                AND SU.ID                    = P.ESTACAO
                AND T.ID                     = P.TABELA_ID
                AND R.REMESSA_ID             = T.REMESSA_ID
                --AND R.DATA_DISPONIBILIDADE  <= CAST(DATEADD(1 HOUR TO CURRENT_TIMESTAMP) AS DATE)
                AND (IIF(F.ID = P.FERRAMENTA_ID AND F.TALAO_ID = T.ID,F.SITUACAO,'E') IN ('E','R') OR F.TALAO_ID <> T.ID)
                --NAO MOSTRAR TALOES PARADOS AGUARDANDO REQUISICAO
                AND NOT (P.STATUS = 1 AND P.STATUS_REQUISICAO = 1)
                --AND P.DATAHORA_INICIO <= DATEADD(3 HOUR TO CURRENT_TIMESTAMP)
                AND P.DATAHORA_INICIO <= DATEADD(7 day TO CURRENT_TIMESTAMP)
                --AND G.ID NOT IN (244)
                
                ORDER BY
                    DATAHORA_INICIO,
                    GP_DESCRICAO,
                    UP_DESCRICAO,
                    ESTACAO_DESCRICAO
            ) X

        ) Y
            ORDER BY
                ORDEM_STATUS descending,
                DATA_SOLICITACAO,
                DATAHORA_INICIO,
                GP_DESCRICAO,
                UP_DESCRICAO,
                ESTACAO_DESCRICAO

    INTO
        PRODUTO_ID,
        QUANTIDADE,
        TAMANHO,
        MODELO_ID,
        COR,
        REMESSA,
        TALAO,
        MODELOS,
        CODE,
        REQUISICAO,
        PROGRAMACAO_ID,
        TALAO_ID,
        DATAHORA_INICIO,
        GP_ID,
        GP_DESCRICAO,
        UP_ID,
        UP_DESCRICAO,
        ESTACAO,
        ESTACAO_DESCRICAO,
        ESTACAO_STATUS,
        ESTACAO_STATUS_DESCRICAO,
        FERRAMENTA_ID,
        FERRAMENTA_DESCRICAO,
        FERRAMENTA_SERIE,
        FERRAMENTA_BARRAS,
        FERRAMENTA_SITUACAO,
        FERRAMENTA_SITUACAO_TALAO,
        FERRAMENTA_STATUS,
        FERRAMENTA_ENDERECAMENTO,
        FERRAMENTA_ITEM_DETALHE_COD,
        NAVALHA_ID,
        NAVALHA_BARRAS,
        TEMPO,
        ORDEM_STATUS,
        DATA_SOLICITACAO

    DO BEGIN

        if(ORDEM_STATUS > 0)then
        begin
            ESTACAO_STATUS_DESCRICAO = 'SOLICITADO EM '||formatdatetime(DATA_SOLICITACAO);
        end


        SUSPEND;
    END
END
^

SET TERM ; ^

