Skip to content

Commit

Permalink
Merge pull request #105 from bcgov/effectivedate
Browse files Browse the repository at this point in the history
added school fixes
  • Loading branch information
shaunlumbcgov authored Nov 17, 2023
2 parents 4de8270 + 85161e9 commit ec5f343
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 14 deletions.
31 changes: 28 additions & 3 deletions backend/src/components/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,18 @@ function addDistrictLabels(jsonData, districtList) {
return data.filter(item => !valuesToExclude.includes(item[field]));
}


function filterByPubliclyAvailableCodes(jsonArray, fieldName, publicCodes) {
// Filter the array based on the condition
const filteredArray = jsonArray.filter(item => {
// Extract the field value (or use an empty string if the field is not present)
const fieldValue = item[fieldName] || '';

// Check if the fieldValue exactly matches any string from the stringsToRemove array
return publicCodes.includes(fieldValue);
});

return filteredArray;
}
function filterByField(jsonArray, fieldName, stringsToRemove) {
// Filter the array based on the condition
const filteredArray = jsonArray.filter(item => {
Expand All @@ -257,7 +268,9 @@ function addDistrictLabels(jsonData, districtList) {

return data.filter(item => {
const expiryDate = item.expiryDate ? new Date(item.expiryDate) : null;
return expiryDate === null || currentDate < expiryDate;
const effectiveDate = item.effectiveDate ? new Date(item.effectiveDate) : null;

return expiryDate === null && currentDate > effectiveDate || currentDate < expiryDate && currentDate > effectiveDate ;
});
}
function getArrayofNonPubliclyAvailableCodes(codes, field) {
Expand All @@ -272,6 +285,18 @@ function addDistrictLabels(jsonData, districtList) {

return nonPubliclyAvailableCodes;
}
function getArrayofPubliclyAvailableCodes(codes, field) {
if (!Array.isArray(codes)) {
throw new Error('Invalid input. Expecting an array of objects.');
}

// Filter out objects where "publiclyAvailable" is true
const publiclyAvailableCodes = codes
.filter(item => item && item.publiclyAvailable === true)
.map(item => item[field]);

return publiclyAvailableCodes;
}
function createSchoolCache(schoolData, schoolGrades) {
// Preload convertedGrades with schoolGrades.schoolGradeCode and set the value to "N"

Expand Down Expand Up @@ -363,4 +388,4 @@ function addDistrictLabels(jsonData, districtList) {
return school;
});
}
module.exports = {filterByExpiryDate, filterRemoveByField, sortByProperty,getArrayofNonPubliclyAvailableCodes,filterByField,appendMailingAddressDetailsAndRemoveAddresses,sortJSONBySchoolCode,sortJSONByDistrictNumber,normalizeJsonObject, removeFieldsByCriteria, createList, isSafeFilePath,isAllowedSchoolCategory, addDistrictLabels, districtNumberSort, createSchoolCache, formatGrades, rearrangeAndRelabelObjectProperties};
module.exports = {filterByPubliclyAvailableCodes, getArrayofPubliclyAvailableCodes, filterByExpiryDate, filterRemoveByField, sortByProperty,getArrayofNonPubliclyAvailableCodes,filterByField,appendMailingAddressDetailsAndRemoveAddresses,sortJSONBySchoolCode,sortJSONByDistrictNumber,normalizeJsonObject, removeFieldsByCriteria, createList, isSafeFilePath,isAllowedSchoolCategory, addDistrictLabels, districtNumberSort, createSchoolCache, formatGrades, rearrangeAndRelabelObjectProperties};
11 changes: 3 additions & 8 deletions backend/src/routes/district-router.js
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ async function getAllDistrictContacts(req, res) {
"server:instituteAPIURL"
)}/institute/district/contact/paginated?pageSize=4000&searchCriteriaList=${encodedParams}`
try {

const districtContactResponse = await axios.get(url, {
headers: { Authorization: `Bearer ${req.accessToken}` },
});
Expand Down Expand Up @@ -169,17 +170,13 @@ async function getAllDistrictContacts(req, res) {
});
let sortedData = sortJSONByDistrictNumber(filteredData)
const validDistricts = filterRemoveByField(sortedData,"District Number", ["098","102","103"])



res.json(validDistricts);
//res.json(districtContactsReorderedAndRelabeled );
} catch (e) {
log.error("getData Error", e.response ? e.response.status : e.message);
}
}


async function getAllDistrictMailing(req, res) {
const districtList = await listCache.get("districtlist")
const contactTypeCodes= await listCache.get("codesList")
Expand All @@ -201,9 +198,7 @@ async function getAllDistrictMailing(req, res) {
{ property: "physicalCountryCode", label: "Courier Country" },
{ property: "website", label: "Web Address" },
{ property: "phoneNumber", label: "Phone" },
{ property: "faxNumber", label: "Fax" },


{ property: "faxNumber", label: "Fax" },
];

const params = [
Expand Down Expand Up @@ -291,7 +286,7 @@ async function getDistrict(req, res) {
const districtSchoolsUrl = `${config.get(
"server:instituteAPIURL"
)}/institute/school/paginated?pageNumber=0&pageSize=500&searchCriteriaList=${encodedParams}`;

try {
const districtDataResponse = await axios.get(url, {
headers: { Authorization: `Bearer ${req.accessToken}` },
Expand Down
49 changes: 48 additions & 1 deletion backend/src/routes/institute-router.js
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,56 @@ async function getContactTypeCodes(req, res) {
}
}
async function getOffshoreSchoolList(req, res) {

let currentDate = new Date().toISOString().substring(0, 19)
const params = [
{
condition: 'AND',
searchCriteriaList: [
{
key: 'schoolCategoryCode',
operation: 'eq',
value: "OFFSHORE",
valueType: 'STRING',
condition: 'AND'
},
{
key: 'openedDate',
operation: 'lte',
value: currentDate,
valueType: 'DATE_TIME',
condition: 'AND'
}
]
},
{
condition: 'AND',
searchCriteriaList: [
{
key: 'closedDate',
operation: 'eq',
value: null,
valueType: 'STRING',
condition: 'OR'
},
{
key: 'closedDate',
operation: 'gte',
value: currentDate,
valueType: 'DATE_TIME',
condition: 'OR'
}
]
}
];

const jsonString = JSON.stringify(params)
const encodedParams = encodeURIComponent(jsonString)



if (await !listCache.has("offshoreschoollist")) {
const url = `${config.get("server:instituteAPIURL")}/institute/school/paginated?pageSize=100&pageNumber=0&searchCriteriaList=%5B%7B%22condition%22%3Anull%2C%22searchCriteriaList%22%3A%5B%7B%22key%22%3A%22schoolCategoryCode%22%2C%22operation%22%3A%22eq%22%2C%22value%22%3A%22OFFSHORE%22%2C%22valueType%22%3A%22STRING%22%2C%22condition%22%3A%22AND%22%7D%2C%7B%22key%22%3A%22openedDate%22%2C%22operation%22%3A%22lte%22%2C%22value%22%3A%222023-09-27T17%3A57%3A46%22%2C%22valueType%22%3A%22DATE_TIME%22%2C%22condition%22%3A%22AND%22%7D%2C%7B%22key%22%3A%22closedDate%22%2C%22operation%22%3A%22eq%22%2C%22value%22%3Anull%2C%22valueType%22%3A%22STRING%22%2C%22condition%22%3A%22AND%22%7D%5D%7D%5D`; // Update the URL according to your API endpoint
const url = `${config.get('server:instituteAPIURL')}/institute/school/paginated?pageSize=1000&pageNumber=0&searchCriteriaList=${encodedParams}`;
axios
.get(url, { headers: { Authorization: `Bearer ${req.accessToken}` } })
.then((response) => {
Expand Down
6 changes: 4 additions & 2 deletions backend/src/routes/school-router.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ const log = require("../components/logger");
const config = require("../config/index");
const axios = require("axios");

const { filterByField, getArrayofNonPubliclyAvailableCodes, normalizeJsonObject, createSchoolCache, addDistrictLabels, formatGrades, sortJSONBySchoolCode, rearrangeAndRelabelObjectProperties} = require("../components/utils");
const { filterByField, filterByExpiryDate, getArrayofPubliclyAvailableCodes, normalizeJsonObject, createSchoolCache, addDistrictLabels, formatGrades, sortJSONBySchoolCode, rearrangeAndRelabelObjectProperties, filterByPubliclyAvailableCodes} = require("../components/utils");
const { checkToken } = require("../components/auth");
const { schoolCache, listCache, codeCache } = require("../components/cache");

Expand All @@ -27,7 +27,9 @@ async function getSchool(req, res) {
const schoolData = response.data;
const includedFields = ['schoolContactTypeCode', 'label', 'description'];
schoolData.contacts = normalizeJsonObject(schoolData.contacts, contactTypeCodes.codesList.schoolContactTypeCodes, 'schoolContactTypeCode', (info) => info.publiclyAvailable === true, includedFields);
schoolData.contacts = filterByField(schoolData.contacts, "schoolContactTypeCode", ["STUDREGIS"])

schoolData.contacts = filterByPubliclyAvailableCodes(schoolData.contacts, "schoolContactTypeCode", getArrayofPubliclyAvailableCodes(contactTypeCodes.codesList.schoolContactTypeCodes, "schoolContactTypeCode"))
schoolData.contacts = filterByExpiryDate(schoolData.contacts)
const formattedGrades = formatGrades(schoolData.grades, schoolGrades);
const schoolWithFormattedGrades = { ...schoolData, ...formattedGrades };
res.json(schoolWithFormattedGrades);
Expand Down

0 comments on commit ec5f343

Please sign in to comment.