oxen_printer 0.4.5 → 0.4.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/oxen/printservers_controller.rb +39 -0
- data/app/mailers/printer_mailer.rb +7 -4
- data/app/models/ox_print_job.rb +1 -1
- data/app/models/ox_printserver.rb +21 -0
- data/config/locales/da.yml +1 -0
- data/lib/action_printer.rb +57 -10
- data/lib/oxen_printer/cab_printer.rb +4 -5
- data/lib/oxen_printer/pdf_printer.rb +0 -30
- data/lib/oxen_printer/version.rb +1 -1
- data/lib/print_drivers.rb +30 -6
- data/lib/print_engine.rb +97 -77
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 254a3bc1044f2d2f7d1dfd3655922e32c820ffd4
|
4
|
+
data.tar.gz: d626e235f66eb0862557cd3f92237a65af60ee82
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ca3466c68c0e609fc0b36e959d9d0c5be4be8c7644b57ddb6dbb7b96a4e3136682876205534dadec9c4f4439bb9b442f4fd9f6d144dce3efef6f5798a0360da
|
7
|
+
data.tar.gz: d987b734385f15f64f36637ebd1fdecafd9d85cc3000b77bbd7bd163ec14bced011481fc1bbf19803c691abfcf2f65e9fd97fdfc89213fe5a66694d1e456625e
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class Oxen::PrintserversController < AbstractResourcesController
|
2
|
+
skip_before_filter :authenticate_user!, only: :port
|
3
|
+
|
4
|
+
def port
|
5
|
+
authorize Printserver.new
|
6
|
+
unless params[:mac].blank?
|
7
|
+
port = Printserver.find_by_mac_addr(params[:mac])
|
8
|
+
if !port
|
9
|
+
port = 'port not found!'
|
10
|
+
else
|
11
|
+
port = port.active ? port.port : 'printserver er ikke aktiv!'
|
12
|
+
end
|
13
|
+
render plain: port
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def set_fab_button_options
|
20
|
+
|
21
|
+
opt = { items: {}}
|
22
|
+
case params[:action]
|
23
|
+
when 'edit','update'; opt[:items].merge! list: { ajax: 'get', icon: 'list', class: 'blue', url: "/admin/accounts/#{resource.account.id}" }
|
24
|
+
when 'show'; opt[:items].merge! list: { ajax: 'get', icon: 'list', class: 'blue', url: "/admin/accounts/#{resource.account.id}" }
|
25
|
+
# when 'index'; opt[:items].merge! list: { ajax: 'get', icon: 'list', class: 'blue', url: "/admin/accounts/#{resource.account.id}" }
|
26
|
+
end
|
27
|
+
|
28
|
+
@fab_button_options = opt
|
29
|
+
end
|
30
|
+
|
31
|
+
# Never trust parameters from the scary internet, only allow the white list through.
|
32
|
+
def resource_params
|
33
|
+
params[:printserver][:mac_addr] = params[:printserver][:mac_addr].strip.gsub( / /, ':') rescue ''
|
34
|
+
params[:printserver][:account_id] = current_user.admin? ? (params[:parent_id] || params[:printserver][:account_id]) : current_user.account.id
|
35
|
+
params.require(:printserver).permit(:parent, :parent_id, :account_id, :location, :lokation, :mac_addr, :port, :active)
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
end
|
@@ -1,18 +1,21 @@
|
|
1
1
|
class PrinterMailer < ActionMailer::Base
|
2
2
|
layout 'mailer'
|
3
3
|
|
4
|
-
def send_print usr, file, msg=nil
|
5
|
-
@usr =
|
4
|
+
def send_print usr, file, msg=nil, subj=nil
|
5
|
+
@usr = usr
|
6
6
|
fname = case file
|
7
7
|
when /\/pdf.*$/; 'print%s.pdf' % DateTime.now.nsec
|
8
8
|
else 'print%s.label' % DateTime.now.nsec
|
9
9
|
end
|
10
10
|
attachments[fname] = File.read(file) unless file.blank?
|
11
11
|
@logo = @usr.account.logos.first.image.url rescue ""
|
12
|
-
|
12
|
+
attachments.inline['logo.png'] = File.read( File.join(Rails.root,'public',@logo)) unless @logo.blank?
|
13
|
+
|
14
|
+
@msg = msg || "See attached PDF"
|
15
|
+
subj ||= "Kontakt administrator! Der mangler en printer definition!"
|
13
16
|
|
14
17
|
mail from: 'no-reply@wheelstore.space',
|
15
18
|
to: @usr.email,
|
16
|
-
subject:
|
19
|
+
subject: subj
|
17
20
|
end
|
18
21
|
end
|
data/app/models/ox_print_job.rb
CHANGED
@@ -0,0 +1,21 @@
|
|
1
|
+
class OxPrintserver < AbstractResource
|
2
|
+
self.table_name = 'printservers'
|
3
|
+
establish_connection ((Rails.env=="development") ? :dev_oxen_tables : :oxen_tables )
|
4
|
+
|
5
|
+
has_paper_trail
|
6
|
+
|
7
|
+
belongs_to :account
|
8
|
+
has_many :printers, dependent: :destroy
|
9
|
+
|
10
|
+
validates :mac_addr, presence: true
|
11
|
+
validates :port, presence: true
|
12
|
+
|
13
|
+
scope :active, -> { where(active: true) }
|
14
|
+
|
15
|
+
def list_title
|
16
|
+
location
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
end
|
data/config/locales/da.yml
CHANGED
data/lib/action_printer.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#encoding: utf-8
|
2
2
|
class ActionPrinter < ActionView::Base
|
3
|
-
|
3
|
+
|
4
4
|
include Exceptions
|
5
5
|
|
6
6
|
attr_accessor :printer, :paper
|
@@ -15,6 +15,10 @@ class ActionPrinter < ActionView::Base
|
|
15
15
|
@printer.command
|
16
16
|
end
|
17
17
|
|
18
|
+
def command=val
|
19
|
+
@printer.command=val
|
20
|
+
end
|
21
|
+
|
18
22
|
#
|
19
23
|
# the default rendering is from a string of chars to an html file - statically placed
|
20
24
|
# for who ever knows the exact path to the file, to see
|
@@ -24,7 +28,7 @@ class ActionPrinter < ActionView::Base
|
|
24
28
|
# TODO vi får en fejl her når vi begynder at mixe modellerne f.eks. Employee.find_by_sql('select * from products')
|
25
29
|
rc = print_job.printing_class.constantize
|
26
30
|
coll = rc.find_by_sql( print_job.print_sql)
|
27
|
-
locals = { resource_class: rc, collection: coll, resource: coll.first
|
31
|
+
locals = { resource_class: rc, collection: coll, resource: coll.first, resources: coll }
|
28
32
|
#
|
29
33
|
# TODO args must be mergeable ;)
|
30
34
|
# if args.flatten.compact.any?
|
@@ -47,14 +51,18 @@ class ActionPrinter < ActionView::Base
|
|
47
51
|
end
|
48
52
|
|
49
53
|
# the default print is sending a link to the user who ordered the print
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
54
|
+
#
|
55
|
+
def do_print print_job, args
|
56
|
+
result = nil
|
57
|
+
prn = printer
|
58
|
+
if prn.nil? or prn.command.blank? or prn.command=="email"
|
59
|
+
mail_print print_job, args
|
60
|
+
else
|
61
|
+
print_print prn, print_job, args
|
62
|
+
end
|
63
|
+
rescue => e
|
64
|
+
logit :error, "Printing failed! The error was #{e.message}"
|
65
|
+
false
|
58
66
|
end
|
59
67
|
|
60
68
|
#
|
@@ -96,12 +104,51 @@ class ActionPrinter < ActionView::Base
|
|
96
104
|
|
97
105
|
def send_print_file context
|
98
106
|
context.send_file pdf_file_path, filename: 'oxen_file', type: get_file_type, disposition: "attachment"
|
107
|
+
# send_file path, type: asset_content_type, disposition: 'inline', filename: filename
|
99
108
|
# context.cookies['fileDownload'] = 'true'
|
100
109
|
# File.open(pdf_file_path, 'r') do |fp|
|
101
110
|
# context.send_data fp.read.force_encoding('BINARY'), filename: 'oxen_file', type: "application/pdf", disposition: "attachment"
|
102
111
|
# end
|
103
112
|
end
|
104
113
|
|
114
|
+
def mail_print print_job, args
|
115
|
+
# move pdf_file_path to a static place where it will not be accidentally deleted from
|
116
|
+
# static_path = File.join(Rails.root,'public','files','1.pdf')
|
117
|
+
# var = %x[ mv #{pdf_file_path} #{static_path} 2>&1 ]
|
118
|
+
# send email to usr with link
|
119
|
+
# raise MovingFileFailedError.new(var) unless var.blank?
|
120
|
+
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!"
|
121
|
+
if print_job.printed_by.nil?
|
122
|
+
raise PrintJobPrintingError.new t('action_printer.user_not_found')
|
123
|
+
else
|
124
|
+
PrinterMailer.send_print(print_job.printed_by,file_path,msg,t('print_delivered_by_email')).deliver_now
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
def print_print prn, print_job, args
|
129
|
+
args[:copies] ||= 1
|
130
|
+
cmd = build_print_cmd prn, args
|
131
|
+
if args[:copies].to_i > 1
|
132
|
+
cmdargs = cmd.split(" ")
|
133
|
+
f = cmdargs.pop
|
134
|
+
cmdargs.push "-n", args[:copies].to_i, f
|
135
|
+
cmd = cmdargs.join(" ")
|
136
|
+
end
|
137
|
+
# Here we start actually printing
|
138
|
+
# $1 is the CUPS printer
|
139
|
+
# $2 is the PDF file_path_and_name
|
140
|
+
# $3 is the PDF filename
|
141
|
+
# the command being something along the lines of: lp -d $1 -o media=a4 $2
|
142
|
+
return `#{cmd}`
|
143
|
+
end
|
144
|
+
|
145
|
+
def build_print_cmd prn, args
|
146
|
+
cups = !prn.printserver ? prn.cups_printer : "#{prn.cups_printer} -h 10.0.0.26:4#{prn.printserver.port}"
|
147
|
+
pdf_path = pdf_file_path.split("/")[-1]
|
148
|
+
paper = args.delete(:paper) || prn.paper
|
149
|
+
prn.command.gsub( /\$1/, cups ).gsub( /\$2/, paper ).gsub( /\$3/, pdf_file_path ).gsub( /\$4/, pdf_path )
|
150
|
+
end
|
151
|
+
|
105
152
|
def logit( log_type, msg )
|
106
153
|
Rails.logger.send(log_type, "[OXEN] #{Time.now} [#{log_type.to_s}] #{msg}")
|
107
154
|
end
|
@@ -32,16 +32,15 @@ class CabPrinter < ActionPrinter
|
|
32
32
|
end
|
33
33
|
|
34
34
|
# CAB print last command is "A n" where n is the number of copies - an information which we add at print time
|
35
|
-
def do_print
|
35
|
+
def do_print print_job, args
|
36
36
|
result = nil
|
37
37
|
prn = printer
|
38
38
|
unless prn.command.blank?
|
39
39
|
if prn.command=="email"
|
40
|
-
|
41
|
-
return super
|
40
|
+
return super print_job, args
|
42
41
|
else
|
43
|
-
if copies.to_i > 0
|
44
|
-
cpcmd = `echo 'A #{copies.to_i}\n' >> #{label_file_path}`
|
42
|
+
if args[:copies].to_i > 0
|
43
|
+
cpcmd = `echo 'A #{args[:copies].to_i}\n' >> #{label_file_path}`
|
45
44
|
label_path = label_file_path.split("/")[-1]
|
46
45
|
pap = paper || prn.paper
|
47
46
|
cmd = prn.command.gsub(/\$1/, prn.cups_printer).gsub(/\$2/, label_file_path)
|
@@ -13,36 +13,6 @@ class PdfPrinter < ActionPrinter
|
|
13
13
|
false
|
14
14
|
end
|
15
15
|
|
16
|
-
def do_print copies, usr=nil
|
17
|
-
result = nil
|
18
|
-
prn = printer
|
19
|
-
unless prn.command.blank?
|
20
|
-
if prn.command=="email"
|
21
|
-
prn.delete
|
22
|
-
return super
|
23
|
-
else
|
24
|
-
pdf_path = pdf_file_path.split("/")[-1]
|
25
|
-
pap = paper || prn.paper
|
26
|
-
cmd = prn.command.gsub( /\$1/, prn.cups_printer ).gsub( /\$2/, pap ).gsub( /\$3/, pdf_file_path ).gsub( /\$4/, pdf_path )
|
27
|
-
if copies > 1
|
28
|
-
cmdargs = cmd.split(" ")
|
29
|
-
f = cmdargs.pop
|
30
|
-
cmdargs.push "-n", copies, f
|
31
|
-
cmd = cmdargs.join(" ")
|
32
|
-
end
|
33
|
-
# Here we start actually printing
|
34
|
-
# $1 is the CUPS printer
|
35
|
-
# $2 is the PDF file_path_and_name
|
36
|
-
# $3 is the PDF filename
|
37
|
-
# the command being something along the lines of: lp -d $1 -o media=a4 $2
|
38
|
-
return `#{cmd}`
|
39
|
-
end
|
40
|
-
end
|
41
|
-
rescue => e
|
42
|
-
logit :error, "Printing failed! The error was #{e.message}"
|
43
|
-
false
|
44
|
-
end
|
45
|
-
|
46
16
|
def file_path
|
47
17
|
pdf_file_path
|
48
18
|
end
|
data/lib/oxen_printer/version.rb
CHANGED
data/lib/print_drivers.rb
CHANGED
@@ -49,14 +49,31 @@ module PrintDrivers
|
|
49
49
|
# print_with will use the action_printer to build the print
|
50
50
|
# and return the resulting filepath
|
51
51
|
#
|
52
|
-
def print_with action_printer
|
52
|
+
def print_with action_printer, args
|
53
53
|
update_column(:state, "printing")
|
54
|
-
|
55
|
-
|
56
|
-
|
54
|
+
args = set_default_args args
|
55
|
+
status = case args[:medium]
|
56
|
+
when "email"
|
57
|
+
if action_printer
|
58
|
+
printed_by.email = args[:email_to]
|
59
|
+
action_printer.printer.command="email"
|
60
|
+
action_printer.do_print(self,args)
|
61
|
+
update_column(:state, 'done')
|
62
|
+
action_printer.file_path
|
63
|
+
else
|
64
|
+
update_column(:state, 'error printing')
|
65
|
+
raise PrintJobPrintingError.new t('print_drivers.print_with.email_error')
|
66
|
+
end
|
67
|
+
when "printer"
|
68
|
+
if action_printer && action_printer.do_print(self,args)
|
69
|
+
update_column(:state, 'done')
|
70
|
+
action_printer.file_path
|
71
|
+
else
|
72
|
+
update_column(:state, 'error printing')
|
73
|
+
raise PrintJobPrintingError.new I18n.t('print_drivers.print_with.print_error')
|
74
|
+
end
|
57
75
|
else
|
58
|
-
|
59
|
-
raise PrintJobPrintingError
|
76
|
+
raise PrintJobPrintingError.new I18n.t('print_drivers.print_with.case_error');
|
60
77
|
end
|
61
78
|
end
|
62
79
|
|
@@ -71,6 +88,13 @@ module PrintDrivers
|
|
71
88
|
end
|
72
89
|
end
|
73
90
|
|
91
|
+
def set_default_args args
|
92
|
+
args[0][:print] ||= {}
|
93
|
+
args[0][:print][:copies] ||= 1
|
94
|
+
args[0][:print][:medium] ||= "printer"
|
95
|
+
args[0][:print]
|
96
|
+
end
|
97
|
+
|
74
98
|
# q%{
|
75
99
|
# Problem with CUPS printer definitions - losing knowledge of attached printers
|
76
100
|
#
|
data/lib/print_engine.rb
CHANGED
@@ -10,7 +10,6 @@
|
|
10
10
|
|
11
11
|
# http://rarlindseysmash.com/posts/config-and-generators-in-gems
|
12
12
|
#
|
13
|
-
|
14
13
|
#
|
15
14
|
#
|
16
15
|
# ARGS # first value is default
|
@@ -54,12 +53,88 @@ module PrintEngine
|
|
54
53
|
|
55
54
|
include Exceptions
|
56
55
|
|
56
|
+
#
|
57
|
+
#
|
58
|
+
# # list_title
|
59
|
+
# def list_title
|
60
|
+
# self.respond_to?( "name") ? self.name : "please define list_title on model (#{self.class.to_s})!"
|
61
|
+
# end
|
62
|
+
#
|
63
|
+
# # implement on relevant models
|
64
|
+
def find_template template, paper="A4"
|
65
|
+
raise 'you have to implement "def find_template(paper)" on your Model'
|
66
|
+
# 'label.html.haml'
|
67
|
+
end
|
68
|
+
#
|
69
|
+
#
|
70
|
+
#
|
71
|
+
# def set_print_defaults options
|
72
|
+
# options[:context] ||= ""
|
73
|
+
# options[:print_job][:download] = options[:print][:medium]=="download" || false
|
74
|
+
# options[:print_job][:print_driver] = spot_the_driver(options)
|
75
|
+
# options[:print_job][:paper] = options[:paper] || "A4"
|
76
|
+
# options[:print_job][:view_template_path] = find_template( options[:template], options[:paper] ) || params[:print_job][:view_template_path]
|
77
|
+
# options
|
78
|
+
# end
|
79
|
+
#
|
80
|
+
|
81
|
+
def print_label(options={})
|
82
|
+
|
83
|
+
options[:context] ||= ""
|
84
|
+
options[:print] ||= {}
|
85
|
+
options[:print][:collation] = 'record'
|
86
|
+
options[:print][:paper] ||= 'label'
|
87
|
+
options[:print][:output_type] ||= 'raw'
|
88
|
+
|
89
|
+
options = self.class.set_print_job_defaults [self], options
|
90
|
+
options[:print_job][:print_driver] = options[:print][:print_driver] || :cab
|
91
|
+
options[:print_job][:paper] = options[:print][:paper] || "label"
|
92
|
+
options[:print_job][:print_format] = options[:print][:collation] || 'record'
|
93
|
+
options[:print_job][:view_template_path] = "stock_items/print/zebra_stock_items_label.html.haml"
|
94
|
+
|
95
|
+
pj = self.class.print [self], options
|
96
|
+
end
|
97
|
+
|
98
|
+
|
99
|
+
# options[:print][:printer_name] = options[:print][:printer_name] || ''
|
100
|
+
# options[:user] = options[:user] || current_user
|
101
|
+
|
102
|
+
|
103
|
+
def print_record(options={})
|
104
|
+
|
105
|
+
options[:context] ||= ""
|
106
|
+
options[:print] ||= {}
|
107
|
+
options[:print][:collation] = 'record'
|
108
|
+
options[:print][:paper] ||= 'A4'
|
109
|
+
options[:print][:output_type] ||= 'pdf'
|
110
|
+
|
111
|
+
options = self.class.set_print_job_defaults [self], options
|
112
|
+
options[:print_job][:print_driver] = options[:print][:print_driver] || :pdf
|
113
|
+
options[:print_job][:paper] = options[:print][:paper] || "A4"
|
114
|
+
options[:print_job][:print_format] = options[:print][:collation] || 'record'
|
115
|
+
options[:print_job][:view_template_path] = "stock_items/print/slip.html.haml"
|
116
|
+
|
117
|
+
pj = self.class.print [self], options
|
118
|
+
end
|
119
|
+
|
120
|
+
|
121
|
+
|
57
122
|
def self.included(base)
|
58
123
|
|
59
124
|
#
|
60
125
|
def base.print_list(options={})
|
126
|
+
raise NoContextFound.new('ViewContext missing!') if options[:context].blank?
|
127
|
+
options[:print] ||= {}
|
128
|
+
options[:print][:collation] = 'list'
|
129
|
+
options[:print][:paper] ||= 'A4'
|
130
|
+
options[:print][:output_type] ||= 'pdf'
|
131
|
+
|
61
132
|
options = set_print_job_defaults options[:resources], options
|
133
|
+
options[:print_job][:print_driver] = options[:print][:print_driver] || :pdf
|
134
|
+
options[:print_job][:paper] = options[:print][:paper] || "A4"
|
62
135
|
options[:print_job][:print_format] = options[:print][:collation] || 'list'
|
136
|
+
options[:print_job][:view_template_path] = "stock_items/print/pdf_stock_items_list.html.haml"
|
137
|
+
|
63
138
|
pj = print options[:resources], options
|
64
139
|
end
|
65
140
|
|
@@ -73,17 +148,25 @@ module PrintEngine
|
|
73
148
|
# If creating the PrintJob is successful, cycle will be called in print_job.rb
|
74
149
|
# and the PrintJob will be enqueued in the delayed_job queue called 'printing'.
|
75
150
|
# cycle_error will be called in print_job.rb if it cannot be enqueued sucessfully.
|
151
|
+
# print[medium] # 'display' | 'email' | 'printer' | 'download'
|
152
|
+
# print[output_type] # 'html' | 'pdf' | 'text'
|
153
|
+
# print[printer] # what printer to send output to
|
154
|
+
# print[email_to] # email address
|
155
|
+
# print[message] # body of email
|
156
|
+
# print[range] # which pages should print
|
157
|
+
# print[copies] # number of copies
|
158
|
+
|
76
159
|
def base.print( resources, params )
|
77
160
|
pj = create_print_job( resources, params )
|
78
161
|
if Rails.env=='development' or pj.download
|
79
162
|
return pj.perform params
|
80
163
|
else
|
81
164
|
user = User.find(pj.printed_by_id)
|
82
|
-
BackgroundPrinterJob.perform_later pj, queue: "printing", account_id: user.account.id
|
165
|
+
BackgroundPrinterJob.perform_later pj, queue: "printing", account_id: user.account.id, print: params[:print]
|
83
166
|
# Delayed::Job.enqueue pj, :queue => 'printing'
|
84
167
|
# pj.cycle if Delayed::Job.enqueue pj, :queue => 'printing'
|
85
168
|
# If you comment out above line and use below line with pj.perform instead, you thereby surpass delayed_job, and thus don't have to wait for it
|
86
|
-
# pj.perform
|
169
|
+
# pj.perform queue: "printing", account_id: user.account.id, print: params[:print]
|
87
170
|
return pj
|
88
171
|
end
|
89
172
|
end
|
@@ -131,19 +214,21 @@ module PrintEngine
|
|
131
214
|
#
|
132
215
|
# find the best printer for the job
|
133
216
|
def base.default_printer usr, printer_name, paper=nil
|
134
|
-
if printer_name
|
217
|
+
if printer_name!="default"
|
218
|
+
return Printer.find(printer_name) if printer_name.to_i.to_s == printer_name
|
219
|
+
Printer.active.find_by( 'name like ?', "%#{printer_name.downcase}%") or raise NoPreferredPrintersFound.new('Printer with name not found!')
|
220
|
+
else
|
221
|
+
raise NoPreferredPrintersFound.new('No printers found!') if usr.printers.empty?
|
135
222
|
if paper.nil?
|
136
|
-
|
223
|
+
usr.printers.active.preferred_printer.first or raise NoPreferredPrintersFound.new('No preferred printers found!')
|
137
224
|
else
|
138
|
-
|
225
|
+
usr.printers.active.preferred_printer.on_paper(paper).first || usr.printers.on_paper(paper).first or raise NoPreferredPrintersFound.new('No preferred printers found!')
|
139
226
|
end
|
140
|
-
else
|
141
|
-
printer = Printer.active.find_by( 'name like ?', "%#{printer_name.downcase}%")
|
142
227
|
end
|
143
|
-
# usr.printers.where{ (printownerables.preferred==true) & (printownerables.preferred==true) }
|
144
|
-
|
145
|
-
# raise PrintJobPrinterNotAvailableError
|
146
|
-
printer || Printer.first
|
228
|
+
# # usr.printers.where{ (printownerables.preferred==true) & (printownerables.preferred==true) }
|
229
|
+
#
|
230
|
+
# # raise PrintJobPrinterNotAvailableError
|
231
|
+
# printer || Printer.first
|
147
232
|
end
|
148
233
|
|
149
234
|
def base.set_resource_sql(resources,params)
|
@@ -159,70 +244,5 @@ module PrintEngine
|
|
159
244
|
end
|
160
245
|
|
161
246
|
end
|
162
|
-
#
|
163
|
-
#
|
164
|
-
# # list_title
|
165
|
-
# def list_title
|
166
|
-
# self.respond_to?( "name") ? self.name : "please define list_title on model (#{self.class.to_s})!"
|
167
|
-
# end
|
168
|
-
#
|
169
|
-
# # implement on relevant models
|
170
|
-
def find_template template, paper="A4"
|
171
|
-
raise 'you have to implement "def find_template(paper)" on your Model'
|
172
|
-
# 'label.html.haml'
|
173
|
-
end
|
174
|
-
#
|
175
|
-
#
|
176
|
-
#
|
177
|
-
# def set_print_defaults options
|
178
|
-
# options[:context] ||= ""
|
179
|
-
# options[:print_job][:download] = options[:print][:medium]=="download" || false
|
180
|
-
# options[:print_job][:print_driver] = spot_the_driver(options)
|
181
|
-
# options[:print_job][:paper] = options[:paper] || "A4"
|
182
|
-
# options[:print_job][:view_template_path] = find_template( options[:template], options[:paper] ) || params[:print_job][:view_template_path]
|
183
|
-
# options
|
184
|
-
# end
|
185
|
-
#
|
186
|
-
|
187
|
-
def print_label(options={})
|
188
|
-
|
189
|
-
options[:context] ||= ""
|
190
|
-
options[:print] ||= {}
|
191
|
-
options[:print][:collation] = 'record'
|
192
|
-
options[:print][:paper] ||= 'label'
|
193
|
-
options[:print][:output_type] ||= 'raw'
|
194
|
-
|
195
|
-
options = self.class.set_print_job_defaults [self], options
|
196
|
-
options[:print_job][:print_driver] = options[:print][:print_driver] || :cab
|
197
|
-
options[:print_job][:paper] = options[:print][:paper] || "label"
|
198
|
-
options[:print_job][:print_format] = options[:print][:collation] || 'record'
|
199
|
-
options[:print_job][:view_template_path] = "stock_items/print/zebra_stock_items_label.html.haml"
|
200
|
-
|
201
|
-
pj = self.class.print [self], options
|
202
|
-
end
|
203
|
-
|
204
|
-
|
205
|
-
# options[:print][:printer_name] = options[:print][:printer_name] || ''
|
206
|
-
# options[:user] = options[:user] || current_user
|
207
|
-
|
208
|
-
|
209
|
-
def print_record(options={})
|
210
|
-
|
211
|
-
options[:context] ||= ""
|
212
|
-
options[:print] ||= {}
|
213
|
-
options[:print][:collation] = 'record'
|
214
|
-
options[:print][:paper] ||= 'A4'
|
215
|
-
options[:print][:output_type] ||= 'pdf'
|
216
|
-
|
217
|
-
options = self.class.set_print_job_defaults [self], options
|
218
|
-
options[:print_job][:print_driver] = options[:print][:print_driver] || :pdf
|
219
|
-
options[:print_job][:paper] = options[:print][:paper] || "A4"
|
220
|
-
options[:print_job][:print_format] = options[:print][:collation] || 'record'
|
221
|
-
options[:print_job][:view_template_path] = "stock_items/print/slip.html.haml"
|
222
|
-
|
223
|
-
pj = self.class.print [self], options
|
224
|
-
end
|
225
|
-
|
226
|
-
|
227
247
|
|
228
248
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oxen_printer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Walther H Diechmann
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-05-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: oxen_job
|
@@ -69,11 +69,13 @@ files:
|
|
69
69
|
- app/assets/javascripts/oxen_printer.js
|
70
70
|
- app/controllers/oxen/print_jobs_controller.rb
|
71
71
|
- app/controllers/oxen/printers_controller.rb
|
72
|
+
- app/controllers/oxen/printservers_controller.rb
|
72
73
|
- app/jobs/background_printer_job.rb
|
73
74
|
- app/mailers/printer_mailer.rb
|
74
75
|
- app/models/ox_print_job.rb
|
75
76
|
- app/models/ox_printable.rb
|
76
77
|
- app/models/ox_printer.rb
|
78
|
+
- app/models/ox_printserver.rb
|
77
79
|
- app/models/ox_template.rb
|
78
80
|
- app/policies/oxen/print_job_policy.rb
|
79
81
|
- app/views/layouts/1mailer.html.haml
|
@@ -160,7 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
160
162
|
version: '0'
|
161
163
|
requirements: []
|
162
164
|
rubyforge_project:
|
163
|
-
rubygems_version: 2.
|
165
|
+
rubygems_version: 2.2.2
|
164
166
|
signing_key:
|
165
167
|
specification_version: 4
|
166
168
|
summary: oxen_printer provides printer and print_job management.
|