Last active
February 3, 2016 14:11
-
-
Save gbalbuena/b023ef94dce8ea5a0076 to your computer and use it in GitHub Desktop.
Jasper Report implementation in JRuby
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
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 |
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
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