Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

yuringolfeto

Calculo entre datas para uso especifico

Recommended Posts

Salve galera,

 

gostaria de postar pra vocês aqui um simulador de quebra de fidelização que criei para utilziar no trabalho, como trabalho com atendimento telefonico cada segundo a menos é bom pra gente, então criei meio que na brincadeira esse simulador, acredito que algumas partes dele podem ser utilizados para ajudar vocês em algo que estejam fazendo também. Não sei se este é o lucar certo para postar mas ok.

Qualquer duvida comentei ai o máximo que pude.

<html>

<head>
	<title>Quebra de fidelização</title>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>

<body style="font-family: arial, helvetica, serif;">
<form id="dadosFidelizacao">
<div style="left: 50%; position: absolute; width: auto; display: inline-block; ; text-align: center;">

	<br><br>
	
	<table style="border-color: #808080; border-width: 1px; border-style: solid;" cellpadding="5" cellspacing="0">
		<th colspan="2" style="background-color: #808080; color: #FFF;">
			Simulador de quebra de fidelização
		</th>
		<tr>
			<td>
				Valor da fidelização R$
			</td>
			<td>
				<input type="text" style="text-align: left;" size="12" id="valorFidelizacao" onKeyUp="maskIt(this,event,'###.###.###,##',true)" dir="rtl"></input>
			</td>
		</tr>	
		<tr>
			<td>
				Data da criação
			</td>
			<td>
				<input type="text" style="text-align: left;" size="12" id="dataCriacao" onkeyup="javascript:somenteNumero(this); Formatadata(this,event)" maxlength="10"></input>
			</td>
		</tr>
		<tr>
			<td>
				Data atual
			</td>
			<td>
				<input type="text" style="text-align: left; background-color: #EEE" size="12" id="dataAtual" readonly></input>
			</td>
		</tr>
		<tr>
			<td>
				Data da expiração
			</td>
			<td>
				<input type="text" style="text-align: left; background-color: #EEE" size="12" id="dataexpiracao" readonly></input>
			</td>
		</tr>
		<tr>
			<td>
				Meses restantes
			</td>
			<td>
				<input type="text" style="text-align: left; background-color: #EEE" size="12" id="mesesRestantes" readonly></input>
			</td>
		</tr>
		<tr>
			<td>
				Valor mensal <span style="margin-left: 47px;">R$</span>
			</td>
			<td>
				<input type="text" style="text-align: left; background-color: #EEE" size="12" id="valorMensal" readonly></input>
			</td>
		</tr>
		<tr>
			<td>
				Valor da multa <span style="margin-left: 38px;">R$</span>
			</td>
			<td>
				<input type="text" style="text-align: left; background-color: #EEE" size="12" id="valorMulta" readonly></input>
			</td>
		</tr>
		<tr>
			<td colspan="2" style="text-align: center;">
				<input type="button" value="Calcular" onclick="javascript: validaCampos();">
				<input type="button" value="Limpar" onclick="javascript: limpaDados();">
			</td>
		</tr>
	</table>
	
	<br><br>
	
	Feito por ygolfeto@timbrasil.com
</div>
</form>
</body>

<script type="text/javascript">

/*Limpa dados do form pois não estou usando submit, essa função tem um timeout (500 milisegundos) pra dar 
reload na página pois sem submit os dados não saem dos campos e para preencher novamente era necessário apertar F5*/
function limpaDados(){
	document.getElementById("dadosFidelizacao").reset();
	setTimeout("location.reload(true);", 500);
	dataAtual();
}

/*Valida se foi preenchido os campos necessários para o calculo*/
function validaCampos(){
	dataCriacao = document.getElementById("dataCriacao").value;
	valorFidelização = document.getElementById("valorFidelizacao").value;
	
	if (dataCriacao.length > 0 && valorFidelização.length > 0){
		valorMensal(); 
		diferencaDatas(); 
	}else{
		alert("Preencha os campos Valor da Fidelização e Data da Criação.")
	}
}

/*Pega data atual e formata para melhor visualização em padrão brasileiro DD/MM/YYYY*/
function dataAtual(){

	var data = new Date();
	var dia = data.getDate();
	var mes = data.getMonth()+1;
	var ano = data.getFullYear();
	var dataFormatada = dia +"/"+ mes +"/"+ ano;
	
	document.getElementById("dataAtual").value = dataFormatada;
}

dataAtual(); //Executa quando entra na página

/*Função pronta para formatar a data para melhor visualização em padrão brasileiro DD/MM/YYYY*/
function Formatadata(Campo, teclapres){
	var tecla = teclapres.keyCode;
	var vr = new String(Campo.value);
	vr = vr.replace("/", "");
	vr = vr.replace("/", "");
	vr = vr.replace("/", "");
	tam = vr.length + 1;
	if (tecla != 8 && tecla != 8)
	{
		if (tam > 0 && tam < 2)
			Campo.value = vr.substr(0, 2) ;
		if (tam > 2 && tam < 4)
			Campo.value = vr.substr(0, 2) + '/' + vr.substr(2, 2);
		if (tam > 4 && tam < 7)
			Campo.value = vr.substr(0, 2) + '/' + vr.substr(2, 2) + '/' + vr.substr(4, 7);
	}
}

/*Esta função seria para inserir somente números mas por ser um campo data precisa da "/" então inclui ela na função*/
function somenteNumero(campo){  
var digits="0123456789/"  
var campo_temp   
	for (var i=0;i<campo.value.length;i++){  
		campo_temp=campo.value.substring(i,i+1)   
		if (digits.indexOf(campo_temp)==-1){  
			campo.value = campo.value.substring(0,i);  
		}  
	}  
} 

/*O inicio desta função estava pronta, mas precisei adequar a utilização dela para o cenário que utilizamos no caso de quebra de fidelizações, então ela não tem uma precisão de horas e segundos pois não precisamos disso, só precisamos da quantidade de meses passados para calcular o valor da multa*/
function diferencaDatas(){
	x = document.getElementById("dataCriacao").value;
	//Formata data em padrão americano para utilizar na linha abaixo
	var dataCriacaoFormatada = x.substring(3, 5) +"/"+ x.substring(0, 2) +"/"+ x.substring(10, 6)
	var date1 = new Date(dataCriacaoFormatada);
	var date2 = new Date();
	
	if(date1 > date2){
		alert("Data de criação superior a data atual, favor preencher novamente.")
		limpaDados();
		return false;
	}else{
		var timeDiff = Math.abs(date2.getTime() - date1.getTime());
		var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24));
	} 
	
	if(diffDays > 365){
		limpaDados();
		alert("Data inválida, o intervalo máximo entre as datas é de 1 ano, preencha novamente.")
		return false;
	}
	
	mesesPassados = 0; //Funciona como o count dentro do while
	
	if(diffDays > 30){
		while(diffDays > 30){
			diffDays = diffDays - 30;
			mesesPassados = mesesPassados + 1;
			mesesRestantes = 12 - mesesPassados;
		}
	}else{
		mesesRestantes = 12;
	}
	
	document.getElementById("mesesRestantes").value = mesesRestantes;
	dataExpericao();
	valorMulta(mesesRestantes);
}

/*Soma 1 no ano de criação já que toda fidelização tem apenas um ano de diferença da data de criação*/
function dataExpericao(){
	dataCriacao = document.getElementById("dataCriacao").value;
	dataExpericao = parseInt(dataCriacao.substring(10, 6))+1;
	dataExpericaoAjudatada = dataCriacao.substring(0, 6)+dataExpericao;
	document.getElementById("dataexpiracao").value = dataExpericaoAjudatada;
}

/*Calcula o valor mensal da fidelização, somente para informação mesmo, mas é utilizada para calcular o valor final da multa*/
function valorMensal(){
	valorFidelização = document.getElementById("valorFidelizacao").value;
	valorFidelização = valorFidelização.replace(".", "");
	valorMensal =  parseInt(valorFidelização)/12;
	valorMensalDuasCasas  = parseFloat(valorMensal).toFixed(2);
	document.getElementById("valorMensal").value = valorMensalDuasCasas;
}

/*Valor mensal multiplicado pela quantidade de meses que faltam para calcular o valor APROXIMADO da multa*/
function valorMulta(mesesRestantes){
	valorMulta = document.getElementById("valorMensal").value * mesesRestantes
	document.getElementById("valorMulta").value = valorMulta;
}

/* FUNÇÃO TOTALMENTE PRONTA, somente identei para melhor visualização, e alterei para ser utilizada no meu campo de valores*/
function maskIt(w,e,m,r,a){
	// Cancela se o evento for Backspace
	if (!e) var e = window.event
	if (e.keyCode) code = e.keyCode;
	else if (e.which) code = e.which;
	// Variáveis da função
	var txt  = (!r) ? w.value.replace(/[^\d]+/gi,'') : w.value.replace(/[^\d]+/gi,'').reverse();
	var mask = (!r) ? m : m.reverse();
	var pre  = (a ) ? a.pre : "";
	var pos  = (a ) ? a.pos : "";
	var ret  = "";
	if(code == 9 || code == 8 || txt.length == mask.replace(/[^#]+/g,'').length) return false;
	// Loop na máscara para aplicar os caracteres
	for(var x=0,y=0, z=mask.length;x<z && y<txt.length;){
		if(mask.charAt(x)!='#'){
		ret += mask.charAt(x); x++; } 
		else {
		ret += txt.charAt(y); y++; x++; } 
	}
	// Retorno da função
	ret = (!r) ? ret : ret.reverse()	
	w.value = pre+ret+pos; 
}

// Novo método para o objeto 'String'
String.prototype.reverse = function(){
	return this.split('').reverse().join(''); 
};

function number_format( number, decimals, dec_point, thousands_sep ) {
	var n = number, c = isNaN(decimals = Math.abs(decimals)) ? 2 : decimals;
	var d = dec_point == undefined ? "," : dec_point;
	var t = thousands_sep == undefined ? "." : thousands_sep, s = n < 0 ? "-" : "";
	var i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;
	return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
}



</script>

</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.