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!!!



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.
pe isso mesmo, se estiver algum outro titulo vencido o sistema não desbloqueia se estiver como não...
Ricardo Almeida Guimaraes disse:
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:
-
1
-
2
de 2 Próximo