remove influxdb as dependency to ruby project
This commit is contained in:
parent
5c246dc182
commit
dd84a3ebf7
|
|
@ -6,12 +6,13 @@ ActiveAdmin.register JamRuby::User, :as => 'Students' do
|
|||
config.batch_actions = false
|
||||
config.per_page = 100
|
||||
config.paginate = true
|
||||
config.filters = false
|
||||
|
||||
def booked_anything(scope)
|
||||
def booked_anything(scope)
|
||||
scope.joins(:student_lesson_bookings).where('lesson_bookings.active = true').uniq
|
||||
end
|
||||
|
||||
scope("Default", default: true) { |scope| booked_anything(scope).order('ready_for_session_at IS NULL DESC') }
|
||||
scope("Default", default: true) { |scope| scope.where('is_a_student = true OR ((select count(id) from lesson_bookings where lesson_bookings.user_id = users.id) > 0)').order('users.ready_for_session_at IS NULL DESC') }
|
||||
|
||||
index do
|
||||
column "Name" do |user|
|
||||
|
|
@ -45,8 +46,8 @@ ActiveAdmin.register JamRuby::User, :as => 'Students' do
|
|||
end
|
||||
end
|
||||
column "School" do |user|
|
||||
if teacher.school
|
||||
teacher.school.name
|
||||
if user.school
|
||||
user.school.name
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ gem 'rest-client'
|
|||
gem 'iso-639'
|
||||
gem 'rubyzip'
|
||||
gem 'sanitize'
|
||||
gem 'influxdb'
|
||||
#gem 'influxdb'
|
||||
gem 'recurly'
|
||||
gem 'sendgrid_toolkit', '>= 1.1.1'
|
||||
gem 'stripe'
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
|
||||
require 'influxdb'
|
||||
#require 'influxdb'
|
||||
|
||||
# monkey patch InfluxDB client to clear the queue when asked to stop
|
||||
=begin
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ module JamRuby
|
|||
has_and_belongs_to_many :teachers, :class_name => "JamRuby::Teacher", :join_table => "teachers_instruments"
|
||||
|
||||
def self.standard_list
|
||||
return Instrument.where('instruments.popularity > 0').order('instruments.popularity DESC, instruments.description ASC')
|
||||
return Instrument.where('instruments.popularity > 0').order('instruments.description ASC')
|
||||
end
|
||||
|
||||
def self.jam_track_list
|
||||
|
|
|
|||
|
|
@ -264,7 +264,6 @@ module JamRuby
|
|||
|
||||
start_day = first_day
|
||||
if last_session
|
||||
puts "last session causing a scoot"
|
||||
start_day = last_session.scheduled_start.to_date + 1
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -17,12 +17,9 @@ module JamRuby
|
|||
true_start = session.scheduled_start.to_date
|
||||
end
|
||||
|
||||
puts "filter out anything before start #{true_start}"
|
||||
# filter out anything before the start day
|
||||
times.select! { |time| time.to_date >= true_start }
|
||||
|
||||
puts "times #{times.length}"
|
||||
|
||||
result = nil
|
||||
if times.length == 0
|
||||
result = 0
|
||||
|
|
|
|||
|
|
@ -101,7 +101,7 @@ module JamRuby
|
|||
has_many :followers, :as => :followable, :class_name => "JamRuby::Follow", :dependent => :destroy
|
||||
|
||||
# text messages
|
||||
has_many :text_messages, :class_name => "JamRuby:TextMessage", :foreign_key => "target_user_id"
|
||||
has_many :text_messages, :class_name => "JamRuby::TextMessage", :foreign_key => "target_user_id"
|
||||
|
||||
# notifications
|
||||
has_many :notifications, :class_name => "JamRuby::Notification", :foreign_key => "target_user_id"
|
||||
|
|
|
|||
|
|
@ -44,6 +44,12 @@
|
|||
}
|
||||
resetForm();
|
||||
renderAccountProfile();
|
||||
|
||||
setTimeout(function() {
|
||||
var $header = $('#account-edit-profile-form h2')
|
||||
console.log("header ", $header, $screen)
|
||||
context.JK.HelpBubbleHelper.teacherMusicianProfile($header, $screen);
|
||||
}, 2000)
|
||||
}
|
||||
|
||||
function resetForm() {
|
||||
|
|
@ -80,8 +86,6 @@
|
|||
$('select#user_birth_date_2i', content_root).val(parseInt(birthDateMonth));
|
||||
$('select#user_birth_date_3i', content_root).val(parseInt(birthDateDay));
|
||||
}
|
||||
|
||||
context.JK.dropdown($('select', content_root));
|
||||
}
|
||||
|
||||
function populateAccountProfileLocation(userDetail, regions, cities) {
|
||||
|
|
@ -126,8 +130,6 @@
|
|||
|
||||
countrySelect.val(userCountry);
|
||||
countrySelect.attr("disabled", null)
|
||||
|
||||
context.JK.dropdown(countrySelect);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -169,8 +171,6 @@
|
|||
|
||||
countrySelect.val(userCountry);
|
||||
countrySelect.attr("disabled", null);
|
||||
|
||||
context.JK.dropdown(countrySelect);
|
||||
}
|
||||
|
||||
function populateRegions(regions, userRegion) {
|
||||
|
|
@ -193,8 +193,6 @@
|
|||
|
||||
regionSelect.val(userRegion)
|
||||
regionSelect.attr("disabled", null)
|
||||
|
||||
context.JK.dropdown(regionSelect);
|
||||
}
|
||||
|
||||
function populateCities(cities, userCity) {
|
||||
|
|
@ -217,8 +215,6 @@
|
|||
|
||||
citySelect.val(userCity);
|
||||
citySelect.attr("disabled", null);
|
||||
|
||||
context.JK.dropdown(citySelect);
|
||||
}
|
||||
|
||||
/****************** MAIN PORTION OF SCREEN *****************/
|
||||
|
|
@ -249,8 +245,6 @@
|
|||
selectLocation = new context.JK.SelectLocation(getCountryElement(), getRegionElement(), getCityElement(), app);
|
||||
selectLocation.load(userDetail.country, userDetail.state, userDetail.city)
|
||||
});
|
||||
|
||||
context.JK.dropdown($('select'), $screen);
|
||||
}
|
||||
|
||||
function navToAccount() {
|
||||
|
|
@ -436,7 +430,6 @@
|
|||
else {
|
||||
cityElement.children().remove();
|
||||
cityElement.append($(nilOptionStr).text(nilOptionText));
|
||||
context.JK.dropdown(cityElement);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -64,8 +64,6 @@
|
|||
$screen.find('select[name=skill_level]').val(userDetail.skill_level);
|
||||
$screen.find('select[name=concert_count]').val(userDetail.concert_count);
|
||||
$screen.find('select[name=studio_session_count]').val(userDetail.studio_session_count);
|
||||
|
||||
context.JK.dropdown($('select', $screen));
|
||||
}
|
||||
|
||||
function isUserInstrument(instrument, userInstruments) {
|
||||
|
|
@ -159,8 +157,6 @@
|
|||
var userDetail = userDetailResponse[0];
|
||||
populateAccountProfile(userDetail, instrumentsResponse[0]);
|
||||
});
|
||||
|
||||
context.JK.dropdown($('select'), $screen);
|
||||
}
|
||||
|
||||
function navigateTo(targetLocation) {
|
||||
|
|
|
|||
|
|
@ -28,8 +28,7 @@
|
|||
}
|
||||
|
||||
function bigHelpOptions(options) {
|
||||
return {positions: options.positions, offsetParent: options.offsetParent,
|
||||
width:options.width,
|
||||
var defaults = {
|
||||
spikeGirth: 15,
|
||||
spikeLength: 20,
|
||||
fill: 'white',
|
||||
|
|
@ -40,8 +39,27 @@
|
|||
fontSize: '20px',
|
||||
backgroundColor:'transparent',
|
||||
color:'#ed3618'}}
|
||||
|
||||
return $.extend({}, defaults, options)
|
||||
}
|
||||
|
||||
function bigHelpDarkOptions(options) {
|
||||
var defaults = {
|
||||
spikeGirth: 15,
|
||||
spikeLength: 20,
|
||||
fill: '#242323',
|
||||
cornerRadius:8,
|
||||
strokeWidth: 2,
|
||||
cssStyles: {
|
||||
fontWeight:'bold',
|
||||
fontSize: '20px',
|
||||
backgroundColor:'transparent',
|
||||
color:'#ed3618'}}
|
||||
|
||||
return $.extend({}, defaults, options)
|
||||
}
|
||||
|
||||
|
||||
function clearJamTrackGuideTimeout() {
|
||||
if(jamTrackGuideTimeout) {
|
||||
clearTimeout(jamTrackGuideTimeout);
|
||||
|
|
@ -135,4 +153,8 @@
|
|||
return context.JK.prodBubble($element, 'jamtrack-web-play', {}, bigHelpOptions({positions:['bottom'], offsetParent: $offsetParent}))
|
||||
}
|
||||
|
||||
helpBubble.teacherMusicianProfile = function($element, $offsetParent) {
|
||||
return context.JK.prodBubble($element, 'teacher-musician-profile', {}, bigHelpDarkOptions({spikeGirth:0, spikeLength: 0, duration:60000, offsetParent:$offsetParent, width:385, positions:['top', 'right', 'bottom']}))
|
||||
}
|
||||
|
||||
})(window, jQuery);
|
||||
|
|
@ -339,41 +339,32 @@ UserStore = context.UserStore
|
|||
<a href="/client#/teachers/search" className="button-orange">SEARCH TEACHERS</a>
|
||||
</div>
|
||||
</div>`
|
||||
learnMoreLink = `<a href="/landing/jamclass/students" className="button-orange" target="_blank">LEARN MORE</a>`
|
||||
learnMoreAboutJamClass = ` <p>
|
||||
JamClass is the best way to take music lessons, offering significant advantages over both traditional
|
||||
face-to-face lessons
|
||||
and online skype lessons.
|
||||
</p>`
|
||||
signupTestDrive = `<div className="jamclass-section">
|
||||
<h2>sign up for testdrive</h2>
|
||||
|
||||
<p>
|
||||
There are two awesome, painless ways to get started with JamClass.
|
||||
</p>
|
||||
if @state.user?['can_buy_test_drive?']
|
||||
rightContent = `<div className="jamclass-section">
|
||||
|
||||
<p>
|
||||
Sign up for TestDrive and take 4 full 30-minute lessons - one each from 4 different instructors - for just
|
||||
$49.99.
|
||||
You wouldn't marry the first person you date, right? Find the best teacher for you. It's the most important
|
||||
factor in the success for your lessons!
|
||||
</p>
|
||||
<p className="test-drive-main">
|
||||
JamClass is the best way to teach or take online music lessons. Learn more about <a href="/landing/jamclass/teachers" rel="external">teaching</a> or <a href="/landing/jamclass/students" rel="external">taking</a> lessons.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Or take one JamClass lesson free. It's on us! We're confident you'll take more.
|
||||
</p>
|
||||
<p>TestDrive offers 3 unbeatable options for students to try JamClass online lessons, and to find the best teacher:</p>
|
||||
<ol>
|
||||
<li>Take 4 full 30-minute lessons from 4 different teachers. Just <span className="price">$49.99</span>. Great for making sure you click with the best teacher for you.</li>
|
||||
<li>Take 2 full 30-minute lessons from 2 different teachers. Just <span className="price">$29.99</span>. Two lessons for the price of one or try two different teachers.</li>
|
||||
<li>Take 1 full 30-minute lesson for <span className="price">$9.99</span>. Great value for the online experience if you're sure which teacher you want.</li>
|
||||
</ol>
|
||||
|
||||
<p>
|
||||
Sign up for TestDrive using the button below, or to take one free lesson, search our teachers, and click the
|
||||
Book Free Lesson on your favorite.
|
||||
</p>
|
||||
<div className="actions">
|
||||
<a href="/client#/jamclass/lesson-payment/test-drive" className="button-orange">SIGN UP FOR TESTDRIVE</a>
|
||||
</div>
|
||||
</div>`
|
||||
else
|
||||
rightContent = `<div className="jamclass-section">
|
||||
<p>Read our <a href="https://jamkazam.desk.com/customer/en/portal/topics/926073-jamclass-online-music-lessons---for-students/articles" rel="external">JamClass user guide for students</a> to learn how to get the most out of your online lessons!
|
||||
</p>
|
||||
<p>If you have any problems, please email us at <a href="mailto:support@jamkazam.com">support@jamkazam.com</a>. We're here to help make your lessons a great experience.</p>
|
||||
</div>`
|
||||
|
||||
<div className="actions">
|
||||
<a href="/landing/jamclass/students" className="button-orange">SIGN UP FOR TESTDRIVE</a>
|
||||
or
|
||||
<a href="/client#/teachers/search" className="button-orange search-teachers-btn">SEARCH TEACHERS</a>
|
||||
</div>
|
||||
</div>`
|
||||
else
|
||||
searchTeachers = `<div className="search-teachers">
|
||||
<h2>stripe status</h2>
|
||||
|
|
@ -381,12 +372,6 @@ UserStore = context.UserStore
|
|||
<StripeConnect purpose='jamclass-home' user={this.state.user}/>
|
||||
</div>
|
||||
</div>`
|
||||
learnMoreLink = `<a href="/landing/jamclass/teachers" className="button-orange" target="_blank">LEARN MORE</a>`
|
||||
learnMoreAboutJamClass = ` <p>
|
||||
JamClass is the best way to teach music lessons, offering significant advantages over both traditional
|
||||
face-to-face lessons
|
||||
and online skype lessons.
|
||||
</p>`
|
||||
if this.state.user?
|
||||
teacherProfileUri = "/client#/profile/teacher/#{this.state.user.id}"
|
||||
pct = Math.round(this.state.user.teacher?.profile_pct)
|
||||
|
|
@ -400,10 +385,16 @@ UserStore = context.UserStore
|
|||
pctCompleteMsg = `<p className="pct-complete">Your teacher profile is {pct}% complete. The following sections of your profile are missing information. Click any of these links to view and add missing information:</p>`
|
||||
missingLinks = @constructMissingLinks(this.state.user)
|
||||
|
||||
signupTestDrive = `<div className="jamclass-section">
|
||||
rightContent = `<div className="jamclass-section">
|
||||
{pctCompleteMsg}
|
||||
{missingLinks}
|
||||
<a className="button-orange view-teacher-profile" onClick={this.viewTeacherProfile}>VIEW TEACHER PROFILE</a>
|
||||
<p>
|
||||
Read our <a href="https://jamkazam.desk.com/customer/en/portal/topics/926076-jamclass-online-music-lessons---for-teachers/articles" rel="external">JamClass user guide for teachers</a> to learn how to get the most out of the JamClass technology and marketplace.
|
||||
</p>
|
||||
<p>
|
||||
If you have any problems, please email us <a href="mailto:support@jamkazam.com" rel="external">support@jamkazam.com</a>. We're here to help you build your lesson business.
|
||||
</p>
|
||||
</div>`
|
||||
|
||||
classes = []
|
||||
|
|
@ -458,26 +449,7 @@ UserStore = context.UserStore
|
|||
{searchTeachers}
|
||||
</div>
|
||||
<div className="column column-right">
|
||||
<div className="jamclass-section">
|
||||
<h2>learn about jamclass</h2>
|
||||
|
||||
{learnMoreAboutJamClass}
|
||||
|
||||
<div className="actions">
|
||||
{learnMoreLink}
|
||||
</div>
|
||||
</div>
|
||||
{signupTestDrive}
|
||||
<div className="jamclass-section">
|
||||
<h2>get ready for your first lesson</h2>
|
||||
|
||||
<p>Be sure to set up and test the JamKazam app in an online music session a few days before
|
||||
your first lesson! We're happy to help, and we'll even get in a session with you to make sure everything
|
||||
is working properly. Ping us at <a href="mailto:support@jamkazam.com">support@jamkazam.com</a> anytime, and
|
||||
read our
|
||||
<a onClick={alert.bind('not yet')}>JamClass user guide</a> to learn how to use all the lesson features.
|
||||
</p>
|
||||
</div>
|
||||
{rightContent}
|
||||
</div>
|
||||
<br className="clearall"/>
|
||||
</div>`
|
||||
|
|
|
|||
|
|
@ -65,6 +65,8 @@ proficiencyDescriptionMap = {
|
|||
componentDidUpdate:() ->
|
||||
@starbox()
|
||||
|
||||
context.JK.popExternalLinks(@root)
|
||||
|
||||
starbox:() ->
|
||||
$ratings = @root.find('.ratings-box')
|
||||
$ratings.each((i, value) =>
|
||||
|
|
@ -176,15 +178,15 @@ proficiencyDescriptionMap = {
|
|||
embedId = @getYoutubeId(videoUrl)
|
||||
embedUrl = "//www.youtube.com/embed/#{embedId}"
|
||||
|
||||
video = `<a className="video-thumbnail" href={videoUrl} rel="external">
|
||||
<img className="play" src="/assets/content/icon_youtube_play.png" />
|
||||
</a>`
|
||||
|
||||
return `<div className="section introductory-video">
|
||||
<h3>Intro Video</h3>
|
||||
|
||||
<div className="section-content">
|
||||
<div className="video-wrapper">
|
||||
<div className="video-container">
|
||||
<iframe src={embedUrl} frameborder="0" allowfullscreen="allowfullscreen"/>
|
||||
</div>
|
||||
</div>
|
||||
{video}
|
||||
</div>
|
||||
</div>`
|
||||
|
||||
|
|
@ -285,16 +287,11 @@ proficiencyDescriptionMap = {
|
|||
studioSessions = "Has played an unknown # of studio sessions"
|
||||
|
||||
|
||||
gigTable = `<table className="jamtable giginfo">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>{gigs}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{studioSessions}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>`
|
||||
gigTable =
|
||||
`<div className="giginfo">
|
||||
<div className="gigs">{gigs}</div>
|
||||
<div>{studioSessions}</div>
|
||||
</div>`
|
||||
|
||||
display_instruments = []
|
||||
for instrument in user.instruments
|
||||
|
|
@ -320,7 +317,7 @@ proficiencyDescriptionMap = {
|
|||
|
||||
createPresence: (className, url, img) ->
|
||||
`<div key={className} className={className + "-presence logo online-presence-option"}>
|
||||
<a href={url}><img className="logo" src={img}/></a>
|
||||
<a href={url} rel="external"><img className="logo" src={img}/></a>
|
||||
</div>`
|
||||
|
||||
|
||||
|
|
@ -592,25 +589,25 @@ proficiencyDescriptionMap = {
|
|||
@prices()
|
||||
|
||||
profileLeft: () ->
|
||||
|
||||
if this.state.user.age?
|
||||
age = `<div className="age">{this.state.user.age} years old</div>`
|
||||
else
|
||||
age = null
|
||||
|
||||
`<div className="profile-about-left">
|
||||
<div className="left-content">
|
||||
<div className="location">
|
||||
<div className="city">{this.state.user.city}</div>
|
||||
<div className="state">{this.state.user.state}</div>
|
||||
<div className="country">{this.state.user.country}</div>
|
||||
<div className="age">{this.state.user.age} years old</div>
|
||||
{age}
|
||||
</div>
|
||||
|
||||
<div className="activity">
|
||||
<div className="last-signed-in">Last Signed In:</div>
|
||||
<div>{"very recently"}</div>
|
||||
</div>
|
||||
|
||||
<div className="backgroundCheck">
|
||||
<div className="background-check">Background Check:</div>
|
||||
<div className="last-verified">last verified</div>
|
||||
<div className="last-verified-time">3 months ago</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>`
|
||||
|
||||
|
|
|
|||
|
|
@ -36,12 +36,7 @@
|
|||
}
|
||||
},
|
||||
selectCountry: function (country) {
|
||||
if(this.useEasyDropdown) {
|
||||
this.$countries.easyDropDown('select', country, true)
|
||||
}
|
||||
else {
|
||||
this.$countries.val(country)
|
||||
}
|
||||
this.$countries.val(country)
|
||||
},
|
||||
ready: function() {
|
||||
return this.$deferred;
|
||||
|
|
@ -119,7 +114,7 @@
|
|||
// only update region
|
||||
if (selectedCountry) {
|
||||
// set city disabled while updating
|
||||
regionElement.attr('disabled', true).easyDropDown('disable');
|
||||
regionElement.attr('disabled', true)
|
||||
this.loadingRegionsData = true;
|
||||
|
||||
regionElement.children().remove()
|
||||
|
|
@ -146,7 +141,7 @@
|
|||
// only update cities
|
||||
if (selectedCountry && selectedRegion) {
|
||||
// set city disabled while updating
|
||||
cityElement.attr('disabled', true).easyDropDown('disable');
|
||||
cityElement.attr('disabled', true)
|
||||
this.loadingCitiesData = true;
|
||||
|
||||
cityElement.children().remove()
|
||||
|
|
@ -165,9 +160,6 @@
|
|||
else {
|
||||
cityElement.children().remove();
|
||||
cityElement.append($(this.nilOptionStr).text(this.nilOptionText));
|
||||
if(this.useEasyDropdown) {
|
||||
context.JK.dropdown(cityElement);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
|
@ -218,10 +210,7 @@
|
|||
}
|
||||
|
||||
this.$countries.val(this.country);
|
||||
this.$countries.attr("disabled", null).easyDropDown('enable');
|
||||
if(this.useEasyDropdown) {
|
||||
context.JK.dropdown(this.$countries);
|
||||
}
|
||||
this.$countries.attr("disabled", null)
|
||||
},
|
||||
|
||||
writeRegion: function (index, region) {
|
||||
|
|
@ -244,11 +233,7 @@
|
|||
$.each(regions, this.writeRegion.bind(this))
|
||||
|
||||
this.$regions.val(userRegion)
|
||||
this.$regions.attr("disabled", null).easyDropDown('enable');
|
||||
|
||||
if(this.useEasyDropdown) {
|
||||
context.JK.dropdown(this.$regions);
|
||||
}
|
||||
this.$regions.attr("disabled", null)
|
||||
},
|
||||
|
||||
writeCity: function (index, city) {
|
||||
|
|
@ -271,11 +256,7 @@
|
|||
$.each(cities, this.writeCity.bind(this))
|
||||
|
||||
this.$cities.val(userCity)
|
||||
this.$cities.attr("disabled", null).easyDropDown('enable');
|
||||
|
||||
if(this.useEasyDropdown) {
|
||||
context.JK.dropdown(this.$cities);
|
||||
}
|
||||
this.$cities.attr("disabled", null)
|
||||
},
|
||||
|
||||
regionListFailure: function (jqXHR, textStatus, errorThrown) {
|
||||
|
|
|
|||
|
|
@ -133,8 +133,6 @@
|
|||
options = {};
|
||||
}
|
||||
|
||||
|
||||
|
||||
if(options.persist) {
|
||||
|
||||
var timeout = null;
|
||||
|
|
@ -178,6 +176,7 @@
|
|||
holder = holder.append(helpText).html()
|
||||
}
|
||||
|
||||
console.log("hoverBubble: " + options.duration)
|
||||
context.JK.hoverBubble($element, holder, options);
|
||||
}
|
||||
|
||||
|
|
@ -215,6 +214,7 @@
|
|||
options['clickAnywhereToClose'] = false
|
||||
if(!options['duration']) options['duration'] = 6000;
|
||||
|
||||
console.log("options: " + options.duration)
|
||||
var existingTimer = $element.data("prodTimer");
|
||||
if(existingTimer) {
|
||||
clearTimeout(existingTimer);
|
||||
|
|
@ -1154,6 +1154,7 @@
|
|||
if(!$parent) $parent = $('body');
|
||||
// Allow any a link with a rel="external" attribute to launch
|
||||
// the link in the default browser, using jamClient:
|
||||
$parent.off('click');
|
||||
$parent.on('click', 'a[rel="external"]', popOpenBrowser);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -63,6 +63,23 @@ $labelFontSize: 12px;
|
|||
font-size: $labelFontSize;
|
||||
}
|
||||
|
||||
|
||||
select {
|
||||
|
||||
border: 0 !important; /*Removes border*/
|
||||
-webkit-appearance: none; /*Removes default chrome and safari style*/
|
||||
-moz-appearance: none; /* Removes Default Firefox style*/
|
||||
appearance: none;
|
||||
background: url('/assets/down_arrow_black_pad.png') no-repeat; /*Adds background-image*/
|
||||
background-position: right center; /*Position of the background-image*/
|
||||
text-indent: 0.01px; /* Removes default arrow from firefox*/
|
||||
text-overflow: ""; /*Removes default arrow from firefox*/
|
||||
cursor: pointer;
|
||||
padding-right:20px;
|
||||
&::-ms-expand {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
@mixin border_box_sizing {
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
|
|
|
|||
|
|
@ -62,6 +62,26 @@ body.jam, body.web, .dialog{
|
|||
font-size:20px;
|
||||
}
|
||||
}
|
||||
|
||||
a {
|
||||
color:$latencyBadgeFair;
|
||||
}
|
||||
}
|
||||
|
||||
.big-dark-help {
|
||||
font-size:20px;
|
||||
color: $ColorTextTypical;
|
||||
p {color:$ColorTextTypical}
|
||||
|
||||
&.jamtrack-web-play {
|
||||
p {
|
||||
font-size:20px;
|
||||
}
|
||||
}
|
||||
|
||||
a {
|
||||
color:$latencyBadgeFair;
|
||||
}
|
||||
}
|
||||
|
||||
.larger-text {
|
||||
|
|
|
|||
|
|
@ -11,6 +11,14 @@
|
|||
@include border_box_sizing;
|
||||
}
|
||||
|
||||
ol {
|
||||
li {
|
||||
margin-left:15px;
|
||||
margin-bottom:20px;
|
||||
list-style:decimal;
|
||||
color:$ColorTextTypical;
|
||||
}
|
||||
}
|
||||
h2 {
|
||||
font-size: 20px;
|
||||
font-weight:700;
|
||||
|
|
@ -29,6 +37,16 @@
|
|||
float:right;
|
||||
width:30%;
|
||||
padding-left:20px;
|
||||
|
||||
.jamclass-section {
|
||||
padding-top:36px;
|
||||
}
|
||||
}
|
||||
span.price {
|
||||
color:white;
|
||||
}
|
||||
.test-drive-main {
|
||||
margin-bottom:30px !important;
|
||||
}
|
||||
p {
|
||||
line-height:125% !important;
|
||||
|
|
@ -166,6 +184,10 @@
|
|||
.field.stripe-connect label {
|
||||
color: $ColorTextTypical;
|
||||
}
|
||||
button.stripe-connect {
|
||||
margin-top:20px;
|
||||
}
|
||||
|
||||
.field.stripe-connect .view-payments {
|
||||
display:block;
|
||||
margin: 0 auto;
|
||||
|
|
@ -174,7 +196,7 @@
|
|||
.view-teacher-profile {
|
||||
display:block;
|
||||
width:112px;
|
||||
margin: 20px auto 0;
|
||||
margin: 30px auto 50px;
|
||||
}
|
||||
a.missing-profile {
|
||||
display:block;
|
||||
|
|
|
|||
|
|
@ -112,15 +112,30 @@
|
|||
text-align:right;
|
||||
}
|
||||
}
|
||||
&.giginfo {
|
||||
top: 10px;
|
||||
position: relative;
|
||||
min-width: 200px;
|
||||
width:auto;
|
||||
}
|
||||
|
||||
.giginfo {
|
||||
padding-top: 20px;
|
||||
position: relative;
|
||||
min-width: 200px;
|
||||
width:auto;
|
||||
.gigs {
|
||||
margin-bottom:10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.video-thumbnail {
|
||||
width:100%;
|
||||
padding-top:53.33%;
|
||||
margin:25px 0;
|
||||
background:url(//img.youtube.com/vi/askHvcCoNfw/maxresdefault.jpg) no-repeat center;
|
||||
|
||||
img.play {
|
||||
margin:-35.75% auto 0;
|
||||
}
|
||||
}
|
||||
|
||||
.online-presence-option, .performance-sample-option {
|
||||
display:block;
|
||||
vertical-align:middle;
|
||||
|
|
|
|||
|
|
@ -107,3 +107,5 @@
|
|||
margin-bottom: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ end
|
|||
# give back more info if the user being fetched is yourself
|
||||
|
||||
if current_user && @user == current_user
|
||||
attributes :email, :original_fpfile, :cropped_fpfile, :crop_selection, :session_settings, :show_whats_next, :show_whats_next_count, :subscribe_email, :auth_twitter, :new_notifications, :sales_count, :reuse_card, :purchased_jamtracks_count, :first_downloaded_client_at, :created_at, :first_opened_jamtrack_web_player, :gifted_jamtracks, :has_redeemable_jamtrack, :remaining, :has_stored_credit_card?, :remaining_test_drives
|
||||
attributes :email, :original_fpfile, :cropped_fpfile, :crop_selection, :session_settings, :show_whats_next, :show_whats_next_count, :subscribe_email, :auth_twitter, :new_notifications, :sales_count, :reuse_card, :purchased_jamtracks_count, :first_downloaded_client_at, :created_at, :first_opened_jamtrack_web_player, :gifted_jamtracks, :has_redeemable_jamtrack, :remaining, :has_stored_credit_card?, :remaining_test_drives, :can_buy_test_drive?
|
||||
|
||||
node :owned_school_id do |user|
|
||||
user.owned_school.id if user.owned_school
|
||||
|
|
|
|||
|
|
@ -64,13 +64,13 @@
|
|||
<select id="gender" name="gender" class="w80">
|
||||
<option value='M'>Male</option>
|
||||
<option value='F'>Female</option>
|
||||
<option>-</option>
|
||||
<option value="">-</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="field left w45 birth_date">
|
||||
<label>Birth Date:</label>
|
||||
<%= date_select("user", "birth_date", :use_short_month => true, :start_year => 1900, :end_year => Time.now.year - 18, :order => [:month, :day, :year], :default => -25.years.from_now, :html=>{:class => "account-profile-birthdate"} ) %>
|
||||
<%= date_select("user", "birth_date", :use_short_month => true, :start_year => 1900, :end_year => Time.now.year - 18, :order => [:month, :day, :year], :default => -30.years.from_now, :html=>{:class => "account-profile-birthdate"} ) %>
|
||||
</div>
|
||||
|
||||
<br class="clearall"/>
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@
|
|||
<div class="field left w35">
|
||||
<label>Status</label>
|
||||
<select name="skill_level">
|
||||
<option value="">select an option</option>
|
||||
<option value='1'>Amateur</option>
|
||||
<option value='2'>Professional</option>
|
||||
</select>
|
||||
|
|
@ -43,6 +44,7 @@
|
|||
<div class="field left w25">
|
||||
<label>Concert Gigs Played</label>
|
||||
<select name="concert_count">
|
||||
<option value="">select an option</option>
|
||||
<option value='0'>zero</option>
|
||||
<option value='1'>under 10</option>
|
||||
<option value='2'>10 to 50</option>
|
||||
|
|
@ -54,6 +56,7 @@
|
|||
<div class="field left w25">
|
||||
<label>Studio Sessions Played</label>
|
||||
<select name="studio_session_count">
|
||||
<option value="">select an option</option>
|
||||
<option value='0'>zero</option>
|
||||
<option value='1'>under 10</option>
|
||||
<option value='2'>10 to 50</option>
|
||||
|
|
|
|||
|
|
@ -385,4 +385,11 @@ script type="text/template" id="template-help-no-audio-help"
|
|||
|
||||
p Usually audio streaming just works, but in some cases router configurations do not allow audio streams to reach your computer.
|
||||
|
||||
p This article <a href="https://jamkazam.desk.com/customer/portal/articles/1716139-what-to-do-if-you-cannot-pass-the-network-test" rel="external">describes how you can configure your router</a> to allow the streamed audio to get through to you.
|
||||
p This article <a href="https://jamkazam.desk.com/customer/portal/articles/1716139-what-to-do-if-you-cannot-pass-the-network-test" rel="external">describes how you can configure your router</a> to allow the streamed audio to get through to you.
|
||||
|
||||
|
||||
script type="text/template" id="template-help-teacher-musician-profile"
|
||||
.teacher-musician-profile.big-dark-help
|
||||
p
|
||||
a href="https://jamkazam.desk.com/customer/en/portal/articles/2405835-creating-your-teacher-profile#EditProfile" rel="external" Click here
|
||||
| for a help article that explains how to fill out your musician profile.
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe "Book Single Recurring Lesson", :js => true, :type => :feature, :capybara_feature => true do
|
||||
describe "Book Monthly Recurring Lesson", :js => true, :type => :feature, :capybara_feature => true do
|
||||
|
||||
subject { page }
|
||||
|
||||
|
|
@ -40,7 +40,8 @@ describe "Book Single Recurring Lesson", :js => true, :type => :feature, :capyba
|
|||
|
||||
visit "/client#/teachers/search"
|
||||
|
||||
Timecop.travel(Date.new(2016, 04, 01))
|
||||
# let's do a time half-way into the month, so we can prove some pro-rating
|
||||
Timecop.travel(Date.new(2016, 04, 15))
|
||||
|
||||
find('.teacher-search-result[data-teacher-id="' + teacher_user.id + '"] .try-normal').trigger(:click)
|
||||
|
||||
|
|
@ -185,7 +186,14 @@ describe "Book Single Recurring Lesson", :js => true, :type => :feature, :capyba
|
|||
teacher_distribution = lesson_package_purchase.teacher_distribution
|
||||
teacher_distribution.amount_in_cents.should eql 3000 / 2
|
||||
teacher_distribution.ready.should be_true
|
||||
teacher_distribution.ready.should be_true
|
||||
teacher_distribution.distributed.should be_false
|
||||
lesson_package_purchase.lesson_payment_charge.billed.should be_true
|
||||
lesson_package_purchase.lesson_payment_charge.amount_in_cents.should eql 3000/2 + (3000/2 * 0.0825).round
|
||||
lesson_package_purchase.lesson_payment_charge.fee_in_cents.should eql 0
|
||||
lesson_package_purchase.lesson_payment_charge.stripe_charge_id.should_not be_nil
|
||||
lesson_package_purchase.lesson_payment_charge.post_processed.should be_true
|
||||
lesson_package_purchase.lesson_payment_charge.sent_billing_notices.should be_true
|
||||
lesson_package_purchase.lesson_payment_charge.billing_attempts.should eql 1
|
||||
|
||||
lesson_session1.reload
|
||||
lesson_session1.teacher_distribution.should be_nil
|
||||
|
|
@ -200,11 +208,13 @@ describe "Book Single Recurring Lesson", :js => true, :type => :feature, :capyba
|
|||
lesson_package_purchase = user.lesson_purchases.last
|
||||
teacher_distribution = lesson_package_purchase.teacher_distribution
|
||||
teacher_distribution.amount_in_cents.should eql 3000
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
teacher_distribution.ready.should be_true
|
||||
lesson_package_purchase.lesson_payment_charge.amount_in_cents.should eql 3000 + (3000 * 0.0825).round
|
||||
lesson_package_purchase.lesson_payment_charge.fee_in_cents.should eql 0
|
||||
lesson_package_purchase.lesson_payment_charge.stripe_charge_id.should_not be_nil
|
||||
lesson_package_purchase.lesson_payment_charge.post_processed.should be_true
|
||||
lesson_package_purchase.lesson_payment_charge.sent_billing_notices.should be_true
|
||||
lesson_package_purchase.lesson_payment_charge.billing_attempts.should eql 1
|
||||
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -174,6 +174,13 @@ describe "Book Single Recurring Lesson", :js => true, :type => :feature, :capyba
|
|||
lesson_session1.billing_attempts.should be_true
|
||||
lesson_session1.billed.should eql true
|
||||
lesson_session1.success.should be_true
|
||||
lesson_session1.lesson_payment_charge.billed.should be_true
|
||||
lesson_session1.lesson_payment_charge.amount_in_cents.should eql 3000
|
||||
lesson_session1.lesson_payment_charge.fee_in_cents.should eql 0
|
||||
lesson_session1.lesson_payment_charge.stripe_charge_id.should_not be_nil
|
||||
lesson_session1.lesson_payment_charge.post_processed.should be_true
|
||||
lesson_session1.lesson_payment_charge.sent_billing_notices.should be_true
|
||||
lesson_session1.lesson_payment_charge.billing_attempts.should eql 1
|
||||
|
||||
LessonBooking.hourly_check
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue