negos_app/app/controllers/public/needs_controller.rb
2019-06-03 20:19:09 +02:00

216 lines
5.5 KiB
Ruby
Executable File

class Public::NeedsController < ApplicationController
layout "public"
before_filter :require_negos_abo
before_filter :auth_customer
before_filter :check_enabled
before_filter :build_category_tree, only:[:index,:new,:create,:edit,:update]
before_filter :check_owner, only: [:destroy,:edit,:update]
def index
#dsffsd = sdfd
if params[:reseaux_id]
@reseaux = Reseaux.find(params[:reseaux_id])
session[:reseaux_id] = @reseaux.id
elsif session[:reseaux_id]
@reseaux = Reseaux.find(session[:reseaux_id])
end
params[:type] = params[:type] || 1
params[:type] = params[:type].to_i
session[:reseaux_id] = nil if params[:no_reseaux]
# Get only public needs
@needs = Need.shared
@needs = @needs.where(:need_type => params[:type])
if session[:reseaux_id].to_i > 0
@needs = @needs.where(:reseaux_id => session[:reseaux_id])
else
@needs = @needs.where(:reseaux_id => nil)
end
@needs = @needs.domain_in(current_customer.domain_ids)
# filters default value
params[:o] ||= 'created-desc'
params[:r] ||= 6
# 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
if(params[:s] and params[:s] != '')
@needs = @needs.where(state: params[:s])
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',
"Alphabétique (de A à Z)" => 'alpha-asc',
"Alphabétique (de Z à A)" => 'alpha-desc'
}
end
def download_devis
@need = Need.find(params[:need_id])
params[:type] = @need.need_type
if @need.author.id != current_customer.id
flash[:error] = "Vous n'êtes pas le propriétaire"
return redirect_to :back
end
send_file @need.devis.file.path, filename: "proposition-need-#{@need.id}.#{@need.devis.file.extension}"
end
def new
@need = Need.new()
end
def destroy
@need = Need.find(params[:id])
if(@need.destroy)
flash[:notice] = "Besoin supprimé avec succès."
end
redirect_to public_my_account_path
end
def edit
@need = Need.find(params[:id])
end
def show
@need = Need.find(params[:id])
params[:type] = @need.need_type
@comment = Message.new()
@comments = @need.messages.order(created_at: :desc).page params[:page]
end
def update
@need = Need.find(params[:id])
if @need.update_attributes(need_params)
flash[:notice] = "Besoin sauvegardé avec succès."
redirect_to public_my_account_path
else
render :action => "edit"
end
end
def create
@need = Need.new(need_params)
params[:type] = @need.need_type
@need.reseaux_id = session[:reseaux_id]
@need.author = current_customer
if !@need.devis? && !@need.note?
flash[:error] = "Vous devez joindre une proposition au format PDF ou au moins préciser son prix dans le champ d'information"
return render :action => "new"
end
if @need.save
@wish = Wish.new
@wish.customer = current_customer
@wish.need = @need
@wish.devis = @need.devis
@wish.note = @need.note
@wish.save
flash[:notice] = "Votre besoin à été créé avec succès."
redirect_to public_my_account_path
else
render :action => "new"
end
end
def wish
@need = Need.find(params[:id])
params[:type] = @need.need_type
admins = Admin.where.not(email: nil)
if (!@need.customers.include?(current_customer))
@need.customers << current_customer
flash[:notice] = "Vous avez signalé votre intérêt pour ce besoin"
# Find all admins with email
admins.each do |admin|
AdminMailer.customer_interested(admin, @need, current_customer).deliver
end
else
@need.customers.delete(current_customer)
flash[:error] = "Vous n'êtes maintenant plus intéressé par ce besoin"
admins.each do |admin|
AdminMailer.customer_disinterested(admin, @need, current_customer).deliver
end
end
redirect_to :back
end
private
def build_category_tree
@tree = NeedCategory::create_tree(NeedCategory.domain_in(current_customer.domain_ids))
end
def need_params
params.require(:need).permit(:title, :note, :devis, :description, :category_id)
end
def check_owner
@need = Need.find(params[:id])
if !@need.author or @need.author.id != current_customer.id
flash[:error] = "Ce besoin ne vous appartient pas"
redirect_back_or_default :root
end
end
end