Created
October 1, 2018 16:26
-
-
Save 8vius/236d50ea8e08a2b8e59b2450b81facc6 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module PdfGeneration | |
def pdf_options(report) | |
{ | |
pdf: "report", | |
layout: "report_pdf", | |
template: "reports/show", | |
orientation: "Landscape", | |
page_size: "Letter", | |
print_media_type: true, | |
margin: { top: 12, bottom: 7, left: 5, right: 5 } | |
} | |
end | |
def add_marginals(doc, project: self.project, description: nil, generated_at: Time.now, portfolio: nil) | |
doc.number_pages( | |
number_format: "Page %s of #{doc.pages.size}", | |
location: :bottom_right, | |
margin_from_height: 0, | |
font_size: 7, | |
) | |
doc.stamp_pages( | |
portfolio ? "Portfolio ID: #{portfolio.id}" : "Project ID: #{project.rivur_id.first(5)}", | |
location: :bottom_left, | |
margin_from_height: 0, | |
font_size: 7, | |
) | |
title = portfolio ? portfolio.name.upcase : [project.name.upcase, "(#{project.corporate_entity_name})", description].compact.join(' ') | |
doc.stamp_pages( | |
title, | |
location: :top_left, | |
margin_from_height: 30, | |
margin_from_side: 0, | |
font_size: 8, | |
) | |
timestamp = Time.use_zone("America/New_York") { generated_at.strftime('%m/%d/%Y at %l:%M %p') } | |
doc.stamp_pages( | |
"Generated by Rivur.com on #{timestamp}".squeeze(' '), | |
location: :top_right, | |
margin_from_height: 30, | |
margin_from_side: 0, | |
font_size: 8, | |
) | |
doc | |
end | |
def build_draw_report(draw) | |
draw.project.refresh_pending_costs! | |
combined = CombinePDF.new | |
%w(ProjectCostReport AccountCodeDetailReport InvoiceRegister).each do |report_type| | |
self.report = Report.create(type: report_type, project: draw.project, draw: draw, created_at: draw.updated_at) | |
combined << CombinePDF.parse(make_pdf(pdf_options(report))) | |
end | |
draw.invoices.order(:invoice_number).each do |invoice| | |
[invoice.document, invoice.conditional_lien_waiver].compact.each do |document| | |
begin | |
combined << CombinePDF.parse(document.read).tap { |d| d.pages.each(&:fix_rotation) } | |
rescue => e | |
logger.error "Error processing document from invoice #{invoice.id}" | |
logger.error e | |
end | |
end | |
end | |
portrait = combined.pages.select { |p| p.orientation == :portrait } | |
portrait.each { |p| p.rotate_left } | |
add_marginals(combined, project: draw.project, description: "Draw #{draw.number}") | |
portrait.each { |p| p.rotate_right } | |
combined.to_pdf | |
end | |
def build_portfolio_report(portfolio) | |
self.report = portfolio.portfolio_cost_reports.last | |
pdf = make_pdf(pdf_options(report)) | |
add_marginals( | |
CombinePDF.parse(pdf), | |
project: nil, | |
portfolio: portfolio, | |
generated_at: report.created_at | |
).to_pdf | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment