This repository has been archived on 2021-11-24. You can view files and clone it, but cannot push or open issues or pull requests.
phone_app/app/controllers/admin/s_inventaires_controller.rb
2021-11-18 17:47:00 +01:00

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