class ActionPrinter

encoding: utf-8

Attributes

paper[RW]
printer[RW]

Public Class Methods

new(printer,paper) click to toggle source
Calls superclass method
# File lib/action_printer.rb, line 8
def initialize(printer,paper)
  @printer=printer
  @paper=paper
  super(Rails.configuration.paths['app/views'])
end

Public Instance Methods

build_print_cmd(prn, args) click to toggle source
# File lib/action_printer.rb, line 145
def build_print_cmd prn, args
  cups = !prn.printserver ? prn.cups_printer : "#{prn.cups_printer} -h 10.0.0.26:4#{prn.printserver.port}"
  pdf_path =  pdf_file_path.split("/")[-1]
  paper = args.delete(:paper) || prn.paper
  prn.command.gsub( /\$1/, cups ).gsub( /\$2/, paper ).gsub( /\$3/, pdf_file_path ).gsub( /\$4/, pdf_path )
end
command() click to toggle source
# File lib/action_printer.rb, line 14
def command
  @printer.command
end
command=(val) click to toggle source
# File lib/action_printer.rb, line 18
def command=val
  @printer.command=val
end
do_print(print_job, args) click to toggle source

the default print is sending a link to the user who ordered the print

# File lib/action_printer.rb, line 55
def do_print print_job, args
  result = nil
  prn = printer
  if prn.nil? or prn.command.blank? or prn.command=="email"
    mail_print print_job, args
  else
    print_print prn, print_job, args
  end
rescue => e
  logit :error, "Printing failed! The error was #{e.message}"
  false
end
do_render(print_job,*args) click to toggle source

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

# File lib/action_printer.rb, line 26
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, resources: coll }
  #
  # 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
file_path() click to toggle source
# File lib/action_printer.rb, line 89
def file_path
  raise "must be implemented on the driver!!"
end
get_file_type() click to toggle source
# File lib/action_printer.rb, line 101
def get_file_type
  raise "you must implement this on the driver!!"
end
html_file(str, type='html') click to toggle source

build a temp file with the HTML string rendered and provided as argument str

# File lib/action_printer.rb, line 77
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
label_file_path() click to toggle source
# File lib/action_printer.rb, line 93
def label_file_path
  @label_file_path ||= `mktemp -t lblXXXX`[0..-2]
end
logit( log_type, msg ) click to toggle source
# File lib/action_printer.rb, line 152
def logit( log_type, msg )
  Rails.logger.send(log_type, "[OXEN] #{Time.now} [#{log_type.to_s}] #{msg}")
end
mail_print(print_job, args) click to toggle source
# File lib/action_printer.rb, line 114
def mail_print print_job, args
  # 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?
  msg = args[:message] || "Der er ikke defineret nogen printere til dette job, for dig - så jeg er nødt til at sende dig filen vedhæftet denne email! ;)Du bør kontakte din system administrator og bede om at der bliver oprettet en printer definition til denne printer jobtype, for dig!"
  if print_job.printed_by.nil?
    raise PrintJobPrintingError.new t('action_printer.user_not_found')
  else
    PrinterMailer.send_print(print_job.printed_by,file_path,msg,t('print_delivered_by_email')).deliver_now
  end
end
pdf_file_path() click to toggle source
# File lib/action_printer.rb, line 97
def pdf_file_path
  @pdf_file_path ||= `mktemp -t pdfXXXX`[0..-2]
end
print_print(prn, print_job, args) click to toggle source
render_string_in(content, locals) click to toggle source

this is WorkInProgress !!

# File lib/action_printer.rb, line 71
def render_string_in content, locals
  render body: Haml::Engine.new( ERB.new(content).result ).render
end
send_print_file(context) click to toggle source
# File lib/action_printer.rb, line 105
def send_print_file context
  context.send_file pdf_file_path, filename: 'oxen_file', type: get_file_type, disposition: "attachment"
  # send_file path, type: asset_content_type, disposition: 'inline', filename: filename
  # 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
text_file(str) click to toggle source
# File lib/action_printer.rb, line 85
def text_file str
  html_file str, 'label'
end