CREATE OR ALTER PROCEDURE SPU_ESTOQUE_ROMANEIO (
    ROMANEIO_ID INTEGER)
AS
DECLARE VARIABLE PECA_ID               INTEGER;
DECLARE VARIABLE ITEM_ROMANEIO_ID      INTEGER;
DECLARE VARIABLE ESTABELECIMENTO       INTEGER;
DECLARE VARIABLE LOCALIZACAO           INTEGER;
DECLARE VARIABLE PRODUTO               INTEGER;
DECLARE VARIABLE TIPO                  CHAR(1);
DECLARE VARIABLE DATA                  DATE;
DECLARE VARIABLE QUANTIDADE            NUMERIC(10,5);
DECLARE VARIABLE T01                   NUMERIC(10,5);
DECLARE VARIABLE T02                   NUMERIC(10,5);
DECLARE VARIABLE T03                   NUMERIC(10,5);
DECLARE VARIABLE T04                   NUMERIC(10,5);
DECLARE VARIABLE T05                   NUMERIC(10,5);
DECLARE VARIABLE T06                   NUMERIC(10,5);
DECLARE VARIABLE T07                   NUMERIC(10,5);
DECLARE VARIABLE T08                   NUMERIC(10,5);
DECLARE VARIABLE T09                   NUMERIC(10,5);
DECLARE VARIABLE T10                   NUMERIC(10,5);
DECLARE VARIABLE T11                   NUMERIC(10,5);
DECLARE VARIABLE T12                   NUMERIC(10,5);
DECLARE VARIABLE T13                   NUMERIC(10,5);
DECLARE VARIABLE T14                   NUMERIC(10,5);
DECLARE VARIABLE T15                   NUMERIC(10,5);
DECLARE VARIABLE T16                   NUMERIC(10,5);
DECLARE VARIABLE T17                   NUMERIC(10,5);
DECLARE VARIABLE T18                   NUMERIC(10,5);
DECLARE VARIABLE T19                   NUMERIC(10,5);
DECLARE VARIABLE T20                   NUMERIC(10,5);
DECLARE VARIABLE CONTROLE              INTEGER;
DECLARE VARIABLE DOCUMENTO             INTEGER;
DECLARE VARIABLE NFS_ITEM_CONTROLE     INTEGER;
DECLARE VARIABLE NFE_ITEM_CONTROLE     INTEGER;
DECLARE VARIABLE OPERACAO_CODIGO       VARCHAR(3);
DECLARE VARIABLE REMESSA_ITEM_CONTROLE INTEGER;
DECLARE VARIABLE TRANSACAO_CONTROLE    INTEGER;
DECLARE VARIABLE CONSUMO               CHAR(1);
DECLARE VARIABLE CUSTO_UNITARIO        NUMERIC(10,5);
DECLARE VARIABLE USUARIO_CODIGO        INTEGER;
DECLARE VARIABLE USUARIO_DATA          DATE;
DECLARE VARIABLE TURNO_CODIGO          INTEGER;
DECLARE VARIABLE CCUSTO                VARCHAR(10);
DECLARE VARIABLE OBSERVACAO            VARCHAR(100);
DECLARE VARIABLE ESPUMACAO             CHAR(1);
DECLARE VARIABLE CLASSIFICACAO         SMALLINT;
DECLARE VARIABLE REVISAO_CONTROLE      INTEGER;
DECLARE VARIABLE EMPRESA_CODIGO        INTEGER;
DECLARE VARIABLE CUSTO_MEDIO           NUMERIC(15,4);
BEGIN
    FOR SELECT B.ESTABELECIMENTO_ID, B.LOCALIZACAO_ENTRADA, B.PRODUTO_ID,
    'S' AS TIPO, CURRENT_TIMESTAMP AS DATA, A.PERDA,
    IIF(A.PRODUTO_TAMANHO = '1',A.PERDA,0) T01, IIF(A.PRODUTO_TAMANHO = '2',A.PERDA,0) T02,
    IIF(A.PRODUTO_TAMANHO = '3',A.PERDA,0) T03, IIF(A.PRODUTO_TAMANHO = '4',A.PERDA,0) T04,
    IIF(A.PRODUTO_TAMANHO = '5',A.PERDA,0) T05, IIF(A.PRODUTO_TAMANHO = '6',A.PERDA,0) T06,
    IIF(A.PRODUTO_TAMANHO = '7',A.PERDA,0) T07, IIF(A.PRODUTO_TAMANHO = '8',A.PERDA,0) T08,
    IIF(A.PRODUTO_TAMANHO = '9',A.PERDA,0) T09, IIF(A.PRODUTO_TAMANHO = '10',A.PERDA,0) T10,
    IIF(A.PRODUTO_TAMANHO = '11',A.PERDA,0) T11, IIF(A.PRODUTO_TAMANHO = '12',A.PERDA,0) T12,
    IIF(A.PRODUTO_TAMANHO = '13',A.PERDA,0) T13, IIF(A.PRODUTO_TAMANHO = '14',A.PERDA,0) T14,
    IIF(A.PRODUTO_TAMANHO = '15',A.PERDA,0) T15, IIF(A.PRODUTO_TAMANHO = '16',A.PERDA,0) T16,
    IIF(A.PRODUTO_TAMANHO = '17',A.PERDA,0) T17, IIF(A.PRODUTO_TAMANHO = '18',A.PERDA,0) T18,
    IIF(A.PRODUTO_TAMANHO = '19',A.PERDA,0) T19, IIF(A.PRODUTO_TAMANHO = '20',A.PERDA,0) T20,
    A.ID, A.PECA_ID

    FROM TBROMANEIO_ITEM A, TBREVISAO B
    WHERE B.ID = A.PECA_ID AND A.ROMANEIO_ID = :ROMANEIO_ID
    INTO ESTABELECIMENTO,LOCALIZACAO,PRODUTO,TIPO,DATA,QUANTIDADE,T01,T02,T03,T04,T05,T06,T07,
         T08,T09,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,ITEM_ROMANEIO_ID,PECA_ID DO
    BEGIN
        IF(QUANTIDADE > 0) THEN
        BEGIN
            CONTROLE = gen_id(gtbestoque_transacao_item,1);
            DOCUMENTO = COALESCE((SELECT FIRST 1 C.NUMERO_NOTAFISCAL FROM TBROMANEIO C WHERE C.ID = :ROMANEIO_ID),0);
            NFS_ITEM_CONTROLE = null;
            NFE_ITEM_CONTROLE = null;
            OPERACAO_CODIGO = COALESCE((SELECT FIRST 1 D.VALOR_EXT FROM TBCONTROLE_N D WHERE D.ID = 221),0);
            REMESSA_ITEM_CONTROLE = PECA_ID;
            TRANSACAO_CONTROLE = 0;
            CONSUMO = 0;
            CUSTO_UNITARIO = 0;
            USUARIO_CODIGO = FN_CURRENT_USER_ID();
            USUARIO_DATA = CURRENT_TIMESTAMP;
            TURNO_CODIGO = 0;
            CCUSTO = '';
            OBSERVACAO = 'Ajuste de Saldo de Romaneio por perda';
            ESPUMACAO  = '0';
            CLASSIFICACAO = 0;
            REVISAO_CONTROLE = 0;
            EMPRESA_CODIGO = 0;
            CUSTO_MEDIO = null;
    
            EXECUTE PROCEDURE SPU_ESTOQUE_SALDO4(:ESTABELECIMENTO,:LOCALIZACAO,:PRODUTO,:TIPO,:DATA,:QUANTIDADE,:T01,:T02,:T03,:T04,:T05,:T06,:T07,
                      :T08,:T09,:T10,:T11,:T12,:T13,:T14,:T15,:T16,:T17,:T18,:T19,:T20,:CONTROLE,:DOCUMENTO,:NFS_ITEM_CONTROLE,:NFE_ITEM_CONTROLE,
                      :OPERACAO_CODIGO,:REMESSA_ITEM_CONTROLE,:TRANSACAO_CONTROLE,:CONSUMO,:CUSTO_UNITARIO,:USUARIO_CODIGO,:USUARIO_DATA,:TURNO_CODIGO,
                      :CCUSTO,:OBSERVACAO,:ESPUMACAO,:CLASSIFICACAO,:REVISAO_CONTROLE,:EMPRESA_CODIGO,:CUSTO_MEDIO);

            UPDATE TBESTOQUE_TRANSACAO_ITEM Z SET Z.PECA_ID = :PECA_ID WHERE Z.CONTROLE = :CONTROLE;
            UPDATE TBROMANEIO_ITEM W SET W.ESTOQUE_ID = :CONTROLE WHERE W.ROMANEIO_ID = :ROMANEIO_ID AND W.ID = :ITEM_ROMANEIO_ID;
        END
    END
END;