query(" SELECT i.name_en as item_name, i.sku, i.min_level, COALESCE((SELECT SUM(quantity) FROM inventory_batches b WHERE b.item_id = i.id), 0) as current_stock FROM inventory_items i HAVING current_stock <= min_level ORDER BY current_stock ASC ")->fetchAll(PDO::FETCH_ASSOC); } elseif ($report_type === 'expiry') { $title = __('expiry_report'); $columns = ['item_name', 'batch_number', 'expiry_date', 'quantity', 'days_remaining']; $data = $db->query(" SELECT i.name_en as item_name, b.batch_number, b.expiry_date, b.quantity, DATEDIFF(b.expiry_date, CURDATE()) as days_remaining FROM inventory_batches b JOIN inventory_items i ON b.item_id = i.id WHERE b.quantity > 0 AND b.expiry_date IS NOT NULL AND b.expiry_date <= DATE_ADD(CURDATE(), INTERVAL 90 DAY) ORDER BY b.expiry_date ASC ")->fetchAll(PDO::FETCH_ASSOC); } elseif ($report_type === 'valuation') { $title = __('stock_valuation_report'); $columns = ['item_name', 'total_quantity', 'avg_cost', 'total_value']; $data = $db->query(" SELECT i.name_en as item_name, SUM(b.quantity) as total_quantity, AVG(b.cost_price) as avg_cost, SUM(b.quantity * b.cost_price) as total_value FROM inventory_batches b JOIN inventory_items i ON b.item_id = i.id WHERE b.quantity > 0 GROUP BY i.id ORDER BY total_value DESC ")->fetchAll(PDO::FETCH_ASSOC); } ?>

Out of Stock'; else echo 'Low Stock'; } elseif ($col === 'days_remaining') { $days = $row['days_remaining']; if ($days < 0) echo 'Expired'; elseif ($days < 30) echo '' . $days . ' days'; else echo '' . $days . ' days'; } else { echo htmlspecialchars($row[$col]); } ?>