38808-vm/includes/accounting_functions.php
2026-03-11 17:54:07 +00:00

67 lines
2.5 KiB
PHP

<?php
require_once 'db/config.php';
function get_journal_entries() {
$db = db();
$stmt = $db->query("SELECT j.*, SUM(e.debit) as total_debit, SUM(e.credit) as total_credit
FROM accounting_journal j
LEFT JOIN accounting_entries e ON j.id = e.journal_id
GROUP BY j.id ORDER BY j.date DESC");
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
function get_full_ledger() {
$db = db();
$stmt = $db->query("SELECT j.date, j.description, j.reference, e.account_name, e.debit, e.credit
FROM accounting_journal j
JOIN accounting_entries e ON j.id = e.journal_id
ORDER BY j.date DESC, j.id DESC");
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
function get_trial_balance() {
$db = db();
$stmt = $db->query("SELECT account_name, SUM(debit) as total_debit, SUM(credit) as total_credit
FROM accounting_entries
GROUP BY account_name");
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
function get_balance_sheet() {
$db = db();
$stmt = $db->query("SELECT a.name, a.type, SUM(e.debit - e.credit) as balance
FROM accounting_accounts a
LEFT JOIN accounting_entries e ON a.name = e.account_name
GROUP BY a.name, a.type");
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
$sheet = ['Assets' => 0, 'Liabilities' => 0, 'Equity' => 0, 'Revenue' => 0, 'Expenses' => 0];
foreach($data as $row) {
$sheet[$row['type']] += $row['balance'];
}
return $sheet;
}
function get_all_accounts() {
return db()->query("SELECT * FROM accounting_accounts ORDER BY type, name")->fetchAll(PDO::FETCH_ASSOC);
}
function add_journal_entry($date, $description, $reference, $entries) {
$db = db();
$db->beginTransaction();
try {
$stmt = $db->prepare("INSERT INTO accounting_journal (date, description, reference) VALUES (?, ?, ?)");
$stmt->execute([$date, $description, $reference]);
$journal_id = $db->lastInsertId();
$stmt = $db->prepare("INSERT INTO accounting_entries (journal_id, account_name, debit, credit) VALUES (?, ?, ?, ?)");
foreach ($entries as $entry) {
$stmt->execute([$journal_id, $entry['account'], $entry['debit'], $entry['credit']]);
}
$db->commit();
return true;
} catch (Exception $e) {
$db->rollBack();
return false;
}
}
?>