UNPKG

ih-black-lion

Version:

State handler for Arus projects

129 lines (114 loc) 4.15 kB
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, })); } }