Gerando Parcelas para Contrato

Sei ser um assunto já batido aqui, inclusive temos tópico com código a respeito.

Mas a pedido de um colega, cujo a necessidade é criar as parcelas de um contrato com a primeira parcela vencendo em data informada e as demais sempre no mesmo dia dos meses seguintes, adaptei o código para essa situação.

No caso, em específico, estamos prevendo o último dia do mês e anos bissextos, para que haja sempre uma parcela em cada mês obrigatóriamente.


Informando o primeiro vencimento para cair no dia 31, o método traz para o último dia de cada mês.
Se for dia 30,29 traz para o último dia de fevereiro correspondente.


O Código:
Evento onLoad:
sc_include_library('prj','actions','actions-master/class/DataGrid.class.php');
mostraParcelas();

Método mostraParcelas():

if (empty({nroParcelas}) or empty({valor})  or empty({primeiroVencto})) return;

$_parcelas	= [];
$_valor		= round({valor} / {nroParcelas},2);
$_valor1	= round($_valor+{valor}-($_valor*{nroParcelas}),2);
$dt = new DateTime({primeiroVencto});
$dia 		= $dt->format("d");
$mes 		= $dt->format("m");
$ano		= $dt->format("Y");

for ($i=1;$i<={nroParcelas};$i++) {
	//echo "$dia / $mes / $ano<br>";
	if ($i==1) {
		$_parcelas[]=[$i,$_valor1,{primeiroVencto}];
	}else{
		$mes++;
		if ($mes == 13) {
			$ano++;$mes=1;
		}
		if ($mes == 2 and in_array($dia, [29,30,31])) {
			if (date('L', mktime(0, 0, 0, 1, 1, $ano))) {
				$dia2 = 29;
			}else{ 
				$dia2 = 28;
			}
		}
		if ($mes != 2) {
			if (in_array($mes,[4,6,9,11])  and $dia == 31) {
				$dia2 = 30;
			}else{
				$dia2 = $dia;
			}
		}
		$dia = str_pad($dia, 2, "0", STR_PAD_LEFT);
		$mes = str_pad($mes, 2, "0", STR_PAD_LEFT);
		$_parcelas[]=[$i,$_valor,$ano.'-'.$mes.'-'.$dia2];
	}
}


//echo '<pre>'; print_r($_parcelas); echo '</pre>';

$dg = new DataGrid(3);

$dg->addHeader(['N.Parc','Valor','Vencimento']);

$dg->setZebraColor('GRAY');

foreach ($_parcelas as $value) {
	$value[1]='R$ '.number_format($value[1],2,',','.');
	$dt = new DateTime($value[2]);
	$value[2] = $dt->format("d/m/Y");
	$dg->addCell($value);
}				
{Parcelas} = $dg->create();	

TGS: PARCELAS, CONTRATO, HAROLDO

1 Curtida

Caro Haroldo, primeiramente muito obrigado pelas suas dicas e contribuições. Gostaria de tirar uma dúvida, por favor: Vi que você usou essa linha aqui “sc_include_library(‘prj’,‘actions’,‘actions-master/class/DataGrid.class.php’);”

Sei que é uma classe de sua autoria, pois já vi em alguns vídeos, minha pergunta é: você disponibiliza essa classe?
Obrigado!

1 Curtida

Obrigado meu nobre, seu conteúdo é top!! Valeu mesmo!

Haroldo qual seria a solução se em vez de gerar um valor fixo, eu pudesse escolher o valor das parcelas, por exemplo 1 parcela seria 300,50 a outra 200,50 e assim por diante?

vai informando cada parcela e calculando um saldo para colocar na ultima parcela.

Eu tinha pensado da seguinte forma: quando eu informo qual seria a condição de pagamento, ele abriria inputs pra eu informar os valores, so que ia teria que ser inputs “automaticos” dependendo da quantidade de parcelas , so que eu não sei com qual linguagem seria mais facil de pegar o retorno desses inputs e jogar no include junto

vc pode deixar um input só, e ao ir digitando nesse input vc add uma parcela

desculpe hoje meu cerebro ta mais devagar do que eu gostaria, deixa eu ver se eu entendi, no caso eu digitaria o valor e ai ele “salvaria” e ja abriria a proxima coluna pra eu digitar o outro valor?

não. vc dar enter ele salva o valor, limpa o campo e permanece no mesmo campo(input).

Jeito SC: criar uma tabela temporaria (depois de salvar o formulario mestre vc move os dados da tabela temp para a tabela definitiva e limpa a tabela temp) com um formulário grid view editável ou muiti registros) e usa-lo como detalhe de uma formulario mestre (particularmente não gosto dessa sugestão).

1 Curtida

top beleza obrigada pela dica