221 lines
5.3 KiB
Ruby
221 lines
5.3 KiB
Ruby
# -*- encoding : utf-8 -*-
|
|
|
|
class Admin::SInventairesController < ApplicationController
|
|
layout "admin"
|
|
before_action :auth_admin, :except => :print
|
|
|
|
before_action :admin_space
|
|
|
|
def admin_space
|
|
@admin_space = "stocks"
|
|
end
|
|
|
|
def index
|
|
@s_inventaires = SInventaire.all
|
|
|
|
@s_inventaires = sort_by_sorting(@s_inventaires, "id DESC")
|
|
respond_to do |format|
|
|
format.html{
|
|
|
|
params[:search][:per_page] = params[:search][:per_page] || 100
|
|
per_page = params[:search][:per_page]
|
|
page = (params[:page] and params[:page] != "") ? params[:page] : 1
|
|
@s_inventaires = @s_inventaires.page(page).per(per_page)
|
|
|
|
}
|
|
end
|
|
end
|
|
|
|
def generate_stock
|
|
@s_inventaire = SInventaire.find(params[:id])
|
|
@s_inventaire.generate_stock
|
|
|
|
redirect_back :fallback_location => "/"
|
|
end
|
|
|
|
def show
|
|
@s_inventaire = SInventaire.find(params[:id])
|
|
|
|
@s_inventaire_lines =@s_inventaire.s_inventaire_lines
|
|
@s_inventaire_lines = sort_by_sorting(@s_inventaire_lines, "created_at DESC")
|
|
|
|
|
|
|
|
respond_to do |format|
|
|
format.html{
|
|
|
|
params[:search][:per_page] = params[:search][:per_page] || 100
|
|
per_page = params[:search][:per_page]
|
|
page = (params[:page] and params[:page] != "") ? params[:page] : 1
|
|
@s_inventaire_lines = @s_inventaire_lines.page(page).per(per_page)
|
|
|
|
}
|
|
|
|
format.csv {
|
|
@headers = []
|
|
@columns = []
|
|
SInventaireLine.qi_table_order.each do |key, value|
|
|
|
|
if value.instance_of? Hash
|
|
name = value[:name]
|
|
else
|
|
name = value
|
|
end
|
|
|
|
if name != "Actions"
|
|
@headers << name.to_s
|
|
@columns << key
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
xlsx_package = Axlsx::Package.new
|
|
wb = xlsx_package.workbook
|
|
wb.add_worksheet(name: "import") do |sheet|
|
|
sheet.add_row @headers
|
|
|
|
@s_inventaire_lines.each do |p_customer|
|
|
line = []
|
|
|
|
@columns.each do |column|
|
|
|
|
if (p_customer.respond_to?("csv_"+column.to_s))
|
|
line << p_customer.send("csv_"+column.to_s)
|
|
elsif (p_customer.respond_to?(column))
|
|
if p_customer.send(column.to_s).class.to_s == "BigDecimal"
|
|
line << p_customer.send(column.to_s) #.to_s.gsub('.', ',')
|
|
else
|
|
line << p_customer.send(column.to_s)
|
|
end
|
|
else
|
|
line << column.to_s
|
|
end
|
|
|
|
end
|
|
|
|
|
|
sheet.add_row line, types: line.map{|t| cell_type_from_value(t)}
|
|
end
|
|
|
|
|
|
end
|
|
|
|
@final_file = "#{Rails.root}/private_medias/export-inventaire-#{Time.now.to_s.to_slug}.xlsx"
|
|
|
|
|
|
xlsx_package.serialize(@final_file)
|
|
|
|
|
|
send_file @final_file
|
|
|
|
|
|
|
|
}
|
|
|
|
end
|
|
|
|
end
|
|
|
|
def print
|
|
@s_inventaire = SInventaire.find(params[:id])
|
|
|
|
params[:inline] = true
|
|
|
|
if !params[:html] # and !Rails.env.development?
|
|
|
|
|
|
|
|
doc_number = @s_inventaire.id
|
|
url = print_admin_s_inventaire_path(:id => @s_inventaire.id, :html => true)
|
|
|
|
Dir.mkdir("#{Rails.root}/pdf/s_inventaires") unless File.exists?("#{Rails.root}/pdf/s_inventaires")
|
|
|
|
@temp_file = "#{Rails.root}/pdf/s_inventaires/#{doc_number}_temp.pdf"
|
|
@final_file = "#{Rails.root}/pdf/s_inventaires/#{doc_number}_temp2.pdf"
|
|
@final_file2 = "#{Rails.root}/pdf/s_inventaires/#{doc_number}.pdf"
|
|
|
|
url = (Rails.env.development? ? "http://localhost:4000" : "http://shakal.olwen.xyz").to_s+url
|
|
puts url
|
|
|
|
|
|
stamp = "inventaire"
|
|
pdf = "pdf-inventaire"
|
|
|
|
|
|
|
|
|
|
node_file = @temp_file
|
|
|
|
puts "node #{pdf}.js #{Shellwords.escape(url)} #{Shellwords.escape(@temp_file)} 'Inventaire du #{@s_inventaire.date}'"
|
|
system("node #{pdf}.js #{Shellwords.escape(url)} #{Shellwords.escape(@temp_file)} 'Inventaire du #{@s_inventaire.date}'")
|
|
|
|
|
|
|
|
require 'posix/spawn'
|
|
|
|
|
|
|
|
::POSIX::Spawn::Child.new 'pdftk', @temp_file, 'stamp', "#{Rails.root}/pdf_stamp/#{stamp}.pdf", 'output', @final_file
|
|
|
|
|
|
|
|
|
|
|
|
@data_to_send = File.open(@final_file).read
|
|
|
|
|
|
|
|
send_data @data_to_send, :filename =>"#{doc_number}.pdf" , :type => 'application/pdf',:disposition => (params[:inline] ? 'inline' : "attachment")
|
|
#render :inline => "y"
|
|
|
|
else
|
|
render :layout => false
|
|
end
|
|
end
|
|
|
|
def new
|
|
@s_inventaire = SInventaire.new
|
|
|
|
end
|
|
|
|
def edit
|
|
@s_inventaire = SInventaire.find(params[:id])
|
|
|
|
end
|
|
|
|
def create
|
|
@s_inventaire = SInventaire.new(params.require(:s_inventaire).permit!)
|
|
|
|
if @s_inventaire.save
|
|
|
|
else
|
|
render action: "new"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
def update
|
|
@s_inventaire = SInventaire.find(params[:id])
|
|
|
|
|
|
if @s_inventaire.update_attributes(params.require(:s_inventaire).permit!)
|
|
|
|
else
|
|
render action: "edit"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
def destroy
|
|
@s_inventaire = SInventaire.find(params[:id])
|
|
@s_inventaire.destroy
|
|
|
|
end
|
|
end
|