From b39f115dd1c5d005e02ec93967b2a2373556c298 Mon Sep 17 00:00:00 2001 From: johnnyq Date: Wed, 21 Jun 2023 14:18:20 -0400 Subject: [PATCH] Only show Top 5 in the following Doughnut charts: Income and Exp By Cat, and Vendor Expense lump everything else into others if more than 5 cats exist this prevents the graphs from overflowing if you have 10 or 100s of vendors expense cats or income cats --- dashboard_financial.php | 93 +++++++++++++++++++++++++---------------- 1 file changed, 57 insertions(+), 36 deletions(-) diff --git a/dashboard_financial.php b/dashboard_financial.php index a9f10bd5..4ac78213 100644 --- a/dashboard_financial.php +++ b/dashboard_financial.php @@ -744,39 +744,46 @@ $vendors_added = intval($row['vendors_added']); data: { labels: [ 0) { + echo "'Others',"; + } ?> ], datasets: [{ data: [ 0) { + echo "$other_income,"; } - ?> ], backgroundColor: [ 0) { + echo "'#999999',"; // color for 'Others' category + } ?> ], @@ -801,39 +808,46 @@ $vendors_added = intval($row['vendors_added']); data: { labels: [ 0 AND YEAR(expense_date) = $year"); + mysqli_query($mysqli, "CREATE TEMPORARY TABLE TopExpenseCategories SELECT category_name, category_id, SUM(expense_amount) AS total_expense FROM categories, expenses WHERE expense_category_id = category_id AND expense_vendor_id > 0 AND YEAR(expense_date) = $year GROUP BY category_name, category_id ORDER BY total_expense DESC LIMIT 5"); + $sql_categories = mysqli_query($mysqli, "SELECT category_name FROM TopExpenseCategories"); while ($row = mysqli_fetch_array($sql_categories)) { $category_name = json_encode($row['category_name']); echo "$category_name,"; } + $sql_other_categories = mysqli_query($mysqli, "SELECT SUM(expenses.expense_amount) AS other_expense FROM categories LEFT JOIN TopExpenseCategories ON categories.category_id = TopExpenseCategories.category_id INNER JOIN expenses ON categories.category_id = expenses.expense_category_id WHERE TopExpenseCategories.category_id IS NULL AND expense_vendor_id > 0 AND YEAR(expense_date) = $year"); + $row = mysqli_fetch_array($sql_other_categories); + $other_expense = floatval($row['other_expense']); + if ($other_expense > 0) { + echo "'Others',"; + } ?> ], datasets: [{ data: [ 0 AND YEAR(expense_date) = $year"); + $sql_categories = mysqli_query($mysqli, "SELECT total_expense FROM TopExpenseCategories"); while ($row = mysqli_fetch_array($sql_categories)) { - $category_id = $row['category_id']; - - $sql_expenses = mysqli_query($mysqli, "SELECT SUM(expense_amount) AS expense_amount_for_year FROM expenses WHERE expense_category_id = $category_id AND YEAR(expense_date) = $year"); - $row = mysqli_fetch_array($sql_expenses); - $expense_amount_for_year = floatval($row['expense_amount_for_year']); - echo "$expense_amount_for_year,"; + $total_expense = floatval($row['total_expense']); + echo "$total_expense,"; + } + if ($other_expense > 0) { + echo "$other_expense,"; } - ?> ], backgroundColor: [ 0 AND YEAR(expense_date) = $year"); + $sql_categories = mysqli_query($mysqli, "SELECT category_color FROM TopExpenseCategories JOIN categories ON TopExpenseCategories.category_id = categories.category_id"); while ($row = mysqli_fetch_array($sql_categories)) { $category_color = json_encode($row['category_color']); echo "$category_color,"; } - + if ($other_expense > 0) { + echo "'#999999',"; // color for 'Others' category + } ?> ], @@ -854,39 +868,46 @@ $vendors_added = intval($row['vendors_added']); data: { labels: [ 0) { + echo "'Others',"; + } ?> ], datasets: [{ data: [ 0) { + echo "$other_expense,"; } - ?> ], backgroundColor: [ 0) { + echo "'#999999',"; // color for 'Others' vendor } - ?> ],