Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
pokeloken
/
wp-comment-form
/
reports
:
report5.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Client Reporting</title> <!-- Bootstrap CSS --> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet"> <!-- Select2 CSS --> <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css" rel="stylesheet" /> <!-- Optional JavaScript --> <!-- jQuery first, then Popper.js, then Bootstrap JS --> <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.3/dist/umd/popper.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script> <!-- Select2 JS --> <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.min.js"></script> <!-- Chart.js --> <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> <!-- Font Awesome for icons --> <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" rel="stylesheet"> </head> <body> <?php ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); require_once('/home/leadltht/fastlinkinternet.com/administrator/data-provider/config.php'); // Ensure the correct path to config.php // Initialize variables $fromDate = $toDate = $server = ''; $reportDetails = []; $clientCount = 0; $aggregatedData = []; if ($_SERVER['REQUEST_METHOD'] == 'POST') { $fromDate = $_POST['fromDate']; $toDate = $_POST['toDate']; $server = $_POST['server']; // Build SQL query based on filters $sql = "SELECT installation_date, CONCAT(firstname, ' ', COALESCE(middlename,''), ' ', lastname) as fullname, plan_name, plan_price, server FROM member_list WHERE 1=1"; if (!empty($fromDate) && !empty($toDate)) { $sql .= " AND installation_date BETWEEN '$fromDate' AND '$toDate'"; } if (!empty($server)) { $sql .= " AND server = '$server'"; } // Execute query $result = $conn->query($sql); if (!$result) { die("Query failed: " . $conn->error); } $reportDetails = $result->fetch_all(MYSQLI_ASSOC); $clientCount = count($reportDetails); // Calculate aggregated data for chart foreach ($reportDetails as $report) { $key = date('Y-m-d', strtotime($report['installation_date'])); if (!isset($aggregatedData[$key])) { $aggregatedData[$key] = 0; } $aggregatedData[$key]++; } // Sort the aggregated data by key ksort($aggregatedData); } ?> <div class="container mt-1"> <h3 class="mb-4">Generate Client Report</h3> <form method="POST" id="report-form" action=""> <div class="form-group row"> <div class="col-sm-3"> <label for="fromDate" class="col-form-label">From Date:</label> <input type="date" name="fromDate" id="fromDate" class="form-control" value="<?= $fromDate ?>"> </div> <div class="col-sm-3"> <label for="toDate" class="col-form-label">To Date:</label> <input type="date" name="toDate" id="toDate" class="form-control" value="<?= $toDate ?>"> </div> <div class="col-sm-3"> <label for="server" class="col-form-label">Server:</label> <select name="server" id="server" class="form-control"> <option value="">Select a server</option> <!-- Add server options dynamically from the database --> <?php $serverResult = $conn->query("SELECT DISTINCT server FROM member_list ORDER BY server ASC"); while ($serverRow = $serverResult->fetch_assoc()) { echo '<option value="' . htmlspecialchars($serverRow['server']) . '">' . htmlspecialchars($serverRow['server']) . '</option>'; } ?> </select> </div> <div class="col-sm-3 d-flex align-items-end"> <button type="submit" class="btn btn-primary">Show Report</button> </div> </div> </form> </div> <!-- Display Report Boxes --> <div class="container mt-4"> <div class="row"> <div class="col-sm-6"> <div class="card text-white bg-success mb-3"> <div class="card-body"> <div class="d-flex justify-content-between align-items-center"> <div> <h5 class="card-title">Number of Clients Added</h5> <p class="card-text"><?= $clientCount ?></p> </div> <div> <i class="fas fa-user-plus fa-3x"></i> </div> </div> </div> </div> </div> </div> </div> <!-- Chart.js Graph --> <div class="container mt-5"> <?php if (!empty($reportDetails)): ?> <canvas id="reportChart"></canvas> <script> $(document).ready(function() { $('#server').select2({ placeholder: "Select a server", allowClear: true }); var ctx = document.getElementById('reportChart').getContext('2d'); var aggregatedData = <?= json_encode($aggregatedData) ?>; var labels = Object.keys(aggregatedData); var data = Object.values(aggregatedData); var chart = new Chart(ctx, { type: 'bar', data: { labels: labels, datasets: [{ label: 'Number of Clients Added', data: data, backgroundColor: 'rgba(54, 162, 235, 1)', // Blue color borderColor: 'rgba(54, 162, 235, 1)', // Blue color borderWidth: 1 }] }, options: { scales: { y: { beginAtZero: true } } } }); }); </script> <?php else: ?> <p>No data found.</p> <?php endif; ?> </div> <!-- Display Report --> <div class="container mt-5"> <?php if (!empty($reportDetails)): ?> <div class="table-responsive"> <table class="table table-bordered table-striped"> <thead> <tr> <th>#</th> <th>Installation Date</th> <th>Client Name</th> <th>Plan Name</th> <th>Plan Price</th> <th>Server</th> </tr> </thead> <tbody> <?php $counter = 1; ?> <?php foreach ($reportDetails as $report): ?> <tr> <td><?= $counter++ ?></td> <td><?= htmlspecialchars($report['installation_date']) ?></td> <td><?= htmlspecialchars($report['fullname']) ?></td> <td><?= htmlspecialchars($report['plan_name']) ?></td> <td>₱<?= number_format($report['plan_price']) ?></td> <td><?= htmlspecialchars($report['server']) ?></td> </tr> <?php endforeach; ?> </tbody> </table> </div> <?php else: ?> <p>No data found.</p> <?php endif; ?> </div> <!-- Initialize Select2 for Server --> <script> $(document).ready(function() { $('#server').select2({ placeholder: "Select a server", allowClear: true }); }); </script> </body> </html>