<?php

session_start();
include("header.php");
include("footer.php");
include("nav.php");
include 'connect.php';
include 'function.php';

// Check if the user is logged in
if (!isset($_SESSION['emailadd'])) {
  header("Location: index.php");
  exit;
}

  // Retrieve list of available suppliers
  $query = "SELECT supregno, supname FROM supplier";
  $result = mysqli_query($conn, $query);
  $suppliers = array();
  while ($row = mysqli_fetch_assoc($result)) {
    $suppliers[] = $row;
  }

    // Retrieve list of available bank account no
  $query04 = "SELECT accno, accholder FROM bankacc";
  $result04 = mysqli_query($conn, $query04);
  $bankaccs = array();
  while ($row = mysqli_fetch_assoc($result04)) {
    $bankaccs[] = $row;
  }


// Handle form submission
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $supregno = $_POST["supregno"];
  $pvno = get_next_docno();
  $pvdate = $_POST["pvdate"];
  $pvamt = $_POST["pvamt"];
  $balamt = $pvamt;
  $remark = $_POST["remark"];
  $status = $_POST["status"];
  $createby = $_SESSION['emailadd'];
  $accno = $_POST["accno"];
  $bankout = $_POST["pvamt"] * -1;


  // Validate input
if (empty($supregno) || empty($pvdate) || empty($pvamt) || empty($accno)) {
  $error_message = 'Please enter values for all required fields.';
  echo '<script>alert("' . $error_message . '")</script>';
  exit;
}

  // Sanitize input
  $supregno = mysqli_real_escape_string($conn, $supregno);
  $pvno = mysqli_real_escape_string($conn, $pvno);
  $pvdate = mysqli_real_escape_string($conn, $pvdate);
  $pvamt = mysqli_real_escape_string($conn, $pvamt);
  $balamt = mysqli_real_escape_string($conn, $balamt);
  $remark = mysqli_real_escape_string($conn, $remark);
  $createby = mysqli_real_escape_string($conn, $createby);
  $accno = mysqli_real_escape_string($conn, $accno);



  // Insert payment header
  $query01 = "INSERT INTO sup_payhead (supregno, pvno, pvdate, pvamt, balamt, remark, createby) VALUES ('$supregno','$pvno', '$pvdate', '$pvamt', '$balamt', '$remark', '$createby')";
  $result01 = mysqli_query($conn, $query01);

  // Check for errors
  if (!$result) {
    echo '<script>alert("Error inserting payment header.")</script>';
    exit;
  }


// Insert into tbl_bankout
$query03 = "INSERT INTO bank_trn (accno, trndate, docno, amount, status, remark, recfrm) VALUES ('$accno', '$pvdate', '$pvno', '$bankout', '$remark', '$remark', '$supregno')";
$result03 = mysqli_query($conn, $query03);

 // Check for errors
  if (!$result) {
    echo '<script>alert("Error inserting bank transaction.")</script>';
    // Rollback the payment header
    $query = "DELETE FROM sup_payhead WHERE pvno = '$pvno'";
    $result = mysqli_query($conn, $query);
    exit;
  }


    // Insert into running pv no
$query03 = "INSERT INTO rundocno (docno) VALUES ('$pvno')";
$result03 = mysqli_query($conn, $query03);

 // Check for errors
  if (!$result) {
    echo '<script>alert("Error inserting running receipt number.")</script>';
    // Rollback the payment header and bank transaction
    $query = "DELETE FROM sup_payhead WHERE pvno = '$pvno'";
    $result = mysqli_query($conn, $query);
    $query = "DELETE FROM bank_trn WHERE docno = '$pvno'";
    $result = mysqli_query($conn, $query);
    exit;
  }

// Get all open invoices for the client
  $query02 = "SELECT pono, totamt, totpay FROM sup_invhead WHERE supregno = '$supregno' AND totamt > totpay";
  $result02 = mysqli_query($conn, $query02);

// Check for errors
if (!$result02) {
echo '<script>alert("Error retrieving pos.")</script>';
// Rollback the payment header, bank transaction, and running receipt number
$query = "DELETE FROM sup_payhead WHERE pvno = '$pvno'";
$result = mysqli_query($conn, $query);
$query = "DELETE FROM bank_trn WHERE docno = '$pvno'";
$result = mysqli_query($conn, $query);
$query = "DELETE FROM rundocno WHERE docno = '$pvno'";
$result = mysqli_query($conn, $query);
exit;
}

  $invoices = array();
  while ($row = mysqli_fetch_assoc($result02)) {
    $invoices[] = $row;
  }

// Process the payment and update the invoices
foreach ($invoices as $invoice) {
  $pono = $invoice['pono'];
  $totamt = $invoice['totamt'];
  $totpay = $invoice['totpay'];

  $payamt = min($pvamt, $totamt - $totpay);

  // Insert payment details
  $query = "INSERT INTO sup_paydet (pvno, pono, payamt) VALUES ('$pvno', '$pono', '$payamt')";
  $result = mysqli_query($conn, $query);

  // Check for errors
if (!$result) {
  echo '<script>alert("Error inserting payment details.")</script>';
  // Rollback the payment header, bank transaction, running receipt number, and previous payment details
  $query = "DELETE FROM sup_payhead WHERE pvno = '$pvno'";
  $result = mysqli_query($conn, $query);
  $query = "DELETE FROM bank_trn WHERE docno = '$pvno'";
  $result = mysqli_query($conn, $query);
  $query = "DELETE FROM rundocno WHERE docno = '$pvno'";
  $result = mysqli_query($conn, $query);
  $query = "DELETE FROM sup_paydet WHERE pvno = '$pvno'";
  $result = mysqli_query($conn, $query);
  exit;
  }

  // Update invoice header with total payment received
  $query = "UPDATE sup_invhead SET totpay = totpay + '$payamt' WHERE pono = '$pono'";
  $result = mysqli_query($conn, $query);

// Check for errors
if (!$result) {
  echo '<script>alert("Error updating po header.")</script>';
  // Rollback the payment header, bank transaction, running receipt number, and previous payment details
  $query = "DELETE FROM sup_payhead WHERE pvno = '$pvno'";
  $result = mysqli_query($conn, $query);
  $query = "DELETE FROM bank_trn WHERE docno = '$pvno'";
  $result = mysqli_query($conn, $query);
  $query = "DELETE FROM rundocno WHERE docno = '$pvno'";
  $result = mysqli_query($conn, $query);
  $query = "DELETE FROM sup_paydet WHERE pvno = '$pvno'";
  $result = mysqli_query($conn, $query);
  exit;
}

  // Update payment header with balance amount
  $balamt = $pvamt - $payamt;
  $query = "UPDATE sup_payhead SET balamt = '$balamt' WHERE pvno = '$pvno'";
  $result = mysqli_query($conn, $query);

// Check for errors
if (!$result) {
  echo '<script>alert("Error updating payment header.")</script>';
  // Rollback the payment header, bank transaction, running receipt number, and previous payment details
  $query = "DELETE FROM sup_payhead WHERE pvno = '$pvno'";
  $result = mysqli_query($conn, $query);
  $query = "DELETE FROM bank_trn WHERE docno = '$pvno'";
  $result = mysqli_query($conn, $query);
  $query = "DELETE FROM rundocno WHERE docno = '$pvno'";
  $result = mysqli_query($conn, $query);
  $query = "DELETE FROM sup_paydet WHERE pvno = '$pvno'";
  $result = mysqli_query($conn, $query);
  $query = "UPDATE sup_invhead SET totpay = totpay - '$payamt' WHERE pono = '$pono'";
  $result = mysqli_query($conn, $query);
  exit;
}
  $pvamt -= $payamt;

  if ($pvamt == 0) {
    break; // Payment fully processed
  }
}

// Check if payment was fully processed
if ($pvamt > 0) {
echo '<script>alert("Payment was not fully processed.")</script>';
// Rollback the payment header, bank transaction, running receipt number, and previous payment details
$query = "DELETE FROM sup_payhead WHERE pvno = '$pvno'";
$result = mysqli_query($conn, $query);
$query = "DELETE FROM bank_trn WHERE docno = '$pvno'";
$result = mysqli_query($conn, $query);
$query = "DELETE FROM rundocno WHERE docno = '$pvno'";
$result = mysqli_query($conn, $query);
$query = "DELETE FROM sup_paydet WHERE pvno = '$pvno'";
$result = mysqli_query($conn, $query);
foreach ($pos as $po) {
$pono = $po['pono'];
$query = "UPDATE sup_invhead SET totpay = totpay - '$payamt' WHERE pono = '$pono'";
$result = mysqli_query($conn, $query);
}
exit;
}

echo '<script>alert("Payment processed successfully.")</script>';




}

?>

<main>
  <link rel="stylesheet" type="text/css" href="style.css">
  <h2>Rekod Bayaran Pembekal</h2>
  <form method="post" action="purchase_payment.php">
    <div class="form-group">
      <div>
        <label for="accno">Select Bank Account:</label>
        <select id="accno" name="accno" required>
          <option value="">- Select Bank Account -</option>
          <?php foreach ($bankaccs as $bankacc): ?>
            <option value="<?php echo $bankacc['accno']; ?>"><?php echo $bankacc['accholder']; ?></option>
          <?php endforeach; ?>
        </select>
      </div>
      <div>
        <div>
          <label for="supregno">supplier:</label>
          <select id="supregno" name="supregno" required>
            <option value="">- Select Supplier -</option>
            <?php foreach ($suppliers as $supplier): ?>
              <option value="<?php echo $supplier['supregno']; ?>" data-balance="<?php echo getSupplierBalance($conn, $supplier['supregno']); ?>"><?php echo $supplier['supname']; ?></option>
            <?php endforeach; ?>
          </select>
        </div>
      </div>
      <div>
        <div><label for="pvdate">PV Date:</label></div>
        <input type="date" id="pvdate" name="pvdate" value="<?php echo date("Y-m-d"); ?>" required>
        <div><label for="pvamt">Payment Amount:</label></div>
        <input type="number" id="pvamt" name="pvamt" step="0.01" required>
        <div><label for="remark">Remark:</label></div>
        <input type="text" id="remark" name="remark">
        <div><label for="status">Status :</label></div>
        <input type="text" id="status" name="status">
        <div>
          <label for="balance">Supplier Balance:</label>
        </div>
        <div>
          <input type="text" id="balance" name="balance" value="0.00" readonly>
        </div>
      </div>
      <br>
      <button type="submit">Record Payment</button>
    </div>
  </form>
<script>
  // Update the balance when a supplier is selected
  document.getElementById("supregno").addEventListener("change", function() {
    var balance = this.options[this.selectedIndex].getAttribute("data-balance");
    document.getElementById("balance").value = parseFloat(balance).toFixed(2);
  });
</script>

</main>
