236 lines
6.2 KiB
Ruby
Executable File
236 lines
6.2 KiB
Ruby
Executable File
class Admin::OffersController < ApplicationController
|
|
layout "admin"
|
|
before_filter :auth_admin
|
|
|
|
def index
|
|
|
|
# filters default value
|
|
params[:o] ||= 'created-desc'
|
|
params[:r] ||= 10
|
|
|
|
if params[:need_id]
|
|
@need = Need.find(params[:need_id])
|
|
@offers = @need.offers
|
|
else
|
|
@offers = Offer.all
|
|
end
|
|
|
|
if(params[:q] and params[:q] != '')
|
|
@offers = @offers.joins(:need).where("needs.title like ? or offers.supplier like ?" ,"%#{params[:q]}%","%#{params[:q]}%")
|
|
end
|
|
|
|
case params[:o]
|
|
when 'created-asc'
|
|
@offers = @offers.order(created_at: :asc)
|
|
when 'created-desc'
|
|
@offers = @offers.order(created_at: :desc)
|
|
when 'alpha-asc'
|
|
@offers = @offers.order(supplier: :asc)
|
|
when 'alpha-desc'
|
|
@offers = @offers.order(supplier: :desc)
|
|
when 'price-asc'
|
|
@offers = @offers.order(price: :asc)
|
|
when 'price-desc'
|
|
@offers = @offers.order(price: :desc)
|
|
when 'need-alpha-asc'
|
|
@offers = @offers.joins(:need).order('needs.title asc')
|
|
when 'need-alpha-desc'
|
|
@offers = @offers.joins(:need).order('needs.title desc')
|
|
end
|
|
|
|
@orders = {
|
|
"Les plus récentes" => 'alpha-asc',
|
|
"Fournisseurs (de A à Z)" => 'alpha-asc',
|
|
"Fournisseurs (de Z à A)" => 'alpha-desc',
|
|
"Besoin (de A à Z)" => 'need-alpha-asc',
|
|
"Besoin (de Z à A)" => 'need-alpha-desc',
|
|
"Prix négociés croissants" => 'price-asc',
|
|
"Prix négociés décroissants" => 'price-desc'
|
|
}
|
|
|
|
|
|
@offers = @offers.page(params[:page]).per(params[:r])
|
|
|
|
|
|
|
|
end
|
|
|
|
def new
|
|
@need = Need.find(params[:need_id])
|
|
@offer = Offer.new
|
|
end
|
|
|
|
def create
|
|
@need = Need.find(params[:need_id])
|
|
@offer = Offer.new(offer_params)
|
|
if @offer.save
|
|
@need.offers << @offer
|
|
flash[:notice] = "Offre créée avec succès."
|
|
@offer.validate!
|
|
redirect_to admin_need_offers_path(@need)
|
|
else
|
|
render :action => "new"
|
|
end
|
|
end
|
|
|
|
def edit
|
|
@offer = Offer.find(params[:id])
|
|
if params[:need_id]
|
|
@need = Need.find(params[:need_id])
|
|
end
|
|
end
|
|
|
|
def update
|
|
@offer = Offer.find(params[:id])
|
|
if @offer.update_attributes(offer_params)
|
|
flash[:notice] = "Offre modifiée avec succès."
|
|
if params[:need_id]
|
|
@need = Need.find(params[:need_id])
|
|
redirect_to admin_need_offers_path(@need)
|
|
else
|
|
redirect_to admin_offers_path
|
|
end
|
|
else
|
|
render :action => "edit"
|
|
end
|
|
end
|
|
|
|
def destroy
|
|
@offer = Offer.find(params[:id])
|
|
|
|
if(@offer.destroy)
|
|
flash[:notice] = "Offre supprimée avec succès."
|
|
else
|
|
flash[:error] = "Impossible de supprimer cette offre"
|
|
end
|
|
|
|
if params[:need_id]
|
|
@need = Need.find(params[:need_id])
|
|
redirect_to admin_need_offers_path(@need)
|
|
else
|
|
redirect_to admin_offers_path
|
|
end
|
|
|
|
end
|
|
|
|
|
|
def accepted
|
|
@offer = Offer.find(params[:id])
|
|
end
|
|
|
|
def download_zip
|
|
|
|
require 'zip'
|
|
|
|
@offer = Offer.find(params[:id])
|
|
|
|
|
|
|
|
zipfile_name = "#{Rails.root}/private_medias/zip/tmp_zip.zip"
|
|
csvfile_name = "#{Rails.root}/private_medias/zip/tmp_csv.csv"
|
|
|
|
File.delete(zipfile_name) if File.exist?(zipfile_name)
|
|
File.delete(csvfile_name) if File.exist?(csvfile_name)
|
|
|
|
Zip::File.open(zipfile_name, Zip::File::CREATE) do |zipfile|
|
|
|
|
@offer.accepted_offers.each do |accepted_offer|
|
|
|
|
customer_name = "#{accepted_offer.customer.organisation} (#{accepted_offer.customer.firstname} #{accepted_offer.customer.name})"
|
|
|
|
accepted_offer.documents.each do |document|
|
|
|
|
document_name = document.title
|
|
|
|
|
|
if document.document.file
|
|
if document.particulars?
|
|
zipfile.add("#{customer_name}/#{document_name}/#{document.title}-NÉGOS.pdf", document.get_particularized_document_file_path)
|
|
else
|
|
zipfile.add("#{customer_name}/#{document_name}/#{document.title}-NÉGOS.pdf", document.document.current_path)
|
|
end
|
|
end
|
|
|
|
if document.returned_document.file
|
|
zipfile.add("#{customer_name}/#{document_name}/#{document.title}-RETOURNÉ.pdf", document.returned_document.current_path)
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
CSV.open(csvfile_name, "wb",headers: true, :col_sep => ";" ) do |csv|
|
|
csv << ["Société", "prénom", "nom", "Téléphone","Email","Offres acceptée?", "Acceptée le", "Intéressé le"].map{|row| row.encode("iso-8859-1")}
|
|
@offer.need.wishes.each do |wish|
|
|
accepted_offer = @offer.accepted_offers.where(customer_id: wish.customer.id).first
|
|
if accepted_offer
|
|
accepted = true
|
|
else
|
|
accepted = false
|
|
end
|
|
csv << [
|
|
wish.customer.organisation ? wish.customer.organisation : "Aucune",
|
|
wish.customer.firstname,
|
|
wish.customer.name,
|
|
wish.customer.phone,
|
|
wish.customer.email,
|
|
accepted ? "Oui" : "Non",
|
|
accepted ? accepted_offer.updated_at.to_s : "",
|
|
wish.updated_at.to_s
|
|
].map{|row| row.encode("iso-8859-1")}
|
|
end
|
|
|
|
|
|
end
|
|
|
|
zipfile.add("Utilisateurs intéressés.csv", csvfile_name)
|
|
|
|
end
|
|
|
|
|
|
|
|
filename = "[Besoin:#{@offer.need.title}][Offre:#{@offer.supplier}] Export des documents fait le #{DateTime.now.to_time.strftime('%d/%m/%y')}.zip"
|
|
|
|
send_file(zipfile_name, :filename => filename)
|
|
#File.delete(zipfile_name)
|
|
|
|
end
|
|
|
|
def upload_documents
|
|
@offer = Offer.find(params[:id])
|
|
|
|
if request.post?
|
|
|
|
counter = 0
|
|
@offer.accepted_offers.each do |accepted_offer|
|
|
document = Document.new
|
|
document.title = params[:document][:title]
|
|
document.document = params[:document][:document]
|
|
document.accepted_offer = accepted_offer
|
|
|
|
if params[:document][:document]
|
|
document.state = "document_available"
|
|
end
|
|
|
|
document.save
|
|
CustomerMailer.document_available(accepted_offer.customer, document).deliver
|
|
counter = counter + 1
|
|
end
|
|
|
|
flash[:notice] = "#{counter} document(s) créé(s)"
|
|
redirect_to accepted_admin_offer_path(@offer)
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
private
|
|
|
|
def offer_params
|
|
params.require(:offer).permit! #(:supplier, :price, :fee_percentage, :reseaux_ids, :gain)
|
|
end
|
|
|
|
end
|