93143c28f2
see https://github.com/foodcoops/foodsoft/pull/907 for reference and original work by viehlieb Co-authored-by: viehlieb <pf@pragma-shift.net> fix PDF Pdf make explicit deposit in invoices work add ordergroupname to invoice file name mark bold sum for vat exempt foodcoops download multiple group order invoice as zip
87 lines
2.7 KiB
Ruby
87 lines
2.7 KiB
Ruby
class GroupOrderInvoicesController < ApplicationController
|
|
include Concerns::SendGroupOrderInvoicePdf
|
|
before_action :authenticate_finance
|
|
|
|
def show
|
|
begin
|
|
@group_order_invoice = GroupOrderInvoice.find(params[:id])
|
|
if FoodsoftConfig[:contact][:tax_number]
|
|
respond_to do |format|
|
|
format.pdf do
|
|
send_group_order_invoice_pdf @group_order_invoice if FoodsoftConfig[:contact][:tax_number]
|
|
end
|
|
end
|
|
else
|
|
raise RecordInvalid
|
|
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'))
|
|
end
|
|
end
|
|
|
|
def destroy
|
|
goi = GroupOrderInvoice.find(params[:id])
|
|
@order = goi.group_order.order
|
|
goi.destroy
|
|
respond_to do |format|
|
|
format.js
|
|
format.json { head :no_content }
|
|
end
|
|
end
|
|
|
|
def create_multiple
|
|
invoice_date = params[:group_order_invoice][:invoice_date]
|
|
order_id = params[:group_order_invoice][:order_id]
|
|
@order = Order.find(order_id)
|
|
gos = GroupOrder.where("order_id = ?", order_id)
|
|
gos.each do |go|
|
|
goi = GroupOrderInvoice.find_or_create_by!(group_order_id: go.id)
|
|
goi.invoice_date = invoice_date
|
|
goi.invoice_number = goi.generate_invoice_number(1)
|
|
goi.save!
|
|
end
|
|
respond_to do |format|
|
|
format.js
|
|
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
|
|
order = Order.find(params[:order_id])
|
|
|
|
invoices = order.group_orders.map(&:group_order_invoice)
|
|
pdf = {}
|
|
|
|
temp_file = Tempfile.new("all_invoices_for_order_#{order.id}.zip")
|
|
|
|
Zip::File.open(temp_file.path, Zip::File::CREATE) do |zipfile|
|
|
invoices.each do |invoice|
|
|
pdf = create_invoice_pdf(invoice)
|
|
invoice_file = Tempfile.new("#{pdf.filename}")
|
|
File.open(invoice_file.path, 'w:ASCII-8BIT') do |file|
|
|
file.write(pdf.to_pdf)
|
|
end
|
|
zipfile.add("#{pdf.filename}", invoice_file.path) unless zipfile.find_entry("#{pdf.filename}")
|
|
end
|
|
end
|
|
|
|
zip_data = File.read(temp_file.path)
|
|
|
|
respond_to do |format|
|
|
format.html {
|
|
send_data(zip_data, type: 'application/zip', filename: "#{l order.ends, format: :file}-#{order.supplier.name}-#{order.id}.zip", disposition: 'attachment')
|
|
}
|
|
end
|
|
end
|
|
end
|