@@ -20,12 +20,20 @@ import RelatedEnquiriesSection from '@/components/form/section/RelatedEnquiriesS
2020import SubmissionStateSection from ' @/components/form/section/SubmissionStateSection.vue' ;
2121import { Button , Message , useConfirm , useToast } from ' @/lib/primevue' ;
2222import { atsService , generalProjectService , mapService , userService } from ' @/services' ;
23- import { useAppStore , useProjectStore } from ' @/store' ;
23+ import { useAppStore , useFormStore , useProjectStore } from ' @/store' ;
2424import { ATS_ENQUIRY_TYPE_CODE_PROJECT_INTAKE_SUFFIX , ATS_MANAGING_REGION } from ' @/utils/constants/projectCommon' ;
2525import { ATSCreateTypes , BasicResponse , GroupName , Initiative } from ' @/utils/enums/application' ;
26- import { ActivityContactRole , ApplicationStatus } from ' @/utils/enums/projectCommon' ;
26+ import {
27+ ActivityContactRole ,
28+ ApplicationStatus ,
29+ Area ,
30+ BusinessArea ,
31+ FormState ,
32+ FormType ,
33+ Region
34+ } from ' @/utils/enums/projectCommon' ;
2735import { formatDate } from ' @/utils/formatters' ;
28- import { omit , scrollToFirstError , setEmptyStringsToNull , toTitleCase } from ' @/utils/utils' ;
36+ import { scrollToFirstError , setEmptyStringsToNull , toTitleCase } from ' @/utils/utils' ;
2937
3038import type { Ref } from ' vue' ;
3139import type {
@@ -34,7 +42,8 @@ import type {
3442 ATSEnquiryResource ,
3543 Contact ,
3644 DeepPartial ,
37- GeneralProject
45+ GeneralProject ,
46+ User
3847} from ' @/types' ;
3948import type { FormSchemaType } from ' @/validators/general/projectFormNavigatorSchema' ;
4049
@@ -154,7 +163,7 @@ async function handleAtsCreate(values: GenericObject) {
154163}
155164
156165async function initializeFormValues(project : GeneralProject ): Promise <DeepPartial <FormSchemaType >> {
157- let assigneeOptions = [];
166+ let assigneeOptions: User [] = [];
158167 if (project .assignedUserId )
159168 assigneeOptions = (await userService .searchUsers ({ userId: [project .assignedUserId ] })).data ;
160169
@@ -186,7 +195,10 @@ async function initializeFormValues(project: GeneralProject): Promise<DeepPartia
186195 companyProjectName: {
187196 companyIdRegistered: project .companyIdRegistered ,
188197 companyNameRegistered: project .companyNameRegistered ,
189- projectName: project .projectName
198+ projectName: project .projectName ,
199+ projectNumber: project .projectNumber ,
200+ activityType: project .activityType ,
201+ isRegisteredInBc: project .isRegisteredInBc ? BasicResponse .YES : BasicResponse .NO
190202 },
191203
192204 // Additional Info
@@ -202,14 +214,17 @@ async function initializeFormValues(project: GeneralProject): Promise<DeepPartia
202214 submissionState: {
203215 queuePriority: project .queuePriority ,
204216 submissionType: project .submissionType ,
205- assignedUser: assigneeOptions [0 ] ?? null ,
206- applicationStatus: project .applicationStatus
217+ assignedUser: assigneeOptions [0 ]?.fullName ?? null ,
218+ applicationStatus: project .applicationStatus ,
219+ region: String (project .region ),
220+ area: String (project .area )
207221 },
208222
209223 // ATS link
210224 atsInfo: {
211225 atsClientId: project .atsClientId ,
212- atsEnquiryId: project .atsEnquiryId
226+ atsEnquiryId: project .atsEnquiryId ,
227+ businessArea: String (project .businessArea )
213228 },
214229
215230 relatedEnquiries: { csv: project .relatedEnquiries },
@@ -237,7 +252,6 @@ function onCancel() {
237252}
238253
239254function onInvalidSubmit(e : GenericObject ) {
240- console .log (e );
241255 const errors = Object .keys (e .errors );
242256
243257 if (errors .includes (' contact.firstName' )) {
@@ -262,40 +276,56 @@ function onReOpen() {
262276
263277const onSubmit = async (formValues : GenericObject ) => {
264278 try {
265- const values: FormSchemaType = formValues as FormSchemaType ;
279+ // vee-validate doesn't get transformed data from yup so
280+ // manually run the form values through it here
281+ const values: FormSchemaType = projectFormNavigatorSchema .cast (formValues );
266282
267283 await handleAtsCreate (values );
268284
269- console .log (values );
270-
271- // Generate final submission object
272- const payload: GeneralProject = {
273- ... project ,
274-
275- assignedUserId: values .submissionState .assignedUser ?.userId ?? undefined ,
276- applicationStatus: values .submissionState .applicationStatus ,
277-
278- companyIdRegistered: values .companyProjectName .companyIdRegistered ,
279- companyNameRegistered: values .companyProjectName .companyNameRegistered ,
280- queuePriority: values .submissionState .queuePriority ,
281- submissionType: values .submissionState .submissionType ,
285+ // Generate final payload
286+ // TODO: Create a type using Pick instead of Partial?
287+ const payload: Partial <GeneralProject > = {
288+ // Company and Project Information
282289 projectName: values .companyProjectName .projectName ,
283- projectDescription: values .projectDescription .description ,
284- astNotes: values .astNotes .notes ,
285- atsClientId: values .atsInfo .atsClientId ?? null ,
286- atsEnquiryId: values .atsInfo .atsEnquiryId ?? null ,
287- aaiUpdated: values .projectAreasUpdated .aaiUpdated ,
288- projectNumber: values .companyProjectName .projectNumber , // need to add this
289- // projectLocation: string; // was ist das
290- projectLocationDescription: values .locationDescription .description ,
290+ companyNameRegistered: values .companyProjectName .companyNameRegistered ,
291+ companyIdRegistered: values .companyProjectName .companyIdRegistered ,
292+ activityType: values .companyProjectName .activityType ! , // Req for General but the type doesnt know until runtime
293+ isRegisteredInBc: values .companyProjectName .isRegisteredInBc === BasicResponse .YES ,
294+
295+ // Location
291296 locality: values .location .locality ,
292297 province: values .location .province ,
293298 locationPids: values .location .locationPids ,
294299 latitude: values .location .latitude ,
295300 longitude: values .location .longitude ,
296301 streetAddress: values .location .streetAddress ,
297302 geomarkUrl: values .location .geomarkUrl ,
298- naturalDisaster: values .location .naturalDisaster === BasicResponse .YES
303+ naturalDisaster: values .location .naturalDisaster === BasicResponse .YES ,
304+
305+ // Additional Location Information
306+ projectLocationDescription: values .locationDescription .description ,
307+
308+ // Additional Project Information
309+ projectDescription: values .projectDescription .description ,
310+
311+ // AST Notes
312+ astNotes: values .astNotes .notes ,
313+
314+ // Submission State
315+ assignedUserId: values .submissionState .assignedUser
316+ ? (values .submissionState .assignedUser as User ).userId
317+ : undefined ,
318+ region: values .submissionState .region as Region ,
319+ area: values .submissionState .area as Area ,
320+ applicationStatus: values .submissionState .applicationStatus ,
321+ submissionType: values .submissionState .submissionType ,
322+ queuePriority: values .submissionState .queuePriority ,
323+
324+ // ATS
325+ businessArea: values .atsInfo .businessArea as BusinessArea ,
326+
327+ // Updates
328+ aaiUpdated: values .projectAreasUpdated .aaiUpdated
299329 };
300330
301331 // Update project
@@ -307,9 +337,7 @@ const onSubmit = async (formValues: GenericObject) => {
307337
308338 // Reinitialize the form
309339 formRef .value ?.resetForm ({
310- values: {
311- ... initializeFormValues (result .data )
312- }
340+ values: await initializeFormValues (result .data )
313341 });
314342
315343 toast .success (t (' i.common.form.savedMessage' ));
@@ -346,6 +374,8 @@ watch(primaryContact, (newContact, oldContact) => {
346374});
347375
348376onBeforeMount (async () => {
377+ useFormStore ().setFormType (FormType .NAVIGATOR );
378+ useFormStore ().setFormState (FormState .UNLOCKED );
349379 locationPidsAuto .value = (await mapService .getPIDs (project .generalProjectId )).data ;
350380
351381 // Default form values
0 commit comments