Desbloqueio de vencidos

Uma opção interessante é a de " desbloqueia vencidos " aqui o corte é com 31 dias após o vencimento, sendo assim se um cliente deve por exemplo:

25/08/2012 e 25/09/2012 e vem hoje 29/09/2012 pagar somente o titulo vencido em 25/08/2012 o sistema desbloqueia, porem ate esses dias se o cliente fizesse assim:

Deve 25/08/2012 e 25/09/2012 e pagasse 25/09/2012 p sistema desbloqueava, mesmo ele tendo um titulo vencido a mais de 31 dias.

Isso ja foi corrigido ???


Grato!!!

Para adicionar comentários, você deve ser membro de MK-AUTH.

Join MK-AUTH

Votos 0
Enviar-me um email quando as pessoas responderem –

Respostas

  • CREATE DEFINER=`ricardo`@`%` TRIGGER `update_bloqueio` AFTER UPDATE ON `sis_lanc` FOR EACH ROW BEGIN
    #Script auxiliar para o mk-auth com funcao de desbloqueio de cliente vencidos e desconto para clientes que estiveram bloqueados.
    #Ricardo Almeida Guimaraes
    #15/08/2014
    declare MAX_D_B int default 27;  #MAXIMO DIAS BLOQUEADOS PARA CANCELAR O PROXIMO BOLETO
    declare MIN_D_B int default 4;  #MINIMO DIAS PARA LANÇAR DESCONTO PROPORCIONAL DIAS BLOQUEADO
    declare retorno int;
    declare dias_bloqueado int;
    declare dias_vencido int;
    declare xcorte int;
    declare xip char(15);
    declare yid int(11);
    declare xvalor char(20);
    declare xramal char(15);
    declare xbloqueado char(3);
    declare xativo2 char(1);
    declare cmd char(90);
    declare xdesc decimal(12,2);
    declare xdatavenc date;
    declare xdata_bloq date;
    #verifica se a altercao foi realmente na data de pagamento, baixa realizada
    if ((isnull(old.datapag)) and (new.datapag)) then    
        select ativo2,bloqueado,ip,ramal,dias_corte, data_bloq into xativo2,xbloqueado,xip,xramal,xcorte,xdata_bloq from sis_cliente where sis_cliente.login = new.login;
        if (xativo2 ='s' and xbloqueado = 'sim') then
            #set dias_bloqueado = (datediff(curdate(),xdata_bloq)); # achei quantos dias cliente ficou bloqueado por teste boleto
            set dias_bloqueado = ((datediff(curdate(),new.datavenc)) - xcorte); # achei quantos dias cliente ficou bloqueado por teste boleto
            #seleciona o boleto mais antigo em aberto, gravando o total de dias de atraso em dias_vencido
            set dias_vencido = (select datediff(curdate(),datavenc) from sis_lanc where login = new.login and isnull(datapag) order by datavenc asc limit 1);
            if (dias_vencido < xcorte) then  # condicao em que posso desbloquear o cliente
                #desbloqueia o cliente respeitando as regras de corte no cadastro
                update sis_cliente set sis_cliente.bloqueado = 'nao' where sis_cliente.login = new.login;
                #caso cliente tenha ip manual fixo.
                if (xip is null or xip = '') then
                    delete from radreply where radreply.username = new.login;
                else
                    update radreply set radreply.attribute = 'Framed-IP-Address', radreply.value = xip where radreply.username = new.login;
                end if;
                #desbloqueia/desconecta cliente no radius
                set cmd = concat("echo User-Name := ",new.login, " | radclient ", xramal, " disconnect senharadius");
                #função sys_exec() pode ser obtida na lib lib_mysqludf_sys-master em https://github.com/mysqludf/lib_mysqludf_sys
                set retorno = sys_exec(cmd);
            end if;
            #REFERENTE A DESCONTO OU CANCELAMENTO INTEGRAL DE TITULOS, DEVIDO A DIAS BLOQUEADO
            #Seleciona o proximo boleto a vencer/a ser enviado para o cliente e utiliza como referencia para desconto/cancelamento
            #Isso só funcionará se o provedor trabalhar com 4 ou mais lançamentos para os clientes.
            select id,valor,datavenc into yid, xvalor,xdatavenc from sis_lanc where login = new.login and isnull(datapag) and datavenc >
            date_add(new.datavenc, interval 50 day) order by datavenc asc limit 1;
            if (dias_bloqueado >= MIN_D_B and dias_bloqueado < MAX_D_B) then
                #se cliente ficou bloqueado mais que (MIN_D_B) 5 dias ate (MAX_D_B) 27 dias, utilizo desconto no proximo boleto
                #caso cliente ficou mais que (MAX_D_B) 27 dias bloqueados, eu cancelo o proximo boleto.
                set xdesc = ((xvalor / 30) * dias_bloqueado);
                if isnull((select idlanc from sis_mlanc where idlanc = yid)) then
                    #lanca desconto por dias bloqueados
                    insert into sis_mlanc values(null,yid,xdesc,'desconto',concat(dias_bloqueado,' dias bloqueado'),0);
                    insert into sis_logs values(concat('script_signet lançou desconto de R$ ',xdesc,' ao boleto ',xdatavenc, ' ref. a ',dias_bloqueado,' dias bloqueado'),now(),new.login,'central','F487F8BC',null);
                end if;
            end if;
            if (dias_bloqueado >= MAX_D_B) then
                #cancela o proximo boleto, pois cliente ficou bloqueado quase o mes todo
                #update sis_lanc set sis_lanc.deltitulo = 1 where id = yid;
                #NAO CONSIGO RODAR O COMANDO ACIMA, POR ISSO TENHO QUE FAZER ESSA XXX PARA CANCELAR O BOLETO
                insert into update_bloqueio_titulo_del values(yid);
                insert into sis_logs values(concat('script_signet excluiu boleto ',yid, ' de ',xdatavenc,' ref. bloqueio mês anterior'),now(),new.login,'central','F487F8BC',null);
            end if;
        end if;
    end if;
    END

  • me envia amigo...

    Ricardo Almeida Guimaraes disse:

    Ok, aqui já esta funcionando da forma que descrevi, fiz através de trigger no banco de dados.

    Caso queiram verificar a logica, eu envio.

    At,

    Rciardo.
    Pedro Filho disse:

    irei ver isso...

    Ricardo Almeida Guimaraes disse:

    Pedro,

    O que percebi era que quando a opção desbloqueia vencidos está "sim", se algum cliente pagar o boleto desse mês(10/08), deixando o boleto vencido (10/07) em aberto, o sistema estava desbloqueando. (Pra mim não poderia ser assim)

    E quando a opção desbloqueia vencidos está "não", se algum cliente pagar o boleto vencido (10/07) e deixar de pagar o boleto vencido (10/08) ele não é desbloqueado. Mas isso vai contra o que foi colocado no cadastro do cliente (dias de corte 20).

    Então no meu ponto de vista o cliente só deveria ser bloqueado se estivesse com mais de 20 dias de atraso, não 5 dias.

    Portanto, o que eu fiz foi fazer com que o sistema sempre respeite a regra de bloqueio, estabelecida no cadastro do cliente. E também lançar o desconto de forma automatica proporcional aos dias em que o cliente ficou bloqueado.

  • Ok, aqui já esta funcionando da forma que descrevi, fiz através de trigger no banco de dados.

    Caso queiram verificar a logica, eu envio.

    At,

    Rciardo.
    Pedro Filho disse:

    irei ver isso...

    Ricardo Almeida Guimaraes disse:

    Pedro,

    O que percebi era que quando a opção desbloqueia vencidos está "sim", se algum cliente pagar o boleto desse mês(10/08), deixando o boleto vencido (10/07) em aberto, o sistema estava desbloqueando. (Pra mim não poderia ser assim)

    E quando a opção desbloqueia vencidos está "não", se algum cliente pagar o boleto vencido (10/07) e deixar de pagar o boleto vencido (10/08) ele não é desbloqueado. Mas isso vai contra o que foi colocado no cadastro do cliente (dias de corte 20).

    Então no meu ponto de vista o cliente só deveria ser bloqueado se estivesse com mais de 20 dias de atraso, não 5 dias.

    Portanto, o que eu fiz foi fazer com que o sistema sempre respeite a regra de bloqueio, estabelecida no cadastro do cliente. E também lançar o desconto de forma automatica proporcional aos dias em que o cliente ficou bloqueado.

  • irei ver isso...

    Ricardo Almeida Guimaraes disse:

    Pedro,

    O que percebi era que quando a opção desbloqueia vencidos está "sim", se algum cliente pagar o boleto desse mês(10/08), deixando o boleto vencido (10/07) em aberto, o sistema estava desbloqueando. (Pra mim não poderia ser assim)

    E quando a opção desbloqueia vencidos está "não", se algum cliente pagar o boleto vencido (10/07) e deixar de pagar o boleto vencido (10/08) ele não é desbloqueado. Mas isso vai contra o que foi colocado no cadastro do cliente (dias de corte 20).

    Então no meu ponto de vista o cliente só deveria ser bloqueado se estivesse com mais de 20 dias de atraso, não 5 dias.

    Portanto, o que eu fiz foi fazer com que o sistema sempre respeite a regra de bloqueio, estabelecida no cadastro do cliente. E também lançar o desconto de forma automatica proporcional aos dias em que o cliente ficou bloqueado.

  • Pedro,

    O que percebi era que quando a opção desbloqueia vencidos está "sim", se algum cliente pagar o boleto desse mês(10/08), deixando o boleto vencido (10/07) em aberto, o sistema estava desbloqueando. (Pra mim não poderia ser assim)

    E quando a opção desbloqueia vencidos está "não", se algum cliente pagar o boleto vencido (10/07) e deixar de pagar o boleto vencido (10/08) ele não é desbloqueado. Mas isso vai contra o que foi colocado no cadastro do cliente (dias de corte 20).

    Então no meu ponto de vista o cliente só deveria ser bloqueado se estivesse com mais de 20 dias de atraso, não 5 dias.

    Portanto, o que eu fiz foi fazer com que o sistema sempre respeite a regra de bloqueio, estabelecida no cadastro do cliente. E também lançar o desconto de forma automatica proporcional aos dias em que o cliente ficou bloqueado.

  • pe isso mesmo, se estiver algum outro titulo vencido o sistema não desbloqueia se estiver como não...

    Ricardo Almeida Guimaraes disse:

    Olá a todos,

    Após quase um mês usando o sistema esse é meu primeiro post aqui no fórum.

    Minha dúvida é quanto a utilização da opção "Desbloqueia Vencidos (Sim/Não)"

    Se eu setar como "Sim", o sistema esta desbloqueado os clientes que pagaram a parcela 10/08 e esqueceram de pagar a 10/07/2014.

    Se eu setar com "Não", o sistema não desbloqueia os clientes que pagaram a parcela 10/07 e estão com 10/08/2014 em aberto. Sendo a data atual > 10/08/2014, mesmo dentro do cadastro do cliente estar informado 25 dias para o bloqueio/corte.

    Por isso venho perguntar aos mais experientes, se realmente funciona assim, ou caso eu possa fazer alguma outra configuração para resolver este problema. Pois todos os dias após importarmos o arquivo do banco, temos que conferir dentre os lançamentos, quais pagamentos são do vencimento anterior, e desbloquear manualmente o cliente.

    Agradeço a todos que puderem ajudar, e espero um dia poder ajudar também.

  • Boa tarde Pessoal,

    Conforme meu post de ontem, informei que tínhamos de desbloquear manualmente os clientes que haviam pago a mensalidade do mês anterior, e que a atual estava vencida apenas alguns dias.

    Como não obtive resposta, percebi que deveria ser assim mesmo que funcionasse o sistema.

    Portanto resolvi criar um script para contornar essa situação, e também dar o desconto pelos dias bloqueados no próximo boleto;

    Funciona assim:

    Parametro Desbloqueio de vencidos, setado como não.

    1 - Desbloqueia automático os clientes que (pagaram hoje (15/08) a mensalidade 10/07 continuariam bloqueados, pois boleto 10/08 esta em aberto. Porém no cadastro do mesmo, consta 20 dias para corte, então não deveria estar bloqueado.)

    2 - Lança um desconto automático na próxima parcela a vencer, descontando 14 dias que o cliente ficou bloqueado.

    Caso alguém tenha essas mesmas necessidades, posso disponibiliza-lo, e quem sabe alguem posso aperfeiçoar ou adaptar mais funções.

  • Olá a todos,

    Após quase um mês usando o sistema esse é meu primeiro post aqui no fórum.

    Minha dúvida é quanto a utilização da opção "Desbloqueia Vencidos (Sim/Não)"

    Se eu setar como "Sim", o sistema esta desbloqueado os clientes que pagaram a parcela 10/08 e esqueceram de pagar a 10/07/2014.

    Se eu setar com "Não", o sistema não desbloqueia os clientes que pagaram a parcela 10/07 e estão com 10/08/2014 em aberto. Sendo a data atual > 10/08/2014, mesmo dentro do cadastro do cliente estar informado 25 dias para o bloqueio/corte.

    Por isso venho perguntar aos mais experientes, se realmente funciona assim, ou caso eu possa fazer alguma outra configuração para resolver este problema. Pois todos os dias após importarmos o arquivo do banco, temos que conferir dentre os lançamentos, quais pagamentos são do vencimento anterior, e desbloquear manualmente o cliente.

    Agradeço a todos que puderem ajudar, e espero um dia poder ajudar também.

  • Obrigado Pedro !!!

    Só pra confirmar , vc retirou a informação " Referente ai mÊs XX/XXXX  no canhoto do boleto ???

    Grato !

  • é verdade, irei estudar aqui como resolver isso...

    Under-linux disse:

    Pois é, aqui também desbloqueia, porem acontece assim:

    Cliente deve:

    25/08/2012 e 25/09/2012 ;;; ai ele é bloqueado ... Ai ele vai no banco e paga a 25/09/2012 .. ficando para tras a 25/08/2012 ( Esta ja esta com mais de 30 dias de atraso) ai o sistema libera um cliente que deve uma fatura com mais de 30 dias...

    Seria interessante assim:

    O Cliente deve 25/08/2012 e 25/09/2012 e foi cortado .. ai ele paga a 25/08/2012 que ja esta vencida a 30 dias ou mais, ai o sistema libera ... assim como é feito com uma conta de agua , luz , telefone .. paga-se a mais atrasada e o sistema libera ....

    abraços

This reply was deleted.