Guest User

Untitled

a guest
Feb 19th, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.18 KB | None | 0 0
  1. require "ruport"
  2.  
  3. class Order < Ruport::Format::Engine
  4.  
  5. # company header
  6. attribute :company_data
  7.  
  8. # order meta data
  9. attributes [:comments,:custcode,:custref,:date,:email,:name,:phone,:ref]
  10.  
  11. renderer do
  12. build_company_header
  13. build_order_header
  14. active_plugin.render_order
  15. end
  16.  
  17. alias_engine Order, :order_engine
  18. Ruport::Format.build_interface_for Order, :order
  19.  
  20. end
  21.  
  22. module Ruport
  23.  
  24. class Format::Plugin::PDFPlugin < Format::Plugin
  25.  
  26. require "pdf/writer"
  27. attribute :pdf, PDF::Writer.new( :paper => "A4")
  28.  
  29. renderer :order do
  30. require "pdf/writer"
  31. require "pdf/simpletable"
  32. return unless defined? PDF::Writer
  33.  
  34. pdf.start_page_numbering(500, 20, 8, :right)
  35. #Report Title
  36. pdf.text "Order", :font_size => 28, :justification => :right
  37.  
  38.  
  39. # order contents
  40. pdf.y = 620
  41.  
  42. PDF::SimpleTable.new do |table|
  43. table.width = 450
  44. table.orientation = :center
  45. table.data = data
  46. table.show_lines = :outer
  47. table.column_order = data.fields
  48. table.render_on(pdf)
  49. table.font_size = 12
  50. end
  51.  
  52.  
  53. # footer
  54. pdf.open_object do |footer|
  55. pdf.save_state
  56. pdf.stroke_color! Color::Black
  57. pdf.stroke_style! PDF::Writer::StrokeStyle::DEFAULT
  58.  
  59. pdf.add_text_wrap(50, 20, 200, "Printed at " + Time.now.strftime("%H:%M %d/%m/%Y"), 8)
  60.  
  61. pdf.restore_state
  62. pdf.close_object
  63. pdf.add_object(footer, :all_pages)
  64. end
  65.  
  66. pdf.stop_page_numbering(true, :current)
  67. pdf.render
  68. end
  69.  
  70. # Company Information in top lefthand corner
  71. helper(:build_company_header) { |eng|
  72.  
  73. if eng.company_data.class == Array
  74.  
  75. PDF::SimpleTable.new do |table|
  76. @values = []
  77. eng.company_data.each do |line|
  78. @values << { "value" => line}
  79. end
  80. table.data = @values
  81. table.column_order = ["value"]
  82. table.show_headings = false
  83. table.font_size = 10
  84. table.show_lines = :outer
  85. table.shade_rows = :none
  86. table.width = 200
  87. table.position = :left
  88. table.orientation = :right
  89. table.render_on(pdf)
  90. end
  91. end
  92. }
  93.  
  94. # Order details
  95. helper(:build_order_header) { |eng|
  96.  
  97. pdf.add_text_wrap(310, 750, 80, "Date:", 12)
  98. pdf.add_text_wrap(310, 730, 80, "Ref:", 12)
  99. pdf.add_text_wrap(310, 710, 80, "Customer:", 12)
  100. pdf.add_text_wrap(310, 690, 80, "Cust Ref:", 12)
  101. pdf.add_text_wrap(310, 670, 80, "Phone:", 12)
  102. pdf.add_text_wrap(310, 650, 80, "Email:", 12)
  103.  
  104. pdf.add_text_wrap(390, 750, 200, eng.date.to_s, 12) unless eng.date.nil?
  105. pdf.add_text_wrap(390, 730, 200, eng.ref, 12)
  106. pdf.add_text_wrap(390, 710, 200, eng.name, 12)
  107. pdf.add_text_wrap(390, 690, 200, eng.custref, 12)
  108. pdf.add_text_wrap(390, 670, 200, eng.phone, 12)
  109. pdf.add_text_wrap(390, 650, 200, eng.email, 12)
  110. }
  111.  
  112. register_on :order_engine
  113. end
  114. end
  115. end
Add Comment
Please, Sign In to add comment