ih-black-lion
Version:
State handler for Arus projects
129 lines (114 loc) • 4.15 kB
JavaScript
import { toArray } from '../boilerplate';
const getAcademicSubPlan = subplans =>
subplans.map(subPlan => ({
SubPlan: subPlan.acadSubPlan,
SubPlanDescription: subPlan.descr,
}));
const getAcademicPlan = plans =>
plans.map(plan => ({
Plan: plan.acadPlan.acadPlan,
PlanDescription: plan.descr,
AcademicSubPlan: getAcademicSubPlan(toArray(plan.ucAcadSplans.ucAcadSplnVw)),
}));
const getAcademicProgram = (studentTerms) => {
const primaryProg = studentTerms[0].acadProgPrimary;
let programs = toArray(studentTerms).reduce((a, b) => [...a, ...b.ucAcadProgs.ucAcadProgVw], []);
if (programs.length === 0) {
programs = toArray(studentTerms[0].ucAcadProgs.ucAcadProgVw);
}
function fromCYYT(CYYT) {
const [thousands, tens, ones, month] = CYYT.split('');
const year = `${thousands}0${tens}${ones}`;
switch (month) {
case '1':
return `Spring Semester ${year}`;
case '5':
return `Summer Semester ${year}`;
case '8':
return `Fall Semester ${year}`;
default:
return '';
}
}
function CYYTtoDate(CYYT) {
const [thousands, tens, ones, month] = CYYT.split('');
const year = `${thousands}0${tens}${ones}`;
return new Date(`${month}/01/${year}`);
}
const newProgs = toArray(programs).map(program => ({
Program: program.acadProg,
Action: program.progAction,
ProgramDescription: program.descr,
EffectiveDate: program.effdt,
AdmitTerm: program.admitTerm,
BeginDate: program.termBeginDt,
CarNumber: program.stdntCarNbr,
Status: program.progStatus,
AcademicPlan: getAcademicPlan(toArray(program.ucAcadPlans.ucAcadPlnV)),
}));
const sortPrograms = (progs) => {
const futurePrograms = [];
let currentPrograms = [];
for (let i = 0; i < progs.length; i += 1) {
let isCurrent = true;
switch (progs[i].Action) {
case 'PLNC':
isCurrent = Date.parse(new Date(progs[i].EffectiveDate)) <= Date.now();
break;
case 'ACTV':
isCurrent = CYYTtoDate(progs[i].AdmitTerm) <= Date.now();
break;
case 'MATR':
isCurrent = CYYTtoDate(progs[i].AdmitTerm) <= Date.now();
break;
default:
isCurrent = Date.parse(new Date(progs[i].BeginDate)) <= Date.now();
}
if (isCurrent) {
currentPrograms.push(progs[i]);
} else {
futurePrograms.push({ ...progs[i], effectiveSemester: fromCYYT(progs[i].AdmitTerm) });
}
}
currentPrograms = currentPrograms.sort(a => (a.Program === primaryProg ? -1 : 1));
return { currentPrograms, futurePrograms };
};
const sortedPrograms = sortPrograms(newProgs);
sortedPrograms.currentPrograms = sortedPrograms.currentPrograms.filter(
program =>
program.Status === 'DC' ||
sortedPrograms.currentPrograms.findIndex(
prog =>
program.ProgramDescription === prog.ProgramDescription &&
program.CarNumber === prog.CarNumber &&
prog.Status === 'DC',
) === -1,
);
sortedPrograms.currentPrograms = sortedPrograms.currentPrograms.filter(
program => program.Status === 'AC' || Date.parse(new Date(program.EffectiveDate)) > Date.now(),
);
return sortedPrograms;
};
export default class AcademicProfile {
constructor(obj) {
const person = obj.ucStdntAcadProfileGetResp.msgdata.transaction.person;
const studentTerms = person.ucStdcartrms.ucStdcartrmVw;
const studentAdvisors = person.ucAdvisors.ucAdvisorVw;
this.StudentCareerTerm = toArray(studentTerms).map(term => ({
AcademicCareer: term.acadCareer,
AcadProgramPrimary: term.acadProgPrimary,
StudentTerm: term.strm,
CumGPA: term.cumGpa,
AcademicLoad: term.descrshort1,
AcademicLevel: term.descrshort2,
Units: term.totCumulative,
AcademicProgram: getAcademicProgram(toArray(term)),
}));
this.Advisors = toArray(studentAdvisors).map(advisor => ({
AdvisorRole: advisor.xlatlongname,
AdvisorEmplId: advisor.advisorId,
AdvisorName: advisor.nameDisplay,
AdvisorEmail: advisor.emailAddr,
}));
}
}