Commit Graph

315 Commits

Author SHA1 Message Date
mihretue
8438bc5122 Merge branch 'dev' of github.com:Tria-plc/emaui into fix/coc-exam-workflow-defects 2026-08-31 14:20:32 +03:00
mihretue
46f317a73f Merge remote-tracking branch 'origin/dev' into fix/coc-exam-workflow-defects
# Conflicts:
#	apps/portal/src/app/features/licensing/pages/MyApplicationsPage/index.tsx
#	libs/api/src/lib/features/licensing/licensing-api.ts
#	libs/api/src/lib/features/licensing/licensing.types.ts
2026-08-31 09:16:24 +00:00
estifanos
317a1532b1 feat: implement auto-filling of license and registration document slots from personal vault and add UI labels for vault-sourced files 2026-08-31 08:18:27 +00:00
Nati Nigussie
272a77dad5 Merge pull request #43 from Tria-plc/estif-branch-1
merge from documentVault
2026-08-31 10:23:56 +03:00
mihretue
6f4878d300 fix(exam): step the exam form, derive portal status, drop queue overrides
Four screens were telling the applicant things that were not true, and two
back-office actions were writing state nobody should be able to write by hand.

The exam form is a stepper. Basic Info and Settings each answer only for their
own fields, and a third step reviews the whole thing before anything is sent —
"Create Exam" exists on that step alone, so there is no path from an earlier
one into the API. Clicking it from Basic Info used to report the Settings
fields as missing: a correct error the user could not act on, since that step
had not been shown yet. The rules move to ./validation, which is what the
per-step check and the final whole-payload check both read, so the two cannot
drift apart. Back keeps everything entered — state lives in the component.

The portal derives the examination stage from the records rather than from the
application status alone. Registering, attendance and the sitting itself all
happen on the registration and the attempt, and the portal read none of them —
which is how an application still said "Awaiting Exam Date" after the back
office had already evaluated the paper. examStageFor() names what the records
add up to: eligible to register, registered, attendance confirmed, sitting,
under evaluation, passed, failed. Both the applications list and the
certificates page use it, and both poll the registrations they read it from,
because attendance is recorded by an invigilator while the candidate is
watching the screen.

EXAM_PAID is no longer a waiting state. Nobody assigns a date: the fee having
cleared is exactly what makes the candidate eligible to pick a published
sitting, so that row now offers Register rather than a disabled button.

Schedule Exam and Record Exam Outcome are gone from the COC queue — actions,
modals, RTK endpoints and strings. Their server endpoints are gone too, so
this is not a hidden button over a live route.
2026-08-31 07:14:59 +00:00
Nati
16ac650f5f feat(applications): add discard functionality for draft applications and update UI 2026-08-31 07:11:05 +00:00
Estifo77
dae24f48db Merge branch 'WorkflowChange' of https://github.com/Tria-plc/emaui into estif-branch-1 2026-08-31 09:19:35 +03:00
nati14575
a5c875f8f8 Refactor code structure for improved readability and maintainability 2026-08-29 12:56:47 +03:00
Nati
b8dc7274e6 feat(configuration): add BSID to NumberFormatScope and update related UI 2026-08-29 09:53:30 +00:00
Nati
760eee9155 Merge branch 'WorkflowChange' of github.com:Tria-plc/emaui into WorkflowChange 2026-08-29 06:52:20 +00:00
Nati
890aca44f4 feat(signature): add signature functionality for officers and seafarers
- Implemented MySignaturePad component for officers to draw and upload their signatures.
- Added signature API endpoints for managing officer signatures in the backoffice.
- Created SignaturePad component for seafarers to manage their specimen signatures.
- Updated ProfilePage to include signature tabs for both officers and seafarers.
- Added translations for signature-related terms in English and Amharic.
- Introduced RankTier options for seafarer registration.
- Added tests for canvas-point utility to ensure accurate pointer mapping on signature pad.
2026-08-29 06:52:14 +00:00
Estifo77
af3fad018a Merge branch 'WorkflowChange' of https://github.com/Tria-plc/emaui into estif-branch-1 2026-08-29 09:03:43 +03:00
fitse-yotor
fa217fc577 Merge origin/WorkflowChange into logestic_chnage
Resolves conflicts:
- LicenseReviewPage: dropped a duplicated schedule-issuance ActionIcon,
  keeping the Tooltip-wrapped one and adding scheduledPeriod (required
  by the scheduleIssuance mutation) to it.
- portal i18n (en.ts/am.ts): both sides added distinct keys under
  licensing.card (reportDamaged/reissueFailed vs status/statusReason) —
  kept both, additive.
- licensing.helpers.ts: kept sectionAppliesToKind (this branch) and
  switched to the centralized BASE_API_URL import from
  base-api/base-query-with-reauth (WorkflowChange), dropping the local
  duplicate constant.
2026-08-28 16:27:36 +03:00
fitse-yotor
a4fe5a7111 Merge branch into logestic_chnage, resolve licensing-api tag conflict
Kept both new cache tags (PickupOffice/PickupAppointment from this
branch, Department/Rank from origin) — additive, not conflicting.
2026-08-28 15:51:09 +03:00
fitse-yotor
687e3df3c2 feat: add pickup appointment scheduling and management features
- Introduced new pickup appointment functionalities in the licensing API, including scheduling, rescheduling, and managing pickup offices.
- Added UI components for the pickup desk, allowing officers to check in, issue documents, and manage no-show appointments.
- Implemented a new page for managing pickup offices with CRUD operations.
- Enhanced internationalization support for new pickup-related terms and messages.
- Updated licensing types to include new application kinds and issuance periods.
- Created a read-only panel for displaying scheduled pickup appointments in the licensing component.
2026-08-28 15:49:05 +03:00
Estifo77
1384885bc1 Merge branch 'WorkflowChange' of https://github.com/Tria-plc/emaui into estif-branch-1 2026-08-28 15:27:43 +03:00
Estifanos Terefe
72fc690d53 Merge branch 'estif-branch-1' into documentVault 2026-08-28 15:25:50 +03:00
Mihretu Endeshaw
bff1ae5375 Merge pull request #41 from Tria-plc/feature/fayda-auth-and-email-notifications
Feature/fayda auth and email notifications
2026-08-28 14:43:49 +03:00
nati14575
9841092ddc Merge branch 'WorkflowChange' of https://github.com/Tria-plc/emaui into WorkflowChange 2026-08-28 14:39:02 +03:00
nati14575
a66eef352c feat(i18n): add biometric-related translations and update navigation permissions 2026-08-28 14:38:56 +03:00
estifanos
32f5fb4590 feat: implement FilePreviewModal to support image, video, and audio previews alongside PDFs 2026-08-28 10:45:06 +00:00
estifanos
3368c9bd3f feat: implement XHR-based file upload with progress tracking to replace RTK-based mutations for personal documents 2026-08-28 10:42:04 +00:00
Estifo77
c53c1b8a45 Merge branch 'WorkflowChange' of https://github.com/Tria-plc/emaui into estif-branch-1 2026-08-28 12:47:46 +03:00
Estifo77
4dc1ee18b9 revert 2026-08-28 11:59:23 +03:00
estifanos
f255621672 feat: add support for global personal document requirements in applicant vaults 2026-08-28 08:54:10 +00:00
estifanos
627fcfbfde UI fixes 2026-08-28 08:18:19 +00:00
Nati
5006e4685b feat: add biometric enrollment and viewing capabilities with API integration 2026-08-28 08:15:39 +00:00
estifanos
c26528dad5 feat: implement DocumentVaultPage to display seafarer licenses, medical certificates, and official documents with PDF preview functionality. 2026-08-28 07:56:04 +00:00
estifanos
c1005cf927 refactor: replace dimmed text hint with an alert box and remove opacity styling on locked license cards 2026-08-28 07:40:58 +00:00
estifanos
7f69cb2cba feat: disable unavailable licenses in catalogue and add explanation with link to operations management 2026-08-28 07:38:47 +00:00
estifanos
82b316e90b feat: localize license status labels and display detailed status reasons in LicenseCard 2026-08-28 07:37:43 +00:00
estifanos
6d2c01ae73 feat: allow applicants to view declared personal licenses in the catalogue by expanding the filter to include non-logistics family types present in the user declaration 2026-08-28 07:32:31 +00:00
estifanos
51627f9918 feat: add inspection rescheduling workflow and unlock dependencies for flagged document sections 2026-08-28 06:46:06 +00:00
mihretue
c4e1f61691 Merge branch 'feature/fayda-auth-and-email-notifications' of github.com:Tria-plc/emaui into feature/fayda-auth-and-email-notifications 2026-08-27 17:08:20 +03:00
mihretue
7792128573 Merge branch 'dev' of github.com:Tria-plc/emaui into feature/fayda-auth-and-email-notifications 2026-08-27 17:07:31 +03:00
mihretue
22e4b84e23 Merge remote-tracking branch 'origin/dev' into feature/fayda-auth-and-email-notifications
# Conflicts:
#	apps/backoffice/src/app/features/user-management/UserManagementPage.tsx
2026-08-27 14:03:33 +00:00
mihretue
53edd90330 Merge remote-tracking branch 'origin/dev' into feature/exam-attempt-domain 2026-08-27 13:19:51 +00:00
mihretue
12ffa72cb2 fix(exam): gate Take Exam on confirmed attendance
The registrations table mirrored the server's old attendance deny-list —
ABSENT/WITHDRAWN/DISQUALIFIED — so the default REGISTERED fell through and
"Take exam" appeared before any invigilator had confirmed the candidate was
there. It is an allow-list now, PRESENT and LATE only, matching
ExamAttemptService.MAY_SIT.

A blocked candidate gets a reason rather than an empty cell: "Awaiting
attendance" with a tooltip while nobody has called the register, "Not sitting"
once attendance was taken and they are not. useExamAttempt does the same for
the direct-link path, and translates attendance_not_confirmed /
candidate_not_present instead of showing a raw error key on a Start button
that cannot work. The server refuses either way — this only makes the refusal
legible.

ScheduleExamModal no longer promises an admission number: scheduling makes a
sitting available, and the candidate registers for it themselves.
2026-08-27 13:10:46 +00:00
estifanos
e86375e761 refactor: update application locking logic to handle staff remarks and itemized rounds 2026-08-27 12:37:04 +00:00
Nati Nigussie
b163aa4d3c Merge branch 'WorkflowChange' into logestic_chnage 2026-08-27 11:23:14 +03:00
fitse-yotor
12e7927d01 feat(certificate-designer): add custom page size options and update related components 2026-08-27 10:53:11 +03:00
estifanos
f01c0ec31e feat: add INSPECTION_FAILED state, enforce inspection scheduling locks, and improve adjustment round UI for section locking and remark labeling 2026-08-27 07:36:07 +00:00
estifanos
4ec585f407 feat: include location and physical attributes in seafarer registration default answers 2026-08-27 06:47:44 +00:00
estifanos
3955dab014 adding bypass payment 2026-08-26 12:17:46 +00:00
estifanos
32ac18adc2 endorcement 2026-08-26 11:52:13 +00:00
Estifo77
08e9b73b8f Merge branch 'WorkflowChange' of https://github.com/Tria-plc/emaui into estif-branch-1 2026-08-26 13:27:12 +03:00
estifanos
b099870370 fix: prevent out-of-bounds wizard steps and remove duplicate FieldCondition property definition 2026-08-26 09:52:31 +00:00
estifanos
13c3e8974d feat: consolidate CoC and GOC endorsement workflows into a new ENDORSEMENT_SEAFARER type and add anyOf support to conditional form field logic. 2026-08-26 09:44:08 +00:00
Nati
207994df69 Implement nationality-based document requirements and add cancellation feature for seafarer registration 2026-08-26 09:14:45 +00:00
mihretue
c753009ed9 refactor(api): resolve the backend URL in one place
VITE_BASE_API_URL with a localhost:3001/api fallback was re-derived in six
files across libs/api, libs/auth, the portal and the backoffice — and a seventh
site (UserManagementPage) read the env raw with no fallback at all, handing the
IAM user-management app an undefined apiUrl whenever no .env was present.

BASE_API_URL in base-query-with-reauth.ts is now the single definition,
exported from @ema-platform/api; every other site imports it. Trims the env
value and treats blank as unset, matching how the backend reads its own keys.
2026-08-26 09:09:25 +00:00