repair garbage collected tempfile
This commit is contained in:
parent
2d0c163f13
commit
6c0c207d1f
1 changed files with 30 additions and 32 deletions
|
@ -3,20 +3,28 @@ class GroupOrderInvoicesController < ApplicationController
|
||||||
before_action :authenticate_finance
|
before_action :authenticate_finance
|
||||||
|
|
||||||
def show
|
def show
|
||||||
begin
|
|
||||||
@group_order_invoice = GroupOrderInvoice.find(params[:id])
|
@group_order_invoice = GroupOrderInvoice.find(params[:id])
|
||||||
if FoodsoftConfig[:contact][:tax_number]
|
raise RecordInvalid unless FoodsoftConfig[:contact][:tax_number]
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.pdf do
|
format.pdf do
|
||||||
send_group_order_invoice_pdf @group_order_invoice if FoodsoftConfig[:contact][:tax_number]
|
send_group_order_invoice_pdf @group_order_invoice if FoodsoftConfig[:contact][:tax_number]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
rescue ActiveRecord::RecordInvalid => e
|
||||||
raise RecordInvalid
|
redirect_back fallback_location: root_path, notice: 'Something went wrong', alert: I18n.t('errors.general_msg', msg: "#{e} " + I18n.t('errors.check_tax_number'))
|
||||||
end
|
end
|
||||||
rescue ActiveRecord::RecordInvalid => error
|
|
||||||
redirect_back fallback_location: root_path, notice: 'Something went wrong', alert: I18n.t('errors.general_msg', msg: "#{error} " + I18n.t('errors.check_tax_number'))
|
def create
|
||||||
|
go = GroupOrder.find(params[:group_order])
|
||||||
|
@order = go.order
|
||||||
|
GroupOrderInvoice.find_or_create_by!(group_order_id: go.id)
|
||||||
|
respond_to do |format|
|
||||||
|
format.js
|
||||||
end
|
end
|
||||||
|
redirect_back fallback_location: root_path
|
||||||
|
rescue StandardError => e
|
||||||
|
redirect_back fallback_location: root_path, notice: 'Something went wrong', :alert => I18n.t('errors.general_msg', :msg => e)
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
|
@ -45,43 +53,33 @@ class GroupOrderInvoicesController < ApplicationController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
|
||||||
go = GroupOrder.find(params[:group_order])
|
|
||||||
@order = go.order
|
|
||||||
GroupOrderInvoice.find_or_create_by!(group_order_id: go.id)
|
|
||||||
respond_to do |format|
|
|
||||||
format.js
|
|
||||||
end
|
|
||||||
redirect_back fallback_location: root_path
|
|
||||||
rescue => error
|
|
||||||
redirect_back fallback_location: root_path, notice: 'Something went wrong', :alert => I18n.t('errors.general_msg', :msg => error)
|
|
||||||
end
|
|
||||||
|
|
||||||
def download_all
|
def download_all
|
||||||
order = Order.find(params[:order_id])
|
order = Order.find(params[:order_id])
|
||||||
|
|
||||||
invoices = order.group_orders.map(&:group_order_invoice)
|
invoices = order.group_orders.map(&:group_order_invoice)
|
||||||
pdf = {}
|
pdf = {}
|
||||||
|
file_paths = []
|
||||||
temp_file = Tempfile.new("all_invoices_for_order_#{order.id}.zip")
|
temp_file = Tempfile.new("all_invoices_for_order_#{order.id}.zip")
|
||||||
|
|
||||||
Zip::File.open(temp_file.path, Zip::File::CREATE) do |zipfile|
|
Zip::File.open(temp_file.path, Zip::File::CREATE) do |zipfile|
|
||||||
invoices.each do |invoice|
|
invoices.each do |invoice|
|
||||||
pdf = create_invoice_pdf(invoice)
|
pdf = create_invoice_pdf(invoice)
|
||||||
invoice_file = Tempfile.new("#{pdf.filename}")
|
file_path = File.join("tmp", pdf.filename)
|
||||||
File.open(invoice_file.path, 'w:ASCII-8BIT') do |file|
|
File.open(file_path, 'w:ASCII-8BIT') do |file|
|
||||||
file.write(pdf.to_pdf)
|
file.write(pdf.to_pdf)
|
||||||
end
|
end
|
||||||
zipfile.add("#{pdf.filename}", invoice_file.path) unless zipfile.find_entry("#{pdf.filename}")
|
file_paths << file_path
|
||||||
|
zipfile.add(pdf.filename, file_path) unless zipfile.find_entry(pdf.filename)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
zip_data = File.read(temp_file.path)
|
zip_data = File.read(temp_file.path)
|
||||||
|
file_paths.each do |file_path|
|
||||||
|
File.delete(file_path)
|
||||||
|
end
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html {
|
format.html do
|
||||||
send_data(zip_data, type: 'application/zip', filename: "#{l order.ends, format: :file}-#{order.supplier.name}-#{order.id}.zip", disposition: 'attachment')
|
send_data(zip_data, type: 'application/zip', filename: "#{l order.ends, format: :file}-#{order.supplier.name}-#{order.id}.zip", disposition: 'attachment')
|
||||||
}
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue