diff --git a/sales.php b/sales.php index e591526..c07c81d 100644 --- a/sales.php +++ b/sales.php @@ -4,8 +4,28 @@ $user = require_permission('sales', 'show'); $mode = isset($_GET['mode']) && in_array($_GET['mode'], ['pos', 'normal'], true) ? $_GET['mode'] : null; $branch = isset($_GET['branch']) && array_key_exists($_GET['branch'], branches()) ? $_GET['branch'] : null; -$search = $_GET['q'] ?? ''; -$statusFilter = $_GET['status'] ?? ''; +$search = trim((string) ($_GET['q'] ?? '')); +$statusFilter = trim((string) ($_GET['status'] ?? '')); +$paymentStatus = trim((string) ($_GET['payment_status'] ?? '')); +$deliveryOptions = eid_delivery_status_options(); +$deliveryStatus = trim((string) ($_GET['delivery_status'] ?? '')); +$dateFrom = trim((string) ($_GET['date_from'] ?? '')); +$dateTo = trim((string) ($_GET['date_to'] ?? '')); +$legacyPaymentStatuses = ['paid', 'partial', 'unpaid']; +if ($paymentStatus === '' && in_array($statusFilter, $legacyPaymentStatuses, true)) { + $paymentStatus = $statusFilter; + $statusFilter = ''; +} +if (!in_array($statusFilter, ['', 'order', 'completed'], true)) { + $statusFilter = ''; +} +if (!in_array($paymentStatus, array_merge([''], $legacyPaymentStatuses), true)) { + $paymentStatus = ''; +} +if ($deliveryStatus !== '' && !array_key_exists($deliveryStatus, $deliveryOptions)) { + $deliveryStatus = ''; +} +$allowedBranches = $user && $user['role'] !== 'owner' ? get_user_branches($user) : array_keys(branches()); $activeNav = $statusFilter === 'order' ? 'sales_orders' : 'sales'; $pageTitle = $statusFilter === 'order' ? tr('الطلبات', 'Orders') : tr('المبيعات', 'Sales Ledger'); @@ -60,16 +80,28 @@ try { } } - if ($search) { + if ($search !== '') { $where .= ' AND (receipt_no LIKE :search OR cashier_name LIKE :search OR customer_name LIKE :search)'; $params[':search'] = "%$search%"; } - - if (in_array($statusFilter, ['paid', 'partial', 'unpaid'], true)) { + if ($paymentStatus !== '') { $where .= ' AND payment_status = :payment_status '; - $params[':payment_status'] = $statusFilter; - $where .= " AND COALESCE(status, 'completed') <> 'order' "; - } elseif ($statusFilter === 'order') { + $params[':payment_status'] = $paymentStatus; + } + if ($deliveryStatus !== '') { + $where .= ' AND delivery_status = :delivery_status '; + $params[':delivery_status'] = $deliveryStatus; + } + if ($dateFrom !== '') { + $where .= ' AND DATE(sale_date) >= :date_from '; + $params[':date_from'] = $dateFrom; + } + if ($dateTo !== '') { + $where .= ' AND DATE(sale_date) <= :date_to '; + $params[':date_to'] = $dateTo; + } + + if ($statusFilter === 'order') { $where .= " AND status = 'order' "; } elseif ($statusFilter === 'completed') { $where .= " AND COALESCE(status, 'completed') = 'completed' "; @@ -102,6 +134,20 @@ try { $dbError = $e->getMessage(); } +$queryState = static function (array $extra = []) use ($search, $branch, $mode, $statusFilter, $paymentStatus, $deliveryStatus, $dateFrom, $dateTo): array { + return array_filter(array_merge([ + 'q' => $search, + 'branch' => $branch, + 'mode' => $mode, + 'status' => $statusFilter, + 'payment_status' => $paymentStatus, + 'delivery_status' => $deliveryStatus, + 'date_from' => $dateFrom, + 'date_to' => $dateTo, + ], $extra), static fn ($value) => $value !== null && $value !== ''); +}; +$hasAdvancedFilters = $mode !== null || $paymentStatus !== '' || $branch !== null || $deliveryStatus !== '' || $dateFrom !== '' || $dateTo !== '' || $statusFilter !== ''; + require __DIR__ . '/includes/header.php'; ?>
@@ -111,27 +157,87 @@ require __DIR__ . '/includes/header.php';
- - POS - + + POS +
- -
- - - -
- - - + + +
+
> + + + +
+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ + +
+
+
+ + +
@@ -249,7 +355,7 @@ require __DIR__ . '/includes/header.php';
  • - +