CREATE OR ALTER PROCEDURE SPI_GERAR_COMISSAO (
    TABELA_ID INTEGER,
    ORIGEM VARCHAR(3))
AS
DECLARE VARIABLE REPRESENTANTE_ID   INTEGER;
DECLARE VARIABLE VALOR_TOTAL        NUMERIC(15,2);
DECLARE VARIABLE ESTABELECIMENTO_ID INTEGER;
DECLARE VARIABLE DATA_EMISSAO       DATE = 'NOW';
DECLARE VARIABLE DATA_VENCIMENTO    DATE = 'NOW';
begin

  IF(:ORIGEM = 'CFE')THEN
  BEGIN
     FOR /*SELECT A.ID,
            A.ESTABELECIMENTO_ID,
            A.REPRESENTANTE_ID,
            A.DATA_EMISSAO,
            A.DATA_EMISSAO AS DATA_VENCIMENTO,
            ((A.REPRESENTANTE_COMISSAO/100) * SUM(B.VALOR_LIQUIDO)) AS VALOR_TOTAL
            FROM TBPDV_CFE A
            LEFT JOIN TBPDV_CFE_ITEM B ON B.PDV_CFE_ID = A.ID
            WHERE A.ID = :TABELA_ID
            GROUP BY A.ID, A.ESTABELECIMENTO_ID,A.REPRESENTANTE_ID,A.REPRESENTANTE_COMISSAO ,B.PDV_CFE_ID ,A.DATA_EMISSAO */
         SELECT A.ID,
            A.ESTABELECIMENTO_ID,
            A.REPRESENTANTE_ID,
            A.DATA_EMISSAO,
            DATEADD(FN_PARAMETRO('SISTEMA.PRAZO_VOUCHER') DAY TO A.DATA_EMISSAO) AS DATA_VENCIMENTO,
            ((A.REPRESENTANTE_COMISSAO/100) * SUM(B.VALOR)) AS VALOR_TOTAL
            FROM TBPDV_CFE A
            LEFT JOIN TBPDV_CFE_FORMA_PAGAMENTO C ON C.PDV_CFE_ID = A.ID
            LEFT JOIN TBNFS_PARCELAMENTO B ON B.PDV_CFE_FORMA_PAGAMENTO_ID = C.ID
            WHERE A.ID = :TABELA_ID
            GROUP BY A.ID, A.ESTABELECIMENTO_ID, A.REPRESENTANTE_ID, A.REPRESENTANTE_COMISSAO, C.PDV_CFE_ID, A.DATA_EMISSAO
            INTO :TABELA_ID, :ESTABELECIMENTO_ID, :REPRESENTANTE_ID, :DATA_EMISSAO, :DATA_VENCIMENTO, :VALOR_TOTAL DO
            BEGIN
                 IF(:VALOR_TOTAL > 0)THEN
                 BEGIN
                    UPDATE OR INSERT INTO TBCOMISSAO
                           (
                             ESTABELECIMENTO_ID,
                             REPRESENTANTE_ID,
                             DATA_EMISSAO,
                             DATA_VENCIMENTO,
                             ORIGEM,
                             TABELA_ID,
                             VALOR,
                             SALDO
                            )
                         VALUES
                           (
                             :ESTABELECIMENTO_ID,
                             :REPRESENTANTE_ID,
                             :DATA_EMISSAO,
                             :DATA_VENCIMENTO,
                             :ORIGEM,
                             :TABELA_ID,
                             :VALOR_TOTAL,
                             :VALOR_TOTAL
                           )
                         MATCHING(ORIGEM, TABELA_ID);
                 END
            END

  END
  
  IF(:ORIGEM = 'NFS')THEN
  BEGIN
       FOR
       /*
          SELECT A.CONTROLE,
               A.ESTABELECIMENTO_CODIGO,
               A.REPRESENTANTE_CODIGO,
               A.DATA_EMISSAO,
               A.DATA_EMISSAO AS DATA_VENCIMENTO,
               ((A.REPRESENTANTE_COMISSAO/100)*SUM(B.VALOR_TOTAL)) AS VALOR_TOTAL
                -- SE CONSIDERAR DESCONTO NO VALOR TOTAL....
                -- ((A.REPRESENTANTE_COMISSAO/100)*SUM(B.VALOR_TOTAL-B.VALOR_DESCONTO)) AS VALOR_TOTAL
                
                FROM TBNFS A
                LEFT JOIN TBNFS_ITEM B ON B.NFS_CONTROLE = A.CONTROLE
                WHERE A.CONTROLE = :TABELA_ID
                GROUP BY A.CONTROLE, A.ESTABELECIMENTO_CODIGO, A.REPRESENTANTE_CODIGO, A.REPRESENTANTE_COMISSAO, A.DATA_EMISSAO, B.NFS_CONTROLE   */
                SELECT A.CONTROLE,
                   A.ESTABELECIMENTO_CODIGO,
                   A.REPRESENTANTE_CODIGO,
                   A.DATA_EMISSAO,
                   DATEADD(FN_PARAMETRO('SISTEMA.PRAZO_VOUCHER') DAY TO A.DATA_EMISSAO) AS DATA_VENCIMENTO,
                   ((A.REPRESENTANTE_COMISSAO/100)*SUM(B.VALOR)) AS VALOR_TOTAL
                    -- SE CONSIDERAR DESCONTO NO VALOR TOTAL....
                    -- ((A.REPRESENTANTE_COMISSAO/100)*SUM(B.VALOR_TOTAL-B.VALOR_DESCONTO)) AS VALOR_TOTAL
                    
                    FROM TBNFS A
                    LEFT JOIN TBNFS_PARCELAMENTO B ON B.NFS_CONTROLE = A.CONTROLE
                    WHERE A.CONTROLE = :TABELA_ID
                    GROUP BY A.CONTROLE, A.ESTABELECIMENTO_CODIGO, A.REPRESENTANTE_CODIGO, A.REPRESENTANTE_COMISSAO, A.DATA_EMISSAO, B.NFS_CONTROLE
                INTO :TABELA_ID, :ESTABELECIMENTO_ID, :REPRESENTANTE_ID, :DATA_EMISSAO, :DATA_VENCIMENTO, :VALOR_TOTAL DO
                BEGIN
                  IF(:VALOR_TOTAL > 0)THEN
                  BEGIN
                    UPDATE OR INSERT INTO TBCOMISSAO
                           (
                             ESTABELECIMENTO_ID,
                             REPRESENTANTE_ID,
                             DATA_EMISSAO,
                             DATA_VENCIMENTO,
                             ORIGEM,
                             TABELA_ID,
                             VALOR,
                             SALDO
                            )
                         VALUES
                           (
                             :ESTABELECIMENTO_ID,
                             :REPRESENTANTE_ID,
                             :DATA_EMISSAO,
                             :DATA_VENCIMENTO,
                             :ORIGEM,
                             :TABELA_ID,
                             :VALOR_TOTAL,
                             :VALOR_TOTAL
                           )
                         MATCHING(ORIGEM, TABELA_ID);
                  END
               END
  END

  IF(:ORIGEM = 'AVU')THEN
  BEGIN
     /* PARCELAS AVULSAS */
     FOR
     SELECT W.CONTROLE,
        W.ESTABELECIMENTO_CODIGO,
        W.REPRESENTANTE_ID,
        W.DATA_EMISSAO,
        DATEADD(FN_PARAMETRO('SISTEMA.PRAZO_VOUCHER') DAY TO W.DATA_EMISSAO) AS DATA_VENCIMENTO,
        CAST(((W.REPRESENTANTE_COMISSAO/100)* W.VALOR) AS NUMERIC(15,2)) AS VALOR
        FROM TBNFS_PARCELAMENTO W
        WHERE W.ACEITE   = 'S'
        AND   W.SITUACAO = 1
        AND   W.AVULSO   = 1
        AND   W.CONTROLE = :TABELA_ID
        INTO :TABELA_ID, :ESTABELECIMENTO_ID, :REPRESENTANTE_ID, :DATA_EMISSAO, :DATA_VENCIMENTO, :VALOR_TOTAL DO
        BEGIN
          IF(:VALOR_TOTAL > 0)THEN
          BEGIN
               UPDATE OR INSERT INTO TBCOMISSAO
                       (
                         ESTABELECIMENTO_ID,
                         REPRESENTANTE_ID,
                         DATA_EMISSAO,
                         DATA_VENCIMENTO,
                         ORIGEM,
                         TABELA_ID,
                         VALOR,
                         SALDO
                        )
                     VALUES
                       (
                         :ESTABELECIMENTO_ID,
                         :REPRESENTANTE_ID,
                         :DATA_EMISSAO,
                         :DATA_VENCIMENTO,
                         :ORIGEM,
                         :TABELA_ID,
                         :VALOR_TOTAL,
                         :VALOR_TOTAL
                       )
                     MATCHING(ORIGEM, TABELA_ID);
          end
        end
  END
end;

/*EXECUÇÃO PARA CUPONS FISCAIS*/
/*EXECUTE PROCEDURE SPI_GERAR_COMISSAO(NEW.PDV_CFE_ID,'CFE');*/

/*EXECUÇÃO PARA NOTAS FISCAIS DE SAÍDA*/
/*EXECUTE PROCEDURE SPI_GERAR_COMISSAO(NEW.NFS_CONTROLE,'NFS');*/

/*EXECUÇÃO PARA PARCELAS AVULSAS*/
/*EXECUTE PROCEDURE SPI_GERAR_COMISSAO(NEW.CONTROLE,'AVU');*/