magister.js
Version:
A JavaScript implementation of the Magister 6 API
171 lines (137 loc) • 3.7 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _lodash = _interopRequireDefault(require("lodash"));
var _assert = _interopRequireDefault(require("assert"));
var _magisterThing = _interopRequireDefault(require("./magisterThing"));
var _util = require("./util");
var _gradeType = _interopRequireDefault(require("./gradeType"));
var _gradePeriod = _interopRequireDefault(require("./gradePeriod"));
var _class = _interopRequireDefault(require("./class"));
var _person = _interopRequireDefault(require("./person"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
class Grade extends _magisterThing.default {
/**
* @private
* @param {Magister} magister
* @param {Object} raw
*/
constructor(magister, raw) {
super(magister);
/**
* Should be set by {@link Course.grades}!
* @type {String}
* @private
*/
this._fillUrl = undefined;
/**
* @type {String}
* @readonly
*/
this.id = (0, _util.toString)(raw.CijferId);
/**
* @type {String}
* @readonly
*/
this.grade = raw.CijferStr;
/**
* @type {Boolean}
* @readonly
*/
this.passed = raw.IsVoldoende;
/**
* @type {Date}
* @readonly
*/
this.dateFilledIn = (0, _util.parseDate)(raw.DatumIngevoerd);
/**
* @type {Class}
* @readonly
*/
this.class = new _class.default(magister, raw.Vak);
/**
* @type {Boolean}
* @readonly
*/
this.atLaterDate = raw.Inhalen;
/**
* @type {Boolean}
* @readonly
*/
this.exemption = raw.Vrijstelling;
/**
* @type {Boolean}
* @readonly
*/
this.counts = raw.TeltMee;
/**
* @type {GradePeriod}
* @readonly
* @default null
*/
this.period = raw.Periode == null ? null : new _gradePeriod.default(magister, raw.Periode);
/**
* @type {GradeType}
* @readonly
* @default null
*/
this.type = raw.CijferKolom == null ? null : new _gradeType.default(magister, raw.CijferKolom);
/**
* @type {String}
* @readonly
*/
this.assignmentId = (0, _util.toString)(raw.CijferKolomIdEloOpdracht);
/**
* @type {Person}
* @readonly
*/
this.teacher = new _person.default(magister, {
Docentcode: raw.Docent
}, 3);
/**
* @type {Boolean}
* @readonly
*/
this.classExemption = raw.VakDispensatie || raw.VakVrijstelling;
/**
* Value will be set by {@link fill}
* @type {String}
* @default ''
*/
this.description = '';
/**
* Value will be set by {@link fill}
* @type {String}
* @default 0
*/
this.weight = 0;
/**
* Value will be set by {@link fill}
* @type {Date}
* @default undefined
*/
this.testDate = undefined;
} // TODO: add ability to fill persons
/**
* @returns {Promise<Grade>}
*/
fill() {
if (this._filled) {
return Promise.resolve(this);
}
(0, _assert.default)(this._fillUrl != null, 'this._fillUrl not set');
return this._magister.http.get(this._fillUrl).then(res => res.json()).then(res => {
this.testDate = (0, _util.parseDate)(res.WerkinformatieDatumIngevoerd);
this.description = _lodash.default.trim(res.WerkInformatieOmschrijving);
this.weight = Number.parseInt(res.Weging, 10) || 0;
this.type.level = res.KolomNiveau;
this.type.description = _lodash.default.trim(res.KolomOmschrijving);
this.filled = true;
return this;
});
}
}
var _default = Grade;
exports.default = _default;