query("SELECT setting_key, setting_value FROM settings WHERE setting_key IN ('company_name', 'company_logo')"); $site_settings = []; while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $site_settings[$row['setting_key']] = $row['setting_value']; } $companyName = $site_settings['company_name'] ?? __('hospital_management'); // Helper to translate report titles function getReportTitle($type) { switch ($type) { case 'inventory_valuation': return __('inventory_valuation'); case 'sales': return __('sales_report'); case 'expiry': return __('expiry_report'); case 'low_stock': return __('low_stock_report'); case 'purchase_report': return __('purchase_report'); default: return __('report'); } } // Data Fetching Logic (No pagination for print, or very high limit) $limit = 1000; $data = []; $grandTotals = []; if ($type === 'inventory_valuation') { $sql = "SELECT d.name_en as drug_name, d.name_ar as drug_name_ar, g.name_en as category_name, SUM(b.quantity) as stock_quantity, SUM(b.quantity * b.cost_price) / SUM(b.quantity) as avg_cost, SUM(b.quantity * b.sale_price) / SUM(b.quantity) as selling_price, SUM(b.quantity * b.cost_price) as total_cost_value, SUM(b.quantity * b.sale_price) as total_sales_value FROM drugs d JOIN pharmacy_batches b ON d.id = b.drug_id LEFT JOIN drugs_groups g ON d.group_id = g.id WHERE b.quantity > 0 GROUP BY d.id ORDER BY d.name_en ASC LIMIT $limit"; $stmt = $pdo->query($sql); $data = $stmt->fetchAll(PDO::FETCH_ASSOC); $grandTotalSql = "SELECT SUM(b.quantity * b.cost_price) as total_cost, SUM(b.quantity * b.sale_price) as total_sales FROM pharmacy_batches b WHERE b.quantity > 0"; $grandTotals = $pdo->query($grandTotalSql)->fetch(PDO::FETCH_ASSOC); } elseif ($type === 'sales') { $sql = "SELECT s.id, s.created_at, s.total_amount, s.payment_method, p.name as patient_name, (SELECT COUNT(*) FROM pharmacy_sale_items i WHERE i.sale_id = s.id) as item_count FROM pharmacy_sales s LEFT JOIN patients p ON s.patient_id = p.id WHERE s.created_at BETWEEN ? AND ? + INTERVAL 1 DAY ORDER BY s.created_at DESC LIMIT $limit"; $stmt = $pdo->prepare($sql); $stmt->execute([$startDate, $endDate]); $data = $stmt->fetchAll(PDO::FETCH_ASSOC); $grandTotalSql = "SELECT SUM(total_amount) as total FROM pharmacy_sales WHERE created_at BETWEEN ? AND ? + INTERVAL 1 DAY"; $grandTotalStmt = $pdo->prepare($grandTotalSql); $grandTotalStmt->execute([$startDate, $endDate]); $grandTotals['total_sales'] = $grandTotalStmt->fetchColumn(); } elseif ($type === 'expiry') { $sql = "SELECT b.id, b.batch_number, b.expiry_date, b.quantity, d.name_en as drug_name, d.name_ar as drug_name_ar, s.name_en as supplier_name, DATEDIFF(b.expiry_date, CURDATE()) as days_remaining FROM pharmacy_batches b JOIN drugs d ON b.drug_id = d.id LEFT JOIN suppliers s ON b.supplier_id = s.id WHERE b.expiry_date BETWEEN ? AND ? AND b.quantity > 0 ORDER BY b.expiry_date ASC LIMIT $limit"; $stmt = $pdo->prepare($sql); $stmt->execute([$startDate, $endDate]); $data = $stmt->fetchAll(PDO::FETCH_ASSOC); } elseif ($type === 'low_stock') { $sql = "SELECT d.id, d.name_en, d.name_ar, d.min_stock_level, d.reorder_level, d.unit, COALESCE(SUM(b.quantity), 0) as total_stock FROM drugs d LEFT JOIN pharmacy_batches b ON d.id = b.drug_id AND b.quantity > 0 AND b.expiry_date >= CURDATE() GROUP BY d.id HAVING total_stock <= MAX(d.reorder_level) ORDER BY total_stock ASC LIMIT $limit"; $stmt = $pdo->query($sql); $data = $stmt->fetchAll(PDO::FETCH_ASSOC); } elseif ($type === 'purchase_report') { $sql = "SELECT l.id, l.lpo_date, l.status, l.total_amount, s.name_en as supplier_name FROM pharmacy_lpos l LEFT JOIN suppliers s ON l.supplier_id = s.id WHERE l.lpo_date BETWEEN ? AND ? ORDER BY l.lpo_date DESC LIMIT $limit"; $stmt = $pdo->prepare($sql); $stmt->execute([$startDate, $endDate]); $data = $stmt->fetchAll(PDO::FETCH_ASSOC); $grandTotalSql = "SELECT SUM(total_amount) as total FROM pharmacy_lpos WHERE lpo_date BETWEEN ? AND ?"; $grandTotalStmt = $pdo->prepare($grandTotalSql); $grandTotalStmt->execute([$startDate, $endDate]); $grandTotals['total_purchases'] = $grandTotalStmt->fetchColumn(); } ?> <?php echo getReportTitle($type); ?>

:

: -

#
# #
:
:
: