# MEENKADAI_KAF_SHOP_11AUG2026_01 - REPOSITORY ================================================================================ Project Name: meenkadai_kaf_shop_11Aug2026_01 Created: 2026-08-11 07:27:20 Last Updated: 2026-08-11 07:27:32 Source ZIP: public_html.zip Total Files: 45 Total Folders: 10 ================================================================================ ## FILE STRUCTURE ================================================================================ meenkadai_kaf_shop_11Aug2026_01/ ├── config/ │ ├── settings.php │ └── database.php ├── fish/ │ ├── manage_fish_types.php │ └── add_fish_type.php ├── theme_settings.php ├── dashboard.php ├── error.log ├── users/ │ ├── add_user.php │ ├── delete_user.php │ ├── edit_user.php │ ├── view_users.php │ └── manage_users.php ├── logout.php ├── default.php ├── css/ │ └── style.css ├── index.php ├── supply/ │ ├── pending_payments.php │ ├── payment_history.php │ ├── delete_supply.php │ ├── settle_payment.php │ ├── delete_payment.php │ ├── add_supply.php │ ├── edit_payment.php │ ├── view_supplies.php │ ├── all_suppliers.php │ └── edit_supply.php ├── expenses/ │ ├── edit_expense.php │ ├── view_expenses.php │ ├── add_category.php │ ├── delete_expense.php │ ├── manage_categories.php │ ├── add_subcategory.php │ └── add_expense.php ├── reports/ │ ├── pending_payments.php │ └── user_report.php ├── js/ │ └── script.js ├── save_preferences.php ├── sales/ │ ├── view_sales.php │ ├── delete_sale.php │ ├── edit_sale.php │ └── add_sale.php ├── get_subcategories.php └── includes/ ├── footer.php ├── functions.php └── header.php ================================================================================ ## FILE CONTENTS ================================================================================ ### FILE 1: dashboard.php - Type: PHP - Size: 12.01 KB - Path: . - Name: dashboard.php ------------------------------------------------------------ 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 2: default.php - Type: PHP - Size: 15.99 KB - Path: . - Name: default.php ------------------------------------------------------------ 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 3: error.log - Type: LOG - Size: 66.31 KB - Path: . - Name: error.log ------------------------------------------------------------ [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 4: get_subcategories.php - Type: PHP - Size: 1.25 KB - Path: . - Name: get_subcategories.php ------------------------------------------------------------ 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 5: index.php - Type: PHP - Size: 4.86 KB - Path: . - Name: index.php ------------------------------------------------------------ Login - <?php echo SITE_NAME; ?>
-------------------- END OF FILE -------------------- ### FILE 6: logout.php - Type: PHP - Size: 539 B - Path: . - Name: logout.php ------------------------------------------------------------ -------------------- END OF FILE -------------------- ### FILE 7: save_preferences.php - Type: PHP - Size: 1.41 KB - Path: . - Name: save_preferences.php ------------------------------------------------------------ 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 8: theme_settings.php - Type: PHP - Size: 11.64 KB - Path: . - Name: theme_settings.php ------------------------------------------------------------ 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 9: config/database.php - Type: PHP - Size: 3.09 KB - Path: config - Name: database.php ------------------------------------------------------------ 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 10: config/settings.php - Type: PHP - Size: 6.87 KB - Path: config - Name: settings.php ------------------------------------------------------------ 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 11: css/style.css - Type: CSS - Size: 13.2 KB - Path: css - Name: style.css ------------------------------------------------------------ /** * 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 12: expenses/add_category.php - Type: PHP - Size: 6.87 KB - Path: expenses - Name: add_category.php ------------------------------------------------------------ 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 13: expenses/add_expense.php - Type: PHP - Size: 13.05 KB - Path: expenses - Name: add_expense.php ------------------------------------------------------------

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 14: expenses/add_subcategory.php - Type: PHP - Size: 8.78 KB - Path: expenses - Name: add_subcategory.php ------------------------------------------------------------ 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 15: expenses/delete_expense.php - Type: PHP - Size: 3.99 KB - Path: expenses - Name: delete_expense.php ------------------------------------------------------------

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 16: expenses/edit_expense.php - Type: PHP - Size: 11.25 KB - Path: expenses - Name: edit_expense.php ------------------------------------------------------------ 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 17: expenses/manage_categories.php - Type: PHP - Size: 16.03 KB - Path: expenses - Name: manage_categories.php ------------------------------------------------------------ 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 18: expenses/view_expenses.php - Type: PHP - Size: 12.07 KB - Path: expenses - Name: view_expenses.php ------------------------------------------------------------ = ?"; $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 19: fish/add_fish_type.php - Type: PHP - Size: 6.4 KB - Path: fish - Name: add_fish_type.php ------------------------------------------------------------ 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 20: fish/manage_fish_types.php - Type: PHP - Size: 12.11 KB - Path: fish - Name: manage_fish_types.php ------------------------------------------------------------ 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 21: includes/footer.php - Type: PHP - Size: 559 B - Path: includes - Name: footer.php ------------------------------------------------------------ -------------------- END OF FILE -------------------- ### FILE 22: includes/functions.php - Type: PHP - Size: 10.39 KB - Path: includes - Name: functions.php ------------------------------------------------------------ '#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 23: includes/header.php - Type: PHP - Size: 20.17 KB - Path: includes - Name: header.php ------------------------------------------------------------ '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 24: js/script.js - Type: JS - Size: 12.37 KB - Path: js - Name: script.js ------------------------------------------------------------ /** * 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 25: reports/pending_payments.php - Type: PHP - Size: 7.29 KB - Path: reports - Name: pending_payments.php ------------------------------------------------------------

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 26: reports/user_report.php - Type: PHP - Size: 14.53 KB - Path: reports - Name: user_report.php ------------------------------------------------------------ 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 27: sales/add_sale.php - Type: PHP - Size: 9.2 KB - Path: sales - Name: add_sale.php ------------------------------------------------------------

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 28: sales/delete_sale.php - Type: PHP - Size: 3.13 KB - Path: sales - Name: delete_sale.php ------------------------------------------------------------

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 29: sales/edit_sale.php - Type: PHP - Size: 5.97 KB - Path: sales - Name: edit_sale.php ------------------------------------------------------------ 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 30: sales/view_sales.php - Type: PHP - Size: 13.06 KB - Path: sales - Name: view_sales.php ------------------------------------------------------------ = ?"; $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 31: supply/add_supply.php - Type: PHP - Size: 12.93 KB - Path: supply - Name: add_supply.php ------------------------------------------------------------

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 32: supply/all_suppliers.php - Type: PHP - Size: 7.55 KB - Path: supply - Name: all_suppliers.php ------------------------------------------------------------ 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 33: supply/delete_payment.php - Type: PHP - Size: 4.93 KB - Path: supply - Name: delete_payment.php ------------------------------------------------------------ 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 34: supply/delete_supply.php - Type: PHP - Size: 3.5 KB - Path: supply - Name: delete_supply.php ------------------------------------------------------------

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 35: supply/edit_payment.php - Type: PHP - Size: 7.89 KB - Path: supply - Name: edit_payment.php ------------------------------------------------------------ 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 36: supply/edit_supply.php - Type: PHP - Size: 10.17 KB - Path: supply - Name: edit_supply.php ------------------------------------------------------------ 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 37: supply/payment_history.php - Type: PHP - Size: 9.51 KB - Path: supply - Name: payment_history.php ------------------------------------------------------------ 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 38: supply/pending_payments.php - Type: PHP - Size: 6.36 KB - Path: supply - Name: pending_payments.php ------------------------------------------------------------ 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 39: supply/settle_payment.php - Type: PHP - Size: 10.98 KB - Path: supply - Name: settle_payment.php ------------------------------------------------------------ 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 40: supply/view_supplies.php - Type: PHP - Size: 14.79 KB - Path: supply - Name: view_supplies.php ------------------------------------------------------------ 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 41: users/add_user.php - Type: PHP - Size: 11.9 KB - Path: users - Name: add_user.php ------------------------------------------------------------ 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 42: users/delete_user.php - Type: PHP - Size: 1.28 KB - Path: users - Name: delete_user.php ------------------------------------------------------------ -------------------- END OF FILE -------------------- ### FILE 43: users/edit_user.php - Type: PHP - Size: 8.1 KB - Path: users - Name: edit_user.php ------------------------------------------------------------

Edit User

Username cannot be changed

Change Password (Optional)

Leave blank to keep current password
Cancel
-------------------- END OF FILE -------------------- ### FILE 44: users/manage_users.php - Type: PHP - Size: 3.65 KB - Path: users - Name: manage_users.php ------------------------------------------------------------

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 45: users/view_users.php - Type: PHP - Size: 9.4 KB - Path: users - Name: view_users.php ------------------------------------------------------------ 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 -------------------- ================================================================================ ## SUMMARY ================================================================================ Repository contains 45 files total. All file contents have been extracted and are shown above. This repository snapshot was generated on: 2026-09-25 22:00:08 ================================================================================ ## END OF REPOSITORY ================================================================================