mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-26 12:41:04 +00:00
fix(portal): accept a business licence the server already holds
A resumed onboarding asked for the per-role business licence again and refused to submit until it was uploaded a second time, however many were already on file. `getInfo` never populates `companyProfiles[].licenseFiles`, and the wizard validates against exactly that — so every profile looked empty, while `markOnboardingComplete` would have accepted the application as it stood. Validation now reads `licenseProfiles[].uploaded` from the onboarding requirements: the server's own verdict, already fetched by the step, and the same source the API enforces on submit. Reachable today by anyone who resumes onboarding after a licence upload, and by every company that switches back to eTrade registration — which is where the e2e suite hit it.
This commit is contained in:
@@ -492,6 +492,15 @@ export default function OnboardingWizardDialog({
|
||||
licenseFiles,
|
||||
onLicenseChange: setLicenseFiles,
|
||||
uploadedDocumentKeys,
|
||||
// What the server says is already on file, per operational profile. The
|
||||
// wizard's own `roleProfiles` cannot say: getInfo leaves `licenseFiles`
|
||||
// empty, so a resumed wizard asked for a licence it had already been given
|
||||
// and refused to submit until it was uploaded a second time.
|
||||
uploadedLicenceProfileIds: (
|
||||
requirementsQuery.data?.licenseProfiles ?? []
|
||||
)
|
||||
.filter((p) => p.uploaded)
|
||||
.map((p) => p.profileId),
|
||||
onUploadDocuments: handleUploadDocuments,
|
||||
// The company's single identity verification, and whose it is. Fayda is
|
||||
// mandatory for an Ethiopian company; a foreign one may instead type a
|
||||
|
||||
@@ -61,6 +61,7 @@ export default function CompanyProfileForm({
|
||||
onLicenseChange,
|
||||
submitError,
|
||||
uploadedDocumentKeys,
|
||||
uploadedLicenceProfileIds,
|
||||
onUploadDocuments,
|
||||
identity: rawIdentity,
|
||||
onIdentityChange,
|
||||
@@ -96,6 +97,16 @@ export default function CompanyProfileForm({
|
||||
submitError?: string | null;
|
||||
/** fileKeys whose company document is already uploaded server-side (resume). */
|
||||
uploadedDocumentKeys?: string[];
|
||||
/**
|
||||
* Profile ids whose business licence the server already holds.
|
||||
*
|
||||
* `roleProfiles.existingFiles` cannot answer this on a resumed wizard:
|
||||
* `getInfo` does not populate `licenseFiles`, so every profile looks empty
|
||||
* however many licences are on file. Taken from the onboarding requirements,
|
||||
* which is the server's own verdict and what `markOnboardingComplete`
|
||||
* enforces.
|
||||
*/
|
||||
uploadedLicenceProfileIds?: string[];
|
||||
/**
|
||||
* Auto-upload the currently-selected company documents (the Documents step's
|
||||
* "Continue" action). Resolves to an error message string on failure so the
|
||||
@@ -688,7 +699,9 @@ export default function CompanyProfileForm({
|
||||
if (cooperative) return errs;
|
||||
for (const p of roleProfiles ?? []) {
|
||||
const hasNew = (licenseFiles?.[p.id]?.length ?? 0) > 0;
|
||||
const hasExisting = p.existingFiles.length > 0;
|
||||
const hasExisting =
|
||||
p.existingFiles.length > 0 ||
|
||||
(uploadedLicenceProfileIds ?? []).includes(p.id);
|
||||
if (!hasNew && !hasExisting) {
|
||||
errs[p.id] = "Business license is required";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user