Browse Source

Added city radius provider option

development
Godwin 8 years ago
parent
commit
39b5d4b901
  1. 19
      app/controllers/conference_administration_controller.rb
  2. 2
      app/controllers/conferences_controller.rb
  3. 18
      app/helpers/application_helper.rb
  4. 2
      app/helpers/registration_helper.rb
  5. 4
      app/models/conference.rb
  6. 12
      app/views/conference_administration/_providers.html.haml
  7. 3
      config/locales/en.yml
  8. 3
      db/schema.rb

19
app/controllers/conference_administration_controller.rb

@ -106,6 +106,8 @@ class ConferenceAdministrationController < ApplicationController
end end
def administrate_providers def administrate_providers
@conditions = Conference.default_provider_conditions.deep_merge(
@this_conference.provider_conditions || {})
end end
def administrate_payment_message def administrate_payment_message
@ -1195,6 +1197,23 @@ class ConferenceAdministrationController < ApplicationController
return false return false
end end
def admin_update_providers
case params[:button]
when 'save_distance'
@this_conference.provider_conditions ||= Conference.default_provider_conditions
@this_conference.provider_conditions['distance'] = {
'number' => params[:distance_number],
'unit' => params[:distance_unit]
}
@this_conference.save
set_success_message :distance_saved
return false
end
do_404
return false
end
def get_empty(hash, keys) def get_empty(hash, keys)
keys = [keys] unless keys.is_a?(Array) keys = [keys] unless keys.is_a?(Array)
keys.each do | key | keys.each do | key |

2
app/controllers/conferences_controller.rb

@ -330,7 +330,7 @@ class ConferencesController < ApplicationController
steps -= [:questions] unless status == :open steps -= [:questions] unless status == :open
steps -= [:payment] unless status == :open && conference.paypal_email_address.present? && conference.paypal_username.present? && conference.paypal_password.present? && conference.paypal_signature.present? steps -= [:payment] unless status == :open && conference.paypal_email_address.present? && conference.paypal_username.present? && conference.paypal_password.present? && conference.paypal_signature.present?
if @registration.present? if @registration.present?
if @registration.city_id == conference.city_id if view_context.potential_provider(@registration)
steps -= [:questions] steps -= [:questions]
# if this is a housing provider that is not attending the conference, remove these steps # if this is a housing provider that is not attending the conference, remove these steps

18
app/helpers/application_helper.rb

@ -2191,6 +2191,24 @@ module ApplicationHelper
} }
end end
def potential_provider(registration)
return false unless registration.present? && registration.city.present? && registration.conference.present?
conditions = registration.conference.provider_conditions ||
Conference.default_provider_conditions
return city_distance_less_than(registration.conference.city, registration.city,
(conditions['distance']['number'] || '0').to_i,
conditions['distance']['unit'])
end
def city_distance_less_than(city1, city2, max_distance, unit)
return false if city1.nil? || city2.nil?
return true if city1.id == city2.id
return false if max_distance < 1
return Geocoder::Calculations.distance_between(
[city1.latitude, city1.longitude], [city2.latitude, city2.longitude],
units: unit.to_sym) < max_distance
end
private private
def _original_content(value, lang) def _original_content(value, lang)
content_tag(:div, ( content_tag(:div, (

2
app/helpers/registration_helper.rb

@ -8,7 +8,7 @@ module RegistrationHelper
completed_steps = registration.steps_completed || [] completed_steps = registration.steps_completed || []
registration_complete = registration_complete?(registration) registration_complete = registration_complete?(registration)
if registration.city_id == registration.conference.city_id if potential_provider(registration)
steps -= [:questions] steps -= [:questions]
else else
steps -= [:hosting] steps -= [:hosting]

4
app/models/conference.rb

@ -153,4 +153,8 @@ class Conference < ActiveRecord::Base
Conference.conference_types[(type || :annual).to_sym][:title].gsub('%{city}', city).gsub('%{year}', year.to_s) Conference.conference_types[(type || :annual).to_sym][:title].gsub('%{city}', city).gsub('%{year}', year.to_s)
end end
def self.default_provider_conditions
{ 'distance' => { 'number' => 0, 'unit' => 'mi' }}
end
end end

12
app/views/conference_administration/_providers.html.haml

@ -1,2 +1,10 @@
= columns(medium: 12) do = admin_update_form do
TO COME = columns(medium: 12) do
%h3=_'articles.admin.housing.headings.provider_distance', :t
%p=_'articles.admin.housing.descriptions.provider_distance', :p, vars: { city: @this_conference.city_name }
= columns(medium: 12, class: 'flex-column') do
= numberfield :distance_number, @conditions['distance']['number'], step: 1, min: 0, stretch: true, label: false
= selectfield :distance_unit, @conditions['distance']['unit'], [:km, :mi], label: false, inline: true
= columns(medium: 12) do
.actions.right
= button_tag :save, value: :save_distance

3
config/locales/en.yml

@ -243,6 +243,7 @@ en:
org_member_removed: User removed from organization org_member_removed: User removed from organization
administrator_added: Administrator added to conference administrator_added: Administrator added to conference
administrator_removed: Administrator removed from conference administrator_removed: Administrator removed from conference
distance_saved: Provider options updated
helpers: helpers:
select: select:
prompt: Please select prompt: Please select
@ -999,8 +1000,10 @@ en:
arrival_departure: In City arrival_departure: In City
providers: Housing Providers providers: Housing Providers
housing: Arrange Housing housing: Arrange Housing
provider_distance: Distance from host city
descriptions: descriptions:
providers: Although most housing providers shuold be encouraged to supply their own details through the registration process, you can add and edit housing provider details manually here. providers: Although most housing providers shuold be encouraged to supply their own details through the registration process, you can add and edit housing provider details manually here.
provider_distance: Any registrant who enters their location in the same city as the conference will get a housing provider form during registration instead of a guest form. If you want to consider surrounding cities as well, enter the distance from %{city} that you wish to be included as providers. Cities are measured from center to center.
housing: Pair each housing provider with a list of guests. housing: Pair each housing provider with a list of guests.
locations: locations:
heading: Locations heading: Locations

3
db/schema.rb

@ -11,7 +11,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20170110061048) do ActiveRecord::Schema.define(version: 20170111013903) do
# These are extensions that must be enabled in order to support this database # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
@ -180,6 +180,7 @@ ActiveRecord::Schema.define(version: 20170110061048) do
t.integer "city_id" t.integer "city_id"
t.boolean "is_public" t.boolean "is_public"
t.boolean "is_featured" t.boolean "is_featured"
t.json "provider_conditions"
end end
create_table "delayed_jobs", force: :cascade do |t| create_table "delayed_jobs", force: :cascade do |t|

Loading…
Cancel
Save