
INSERT INTO TBPARAMETRO (TABELA, CODIGO, DESCRICAO, VALOR, OBSERVACAO, GRUPO) VALUES ('TBUSUARIO', 'EXIBE_ANIMACAO_GC', 'EXIBIR ANIMACAO ESPECIAL DO GC', '1', '0 - NAO EXIBE ANIMACAO;
1 - EXIBE A ANIMACAO;', 'STYLE');

/*************************************************************************************/
/*************************************************************************************/

SET TERM ^ ;

CREATE OR ALTER procedure SPD_CONFERENCIA_ITEM (
    CONFERENCIA integer not null)
as
declare variable HISTORICO varchar(5000);
declare variable CONFERENCIA_ID integer;
declare variable TABELA_ITEM_ID bigint;
declare variable COUNT_DUPS integer;
declare variable MAX_ID integer;
declare variable PEDIDO integer;
declare variable ITEM_SEQ varchar(10);
declare variable CONF_GRUPO_ITEM_ID integer;
declare variable CONF_GRUPO_ITEM_CONJUNTO varchar(10);
BEGIN

    FOR
        SELECT
            Y.CONFERENCIA_ID,
            Y.TABELA_ITEM_ID,
            Y.COUNT_DUPS,
            Y.MAX_ID
        
        FROM (
            SELECT
                X.CONFERENCIA_ID,
                X.TABELA_ITEM_ID,
                X.COUNT_DUPS,
                X.MAX_ID
            
            FROM (
                SELECT
                    T.ID,
                    T.CONFERENCIA_ID,
                    T.PRODUTO_ID,
                    T.TAMANHO,
                    T.QTD_TOTAL,
                    T.QTD_CONFERIDA,
                    T.TABELA_ITEM_ID,
                    T.QTD_ALOCADA,
                    T.QTD_DISPONIVEL,
                    T.STATUS,
                    T.NF_ID,
                
                    COALESCE((SELECT COUNT(X.TABELA_ITEM_ID) FROM TBCONFERENCIA_ITEM X WHERE X.TABELA_ITEM_ID = T.TABELA_ITEM_ID AND X.CONFERENCIA_ID = A.ID), 0) AS COUNT_DUPS,
                    COALESCE((SELECT MAX(X.ID)               FROM TBCONFERENCIA_ITEM X WHERE X.TABELA_ITEM_ID = T.TABELA_ITEM_ID AND X.CONFERENCIA_ID = A.ID AND X.STATUS = '0'), 0) AS MAX_ID
                
                FROM TBCONFERENCIA_ITEM T
                INNER JOIN TBCONFERENCIA A ON A.ID = T.CONFERENCIA_ID
                WHERE T.ID > 0
                AND T.TABELA_ITEM_ID > 0
                AND T.STATUS = '0'
                AND A.STATUS IN (1, 2, 3)
        
                AND A.ID = :CONFERENCIA
            
            ) X
            WHERE X.COUNT_DUPS > 1
            
            ORDER BY X.TABELA_ITEM_ID
        
        ) Y
        
        GROUP BY
            Y.CONFERENCIA_ID,
            Y.TABELA_ITEM_ID,
            Y.COUNT_DUPS,
            Y.MAX_ID

    INTO
        :CONFERENCIA_ID,
        :TABELA_ITEM_ID,
        :COUNT_DUPS,
        :MAX_ID

    DO
    BEGIN

        :HISTORICO = '';

        IF (:MAX_ID > 0 AND :CONFERENCIA_ID > 0) THEN
        BEGIN
            /* Exclusao de Duplicata */
            DELETE FROM TBCONFERENCIA_ITEM T WHERE T.CONFERENCIA_ID = :CONFERENCIA_ID AND T.ID = :MAX_ID;

            /* Historico de Exclusao */
            SELECT FIRST 1
                P.PEDIDO,
                FN_LPAD(PI.SEQUENCIA, 3, '0') AS ITEM_SEQ

            FROM TBPEDIDO_ITEM PI
            INNER JOIN TBPEDIDO P ON P.PEDIDO = PI.PEDIDO
            WHERE PI.CONTROLE = :TABELA_ITEM_ID INTO :PEDIDO, :ITEM_SEQ;


            :HISTORICO = 'ITEM: '|| :ITEM_SEQ ||' EXCLUIDO NA CONFERENCIA: '|| FN_LPAD(:CONFERENCIA_ID, 6, '0') ||'DO PEDIDO: '|| :PEDIDO ||'. EXCLUSAO DE DUPLICATAS AUTOMATICA QTD.DUP: '|| :COUNT_DUPS ||'';

            EXECUTE PROCEDURE SPI_HISTORICO('TBCONFERENCIA_ITEM', :CONFERENCIA_ID, FN_ELIPSE(:HISTORICO, 500));
        END

    END

    /**************************************************************************/

    FOR
        SELECT
            Y.CONFERENCIA_ID,
            Y.TABELA_ITEM_ID,
            Y.ID AS MAX_ID

        FROM (
            SELECT
                A.TABELA,
                A.TABELA_ID,
    
                T.ID,
                T.CONFERENCIA_ID,
                T.PRODUTO_ID,
                T.TAMANHO,
                T.TABELA_ITEM_ID,

                COALESCE((SELECT FIRST 1 Z1.PEDIDO FROM TBPEDIDO_ITEM Z1 WHERE Z1.CONTROLE = T.TABELA_ITEM_ID), 0) AS PEDIDO,
                COALESCE((SELECT FIRST 1 Z2.ESTOQUE_DETALHE_ID FROM TBESTOQUE_DETALHE_ALOCACAO Z2 WHERE Z2.TAB_ITEM_ID = T.TABELA_ITEM_ID), 0) AS COMANDA,
                COALESCE((SELECT FIRST 1 Z3.PDV_CONFERENCIA_ID FROM TBPDV_CONFERENCIA_ITEM Z3 WHERE Z3.ID = T.TABELA_ITEM_ID), 0) AS PRE_PEDIDO
    
            FROM TBCONFERENCIA_ITEM T
            INNER JOIN TBCONFERENCIA A ON A.ID = T.CONFERENCIA_ID
            WHERE T.ID > 0
            AND T.TABELA_ITEM_ID > 0
            AND T.STATUS = '0'
            AND A.STATUS IN (1, 2, 3)
    
            AND A.ID = :CONFERENCIA
        ) Y
        WHERE Y.PEDIDO > 0
        AND IIF( Y.TABELA = 'PED', Y.PEDIDO <> Y.TABELA_ID,
            IIF( Y.TABELA = 'COM', Y.COMANDA <> Y.TABELA_ID,
            IIF( Y.TABELA = 'PRE', Y.PRE_PEDIDO <> Y.TABELA_ID, FALSE)))

    INTO
        :CONFERENCIA_ID,
        :TABELA_ITEM_ID,
        :MAX_ID

    DO
    BEGIN

        :HISTORICO = '';

        IF (:MAX_ID > 0 AND :CONFERENCIA_ID > 0) THEN
        BEGIN
            /* Exclusao registro incorreto */
            DELETE FROM TBCONFERENCIA_ITEM T WHERE T.CONFERENCIA_ID = :CONFERENCIA_ID AND T.ID = :MAX_ID;

            /* Historico de Exclusao */
            SELECT FIRST 1
                P.PEDIDO,
                FN_LPAD(PI.SEQUENCIA, 3, '0') AS ITEM_SEQ

            FROM TBPEDIDO_ITEM PI
            INNER JOIN TBPEDIDO P ON P.PEDIDO = PI.PEDIDO
            WHERE PI.CONTROLE = :TABELA_ITEM_ID INTO :PEDIDO, :ITEM_SEQ;


            :HISTORICO = 'ITEM: '|| :ITEM_SEQ ||' EXCLUIDO NA CONFERENCIA: '|| FN_LPAD(:CONFERENCIA_ID, 6, '0') ||'. ITEM PERTENCIA AO PEDIDO: '|| :PEDIDO ||'. EXCLUSAO DE REGISTROS INCORRETOS AUTOMATICA';

            EXECUTE PROCEDURE SPI_HISTORICO('TBCONFERENCIA_ITEM', :CONFERENCIA_ID, FN_ELIPSE(:HISTORICO, 500));
        END

    END

    /**************************************************************************/

    FOR
        SELECT
            XZ.ID,
            XZ.CONJUNTO,
            XZ.CONFERENCIA_ID
        
        FROM (
            SELECT
                IG.ID,
                IG.CONFERENCIA_ID,
                IG.CONJUNTO,
            
                IG.CONFERENCIA_ITEM_ID AS CONF_ITEM_REG_ID,
                T.ID AS CONF_ITEM_ENC_ID
            
            FROM TBCONFERENCIA_ITEM_GRUPO IG
            LEFT JOIN TBCONFERENCIA_ITEM T ON T.ID = IG.CONFERENCIA_ITEM_ID
            WHERE IG.CONFERENCIA_ID = :CONFERENCIA
        ) XZ
        WHERE XZ.CONF_ITEM_ENC_ID IS NULL

    INTO
        :CONF_GRUPO_ITEM_ID,
        :CONF_GRUPO_ITEM_CONJUNTO,
        :CONFERENCIA_ID

    DO
    BEGIN

        IF (:CONF_GRUPO_ITEM_ID > 0 AND :CONFERENCIA_ID > 0) THEN
        BEGIN

            /* Exclusao de grupos que nao contem itens validos */
            DELETE FROM TBCONFERENCIA_ITEM_GRUPO IG WHERE IG.CONFERENCIA_ID = :CONFERENCIA_ID AND IG.ID = :CONF_GRUPO_ITEM_ID AND IG.CONJUNTO = :CONF_GRUPO_ITEM_CONJUNTO;

        END

    END

END
^

SET TERM ; ^

