54 lines
2.5 KiB
PHP
54 lines
2.5 KiB
PHP
<?php
|
|
// Migration: Add Required Chart of Accounts
|
|
// This script ensures that the essential accounts for the revenue cycle exist.
|
|
|
|
if (!isset($pdo)) {
|
|
// This script should be run by migrate.php, which provides the $pdo variable.
|
|
echo "This script must be run from migrate.php\n";
|
|
return "Error: Not executed from migrate.php";
|
|
}
|
|
|
|
function account_exists($pdo, $account_code) {
|
|
$stmt = $pdo->prepare("SELECT 1 FROM accounts WHERE account_code = ?");
|
|
$stmt->execute([$account_code]);
|
|
return $stmt->fetchColumn() !== false;
|
|
}
|
|
|
|
function insert_account($pdo, $id, $code, $name, $type, $parent_id = null, $is_control = false) {
|
|
if (account_exists($pdo, $code)) {
|
|
return "Skipped: Account '{$code}' already exists.";
|
|
}
|
|
|
|
$stmt = $pdo->prepare(
|
|
"INSERT INTO accounts (id, account_code, account_name, account_type, parent_account_id, is_control_account) " .
|
|
"VALUES (?, ?, ?, ?, ?, ?)"
|
|
);
|
|
$stmt->execute([$id, $code, $name, $type, $parent_id, $is_control ? 1 : 0]);
|
|
return "Created: Account '{$code}' - {$name}.";
|
|
}
|
|
|
|
$messages = [];
|
|
|
|
// 1. Asset Accounts
|
|
$messages[] = insert_account($pdo, uuid_v4(), '1000-CASH', 'Cash on Hand', 'Asset');
|
|
$messages[] = insert_account($pdo, uuid_v4(), '1010-BANK', 'Bank Account', 'Asset');
|
|
$messages[] = insert_account($pdo, uuid_v4(), '1015-MOMO', 'Mobile Money Account', 'Asset');
|
|
$messages[] = insert_account($pdo, uuid_v4(), '1200-AR-STUDENTS', 'Accounts Receivable - Students', 'Asset', null, true);
|
|
|
|
// 2. Revenue Accounts
|
|
$revenue_parent_id = uuid_v4();
|
|
$messages[] = insert_account($pdo, $revenue_parent_id, '4000', 'School Fees Revenue', 'Revenue');
|
|
$messages[] = insert_account($pdo, uuid_v4(), '4100', 'Tuition Fees - Nursery/KG', 'Revenue', $revenue_parent_id);
|
|
$messages[] = insert_account($pdo, uuid_v4(), '4200', 'Tuition Fees - Primary', 'Revenue', $revenue_parent_id);
|
|
$messages[] = insert_account($pdo, uuid_v4(), '4300', 'Tuition Fees - JHS', 'Revenue', $revenue_parent_id);
|
|
$messages[] = insert_account($pdo, uuid_v4(), '4400', 'Boarding Fees', 'Revenue', $revenue_parent_id);
|
|
$messages[] = insert_account($pdo, uuid_v4(), '4500', 'Transport Fees', 'Revenue', $revenue_parent_id);
|
|
$messages[] = insert_account($pdo, uuid_v4(), '4600', 'PTA & Other Fees', 'Revenue', $revenue_parent_id);
|
|
|
|
// 3. Contra-Revenue Accounts
|
|
// Using 'Revenue' type as it's a contra-revenue account.
|
|
$messages[] = insert_account($pdo, uuid_v4(), '4900', 'Scholarships & Discounts', 'Revenue');
|
|
|
|
return implode("\n", array_filter($messages));
|
|
|