Restyled registration add popover
This commit is contained in:
parent
120554d4e7
commit
d70795e72c
@ -393,7 +393,7 @@ body.expanded-element {
|
||||
background-color: rgba($black, 0.5);
|
||||
|
||||
&.open {
|
||||
display: block;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.modal-edit-overlay {
|
||||
@ -407,23 +407,39 @@ body.expanded-element {
|
||||
|
||||
table {
|
||||
margin: 0;
|
||||
background-color: $white;
|
||||
|
||||
td.empty {
|
||||
background-color: #F8F8F8;
|
||||
border-bottom-color: #F8F8F8;
|
||||
}
|
||||
}
|
||||
|
||||
thead th {
|
||||
text-align: center;
|
||||
font-size: 1.125em;
|
||||
color: $white;
|
||||
border-color: lighten($colour-1, 12.5%);
|
||||
background-color: $colour-1;
|
||||
}
|
||||
|
||||
tbody th {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.modal-edit-content {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
max-width: 40em;
|
||||
position: relative;
|
||||
min-width: 50em;
|
||||
max-width: 75em;
|
||||
margin: auto;
|
||||
overflow: auto;
|
||||
z-index: 1002;
|
||||
background-color: #F8F8F8;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
table {
|
||||
background-color: $white;
|
||||
.actions {
|
||||
margin: 1em 1em 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -481,6 +481,7 @@ class ConferencesController < ApplicationController
|
||||
:email,
|
||||
:status,
|
||||
:is_attending,
|
||||
:is_subscribed,
|
||||
:registration_fees_paid,
|
||||
:date,
|
||||
:city,
|
||||
@ -502,7 +503,8 @@ class ConferencesController < ApplicationController
|
||||
:last_day,
|
||||
:address,
|
||||
:phone
|
||||
] + ConferenceRegistration.all_spaces + [
|
||||
] + ConferenceRegistration.all_spaces +
|
||||
ConferenceRegistration.all_considerations + [
|
||||
:notes
|
||||
],
|
||||
column_types: {
|
||||
@ -524,7 +526,8 @@ class ConferencesController < ApplicationController
|
||||
email: 'forms.labels.generic.email',
|
||||
status: 'forms.labels.generic.registration_status',
|
||||
is_attending: 'articles.conference_registration.terms.is_attending',
|
||||
city: 'forms.labels.generic.location',
|
||||
is_subscribed: 'articles.user_settings.headings.email_subscribe',
|
||||
city: 'forms.labels.generic.event_location',
|
||||
date: 'articles.conference_registration.terms.Date',
|
||||
preferred_language: 'articles.conference_registration.terms.Preferred_Languages',
|
||||
arrival: 'forms.labels.generic.arrival',
|
||||
@ -536,13 +539,16 @@ class ConferencesController < ApplicationController
|
||||
companion_email: 'articles.conference_registration.terms.companion_email',
|
||||
allergies: 'forms.labels.generic.allergies',
|
||||
registration_fees_paid: 'articles.conference_registration.headings.fees_paid',
|
||||
other: 'articles.conference_registration.headings.other',
|
||||
other: 'forms.labels.generic.other_notes',
|
||||
can_provide_housing: 'articles.conference_registration.can_provide_housing',
|
||||
first_day: 'forms.labels.generic.first_day',
|
||||
last_day: 'forms.labels.generic.last_day',
|
||||
notes: 'forms.labels.generic.notes',
|
||||
phone: 'forms.labels.generic.phone',
|
||||
address: 'forms.labels.generic.address'
|
||||
address: 'forms.labels.generic.address',
|
||||
contact_info: 'articles.conference_registration.headings.contact_info',
|
||||
questions: 'articles.conference_registration.headings.questions',
|
||||
hosting: 'articles.conference_registration.headings.hosting'
|
||||
},
|
||||
data: []
|
||||
}
|
||||
@ -553,6 +559,9 @@ class ConferencesController < ApplicationController
|
||||
@excel_data[:column_types][s] = :number
|
||||
@excel_data[:keys][s] = "forms.labels.generic.#{s.to_s}"
|
||||
end
|
||||
ConferenceRegistration.all_considerations.each do |c|
|
||||
@excel_data[:keys][c] = "articles.conference_registration.host.considerations.#{c.to_s}"
|
||||
end
|
||||
@registrations.each do | r |
|
||||
user = r.user_id ? User.where(id: r.user_id).first : nil
|
||||
if user.present?
|
||||
@ -572,10 +581,10 @@ class ConferencesController < ApplicationController
|
||||
email: user.email || '',
|
||||
status: (view_context._"articles.conference_registration.terms.registration_status.#{(steps.include? 'questions') ? 'registered' : ((steps.include? 'contact_info') ? 'preregistered' : 'unregistered')}"),
|
||||
is_attending: (view_context._"articles.conference_registration.questions.bike.#{r.is_attending == 'n' ? 'no' : 'yes'}"),
|
||||
is_subscribed: user.is_subscribed == false ? (view_context._'articles.conference_registration.questions.bike.no') : '',
|
||||
date: r.created_at ? r.created_at.strftime("%F %T") : '',
|
||||
city: r.city || '',
|
||||
preferred_language: user.locale.present? ? (view_context.language_name user.locale) : '',
|
||||
#languages: ((r.languages || []).map { |x| view_context.language_name x }).join(', ').to_s,
|
||||
arrival: r.arrival ? r.arrival.strftime("%F %T") : '',
|
||||
departure: r.departure ? r.departure.strftime("%F %T") : '',
|
||||
housing: r.housing.present? ? (view_context._"articles.conference_registration.questions.housing.#{r.housing}") : '',
|
||||
@ -600,6 +609,7 @@ class ConferencesController < ApplicationController
|
||||
departure: r.departure.present? ? r.departure.to_date : nil,
|
||||
preferred_language: user.locale,
|
||||
is_attending: r.is_attending != 'n',
|
||||
is_subscribed: user.is_subscribed,
|
||||
can_provide_housing: r.can_provide_housing,
|
||||
first_day: availability[0].present? ? availability[0].to_date : nil,
|
||||
last_day: availability[1].present? ? availability[1].to_date : nil
|
||||
@ -621,6 +631,11 @@ class ConferencesController < ApplicationController
|
||||
space = (housing_data['space'] || {})[s.to_s]
|
||||
data[s] = space.present? ? space.to_i : nil
|
||||
end
|
||||
ConferenceRegistration.all_considerations.each do |c|
|
||||
consideration = (housing_data['considerations'] || []).include?(c.to_s)
|
||||
data[c] = (consideration ? (view_context._'articles.conference_registration.questions.bike.yes') : '')
|
||||
data[:raw_values][c] = consideration
|
||||
end
|
||||
@excel_data[:data] << data
|
||||
end
|
||||
end
|
||||
@ -647,6 +662,7 @@ class ConferencesController < ApplicationController
|
||||
(view_context.language_name l), l
|
||||
] },
|
||||
is_attending: [yes_no.first],
|
||||
is_subscribed: [yes_no.last],
|
||||
can_provide_housing: yes_no,
|
||||
first_day: view_context.conference_days_options_list(:before),
|
||||
last_day: view_context.conference_days_options_list(:after)
|
||||
@ -656,6 +672,11 @@ class ConferencesController < ApplicationController
|
||||
[(view_context._"articles.conference_registration.questions.bike.yes"), true]
|
||||
]
|
||||
end
|
||||
ConferenceRegistration.all_considerations.each do | c |
|
||||
@column_options[c.to_sym] = [
|
||||
[(view_context._"articles.conference_registration.questions.bike.yes"), true]
|
||||
]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -821,6 +842,9 @@ class ConferencesController < ApplicationController
|
||||
when :preferred_language
|
||||
registration.user.locale = value
|
||||
user_changed = true
|
||||
when :is_subscribed
|
||||
registration.user.is_subscribed = (value != "false")
|
||||
user_changed = true
|
||||
when :is_attending
|
||||
registration.is_attending = value.present? ? 'y' : 'n'
|
||||
when :address, :phone, :first_day, :last_day, :notes
|
||||
@ -838,6 +862,14 @@ class ConferencesController < ApplicationController
|
||||
end
|
||||
user_changed = true
|
||||
end
|
||||
elsif ConferenceRegistration.all_considerations.include? key.to_sym
|
||||
registration.housing_data ||= {}
|
||||
registration.housing_data['considerations'] ||= {}
|
||||
if value.present?
|
||||
registration.housing_data['considerations'] |= [key]
|
||||
else
|
||||
registration.housing_data['considerations'] -= [key]
|
||||
end
|
||||
elsif ConferenceRegistration.all_spaces.include? key.to_sym
|
||||
registration.housing_data ||= {}
|
||||
registration.housing_data['space'] ||= {}
|
||||
|
@ -1542,20 +1542,67 @@ module ApplicationHelper
|
||||
attributes = { class: options[:class], id: options[:id] }
|
||||
attributes[:data] = { 'update-url' => options[:editable] } if options[:editable].present?
|
||||
|
||||
content_tag(:table, attributes) do
|
||||
(content_tag(:tbody) do
|
||||
rows = ''
|
||||
excel_data[:columns].each do |column|
|
||||
if (excel_data[:column_types] || {})[column] != :table && ((options[:column_names] || []).include? column)
|
||||
rows += content_tag(:tr, { class: 'always-edit', data: { key: '' } }) do
|
||||
attributes = { class: [excel_data[:column_types][column]], data: { 'column-id' => column } }
|
||||
columns = content_tag(:th, excel_data[:keys][column].present? ? _(excel_data[:keys][column]) : '') +
|
||||
edit_column(nil, column, nil, attributes, excel_data, options)
|
||||
if options[:column_names].is_a? Hash
|
||||
return content_tag(:table, attributes) do
|
||||
max_columns = 0
|
||||
column_names = {}
|
||||
(content_tag(:thead) do
|
||||
headers = ''
|
||||
options[:column_names].each do | header_name, columns |
|
||||
column_names[header_name] ||= []
|
||||
headers += content_tag(:th, excel_data[:keys][header_name].present? ? _(excel_data[:keys][header_name]) : '', colspan: 2)
|
||||
row_count = columns.size
|
||||
columns.each do | column |
|
||||
column_names[header_name] << column
|
||||
if (options[:row_spans] || {})[column].present?
|
||||
row_count += (options[:row_spans][column] - 1)
|
||||
for i in 1...options[:row_spans][column]
|
||||
column_names[header_name] << false
|
||||
end
|
||||
end
|
||||
end
|
||||
max_columns = row_count if row_count > max_columns
|
||||
end
|
||||
content_tag(:tr, headers.html_safe)
|
||||
end) + (content_tag(:tbody) do
|
||||
rows = ''
|
||||
|
||||
for i in 0...max_columns
|
||||
columns_html = ''
|
||||
column_names.each do | header_name, columns |
|
||||
column = columns[i]
|
||||
if column.present?
|
||||
attributes = { class: [excel_data[:column_types][column]], data: { 'column-id' => column } }
|
||||
if (options[:row_spans] || {})[column].present?
|
||||
attributes[:rowspan] = options[:row_spans][column]
|
||||
end
|
||||
columns_html += content_tag(:th, excel_data[:keys][column].present? ? _(excel_data[:keys][column]) : '', rowspan: attributes[:rowspan]) +
|
||||
edit_column(nil, column, nil, attributes, excel_data, options)
|
||||
elsif column != false
|
||||
columns_html += content_tag(:td, ' ', colspan: 2, class: :empty)
|
||||
end
|
||||
end
|
||||
rows += content_tag(:tr, columns_html.html_safe, { class: 'always-edit', data: { key: '' } })
|
||||
end
|
||||
rows.html_safe
|
||||
end)
|
||||
end
|
||||
else
|
||||
return content_tag(:table, attributes) do
|
||||
(content_tag(:tbody) do
|
||||
rows = ''
|
||||
excel_data[:columns].each do |column|
|
||||
if (excel_data[:column_types] || {})[column] != :table && ((options[:column_names] || []).include? column)
|
||||
rows += content_tag(:tr, { class: 'always-edit', data: { key: '' } }) do
|
||||
attributes = { class: [excel_data[:column_types][column]], data: { 'column-id' => column } }
|
||||
columns = content_tag(:th, excel_data[:keys][column].present? ? _(excel_data[:keys][column]) : '') +
|
||||
edit_column(nil, column, nil, attributes, excel_data, options)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
rows.html_safe
|
||||
end)
|
||||
rows.html_safe
|
||||
end)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -1777,12 +1824,49 @@ module ApplicationHelper
|
||||
end
|
||||
|
||||
def registrations_edit_table_options
|
||||
options = registrations_table_options
|
||||
options[:id] = 'create-table'
|
||||
options[:class] << 'always-editing'
|
||||
options[:column_names] += [:name, :email]
|
||||
options[:required_columns] = [:name, :email]
|
||||
return options
|
||||
{
|
||||
id: 'create-table',
|
||||
class: ['registrations', 'admin-edit', 'always-editing'],
|
||||
primary_key: :id,
|
||||
column_names: {
|
||||
contact_info: [
|
||||
:name,
|
||||
:email,
|
||||
:is_subscribed,
|
||||
:city,
|
||||
:preferred_language
|
||||
] + User.AVAILABLE_LANGUAGES.map { |l| "language_#{l}".to_sym },
|
||||
questions: [
|
||||
:registration_fees_paid,
|
||||
:is_attending,
|
||||
:arrival,
|
||||
:departure,
|
||||
:housing,
|
||||
:bike,
|
||||
:food,
|
||||
:companion_email,
|
||||
:allergies,
|
||||
:other
|
||||
],
|
||||
hosting: [
|
||||
:can_provide_housing,
|
||||
:address,
|
||||
:phone,
|
||||
:first_day,
|
||||
:last_day
|
||||
] + ConferenceRegistration.all_spaces +
|
||||
ConferenceRegistration.all_considerations + [
|
||||
:notes
|
||||
]
|
||||
},
|
||||
row_spans: {
|
||||
allergies: 3,
|
||||
other: 2
|
||||
},
|
||||
required_columns: [:name, :email],
|
||||
editable: administration_update_path(@this_conference.slug, :stats),
|
||||
column_options: @column_options
|
||||
}
|
||||
end
|
||||
|
||||
def registrations_table_options
|
||||
@ -1793,6 +1877,7 @@ module ApplicationHelper
|
||||
column_names: [
|
||||
:registration_fees_paid,
|
||||
:is_attending,
|
||||
:is_subscribed,
|
||||
:city,
|
||||
:preferred_language,
|
||||
:arrival,
|
||||
@ -1811,7 +1896,8 @@ module ApplicationHelper
|
||||
:notes
|
||||
] +
|
||||
User.AVAILABLE_LANGUAGES.map { |l| "language_#{l}".to_sym } +
|
||||
ConferenceRegistration.all_spaces,
|
||||
ConferenceRegistration.all_spaces +
|
||||
ConferenceRegistration.all_considerations,
|
||||
editable: administration_update_path(@this_conference.slug, :stats),
|
||||
column_options: @column_options
|
||||
}
|
||||
|
@ -32,6 +32,6 @@
|
||||
.modal-edit-overlay{data: { 'closes-modal': 'new-registration' }}
|
||||
.modal-edit-content
|
||||
=html_edit_table @excel_data, registrations_edit_table_options
|
||||
.actions
|
||||
.actions.right
|
||||
%a.button.subdued{data: { 'closes-modal': 'new-registration' }}='Cancel'
|
||||
= button_tag :save, value: :save, class: :modify
|
||||
|
@ -1244,6 +1244,7 @@ en:
|
||||
body: Body
|
||||
day: Day
|
||||
event_location: Location
|
||||
other_notes: Other
|
||||
time: Time
|
||||
time_span: Length
|
||||
reasons:
|
||||
|
Loading…
x
Reference in New Issue
Block a user