#encoding: utf-8 class ActionPrinter < ActionView::Base include Exceptions attr_accessor :printer, :paper def initialize(printer,paper) @printer=printer @paper=paper super(Rails.configuration.paths['app/views']) end def command @printer.command end # # the default rendering is from a string of chars to an html file - statically placed # for who ever knows the exact path to the file, to see # def do_render(print_job,*args) path = print_job.view_template_path # TODO vi får en fejl her når vi begynder at mixe modellerne f.eks. Employee.find_by_sql('select * from products') rc = print_job.printing_class.constantize coll = rc.find_by_sql( print_job.print_sql) locals = { resource_class: rc, collection: coll, resource: coll.first } # # TODO args must be mergeable ;) # if args.flatten.compact.any? # locals.merge! args # end # # this is WorkInProgress # if (path =~/^---/) # this will return falsy if found of = html_file render_string_in path.gsub( /^---/, ''), locals else of = html_file render( file: path, formats: [:html], handlers: [:haml,:erb], locals: locals) end # # logit :info, "created a html file: #{of.path}" of.path end # the default print is sending a link to the user who ordered the print def do_print copies, usr=nil # move pdf_file_path to a static place where it will not be accidentally deleted from # static_path = File.join(Rails.root,'public','files','1.pdf') # var = %x[ mv #{pdf_file_path} #{static_path} 2>&1 ] # send email to usr with link # raise MovingFileFailedError.new(var) unless var.blank? PrinterMailer.send_print(usr,file_path).deliver_now if usr true end # # this is WorkInProgress !! # def render_string_in content, locals render body: Haml::Engine.new( ERB.new(content).result ).render end # # build a temp file with the HTML string rendered and provided as argument str def html_file str, type='html' f = Tempfile.new(['print', ".#{type}"]) f.puts str f.close Rails.logger.info "oxen: wrote #{f.path}" f end def text_file str html_file str, 'label' end def file_path raise "must be implemented on the driver!!" end def label_file_path @label_file_path ||= `mktemp -t lblXXXX`[0..-2] end def pdf_file_path @pdf_file_path ||= `mktemp -t pdfXXXX`[0..-2] end def get_file_type raise "you must implement this on the driver!!" end def send_print_file context context.send_file pdf_file_path, filename: 'oxen_file', type: get_file_type, disposition: "attachment" # context.cookies['fileDownload'] = 'true' # File.open(pdf_file_path, 'r') do |fp| # context.send_data fp.read.force_encoding('BINARY'), filename: 'oxen_file', type: "application/pdf", disposition: "attachment" # end end def logit( log_type, msg ) Rails.logger.send(log_type, "[OXEN] #{Time.now} [#{log_type.to_s}] #{msg}") end end