У меня проблема при попытке произвести платеж (в зависимости от суммы) отмена счета-фактуры на сумму "X".
Например, у клиента в общей сложности 6счета-фактуры «в кредит» на общую сумму 155 долларов США. Когда клиент приближается к оплате или совершил платеж, например, 135 долларов США, код должен вычитать сумму каждого счета из самого старого до тех пор, пока сумма не будет завершена, это можетпривести к трем вещам:
- Отменить общую задолженность.
- Остаток по счету-фактуре (согласно предыдущему примеру оплачиваются четыре счета-фактуры, пятый счет-фактура оставил остаток5 $ и шестое всегда с ожидающими 20 $)
- Или заплатите сумму и оставшуюся сумму как дебет для других будущих покупок.
У меня есть таблица, котораяотслеживает все ожидающие счета для каждого клиента, сумму, платеж и строку, чтобы узнать, является ли это ожидающим платежом, частичным платежом, оплаченным или дебетовым в пользу клиента.
Когда я делаю ОБНОВЛЕНИЕ , вместо того, чтобы переходить один к одному, во всех счетах «в кредит» сохраняется одинаковое значение для выплаты ... Я чувствую, что потерялся
Я надеюсь, что вы можете помочь мне.
Вот ОБНОВЛЕННЫЙ скрипт:
$conn->beginTransaction();
$id = $_POST['idCliente']; // Client id
// now only select the invoices with pending payments 0, 4, 5, 6
$sql = $conn->prepare("SELECT COUNT(refId) AS fMora FROM VENTAS WHERE idCliente = :idCliente
AND contacredito IN (0, 4, 5, 6) AND activo = '1'");
$sql->bindParam(':idCliente',$id);
$sql->execute();
// Now is calling the rows that need to change
while($row = $sql->fetch(PDO::FETCH_ASSOC)) $fMora = $row['fMora'];
$sth = $conn->prepare("SELECT idV, refVenta, refId, total, pagado
FROM VENTAS WHERE idCliente = :idCliente AND contacredito IN (0, 4, 5, 6) AND activo = '1'");
$sth->bindParam(':idCliente',$id);
$sth->execute();
// fMora run if is more or equal than one
if($fMora >= '1') {
// each time if are more than 1
for($i=0; $i< $fMora; $i++){
while($row2 = $sth->fetch(PDO::FETCH_ASSOC)) {
$percibido = $_POST['abono']; // the client amount
$percibido2 = $resta; // variable with the subtracted of the amount
$abona = $percibido - $percibido2; // variable make an subtract for making each time smaller amount
$idV = $row2['idV']; // table id
$refVenta = $row2['refVenta']; // ref id equal to printed invoice
$refId = $row2['refId']; // id for print
$total = $row2['total']; // invoice total
$pagado = $row2['pagado']; //previously paid
// if the amount is less than the total
if($abona < $total && $abona > '0'){
$paga = $abona; // add the amount
$contaCred = '4'; // change to partial payment
$sql = "UPDATE VENTAS SET
contacredito = :contacredito,
pagado = :pagado
WHERE refId = :refId";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':contacredito', $contaCred, PDO::PARAM_STR);
$stmt->bindParam(':pagado', $paga, PDO::PARAM_STR);
$stmt->bindParam(':refId', $refId, PDO::PARAM_STR);
$stmt->execute();
}
// if is greater of the total amount
else if($abona >= $total){
$paga = $total; // add the same value of total in pagado
$pagado = $total-$pagado; // make the subtraction to generate the amount that will be subtracted
$contaCred = '1'; // change to paid
$resta = $abona-$pagado; // make the subtraction to generate the new amount to the new invoice
$sql = "UPDATE VENTAS SET
contacredito = :contacredito,
pagado = :pagado
WHERE refId = :refId";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':contacredito', $contaCred, PDO::PARAM_STR);
$stmt->bindParam(':pagado', $paga, PDO::PARAM_STR);
$stmt->bindParam(':refId', $refId, PDO::PARAM_STR);
$stmt->execute();
};
}
}
}
$conn->commit();