diff --git a/index.php b/index.php index 4360daa..33f58c6 100644 --- a/index.php +++ b/index.php @@ -21,6 +21,24 @@ function numberToWordsOMR($number) { return $result . " Only"; } +function getPromotionalPrice($item) { + $price = (float)$item['sale_price']; + if (isset($item['is_promotion']) && $item['is_promotion']) { + $today = date('Y-m-d'); + $start = !empty($item['promotion_start']) ? $item['promotion_start'] : null; + $end = !empty($item['promotion_end']) ? $item['promotion_end'] : null; + + $active = true; + if ($start && $today < $start) $active = false; + if ($end && $today > $end) $active = false; + + if ($active) { + $price = $price * (1 - (float)$item['promotion_percent'] / 100); + } + } + return $price; +} + function numberToWords($num) { $num = (int)$num; if ($num === 0) return "Zero"; @@ -37,9 +55,13 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET' && isset($_GET['action'])) { if ($_GET['action'] === 'search_items') { header('Content-Type: application/json'); $q = $_GET['q'] ?? ''; - $stmt = db()->prepare("SELECT id, name_en, name_ar, sku, sale_price, purchase_price, stock_quantity, vat_rate FROM stock_items WHERE name_en LIKE ? OR name_ar LIKE ? OR sku LIKE ? LIMIT 10"); + $stmt = db()->prepare("SELECT id, name_en, name_ar, sku, sale_price, purchase_price, stock_quantity, vat_rate, is_promotion, promotion_start, promotion_end, promotion_percent FROM stock_items WHERE name_en LIKE ? OR name_ar LIKE ? OR sku LIKE ? LIMIT 10"); $stmt->execute(["%$q%", "%$q%", "%$q%"]); - echo json_encode($stmt->fetchAll()); + $results = $stmt->fetchAll(PDO::FETCH_ASSOC); + foreach ($results as &$item) { + $item['sale_price'] = getPromotionalPrice($item); + } + echo json_encode($results); exit; } if ($_GET['action'] === 'get_payments') { @@ -1780,7 +1802,11 @@ switch ($page) { ORDER BY q.id DESC"); $stmt->execute($params); $data['quotations'] = $stmt->fetchAll(); - $data['items_list'] = db()->query("SELECT id, name_en, name_ar, sale_price, purchase_price, stock_quantity, vat_rate, is_promotion, promotion_start, promotion_end, promotion_percent FROM stock_items ORDER BY name_en ASC")->fetchAll(); + $items_list_raw = db()->query("SELECT id, name_en, name_ar, sale_price, purchase_price, stock_quantity, vat_rate, is_promotion, promotion_start, promotion_end, promotion_percent FROM stock_items ORDER BY name_en ASC")->fetchAll(PDO::FETCH_ASSOC); + foreach ($items_list_raw as &$item) { + $item['sale_price'] = getPromotionalPrice($item); + } + $data['items_list'] = $items_list_raw; $data['customers_list'] = db()->query("SELECT id, name FROM customers WHERE type = 'customer' ORDER BY name ASC")->fetchAll(); break; case 'payment_methods': @@ -1830,7 +1856,11 @@ switch ($page) { } unset($inv); - $data['items_list'] = db()->query("SELECT id, name_en, name_ar, sale_price, purchase_price, stock_quantity, vat_rate, is_promotion, promotion_start, promotion_end, promotion_percent FROM stock_items ORDER BY name_en ASC")->fetchAll(); + $items_list_raw = db()->query("SELECT id, name_en, name_ar, sale_price, purchase_price, stock_quantity, vat_rate, is_promotion, promotion_start, promotion_end, promotion_percent FROM stock_items ORDER BY name_en ASC")->fetchAll(PDO::FETCH_ASSOC); + foreach ($items_list_raw as &$item) { + $item['sale_price'] = getPromotionalPrice($item); + } + $data['items_list'] = $items_list_raw; $data['customers_list'] = db()->query("SELECT id, name FROM customers WHERE type = '" . ($type === 'sale' ? 'customer' : 'supplier') . "' ORDER BY name ASC")->fetchAll(); break; @@ -3172,7 +3202,13 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System'; query("SELECT * FROM stock_items WHERE stock_quantity > 0 ORDER BY name_en ASC")->fetchAll(PDO::FETCH_ASSOC); + $products_raw = db()->query("SELECT * FROM stock_items WHERE stock_quantity > 0 ORDER BY name_en ASC")->fetchAll(PDO::FETCH_ASSOC); + $products = []; + foreach ($products_raw as $p) { + $p['original_price'] = (float)$p['sale_price']; + $p['sale_price'] = getPromotionalPrice($p); + $products[] = $p; + } $customers = db()->query("SELECT * FROM customers WHERE type = 'customer' ORDER BY name ASC")->fetchAll(PDO::FETCH_ASSOC); ?>