Rooms belong to venue
This commit is contained in:
parent
feabbfbc99
commit
f840f2b3f0
31 changed files with 221 additions and 166 deletions
|
|
@ -1,22 +1,22 @@
|
|||
module Admin
|
||||
class RoomsController < Admin::BaseController
|
||||
load_and_authorize_resource :conference, find_by: :short_title
|
||||
load_and_authorize_resource :program, through: :conference, singleton: true
|
||||
load_and_authorize_resource through: :program
|
||||
load_and_authorize_resource :venue, through: :conference, singleton: true
|
||||
load_and_authorize_resource through: :venue
|
||||
|
||||
def index; end
|
||||
|
||||
def edit; end
|
||||
|
||||
def new
|
||||
@room = @program.rooms.new
|
||||
@room = @venue.rooms.new
|
||||
end
|
||||
|
||||
def create
|
||||
@room = @program.rooms.new(room_params)
|
||||
@room = @venue.rooms.new(room_params)
|
||||
if @room.save
|
||||
flash[:notice] = 'Room successfully created.'
|
||||
redirect_to(admin_conference_program_rooms_path(conference_id: @conference.short_title))
|
||||
redirect_to(admin_conference_venue_rooms_path(conference_id: @conference.short_title))
|
||||
else
|
||||
flash[:error] = "Creating Room failed: #{@room.errors.full_messages.join('. ')}."
|
||||
render :new
|
||||
|
|
@ -26,7 +26,7 @@ module Admin
|
|||
def update
|
||||
if @room.update_attributes(room_params)
|
||||
flash[:notice] = 'Room successfully updated.'
|
||||
redirect_to(admin_conference_program_rooms_path(conference_id: @conference.short_title))
|
||||
redirect_to(admin_conference_venue_rooms_path(conference_id: @conference.short_title))
|
||||
else
|
||||
flash[:error] = "Update Room failed: #{@room.errors.full_messages.join('. ')}."
|
||||
render :edit
|
||||
|
|
@ -36,10 +36,10 @@ module Admin
|
|||
def destroy
|
||||
if @room.destroy
|
||||
flash[:notice] = 'Room successfully deleted.'
|
||||
redirect_to(admin_conference_program_rooms_path(conference_id: @conference.short_title))
|
||||
redirect_to(admin_conference_venue_rooms_path(conference_id: @conference.short_title))
|
||||
else
|
||||
flash[:error] = "Destroying room failed! #{@room.errors.full_messages.join('. ')}."
|
||||
redirect_to(admin_conference_program_rooms_path(conference_id: @conference.short_title))
|
||||
redirect_to(admin_conference_venue_rooms_path(conference_id: @conference.short_title))
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ module Admin
|
|||
# the schedule of a conference, which should not be accessed in the first place
|
||||
load_and_authorize_resource :conference, find_by: :short_title
|
||||
load_and_authorize_resource :program, through: :conference, singleton: true
|
||||
load_resource :venue, through: :conference, singleton: true
|
||||
|
||||
skip_before_filter :verify_authenticity_token, only: [:update]
|
||||
layout 'schedule'
|
||||
|
|
@ -15,7 +16,7 @@ module Admin
|
|||
return
|
||||
end
|
||||
@dates = @conference.start_date..@conference.end_date
|
||||
@rooms = @program.rooms
|
||||
@rooms = @venue.rooms
|
||||
end
|
||||
|
||||
def update
|
||||
|
|
|
|||
|
|
@ -5,8 +5,12 @@ module Api
|
|||
respond_to :json
|
||||
|
||||
def index
|
||||
@conference ? (rooms = @conference.rooms) : (rooms = Room.all)
|
||||
|
||||
if params[:conference_id].blank?
|
||||
rooms = Room.all
|
||||
else
|
||||
conference = Conference.find_by_guid(params[:conference_id])
|
||||
rooms = conference.venue.rooms if conference.venue
|
||||
end
|
||||
respond_with rooms
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ class ConferenceController < ApplicationController
|
|||
def show; end
|
||||
|
||||
def schedule
|
||||
@rooms = @conference.program.rooms
|
||||
@rooms = @conference.venue.rooms if @conference.venue
|
||||
@events = @conference.program.events
|
||||
@dates = @conference.start_date..@conference.end_date
|
||||
|
||||
|
|
|
|||
|
|
@ -106,6 +106,10 @@ class Ability
|
|||
can :manage, :all if user.is_admin
|
||||
|
||||
cannot :destroy, Program
|
||||
# Do not delete venue, when there are rooms being used
|
||||
cannot :destroy, Venue do |venue|
|
||||
venue.conference.program.events.where.not(room_id: nil).any?
|
||||
end
|
||||
end
|
||||
|
||||
def signed_in_with_organizer_role(user)
|
||||
|
|
@ -141,7 +145,7 @@ class Ability
|
|||
commercialable_id: Event.where(program_id: Program.where(conference_id: conf_ids_for_organizer).pluck(:id)).pluck(:id)
|
||||
can :manage, Venue, conference_id: conf_ids_for_organizer
|
||||
can :manage, Lodging, conference_id: conf_ids_for_organizer
|
||||
can :manage, Room, program: { conference_id: conf_ids_for_organizer}
|
||||
can :manage, Room, venue: { conference_id: conf_ids_for_organizer}
|
||||
can :manage, Sponsor, conference_id: conf_ids_for_organizer
|
||||
can :manage, SponsorshipLevel, conference_id: conf_ids_for_organizer
|
||||
can :manage, Ticket, conference_id: conf_ids_for_organizer
|
||||
|
|
@ -160,7 +164,7 @@ class Ability
|
|||
can :manage, Track, program: { conference_id: conf_ids_for_cfp }
|
||||
can :manage, DifficultyLevel, program: { conference_id: conf_ids_for_cfp }
|
||||
can :manage, EmailSettings, conference_id: conf_ids_for_cfp
|
||||
can :manage, Room, program: { conference_id: conf_ids_for_cfp }
|
||||
can :manage, Room, venue: { conference_id: conf_ids_for_cfp }
|
||||
can :index, Venue, conference_id: conf_ids_for_cfp
|
||||
can :manage, Cfp, program: { conference_id: conf_ids_for_cfp }
|
||||
can :manage, Program, conference_id: conf_ids_for_cfp
|
||||
|
|
|
|||
|
|
@ -707,7 +707,7 @@ class Conference < ActiveRecord::Base
|
|||
# * +True+ -> One room or more
|
||||
# * +False+ -> No room
|
||||
def rooms_set?
|
||||
program.rooms.count > 0
|
||||
venue.present? && venue.rooms.count > 0
|
||||
end
|
||||
|
||||
# Checks if the conference has a venue object.
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ class Program < ActiveRecord::Base
|
|||
has_many :event_types, dependent: :destroy
|
||||
has_many :tracks, dependent: :destroy
|
||||
has_many :difficulty_levels, dependent: :destroy
|
||||
has_many :rooms, dependent: :destroy
|
||||
has_many :events, dependent: :destroy do
|
||||
def workshops
|
||||
where(require_registration: true, state: :confirmed)
|
||||
|
|
@ -36,11 +35,10 @@ class Program < ActiveRecord::Base
|
|||
accepts_nested_attributes_for :event_types, allow_destroy: true
|
||||
accepts_nested_attributes_for :tracks, reject_if: proc { |r| r['name'].blank? }, allow_destroy: true
|
||||
accepts_nested_attributes_for :difficulty_levels, allow_destroy: true
|
||||
accepts_nested_attributes_for :rooms, reject_if: proc { |r| r['name'].blank? }, allow_destroy: true
|
||||
|
||||
attr_accessible :schedule_fluid, :rating,
|
||||
:schedule_public, :include_cfp_in_splash, :conference_id,
|
||||
:event_types_attributes, :difficulty_levels_attributes, :rooms_attributes, :tracks_attributes
|
||||
:event_types_attributes, :difficulty_levels_attributes, :tracks_attributes
|
||||
|
||||
# validates :conference_id, presence: true, uniqueness: true
|
||||
validates :rating, numericality: { greater_than_or_equal_to: 0, less_than_or_equal_to: 10 }
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
class Room < ActiveRecord::Base
|
||||
belongs_to :program
|
||||
belongs_to :venue
|
||||
has_many :events, dependent: :nullify
|
||||
|
||||
before_create :generate_guid
|
||||
|
||||
validates :name, presence: true
|
||||
validates :name, :venue_id, presence: true
|
||||
|
||||
validates :size, numericality: { only_integer: true, greater_than: 0 }, allow_nil: true
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
class Venue < ActiveRecord::Base
|
||||
belongs_to :conference
|
||||
has_many :lodgings
|
||||
has_many :rooms, dependent: :destroy
|
||||
before_create :generate_guid
|
||||
|
||||
validates :name, :street, :city, :country, presence: true
|
||||
validates :conference_id, presence: true, uniqueness: true
|
||||
|
||||
has_attached_file :photo,
|
||||
styles: { thumb: '100x100>', large: '300x300>' }
|
||||
|
|
@ -11,8 +12,6 @@ class Venue < ActiveRecord::Base
|
|||
content_type: [/jpg/, /jpeg/, /png/, /gif/],
|
||||
size: { in: 0..500.kilobytes }
|
||||
|
||||
accepts_nested_attributes_for :lodgings, allow_destroy: true
|
||||
|
||||
after_update :send_mail_notification
|
||||
|
||||
def address
|
||||
|
|
|
|||
|
|
@ -32,8 +32,8 @@
|
|||
Add venue
|
||||
%li{'class'=>"list-group-item #{class_for_todo(conference_progress['rooms'])}"}
|
||||
%span{'class'=>icon_for_todo(conference_progress['rooms'])}
|
||||
- if can? :update, @conference.program.rooms.build
|
||||
= link_to 'Add rooms', admin_conference_program_rooms_path(conference_progress['short_title'])
|
||||
- if @conference.venue && (can? :update, @conference.venue.rooms.build)
|
||||
= link_to 'Add rooms', admin_conference_venue_rooms_path(conference_progress['short_title'])
|
||||
- else
|
||||
Add rooms
|
||||
%li{'class'=>"list-group-item #{class_for_todo(conference_progress['tracks'])}"}
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@
|
|||
= @room.name
|
||||
.row
|
||||
.col-md-8
|
||||
= semantic_form_for(@room, :url => (@room.new_record? ? admin_conference_program_rooms_path : admin_conference_program_room_path(@conference.short_title, @room))) do |f|
|
||||
= f.input :name
|
||||
= semantic_form_for(@room, :url => (@room.new_record? ? admin_conference_venue_rooms_path : admin_conference_venue_room_path(@conference.short_title, @room))) do |f|
|
||||
= f.input :name, input_html: { autofocus: true}
|
||||
= f.input :size, :input_html => {:size => 5}
|
||||
%p.text-right
|
||||
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary' }
|
||||
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary' }
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
%p.text-muted
|
||||
The rooms of your conference venue
|
||||
|
||||
- if @conference.program.rooms.any?
|
||||
- if @rooms.any?
|
||||
.row
|
||||
.col-md-12
|
||||
%table.table.table-hover#rooms
|
||||
|
|
@ -14,18 +14,18 @@
|
|||
%th Size
|
||||
%th Actions
|
||||
%tbody
|
||||
- @conference.program.rooms.each_with_index do |room, index|
|
||||
- @rooms.each_with_index do |room, index|
|
||||
%tr
|
||||
%td
|
||||
= room.name
|
||||
%td
|
||||
= room.size
|
||||
%td
|
||||
= link_to 'Edit', edit_admin_conference_program_room_path(@conference.short_title, room.id),
|
||||
= link_to 'Edit', edit_admin_conference_venue_room_path(@conference.short_title, room.id),
|
||||
method: :get, class: 'btn btn-primary'
|
||||
= link_to 'Delete', admin_conference_program_room_path(@conference.short_title, room.id),
|
||||
= link_to 'Delete', admin_conference_venue_room_path(@conference.short_title, room.id),
|
||||
method: :delete, class: 'btn btn-danger',
|
||||
data: { confirm: "Do you really want to delete #{room.name}? Attention: This room will be removed from all Events that have it set"}
|
||||
.row
|
||||
.col-md-12.text-right
|
||||
= link_to 'Add Room', new_admin_conference_program_room_path(@conference.short_title), class: 'btn btn-primary'
|
||||
= link_to 'Add Room', new_admin_conference_venue_room_path(@conference.short_title), class: 'btn btn-primary'
|
||||
|
|
|
|||
|
|
@ -20,9 +20,12 @@
|
|||
= @venue.country_name
|
||||
.row
|
||||
.col-md-12
|
||||
= link_to 'Edit Venue', edit_admin_conference_venue_path(@conference.short_title), class: 'btn btn-primary', disabled: !(can? :edit, @conference.venue)
|
||||
= link_to 'Delete Venue', admin_conference_venue_path(@conference.short_title), method: 'delete', class: 'btn btn-danger', disabled: !(can? :edit, @conference.venue)
|
||||
= link_to(edit_admin_conference_venue_path(@conference.short_title), class: 'btn btn-primary', disabled: !(can? :update, @venue) ) do
|
||||
Edit Venue
|
||||
= link_to(admin_conference_venue_path(@conference.short_title), method: 'delete', class: 'btn btn-danger', disabled: !(can? :destroy, @venue)) do
|
||||
Delete Venue
|
||||
-else
|
||||
.row
|
||||
.col-md-12.text-right
|
||||
= link_to 'Create Venue', new_admin_conference_venue_path(@conference.short_title), class: 'btn btn-primary', disabled: !(can? :edit, @conference.venue)
|
||||
= link_to(new_admin_conference_venue_path(@conference.short_title), class: 'btn btn-primary') do
|
||||
Create Venue
|
||||
|
|
|
|||
|
|
@ -53,9 +53,9 @@
|
|||
%span.fa.fa-road
|
||||
Venue
|
||||
%ul
|
||||
- if can? :update, @conference.program.rooms.build
|
||||
%li{:class=> active_nav_li(admin_conference_program_rooms_path(@conference.short_title))}
|
||||
= link_to 'Rooms', admin_conference_program_rooms_path(@conference.short_title)
|
||||
- if @conference.venue && @conference.venue.persisted? && (can? :update, @conference.venue.rooms.build)
|
||||
%li{:class=> active_nav_li(admin_conference_venue_rooms_path(@conference.short_title))}
|
||||
= link_to 'Rooms', admin_conference_venue_rooms_path(@conference.short_title)
|
||||
- if can? :update, @conference.lodgings.build
|
||||
%li{ class: active_nav_li(admin_conference_lodgings_path(@conference.short_title)) }
|
||||
= link_to 'Lodgings', admin_conference_lodgings_path(@conference.short_title)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue