38471-vm/diff.txt
2026-02-25 09:58:14 +00:00

182 lines
11 KiB
Plaintext

diff --git a/index.php b/index.php
index b15ee60..3f88b32 100644
--- a/index.php
+++ b/index.php
@@ -35,6 +35,15 @@ if ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') || (isset($_SERVER[
}
session_start();
+if (isset($_GET['action']) && $_GET['action'] === 'switch_outlet') {
+ $target = (int)$_GET['id'];
+ if (($_SESSION['user_role_name'] ?? '') === 'Administrator') {
+ $_SESSION['outlet_id'] = $target === 0 ? null : $target;
+ }
+ header("Location: " . ($_SERVER['HTTP_REFERER'] ?? 'index.php'));
+ exit;
+}
+
if (isset($_GET['action']) && $_GET['action'] === 'download_items_template') {
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=items_import_template.csv');
@@ -3014,6 +3023,11 @@ $page_num = isset($_GET["p"]) ? (int)$_GET["p"] : 1;
if ($page_num < 1) $page_num = 1;
$offset = ($page_num - 1) * $limit;
switch ($page) {
+ case 'outlets':
+ $stmt = db()->prepare("SELECT * FROM outlets ORDER BY id DESC");
+ $stmt->execute();
+ $data['outlets'] = $stmt->fetchAll();
+ break;
case 'suppliers':
$where = ["1=1"];
$params = [];
@@ -4184,6 +4198,26 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
</div>
</div>
<?php endif; ?>
+ <?php
+ if (($_SESSION['user_role_name'] ?? '') === 'Administrator'):
+ $outlets = db()->query("SELECT * FROM outlets WHERE status = 'active'")->fetchAll(PDO::FETCH_ASSOC);
+ $cur_out = $_SESSION['outlet_id'] ?? 0;
+ $cur_name = 'All Outlets';
+ foreach ($outlets as $o) { if ($o['id'] == $cur_out) $cur_name = $o['name']; }
+ ?>
+ <div class="dropdown me-3">
+ <button class="btn btn-outline-primary btn-sm dropdown-toggle" type="button" data-bs-toggle="dropdown">
+ <i class="bi bi-shop"></i> <span class="d-none d-md-inline"><?= htmlspecialchars($cur_name) ?></span>
+ </button>
+ <ul class="dropdown-menu shadow-sm border-0">
+ <li><a class="dropdown-item <?= $cur_out == 0 ? 'active' : '' ?>" href="index.php?action=switch_outlet&id=0">All Outlets</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <?php foreach ($outlets as $o): ?>
+ <li><a class="dropdown-item <?= $cur_out == $o['id'] ? 'active' : '' ?>" href="index.php?action=switch_outlet&id=<?= $o['id'] ?>"><?= htmlspecialchars($o['name']) ?></a></li>
+ <?php endforeach; ?>
+ </ul>
+ </div>
+ <?php endif; ?>
<div class="dropdown me-3">
<button class="btn btn-outline-secondary btn-sm dropdown-toggle" type="button" data-bs-toggle="dropdown">
<i class="bi bi-palette"></i> <span><?= $lang === 'ar' ? 'المظهر' : 'Theme' ?></span>
@@ -4488,6 +4522,121 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
<h1 class="display-4 fw-bold text-muted text-center mt-3"><?= htmlspecialchars($data['settings']['company_name'] ?? 'Company Name') ?></h1>
</div>
<?php endif; ?>
+ <?php elseif ($page === 'outlets' && ($_SESSION['user_role_name'] ?? '') === 'Administrator'): ?>
+ <div class="card border-0 shadow-sm rounded-4 mb-4">
+ <div class="card-header bg-white border-bottom-0 pt-4 pb-0 px-4 d-flex justify-content-between align-items-center">
+ <h5 class="fw-bold mb-0"><i class="bi bi-shop text-primary me-2"></i> Manage Outlets</h5>
+ <button class="btn btn-primary rounded-pill px-3 py-2" data-bs-toggle="modal" data-bs-target="#addOutletModal">
+ <i class="bi bi-plus-lg me-1"></i> Add Outlet
+ </button>
+ </div>
+ <div class="card-body p-4">
+ <div class="table-responsive">
+ <table class="table table-hover align-middle mb-0">
+ <thead class="table-light">
+ <tr>
+ <th>ID</th>
+ <th>Name</th>
+ <th>Address</th>
+ <th>Phone</th>
+ <th>Status</th>
+ <th>Created At</th>
+ <th class="text-end">Actions</th>
+ </tr>
+ </thead>
+ <tbody>
+ <?php foreach ($data['outlets'] as $o): ?>
+ <tr>
+ <td>#<?= $o['id'] ?></td>
+ <td class="fw-semibold text-dark"><?= htmlspecialchars($o['name']) ?></td>
+ <td class="text-muted small"><?= htmlspecialchars($o['address'] ?: '-') ?></td>
+ <td><?= htmlspecialchars($o['phone'] ?: '-') ?></td>
+ <td><span class="badge bg-<?= $o['status'] === 'active' ? 'success' : 'secondary' ?> bg-opacity-10 text-<?= $o['status'] === 'active' ? 'success' : 'secondary' ?> rounded-pill px-2"><?= ucfirst($o['status']) ?></span></td>
+ <td class="small text-muted"><?= htmlspecialchars($o['created_at']) ?></td>
+ <td class="text-end">
+ <button class="btn btn-light btn-sm rounded-circle me-1" onclick="editOutlet(<?= htmlspecialchars(json_encode($o)) ?>)" title="Edit">
+ <i class="bi bi-pencil"></i>
+ </button>
+ <?php if ($o['id'] !== 1): ?>
+ <form method="POST" class="d-inline" onsubmit="return confirm('Are you sure you want to delete this outlet?');">
+ <input type="hidden" name="id" value="<?= $o['id'] ?>">
+ <button type="submit" name="delete_outlet" class="btn btn-light btn-sm rounded-circle text-danger" title="Delete">
+ <i class="bi bi-trash"></i>
+ </button>
+ </form>
+ <?php endif; ?>
+ </td>
+ </tr>
+ <?php endforeach; ?>
+ </tbody>
+ </table>
+ </div>
+ </div>
+ </div>
+
+ <!-- Add/Edit Modal -->
+ <div class="modal fade" id="addOutletModal" tabindex="-1">
+ <div class="modal-dialog modal-dialog-centered">
+ <div class="modal-content border-0 shadow rounded-4">
+ <form method="POST">
+ <input type="hidden" name="id" id="outlet_id">
+ <div class="modal-header border-bottom-0 pb-0">
+ <h5 class="modal-title fw-bold" id="outletModalTitle">Add Outlet</h5>
+ <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
+ </div>
+ <div class="modal-body p-4">
+ <div class="mb-3">
+ <label class="form-label small fw-semibold text-muted">Name</label>
+ <input type="text" name="name" id="outlet_name" class="form-control rounded-3" required>
+ </div>
+ <div class="mb-3">
+ <label class="form-label small fw-semibold text-muted">Phone</label>
+ <input type="text" name="phone" id="outlet_phone" class="form-control rounded-3">
+ </div>
+ <div class="mb-3">
+ <label class="form-label small fw-semibold text-muted">Address</label>
+ <textarea name="address" id="outlet_address" class="form-control rounded-3" rows="2"></textarea>
+ </div>
+ <div class="mb-0">
+ <label class="form-label small fw-semibold text-muted">Status</label>
+ <select name="status" id="outlet_status" class="form-select rounded-3">
+ <option value="active">Active</option>
+ <option value="inactive">Inactive</option>
+ </select>
+ </div>
+ </div>
+ <div class="modal-footer border-top-0 pt-0">
+ <button type="button" class="btn btn-light rounded-pill px-4" data-bs-dismiss="modal">Cancel</button>
+ <button type="submit" name="add_outlet" id="outletSubmitBtn" class="btn btn-primary rounded-pill px-4">Save Outlet</button>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+ <script>
+ function editOutlet(o) {
+ document.getElementById('outlet_id').value = o.id;
+ document.getElementById('outlet_name').value = o.name;
+ document.getElementById('outlet_phone').value = o.phone || '';
+ document.getElementById('outlet_address').value = o.address || '';
+ document.getElementById('outlet_status').value = o.status;
+ document.getElementById('outletModalTitle').innerText = 'Edit Outlet';
+ document.getElementById('outletSubmitBtn').name = 'edit_outlet';
+ document.getElementById('outletSubmitBtn').innerText = 'Update Outlet';
+ new bootstrap.Modal(document.getElementById('addOutletModal')).show();
+ }
+ document.getElementById('addOutletModal').addEventListener('hidden.bs.modal', function () {
+ document.getElementById('outlet_id').value = '';
+ document.getElementById('outlet_name').value = '';
+ document.getElementById('outlet_phone').value = '';
+ document.getElementById('outlet_address').value = '';
+ document.getElementById('outlet_status').value = 'active';
+ document.getElementById('outletModalTitle').innerText = 'Add Outlet';
+ document.getElementById('outletSubmitBtn').name = 'add_outlet';
+ document.getElementById('outletSubmitBtn').innerText = 'Save Outlet';
+ });
+ </script>
+
<?php elseif ($page === 'customers' || $page === 'suppliers'): ?>
<div class="card p-4">
<div class="d-flex justify-content-between align-items-center mb-4">