
CREATE OR ALTER trigger ttbestoque_transacao_regra_b01i for tbestoque_transacao_regra
active before insert or update position 1
AS
declare variable entrada integer;
declare variable saida integer;
begin

    IF( (NEW.tipo = 1) or (NEW.tipo = 2) or (NEW.tipo = 3) )then
    BEGIN
        saida   = coalesce((select first 1 o.transferencia from tboperacao o where o.codigo = new.operacao_estoque_saida),0);
        entrada = coalesce((select first 1 o.transferencia from tboperacao o where o.codigo = new.operacao_estoque_entrada),0);
    
        if(saida = 0)then
        begin
           exception "..." 'OPERACAO DE SAIDA NAO É DE TRANSFERENCIA';
        end
    
        if(entrada = 0)then
        begin
           exception "..." 'OPERACAO DE ENTRADA NAO É DE TRANSFERENCIA';
        end
    END

end;

CREATE OR ALTER procedure spc_conferencia_transacao (
    cod_barras varchar(100))
returns (
    estoque_id integer,
    produto_id integer,
    produto_descricao varchar(100),
    usuario_id integer,
    usuario_descricao varchar(100),
    datahora timestamp,
    localizacao_codigo integer,
    conferencia integer,
    estoque_transacao_regra_id integer,
    quantidade numeric(15,4),
    tamanho integer)
as
declare variable tipo_cod_barras integer;
declare variable id_codbarras varchar(20);
declare variable posicao integer;
declare variable tamanho_cod integer;
declare variable tipo integer;
declare variable lote_status integer;
BEGIN
    :TIPO_COD_BARRAS = 0;

    IF(POSITION('P'  IN :COD_BARRAS) > 0)THEN BEGIN :TIPO_COD_BARRAS = 1; POSICAO = 2; TIPO = 1; END
    IF(POSITION('RD' IN :COD_BARRAS) > 0)THEN BEGIN :TIPO_COD_BARRAS = 2; POSICAO = 3; TIPO = 1; END
    IF(POSITION('RA' IN :COD_BARRAS) > 0)THEN BEGIN :TIPO_COD_BARRAS = 3; POSICAO = 3; TIPO = 1; END
    IF(POSITION('KB' IN :COD_BARRAS) > 0)THEN BEGIN :TIPO_COD_BARRAS = 4; POSICAO = 3; TIPO = 2; END
    IF(POSITION('TR' IN :COD_BARRAS) > 0)THEN BEGIN :TIPO_COD_BARRAS = 5; POSICAO = 3; TIPO = 3; END

    :TAMANHO_COD  = CHAR_LENGTH(:COD_BARRAS);
    :ID_CODBARRAS = SUBSTRING(:COD_BARRAS FROM POSICAO FOR TAMANHO_COD);
    :ID_CODBARRAS = CAST(CAST(:ID_CODBARRAS AS INTEGER) AS VARCHAR(20));

    PRODUTO_ID                  = 0;
    USUARIO_ID                  = 0;
    DATAHORA                    = CURRENT_TIMESTAMP;
    LOCALIZACAO_CODIGO          = 0;
    CONFERENCIA                 = 0;
    ESTOQUE_TRANSACAO_REGRA_ID  = 0;
    QUANTIDADE                  = 0;
    TAMANHO                     = 0;
    PRODUTO_DESCRICAO           = '';
    USUARIO_DESCRICAO           = '';

    IF(:TIPO = 1)THEN
    BEGIN
      for
        SELECT
            i.controle,
            I.PRODUTO_CODIGO,
            P.DESCRICAO,
            I.OPERADOR,
            O.NOME,
            I.DATAHORA,
            I.LOCALIZACAO_CODIGO,
            I.CONFERENCIA,
            I.ESTOQUE_TRANSACAO_REGRA_ID,
            I.QUANTIDADE,
            IIF(I.T01 > 0,01,
            IIF(I.T02 > 0,02,
            IIF(I.T03 > 0,03,
            IIF(I.T04 > 0,04,
            IIF(I.T05 > 0,05,
            IIF(I.T06 > 0,06,
            IIF(I.T07 > 0,07,
            IIF(I.T08 > 0,08,
            IIF(I.T09 > 0,09,
            IIF(I.T10 > 0,10,
            IIF(I.T11 > 0,11,
            IIF(I.T12 > 0,12,
            IIF(I.T13 > 0,13,
            IIF(I.T14 > 0,14,
            IIF(I.T15 > 0,15,
            IIF(I.T16 > 0,16,
            IIF(I.T17 > 0,17,
            IIF(I.T18 > 0,18,
            IIF(I.T19 > 0,19,
            IIF(I.T20 > 0,20, 0)))))))))))))))))))) AS TAMANHO

        FROM TBESTOQUE_TRANSACAO_ITEM I, TBPRODUTO P, TBUSUARIO O
            WHERE I.TABELA = 'TBPEDIDO_ITEM_PROCESSADO'
            AND   I.TABELA_NIVEL = 2
            AND   I.DOCUMENTO    = :ID_CODBARRAS
            AND   I.REMESSA_ITEM_CONTROLE = :ID_CODBARRAS
            AND   I.ESTOQUE_TRANSACAO_REGRA_ID > 0
            AND   I.TIPO = 'E'
            AND   P.CODIGO = I.PRODUTO_CODIGO
            AND   O.CODIGO = I.USUARIO_CODIGO
        INTO
            :ESTOQUE_ID,
            :PRODUTO_ID,
            :PRODUTO_DESCRICAO,
            :USUARIO_ID,
            :USUARIO_DESCRICAO,
            :DATAHORA,
            :LOCALIZACAO_CODIGO,
            :CONFERENCIA,
            :ESTOQUE_TRANSACAO_REGRA_ID,
            :QUANTIDADE,
            :TAMANHO
        do
        begin
          SUSPEND;
        end

    END ELSE
    BEGIN
        IF(:TIPO = 2)THEN
        BEGIN
            for
                SELECT
                    i.controle,
                    I.PRODUTO_CODIGO,
                    P.DESCRICAO,
                    I.OPERADOR,
                    O.NOME,
                    I.DATAHORA,
                    I.LOCALIZACAO_CODIGO,
                    I.CONFERENCIA,
                    I.ESTOQUE_TRANSACAO_REGRA_ID,
                    I.QUANTIDADE,
                    IIF(I.T01 > 0,01,
                    IIF(I.T02 > 0,02,
                    IIF(I.T03 > 0,03,
                    IIF(I.T04 > 0,04,
                    IIF(I.T05 > 0,05,
                    IIF(I.T06 > 0,06,
                    IIF(I.T07 > 0,07,
                    IIF(I.T08 > 0,08,
                    IIF(I.T09 > 0,09,
                    IIF(I.T10 > 0,10,
                    IIF(I.T11 > 0,11,
                    IIF(I.T12 > 0,12,
                    IIF(I.T13 > 0,13,
                    IIF(I.T14 > 0,14,
                    IIF(I.T15 > 0,15,
                    IIF(I.T16 > 0,16,
                    IIF(I.T17 > 0,17,
                    IIF(I.T18 > 0,18,
                    IIF(I.T19 > 0,19,
                    IIF(I.T20 > 0,20, 0)))))))))))))))))))) AS TAMANHO
        
                FROM TBESTOQUE_TRANSACAO_ITEM I, TBPRODUTO P, TBUSUARIO O

                WHERE I.TIPO       = 'E'
                and i.tabela       = 'VWESTOQUE_MINIMO_TAMANHO'
                and i.tabela_nivel = 0
                and i.documento    = :ID_CODBARRAS
                and i.estoque_transacao_regra_id > 0
                AND P.CODIGO = I.PRODUTO_CODIGO
                AND O.CODIGO = I.USUARIO_CODIGO
            INTO
                :ESTOQUE_ID,
                :PRODUTO_ID,
                :PRODUTO_DESCRICAO,
                :USUARIO_ID,
                :USUARIO_DESCRICAO,
                :DATAHORA,
                :LOCALIZACAO_CODIGO,
                :CONFERENCIA,
                :ESTOQUE_TRANSACAO_REGRA_ID,
                :QUANTIDADE,
                :TAMANHO
            do
            begin
              LOTE_STATUS = coalesce((select first 1 D.status FROM tbkanban_lote D WHERE D.id = :ID_CODBARRAS),0);
              IF(LOTE_STATUS = 0)THEN
              BEGIN
                exception "..." 'LOTE NAO FOI FECHADO';
              END
              SUSPEND;
            end

        END ELSE
        BEGIN
           IF(:TIPO = 3)THEN
            BEGIN
                for
                    SELECT
                        i.controle,
                        I.PRODUTO_CODIGO,
                        P.DESCRICAO,
                        I.OPERADOR,
                        O.NOME,
                        I.DATAHORA,
                        I.LOCALIZACAO_CODIGO,
                        I.CONFERENCIA,
                        I.ESTOQUE_TRANSACAO_REGRA_ID,
                        I.QUANTIDADE,
                        IIF(I.T01 > 0,01,
                        IIF(I.T02 > 0,02,
                        IIF(I.T03 > 0,03,
                        IIF(I.T04 > 0,04,
                        IIF(I.T05 > 0,05,
                        IIF(I.T06 > 0,06,
                        IIF(I.T07 > 0,07,
                        IIF(I.T08 > 0,08,
                        IIF(I.T09 > 0,09,
                        IIF(I.T10 > 0,10,
                        IIF(I.T11 > 0,11,
                        IIF(I.T12 > 0,12,
                        IIF(I.T13 > 0,13,
                        IIF(I.T14 > 0,14,
                        IIF(I.T15 > 0,15,
                        IIF(I.T16 > 0,16,
                        IIF(I.T17 > 0,17,
                        IIF(I.T18 > 0,18,
                        IIF(I.T19 > 0,19,
                        IIF(I.T20 > 0,20, 0)))))))))))))))))))) AS TAMANHO
            
                    FROM TBESTOQUE_TRANSACAO_ITEM I, TBPRODUTO P, TBUSUARIO O
    
                    WHERE I.TIPO       = 'E'
                    and i.tabela       = 'VWESTOQUE_MINIMO_TAMANHO'
                    and i.tabela_nivel = 0
                    and i.documento    = :ID_CODBARRAS
                    and i.estoque_transacao_regra_id > 0
                    AND P.CODIGO = I.PRODUTO_CODIGO
                    AND O.CODIGO = I.USUARIO_CODIGO
                INTO
                    :ESTOQUE_ID,
                    :PRODUTO_ID,
                    :PRODUTO_DESCRICAO,
                    :USUARIO_ID,
                    :USUARIO_DESCRICAO,
                    :DATAHORA,
                    :LOCALIZACAO_CODIGO,
                    :CONFERENCIA,
                    :ESTOQUE_TRANSACAO_REGRA_ID,
                    :QUANTIDADE,
                    :TAMANHO
                do
                begin
                  LOTE_STATUS = coalesce((select first 1 D.status FROM tbkanban_lote D WHERE D.id = :ID_CODBARRAS),0);
                  IF(LOTE_STATUS = 0)THEN
                  BEGIN
                    exception "..." 'LOTE NAO FOI FECHADO';
                  END
                  SUSPEND;
                end
    
            END
        END
    END


END;

ALTER TABLE TBESTOQUE_TRANSACAO_ITEM
    ADD PECA_ID varchar(20);

COMMENT ON COLUMN TBESTOQUE_TRANSACAO_ITEM.PECA_ID IS
'ID DA PECA QUE DEU ORIGEM A TRANSACAO';

CREATE INDEX ITBESTOQUE_TRANSACAO_ITEM_23
ON TBESTOQUE_TRANSACAO_ITEM (PECA_ID);

ALTER TABLE TBESTOQUE_TRANSACAO_ITEM ALTER COLUMN PECA_ID
SET DEFAULT '0';

CREATE OR ALTER VIEW VWCONFERENCIA_PENDENTE(
    TIPO,
    DOCUMENTO,
    REMESSA_ITEM_CONTROLE,
    CONTROLE,
    PRODUTO_CODIGO,
    DESCRICAO,
    LOCALIZACAO_CODIGO,
    LOCALIZACAO,
    CONFERENCIA,
    QUANTIDADE,
    TAMANHO,
    PECA_ID)
AS
select
    TIPO,
    DOCUMENTO,
    REMESSA_ITEM_CONTROLE,
    list(CONTROLE) as CONTROLE,
    PRODUTO_CODIGO,
    DESCRICAO,
    LOCALIZACAO_CODIGO,
    (select first 1 l.descricao from tblocalizacao l where l.codigo = a.LOCALIZACAO_CODIGO) as LOCALIZACAO,
    CONFERENCIA,
    sum(QUANTIDADE) as QUANTIDADE,
    fn_tamanho_produto(a.PRODUTO_CODIGO,A.TAMANHO) as TAMANHO,
    PECA_ID
from
(
    SELECT
        'KANBAN' TIPO,
        i.documento,
        I.peca_id,
        i.remessa_item_controle,
        i.controle,
        I.PRODUTO_CODIGO,
        P.DESCRICAO,
        I.OPERADOR,
        O.NOME,
        I.DATAHORA,
        I.LOCALIZACAO_CODIGO,
        I.CONFERENCIA,
        I.ESTOQUE_TRANSACAO_REGRA_ID,
        I.QUANTIDADE,
        IIF(I.T01 > 0,01,
        IIF(I.T02 > 0,02,
        IIF(I.T03 > 0,03,
        IIF(I.T04 > 0,04,
        IIF(I.T05 > 0,05,
        IIF(I.T06 > 0,06,
        IIF(I.T07 > 0,07,
        IIF(I.T08 > 0,08,
        IIF(I.T09 > 0,09,
        IIF(I.T10 > 0,10,
        IIF(I.T11 > 0,11,
        IIF(I.T12 > 0,12,
        IIF(I.T13 > 0,13,
        IIF(I.T14 > 0,14,
        IIF(I.T15 > 0,15,
        IIF(I.T16 > 0,16,
        IIF(I.T17 > 0,17,
        IIF(I.T18 > 0,18,
        IIF(I.T19 > 0,19,
        IIF(I.T20 > 0,20, 0)))))))))))))))))))) AS TAMANHO
    
        FROM TBESTOQUE_TRANSACAO_ITEM I, TBPRODUTO P, TBUSUARIO O
    
        WHERE I.TIPO       = 'E'
        and i.tabela       = 'TBKANBAN_LOTE_DETALHE'
        and i.tabela_nivel = 0
        and i.estoque_transacao_regra_id > 0
        AND P.CODIGO = I.PRODUTO_CODIGO
        AND O.CODIGO = I.USUARIO_CODIGO
        and i.conferencia = 1
    
        union
    
    SELECT
        'CONFERÊNCIA DE PRODUÇÃO' TIPO,
        i.documento,
        I.peca_id,
        i.remessa_item_controle,
        i.controle,
        I.PRODUTO_CODIGO,
        P.DESCRICAO,
        I.OPERADOR,
        O.NOME,
        I.DATAHORA,
        I.LOCALIZACAO_CODIGO,
        I.CONFERENCIA,
        I.ESTOQUE_TRANSACAO_REGRA_ID,
        I.QUANTIDADE,
        IIF(I.T01 > 0,01,
        IIF(I.T02 > 0,02,
        IIF(I.T03 > 0,03,
        IIF(I.T04 > 0,04,
        IIF(I.T05 > 0,05,
        IIF(I.T06 > 0,06,
        IIF(I.T07 > 0,07,
        IIF(I.T08 > 0,08,
        IIF(I.T09 > 0,09,
        IIF(I.T10 > 0,10,
        IIF(I.T11 > 0,11,
        IIF(I.T12 > 0,12,
        IIF(I.T13 > 0,13,
        IIF(I.T14 > 0,14,
        IIF(I.T15 > 0,15,
        IIF(I.T16 > 0,16,
        IIF(I.T17 > 0,17,
        IIF(I.T18 > 0,18,
        IIF(I.T19 > 0,19,
        IIF(I.T20 > 0,20, 0)))))))))))))))))))) AS TAMANHO
    FROM TBESTOQUE_TRANSACAO_ITEM I
    LEFT JOIN VWREMESSA_TALAO_DETALHE D ON D.ID = I.TABELA_ID
    LEFT JOIN VWREMESSA_TALAO T ON T.REMESSA_ID = D.REMESSA_ID AND T.REMESSA_TALAO_ID = D.REMESSA_TALAO_ID,
         TBPRODUTO P,
         TBUSUARIO O
    WHERE I.TABELA = 'TBPEDIDO_ITEM_PROCESSADO'
     AND I.TABELA_NIVEL = 1
     AND I.ESTOQUE_TRANSACAO_REGRA_ID > 0
     AND I.TIPO = 'E'
     AND P.CODIGO = I.PRODUTO_CODIGO
     AND O.CODIGO = I.USUARIO_CODIGO
     and i.conferencia = 1
    
     union
    
     SELECT
        'CONFERÊNCIA DE ABASTECIMENTO WIP' TIPO,
        i.documento,
        I.peca_id,
        i.remessa_item_controle,
        i.controle,
        I.PRODUTO_CODIGO,
        P.DESCRICAO,
        I.OPERADOR,
        O.NOME,
        I.DATAHORA,
        I.LOCALIZACAO_CODIGO,
        I.CONFERENCIA,
        I.ESTOQUE_TRANSACAO_REGRA_ID,
        I.QUANTIDADE,
        IIF(I.T01 > 0,01,
        IIF(I.T02 > 0,02,
        IIF(I.T03 > 0,03,
        IIF(I.T04 > 0,04,
        IIF(I.T05 > 0,05,
        IIF(I.T06 > 0,06,
        IIF(I.T07 > 0,07,
        IIF(I.T08 > 0,08,
        IIF(I.T09 > 0,09,
        IIF(I.T10 > 0,10,
        IIF(I.T11 > 0,11,
        IIF(I.T12 > 0,12,
        IIF(I.T13 > 0,13,
        IIF(I.T14 > 0,14,
        IIF(I.T15 > 0,15,
        IIF(I.T16 > 0,16,
        IIF(I.T17 > 0,17,
        IIF(I.T18 > 0,18,
        IIF(I.T19 > 0,19,
        IIF(I.T20 > 0,20, 0)))))))))))))))))))) AS TAMANHO
    
    FROM
        TBESTOQUE_TRANSACAO_ITEM I,
        TBPRODUTO P,
        TBUSUARIO O
    
    WHERE
        I.TABELA = 'TBREMESSA_CONSUMO'
    AND I.TABELA_NIVEL = 4
    AND I.TIPO = 'E'
    AND I.ESTOQUE_TRANSACAO_REGRA_ID > 0
    AND O.CODIGO = I.USUARIO_CODIGO
    AND P.CODIGO = I.PRODUTO_CODIGO
    and i.conferencia = 1
    
    union
    
    SELECT
        'CONFERÊNCIA DE TRANSACAO DE REMESSAS' TIPO,
        i.documento,
        I.peca_id,
        i.remessa_item_controle,
        i.controle,
        I.PRODUTO_CODIGO,
        P.DESCRICAO,
        I.OPERADOR,
        O.NOME,
        I.DATAHORA,
        I.LOCALIZACAO_CODIGO,
        I.CONFERENCIA,
        I.ESTOQUE_TRANSACAO_REGRA_ID,
        I.QUANTIDADE,
        IIF(I.T01 > 0,01,
        IIF(I.T02 > 0,02,
        IIF(I.T03 > 0,03,
        IIF(I.T04 > 0,04,
        IIF(I.T05 > 0,05,
        IIF(I.T06 > 0,06,
        IIF(I.T07 > 0,07,
        IIF(I.T08 > 0,08,
        IIF(I.T09 > 0,09,
        IIF(I.T10 > 0,10,
        IIF(I.T11 > 0,11,
        IIF(I.T12 > 0,12,
        IIF(I.T13 > 0,13,
        IIF(I.T14 > 0,14,
        IIF(I.T15 > 0,15,
        IIF(I.T16 > 0,16,
        IIF(I.T17 > 0,17,
        IIF(I.T18 > 0,18,
        IIF(I.T19 > 0,19,
        IIF(I.T20 > 0,20, 0)))))))))))))))))))) AS TAMANHO
    
    FROM
        TBESTOQUE_TRANSACAO_ITEM I
        LEFT JOIN VWREMESSA_CONSUMO C ON C.ID = I.TABELA_ID,
        TBPRODUTO P,
        TBUSUARIO O
    
    WHERE
        I.TABELA = 'TBREMESSA_CONSUMO'
    AND I.TABELA_NIVEL = 0
    AND I.TIPO = 'E'
    AND O.CODIGO = I.USUARIO_CODIGO
    AND P.CODIGO = I.PRODUTO_CODIGO
    and i.conferencia = 1
) A

group by
    TIPO,
    DOCUMENTO,
    REMESSA_ITEM_CONTROLE,
    PRODUTO_CODIGO,
    DESCRICAO,
    LOCALIZACAO_CODIGO,
    CONFERENCIA,
    TAMANHO,
    PECA_ID
;




