134 lines
5.8 KiB
PHP
134 lines
5.8 KiB
PHP
<?php
|
|
require_once __DIR__ . "/../includes/functions.php";
|
|
require_permission("expenses_edit");
|
|
require_once __DIR__ . '/../db/config.php';
|
|
$pdo = db();
|
|
|
|
$id = isset($_GET['id']) ? (int)$_GET['id'] : null;
|
|
$expense = null;
|
|
$message = '';
|
|
$isEdit = false;
|
|
|
|
if ($id) {
|
|
$stmt = $pdo->prepare("SELECT * FROM expenses WHERE id = ?");
|
|
$stmt->execute([$id]);
|
|
$expense = $stmt->fetch();
|
|
if ($expense) {
|
|
$isEdit = true;
|
|
} else {
|
|
header("Location: expenses.php");
|
|
exit;
|
|
}
|
|
}
|
|
|
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|
$category_id = $_POST['category_id'];
|
|
$outlet_id = $_POST['outlet_id'];
|
|
$amount = $_POST['amount'];
|
|
$description = trim($_POST['description']);
|
|
$expense_date = $_POST['expense_date'];
|
|
|
|
if (empty($category_id) || empty($amount) || empty($expense_date)) {
|
|
$message = '<div class="alert alert-danger">Category, amount, and date are required.</div>';
|
|
} else {
|
|
try {
|
|
if ($isEdit) {
|
|
$stmt = $pdo->prepare("UPDATE expenses SET category_id = ?, outlet_id = ?, amount = ?, description = ?, expense_date = ? WHERE id = ?");
|
|
$stmt->execute([$category_id, $outlet_id, $amount, $description, $expense_date, $id]);
|
|
$message = '<div class="alert alert-success">Expense updated successfully!</div>';
|
|
$stmt = $pdo->prepare("SELECT * FROM expenses WHERE id = ?");
|
|
$stmt->execute([$id]);
|
|
$expense = $stmt->fetch();
|
|
} else {
|
|
$stmt = $pdo->prepare("INSERT INTO expenses (category_id, outlet_id, amount, description, expense_date) VALUES (?, ?, ?, ?, ?)");
|
|
$stmt->execute([$category_id, $outlet_id, $amount, $description, $expense_date]);
|
|
header("Location: expenses.php?success=created");
|
|
exit;
|
|
}
|
|
} catch (PDOException $e) {
|
|
$message = '<div class="alert alert-danger">Database error: ' . $e->getMessage() . '</div>';
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!$isEdit) {
|
|
$expense = [
|
|
'category_id' => $_POST['category_id'] ?? '',
|
|
'outlet_id' => $_POST['outlet_id'] ?? '',
|
|
'amount' => $_POST['amount'] ?? '',
|
|
'description' => $_POST['description'] ?? '',
|
|
'expense_date' => $_POST['expense_date'] ?? date('Y-m-d')
|
|
];
|
|
}
|
|
|
|
$expense_categories = $pdo->query("SELECT * FROM expense_categories ORDER BY name ASC")->fetchAll();
|
|
$outlets = $pdo->query("SELECT * FROM outlets ORDER BY name ASC")->fetchAll();
|
|
|
|
include 'includes/header.php';
|
|
?>
|
|
|
|
<div class="mb-4">
|
|
<a href="expenses.php" class="text-decoration-none text-muted mb-2 d-inline-block"><i class="bi bi-arrow-left"></i> Back to Expenses</a>
|
|
<h2 class="fw-bold mb-0"><?= $isEdit ? 'Edit Expense' : 'Add New Expense' ?></h2>
|
|
</div>
|
|
|
|
<?= $message ?>
|
|
|
|
<div class="card border-0 shadow-sm">
|
|
<div class="card-body">
|
|
<form method="POST">
|
|
<div class="row">
|
|
<div class="col-md-6">
|
|
<div class="mb-3">
|
|
<label class="form-label">Category <span class="text-danger">*</span></label>
|
|
<select name="category_id" class="form-select" required>
|
|
<option value="">Select Category</option>
|
|
<?php foreach ($expense_categories as $cat): ?>
|
|
<option value="<?= $cat['id'] ?>" <?= $expense['category_id'] == $cat['id'] ? 'selected' : '' ?>><?= htmlspecialchars($cat['name']) ?></option>
|
|
<?php endforeach; ?>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<div class="mb-3">
|
|
<label class="form-label">Outlet <span class="text-danger">*</span></label>
|
|
<select name="outlet_id" class="form-select" required>
|
|
<?php foreach ($outlets as $outlet): ?>
|
|
<option value="<?= $outlet['id'] ?>" <?= $expense['outlet_id'] == $outlet['id'] ? 'selected' : '' ?>><?= htmlspecialchars($outlet['name']) ?></option>
|
|
<?php endforeach; ?>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-md-6">
|
|
<div class="mb-3">
|
|
<label class="form-label">Amount <span class="text-danger">*</span></label>
|
|
<div class="input-group">
|
|
<span class="input-group-text">$</span>
|
|
<input type="number" step="0.01" name="amount" class="form-control" value="<?= htmlspecialchars($expense['amount']) ?>" required>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<div class="mb-3">
|
|
<label class="form-label">Date <span class="text-danger">*</span></label>
|
|
<input type="date" name="expense_date" class="form-control" value="<?= htmlspecialchars($expense['expense_date']) ?>" required>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="mb-3">
|
|
<label class="form-label">Description</label>
|
|
<textarea name="description" class="form-control" rows="3" placeholder="What was this expense for?"><?= htmlspecialchars($expense['description']) ?></textarea>
|
|
</div>
|
|
<hr>
|
|
<div class="d-flex justify-content-end gap-2">
|
|
<a href="expenses.php" class="btn btn-secondary">Cancel</a>
|
|
<button type="submit" class="btn btn-primary"><?= $isEdit ? 'Save Changes' : 'Record Expense' ?></button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
<?php include 'includes/footer.php'; ?>
|