Skip to content

Instantly share code, notes, and snippets.

@gbalbuena
Last active February 3, 2016 14:11
Show Gist options
  • Save gbalbuena/b023ef94dce8ea5a0076 to your computer and use it in GitHub Desktop.
Save gbalbuena/b023ef94dce8ea5a0076 to your computer and use it in GitHub Desktop.
Jasper Report implementation in JRuby
Jasper reports 5.5
require "#{Rails.root}/lib/jar/jasperreports-5.5.0/jasperreports-5.5.0.jar"
Dir["#{Rails.root}/lib/jar/jasperreports-5.5.0/lib/\*.jar"].each { |jar| require jar }
require "#{Rails.root}/lib/datasource/ticket_data_source.rb"
class Ticket < ActiveRecord::Base
IVA = 10
belongs_to :movie_function
belongs_to :transaction
def movie
movie_function.movie
end
def tax
if price.nil?
tax = ((price / 100) * IVA)
else
0
end
end
def total
total = price + tax
end
def print printer_service_name
start = Time.now
begin
report = nil
if Config::Printer.always_recompile_reports?
report = Java::NetSfJasperreportsEngine::JasperCompileManager.compile_report("#{Rails.root}/app/reports/ticket.jrxml")
else
report = Java::NetSfJasperreportsEngineUtil::JRLoader.loadObject("#{Rails.root}/app/reports/ticket.jasper")
end
parameters = Java::JavaUtil::HashMap.new
data_source = TicketDataSource.new self
print = Java::NetSfJasperreportsEngine::JasperFillManager.fillReport(report, parameters, data_source);
job = Java::JavaAwtPrint::PrinterJob.printer_job
services = Java::JavaxPrint::PrintServiceLookup.lookup_print_services nil, nil
selected_service = 0
services.to_a.each_with_index do |service, index|
if service.name.eql? printer_service_name
selected_service = index
end
end
job.print_service = services[selected_service]
printRequestAttributeSet = Java::JavaxPrintAttribute::HashPrintRequestAttributeSet.new
printRequestAttributeSet.add( Java::JavaxPrintAttributeStandard::Copies.new(1) )
exporter = Java::NetSfJasperreportsEngineExport::JRPrintServiceExporter.new
exporter.setParameter(Java::NetSfJasperreportsEngine::JRExporterParameter::JASPER_PRINT, print)
exporter.setParameter(Java::NetSfJasperreportsEngineExport::JRPrintServiceExporterParameter::PRINT_SERVICE, services[selected_service])
exporter.setParameter(Java::NetSfJasperreportsEngineExport::JRPrintServiceExporterParameter::PRINT_SERVICE_ATTRIBUTE_SET, services[selected_service].getAttributes())
exporter.setParameter(Java::NetSfJasperreportsEngineExport::JRPrintServiceExporterParameter::PRINT_REQUEST_ATTRIBUTE_SET, printRequestAttributeSet)
exporter.setParameter(Java::NetSfJasperreportsEngineExport::JRPrintServiceExporterParameter::DISPLAY_PAGE_DIALOG, false)
exporter.setParameter(Java::NetSfJasperreportsEngineExport::JRPrintServiceExporterParameter::DISPLAY_PRINT_DIALOG, false)
exporter.exportReport
msecs = time_diff_milli start, Time.now
puts 'finished in ' + msecs.to_s
return true
rescue Exception => ex
Rails.logger.error ex
return false
end
end
def time_diff_milli(start, finish)
(finish - start) * 1000.0
end
end
import 'net.sf.jasperreports.engine.JRField'
import 'net.sf.jasperreports.engine.JRDataSource'
class TicketDataSource
java_implements 'net.sf.jasperreports.engine.JRDataSource'
java_signature 'java.lang.Object getFieldValue(JRField jrField)'
java_signature 'boolean next()'
def initialize ticket
@list = [ticket]
@index = -1
end
def get_field_value jr_field
case jr_field.name
when 'created_at' then return @list[@index].created_at.strftime("%d/%m/%y %H:%M")
when "movie" then return @list[@index].movie
when "movie_function" then return @list[@index].movie_function.id
when "price" then return @list[@index].price
when "transaction" then return @list[@index].transaction.id.to_s + "-T" + @list[@index].id.to_s
when "payment_method" then return @list[@index].transaction
when "authorization" then return ""
when "cashier" then return @list[@index].transaction.user
when "cash_register" then return @list[@index].transaction.cash_register.id
when "seat" then return @list[@index].seat
else return 'empty'
end
end
def next?
@index = @index + 1
return @index < @list.size
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment