Convert client acceptance form to digital workflow summary

This commit is contained in:
A R R R Associates
2026-07-07 09:59:17 +05:30
parent 1b5fec270b
commit cd355d6fc5
@@ -147,69 +147,66 @@
<input name="country" value="{{ form_data.country or (row.country if is_edit else 'India') }}" class="mt-1 w-full rounded-xl border border-slate-300 px-4 py-2 text-sm"> <input name="country" value="{{ form_data.country or (row.country if is_edit else 'India') }}" class="mt-1 w-full rounded-xl border border-slate-300 px-4 py-2 text-sm">
</div> </div>
<div class="md:col-span-2 rounded-2xl border border-amber-200 bg-amber-50 p-4"> {% set acc_status = form_data.acceptance_status or (row.acceptance_status if is_edit else 'pending_review') %}
{% set acc_required = form_data.acceptance_required if form_data.acceptance_required is defined else (row.acceptance_required if is_edit else true) %}
{% set ind_done = form_data.independence_check_completed if form_data.independence_check_completed is defined else (row.independence_check_completed if is_edit else false) %}
{% set conflict_done = form_data.conflict_check_completed if form_data.conflict_check_completed is defined else (row.conflict_check_completed if is_edit else false) %}
{% set kyc_done = form_data.kyc_completed if form_data.kyc_completed is defined else (row.kyc_completed if is_edit else false) %}
{% set el_required = form_data.engagement_letter_required if form_data.engagement_letter_required is defined else (row.engagement_letter_required if is_edit else true) %}
{% set el_received = form_data.engagement_letter_received if form_data.engagement_letter_received is defined else (row.engagement_letter_received if is_edit else false) %}
<input type="hidden" name="acceptance_status" value="{{ acc_status }}">
<input type="hidden" name="acceptance_required" value="{{ '1' if acc_required else '0' }}">
<input type="hidden" name="independence_check_completed" value="{{ '1' if ind_done else '0' }}">
<input type="hidden" name="conflict_check_completed" value="{{ '1' if conflict_done else '0' }}">
<input type="hidden" name="kyc_completed" value="{{ '1' if kyc_done else '0' }}">
<input type="hidden" name="engagement_letter_required" value="{{ '1' if el_required else '0' }}">
<input type="hidden" name="engagement_letter_received" value="{{ '1' if el_received else '0' }}">
<input type="hidden" name="acceptance_review_notes" value="{{ form_data.acceptance_review_notes or (row.acceptance_review_notes if is_edit else '') }}">
<input type="hidden" name="acceptance_rejection_reason" value="{{ form_data.acceptance_rejection_reason or (row.acceptance_rejection_reason if is_edit else '') }}">
<div class="md:col-span-2 rounded-2xl border border-sky-200 bg-sky-50 p-4">
<div class="flex items-start justify-between gap-3"> <div class="flex items-start justify-between gap-3">
<div> <div>
<h4 class="text-sm font-semibold text-amber-950">Client Acceptance / Continuance Controls</h4> <h4 class="text-sm font-semibold text-sky-950">Digital Client Acceptance Workflow</h4>
<p class="mt-1 text-xs text-amber-800">Used for AQMM and peer review evidence. High/Critical risk clients cannot be activated until acceptance is approved.</p> <p class="mt-1 text-xs text-sky-800">
Independence, conflict, KYC and engagement letter controls are completed from the client detail workflow after the client is saved.
Manual ticking is intentionally disabled on this form to preserve proper AQMM and peer review evidence.
</p>
</div> </div>
{% set acc_status = form_data.acceptance_status or (row.acceptance_status if is_edit else 'pending_review') %}
<span class="rounded-full px-3 py-1 text-xs font-semibold {% if acc_status == 'approved' %}bg-emerald-100 text-emerald-700{% elif acc_status == 'rejected' %}bg-rose-100 text-rose-700{% else %}bg-amber-100 text-amber-800{% endif %}">{{ acc_status.replace('_',' ').title() }}</span> <span class="rounded-full px-3 py-1 text-xs font-semibold {% if acc_status == 'approved' %}bg-emerald-100 text-emerald-700{% elif acc_status == 'rejected' %}bg-rose-100 text-rose-700{% else %}bg-amber-100 text-amber-800{% endif %}">{{ acc_status.replace('_',' ').title() }}</span>
</div> </div>
<div class="mt-4 grid gap-4 md:grid-cols-2"> <div class="mt-4 grid gap-3 md:grid-cols-2 text-sm text-slate-700">
<div> <div class="rounded-xl bg-white/80 px-3 py-2 border border-sky-100">
<label class="block text-sm font-medium text-slate-700">Acceptance Status</label> <div class="text-xs font-semibold uppercase tracking-wide text-slate-500">Independence</div>
<select name="acceptance_status" class="mt-1 w-full rounded-xl border border-slate-300 px-4 py-2 text-sm"> <div class="mt-1">{{ 'Completed' if ind_done else 'Declaration workflow pending' }}</div>
{% for opt in client_acceptance_statuses %}
<option value="{{ opt }}" {% if (form_data.acceptance_status or (row.acceptance_status if is_edit else 'pending_review')) == opt %}selected{% endif %}>{{ opt.replace('_',' ').title() }}</option>
{% endfor %}
</select>
<p class="mt-1 text-xs text-slate-500">Formal approval can also be done from the client detail page.</p>
</div> </div>
<div class="rounded-xl bg-white/80 px-3 py-2 border border-sky-100">
<div class="flex items-end"> <div class="text-xs font-semibold uppercase tracking-wide text-slate-500">Conflict Check</div>
<label class="flex items-center gap-2 text-sm text-slate-700"> <div class="mt-1">{{ 'Completed' if conflict_done else 'Declaration workflow pending' }}</div>
<input type="checkbox" name="acceptance_required" value="1" {% if form_data.acceptance_required is not defined or form_data.acceptance_required or (row.acceptance_required if is_edit else true) %}checked{% endif %}>
Client acceptance / continuance review required
</label>
</div> </div>
<div class="rounded-xl bg-white/80 px-3 py-2 border border-sky-100">
<label class="flex items-center gap-2 text-sm text-slate-700"> <div class="text-xs font-semibold uppercase tracking-wide text-slate-500">KYC</div>
<input type="checkbox" name="independence_check_completed" value="1" {% if form_data.independence_check_completed or (row.independence_check_completed if is_edit else false) %}checked{% endif %}> <div class="mt-1">{{ 'Verified from Permanent Documents' if kyc_done else 'Permanent document verification pending' }}</div>
Independence check completed
</label>
<label class="flex items-center gap-2 text-sm text-slate-700">
<input type="checkbox" name="conflict_check_completed" value="1" {% if form_data.conflict_check_completed or (row.conflict_check_completed if is_edit else false) %}checked{% endif %}>
Conflict check completed
</label>
<label class="flex items-center gap-2 text-sm text-slate-700">
<input type="checkbox" name="kyc_completed" value="1" {% if form_data.kyc_completed or (row.kyc_completed if is_edit else false) %}checked{% endif %}>
KYC completed / verified
</label>
<label class="flex items-center gap-2 text-sm text-slate-700">
<input type="checkbox" name="engagement_letter_required" value="1" {% if form_data.engagement_letter_required is not defined or form_data.engagement_letter_required or (row.engagement_letter_required if is_edit else true) %}checked{% endif %}>
Engagement letter required
</label>
<label class="flex items-center gap-2 text-sm text-slate-700">
<input type="checkbox" name="engagement_letter_received" value="1" {% if form_data.engagement_letter_received or (row.engagement_letter_received if is_edit else false) %}checked{% endif %}>
Engagement letter received / accepted
</label>
<div class="md:col-span-2">
<label class="block text-sm font-medium text-slate-700">Acceptance Review Notes</label>
<textarea name="acceptance_review_notes" rows="3" class="mt-1 w-full rounded-xl border border-slate-300 px-4 py-2 text-sm">{{ form_data.acceptance_review_notes or (row.acceptance_review_notes if is_edit else '') }}</textarea>
</div> </div>
<div class="rounded-xl bg-white/80 px-3 py-2 border border-sky-100">
<div class="md:col-span-2"> <div class="text-xs font-semibold uppercase tracking-wide text-slate-500">Engagement Letter</div>
<label class="block text-sm font-medium text-slate-700">Rejection Reason / Remediation Notes</label> <div class="mt-1">
<textarea name="acceptance_rejection_reason" rows="2" class="mt-1 w-full rounded-xl border border-slate-300 px-4 py-2 text-sm">{{ form_data.acceptance_rejection_reason or (row.acceptance_rejection_reason if is_edit else '') }}</textarea> {% if not el_required %}Not required{% elif el_received %}Accepted / received{% else %}Digital OTP or manual signed upload pending{% endif %}
</div>
</div> </div>
</div> </div>
{% if is_edit %}
<p class="mt-3 text-xs text-slate-600">
Open the client detail page to request declarations, verify KYC from permanent documents, draft engagement letter, send it to client, and approve acceptance.
</p>
{% else %}
<p class="mt-3 text-xs text-slate-600">
Save the client first. The digital acceptance workflow will be available from the client detail page.
</p>
{% endif %}
</div> </div>
<div class="md:col-span-2"> <div class="md:col-span-2">