- New "Pending Client Edits" screen under Checker Inbox & Tasks: server-driven pagination,
date range + Today/Yesterday/All presets, status filter (Pending/Approved/Rejected), search —
mirrors ChequebookRequestsComponent's architecture.
- Compare dialog diffs the maker's proposed values against a point-in-time "before" snapshot
(client-edit-diff.util.ts) captured when the edit page was opened, so only genuinely changed
fields show — works correctly for Pending, Approved, and Rejected edits alike, since it no
longer depends on comparing against the live (possibly already-updated) client record.
- edit-client.component.ts: General tab save now submits for approval instead of applying
immediately, shows a pending-approval banner, and blocks a second submission while one's
outstanding.
- error-handler.interceptor.ts: added the new /clients/{id}/edit/pending check to the existing
"expected 403/404, don't alert" allowlist (same pattern already used for client images/KYC).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
88 lines
1.6 KiB
SCSS
88 lines
1.6 KiB
SCSS
/**
|
|
* Copyright since 2025 Mifos Initiative
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*/
|
|
|
|
$border: #e2e8f0;
|
|
$text-muted: #64748b;
|
|
|
|
.cecd-client-link {
|
|
color: #1e40af;
|
|
text-decoration: none;
|
|
|
|
&:hover {
|
|
text-decoration: underline;
|
|
}
|
|
}
|
|
|
|
.cecd-content {
|
|
min-width: 420px;
|
|
max-width: 70vw;
|
|
// Explicit scroll behavior rather than relying only on Material's default dialog-content
|
|
// sizing — with many changed fields this keeps the dialog itself a fixed height (Close button
|
|
// always visible) and scrolls just the table.
|
|
max-height: 60vh;
|
|
overflow-y: auto;
|
|
}
|
|
|
|
.cecd-table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
font-size: 12.5px;
|
|
|
|
th,
|
|
td {
|
|
text-align: left;
|
|
padding: 8px 10px;
|
|
border-bottom: 1px solid $border;
|
|
}
|
|
|
|
th {
|
|
color: $text-muted;
|
|
font-weight: 600;
|
|
// Stays visible while scrolling through a long list of changed fields.
|
|
position: sticky;
|
|
top: 0;
|
|
background: #fff;
|
|
z-index: 1;
|
|
}
|
|
}
|
|
|
|
.cecd-label {
|
|
font-weight: 600;
|
|
color: #0d1b2a;
|
|
}
|
|
|
|
.cecd-current {
|
|
color: #b91c1c;
|
|
text-decoration: line-through;
|
|
text-decoration-color: #fca5a5;
|
|
}
|
|
|
|
.cecd-proposed {
|
|
color: #15803d;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.cecd-empty {
|
|
color: $text-muted;
|
|
font-size: 12.5px;
|
|
text-align: center;
|
|
padding: 16px 10px;
|
|
}
|
|
|
|
.cecd-resolution-note {
|
|
margin-top: 14px;
|
|
font-size: 12.5px;
|
|
color: #166534;
|
|
}
|
|
|
|
.cecd-reject-reason {
|
|
margin-top: 14px;
|
|
font-size: 12.5px;
|
|
color: #b91c1c;
|
|
}
|