oddb2xml 2.5.0 → 2.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/Elexis_Artikelstamm_v003.xsd +387 -0
- data/Elexis_Artikelstamm_v5.xsd +513 -0
- data/Gemfile +2 -6
- data/History.txt +11 -0
- data/README.md +35 -27
- data/artikelstamm.md +68 -0
- data/bin/compare_v5 +41 -0
- data/bin/oddb2xml +3 -15
- data/data/article_overrides.yaml +51859 -0
- data/data/gtin2ignore.yaml +30510 -0
- data/data/product_overrides.yaml +4 -0
- data/lib/oddb2xml/builder.rb +543 -192
- data/lib/oddb2xml/cli.rb +82 -62
- data/lib/oddb2xml/compare.rb +189 -0
- data/lib/oddb2xml/compressor.rb +6 -3
- data/lib/oddb2xml/downloader.rb +79 -64
- data/lib/oddb2xml/extractor.rb +67 -40
- data/lib/oddb2xml/options.rb +76 -77
- data/lib/oddb2xml/parslet_compositions.rb +18 -1
- data/lib/oddb2xml/util.rb +25 -3
- data/lib/oddb2xml/version.rb +1 -1
- data/oddb2xml.gemspec +8 -5
- data/oddb2xml.xsd +1 -0
- data/spec/artikelstamm_spec.rb +383 -0
- data/spec/builder_spec.rb +147 -118
- data/spec/calc_spec.rb +3 -15
- data/spec/cli_spec.rb +24 -35
- data/spec/compare_spec.rb +24 -0
- data/spec/compressor_spec.rb +1 -3
- data/spec/data/Elexis_Artikelstamm_v5.xsd +513 -0
- data/spec/data/Preparations.xml +2200 -0
- data/spec/data/Publications.xls +0 -0
- data/spec/data/artikelstamm_N_010917.xml +39 -0
- data/spec/data/artikelstamm_N_011217.xml +17 -0
- data/spec/data/artikelstamm_P_010917.xml +86 -0
- data/spec/data/artikelstamm_P_011217.xml +63 -0
- data/spec/data/oddb2xml_files_lppv.txt +2 -0
- data/spec/data/refdata_NonPharma.xml +38 -0
- data/spec/data/refdata_Pharma.xml +220 -0
- data/spec/data/swissmedic_orphan.xlsx +0 -0
- data/spec/data/swissmedic_package.xlsx +0 -0
- data/spec/data/transfer.dat +59 -19
- data/spec/data/v5_first.xml +102 -0
- data/spec/data/v5_second.xml +184 -0
- data/spec/data_helper.rb +72 -0
- data/spec/downloader_spec.rb +19 -27
- data/spec/extractor_spec.rb +27 -33
- data/spec/fixtures/vcr_cassettes/artikelstamm.json +1 -0
- data/spec/options_spec.rb +73 -66
- data/spec/spec_helper.rb +73 -24
- data/test_options.rb +4 -2
- metadata +100 -21
- data/spec/data/XMLPublications.zip +0 -0
- data/spec/data/compressor/oddb_article.xml +0 -0
- data/spec/data/compressor/oddb_fi.xml +0 -0
- data/spec/data/compressor/oddb_fi_product.xml +0 -0
- data/spec/data/compressor/oddb_limitation.xml +0 -0
- data/spec/data/compressor/oddb_product.xml +0 -0
- data/spec/data/compressor/oddb_substance.xml +0 -0
data/lib/oddb2xml/extractor.rb
CHANGED
@@ -9,14 +9,15 @@ require 'oddb2xml/xml_definitions'
|
|
9
9
|
module Oddb2xml
|
10
10
|
module TxtExtractorMethods
|
11
11
|
def initialize(str)
|
12
|
+
Oddb2xml.log("TxtExtractorMethods #{str} #{str.to_s.size} bytes")
|
12
13
|
@io = StringIO.new(str)
|
13
14
|
end
|
14
15
|
def to_hash
|
15
16
|
data = {}
|
16
17
|
while line = @io.gets
|
17
18
|
next unless line =~ /\d{13}/
|
18
|
-
|
19
|
-
data[
|
19
|
+
ean13 = line.chomp.gsub("\"", '')
|
20
|
+
data[ean13] = true
|
20
21
|
end
|
21
22
|
data
|
22
23
|
end
|
@@ -24,6 +25,7 @@ module Oddb2xml
|
|
24
25
|
class Extractor
|
25
26
|
attr_accessor :xml
|
26
27
|
def initialize(xml)
|
28
|
+
Oddb2xml.log("Extractor #{xml } xml #{xml.size} bytes")
|
27
29
|
@xml = xml
|
28
30
|
end
|
29
31
|
end
|
@@ -37,6 +39,7 @@ module Oddb2xml
|
|
37
39
|
result = PreparationsEntry.parse(@xml.sub(Strip_For_Sax_Machine, ''), :lazy => true)
|
38
40
|
result.Preparations.Preparation.each do |seq|
|
39
41
|
item = {}
|
42
|
+
item[:data_origin] = 'bag_xml'
|
40
43
|
item[:refdata] = true
|
41
44
|
item[:product_key] = seq.ProductCommercial
|
42
45
|
item[:desc_de] = (desc = seq.DescriptionDe) ? desc : ''
|
@@ -81,8 +84,7 @@ module Oddb2xml
|
|
81
84
|
puts "BagXmlExtractor: Setting missing GTIN #{pac.GTIN} in SwissmedicNo8 #{pac.SwissmedicNo8} BagDossierNo #{pac.BagDossierNo} PackId #{pac.PackId} #{item[:name_de]}."
|
82
85
|
end
|
83
86
|
end
|
84
|
-
|
85
|
-
|
87
|
+
ean13 = pac.GTIN.to_s
|
86
88
|
# packages
|
87
89
|
exf = {:price => '', :valid_date => '', :price_code => ''}
|
88
90
|
if pac.Prices and pac.Prices.ExFactoryPrice
|
@@ -96,14 +98,14 @@ module Oddb2xml
|
|
96
98
|
pub[:valid_date] = pac.Prices.PublicPrice.ValidFromDate if pac.Prices.PublicPrice.ValidFromDate
|
97
99
|
pub[:price_code] = pac.Prices.PublicPrice.PriceTypeCode if pac.Prices.PublicPrice.PriceTypeCode
|
98
100
|
end
|
99
|
-
item[:packages][
|
100
|
-
:
|
101
|
+
item[:packages][ean13] = {
|
102
|
+
:ean13 => ean13,
|
101
103
|
:swissmedic_category => (cat = pac.SwissmedicCategory) ? cat : '',
|
102
104
|
:swissmedic_number8 => (num = pac.SwissmedicNo8) ? num : '',
|
103
105
|
:prices => { :exf_price => exf, :pub_price => pub },
|
104
106
|
}
|
105
107
|
# related all limitations
|
106
|
-
item[:packages][
|
108
|
+
item[:packages][ean13][:limitations] = []
|
107
109
|
limitations = Hash.new{|h,k| h[k] = [] }
|
108
110
|
if seq.Limitations
|
109
111
|
limitations[:seq] = seq.Limitations.Limitation.collect { |x| x }
|
@@ -132,11 +134,11 @@ module Oddb2xml
|
|
132
134
|
id = item[key].to_s
|
133
135
|
when :pac
|
134
136
|
key = :swissmedic_number8
|
135
|
-
id = item[:packages][
|
137
|
+
id = item[:packages][ean13][key].to_s
|
136
138
|
end
|
137
|
-
if id.empty? && item[:packages][
|
139
|
+
if id.empty? && item[:packages][ean13][ :swissmedic_number8]
|
138
140
|
key = :swissmedic_number8
|
139
|
-
id = item[:packages][
|
141
|
+
id = item[:packages][ean13][key].to_s
|
140
142
|
end
|
141
143
|
lims.each do |lim|
|
142
144
|
limitation = {
|
@@ -160,13 +162,13 @@ module Oddb2xml
|
|
160
162
|
end
|
161
163
|
end
|
162
164
|
limitation[:del] = deleted
|
163
|
-
item[:packages][
|
165
|
+
item[:packages][ean13][:limitations] << limitation
|
164
166
|
end if lims
|
165
167
|
end
|
166
168
|
# limitation points
|
167
169
|
pts = pac.PointLimitations.PointLimitation.first # only first points
|
168
|
-
item[:packages][
|
169
|
-
data[
|
170
|
+
item[:packages][ean13][:limitation_points] = pts ? pts.Points : ''
|
171
|
+
data[ean13] = item
|
170
172
|
end
|
171
173
|
end
|
172
174
|
data
|
@@ -183,24 +185,30 @@ module Oddb2xml
|
|
183
185
|
result = SwissRegArticleEntry.parse(@xml.sub(Strip_For_Sax_Machine, ''), :lazy => true)
|
184
186
|
items = result.ARTICLE.ITEM
|
185
187
|
items.each do |pac|
|
188
|
+
ean13 = (gtin = pac.GTIN.to_s) ? gtin: '0'
|
189
|
+
if ean13.size != 13
|
190
|
+
puts "Refdata #{@type} ean13: Fixed incorrect length #{ean13.size} for #{ean13}"
|
191
|
+
ean13 = ean13[1..-1]
|
192
|
+
end
|
186
193
|
item = {}
|
194
|
+
item[:data_origin] = 'refdata'
|
187
195
|
item[:refdata] = true
|
188
196
|
item[:_type] = (typ = pac.ATYPE.downcase.to_sym) ? typ: ''
|
189
|
-
item[:
|
190
|
-
item[:pharmacode] = (phar = pac.PHAR.
|
197
|
+
item[:ean13] = ean13
|
198
|
+
item[:pharmacode] = (phar = pac.PHAR.to_s) ? phar: '0'
|
191
199
|
item[:last_change] = (date = Time.parse(pac.DT).to_s) ? date: '' # Date and time of last data change
|
192
200
|
item[:desc_de] = (dscr = pac.NAME_DE) ? dscr: ''
|
193
201
|
item[:desc_fr] = (dscr = pac.NAME_FR) ? dscr: ''
|
194
202
|
item[:atc_code] = (code = pac.ATC) ? code.to_s : ''
|
195
|
-
|
196
|
-
|
203
|
+
item[:company_name] = (nam = pac.AUTH_HOLDER_NAME) ? nam: ''
|
204
|
+
item[:company_ean] = (gln = pac.AUTH_HOLDER_GLN) ? gln: ''
|
197
205
|
unless item[:pharmacode]
|
198
206
|
item[:pharmacode] = phar
|
199
207
|
unless data[item[:pharmacode]] # pharmacode => GTINs
|
200
|
-
data[item[:
|
208
|
+
data[item[:ean13]] = []
|
201
209
|
end
|
202
210
|
end
|
203
|
-
data[item[:
|
211
|
+
data[item[:ean13]] = item
|
204
212
|
end
|
205
213
|
data
|
206
214
|
end
|
@@ -210,6 +218,7 @@ module Oddb2xml
|
|
210
218
|
@filename = File.join(Downloads, File.basename(filename))
|
211
219
|
@filename = File.join(SpecData, File.basename(filename)) if defined?(RSpec) and not File.exists?(@filename)
|
212
220
|
@type = type
|
221
|
+
Oddb2xml.log("SwissmedicExtractor #{@filename} #{File.size(@filename)} bytes")
|
213
222
|
return unless File.exists?(@filename)
|
214
223
|
@sheet = RubyXL::Parser.parse(File.expand_path(@filename)).worksheets[0]
|
215
224
|
end
|
@@ -280,8 +289,8 @@ module Oddb2xml
|
|
280
289
|
unless no8.empty?
|
281
290
|
next if no8.to_i == 0
|
282
291
|
ean_base12 = "7680#{no8}"
|
283
|
-
data[no8
|
284
|
-
:
|
292
|
+
data[no8] = {
|
293
|
+
:ean13 => (ean_base12.ljust(12, '0') + Oddb2xml.calc_checksum(ean_base12)),
|
285
294
|
:prodno => prodno ? prodno : '',
|
286
295
|
:ith_swissmedic => row[ith] ? row[ith].value.to_s : '',
|
287
296
|
:swissmedic_category => row[cat].value.to_s,
|
@@ -296,6 +305,11 @@ module Oddb2xml
|
|
296
305
|
:gen_production => row[COLUMNS_JULY_2015.keys.index(:gen_production)].value.to_s,
|
297
306
|
:insulin_category => row[COLUMNS_JULY_2015.keys.index(:insulin_category)].value.to_s,
|
298
307
|
:drug_index => row[COLUMNS_JULY_2015.keys.index(:drug_index)].value.to_s,
|
308
|
+
:data_origin => 'swissmedic_package',
|
309
|
+
:expiry_date => row[COLUMNS_JULY_2015.keys.index(:expiry_date)].value.to_s,
|
310
|
+
:company_name => row[COLUMNS_JULY_2015.keys.index(:company)].value.to_s,
|
311
|
+
:size => row[COLUMNS_JULY_2015.keys.index(:size)].value.to_s,
|
312
|
+
:unit => row[COLUMNS_JULY_2015.keys.index(:unit)].value.to_s,
|
299
313
|
}
|
300
314
|
end
|
301
315
|
end
|
@@ -307,14 +321,14 @@ module Oddb2xml
|
|
307
321
|
def cleanup_file
|
308
322
|
begin
|
309
323
|
File.unlink(@filename) if File.exists?(@filename)
|
310
|
-
rescue Errno::EACCES # Permission Denied on Windows
|
324
|
+
rescue Errno::EACCES # Permission Denied on Windows
|
311
325
|
end unless defined?(RSpec)
|
312
326
|
end
|
313
327
|
|
314
328
|
end
|
315
329
|
class MigelExtractor < Extractor
|
316
330
|
def initialize(bin)
|
317
|
-
io
|
331
|
+
Oddb2xml.log("MigelExtractor #{io} #{File.size(io)} bytes")
|
318
332
|
book = Spreadsheet.open(io, 'rb')
|
319
333
|
@sheet = book.worksheet(0)
|
320
334
|
end
|
@@ -322,19 +336,20 @@ module Oddb2xml
|
|
322
336
|
data = {}
|
323
337
|
@sheet.each_with_index do |row, i|
|
324
338
|
next if i.zero?
|
325
|
-
phar = row[1]
|
339
|
+
phar = row[1]
|
326
340
|
next if phar == 0
|
327
|
-
|
328
|
-
|
341
|
+
ean13 = row[0]
|
342
|
+
ean13 = phar unless ean13.to_s.length == 13
|
329
343
|
data[ean] = {
|
330
344
|
:refdata => true,
|
331
|
-
:
|
332
|
-
:pharmacode => phar
|
345
|
+
:ean13 => ean13,
|
346
|
+
:pharmacode => phar,
|
333
347
|
:desc_de => row[3],
|
334
348
|
:desc_fr => row[4],
|
335
349
|
:quantity => row[5], # quantity
|
336
350
|
:company_name => row[6],
|
337
|
-
:company_ean => row[7]
|
351
|
+
:company_ean => row[7],
|
352
|
+
:data_origin => 'migel'
|
338
353
|
}
|
339
354
|
end
|
340
355
|
data
|
@@ -350,7 +365,8 @@ module Oddb2xml
|
|
350
365
|
lang = pac.lang.to_s
|
351
366
|
next unless lang =~ /de|fr/
|
352
367
|
item = {}
|
353
|
-
item[:refdata] = true
|
368
|
+
item[:refdata] = true
|
369
|
+
item[:data_origin] = 'swissmedic_info'
|
354
370
|
item[:name] = (name = pac.title) ? name : ''
|
355
371
|
item[:owner] = (ownr = pac.authHolder) ? ownr : ''
|
356
372
|
item[:style] = Nokogiri::HTML.fragment(pac.style).to_html(:encoding => 'UTF-8')
|
@@ -370,6 +386,7 @@ module Oddb2xml
|
|
370
386
|
|
371
387
|
class EphaExtractor < Extractor
|
372
388
|
def initialize(str)
|
389
|
+
Oddb2xml.log("EphaExtractor #{str.size} bytes")
|
373
390
|
@io = StringIO.new(str)
|
374
391
|
end
|
375
392
|
def to_arry
|
@@ -384,6 +401,7 @@ module Oddb2xml
|
|
384
401
|
row = CSV.parse_line(line.gsub('""','"'))
|
385
402
|
action = {}
|
386
403
|
next unless row.size > 8
|
404
|
+
action[:data_origin] = 'epha'
|
387
405
|
action[:ixno] = ixno
|
388
406
|
action[:title] = row[4]
|
389
407
|
action[:atc1] = row[0]
|
@@ -413,6 +431,7 @@ module Oddb2xml
|
|
413
431
|
row = line.chomp.split("\t")
|
414
432
|
next if row[0] =~ /^GLN/
|
415
433
|
data << {
|
434
|
+
:data_origin => 'medreg',
|
416
435
|
:gln => row[0].to_s.gsub(/[^0-9]/, ''), #=> GLN Betrieb
|
417
436
|
:name_1 => row[1].to_s, #=> Betriebsname 1
|
418
437
|
:name_2 => row[2].to_s, #=> Betriebsname 2
|
@@ -431,6 +450,7 @@ module Oddb2xml
|
|
431
450
|
row = line.chomp.split("\t")
|
432
451
|
next if row[0] =~ /^GLN/
|
433
452
|
data << {
|
453
|
+
:data_origin => 'medreg',
|
434
454
|
:gln => row[0].to_s.gsub(/[^0-9]/, ''), #=> GLN Person
|
435
455
|
:last_name => row[1].to_s, #=> Name
|
436
456
|
:first_name => row[2].to_s, #=> Vorname
|
@@ -449,8 +469,9 @@ module Oddb2xml
|
|
449
469
|
end
|
450
470
|
class ZurroseExtractor < Extractor
|
451
471
|
# see http://dev.ywesee.com/Bbmb/TransferDat
|
452
|
-
def initialize(dat, extended = false)
|
472
|
+
def initialize(dat, extended = false, artikelstamm = false)
|
453
473
|
@@extended = extended
|
474
|
+
@artikelstamm = artikelstamm
|
454
475
|
FileUtils.makedirs(WorkDir)
|
455
476
|
@@error_file ||= File.open(File.join(WorkDir, "duplicate_ean13_from_zur_rose.txt"), 'wb+:ISO-8859-14')
|
456
477
|
@@items_without_ean13s ||= 0
|
@@ -470,37 +491,43 @@ module Oddb2xml
|
|
470
491
|
def to_hash
|
471
492
|
data = {}
|
472
493
|
while line = @io.gets
|
473
|
-
line = Oddb2xml.patch_some_utf8(line)
|
494
|
+
line = Oddb2xml.patch_some_utf8(line).chomp
|
474
495
|
next if line =~ /(ad us\.* vet)|(\(vet\))/i
|
475
496
|
if @@extended
|
476
497
|
next unless line =~ /(\d{13})(\d{1})$/
|
477
498
|
else
|
478
499
|
next unless line =~ /(7680\d{9})(\d{1})$/
|
479
500
|
end
|
480
|
-
pharma_code = line[3..9]
|
501
|
+
pharma_code = line[3..9]
|
481
502
|
if $1.to_s == '0000000000000'
|
482
503
|
@@items_without_ean13s += 1
|
483
|
-
ean13 = pharma_code # dummy ean13
|
504
|
+
ean13 = '999999' + pharma_code.to_s # dummy ean13
|
484
505
|
else
|
485
|
-
ean13 = $1
|
506
|
+
ean13 = $1
|
486
507
|
end
|
508
|
+
next if @artikelstamm && /(0{13})(\d{1})$/.match(line)
|
487
509
|
if data[ean13]
|
488
|
-
@@error_file.puts "Duplicate ean13 #{ean13} in line \nact: #{line}\norg: #{data[ean13][:line]}"
|
510
|
+
@@error_file.puts "Duplicate ean13 #{ean13} in line \nact: #{line.chomp}\norg: #{data[ean13][:line]}"
|
489
511
|
@@items_without_ean13s -= 1
|
490
512
|
@@duplicated_ean13s += 1
|
491
513
|
next
|
492
514
|
end
|
493
515
|
|
516
|
+
pexf = sprintf("%.2f", line[60,6].gsub(/(\d{2})$/, '.\1').to_f)
|
517
|
+
ppub = sprintf("%.2f", line[66,6].gsub(/(\d{2})$/, '.\1').to_f)
|
518
|
+
next if @artikelstamm && /^113/.match(line) && /^7680/.match(ean13)
|
519
|
+
next if @artikelstamm && /^113/.match(line) && ppub.eql?('0.0') && pexf.eql?('0.0')
|
494
520
|
data[ean13] = {
|
495
|
-
:
|
496
|
-
:
|
521
|
+
:data_origin => 'zur_rose',
|
522
|
+
:line => line.chomp,
|
523
|
+
:ean13 => ean13,
|
497
524
|
:clag => line[73],
|
498
525
|
:vat => line[96],
|
499
526
|
:description => line[10..59].sub(/\s+$/, ''),
|
500
527
|
:quantity => '',
|
501
528
|
:pharmacode => pharma_code,
|
502
|
-
:price =>
|
503
|
-
:pub_price =>
|
529
|
+
:price => pexf,
|
530
|
+
:pub_price => ppub,
|
504
531
|
:type => :nonpharma,
|
505
532
|
:cmut => line[2],
|
506
533
|
}
|
data/lib/oddb2xml/options.rb
CHANGED
@@ -1,85 +1,84 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require '
|
2
|
+
require 'trollop'
|
3
|
+
require 'oddb2xml/version'
|
3
4
|
|
4
5
|
module Oddb2xml
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
:fi => false,
|
11
|
-
:adr => false,
|
12
|
-
:address => false,
|
13
|
-
:nonpharma => false,
|
14
|
-
:extended => false,
|
15
|
-
:compress_ext => nil,
|
16
|
-
:format => :xml,
|
17
|
-
:calc => false,
|
18
|
-
:tag_suffix => nil,
|
19
|
-
:debug => false,
|
20
|
-
:ean14 => false,
|
21
|
-
:skip_download=> false,
|
22
|
-
:log => false,
|
23
|
-
:percent => nil,
|
24
|
-
}
|
25
|
-
end
|
26
|
-
def Options.help
|
27
|
-
<<EOS
|
28
|
-
#$0 ver.#{Oddb2xml::VERSION}
|
29
|
-
Usage:
|
30
|
-
oddb2xml [option]
|
31
|
-
produced files are found under data
|
32
|
-
-a, --append Additional target nonpharma
|
33
|
-
-c F, --compress=F Compress format F. {tar.gz|zip}
|
34
|
-
-e --extended pharma, non-pharma plus prices and non-pharma from zurrose.
|
35
|
-
Products without EAN-Code will also be listed.
|
36
|
-
File oddb_calc.xml will also be generated
|
37
|
-
-f F, --format=F File format F, default is xml. {xml|dat}
|
38
|
-
If F is given, -o option is ignored.
|
39
|
-
-I x, --increment=x Increment price by x percent. Forces -f dat -p zurrose.
|
40
|
-
-I x, --increment=x create additional field price_resellerpub as
|
41
|
-
price_extfactory incremented by x percent (rounded to the next 0.05 francs)
|
42
|
-
in oddb_article.xml. In generated zurrose_transfer.dat PRPU is set to this price
|
43
|
-
Forces -f dat -p zurrose.
|
44
|
-
-i, --include Include target option for ean14 for 'dat' format.
|
45
|
-
'xml' format includes always ean14 records.
|
46
|
-
-o, --option Optional fachinfo output.
|
47
|
-
-p, --price Price source (transfer.dat) from ZurRose
|
48
|
-
-t S, --tag-suffix=S XML tag suffix S. Default is none. [A-z0-9]
|
49
|
-
If S is given, it is also used as prefix of filename.
|
50
|
-
-x N, --context=N context N {product|address}. product is default.
|
51
|
-
--calc create only oddb_calc.xml with GTIN, name and galenic information
|
6
|
+
module Options
|
7
|
+
def self.parse(args =ARGV)
|
8
|
+
if args.is_a?(String)
|
9
|
+
args = args.split(' ')
|
10
|
+
end
|
52
11
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
12
|
+
@opts = Trollop::options(args) do
|
13
|
+
version "#$0 ver.#{Oddb2xml::VERSION}"
|
14
|
+
banner <<-EOS
|
15
|
+
#{File.expand_path($0)} version #{Oddb2xml::VERSION}
|
16
|
+
Usage:
|
17
|
+
oddb2xml [option]
|
18
|
+
produced files are found under data
|
58
19
|
EOS
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
20
|
+
opt :append, "Additional target nonpharma", :default => false
|
21
|
+
opt :artikelstamm, "Create Artikelstamm Version 3 and 5 for Elexis >= 3.1"
|
22
|
+
opt :compress_ext, "format F. {tar.gz|zip}", :type => :string, :default => nil, :short => 'c'
|
23
|
+
opt :extended, "pharma, non-pharma plus prices and non-pharma from zurrose.
|
24
|
+
Products without EAN-Code will also be listed.
|
25
|
+
File oddb_calc.xml will also be generated"
|
26
|
+
opt :format, "File format F, default is xml. {xml|dat}
|
27
|
+
If F is given, -o option is ignored.", :type => :string, :default => 'xml'
|
28
|
+
opt :include, "Include target option for ean14 for 'dat' format.
|
29
|
+
'xml' format includes always ean14 records.", :short => 'i'
|
30
|
+
opt :increment, "Increment price by x percent. Forces -f dat -p zurrose.
|
31
|
+
create additional field price_resellerpub as
|
32
|
+
price_extfactory incremented by x percent (rounded to the next 0.05 francs)
|
33
|
+
in oddb_article.xml. In generated zurrose_transfer.dat PRPU is set to this price
|
34
|
+
Forces -f dat -p zurrose.", :type => :int, :default => nil, :short => 'I'
|
35
|
+
opt :fi, "Optional fachinfo output.", :short => 'o'
|
36
|
+
opt :price, "Price source (transfer.dat) from ZurRose", :default => nil
|
37
|
+
opt :tag_suffix, "XML tag suffix S. Default is none. [A-z0-9]
|
38
|
+
If S is given, it is also used as prefix of filename.", :type => :string, :short => 't'
|
39
|
+
opt :context, "{product|address}. product is default.", :default => 'product', :type => :string, :short => 'x'
|
40
|
+
opt :calc, "create only oddb_calc.xml with GTIN, name and galenic information"
|
41
|
+
|
42
|
+
opt :skip_download, "skips downloading files it the file is already under downloads.
|
43
|
+
Downloaded files are saved under downloads"
|
44
|
+
opt :log, "log important actions", :short => :none
|
45
|
+
opt :use_ra11zip, "Use the ra11.zip (a zipped transfer.dat from Galexis)",
|
46
|
+
:default => File.exist?('ra11.zip') ? 'ra11.zip' : nil, :type => :string
|
47
|
+
end
|
48
|
+
|
49
|
+
@opts[:percent] = @opts[:increment]
|
50
|
+
if @opts[:increment]
|
51
|
+
@opts[:nonpharma] = true
|
52
|
+
@opts[:price] = :zurrose
|
53
|
+
end
|
54
|
+
@opts[:ean14] = @opts[:increment]
|
55
|
+
@opts.delete(:increment)
|
56
|
+
@opts[:nonpharma] = @opts[:append]
|
57
|
+
@opts.delete(:append)
|
58
|
+
if @opts[:extended]
|
59
|
+
@opts[:nonpharma] = true
|
60
|
+
@opts[:price] = :zurrose
|
61
|
+
@opts[:calc] = true
|
62
|
+
end
|
63
|
+
if @opts[:artikelstamm]
|
64
|
+
@opts[:extended] = true
|
65
|
+
@opts[:price] = :zurrose
|
66
|
+
end
|
67
|
+
@opts[:price] = :zurrose if @opts[:price].is_a?(TrueClass)
|
68
|
+
@opts[:price] = @opts[:price].to_sym if @opts[:price]
|
69
|
+
@opts[:ean14] = @opts[:include]
|
70
|
+
@opts[:format] = @opts[:format].to_sym if @opts[:format]
|
71
|
+
@opts.delete(:include)
|
72
|
+
@opts.delete(:help)
|
73
|
+
@opts.delete(:version)
|
74
|
+
|
75
|
+
@opts[:address] = false
|
76
|
+
@opts[:address] = true if /^addr(ess)*$/i.match(@opts[:context])
|
77
|
+
@opts.delete(:context)
|
78
|
+
|
79
|
+
@opts.delete(:price) unless @opts[:price]
|
80
|
+
|
81
|
+
@opts.each{|k,v| @opts.delete(k) if /_given$/.match(k.to_s)}
|
83
82
|
end
|
84
83
|
end
|
85
84
|
end
|