From cc166c01ebe39a1404b9ca042729edc886d347df Mon Sep 17 00:00:00 2001 From: scmmishra Date: Fri, 9 Nov 2018 11:47:09 +0530 Subject: [PATCH] Improved Client implementation --- .../course_enrollment/course_enrollment.py | 6 +- erpnext/public/build.json | 4 +- .../{web-academy => academy}/AcademyRoot.vue | 0 .../{web-academy.js => academy/academy.js} | 43 ++++++----- erpnext/public/js/education/academy/call.js | 13 ++++ .../components/AcademyCourseCard.vue | 41 ++++++++++- .../components/AcademyCourseCardButton.vue | 0 .../components/AcademyList.vue | 0 .../components/AcademyProgramCard.vue | 8 +- .../components/AcademyTopSection.vue | 0 .../components/AcademyTopSectionButton.vue | 0 .../education/academy/components/Button.vue | 25 +++++++ .../components/ContentArticle.vue | 0 .../components/ContentNavigation.vue | 5 +- .../components/ContentQuiz.vue | 0 .../components/ContentTitle.vue | 0 .../components/ContentVideo.vue | 0 .../components/Quiz/QuizSingleChoice.vue | 0 .../pages/AcademyCoursePage.vue | 0 .../pages/AcademyHome.vue | 0 .../academy/pages/AcademyProgramPage.vue | 73 +++++++++++++++++++ erpnext/public/js/education/academy/routes.js | 11 +++ .../web-academy/pages/AcademyProgramPage.vue | 54 -------------- erpnext/www/academy.html | 2 +- 24 files changed, 202 insertions(+), 83 deletions(-) rename erpnext/public/js/education/{web-academy => academy}/AcademyRoot.vue (100%) rename erpnext/public/js/education/{web-academy.js => academy/academy.js} (80%) create mode 100644 erpnext/public/js/education/academy/call.js rename erpnext/public/js/education/{web-academy => academy}/components/AcademyCourseCard.vue (55%) rename erpnext/public/js/education/{web-academy => academy}/components/AcademyCourseCardButton.vue (100%) rename erpnext/public/js/education/{web-academy => academy}/components/AcademyList.vue (100%) rename erpnext/public/js/education/{web-academy => academy}/components/AcademyProgramCard.vue (92%) rename erpnext/public/js/education/{web-academy => academy}/components/AcademyTopSection.vue (100%) rename erpnext/public/js/education/{web-academy => academy}/components/AcademyTopSectionButton.vue (100%) create mode 100644 erpnext/public/js/education/academy/components/Button.vue rename erpnext/public/js/education/{web-academy => academy}/components/ContentArticle.vue (100%) rename erpnext/public/js/education/{web-academy => academy}/components/ContentNavigation.vue (92%) rename erpnext/public/js/education/{web-academy => academy}/components/ContentQuiz.vue (100%) rename erpnext/public/js/education/{web-academy => academy}/components/ContentTitle.vue (100%) rename erpnext/public/js/education/{web-academy => academy}/components/ContentVideo.vue (100%) rename erpnext/public/js/education/{web-academy => academy}/components/Quiz/QuizSingleChoice.vue (100%) rename erpnext/public/js/education/{web-academy => academy}/pages/AcademyCoursePage.vue (100%) rename erpnext/public/js/education/{web-academy => academy}/pages/AcademyHome.vue (100%) create mode 100644 erpnext/public/js/education/academy/pages/AcademyProgramPage.vue create mode 100644 erpnext/public/js/education/academy/routes.js delete mode 100644 erpnext/public/js/education/web-academy/pages/AcademyProgramPage.vue diff --git a/erpnext/education/doctype/course_enrollment/course_enrollment.py b/erpnext/education/doctype/course_enrollment/course_enrollment.py index 09ffade7d8..cfe502b8a3 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 824b9b8283..66ac5fe4f1 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 8088a5060d..08cfc37af4 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 0000000000..108a6e1d36 --- /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 9c47473969..eda382f4fa 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 605dec211c..ef3ac0896b 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 0000000000..4d8df4b314 --- /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 28f5a70b76..7fa20a5c6e 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 0000000000..7bea1ed5c1 --- /dev/null +++ b/erpnext/public/js/education/academy/pages/AcademyProgramPage.vue @@ -0,0 +1,73 @@ + + \ 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 0000000000..51c280d72a --- /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 030c3ed34e..0000000000 --- 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 6e87f831e9..9d3cec8a51 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