0% found this document useful (0 votes)
20 views30 pages

Code

The document is a PHP script for handling transaction approvals, rejections, and adding missing payments in a financial application. It includes AJAX handlers for fetching office members and member accounts, as well as logic for processing POST requests to approve, reject, or add payments to transactions. The script also manages database interactions, error handling, and session management for user actions related to financial transactions.

Uploaded by

mikrotik.mulao
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
20 views30 pages

Code

The document is a PHP script for handling transaction approvals, rejections, and adding missing payments in a financial application. It includes AJAX handlers for fetching office members and member accounts, as well as logic for processing POST requests to approve, reject, or add payments to transactions. The script also manages database interactions, error handling, and session management for user actions related to financial transactions.

Uploaded by

mikrotik.mulao
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

<?

php

// approve_transactions.php

Ini_set(‘display_errors’, 1);

Ini_set(‘display_startup_errors’, 1);

Error_reporting(E_ALL);

// --- Standard Includes ---

Include(‘config/[Link]’);

Include(‘config/[Link]’);

//
==============================================
================================

// --- AJAX HANDLERS FOR “ADD MISSING PAYMENT” MODAL ---

//
==============================================
================================

If (isset($_GET[‘ajax_action’])) {

Header(‘Content-Type: application/json’);

If ($_GET[‘ajax_action’] === ‘get_office_members’) {

$office = $_GET[‘office’] ?? ‘’;

// If there is no specific office, fetch all approved members

If (empty($office) || $office === ‘N/A’) {

$stmt = $conn->prepare(“SELECT membership_id,


CONCAT(lastname, ‘, ‘, firstname) as name FROM membership WHERE status
= ‘Approved’ ORDER BY lastname”);
} else {

$stmt = $conn->prepare(“SELECT membership_id,


CONCAT(lastname, ‘, ‘, firstname) as name FROM membership WHERE office
= ? AND status = ‘Approved’ ORDER BY lastname”);

$stmt->bind_param(“s”, $office);

$stmt->execute();

$res = $stmt->get_result();

$members =[];

While($row = $res->fetch_assoc()) {

$members[] = $row;

Echo json_encode($members);

Exit;

If ($_GET[‘ajax_action’] === ‘get_member_accounts’) {

$member_id = (int)$_GET[‘member_id’];

$type = $_GET[‘type’] ?? ‘deposit’;

$or_number = $_GET[‘or_number’] ?? ‘’;

$accounts =[];

If ($type === ‘deposit’) {

// ONLY SHOW ACCOUNTS THE MEMBER HAS NOT PAID YET IN THIS
OR BATCH

$stmt = $conn->prepare(“

SELECT account_id, account as name


FROM account

WHERE amount_type = ‘credit’

AND account IN (‘SHARE CAPITAL’, ‘SAVINGS’, ‘MORTUARY FUND’,


‘HEALTH CARE FUND’, ‘OTHER INCOME’)

AND account NOT IN (

SELECT account FROM account_history WHERE or_number = ?


AND member_id = ?

“);

$stmt->bind_param(“si”, $or_number, $member_id);

$stmt->execute();

$res = $stmt->get_result();

While($row = $res->fetch_assoc()) $accounts[] = [‘id’ =>


$row[‘account_id’], ‘name’ => $row[‘name’]];

$stmt->close();

} else {

// ONLY SHOW LOANS THE MEMBER HAS NOT PAID YET IN THIS OR
BATCH

$stmt = $conn->prepare(“

SELECT loan_id as id, account as name, balance

FROM loan

WHERE member_id = ? AND status = ‘Active’

AND loan_id NOT IN (

SELECT loan_id FROM account_transaction WHERE or_number


= ? AND member_id = ? AND loan_id IS NOT NULL

“);

$stmt->bind_param(“isi”, $member_id, $or_number, $member_id);


$stmt->execute();

$res = $stmt->get_result();

While($row = $res->fetch_assoc()) $accounts[] =[‘id’ => $row[‘id’],


‘name’ => $row[‘name’] . ‘ (Bal: ₱’ . number_format($row[‘balance’], 2) . ‘)’];

$stmt->close();

Echo json_encode($accounts);

Exit;

//
==============================================
================================

$alert_message = ‘’;

$alert_type = ‘info’;

// --- HANDLE POST REQUEST (APPROVE / REJECT / ADD MISSING PAYMENT) ---

If ($_SERVER[‘REQUEST_METHOD’] === ‘POST’ && isset($_POST[‘action’])) {

$action = $_POST[‘action’];

$admin_user_id = $_SESSION[‘user_id’] ?? null;

If (is_null($admin_user_id)) {

$_SESSION[‘error_message’] = “Your session has expired. Please log in


again.”;

Header(‘Location: approve_transactions.php’);

Exit;

}
$conn->begin_transaction();

Try {

If ($action === ‘approve’) {

$or_number = $_POST[‘or_number’];

// --- APPROVAL LOGIC ---

$stmt_approve_trans = $conn->prepare(“UPDATE
account_transaction SET status = ‘Approved’, approved_by = ?, approved_at
= NOW() WHERE or_number = ? AND status = ‘Pending’”);

$stmt_approve_trans->bind_param(“is”, $admin_user_id,
$or_number);

$stmt_approve_trans->execute();

$stmt_approve_trans->close();

$stmt_approve_hist = $conn->prepare(“UPDATE account_history SET


status = ‘Approved’, approved_by = ?, approved_at = NOW() WHERE
or_number = ? AND status = ‘Pending’”);

$stmt_approve_hist->bind_param(“is”, $admin_user_id, $or_number);

$stmt_approve_hist->execute();

$stmt_approve_hist->close();

$_SESSION[‘success_message’] = “Transaction batch #{$or_number}


has been successfully approved.”;

} elseif ($action === ‘reject’) {

$or_number = $_POST[‘or_number’];

// --- REJECTION LOGIC (REVERSAL) ---

// 1. Reverse Loan Payments


$stmt_get_loan_payments = $conn->prepare(“SELECT loan_id,
principal FROM account_transaction WHERE or_number = ? AND status =
‘Pending’ AND principal > 0”);

$stmt_get_loan_payments->bind_param(“s”, $or_number);

$stmt_get_loan_payments->execute();

$loan_payments_to_reverse = $stmt_get_loan_payments-
>get_result();

$stmt_reverse_loan = $conn->prepare(“UPDATE loan SET balance =


balance + ?, status = ‘Active’ WHERE loan_id = ?”);

While ($payment = $loan_payments_to_reverse->fetch_assoc()) {

$stmt_reverse_loan->bind_param(“di”, $payment[‘principal’],
$payment[‘loan_id’]);

$stmt_reverse_loan->execute();

$stmt_get_loan_payments->close();

$stmt_reverse_loan->close();

// 2. Reverse Deposits

$stmt_get_deposits = $conn->prepare(“SELECT member_id, account,


amount FROM account_history WHERE or_number = ? AND status =
‘Pending’ AND type = ‘Credit’”);

$stmt_get_deposits->bind_param(“s”, $or_number);

$stmt_get_deposits->execute();

$deposits_to_reverse = $stmt_get_deposits->get_result();

$account_to_membership_column_map =[‘SHARE CAPITAL’ =>


‘share_capital_balance’, ‘HEALTH CARE FUND’ =>
‘health_care_fund_balance’, ‘SAVINGS’ => ‘savings_balance’, ‘MORTUARY
FUND’ => ‘mortuary_fund_balance’];
$prepared_reversal_stmts =[];

While ($deposit = $deposits_to_reverse->fetch_assoc()) {

If
(isset($account_to_membership_column_map[$deposit[‘account’]])) {

$column_name =
$account_to_membership_column_map[$deposit[‘account’]];

If (!isset($prepared_reversal_stmts[$column_name])) {

$sql = “UPDATE membership SET {$column_name} =


{$column_name} - ? WHERE membership_id = ?”;

$prepared_reversal_stmts[$column_name] = $conn-
>prepare($sql);

$prepared_reversal_stmts[$column_name]->bind_param(“di”,
$deposit[‘amount’], $deposit[‘member_id’]);

$prepared_reversal_stmts[$column_name]->execute();

Foreach($prepared_reversal_stmts as $stmt) { $stmt->close(); }

$stmt_get_deposits->close();

// 3. Mark transactions as Rejected

$stmt_reject_trans = $conn->prepare(“UPDATE account_transaction


SET status = ‘Rejected’, approved_by = ?, approved_at = NOW() WHERE
or_number = ? AND status = ‘Pending’”);

$stmt_reject_trans->bind_param(“is”, $admin_user_id, $or_number);

$stmt_reject_trans->execute();

$stmt_reject_trans->close();
$stmt_reject_hist = $conn->prepare(“UPDATE account_history SET
status = ‘Rejected’, approved_by = ?, approved_at = NOW() WHERE
or_number = ? AND status = ‘Pending’”);

$stmt_reject_hist->bind_param(“is”, $admin_user_id, $or_number);

$stmt_reject_hist->execute();

$stmt_reject_hist->close();

$_SESSION[‘success_message’] = “Transaction batch #{$or_number}


has been rejected and financial entries have been reversed.”;

} elseif ($action === ‘add_missing_payment’) {

// --- ADD MISSING PAYMENT LOGIC ---

$target_or = $_POST[‘target_or’];

$member_id = (int)$_POST[‘member_id’];

$payment_type = $_POST[‘payment_type’]; // ‘deposit’ or ‘loan’

$target_id = (int)$_POST[‘target_id’]; // account_id or loan_id

If ($payment_type === ‘deposit’) {

$amount = (float)$_POST[‘deposit_amount’];

If ($amount > 0) {

// Get account name

$stmt_acc = $conn->prepare(“SELECT account FROM account


WHERE account_id = ?”);

$stmt_acc->bind_param(“I”, $target_id);

$stmt_acc->execute();

$acc_name = $stmt_acc->get_result()->fetch_assoc()
[‘account’];

$stmt_acc->close();
// DOUBLE CHECK TO PREVENT DUPLICATES

$stmt_check = $conn->prepare(“SELECT 1 FROM


account_history WHERE or_number = ? AND member_id = ? AND account
= ?”);

$stmt_check->bind_param(“sis”, $target_or, $member_id,


$acc_name);

$stmt_check->execute();

If ($stmt_check->get_result()->num_rows > 0) {

Throw new Exception(“This member already has a


{$acc_name} deposit in this batch. Modifications are not allowed to avoid
corruption.”);

$stmt_check->close();

// Update membership balance

$col_map =[‘SHARE CAPITAL’ => ‘share_capital_balance’,


‘SAVINGS’ => ‘savings_balance’, ‘HEALTH CARE FUND’ =>
‘health_care_fund_balance’, ‘MORTUARY FUND’ =>
‘mortuary_fund_balance’];

If (isset($col_map[$acc_name])) {

$col = $col_map[$acc_name];

$conn->query(“UPDATE membership SET $col = $col +


$amount WHERE membership_id = $member_id”);

// Get current balance for history

$bal_query = $conn->query(“SELECT “ .
($col_map[$acc_name] ?? “0”) . “ FROM membership WHERE membership_id
= $member_id”);
$curr_bal = $bal_query ? (float)$bal_query->fetch_row()[0] :
$amount;

// Ensure a base transaction exists for this OR

$stmt_tx = $conn->prepare(“SELECT transaction_id FROM


account_transaction WHERE or_number = ? AND member_id = ? LIMIT 1”);

$stmt_tx->bind_param(“si”, $target_or, $member_id);

$stmt_tx->execute();

$tx_res = $stmt_tx->get_result()->fetch_assoc();

If ($tx_res) {

$tx_id = $tx_res[‘transaction_id’];

} else {

$conn->query(“INSERT INTO account_transaction


(member_id, or_number, method, amount, datetime, user_id, status) VALUES
($member_id, ‘$target_or’, ‘Check’, 0, NOW(), $admin_user_id, ‘Pending’)”);

$tx_id = $conn->insert_id;

$stmt_tx->close();

$stmt_hist = $conn->prepare(“INSERT INTO account_history


(transaction_id, account, type, member_id, or_number, amount, balance,
user_id, datetime, status) VALUES (?, ?, ‘Credit’, ?, ?, ?, ?, ?, NOW(),
‘Pending’)”);

$stmt_hist->bind_param(“isissddi”, $tx_id, $acc_name,


$member_id, $target_or, $amount, $curr_bal, $admin_user_id);

$stmt_hist->execute();

$stmt_hist->close();

}
} elseif ($payment_type === ‘loan’) {

$principal = (float)$_POST[‘loan_principal’];

$interest = (float)$_POST[‘loan_interest’];

$total = $principal + $interest;

If ($total > 0) {

// DOUBLE CHECK TO PREVENT DUPLICATES

$stmt_check = $conn->prepare(“SELECT 1 FROM


account_transaction WHERE or_number = ? AND member_id = ? AND loan_id
= ?”);

$stmt_check->bind_param(“sii”, $target_or, $member_id,


$target_id);

$stmt_check->execute();

If ($stmt_check->get_result()->num_rows > 0) {

Throw new Exception(“This member already has a payment


for this loan in this batch. Modifications are not allowed to avoid
corruption.”);

$stmt_check->close();

// Update loan balance

$conn->query(“UPDATE loan SET balance = balance - $principal


WHERE loan_id = $target_id”);

$conn->query(“UPDATE loan SET status = ‘Paid’ WHERE loan_id


= $target_id AND balance <= 0.005”);

$bal_query = $conn->query(“SELECT balance FROM loan


WHERE loan_id = $target_id”);

$curr_bal = (float)$bal_query->fetch_row()[0];
// Insert account_transaction

$stmt_tx = $conn->prepare(“INSERT INTO account_transaction


(member_id, loan_id, or_number, method, amount, principal, interest,
balance, datetime, user_id, status) VALUES (?, ?, ?, ‘Check’, ?, ?, ?, ?,
NOW(), ?, ‘Pending’)”);

$stmt_tx->bind_param(“iissddddi”, $member_id, $target_id,


$target_or, $total, $principal, $interest, $curr_bal, $admin_user_id);

$stmt_tx->execute();

$stmt_tx->close();

$_SESSION[‘success_message’] = “Missing payment successfully


added to batch #{$target_or}.”;

If (!$conn->commit()) throw new Exception(“Transaction commit


failed.”);

Header(‘Location: approve_transactions.php’);

Exit;

} catch (Exception $e) {

$conn->rollback();

Error_log(“ACTION ERROR for OR# {$_POST[‘or_number’] ?? ‘Unknown’}


by User {$admin_user_id}: “ . $e->getMessage());

$_SESSION[‘error_message’] = “An error occurred: “ . $e-


>getMessage();

Header(‘Location: approve_transactions.php’);

Exit;
}

// --- FETCH PENDING TRANSACTIONS FOR DISPLAY ---

$pending_batches =[];

Try {

$sql = “

SELECT ‘transaction’ as source, at.or_number, [Link], [Link],


COALESCE(CONCAT([Link], ‘, ‘, [Link]), ‘N/A’) as member_name,
COALESCE([Link], ‘Zero-Amount Transaction’) as account_name,
[Link], [Link], [Link], [Link] as processed_by

FROM account_transaction at

JOIN membership m ON at.member_id = m.membership_id

JOIN users u ON at.user_id = u.user_id

LEFT JOIN loan l ON at.loan_id = l.loan_id

WHERE [Link] = ‘Pending’

UNION ALL

SELECT ‘history’ as source, ah.or_number, [Link], [Link],


COALESCE(CONCAT([Link], ‘, ‘, [Link]), ‘N/A’) as member_name,
[Link] as account_name, [Link], NULL as principal, NULL as
interest, [Link] as processed_by

FROM account_history ah

JOIN membership m ON ah.member_id = m.membership_id

JOIN users u ON ah.user_id = u.user_id

WHERE [Link] = ‘Pending’


ORDER BY or_number, datetime DESC

“;

$result = $conn->query($sql);

If ($result) {

While ($row = $result->fetch_assoc()) {

$or_number = $row[‘or_number’];

If (!isset($pending_batches[$or_number])) {

$pending_batches[$or_number] =[

‘details’ => [

‘office’ => $row[‘office’],

‘datetime’ => $row[‘datetime’],

‘processed_by’ => $row[‘processed_by’],

‘total_amount’ => 0,

],

‘items’ =>[]

];

$pending_batches[$or_number][‘details’][‘total_amount’] += (float)
$row[‘amount’];

$pending_batches[$or_number][‘items’][] = $row;

} else {

Throw new Exception(“Failed to fetch pending transactions: “ . $conn-


>error);

} catch (Exception $e) {


$alert_message = “Error fetching data: “ . $e->getMessage();

$alert_type = ‘danger’;

If (isset($_SESSION[‘error_message’])) {

$alert_message = $_SESSION[‘error_message’];

$alert_type = ‘danger’;

Unset($_SESSION[‘error_message’]);

} elseif (isset($_SESSION[‘success_message’])) {

$alert_message = $_SESSION[‘success_message’];

$alert_type = ‘success’;

Unset($_SESSION[‘success_message’]);

$conn->close();

?>

<!DOCTYPE html>

<html>

<head>

<meta charset=”utf-8”>

<title>Approve Pending Transactions – SPEMC</title>

<link rel=”apple-touch-icon” sizes=”180x180”


href=”vendors/images/[Link]”>

<link rel=”icon” type=”image/png” sizes=”32x32”


href=”vendors/images/[Link]”>

<link rel=”icon” type=”image/png” sizes=”16x16”


href=”vendors/images/[Link]”>
<meta name=”viewport” content=”width=device-width, initial-
scale=1, maximum-scale=1”>

<link href=[Link]
family=Inter:wght@300;400;500;600;700;800&display=swap
rel=”stylesheet”>

<link rel=”stylesheet” type=”text/css”


href=”vendors/styles/[Link]”>

<link rel=”stylesheet” type=”text/css” href=”vendors/styles/icon-


[Link]”>

<link rel=”stylesheet” type=”text/css”


href=”vendors/styles/[Link]”>

<link
href=[Link]
rel=”stylesheet” />

<style>

.batch-card { border-left: 5px solid #ffab00; }

.batch-card .card-header { background-color: #fffaf0; }

.batch-details-list { font-size: 0.9rem; }

.action-buttons .btn { margin-left: 5px; }

.details-table th, .details-table td { padding: 0.5rem; }

</style>

</head>

<body>

<?php

Include(“widgets/[Link]”);

Include(“widgets/[Link]”);

Include(“widgets/[Link]”);

Include(“widgets/[Link]”);

?>
<div class=”main-container”>

<div class=”pd-ltr-20 xs-pd-20-10”>

<div class=”min-height-200px”>

<div class=”page-header”>

<div class=”row”>

<div class=”col-md-12 col-sm-12”>

<div class=”title”><h4>Pending Transaction


Approvals</h4></div>

<nav aria-label=”breadcrumb” role=”navigation”>

<ol class=”breadcrumb”>

<li class=”breadcrumb-item”><a
href=”[Link]”>Dashboard</a></li>

<li class=”breadcrumb-item active” aria-


current=”page”>Approvals</li>

</ol>

</nav>

</div>

</div>

</div>

<?php if (!empty($alert_message)): ?>

<div class=”alert alert-<?= htmlspecialchars($alert_type) ?>


alert-dismissible fade show” role=”alert”>

<?= $alert_message ?>

<button type=”button” class=”close” data-dismiss=”alert”


aria-label=”Close”><span aria-hidden=”true”>×</span></button>

</div>

<?php endif; ?>


<div class=”pd-20 card-box mb-30”>

<div class=”clearfix mb-2”>

<div class=”pull-left”>

<h4 class=”text-blue h4”>Transaction Batches Awaiting


Approval</h4>

<p class=”mb-0 text-muted”>Review the details. Expand


the OR number to review items, edit, or add missing entries.</p>

</div>

</div>

<hr>

<?php if (empty($pending_batches)): ?>

<div class=”alert alert-success text-center”>

<h5 class=”alert-heading”>All Clear!</h5>

<p>There are no pending transactions that require your


approval at this time.</p>

</div>

<?php else: ?>

<div class=”accordion” id=”approvalAccordion”>

<?php foreach ($pending_batches as $or_number =>


$batch): ?>

<div class=”card batch-card mb-3”>

<!—Accordion Header 

<div class=”card-header” id=”heading_<?=


htmlspecialchars($or_number) ?>”>

<h5 class=”mb-0 d-flex justify-content-between


align-items-center”>
<button class=”btn btn-link text-left flex-grow-1”
type=”button” data-toggle=”collapse” data-target=”#collapse_<?=
htmlspecialchars($or_number) ?>” aria-expanded=”true” aria-
controls=”collapse_<?= htmlspecialchars($or_number) ?>”>

<strong>OR #:</strong> <?=


htmlspecialchars($or_number) ?> |

<strong>Office:</strong> <?=
htmlspecialchars($batch[‘details’][‘office’] ?? ‘N/A’) ?> |

<strong>Total:</strong> ₱<?=
number_format($batch[‘details’][‘total_amount’], 2) ?>

</button>

<!—Approve / Reject Buttons stay on the outside



<div class=”action-buttons”>

<form method=”POST”
action=”approve_transactions.php” class=”d-inline”>

<input type=”hidden” name=”or_number”


value=”<?= htmlspecialchars($or_number) ?>”>

<button type=”submit” name=”action”


value=”approve” class=”btn btn-sm btn-success”><I class=”dw dw-
check”></i> Approve</button>

<button type=”submit” name=”action”


value=”reject” class=”btn btn-sm btn-danger” onclick=”return confirm(‘Are
you sure you want to REJECT this entire batch? This will reverse all financial
entries and cannot be undone.’)”><I class=”dw dw-cancel”></i>
Reject</button>

</form>

</div>

</h5>

</div>
<!—Expanded Card Body 

<div id=”collapse_<?= htmlspecialchars($or_number)


?>” class=”collapse” aria-labelledby=”heading_<?=
htmlspecialchars($or_number) ?>” data-parent=”#approvalAccordion”>

<div class=”card-body”>

<!—MOVED THE ADD PAYMENT BUTTON HERE 

<div class=”row align-items-center mb-3”>

<div class=”col-md-4 mb-2”>

<strong>Date Submitted:</strong> <br>

<?= date(‘F j, Y, g:I a’,


strtotime($batch[‘details’][‘datetime’])) ?>

</div>

<div class=”col-md-4 mb-2”>

<strong>Submitted By:</strong> <br>

<?= htmlspecialchars($batch[‘details’]
[‘processed_by’] ?? ‘N/A’) ?>

</div>

<div class=”col-md-4 mb-2 text-right”>

<!—HIGHLY VISIBLE “ADD MISSING


PAYMENT” BUTTON 

<button type=”button” class=”btn btn-info”


onclick=”openAddPaymentModal(‘<?= htmlspecialchars($or_number) ?>’,
‘<?= htmlspecialchars($batch[‘details’][‘office’] ?? ‘’) ?>’)”>

<I class=”dw dw-edit2”></i> Edit / Add


Missing Payment

</button>

</div>

</div>
<hr>

<h6 class=”mb-2”>Batch Items:</h6>

<div class=”table-responsive”>

<table class=”table table-sm table-bordered


details-table”>

<thead>

<tr>

<th>Member</th>

<th>Account</th>

<th>Type</th>

<th class=”text-right”>Amount</th>

</tr>

</thead>

<tbody>

<?php foreach ($batch[‘items’] as $item):


?>

<?php if ($item[‘amount’] > 0): ?>

<tr>

<td><?=
htmlspecialchars($item[‘member_name’] ?? ‘N/A’) ?></td>

<td><?=
htmlspecialchars($item[‘account_name’] ?? ‘’) ?></td>

<td>

<?php if ($item[‘source’] ===


‘transaction’): ?>

<span class=”badge badge-


info”>Loan Payment</span>

<?php else: ?>


<span class=”badge badge-
secondary”><?= htmlspecialchars($item[‘account_name’] ?? ‘’) ?></span>

<?php endif; ?>

</td>

<td class=”text-right”>₱<?=
number_format($item[‘amount’], 2) ?></td>

</tr>

<?php endif; ?>

<?php endforeach; ?>

</tbody>

</table>

</div>

</div>

</div>

</div>

<?php endforeach; ?>

</div>

<?php endif; ?>

</div>

</div>

<?php include(“widgets/[Link]”); ?>

</div>

</div>

<!—MODAL: ADD MISSING PAYMENT 


<div class=”modal fade” id=”addPaymentModal” tabindex=”-1”
role=”dialog” aria-labelledby=”addPaymentModalLabel” aria-
hidden=”true”>

<div class=”modal-dialog” role=”document”>

<div class=”modal-content”>

<form method=”POST” action=”approve_transactions.php”>

<input type=”hidden” name=”action”


value=”add_missing_payment”>

<input type=”hidden” name=”target_or” id=”target_or_input”>

<div class=”modal-header bg-info text-white”>

<h5 class=”modal-title text-white”


id=”addPaymentModalLabel”>Edit / Add Missing Payment</h5>

<button type=”button” class=”close text-white” data-


dismiss=”modal” aria-label=”Close”>

<span aria-hidden=”true”>&times;</span>

</button>

</div>

<div class=”modal-body”>

<div class=”alert alert-warning small”>

Adding a payment here will immediately deduct from the


member’s balance and inject the record into the Pending batch: <strong
id=”display_target_or”></strong>.

<br><br><strong>Note:</strong> You cannot modify a


deposit/loan that the member has already paid in this batch.

</div>

<div class=”form-group”>

<label>Select Member <span


class=”text-danger”>*</span></label>
<select name=”member_id” id=”modal_member_select”
class=”form-control custom-select2” required>

<option value=””>Loading members…</option>

</select>

</div>

<div class=”form-group”>

<label>Payment Category <span class=”text-


danger”>*</span></label>

<select name=”payment_type” id=”modal_payment_type”


class=”form-control” required>

<option value=”deposit”>Deposit / Fund</option>

<option value=”loan”>Loan Payment</option>

</select>

</div>

<div class=”form-group”>

<label>Select Account/Loan <span class=”text-


danger”>*</span></label>

<select name=”target_id” id=”modal_target_account”


class=”form-control custom-select2” required>

<option value=””>Select a member first…</option>

</select>

</div>

<!—Deposit Fields 

<div id=”modal_deposit_fields”>

<div class=”form-group”>
<label>Amount (₱) <span
class=”text-danger”>*</span></label>

<input type=”number” name=”deposit_amount”


id=”modal_deposit_amount” class=”form-control” step=”0.01”
min=”0.01”>

</div>

</div>

<!—Loan Fields 

<div id=”modal_loan_fields” style=”display: none;”>

<div class=”row”>

<div class=”col-6”>

<div class=”form-group”>

<label>Principal (₱) <span class=”text-


danger”>*</span></label>

<input type=”number” name=”loan_principal”


id=”modal_loan_principal” class=”form-control” step=”0.01” min=”0”
value=”0.00”>

</div>

</div>

<div class=”col-6”>

<div class=”form-group”>

<label>Interest (₱) <span class=”text-


danger”>*</span></label>

<input type=”number” name=”loan_interest”


id=”modal_loan_interest” class=”form-control” step=”0.01” min=”0”
value=”0.00”>

</div>

</div>

</div>
</div>

</div>

<div class=”modal-footer”>

<button type=”button” class=”btn btn-secondary” data-


dismiss=”modal”>Cancel</button>

<button type=”submit” class=”btn btn-info”><I class=”dw


dw-add”></i> Save Payment to Batch</button>

</div>

</form>

</div>

</div>

</div>

<!—JS 

<script src=”vendors/scripts/[Link]”></script>

<script src=”vendors/scripts/[Link]”></script>

<script src=”vendors/scripts/[Link]”></script>

<script src=”vendors/scripts/[Link]”></script>

<script
src=[Link]
script>

<script>

$(document).ready(function() {

$(‘.custom-select2’).select2({ width: ‘100%’, dropdownParent: $


(‘#addPaymentModal’) });

// Toggle fields based on payment category


$(‘#modal_payment_type’).change(function() {

Var type = $(this).val();

If (type === ‘deposit’) {

$(‘#modal_deposit_fields’).show();

$(‘#modal_deposit_amount’).prop(‘required’, true);

$(‘#modal_loan_fields’).hide();

$(‘#modal_loan_principal’).prop(‘required’, false);

$(‘#modal_loan_interest’).prop(‘required’, false);

} else {

$(‘#modal_deposit_fields’).hide();

$(‘#modal_deposit_amount’).prop(‘required’, false);

$(‘#modal_loan_fields’).show();

$(‘#modal_loan_principal’).prop(‘required’, true);

$(‘#modal_loan_interest’).prop(‘required’, true);

// Refresh the accounts dropdown if a member is already selected

If ($(‘#modal_member_select’).val()) {

$(‘#modal_member_select’).trigger(‘change’);

});

// Load accounts when member is selected, FILTERING OUT accounts


already paid in this batch

$(‘#modal_member_select’).change(function() {

Var member_id = $(this).val();

Var type = $(‘#modal_payment_type’).val();


Var or_number = $(‘#target_or_input’).val(); // Get OR number to
filter

Var targetSelect = $(‘#modal_target_account’);

[Link]().append(‘<option
value=””>Loading…</option>’);

if (member_id) {

$.getJSON(‘approve_transactions.php’, { ajax_action:
‘get_member_accounts’, member_id: member_id, type: type, or_number:
or_number }, function(data) {

[Link]();

if ([Link] === 0) {

[Link](‘<option value=””>No available items


to add</option>’);

} else {

[Link](‘<option value=””>-- Select


--</option>’);

$.each(data, function(index, item) {

[Link](‘<option value=”’ + [Link] + ‘”>’


+ [Link] + ‘</option>’);

});

});

});

});

// Function called when “Add Missing Payment” button is clicked


Function openAddPaymentModal(orNumber, officeName) {

$(‘#target_or_input’).val(orNumber);

$(‘#display_target_or’).text(orNumber);

Var memberSelect = $(‘#modal_member_select’);

[Link]().append(‘<option value=””>Loading
members…</option>’);

$.getJSON(‘approve_transactions.php’, { ajax_action:
‘get_office_members’, office: officeName }, function(data) {

[Link]().append(‘<option value=””>-- Select


Member --</option>’);

$.each(data, function(index, member) {

[Link](‘<option value=”’ +
member.membership_id + ‘”>’ + [Link] + ‘</option>’);

});

});

$(‘#modal_payment_type’).val(‘deposit’).trigger(‘change’);

$(‘#modal_target_account’).empty().append(‘<option
value=””>Select a member first…</option>’);

$(‘#modal_deposit_amount’).val(‘’);

$(‘#modal_loan_principal’).val(‘0.00’);

$(‘#modal_loan_interest’).val(‘0.00’);

$(‘#addPaymentModal’).modal(‘show’);

</script>
</body>

</html>

You might also like