# -*- 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