All files / models Schedule.js

2.74% Statements 2/73
0% Branches 0/32
0% Functions 0/9
3.23% Lines 2/62
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111      19x                             19x                                                                                                                                                                                        
import { isArrayLike as isArray, mapObj, mapObjIndexed } from 'ramda';
import moment from 'moment';
 
const formatDays = (wkDays) => {
  let days = '';
 
  if (wkDays.mon === 'Y') days += 'M';
  if (wkDays.tues === 'Y') days += 'T';
  if (wkDays.wed === 'Y') days += 'W';
  if (wkDays.thurs === 'Y') days += 'R';
  if (wkDays.fri === 'Y') days += 'F';
  if (wkDays.sat === 'Y') days += 'S';
  if (wkDays.sun === 'Y') days += 'U';
  if (days === '') return 'TBD';
 
  return `${days}`;
};
 
const formatTimes = (wkDays) => {
  const start = moment(wkDays.meetingTimeStart, 'hh:mm:ss.SSS').isValid() ?
    moment(wkDays.meetingTimeStart, 'hh:mm:ss.SSS').format('hh:mma') : 'TBD';
  const end = moment(wkDays.meetingTimeEnd, 'hh:mm:ss.SSS').isValid() ?
    moment(wkDays.meetingTimeEnd, 'hh:mm:ss.SSS').format('hh:mma') : 'TBD';
 
  return `${start} - ${end}`;
};
 
export class Session {
  constructor(obj, offerNumber) {
    const classOfferNumber = offerNumber;
    const meeting = obj.classMeetingPatterns.classMeetingPattern;
 
    this.classNumber = obj.classNbr;
    this.classSection = obj.classSection;
    this.component = obj.ssrComponentLovdescr;
    this.days = formatDays(meeting);
    this.times = formatTimes(meeting);
    this.room = meeting.ssrMtgLocLong;
    this.instructor = meeting.ssrInstrLong;
    this.startDate = moment(obj.startDt, 'YYYY-MM-DD').format('MM/DD/YYYY');
    this.endDate = moment(obj.endDt, 'YYYY-MM-DD').format('MM/DD/YYYY');
    this.bookLink = `https://www.bkstr.com/webapp/wcs/stores/servlet/booklookServlet?bookstore_id-1=0${classOfferNumber}&term_id-1=${obj.strm}&crn-1=${obj.classNbr}`;
  }
}
 
export class Course {
  constructor(obj, mode) {
    mode = parseInt(mode);
 
    this.desc = obj.courseTitleLong;
    this.status = obj.enrollStatusDescr;
    this.units = obj.untTaken;
    this.gradeDesc = obj.gradeBasisDescrformal;
    this.grade = obj.crseGradeOff;
    this.course = `${obj.subject} ${obj.catalogNbr}`;
 
    let sessions = [];
    if(obj.enrlClassSections.enrlClassSection){
      if (isArray(obj.enrlClassSections.enrlClassSection)) {
        sessions = obj.enrlClassSections.enrlClassSection.map((item) => new Session(item, obj.crseOfferNbr));
      } else {
        sessions['0'] = new Session(obj.enrlClassSections.enrlClassSection, mode);
      }
    }
 
    this.sessions = sessions;
  }
}
 
export class Term {
  constructor(obj, mode) {
    mode = parseInt(mode);
 
    this.acadCareerDesc = obj.acadCareerLovdescr;
    this.curGpa = obj.curGpa;
    this.cumGpa = obj.cumGpa;
    this.termName = obj.strmLovdescr;
    this.institution = obj.institutionLovdescr;
    this.termBeginDate = obj.termBeginDt;
    this.termEndDate = obj.termEndDt;
 
    let termCourses = [];
    if (obj.enrollmentDetails.enrollmentDetail) {
      if (Array.isArray(obj.enrollmentDetails.enrollmentDetail)) {
        termCourses = obj.enrollmentDetails.enrollmentDetail.map((item) => new Course(item));
      } else {
        termCourses['0'] = new Course(obj.enrollmentDetails.enrollmentDetail);
      }
    }
    this.courses = termCourses;
  }
}
 
export default class Schedule {
  constructor(obj, mode) {
    mode = parseInt(mode);
 
    let terms = {};
    if (obj.ssrGetEnrollmentResp.ssrEnrlStudylist.ssMessageLong !== 'You are not registered for classes in this term.') {
      if (isArray(obj.ssrGetEnrollmentResp.ssrEnrlStudylist.ssrEnrlTerms.ssrEnrlTerm)) {
        terms = mapObj((term) => new Term(term, mode), obj.ssrGetEnrollmentResp.ssrEnrlStudylist.ssrEnrlTerms.ssrEnrlTerm);
      } else {
        terms['0'] = new Term(obj.ssrGetEnrollmentResp.ssrEnrlStudylist.ssrEnrlTerms.ssrEnrlTerm, mode);
      }
    }
    const schedule = { terms };
 
    this.terms = schedule.terms;
  }
}