File "common_functions.php"

Full Path: /home/leadltht/fastlinkinternet.com/wp-comment-form/reports/common_functions.php
File size: 6.12 KB
MIME-type: text/x-php
Charset: utf-8

<?php

function calculateAccountBalance($conn, $clientId) {
    $sql = "SELECT SUM(amount) as totalAccountBalance FROM transactions WHERE client_id = '$clientId'";
    $result = $conn->query($sql);
    $data = $result->fetch_assoc();

    return [
        'totalAccountBalance' => $data['totalAccountBalance'],
        'billingCutOff' => '2024-06-30', // Example value
        'forPaymentReminder' => 'Yes', // Example value
        'fiveDaysBillDueDate' => '2024-07-05', // Example value
        'forDisconnection' => 'No' // Example value
    ];
}

function getBillingCutOff($installationYear, $installationMonth, $installationDay, $cut_off_day) {
    $installationDate = DateTime::createFromFormat('Y-m-d', "$installationYear-$installationMonth-$installationDay");
    $currentDate = new DateTime();
    $currentYear = (int)$currentDate->format('Y');
    $currentMonth = (int)$currentDate->format('m');
    $installationWithinCurrentMonth = ($installationDate->format('Y') == $currentYear && $installationDate->format('m') >= $currentMonth);

    if ($cut_off_day == 0) {
        if ($installationWithinCurrentMonth) {
            $billingCutOff = new DateTime("$currentYear-$currentMonth-$installationDay");
            $billingCutOff->modify('+1 month');
        } else {
            $billingCutOff = new DateTime("$currentYear-$currentMonth-$installationDay");
        }
    } else {
        $billingCutOff = new DateTime("$currentYear-$currentMonth-$cut_off_day");
    }

    return $billingCutOff->format('Y-m-d');
}

function calculateClientDetails($conn, $clientId) {
    // Fetch client details
    $sqlClient = "SELECT firstname, lastname, server, status, installation_date, plan_name, plan_price, installation_fee, cut_off_day FROM member_list WHERE id = '$clientId'";
    $resultClient = $conn->query($sqlClient);
    $clientData = $resultClient->fetch_assoc();

    if (!$clientData) {
        return null; // Client not found
    }

    // Calculate account balance
    $accountDetails = calculateAccountBalance($conn, $clientId);

    // Billing Cut Off Calculation
    $installationDate = new DateTime($clientData['installation_date']);
    $billingCutOff = getBillingCutOff($installationDate->format('Y'), $installationDate->format('m'), $installationDate->format('d'), $clientData['cut_off_day']);

    // Number of Months Since Installation Date
    $currentDate = new DateTime();
    $interval = $installationDate->diff($currentDate);
    $numberOfMonthsSinceInstallation = ($interval->y * 12) + $interval->m;

    // 5 Days Bill Due Date
    $billingCutOffDateTime = new DateTime($billingCutOff);
    $fiveDaysBillDueDate = clone $billingCutOffDateTime;
    $fiveDaysBillDueDate->add(new DateInterval('P5D'));

    // Total Installation Payments Calculation
    $clientName = $clientData['firstname'] . ' ' . $clientData['lastname'];
    $sqlInstallationPayments = "SELECT SUM(total_amount) AS totalInstallationPayments 
                                FROM collection_list 
                                WHERE name_of_payment = 'Installation Fee' AND member_id = '$clientId'";
    
    $resultInstallationPayments = $conn->query($sqlInstallationPayments);
    $totalInstallationPayments = $resultInstallationPayments ? $resultInstallationPayments->fetch_assoc()['totalInstallationPayments'] : 0;

    // Calculate Installation Balance
    $installationFee = $clientData['installation_fee'];
    $installationBalance = $installationFee - $totalInstallationPayments;

    // Calculate Total Monthly Usage
    $totalMonthlyUsage = 0;
    if ($currentDate > $billingCutOffDateTime) {
        $totalMonthlyUsage = $clientData['plan_price'] * $numberOfMonthsSinceInstallation;
    }

    // Total Monthly Fee Payments Calculation
    $sqlMonthlyFeePayments = "SELECT SUM(total_amount) AS totalMonthlyFeePayments 
                              FROM collection_list 
                              WHERE name_of_payment = 'Net Monthly Fee' AND member_id = '$clientId'";
    
    $resultMonthlyFeePayments = $conn->query($sqlMonthlyFeePayments);
    $totalMonthlyFeePayments = $resultMonthlyFeePayments ? $resultMonthlyFeePayments->fetch_assoc()['totalMonthlyFeePayments'] : 0;

    // Total ProRate Payments Calculation
    $sqlProRatePayments = "SELECT SUM(total_amount) AS totalProRatePayments 
                           FROM collection_list 
                           WHERE name_of_payment = 'ProRate' AND member_id = '$clientId'";
    
    $resultProRatePayments = $conn->query($sqlProRatePayments);
    $totalProRatePayments = $resultProRatePayments ? $resultProRatePayments->fetch_assoc()['totalProRatePayments'] : 0;

    // Calculate Remaining Unpaid Amount
    $remainingUnpaidAmount = $totalMonthlyUsage - $totalMonthlyFeePayments;

    $totalAccountBalance = $installationBalance + $remainingUnpaidAmount;

    // For Payment Reminder?
    $forPaymentReminder = 'No';
    if ($totalAccountBalance > 0 && ($currentDate > $installationDate || $currentDate >= $billingCutOffDateTime)) {
        $forPaymentReminder = 'Yes';
    }

    // For Disconnection?
    $forDisconnection = ($remainingUnpaidAmount > 0) ? 'Yes' : 'No';

    // For Permanent Disconnection?
    $forPermanentDisconnection = 'No'; // Set a default value or add your logic here

    return array_merge($clientData, $accountDetails, [
        'billingCutOff' => $billingCutOff,
        'numberOfMonthsSinceInstallation' => $numberOfMonthsSinceInstallation,
        'fiveDaysBillDueDate' => $fiveDaysBillDueDate->format('Y-m-d'),
        'totalInstallationPayments' => $totalInstallationPayments,
        'installationBalance' => $installationBalance,
        'totalMonthlyUsage' => $totalMonthlyUsage,
        'totalMonthlyFeePayments' => $totalMonthlyFeePayments,
        'totalProRatePayments' => $totalProRatePayments,
        'remainingUnpaidAmount' => $remainingUnpaidAmount,
        'totalAccountBalance' => $totalAccountBalance,
        'forPaymentReminder' => $forPaymentReminder,
        'forDisconnection' => $forDisconnection,
        'forPermanentDisconnection' => $forPermanentDisconnection // Ensure this key is set
    ]);
}
?>