SET TERM ^ ;

CREATE OR ALTER PROCEDURE SPUI_PDV_PRODUTOS (
    PARAM_MODELO_ID INTEGER = 0,
    PARAM_TABELA_PRECO_ID INTEGER = 0)
AS
DECLARE VARIABLE ESTABELECIMENTO_ID INTEGER;
DECLARE VARIABLE LOCALIZACAO_ID INTEGER;
DECLARE VARIABLE FAMILIA_ID INTEGER;
DECLARE VARIABLE FAMILIA_DESCRICAO VARCHAR(200);
DECLARE VARIABLE MODELO_ID INTEGER;
DECLARE VARIABLE MODELO_DESCRICAO VARCHAR(200);
DECLARE VARIABLE PRODUTO_ID INTEGER;
DECLARE VARIABLE PRODUTO_DESCRICAO VARCHAR(500);
DECLARE VARIABLE DESC_PRODUTO VARCHAR(500);
DECLARE VARIABLE COR_ID INTEGER;
DECLARE VARIABLE COR_DESCRICAO VARCHAR(20);
DECLARE VARIABLE UM VARCHAR(50);
DECLARE VARIABLE NCM VARCHAR(50);
DECLARE VARIABLE EAN VARCHAR(50);
DECLARE VARIABLE EAN_2 VARCHAR(50);
DECLARE VARIABLE TAMANHO INTEGER;
DECLARE VARIABLE FRACIONAR VARCHAR(20);
DECLARE VARIABLE CEST VARCHAR(20);
DECLARE VARIABLE CFOP_CODIGO VARCHAR(10);
DECLARE VARIABLE OPERACAO_CODIGO VARCHAR(10);
DECLARE VARIABLE TABELA_PRECO_ID INTEGER;
DECLARE VARIABLE TABELA_PRECO_ID_PROMOCIONAL INTEGER;
DECLARE VARIABLE VALOR_UNITARIO_PROMOCIONAL NUMERIC(18,2);
DECLARE VARIABLE QUANTIDADE_MINIMA INTEGER;
DECLARE VARIABLE VALOR_UNITARIO_PROMO_PROD NUMERIC(18,2);
DECLARE VARIABLE QUANTIDADE_MINIMA_PROD INTEGER;
DECLARE VARIABLE TRIBUTACAO_ORIGEM CHAR(1);
DECLARE VARIABLE TRIBUTACAO_ICMS INTEGER;
DECLARE VARIABLE ICMS_ALIQUOTA NUMERIC(18,4);
DECLARE VARIABLE TRIBUTACAO_PIS CHAR(3);
DECLARE VARIABLE PIS_ALIQUOTA NUMERIC(18,4);
DECLARE VARIABLE TRIBUTACAO_COFINS CHAR(3);
DECLARE VARIABLE COFINS_ALIQUOTA NUMERIC(18,4);
DECLARE VARIABLE REDUCAO_BASE_PISCOF CHAR(1);
DECLARE VARIABLE TIPO_DESCONTO VARCHAR(1);
DECLARE VARIABLE TAM_DESCRICAO VARCHAR(50);
DECLARE VARIABLE VALOR_UNITARIO NUMERIC(18,5);
DECLARE VARIABLE PERCENTUAL_BASECALCULO_ICMS NUMERIC(18,5);
DECLARE VARIABLE DESC_LOCALIZACAO_ID VARCHAR(50);
DECLARE VARIABLE LOCALIZACAO_DESCRICAO VARCHAR(200);

BEGIN
        /* ALIMENTAR TABELA DE PRODUTOS DO PDV */
        FOR

            SELECT
                T.ESTABELECIMENTO_ID,
                T.LOCALIZACAO_ID,
                T.FAMILIA_ID,
                T.FAMILIA_DESCRICAO,
                T.MODELO_ID,
                T.MODELO_DESCRICAO,
                T.PRODUTO_ID,
                T.PRODUTO_DESCRICAO,
                T.DESC_PRODUTO,
                T.COR_ID,
                T.COR_DESCRICAO,
                T.UM,
                T.NCM,
                T.EAN,
                T.EAN_2,
                T.TAMANHO,
                T.FRACIONAR,
                T.CEST,
                T.CFOP_CODIGO,
                T.OPERACAO_CODIGO,
                T.TABELA_PRECO_ID,
                T.TABELA_PRECO_ID_PROMOCIONAL,
                T.VALOR_UNITARIO_PROMOCIONAL,
                T.QUANTIDADE_MINIMA,
                T.VALOR_UNITARIO_PROMO_PROD,
                T.QUANTIDADE_MINIMA_PROD,
                T.TRIBUTACAO_ORIGEM,
                T.TRIBUTACAO_ICMS,
                T.ICMS_ALIQUOTA,
                T.TRIBUTACAO_PIS,
                T.PIS_ALIQUOTA,
                T.TRIBUTACAO_COFINS,
                T.COFINS_ALIQUOTA,
                T.REDUCAO_BASE_PISCOF,
                T.TIPO_DESCONTO,
                T.TAM_DESCRICAO,
                T.VALOR_UNITARIO,
                T.PERCENTUAL_BASECALCULO_ICMS,
                T.DESC_LOCALIZACAO_ID,
                T.LOCALIZACAO_DESCRICAO
            FROM VWPDV_PRODUTOS T
            WHERE IIF(:PARAM_MODELO_ID > 0, T.MODELO_ID = :PARAM_MODELO_ID, TRUE)
            AND IIF(:PARAM_TABELA_PRECO_ID > 0, T.TABELA_PRECO_ID = :PARAM_TABELA_PRECO_ID, TRUE)
            INTO :ESTABELECIMENTO_ID, :LOCALIZACAO_ID, :FAMILIA_ID, :FAMILIA_DESCRICAO, :MODELO_ID, :MODELO_DESCRICAO, :PRODUTO_ID, :PRODUTO_DESCRICAO, :DESC_PRODUTO, :COR_ID,
            :COR_DESCRICAO, :UM, :NCM, :EAN, :EAN_2, :TAMANHO, :FRACIONAR, :CEST, :CFOP_CODIGO, :OPERACAO_CODIGO, :TABELA_PRECO_ID, :TABELA_PRECO_ID_PROMOCIONAL, :VALOR_UNITARIO_PROMOCIONAL, :QUANTIDADE_MINIMA,
            :VALOR_UNITARIO_PROMO_PROD, :QUANTIDADE_MINIMA_PROD, :TRIBUTACAO_ORIGEM, :TRIBUTACAO_ICMS, :ICMS_ALIQUOTA, :TRIBUTACAO_PIS, :PIS_ALIQUOTA, :TRIBUTACAO_COFINS, :COFINS_ALIQUOTA,
            :REDUCAO_BASE_PISCOF, :TIPO_DESCONTO, :TAM_DESCRICAO, :VALOR_UNITARIO, :PERCENTUAL_BASECALCULO_ICMS, :DESC_LOCALIZACAO_ID, :LOCALIZACAO_DESCRICAO

        DO BEGIN

            UPDATE OR INSERT INTO TBPDV_PRODUTOS (ESTABELECIMENTO_ID, LOCALIZACAO_ID, FAMILIA_ID, FAMILIA_DESCRICAO, MODELO_ID, MODELO_DESCRICAO, PRODUTO_ID,
                PRODUTO_DESCRICAO, DESC_PRODUTO, COR_ID, COR_DESCRICAO, UM, NCM, EAN, EAN_2, TAMANHO, TAM_DESCRICAO, FRACIONAR, CEST,
                CFOP_CODIGO, OPERACAO_CODIGO, TABELA_PRECO_ID, TABELA_PRECO_ID_PROMOCIONAL, VALOR_UNITARIO,
                VALOR_UNITARIO_PROMOCIONAL, QUANTIDADE_MINIMA, VALOR_UNITARIO_PROMO_PROD, QUANTIDADE_MINIMA_PROD, TRIBUTACAO_ORIGEM, TRIBUTACAO_ICMS,
                PERCENTUAL_BASECALCULO_ICMS, ICMS_ALIQUOTA, TRIBUTACAO_PIS, PIS_ALIQUOTA,
                TRIBUTACAO_COFINS, COFINS_ALIQUOTA, REDUCAO_BASE_PISCOF, TIPO_DESCONTO, DESC_LOCALIZACAO_ID, LOCALIZACAO_DESCRICAO)
            VALUES (:ESTABELECIMENTO_ID, :LOCALIZACAO_ID, :FAMILIA_ID, :FAMILIA_DESCRICAO, :MODELO_ID, :MODELO_DESCRICAO, :PRODUTO_ID, :PRODUTO_DESCRICAO, :DESC_PRODUTO, :COR_ID, :COR_DESCRICAO, :UM, :NCM,
                    :EAN, :EAN_2, :TAMANHO, :TAM_DESCRICAO, :FRACIONAR, :CEST, :CFOP_CODIGO, :OPERACAO_CODIGO, :TABELA_PRECO_ID, :TABELA_PRECO_ID_PROMOCIONAL,
                    :VALOR_UNITARIO, :VALOR_UNITARIO_PROMOCIONAL, :QUANTIDADE_MINIMA, :VALOR_UNITARIO_PROMO_PROD, :QUANTIDADE_MINIMA_PROD, :TRIBUTACAO_ORIGEM, :TRIBUTACAO_ICMS,
                    :PERCENTUAL_BASECALCULO_ICMS, :ICMS_ALIQUOTA, :TRIBUTACAO_PIS, :PIS_ALIQUOTA, :TRIBUTACAO_COFINS,
                    :COFINS_ALIQUOTA, :REDUCAO_BASE_PISCOF, :TIPO_DESCONTO, :DESC_LOCALIZACAO_ID, :LOCALIZACAO_DESCRICAO)
            MATCHING (ESTABELECIMENTO_ID, TABELA_PRECO_ID, PRODUTO_ID, TAMANHO);


        END

        :ESTABELECIMENTO_ID     = 0;
        :TABELA_PRECO_ID        = 0;
        :PRODUTO_ID             = 0;
        :TAMANHO                = 0;

        /* DELETAR PRODUTOS QUE FORAM ALTERADOS NA VIEW */
        FOR

            SELECT
                T.ESTABELECIMENTO_ID,
                T.TABELA_PRECO_ID,
                T.PRODUTO_ID,
                T.TAMANHO

            FROM TBPDV_PRODUTOS T
            LEFT JOIN VWPDV_PRODUTOS VW ON VW.ESTABELECIMENTO_ID = T.ESTABELECIMENTO_ID
            AND VW.TABELA_PRECO_ID = T.TABELA_PRECO_ID AND VW.PRODUTO_ID = T.PRODUTO_ID
            AND VW.TAMANHO = T.TAMANHO
            WHERE   VW.ESTABELECIMENTO_ID IS NULL
            AND     IIF(:PARAM_MODELO_ID > 0, T.MODELO_ID = :PARAM_MODELO_ID, TRUE)
            AND     IIF(:PARAM_TABELA_PRECO_ID > 0, T.TABELA_PRECO_ID = :PARAM_TABELA_PRECO_ID, TRUE)
            INTO :ESTABELECIMENTO_ID, :TABELA_PRECO_ID, :PRODUTO_ID, :TAMANHO

        DO BEGIN

            IF(:ESTABELECIMENTO_ID > 0) THEN
            BEGIN
                DELETE FROM TBPDV_PRODUTOS T WHERE T.ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
                AND T.TABELA_PRECO_ID = :TABELA_PRECO_ID
                AND T.PRODUTO_ID = :PRODUTO_ID
                AND T.TAMANHO = :TAMANHO;

            END


        END
END
^

SET TERM ; ^

