Add delayed job for create bulk invoice

This commit is contained in:
Matt-Yorkley
2018-11-19 18:06:47 +00:00
parent 7d82020657
commit b0f75162ac
4 changed files with 54 additions and 24 deletions

View File

@@ -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)

View File

@@ -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

View 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

View File

@@ -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