UNPKG

@team-llambda/edupoint-pxpwebservices-synergy

Version:

An NPM package for accessing the Edupoint Synergy API on behalf of students, parents, and teachers.

87 lines (70 loc) 3.35 kB
module EDUPoint { export class Assignment { static schema = { name: "Assignemnt", properties: { gradebookID: "string?", measure: "string?", type: "string", date: "date?", dueDate: "date?" } } gradebookID?: string measure?: string type: string date?: Date dueDate?: Date // `null` implies that this assignment hasn't been graded yet. actualScore?: number assignedScore: number notes?: string // Is this an assignment not on the sever (e.g. user-created)? isArbitrary: boolean constructor(isArbitrary: boolean, type: string, assignedScore: number, actualScore?: number, notes?: string) { this.isArbitrary = isArbitrary this.type = type this.actualScore = actualScore this.assignedScore = assignedScore this.notes = notes } static initializeFromElement(data): Assignment { const type = data.attributes["Type"] const notes = data.attributes["Notes"] const parsedScores = parseScore(data.attributes["Points"]) var assignment = new Assignment(false, type, parsedScores[0], parsedScores[1], notes) assignment.gradebookID = data.attributes["GradebookID"] assignment.measure = data.attributes["Measure"] assignment.date = dateFromAmericanShortFormat(data.attributes["Date"]) assignment.dueDate = dateFromAmericanShortFormat(data.attributes["DueDate"]) return assignment } /** * @returns A percentage (in decimal form) of this assignment's scores. `null` implies that this assignment hasn't been graded yet. */ get scorePercentage(): number | null { if (this.actualScore == null) { return null } if (this.assignedScore == 0) { return this.actualScore } // Extra credit. return this.actualScore / this.assignedScore } } } /** * @param scoreString: The string to parse. Can be null/empty. * * @returns: First number is `assignedScore`. Second number is `actualScore?`. Returns `null` if invalid parameter was given. */ function parseScore(scoreString: string): [number | null, number] | null { if (scoreString == null || scoreString.length <= 0) { return null } const delimiterIndex = scoreString.indexOf("/") // Ungraded assignment only return an assigned score. if (delimiterIndex <= -1) { return [+scoreString.substring(0, scoreString.indexOf(" ")), null] } const assigned = +scoreString.substring(delimiterIndex + 1, scoreString.length - 1) // plus one for the trailing space. const actual = +scoreString.substring(0, delimiterIndex - 1) // minus one for the leading space. return [assigned, actual] } /** * <Assignment GradebookID="258296" Measure="Song Presentation" Type="Total Points" Date="11/1/2018" DueDate="1/18/2019" Score="135 out of 150.0000" ScoreType="Raw Score" Points="135.00 / 150.0000" Notes="" TeacherID="3474" StudentID="4634" MeasureDescription="" HasDropBox="false" DropStartDate="11/1/2018" DropEndDate="11/2/2018"> */