diff --git a/sources/packages/backend/apps/api/src/route-controllers/cas-supplier/_tests_/cas-supplier.aest.controller.getCASSupplier.e2e-spec.ts b/sources/packages/backend/apps/api/src/route-controllers/cas-supplier/_tests_/cas-supplier.aest.controller.getCASSupplier.e2e-spec.ts index fe846fc86c..453e830fa5 100644 --- a/sources/packages/backend/apps/api/src/route-controllers/cas-supplier/_tests_/cas-supplier.aest.controller.getCASSupplier.e2e-spec.ts +++ b/sources/packages/backend/apps/api/src/route-controllers/cas-supplier/_tests_/cas-supplier.aest.controller.getCASSupplier.e2e-spec.ts @@ -23,14 +23,23 @@ describe("CASSupplierAESTController(e2e)-getCASSuppliers", () => { db = createE2EDataSources(dataSource); }); - it("Should get all the CAS suppliers for a student when CAS suppliers info is requested for a student.", async () => { + it("Should get all the CAS suppliers with and without error for a student when CAS suppliers info is requested for a student.", async () => { // Arrange const savedCASSupplier1 = await saveFakeCASSupplier(db); const student = savedCASSupplier1.student; const savedCASSupplier2 = await saveFakeCASSupplier( db, { student }, - { initialValues: { supplierStatus: SupplierStatus.VerifiedManually } }, + { + initialValues: { + supplierStatus: SupplierStatus.ManualIntervention, + status: "ACTIVE", + errors: [ + "[0034] SIN is already in use.", + "[9999] Duplicate Supplier , Reason: [0065]- Possible duplicate exists, please use online form", + ], + }, + }, ); const endpoint = `/aest/cas-supplier/student/${student.id}`; @@ -44,16 +53,24 @@ describe("CASSupplierAESTController(e2e)-getCASSuppliers", () => { .expect({ items: [ { + id: savedCASSupplier2.id, dateCreated: savedCASSupplier2.createdAt.toISOString(), + status: savedCASSupplier2.status, supplierNumber: savedCASSupplier2.supplierNumber, - supplierProtected: null, + supplierProtected: true, supplierStatus: savedCASSupplier2.supplierStatus, isValid: savedCASSupplier2.isValid, supplierSiteCode: savedCASSupplier2.supplierAddress.supplierSiteCode, + siteStatus: savedCASSupplier2.supplierAddress.status, + addressLine1: savedCASSupplier2.supplierAddress.addressLine1, + siteProtected: savedCASSupplier2.supplierAddress.siteProtected, + errors: savedCASSupplier2.errors, }, { + id: savedCASSupplier1.id, dateCreated: savedCASSupplier1.createdAt.toISOString(), + status: savedCASSupplier1.status, supplierNumber: savedCASSupplier1.supplierNumber, supplierProtected: savedCASSupplier1.supplierProtected, supplierStatus: savedCASSupplier1.supplierStatus, @@ -63,6 +80,7 @@ describe("CASSupplierAESTController(e2e)-getCASSuppliers", () => { siteStatus: savedCASSupplier1.supplierAddress.status, addressLine1: savedCASSupplier1.supplierAddress.addressLine1, siteProtected: savedCASSupplier1.supplierAddress.siteProtected, + errors: null, }, ], }); diff --git a/sources/packages/backend/apps/api/src/route-controllers/cas-supplier/cas-supplier.aest.controller.ts b/sources/packages/backend/apps/api/src/route-controllers/cas-supplier/cas-supplier.aest.controller.ts index 0f80cfe383..815de25bac 100644 --- a/sources/packages/backend/apps/api/src/route-controllers/cas-supplier/cas-supplier.aest.controller.ts +++ b/sources/packages/backend/apps/api/src/route-controllers/cas-supplier/cas-supplier.aest.controller.ts @@ -61,7 +61,9 @@ export class CASSupplierAESTController extends BaseController { studentId, ); const casSupplierInfoDTOList = casSuppliers.map((casSupplier) => ({ + id: casSupplier.id, dateCreated: casSupplier.createdAt, + status: casSupplier.status, supplierNumber: casSupplier.supplierNumber, supplierProtected: casSupplier.supplierProtected, supplierStatus: casSupplier.supplierStatus, @@ -70,6 +72,7 @@ export class CASSupplierAESTController extends BaseController { addressLine1: casSupplier.supplierAddress?.addressLine1, siteStatus: casSupplier.supplierAddress?.status, siteProtected: casSupplier.supplierAddress?.siteProtected, + errors: casSupplier?.errors, })); return { items: casSupplierInfoDTOList }; } diff --git a/sources/packages/backend/apps/api/src/route-controllers/cas-supplier/models/cas-supplier.dto.ts b/sources/packages/backend/apps/api/src/route-controllers/cas-supplier/models/cas-supplier.dto.ts index cbdf6c2a4b..87ab6cdd0d 100644 --- a/sources/packages/backend/apps/api/src/route-controllers/cas-supplier/models/cas-supplier.dto.ts +++ b/sources/packages/backend/apps/api/src/route-controllers/cas-supplier/models/cas-supplier.dto.ts @@ -6,7 +6,9 @@ export class CASSupplierInfoAPIOutDTO { } export class CASSupplierInfoItemAPIOutDTO { + id: number; dateCreated: Date; + status: string; supplierNumber?: string; supplierProtected?: boolean; supplierStatus: SupplierStatus; @@ -15,6 +17,7 @@ export class CASSupplierInfoItemAPIOutDTO { addressLine1?: string; siteStatus?: CASSupplierSiteStatus; siteProtected?: string; + errors?: string[]; } export class AddCASSupplierAPIInDTO { diff --git a/sources/packages/backend/apps/api/src/services/cas-supplier/cas-supplier.service.ts b/sources/packages/backend/apps/api/src/services/cas-supplier/cas-supplier.service.ts index fb6dbaac8d..0ace81353f 100644 --- a/sources/packages/backend/apps/api/src/services/cas-supplier/cas-supplier.service.ts +++ b/sources/packages/backend/apps/api/src/services/cas-supplier/cas-supplier.service.ts @@ -32,12 +32,15 @@ export class CASSupplierService { async getCASSuppliers(studentId: number): Promise { return this.casSupplierRepo.find({ select: { + id: true, createdAt: true, + status: true, supplierNumber: true, supplierProtected: true, supplierStatus: true, isValid: true, supplierAddress: true as unknown, + errors: true, }, where: { student: { id: studentId }, diff --git a/sources/packages/backend/libs/test-utils/src/factories/cas-supplier.ts b/sources/packages/backend/libs/test-utils/src/factories/cas-supplier.ts index e38f17352a..e874eb7819 100644 --- a/sources/packages/backend/libs/test-utils/src/factories/cas-supplier.ts +++ b/sources/packages/backend/libs/test-utils/src/factories/cas-supplier.ts @@ -63,6 +63,8 @@ export function createFakeCASSupplier( casSupplier.supplierStatus = options?.initialValues?.supplierStatus ?? SupplierStatus.PendingSupplierVerification; + casSupplier.status = options?.initialValues?.status; + casSupplier.errors = options?.initialValues?.errors; // Verified manually has a minimum of values populated. if ( diff --git a/sources/packages/web/src/services/http/dto/CASSupplier.dto.ts b/sources/packages/web/src/services/http/dto/CASSupplier.dto.ts index 921ebdbf32..f7077efa32 100644 --- a/sources/packages/web/src/services/http/dto/CASSupplier.dto.ts +++ b/sources/packages/web/src/services/http/dto/CASSupplier.dto.ts @@ -3,7 +3,9 @@ export interface CASSupplierInfoAPIOutDTO { } export interface CASSupplierInfoItemAPIOutDTO { + id: number; dateCreated: Date; + status: string; supplierNumber?: string; supplierProtected?: boolean; supplierStatus: SupplierStatus; @@ -12,6 +14,7 @@ export interface CASSupplierInfoItemAPIOutDTO { addressLine1?: string; siteStatus?: CASSupplierSiteStatus; siteProtected?: string; + errors?: string[]; } export type CASSupplierSiteStatus = "ACTIVE" | "INACTIVE"; diff --git a/sources/packages/web/src/types/contracts/DataTableContract.ts b/sources/packages/web/src/types/contracts/DataTableContract.ts index f265b0ac77..f5e709b528 100644 --- a/sources/packages/web/src/types/contracts/DataTableContract.ts +++ b/sources/packages/web/src/types/contracts/DataTableContract.ts @@ -320,45 +320,55 @@ export const CASSupplierInformationHeaders = [ key: "dateCreated", }, { - title: "Supplier number", + title: "Status", sortable: false, - key: "supplierNumber", + key: "supplierStatus", }, { - title: "Supplier protected", + title: "Supplier valid", sortable: false, - key: "supplierProtected", + key: "isValid", }, { - title: "Supplier status", + title: "Supplier", sortable: false, - key: "supplierStatus", + key: "supplierNumber", }, { - title: "Supplier valid", + title: "Supplier active?", sortable: false, - key: "isValid", + key: "status", }, { - title: "Site code", + title: "Site", sortable: false, key: "supplierSiteCode", }, { - title: "Address line 1", + title: "Site active?", sortable: false, - key: "addressLine1", + key: "siteStatus", }, { - title: "Site status", + title: "Supplier protected", sortable: false, - key: "siteStatus", + key: "supplierProtected", }, { title: "Site protected", sortable: false, key: "siteProtected", }, + { + title: "Address line", + sortable: false, + key: "addressLine1", + }, + { + title: "Details", + sortable: false, + key: "data-table-expand", + }, ]; /** diff --git a/sources/packages/web/src/views/aest/student/CASSupplierInformation.vue b/sources/packages/web/src/views/aest/student/CASSupplierInformation.vue index be52009403..77060910a7 100644 --- a/sources/packages/web/src/views/aest/student/CASSupplierInformation.vue +++ b/sources/packages/web/src/views/aest/student/CASSupplierInformation.vue @@ -30,10 +30,14 @@ :items="casSupplierInfo.items" :items-per-page="DEFAULT_PAGE_LIMIT" :items-per-page-options="ITEMS_PER_PAGE" + show-expand > + @@ -58,6 +62,36 @@ + + @@ -100,8 +134,8 @@ export default defineComponent({ }, }, setup(props) { - const { dateOnlyLongString, emptyStringFiller } = useFormatters(); - const { booleanToYesNo } = useFormatters(); + const { dateOnlyLongString, emptyStringFiller, booleanToYesNo } = + useFormatters(); const showModal = ref(false); const casSupplierInfo = ref({} as CASSupplierInfoAPIOutDTO); const addCASSupplierModal = ref(