oxen_printer 0.4.5 → 0.4.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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.
|