Оплатил несколько счетов в одном запросе - PullRequest
0 голосов
/ 02 октября 2018

У меня проблема при попытке произвести платеж (в зависимости от суммы) отмена счета-фактуры на сумму "X".

Например, у клиента в общей сложности 6счета-фактуры «в кредит» на общую сумму 155 долларов США. Когда клиент приближается к оплате или совершил платеж, например, 135 долларов США, код должен вычитать сумму каждого счета из самого старого до тех пор, пока сумма не будет завершена, это можетпривести к трем вещам:

  1. Отменить общую задолженность.
  2. Остаток по счету-фактуре (согласно предыдущему примеру оплачиваются четыре счета-фактуры, пятый счет-фактура оставил остаток5 $ и шестое всегда с ожидающими 20 $)
  3. Или заплатите сумму и оставшуюся сумму как дебет для других будущих покупок.

У меня есть таблица, котораяотслеживает все ожидающие счета для каждого клиента, сумму, платеж и строку, чтобы узнать, является ли это ожидающим платежом, частичным платежом, оплаченным или дебетовым в пользу клиента.

Когда я делаю ОБНОВЛЕНИЕ , вместо того, чтобы переходить один к одному, во всех счетах «в кредит» сохраняется одинаковое значение для выплаты ... Я чувствую, что потерялся

Я надеюсь, что вы можете помочь мне.

Вот ОБНОВЛЕННЫЙ скрипт:

      $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();

1 Ответ

0 голосов
/ 06 октября 2018

Эта строка:

$percibido = $_POST['abono']

должна находиться за пределами вашего цикла - вам нужно уменьшить сумму, оставшуюся в платеже при зачислении каждой строки.

...