modifying register

This commit is contained in:
Flatlogic Bot 2026-02-19 08:20:05 +00:00
parent e2ac02cc7a
commit e3240af16d
2 changed files with 127 additions and 37 deletions

150
index.php
View File

@ -1278,6 +1278,8 @@ if (isset($_POST['add_hr_department'])) {
$stmt->execute([$register_id, $user_id, $opening_balance]);
$_SESSION['register_session_id'] = db()->lastInsertId();
$message = "Register opened successfully!";
header("Location: index.php?page=pos");
exit;
}
}
@ -1303,6 +1305,8 @@ if (isset($_POST['add_hr_department'])) {
unset($_SESSION['register_session_id']);
$message = "Register closed successfully!";
header("Location: index.php?page=dashboard");
exit;
}
@ -1914,8 +1918,8 @@ switch ($page) {
$whereSql = implode(" AND ", $where);
$stmt = db()->prepare("SELECT s.*, r.name as register_name, u.username
FROM register_sessions s
JOIN cash_registers r ON s.register_id = r.id
JOIN users u ON s.user_id = u.id
LEFT JOIN cash_registers r ON s.register_id = r.id
LEFT JOIN users u ON s.user_id = u.id
WHERE $whereSql
ORDER BY s.id DESC");
$stmt->execute($params);
@ -7030,14 +7034,20 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
<table class="table table-hover align-middle">
<thead>
<tr>
<th data-en="ID" data-ar="المعرف">ID</th>
<th data-en="Register" data-ar="الخزينة">Register</th>
<th data-en="Cashier" data-ar="الكاشير">Cashier</th>
<th data-en="Opened At" data-ar="وقت الفتح">Opened At</th>
<th data-en="Closed At" data-ar="وقت الإغلاق">Closed At</th>
<th data-en="Opening Bal." data-ar="رصيد الافتتاح">Opening Bal.</th>
<th data-en="Expected Bal." data-ar="الرصيد المتوقع">Expected Bal.</th>
<th data-en="Cash in Hand" data-ar="النقد الفعلي">Cash in Hand</th>
<th data-en="Difference" data-ar="الفرق">Difference</th>
<th data-en="Cash Sales" data-ar="مبيعات نقدية">Cash Sales</th>
<th data-en="Card Sales" data-ar="مبيعات الشبكة">Card Sales</th>
<th data-en="Transfer" data-ar="تحويل">Transfer</th>
<th data-en="Credit" data-ar="آجل">Credit</th>
<th data-en="Total Sales" data-ar="إجمالي المبيعات">Total Sales</th>
<th data-en="Expected Cash" data-ar="النقد المتوقع">Expected Cash</th>
<th data-en="Actual Cash" data-ar="النقد الفعلي">Actual Cash</th>
<th data-en="Shortage" data-ar="النقص/الزيادة">Shortage</th>
<th data-en="Status" data-ar="الحالة">Status</th>
<th class="text-end" data-en="Report" data-ar="تقرير">Report</th>
</tr>
@ -7045,16 +7055,41 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
<tbody>
<?php foreach ($data['sessions'] as $s): ?>
<tr>
<td class="fw-bold"><?= htmlspecialchars($s['register_name']) ?></td>
<td><?= htmlspecialchars($s['username']) ?></td>
<td>#<?= $s['id'] ?></td>
<td class="fw-bold"><?= htmlspecialchars($s['register_name'] ?? 'N/A') ?></td>
<td><?= htmlspecialchars($s['username'] ?? 'N/A') ?></td>
<td><?= $s['opened_at'] ?></td>
<td><?= $s['closed_at'] ?? '---' ?></td>
<td>OMR <?= number_format((float)$s['opening_balance'], 3) ?></td>
<td>OMR <?= number_format((float)($s['closing_balance'] ?? 0), 3) ?></td>
<?php
$stats_stmt = db()->prepare("SELECT
SUM(CASE WHEN LOWER(p.payment_method) = 'cash' THEN p.amount ELSE 0 END) as cash_total,
SUM(CASE WHEN LOWER(p.payment_method) IN ('card', 'credit card', 'visa', 'mastercard') THEN p.amount ELSE 0 END) as card_total,
SUM(CASE WHEN LOWER(p.payment_method) = 'credit' THEN p.amount ELSE 0 END) as credit_total,
SUM(CASE WHEN LOWER(p.payment_method) LIKE '%transfer%' OR LOWER(p.payment_method) LIKE '%bank%' THEN p.amount ELSE 0 END) as transfer_total,
SUM(p.amount) as total_sales
FROM pos_payments p
JOIN pos_transactions t ON p.transaction_id = t.id
WHERE t.register_session_id = ? AND t.status = 'completed'");
$stats_stmt->execute([$s['id']]);
$st = $stats_stmt->fetch();
$c_total = (float)($st['cash_total'] ?? 0);
$cd_total = (float)($st['card_total'] ?? 0);
$cr_total = (float)($st['credit_total'] ?? 0);
$tr_total = (float)($st['transfer_total'] ?? 0);
$t_sales = (float)($st['total_sales'] ?? 0);
$row_expected_cash = (float)$s['opening_balance'] + $c_total;
?>
<td>OMR <?= number_format($c_total, 3) ?></td>
<td>OMR <?= number_format($cd_total, 3) ?></td>
<td>OMR <?= number_format($tr_total, 3) ?></td>
<td>OMR <?= number_format($cr_total, 3) ?></td>
<td class="fw-bold">OMR <?= number_format($t_sales, 3) ?></td>
<td>OMR <?= number_format($row_expected_cash, 3) ?></td>
<td>OMR <?= number_format((float)($s['cash_in_hand'] ?? 0), 3) ?></td>
<td>
<?php if ($s['status'] === 'closed'):
$diff = $s['cash_in_hand'] - $s['closing_balance'];
$diff = (float)($s['cash_in_hand'] ?? 0) - $row_expected_cash;
$color = $diff == 0 ? 'text-success' : ($diff > 0 ? 'text-info' : 'text-danger');
?>
<span class="<?= $color ?> fw-bold">OMR <?= number_format($diff, 3) ?></span>
@ -7115,38 +7150,75 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
elseif (strpos($method, 'transfer') !== false || strpos($method, 'bank') !== false) $bank_transfer_sales = $m['total'];
else $cash_sales += $m['total'];
}
$total_sales = $cash_sales + $card_sales + $credit_sales + $bank_transfer_sales;
$expected_balance = (float)$s['opening_balance'] + $cash_sales; // Usually balance in hand is opening + cash sales
$total_sales = $cash_sales + $card_sales + $credit_sales + $bank_transfer_sales;
$expected_cash_total = (float)$s['opening_balance'] + $cash_sales;
$total_all = (float)$s['opening_balance'] + $total_sales;
?>
<div class="d-flex justify-content-between mb-2">
<span>Opening Balance:</span>
<span class="fw-bold">OMR <?= number_format((float)$s['opening_balance'], 3) ?></span>
</div>
<div class="d-flex justify-content-between mb-2">
<span>Cash Sales:</span>
<span class="fw-bold">OMR <?= number_format($cash_sales, 3) ?></span>
</div>
<div class="d-flex justify-content-between mb-2">
<span>Credit Card Sales:</span>
<span class="fw-bold">OMR <?= number_format($card_sales, 3) ?></span>
</div>
<div class="d-flex justify-content-between mb-2">
<span>Credit:</span>
<span class="fw-bold">OMR <?= number_format($credit_sales, 3) ?></span>
</div>
<div class="d-flex justify-content-between mb-2 border-bottom pb-2">
<span>Bank Transfer:</span>
<span class="fw-bold">OMR <?= number_format($bank_transfer_sales, 3) ?></span>
</div>
<div class="d-flex justify-content-between mb-2 h5 mt-3 text-primary">
<span>Balance (Total):</span>
<span>OMR <?= number_format($total_all, 3) ?></span>
<div class="card border-0 bg-light mb-4">
<div class="card-body">
<h6 class="fw-bold text-uppercase small mb-3">Sales Summary</h6>
<div class="d-flex justify-content-between mb-2">
<span>Opening Balance:</span>
<span class="fw-bold">OMR <?= number_format((float)$s['opening_balance'], 3) ?></span>
</div>
<div class="d-flex justify-content-between mb-2">
<span>Cash Sales:</span>
<span class="fw-bold">OMR <?= number_format($cash_sales, 3) ?></span>
</div>
<div class="d-flex justify-content-between mb-2">
<span>Credit Card Sales:</span>
<span class="fw-bold">OMR <?= number_format($card_sales, 3) ?></span>
</div>
<div class="d-flex justify-content-between mb-2">
<span>Credit:</span>
<span class="fw-bold">OMR <?= number_format($credit_sales, 3) ?></span>
</div>
<div class="d-flex justify-content-between mb-2">
<span>Bank Transfer:</span>
<span class="fw-bold">OMR <?= number_format($bank_transfer_sales, 3) ?></span>
</div>
<div class="d-flex justify-content-between mb-2 border-top pt-2 mt-2 h6 text-primary">
<span>Total Sales:</span>
<span class="fw-bold">OMR <?= number_format($total_sales, 3) ?></span>
</div>
</div>
</div>
<div class="card border-0 bg-primary bg-opacity-10 mb-4">
<div class="card-body">
<h6 class="fw-bold text-uppercase small mb-3 text-primary">Cash Reconciliation</h6>
<div class="d-flex justify-content-between mb-2">
<span>Opening Balance:</span>
<span>OMR <?= number_format((float)$s['opening_balance'], 3) ?></span>
</div>
<div class="d-flex justify-content-between mb-2">
<span>(+) Cash Sales:</span>
<span>OMR <?= number_format($cash_sales, 3) ?></span>
</div>
<div class="d-flex justify-content-between mb-2 border-top pt-2 mt-2 h6">
<span>Expected Cash:</span>
<span class="fw-bold">OMR <?= number_format($expected_cash_total, 3) ?></span>
</div>
<?php if ($s['status'] === 'closed'): ?>
<div class="d-flex justify-content-between mb-2">
<span>Actual Cash:</span>
<span class="fw-bold">OMR <?= number_format((float)$s['cash_in_hand'], 3) ?></span>
</div>
<?php
$shortage = $s['cash_in_hand'] - $expected_cash_total;
$shortage_class = $shortage < 0 ? 'text-danger' : ($shortage > 0 ? 'text-info' : 'text-success');
?>
<div class="d-flex justify-content-between mb-0 h5 mt-2 <?= $shortage_class ?>">
<span>Shortage / Overage:</span>
<span class="fw-bold">OMR <?= number_format($shortage, 3) ?></span>
</div>
<?php endif; ?>
</div>
</div>
<div class="mt-4">
<h6 class="fw-bold small text-uppercase mb-2">Transaction Details</h6>
<div class="table-responsive">
<table class="table table-sm table-bordered small">
@ -7183,7 +7255,7 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
<hr>
<div class="row g-2 small text-muted">
<div class="col-6">Expected Cash: OMR <?= number_format($expected_balance, 3) ?></div>
<div class="col-6">Expected Cash: OMR <?= number_format($expected_cash_total, 3) ?></div>
<div class="col-6 text-end">Actual Cash: OMR <?= number_format((float)($s['cash_in_hand'] ?? 0), 3) ?></div>
</div>
@ -7302,8 +7374,12 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
<span class="text-muted">Bank Transfer:</span>
<span class="fw-bold">OMR <?= number_format($bank_transfer_sales, 3) ?></span>
</div>
<div class="d-flex justify-content-between mb-1 border-top pt-1 mt-1 fw-bold text-dark">
<span>Total Sales:</span>
<span>OMR <?= number_format($total_sales, 3) ?></span>
</div>
<hr class="my-2">
<div class="d-flex justify-content-between fw-bold text-primary mb-1">
<div class="d-flex justify-content-between fw-bold text-primary mb-1 h6">
<span>Balance (Total):</span>
<span>OMR <?= number_format($total_all, 3) ?></span>
</div>

View File

@ -60,3 +60,17 @@
2026-02-19 07:02:59 - POST: {"name_en":"Tissue","name_ar":"\u0645\u062d\u0627\u0631\u0645 \u0648\u0631\u0642\u064a\u0629","category_id":"2","unit_id":"2","supplier_id":"6","sku":"760115926272","sale_price":"0.25","purchase_price":"0.2","stock_quantity":"5","min_stock_level":"0.000","vat_rate":"5","expiry_date":"","promotion_start":"","promotion_end":"","promotion_percent":"0.00","add_item":""}
2026-02-19 07:12:25 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.883}]","total_amount":"0.8825000000000001","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":1,\"price\":0.3825},{\"id\":3,\"qty\":2,\"price\":0.25}]"}
2026-02-19 07:12:39 - POST: {"close_register":"1","session_id":"3","cash_in_hand":"5","notes":""}
2026-02-19 07:30:27 - POST: {"open_register":"1","register_id":"1","opening_balance":"6"}
2026-02-19 07:30:51 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.845}]","total_amount":"0.8450000000000001","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":1,\"price\":0.3825},{\"id\":3,\"qty\":1,\"price\":0.25},{\"id\":2,\"qty\":1,\"price\":0.2125}]"}
2026-02-19 07:30:56 - POST: {"open_register":"1","register_id":"1","opening_balance":"6"}
2026-02-19 07:31:28 - POST: {"close_register":"1","session_id":"4","cash_in_hand":"55","notes":""}
2026-02-19 07:33:04 - POST: {"open_register":"1","register_id":"1","opening_balance":"10"}
2026-02-19 07:33:19 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.845}]","total_amount":"0.845","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":3,\"qty\":1,\"price\":0.25},{\"id\":2,\"qty\":1,\"price\":0.2125},{\"id\":1,\"qty\":1,\"price\":0.3825}]"}
2026-02-19 07:33:23 - POST: {"open_register":"1","register_id":"1","opening_balance":"10"}
2026-02-19 07:33:39 - POST: {"close_register":"1","session_id":"5","cash_in_hand":"10","notes":""}
2026-02-19 07:57:20 - POST: {"open_register":"1","register_id":"1","opening_balance":"44"}
2026-02-19 07:57:30 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.845}]","total_amount":"0.8450000000000001","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":1,\"price\":0.3825},{\"id\":3,\"qty\":1,\"price\":0.25},{\"id\":2,\"qty\":1,\"price\":0.2125}]"}
2026-02-19 07:57:44 - POST: {"close_register":"1","session_id":"6","cash_in_hand":"9","notes":""}
2026-02-19 07:58:34 - POST: {"open_register":"1","register_id":"1","opening_balance":"11"}
2026-02-19 07:58:46 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.845}]","total_amount":"0.8450000000000001","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":1,\"price\":0.3825},{\"id\":3,\"qty\":1,\"price\":0.25},{\"id\":2,\"qty\":1,\"price\":0.2125}]"}
2026-02-19 07:59:08 - POST: {"close_register":"1","session_id":"7","cash_in_hand":"13","notes":""}