39728-vm/outlets.php
2026-04-19 16:03:44 +00:00

240 lines
12 KiB
PHP

<?php
require_once __DIR__ . '/includes/app.php';
$user = require_permission('settings', 'show');
$pageTitle = tr('الفروع (المنافذ)', 'Outlets');
$activeNav = 'outlets';
$pdo = db();
// Ensure branches table exists
$pdo->exec("CREATE TABLE IF NOT EXISTS branches (
id INT AUTO_INCREMENT PRIMARY KEY,
code VARCHAR(50) UNIQUE NOT NULL,
name_ar VARCHAR(100) NOT NULL,
name_en VARCHAR(100) NOT NULL,
city_ar VARCHAR(100),
city_en VARCHAR(100),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
)");
// Check if branches table is empty, if so, seed it
$stmt = $pdo->query("SELECT COUNT(*) FROM branches");
if ($stmt->fetchColumn() == 0) {
$defaultBranches = [
['code' => 'muscat', 'name_ar' => 'فرع مسقط', 'name_en' => 'Muscat Branch', 'city_ar' => 'مسقط', 'city_en' => 'Muscat'],
['code' => 'sohar', 'name_ar' => 'فرع صحار', 'name_en' => 'Sohar Branch', 'city_ar' => 'صحار', 'city_en' => 'Sohar'],
['code' => 'nizwa', 'name_ar' => 'فرع نزوى', 'name_en' => 'Nizwa Branch', 'city_ar' => 'نزوى', 'city_en' => 'Nizwa'],
];
$insertStmt = $pdo->prepare("INSERT IGNORE INTO branches (code, name_ar, name_en, city_ar, city_en) VALUES (?, ?, ?, ?, ?)");
foreach ($defaultBranches as $b) {
$insertStmt->execute([$b['code'], $b['name_ar'], $b['name_en'], $b['city_ar'], $b['city_en']]);
}
}
// Handle Form Submission
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$action = $_POST['action'] ?? '';
if ($action === 'create') {
$stmt = $pdo->prepare('INSERT INTO branches (code, name_ar, name_en, city_ar, city_en) VALUES (?, ?, ?, ?, ?)');
try {
$stmt->execute([$_POST['code'], $_POST['name_ar'], $_POST['name_en'], $_POST['city_ar'] ?? '', $_POST['city_en'] ?? '']);
set_flash('success', tr('تمت إضافة الفرع بنجاح', 'Outlet added successfully'));
} catch (PDOException $e) {
if ($e->getCode() == 23000) {
set_flash('danger', tr('رمز الفرع موجود مسبقاً', 'Outlet code already exists'));
} else {
set_flash('danger', tr('حدث خطأ', 'An error occurred'));
}
}
redirect_to('outlets.php');
} elseif ($action === 'edit') {
$stmt = $pdo->prepare('UPDATE branches SET name_ar = ?, name_en = ?, city_ar = ?, city_en = ? WHERE code = ?');
$stmt->execute([$_POST['name_ar'], $_POST['name_en'], $_POST['city_ar'] ?? '', $_POST['city_en'] ?? '', $_POST['code']]);
set_flash('success', tr('تم التحديث بنجاح', 'Updated successfully'));
redirect_to('outlets.php');
} elseif ($action === 'delete') {
$stmt = $pdo->prepare('DELETE FROM branches WHERE code = ?');
$stmt->execute([$_POST['code']]);
set_flash('success', tr('تم الحذف بنجاح', 'Deleted successfully'));
redirect_to('outlets.php');
}
}
$branchesList = $pdo->query("SELECT * FROM branches ORDER BY id ASC")->fetchAll();
require __DIR__ . '/includes/header.php';
?>
<div class="card shadow-sm border-0 mb-4">
<div class="card-header bg-white border-bottom-0 pt-4 pb-0 d-flex justify-content-between align-items-center">
<h5 class="fw-bold text-primary mb-0"><i class="bi bi-shop me-2"></i> <?= h($pageTitle) ?></h5>
<button class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#createModal">
<i class="bi bi-plus-lg"></i> <?= h(tr('إضافة فرع', 'Add Outlet')) ?>
</button>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover align-middle">
<thead class="table-light">
<tr>
<th><?= h(tr('الرمز', 'Code')) ?></th>
<th><?= h(tr('الاسم (عربي)', 'Name (AR)')) ?></th>
<th><?= h(tr('الاسم (إنجليزي)', 'Name (EN)')) ?></th>
<th><?= h(tr('المدينة', 'City')) ?></th>
<th class="text-end"><?= h(tr('إجراءات', 'Actions')) ?></th>
</tr>
</thead>
<tbody>
<?php foreach ($branchesList as $b): ?>
<tr>
<td><span class="badge bg-secondary"><?= h($b['code']) ?></span></td>
<td><?= h($b['name_ar']) ?></td>
<td><?= h($b['name_en']) ?></td>
<td><?= h(current_lang() === 'ar' ? $b['city_ar'] : $b['city_en']) ?></td>
<td class="text-end">
<button class="btn btn-sm btn-outline-primary"
data-bs-toggle="modal"
data-bs-target="#editModal<?= $b['id'] ?>">
<i class="bi bi-pencil"></i>
</button>
<?php if ($b['code'] !== 'muscat'): ?>
<button class="btn btn-sm btn-outline-danger"
data-bs-toggle="modal"
data-bs-target="#deleteModal<?= $b['id'] ?>">
<i class="bi bi-trash"></i>
</button>
<?php endif; ?>
</td>
</tr>
<!-- Edit Modal -->
<div class="modal fade" id="editModal<?= $b['id'] ?>" tabindex="-1" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content border-0 shadow">
<form method="post">
<div class="modal-header bg-light">
<h5 class="modal-title fw-bold"><?= h(tr('تعديل فرع', 'Edit Outlet')) ?></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body text-start">
<input type="hidden" name="action" value="edit">
<input type="hidden" name="code" value="<?= h($b['code']) ?>">
<div class="mb-3">
<label class="form-label"><?= h(tr('الرمز', 'Code')) ?></label>
<input type="text" class="form-control bg-light" value="<?= h($b['code']) ?>" disabled>
</div>
<div class="mb-3">
<label class="form-label"><?= h(tr('الاسم (عربي)', 'Name (AR)')) ?></label>
<input type="text" name="name_ar" class="form-control" value="<?= h($b['name_ar']) ?>" required>
</div>
<div class="mb-3">
<label class="form-label"><?= h(tr('الاسم (إنجليزي)', 'Name (EN)')) ?></label>
<input type="text" name="name_en" class="form-control" value="<?= h($b['name_en']) ?>" required>
</div>
<div class="row">
<div class="col-6 mb-3">
<label class="form-label"><?= h(tr('المدينة (عربي)', 'City (AR)')) ?></label>
<input type="text" name="city_ar" class="form-control" value="<?= h($b['city_ar']) ?>">
</div>
<div class="col-6 mb-3">
<label class="form-label"><?= h(tr('المدينة (إنجليزي)', 'City (EN)')) ?></label>
<input type="text" name="city_en" class="form-control" value="<?= h($b['city_en']) ?>">
</div>
</div>
</div>
<div class="modal-footer bg-light">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal"><?= h(tr('إلغاء', 'Cancel')) ?></button>
<button type="submit" class="btn btn-primary"><?= h(tr('حفظ', 'Save')) ?></button>
</div>
</form>
</div>
</div>
</div>
<!-- Delete Modal -->
<div class="modal fade" id="deleteModal<?= $b['id'] ?>" tabindex="-1" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content border-0 shadow">
<form method="post">
<div class="modal-header bg-danger text-white">
<h5 class="modal-title fw-bold"><?= h(tr('تأكيد الحذف', 'Confirm Deletion')) ?></h5>
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body p-4 text-center">
<i class="bi bi-exclamation-circle text-danger" style="font-size: 3rem;"></i>
<p class="mt-3 fs-5"><?= h(tr('هل أنت متأكد من حذف هذا الفرع؟', 'Are you sure you want to delete this outlet?')) ?></p>
<p class="text-muted fw-bold"><?= h($b['name_ar'] . ' / ' . $b['name_en']) ?></p>
<input type="hidden" name="action" value="delete">
<input type="hidden" name="code" value="<?= h($b['code']) ?>">
</div>
<div class="modal-footer bg-light justify-content-center">
<button type="button" class="btn btn-secondary px-4" data-bs-dismiss="modal"><?= h(tr('إلغاء', 'Cancel')) ?></button>
<button type="submit" class="btn btn-danger px-4"><?= h(tr('حذف', 'Delete')) ?></button>
</div>
</form>
</div>
</div>
</div>
<?php endforeach; ?>
<?php if (empty($branchesList)): ?>
<tr>
<td colspan="5" class="text-center py-4 text-muted">
<i class="bi bi-inbox fs-2 d-block mb-2"></i>
<?= h(tr('لا توجد فروع', 'No outlets found')) ?>
</td>
</tr>
<?php endif; ?>
</tbody>
</table>
</div>
</div>
</div>
<!-- Create Modal -->
<div class="modal fade" id="createModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content border-0 shadow">
<form method="post">
<div class="modal-header bg-light">
<h5 class="modal-title fw-bold"><?= h(tr('إضافة فرع جديد', 'Add New Outlet')) ?></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body text-start">
<input type="hidden" name="action" value="create">
<div class="mb-3">
<label class="form-label"><?= h(tr('الرمز (إنجليزي فقط بدون مسافات)', 'Code (English only, no spaces)')) ?></label>
<input type="text" name="code" class="form-control" placeholder="e.g. dubai" required pattern="[a-zA-Z0-9_-]+">
</div>
<div class="mb-3">
<label class="form-label"><?= h(tr('الاسم (عربي)', 'Name (AR)')) ?></label>
<input type="text" name="name_ar" class="form-control" required>
</div>
<div class="mb-3">
<label class="form-label"><?= h(tr('الاسم (إنجليزي)', 'Name (EN)')) ?></label>
<input type="text" name="name_en" class="form-control" required>
</div>
<div class="row">
<div class="col-6 mb-3">
<label class="form-label"><?= h(tr('المدينة (عربي)', 'City (AR)')) ?></label>
<input type="text" name="city_ar" class="form-control">
</div>
<div class="col-6 mb-3">
<label class="form-label"><?= h(tr('المدينة (إنجليزي)', 'City (EN)')) ?></label>
<input type="text" name="city_en" class="form-control">
</div>
</div>
</div>
<div class="modal-footer bg-light">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal"><?= h(tr('إلغاء', 'Cancel')) ?></button>
<button type="submit" class="btn btn-primary"><?= h(tr('إضافة', 'Add')) ?></button>
</div>
</form>
</div>
</div>
</div>
<?php require __DIR__ . '/includes/footer.php'; ?>