oddb2xml 1.5.1 → 1.5.2
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +6 -0
- data/lib/oddb2xml/builder.rb +21 -12
- data/lib/oddb2xml/downloader.rb +5 -5
- data/lib/oddb2xml/extractor.rb +11 -5
- data/lib/oddb2xml/version.rb +1 -1
- metadata +2 -2
data/History.txt
CHANGED
data/lib/oddb2xml/builder.rb
CHANGED
@@ -667,18 +667,7 @@ module Oddb2xml
|
|
667
667
|
#xml.ARTLIM {
|
668
668
|
# xml.LIMCD
|
669
669
|
#}
|
670
|
-
|
671
|
-
nincd = if @lppvs[de_idx[:ean]] # LPPV
|
672
|
-
20
|
673
|
-
elsif seq # BAG-XML (SL/LS)
|
674
|
-
10
|
675
|
-
elsif (de_idx[:migel] or # MiGel (xls)
|
676
|
-
de_idx[:_type] == :nonpharma) # MiGel (swissindex)
|
677
|
-
13
|
678
|
-
else
|
679
|
-
nil
|
680
|
-
end
|
681
|
-
if nincd
|
670
|
+
if nincd = detect_nincd(de_idx)
|
682
671
|
xml.ARTINS {
|
683
672
|
#xml.VDAT
|
684
673
|
#xml.INCD
|
@@ -855,6 +844,26 @@ module Oddb2xml
|
|
855
844
|
end
|
856
845
|
_builder.to_xml
|
857
846
|
end
|
847
|
+
def detect_nincd(de_idx)
|
848
|
+
if @lppvs[de_idx[:ean]] # LPPV
|
849
|
+
20
|
850
|
+
elsif @items[de_idx[:pharmacode]] # BAG-XML (SL/LS)
|
851
|
+
10
|
852
|
+
elsif (de_idx[:migel] or # MiGel (xls)
|
853
|
+
de_idx[:_type] == :nonpharma) # MiGel (swissindex)
|
854
|
+
13
|
855
|
+
else
|
856
|
+
# fallback via EAN
|
857
|
+
bag_entry_via_ean = @items.values.select do |i|
|
858
|
+
i[:packages].values.select {|_pac| _pac[:ean] == de_idx[:ean] }.length != 0
|
859
|
+
end.length
|
860
|
+
if bag_entry_via_ean > 0
|
861
|
+
10
|
862
|
+
else
|
863
|
+
nil
|
864
|
+
end
|
865
|
+
end
|
866
|
+
end
|
858
867
|
|
859
868
|
### --- see oddb2tdat
|
860
869
|
DAT_LEN = {
|
data/lib/oddb2xml/downloader.rb
CHANGED
@@ -14,7 +14,7 @@ module Oddb2xml
|
|
14
14
|
response = nil # win
|
15
15
|
io = File.open(file, option)
|
16
16
|
return io.read
|
17
|
-
rescue Timeout::Error
|
17
|
+
rescue Timeout::Error, Errno::ETIMEDOUT
|
18
18
|
retrievable? ? retry : raise
|
19
19
|
ensure
|
20
20
|
io.close if io and !io.closed? # win
|
@@ -144,7 +144,7 @@ module Oddb2xml
|
|
144
144
|
response = nil # win
|
145
145
|
end
|
146
146
|
return read_xml_form_zip(/^Preparation/iu, file)
|
147
|
-
rescue Timeout::Error
|
147
|
+
rescue Timeout::Error, Errno::ETIMEDOUT
|
148
148
|
retrievable? ? retry : raise
|
149
149
|
ensure
|
150
150
|
if File.exists?(file)
|
@@ -197,7 +197,7 @@ XML
|
|
197
197
|
end
|
198
198
|
rescue HTTPI::SSLError
|
199
199
|
exit # catch me in Cli class
|
200
|
-
rescue Timeout::Error
|
200
|
+
rescue Timeout::Error, Errno::ETIMEDOUT
|
201
201
|
retrievable? ? retry : raise
|
202
202
|
end
|
203
203
|
end
|
@@ -231,7 +231,7 @@ XML
|
|
231
231
|
end
|
232
232
|
io = File.open(file, 'rb')
|
233
233
|
return io.read
|
234
|
-
rescue Timeout::Error
|
234
|
+
rescue Timeout::Error, Errno::ETIMEDOUT
|
235
235
|
retrievable? ? retry : raise
|
236
236
|
ensure
|
237
237
|
io.close if io and !io.closed?
|
@@ -265,7 +265,7 @@ XML
|
|
265
265
|
response = nil # win
|
266
266
|
end
|
267
267
|
return read_xml_form_zip(/^AipsDownload_/iu, file)
|
268
|
-
rescue Timeout::Error
|
268
|
+
rescue Timeout::Error, Errno::ETIMEDOUT
|
269
269
|
retrievable? ? retry : raise
|
270
270
|
rescue NoMethodError
|
271
271
|
# pass
|
data/lib/oddb2xml/extractor.rb
CHANGED
@@ -24,6 +24,13 @@ module Oddb2xml
|
|
24
24
|
def initialize(xml)
|
25
25
|
@xml = xml
|
26
26
|
end
|
27
|
+
def correct_code(pharmacode, length=7)
|
28
|
+
if pharmacode.length != length # restore zero at the beginnig
|
29
|
+
("%0#{length}i" % pharmacode.to_i)
|
30
|
+
else
|
31
|
+
pharmacode
|
32
|
+
end
|
33
|
+
end
|
27
34
|
end
|
28
35
|
class BMUpdateExtractor < Extractor
|
29
36
|
include TxtExtractorMethods
|
@@ -68,12 +75,13 @@ module Oddb2xml
|
|
68
75
|
item[:packages] = {} # pharmacode => package
|
69
76
|
seq.xpath('.//Pack').each do |pac|
|
70
77
|
if phar = pac.attr('Pharmacode')
|
71
|
-
phar = phar.to_s
|
78
|
+
phar = correct_code(phar.to_s, 7)
|
72
79
|
# as common key with swissINDEX
|
73
80
|
item[:pharmacodes] << phar
|
74
81
|
# packages
|
75
82
|
item[:packages][phar] = {
|
76
83
|
:pharmacode => phar,
|
84
|
+
:ean => (ean = pac.at_xpath('.//GTIN')) ? ean.text : '',
|
77
85
|
:swissmedic_category => (cat = pac.at_xpath('.//SwissmedicCategory')) ? cat.text : '',
|
78
86
|
:swissmedic_number8 => (num = pac.at_xpath('.//SwissmedicNo8')) ? num.text.rjust(8, '0') : '',
|
79
87
|
:narcosis_flag => (flg = pac.at_xpath('.//FlagNarcosis')) ? flg.text : '',
|
@@ -176,9 +184,7 @@ module Oddb2xml
|
|
176
184
|
item[:company_ean] = (gln = comp.at_xpath('.//GLN')) ? gln.text : ''
|
177
185
|
end
|
178
186
|
unless item[:pharmacode].empty?
|
179
|
-
|
180
|
-
item[:pharmacode] = ("%07i" % item[:pharmacode])
|
181
|
-
end
|
187
|
+
item[:pharmacode] = correct_code(item[:pharmacode].to_s, 7)
|
182
188
|
unless data[item[:pharmacode]] # pharmacode => GTINs
|
183
189
|
data[item[:pharmacode]] = []
|
184
190
|
end
|
@@ -286,7 +292,7 @@ module Oddb2xml
|
|
286
292
|
data = {}
|
287
293
|
@sheet.each_with_index do |row, i|
|
288
294
|
next if i.zero?
|
289
|
-
phar = row[1].to_s
|
295
|
+
phar = correct_code(row[1].to_s.gsub(/[^0-9]/, ''), 7)
|
290
296
|
data[phar] = {
|
291
297
|
:ean => row[0].to_i.to_s,
|
292
298
|
:pharmacode => phar,
|
data/lib/oddb2xml/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oddb2xml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.5.
|
4
|
+
version: 1.5.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-06-
|
12
|
+
date: 2013-06-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rubyzip
|