Skip to content

Commit e5deb6b

Browse files
authored
Merge pull request #395 from icefoganalytics/test
More WUP Updates
2 parents 2482de7 + 182bff2 commit e5deb6b

File tree

16 files changed

+492
-64
lines changed

16 files changed

+492
-64
lines changed

db/2025_updates.sql

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,10 @@ ALTER TABLE sfa.status ADD funding_application_type_id INT NULL REFERENCES sfa.f
7272
INSERT INTO sfa.status (funding_application_type_id, description, online_description, is_active, sort_order)
7373
VALUES(2, 'Approved', 'Approved', 1, 1),
7474
(2, 'Completed', 'Completed', 1, 2),
75-
(2, 'Incomplete', 'Incomplete', 1, 3)
75+
(2, 'Incomplete', 'Incomplete', 1, 3),
76+
(2, 'Cancelled', 'Cancelled', 1, 4),
77+
(2, 'Qualified', 'Qualified', 1, 5),
78+
(2, 'Wait', 'Wait', 1, 6),
7679

7780

7881
ALTER TABLE sfa.status_reason ADD funding_application_type_id INT NULL REFERENCES sfa.funding_application_type(id)
@@ -227,3 +230,19 @@ WHERE NOT s.vendor_id IS NULL
227230

228231
INSERT INTO sfa.disbursement_type (description, is_active) VALUES ('Cheque - LMDA', 1), ('Cheque - WDA', 1)
229232

233+
234+
235+
CREATE TABLE sfa.registered_trade (
236+
id INT IDENTITY(1,1) PRIMARY KEY,
237+
name NVARCHAR(200) NOT NULL,
238+
is_active BIT NOT NULL DEFAULT 1
239+
)
240+
241+
242+
INSERT INTO sfa.status (funding_application_type_id, description, online_description, is_active, sort_order)
243+
VALUES (2, 'Cancelled', 'Cancelled', 1, 4),
244+
(2, 'Qualified', 'Qualified', 1, 5),
245+
(2, 'Wait', 'Wait', 1, 6)
246+
247+
INSERT INTO sfa.registered_trade (name) VALUES
248+
('Electrical'), ('Plumbing')

src/api/routes/admin/index.ts

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ import { parentContributionFormulaRouter } from "./parent-contribution-formula-r
8888
import { transportationRouter } from "./transportation-router";
8989

9090
import fundingApplicationRoutes from "./funding-application";
91+
import { registeredTradeRouter } from "./registered-trade-router";
9192

9293
export const adminRouter = express.Router();
9394
//adminRouter.use("/", RequireServerAuth, RequireAdmin)
@@ -101,22 +102,22 @@ adminRouter.use("/funding-application", fundingApplicationRoutes);
101102
adminRouter.use("/funding-requests", pathFormatMiddleware);
102103
adminRouter.get(
103104
"/funding-requests/:fundingRequestId/letters/:letterSlug",
104-
routedTo(FundingRequestsLettersController, "getLetter")
105+
routedTo(FundingRequestsLettersController, "getLetter"),
105106
);
106107
adminRouter.get(
107108
"/funding-requests/:fundingRequestId/letters",
108-
routedTo(FundingRequestsLettersController, "listLetters")
109+
routedTo(FundingRequestsLettersController, "listLetters"),
109110
);
110111
adminRouter.post(
111112
"/funding-requests/:fundingRequestId/letters",
112-
routedTo(FundingRequestsLettersController, "createLetters")
113+
routedTo(FundingRequestsLettersController, "createLetters"),
113114
);
114115

115116
adminRouter.use("/funding-requests", fundingRequestRouter);
116117

117118
adminRouter.get(
118119
"/funding-request-letters",
119-
routedTo(FundingRequestLettersController, "listLetters")
120+
routedTo(FundingRequestLettersController, "listLetters"),
120121
);
121122
adminRouter.use("/assessment", assessmentRouter);
122123
adminRouter.use("/student", studentRouter);
@@ -132,6 +133,7 @@ adminRouter.use("/parental-relationship", parentalRelationshipRouter);
132133
adminRouter.use("/first-nation", firstNationRouter);
133134
adminRouter.use("/portal-status", portalStatusRouter);
134135
adminRouter.use("/sex", sexRouter);
136+
adminRouter.use("/registered-trade", registeredTradeRouter);
135137
adminRouter.use("/student-category", studentCategoryRouter);
136138
adminRouter.use("/institution-level", institutionLevelRouter);
137139
adminRouter.use("/age-distribution", ageDistributionRouter);
@@ -181,7 +183,7 @@ adminRouter.use("/csl-msfaa-receive", cslMsfaaReceiveRouter);
181183
adminRouter.use("/csl-entitlement-feedback", cslEntitlementFeedbackRouter);
182184
adminRouter.use(
183185
"/csl-certificate-audit-report",
184-
cslCertificateAuditReportRouter
186+
cslCertificateAuditReportRouter,
185187
);
186188
adminRouter.use("/csl-msfaa-send", cslMsfaaSendRouter);
187189
adminRouter.use("/csl-restricted-data", cslRestrictedData);
@@ -192,7 +194,7 @@ adminRouter.use("/standard-of-living", standardOfLivingRouter);
192194
adminRouter.use("/child-care-ceiling", childCareCeilingRouter);
193195
adminRouter.use(
194196
"/parent-contribution-formula",
195-
parentContributionFormulaRouter
197+
parentContributionFormulaRouter,
196198
);
197199
adminRouter.use("/transportation", transportationRouter);
198200

@@ -201,86 +203,86 @@ adminRouter.use("/overaward", overawardRouter);
201203
adminRouter.use("/reporting", pathFormatMiddleware);
202204
adminRouter.use(
203205
"/reporting/fundingStatus/:years",
204-
routedTo(ReportingController, "runFundingStatusReport")
206+
routedTo(ReportingController, "runFundingStatusReport"),
205207
);
206208
adminRouter.use(
207209
"/reporting/staYukonUniversity/:academic_year_id",
208-
routedTo(ReportingController, "runSTAYukonUniversityReport")
210+
routedTo(ReportingController, "runSTAYukonUniversityReport"),
209211
);
210212
adminRouter.use(
211213
"/reporting/scholarshipQualified/:academic_year_id",
212-
routedTo(ReportingController, "runScholarshipReport")
214+
routedTo(ReportingController, "runScholarshipReport"),
213215
);
214216
adminRouter.use(
215217
"/reporting/nars2022",
216-
routedTo(ReportingController, "runNars2022FTReport")
218+
routedTo(ReportingController, "runNars2022FTReport"),
217219
);
218220
adminRouter.use(
219221
"/reporting/nars2022pt",
220-
routedTo(ReportingController, "runNars2022PTReport")
222+
routedTo(ReportingController, "runNars2022PTReport"),
221223
);
222224
adminRouter.use(
223225
"/reporting/nars2022dis/:academic_year_id",
224-
routedTo(ReportingController, "runNars2022DisabilityReport")
226+
routedTo(ReportingController, "runNars2022DisabilityReport"),
225227
);
226228
adminRouter.use(
227229
"/reporting/nars2022disrcl/:academic_year_id",
228-
routedTo(ReportingController, "runNars2022DisabilityRCLReport")
230+
routedTo(ReportingController, "runNars2022DisabilityRCLReport"),
229231
);
230232

231233
adminRouter.use(
232234
"/reporting/nars2023",
233-
routedTo(ReportingController, "runNars2023FTReport")
235+
routedTo(ReportingController, "runNars2023FTReport"),
234236
);
235237
adminRouter.use(
236238
"/reporting/nars2023pt",
237-
routedTo(ReportingController, "runNars2023PTReport")
239+
routedTo(ReportingController, "runNars2023PTReport"),
238240
);
239241
adminRouter.use(
240242
"/reporting/nars2023dis",
241-
routedTo(ReportingController, "runNars2023DisabilityReport")
243+
routedTo(ReportingController, "runNars2023DisabilityReport"),
242244
);
243245
adminRouter.use(
244246
"/reporting/nars2023disrcl",
245-
routedTo(ReportingController, "runNars2023DisabilityRCLReport")
247+
routedTo(ReportingController, "runNars2023DisabilityRCLReport"),
246248
);
247249

248250
adminRouter.use(
249251
"/reporting/nars2024",
250-
routedTo(ReportingController, "runNars2024FTReport")
252+
routedTo(ReportingController, "runNars2024FTReport"),
251253
);
252254
adminRouter.use(
253255
"/reporting/nars2024pt",
254-
routedTo(ReportingController, "runNars2024PTReport")
256+
routedTo(ReportingController, "runNars2024PTReport"),
255257
);
256258
adminRouter.use(
257259
"/reporting/nars2024dis",
258-
routedTo(ReportingController, "runNars2024DisabilityReport")
260+
routedTo(ReportingController, "runNars2024DisabilityReport"),
259261
);
260262
adminRouter.use(
261263
"/reporting/nars2024disrcl",
262-
routedTo(ReportingController, "runNars2024DisabilityRCLReport")
264+
routedTo(ReportingController, "runNars2024DisabilityRCLReport"),
263265
);
264266

265267
adminRouter.use(
266268
"/reporting/step/:academic_year_id",
267-
routedTo(ReportingController, "runStepReport")
269+
routedTo(ReportingController, "runStepReport"),
268270
);
269271
adminRouter.use(
270272
"/reporting/approvedFunding/:academic_year_id",
271-
routedTo(ReportingController, "runApprovedFundingReport")
273+
routedTo(ReportingController, "runApprovedFundingReport"),
272274
);
273275
adminRouter.use(
274276
"/reporting/t4a/:tax_year",
275-
routedTo(ReportingController, "runT4AReport")
277+
routedTo(ReportingController, "runT4AReport"),
276278
);
277279
adminRouter.use(
278280
"/reporting/vendor-update",
279-
routedTo(ReportingController, "runVendorUpdateReport")
281+
routedTo(ReportingController, "runVendorUpdateReport"),
280282
);
281283
adminRouter.use(
282284
"/reporting/wup-report/:academic_year_id",
283-
routedTo(ReportingController, "runWUPReport")
285+
routedTo(ReportingController, "runWUPReport"),
284286
);
285287

286288
adminRouter.use("/csg-threshold", csgThresholdRouter);
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import express, { Request, Response } from "express";
2+
import knex from "knex";
3+
import { DB_CONFIG } from "@/config";
4+
5+
const db = knex(DB_CONFIG);
6+
7+
export const registeredTradeRouter = express.Router();
8+
9+
registeredTradeRouter.get("/", async (req: Request, res: Response) => {
10+
const { activeOnly = false } = req.query;
11+
let results = await db("sfa.registered_trade").orderBy("name");
12+
13+
if (activeOnly === "true")
14+
return res.json({ data: results.filter((c) => c.is_active) });
15+
16+
res.json({ data: results });
17+
});
18+
19+
registeredTradeRouter.post("/", async (req: Request, res: Response) => {
20+
const { name, is_active } = req.body;
21+
22+
const verify = await db("sfa.registered_trade")
23+
.select("name")
24+
.where({ name: name });
25+
26+
if (verify?.length)
27+
return res.status(400).send({
28+
success: false,
29+
message: `"${name}" already exists`,
30+
});
31+
32+
await db("sfa.registered_trade").insert({ name, is_active });
33+
return res.status(201).json({ success: true });
34+
});
35+
36+
registeredTradeRouter.patch("/:id", async (req: Request, res: Response) => {
37+
const { id } = req.params;
38+
const { name, is_active } = req.body;
39+
40+
if (name) {
41+
const verify = await db("sfa.registered_trade").where({ name });
42+
43+
if (verify?.length)
44+
return res.status(400).send({
45+
success: false,
46+
message: `"${name}" already exists`,
47+
});
48+
}
49+
50+
await db("sfa.registered_trade").where({ id }).update(req.body);
51+
return res.status(201).json({ success: true });
52+
});
53+
54+
registeredTradeRouter.delete("/:id", async (req: Request, res: Response) => {
55+
const { id = null } = req.params;
56+
await db("sfa.registered_trade").where({ id: id }).delete();
57+
return res.status(201).json({ success: true });
58+
});

src/web/src/components/SelectedAppHeader.vue

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,13 @@ export default {
4848
},
4949
},
5050
methods: {
51-
...mapActions(["saveApplicationFlags"]),
51+
...mapActions(["saveApplicationFlags", "saveFundingApplicationFlags"]),
5252
saveFlags() {
53-
this.saveApplicationFlags(this.flags);
53+
54+
if (this.$route.path.includes("funding-application"))
55+
this.saveFundingApplicationFlags(this.flags);
56+
else
57+
this.saveApplicationFlags(this.flags);
5458
},
5559
},
5660
};

src/web/src/components/adminHome/SubRoutesSideBar.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ export default {
3636
},
3737
{ title: "Institution Search", path: "/administration/institution-search" },
3838
{ title: "Institution Level", path: "/administration/institution-level" },
39+
{ title: "Registered Trades", path: "/administration/registered-trade" },
3940
],
4041
application: [
4142
{ title: "Study Area", path: "/administration/study-area" },

src/web/src/components/application/assessments/views/WUP-Apprenticeship.vue

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -210,15 +210,11 @@ export default {
210210
this.applicationId = this.$route.params.id;
211211
this.fundingRequestId = this.$route.params.fundingRequestId;
212212
this.assessmentId = this.$route.params.assessmentId;
213-
store.dispatch("setAppSidebar", true);
214213
215214
let storeApp = store.getters.selectedApplication;
216215
if (this.applicationId != storeApp.HISTORY_DETAIL_ID) {
217216
await store.dispatch("loadFundingApplication", this.applicationId);
218217
}
219-
store.dispatch("setAppSidebar", true);
220-
221-
222218
this.loadStatus()
223219
this.loadReasons()
224220

src/web/src/components/application/wup-funding-requests/apprenticeship-training-support/ApprenticeshipTrainingForm.vue

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,9 @@
6161

6262
<v-row>
6363
<v-col cols="12" md="6">
64-
<v-select v-model="fundingRequest.json_data.registered_trade" :items="['In-class', 'Online']"
65-
label="Registered trade" dense outlined background-color="white" hide-details @change="saveItem" />
64+
<v-select v-model="fundingRequest.json_data.registered_trade" :items="registeredTrades" item-text="name"
65+
item-value="name" label="Registered trade" dense outlined background-color="white" hide-details
66+
@change="saveItem" />
6667

6768
</v-col>
6869
<v-col cols="12" md="6" class="d-flex">
@@ -143,11 +144,11 @@
143144
class="mt-0 mb-5" hide-details @change="saveItem" />
144145
<v-row class="mb-1">
145146
<v-col cols="12" md="3">
146-
<v-text-field :value="formatDate(fundingRequest.json_data.from_date)" label="From" dense outlined
147+
<v-text-field :value="formatDate(fundingRequest.json_data.classes_start_date)" label="From" dense outlined
147148
background-color="#ddd" append-icon="mdi-lock" hide-details readonly />
148149
</v-col>
149150
<v-col cols="12" md="3">
150-
<v-text-field :value="formatDate(fundingRequest.json_data.to_date)" label="To" dense outlined
151+
<v-text-field :value="formatDate(fundingRequest.json_data.classes_end_date)" label="To" dense outlined
151152
background-color="#ddd" append-icon="mdi-lock" hide-details readonly />
152153
</v-col>
153154
<v-col cols="12" md="3">
@@ -275,7 +276,7 @@ import { mapGetters } from "vuex";
275276
import store from "@/store";
276277
import axios from "axios";
277278
import moment from "moment";
278-
import { FUNDING_APPLICATION_URL, INSTITUTION_URL } from "@/urls";
279+
import { FUNDING_APPLICATION_URL, INSTITUTION_URL, REGISTERED_TRADE_URL } from "@/urls";
279280
import { weeksBetween } from "@/components/application/assessments/store/utils";
280281
281282
export default {
@@ -291,6 +292,7 @@ export default {
291292
hasFundingRequest: false,
292293
travelOptions: ["Flying", "Driving personal vehicle"],
293294
otherExpenseOptions: ["Living Allowance", "Program Material", "Disability Support", "Tutoring"],
295+
registeredTrades: [],
294296
295297
dateMenu1: false,
296298
dateMenu2: false,
@@ -314,15 +316,6 @@ export default {
314316
fundingRequest() {
315317
const myRequest = this.application?.funding_requests?.find((fr) => fr.request_type_id === 51);
316318
317-
if (myRequest && myRequest.json_data != null) {
318-
myRequest.json_data.from_date = this.application.classes_start_date;
319-
myRequest.json_data.to_date = this.application.classes_end_date;
320-
myRequest.json_data.weeks = weeksBetween(
321-
this.application.classes_start_date,
322-
this.application.classes_end_date
323-
);
324-
}
325-
326319
this.hasFundingRequest = !!myRequest;
327320
return myRequest;
328321
},
@@ -332,15 +325,18 @@ export default {
332325
},
333326
},
334327
watch: {
335-
/* "fundingRequest.json_data": {
328+
"fundingRequest.json_data": {
336329
deep: true,
337330
handler(newVal) {
338-
console.log("Funding request JSON data changed:", newVal);
331+
if (newVal && newVal.classes_start_date && newVal.classes_end_date) {
332+
newVal.weeks = weeksBetween(newVal.classes_start_date, newVal.classes_end_date);
333+
}
339334
},
340-
}, */
335+
},
341336
},
342337
async mounted() {
343338
await this.loadInstitutions();
339+
await this.loadRegisteredTrades();
344340
store.dispatch("setCountries");
345341
store.dispatch("setProvinces");
346342
store.dispatch("setCities");
@@ -374,6 +370,16 @@ export default {
374370
console.log(err);
375371
});
376372
},
373+
loadRegisteredTrades() {
374+
axios
375+
.get(`${REGISTERED_TRADE_URL}?activeOnly=true`)
376+
.then((resp) => {
377+
this.registeredTrades = resp.data.data
378+
})
379+
.catch((err) => {
380+
console.log(err);
381+
});
382+
},
377383
formatDate(input) {
378384
if (input) return moment.utc(input).format("YYYY-MM-DD");
379385
return "";

0 commit comments

Comments
 (0)