37241-vm/db/migrations/003_add_required_accounts.php
2026-01-03 08:40:36 +00:00

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