[
MAINHACK
]
Mail Test
BC
Config Scan
HOME
Create...
New File
New Folder
Viewing / Editing File: overdue_clients.php
<?php require_once '../config/database.php'; require_once '../config/functions.php'; requireAuth('accountant'); // Get parameters $days_overdue = $_GET['days_overdue'] ?? 45; // Default 1.5 months $min_balance = $_GET['min_balance'] ?? 1; // Minimum debt amount // Calculate cutoff date $cutoff_date = date('Y-m-d', strtotime("-$days_overdue days")); // Get overdue clients $stmt = $pdo->prepare(" SELECT c.id, c.name, c.phone, c.address, c.balance, c.created_at, COALESCE(MAX(p.created_at), '1970-01-01') as last_payment_date, DATEDIFF(CURDATE(), COALESCE(MAX(p.created_at), c.created_at)) as days_since_payment, COUNT(DISTINCT i.id) as total_invoices, COALESCE(SUM(i.invoice_total), 0) as total_invoiced FROM clients c LEFT JOIN payments p ON c.id = p.client_id LEFT JOIN invoices i ON c.id = i.client_id WHERE c.balance >= ? GROUP BY c.id, c.name, c.phone, c.address, c.balance, c.created_at HAVING (last_payment_date = '1970-01-01' AND DATEDIFF(CURDATE(), c.created_at) >= ?) OR (last_payment_date != '1970-01-01' AND last_payment_date <= ?) ORDER BY days_since_payment DESC, c.balance DESC "); $stmt->execute([$min_balance, $days_overdue, $cutoff_date]); $overdue_clients = $stmt->fetchAll(); // Calculate totals $total_clients = count($overdue_clients); $total_debt = array_sum(array_column($overdue_clients, 'balance')); $avg_days_overdue = $total_clients > 0 ? array_sum(array_column($overdue_clients, 'days_since_payment')) / $total_clients : 0; ?> <!DOCTYPE html> <html lang="ar" dir="rtl"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>تقرير العملاء المتأخرين - حسابات عربية بن فريش</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.rtl.min.css" rel="stylesheet"> <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet"> <style> .report-header { background: linear-gradient(135deg, #dc3545, #fd7e14); color: white; border-radius: 15px; } .overdue-card { border-radius: 10px; border-left: 4px solid #dc3545; transition: all 0.3s ease; } .overdue-card:hover { transform: translateY(-2px); box-shadow: 0 4px 8px rgba(0,0,0,0.1); } .days-badge { font-size: 0.9rem; padding: 0.5rem 1rem; } .critical { border-left-color: #dc3545; } .warning { border-left-color: #fd7e14; } .moderate { border-left-color: #ffc107; } @media print { .no-print { display: none !important; } } </style> </head> <body class="bg-light"> <div class="container-fluid mt-4"> <div class="d-flex justify-content-between align-items-center mb-4 no-print"> <h2><i class="fas fa-exclamation-triangle me-2"></i>تقرير العملاء المتأخرين في السداد</h2> <div> <button class="btn btn-success me-2" onclick="window.print()"> <i class="fas fa-print me-1"></i>طباعة التقرير </button> <a href="/reports/index.php" class="btn btn-outline-secondary"> <i class="fas fa-arrow-left me-1"></i>العودة </a> </div> </div> <!-- Filter Section --> <div class="report-header p-4 mb-4 no-print"> <h5 class="mb-3"><i class="fas fa-filter me-2"></i>معايير التقرير</h5> <form method="GET" class="row align-items-end"> <div class="col-md-4"> <label class="form-label">عدد الأيام بدون دفع</label> <select class="form-select" name="days_overdue"> <option value="30" <?= $days_overdue == 30 ? 'selected' : '' ?>>شهر (30 يوم)</option> <option value="45" <?= $days_overdue == 45 ? 'selected' : '' ?>>شهر ونصف (45 يوم)</option> <option value="60" <?= $days_overdue == 60 ? 'selected' : '' ?>>شهرين (60 يوم)</option> <option value="90" <?= $days_overdue == 90 ? 'selected' : '' ?>>3 أشهر (90 يوم)</option> <option value="120" <?= $days_overdue == 120 ? 'selected' : '' ?>>4 أشهر (120 يوم)</option> <option value="180" <?= $days_overdue == 180 ? 'selected' : '' ?>>6 أشهر (180 يوم)</option> </select> </div> <div class="col-md-4"> <label class="form-label">الحد الأدنى للمديونية</label> <input type="number" class="form-control" name="min_balance" value="<?= htmlspecialchars($min_balance) ?>" min="1" step="0.01"> </div> <div class="col-md-4"> <button type="submit" class="btn btn-light"> <i class="fas fa-search me-1"></i>تحديث التقرير </button> </div> </form> </div> <!-- Summary Statistics --> <div class="row mb-4"> <div class="col-md-3 mb-3"> <div class="card bg-danger text-white"> <div class="card-body text-center"> <h3><?= $total_clients ?></h3> <p class="mb-0">عميل متأخر</p> </div> </div> </div> <div class="col-md-3 mb-3"> <div class="card bg-warning text-white"> <div class="card-body text-center"> <h3><?= formatCurrency($total_debt) ?></h3> <p class="mb-0">إجمالي المديونية</p> </div> </div> </div> <div class="col-md-3 mb-3"> <div class="card bg-info text-white"> <div class="card-body text-center"> <h3><?= number_format($avg_days_overdue, 0) ?></h3> <p class="mb-0">متوسط أيام التأخير</p> </div> </div> </div> <div class="col-md-3 mb-3"> <div class="card bg-secondary text-white"> <div class="card-body text-center"> <h3><?= $days_overdue ?>+</h3> <p class="mb-0">يوم بدون دفع</p> </div> </div> </div> </div> <!-- Overdue Clients List --> <div class="card"> <div class="card-header bg-danger text-white"> <h5 class="mb-0"> <i class="fas fa-users me-2"></i> قائمة العملاء المتأخرين (<?= $total_clients ?> عميل) </h5> </div> <div class="card-body"> <?php if (empty($overdue_clients)): ?> <div class="text-center py-5"> <i class="fas fa-smile fa-3x text-success mb-3"></i> <h4 class="text-success">ممتاز!</h4> <p class="text-muted">لا يوجد عملاء متأخرين في السداد حسب المعايير المحددة</p> </div> <?php else: ?> <div class="row"> <?php foreach ($overdue_clients as $client): ?> <?php $severity_class = 'moderate'; $severity_text = 'متوسط'; $badge_class = 'warning'; if ($client['days_since_payment'] >= 120) { $severity_class = 'critical'; $severity_text = 'حرج'; $badge_class = 'danger'; } elseif ($client['days_since_payment'] >= 60) { $severity_class = 'warning'; $severity_text = 'تحذير'; $badge_class = 'warning'; } ?> <div class="col-md-6 mb-3"> <div class="overdue-card <?= $severity_class ?> card"> <div class="card-body"> <div class="d-flex justify-content-between align-items-start mb-2"> <h6 class="card-title mb-0"><?= htmlspecialchars($client['name']) ?></h6> <span class="days-badge badge bg-<?= $badge_class ?>"> <?= $client['days_since_payment'] ?> يوم </span> </div> <div class="mb-2"> <small class="text-muted">الهاتف:</small> <a href="tel:<?= htmlspecialchars($client['phone']) ?>" class="text-decoration-none"> <?= htmlspecialchars($client['phone']) ?> </a> </div> <?php if ($client['address']): ?> <div class="mb-2"> <small class="text-muted">العنوان:</small> <div class="small"><?= htmlspecialchars($client['address']) ?></div> </div> <?php endif; ?> <div class="row text-center mt-3"> <div class="col-4"> <small class="text-muted">المديونية</small> <div class="fw-bold text-danger"><?= formatCurrency($client['balance']) ?></div> </div> <div class="col-4"> <small class="text-muted">الفواتير</small> <div class="fw-bold"><?= $client['total_invoices'] ?></div> </div> <div class="col-4"> <small class="text-muted">آخر دفعة</small> <div class="small"> <?php if ($client['last_payment_date'] === '1970-01-01'): ?> <span class="text-muted">لا يوجد</span> <?php else: ?> <?= date('Y-m-d', strtotime($client['last_payment_date'])) ?> <?php endif; ?> </div> </div> </div> <div class="mt-3 d-flex gap-2"> <a href="/clients/history.php?id=<?= $client['id'] ?>" class="btn btn-sm btn-outline-info flex-grow-1"> <i class="fas fa-history me-1"></i>التاريخ </a> <a href="https://wa.me/<?= str_replace('+', '', $client['phone']) ?>?text=<?= urlencode("مرحباً، نود تذكيركم بوجود مديونية قدرها " . formatCurrency($client['balance']) . " على حسابكم لدى حسابات عربية بن فريش. نرجو التواصل معنا لترتيب السداد. شكراً لتعاونكم.") ?>" target="_blank" class="btn btn-sm btn-success"> <i class="fab fa-whatsapp"></i> </a> </div> </div> </div> </div> <?php endforeach; ?> </div> <?php endif; ?> </div> </div> </div> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script> </body> </html>
Save Changes
Cancel / Back
Close ×
Server Info
Hostname: premium320.web-hosting.com
Server IP: 66.29.153.54
PHP Version: 8.2.29
Server Software: LiteSpeed
System: Linux premium320.web-hosting.com 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
HDD Total: 97.87 GB
HDD Free: 76.87 GB
Domains on IP: N/A (Requires external lookup)
System Features
Safe Mode:
Off
disable_functions:
None
allow_url_fopen:
On
allow_url_include:
Off
magic_quotes_gpc:
Off
register_globals:
Off
open_basedir:
None
cURL:
Enabled
ZipArchive:
Enabled
MySQLi:
Enabled
PDO:
Enabled
wget:
Yes
curl (cmd):
Yes
perl:
Yes
python:
Yes (py3)
gcc:
Yes
pkexec:
No
git:
Yes
User Info
Username: aoneqssk
User ID (UID): 1285
Group ID (GID): 1290
Script Owner UID: 1285
Current Dir Owner: 1285