diff --git a/app/controllers/spree/admin/orders_controller_decorator.rb b/app/controllers/spree/admin/orders_controller_decorator.rb index 84e66451ba..20daae29c0 100644 --- a/app/controllers/spree/admin/orders_controller_decorator.rb +++ b/app/controllers/spree/admin/orders_controller_decorator.rb @@ -37,9 +37,7 @@ Spree::Admin::OrdersController.class_eval do end def invoice - pdf = render_to_string pdf: "invoice-#{@order.number}.pdf", - template: invoice_template, - formats: [:html], encoding: "UTF-8" + pdf = InvoiceRenderer.new.render_to_string(@order) Spree::OrderMailer.invoice_email(@order.id, pdf).deliver flash[:success] = t('admin.orders.invoice_email_sent') @@ -48,7 +46,7 @@ Spree::Admin::OrdersController.class_eval do end def print - render pdf: "invoice-#{@order.number}", template: invoice_template, encoding: "UTF-8" + render InvoiceRenderer.new.args(@order) end def print_ticket @@ -61,10 +59,6 @@ Spree::Admin::OrdersController.class_eval do private - def invoice_template - Spree::Config.invoice_style2? ? "spree/admin/orders/invoice2" : "spree/admin/orders/invoice" - end - def require_distributor_abn unless @order.distributor.abn.present? flash[:error] = t(:must_have_valid_business_number, enterprise_name: @order.distributor.name) diff --git a/app/services/bulk_invoice_service.rb b/app/services/bulk_invoice_service.rb index 397020635e..18921bd413 100644 --- a/app/services/bulk_invoice_service.rb +++ b/app/services/bulk_invoice_service.rb @@ -1,5 +1,4 @@ class BulkInvoiceService - include WickedPdf::PdfHelper attr_reader :id def initialize @@ -11,10 +10,7 @@ class BulkInvoiceService orders = Spree::Order.where(id: order_ids) 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 } + invoice = renderer.render_to_string(order) pdf << CombinePDF.parse(invoice) end @@ -42,11 +38,7 @@ class BulkInvoiceService end def renderer - ApplicationController.new - end - - def invoice_template - Spree::Config.invoice_style2? ? "spree/admin/orders/invoice2" : "spree/admin/orders/invoice" + @renderer ||= InvoiceRenderer.new end def file_directory diff --git a/app/services/invoice_renderer.rb b/app/services/invoice_renderer.rb new file mode 100644 index 0000000000..e3613dccbe --- /dev/null +++ b/app/services/invoice_renderer.rb @@ -0,0 +1,29 @@ +class InvoiceRenderer + def render_to_string(order) + renderer.render_to_string(args(order)) + end + + def args(order) + { + pdf: "invoice-#{order.number}.pdf", + template: invoice_template, + formats: [:html], + encoding: "UTF-8", + locals: { :@order => order } + } + end + + private + + def renderer + ApplicationController.new + end + + def invoice_template + if Spree::Config.invoice_style2? + "spree/admin/orders/invoice2" + else + "spree/admin/orders/invoice" + end + end +end diff --git a/app/views/spree/admin/orders/_invoice_table.html.haml b/app/views/spree/admin/orders/_invoice_table.html.haml index 9375f9bb68..c96099edb6 100644 --- a/app/views/spree/admin/orders/_invoice_table.html.haml +++ b/app/views/spree/admin/orders/_invoice_table.html.haml @@ -14,6 +14,9 @@ %tr %td = render 'spree/shared/line_item_name', line_item: item + %br + %small + %em= raw(item.variant.product.supplier.name) %td{:align => "right"} = item.quantity %td{:align => "right"} diff --git a/app/views/spree/admin/orders/_invoice_table2.html.haml b/app/views/spree/admin/orders/_invoice_table2.html.haml index 0941904d8b..2d42591ddc 100644 --- a/app/views/spree/admin/orders/_invoice_table2.html.haml +++ b/app/views/spree/admin/orders/_invoice_table2.html.haml @@ -17,6 +17,9 @@ %tr %td = render 'spree/shared/line_item_name', line_item: item + %br + %small + %em= raw(item.variant.product.supplier.name) %td{:align => "right"} = item.quantity %td{:align => "right"} diff --git a/spec/services/bulk_invoice_service_spec.rb b/spec/services/bulk_invoice_service_spec.rb index 4611a46846..4056a1b88f 100644 --- a/spec/services/bulk_invoice_service_spec.rb +++ b/spec/services/bulk_invoice_service_spec.rb @@ -11,6 +11,16 @@ describe BulkInvoiceService do expect(Delayed::Job.last.payload_object.method_name).to eq :start_pdf_job_without_delay end + + it "creates a PDF invoice" do + order = create(:completed_order_with_fees) + order.bill_address = order.ship_address + order.save! + + service.start_pdf_job_without_delay([order.id]) + + expect(service.invoice_created?(service.id)).to be_truthy + end end describe "#invoice_created?" do diff --git a/spec/services/invoice_renderer_spec.rb b/spec/services/invoice_renderer_spec.rb new file mode 100644 index 0000000000..7516b86492 --- /dev/null +++ b/spec/services/invoice_renderer_spec.rb @@ -0,0 +1,20 @@ +require 'spec_helper' + +describe InvoiceRenderer do + let(:service) { described_class.new } + + it "creates a PDF invoice with two different templates" do + order = create(:completed_order_with_fees) + order.bill_address = order.ship_address + order.save! + + result = service.render_to_string(order) + expect(result).to match /^%PDF/ + + allow(Spree::Config).to receive(:invoice_style2?).and_return true + + alternative = service.render_to_string(order) + expect(alternative).to match /^%PDF/ + expect(alternative).to_not eq result + end +end