moodle_local_treestudyplan/amd/build/studyplan-report-components.min.js
PMKuipers 8f6d48b981 WIP
2024-02-19 11:34:40 +01:00

3 lines
14 KiB
JavaScript

define("local_treestudyplan/studyplan-report-components",["exports","./simpleline/simpleline","core/str","./util/string-helper","./util/date-helper","core/ajax","core/notification","./util/svgarc","./util/debugger","core/config","./studyplan-processor","./treestudyplan-components","core/edit_switch"],(function(_exports,_simpleline,_str,_stringHelper,_dateHelper,_ajax,_notification,_svgarc,_debugger,_config,_studyplanProcessor,_treestudyplanComponents,_edit_switch){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_notification=_interopRequireDefault(_notification),_debugger=_interopRequireDefault(_debugger),_config=_interopRequireDefault(_config),_treestudyplanComponents=_interopRequireDefault(_treestudyplanComponents);Math.PI;var _default={install(Vue){Vue.use(_treestudyplanComponents.default);let debug=new _debugger.default("treestudyplan-viewer"),strings=(0,_stringHelper.load_strings)({report:{loading:"loadinghelp@core",studyplan_past:"studyplan_past",studyplan_present:"studyplan_present",studyplan_future:"studyplan_future",back:"back"},invalid:{error:"error"},header:{overall:"overall",students:"students@core"},studentresults:{completion_incomplete:"completion_incomplete",completion_failed:"completion_failed",completion_pending:"completion_pending",completion_progress:"completion_progress",completion_completed:"completion_completed",completion_good:"completion_good",completion_excellent:"completion_excellent",student_not_tracked:"student_not_tracked"}});Vue.component("q-studyplanreport",{props:{structure:{type:Object}},data:()=>({students:[],studentresults:{},expansioninfo:{periods:{},lines:{},items:{}},groupinfo:{},sorting:{name:"asc"}}),created(){this.loadStudents()},computed:{sortedstudents(){return this.students}},watch:{structure:{immediate:!0,handler(structure){for(const period of structure.periods){const pid=period.period.id;this.expansioninfo.periods[pid]||(this.$set(this.expansioninfo.periods,pid,{expanded:!1}),this.$set(this.expansioninfo.lines,period.period.id,{}));for(const line of period.lines){const lid=line.line.id;this.expansioninfo.lines[lid]||this.$set(this.expansioninfo.lines[pid],lid,{expanded:!0});for(const item of line.items)this.expansioninfo.items[item.id]||this.$set(this.expansioninfo.items,item.id,{expanded:!1})}}}}},methods:{loadStudents(){const self=this;(0,_ajax.call)([{methodname:"local_treestudyplan_all_associated_grouped",args:{studyplan_id:this.structure.studyplan.id}}])[0].then((function(response){self.students=response;for(const group of self.students){self.$set(self.groupinfo,group.label,{expand:!0});for(const student of group.users)self.$set(self.studentresults,student.id,{loading:!0,results:[]}),(0,_ajax.call)([{methodname:"local_treestudyplan_get_report_data",args:{pageid:self.structure.page.id,userid:student.id,firstperiod:self.structure.firstperiod,lastperiod:self.structure.lastperiod}}])[0].then((function(response){self.studentresults[student.id].loading=!1,self.studentresults[student.id].results=response})).catch(_notification.default.exception)}})).catch(_notification.default.exception)},expansionChanged(parm,id,val){parm="p"==parm[0]?"periods":"l"==parm[0]?"lines":"items",debug.info("Expansion Changed",parm,id,val),"lines"==parm?this.expansioninfo[parm][id[0]][id[1]].expanded=val:this.expansioninfo[parm][id].expanded=val}},template:"\n <div>\n <q-header \n :sorting='sorting' \n :structure='structure'\n :expansion='expansioninfo'\n @expansion='expansionChanged'\n ></q-header>\n <div class='q-scrolly'>\n <template v-for=\"group in sortedstudents\">\n <q-groupheading v-if=\"group.users\" :label=\"group.label\" :groupinfo=\"groupinfo[group.label]\"></q-groupheading>\n <template v-if='group.users && groupinfo[group.label].expand'>\n <q-studentresults v-for=\"student in group.users\"\n :student='student'\n :structure='structure'\n :results='studentresults[student.id].results'\n :loading='studentresults[student.id].loading'\n :expansion='expansioninfo'\n ></q-studentresults>\n </template>\n </template>\n </div>\n </div>\n "}),Vue.component("q-header",{props:{structure:{type:Object},sorting:{type:Object},expansion:{type:Object}},data:()=>({text:strings.header}),computed:{},methods:{conditions(item){const course=item.course,list=[];if(debug.info("Determining conditions",course),course.completion){debug.info("Has Competencies");for(const cmp of course.competencies)list.push({name:cmp.title})}else if(course.completion){debug.info("Has Core completion");for(const cnd of course.completion.conditions)for(const itm of cnd.items)list.push({name:itm.title})}else if(course.grades){debug.info("Has selected grades");for(const g of course.grades)list.push({name:g.name})}return list}},mounted(){},updated(){},template:"\n <div class='q-header'>\n <div class='q-studentname heading'><span>{{text.students}}</span></div>\n <div v-for=\"p in structure.periods\" class='q-period-heading' >\n <div class='q-header-title'>\n <a v-if=\"expansion.periods[p.period.id].expanded\"\n href='#' @click.prevent=\"$emit('expansion','periods',p.period.id,false);\"><i class='fa fa-minus-square'></i></a>\n <a v-else\n href='#' @click.prevent=\"$emit('expansion','periods',p.period.id,true);\"><i class='fa fa-plus-square'></i></a>\n {{ p.period.fullname}}\n </div>\n <div v-if=\"expansion.periods[p.period.id].expanded\" class='q-header-details'>\n <div class='q-line-heading' v-for='l in p.lines'>\n <div class='q-header-title'><span v-html=\"l.line.shortname\"></span></div>\n <div v-if=\"l.items.length == 1 || expansion.lines[p.period.id][l.line.id].expanded\" class='q-header-details'>\n <div class='q-item-heading' v-for='item in l.items'>\n <div class='q-header-title'>\n <a v-if=\"expansion.items[item.id].expanded\"\n href='#' @click.prevent=\"$emit('expansion','items',item.id,false);\"\n ><i class='fa fa-minus-square'></i></a>\n <a v-else\n href='#' @click.prevent=\"$emit('expansion','items',item.id,true);\"\n ><i class='fa fa-plus-square'></i></a>\n {{ item.course.displayname}}\n </div>\n <div v-if=\"expansion.items[item.id].expanded\" class='q-header-details'>\n <div class='q-condition-heading'>\n {{ text.overall }}\n </div>\n <div v-for=\"c in conditions(item)\" class=\"q-condition-heading\" >\n <span v-html=\"c.name\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n "}),Vue.component("q-groupheading",{props:{structure:{type:Object}},data:()=>({}),computed:{},methods:{},template:"\n <div class='q-groupheading'>\n\n </div>\n "}),Vue.component("q-studentresults",{props:{student:{type:Object},structure:{type:Object},results:{type:Array},loading:{type:Boolean,default:!1},expansion:{type:Object}},data:()=>({text:strings.studentresults}),computed:{},methods:{hasprogressinfo:item=>!!item.course.enrolled&&(item.course.completion||item.course.competency||item.course.grades),completion_icon(completion){switch(completion){default:return"circle-o";case"pending":return"question-circle";case"failed":return"times-circle";case"progress":return"exclamation-circle";case"completed":case"good":case"excellent":return"check-circle"}},circle_icon(completion){switch(completion){default:return null;case"failed":return"times";case"progress":return"";case"completed":case"good":case"excellent":return"check"}},courseprogress(item){return item.course.enrolled?item.course.completion?item.course.completion.progress/item.course.completion.count:item.course.competency?item.course.competency.progress/item.course.competency.count:item.course.grades?this.gradeprogress(item.course.grades)/item.course.grades.length:0:0},gradeprogress(grades){let progress=0;for(const ix in grades){const g=grades[ix];["completed","excellent","good"].includes(g.completion)&&progress++}return progress},conditions(item){},useritems(line){const list=[];for(const item of line.items){let newitm=item;for(const itm of this.results)if(item.id==itm.id){newitm=itm;break}list.push(newitm)}return list}},template:"\n <div class='q-student-results'>\n <div class='q-studentname '><span>{{student.firstname}} {{student.lastname}}</span></div>\n <div v-for=\"p in structure.periods\" class='q-period-results' >\n <div v-if=\"expansion.periods[p.period.id].expanded\" class='q-result-details'>\n <div class='q-line-results' v-for='l in p.lines'>\n <div v-if=\"l.items.length == 1 || expansion.lines[p.period.id][l.line.id].expanded\" class='q-result-details'>\n <div class='q-item-results' v-for='item in useritems(l)'>\n <div v-if=\"expansion.items[item.id].expanded\" class='q-result-details'>\n <div class='q-result q-overviewresult'>\n <template v-if=\"loading\">\n <div class=\"spinner-border spinner-border-sm text-info\" role=\"status\"></div>\n </template>\n <template v-else-if='!item.course.enrolled'>\n <i v-b-popover.top\n class=\"r-course-result fa fa-exclamation-triangle t-not-enrolled-alert\"\n :title=\"text.student_not_tracked\"></i>\n </template>\n <template v-else-if='hasprogressinfo(item)'>\n <i v-b-popover.top\n :class=\"'r-course-result fa fa-'+completion_icon(item.completion)+\n ' r-completion-'+item.completion\"\n :title=\"text['completion_'+item.completion]\"></i>\n </template>\n <template v-else>\n <i v-b-popover.top\n :class=\"'r-course-result fa fa-'+completion_icon(item.completion)+\n ' r-completion-'+item.completion\"\n :title=\"text['completion_'+item.completion]\"></i>\n </template>\n </div>\n <div class='q-condition-heading' v-for='c in conditions(item)'>\n \n\n\n </div>\n </div>\n <div v-else class='q-result q-overviewresult'>\n <template v-if=\"loading\">\n <div class=\"spinner-border spinner-border-sm text-info\" role=\"status\"></div>\n </template>\n <template v-else-if='!item.course.enrolled'>\n <i v-b-popover.top\n class=\"r-course-result fa fa-exclamation-triangle t-not-enrolled-alert\"\n :title=\"text.student_not_tracked\"></i>\n </template>\n <template v-else-if='hasprogressinfo(item)'>\n <i v-b-popover.top\n :class=\"'r-course-result fa fa-'+completion_icon(item.completion)+\n ' r-completion-'+item.completion\"\n :title=\"text['completion_'+item.completion]\"></i>\n </template>\n <template v-else>\n <i v-b-popover.top\n :class=\"'r-course-result fa fa-'+completion_icon(item.completion)+\n ' r-completion-'+item.completion\"\n :title=\"text['completion_'+item.completion]\"></i>\n </template>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n "})}};return _exports.default=_default,_exports.default}));
//# sourceMappingURL=studyplan-report-components.min.js.map