Ir para conteúdo

POWERED BY:

Arquivado

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

DannyND

Dividir parcelas para pagamento

Recommended Posts

Estou criando um formulário de checkout com opção para pagamento com 2 cartões.



Quando digito o valor no CARTÃO 1, já calculo e exibo o resto no CARTÃO 2.. até ai tudo certinho, mas preciso também calcular a quantidade de parcelas e exibir em um <select >



O valor mínimo para parcelas é de R$ 10,00 sendo de no máximo 12 Parcelas.



pagto.jpg



Código (um pouco grande por causa da validação rs)



<script type="text/javascript">
String.prototype.formatMoney = function() {
var v = this;

if(v.indexOf('.') === -1) {
v = v.replace(/([\d]+)/, "$1,00");
}

v = v.replace(/([\d]+)\.([\d]{1})$/, "$1,$20");
v = v.replace(/([\d]+)\.([\d]{2})$/, "$1,$2");

return v;
};
function id( el ){
return document.getElementById( el );
}
function getMoney( el ){
var money = id( el ).value ? id( el ).value.replace( ',', '.' ) : 0;
return parseFloat( money )*100;
}
function soma()
{
var total = getMoney('vl_pedido')-getMoney('vl_pedido1');
id('vl_pedido2').value = 'R$ '+ String(total/100).formatMoney();
}
</script>

<script type="text/javascript">

$(document).ready(function(){
$('#cartaov2').validate({
rules: {
op_cartao1: { required: true},
vl_pedido1: { required: true},
num_cartao1: { required: true },
nome_cartao1: { required: true },
data_valid1: { required: true },
cod_segur1: { required: true },
qt_parcelas1: { required: true },
op_cartao2: { required: true},
num_cartao2: { required: true },
nome_cartao2: { required: true },
data_valid2: { required: true },
cod_segur2: { required: true },
qt_parcelas2: { required: true }
},
messages: {
op_cartao1: { required: 'Selecione uma opção de cartão'},
vl_pedido1: { required: 'Digite o valor para o cartão 1'},
num_cartao1:{ required: ''},
nome_cartao1:{ required: ''},
data_valid1:{ required: ''},
cod_segur1:{ required: ''},
qt_parcelas1: { required: 'Selecione uma opção de parcelamento'},
op_cartao2: { required: 'Selecione uma opção de cartão.'},
num_cartao2:{ required: ''},
nome_cartao2:{ required: ''},
data_valid2:{ required: ''},
cod_segur2:{ required: ''},
qt_parcelas2: { required: 'Selecione uma opção de parcelamento'}
},
submitHandler: function( form ){
var dados = $( form ).serialize();

$.ajax({
type: "POST",
url: "processa_cartao2.php",
data: dados,

success: function( dados ){
alert( dados );

if(dados == parseInt("1")){
window.location="finaliza.php";
}else{
$("#contentee").html("<font color='red' size='1'>Cartão inválido!</font>");
}
}

});

return false;
}
});
});
</script>
<style>
.loading { display: none; }
input.error { border: 1px solid #f00; }
</style>

<div id="noticia2">
<h2 class='titulo_noticia'>2 Cartões de Crédito</h2>
<p class='texto_noticia'>
<form name="cartaov2" class="formulario" id="cartaov2" method='post' action=''>
<input type='hidden' name='total_carrinho' value='<?=$total_carrinho?>'>
<input type='hidden' name='sessao' value='<?=session_id()?>'>
<input type='hidden' name='cliente' value='<?=$_SESSION['cmpCD_CLIENTE']?>'>
<input type='hidden' name='vl_pedido' id='vl_pedido' value='<?=money($total_carrinho)?>'>
<table width='100%'>
<tr>
<td width='50%'>
<table width='100%'>
<tr><td class='subtitulo_noticia' colspan="2">Cartão de Crédito 1</td></tr>
<tr><td height='5'></td></tr>
<tr>
<td colspan='2' align='center'>
<table>
<tr><td colspan="6"><label for="op_cartao1" class="error"></label></td></tr>
<tr>
<td class='texto_noticia'>
<INPUT TYPE="radio" NAME="op_cartao1" value='visa'>
</td>
<td class='texto_noticia' width='20%'>
<IMG SRC="images/internas/visa.png" WIDTH="52" HEIGHT="26" BORDER="0" ALT="">
</td>
<td class='texto_noticia'>
<INPUT TYPE="radio" NAME="op_cartao1" VALUE="mast">
</td>
<td class='texto_noticia' width='20%'>
<IMG SRC="images/internas/master.png" WIDTH="52" HEIGHT="26" BORDER="0" ALT="">
</td>
<td class='texto_noticia'>
<INPUT TYPE="radio" NAME="op_cartao1" VALUE="disc">
</td>
<td class='texto_noticia' width='20%'>
<IMG SRC="images/internas/diners.png" HEIGHT="26" BORDER="0" ALT="">
</td>
<td class='texto_noticia'>
<INPUT TYPE="radio" NAME="op_cartao1" VALUE="amex">
</td>
<td class='texto_noticia' width='20%'>
<IMG SRC="images/internas/american.png" HEIGHT="26" BORDER="0" ALT="">
</td>
<td class='texto_noticia'>
<INPUT TYPE="radio" NAME="op_cartao1" value="hiper">
</td>
<td class='texto_noticia' width='20%'>
<IMG SRC="images/internas/hiper.png" HEIGHT="26" BORDER="0" ALT="">
</td>
<td class='texto_noticia'>
<INPUT TYPE="radio" NAME="op_cartao1" value="elo">
</td>
<td class='texto_noticia' width='20%'>
<IMG SRC="images/internas/elo.png" HEIGHT="26" BORDER="0" ALT="">
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td class='texto_noticia' align='right'>Valor R$ </td>
<td>
<INPUT TYPE="text" NAME="vl_pedido1" id="vl_pedido1" class='input_noticia' maxlength='16' size='29' onkeyup="soma()">
</td>
</tr>
<tr><td height='5'></td></tr>
<tr>
<td class='texto_noticia' align='right'>número do cartão </td>
<td><INPUT TYPE="text" NAME="num_cartao1" class='input_noticia' maxlength='16' size='29'></td>
</tr>
<tr><td height='5'></td></tr>
<tr>
<td class='texto_noticia' align='right' width='32%'>nome impresso cartão </td>
<td><INPUT TYPE="text" NAME="nome_cartao1" class='input_noticia' size='29'></td>
</tr>
<tr><td height='5'></td></tr>
<tr>
<td class='texto_noticia' align='right'>validade </td>
<td><INPUT TYPE="text" NAME="data_valid1" class='input_noticia' maxlength='5' size='4'></td>
</tr>
<tr><td height='5'></td></tr>
<tr>
<td class='texto_noticia' align='right'>cód. segurança </td>
<td><INPUT TYPE="text" NAME="cod_segur1" class='input_noticia' size='4'></td>
</tr>
<tr><td height='5'></td></tr>
<tr>
<td class='texto_noticia' align='right'>pagar em: </td>
<td>
<select class="selecionar_parc" NAME="qt_parcelas1" class='input_noticia' id="qt_parcelas1">
<?php
for ($i = 1; $i <= 12; $i++ )
{
$parcela = ( $vl_pedido1 / $i );

if($parcela > $vl_min_parc):
if ( $parcela < $qt_parc)
break;
echo '<option value="'.$i.'">'.$i. " x de R$ ".money($parcela)."<br />";
endif;
}

?>
</select>
</td>
</tr>
<tr><td></td><td colspan="2"><label for="qt_parcelas1" class="error"></label></td></tr>
</table>
</td>
<td width='50%'>
<table width='100%'>
<tr><td class='subtitulo_noticia' colspan="2">Cartão de Crédito 2</td></tr>
<tr><td height='5'></td></tr>
<tr>
<td colspan='2' align='center'>
<table>
<tr><td colspan="6"><label for="op_cartao2" class="error"></label></td></tr>
<tr>
<td class='texto_noticia'>
<INPUT TYPE="radio" NAME="op_cartao2" value='visa'>
</td>
<td class='texto_noticia' width='20%'>
<IMG SRC="images/internas/visa.png" WIDTH="52" HEIGHT="26" BORDER="0" ALT="">
</td>
<td class='texto_noticia'>
<INPUT TYPE="radio" NAME="op_cartao2" VALUE="mast">
</td>
<td class='texto_noticia' width='20%'>
<IMG SRC="images/internas/master.png" WIDTH="52" HEIGHT="26" BORDER="0" ALT="">
</td>
<td class='texto_noticia'>
<INPUT TYPE="radio" NAME="op_cartao2" VALUE="disc">
</td>
<td class='texto_noticia' width='20%'>
<IMG SRC="images/internas/diners.png" HEIGHT="26" BORDER="0" ALT="">
</td>
<td class='texto_noticia'>
<INPUT TYPE="radio" NAME="op_cartao2" VALUE="amex">
</td>
<td class='texto_noticia' width='20%'>
<IMG SRC="images/internas/american.png" HEIGHT="26" BORDER="0" ALT="">
</td>
<td class='texto_noticia'>
<INPUT TYPE="radio" NAME="op_cartao2" value="hiper">
</td>
<td class='texto_noticia' width='20%'>
<IMG SRC="images/internas/hiper.png" HEIGHT="26" BORDER="0" ALT="">
</td>
<td class='texto_noticia'>
<INPUT TYPE="radio" NAME="op_cartao2" value="elo">
</td>
<td class='texto_noticia' width='20%'>
<IMG SRC="images/internas/elo.png" HEIGHT="26" BORDER="0" ALT="">
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td class='texto_noticia' align='right'>Valor R$ </td>
<td>
<INPUT TYPE="text" NAME="vl_pedido2" id="vl_pedido2" class='input_noticia' maxlength='16' size='29' readonly="readonly">
</td>
</tr>
<tr><td height='5'></td></tr>
<tr>
<td class='texto_noticia' align='right'>número do cartão </td>
<td><INPUT TYPE="text" NAME="num_cartao2" class='input_noticia' maxlength='16' size='29'></td>
</tr>
<tr><td height='5'></td></tr>
<tr>
<td class='texto_noticia' align='right'>nome impresso cartão </td>
<td><INPUT TYPE="text" NAME="nome_cartao2" class='input_noticia' size='29'></td>
</tr>
<tr><td height='5'></td></tr>
<tr>
<td class='texto_noticia' align='right'>validade </td>
<td><INPUT TYPE="text" NAME="data_valid2" class='input_noticia' maxlength='5' size='4'></td>
</tr>
<tr><td height='5'></td></tr>
<tr>
<td class='texto_noticia' align='right'>cód. segurança </td>
<td><INPUT TYPE="text" NAME="cod_segur2" class='input_noticia' size='4'></td>
</tr>
<tr><td height='5'></td></tr>
<tr>
<td class='texto_noticia' align='right'>pagar em: </td>
<td>
<select class="selecionar_parc" NAME="qt_parcelas2" class='input_noticia' id="qt_parcelas2">
<?php
for ($i = 1; $i <= 12; $i++ )
{
$parcela = ( $vl_pedido1 / $i );

if($parcela > $vl_min_parc):
if ( $parcela < $qt_parc)
break;
echo '<option value="'.$i.'">'.$i. " x de R$ ".money($parcela)."<br />";
endif;
}

?>
</select>
</td>
</tr>
<tr><td></td><td colspan="2"><label for="qt_parcelas2" class="error"></label></td></tr>
</table>
</td>
</tr>
<!-- resposta -->
<tr><td></td><td colspan="2"><div id="contentee"></div></td></tr>
<tr>
<td colspan="3" align='right'>
<input type="submit" value="" id="enviar" class="botao_fim"/>
</td>
</tr>

</table>

</form>
</p>
</div>

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Publiquei no javascript e no PHP..é o mesmo post.

Código simplificado:

 

DEMO: http://catalogo.lojasguaibim.com.br/arquivos/index.php

<?
$total_carrinho = "949,80";

$vl_min_parc = 10; #mínimo de $10 por parcela
$qt_max_parc = 12; #quantidade máxima de parcelas

if($total_carrinho > $vl_min_parc):

  $qt_parc = floor($total_carrinho / $vl_min_parc);
  
  if($qt_parc > $qt_max_parc):
	$qt_parc = $qt_max_parc;
  else:
	$qt_parc = $qt_parc;
  endif;

  $vl_parc = ($total_carrinho / $qt_parc);
 else:
  $qt_parc = 1;
  $vl_parc = $total_carrinho;
 endif;
?>

<script type="text/javascript">
String.prototype.formatMoney = function() {
	var v = this;

	if(v.indexOf('.') === -1) {
		v = v.replace(/([\d]+)/, "$1,00");
	}

	v = v.replace(/([\d]+)\.([\d]{1})$/, "$1,$20");
	v = v.replace(/([\d]+)\.([\d]{2})$/, "$1,$2");

	return v;
};
function id( el ){
	return document.getElementById( el );
}
function getMoney( el ){
	var money = id( el ).value ? id( el ).value.replace( ',', '.' ) : 0;
	return parseFloat( money )*100;
}
function soma()
{
	var total = getMoney('vl_pedido')-getMoney('vl_pedido1');
	id('vl_pedido2').value = ''+ String(total/100).formatMoney();
}
</script>

<table>
<tr>
	<td>
	Digitar valor para pagamento no CARTÃO 1<br>
	Exibir resto no CARTÃO 2<br>
	Dividir parcelas dos dois valores, sendo parcelas de no mínimo R$ 10,00
	</td>
</tr>
</table>
<p>
<table>
<tr>
	<td colspan=2><strong>TOTAL DO PEDIDO R$ <INPUT TYPE="text" NAME="vl_pedido" id="vl_pedido" value="<?=$total_carrinho?>" maxlength='16' size='29' readonly></strong></td>
</tr>
<tr>
	<td>Valor CARTÃO 1</td>
	<td><INPUT TYPE="text" NAME="vl_pedido1" id="vl_pedido1" maxlength='16' size='29'  onkeyup="soma()"></td>
	<td>
		<select NAME="qt_parcelas2" id="qt_parcelas2">
			<option value="">selecione</option>
			<?php
			for ($i = 1; $i <= 12; $i++ )
			{
			   $parcela = ( $vl_pedido1 / $i );

			   if($parcela > $vl_min_parc):
				if ( $parcela < $qt_parc)
					break;
					echo '<option value="'.$i.'">'.$i. " x de R$ ".money($parcela)."<br />";
			   endif;
			}
			?>
		</select>
	</td>
</tr>
<tr>
	<td>Valor CARTÃO 2</td>
	<td><INPUT TYPE="text" NAME="vl_pedido2" id="vl_pedido2" maxlength='16' size='29'></td>
	<td>
		<select NAME="qt_parcelas2" id="qt_parcelas2">
			<option value="">selecione</option>
			<?php
			for ($i = 1; $i <= 12; $i++ )
			{
			   $parcela = ( $vl_pedido1 / $i );

			   if($parcela > $vl_min_parc):
				if ( $parcela < $qt_parc)
					break;
					echo '<option value="'.$i.'">'.$i. " x de R$ ".money($parcela)."<br />";
			   endif;
			}

			?>
		</select>
	</td>
</tr>
</table>

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Qual a lógica disso? :huh:

 

Não era post criado por mim e estava como resolvido, então fiquei com dúvida se seria respondido ou não.

você tem alguma duvida especifica ou realmente espera q eu poste um codigo pronto aqui pra você?

 

Preciso que as parcelas sejam geradas no combobox conforme o que é digitado no VALOR 1.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para pegar as parcelas você vai dividir o valor que você quer dividir, pelo valor da parcela minima

isso vai te dar a quantidade de parcelas possível;

Depois faz um for para adicionar cada parcela, limita ele pela quantidade máxima de parcelas e no máximo doze, cria o html com os options e enfia dentro do select.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O bicho tá pegando pra mim para fazer o for dentro do javascript, pois já tenho essa lógica na parte PHP.

 

PHP

$vl_pedido1 = "800";
for ($i = 1; $i <= $qt_max_parc; $i++ )
{
   $parcela = ( $vl_pedido1 / $i );
	if($parcela > $vl_min_parc):

	   if ( $parcela < $qt_parc)
		break;
		echo '<option value="'.$i.'">'.$i. " x de R$ ".money($parcela)."<br />";
	   endif;
}
function soma()
{
	//valor1
	var valor1 = document.getElementById('vl_pedido1').value;

	valor1 = valor1.replace(/,/gi, ".");

	var qt_max_parc = '12';
	var qt_max_vl   = '10.00';
	var qt_parcelas1 = String(valor1 / qt_max_vl);

	//como enviar qt_parcelas1 para o combobox?


	//valor 2
	var total = getMoney('vl_pedido')-getMoney('vl_pedido1');
	id('vl_pedido2').value = String(total/100).formatMoney();

	var vlpedido2 = id('vl_pedido2').value = String(total/100).formatMoney();
	var valor2 = vlpedido2; //resto é a variável total ou vlpedido2
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

não cheguei a testar mas acho que com isso você consegue colocar os options dentro do select.

Você provavelmente vai ter que ajustar as ids para usar as do seu código e formatar as saídas.

/**
 * Created by Leandro on 06/05/14.
 */


function soma()
{
    //valor1
    var valor1 = document.getElementById('vl_pedido1').value;

    valor1 = valor1.replace(/,/gi, ".");

    var qt_max_parc = 12;
    var qt_max_vl   = 10.00;
    var qt_parcelas1 = valor1 / qt_max_vl;
    qt_parcelas1=Math.floor(qt_parcelas1);//arredonda em inteiro para baixo
    //como enviar qt_parcelas1 para o combobox?
    
    if(qt_parcelas1>12){
        qt_parcelas=12;
    }else if(qt_parcelas<1){
        qt_parcelas=1;
    }

    var option;
    var campo_select=document.getElementById("idDoSelect");
    for(i=1;i<=qt_parcelas;i++){
        option = document.createElement("option");
        option.text = valor1/i;
        campo_select.add(option);
    }
    //valor 2
    var total = getMoney('vl_pedido')-getMoney('vl_pedido1');
    id('vl_pedido2').value = String(total/100).formatMoney();

    var vlpedido2 = id('vl_pedido2').value = String(total/100).formatMoney();
    var valor2 = vlpedido2; //resto é a variável total ou vlpedido2
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa @Playerbr, funcionou sim, só que se eu quiser mudar o valor, as parcelas no combobox continuam do anterior.

E como faço para mostrar mais "bonitinho" no combo, tipo " X vezes de R$ XX,XX"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quem é responsável por montar o que vai ser mostrado pelos selects é:

option.text = valor1/i;

Adicione um tratamento nos dados antes de colocar no select

var texto_option;
var valor_formatado;
var campo_select=document.getElementById("idDoSelect");
    for(i=1;i<=qt_parcelas;i++){
        valor_formatado=valor1/i;
        valor_formatado=valor_formatado.toFixed(2);
        valor_formatado=String(valor_formatado);
        valor_formatado=valor_formatado.replace(".",",");
        texto_option= i+' x de R$'+valor_formatado;
option = document.createElement("option");
        option.text = valor1/i;
        campo_select.add(option);
    }

Pra fazer de forma dinâmica, coloque o cálculo em uma função e dispare ela em um evento.

A formatação de decimal é bom criar uma função separada e chamar ela sempre que precisar formatar um número

Compartilhar este post


Link para o post
Compartilhar em outros sites

A formatação funcionou, mas ainda falta mostrar as parcelas do VALOR 2, segue o código completo:

 

Exemplo de funcionamento: AQUI

 

Mais dois detalhes:

1 - Se eu colocar um valor menor ou igual 100 não gera as parcelas

2 - Se eu alterar o VALOR 1, não atualiza as parcelas

<?php$total_carrinho = "949,90";?><script type="text/javascript">String.prototype.formatMoney = function() {	var v = this;	if(v.indexOf('.') === -1) {		v = v.replace(/([\d]+)/, "$1,00");	}	v = v.replace(/([\d]+)\.([\d]{1})$/, "$1,$20");	v = v.replace(/([\d]+)\.([\d]{2})$/, "$1,$2");	return v;};function id( el ){	return document.getElementById( el );}function getMoney( el ){	var money = id( el ).value ? id( el ).value.replace( ',', '.' ) : 0;	return parseFloat( money )*100;}function soma(){    //valor1    var valor1 = document.getElementById('vl_pedido1').value;    valor1 = valor1.replace(/,/gi, ".");    var qt_max_parc = 12;    var qt_max_vl   = 10.00;	var qt_parcelas1 = valor1 / qt_max_vl;    qt_parcelas1=Math.floor(qt_parcelas1);//arredonda em inteiro para baixo        if(qt_parcelas1>12){        qt_parcelas11=12;    }else if(qt_parcelas1<1){        qt_parcelas11=1;    }	var texto_option;	var valor_formatado;	var campo_select=document.getElementById("qt_parcelas1v2");		for(i=1;i<=qt_parcelas11;i++){			option = document.createElement("option");			valor_formatado=valor1/i;			valor_formatado=valor_formatado.toFixed(2);			valor_formatado=String(valor_formatado);			valor_formatado=valor_formatado.replace(".",",");			option.text = i+' x de R$ '+(valor_formatado);			campo_select.add(option);       }    //total    var total = getMoney('vl_pedido')-getMoney('vl_pedido1');    id('vl_pedido2').value = String(total/100).formatMoney();	//valor 2    var qt_parcelas2 = valor2 / qt_max_vl;    qt_parcelas2=Math.floor(qt_parcelas2);//arredonda em inteiro para baixo        if(qt_parcelas2>12){        qt_parcelas22=12;    }else if(qt_parcelas2<1){        qt_parcelas22=1;    }	var texto_option;	var valor_formatado;	var campo_select=document.getElementById("qt_parcelas2v2");		for(i=1;i<=qt_parcelas22;i++){			option = document.createElement("option");			valor_formatado=valor1/i;			valor_formatado=valor_formatado.toFixed(2);			valor_formatado=String(valor_formatado);			valor_formatado=valor_formatado.replace(".",",");			option.text = i+' x de R$ '+(valor_formatado);			campo_select.add(option);       }}</script><form name="cartaov2" id="cartaov2" method='post' action=''><table><tr>	<td>	Digitar valor para pagamento no CARTÃO 1<br>	Exibir resto no CARTÃO 2<br>	Dividir parcelas dos dois valores, sendo parcelas de no mínimo R$ 10,00	</td></tr></table><p><table><tr>	<td colspan=2><strong>TOTAL DO PEDIDO R$ <INPUT TYPE="text" NAME="vl_pedido" id="vl_pedido" value="<?=$total_carrinho?>" maxlength='16' size='29' readonly></strong></td></tr><tr>	<td>Valor CARTÃO 1</td>	<td><INPUT TYPE="text" NAME="vl_pedido1" id="vl_pedido1" maxlength='16' size='29'  onchange="soma()"></td>	<td>pagar em			<select NAME="qt_parcelas1v2" id="qt_parcelas1v2">			<option value="">selecione</option>		</select>	</td></tr><tr>	<td>Valor CARTÃO 2</td>	<td><INPUT TYPE="text" NAME="vl_pedido2" id="vl_pedido2" maxlength='16' size='29'></td>	<td>pagar em		<select NAME="qt_parcelas2v2" id="qt_parcelas2v2">			<option value="">selecione</option>		</select>	</td></tr></table></form>

Alguém?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguém?

Além de mendigar no fórum, você já tentou alterar? Se sim mostra ai pra gente as tentativas...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Além de mendigar no fórum, você já tentou alterar? Se sim mostra ai pra gente as tentativas...

 

Que isso rapaz.. lógico que já tentei e muito .. to o dia todo tentando fazer funcionar.

O melhor código é o que está publicado acima, pois as modificações fizeram parar de funcionar até o cálculo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro que ele dá por causa das parcelas menor que 100 é por causa da variável qt_parcelas1,

isso deve resolver.

var qt_parcelas1 = valor1 / qt_max_vl;
qt_parcelas1=Math.floor(qt_parcelas1);//arredonda em inteiro para baixo

if(qt_parcelas1>12){
qt_parcelas1=12;
}else if(qt_parcelas1<1){
qt_parcelas1=1;
}

    var texto_option;
    var valor_formatado;
    var campo_select=document.getElementById("qt_parcelas1v2");
        for(i=1;i<=qt_parcelas1;i++){
            option = document.createElement("option");
            valor_formatado=valor1/i;
            valor_formatado=valor_formatado.toFixed(2);
            valor_formatado=String(valor_formatado);
            valor_formatado=valor_formatado.replace(".",",");
            option.text = i+' x de R$ '+(valor_formatado);
            campo_select.add(option);
}

Pra fazer o ajuste, coloque o cálculo e formatação em uma função, chame essa função no evento onblur, ou crie um botão para recalcular.

Você vai ter que fazer muita coisa ainda nessa página, se não tiver conhecimento em js, estude ou trabalhe com ferramentas que já domina como php..

Um bom site para js é o w3schools.com e aprenda a depurar com o chrome, dê uma pesquisadinha, vai te permitir resolver muita coisa.

Compartilhar este post


Link para o post
Compartilhar em outros sites


<?

$calc = $this->cart->total();

 

for($i=1;$i<7;$i++){

//if(($calc/$i)>50){

if($i>0)$parc = ($calc/$i);

if($i==1)$parc = $calc;

$qq = $i;

//if($parc<50) break;

?>

 

<?if($i==1){?>

<li class="ct-ppc-pc-stripe"><label><input type="radio" name="optParcels" class="optParcels" value="<?=$qq?>" checked><span>

À vista

<?}else{?>

<li class="ct-ppc-pc-stripe"><label><input type="radio" name="optParcels" class="optParcels" value="<?=$qq?>"><span>

<?=$qq?>x sem juros

<?}?>

</span><span class="ct-ppc-pc-value">R$ <?=number_format($parc, 2, ',', '.')?></span></label></li>

<?

//}

}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui gerar os 2 combobox de parcelas da seguinte forma:

<script type="text/javascript">
String.prototype.formatMoney = function() {
	var v = this;

	if(v.indexOf('.') === -1) {
		v = v.replace(/([\d]+)/, "$1,00");
	}

	v = v.replace(/([\d]+)\.([\d]{1})$/, "$1,$20");
	v = v.replace(/([\d]+)\.([\d]{2})$/, "$1,$2");

	return v;
};

function id( el ){
	return document.getElementById( el );
}

function getMoney( el ){
	var money = id( el ).value ? id( el ).value.replace( ',', '.' ) : 0;
	return parseFloat( money )*100;
}

function soma()
{
    //valor1
    var valor1 = document.getElementById('vl_pedido1').value;

    valor1 = valor1.replace(/,/gi, ".");

    var qt_max_parc = 12;
    var qt_max_vl   = 10.00;

	var qt_parcelas1 = valor1 / qt_max_vl;
	qt_parcelas1=Math.floor(qt_parcelas1);//arredonda em inteiro para baixo

	if(qt_parcelas1>12){
	qt_parcelas1=12;
	}else if(qt_parcelas1<1){
	qt_parcelas1=1;
	}

    var texto_option;
    var valor_formatado;
    var campo_select=document.getElementById("qt_parcelas1v2");
        for(i=1;i<=qt_parcelas1;i++){
            option = document.createElement("option");
            valor_formatado=valor1/i;
            valor_formatado=valor_formatado.toFixed(2);
            valor_formatado=String(valor_formatado);
            valor_formatado=valor_formatado.replace(".",",");
            option.text = i+' x de R$ '+(valor_formatado);
            campo_select.add(option);
		}

    //gera resto e parcelas do VALOR 2
    var total = getMoney('vl_pedido')-getMoney('vl_pedido1');
    id('vl_pedido2').value = String(total/100).formatMoney();
	
    var valor2 = id('vl_pedido2').value = String(total/100).formatMoney();
	valor2 = valor2.replace(/,/gi, ".");

	var qt_parcelas2 = valor2 / qt_max_vl;
	qt_parcelas2=Math.floor(qt_parcelas2);//arredonda em inteiro para baixo

	if(qt_parcelas2>12){
	qt_parcelas2=12;
	}else if(qt_parcelas2<1){
	qt_parcelas2=1;
	}

    var texto_option2;
    var valor_formatado2;
    var campo_select=document.getElementById("qt_parcelas2v2");
        for(i=1;i<=qt_parcelas2;i++){
            option = document.createElement("option");
            valor_formatado2=valor2/i;
            valor_formatado2=valor_formatado2.toFixed(2);
            valor_formatado2=String(valor_formatado2);
            valor_formatado2=valor_formatado2.replace(".",",");
            option.text = i+' x de R$ '+(valor_formatado2);
            campo_select.add(option);
		}

}
</script>

Agora só falta atualizar assim que modifica o VALOR 1, pois não atualiza as parcelas se eu mudar o valor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, tenho o código abaixo que divide um valor base em 2, dependendo do que é digitado no VALOR 1.

O problema é que quando o valor base é maior que 999,00 não calcula corretamente.

E quando altero o VALOR 1 não atualiza as parcelas.

 

DEMO: aqui

<?php
$total_carrinho = "2.230,00";
?>

<script type="text/javascript">
String.prototype.formatMoney = function() {
	var v = this;

	if(v.indexOf('.') === -1) {
		v = v.replace(/([\d]+)/, "$1,00");
	}

	v = v.replace(/([\d]+)\.([\d]{1})$/, "$1,$20");
	v = v.replace(/([\d]+)\.([\d]{2})$/, "$1,$2");

	return v;
};

function id( el ){
	return document.getElementById( el );
}

function getMoney( el ){
	var money = id( el ).value ? id( el ).value.replace( ',', '.' ) : 0;
	return parseFloat( money )*100;
}

function soma()
{
    //valor1
    var valor1 = document.getElementById('vl_pedido1').value;

    valor1 = valor1.replace(/,/gi, ".");

    var qt_max_parc = 12;
    var qt_max_vl   = 10.00;

	var qt_parcelas1 = valor1 / qt_max_vl;
	qt_parcelas1=Math.floor(qt_parcelas1);//arredonda em inteiro para baixo

	if(qt_parcelas1>12){
	qt_parcelas1=12;
	}else if(qt_parcelas1<1){
	qt_parcelas1=1;
	}

    var texto_option;
    var valor_formatado;
    var campo_select=document.getElementById("qt_parcelas1v2");
        for(i=1;i<=qt_parcelas1;i++){
            option = document.createElement("option");
            valor_formatado=valor1/i;
            valor_formatado=valor_formatado.toFixed(2);
            valor_formatado=String(valor_formatado);
            valor_formatado=valor_formatado.replace(".",",");
            option.text = i+' x de R$ '+(valor_formatado);
            campo_select.add(option);
		}

    //gera resto no VALOR 2
    var total = getMoney('vl_pedido')-getMoney('vl_pedido1');
    id('vl_pedido2').value = String(total/100).formatMoney();
	
    var valor2 = id('vl_pedido2').value = String(total/100).formatMoney();
	valor2 = valor2.replace(/,/gi, ".");

	var qt_parcelas2 = valor2 / qt_max_vl;
	qt_parcelas2=Math.floor(qt_parcelas2);//arredonda em inteiro para baixo

	if(qt_parcelas2>12){
	qt_parcelas2=12;
	}else if(qt_parcelas2<1){
	qt_parcelas2=1;
	}

    var texto_option2;
    var valor_formatado2;
    var campo_select=document.getElementById("qt_parcelas2v2");
        for(i=1;i<=qt_parcelas2;i++){
            option = document.createElement("option");
            valor_formatado2=valor2/i;
            valor_formatado2=valor_formatado2.toFixed(2);
            valor_formatado2=String(valor_formatado2);
            valor_formatado2=valor_formatado2.replace(".",",");
            option.text = i+' x de R$ '+(valor_formatado2);
            campo_select.add(option);
		}

}
</script>

<form name="cartaov2" id="cartaov2" method='post' action=''>
<table>
<tr>
	<td>
	Digitar valor para pagamento no CARTÃO 1<br>
	Exibir resto no CARTÃO 2<br>
	Dividir parcelas dos dois valores, sendo parcelas de no mínimo R$ 10,00<br>
	Máximo de parcelas: 12x
	</td>
</tr>
</table>
<p>
<table>
<tr>
	<td colspan=2><strong>TOTAL DO PEDIDO R$ <INPUT TYPE="text" NAME="vl_pedido" id="vl_pedido" value="<?=$total_carrinho?>" maxlength='16' size='29' readonly></strong></td>
</tr>
<tr>
	<td>Valor CARTÃO 1</td>
	<td>
		<!--  <INPUT TYPE="text" NAME="vl_pedido1" id="vl_pedido1" maxlength='16' size='29'  onchange="soma()">-->
		<INPUT TYPE="text" NAME="vl_pedido1" id="vl_pedido1" maxlength='16' size='29'  onchange="soma();">
	</td>
	<td>pagar em	
		<select class="selecionar_parc" NAME="qt_parcelas1v2" class='input_noticia' id="qt_parcelas1v2"></select>
	</td>
</tr>
<tr>
	<td>Valor CARTÃO 2</td>
	<td>
		<INPUT TYPE="text" NAME="vl_pedido2" id="vl_pedido2" maxlength='16' size='29' readonly="readonly">
	</td>
	<td>pagar em
		<select class="selecionar_parc" NAME="qt_parcelas2v2" class='input_noticia' id="qt_parcelas2v2"></select>
	</td>
</tr>
</table>
</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos fazer aquele mobral básico:

1 - Coloquei o valor base 1100 e o valor do primeiro cartão de 500, o resultado no cartão 2 foi 600, então aparentemente está ok;

2 - Ele calcula sim, o que está ocorrendo é que você deveria limpar o select antes de add as parcelas, pois se você calcular 2 vezes as parcelas recalculadas vão aparecer abaixo das que já existiam.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos fazer aquele mobral básico:

1 - Coloquei o valor base 1100 e o valor do primeiro cartão de 500, o resultado no cartão 2 foi 600, então aparentemente está ok;

2 - Ele calcula sim, o que está ocorrendo é que você deveria limpar o select antes de add as parcelas, pois se você calcular 2 vezes as parcelas recalculadas vão aparecer abaixo das que já existiam.

 

Coloca 1.000,00 no valor base e veja o que acontece.

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.