mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
Add delayed job for create bulk invoice
This commit is contained in:
@@ -73,9 +73,7 @@ angular.module("admin.orders").controller "ordersCtrl", ($scope, RequestMonitor,
|
||||
$scope.fetchResults(newPage)
|
||||
|
||||
$scope.bulkInvoice = ->
|
||||
params = ''
|
||||
angular.forEach $scope.selected_orders, (order_id) ->
|
||||
params += 'order_ids[]='+order_id+'&'
|
||||
|
||||
$window.open('/admin/orders/invoices/show?'+params)
|
||||
true
|
||||
$http.post("/admin/orders/invoices", {order_ids: $scope.selected_orders}).success (data) ->
|
||||
console.log(data)
|
||||
.error (data) ->
|
||||
console.log(data)
|
||||
|
||||
@@ -1,28 +1,16 @@
|
||||
require 'combine_pdf'
|
||||
|
||||
module Spree
|
||||
module Admin
|
||||
class InvoicesController < Spree::Admin::BaseController
|
||||
def show
|
||||
combined_pdf = CombinePDF.new
|
||||
def create
|
||||
Delayed::Job.enqueue BulkInvoiceJob.new(params[:order_ids], filename)
|
||||
|
||||
Spree::Order.where(id: params[:order_ids]).each do |order|
|
||||
@order = order
|
||||
pdf_data = render_to_string pdf: "invoice-#{order.number}.pdf",
|
||||
template: invoice_template,
|
||||
formats: [:html], encoding: "UTF-8"
|
||||
|
||||
combined_pdf << CombinePDF.parse(pdf_data)
|
||||
end
|
||||
|
||||
send_data combined_pdf.to_pdf, filename: "invoices.pdf",
|
||||
type: "application/pdf", disposition: :inline
|
||||
render text: filename, status: :ok
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def invoice_template
|
||||
Spree::Config.invoice_style2? ? "spree/admin/orders/invoice2" : "spree/admin/orders/invoice"
|
||||
def filename
|
||||
@filename ||= Time.zone.now.to_i.to_s
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
44
app/jobs/bulk_invoice_job.rb
Normal file
44
app/jobs/bulk_invoice_job.rb
Normal file
@@ -0,0 +1,44 @@
|
||||
BulkInvoiceJob = Struct.new(:order_ids, :filename) do
|
||||
include WickedPdf::PdfHelper
|
||||
|
||||
def perform
|
||||
generate_pdf
|
||||
rescue StandardError => e
|
||||
log e
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def generate_pdf
|
||||
pdf = CombinePDF.new
|
||||
orders = Spree::Order.where(id: order_ids)
|
||||
renderer = ApplicationController.new
|
||||
|
||||
orders.each do |order|
|
||||
invoice = renderer.render_to_string pdf: "invoice-#{order.number}.pdf",
|
||||
template: invoice_template,
|
||||
formats: [:html], encoding: "UTF-8",
|
||||
locals: { :@order => order }
|
||||
|
||||
pdf << CombinePDF.parse(invoice)
|
||||
end
|
||||
|
||||
pdf.save "#{directory}/#{filename}.pdf"
|
||||
end
|
||||
|
||||
def invoice_template
|
||||
Spree::Config.invoice_style2? ? "spree/admin/orders/invoice2" : "spree/admin/orders/invoice"
|
||||
end
|
||||
|
||||
def log(error)
|
||||
logger = Logger.new('bulkinvoice.log')
|
||||
logger.debug e.message
|
||||
logger.debug e.backtrace[0]
|
||||
end
|
||||
|
||||
def directory
|
||||
dir = 'tmp/invoices'
|
||||
Dir.mkdir(dir) unless File.exist?(dir)
|
||||
dir
|
||||
end
|
||||
end
|
||||
@@ -76,7 +76,7 @@ Spree::Core::Engine.routes.prepend do
|
||||
get :managed, on: :collection
|
||||
|
||||
collection do
|
||||
resources :invoices, only: [:show]
|
||||
resources :invoices, only: [:create]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user