cotech-fund/scripts/generate_invoices.rb

69 lines
1.4 KiB
Ruby

require 'csv'
require 'erb'
FIRST_INVOICE_NUMBER = 50
INVOICE_DATE = '20 May 2022'
output_dir = File.join(File.dirname(__FILE__), "..", "invoices", "sent", "2022")
members_fn = File.read(File.join(File.dirname(__FILE__), "..", "members.csv"))
members = CSV.parse(members_fn, headers: true)
template_fn = File.read(File.join(File.dirname(__FILE__), "..", "template", "template.html"))
class Invoice
def initialize(data, number)
@coop_name = data['coop_name']
@contact_address = data['contact_address']
@members = data['members']
@number = number
end
def date
INVOICE_DATE
end
def number
"%04d" % @number
end
def members
@members.to_i
end
def total
members * 52
end
def name
@coop_name
end
def basename
name.downcase.gsub(' ', '_').gsub('.', '')
end
def address
@contact_address.gsub("//", "\n")
end
def get_binding
binding()
end
end
members.each_with_index do |member, index|
invoice = Invoice.new(member, FIRST_INVOICE_NUMBER + index)
renderer = ERB.new(template_fn)
result = renderer.result(invoice.get_binding)
output_html_fn = File.join(output_dir, invoice.basename + '.html')
output_pdf_fn = File.join(output_dir, invoice.basename + '.pdf')
next if File.exist?(output_html_fn)
File.write(output_html_fn, result)
system("wkhtmltopdf #{output_html_fn} #{output_pdf_fn}")
end