Project: meenkadai_kaf_shop_11Aug2026_01 ZIP File: public_html.zip Extracted on: 2026-08-11 07:27:32 Total Files: 45 ================================================================================ FILE: dashboard.php TYPE: PHP SIZE: 12.01 KB ------------------------------------------------------------ prepare($sql); $stmt->bind_param("i", $user_id); $stmt->execute(); $result = $stmt->get_result(); $supply_stats = $result->fetch_assoc(); // Get total payments received - all time - FIXED with direct query $sql = "SELECT COALESCE(SUM(amount), 0) as total_paid, COUNT(*) as payment_count FROM payment_settlements WHERE supplier_id = ?"; $stmt = $conn->prepare($sql); $stmt->bind_param("i", $user_id); $stmt->execute(); $result = $stmt->get_result(); $payment_stats = $result->fetch_assoc(); // Calculate pending $pending_amount = $supply_stats['total_supply'] - $payment_stats['total_paid']; // Get recent supplies $sql = "SELECT s.*, f.fish_name, f.fish_name_tamil FROM supply s LEFT JOIN fish_types f ON s.fish_id = f.fish_id WHERE s.supplier_id = ? ORDER BY s.created_at DESC LIMIT 5"; $stmt = $conn->prepare($sql); $stmt->bind_param("i", $user_id); $stmt->execute(); $result = $stmt->get_result(); $recent_supplies = []; while ($row = $result->fetch_assoc()) { $recent_supplies[] = $row; } } elseif ($role === 'manager' || $role === 'admin') { // ADMIN/MANAGER DASHBOARD // Get today's sales $sql = "SELECT COALESCE(SUM(total_amount), 0) as today_sales, COUNT(*) as sale_count FROM sales WHERE DATE(sale_date) = CURDATE()"; $result = $conn->query($sql); $today_sales = $result->fetch_assoc(); // Get this month's sales $sql = "SELECT COALESCE(SUM(total_amount), 0) as month_sales FROM sales WHERE MONTH(sale_date) = MONTH(CURDATE()) AND YEAR(sale_date) = YEAR(CURDATE())"; $result = $conn->query($sql); $month_sales = $result->fetch_assoc(); // Get pending payments - FIXED with subqueries $sql = "SELECT COUNT(*) as supplier_count, COALESCE(SUM(pending), 0) as total_pending FROM ( SELECT u.user_id, COALESCE((SELECT SUM(total_amount) FROM supply WHERE supplier_id = u.user_id), 0) - COALESCE((SELECT SUM(amount) FROM payment_settlements WHERE supplier_id = u.user_id), 0) as pending FROM users u WHERE u.role = 'supplier' AND u.status = 'active' ) as pending_calc WHERE pending > 0"; $result = $conn->query($sql); $pending_payments = $result->fetch_assoc(); // Get total supply cost this month $sql = "SELECT COALESCE(SUM(total_amount), 0) as month_supply FROM supply WHERE MONTH(supply_date) = MONTH(CURDATE()) AND YEAR(supply_date) = YEAR(CURDATE())"; $result = $conn->query($sql); $month_supply = $result->fetch_assoc(); // Get total expenses this month $sql = "SELECT COALESCE(SUM(total_amount), 0) as month_expenses FROM expenses WHERE MONTH(expense_date) = MONTH(CURDATE()) AND YEAR(expense_date) = YEAR(CURDATE())"; $result = $conn->query($sql); $month_expenses = $result->fetch_assoc(); // Calculate profit $month_profit = $month_sales['month_sales'] - $month_supply['month_supply'] - $month_expenses['month_expenses']; // Get recent activity $sql = "SELECT * FROM activity_logs ORDER BY created_at DESC LIMIT 10"; $result = $conn->query($sql); $recent_activity = []; while ($row = $result->fetch_assoc()) { $recent_activity[] = $row; } } // Get recent activity for current user $sql = "SELECT * FROM activity_logs WHERE user_id = ? ORDER BY created_at DESC LIMIT 10"; $stmt = $conn->prepare($sql); $stmt->bind_param("i", $user_id); $stmt->execute(); $result = $stmt->get_result(); $user_activity = []; while ($row = $result->fetch_assoc()) { $user_activity[] = $row; } } catch (Exception $e) { $error = "Error loading dashboard: " . $e->getMessage(); } $page_title = 'Dashboard'; require_once __DIR__ . '/includes/header.php'; ?>

🏠 Dashboard

My Total Supply
All time total
My Pending Payment
Amount owed to me

Quick Actions

📦 Add Supply 📋 View My Supplies 📊 My Report

Recent Activity

Action Table Time

📅 Today's Sales

transactions today

This Month's Sales
Total revenue
Supply Cost
This month
Expenses
This month
= 0 ? 'Profit' : 'Loss'; ?>
This month
0): ?>

⚠️ Pending Supplier Payments

suppliers have pending payments totaling

View Pending Payments

Quick Actions

💰 Add Sale 📦 Add Supply 💸 Add Expense 💵 Settle Payment 📊 View Reports 👤 Add User

Recent Activity

Action Table Time
-------------------- END OF FILE -------------------- FILE: default.php TYPE: PHP SIZE: 15.99 KB ------------------------------------------------------------ Default page

You Are All Set to Go!

All you have to do now is upload your website files and start your journey. Check out how to do that below:

-------------------- END OF FILE -------------------- FILE: error.log TYPE: LOG SIZE: 66.31 KB ------------------------------------------------------------ [13-Jan-2026 13:39:45 Asia/Kolkata] PHP Warning: require_once(/home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/functions.php): Failed to open stream: No such file or directory in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/index.php on line 10 [13-Jan-2026 13:39:45 Asia/Kolkata] PHP Fatal error: Uncaught Error: Failed opening required '/home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/functions.php' (include_path='.:/opt/alt/php83/usr/share/pear:/opt/alt/php83/usr/share/php:/usr/share/pear:/usr/share/php') in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/index.php:10 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/index.php on line 10 [13-Jan-2026 13:40:01 Asia/Kolkata] PHP Warning: require_once(/home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/functions.php): Failed to open stream: No such file or directory in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/index.php on line 10 [13-Jan-2026 13:40:01 Asia/Kolkata] PHP Fatal error: Uncaught Error: Failed opening required '/home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/functions.php' (include_path='.:/opt/alt/php83/usr/share/pear:/opt/alt/php83/usr/share/php:/usr/share/pear:/usr/share/php') in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/index.php:10 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/index.php on line 10 [13-Jan-2026 14:01:19 Asia/Kolkata] PHP Warning: Undefined array key "month_supply" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php on line 170 [13-Jan-2026 14:01:19 Asia/Kolkata] PHP Deprecated: number_format(): Passing null to parameter #1 ($num) of type float is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/settings.php on line 187 [13-Jan-2026 14:01:19 Asia/Kolkata] PHP Warning: Undefined array key "pending_amount" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php on line 175 [13-Jan-2026 14:01:19 Asia/Kolkata] PHP Deprecated: number_format(): Passing null to parameter #1 ($num) of type float is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/settings.php on line 187 [13-Jan-2026 14:01:19 Asia/Kolkata] PHP Warning: Undefined array key "supply_count" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php on line 180 [13-Jan-2026 14:05:30 Asia/Kolkata] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:133) in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/fish/add_fish_type.php on line 72 [13-Jan-2026 14:05:59 Asia/Kolkata] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:133) in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/fish/add_fish_type.php on line 72 [13-Jan-2026 14:07:27 Asia/Kolkata] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:133) in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/fish/add_fish_type.php on line 72 [13-Jan-2026 14:07:54 Asia/Kolkata] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:133) in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/fish/add_fish_type.php on line 72 [13-Jan-2026 14:08:48 Asia/Kolkata] PHP Warning: Undefined array key "month_supply" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php on line 170 [13-Jan-2026 14:08:48 Asia/Kolkata] PHP Deprecated: number_format(): Passing null to parameter #1 ($num) of type float is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/settings.php on line 187 [13-Jan-2026 14:08:48 Asia/Kolkata] PHP Warning: Undefined array key "pending_amount" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php on line 175 [13-Jan-2026 14:08:48 Asia/Kolkata] PHP Deprecated: number_format(): Passing null to parameter #1 ($num) of type float is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/settings.php on line 187 [13-Jan-2026 14:08:48 Asia/Kolkata] PHP Warning: Undefined array key "supply_count" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php on line 180 [13-Jan-2026 14:08:49 Asia/Kolkata] PHP Warning: Undefined array key "month_supply" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php on line 170 [13-Jan-2026 14:08:49 Asia/Kolkata] PHP Deprecated: number_format(): Passing null to parameter #1 ($num) of type float is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/settings.php on line 187 [13-Jan-2026 14:08:49 Asia/Kolkata] PHP Warning: Undefined array key "pending_amount" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php on line 175 [13-Jan-2026 14:08:49 Asia/Kolkata] PHP Deprecated: number_format(): Passing null to parameter #1 ($num) of type float is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/settings.php on line 187 [13-Jan-2026 14:08:49 Asia/Kolkata] PHP Warning: Undefined array key "supply_count" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php on line 180 [13-Jan-2026 14:09:37 Asia/Kolkata] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:133) in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/fish/add_fish_type.php on line 83 [13-Jan-2026 14:09:43 Asia/Kolkata] PHP Deprecated: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/fish/add_fish_type.php on line 137 [13-Jan-2026 14:09:45 Asia/Kolkata] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:133) in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/fish/add_fish_type.php on line 61 [13-Jan-2026 14:10:47 Asia/Kolkata] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:133) in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/fish/add_fish_type.php on line 83 [13-Jan-2026 14:11:10 Asia/Kolkata] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:133) in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/fish/add_fish_type.php on line 83 [13-Jan-2026 14:11:38 Asia/Kolkata] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:133) in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/fish/add_fish_type.php on line 83 [13-Jan-2026 14:12:08 Asia/Kolkata] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:133) in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/fish/add_fish_type.php on line 83 [13-Jan-2026 14:12:37 Asia/Kolkata] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:133) in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/fish/add_fish_type.php on line 83 [13-Jan-2026 14:13:03 Asia/Kolkata] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:133) in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/fish/add_fish_type.php on line 83 [13-Jan-2026 14:14:34 Asia/Kolkata] PHP Warning: Undefined array key "month_supply" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php on line 170 [13-Jan-2026 14:14:34 Asia/Kolkata] PHP Deprecated: number_format(): Passing null to parameter #1 ($num) of type float is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/settings.php on line 187 [13-Jan-2026 14:14:34 Asia/Kolkata] PHP Warning: Undefined array key "pending_amount" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php on line 175 [13-Jan-2026 14:14:34 Asia/Kolkata] PHP Deprecated: number_format(): Passing null to parameter #1 ($num) of type float is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/settings.php on line 187 [13-Jan-2026 14:14:34 Asia/Kolkata] PHP Warning: Undefined array key "supply_count" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php on line 180 [13-Jan-2026 14:14:35 Asia/Kolkata] PHP Warning: Undefined array key "month_supply" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php on line 170 [13-Jan-2026 14:14:35 Asia/Kolkata] PHP Deprecated: number_format(): Passing null to parameter #1 ($num) of type float is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/settings.php on line 187 [13-Jan-2026 14:14:35 Asia/Kolkata] PHP Warning: Undefined array key "pending_amount" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php on line 175 [13-Jan-2026 14:14:35 Asia/Kolkata] PHP Deprecated: number_format(): Passing null to parameter #1 ($num) of type float is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/settings.php on line 187 [13-Jan-2026 14:14:35 Asia/Kolkata] PHP Warning: Undefined array key "supply_count" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php on line 180 [13-Jan-2026 14:15:02 Asia/Kolkata] PHP Deprecated: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/fish/add_fish_type.php on line 147 [13-Jan-2026 21:53:45 Asia/Kolkata] PHP Warning: Undefined array key "month_supply" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php on line 170 [13-Jan-2026 21:53:45 Asia/Kolkata] PHP Deprecated: number_format(): Passing null to parameter #1 ($num) of type float is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/settings.php on line 187 [13-Jan-2026 21:53:45 Asia/Kolkata] PHP Warning: Undefined array key "pending_amount" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php on line 175 [13-Jan-2026 21:53:45 Asia/Kolkata] PHP Deprecated: number_format(): Passing null to parameter #1 ($num) of type float is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/settings.php on line 187 [13-Jan-2026 21:53:45 Asia/Kolkata] PHP Warning: Undefined array key "supply_count" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php on line 180 [13-Jan-2026 22:04:58 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Unknown column 's.weight_kg' in 'SELECT' in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(86): fetchAll() #3 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [13-Jan-2026 22:04:59 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Unknown column 's.weight_kg' in 'SELECT' in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/functions.php(165): fetchAll() #3 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/reports/user_report.php(28): getSalesReport() #4 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [13-Jan-2026 22:05:25 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Unknown column 's.weight_kg' in 'SELECT' in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(86): fetchAll() #3 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [13-Jan-2026 22:06:39 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Unknown column 's.weight_kg' in 'SELECT' in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(86): fetchAll() #3 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [13-Jan-2026 22:22:00 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Unknown column 's.weight_kg' in 'SELECT' in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(86): fetchAll() #3 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [13-Jan-2026 22:22:05 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Unknown column 's.weight_kg' in 'SELECT' in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(86): fetchAll() #3 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [13-Jan-2026 22:22:08 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Unknown column 's.weight_kg' in 'SELECT' in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(86): fetchAll() #3 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [13-Jan-2026 22:22:58 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Unknown column 's.weight_kg' in 'SELECT' in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(86): fetchAll() #3 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [13-Jan-2026 22:26:03 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Unknown column 's.weight_kg' in 'SELECT' in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(86): fetchAll() #3 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [13-Jan-2026 22:26:09 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Unknown column 's.weight_kg' in 'SELECT' in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(86): fetchAll() #3 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [13-Jan-2026 22:26:11 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Unknown column 's.weight_kg' in 'SELECT' in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(86): fetchAll() #3 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [13-Jan-2026 22:26:25 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function getSupplierPendingAmount() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php:73 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php on line 73 [13-Jan-2026 22:26:27 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function getSupplierPendingAmount() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php:73 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php on line 73 [13-Jan-2026 22:26:28 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function getSupplierPendingAmount() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/reports/user_report.php:24 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/reports/user_report.php on line 24 [13-Jan-2026 22:26:29 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function getSupplierPendingAmount() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php:73 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php on line 73 [13-Jan-2026 22:26:32 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function getSupplierPendingAmount() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php:73 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php on line 73 [13-Jan-2026 22:26:33 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function getSupplierPendingAmount() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/reports/user_report.php:24 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/reports/user_report.php on line 24 [13-Jan-2026 22:26:36 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function getSupplierPendingAmount() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php:73 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php on line 73 [13-Jan-2026 22:26:46 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Unknown column 's.weight_kg' in 'SELECT' in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(86): fetchAll() #3 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [13-Jan-2026 22:27:05 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Unknown column 's.weight_kg' in 'SELECT' in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/functions.php(167): fetchAll() #3 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/reports/user_report.php(28): getSalesReport() #4 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [13-Jan-2026 22:27:08 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Unknown column 's.weight_kg' in 'SELECT' in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(86): fetchAll() #3 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [13-Jan-2026 22:27:28 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Unknown column 's.weight_kg' in 'SELECT' in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/functions.php(167): fetchAll() #3 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/reports/user_report.php(28): getSalesReport() #4 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [13-Jan-2026 22:27:32 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Unknown column 's.weight_kg' in 'SELECT' in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(86): fetchAll() #3 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [13-Jan-2026 22:27:36 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Unknown column 's.weight_kg' in 'SELECT' in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(86): fetchAll() #3 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [13-Jan-2026 22:27:38 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function getSupplierPendingAmount() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/reports/user_report.php:24 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/reports/user_report.php on line 24 [13-Jan-2026 22:27:58 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function getSupplierPendingAmount() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/reports/user_report.php:24 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/reports/user_report.php on line 24 [13-Jan-2026 22:29:30 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function getSupplierPendingAmount() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/reports/user_report.php:24 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/reports/user_report.php on line 24 [13-Jan-2026 22:29:31 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Column 'created_at' in SELECT is ambiguous in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(68): fetchAll() #3 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [13-Jan-2026 22:29:32 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Column 'created_at' in SELECT is ambiguous in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(68): fetchAll() #3 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [13-Jan-2026 22:30:13 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Column 'created_at' in SELECT is ambiguous in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(68): fetchAll() #3 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [13-Jan-2026 22:30:14 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Column 'created_at' in SELECT is ambiguous in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(68): fetchAll() #3 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [13-Jan-2026 22:30:16 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Column 'created_at' in SELECT is ambiguous in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(68): fetchAll() #3 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [13-Jan-2026 22:30:49 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function getSupplierPendingAmount() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/reports/user_report.php:36 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/reports/user_report.php on line 36 [13-Jan-2026 22:30:52 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function getSupplierPendingAmount() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/reports/user_report.php:36 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/reports/user_report.php on line 36 [13-Jan-2026 22:30:53 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function getSupplierPendingAmount() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/reports/user_report.php:36 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/reports/user_report.php on line 36 [13-Jan-2026 22:30:54 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function getSupplierPendingAmount() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/reports/user_report.php:36 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/reports/user_report.php on line 36 [13-Jan-2026 22:30:55 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function getSupplierPendingAmount() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/reports/user_report.php:36 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/reports/user_report.php on line 36 [13-Jan-2026 22:31:34 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function getSupplierPendingAmount() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/reports/user_report.php:36 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/reports/user_report.php on line 36 [13-Jan-2026 22:34:27 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function getSupplierPendingAmount() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/reports/user_report.php:42 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/reports/user_report.php on line 42 [13-Jan-2026 22:34:29 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function getSupplierPendingAmount() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/reports/user_report.php:42 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/reports/user_report.php on line 42 [13-Jan-2026 22:34:55 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Column 'created_at' in SELECT is ambiguous in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(68): fetchAll() #3 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [13-Jan-2026 22:34:57 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Column 'created_at' in SELECT is ambiguous in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(68): fetchAll() #3 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [13-Jan-2026 22:35:00 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Column 'created_at' in SELECT is ambiguous in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(68): fetchAll() #3 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [13-Jan-2026 22:39:21 Asia/Kolkata] PHP Fatal error: Uncaught ArgumentCountError: The number of elements in the type definition string must match the number of bind variables in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:68 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(68): mysqli_stmt->bind_param() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/add_supply.php(74): executeQuery() #2 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 68 [13-Jan-2026 22:39:24 Asia/Kolkata] PHP Fatal error: Uncaught ArgumentCountError: The number of elements in the type definition string must match the number of bind variables in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:68 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(68): mysqli_stmt->bind_param() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/add_supply.php(74): executeQuery() #2 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 68 [13-Jan-2026 22:44:11 Asia/Kolkata] PHP Fatal error: Uncaught ArgumentCountError: The number of elements in the type definition string must match the number of bind variables in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:68 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(68): mysqli_stmt->bind_param() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/expenses/add_expense.php(43): executeQuery() #2 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 68 [13-Jan-2026 22:44:14 Asia/Kolkata] PHP Fatal error: Uncaught ArgumentCountError: The number of elements in the type definition string must match the number of bind variables in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:68 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(68): mysqli_stmt->bind_param() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/expenses/add_expense.php(43): executeQuery() #2 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 68 [13-Jan-2026 22:52:34 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function getSupplierPendingAmount() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/view_supplies.php:115 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/view_supplies.php on line 115 [13-Jan-2026 23:00:18 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function getSupplierPendingAmount() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/view_supplies.php:115 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/view_supplies.php on line 115 [13-Jan-2026 23:02:45 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function getSupplierPendingAmount() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/view_supplies.php:115 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/view_supplies.php on line 115 [13-Jan-2026 23:03:00 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Unknown column 'ps.payment_date' in 'ORDER BY' in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/settle_payment.php(80): fetchAll() #3 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [13-Jan-2026 23:03:02 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Unknown column 'ps.payment_date' in 'ORDER BY' in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/settle_payment.php(80): fetchAll() #3 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [13-Jan-2026 23:03:05 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Unknown column 'ps.payment_date' in 'ORDER BY' in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/settle_payment.php(80): fetchAll() #3 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [13-Jan-2026 23:04:25 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Unknown column 'ps.payment_date' in 'ORDER BY' in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/settle_payment.php(80): fetchAll() #3 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [14-Jan-2026 06:53:41 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function getSupplierPendingAmount() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/view_supplies.php:115 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/view_supplies.php on line 115 [14-Jan-2026 06:54:43 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function getSupplierPendingAmount() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/view_supplies.php:115 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/view_supplies.php on line 115 [14-Jan-2026 06:57:45 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function getSupplierPendingAmount() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/view_supplies.php:115 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/view_supplies.php on line 115 [14-Jan-2026 06:58:06 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function getSupplierPendingAmount() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/view_supplies.php:115 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/view_supplies.php on line 115 [14-Jan-2026 07:11:45 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function getSupplierPendingAmount() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/view_supplies.php:115 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/view_supplies.php on line 115 [14-Jan-2026 07:11:56 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function getSupplierPendingAmount() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/view_supplies.php:115 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/view_supplies.php on line 115 [14-Jan-2026 07:12:12 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function getSupplierPendingAmount() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/view_supplies.php:115 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/view_supplies.php on line 115 [14-Jan-2026 07:12:19 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function getSupplierPendingAmount() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/view_supplies.php:115 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/view_supplies.php on line 115 [14-Jan-2026 07:16:31 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function getSupplierPendingAmount() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/view_supplies.php:115 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/view_supplies.php on line 115 [14-Jan-2026 07:22:58 Asia/Kolkata] PHP Deprecated: substr(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/sales/view_sales.php on line 242 [14-Jan-2026 07:22:58 Asia/Kolkata] PHP Deprecated: strlen(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/sales/view_sales.php on line 242 [14-Jan-2026 07:22:58 Asia/Kolkata] PHP Deprecated: substr(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/sales/view_sales.php on line 242 [14-Jan-2026 07:22:58 Asia/Kolkata] PHP Deprecated: strlen(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/sales/view_sales.php on line 242 [14-Jan-2026 07:23:16 Asia/Kolkata] PHP Deprecated: substr(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/sales/view_sales.php on line 242 [14-Jan-2026 07:23:16 Asia/Kolkata] PHP Deprecated: strlen(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/sales/view_sales.php on line 242 [14-Jan-2026 07:23:16 Asia/Kolkata] PHP Deprecated: substr(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/sales/view_sales.php on line 242 [14-Jan-2026 07:23:16 Asia/Kolkata] PHP Deprecated: strlen(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/sales/view_sales.php on line 242 [14-Jan-2026 07:23:26 Asia/Kolkata] PHP Deprecated: substr(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/sales/view_sales.php on line 242 [14-Jan-2026 07:23:26 Asia/Kolkata] PHP Deprecated: strlen(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/sales/view_sales.php on line 242 [14-Jan-2026 07:23:35 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Unknown column 'f.fish_name_english' in 'SELECT' in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/view_supplies.php(92): fetchAll() #3 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [14-Jan-2026 07:23:37 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Unknown column 'f.fish_name_english' in 'SELECT' in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/view_supplies.php(92): fetchAll() #3 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [14-Jan-2026 07:23:43 Asia/Kolkata] PHP Deprecated: substr(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/sales/view_sales.php on line 242 [14-Jan-2026 07:23:43 Asia/Kolkata] PHP Deprecated: strlen(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/sales/view_sales.php on line 242 [14-Jan-2026 07:24:46 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Unknown column 'f.fish_name_english' in 'SELECT' in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/view_supplies.php(92): fetchAll() #3 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [14-Jan-2026 07:24:53 Asia/Kolkata] PHP Deprecated: substr(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/sales/view_sales.php on line 242 [14-Jan-2026 07:24:53 Asia/Kolkata] PHP Deprecated: strlen(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/sales/view_sales.php on line 242 [14-Jan-2026 07:25:17 Asia/Kolkata] PHP Fatal error: Uncaught mysqli_sql_exception: Unknown column 'f.fish_name_english' in 'SELECT' in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:60 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(60): mysqli->prepare() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(98): executeQuery() #2 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/view_supplies.php(92): fetchAll() #3 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 60 [14-Jan-2026 07:36:43 Asia/Kolkata] PHP Deprecated: substr(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/sales/view_sales.php on line 242 [14-Jan-2026 07:36:43 Asia/Kolkata] PHP Deprecated: strlen(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/sales/view_sales.php on line 242 [14-Jan-2026 07:55:38 Asia/Kolkata] PHP Fatal error: Uncaught Error: Undefined constant "BASE_URL" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:451 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/view_supplies.php(196): require_once() #1 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php on line 451 [14-Jan-2026 07:55:40 Asia/Kolkata] PHP Fatal error: Uncaught Error: Undefined constant "BASE_URL" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:451 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/view_supplies.php(196): require_once() #1 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php on line 451 [14-Jan-2026 07:55:43 Asia/Kolkata] PHP Fatal error: Uncaught Error: Undefined constant "BASE_URL" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:451 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(166): require_once() #1 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php on line 451 [14-Jan-2026 07:58:30 Asia/Kolkata] PHP Fatal error: Uncaught Error: Undefined constant "BASE_URL" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:394 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(166): require_once() #1 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php on line 394 [14-Jan-2026 07:58:32 Asia/Kolkata] PHP Fatal error: Uncaught Error: Undefined constant "BASE_URL" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:394 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(166): require_once() #1 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php on line 394 [14-Jan-2026 07:58:35 Asia/Kolkata] PHP Fatal error: Uncaught Error: Undefined constant "BASE_URL" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:394 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(166): require_once() #1 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php on line 394 [14-Jan-2026 07:59:05 Asia/Kolkata] PHP Fatal error: Uncaught Error: Undefined constant "BASE_URL" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:394 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(166): require_once() #1 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php on line 394 [14-Jan-2026 07:59:06 Asia/Kolkata] PHP Fatal error: Uncaught Error: Undefined constant "BASE_URL" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:394 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(166): require_once() #1 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php on line 394 [14-Jan-2026 07:59:06 Asia/Kolkata] PHP Fatal error: Uncaught Error: Undefined constant "BASE_URL" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:394 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(166): require_once() #1 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php on line 394 [14-Jan-2026 07:59:06 Asia/Kolkata] PHP Fatal error: Uncaught Error: Undefined constant "BASE_URL" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:394 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(166): require_once() #1 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php on line 394 [14-Jan-2026 07:59:12 Asia/Kolkata] PHP Fatal error: Uncaught Error: Undefined constant "BASE_URL" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:394 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(166): require_once() #1 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php on line 394 [14-Jan-2026 07:59:28 Asia/Kolkata] PHP Fatal error: Uncaught Error: Undefined constant "BASE_URL" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:394 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(166): require_once() #1 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php on line 394 [14-Jan-2026 13:16:51 Asia/Kolkata] PHP Fatal error: Uncaught Error: Undefined constant "BASE_URL" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:393 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(166): require_once() #1 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php on line 393 [14-Jan-2026 13:16:54 Asia/Kolkata] PHP Fatal error: Uncaught Error: Undefined constant "BASE_URL" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:393 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(166): require_once() #1 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php on line 393 [14-Jan-2026 13:16:55 Asia/Kolkata] PHP Fatal error: Uncaught Error: Undefined constant "BASE_URL" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:393 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(166): require_once() #1 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php on line 393 [14-Jan-2026 13:16:58 Asia/Kolkata] PHP Fatal error: Uncaught Error: Undefined constant "BASE_URL" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:393 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(166): require_once() #1 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php on line 393 [14-Jan-2026 13:17:00 Asia/Kolkata] PHP Fatal error: Uncaught Error: Undefined constant "BASE_URL" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:393 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(166): require_once() #1 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php on line 393 [14-Jan-2026 13:17:00 Asia/Kolkata] PHP Fatal error: Uncaught Error: Undefined constant "BASE_URL" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:393 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(166): require_once() #1 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php on line 393 [14-Jan-2026 13:17:00 Asia/Kolkata] PHP Fatal error: Uncaught Error: Undefined constant "BASE_URL" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:393 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(166): require_once() #1 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php on line 393 [14-Jan-2026 13:17:01 Asia/Kolkata] PHP Fatal error: Uncaught Error: Undefined constant "BASE_URL" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:393 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(166): require_once() #1 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php on line 393 [14-Jan-2026 13:17:13 Asia/Kolkata] PHP Fatal error: Uncaught Error: Undefined constant "BASE_URL" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:393 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(166): require_once() #1 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php on line 393 [14-Jan-2026 13:17:14 Asia/Kolkata] PHP Fatal error: Uncaught Error: Undefined constant "BASE_URL" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:393 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(166): require_once() #1 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php on line 393 [14-Jan-2026 13:17:14 Asia/Kolkata] PHP Fatal error: Uncaught Error: Undefined constant "BASE_URL" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:393 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(166): require_once() #1 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php on line 393 [14-Jan-2026 13:17:14 Asia/Kolkata] PHP Fatal error: Uncaught Error: Undefined constant "BASE_URL" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:393 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(166): require_once() #1 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php on line 393 [14-Jan-2026 13:23:16 Asia/Kolkata] PHP Fatal error: Uncaught Error: Undefined constant "BASE_URL" in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php:394 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/dashboard.php(166): require_once() #1 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/includes/header.php on line 394 [14-Jan-2026 13:55:33 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function fetchOne() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/payment_history.php:25 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/payment_history.php on line 25 [14-Jan-2026 13:55:34 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function fetchOne() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/payment_history.php:25 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/payment_history.php on line 25 [14-Jan-2026 13:55:54 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function fetchOne() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/payment_history.php:25 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/payment_history.php on line 25 [14-Jan-2026 13:55:56 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function fetchOne() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/payment_history.php:25 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/payment_history.php on line 25 [14-Jan-2026 13:55:57 Asia/Kolkata] PHP Fatal error: Uncaught Error: Call to undefined function fetchOne() in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/payment_history.php:25 Stack trace: #0 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/supply/payment_history.php on line 25 [14-Jan-2026 14:12:06 Asia/Kolkata] PHP Deprecated: substr(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/sales/view_sales.php on line 242 [14-Jan-2026 14:12:06 Asia/Kolkata] PHP Deprecated: strlen(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/sales/view_sales.php on line 242 [14-Jan-2026 22:14:28 Asia/Kolkata] PHP Deprecated: substr(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/sales/view_sales.php on line 242 [14-Jan-2026 22:14:28 Asia/Kolkata] PHP Deprecated: strlen(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/sales/view_sales.php on line 242 [14-Jan-2026 22:14:32 Asia/Kolkata] PHP Deprecated: substr(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/sales/view_sales.php on line 242 [14-Jan-2026 22:14:32 Asia/Kolkata] PHP Deprecated: strlen(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/sales/view_sales.php on line 242 [14-Jan-2026 22:14:36 Asia/Kolkata] PHP Deprecated: substr(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/sales/view_sales.php on line 242 [14-Jan-2026 22:14:36 Asia/Kolkata] PHP Deprecated: strlen(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/sales/view_sales.php on line 242 [14-Jan-2026 22:14:40 Asia/Kolkata] PHP Deprecated: substr(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/sales/view_sales.php on line 242 [14-Jan-2026 22:14:40 Asia/Kolkata] PHP Deprecated: strlen(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/sales/view_sales.php on line 242 [14-Jan-2026 22:14:44 Asia/Kolkata] PHP Deprecated: substr(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/sales/view_sales.php on line 242 [14-Jan-2026 22:14:44 Asia/Kolkata] PHP Deprecated: strlen(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/sales/view_sales.php on line 242 [20-Jan-2026 22:13:02 Asia/Kolkata] PHP Fatal error: Uncaught ArgumentCountError: The number of elements in the type definition string must match the number of bind variables in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php:68 Stack trace: #0 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php(68): mysqli_stmt->bind_param() #1 /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/expenses/edit_expense.php(86): executeQuery() #2 {main} thrown in /home/u752449863/domains/meenkadai.kayalaquafarms.shop/public_html/config/database.php on line 68 -------------------- END OF FILE -------------------- FILE: get_subcategories.php TYPE: PHP SIZE: 1.25 KB ------------------------------------------------------------ false, 'message' => 'Not authenticated' ]); exit(); } // Get category ID from request $category_id = isset($_GET['category_id']) ? intval($_GET['category_id']) : 0; if (empty($category_id)) { echo json_encode([ 'success' => false, 'message' => 'Category ID is required', 'subcategories' => [] ]); exit(); } // Fetch subcategories for this category $query = "SELECT subcategory_id, subcategory_name, description FROM expense_subcategories WHERE category_id = ? AND status = 'active' ORDER BY subcategory_name"; $subcategories = fetchAll($query, "i", [$category_id]); // Return JSON response echo json_encode([ 'success' => true, 'category_id' => $category_id, 'subcategories' => $subcategories, 'count' => count($subcategories) ]); ?> -------------------- END OF FILE -------------------- FILE: index.php TYPE: PHP SIZE: 4.86 KB ------------------------------------------------------------ Login - <?php echo SITE_NAME; ?>
-------------------- END OF FILE -------------------- FILE: logout.php TYPE: PHP SIZE: 539 B ------------------------------------------------------------ -------------------- END OF FILE -------------------- FILE: save_preferences.php TYPE: PHP SIZE: 1.41 KB ------------------------------------------------------------ false, 'message' => 'Invalid color format']); exit(); } // Validate font size range if ($font_size < 12 || $font_size > 20) { echo json_encode(['success' => false, 'message' => 'Font size must be between 12 and 20']); exit(); } // Save preferences saveUserPreferences($_SESSION['user_id'], $primary_color, $secondary_color, $font_size); echo json_encode(['success' => true, 'message' => 'Preferences saved successfully']); } else { echo json_encode(['success' => false, 'message' => 'Invalid request method']); } ?> -------------------- END OF FILE -------------------- FILE: theme_settings.php TYPE: PHP SIZE: 11.64 KB ------------------------------------------------------------ query("SHOW TABLES LIKE 'user_settings'"); if ($table_check && $table_check->num_rows > 0) { // Save to database $sql = "INSERT INTO user_settings (user_id, theme_color, font_size, updated_at) VALUES (?, ?, ?, NOW()) ON DUPLICATE KEY UPDATE theme_color = VALUES(theme_color), font_size = VALUES(font_size), updated_at = NOW()"; $stmt = $conn->prepare($sql); $stmt->bind_param("iss", $_SESSION['user_id'], $theme_color, $font_size); $stmt->execute(); } } catch (Exception $e) { // Just save to session if DB fails } $success = "Theme settings saved successfully!"; } $page_title = 'Theme Settings'; require_once __DIR__ . '/includes/header.php'; ?>

🎨 Theme Settings

Customize Your Experience

Choose the primary color for buttons, links, and accents

'Teal (Default)', 'value' => '#17a2b8'], ['name' => 'Blue', 'value' => '#007bff'], ['name' => 'Green', 'value' => '#28a745'], ['name' => 'Purple', 'value' => '#6f42c1'], ['name' => 'Orange', 'value' => '#fd7e14'], ['name' => 'Red', 'value' => '#dc3545'], ['name' => 'Pink', 'value' => '#e83e8c'], ['name' => 'Dark Blue', 'value' => '#343a40'], ]; foreach ($colors as $color): ?>
Or choose custom color

Adjust the text size for better readability

'small', 'label' => 'Small', 'size' => '14px'], ['value' => 'medium', 'label' => 'Medium', 'size' => '16px'], ['value' => 'large', 'label' => 'Large', 'size' => '18px'], ['value' => 'xlarge', 'label' => 'Extra Large', 'size' => '20px'], ]; foreach ($sizes as $size): ?>

Sample Heading

This is how your text will look with the selected settings. Buttons and links will use the theme color you've chosen.

💡 Tips

-------------------- END OF FILE -------------------- FILE: config/database.php TYPE: PHP SIZE: 3.09 KB ------------------------------------------------------------ connect_error) { error_log("Database Connection Failed: " . $conn->connect_error); die("Database connection failed. Please contact administrator."); } // Set charset to utf8mb4 for proper Tamil text support if (!$conn->set_charset("utf8mb4")) { error_log("Error loading character set utf8mb4: " . $conn->error); } } catch (Exception $e) { error_log("Database Exception: " . $e->getMessage()); die("Database error occurred. Please contact administrator."); } } return $conn; } // Close database connection function closeDBConnection() { $conn = getDBConnection(); if ($conn) { $conn->close(); } } // Execute a prepared statement safely function executeQuery($query, $types = "", $params = []) { $conn = getDBConnection(); $stmt = $conn->prepare($query); if (!$stmt) { error_log("Prepare failed: " . $conn->error); return false; } if (!empty($types) && !empty($params)) { $stmt->bind_param($types, ...$params); } $result = $stmt->execute(); if (!$result) { error_log("Execute failed: " . $stmt->error); return false; } return $stmt; } // Fetch single row function fetchSingle($query, $types = "", $params = []) { $stmt = executeQuery($query, $types, $params); if (!$stmt) { return null; } $result = $stmt->get_result(); $row = $result->fetch_assoc(); $stmt->close(); return $row; } // Fetch all rows function fetchAll($query, $types = "", $params = []) { $stmt = executeQuery($query, $types, $params); if (!$stmt) { return []; } $result = $stmt->get_result(); $rows = $result->fetch_all(MYSQLI_ASSOC); $stmt->close(); return $rows; } // Get last insert ID function getLastInsertId() { $conn = getDBConnection(); return $conn->insert_id; } // Test database connection function testConnection() { try { $conn = getDBConnection(); return $conn->ping(); } catch (Exception $e) { return false; } } ?> -------------------- END OF FILE -------------------- FILE: config/settings.php TYPE: PHP SIZE: 6.87 KB ------------------------------------------------------------ 1800) { session_regenerate_id(true); $_SESSION['created'] = time(); } // Check session timeout if (isset($_SESSION['last_activity']) && (time() - $_SESSION['last_activity'] > SESSION_TIMEOUT)) { session_unset(); session_destroy(); header('Location: /index.php?timeout=1'); exit(); } $_SESSION['last_activity'] = time(); } } // Generate CSRF token function generateCSRFToken() { if (!isset($_SESSION[CSRF_TOKEN_NAME])) { $_SESSION[CSRF_TOKEN_NAME] = bin2hex(random_bytes(32)); $_SESSION[CSRF_TOKEN_NAME . '_time'] = time(); } return $_SESSION[CSRF_TOKEN_NAME]; } // Verify CSRF token function verifyCSRFToken($token) { if (!isset($_SESSION[CSRF_TOKEN_NAME]) || !isset($_SESSION[CSRF_TOKEN_NAME . '_time'])) { return false; } // Check if token expired if (time() - $_SESSION[CSRF_TOKEN_NAME . '_time'] > CSRF_TOKEN_EXPIRY) { unset($_SESSION[CSRF_TOKEN_NAME]); unset($_SESSION[CSRF_TOKEN_NAME . '_time']); return false; } return hash_equals($_SESSION[CSRF_TOKEN_NAME], $token); } // Check if user is logged in function isLoggedIn() { return isset($_SESSION['user_id']) && isset($_SESSION['role']); } // Check if user has required role function hasRole($required_role) { if (!isLoggedIn()) { return false; } $user_role = $_SESSION['role']; // Admin has access to everything if ($user_role === 'admin') { return true; } // Check specific role if (is_array($required_role)) { return in_array($user_role, $required_role); } return $user_role === $required_role; } // Require login function requireLogin() { if (!isLoggedIn()) { header('Location: /index.php'); exit(); } } // Require specific role function requireRole($required_role) { requireLogin(); if (!hasRole($required_role)) { $_SESSION['error'] = "You don't have permission to access this page."; header('Location: /dashboard.php'); exit(); } } // Sanitize input function sanitizeInput($data) { if (is_array($data)) { return array_map('sanitizeInput', $data); } $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data, ENT_QUOTES, 'UTF-8'); return $data; } // Validate email function validateEmail($email) { return filter_var($email, FILTER_VALIDATE_EMAIL); } // Validate phone number (Indian format) function validatePhone($phone) { $phone = preg_replace('/[^0-9]/', '', $phone); return (strlen($phone) === 10) ? $phone : false; } // Get user IP address function getUserIP() { $ip = ''; if (!empty($_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } else { $ip = $_SERVER['REMOTE_ADDR']; } return filter_var($ip, FILTER_VALIDATE_IP) ? $ip : '0.0.0.0'; } // Get user agent function getUserAgent() { return isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''; } // Format currency function formatCurrency($amount) { return '₹' . number_format($amount, 2); } // Format weight function formatWeight($weight) { return number_format($weight, 2) . ' kg'; } // Format date function formatDate($date, $format = DATE_FORMAT) { return date($format, strtotime($date)); } // Set flash message function setFlashMessage($type, $message) { $_SESSION['flash_type'] = $type; $_SESSION['flash_message'] = $message; } // Get and clear flash message function getFlashMessage() { if (isset($_SESSION['flash_message'])) { $type = $_SESSION['flash_type'] ?? 'info'; $message = $_SESSION['flash_message']; unset($_SESSION['flash_type']); unset($_SESSION['flash_message']); return ['type' => $type, 'message' => $message]; } return null; } // Rate limiting for login attempts function checkLoginAttempts($username) { $key = 'login_attempts_' . md5($username . getUserIP()); if (!isset($_SESSION[$key])) { $_SESSION[$key] = ['count' => 0, 'time' => time()]; } $attempts = $_SESSION[$key]; // Reset after 15 minutes if (time() - $attempts['time'] > 900) { $_SESSION[$key] = ['count' => 0, 'time' => time()]; return true; } // Block after 5 failed attempts if ($attempts['count'] >= 5) { return false; } return true; } // Increment login attempts function incrementLoginAttempts($username) { $key = 'login_attempts_' . md5($username . getUserIP()); if (!isset($_SESSION[$key])) { $_SESSION[$key] = ['count' => 0, 'time' => time()]; } $_SESSION[$key]['count']++; } // Reset login attempts function resetLoginAttempts($username) { $key = 'login_attempts_' . md5($username . getUserIP()); unset($_SESSION[$key]); } // Prevent clickjacking header('X-Frame-Options: DENY'); header('X-Content-Type-Options: nosniff'); header('X-XSS-Protection: 1; mode=block'); header('Referrer-Policy: strict-origin-when-cross-origin'); ?> -------------------- END OF FILE -------------------- FILE: css/style.css TYPE: CSS SIZE: 13.2 KB ------------------------------------------------------------ /** * Main Stylesheet * Kayal Kalmeen Kadai - Fish Stall Management System * Mobile-first responsive design with fish-themed colors */ /* CSS Variables for theming - can be changed dynamically */ :root { --primary-color: #008B8B; /* Dark Cyan */ --secondary-color: #20B2AA; /* Light Sea Green */ --accent-color: #00CED1; /* Dark Turquoise */ --success-color: #28a745; --danger-color: #dc3545; --warning-color: #ffc107; --info-color: #17a2b8; --light-bg: #f0f8ff; /* Alice Blue */ --dark-text: #2c3e50; --border-color: #b0e0e6; /* Powder Blue */ --shadow: rgba(0, 139, 139, 0.1); --font-size-base: 16px; } /* Reset and Base Styles */ * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; font-size: var(--font-size-base); line-height: 1.6; color: var(--dark-text); background-color: var(--light-bg); min-height: 100vh; display: flex; flex-direction: column; } /* Container */ .container { max-width: 1200px; margin: 0 auto; padding: 0 15px; width: 100%; } /* Header Styles */ .header { background: linear-gradient(135deg, var(--primary-color), var(--secondary-color)); color: white; padding: 1rem 0; box-shadow: 0 2px 10px var(--shadow); position: sticky; top: 0; z-index: 1000; } .header-content { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 1rem; } .logo { font-size: 1.5rem; font-weight: bold; text-decoration: none; color: white; display: flex; align-items: center; gap: 0.5rem; } .logo-icon { font-size: 2rem; } .header-right { display: flex; align-items: center; gap: 1rem; flex-wrap: wrap; } .user-info { display: flex; align-items: center; gap: 0.5rem; font-size: 0.9rem; } .user-role { background: rgba(255, 255, 255, 0.2); padding: 0.25rem 0.75rem; border-radius: 20px; font-size: 0.8rem; } /* Theme Settings */ .theme-settings { position: relative; } .theme-btn { background: rgba(255, 255, 255, 0.2); border: none; color: white; padding: 0.5rem 1rem; border-radius: 5px; cursor: pointer; font-size: 0.9rem; transition: background 0.3s; } .theme-btn:hover { background: rgba(255, 255, 255, 0.3); } .theme-dropdown { display: none; position: absolute; right: 0; top: 100%; margin-top: 0.5rem; background: white; border-radius: 8px; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15); padding: 1rem; min-width: 250px; z-index: 1001; } .theme-dropdown.active { display: block; } .theme-option { margin-bottom: 1rem; } .theme-option label { display: block; color: var(--dark-text); margin-bottom: 0.25rem; font-size: 0.9rem; } .theme-option input[type="color"], .theme-option input[type="range"] { width: 100%; cursor: pointer; } .theme-option input[type="range"] { height: 6px; } .theme-option .range-value { display: inline-block; margin-left: 0.5rem; font-weight: bold; color: var(--primary-color); } /* Navigation */ .nav { background: white; box-shadow: 0 2px 5px var(--shadow); margin-bottom: 1.5rem; } .nav-list { list-style: none; display: flex; flex-wrap: wrap; padding: 0; margin: 0; } .nav-list li { position: relative; } .nav-list a { display: block; padding: 1rem 1.25rem; color: var(--dark-text); text-decoration: none; transition: all 0.3s; font-weight: 500; } .nav-list a:hover, .nav-list a.active { background: var(--primary-color); color: white; } /* Mobile Navigation Toggle */ .nav-toggle { display: none; background: var(--primary-color); color: white; border: none; padding: 0.75rem 1.5rem; cursor: pointer; font-size: 1rem; width: 100%; } /* Main Content */ .main-content { flex: 1; padding: 1.5rem 0; } /* Page Title */ .page-title { color: var(--primary-color); margin-bottom: 1.5rem; padding-bottom: 0.5rem; border-bottom: 3px solid var(--secondary-color); font-size: 1.8rem; } /* Cards */ .card { background: white; border-radius: 10px; box-shadow: 0 2px 10px var(--shadow); padding: 1.5rem; margin-bottom: 1.5rem; } .card-title { color: var(--primary-color); margin-bottom: 1rem; font-size: 1.3rem; } /* Dashboard Stats */ .stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 1.5rem; margin-bottom: 2rem; } .stat-card { background: linear-gradient(135deg, var(--primary-color), var(--secondary-color)); color: white; padding: 1.5rem; border-radius: 10px; box-shadow: 0 4px 15px var(--shadow); transition: transform 0.3s; } .stat-card:hover { transform: translateY(-5px); } .stat-value { font-size: 2.5rem; font-weight: bold; margin: 0.5rem 0; } .stat-label { font-size: 1rem; opacity: 0.9; } /* Forms */ .form-group { margin-bottom: 1.25rem; } .form-group label { display: block; margin-bottom: 0.5rem; font-weight: 600; color: var(--dark-text); } .form-group .required::after { content: " *"; color: var(--danger-color); } .form-control { width: 100%; padding: 0.75rem; border: 2px solid var(--border-color); border-radius: 5px; font-size: 1rem; transition: border-color 0.3s; } .form-control:focus { outline: none; border-color: var(--primary-color); box-shadow: 0 0 0 3px rgba(0, 139, 139, 0.1); } .form-control:disabled { background-color: #e9ecef; cursor: not-allowed; } select.form-control { cursor: pointer; } textarea.form-control { min-height: 100px; resize: vertical; } .form-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 1rem; } /* Buttons */ .btn { display: inline-block; padding: 0.75rem 1.5rem; border: none; border-radius: 5px; font-size: 1rem; font-weight: 600; cursor: pointer; text-decoration: none; text-align: center; transition: all 0.3s; line-height: 1.5; } .btn:disabled { opacity: 0.6; cursor: not-allowed; } .btn-primary { background: var(--primary-color); color: white; } .btn-primary:hover:not(:disabled) { background: var(--secondary-color); transform: translateY(-2px); box-shadow: 0 4px 10px var(--shadow); } .btn-secondary { background: #6c757d; color: white; } .btn-secondary:hover:not(:disabled) { background: #5a6268; } .btn-success { background: var(--success-color); color: white; } .btn-success:hover:not(:disabled) { background: #218838; } .btn-danger { background: var(--danger-color); color: white; } .btn-danger:hover:not(:disabled) { background: #c82333; } .btn-warning { background: var(--warning-color); color: #212529; } .btn-warning:hover:not(:disabled) { background: #e0a800; } .btn-info { background: var(--info-color); color: white; } .btn-info:hover:not(:disabled) { background: #138496; } .btn-small { padding: 0.5rem 1rem; font-size: 0.875rem; } .btn-group { display: flex; gap: 0.75rem; flex-wrap: wrap; } /* Tables */ .table-responsive { overflow-x: auto; -webkit-overflow-scrolling: touch; } table { width: 100%; border-collapse: collapse; background: white; border-radius: 8px; overflow: hidden; } thead { background: linear-gradient(135deg, var(--primary-color), var(--secondary-color)); color: white; } th, td { padding: 1rem; text-align: left; border-bottom: 1px solid var(--border-color); } th { font-weight: 600; white-space: nowrap; } tbody tr:hover { background: rgba(0, 139, 139, 0.05); } tbody tr:last-child td { border-bottom: none; } td.actions { white-space: nowrap; } td.text-right { text-align: right; } td.text-center { text-align: center; } /* Alerts */ .alert { padding: 1rem 1.25rem; border-radius: 5px; margin-bottom: 1.5rem; border-left: 4px solid; } .alert-success { background: #d4edda; border-color: var(--success-color); color: #155724; } .alert-danger { background: #f8d7da; border-color: var(--danger-color); color: #721c24; } .alert-warning { background: #fff3cd; border-color: var(--warning-color); color: #856404; } .alert-info { background: #d1ecf1; border-color: var(--info-color); color: #0c5460; } /* Badges */ .badge { display: inline-block; padding: 0.35rem 0.65rem; font-size: 0.8rem; font-weight: 600; border-radius: 20px; text-transform: uppercase; } .badge-success { background: var(--success-color); color: white; } .badge-danger { background: var(--danger-color); color: white; } .badge-warning { background: var(--warning-color); color: #212529; } .badge-info { background: var(--info-color); color: white; } .badge-primary { background: var(--primary-color); color: white; } /* Pagination */ .pagination { display: flex; justify-content: center; align-items: center; gap: 0.5rem; margin: 2rem 0; flex-wrap: wrap; } .page-link { padding: 0.5rem 1rem; border: 2px solid var(--border-color); border-radius: 5px; color: var(--primary-color); text-decoration: none; transition: all 0.3s; font-weight: 500; } .page-link:hover { background: var(--primary-color); color: white; border-color: var(--primary-color); } .page-link.active { background: var(--primary-color); color: white; border-color: var(--primary-color); } .page-dots { padding: 0.5rem; color: var(--dark-text); } /* Login Page */ .login-container { min-height: 100vh; display: flex; align-items: center; justify-content: center; background: linear-gradient(135deg, var(--primary-color), var(--secondary-color)); padding: 1rem; } .login-card { background: white; border-radius: 15px; box-shadow: 0 10px 40px rgba(0, 0, 0, 0.2); padding: 2.5rem; max-width: 450px; width: 100%; } .login-logo { text-align: center; margin-bottom: 2rem; } .login-logo h1 { color: var(--primary-color); font-size: 2rem; margin-bottom: 0.5rem; } .login-logo p { color: #6c757d; font-size: 0.9rem; } /* Footer */ .footer { background: var(--dark-text); color: white; padding: 1.5rem 0; margin-top: auto; } .footer-content { text-align: center; } .footer p { margin: 0.25rem 0; font-size: 0.9rem; } /* Empty State */ .empty-state { text-align: center; padding: 3rem 1rem; color: #6c757d; } .empty-state-icon { font-size: 4rem; margin-bottom: 1rem; color: var(--border-color); } .empty-state h3 { margin-bottom: 0.5rem; color: var(--dark-text); } /* Loading Spinner */ .loading { display: inline-block; width: 30px; height: 30px; border: 3px solid rgba(0, 139, 139, 0.3); border-radius: 50%; border-top-color: var(--primary-color); animation: spin 1s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } /* Utility Classes */ .text-center { text-align: center; } .text-right { text-align: right; } .text-left { text-align: left; } .mt-1 { margin-top: 0.5rem; } .mt-2 { margin-top: 1rem; } .mt-3 { margin-top: 1.5rem; } .mb-1 { margin-bottom: 0.5rem; } .mb-2 { margin-bottom: 1rem; } .mb-3 { margin-bottom: 1.5rem; } .text-success { color: var(--success-color); } .text-danger { color: var(--danger-color); } .text-warning { color: var(--warning-color); } .text-info { color: var(--info-color); } .text-primary { color: var(--primary-color); } /* Responsive Design */ @media (max-width: 768px) { .header-content { flex-direction: column; align-items: stretch; } .logo { justify-content: center; } .header-right { flex-direction: column; align-items: stretch; } .nav-toggle { display: block; } .nav-list { flex-direction: column; display: none; } .nav-list.active { display: flex; } .nav-list a { border-bottom: 1px solid var(--border-color); } .stats-grid { grid-template-columns: 1fr; } .form-row { grid-template-columns: 1fr; } table { font-size: 0.875rem; } th, td { padding: 0.75rem 0.5rem; } .btn-group { flex-direction: column; } .btn { width: 100%; } .page-title { font-size: 1.5rem; } .theme-dropdown { right: auto; left: 0; } } @media (max-width: 480px) { .login-card { padding: 1.5rem; } .login-logo h1 { font-size: 1.5rem; } .stat-value { font-size: 2rem; } th, td { font-size: 0.8rem; padding: 0.5rem 0.25rem; } } /* Print Styles */ @media print { .header, .nav, .footer, .btn, .theme-settings { display: none !important; } .main-content { padding: 0; } .card { box-shadow: none; border: 1px solid #ddd; } } -------------------- END OF FILE -------------------- FILE: expenses/add_category.php TYPE: PHP SIZE: 6.87 KB ------------------------------------------------------------ prepare($check_sql); $stmt->bind_param("s", $category_name); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) { $error = "A category with this name already exists"; } else { // Insert new category $sql = "INSERT INTO expense_categories (category_name, description, status, created_at) VALUES (?, ?, 'active', NOW())"; $stmt = $conn->prepare($sql); $stmt->bind_param("ss", $category_name, $description); if ($stmt->execute()) { $new_id = $conn->insert_id(); logActivity($_SESSION['user_id'], 'CREATE', 'expense_categories', "Created category: $category_name"); $success = "Category '$category_name' created successfully!"; // Clear form $category_name = ''; $description = ''; } else { $error = "Failed to create category: " . $stmt->error; } } } catch (Exception $e) { $error = "Database error: " . $e->getMessage(); } } } // Get existing categories $categories = fetchAll("SELECT * FROM expense_categories ORDER BY category_name"); $page_title = 'Add Expense Category'; require_once __DIR__ . '/../includes/header.php'; ?>

➕ Add Expense Category

Create New Category

Cancel

Existing Categories ()

Category Name Status

✓ Active Inactive

No categories yet. Create your first one!

💡 Example Categories

'Vehicle fuel expenses', 'Maintenance' => 'Equipment and vehicle maintenance', 'Utilities' => 'Electricity, water, etc.', 'Rent' => 'Shop or storage rent', 'Wages' => 'Employee salaries and wages', 'Supplies' => 'Shop supplies and materials', 'Ice' => 'Ice for fish preservation', 'Transportation' => 'Delivery and transport costs', 'Marketing' => 'Advertising and promotion', 'Miscellaneous' => 'Other expenses' ]; foreach ($examples as $name => $desc): ?>
-------------------- END OF FILE -------------------- FILE: expenses/add_expense.php TYPE: PHP SIZE: 13.05 KB ------------------------------------------------------------

Add New Expense

✓ Expense added successfully!

Expense Entry Form

Auto-calculating...

Recent Expenses (Last 20)

📋 View All
Date Category Description Units Unit Cost Amount Payment Added By

40): ?>...
Total (Last 20):
💸

No expense records yet

Start by adding your first expense entry above

-------------------- END OF FILE -------------------- FILE: expenses/add_subcategory.php TYPE: PHP SIZE: 8.78 KB ------------------------------------------------------------ prepare($check_sql); $stmt->bind_param("is", $category_id, $subcategory_name); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) { $error = "A subcategory with this name already exists in the selected category"; } else { // Insert new subcategory $sql = "INSERT INTO expense_subcategories (category_id, subcategory_name, description, status, created_at) VALUES (?, ?, ?, 'active', NOW())"; $stmt = $conn->prepare($sql); $stmt->bind_param("iss", $category_id, $subcategory_name, $description); if ($stmt->execute()) { $new_id = $conn->insert_id(); logActivity($_SESSION['user_id'], 'CREATE', 'expense_subcategories', "Created subcategory: $subcategory_name"); $success = "Subcategory '$subcategory_name' created successfully!"; // Clear form $subcategory_name = ''; $description = ''; } else { $error = "Failed to create subcategory: " . $stmt->error; } } } catch (Exception $e) { $error = "Database error: " . $e->getMessage(); } } } // Get subcategories by category $subcategories_by_category = []; $all_subcategories = fetchAll(" SELECT s.*, c.category_name FROM expense_subcategories s JOIN expense_categories c ON s.category_id = c.category_id ORDER BY c.category_name, s.subcategory_name "); foreach ($all_subcategories as $sub) { $subcategories_by_category[$sub['category_name']][] = $sub; } $page_title = 'Add Expense Subcategory'; require_once __DIR__ . '/../includes/header.php'; ?>

➕ Add Expense Subcategory

Create New Subcategory

No categories available. Create a category first.
Cancel

Existing Subcategories

$subcats): ?>

( subcategories)


No subcategories yet. Create your first one!

💡 Example Subcategories

['Diesel', 'Petrol', 'Gas'], 'Maintenance' => ['Vehicle Repair', 'Equipment Repair', 'Cleaning'], 'Utilities' => ['Electricity', 'Water', 'Internet'], 'Wages' => ['Full-time Staff', 'Part-time Staff', 'Daily Wages'], 'Ice' => ['Block Ice', 'Flake Ice', 'Ice Storage'], 'Transportation' => ['Delivery', 'Pickup', 'Freight'] ]; foreach ($examples as $category => $subs): ?>
-------------------- END OF FILE -------------------- FILE: expenses/delete_expense.php TYPE: PHP SIZE: 3.99 KB ------------------------------------------------------------

Delete Expense Entry

⚠️ Confirm Deletion

Are you sure you want to delete this expense entry? This action cannot be undone!

Date:
Category: /
Description:
Units:
Unit Cost:
Total Amount:
Cancel
-------------------- END OF FILE -------------------- FILE: expenses/edit_expense.php TYPE: PHP SIZE: 11.25 KB ------------------------------------------------------------ Go back"); } // Get categories $categories = fetchAll("SELECT category_id, category_name FROM expense_categories WHERE status = 'active' ORDER BY category_name"); // Get subcategories for current category $subcategories = fetchAll("SELECT subcategory_id, subcategory_name FROM expense_subcategories WHERE category_id = ? AND status = 'active' ORDER BY subcategory_name", "i", [$expense['category_id']]); // Handle form submission if ($_SERVER['REQUEST_METHOD'] === 'POST') { $expense_date = $_POST['expense_date']; $category_id = intval($_POST['category_id']); $subcategory_id = !empty($_POST['subcategory_id']) ? intval($_POST['subcategory_id']) : null; $description = trim($_POST['description']); $units = floatval($_POST['units']); $unit_cost = floatval($_POST['unit_cost']); $total_amount = floatval($_POST['total_amount']); $payment_mode = $_POST['payment_mode']; // Validation if (empty($expense_date) || $category_id <= 0 || empty($description) || $units <= 0 || $unit_cost <= 0 || $total_amount <= 0) { $error = "Please fill all required fields with valid values"; } else { // Update expense if ($subcategory_id) { $sql = "UPDATE expenses SET expense_date = ?, category_id = ?, subcategory_id = ?, description = ?, units = ?, unit_cost = ?, total_amount = ?, payment_mode = ? WHERE expense_id = ?"; $params = [$expense_date, $category_id, $subcategory_id, $description, $units, $unit_cost, $total_amount, $payment_mode, $expense_id]; $types = "siisddsi"; } else { $sql = "UPDATE expenses SET expense_date = ?, category_id = ?, subcategory_id = NULL, description = ?, units = ?, unit_cost = ?, total_amount = ?, payment_mode = ? WHERE expense_id = ?"; $params = [$expense_date, $category_id, $description, $units, $unit_cost, $total_amount, $payment_mode, $expense_id]; $types = "sisddsi"; } if (executeQuery($sql, $types, $params)) { logActivity($_SESSION['user_id'], 'UPDATE', 'expenses', "Edited expense #$expense_id"); $success = "Expense entry updated successfully!"; // Reload expense data $expense = fetchSingle(" SELECT e.*, c.category_name, sc.subcategory_name, u.full_name as added_by_name FROM expenses e JOIN expense_categories c ON e.category_id = c.category_id LEFT JOIN expense_subcategories sc ON e.subcategory_id = sc.subcategory_id JOIN users u ON e.added_by = u.user_id WHERE e.expense_id = ? ", "i", [$expense_id]); } else { $error = "Failed to update expense entry"; } } } $page_title = 'Edit Expense'; require_once __DIR__ . '/../includes/header.php'; ?>

Edit Expense Entry #

Current Details


Edit Expense Entry

Cancel 🗑️ Delete Entry
-------------------- END OF FILE -------------------- FILE: expenses/manage_categories.php TYPE: PHP SIZE: 16.03 KB ------------------------------------------------------------ prepare($check_sql); $stmt->bind_param("s", $category_name); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) { $error = "Category '$category_name' already exists"; } else { // Insert $sql = "INSERT INTO expense_categories (category_name, description, status, created_at) VALUES (?, ?, 'active', NOW())"; $stmt = $conn->prepare($sql); $stmt->bind_param("ss", $category_name, $description); if ($stmt->execute()) { logActivity($_SESSION['user_id'], 'CREATE', 'expense_categories', "Created category: $category_name"); $success = "Category '$category_name' created successfully!"; } else { $error = "Failed to create category: " . $stmt->error; } } } catch (Exception $e) { $error = "Database error: " . $e->getMessage(); } } } // Handle Add Subcategory if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'add_subcategory') { $category_id = intval($_POST['category_id']); $subcategory_name = trim($_POST['subcategory_name']); $description = trim($_POST['description']); if ($category_id <= 0) { $error = "Please select a category"; } elseif (empty($subcategory_name)) { $error = "Subcategory name is required"; } else { try { $conn = getDbConnection(); // Check duplicate $check_sql = "SELECT subcategory_id FROM expense_subcategories WHERE category_id = ? AND subcategory_name = ?"; $stmt = $conn->prepare($check_sql); $stmt->bind_param("is", $category_id, $subcategory_name); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) { $error = "Subcategory '$subcategory_name' already exists in this category"; } else { // Insert $sql = "INSERT INTO expense_subcategories (category_id, subcategory_name, description, status, created_at) VALUES (?, ?, ?, 'active', NOW())"; $stmt = $conn->prepare($sql); $stmt->bind_param("iss", $category_id, $subcategory_name, $description); if ($stmt->execute()) { logActivity($_SESSION['user_id'], 'CREATE', 'expense_subcategories', "Created subcategory: $subcategory_name"); $success = "Subcategory '$subcategory_name' created successfully!"; } else { $error = "Failed to create subcategory: " . $stmt->error; } } } catch (Exception $e) { $error = "Database error: " . $e->getMessage(); } } } // Handle Toggle Status if (isset($_GET['toggle_category'])) { $cat_id = intval($_GET['toggle_category']); $conn = getDbConnection(); $sql = "UPDATE expense_categories SET status = IF(status = 'active', 'inactive', 'active') WHERE category_id = ?"; $stmt = $conn->prepare($sql); $stmt->bind_param("i", $cat_id); $stmt->execute(); $success = "Category status updated"; } if (isset($_GET['toggle_subcategory'])) { $sub_id = intval($_GET['toggle_subcategory']); $conn = getDbConnection(); $sql = "UPDATE expense_subcategories SET status = IF(status = 'active', 'inactive', 'active') WHERE subcategory_id = ?"; $stmt = $conn->prepare($sql); $stmt->bind_param("i", $sub_id); $stmt->execute(); $success = "Subcategory status updated"; } // Get all categories $categories = fetchAll("SELECT * FROM expense_categories ORDER BY category_name"); // Get all subcategories grouped by category $subcategories_by_category = []; $all_subcategories = fetchAll(" SELECT s.*, c.category_name FROM expense_subcategories s JOIN expense_categories c ON s.category_id = c.category_id ORDER BY c.category_name, s.subcategory_name "); foreach ($all_subcategories as $sub) { $subcategories_by_category[$sub['category_id']][] = $sub; } $page_title = 'Manage Categories'; require_once __DIR__ . '/../includes/header.php'; ?>

📂 Manage Expense Categories

All Categories & Subcategories


subcategories
📂

No categories yet

Create your first expense category to get started

➕ Add New Category

➕ Add New Subcategory

No categories available.
-------------------- END OF FILE -------------------- FILE: expenses/view_expenses.php TYPE: PHP SIZE: 12.07 KB ------------------------------------------------------------ = ?"; $params[] = $from_date; $types .= "s"; } if ($to_date) { $where_clauses[] = "e.expense_date <= ?"; $params[] = $to_date; $types .= "s"; } if ($category_filter) { $where_clauses[] = "e.category_id = ?"; $params[] = $category_filter; $types .= "i"; } if ($payment_mode_filter) { $where_clauses[] = "e.payment_mode = ?"; $params[] = $payment_mode_filter; $types .= "s"; } $where_sql = !empty($where_clauses) ? "WHERE " . implode(" AND ", $where_clauses) : ""; // Get total count $count_sql = "SELECT COUNT(*) as total FROM expenses e $where_sql"; $count_result = !empty($params) ? fetchSingle($count_sql, $types, $params) : fetchSingle($count_sql); $total_records = $count_result ? $count_result['total'] : 0; $total_pages = ceil($total_records / $per_page); // Get expenses $sql = " SELECT e.*, c.category_name, sc.subcategory_name, u.full_name as added_by_name FROM expenses e JOIN expense_categories c ON e.category_id = c.category_id LEFT JOIN expense_subcategories sc ON e.subcategory_id = sc.subcategory_id JOIN users u ON e.added_by = u.user_id $where_sql ORDER BY e.expense_date DESC, e.created_at DESC LIMIT $per_page OFFSET $offset "; $expenses = !empty($params) ? fetchAll($sql, $types, $params) : fetchAll($sql); // Get summary $summary_sql = "SELECT SUM(total_amount) as total FROM expenses e $where_sql"; $summary_result = !empty($params) ? fetchSingle($summary_sql, $types, $params) : fetchSingle($summary_sql); $total_expenses = $summary_result ? floatval($summary_result['total']) : 0; // Get categories for filter $categories = fetchAll("SELECT category_id, category_name FROM expense_categories WHERE status = 'active' ORDER BY category_name"); // Success/error messages $success_message = ''; $error_message = ''; if (isset($_GET['success'])) { if ($_GET['success'] === 'deleted') { $success_message = 'Expense entry deleted successfully!'; } } if (isset($_GET['error'])) { if ($_GET['error'] === 'invalid') { $error_message = 'Invalid expense entry ID'; } elseif ($_GET['error'] === 'notfound') { $error_message = 'Expense entry not found'; } } $page_title = 'View Expenses'; require_once __DIR__ . '/../includes/header.php'; ?>

View All Expenses

Filter Expenses

Clear

Total Expenses

transaction

💸

Expense Records ( to )

➕ Add Expense
1): ?>
Date Category Description Units Unit Cost Total Payment Added By Actions

50): ?>... ✏️ 🗑️
Page Total:
Grand Total:
1): ?>
1): ?> ← Previous Page of Next →
💸

No expense records found

No expenses found matching your filters. Try adjusting the date range or filters. Start by adding your first expense entry

➕ Add Expense
-------------------- END OF FILE -------------------- FILE: fish/add_fish_type.php TYPE: PHP SIZE: 6.4 KB ------------------------------------------------------------ 0) { $fish_data = fetchSingle("SELECT * FROM fish_types WHERE fish_id = ?", "i", [$fish_id]); if (!$fish_data) { $_SESSION['error'] = 'Fish type not found.'; header('Location: manage_fish_types.php'); exit(); } } // Handle form submission BEFORE any HTML output if ($_SERVER['REQUEST_METHOD'] === 'POST') { $csrf_token = $_POST['csrf_token'] ?? ''; if (!verifyCSRFToken($csrf_token)) { $error = 'Invalid request. Please try again.'; } else { $fish_name = sanitizeInput($_POST['fish_name'] ?? ''); $fish_name_tamil = sanitizeInput($_POST['fish_name_tamil'] ?? ''); $description = sanitizeInput($_POST['description'] ?? ''); $status = $_POST['status'] ?? 'active'; if (empty($fish_name)) { $error = 'Fish name is required.'; } elseif (!in_array($status, ['active', 'inactive'])) { $error = 'Invalid status selected.'; } else { if ($fish_id > 0) { // Update existing fish type $query = "UPDATE fish_types SET fish_name = ?, fish_name_tamil = ?, description = ?, status = ? WHERE fish_id = ?"; $stmt = executeQuery($query, "ssssi", [ $fish_name, $fish_name_tamil ?: null, $description ?: null, $status, $fish_id ]); if ($stmt) { logActivity($_SESSION['user_id'], 'Updated fish type', 'fish_types', $fish_id); $_SESSION['success'] = 'Fish type updated successfully!'; // Redirect BEFORE any output header('Location: manage_fish_types.php'); exit(); } else { $error = 'Failed to update fish type.'; } } else { // Create new fish type $query = "INSERT INTO fish_types (fish_name, fish_name_tamil, description, status, created_by) VALUES (?, ?, ?, ?, ?)"; $stmt = executeQuery($query, "ssssi", [ $fish_name, $fish_name_tamil ?: null, $description ?: null, $status, $_SESSION['user_id'] ]); if ($stmt) { $new_fish_id = getLastInsertId(); logActivity($_SESSION['user_id'], 'Created fish type', 'fish_types', $new_fish_id); $_SESSION['success'] = 'Fish type added successfully!'; // Redirect BEFORE any output header('Location: manage_fish_types.php'); exit(); } else { $error = 'Failed to add fish type.'; } } } } } // NOW include header (after all redirects are done) $page_title = ($fish_id > 0 ? 'Edit' : 'Add') . ' Fish Type'; require_once __DIR__ . '/../includes/header.php'; $csrf_token = generateCSRFToken(); ?>

0 ? 'Edit' : 'Add'; ?> Fish Type

Cancel
-------------------- END OF FILE -------------------- FILE: fish/manage_fish_types.php TYPE: PHP SIZE: 12.11 KB ------------------------------------------------------------ query("DESCRIBE fish_types"); $columns = []; while ($row = $columns_result->fetch_assoc()) { $columns[] = $row['Field']; } // Determine which columns exist $id_col = in_array('fish_id', $columns) ? 'fish_id' : 'id'; $name_en_col = in_array('fish_name_english', $columns) ? 'fish_name_english' : (in_array('fish_name', $columns) ? 'fish_name' : 'name'); $name_ta_col = in_array('fish_name_tamil', $columns) ? 'fish_name_tamil' : (in_array('tamil_name', $columns) ? 'tamil_name' : null); $status_col = in_array('status', $columns) ? 'status' : null; $created_col = in_array('created_at', $columns) ? 'created_at' : null; // Handle Add Fish Type if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'add_fish') { $fish_name = trim($_POST['fish_name']); $fish_name_tamil = trim($_POST['fish_name_tamil'] ?? ''); if (empty($fish_name)) { $error = "Fish name is required"; } else { try { // Check duplicate $check_sql = "SELECT $id_col FROM fish_types WHERE $name_en_col = ?"; $stmt = $conn->prepare($check_sql); $stmt->bind_param("s", $fish_name); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) { $error = "Fish type '$fish_name' already exists"; } else { // Build INSERT query based on available columns $insert_cols = [$name_en_col]; $insert_vals = [$fish_name]; $types = "s"; if ($name_ta_col && !empty($fish_name_tamil)) { $insert_cols[] = $name_ta_col; $insert_vals[] = $fish_name_tamil; $types .= "s"; } if ($status_col) { $insert_cols[] = $status_col; $insert_vals[] = 'active'; $types .= "s"; } if ($created_col) { $insert_cols[] = $created_col; $insert_vals[] = date('Y-m-d H:i:s'); $types .= "s"; } $cols_str = implode(', ', $insert_cols); $placeholders = implode(', ', array_fill(0, count($insert_cols), '?')); $sql = "INSERT INTO fish_types ($cols_str) VALUES ($placeholders)"; $stmt = $conn->prepare($sql); if ($stmt) { $stmt->bind_param($types, ...$insert_vals); if ($stmt->execute()) { logActivity($_SESSION['user_id'], 'CREATE', 'fish_types', "Created fish type: $fish_name"); $success = "Fish type '$fish_name' created successfully!"; } else { $error = "Failed to create fish type: " . $stmt->error; } } else { $error = "Database error: " . $conn->error; } } } catch (Exception $e) { $error = "Error: " . $e->getMessage(); } } } // Handle Toggle Status (only if status column exists) if ($status_col && isset($_GET['toggle'])) { $fish_id = intval($_GET['toggle']); try { $sql = "UPDATE fish_types SET $status_col = IF($status_col = 'active', 'inactive', 'active') WHERE $id_col = ?"; $stmt = $conn->prepare($sql); $stmt->bind_param("i", $fish_id); $stmt->execute(); logActivity($_SESSION['user_id'], 'UPDATE', 'fish_types', "Toggled fish type status (ID: $fish_id)"); $success = "Fish type status updated"; } catch (Exception $e) { $error = "Error: " . $e->getMessage(); } } // Get all fish types try { $select_cols = [$id_col, $name_en_col]; if ($name_ta_col) $select_cols[] = $name_ta_col; if ($status_col) $select_cols[] = $status_col; $cols_str = implode(', ', $select_cols); $fish_types = fetchAll("SELECT $cols_str FROM fish_types ORDER BY $name_en_col"); } catch (Exception $e) { $fish_types = []; $error = "Error loading fish types: " . $e->getMessage(); } $page_title = 'Manage Fish Types'; require_once __DIR__ . '/../includes/header.php'; ?>

🐟 Manage Fish Types

➕ Add New Fish Type

All Fish Types ()

Fish Name Status Actions

Active Inactive
🐟

No fish types yet

Add your first fish type using the form on the left

💡 Common Fish Types in Tamil Nadu

Here are some common fish types you can add:

'Tuna', 'tamil' => 'சூரை (Soorai)'], ['english' => 'Mackerel', 'tamil' => 'அயிலை (Ayilai)'], ['english' => 'Sardine', 'tamil' => 'மத்தி (Mathi)'], ['english' => 'Pomfret', 'tamil' => 'வாவல் (Vaaval)'], ['english' => 'King Fish', 'tamil' => 'நெய்மீன் (Neimeen)'], ['english' => 'Prawns', 'tamil' => 'இறால் (Iraal)'], ['english' => 'Crab', 'tamil' => 'நண்டு (Nandu)'], ['english' => 'Squid', 'tamil' => 'கணவாய் (Kanavai)'], ['english' => 'Anchovy', 'tamil' => 'நெத்திலி (Nethili)'], ['english' => 'Red Snapper', 'tamil' => 'சங்கரா (Sangara)'], ['english' => 'Seer Fish', 'tamil' => 'வஞ்சிரம் (Vanjiram)'], ['english' => 'Pomfret White', 'tamil' => 'வெள்ளை வாவல் (Vellai Vaaval)'], ]; foreach ($common_fish as $fish): ?>

ℹ️ Table Structure Detected

Columns found in your fish_types table:
ID Column:
Name Column:
Tamil Name Column:
Status Column:

ℹ️ Important Notes

-------------------- END OF FILE -------------------- FILE: includes/footer.php TYPE: PHP SIZE: 559 B ------------------------------------------------------------ -------------------- END OF FILE -------------------- FILE: includes/functions.php TYPE: PHP SIZE: 10.39 KB ------------------------------------------------------------ '#008B8B', 'secondary_color' => '#20B2AA', 'font_size' => 16 ]; } return $prefs; } // Save user preferences function saveUserPreferences($user_id, $primary_color, $secondary_color, $font_size) { // Check if preferences exist $existing = fetchSingle("SELECT pref_id FROM user_preferences WHERE user_id = ?", "i", [$user_id]); if ($existing) { $query = "UPDATE user_preferences SET primary_color = ?, secondary_color = ?, font_size = ? WHERE user_id = ?"; executeQuery($query, "ssii", [$primary_color, $secondary_color, $font_size, $user_id]); } else { $query = "INSERT INTO user_preferences (user_id, primary_color, secondary_color, font_size) VALUES (?, ?, ?, ?)"; executeQuery($query, "issi", [$user_id, $primary_color, $secondary_color, $font_size]); } } // Get all active fish types function getActiveFishTypes() { $query = "SELECT fish_id, fish_name, fish_name_tamil FROM fish_types WHERE status = 'active' ORDER BY fish_name"; return fetchAll($query); } // Get pending payment amounts for all suppliers (including manager) function getAllSuppliersPendingAmounts() { $query = " SELECT u.user_id, u.full_name as supplier_name, u.role, COALESCE(SUM(s.total_amount), 0) as total_supply, COALESCE(SUM(ps.amount), 0) as total_paid, (COALESCE(SUM(s.total_amount), 0) - COALESCE(SUM(ps.amount), 0)) as pending_amount FROM users u LEFT JOIN supply s ON u.user_id = s.supplier_id LEFT JOIN payment_settlements ps ON u.user_id = ps.supplier_id WHERE (u.role = 'supplier' OR u.role = 'manager') AND u.status = 'active' GROUP BY u.user_id, u.full_name, u.role HAVING pending_amount > 0 OR total_supply > 0 ORDER BY u.full_name "; return fetchAll($query); } // Check if manager already exists function managerExists($exclude_user_id = null) { $query = "SELECT COUNT(*) as count FROM users WHERE role = 'manager' AND status = 'active'"; $params = []; $types = ""; if ($exclude_user_id !== null) { $query .= " AND user_id != ?"; $types = "i"; $params = [$exclude_user_id]; } $result = fetchSingle($query, $types, $params); return $result && $result['count'] > 0; } // Get expense categories function getExpenseCategories() { $query = "SELECT category_id, category_name FROM expense_categories WHERE status = 'active' ORDER BY category_name"; return fetchAll($query); } // Get expense subcategories by category function getExpenseSubcategories($category_id) { $query = "SELECT subcategory_id, subcategory_name FROM expense_subcategories WHERE category_id = ? AND status = 'active' ORDER BY subcategory_name"; return fetchAll($query, "i", [$category_id]); } // Calculate daily sales total function getDailySalesTotal($date) { $query = "SELECT COALESCE(SUM(total_amount), 0) as total FROM sales WHERE sale_date = ?"; $result = fetchSingle($query, "s", [$date]); return $result ? floatval($result['total']) : 0; } // Calculate daily expenses total function getDailyExpensesTotal($date) { $query = "SELECT COALESCE(SUM(total_amount), 0) as total FROM expenses WHERE expense_date = ?"; $result = fetchSingle($query, "s", [$date]); return $result ? floatval($result['total']) : 0; } // Get fish stock status function getFishStockStatus() { $query = "SELECT * FROM fish_stock_status ORDER BY fish_name"; return fetchAll($query); } // Get sales report by date range function getSalesReport($start_date, $end_date, $user_id = null) { $query = "SELECT s.sale_id, s.sale_date, f.fish_name, f.fish_name_tamil, s.weight_kg, s.rate_per_kg, s.total_amount, s.customer_name, s.payment_mode, u.full_name as added_by_name FROM sales s JOIN fish_types f ON s.fish_id = f.fish_id JOIN users u ON s.added_by = u.user_id WHERE s.sale_date BETWEEN ? AND ?"; $params = [$start_date, $end_date]; $types = "ss"; if ($user_id !== null) { $query .= " AND s.added_by = ?"; $types .= "i"; $params[] = $user_id; } $query .= " ORDER BY s.sale_date DESC, s.sale_id DESC"; return fetchAll($query, $types, $params); } // Get supply report by date range function getSupplyReport($start_date, $end_date, $supplier_id = null) { $query = "SELECT sup.supply_id, sup.supply_date, f.fish_name, f.fish_name_tamil, sup.weight_kg, sup.rate_per_kg, sup.total_amount, u.full_name as supplier_name, adder.full_name as added_by_name FROM supply sup JOIN fish_types f ON sup.fish_id = f.fish_id JOIN users u ON sup.supplier_id = u.user_id JOIN users adder ON sup.added_by = adder.user_id WHERE sup.supply_date BETWEEN ? AND ?"; $params = [$start_date, $end_date]; $types = "ss"; if ($supplier_id !== null) { $query .= " AND sup.supplier_id = ?"; $types .= "i"; $params[] = $supplier_id; } $query .= " ORDER BY sup.supply_date DESC, sup.supply_id DESC"; return fetchAll($query, $types, $params); } // Get expense report by date range function getExpenseReport($start_date, $end_date, $user_id = null) { $query = "SELECT e.expense_id, e.expense_date, c.category_name, COALESCE(sc.subcategory_name, '-') as subcategory_name, e.description, e.units, e.unit_cost, e.total_amount, e.payment_mode, u.full_name as added_by_name FROM expenses e JOIN expense_categories c ON e.category_id = c.category_id LEFT JOIN expense_subcategories sc ON e.subcategory_id = sc.subcategory_id JOIN users u ON e.added_by = u.user_id WHERE e.expense_date BETWEEN ? AND ?"; $params = [$start_date, $end_date]; $types = "ss"; if ($user_id !== null) { $query .= " AND e.added_by = ?"; $types .= "i"; $params[] = $user_id; } $query .= " ORDER BY e.expense_date DESC, e.expense_id DESC"; return fetchAll($query, $types, $params); } // Calculate profit/loss for date range function calculateProfitLoss($start_date, $end_date) { // Get total sales $sales_query = "SELECT COALESCE(SUM(total_amount), 0) as total FROM sales WHERE sale_date BETWEEN ? AND ?"; $sales_result = fetchSingle($sales_query, "ss", [$start_date, $end_date]); $total_sales = $sales_result ? floatval($sales_result['total']) : 0; // Get total supply cost $supply_query = "SELECT COALESCE(SUM(total_amount), 0) as total FROM supply WHERE supply_date BETWEEN ? AND ?"; $supply_result = fetchSingle($supply_query, "ss", [$start_date, $end_date]); $total_supply = $supply_result ? floatval($supply_result['total']) : 0; // Get total expenses $expense_query = "SELECT COALESCE(SUM(total_amount), 0) as total FROM expenses WHERE expense_date BETWEEN ? AND ?"; $expense_result = fetchSingle($expense_query, "ss", [$start_date, $end_date]); $total_expenses = $expense_result ? floatval($expense_result['total']) : 0; $total_cost = $total_supply + $total_expenses; $profit_loss = $total_sales - $total_cost; return [ 'total_sales' => $total_sales, 'total_supply' => $total_supply, 'total_expenses' => $total_expenses, 'total_cost' => $total_cost, 'profit_loss' => $profit_loss ]; } // Generate pagination HTML function generatePagination($current_page, $total_records, $records_per_page, $base_url) { $total_pages = ceil($total_records / $records_per_page); if ($total_pages <= 1) { return ''; } $html = ''; return $html; } ?> -------------------- END OF FILE -------------------- FILE: includes/header.php TYPE: PHP SIZE: 20.17 KB ------------------------------------------------------------ '14px', 'medium' => '16px', 'large' => '18px', 'xlarge' => '20px' ]; $base_font_size = $font_sizes[$font_size] ?? '16px'; ?> <?php echo isset($page_title) ? htmlspecialchars($page_title) . ' - ' : ''; ?>Kayal Kalmeen Kadai
🎨 -------------------- END OF FILE -------------------- FILE: js/script.js TYPE: JS SIZE: 12.37 KB ------------------------------------------------------------ /** * Main JavaScript * Kayal Kalmeen Kadai - Fish Stall Management System */ // Wait for DOM to be ready document.addEventListener('DOMContentLoaded', function() { // Mobile navigation toggle const navToggle = document.querySelector('.nav-toggle'); const navList = document.querySelector('.nav-list'); if (navToggle) { navToggle.addEventListener('click', function() { navList.classList.toggle('active'); }); } // Theme settings toggle const themeBtn = document.querySelector('.theme-btn'); const themeDropdown = document.querySelector('.theme-dropdown'); if (themeBtn && themeDropdown) { themeBtn.addEventListener('click', function(e) { e.stopPropagation(); themeDropdown.classList.toggle('active'); }); // Close dropdown when clicking outside document.addEventListener('click', function(e) { if (!themeDropdown.contains(e.target) && !themeBtn.contains(e.target)) { themeDropdown.classList.remove('active'); } }); } // Apply theme changes const primaryColorInput = document.getElementById('primary-color'); const secondaryColorInput = document.getElementById('secondary-color'); const fontSizeInput = document.getElementById('font-size'); const fontSizeValue = document.getElementById('font-size-value'); if (primaryColorInput) { primaryColorInput.addEventListener('input', function() { document.documentElement.style.setProperty('--primary-color', this.value); saveThemePreferences(); }); } if (secondaryColorInput) { secondaryColorInput.addEventListener('input', function() { document.documentElement.style.setProperty('--secondary-color', this.value); saveThemePreferences(); }); } if (fontSizeInput) { fontSizeInput.addEventListener('input', function() { const size = this.value + 'px'; document.documentElement.style.setProperty('--font-size-base', size); fontSizeValue.textContent = this.value + 'px'; saveThemePreferences(); }); } // Confirmation dialogs const deleteButtons = document.querySelectorAll('.btn-delete-confirm'); deleteButtons.forEach(button => { button.addEventListener('click', function(e) { const message = this.getAttribute('data-confirm') || 'Are you sure you want to delete this item?'; if (!confirm(message)) { e.preventDefault(); } }); }); // Auto-calculate totals setupAutoCalculation(); // Date validations setupDateValidations(); // Load subcategories when category changes const categorySelect = document.getElementById('category_id'); if (categorySelect) { categorySelect.addEventListener('change', loadSubcategories); } // Initialize tooltips (if needed) initializeTooltips(); // Auto-dismiss alerts after 5 seconds const alerts = document.querySelectorAll('.alert'); alerts.forEach(alert => { setTimeout(() => { alert.style.transition = 'opacity 0.5s'; alert.style.opacity = '0'; setTimeout(() => alert.remove(), 500); }, 5000); }); }); // Save theme preferences to server function saveThemePreferences() { const primaryColor = document.getElementById('primary-color')?.value; const secondaryColor = document.getElementById('secondary-color')?.value; const fontSize = document.getElementById('font-size')?.value; if (primaryColor && secondaryColor && fontSize) { fetch('save_preferences.php', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ primary_color: primaryColor, secondary_color: secondaryColor, font_size: fontSize }) }).catch(error => console.error('Error saving preferences:', error)); } } // Auto-calculate totals for forms function setupAutoCalculation() { // For supply/sales forms: weight * rate = total const weightInput = document.getElementById('weight_kg'); const rateInput = document.getElementById('rate_per_kg'); const totalInput = document.getElementById('total_amount'); if (weightInput && rateInput && totalInput) { const calculateTotal = () => { const weight = parseFloat(weightInput.value) || 0; const rate = parseFloat(rateInput.value) || 0; const total = (weight * rate).toFixed(2); totalInput.value = total; }; weightInput.addEventListener('input', calculateTotal); rateInput.addEventListener('input', calculateTotal); } // For expense forms: units * unit_cost = total const unitsInput = document.getElementById('units'); const unitCostInput = document.getElementById('unit_cost'); const expenseTotalInput = document.getElementById('expense_total'); if (unitsInput && unitCostInput && expenseTotalInput) { const calculateExpenseTotal = () => { const units = parseFloat(unitsInput.value) || 0; const unitCost = parseFloat(unitCostInput.value) || 0; const total = (units * unitCost).toFixed(2); expenseTotalInput.value = total; }; unitsInput.addEventListener('input', calculateExpenseTotal); unitCostInput.addEventListener('input', calculateExpenseTotal); } } // Date validations function setupDateValidations() { const dateInputs = document.querySelectorAll('input[type="date"]'); dateInputs.forEach(input => { // Set max date to today if (input.hasAttribute('data-max-today')) { const today = new Date().toISOString().split('T')[0]; input.setAttribute('max', today); } // Validate date range if (input.hasAttribute('data-min-date')) { const minDate = input.getAttribute('data-min-date'); input.setAttribute('min', minDate); } }); // Date range validation (from-to dates) const fromDate = document.getElementById('from_date'); const toDate = document.getElementById('to_date'); if (fromDate && toDate) { fromDate.addEventListener('change', function() { toDate.setAttribute('min', this.value); if (toDate.value && toDate.value < this.value) { toDate.value = this.value; } }); toDate.addEventListener('change', function() { if (fromDate.value && this.value < fromDate.value) { alert('End date cannot be before start date'); this.value = fromDate.value; } }); } } // Load subcategories based on selected category function loadSubcategories() { const categoryId = this.value; const subcategorySelect = document.getElementById('subcategory_id'); if (!subcategorySelect) return; // Clear existing options except the first one subcategorySelect.innerHTML = ''; if (!categoryId) return; // Fetch subcategories fetch(`get_subcategories.php?category_id=${categoryId}`) .then(response => response.json()) .then(data => { data.forEach(subcategory => { const option = document.createElement('option'); option.value = subcategory.subcategory_id; option.textContent = subcategory.subcategory_name; subcategorySelect.appendChild(option); }); }) .catch(error => console.error('Error loading subcategories:', error)); } // Initialize tooltips function initializeTooltips() { const tooltipElements = document.querySelectorAll('[data-tooltip]'); tooltipElements.forEach(element => { element.style.position = 'relative'; element.style.cursor = 'help'; element.addEventListener('mouseenter', function() { const tooltip = document.createElement('div'); tooltip.className = 'tooltip'; tooltip.textContent = this.getAttribute('data-tooltip'); tooltip.style.cssText = ` position: absolute; background: rgba(0, 0, 0, 0.8); color: white; padding: 0.5rem 1rem; border-radius: 5px; font-size: 0.875rem; white-space: nowrap; z-index: 1000; bottom: 100%; left: 50%; transform: translateX(-50%); margin-bottom: 0.5rem; `; this.appendChild(tooltip); }); element.addEventListener('mouseleave', function() { const tooltip = this.querySelector('.tooltip'); if (tooltip) { tooltip.remove(); } }); }); } // Format currency input function formatCurrencyInput(input) { let value = input.value.replace(/[^\d.]/g, ''); const parts = value.split('.'); if (parts.length > 2) { value = parts[0] + '.' + parts.slice(1).join(''); } if (parts[1] && parts[1].length > 2) { value = parts[0] + '.' + parts[1].substring(0, 2); } input.value = value; } // Apply currency formatting to all currency inputs const currencyInputs = document.querySelectorAll('.currency-input'); currencyInputs.forEach(input => { input.addEventListener('input', function() { formatCurrencyInput(this); }); }); // Export table to CSV function exportTableToCSV(tableId, filename) { const table = document.getElementById(tableId); if (!table) return; let csv = []; const rows = table.querySelectorAll('tr'); rows.forEach(row => { const cols = row.querySelectorAll('td, th'); const rowData = Array.from(cols).map(col => { let data = col.textContent.trim(); data = data.replace(/"/g, '""'); // Escape quotes return `"${data}"`; }); csv.push(rowData.join(',')); }); const csvContent = csv.join('\n'); const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' }); const link = document.createElement('a'); if (navigator.msSaveBlob) { navigator.msSaveBlob(blob, filename); } else { link.href = URL.createObjectURL(blob); link.download = filename; link.click(); } } // Print function function printPage() { window.print(); } // Form validation helper function validateForm(formId) { const form = document.getElementById(formId); if (!form) return false; const requiredFields = form.querySelectorAll('[required]'); let isValid = true; requiredFields.forEach(field => { if (!field.value.trim()) { isValid = false; field.style.borderColor = 'red'; // Remove red border when user starts typing field.addEventListener('input', function() { this.style.borderColor = ''; }, { once: true }); } }); if (!isValid) { alert('Please fill in all required fields'); } return isValid; } // Number formatting function formatNumber(num, decimals = 2) { return parseFloat(num).toFixed(decimals); } // Debounce function for search inputs function debounce(func, wait) { let timeout; return function executedFunction(...args) { const later = () => { clearTimeout(timeout); func(...args); }; clearTimeout(timeout); timeout = setTimeout(later, wait); }; } // Quick search functionality const searchInputs = document.querySelectorAll('.quick-search'); searchInputs.forEach(input => { input.addEventListener('input', debounce(function() { const searchTerm = this.value.toLowerCase(); const targetTable = document.getElementById(this.getAttribute('data-target')); if (targetTable) { const rows = targetTable.querySelectorAll('tbody tr'); rows.forEach(row => { const text = row.textContent.toLowerCase(); row.style.display = text.includes(searchTerm) ? '' : 'none'; }); } }, 300)); }); -------------------- END OF FILE -------------------- FILE: reports/pending_payments.php TYPE: PHP SIZE: 7.29 KB ------------------------------------------------------------

Pending Payments Report

Total Pending Payments

Amount to be settled with suppliers

Supplier-wise Pending Payments

Supplier Name Total Supply Value Total Paid Pending Amount Status Action

No pending payments

All supplier payments are settled!

0): ?> Pending Settled 0): ?> Settle Now -
Grand Total

Quick Actions

Recent Payment Settlements (Last 10)

Date Supplier Amount Paid Payment Mode UPI Ref Settled By
-------------------- END OF FILE -------------------- FILE: reports/user_report.php TYPE: PHP SIZE: 14.53 KB ------------------------------------------------------------ prepare($sql); $stmt->bind_param("iss", $user_id, $from_date, $to_date); $stmt->execute(); $result = $stmt->get_result(); $supply_data = $result->fetch_assoc(); // Get total payments received in date range $sql = "SELECT COALESCE(SUM(amount), 0) as total_paid, COUNT(*) as payment_count FROM payment_settlements WHERE supplier_id = ? AND payment_date BETWEEN ? AND ?"; $stmt = $conn->prepare($sql); $stmt->bind_param("iss", $user_id, $from_date, $to_date); $stmt->execute(); $result = $stmt->get_result(); $payment_data = $result->fetch_assoc(); // Get OVERALL pending (not just date range) - FIXED with subqueries $sql = "SELECT COALESCE((SELECT SUM(total_amount) FROM supply WHERE supplier_id = ?), 0) as total_supply_all, COALESCE((SELECT SUM(amount) FROM payment_settlements WHERE supplier_id = ?), 0) as total_paid_all"; $stmt = $conn->prepare($sql); $stmt->bind_param("ii", $user_id, $user_id); $stmt->execute(); $result = $stmt->get_result(); $overall_data = $result->fetch_assoc(); $overall_pending = $overall_data['total_supply_all'] - $overall_data['total_paid_all']; // Get recent supplies in date range $sql = "SELECT s.*, f.fish_name, f.fish_name_tamil FROM supply s LEFT JOIN fish_types f ON s.fish_id = f.fish_id WHERE s.supplier_id = ? AND s.supply_date BETWEEN ? AND ? ORDER BY s.supply_date DESC LIMIT 10"; $stmt = $conn->prepare($sql); $stmt->bind_param("iss", $user_id, $from_date, $to_date); $stmt->execute(); $result = $stmt->get_result(); $recent_supplies = []; while ($row = $result->fetch_assoc()) { $recent_supplies[] = $row; } // Get recent payments in date range $sql = "SELECT ps.*, u.full_name as settled_by_name FROM payment_settlements ps LEFT JOIN users u ON ps.settled_by = u.user_id WHERE ps.supplier_id = ? AND ps.payment_date BETWEEN ? AND ? ORDER BY ps.payment_date DESC LIMIT 10"; $stmt = $conn->prepare($sql); $stmt->bind_param("iss", $user_id, $from_date, $to_date); $stmt->execute(); $result = $stmt->get_result(); $recent_payments = []; while ($row = $result->fetch_assoc()) { $recent_payments[] = $row; } } elseif ($role === 'manager' || $role === 'admin') { // MANAGER/ADMIN REPORT // Get sales summary $sql = "SELECT COALESCE(SUM(total_amount), 0) as total_sales, COUNT(*) as sale_count FROM sales WHERE sale_date BETWEEN ? AND ?"; $stmt = $conn->prepare($sql); $stmt->bind_param("ss", $from_date, $to_date); $stmt->execute(); $result = $stmt->get_result(); $sales_data = $result->fetch_assoc(); // Get supply summary $sql = "SELECT COALESCE(SUM(total_amount), 0) as total_supply, COUNT(*) as supply_count FROM supply WHERE supply_date BETWEEN ? AND ?"; $stmt = $conn->prepare($sql); $stmt->bind_param("ss", $from_date, $to_date); $stmt->execute(); $result = $stmt->get_result(); $supply_summary = $result->fetch_assoc(); // Get expense summary $sql = "SELECT COALESCE(SUM(total_amount), 0) as total_expenses, COUNT(*) as expense_count FROM expenses WHERE expense_date BETWEEN ? AND ?"; $stmt = $conn->prepare($sql); $stmt->bind_param("ss", $from_date, $to_date); $stmt->execute(); $result = $stmt->get_result(); $expense_data = $result->fetch_assoc(); // Get payment summary $sql = "SELECT COALESCE(SUM(amount), 0) as total_payments, COUNT(*) as payment_count FROM payment_settlements WHERE payment_date BETWEEN ? AND ?"; $stmt = $conn->prepare($sql); $stmt->bind_param("ss", $from_date, $to_date); $stmt->execute(); $result = $stmt->get_result(); $payment_summary = $result->fetch_assoc(); // Calculate profit $profit = $sales_data['total_sales'] - $supply_summary['total_supply'] - $expense_data['total_expenses']; } } catch (Exception $e) { $error = "Error generating report: " . $e->getMessage(); } $page_title = 'Reports'; require_once __DIR__ . '/../includes/header.php'; ?>

📊 Reports

Select Date Range

Your Pending Payment

This is the total amount pending to be paid to you.

Total Supply (Period)
entries
Payments Received (Period)
payments
Overall Pending
All time

Recent Supplies ()

Date Fish Type Weight (kg) Rate/kg Amount

Recent Payments ()

Payment Date Amount Payment Mode Settled By Notes
Total Sales
transactions
Total Supply Cost
supplies
Total Expenses
expenses
= 0 ? 'Profit' : 'Loss'; ?>
Sales - Supply - Expenses

Supplier Payments Made

Total Paid
payments

Detailed Reports

📊 View All Sales 📦 View All Supplies 💸 View All Expenses 💰 Pending Payments
-------------------- END OF FILE -------------------- FILE: sales/add_sale.php TYPE: PHP SIZE: 9.2 KB ------------------------------------------------------------

Add New Sale

✓ Sale added successfully!

Sale Entry Form

Record the total sales amount for the day along with payment mode.

Recent Sales (Last 20)

📋 View All
0, 'upi' => 0, 'card' => 0, 'bank_transfer' => 0, 'credit' => 0]; foreach ($recent_sales as $sale): $total += $sale['total_amount']; if (isset($payment_summary[$sale['payment_mode']])) { $payment_summary[$sale['payment_mode']] += $sale['total_amount']; } ?>
Date Total Amount Payment Mode Notes Added By Added On
'#28a745', 'upi' => '#17a2b8', 'card' => '#6f42c1', 'bank_transfer' => '#fd7e14', 'credit' => '#dc3545' ]; $color = $mode_colors[$sale['payment_mode']] ?? '#666'; ?> 50): ?>... -
Total (Last 20):

Payment Mode Summary (Last 20):

'Cash', 'upi' => 'UPI', 'card' => 'Card', 'bank_transfer' => 'Bank Transfer', 'credit' => 'Credit' ]; foreach ($payment_summary as $mode => $amount): if ($amount > 0): ?>
💰

No sales records yet

Start by adding your first sale entry above

-------------------- END OF FILE -------------------- FILE: sales/delete_sale.php TYPE: PHP SIZE: 3.13 KB ------------------------------------------------------------

Delete Sale Entry

⚠️ Confirm Deletion

Are you sure you want to delete this sale entry? This action cannot be undone!

Date:
Amount:
Payment Mode:
Notes:
Cancel
-------------------- END OF FILE -------------------- FILE: sales/edit_sale.php TYPE: PHP SIZE: 5.97 KB ------------------------------------------------------------ Go back"); } // Handle form submission if ($_SERVER['REQUEST_METHOD'] === 'POST') { $sale_date = $_POST['sale_date']; $total_amount = floatval($_POST['total_amount']); $payment_mode = $_POST['payment_mode']; $notes = trim($_POST['notes']); // Validation if (empty($sale_date) || $total_amount <= 0) { $error = "Please fill all required fields with valid values"; } else { // Update sale $sql = "UPDATE sales SET sale_date = ?, total_amount = ?, payment_mode = ?, notes = ? WHERE sale_id = ?"; if (executeQuery($sql, "sdssi", [$sale_date, $total_amount, $payment_mode, $notes, $sale_id])) { logActivity($_SESSION['user_id'], 'UPDATE', 'sales', "Edited sale #$sale_id"); $success = "Sale entry updated successfully!"; // Reload sale data $sale = fetchSingle(" SELECT s.*, u.full_name as added_by_name FROM sales s JOIN users u ON s.added_by = u.user_id WHERE s.sale_id = ? ", "i", [$sale_id]); } else { $error = "Failed to update sale entry"; } } } $page_title = 'Edit Sale'; require_once __DIR__ . '/../includes/header.php'; ?>

Edit Sale Entry #

Current Details

Edit Sale Entry

-------------------- END OF FILE -------------------- FILE: sales/view_sales.php TYPE: PHP SIZE: 13.06 KB ------------------------------------------------------------ = ?"; $params[] = $from_date; $types .= "s"; } if ($to_date) { $where_clauses[] = "s.sale_date <= ?"; $params[] = $to_date; $types .= "s"; } if ($payment_mode_filter) { $where_clauses[] = "s.payment_mode = ?"; $params[] = $payment_mode_filter; $types .= "s"; } $where_sql = !empty($where_clauses) ? "WHERE " . implode(" AND ", $where_clauses) : ""; // Get total count $count_sql = "SELECT COUNT(*) as total FROM sales s $where_sql"; $count_result = !empty($params) ? fetchSingle($count_sql, $types, $params) : fetchSingle($count_sql); $total_records = $count_result ? $count_result['total'] : 0; $total_pages = ceil($total_records / $per_page); // Get sales $sql = " SELECT s.*, u.full_name as added_by_name FROM sales s JOIN users u ON s.added_by = u.user_id $where_sql ORDER BY s.sale_date DESC, s.created_at DESC LIMIT $per_page OFFSET $offset "; $sales = !empty($params) ? fetchAll($sql, $types, $params) : fetchAll($sql); // Get summary $summary_sql = "SELECT SUM(total_amount) as total FROM sales s $where_sql"; $summary_result = !empty($params) ? fetchSingle($summary_sql, $types, $params) : fetchSingle($summary_sql); $total_sales = $summary_result ? floatval($summary_result['total']) : 0; // Get payment mode summary $payment_summary = []; $payment_modes = ['cash', 'upi', 'card', 'bank_transfer', 'credit']; foreach ($payment_modes as $mode) { $mode_where = !empty($where_clauses) ? $where_sql . " AND s.payment_mode = ?" : "WHERE s.payment_mode = ?"; $mode_params = $params; $mode_params[] = $mode; $mode_types = $types . "s"; $mode_sql = "SELECT COUNT(*) as count, COALESCE(SUM(total_amount), 0) as total FROM sales s $mode_where"; $mode_result = fetchSingle($mode_sql, $mode_types, $mode_params); $payment_summary[$mode] = [ 'count' => $mode_result ? $mode_result['count'] : 0, 'total' => $mode_result ? floatval($mode_result['total']) : 0 ]; } // Success/error messages $success_message = ''; $error_message = ''; if (isset($_GET['success'])) { if ($_GET['success'] === 'deleted') { $success_message = 'Sale entry deleted successfully!'; } } if (isset($_GET['error'])) { if ($_GET['error'] === 'invalid') { $error_message = 'Invalid sale entry ID'; } elseif ($_GET['error'] === 'notfound') { $error_message = 'Sale entry not found'; } } $page_title = 'View Sales'; require_once __DIR__ . '/../includes/header.php'; ?>

View All Sales

Filter Sales

Clear
Cash
transactions
UPI
transactions
Card
transactions
Bank Transfer
transactions
Credit
transactions
Total Sales
transactions

Sales Records ( to )

➕ Add Sale
'#28a745', 'upi' => '#17a2b8', 'card' => '#6f42c1', 'bank_transfer' => '#fd7e14', 'credit' => '#dc3545' ]; $mode_color = $mode_colors[$sale['payment_mode']] ?? '#6c757d'; ?> 1): ?>
Date Amount Payment Mode Notes Added By Added On Actions
30): ?>... ✏️ 🗑️
Page Total:
Grand Total:
1): ?>
1): ?> ← Previous Page of Next →
💰

No sales records found

No sales found matching your filters. Try adjusting the date range or filters. Start by adding your first sale entry

➕ Add Sale
-------------------- END OF FILE -------------------- FILE: supply/add_supply.php TYPE: PHP SIZE: 12.93 KB ------------------------------------------------------------

Add New Supply

✓ Supply added successfully!

Supply Entry Form

Auto-calculating...

(Last 20)

📋 View All
Date Supplier Fish Weight (kg) Rate/kg Amount Notes
Manager
30): ?>... -
Total (Last 20):
📦

No supply records yet

Start by adding your first supply entry above

-------------------- END OF FILE -------------------- FILE: supply/all_suppliers.php TYPE: PHP SIZE: 7.55 KB ------------------------------------------------------------ 0 OR COALESCE(SUM(ps.amount), 0) > 0) ORDER BY u.full_name "); // Calculate totals $total_supply = 0; $total_paid = 0; $total_pending = 0; foreach ($suppliers as $supplier) { $total_supply += $supplier['total_supply']; $total_paid += $supplier['total_paid']; $total_pending += $supplier['pending_amount']; } $page_title = 'All Suppliers - Payment History'; require_once __DIR__ . '/../includes/header.php'; ?>

📋 All Suppliers - Payment History

Total Suppliers
Active suppliers
Total Supply
All time
Total Paid
All time
Total Pending
Current balance

All Suppliers

Supplier Name Phone Supplies Payments Total Supply Total Paid Pending Actions
Manager 0): ?> 0): ?> ✓ Paid - 0): ?> 💰 Settle 0): ?> 📋 History No payments yet
📋

No suppliers found

No suppliers have any supply or payment records yet.

🔗 Quick Links

💰 View Pending Payments Only ➕ Add Supply Entry 📦 View All Supplies
-------------------- END OF FILE -------------------- FILE: supply/delete_payment.php TYPE: PHP SIZE: 4.93 KB ------------------------------------------------------------ query("DESCRIBE payment_settlements"); if ($result) { $columns = []; while ($row = $result->fetch_assoc()) { $columns[] = $row['Field']; } if (in_array('date', $columns)) { $date_column = 'date'; } elseif (in_array('settlement_date', $columns)) { $date_column = 'settlement_date'; } } } catch (Exception $e) { // Use default } // Get settlement entry $settlement = fetchSingle(" SELECT ps.*, u.full_name as supplier_name FROM payment_settlements ps JOIN users u ON ps.supplier_id = u.user_id WHERE ps.settlement_id = ? ", "i", [$settlement_id]); if (!$settlement) { header("Location: pending_payments.php?error=notfound"); exit(); } $date_value = isset($settlement[$date_column]) ? $settlement[$date_column] : (isset($settlement['payment_date']) ? $settlement['payment_date'] : ''); // Handle confirmation if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['confirm'])) { // Delete the settlement entry $sql = "DELETE FROM payment_settlements WHERE settlement_id = ?"; if (executeQuery($sql, "i", [$settlement_id])) { logActivity($_SESSION['user_id'], 'DELETE', 'payment_settlements', "Deleted payment settlement #$settlement_id"); header("Location: pending_payments.php?success=payment_deleted"); exit(); } else { $error = "Failed to delete payment settlement"; } } $page_title = 'Delete Payment'; require_once __DIR__ . '/../includes/header.php'; ?>

Delete Payment Settlement

⚠️ Confirm Deletion

Are you sure you want to delete this payment settlement? This action cannot be undone!

Supplier:
Payment Date:
Amount:
Payment Mode:
Reference:
Notes:
⚠️ Warning: Deleting this payment will increase the supplier's pending amount by ₹
Cancel
-------------------- END OF FILE -------------------- FILE: supply/delete_supply.php TYPE: PHP SIZE: 3.5 KB ------------------------------------------------------------

Delete Supply Entry

⚠️ Confirm Deletion

Are you sure you want to delete this supply entry? This action cannot be undone!

Supplier:
Date:
Weight: kg
Total Amount:
Cancel
-------------------- END OF FILE -------------------- FILE: supply/edit_payment.php TYPE: PHP SIZE: 7.89 KB ------------------------------------------------------------ query("DESCRIBE payment_settlements"); if ($result) { $columns = []; while ($row = $result->fetch_assoc()) { $columns[] = $row['Field']; } if (in_array('date', $columns)) { $date_column = 'date'; } elseif (in_array('settlement_date', $columns)) { $date_column = 'settlement_date'; } } } catch (Exception $e) { // Use default } // Get settlement entry $settlement = fetchSingle(" SELECT ps.*, u.full_name as supplier_name, u2.full_name as settled_by_name FROM payment_settlements ps JOIN users u ON ps.supplier_id = u.user_id JOIN users u2 ON ps.settled_by = u2.user_id WHERE ps.settlement_id = ? ", "i", [$settlement_id]); if (!$settlement) { die("Payment settlement not found. Go back"); } // Handle form submission if ($_SERVER['REQUEST_METHOD'] === 'POST') { $payment_date = $_POST['payment_date']; $amount = floatval($_POST['amount']); $payment_mode = $_POST['payment_mode']; $reference_number = trim($_POST['reference_number']); $notes = trim($_POST['notes']); // Validation if (empty($payment_date) || $amount <= 0) { $error = "Please fill all required fields with valid values"; } else { // Update settlement $sql = "UPDATE payment_settlements SET $date_column = ?, amount = ?, payment_mode = ?, reference_number = ?, notes = ? WHERE settlement_id = ?"; if (executeQuery($sql, "sdsssi", [$payment_date, $amount, $payment_mode, $reference_number, $notes, $settlement_id])) { logActivity($_SESSION['user_id'], 'UPDATE', 'payment_settlements', "Edited payment settlement #$settlement_id"); $success = "Payment settlement updated successfully!"; // Reload settlement data $settlement = fetchSingle(" SELECT ps.*, u.full_name as supplier_name, u2.full_name as settled_by_name FROM payment_settlements ps JOIN users u ON ps.supplier_id = u.user_id JOIN users u2 ON ps.settled_by = u2.user_id WHERE ps.settlement_id = ? ", "i", [$settlement_id]); } else { $error = "Failed to update payment settlement"; } } } // Get date value $date_value = isset($settlement[$date_column]) ? $settlement[$date_column] : (isset($settlement['payment_date']) ? $settlement['payment_date'] : ''); $page_title = 'Edit Payment Settlement'; require_once __DIR__ . '/../includes/header.php'; ?>

Edit Payment Settlement #

Current Details

Edit Payment Settlement

Cancel 🗑️ Delete Payment
-------------------- END OF FILE -------------------- FILE: supply/edit_supply.php TYPE: PHP SIZE: 10.17 KB ------------------------------------------------------------ Go back"); } // Check permissions $user_role = $_SESSION['role']; $user_id = $_SESSION['user_id']; if ($user_role === 'supplier' && $supply['supplier_id'] != $user_id) { die("You can only edit your own supplies. Go back"); } // Get fish types $fish_types = fetchAll("SELECT fish_id, fish_name_english, fish_name_tamil FROM fish_types WHERE status = 'active' ORDER BY fish_name_english"); // Get suppliers (for admin/manager) $suppliers = []; if (hasRole(['admin', 'manager'])) { $suppliers = fetchAll("SELECT user_id, full_name, role FROM users WHERE (role = 'supplier' OR role = 'manager') AND status = 'active' ORDER BY full_name"); } // Handle form submission if ($_SERVER['REQUEST_METHOD'] === 'POST') { $supply_date = $_POST['supply_date']; $supplier_id = hasRole(['admin', 'manager']) ? intval($_POST['supplier_id']) : $user_id; $fish_id = intval($_POST['fish_id']); $weight_kg = floatval($_POST['weight_kg']); $rate_per_kg = floatval($_POST['rate_per_kg']); $manual_total = isset($_POST['manual_total']) && $_POST['manual_total'] === '1'; if ($manual_total) { $total_amount = floatval($_POST['total_amount']); } else { $total_amount = $weight_kg * $rate_per_kg; } $notes = trim($_POST['notes']); // Validation if (empty($supply_date) || $fish_id <= 0 || $weight_kg <= 0 || $rate_per_kg <= 0 || $total_amount <= 0) { $error = "Please fill all required fields with valid values"; } else { // Update supply $sql = "UPDATE supply SET supply_date = ?, supplier_id = ?, fish_id = ?, weight_kg = ?, rate_per_kg = ?, total_amount = ?, notes = ? WHERE supply_id = ?"; if (executeQuery($sql, "siidddsi", [$supply_date, $supplier_id, $fish_id, $weight_kg, $rate_per_kg, $total_amount, $notes, $supply_id])) { logActivity($_SESSION['user_id'], 'UPDATE', 'supply', "Edited supply #$supply_id"); $success = "Supply entry updated successfully!"; // Reload supply data $supply = fetchSingle(" SELECT s.*, u.full_name, u.role, f.fish_name_english, f.fish_name_tamil FROM supply s JOIN users u ON s.supplier_id = u.user_id JOIN fish_types f ON s.fish_id = f.fish_id WHERE s.supply_id = ? ", "i", [$supply_id]); } else { $error = "Failed to update supply entry"; } } } $page_title = 'Edit Supply'; require_once __DIR__ . '/../includes/header.php'; ?>

Edit Supply Entry #

Current Details

Manager
kg
/kg

Edit Supply Entry

Cancel 🗑️ Delete Entry
-------------------- END OF FILE -------------------- FILE: supply/payment_history.php TYPE: PHP SIZE: 9.51 KB ------------------------------------------------------------ prepare($sql); $stmt->bind_param("i", $supplier_id); $stmt->execute(); $result = $stmt->get_result(); $supplier = $result->fetch_assoc(); if (!$supplier) { $error = "Supplier not found"; } // Get total supply from supply table $sql = "SELECT COALESCE(SUM(total_amount), 0) as total_supply FROM supply WHERE supplier_id = ?"; $stmt = $conn->prepare($sql); $stmt->bind_param("i", $supplier_id); $stmt->execute(); $result = $stmt->get_result(); $supply_data = $result->fetch_assoc(); $total_supply = $supply_data['total_supply']; // Get all payment settlements for this supplier $sql = "SELECT s.settlement_id, s.supplier_id, s.amount, s.payment_date, s.settlement_date, s.payment_mode, s.reference_number, s.upi_ref, s.notes, s.settled_by, s.created_at, u.full_name as settled_by_name FROM payment_settlements s LEFT JOIN users u ON s.settled_by = u.user_id WHERE s.supplier_id = ? ORDER BY s.created_at DESC"; $stmt = $conn->prepare($sql); $stmt->bind_param("i", $supplier_id); $stmt->execute(); $result = $stmt->get_result(); $settlements = []; $total_paid = 0; while ($row = $result->fetch_assoc()) { $settlements[] = $row; $total_paid += floatval($row['amount']); } $pending_amount = $total_supply - $total_paid; } catch (Exception $e) { $error = "Database error: " . $e->getMessage(); $supplier = null; $settlements = []; $total_supply = 0; $total_paid = 0; $pending_amount = 0; } $page_title = 'Payment History' . ($supplier ? ' - ' . htmlspecialchars($supplier['full_name']) : ''); require_once __DIR__ . '/../includes/header.php'; ?>

💰 Payment History

Supplier:

Total Supply
Total Paid
Pending Amount
Total Payments
0): ?> 💵 Settle Payment ← Back to Pending Payments

All Payments ( records)

Payment Date Amount Payment Mode Reference Number Notes Settled By Recorded On Actions
✏️ 🗑️
Grand Total:
💰

No payments recorded yet

Start by settling a payment for this supplier

💵 Settle Payment

Supplier not found

The requested supplier does not exist

← Back to Pending Payments
-------------------- END OF FILE -------------------- FILE: supply/pending_payments.php TYPE: PHP SIZE: 6.36 KB ------------------------------------------------------------ 0 ORDER BY pending_amount DESC"; $result = $conn->query($sql); $suppliers = []; $total_pending = 0; while ($row = $result->fetch_assoc()) { $suppliers[] = $row; $total_pending += $row['pending_amount']; } } catch (Exception $e) { $error = "Database error: " . $e->getMessage(); $suppliers = []; $total_pending = 0; } $page_title = 'Pending Payments'; require_once __DIR__ . '/../includes/header.php'; ?>

💰 Pending Payments

Total Pending
Across all suppliers
Suppliers with Pending
Need payment settlement

Suppliers with Pending Amounts

Supplier Name Phone Total Supply Total Paid Pending Amount Actions
Grand Total Pending:

All payments settled!

No pending payments at this time

ℹ️ Payment Management

-------------------- END OF FILE -------------------- FILE: supply/settle_payment.php TYPE: PHP SIZE: 10.98 KB ------------------------------------------------------------ getMessage()); } startSession(); requireLogin(); if (!hasRole(['admin', 'manager'])) { header("Location: /dashboard.php"); exit(); } $supplier_id = isset($_GET['supplier_id']) ? intval($_GET['supplier_id']) : 0; if (!$supplier_id) { header("Location: pending_payments.php"); exit(); } // Get supplier details try { $supplier = fetchSingle(" SELECT user_id, full_name, role, phone FROM users WHERE user_id = ? AND (role = 'supplier' OR role = 'manager') AND status = 'active' ", "i", [$supplier_id]); } catch (Exception $e) { $supplier = null; } if (!$supplier) { die("Supplier not found. Go back"); } // Calculate pending amount try { $pending_data = fetchSingle(" SELECT COALESCE(SUM(s.total_amount), 0) as total_supply, COALESCE(SUM(ps.amount), 0) as total_paid FROM users u LEFT JOIN supply s ON u.user_id = s.supplier_id LEFT JOIN payment_settlements ps ON u.user_id = ps.supplier_id WHERE u.user_id = ? GROUP BY u.user_id ", "i", [$supplier_id]); $total_supply = $pending_data ? floatval($pending_data['total_supply']) : 0; $total_paid = $pending_data ? floatval($pending_data['total_paid']) : 0; $pending_amount = $total_supply - $total_paid; } catch (Exception $e) { $total_supply = 0; $total_paid = 0; $pending_amount = 0; $error = "Error calculating pending amount: " . $e->getMessage(); } // Handle form submission - WITHOUT reference_number if ($_SERVER['REQUEST_METHOD'] === 'POST') { $payment_date = $_POST['payment_date']; $amount = floatval($_POST['amount']); $payment_mode = $_POST['payment_mode']; $notes = trim($_POST['notes']); $settled_by = $_SESSION['user_id']; // Validate amount if ($amount <= 0) { $error = "Payment amount must be greater than 0"; } elseif ($amount > $pending_amount) { $error = "Payment amount cannot exceed pending amount of ₹" . number_format($pending_amount, 2); } else { try { // Insert WITHOUT reference_number column $sql = "INSERT INTO payment_settlements (supplier_id, payment_date, amount, payment_mode, notes, settled_by) VALUES (?, ?, ?, ?, ?, ?)"; if (executeQuery($sql, "isdssi", [$supplier_id, $payment_date, $amount, $payment_mode, $notes, $settled_by])) { logActivity($_SESSION['user_id'], 'INSERT', 'payment_settlements', 'Settled payment to ' . $supplier['full_name']); header("Location: pending_payments.php?success=1"); exit(); } else { $error = "Failed to record payment. Please try again."; } } catch (Exception $e) { $error = "Database error: " . $e->getMessage(); } } } // Get recent payments - WITHOUT reference_number in SELECT try { $recent_payments = fetchAll(" SELECT ps.payment_date, ps.amount, ps.payment_mode, ps.notes, ps.created_at, u.full_name as settled_by_name FROM payment_settlements ps JOIN users u ON ps.settled_by = u.user_id WHERE ps.supplier_id = ? ORDER BY ps.payment_date DESC, ps.created_at DESC LIMIT 10 ", "i", [$supplier_id]); } catch (Exception $e) { $recent_payments = []; } $page_title = 'Settle Payment'; require_once __DIR__ . '/../includes/header.php'; ?>

Settle Payment

Supplier Information

Manager
✓ This supplier has no pending payments. All amounts have been settled!
← Back to Pending Payments

Record Payment Settlement

Maximum: ₹ Pay Full Amount
Cancel

Recent Payments to This Supplier

Payment Date Amount Payment Mode Notes Settled By Recorded On
format('d-m-Y') : $payment['payment_date']; ?> 50): ?>... - format('d-m-Y H:i') : $payment['created_at']; ?>
Total (Last 10):
-------------------- END OF FILE -------------------- FILE: supply/view_supplies.php TYPE: PHP SIZE: 14.79 KB ------------------------------------------------------------ getMessage()); } startSession(); requireLogin(); requireRole(['admin', 'manager', 'supplier']); // Auto-detect fish_types column names $fish_name_col = 'fish_name'; $fish_tamil_col = null; try { $conn = getDbConnection(); $result = $conn->query("DESCRIBE fish_types"); $columns = []; while ($row = $result->fetch_assoc()) { $columns[] = $row['Field']; } // Check for English name column if (in_array('fish_name_english', $columns)) { $fish_name_col = 'fish_name_english'; } elseif (in_array('fish_name', $columns)) { $fish_name_col = 'fish_name'; } elseif (in_array('name', $columns)) { $fish_name_col = 'name'; } // Check for Tamil name column if (in_array('fish_name_tamil', $columns)) { $fish_tamil_col = 'fish_name_tamil'; } elseif (in_array('tamil_name', $columns)) { $fish_tamil_col = 'tamil_name'; } } catch (Exception $e) { // Use defaults } // Get current user info $user_role = $_SESSION['role']; $user_id = $_SESSION['user_id']; // Pagination $page = isset($_GET['page']) ? max(1, intval($_GET['page'])) : 1; $per_page = 50; $offset = ($page - 1) * $per_page; // Filters $from_date = $_GET['from_date'] ?? ''; $to_date = $_GET['to_date'] ?? ''; $fish_filter = $_GET['fish_id'] ?? ''; $supplier_filter = $_GET['supplier_id'] ?? ''; // Build query based on role $where_clauses = []; $params = []; $types = ""; if ($user_role === 'supplier') { $where_clauses[] = "s.supplier_id = ?"; $params[] = $user_id; $types .= "i"; } if ($from_date) { $where_clauses[] = "s.supply_date >= ?"; $params[] = $from_date; $types .= "s"; } if ($to_date) { $where_clauses[] = "s.supply_date <= ?"; $params[] = $to_date; $types .= "s"; } if ($fish_filter) { $where_clauses[] = "s.fish_id = ?"; $params[] = $fish_filter; $types .= "i"; } if ($supplier_filter && hasRole(['admin', 'manager'])) { $where_clauses[] = "s.supplier_id = ?"; $params[] = $supplier_filter; $types .= "i"; } $where_sql = !empty($where_clauses) ? "WHERE " . implode(" AND ", $where_clauses) : ""; // Get total count try { $count_sql = "SELECT COUNT(*) as total FROM supply s $where_sql"; $count_result = !empty($params) ? fetchSingle($count_sql, $types, $params) : fetchSingle($count_sql); $total_records = $count_result ? $count_result['total'] : 0; $total_pages = ceil($total_records / $per_page); } catch (Exception $e) { $total_records = 0; $total_pages = 0; $error = "Error counting records: " . $e->getMessage(); } // Build fish columns for query $fish_select = "f.$fish_name_col as fish_name"; if ($fish_tamil_col) { $fish_select .= ", f.$fish_tamil_col as fish_name_tamil"; } // Get supplies try { $sql = " SELECT s.*, u.full_name as supplier_name, u.role as supplier_role, $fish_select FROM supply s JOIN users u ON s.supplier_id = u.user_id JOIN fish_types f ON s.fish_id = f.fish_id $where_sql ORDER BY s.supply_date DESC, s.created_at DESC LIMIT $per_page OFFSET $offset "; $supplies = !empty($params) ? fetchAll($sql, $types, $params) : fetchAll($sql); } catch (Exception $e) { $supplies = []; $error = "Error loading supplies: " . $e->getMessage(); } // Get summary try { $summary_sql = " SELECT SUM(weight_kg) as total_weight, SUM(total_amount) as total_amount FROM supply s $where_sql "; $summary_result = !empty($params) ? fetchSingle($summary_sql, $types, $params) : fetchSingle($summary_sql); $total_weight = $summary_result ? floatval($summary_result['total_weight']) : 0; $total_amount = $summary_result ? floatval($summary_result['total_amount']) : 0; } catch (Exception $e) { $total_weight = 0; $total_amount = 0; } // Get fish types for filter try { $fish_types = fetchAll("SELECT fish_id, $fish_name_col as fish_name FROM fish_types WHERE status = 'active' ORDER BY $fish_name_col"); } catch (Exception $e) { $fish_types = []; } // Get suppliers for filter $suppliers = []; if (hasRole(['admin', 'manager'])) { try { $suppliers = fetchAll("SELECT user_id, full_name, role FROM users WHERE (role = 'supplier' OR role = 'manager') AND status = 'active' ORDER BY full_name"); } catch (Exception $e) { $suppliers = []; } } // Success/error messages $success_message = ''; $error_message = isset($error) ? $error : ''; if (isset($_GET['success'])) { if ($_GET['success'] === 'deleted') { $success_message = 'Supply entry deleted successfully!'; } } if (isset($_GET['error'])) { if ($_GET['error'] === 'invalid') { $error_message = 'Invalid supply entry ID'; } elseif ($_GET['error'] === 'notfound') { $error_message = 'Supply entry not found'; } elseif ($_GET['error'] === 'permission') { $error_message = 'You do not have permission to delete this entry'; } } $page_title = 'View Supplies'; require_once __DIR__ . '/../includes/header.php'; ?>

View All Supplies

Filter Supplies

Clear
Total Weight
kg
entries
Total Amount
Supply value

Supply Records

➕ Add Supply
1): ?>
Date Supplier Fish Type Weight (kg) Rate/kg Total Amount Notes Actions
format('d-m-Y') : $supply['supply_date']; ?> Manager
30) echo '...'; } else { echo '-'; } ?> ✏️ 🗑️
Page Total:
Grand Total:
1): ?>
1): ?> ← Previous Page of Next →
📦

No supply records found

No supplies found matching your filters. Try adjusting the date range or filters. Start by adding your first supply entry

➕ Add Supply
-------------------- END OF FILE -------------------- FILE: users/add_user.php TYPE: PHP SIZE: 11.9 KB ------------------------------------------------------------ prepare($check_sql); $stmt->bind_param("s", $username); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) { $error = "Username already exists. Please choose a different username."; } else { // Hash password $hashed_password = password_hash($password, PASSWORD_DEFAULT); // Insert user $sql = "INSERT INTO users (full_name, username, email, phone, password, role, status, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, NOW())"; $stmt = $conn->prepare($sql); $stmt->bind_param("sssssss", $full_name, $username, $email, $phone, $hashed_password, $role, $status); if ($stmt->execute()) { $new_user_id = $conn->insert_id; logActivity($_SESSION['user_id'], 'CREATE', 'users', "Created user: $username (ID: $new_user_id)"); $success = "User '$username' created successfully!"; // Clear form $full_name = $username = $email = $phone = $password = $confirm_password = ''; $role = ''; $status = 'active'; } else { $error = "Failed to create user: " . $stmt->error; } } } catch (Exception $e) { $error = "Database error: " . $e->getMessage(); } } } $page_title = 'Add User'; require_once __DIR__ . '/../includes/header.php'; ?>

➕ Add New User

📋 View All Users ➕ Add Another User

User Information

Minimum 3 characters, no spaces
Minimum 6 characters
❌ Cancel

👥 User Roles Explained

🔴 Admin

Full system control

  • Manage users
  • System settings
  • All supply/sales/expense operations
  • View all reports
  • Manage fish types & categories

🟡 Manager

Operations management

  • Add/view supplies
  • Add/view sales
  • Add/view expenses
  • View all reports
  • Manage pending payments

🔵 Supplier

Limited supply access

  • Add supply entries
  • View own supplies only
  • No access to sales
  • No access to expenses
  • No access to reports

🔒 Security Tips

-------------------- END OF FILE -------------------- FILE: users/delete_user.php TYPE: PHP SIZE: 1.28 KB ------------------------------------------------------------ -------------------- END OF FILE -------------------- FILE: users/edit_user.php TYPE: PHP SIZE: 8.1 KB ------------------------------------------------------------

Edit User

Username cannot be changed

Change Password (Optional)

Leave blank to keep current password
Cancel
-------------------- END OF FILE -------------------- FILE: users/manage_users.php TYPE: PHP SIZE: 3.65 KB ------------------------------------------------------------

Manage Users

All Users

Add New User
Username Full Name Email Phone Role Status Created Actions
👥

No users found

Start by adding your first user

Edit Delete
-------------------- END OF FILE -------------------- FILE: users/view_users.php TYPE: PHP SIZE: 9.4 KB ------------------------------------------------------------ prepare($sql); $stmt->bind_param("i", $user_id); if ($stmt->execute()) { logActivity($_SESSION['user_id'], 'DELETE', 'users', "Deleted user (ID: $user_id)"); $success = "User deleted successfully"; } else { $error = "Failed to delete user"; } } catch (Exception $e) { $error = "Error: " . $e->getMessage(); } } } // Handle Toggle Status if (isset($_GET['toggle'])) { $user_id = intval($_GET['toggle']); // Don't allow disabling yourself if ($user_id == $_SESSION['user_id']) { $error = "You cannot disable your own account"; } else { try { $conn = getDbConnection(); $sql = "UPDATE users SET status = IF(status = 'active', 'inactive', 'active') WHERE user_id = ?"; $stmt = $conn->prepare($sql); $stmt->bind_param("i", $user_id); if ($stmt->execute()) { logActivity($_SESSION['user_id'], 'UPDATE', 'users', "Toggled user status (ID: $user_id)"); $success = "User status updated"; } else { $error = "Failed to update user status"; } } catch (Exception $e) { $error = "Error: " . $e->getMessage(); } } } // Get all users try { $users = fetchAll("SELECT * FROM users ORDER BY created_at DESC"); } catch (Exception $e) { $users = []; $error = "Error loading users: " . $e->getMessage(); } $page_title = 'View Users'; require_once __DIR__ . '/../includes/header.php'; ?>

👥 System Users

$u['status'] === 'active')); $inactive_users = $total_users - $active_users; $admins = count(array_filter($users, fn($u) => $u['role'] === 'admin')); $managers = count(array_filter($users, fn($u) => $u['role'] === 'manager')); $suppliers = count(array_filter($users, fn($u) => $u['role'] === 'supplier')); ?>
Total Users
All system users
Active
Can login
Inactive
Disabled accounts
By Role
Admin/Manager/Supplier

All Users ()

➕ Add New User
User Username Email Role Phone Status Created Actions
You 'badge-danger', 'manager' => 'badge-warning', 'supplier' => 'badge-info' ]; $badge_class = $role_colors[$user['role']] ?? 'badge-info'; ?> Active Inactive
🗑️ Current User
👥

No users found

Start by adding your first user

➕ Add User

ℹ️ User Management Notes

-------------------- END OF FILE --------------------