Calculate input value in splitting - PHP

0

Based on the function below, how can I consider and calculate the value of the entry in the installment, so that the remainder is divided in equal parts for the other installments?

function calculo_negociacao($valor_total, $parcelas, $dt_vencimento, $valor_entrada) {  
    $parcelado = [];

    $valor = $valor_total / $parcelas;
    $valor = number_format((float)$valor, 2, '.', '');

    $parcelado = array_fill(0, $parcelas, ['valor' => $valor]);

    $dt_vencimento = explode( '-', $dt_vencimento);
    $dia = $dt_vencimento[0];
    $mes = $dt_vencimento[1];
    $ano = $dt_vencimento[2];

    for($x = 0; $x < $parcelas; $x++){
        $parcelado[$x]['parcela'] = $x + 1; 
        $parcelado[$x]['dt_vencimento'] = date("Y-m-d",strtotime("+".$x." month",mktime(0, 0, 0, $mes, $dia, $ano)));
    }       
    return $parcelado;
}

$valor = 150.07;
$valor_entrada= 50.00;
$parcela = 4;
$dt_vencimento = '04-09-2018';
$negociacao = calculo_negociacao($valor, $parcela, $dt_vencimento, $valor_entrada);
var_dump($negociacao);
echo json_encode($negociacao);
    
asked by anonymous 04.09.2018 / 21:11

1 answer

1

You can only check if there is $valor_entrada in specific points of the function to change its behavior, without having to separate into 2 distinct blocks that do something very similar. See the code below

<?php

function calculo_negociacao($valor_total, $parcelas, $dt_vencimento, $valor_entrada) {  
    $parcelado = [];
    $inicio = 0;

    if ($valor_entrada > 0) {
        $inicio = 1;
        $valor_total = $valor_total - $valor_entrada;
    }

    $valor = $valor_total / ($parcelas - $inicio); // reduzimos 1 parcela se houver entrada ou 0 se nao
    $valor = number_format((float)$valor, 2, '.', '');

    $parcelado = array_fill($inicio, $parcelas - $inicio, ['valor' => $valor]); // $parcelas - 1 pois será menos 1 com a entrada ou 0 se nao houver

    // só depois de calcularmos todos é que podemos adicionar a entrada no inicio
    if ($valor_entrada > 0) {
        array_unshift($parcelado, ['valor' => number_format((float)$valor_entrada, 2, '.', '')]);
    }

    $dt_vencimento = explode( '-', $dt_vencimento);
    $dia = $dt_vencimento[0];
    $mes = $dt_vencimento[1];
    $ano = $dt_vencimento[2];

    for($x = 0; $x < $parcelas; $x++){
        $parcelado[$x]['parcela'] = $x + 1; 
        $parcelado[$x]['dt_vencimento'] = date("Y-m-d",strtotime("+".$x." month",mktime(0, 0, 0, $mes, $dia, $ano)));
    }

    return $parcelado;
}

$valor = 150.07;
$valor_entrada= 50.00;
$parcela = 4;
$dt_vencimento = '04-09-2018';
$negociacao = calculo_negociacao($valor, $parcela, $dt_vencimento, $valor_entrada);
//var_dump($negociacao);

echo '<pre>';
echo var_dump($negociacao);
    
04.09.2018 / 23:21