prepare($query); $stmt->bindParam(':currency', $currency, SQLITE3_INTEGER); $result = $stmt->execute(); $exchangeRate = $result->fetchArray(SQLITE3_ASSOC); if ($exchangeRate === false) { return $price; } else { $fromRate = $exchangeRate['rate']; return $price / $fromRate; } } //Get household members $members = array(); $query = "SELECT * FROM household"; $result = $db->query($query); while ($row = $result->fetchArray(SQLITE3_ASSOC)) { $memberId = $row['id']; $members[$memberId] = $row; $memberCost[$memberId]['cost'] = 0; $memberCost[$memberId]['name'] = $row['name']; } // Get categories $categories = array(); $query = "SELECT * FROM categories"; $result = $db->query($query); while ($row = $result->fetchArray(SQLITE3_ASSOC)) { $categoryId = $row['id']; $categories[$categoryId] = $row; $categoryCost[$categoryId]['cost'] = 0; $categoryCost[$categoryId]['name'] = $row['name']; } // Get payment methods $categories = array(); $query = "SELECT * FROM payment_methods WHERE enabled = 1"; $result = $db->query($query); while ($row = $result->fetchArray(SQLITE3_ASSOC)) { $paymentMethodId = $row['id']; $paymentMethodCount[$paymentMethodId] = $row; $paymentMethodCount[$paymentMethodId]['count'] = 0; $paymentMethodCount[$paymentMethodId]['name'] = $row['name']; } // Get code of main currency to display on statistics $query = "SELECT c.code FROM currencies c INNER JOIN user u ON c.id = u.main_currency WHERE u.id = 1"; $stmt = $db->prepare($query); $result = $stmt->execute(); $row = $result->fetchArray(SQLITE3_ASSOC); $code = $row['code']; // Calculate active subscriptions $query = "SELECT COUNT(*) AS active_subscriptions FROM subscriptions"; $stmt = $db->prepare($query); $stmt->bindParam(':criteria', $criteria, SQLITE3_INTEGER); $result = $stmt->execute(); $row = $result->fetchArray(SQLITE3_ASSOC); $activeSubscriptions = $row['active_subscriptions']; // Calculate total monthly price $mostExpensiveSubscription = 0; $amountDueThisMonth = 0; $totalCostPerMonth = 0; $query = "SELECT name, price, frequency, cycle, currency_id, next_payment, payer_user_id, category_id, payment_method_id FROM subscriptions"; $result = $db->query($query); if ($result) { while ($row = $result->fetchArray(SQLITE3_ASSOC)) { $subscriptions[] = $row; } if (isset($subscriptions)) { foreach ($subscriptions as $subscription) { $name = $subscription['name']; $price = $subscription['price']; $frequency = $subscription['frequency']; $cycle = $subscription['cycle']; $currency = $subscription['currency_id']; $next_payment = $subscription['next_payment']; $payerId = $subscription['payer_user_id']; $categoryId = $subscription['category_id']; $paymentMethodId = $subscription['payment_method_id']; $originalSubscriptionPrice = getPriceConverted($price, $currency, $db); $price = getPricePerMonth($cycle, $frequency, $originalSubscriptionPrice); $totalCostPerMonth += $price; $memberCost[$payerId]['cost'] += $price; $categoryCost[$categoryId]['cost'] += $price; $paymentMethodCount[$paymentMethodId]['count'] += 1; if ($price > $mostExpensiveSubscription) { $mostExpensiveSubscription = $price; } // Calculate ammount due this month $nextPaymentDate = DateTime::createFromFormat('Y-m-d', trim($next_payment)); $tomorrow = new DateTime('tomorrow'); $endOfMonth = new DateTime('last day of this month'); if ($nextPaymentDate >= $tomorrow && $nextPaymentDate <= $endOfMonth) { $timesToPay = 1; $daysInMonth = $endOfMonth->diff($tomorrow)->days + 1; $daysRemaining = $endOfMonth->diff($nextPaymentDate)->days + 1; if ($cycle == 1) { $timesToPay = $daysRemaining / $frequency; } if ($cycle == 2) { $weeksInMonth = ceil($daysInMonth / 7); $weeksRemaining = ceil($daysRemaining / 7); $timesToPay = $weeksRemaining / $frequency; } $amountDueThisMonth += $originalSubscriptionPrice * $timesToPay; } } // Calculate yearly price $totalCostPerYear = $totalCostPerMonth * 12; // Calculate average subscription monthly cost $averageSubscriptionCost = $totalCostPerMonth / $activeSubscriptions; } else { $totalCostPerYear = 0; $averageSubscriptionCost = 0; } } ?>

$category['name'], "y" => $category["cost"], ]; } } $showCategoryCostGraph = count($categoryDataPoints) > 1; $memberDataPoints = []; foreach ($memberCost as $member) { if ($member['cost'] != 0) { $memberDataPoints[] = [ "label" => $member['name'], "y" => $member["cost"], ]; } } $showMemberCostGraph = count($memberDataPoints) > 1; $paymentMethodDataPoints = []; foreach ($paymentMethodCount as $paymentMethod) { if ($paymentMethod['count'] != 0) { $paymentMethodDataPoints[] = [ "label" => $paymentMethod['name'], "y" => $paymentMethod["count"], ]; } } $showPaymentMethodCountGraph = count($paymentMethodDataPoints) > 1; if ($showMemberCostGraph) { ?>
()
()