diff --git a/app/controllers/access_levels_controller.rb b/app/controllers/access_levels_controller.rb
index d9ed4a07..8173327d 100644
--- a/app/controllers/access_levels_controller.rb
+++ b/app/controllers/access_levels_controller.rb
@@ -36,7 +36,9 @@ def update
authorize! :update, @event
@access_level = @event.access_levels.find(params.require(:id))
- flash.now[:error] = "Something went wrong updating the ticket" unless @access_level.update(access_level_params)
+ flash.now[:error] = "Something went wrong updating the ticket" unless @access_level.update(
+ @access_level.registrations.any? ? access_level_params_strict : access_level_params
+ )
respond_with @access_level
end
@@ -68,4 +70,8 @@ def toggle_visibility
def access_level_params
params.require(:access_level).permit(:name, :capacity, :price, :has_comment, :hidden, :permit)
end
+
+ def access_level_params_strict
+ params.require(:access_level).permit(:name, :capacity)
+ end
end
diff --git a/app/models/access_level.rb b/app/models/access_level.rb
index 9e0b445e..0e9cbc90 100644
--- a/app/models/access_level.rb
+++ b/app/models/access_level.rb
@@ -10,6 +10,12 @@ class AccessLevel < ApplicationRecord
validates :price, presence: true, numericality: { only_integer: true, greater_than_or_equal_to: 0 }
validates :capacity, numericality: { allow_nil: true, only_integer: true, greater_than: 0 }
+ validate do |access_level|
+ if access_level.capacity && access_level.registrations.size > access_level.capacity
+ access_level.errors.add "Registration", "count exceeds capacity."
+ end
+ end
+
validate do |access_level|
access_level.errors.add :event_id, "has no bank number." if access_level.price.positive? && access_level.event.bank_number.blank?
end
diff --git a/app/views/access_levels/_access_level.html.erb b/app/views/access_levels/_access_level.html.erb
index 3a808e95..b153a3a0 100644
--- a/app/views/access_levels/_access_level.html.erb
+++ b/app/views/access_levels/_access_level.html.erb
@@ -11,8 +11,8 @@
<%= link_to raw(visibility_icon(access_level)), toggle_visibility_event_access_level_path(access_level.event, access_level), class: 'btn btn-xs btn-default', remote: true %>
+ <%= link_to raw(' Edit'), edit_event_access_level_path(access_level.event, access_level), class: 'btn btn-xs btn-default', remote: true %>
<% unless access_level.registrations.any? or access_level.partners.any? %>
- <%= link_to raw(' Edit'), edit_event_access_level_path(access_level.event, access_level), class: 'btn btn-xs btn-default', remote: true %>
<%= link_to raw(' Delete'), event_access_level_path(access_level.event, access_level), class: 'btn btn-xs btn-danger', data: {confirm: 'Are you sure?'}, remote: true, method: :delete %>
<% end %>
diff --git a/app/views/access_levels/_form.html.erb b/app/views/access_levels/_form.html.erb
index ff826e1a..c1c8e195 100644
--- a/app/views/access_levels/_form.html.erb
+++ b/app/views/access_levels/_form.html.erb
@@ -2,12 +2,12 @@
<%= form_for [object.event, object], remote: true do |f| %>
| <%= f.text_field :name, class: 'form-control' %> |
<%= f.number_field :capacity, class: 'form-control', placeholder: 0 %> |
- <%= f.text_field :price, value: nice_amount(f.object.price), class: 'form-control', placeholder: "0.00" %> |
+ <%= f.text_field :price, value: nice_amount(f.object.price), class: 'form-control', placeholder: "0.00", disabled: f.object.registrations.any? %> |
- <%= f.collection_select :permit, AccessLevel.permits.keys, :itself, lambda {|k| translate(k)}, {}, class: 'form-control' %>
+ <%= f.collection_select :permit, AccessLevel.permits.keys, :itself, lambda {|k| translate(k)}, {}, class: 'form-control', disabled: f.object.registrations.any? %>
|
- <%= f.check_box :has_comment %> |
- <%= f.check_box :hidden %> |
+ <%= f.check_box :has_comment, disabled: f.object.registrations.any? %> |
+ <%= f.check_box :hidden, disabled: f.object.registrations.any? %> |
<%= f.button button_name, class: 'btn btn-sm btn-primary' %> |
<%= javascript_tag do %>
var id = "#<% if button_name == 'Save' %>edit_<% end %><%= dom_id(f.object) %>";