To make this implementation is relatively simple, but has something that needs to be taken into account, which is when the sum of the installments does not result in the total as in the case of a value like R $ 100,00 in 3 installments of R $ 33,33. I prepared the code simulating this situation. Note: The code was commented explaining each step.
Code
<?php
// ID do cliente
$idCliente = 1;
// Função round arredonda para duas casas decimais
$valor = round(100, 2); // R$ 100,00
// Número de parcelas
$parcelas = 3;
// A compra tem entrada?
$entrada = false;
// Insira a movimentação no banco
$sql = "INSERT INTO cad_movimento (
id_tipomovimento,
id_cliente,
data_movimento,
descricao_movimento,
valor_movimento
) VALUES (
1,
'{$idCliente}',
NOW(),
'Moinho de Vento (windmill)',
'{$valor}'
)";
//$con->query($sql);
echo $sql;
echo '<br>'.PHP_EOL;
// Pegue do banco o último ID inserido da movimentação
$idMovimento = 1;
// Calcula o valor da parcela dividindo o total pelo número de parcelas
$valorParcela = round($valor / $parcelas, 2);
// Se tiver entrada diminui o número de parcelas
$qtd = $entrada ? $parcelas - 1 : $parcelas;
// Faz um loop com a quantidade de parcelas
for ($i=($entrada ? 0 : 1); $i <= $qtd; $i++) {
// Se for última parcela e a soma das parcelas for diferente do valor da compra
// ex: 100 / 3 == 33.33 logo 3 * 33.33 == 99.99
// Então acrescenta a diferença na parcela, assim última parcela será 33.34
if ($qtd == $i && round($valorParcela * $parcelas, 2) != $valor){
$valorParcela += $valor - ($valorParcela * $parcelas);
}
// Caso a variavel $entrada seja true
// o valor $i na primeira parcela será 0
// então 30 * 0 == 0
// será adicionado 0 dias a data, ou seja, a primeira parcela
// será a data atual
$dias = 30 * $i;
// Hoje mais X dias
// Parcela 1: 30 dias
// Parcela 2: 60 dias
// Parcela 3: 90 dias...
$data = date('Y-m-d', strtotime("+{$dias} days"));
$sql = "INSERT INTO cad_parcelas (
id_movimento,
id_cliente,
data_movimento,
vencimento_movimento,
pagamento_movimento,
valor_movimento
) VALUES (
'{$idMovimento}',
'{$idCliente}',
NOW(),
'{$data}',
NULL,
'$valorParcela'
)";
//$con->query($sql);
echo $sql;
echo '<br><br>'.PHP_EOL.PHP_EOL;
}
Upshot:
INSERT INTO cad_movimento (
id_tipomovimento,
id_cliente,
data_movimento,
descricao_movimento,
valor_movimento
) VALUES (
1,
'1',
NOW(),
'Moinho de Vento (windmill)',
'100'
)
INSERT INTO cad_parcelas (
id_movimento,
id_cliente,
data_movimento,
vencimento_movimento,
pagamento_movimento,
valor_movimento
) VALUES (
'1',
'1',
NOW(),
'2015-10-02',
NULL,
'33.33'
)
INSERT INTO cad_parcelas (
id_movimento,
id_cliente,
data_movimento,
vencimento_movimento,
pagamento_movimento,
valor_movimento
) VALUES (
'1',
'1',
NOW(),
'2015-11-01',
NULL,
'33.33'
)
INSERT INTO cad_parcelas (
id_movimento,
id_cliente,
data_movimento,
vencimento_movimento,
pagamento_movimento,
valor_movimento
) VALUES (
'1',
'1',
NOW(),
'2015-12-01',
NULL,
'33.34'
)
in his code when game to save in the comic he does not save the dates as shown in echo and yes the current date
– Cristiano Cardoso Silva
My mistake, my field was not as DATE
– Cristiano Cardoso Silva
good night @kaduAmaral how do i save tbm the parcel number and type the correct date because here as we put the day of purchase as 01/01/2015 for example the maturity of the first falls on 31/01/2015
– Cristiano Cardoso Silva
@Cristianocardososilva to save the portion number is only save the variable
$i
. About the dates you have to calculate. There I calculated 30 days, but you can also calculate the month, so the date always falls on the same day next month.– KaduAmaral