CREATE OR ALTER procedure SP_CFE_PEDIDO (
    PDV_CFE_ID integer,
    ACAO integer,
    OFFLINE integer = 0)
as
declare variable PDV_CFE_ITEM_ID integer;
declare variable PEDIDO_ITEM_ID integer;
declare variable QUANTIDADE numeric(10,5);
declare variable TAMANHO integer;
declare variable SITUACAO_PEDIDO_ITEM INTEGER;
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);
BEGIN

    FOR SELECT
        A.ID,
        A.PEDIDO_ITEM_ID,
        A.QUANTIDADE,
        A.TAMANHO
    FROM TBPDV_CFE_ITEM A
    WHERE A.PEDIDO_ITEM_ID > 0
      AND A.PDV_CFE_ID = :PDV_CFE_ID
    INTO
    :PDV_CFE_ITEM_ID, :PEDIDO_ITEM_ID, :QUANTIDADE, :TAMANHO
    DO BEGIN

        :T01 = 0;
        :T02 = 0;
        :T03 = 0;
        :T04 = 0;
        :T05 = 0;
        :T06 = 0;
        :T07 = 0;
        :T08 = 0;
        :T09 = 0;
        :T10 = 0;
        :T11 = 0;
        :T12 = 0;
        :T13 = 0;
        :T14 = 0;
        :T15 = 0;
        :T16 = 0;
        :T17 = 0;
        :T18 = 0;
        :T19 = 0;
        :T20 = 0;


        IF(:TAMANHO = 1) THEN :T01 = :QUANTIDADE;
        IF(:TAMANHO = 2) THEN :T02 = :QUANTIDADE;
        IF(:TAMANHO = 3) THEN :T03 = :QUANTIDADE;
        IF(:TAMANHO = 4) THEN :T04 = :QUANTIDADE;
        IF(:TAMANHO = 5) THEN :T05 = :QUANTIDADE;
        IF(:TAMANHO = 6) THEN :T06 = :QUANTIDADE;
        IF(:TAMANHO = 7) THEN :T07 = :QUANTIDADE;
        IF(:TAMANHO = 8) THEN :T08 = :QUANTIDADE;
        IF(:TAMANHO = 9) THEN :T09 = :QUANTIDADE;
        IF(:TAMANHO = 10) THEN :T10 = :QUANTIDADE;
        IF(:TAMANHO = 11) THEN :T11 = :QUANTIDADE;
        IF(:TAMANHO = 12) THEN :T12 = :QUANTIDADE;
        IF(:TAMANHO = 13) THEN :T13 = :QUANTIDADE;
        IF(:TAMANHO = 14) THEN :T14 = :QUANTIDADE;
        IF(:TAMANHO = 15) THEN :T15 = :QUANTIDADE;
        IF(:TAMANHO = 16) THEN :T16 = :QUANTIDADE;
        IF(:TAMANHO = 17) THEN :T17 = :QUANTIDADE;
        IF(:TAMANHO = 18) THEN :T18 = :QUANTIDADE;
        IF(:TAMANHO = 19) THEN :T19 = :QUANTIDADE;
        IF(:TAMANHO = 20) THEN :T20 = :QUANTIDADE;


        /* REALIZAR BAIXA DE PEDIDO */
        IF (:ACAO = 1) THEN
           BEGIN

               UPDATE TBPEDIDO_ITEM_SALDO SET
               QUANTIDADE = QUANTIDADE - :QUANTIDADE,
               T01 = T01 - :T01,   T02 = T02 - :T02,   T03 = T03 - :T03,
               T04 = T04 - :T04,   T05 = T05 - :T05,   T06 = T06 - :T06,
               T07 = T07 - :T07,   T08 = T08 - :T08,   T09 = T09 - :T09,
               T10 = T10 - :T10,   T11 = T11 - :T11,   T12 = T12 - :T12,
               T13 = T13 - :T13,   T14 = T14 - :T14,   T15 = T15 - :T15,
               T16 = T16 - :T16,   T17 = T17 - :T17,   T18 = T18 - :T18,
               T19 = T19 - :T19,   T20 = T20 - :T20
               WHERE PEDIDO_ITEM_CONTROLE = :PEDIDO_ITEM_ID;
               




               IF(:OFFLINE = 1) THEN
               BEGIN
                  UPDATE TBPEDIDO_ITEM SET SITUACAO = 2 WHERE CONTROLE = :PEDIDO_ITEM_ID;
               END

               WHEN ANY DO
               BEGIN
                
                    SELECT FIRST 1 T.SITUACAO FROM TBPEDIDO_ITEM T WHERE T.controle = :PEDIDO_ITEM_ID INTO :SITUACAO_PEDIDO_ITEM;

                    IF(COALESCE(SITUACAO_PEDIDO_ITEM, 0) = 1) THEN
                    BEGIN
                        UPDATE TBPDV_CFE_ITEM_TRATAMENTO SET PEDIDO = 0 WHERE PDV_CFE_ITEM_ID = :PDV_CFE_ITEM_ID;
                    END ELSE
                    BEGIN
                        UPDATE TBPDV_CFE_ITEM_TRATAMENTO SET PEDIDO = 1 WHERE PDV_CFE_ITEM_ID = :PDV_CFE_ITEM_ID;
                    END
               END

           END
           /* DESFAZ BAIXA DE PEDIDO */
           ELSE IF(:ACAO = 2) THEN
           BEGIN

               UPDATE TBPEDIDO_ITEM_SALDO SET
                   QUANTIDADE = QUANTIDADE + :QUANTIDADE,
                   T01 = T01 + :T01,   T02 = T02 + :T02,   T03 = T03 + :T03,
                   T04 = T04 + :T04,   T05 = T05 + :T05,   T06 = T06 + :T06,
                   T07 = T07 + :T07,   T08 = T08 + :T08,   T09 = T09 + :T09,
                   T10 = T10 + :T10,   T11 = T11 + :T11,   T12 = T12 + :T12,
                   T13 = T13 + :T13,   T14 = T14 + :T14,   T15 = T15 + :T15,
                   T16 = T16 + :T16,   T17 = T17 + :T17,   T18 = T18 + :T18,
                   T19 = T19 + :T19,   T20 = T20 + :T20
               WHERE PEDIDO_ITEM_CONTROLE = :PEDIDO_ITEM_ID;


               UPDATE TBPDV_CFE_ITEM_TRATAMENTO SET PEDIDO = 0 WHERE PDV_CFE_ITEM_ID = :PDV_CFE_ITEM_ID;

               IF(:OFFLINE = 1) THEN
               BEGIN
                  UPDATE TBPEDIDO_ITEM SET SITUACAO = 1 WHERE CONTROLE = :PEDIDO_ITEM_ID;
               END

               WHEN ANY DO
               BEGIN
                    UPDATE TBPDV_CFE_ITEM_TRATAMENTO SET PEDIDO = 0 WHERE PDV_CFE_ITEM_ID = :PDV_CFE_ITEM_ID;
    
               END


           END

       END

END;