Files
root 38644b32ae
Deploy to Shared Hosting / Shared hosting deploy (push) Failing after 48s
Tests / PHPUnit (push) Failing after 1m19s
fix invoice and enrollment fees
2026-08-27 18:34:36 -04:00

171 lines
7.1 KiB
PHP

<?= $this->extend('layout/main_layout') ?>
<?= $this->section('styles') ?>
<style>
@media (max-width: 575.98px) {
.parent-report-cards-table {
border: 0;
}
.parent-report-cards-table thead {
display: none;
}
.parent-report-cards-table tbody,
.parent-report-cards-table tr,
.parent-report-cards-table td {
display: block;
width: 100%;
}
.parent-report-cards-table tr {
border: 1px solid #dee2e6;
border-radius: 8px;
margin-bottom: .85rem;
overflow: hidden;
}
.parent-report-cards-table td {
align-items: flex-start;
border-bottom: 1px solid #eef1f3;
display: flex;
gap: .75rem;
justify-content: space-between;
padding: .75rem;
text-align: right;
}
.parent-report-cards-table td:last-child {
border-bottom: 0;
}
.parent-report-cards-table td::before {
color: #6c757d;
content: attr(data-label);
flex: 0 0 38%;
font-size: .8rem;
font-weight: 700;
text-align: left;
}
.parent-report-cards-table td > * {
max-width: 62%;
}
.parent-report-cards-table td[data-label="Action"] {
display: block;
text-align: left !important;
}
.parent-report-cards-table td[data-label="Action"]::before {
display: block;
margin-bottom: .5rem;
}
.parent-report-cards-table td[data-label="Action"] > * {
max-width: 100%;
}
.parent-report-cards-table td[data-label="Action"] form {
align-items: stretch !important;
display: flex !important;
flex-direction: column;
margin-left: 0 !important;
margin-top: .5rem;
width: 100%;
}
}
</style>
<?= $this->endSection() ?>
<?= $this->section('content') ?>
<?php
$isEditable = (bool) ($isEditable ?? true);
$disabledAttr = $isEditable ? '' : ' disabled';
$reportRows = $reportRows ?? [];
?>
<div class="container my-5">
<div class="d-flex flex-wrap align-items-center justify-content-between gap-2 mb-3">
<div>
<h3 class="text-success mb-1">Report Cards</h3>
<div class="text-muted small">
<?= esc($schoolYear ?: 'N/A') ?>
</div>
</div>
</div>
<?php if (session()->getFlashdata('error')): ?>
<div class="alert alert-danger"><?= esc(session()->getFlashdata('error')) ?></div>
<?php endif; ?>
<?php if (session()->getFlashdata('success')): ?>
<div class="alert alert-success"><?= esc(session()->getFlashdata('success')) ?></div>
<?php endif; ?>
<?php if (! $isEditable): ?>
<div class="alert alert-info">
You are viewing <?= esc($schoolYear ?: 'a closed school year') ?>. Report card signatures are read-only for closed years.
</div>
<?php endif; ?>
<?php if (empty($reportRows)): ?>
<div class="alert alert-info">No students available for report cards.</div>
<?php else: ?>
<div class="table-responsive">
<table class="table table-striped table-bordered align-middle parent-report-cards-table">
<thead class="table-light">
<tr>
<th>Student</th>
<th>Class Section</th>
<th>Semester</th>
<th>Viewed</th>
<th>Signature</th>
<th class="text-end">Action</th>
</tr>
</thead>
<tbody>
<?php foreach ($reportRows as $reportRow): ?>
<?php
$student = $reportRow['student'] ?? [];
$sid = (int) ($student['id'] ?? 0);
$rowSemester = (string) ($reportRow['semester'] ?? '');
$rowKey = (string) ($reportRow['key'] ?? ($sid . '|' . $rowSemester));
$ack = $ackMap[$rowKey] ?? null;
$viewedAt = $ack['viewed_at'] ?? '';
$signedAt = $ack['signed_at'] ?? '';
$signedName = $ack['signed_name'] ?? '';
$hasReport = !empty(($reportAvailableMap ?? [])[$rowKey]);
?>
<tr>
<td data-label="Student"><?= esc(trim(($student['firstname'] ?? '') . ' ' . ($student['lastname'] ?? ''))) ?></td>
<td data-label="Class Section"><?= esc($student['class_section_name'] ?? 'N/A') ?></td>
<td data-label="Semester"><?= esc($rowSemester) ?></td>
<td data-label="Viewed"><?= $viewedAt ? esc(local_datetime($viewedAt, 'm-d-Y H:i')) : 'Not viewed' ?></td>
<td data-label="Signature">
<?php if ($signedAt): ?>
<?= esc($signedName ?: 'Signed') ?><br>
<small class="text-muted"><?= esc(local_datetime($signedAt, 'm-d-Y H:i')) ?></small>
<?php else: ?>
<span class="text-muted">Not signed</span>
<?php endif; ?>
</td>
<td class="text-end" data-label="Action">
<?php if ($hasReport): ?>
<a class="btn btn-sm btn-outline-primary" target="_blank" href="<?= site_url('parent/report-cards/view/' . $sid) . '?' . http_build_query(['semester' => $rowSemester]) ?>">View Report</a>
<?php else: ?>
<button class="btn btn-sm btn-outline-secondary" type="button" disabled>No report available</button>
<?php endif; ?>
<?php if ($hasReport && ! $signedAt): ?>
<form class="d-inline-flex align-items-center gap-2 ms-2" method="post" action="<?= base_url('parent/report-cards/sign/' . $sid) ?>">
<?= csrf_field() ?>
<input type="hidden" name="semester" value="<?= esc($rowSemester) ?>">
<input type="text" name="signed_name" class="form-control form-control-sm" placeholder="Full name" required<?= $disabledAttr ?>>
<button class="btn btn-sm btn-success" type="submit"<?= $disabledAttr ?>>Sign</button>
</form>
<?php endif; ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<?php endif; ?>
</div>
<?= $this->endSection() ?>