Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 5 additions & 12 deletions client/requests.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@
$requests = array_values(array_filter(portalLoadProjectRequests(), function ($r) use ($username) {
return (string)($r['client_username'] ?? '') === $username;
}));
$proposals = portalLoadProposals();
$agreements = portalLoadProjectAgreements();

usort($requests, function ($a, $b) {
return strcmp((string)($b['created_at'] ?? ''), (string)($a['created_at'] ?? ''));
Expand All @@ -31,7 +29,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/png" href="../assets/images/RL-icon.png">
<title>My Project Requests | Client Portal | Runlevel Systems</title>
<title>My Projects | Client Portal | Runlevel Systems</title>
<link href="../assets/css/coreloop.css" rel="stylesheet">
<style>
.portal-wrap { padding: 30px 0 70px; }
Expand All @@ -52,7 +50,7 @@
<a href="/dashboard.php" style="color:#36f3ff;font-size:.84rem;">← Back to Dashboard</a>
<div class="portal-card" style="margin-top:10px;">
<div style="display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:12px;">
<h2 style="margin:0;color:#ffc600;font-size:1.1rem;">My Project Requests</h2>
<h2 style="margin:0;color:#ffc600;font-size:1.1rem;">My Projects</h2>
<a href="/estimate.php" class="btn">Submit New Project Request</a>
</div>

Expand All @@ -62,12 +60,9 @@
<?php foreach ($requests as $req): ?>
<?php
$rid = portalGetRequestDisplayId((array)$req);
$proposal = null;
$agreement = null;
foreach ($proposals as $p) { if ((string)($p['request_id'] ?? '') === $rid) { $proposal = $p; break; } }
foreach ($agreements as $a) { if ((string)($a['request_id'] ?? '') === $rid) { $agreement = $a; break; } }
$workspaceUrl = '/project.php?id=' . urlencode($rid);
?>
<div class="req-item">
<div class="req-item" style="cursor:pointer;" onclick="window.location='<?php echo pe($workspaceUrl); ?>'">
<div class="req-head">
<div>
<div class="req-id"><?php echo pe($rid); ?></div>
Expand All @@ -77,9 +72,7 @@
</div>
<div class="meta">Submitted <?php echo pe(date('M j, Y', strtotime((string)($req['created_at'] ?? 'now')))); ?></div>
<div class="links" style="margin-top:6px;">
<a href="/client/request.php?request_id=<?php echo urlencode($rid); ?>">View request detail</a>
<?php if ($proposal): ?><a href="/client/proposal.php?proposal_id=<?php echo urlencode((string)($proposal['proposal_id'] ?? '')); ?>">Linked proposal</a><?php endif; ?>
<?php if ($agreement): ?><a href="/client/agreement.php?agreement_id=<?php echo urlencode((string)($agreement['agreement_id'] ?? '')); ?>">Linked project agreement</a><?php endif; ?>
<a href="<?php echo pe($workspaceUrl); ?>" onclick="event.stopPropagation()">Open Project Workspace</a>
</div>
</div>
<?php endforeach; ?>
Expand Down
93 changes: 53 additions & 40 deletions dashboard.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,45 @@
$role = portalGetRole();
$displayName = $user['display_name'] ?? $user['username'] ?? 'User';

$requests = portalLoadProjectRequests();
$requests = portalLoadProjectRequests();
$proposals = portalLoadProposals();
$agreements = portalLoadProjectAgreements();

$newRequests = array_values(array_filter($requests, function ($r) {
return (string)($r['status'] ?? '') === 'new';
}));

$myUsername = (string)($user['username'] ?? '');
$myRequests = [];
$myProposals = [];

// ---- Admin/Staff project counts
$pendingRequests = 0;
$activeProjects = 0;
$completedProjects = 0;
$awaitingApproval = 0; // proposals sent, not yet accepted
$awaitingSignature = 0; // agreements sent, not yet signed

if (in_array($role, ['admin', 'staff'], true)) {
foreach ($requests as $r) {
$st = (string)($r['status'] ?? 'new');
if (in_array($st, ['new', 'reviewing', 'contacted', 'needs_info'], true)) {
$pendingRequests++;
} elseif (in_array($st, ['active', 'accepted'], true)) {
$activeProjects++;
} elseif (in_array($st, ['completed', 'closed'], true)) {
$completedProjects++;
}
}
foreach ($proposals as $p) {
if ((string)($p['status'] ?? '') === 'sent') {
$awaitingApproval++;
}
}
foreach ($agreements as $a) {
if ((string)($a['status'] ?? '') === 'sent') {
$awaitingSignature++;
}
}
}

// ---- Client data
$myRequests = [];
$myProposals = [];
$myAgreements = [];
if ($role === 'client') {
$myRequests = array_values(array_filter($requests, function ($r) use ($myUsername) {
Expand Down Expand Up @@ -93,9 +121,11 @@
<?php if ($role === 'admin'): ?>
<p class="portal-section-title">Admin Overview</p>
<div class="portal-card-grid">
<a href="/staff/estimate-requests.php" class="portal-dash-card"><div class="card-icon">📥</div><div class="card-label">Project Requests</div><div class="card-count"><?php echo count($newRequests); ?></div></a>
<a href="/staff/create-proposal.php" class="portal-dash-card"><div class="card-icon">📄</div><div class="card-label">Proposals</div><div class="card-count"><?php echo count($proposals); ?></div></a>
<a href="/staff/create-agreement.php" class="portal-dash-card"><div class="card-icon">📑</div><div class="card-label">Project Agreements</div><div class="card-count"><?php echo count($agreements); ?></div></a>
<a href="/staff/estimate-requests.php" class="portal-dash-card"><div class="card-icon">📋</div><div class="card-label">Active Projects</div><div class="card-count"><?php echo $activeProjects; ?></div></a>
<a href="/staff/estimate-requests.php" class="portal-dash-card"><div class="card-icon">📥</div><div class="card-label">Pending Requests</div><div class="card-count"><?php echo $pendingRequests; ?></div></a>
<a href="/staff/estimate-requests.php" class="portal-dash-card"><div class="card-icon">📄</div><div class="card-label">Awaiting Approval</div><div class="card-count"><?php echo $awaitingApproval; ?></div><div class="card-sub">Proposals sent</div></a>
<a href="/staff/estimate-requests.php" class="portal-dash-card"><div class="card-icon">📑</div><div class="card-label">Awaiting Signature</div><div class="card-count"><?php echo $awaitingSignature; ?></div><div class="card-sub">Agreements sent</div></a>
<a href="/staff/estimate-requests.php" class="portal-dash-card"><div class="card-icon">✅</div><div class="card-label">Completed Projects</div><div class="card-count"><?php echo $completedProjects; ?></div></a>
<a href="/staff/users.php" class="portal-dash-card"><div class="card-icon">👥</div><div class="card-label">Users</div><div class="card-count"><?php echo count(portalLoadUsers()); ?></div></a>
<a href="/payments.php" class="portal-dash-card"><div class="card-icon">💳</div><div class="card-label">Payments</div><div class="card-sub">Payment docs</div></a>
<a href="/staff/tools.php" class="portal-dash-card"><div class="card-icon">🛠️</div><div class="card-label">Runlevel Tools</div><div class="card-sub">Internal tools</div></a>
Expand All @@ -105,70 +135,53 @@
<?php elseif ($role === 'staff'): ?>
<p class="portal-section-title">Staff Overview</p>
<div class="portal-card-grid">
<a href="/staff/estimate-requests.php" class="portal-dash-card"><div class="card-icon">📥</div><div class="card-label">Project Requests</div><div class="card-count"><?php echo count($newRequests); ?></div></a>
<a href="/staff/create-proposal.php" class="portal-dash-card"><div class="card-icon">📄</div><div class="card-label">Proposals</div><div class="card-count"><?php echo count($proposals); ?></div></a>
<a href="/staff/create-agreement.php" class="portal-dash-card"><div class="card-icon">📑</div><div class="card-label">Project Agreements</div><div class="card-count"><?php echo count($agreements); ?></div></a>
<a href="/staff/estimate-requests.php" class="portal-dash-card"><div class="card-icon">📋</div><div class="card-label">Active Projects</div><div class="card-count"><?php echo $activeProjects; ?></div></a>
<a href="/staff/estimate-requests.php" class="portal-dash-card"><div class="card-icon">📥</div><div class="card-label">Pending Requests</div><div class="card-count"><?php echo $pendingRequests; ?></div></a>
<a href="/staff/estimate-requests.php" class="portal-dash-card"><div class="card-icon">📄</div><div class="card-label">Awaiting Approval</div><div class="card-count"><?php echo $awaitingApproval; ?></div><div class="card-sub">Proposals sent</div></a>
<a href="/staff/estimate-requests.php" class="portal-dash-card"><div class="card-icon">📑</div><div class="card-label">Awaiting Signature</div><div class="card-count"><?php echo $awaitingSignature; ?></div><div class="card-sub">Agreements sent</div></a>
<a href="/staff/estimate-requests.php" class="portal-dash-card"><div class="card-icon">✅</div><div class="card-label">Completed Projects</div><div class="card-count"><?php echo $completedProjects; ?></div></a>
<a href="/payments.php" class="portal-dash-card"><div class="card-icon">💳</div><div class="card-label">Payments</div><div class="card-sub">Payment docs</div></a>
<a href="/staff/tools.php" class="portal-dash-card"><div class="card-icon">🛠️</div><div class="card-label">Runlevel Tools</div><div class="card-sub">Internal tools</div></a>
</div>

<?php else: ?>
<p class="portal-section-title">My Dashboard</p>
<div class="portal-card-grid">
<a href="/client/requests.php" class="portal-dash-card"><div class="card-icon">📥</div><div class="card-label">My Project Requests</div><div class="card-count"><?php echo count($myRequests); ?></div></a>
<a href="/client/proposals.php" class="portal-dash-card"><div class="card-icon">📄</div><div class="card-label">My Proposals</div><div class="card-count"><?php echo count($myProposals); ?></div></a>
<a href="/client/contracts.php" class="portal-dash-card"><div class="card-icon">📑</div><div class="card-label">My Project Agreements</div><div class="card-count"><?php echo count($myAgreements); ?></div></a>
<a href="/client/requests.php" class="portal-dash-card"><div class="card-icon">📋</div><div class="card-label">My Projects</div><div class="card-count"><?php echo count($myRequests); ?></div></a>
<a href="/payments.php" class="portal-dash-card"><div class="card-icon">💳</div><div class="card-label">Payments</div><div class="card-sub">Payment info</div></a>
<a href="/design-debug-deploy.php" class="portal-dash-card"><div class="card-icon">🛠️</div><div class="card-label">Runlevel Tools</div><div class="card-sub">Resources</div></a>
<a href="/estimate.php" class="portal-dash-card"><div class="card-icon">➕</div><div class="card-label">Submit New Project Request</div><div class="card-sub">Start workflow</div></a>
</div>

<div class="panel">
<h3 style="margin:0 0 8px;color:#36f3ff;font-size:.9rem;text-transform:uppercase;">My Project Requests</h3>
<h3 style="margin:0 0 8px;color:#36f3ff;font-size:.9rem;text-transform:uppercase;">My Projects</h3>
<table>
<thead>
<tr>
<th>Request ID</th>
<th>Project ID</th>
<th>Project Type</th>
<th>Status</th>
<th>Submitted Date</th>
<th>Linked Proposal</th>
<th>Linked Project Agreement</th>
<th></th>
</tr>
</thead>
<tbody>
<?php if (empty($myRequests)): ?>
<tr><td colspan="6" style="color:#7a9ac0;">No project requests yet.</td></tr>
<tr><td colspan="5" style="color:#7a9ac0;">No projects yet.</td></tr>
<?php else: ?>
<?php foreach ($myRequests as $req): ?>
<?php
$rid = portalGetRequestDisplayId((array)$req);
$proposal = null;
$agreement = null;
foreach ($myProposals as $p) { if ((string)($p['request_id'] ?? '') === $rid) { $proposal = $p; break; } }
foreach ($myAgreements as $a) { if ((string)($a['request_id'] ?? '') === $rid) { $agreement = $a; break; } }
?>
<?php $rid = portalGetRequestDisplayId((array)$req); ?>
<tr>
<td class="mono"><a style="color:#ffc600;" href="/client/request.php?request_id=<?php echo urlencode($rid); ?>"><?php echo pe($rid); ?></a></td>
<td class="mono"><?php echo pe($rid); ?></td>
<td style="color:#a8bedc;"><?php echo pe($req['project_type'] ?? '—'); ?></td>
<td style="color:#a8bedc;"><?php echo pe(ucfirst((string)($req['status'] ?? 'new'))); ?></td>
<td style="color:#7a9ac0;"><?php echo pe(date('M j, Y', strtotime((string)($req['created_at'] ?? 'now')))); ?></td>
<td>
<?php if ($proposal): ?>
<a style="color:#36f3ff;" href="/client/proposal.php?proposal_id=<?php echo urlencode((string)($proposal['proposal_id'] ?? '')); ?>"><?php echo pe((string)($proposal['proposal_id'] ?? 'View')); ?></a>
<?php else: ?>—<?php endif; ?>
</td>
<td>
<?php if ($agreement): ?>
<a style="color:#36f3ff;" href="/client/agreement.php?agreement_id=<?php echo urlencode((string)($agreement['agreement_id'] ?? '')); ?>"><?php echo pe((string)($agreement['agreement_id'] ?? 'View')); ?></a>
<?php else: ?>—<?php endif; ?>
</td>
<td><a style="color:#36f3ff;" href="/project.php?id=<?php echo urlencode($rid); ?>">Open Project</a></td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
</tbody>
</table>
<p style="margin:10px 0 0;color:#5a7a9e;font-size:.75rem;">TODO: Add online acceptance/signature workflow later.</p>
</div>
<?php endif; ?>

Expand Down
Loading
Loading