negos_app/app/controllers/admin/needs_controller.rb
2016-03-08 20:49:34 +01:00

170 lines
4.2 KiB
Ruby
Executable File

class Admin::NeedsController < ApplicationController
layout "admin"
before_filter :auth_admin
before_action :build_category_tree, only:[:new, :update, :create, :edit, :index]
def index
# Get all needs to validate
@needs_to_validate = Need.where(state: 'created').order(created_at: :desc)
@needs = Need.shared
# filters default value
params[:o] ||= 'created-desc'
params[:r] ||= 10
# Include search in the query
if(params[:q] != '')
@needs = @needs.search(params[:q])
end
if(params[:c] and params[:c] != '')
@category = NeedCategory.find(params[:c])
ids = @category.child_ids
@needs = @needs.where(category_id: ids)
end
# Include order in the query
case params[:o]
when 'alpha-asc'
@needs = @needs.order(title: :asc)
when 'alpha-desc'
@needs = @needs.order(title: :desc)
when 'wishes-asc'
@needs = @needs.with_wishes_count.order('wishes_count ASC')
when 'wishes-desc'
@needs = @needs.with_wishes_count.order('wishes_count DESC')
when 'created-asc'
@needs = @needs.order(created_at: :asc)
when 'created-desc'
@needs = @needs.order(created_at: :desc)
when 'comments-asc'
@needs = @needs.with_messages_count.order('messages_count ASC')
when 'comments-desc'
@needs = @needs.with_messages_count.order('messages_count DESC')
end
# Paginate
@needs = @needs.page(params[:page]).per(params[:r])
# Define order select options
@orders = {
"Les plus récents" => 'created-desc',
"Les plus populaires" => 'wishes-desc',
"Les plus commentés" => 'comments-desc',
"Titre (de A à Z)" => 'alpha-asc',
"Titre (de Z à A)" => 'alpha-desc'
}
end
def new
@need = Need.new()
@comments = @need.messages.order(created_at: :desc).page params[:page]
end
def create
@need = Need.new(need_params)
if @need.save
flash[:notice] = "Besoin créé avec succès."
@need.validate!
redirect_to admin_needs_path
else
render :action => "new"
end
end
def edit
@need = Need.find(params[:id])
end
def update
@need = Need.find(params[:id])
if @need.update_attributes(need_params)
flash[:notice] = "Besoin sauvegardé avec succès."
redirect_to admin_needs_path
else
render :action => "edit"
end
end
def destroy
@need = Need.find(params[:id])
if(@need.destroy)
flash[:notice] = "Besoin supprimé avec succès."
end
redirect_to admin_needs_path
end
def validate
@need = Need.find(params[:id])
if @need.validate!
flash[:notice] = "Besoin validé avec succès"
else
flash[:error] = "L'état actuel de ce besoin ne permet pas sa validation"
end
redirect_to admin_needs_path
end
def refuse
@need = Need.find(params[:id])
if @need.refuse!
flash[:notice] = "Besoin refusé avec succès"
else
flash[:error] = "L'état actuel de ce besoin ne permet son refus"
end
redirect_to admin_needs_path
end
def negociate
@need = Need.find(params[:id])
if @need.negociate!
flash[:notice] = "Le besoin est maintenant en cours de négociation"
else
flash[:error] = "L'état actuel de ce besoin ne permet pas cette action"
end
redirect_to admin_needs_path
end
def reject
@need = Need.find(params[:id])
if @need.reject!
flash[:notice] = "Le besoin est maintenant en négociation échouée"
else
flash[:error] = "L'état actuel de ce besoin ne permet pas cette action"
end
redirect_to admin_needs_path
end
def accept
@need = Need.find(params[:id])
if @need.offers.length < 1
flash[:error] = "Vous devez créer au moins une proposition avant de passer ce besoin en négocié"
else
if @need.accept!
flash[:notice] = "Le besoin est maintenant négocié"
else
flash[:error] = "L'état actuel de ce besoin ne permet pas cette action"
end
end
redirect_to admin_needs_path
end
private
def need_params
params.require(:need).permit(:title, :description, :category_id, :author_id)
end
def build_category_tree
@tree = NeedCategory::create_tree
end
end