oxen_printer 0.0.3

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.
Files changed (77) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +31 -0
  6. data/Rakefile +8 -0
  7. data/app/controllers/oxen/print_jobs_controller.rb +10 -0
  8. data/app/controllers/oxen/printers_controller.rb +33 -0
  9. data/app/jobs/background_printer_job.rb +14 -0
  10. data/app/models/ox_print_job.rb +47 -0
  11. data/app/models/ox_printable.rb +17 -0
  12. data/app/models/ox_printer.rb +36 -0
  13. data/app/policies/oxen/print_job_policy.rb +51 -0
  14. data/app/views/oxen/print_jobs/_form.html.haml +45 -0
  15. data/app/views/oxen/print_jobs/_print_job.html.haml +3 -0
  16. data/app/views/oxen/print_jobs/_print_jobs.html.haml +11 -0
  17. data/app/views/oxen/print_jobs/_printer_print_job.html.haml +12 -0
  18. data/app/views/oxen/print_jobs/_printer_print_jobs.html.haml +11 -0
  19. data/app/views/oxen/print_jobs/_show.html.haml +0 -0
  20. data/app/views/oxen/printers/_account_printer.html.haml +11 -0
  21. data/app/views/oxen/printers/_account_printers.html.haml +14 -0
  22. data/app/views/oxen/printers/_form.html.haml +31 -0
  23. data/app/views/oxen/printers/_new.html.haml +68 -0
  24. data/app/views/oxen/printers/_printer.html.haml +3 -0
  25. data/app/views/oxen/printers/_printers.html.haml +11 -0
  26. data/app/views/oxen/printers/_user_printer.html.haml +18 -0
  27. data/app/views/oxen/printers/_user_printers.html.haml +14 -0
  28. data/app/views/oxen/printers/create.html.haml +5 -0
  29. data/bin/rails +12 -0
  30. data/config/locales/da.yml +7 -0
  31. data/config/routes.rb +47 -0
  32. data/lib/action_printer.rb +90 -0
  33. data/lib/c4_label_print_provider.rb +215 -0
  34. data/lib/generators/printer/install_generator.rb +14 -0
  35. data/lib/generators/printer/printer_generator.rb +27 -0
  36. data/lib/generators/printer/templates/print_job.rb +21 -0
  37. data/lib/generators/printer/templates/printable.rb +13 -0
  38. data/lib/generators/printer/templates/printer.rb +15 -0
  39. data/lib/java_pdf/LICENSE +71 -0
  40. data/lib/java_pdf/LICENSE-LGPL-2.1.txt +504 -0
  41. data/lib/java_pdf/LICENSE-W3C-TEST +28 -0
  42. data/lib/java_pdf/README +92 -0
  43. data/lib/java_pdf/about.jar +0 -0
  44. data/lib/java_pdf/barbecue-1.5-beta1.jar +0 -0
  45. data/lib/java_pdf/barcodeprinter.jar +0 -0
  46. data/lib/java_pdf/browser.jar +0 -0
  47. data/lib/java_pdf/core-renderer-minimal.jar +0 -0
  48. data/lib/java_pdf/core-renderer.jar +0 -0
  49. data/lib/java_pdf/docbook.jar +0 -0
  50. data/lib/java_pdf/iText-2.0.8.jar +0 -0
  51. data/lib/java_pdf/itext-paulo-155.jar +0 -0
  52. data/lib/java_pdf/lib/LICENSE +71 -0
  53. data/lib/java_pdf/lib/LICENSE-LGPL-2.1.txt +504 -0
  54. data/lib/java_pdf/lib/LICENSE-W3C-TEST +28 -0
  55. data/lib/java_pdf/lib/README +92 -0
  56. data/lib/java_pdf/lib/core-renderer-minimal.jar +0 -0
  57. data/lib/java_pdf/lib/core-renderer.jar +0 -0
  58. data/lib/java_pdf/lib/iText-2.0.8.jar +0 -0
  59. data/lib/java_pdf/lib/itext-paulo-155.jar +0 -0
  60. data/lib/java_pdf/lib/minium.jar +0 -0
  61. data/lib/java_pdf/minium.jar +0 -0
  62. data/lib/java_pdf/pd4ml_demo.jar +0 -0
  63. data/lib/java_pdf/ss_css2.jar +0 -0
  64. data/lib/java_pdf/svg.jar +0 -0
  65. data/lib/oxen_printer.rb +8 -0
  66. data/lib/oxen_printer/cab_printer.rb +101 -0
  67. data/lib/oxen_printer/csv_printer.rb +12 -0
  68. data/lib/oxen_printer/engine.rb +19 -0
  69. data/lib/oxen_printer/html_printer.rb +12 -0
  70. data/lib/oxen_printer/label_printer.rb +12 -0
  71. data/lib/oxen_printer/pdf_printer.rb +66 -0
  72. data/lib/oxen_printer/version.rb +3 -0
  73. data/lib/print_drivers.rb +94 -0
  74. data/lib/print_engine.rb +135 -0
  75. data/lib/tasks/oxen_printer_tasks.rake +4 -0
  76. data/oxen_printer.gemspec +25 -0
  77. metadata +163 -0
@@ -0,0 +1,68 @@
1
+ .card-panel
2
+ = simple_form_for(:printer) do |f|
3
+ = f.error_notification
4
+
5
+ .form-inputs
6
+ -# - if current_user.admin? and params[:controller] =~ /service/
7
+ -# / %input{ name: 'parent_id', collection: policy_scope(Account), class: :validate}
8
+ -# - else
9
+ %input{ type: :hidden, name: 'parent', value: 'Account' }
10
+ %input{ type: :hidden, name: 'parent_id', value: resource.id }
11
+
12
+ .row
13
+ = f.input :name
14
+
15
+ .row
16
+ = f.input :cups_printer, placeholder: t('.cups_printer'), required: true, disabled: @disabled
17
+
18
+ .row
19
+ = f.input :command, placeholder: t('.cups_cmd'), required: true, disabled: @disabled
20
+
21
+ .row
22
+ = f.input :paper, placeholder: t('.paper'), required: true, disabled: @disabled
23
+
24
+ .row
25
+ .input-field.col.s4
26
+ %label{ style: "margin-top: -20px"}= t('.service_active')
27
+ .switch
28
+ %label
29
+ = t(:passive)
30
+ =f.check_box :active, disabled: @disabled
31
+ %span.lever
32
+ = t(:active)
33
+
34
+
35
+ %br
36
+ %br
37
+ .row
38
+ / = f.input :last_monitored_at, disabled: true
39
+
40
+
41
+ %ul
42
+ %li tidsstyring
43
+ %li
44
+
45
+ - unless @disabled
46
+ .row
47
+ .form-actions.right-align
48
+ = f.button :submit, t('.account_printer_submit'), class: "printer_commit"
49
+
50
+ :coffeescript
51
+
52
+ $ ->
53
+ $(document.body).on 'click', 'input.printer_commit', (e) ->
54
+ e.preventDefault()
55
+ e.stopPropagation()
56
+ $form = $(e.target).closest('form')
57
+ data = $form.serialize()
58
+ jqxhr = $.ajax
59
+ url: '/admin/printers.js',
60
+ type: 'post',
61
+ data: data,
62
+ dataType: 'html'
63
+ jqxhr.done (response) ->
64
+ $('#account_printers').prepend(response)
65
+ fadeItOut $('.message_container .alert-success')
66
+ jqxhr.fail (response) ->
67
+ $('body').append(response)
68
+ fadeItOut $('.message_container .alert-danger'), 5000
@@ -0,0 +1,3 @@
1
+ %tr{ id: "tr-#{resource.id}"}
2
+ %td= link_to resource.name, resource
3
+ %td= show_resource_delete_icon resource, '/admin/printers'
@@ -0,0 +1,11 @@
1
+ .row
2
+ .col.s12
3
+ %table.responsive-table.hoverable.striped.resources_table
4
+ %thead
5
+ %tr
6
+ %th{ :"data-field"=>"name"}= t('.name')
7
+ %th= t(:delete)
8
+
9
+ %tbody#printers.resources_list
10
+ - resources.each do |printer|
11
+ = render partial: 'printer', locals: { resource: printer }
@@ -0,0 +1,18 @@
1
+ %tr{ id: "tr-#{printer.id}"}
2
+ %td= link_to printer.name, printer
3
+ %td= show_resource_delete_icon printer, '/admin/printers'
4
+ - if parent?
5
+ %td
6
+ - if user.printers.include? printer
7
+ = link_to detach_url( user,printer), class: 'attached green-text', title: t('detach_printers') do
8
+ %i.material-icons layers
9
+ - else
10
+ = link_to attach_url( user,printer), class: 'detached red-text', title: t('attach_printers') do
11
+ %i.material-icons layers_clear
12
+ %td
13
+ - if user.printers.preferred_printer.include? printer
14
+ -#= link_to defer_url( user,printer), class: 'preferred green-text', title: t('defer_printers') do
15
+ %i.preferred.material-icons.green-text{ data: { id: printer.id }} bookmark
16
+ - else
17
+ = link_to prefer_url( user,printer), class: 'deferred grey-text', data: { id: printer.id },title: t('prefer_printers') do
18
+ %i.material-icons bookmark_border
@@ -0,0 +1,14 @@
1
+ .row
2
+ .col.s12{ style: "height: 250px; overflow: scroll"}
3
+ %table.responsive-table.hoverable.striped.resources_table
4
+ %thead
5
+ %tr
6
+ %th{ :"data-field"=>"name"}= t('.name')
7
+ %th= t(:delete)
8
+ - if parent?
9
+ %th= t('attach_detach_printer')
10
+ %th= t('prefer_printer')
11
+
12
+ %tbody#account_printers.resources_list
13
+ - resource.account.printers.each do |printer|
14
+ = render partial: 'printers/user_printer', locals: { printer: printer, user: resource, parent: resource.account, parent_id: resource.account.id }
@@ -0,0 +1,5 @@
1
+ - if (resource.errors.empty? rescue false)
2
+ = render partial: 'printers/account_printer', locals: { printer: resource }
3
+
4
+ :javascript
5
+ eval("#{set_toasts}");
data/bin/rails ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 4 gems installed from the root of your application.
3
+
4
+ ENGINE_ROOT = File.expand_path('../..', __FILE__)
5
+ ENGINE_PATH = File.expand_path('../../lib/oxen_printer/engine', __FILE__)
6
+
7
+ # Set up gems listed in the Gemfile.
8
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
9
+ require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
10
+
11
+ require 'rails/all'
12
+ require 'rails/engine/commands'
@@ -0,0 +1,7 @@
1
+ da:
2
+ oxen:
3
+ printers:
4
+ new:
5
+ cups_printer: 'Angiv navnet på den CUPS printer, der skal håndtere print'
6
+ cups_cmd: 'Indfør den kommando som skal starte printjobbet ("lp -d $1 -o media=$2 $3" eller "lp -d $1 -o raw $2")'
7
+ paper: 'Angiv papirformatet - exvis Letter, A4, 30x57mm, eller lignende'
data/config/routes.rb ADDED
@@ -0,0 +1,47 @@
1
+ Rails.application.routes.draw do
2
+
3
+ concern :printing do
4
+ member do
5
+ get 'print'
6
+ get 'slip'
7
+ end
8
+ collection do
9
+ get 'print'
10
+ end
11
+ end
12
+
13
+ # prefer and defer elements (setting preferred true|false)
14
+ concern :preferring do
15
+ member do
16
+ get 'prefer'
17
+ get 'defer'
18
+ end
19
+ end
20
+
21
+ # attach and detach the route in question to its 'parent'
22
+ concern :attaching do
23
+ member do
24
+ get 'attach'
25
+ get 'detach'
26
+ end
27
+ end
28
+
29
+ # activate and passify the route in question
30
+ concern :activating do
31
+ member do
32
+ get 'activate'
33
+ get 'deactivate'
34
+ end
35
+ end
36
+
37
+
38
+ scope '/admin' do
39
+ resources :services
40
+ resources :printables
41
+ resources :print_jobs, concerns: :printing
42
+ resources :printers, concerns: [:activating, :attaching, :printing] do
43
+ resources :users, concerns: :attaching
44
+ end
45
+ end
46
+
47
+ end
@@ -0,0 +1,90 @@
1
+ #encoding: utf-8
2
+ class ActionPrinter < ActionView::Base #AbstractController::Base
3
+
4
+ # previously
5
+ # include AbstractController::Rendering
6
+ # include AbstractController::Helpers
7
+ # include AbstractController::Translation
8
+ # include AbstractController::AssetPaths
9
+ # include Rails.application.routes.url_helpers
10
+
11
+ # helper ApplicationHelper
12
+ # self.view_paths = "app/views"
13
+
14
+ # prepend_view_path ViewTemplate::Resolver.instance
15
+
16
+ attr_accessor :printer, :paper
17
+
18
+ def initialize(printer,paper)
19
+ @printer=printer
20
+ @paper=paper
21
+ super(Rails.configuration.paths['app/views'])
22
+ end
23
+
24
+ def command
25
+ @printer.command
26
+ end
27
+
28
+ # def printer
29
+ # @printer
30
+ # end
31
+ #
32
+ # def printer=value
33
+ # @printer = value
34
+ # end
35
+
36
+
37
+
38
+ #
39
+ # build a temp file with the HTML string rendered and provided as argument str
40
+ def html_file str, type='html'
41
+ f = Tempfile.new(['print', ".#{type}"])
42
+ f.puts str
43
+ f.close
44
+ Rails.logger.info "oxen: wrote #{f.path}"
45
+ f
46
+ end
47
+
48
+ def text_file str
49
+ html_file str, 'label'
50
+ end
51
+
52
+ def file_path
53
+ raise "must be implemented on the driver!!"
54
+ end
55
+
56
+ def label_file_path
57
+ @label_file_path ||= `mktemp -t lblXXXX`[0..-2]
58
+ end
59
+
60
+ def pdf_file_path
61
+ @pdf_file_path ||= `mktemp -t pdfXXXX`[0..-2]
62
+ end
63
+
64
+ def get_file_type
65
+ raise "you must implement this on the driver!!"
66
+ end
67
+
68
+ def send_print_file context
69
+ context.send_file pdf_file_path, filename: 'oxen_file', type: get_file_type, disposition: "attachment"
70
+ # context.cookies['fileDownload'] = 'true'
71
+ # File.open(pdf_file_path, 'r') do |fp|
72
+ # context.send_data fp.read.force_encoding('BINARY'), filename: 'oxen_file', type: "application/pdf", disposition: "attachment"
73
+ # end
74
+ end
75
+
76
+ def logit( log_type, msg )
77
+ Rails.logger.send(log_type, "[OXEN] #{Time.now} [#{log_type.to_s}] #{msg}")
78
+ end
79
+
80
+ # class Pushable
81
+ # def initialize(channel, pushtext)
82
+ # @channel = channel
83
+ # @pushtext = pushtext
84
+ # end
85
+ #
86
+ # def push
87
+ # Pusher[@channel].trigger('rjs_push', @pushtext )
88
+ # end
89
+ # end
90
+ end
@@ -0,0 +1,215 @@
1
+ #encoding: utf-8
2
+ module C4LabelPrintProvider
3
+
4
+ #
5
+ #
6
+ #
7
+ def self.included(klass)
8
+ klass.extend ClassMethods
9
+ # klass.logger.debug "*** extending Class #{klass.class_name} with say_c4_label"
10
+ klass.class_eval do
11
+ include InstanceMethods
12
+ end
13
+ end
14
+
15
+ #
16
+ #
17
+ #
18
+ module ClassMethods
19
+
20
+ end
21
+
22
+ #
23
+ #
24
+ #
25
+ module InstanceMethods
26
+
27
+
28
+
29
+ #
30
+ #
31
+ #
32
+ def say_c4_label nbr_labels=2, label_printer=""
33
+ kvast_strings = []
34
+ product_label = []
35
+ stock_or_customer_sign = provide_customer_or_stock_label
36
+ ft_profil = ""
37
+ if self.product.name =~ /FT Profil \D*/
38
+ # profil_nr ="FT Profil %s" % self.product.name.gsub(/^.* FT Profil (\d*).*$/, "\\1")
39
+ # ft_profil = "
40
+ # T :text2;8,135,0,3,pt25;#{profil_nr}"
41
+ end
42
+ props=self.product.name.split(" ")
43
+ props=props[0..props.size-2] if props.at(-1) =~ /\d*\/\d/
44
+ if props.size > 6
45
+ product_label[0] = props[0..6].join(" ")
46
+ product_label[1] = props[7..props.size].join(" ") #[ltw..self.product.name.size]
47
+ else
48
+ product_label[0] = props.join(" ")
49
+ product_label[1] = ""
50
+ end
51
+ if self.stock_items.size > 0
52
+ kvasts = self.stock_items.collect { |si| "%i/%0.2f" % [si.quantity.to_i,si.product.length.to_f] }
53
+ kvast_strings << kvasts[0..6].join(" :: ").gsub(/\./,",")
54
+ kvast_strings << ((kvasts.size > 6) ? kvasts[7..kvasts.size].join(" :: ").gsub(/\./,",") : "")
55
+ product_label[0] = product_label[0].gsub(/KVAST .*/, "")
56
+ product_label[1] = product_label[1].gsub(/KVAST .*/, "KVAST")
57
+ else
58
+ kvast_strings = []
59
+ kvast_strings << ""
60
+ kvast_strings << ""
61
+ end
62
+ supplier_colli_barcode_number = self.supplier_barcode_number ||= ""
63
+ if (width==0.0 or width.blank?)
64
+ thick_height = "ø#{self.product.height.to_i}"
65
+ else
66
+ thick_height = "#{self.product.height.to_i} x #{self.product.width.to_i}"
67
+ end
68
+ # old barcode: B 11.51,125.12,90,e,14.25,0.25;#{self.barcode_number.to_s}
69
+ # B 5, 5,0,CODE128, 12,.3;ABC123
70
+ cmd="J
71
+ H175,+0
72
+ O R
73
+ I :image1;8,55,90;LOGOGREY
74
+ S l1;0,0,145,149,104;label
75
+ G 4.13,6.88,0;R:95.09,131.13,1.00,1.00[F:100%]
76
+ B 18,125.12,90,CODE128,25,0.5;#{self.barcode_number.to_s}
77
+ T :bc_label;15,125,90,5,pt36;#{self.barcode_number.to_s}
78
+ #{stock_or_customer_sign}
79
+ T :text0;64,125,90,3,pt10;#{product_label[0]}
80
+ T :text1;68,125,90,3,pt10;#{product_label[1]}#{ft_profil}
81
+ T :thick_height;60,125,90,5,pt46;#{thick_height}
82
+ T :quantity_length;80,125,90,5,pt36;#{self.quantity.to_i.to_s} stk/ #{self.product.length.to_s.gsub(/\./,",")}m
83
+ T :pieces0;83,125,90,5,pt8;#{kvast_strings[0]}
84
+ T :pieces1;87,125,90,5,pt8;#{kvast_strings[1]}
85
+ T :supplier_colli_barcode_number;96,135.12,90,3,pt8;#{supplier_colli_barcode_number}
86
+ T :cubic;96,30,90,3,pt8;#{self.cubic.to_s}m3
87
+ T :label_print_dato;96,8,180,3,pt10;#{ Time.now.strftime('%d-%m-%Y')}
88
+ A #{nbr_labels}
89
+ "
90
+ # CHANGED 2009-01-15 use quantity from self - #{self.product.casing.split(" ")[0].to_s} stk/ #{self.product.length.to_s}m
91
+ return cmd if label_printer==""
92
+ upload_logo label_printer
93
+ File.open("#{RAILS_ROOT}/public/documents/label", "w") do |f|
94
+ f.write(cmd)
95
+ end
96
+
97
+ %x(lp -d #{label_printer} -o raw #{RAILS_ROOT}public/documents)
98
+
99
+ rescue
100
+ ""
101
+ end
102
+
103
+ #
104
+ # provide the sign for labels - either a customer or a stock sign (two-digit year)
105
+ def provide_customer_or_stock_label
106
+
107
+ # does this stock_item task belong to any particular customer order?
108
+ unless (self.purchase_task.blank? or self.purchase_task.customer_partner.blank?)
109
+ return "
110
+ T :customer_name;31,70,90,5,pt12;#{ self.purchase_task.customer_partner.name.strip[0..25] }
111
+ T :customer_zip;39,70,90,5,pt12;#{ zipcode_and_order_nr self.purchase_task }"
112
+ else
113
+ # perhaps the entire pick_list is a customer order?!
114
+ unless self.purchase_picklist.blank?
115
+ customer = self.purchase_picklist.customer_partner
116
+ unless customer.blank?
117
+ return "
118
+ T :customer_name;31,70,90,5,pt12;#{ customer.name.strip[0..25] }
119
+ T :customer_zip;39,70,90,5,pt12;#{ zipcode_and_order_nr self.purchase_picklist }"
120
+ end
121
+ end
122
+ # this is most definately a stock order - tell them!
123
+ return "T :year_big;40,58,90,5,pt66;#{ Time.now.strftime('%y') }"
124
+ end
125
+
126
+ end
127
+
128
+ #
129
+ # build zipcode and order number
130
+ def zipcode_and_order_nr element
131
+ "box: #{element.customer_partner.zipcode.strip[0..8]} ordrenr.: #{element.customer_project_number.strip[0..6]}"
132
+ end
133
+
134
+
135
+ #
136
+ #
137
+ #
138
+ #
139
+ #
140
+ #
141
+ def upload_logo printer
142
+ unless File.exist?("#{RAILS_ROOT}/tmp/lbl_logo.dat")
143
+ esc_byte = "\e"
144
+ buff = ""
145
+ buff <<
146
+ "e GIF;*
147
+ d GIF;LOGOGREY
148
+ " + esc_byte + "."
149
+ File.open("#{RAILS_ROOT}/public/forms/labels/logogrey.gif", "r") do |f|
150
+ f.each_byte {|b| b==27 ? buff<< b << b : buff << b}
151
+ end
152
+ buff << esc_byte + "."
153
+ File.open("#{RAILS_ROOT}/tmp/lbl_logo.dat", "w") do |f|
154
+ f.write(buff)
155
+ end
156
+ end
157
+
158
+ value = `lp -d #{printer} -o raw #{RAILS_ROOT}/tmp/lbl_logo.dat`
159
+ true
160
+ rescue
161
+ false
162
+ end
163
+
164
+ def label_test
165
+ kvast_strings = []
166
+ product_label = []
167
+ # if self.stock_items.size > 0
168
+ # kvasts = self.stock_items.collect { |si| "#{si.quantity} / #{si.product.length}" }
169
+ # kvast_strings << kvasts[0..6].join(" :: ")
170
+ # kvast_strings << ((kvasts.size > 6) ? kvasts[7..kvasts.size].join(" :: ") : "")
171
+ # product_label[0] = self.product.name.gsub(/KVAST .*/, "")
172
+ # product_label[1] = self.product.name.gsub(/.* KVAST/, "KVAST")
173
+ # else
174
+ kvast_strings = []
175
+ kvast_strings << ""
176
+ kvast_strings << ""
177
+ product_label[0] = "16x100 fyr ru tørret 12-15% æøåÆØÅ"
178
+ product_label[1] = "KVAST 201/3.454"
179
+ # end
180
+ supplier_colli_barcode_number = "" # TODO 2008-09-09 add supplier barcode number to picklist input
181
+ # old barcode: B 11.51,125.12,90,e,14.25,0.25;#{self.barcode_number.to_s}
182
+ # B 5, 5,0,CODE128, 12,.3;ABC123
183
+
184
+ # CHANGED 2008-09-12: from
185
+ # S l1;0,0,144,149,103;label
186
+ # B 11.51,125.12,90,CODE128,14.25,0.25;9201123123
187
+ # T :bc_label;35.51,125.25,90,5,pt36;9201123123
188
+
189
+
190
+ cmd = "J
191
+ H175,+0,D
192
+ O R, T
193
+ S l1;0,0,145,149,104;label
194
+ G 4.13,6.88,0;R:95.09,131.13,1.00,1.00[F:100%]
195
+ B 18,125.12,90,CODE128,25,0.5;9201123123
196
+ T :bc_label;15,125,90,5,pt36;123123
197
+ T :text0;64,125,90,3,pt10;#{product_label[0]}
198
+ T :text1;68,125,90,3,pt10;#{product_label[1]}
199
+ T :thick_height;60,125,90,5,pt46;16 x 100
200
+ T :quantity_length;80,125,90,5,pt36;201 stk/ 3.454m
201
+ T :pieces0;83,125,90,5,pt8;#{kvast_strings[0]}
202
+ T :pieces1;87,125,90,5,pt8;#{kvast_strings[1]}
203
+ T :supplier_colli_barcode_number;96,135.12,90,3,pt8;#{supplier_colli_barcode_number}
204
+ T :cubic;96,30,90,3,pt8;1.456m3
205
+ T :label_print_dato;96,8,180,3,pt10;#{ Time.now.strftime('%d-%m-%Y')}
206
+ A 1
207
+ "
208
+ File.open("#{RAILS_ROOT}/tmp/label", "w") do |f|
209
+ f.write(cmd)
210
+ end
211
+
212
+ %x(lp -d label -o raw #{RAILS_ROOT}/tmp/label)
213
+ end
214
+ end
215
+ end