prepare("INSERT INTO customers (name, email, phone, balance) VALUES (?, ?, ?, ?)");
$stmt->execute([$name, $email, $phone, $balance]);
$message = "Customer added successfully!";
}
}
if (isset($_POST['add_category'])) {
$name_en = $_POST['name_en'] ?? '';
$name_ar = $_POST['name_ar'] ?? '';
if ($name_en && $name_ar) {
$stmt = db()->prepare("INSERT INTO stock_categories (name_en, name_ar) VALUES (?, ?)");
$stmt->execute([$name_en, $name_ar]);
$message = "Category added successfully!";
}
}
if (isset($_POST['add_unit'])) {
$name_en = $_POST['name_en'] ?? '';
$name_ar = $_POST['name_ar'] ?? '';
$short_en = $_POST['short_en'] ?? '';
$short_ar = $_POST['short_ar'] ?? '';
if ($name_en && $name_ar) {
$stmt = db()->prepare("INSERT INTO stock_units (name_en, name_ar, short_name_en, short_name_ar) VALUES (?, ?, ?, ?)");
$stmt->execute([$name_en, $name_ar, $short_en, $short_ar]);
$message = "Unit added successfully!";
}
}
if (isset($_POST['add_item'])) {
$cat_id = $_POST['category_id'] ?: null;
$unit_id = $_POST['unit_id'] ?: null;
$supplier_id = $_POST['supplier_id'] ?: null;
$name_en = $_POST['name_en'] ?? '';
$name_ar = $_POST['name_ar'] ?? '';
$sku = $_POST['sku'] ?? '';
$p_price = (float)($_POST['purchase_price'] ?? 0);
$s_price = (float)($_POST['sale_price'] ?? 0);
$qty = (float)($_POST['stock_quantity'] ?? 0);
$min_stock = (float)($_POST['min_stock_level'] ?? 0);
$expiry = $_POST['expiry_date'] ?: null;
$image_path = null;
if (isset($_FILES['image']) && $_FILES['image']['error'] === UPLOAD_ERR_OK) {
$ext = pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION);
$filename = uniqid('item_') . '.' . $ext;
$target = 'uploads/items/' . $filename;
if (move_uploaded_file($_FILES['image']['tmp_name'], $target)) {
$image_path = $target;
}
}
if ($name_en && $name_ar) {
$stmt = db()->prepare("INSERT INTO stock_items (category_id, unit_id, supplier_id, name_en, name_ar, sku, purchase_price, sale_price, stock_quantity, min_stock_level, expiry_date, image_path) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
$stmt->execute([$cat_id, $unit_id, $supplier_id, $name_en, $name_ar, $sku, $p_price, $s_price, $qty, $min_stock, $expiry, $image_path]);
$message = "Item added successfully!";
}
}
if (isset($_POST['delete_item'])) {
$id = (int)$_POST['id'];
// Optional: delete image file
$item = db()->prepare("SELECT image_path FROM stock_items WHERE id = ?");
$item->execute([$id]);
$path = $item->fetchColumn();
if ($path && file_exists($path)) {
unlink($path);
}
$stmt = db()->prepare("DELETE FROM stock_items WHERE id = ?");
$stmt->execute([$id]);
$message = "Item deleted successfully!";
}
}
// Routing & Data Fetching
$page = $_GET['page'] ?? 'dashboard';
$data = [];
switch ($page) {
case 'customers':
$data['customers'] = db()->query("SELECT * FROM customers ORDER BY id DESC")->fetchAll();
break;
case 'categories':
$data['categories'] = db()->query("SELECT * FROM stock_categories ORDER BY id DESC")->fetchAll();
break;
case 'units':
$data['units'] = db()->query("SELECT * FROM stock_units ORDER BY id DESC")->fetchAll();
break;
case 'items':
$data['items'] = db()->query("SELECT i.*, c.name_en as cat_en, c.name_ar as cat_ar, u.short_name_en as unit_en, u.short_name_ar as unit_ar, s.name as supplier_name
FROM stock_items i
LEFT JOIN stock_categories c ON i.category_id = c.id
LEFT JOIN stock_units u ON i.unit_id = u.id
LEFT JOIN customers s ON i.supplier_id = s.id
ORDER BY i.id DESC")->fetchAll();
$data['categories'] = db()->query("SELECT * FROM stock_categories ORDER BY name_en ASC")->fetchAll();
$data['units'] = db()->query("SELECT * FROM stock_units ORDER BY name_en ASC")->fetchAll();
$data['suppliers'] = db()->query("SELECT * FROM customers ORDER BY name ASC")->fetchAll();
break;
default:
$data['customers'] = db()->query("SELECT * FROM customers ORDER BY id DESC LIMIT 5")->fetchAll();
$data['categories'] = db()->query("SELECT * FROM stock_categories ORDER BY name_en ASC")->fetchAll();
$data['units'] = db()->query("SELECT * FROM stock_units ORDER BY name_en ASC")->fetchAll();
$data['suppliers'] = db()->query("SELECT * FROM customers ORDER BY name ASC")->fetchAll();
// Dashboard stats
$data['stats'] = [
'total_customers' => db()->query("SELECT COUNT(*) FROM customers")->fetchColumn(),
'total_items' => db()->query("SELECT COUNT(*) FROM stock_items")->fetchColumn(),
];
break;
}
$projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
?>
Accounting Admin
['en' => 'Dashboard', 'ar' => 'لوحة القيادة'],
'customers' => ['en' => 'Customers', 'ar' => 'العملاء'],
'categories' => ['en' => 'Stock Categories', 'ar' => 'فئات المخزون'],
'units' => ['en' => 'Stock Units', 'ar' => 'وحدات المخزون'],
'items' => ['en' => 'Stock Items', 'ar' => 'أصناف المخزون'],
];
$currTitle = $titles[$page] ?? $titles['dashboard'];
?>
= $currTitle['en'] ?>
= $message ?>
Total Customers
= $data['stats']['total_customers'] ?>
Total Items
= $data['stats']['total_items'] ?>
Recent Customers
View All
| Name |
Phone |
Balance |
| = htmlspecialchars($c['name']) ?> |
= htmlspecialchars($c['phone']) ?> |
$= number_format((float)$c['balance'], 2) ?> |
Quick Links
Customer Management
| Name |
Email |
Phone |
Balance |
| = htmlspecialchars($c['name']) ?> |
= htmlspecialchars($c['email']) ?> |
= htmlspecialchars($c['phone']) ?> |
$= number_format((float)$c['balance'], 2) ?> |
Stock Categories
| ID |
Name (EN) |
Name (AR) |
| = $cat['id'] ?> |
= htmlspecialchars($cat['name_en']) ?> |
= htmlspecialchars($cat['name_ar']) ?> |
Stock Units
| Name (EN) |
Short (EN) |
Name (AR) |
Short (AR) |
| = htmlspecialchars($u['name_en']) ?> |
= htmlspecialchars($u['short_name_en']) ?> |
= htmlspecialchars($u['name_ar']) ?> |
= htmlspecialchars($u['short_name_ar']) ?> |
Stock Items
| Image |
SKU |
Name |
Category |
Supplier |
Stock Level |
Expiry |
Actions |
|
= htmlspecialchars($item['sku']) ?> |
= htmlspecialchars($item['name_en']) ?>
= htmlspecialchars($item['name_ar']) ?>
|
= htmlspecialchars($item['cat_en']) ?> |
= htmlspecialchars($item['supplier_name'] ?? '---') ?> |
= number_format((float)$item['stock_quantity'], 2) ?>
Min: = number_format((float)$item['min_stock_level'], 2) ?>
Low Stock
|
= $item['expiry_date'] ?: '---' ?> |
SKU = htmlspecialchars($item['sku'] ?: '---') ?>
Category = htmlspecialchars($item['cat_en'] ?: '---') ?>
Supplier = htmlspecialchars($item['supplier_name'] ?? '---') ?>
Unit = htmlspecialchars($item['unit_en'] ?: '---') ?>
Purchase Price $= number_format((float)$item['purchase_price'], 2) ?>
Sale Price $= number_format((float)$item['sale_price'], 2) ?>
Stock = number_format((float)$item['stock_quantity'], 2) ?>
Min Stock = number_format((float)$item['min_stock_level'], 2) ?>
Expiry Date = $item['expiry_date'] ?: '---' ?>
|