CREATE OR ALTER TRIGGER TTBPROGRAMACAO_B7U FOR TBPROGRAMACAO
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE REMESSA INTEGER;
DECLARE VARIABLE DATA DATE;
DECLARE VARIABLE TIPO VARCHAR(1);
DECLARE VARIABLE REMESSAS_EM_PRODUCAO INTEGER;
DECLARE VARIABLE REMESSAS_GERADAS INTEGER;
DECLARE VARIABLE EM_PRODUCAO INTEGER;
DECLARE VARIABLE REMESSAS_NUMERO INTEGER;
DECLARE VARIABLE REQUISICOES_DISPONIVEIS INTEGER;
DECLARE VARIABLE E_REQUISICAO INTEGER;
DECLARE VARIABLE REC_DISPONIVEL INTEGER;
BEGIN

    REMESSAS_NUMERO = 2;

    IF(NEW.STATUS = 2 AND NEW.FERRAMENTA_ID > 0 AND NEW.TIPO = 'A')THEN
    BEGIN
        FOR
            SELECT R1.NUMERO AS REMESSA, R1.DATA, R1.TIPO,
        
            COALESCE((SELECT COUNT(DISTINCT(P.REMESSA_ID))
              FROM TBPROGRAMACAO P
              WHERE TRUE
                AND P.STATUS = 2
                AND P.GP_ID = P.GP_ID
                AND P.TIPO = 'A'
                AND P.FERRAMENTA_ID > 0
            ),0) REMESSAS_EM_PRODUCAO,
            
            COALESCE((SELECT COUNT(DISTINCT(P.REMESSA_ID))
              FROM TBPROGRAMACAO P
              WHERE TRUE
                AND P.STATUS < 3
                AND P.GP_ID = P.GP_ID
                AND P.TIPO = 'A'
                AND P.FERRAMENTA_ID > 0
            ),0) REMESSAS_GERADAS,
        
            COALESCE((SELECT COUNT(DISTINCT(P.REMESSA_ID))
              FROM TBPROGRAMACAO P
              WHERE TRUE
                AND P.STATUS = 2
                AND P.GP_ID = P.GP_ID
                AND P.TIPO = 'A'
                AND P.FERRAMENTA_ID > 0
                AND P.REMESSA_ID = NEW.REMESSA_ID
            ),0) EM_PRODUCAO,


            COALESCE((SELECT COUNT(DISTINCT(P.REMESSA_ID))
              FROM TBPROGRAMACAO P
              WHERE TRUE
                AND P.STATUS < 3
                AND P.GP_ID = P.GP_ID
                AND P.TIPO = 'A'
                AND P.FERRAMENTA_ID > 0
                AND P.STATUS_REQUISICAO = 1
                AND COALESCE((SELECT
                        COALESCE((SELECT V.SITUACAO
                           FROM
                                TBREMESSA_ITEM_PROCESSADO V,
                                TBREMESSA I
                            WHERE 1=1
                                AND V.REMESSA    = J.REMESSA_GERADA
                                AND V.CONTROLE   = J.TALAO
                                AND I.NUMERO     = J.REMESSA_GERADA
                        ),0)
                    
                    FROM TBREQUISICAO J
                    
                    WHERE TRUE
                        
                    AND J.ID = P.REQUISICAO_ID),0) = 3
        
            ),0) REQUISICOES_DISPONIVEIS,

            NEW.STATUS_REQUISICAO AS E_REQUISICAO,

            IIF(COALESCE((SELECT
                COALESCE((SELECT V.SITUACAO
                   FROM
                        TBREMESSA_ITEM_PROCESSADO V,
                        TBREMESSA I
                    WHERE 1=1
                        AND V.REMESSA    = J.REMESSA_GERADA
                        AND V.CONTROLE   = J.TALAO
                        AND I.NUMERO     = J.REMESSA_GERADA
                ),0)
            
            FROM TBREQUISICAO J
            
            WHERE TRUE
                
            AND J.ID = NEW.REQUISICAO_ID),0) = 3,1,0) AS REC_DISPONIVEL
        
        FROM TBREMESSA R1
        WHERE R1.NUMERO = NEW.REMESSA_ID
        AND R1.TIPO = '1'
    
        INTO
            :REMESSA,
            :DATA,
            :TIPO,
            :REMESSAS_EM_PRODUCAO,
            :REMESSAS_GERADAS,
            :EM_PRODUCAO,
            :REQUISICOES_DISPONIVEIS,
            :E_REQUISICAO,
            :REC_DISPONIVEL
        DO
        BEGIN

              IF(:REQUISICOES_DISPONIVEIS > 0)THEN
              BEGIN

                  IF ((:E_REQUISICAO = 0) AND ((:REMESSAS_EM_PRODUCAO + :REQUISICOES_DISPONIVEIS) >= REMESSAS_NUMERO)) THEN
                  BEGIN
                      IF (:REMESSAS_EM_PRODUCAO >= REMESSAS_NUMERO) THEN
                      BEGIN
                        EXCEPTION "..." 'ATENCAO, EXISTEM '||COALESCE(:REQUISICOES_DISPONIVEIS,0)||' REQUISICOES DISPONIVEIS PARA PRODUCAO, PRODUZA ELAS PRIMEIRO, EM CASO DE DUVIDA PROCURAR O PCP';
                      END
                  END

                  --SE FOR REQUISICAO VAI ABRIR MAIS Q O PERMITIDO

              END ELSE
              BEGIN
                  IF (:TIPO = '1' AND :EM_PRODUCAO = 0) THEN
                  BEGIN
                      IF (:REMESSAS_EM_PRODUCAO >= REMESSAS_NUMERO) THEN
                      BEGIN
                        EXCEPTION "..." 'ATENCAO, JA EXISTEM '||COALESCE(:REMESSAS_EM_PRODUCAO,0)||' REMESSAS EM PRODUCAO, O PERMITIDO E:'||REMESSAS_NUMERO||', EM CASO DE DUVIDA PROCURAR O PCP';
                      END
                  END
              END
        END
    END
END;
