ALTER TABLE TBPDV_CONFERENCIA_ITEM
    ADD QUANTIDADE_AUXILIAR NUMERIC(15,2) DEFAULT 0 NOT NULL;

COMMENT ON COLUMN TBPDV_CONFERENCIA_ITEM.QUANTIDADE_AUXILIAR IS
'QUANTIDADE BASE NO RELATORIO DA 19160';

SET TERM ^ ;

CREATE OR ALTER trigger ttbpdv_conferencia_item_b01i for tbpdv_conferencia_item
active before insert position 0
AS
DECLARE VARIABLE NUMERO_CFE VARCHAR(20);
BEGIN
 
  NUMERO_CFE = COALESCE((SELECT FIRST 1 FN_LPAD(C.NUMERO_CFE,6,0) AS NUMERO_CFE FROM TBPDV_CFE_ITEM CI, TBPDV_CFE C, TBPDV_CONFERENCIA CONF
                WHERE C.ID = CI.PDV_CFE_ID AND CI.CONFERENCIA_ID = NEW.PDV_CONFERENCIA_ID AND CONF.ID = CI.CONFERENCIA_ID AND C.SITUACAO = 2),'');

  IF(:NUMERO_CFE <> '')THEN
  BEGIN
    EXCEPTION "..." 'PRE-PEDIDO JA FATURADO.<BR> OPERACAO CANCELADA.';
  END

  IF(NEW.ID IS NULL) THEN
  BEGIN
    NEW.ID = GEN_ID(GTBPDV_CONFERENCIA_ITEM,1);
  END

  IF(NEW.QUANTIDADE_ORIGINAL IS NULL) THEN
  BEGIN
    NEW.QUANTIDADE_ORIGINAL = NEW.QUANTIDADE;
  END

  IF(COALESCE(NEW.QUANTIDADE_AUXILIAR, 0) = 0) THEN
  BEGIN
    NEW.QUANTIDADE_AUXILIAR = NEW.QUANTIDADE;
  END

  IF(COALESCE(NEW.VALOR_ORIGINAL,0) = 0) THEN
  BEGIN
    NEW.VALOR_ORIGINAL      = NEW.VALOR_UNITARIO;
  END

END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbpdv_conferencia_item_b10u for tbpdv_conferencia_item
active before update or delete position 10
AS
DECLARE VARIABLE TIPO INTEGER;
DECLARE VARIABLE PERMISSAO_USUARIO INTEGER;
DECLARE VARIABLE CHECK_TROCA INTEGER;
DECLARE VARIABLE CHECK_MOVIMENTACAO INTEGER;
BEGIN

    IF(UPDATING) THEN
    BEGIN
        


        IF(OLD.QUANTIDADE <> NEW.QUANTIDADE AND NEW.EM_DEVOLUCAO = 0 AND NEW.SITUACAO <> 4) THEN
        BEGIN

            NEW.QUANTIDADE_AUXILIAR = NEW.QUANTIDADE;

            :CHECK_MOVIMENTACAO = COALESCE((SELECT FIRST 1 T.ID FROM TBPDV_CONFERENCIA_MOVIMENTACAO T WHERE T.ID = NEW.PDV_CONFERENCIA_MOVIMENTACAO_ID AND T.SITUACAO = 2), 0);

            IF(:CHECK_MOVIMENTACAO > 0) THEN
            BEGIN

                FOR SELECT FIRST 1
                    T.TIPO
                FROM TBPDV_CONFERENCIA T
                WHERE T.ID = NEW.PDV_CONFERENCIA_ID
                INTO :TIPO
                DO BEGIN
                    IF(:TIPO = 2) THEN
                    BEGIN
                        :PERMISSAO_USUARIO = CAST(FN_PARAMETRO('TBUSUARIO.EXCLUIR_ITEM_POR_MOVIMENTACAO', FN_CURRENT_USER_ID()) AS INTEGER);
        
                        IF(:PERMISSAO_USUARIO = 0) THEN
                        BEGIN
                           EXCEPTION "..."'USUARIO NAO POSSUI PERMISSAO PARA EXCLUIR ITENS DA MOVIMENTACAO '||FN_LPAD(:CHECK_MOVIMENTACAO, 4, '0');
                        END
        
                    END
        
                END
           END

        END

        NEW.EM_DEVOLUCAO = 0;
    END

    IF(DELETING) THEN
    BEGIN

        :CHECK_MOVIMENTACAO = COALESCE((SELECT FIRST 1 T.ID FROM TBPDV_CONFERENCIA_MOVIMENTACAO T WHERE T.ID = OLD.PDV_CONFERENCIA_MOVIMENTACAO_ID AND T.SITUACAO = 2), 0);

        IF(:CHECK_MOVIMENTACAO > 0) THEN
        BEGIN
            FOR SELECT FIRST 1
                T.TIPO
            FROM TBPDV_CONFERENCIA T
            WHERE T.ID = OLD.PDV_CONFERENCIA_ID
            INTO :TIPO
            DO BEGIN
                IF(:TIPO = 2) THEN
                BEGIN
                    :PERMISSAO_USUARIO = CAST(FN_PARAMETRO('TBUSUARIO.EXCLUIR_ITEM_POR_MOVIMENTACAO', FN_CURRENT_USER_ID()) AS INTEGER);
    
                    IF(:PERMISSAO_USUARIO = 0) THEN
                    BEGIN
                       EXCEPTION "..."'USUARIO NAO POSSUI PERMISSAO PARA EXCLUIR ITENS DA MOVIMENTACAO '||FN_LPAD(:CHECK_MOVIMENTACAO, 4, '0');
                    END
    
                END
    
            END
        END
    END

END
^

SET TERM ; ^

