diff --git a/erpnext/education/doctype/course_enrollment/course_enrollment.py b/erpnext/education/doctype/course_enrollment/course_enrollment.py
index 09ffade7d86..cfe502b8a3c 100644
--- a/erpnext/education/doctype/course_enrollment/course_enrollment.py
+++ b/erpnext/education/doctype/course_enrollment/course_enrollment.py
@@ -7,4 +7,8 @@ import frappe
from frappe.model.document import Document
class CourseEnrollment(Document):
- pass
+
+ def get_all_activity(self):
+ course_activity_list = frappe.get_all("Course Activity", filters={'enrollment':self.name}, fields=['content', 'content_type', 'modified'], order_by='modified')
+ quiz_activity_list = frappe.get_all("Quiz Activity", filters={'enrollment':self.name}, fields=['quiz', 'status', 'modified'], order_by='modified')
+ return course_activity_list, quiz_activity_list
\ No newline at end of file
diff --git a/erpnext/public/build.json b/erpnext/public/build.json
index 824b9b82834..66ac5fe4f1e 100644
--- a/erpnext/public/build.json
+++ b/erpnext/public/build.json
@@ -55,7 +55,7 @@
"stock/dashboard/item_dashboard_list.html",
"stock/dashboard/item_dashboard.js"
],
- "js/web-academy.min.js": [
- "public/js/education/web-academy.js"
+ "js/academy.min.js": [
+ "public/js/education/academy/academy.js"
]
}
diff --git a/erpnext/public/js/education/web-academy/AcademyRoot.vue b/erpnext/public/js/education/academy/AcademyRoot.vue
similarity index 100%
rename from erpnext/public/js/education/web-academy/AcademyRoot.vue
rename to erpnext/public/js/education/academy/AcademyRoot.vue
diff --git a/erpnext/public/js/education/web-academy.js b/erpnext/public/js/education/academy/academy.js
similarity index 80%
rename from erpnext/public/js/education/web-academy.js
rename to erpnext/public/js/education/academy/academy.js
index 8088a5060d5..08cfc37af4d 100644
--- a/erpnext/public/js/education/web-academy.js
+++ b/erpnext/public/js/education/academy/academy.js
@@ -1,21 +1,20 @@
import Vue from 'vue/dist/vue.js';
import VueRouter from 'vue-router/dist/vue-router.js'
-import AcademyRoot from "./web-academy/AcademyRoot.vue";
-import AcademyHome from "./web-academy/pages/AcademyHome.vue";
-import AcademyProgramPage from "./web-academy/pages/AcademyProgramPage.vue";
-import AcademyCoursePage from "./web-academy/pages/AcademyCoursePage.vue";
+import AcademyRoot from "./AcademyRoot.vue";
+import routes from './routes';
+import './call';
Vue.use(VueRouter)
-const routes = [
- {name: 'home', path: '', component: AcademyHome},
- {name: 'program', path: '/Program/:code', component: AcademyProgramPage, props: true},
- {name: 'content', path: '/Program/:code/:course/:type/:content', component: AcademyCoursePage, props: true},
-];
-var store = {
+
+frappe.provide('academy')
+
+frappe.utils.make_event_emitter(academy);
+
+academy.store = {
debug: true,
isLogin: false,
completedCourses: new Set(),
@@ -104,19 +103,13 @@ var store = {
this.updateEnrolledPrograms()
this.updateEnrolledCourses()
this.checkLogin()
-
},
}
-const router = new VueRouter({
- routes: routes,
-});
-
frappe.ready(() => {
window.v = new Vue({
el: "#academy",
- router: router,
- data: store,
+ router: new VueRouter({ routes }),
template: "",
components: { AcademyRoot },
created: function() {
@@ -125,4 +118,20 @@ frappe.ready(() => {
}
}
});
+ academy.store = new Vue({
+ data: store,
+ methods: {
+ checkLogin (){
+ if(frappe.session.user === "Guest"){
+ if (this.debug) console.log('No Session')
+ this.isLogin = false
+ }
+ else {
+ if (this.debug) console.log('Current User: ', frappe.session.user)
+ this.isLogin = true
+ }
+ return this.isLogin
+ }
+ }
+ });
})
\ No newline at end of file
diff --git a/erpnext/public/js/education/academy/call.js b/erpnext/public/js/education/academy/call.js
new file mode 100644
index 00000000000..108a6e1d36e
--- /dev/null
+++ b/erpnext/public/js/education/academy/call.js
@@ -0,0 +1,13 @@
+frappe.provide('academy');
+
+academy.call = (method, args) => {
+ const method_path = 'erpnext.www.academy.' + method;
+ return new Promise((resolve, reject) => {
+ return frappe.call({
+ method: method_path,
+ args,
+ })
+ .then(r => resolve(r.message))
+ .fail(reject)
+ });
+}
\ No newline at end of file
diff --git a/erpnext/public/js/education/web-academy/components/AcademyCourseCard.vue b/erpnext/public/js/education/academy/components/AcademyCourseCard.vue
similarity index 55%
rename from erpnext/public/js/education/web-academy/components/AcademyCourseCard.vue
rename to erpnext/public/js/education/academy/components/AcademyCourseCard.vue
index 9c474739692..eda382f4fa8 100644
--- a/erpnext/public/js/education/web-academy/components/AcademyCourseCard.vue
+++ b/erpnext/public/js/education/academy/components/AcademyCourseCard.vue
@@ -12,7 +12,29 @@
-
+
+
+
+ Completed
+
+
+ Start
+
@@ -20,6 +42,7 @@
diff --git a/erpnext/public/js/education/web-academy/components/AcademyCourseCardButton.vue b/erpnext/public/js/education/academy/components/AcademyCourseCardButton.vue
similarity index 100%
rename from erpnext/public/js/education/web-academy/components/AcademyCourseCardButton.vue
rename to erpnext/public/js/education/academy/components/AcademyCourseCardButton.vue
diff --git a/erpnext/public/js/education/web-academy/components/AcademyList.vue b/erpnext/public/js/education/academy/components/AcademyList.vue
similarity index 100%
rename from erpnext/public/js/education/web-academy/components/AcademyList.vue
rename to erpnext/public/js/education/academy/components/AcademyList.vue
diff --git a/erpnext/public/js/education/web-academy/components/AcademyProgramCard.vue b/erpnext/public/js/education/academy/components/AcademyProgramCard.vue
similarity index 92%
rename from erpnext/public/js/education/web-academy/components/AcademyProgramCard.vue
rename to erpnext/public/js/education/academy/components/AcademyProgramCard.vue
index 605dec211cc..ef3ac0896b3 100644
--- a/erpnext/public/js/education/web-academy/components/AcademyProgramCard.vue
+++ b/erpnext/public/js/education/academy/components/AcademyProgramCard.vue
@@ -38,14 +38,14 @@ export default {
methods: {
primaryAction(){
if(this.$root.$data.isLogin){
- if(this.$root.$data.checkProgramEnrollment(program_code)){
+ if(this.$root.$data.checkProgramEnrollment(this.program_code)){
this.$router.push('/Program/' + program.name)
}
else {
this.enroll()
}
}
- }
+ },
enroll() {
frappe.call({
method: "erpnext.www.academy.enroll_in_program",
@@ -57,11 +57,11 @@ export default {
this.$root.$data.enrolledPrograms.add(this.program_code)
this.$root.$data.updateEnrolledPrograms()
}
- }
+ },
computed: {
buttonName() {
if(this.$root.$data.isLogin){
- if(this.$root.$data.checkProgramEnrollment(program_code)){
+ if(this.$root.$data.checkProgramEnrollment(this.program_code)){
return "Start Course"
}
else {
diff --git a/erpnext/public/js/education/web-academy/components/AcademyTopSection.vue b/erpnext/public/js/education/academy/components/AcademyTopSection.vue
similarity index 100%
rename from erpnext/public/js/education/web-academy/components/AcademyTopSection.vue
rename to erpnext/public/js/education/academy/components/AcademyTopSection.vue
diff --git a/erpnext/public/js/education/web-academy/components/AcademyTopSectionButton.vue b/erpnext/public/js/education/academy/components/AcademyTopSectionButton.vue
similarity index 100%
rename from erpnext/public/js/education/web-academy/components/AcademyTopSectionButton.vue
rename to erpnext/public/js/education/academy/components/AcademyTopSectionButton.vue
diff --git a/erpnext/public/js/education/academy/components/Button.vue b/erpnext/public/js/education/academy/components/Button.vue
new file mode 100644
index 00000000000..4d8df4b3140
--- /dev/null
+++ b/erpnext/public/js/education/academy/components/Button.vue
@@ -0,0 +1,25 @@
+
+
+
+
diff --git a/erpnext/public/js/education/web-academy/components/ContentArticle.vue b/erpnext/public/js/education/academy/components/ContentArticle.vue
similarity index 100%
rename from erpnext/public/js/education/web-academy/components/ContentArticle.vue
rename to erpnext/public/js/education/academy/components/ContentArticle.vue
diff --git a/erpnext/public/js/education/web-academy/components/ContentNavigation.vue b/erpnext/public/js/education/academy/components/ContentNavigation.vue
similarity index 92%
rename from erpnext/public/js/education/web-academy/components/ContentNavigation.vue
rename to erpnext/public/js/education/academy/components/ContentNavigation.vue
index 28f5a70b768..7fa20a5c6e7 100644
--- a/erpnext/public/js/education/web-academy/components/ContentNavigation.vue
+++ b/erpnext/public/js/education/academy/components/ContentNavigation.vue
@@ -41,9 +41,12 @@ export default {
enrollment: this.$root.$data.enrolledCourses[this.$route.params.course]
}
})
- this.$root.$data.addCompletedCourses(this.$route.params.course)
+ // this.$root.$data.addCompletedCourses(this.$route.params.course)
this.$root.$data.updateCompletedCourses()
this.$router.push({ name: 'program', params: { code: this.$route.params.code}})
+
+ //
+ academy.trigger('course-completed', course_name);
}
}
};
diff --git a/erpnext/public/js/education/web-academy/components/ContentQuiz.vue b/erpnext/public/js/education/academy/components/ContentQuiz.vue
similarity index 100%
rename from erpnext/public/js/education/web-academy/components/ContentQuiz.vue
rename to erpnext/public/js/education/academy/components/ContentQuiz.vue
diff --git a/erpnext/public/js/education/web-academy/components/ContentTitle.vue b/erpnext/public/js/education/academy/components/ContentTitle.vue
similarity index 100%
rename from erpnext/public/js/education/web-academy/components/ContentTitle.vue
rename to erpnext/public/js/education/academy/components/ContentTitle.vue
diff --git a/erpnext/public/js/education/web-academy/components/ContentVideo.vue b/erpnext/public/js/education/academy/components/ContentVideo.vue
similarity index 100%
rename from erpnext/public/js/education/web-academy/components/ContentVideo.vue
rename to erpnext/public/js/education/academy/components/ContentVideo.vue
diff --git a/erpnext/public/js/education/web-academy/components/Quiz/QuizSingleChoice.vue b/erpnext/public/js/education/academy/components/Quiz/QuizSingleChoice.vue
similarity index 100%
rename from erpnext/public/js/education/web-academy/components/Quiz/QuizSingleChoice.vue
rename to erpnext/public/js/education/academy/components/Quiz/QuizSingleChoice.vue
diff --git a/erpnext/public/js/education/web-academy/pages/AcademyCoursePage.vue b/erpnext/public/js/education/academy/pages/AcademyCoursePage.vue
similarity index 100%
rename from erpnext/public/js/education/web-academy/pages/AcademyCoursePage.vue
rename to erpnext/public/js/education/academy/pages/AcademyCoursePage.vue
diff --git a/erpnext/public/js/education/web-academy/pages/AcademyHome.vue b/erpnext/public/js/education/academy/pages/AcademyHome.vue
similarity index 100%
rename from erpnext/public/js/education/web-academy/pages/AcademyHome.vue
rename to erpnext/public/js/education/academy/pages/AcademyHome.vue
diff --git a/erpnext/public/js/education/academy/pages/AcademyProgramPage.vue b/erpnext/public/js/education/academy/pages/AcademyProgramPage.vue
new file mode 100644
index 00000000000..7bea1ed5c16
--- /dev/null
+++ b/erpnext/public/js/education/academy/pages/AcademyProgramPage.vue
@@ -0,0 +1,73 @@
+
+
+
+
+ Start Course
+ Continue Course
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/erpnext/public/js/education/academy/routes.js b/erpnext/public/js/education/academy/routes.js
new file mode 100644
index 00000000000..51c280d72a6
--- /dev/null
+++ b/erpnext/public/js/education/academy/routes.js
@@ -0,0 +1,11 @@
+import AcademyHome from "./academy/pages/AcademyHome.vue";
+import AcademyProgramPage from "./academy/pages/AcademyProgramPage.vue";
+import AcademyCoursePage from "./academy/pages/AcademyCoursePage.vue";
+
+const routes = [
+ {name: 'home', path: '', component: AcademyHome},
+ {name: 'program', path: '/Program/:program_name', component: AcademyProgramPage, props: true},
+ {name: 'content', path: '/Program/:code/:course/:type/:content', component: AcademyCoursePage, props: true},
+];
+
+export default routes;
\ No newline at end of file
diff --git a/erpnext/public/js/education/web-academy/pages/AcademyProgramPage.vue b/erpnext/public/js/education/web-academy/pages/AcademyProgramPage.vue
deleted file mode 100644
index 030c3ed34e3..00000000000
--- a/erpnext/public/js/education/web-academy/pages/AcademyProgramPage.vue
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/erpnext/www/academy.html b/erpnext/www/academy.html
index 6e87f831e9e..9d3cec8a510 100644
--- a/erpnext/www/academy.html
+++ b/erpnext/www/academy.html
@@ -4,5 +4,5 @@
{% block page_content %}
-
+
{% endblock %}
\ No newline at end of file