Modify views for booths

This commit is contained in:
nasia 2017-06-18 23:33:54 +03:00
parent 318c0d15a4
commit 98e0a25606
10 changed files with 220 additions and 88 deletions

View file

@ -3,19 +3,80 @@ module Admin
load_and_authorize_resource :conference, find_by: :short_title load_and_authorize_resource :conference, find_by: :short_title
load_and_authorize_resource :booth, through: :conference load_and_authorize_resource :booth, through: :conference
def index def index
@booths = @conference.booths @booths = @conference.booths
end end
def show; end def show; end
def new; end def new
@booth = Booth.new(conference: @conference)
end
def create; end def create
@booth = @conference.booths.build(booth_params)
def update; end if @booth.save
redirect_to admin_conference_booths_path,
notice: "Booth successfully created."
else
flash[:error] = "Creating booth failed. #{@booth.errors.full_messages.join('. ')}."
render :new
end
end
def edit; end
def update
@booth = @conference.booths
@booth.assign_attributes(booth_params)
if @booth.update_attributes(booth_params)
redirect_to admin_conference_booths_path,
notice: "Successfully updated booth for #{@booth.title}."
else
flash[:error] = "An error prohibited the Booth for #{@booth.title} "\
"#{@booth.errors.full_messages.join('. ')}."
render :edit
end
end
def destroy; end def destroy; end
def accept
update_state(:accept, 'Booth accepted!')
end
def to_accept
update_state(:to_accept, 'Booth to accept')
end
def reject
update_state(:rejected, 'Booth rejected')
end
def reset
update_state(:reset, 'Booth is submitted')
end
private
def update_state(transition, notice)
alert = @booth.update_state(transition, notice)
if alert.blank?
flash[:notice] = notice
redirect_back_or_to(admin_conference_booths_path(conference_id: @conference.short_title)) && return
else
flash[:error] = alert
return redirect_back_or_to(admin_conference_booths_path(conference_id: @conference.short_title)) && return
end
end
def booth_params
params.require(:booth).permit(:title, :description, :reasoning, :state, :logo_link, :conference_id)
end
end end
end end

View file

@ -1,4 +1,6 @@
class Booth < ActiveRecord::Base class Booth < ActiveRecord::Base
include ActiveRecord::Transitions
belongs_to :conference belongs_to :conference
has_many :booth_requests has_many :booth_requests
has_many :users, through: :booth_requests has_many :users, through: :booth_requests
@ -13,4 +15,35 @@ class Booth < ActiveRecord::Base
:logo_link, :logo_link,
:conference_id, :conference_id,
presence: true presence: true
state_machine initial: :submitted do
state :submitted
state :withdrawn
state :to_accept
state :accepted
state :rejected
event :restart do
transitions to: :submitted, from: [:withdrawn]
end
event :withdrawn do
transitions to: :withdrawn, from: [:submitted, :to_accept, :accepted]
end
event :to_accept do
transitions to: :to_accept, from: [:submitted, :rejected, :accepted]
end
event :accept do
transitions to: :accepted, from: [:submitted, :to_accept]
end
event :reject do
transitions to: :rejected, from: [:submitted]
end
event :reset do
transitions to: :submitted, from: [:to_accept]
end
end
def transition_possible?(transition)
self.class.state_machine.events_for(current_state).include?(transition)
end
end end

View file

@ -7,4 +7,6 @@ class BoothRequest < ActiveRecord::Base
:role, :role,
presence: true presence: true
ROLES = [%w[Submitter submitter], %w[Responsible responsible], %w[Secondary secondary]]
end end

View file

@ -0,0 +1,25 @@
- if booth.transition_possible? :accept
%li= link_to 'Accept booth',
accept_admin_conference_booth_path(@conference.short_title, booth),
method: :patch, id: "accept_booth_#{booth.id}"
- if booth.transition_possible? :reject
%li= link_to 'Reject booth',
reject_admin_conference_booth_path(@conference.short_title, booth),
method: :patch, confirm: 'Are you sure?', id: "reject_booth_#{booth.id}"
- if booth.transition_possible? :restart
%li= link_to 'Start review',
restart_admin_conference_booth_path(@conference.short_title, booth),
method: :patch, id: "restart_booth_#{booth.id}"
- if booth.transition_possible? :to_accept
%li= link_to 'To accept booth',
to_accept_admin_conference_booth_path(@conference.short_title, booth),
method: :patch, id: "to_accept_booth_#{booth.id}"
- if booth.transition_possible? :cancel
%li= link_to 'Cancel booth',
cancel_admin_conference_booth_path(@conference.short_title, booth),
method: :patch, id: "cancel_booth_#{booth.id}"

View file

@ -1,28 +1,17 @@
= form_for @booth do |f| .row
- if @booth.errors.any? .col-md-12
#error_explanation .page-header
%h2= "#{pluralize(@booth.errors.count, "error")} prohibited this booth from being saved:" %title Request a Booth
%ul .row
- @booth.errors.full_messages.each do |msg| .col-md-8
%li= msg = semantic_form_for(@booth, url: admin_conference_booths_path(@conference.short_title), html: {multipart: true}) do |f|
= f.input :title, as: :string, required: true
= f.input :description, input_html: { rows: 5, data: { provide: 'markdown-editable' } }, required: true
= f.input :reasoning, input_html: { rows: 5, data: { provide: 'markdown-editable' } }, required: true
= f.input :logo_link, as: :string, required: true
.field %p.text-right
= f.label :title - if @booth.new_record?
= f.text_field :title = f.submit 'Create Booth Request', class: 'btn btn-success'
.field - else
= f.label :conference_id = f.submit 'Update Booth Request', class: 'btn btn-success'
= f.number_field :conference_id
.field
= f.label :description
= f.text_area :description
.field
= f.label :state
= f.text_field :state
.field
= f.label :reasoning
= f.text_area :reasoning
.field
= f.label :logo_link
= f.text_field :logo_link
.actions
= f.submit 'Save'

View file

@ -1,7 +1,3 @@
%h1 Editing booth %h1 Editing booth
= render 'form' = render 'form'
= link_to 'Show', @booth
\|
= link_to 'Back', booths_path

View file

@ -1,29 +1,47 @@
%h1 Listing booths .row
.col-md-12
%table .page-header
%tr %h1
%th Title Booths
%th Conference = "(#{@booths.length})" if @booths.any?
%th Description .pull-right
%th State - if can? :create, Booth
%th Reasoning =link_to 'Add Booth', new_admin_conference_booth_path(@conference.short_title), class: 'button btn btn-default btn-info'
%th Logo link %p.text-muted
All the booth requests
.row
.col-md-12
.margin-event-table
%table.table.table-striped.table-bordered.table-hover.datatable
%thead
%th %th
%b ID
%th %th
%b Title
%th %th
%b Submitter
%th
%b Responsible
%th
%b Secondary Responsible
%th
%b State
- @booths.each do |booth| - @booths.each do |booth|
%tr %tr
%td= booth.title %td
%td= booth.conference_id = booth.id
%td= booth.description %td
%td= booth.state = link_to booth.title, admin_conference_booth_path(@conference.short_title, booth)
%td= booth.reasoning %td
%td= booth.logo_link a
%td= link_to 'Show', booth %td
%td= link_to 'Edit', edit_booth_path(booth) b
%td= link_to 'Destroy', booth, :method => :delete, :data => { :confirm => 'Are you sure?' } %td
c
%br %td
.btn-group
= link_to 'New Booth', new_admin_conference_booth_path %button{ type: 'button', class: 'btn btn-link dropdown-toggle', 'data-toggle' => 'dropdown' }
= booth.state.humanize
%span.caret
%ul.dropdown-menu{ role: 'menu' }
= render 'change_state_dropdown', booth: booth

View file

@ -2,4 +2,4 @@
= render 'form' = render 'form'
= link_to 'Back', booths_path = link_to 'Back', admin_conference_booths_path

View file

@ -1,24 +1,20 @@
%p#notice= notice .row
.col-md-12
%p %h3
%b Title:
= @booth.title = @booth.title
%p .btn-group.pull-right
%b Conference: = link_to 'Edit', edit_admin_conference_booth_path(@conference.short_title, @booth), class: 'btn btn-mini btn-primary'
= @booth.conference_id
%p
%b Description:
= @booth.description
%p
%b State:
= @booth.state
%p
%b Reasoning:
= @booth.reasoning
%p
%b Logo link:
= @booth.logo_link
= link_to 'Edit', edit_booth_path(@booth) .row
\| .col-md-12
= link_to 'Back', booths_path %table.table
%tr
%td.col-md-2
%b Description
%td
= @booth.description
%tr
%td.col-md-2
%b Reasoning
%td
= @booth.reasoning

View file

@ -31,13 +31,25 @@ Osem::Application.routes.draw do
resources :conferences do resources :conferences do
resource :contact, except: [:index, :new, :create, :show, :destroy] resource :contact, except: [:index, :new, :create, :show, :destroy]
resources :schedules, only: [:index, :create, :show, :update, :destroy] resources :schedules, only: [:index, :create, :show, :update, :destroy]
resources :booths
resources :event_schedules, only: [:create, :update, :destroy] resources :event_schedules, only: [:create, :update, :destroy]
get 'commercials/render_commercial' => 'commercials#render_commercial' get 'commercials/render_commercial' => 'commercials#render_commercial'
resources :commercials, only: [:index, :create, :update, :destroy] resources :commercials, only: [:index, :create, :update, :destroy]
get '/volunteers_list' => 'volunteers#show' get '/volunteers_list' => 'volunteers#show'
get '/volunteers' => 'volunteers#index', as: 'volunteers_info' get '/volunteers' => 'volunteers#index', as: 'volunteers_info'
patch '/volunteers' => 'volunteers#update', as: 'volunteers_update' patch '/volunteers' => 'volunteers#update', as: 'volunteers_update'
patch '/booths' => 'booths#update'
resources :booths do
member do
patch :accept
patch :restart
patch :withdrawn
patch :to_accept
patch :reject
patch :reset
end
end
resources :registrations, except: [:create, :new] do resources :registrations, except: [:create, :new] do
member do member do