0 && i < questions.length)}">
@@ -30,43 +31,39 @@
{{assessmentGroup.name}}
*
-
+
-
-
{{ submission | json }}
-
-
-
+
diff --git a/src/pages/assessments/group/assessments-group.page.ts b/src/pages/assessments/group/assessments-group.page.ts
index 568e4cf2..789f4b8b 100644
--- a/src/pages/assessments/group/assessments-group.page.ts
+++ b/src/pages/assessments/group/assessments-group.page.ts
@@ -1,17 +1,16 @@
-import { Component } from '@angular/core';
+import { Component, OnInit } from '@angular/core';
import { NavParams, NavController, AlertController, LoadingController, Events } from 'ionic-angular';
import { FormBuilder, Validators, FormGroup, FormControl, FormArray } from '@angular/forms';
-// Others
import { CacheService } from '../../../shared/cache/cache.service';
import { ChoiceBase, QuestionBase, Submission, AssessmentService } from '../../../services/assessment.service';
import * as _ from 'lodash';
-
@Component({
selector: 'assessments-group-page',
templateUrl: './assessments-group.html',
})
-export class AssessmentsGroupPage {
+export class AssessmentsGroupPage implements OnInit {
+
activity: any;
answers: any; // to render & display submitted answers
assessment: any;
@@ -20,7 +19,7 @@ export class AssessmentsGroupPage {
canUpdateInput: boolean = false;
event: any;
formGroup: any;
- inProgress: any;
+ inProgress: boolean | any;
published: boolean = false;
questions: any = [];
submission: Submission;
@@ -36,7 +35,7 @@ export class AssessmentsGroupPage {
public navParams: NavParams
) {}
- ionViewDidEnter() {
+ ngOnInit() {
// navigate from activity page
this.activity = this.navParams.get('activity') || {};
@@ -45,13 +44,15 @@ export class AssessmentsGroupPage {
if (!_.isEmpty(this.event)) {
this.activity = this.event;
}
+ }
- this.assessment = this.activity.assessment; // required for context_id
- this.cacheKey = `assessment.group.${this.assessment.context_id}`;
+ ionViewDidEnter() {
+ // use assessment object from activity (required for extracting context_id)
+ this.assessment = this.activity.assessment;
+ this.cacheKey = `assessment.group.${this.assessment.context_id}`;
this.assessmentGroup = this.navParams.get('assessmentGroup') || {};
this.submission = this.navParams.get('submission') || {};
-
// preset key used for caching later (locally and remote data)
this.canUpdateInput = this.isInputEditable(this.submission);
// this.published = this.assessmentService.isPublished(this.submissions);
@@ -63,6 +64,10 @@ export class AssessmentsGroupPage {
);
}
+ /**
+ * @name updateSubmission
+ * @description trace changes of input for assessment (to avoid extra checking logics)
+ */
updateSubmission() {
this.events.publish('assessment:changes', {
changed: true
@@ -92,24 +97,32 @@ export class AssessmentsGroupPage {
}
_.forEach(submission.review, (review) => {
+
_.forEach(questions, (question, idx) => {
- if (review.assessment_question_id === question.id) {
- // text type
+ if (review.assessment_question_id === question.question_id) {
+ // text type (no merging, text question displayed in plain text)
if (question.type === 'text') {
questions[idx].review_answer = review;
}
// oneof type
+ // combine question, when answered by both reviewer and submitter
if (question.type === 'oneof') {
questions[idx].review_answer = review;
+ let submitterAnswer = question.answer;
+
_.forEach(question.choices, (choice, key) => {
- if (choice.id == review.answer && choice.id == question.answer.answer) {
- questions[idx].choices[key].name = choice.name + ' (you and reviewer)';
- }
- if (choice.id != review.answer && choice.id == question.answer.answer) {
- questions[idx].choices[key].name = choice.name + ' (you)';
- }
- if (choice.id == review.answer && choice.id != question.answer.answer) {
+ if (!_.isEmpty(submitterAnswer)) {
+ if (choice.id == review.answer && choice.id == submitterAnswer.answer) {
+ questions[idx].choices[key].name = choice.name + ' (you and reviewer)';
+ }
+ else if (choice.id != review.answer && choice.id == submitterAnswer.answer) {
+ questions[idx].choices[key].name = choice.name + ' (you)';
+ }
+ else if (choice.id == review.answer && choice.id != submitterAnswer.answer) {
+ questions[idx].choices[key].name = choice.name + ' (reviewer)';
+ }
+ } else if (choice.id == review.answer) { // display reviewer answer
questions[idx].choices[key].name = choice.name + ' (reviewer)';
}
});
@@ -117,6 +130,7 @@ export class AssessmentsGroupPage {
}
});
});
+
return questions;
}
@@ -178,7 +192,14 @@ export class AssessmentsGroupPage {
group['choices'] = new FormGroup(choices);
}
- result[question.id] = new FormGroup(group);
+ /**
+ * id and question_id are different id
+ * - id = has no obvious purpose
+ * - question_id must be used as id for submission
+ *
+ * but for case like this just for index id
+ */
+ result[question.question_id] = new FormGroup(group);
});
return result;
@@ -204,22 +225,31 @@ export class AssessmentsGroupPage {
return {
Assessment: {
- id: submission.assessment_id,
- context_id: this.getSubmissionContext()
+ id: submission.assessment_id,
+ context_id: this.getSubmissionContext()
},
AssessmentSubmissionAnswer: answers
};
}
/**
- * @description store assessment answer/progress locally
+ * @name storeProgress
+ * @description store assessment answer/progress locally (offline)
+ * @example format for cached submission
+ * {
+ * Assessment: {
+ * id: 1,
+ * context_id: 2
+ * },
+ * AssessmentSubmissionAnswer: Array