From 2e3f47e9b2d2cbcf982fbe74fae0acd27ff78690 Mon Sep 17 00:00:00 2001 From: Seth Call Date: Mon, 21 Mar 2016 16:37:13 -0500 Subject: [PATCH] * student page --- admin/app/admin/jam_tracks.rb | 1 + admin/app/admin/students.rb | 245 ++++++++++++++++++++++++++++ admin/app/admin/teachers.rb | 4 +- db/up/teacher_progression.sql | 3 +- ruby/lib/jam_ruby/models/teacher.rb | 5 +- ruby/lib/jam_ruby/models/user.rb | 5 + 6 files changed, 257 insertions(+), 6 deletions(-) create mode 100644 admin/app/admin/students.rb diff --git a/admin/app/admin/jam_tracks.rb b/admin/app/admin/jam_tracks.rb index 938cf0bf5..f7c05cfee 100644 --- a/admin/app/admin/jam_tracks.rb +++ b/admin/app/admin/jam_tracks.rb @@ -14,6 +14,7 @@ ActiveAdmin.register JamRuby::JamTrack, :as => 'JamTracks' do scope("Onboarding TODO") { |scope| scope.where('onboarding_exceptions is not null') } scope("Tency Only") { |scope| scope.joins('INNER JOIN jam_track_licensors as licensors ON jam_tracks.licensor_id = licensors.id').where("licensors.name = 'Tency Music'") } scope("TimTracks Only") { |scope| scope.joins('INNER JOIN jam_track_licensors as licensors ON jam_tracks.licensor_id = licensors.id').where("licensors.name = 'Tim Waurick'") } + scope("Drumma Boy Only") { |scope| scope.joins('INNER JOIN jam_track_licensors as licensors ON jam_tracks.licensor_id = licensors.id').where("licensors.name = 'Drumma Boy'") } # scope("Onboarding TODO w/ Tency Only") { |scope| scope.joins('INNER JOIN jam_track_licensors as licensors ON jam_tracks.licensor_id = licensors.id').where("licensors.name = 'Tency Music'").where('onboarding_exceptions is not null') } form :partial => 'form' diff --git a/admin/app/admin/students.rb b/admin/app/admin/students.rb new file mode 100644 index 000000000..c9e91592f --- /dev/null +++ b/admin/app/admin/students.rb @@ -0,0 +1,245 @@ +=begin +ActiveAdmin.register JamRuby::User, :as => 'Students' do + + menu :label => 'Students', :parent => 'JamClass' + + config.sort_order = 'created_at desc' + config.batch_actions = false + config.per_page = 100 + config.paginate = true + + def booked_anything(scope) + scope.joins(lesson_booking) + end + scope("Default", default: true) { |scope| booked_anything(scope) } + + index do + column "Name" do |teacher| + link_to teacher.user.name, "#{Rails.application.config.external_root_url}/client#/profile/teacher/#{teacher.user.id}" + end + column "Email" do |teacher| + teacher.user.email + end + column "Location" do |teacher| + teacher.user.location(country = true) + end + column "Profile %" do |teacher| + div do + span do + "#{teacher.pct_complete[:pct]}%" + end + br + span do + link_to "Detail", admin_teacher_path(teacher.id) + end + end + + end + column "Background Check" do |teacher| + div do + if teacher.background_check_at + span do + teacher.background_check_at.to_date + end + span do + br + end + span do + link_to(mark_background_check_admin_teacher_path(teacher.id), {confirm: "Mark as background checked?"}) do + "mark as checked" + end + end + + else + span do + 'NOT DONE' + end + span do + br + end + span do + link_to("mark as checked", mark_background_check_admin_teacher_path(teacher.id), {confirm: "Mark as background checked?"}) + end + end + + + end + end + + column "Session Ready" do |teacher| + div do + if teacher.ready_for_session + span do + 'YES' + end + else + span do + 'NO' + end + span do + br + end + span do + link_to("mark as checked", mark_session_ready_admin_teacher_path(teacher.id), {confirm: "Mark as ready for session?"}) + end + + end + end + end + column "Top Teacher" do |teacher| + div do + if teacher.top_rated + span do + 'YES' + end + span do + br + end + span do + link_to("mark not top", mark_not_top_admin_teacher_path(teacher.id), {confirm: "Mark as not top rated?"}) + end + else + span do + 'NO' + end + span do + br + end + span do + link_to("mark as top", mark_top_admin_teacher_path(teacher.id), {confirm: "Mark as top rated?"}) + end + end + end + + end + end + + show do + attributes_table do + row "Name" do |teacher| + link_to teacher.user.name, "#{Rails.application.config.external_root_url}/client#/profile/teacher/#{teacher.user.id}" + end + row "Email" do |teacher| + teacher.user.email + end + row "Location" do |teacher| + teacher.user.location(country = true) + end + row "Profile %" do |teacher| + div do + span do + "#{teacher.pct_complete[:pct]}%" + end + br + br + div do + h5 do "Completed Sections" end + teacher.pct_complete.each do |k, v| + if k != :pct && v + div do + k + end + end + end + br + br + h5 do "Uncompleted Sections" end + teacher.pct_complete.each do |k, v| + if k != :pct && !v + div do + k + end + end + end + end + end + + end + row "Background Check" do |teacher| + div do + if teacher.background_check_at + span do + teacher.background_check_at.to_date + end + span do + br + end + span do + link_to(mark_background_check_admin_teacher_path(teacher.id), {confirm: "Mark as background checked?"}) do + "mark as checked" + end + end + + else + span do + 'NOT DONE' + end + span do + br + end + span do + link_to("mark as checked", mark_background_check_admin_teacher_path(teacher.id), {confirm: "Mark as background checked?"}) + end + end + + + end + end + + row "Session Ready" do |teacher| + div do + if teacher.ready_for_session + span do + 'YES' + end + else + span do + 'NO' + end + span do + br + end + span do + link_to("mark as checked", mark_session_ready_admin_teacher_path(teacher.id), {confirm: "Mark as ready for session?"}) + end + + end + end + end + row "Top Teacher" do |teacher| + div do + if teacher.top_rated + span do + 'YES' + end + span do + br + end + span do + link_to("mark not top", mark_not_top_admin_teacher_path(teacher.id), {confirm: "Mark as not top rated?"}) + end + else + span do + 'NO' + end + span do + br + end + span do + link_to("mark as top", mark_top_admin_teacher_path(teacher.id), {confirm: "Mark as top rated?"}) + end + end + end + + end + end + end + + + member_action :mark_session_ready, :method => :get do + resource.mark_session_ready + redirect_to :back + end + +end +=end \ No newline at end of file diff --git a/admin/app/admin/teachers.rb b/admin/app/admin/teachers.rb index 494aaa243..13435a090 100644 --- a/admin/app/admin/teachers.rb +++ b/admin/app/admin/teachers.rb @@ -63,7 +63,7 @@ ActiveAdmin.register JamRuby::Teacher, :as => 'Teachers' do column "Session Ready" do |teacher| div do - if teacher.ready_for_session + if teacher.ready_for_session_at span do 'YES' end @@ -183,7 +183,7 @@ ActiveAdmin.register JamRuby::Teacher, :as => 'Teachers' do row "Session Ready" do |teacher| div do - if teacher.ready_for_session + if teacher.ready_for_session_at span do 'YES' end diff --git a/db/up/teacher_progression.sql b/db/up/teacher_progression.sql index 1f00296b3..111a453ee 100644 --- a/db/up/teacher_progression.sql +++ b/db/up/teacher_progression.sql @@ -1,3 +1,4 @@ ALTER TABLE teachers ADD COLUMN background_check_at TIMESTAMP WITHOUT TIME ZONE; -ALTER TABLE teachers ADD COLUMN ready_for_session BOOLEAN NOT NULL DEFAULT FALSE; +ALTER TABLE teachers ADD COLUMN ready_for_session_at TIMESTAMP WITHOUT TIME ZONE; +ALTER TABLE users ADD COLUMN ready_for_session_at TIMESTAMP WITHOUT TIME ZONE; ALTER TABLE teachers ADD COLUMN top_rated BOOLEAN NOT NULL DEFAULT FALSE; \ No newline at end of file diff --git a/ruby/lib/jam_ruby/models/teacher.rb b/ruby/lib/jam_ruby/models/teacher.rb index 8c8878de1..904e6ef12 100644 --- a/ruby/lib/jam_ruby/models/teacher.rb +++ b/ruby/lib/jam_ruby/models/teacher.rb @@ -23,7 +23,6 @@ module JamRuby validates :years_playing, :presence => true, :if => :validate_introduction validates :teaches_test_drive, inclusion: {in: [true, false]}, :if => :validate_pricing validates :top_rated, inclusion: {in: [true, false]} - validates :ready_for_session, inclusion: {in: [true, false]} validates :test_drives_per_week, numericality: {only_integer: true, minimum: 2, maximum: 10}, :if => :validate_pricing validates :instruments, :length => {minimum: 1, message: "At least one instrument or subject is required"}, if: :validate_basics, unless: ->(teacher) { teacher.subjects.length>0 } validates :subjects, :length => {minimum: 1, message: "At least one instrument or subject is required"}, if: :validate_basics, unless: ->(teacher) { teacher.instruments.length>0 } @@ -263,7 +262,7 @@ module JamRuby end def mark_session_ready - self.ready_for_session = true + self.ready_for_session_at = Time.now self.save! end @@ -359,7 +358,7 @@ module JamRuby end end - complete = 100.0 * done.to_f / parts.length.to_f + complete = 100.0 * done.to_f / @part_complete.length.to_f @part_complete[:pct] = complete.round @part_complete diff --git a/ruby/lib/jam_ruby/models/user.rb b/ruby/lib/jam_ruby/models/user.rb index d7a964414..d9e8b5dd5 100644 --- a/ruby/lib/jam_ruby/models/user.rb +++ b/ruby/lib/jam_ruby/models/user.rb @@ -1816,6 +1816,11 @@ module JamRuby using_free_credit end + def mark_session_ready + self.ready_for_session_at = Time.now + self.save! + end + private def create_remember_token self.remember_token = SecureRandom.urlsafe_base64