oddb2tdat 1.0.8 → 1.0.9
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +4 -0
- data/bin/oddb2tdat +29 -5
- data/lib/oddb2tdat.rb +99 -47
- metadata +6 -6
data/History.txt
CHANGED
data/bin/oddb2tdat
CHANGED
@@ -8,18 +8,42 @@ def usage
|
|
8
8
|
#$0 ver.#{Oddb2tdat::VERSION}
|
9
9
|
Usage:
|
10
10
|
#$0 <input file (oddb.csv)> <output file (oddb.dat)>
|
11
|
-
|
12
|
-
#$0 <input file (oddb.csv)> <output file (oddb.dat)> <
|
11
|
+
#$0 <input file (oddb.csv)> <output file (oddb.dat)> <transfer file (transfer.dat)>
|
12
|
+
#$0 <input file (oddb.csv)> <output file (oddb.dat)> <optional input file (migel.csv)>
|
13
|
+
#$0 <input file (oddb.csv)> <output file (oddb.dat)> <optional input file (migel.csv)> <transfer file (transfer.dat)>
|
13
14
|
|
14
15
|
EOS
|
15
16
|
end
|
16
17
|
|
17
|
-
|
18
|
+
transfer = false
|
19
|
+
migel = false
|
20
|
+
valid = false
|
21
|
+
if !ARGV.empty? and File.exist?(ARGV[0])
|
22
|
+
case ARGV.length
|
23
|
+
when 2
|
24
|
+
valid = true
|
25
|
+
when 3
|
26
|
+
valid = true if File.exist?(ARGV[2])
|
27
|
+
if File.extname(ARGV[2]) == '.csv'
|
28
|
+
migel = true
|
29
|
+
else
|
30
|
+
transfer = true
|
31
|
+
end
|
32
|
+
when 4
|
33
|
+
valid = true if (File.exist?(ARGV[2]) and File.exist?(ARGV[3]))
|
34
|
+
migel = true
|
35
|
+
transfer = true
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
unless valid
|
18
40
|
usage
|
19
41
|
exit
|
20
42
|
end
|
21
43
|
|
22
44
|
app = Oddb2tdat.new(*ARGV)
|
45
|
+
app.transfer = transfer
|
46
|
+
if (migel)
|
47
|
+
app.target.push(:migel)
|
48
|
+
end
|
23
49
|
app.run
|
24
|
-
|
25
|
-
|
data/lib/oddb2tdat.rb
CHANGED
@@ -1,43 +1,54 @@
|
|
1
1
|
#! /usr/bin/env ruby
|
2
2
|
# encoding: utf-8
|
3
|
+
# Oddb2tdat -- 16.03.2012 -- yasaka@ywesee.com
|
3
4
|
# Oddb2tdat -- 15.02.2012 -- mhatakeyama@ywesee.com
|
4
5
|
|
5
6
|
require 'date'
|
6
7
|
=begin
|
7
|
-
01 RECA Recordart
|
8
|
-
02 CMUT Mutationscode
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
8
|
+
01 RECA Recordart 001 – 002 2 alpha: 11
|
9
|
+
02 CMUT Mutationscode 003 – 003 1 num: 3 ausser Handel (AE) sonst 1.
|
10
|
+
If there is no Pharmacode or Gültig bis is before today, CMUT must be 3.
|
11
|
+
03 PHAR Pharmacode 004 – 010 7 num: Pharmacode (G)
|
12
|
+
04 ABEZ Artikelbezeichnung 011 – 060 50 alpha: Präparate (H,K)
|
13
|
+
05 PRMO Arztpreis (=Galexis-Basis-Preis) 061 – 066 6 num: NIL
|
14
|
+
06 PRPU Publikumspreis (inkl. MWSt) 067 – 072 6 num: PP (N)
|
15
|
+
07 CKZL Kassenzulässigkeit 073 – 073 1 num: (Q,V)
|
14
16
|
1 = SL (Q)
|
15
17
|
2 = LPPV (V)
|
16
18
|
3 = hors list (No SL, should be 3 not 0)
|
17
|
-
08 CLAG Lagerart
|
18
|
-
09 CBGG Betäubung - Gift
|
19
|
-
10 CIKS Swissmedic-Listencode
|
20
|
-
11 ITHE Index-Therapeutikus
|
21
|
-
12 CEAN EAN-Code
|
22
|
-
13 CMWS Mehrwertsteuer-Code
|
19
|
+
08 CLAG Lagerart 074 – 074 1 num: NIL
|
20
|
+
09 CBGG Betäubung - Gift 075 – 075 1 num: (AI)
|
21
|
+
10 CIKS Swissmedic-Listencode 076 – 076 1 alpha: (P)
|
22
|
+
11 ITHE Index-Therapeutikus 077 – 083 7 num: (AH)
|
23
|
+
12 CEAN EAN-Code 084 – 096 13 num: (E)
|
24
|
+
13 CMWS Mehrwertsteuer-Code 097 - 097 1 num: 2
|
23
25
|
=end
|
24
26
|
|
25
27
|
class Oddb2tdat
|
26
|
-
VERSION = '1.0.
|
28
|
+
VERSION = '1.0.9'
|
27
29
|
COL = {
|
28
|
-
:
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
30
|
+
:ODDB => {
|
31
|
+
:CMUT => 30, # AE
|
32
|
+
:PHAR => 6, # G
|
33
|
+
:ABEZ => 7, # H
|
34
|
+
:PRMO => 12, # M
|
35
|
+
:PRPU => 13, # N
|
36
|
+
:CKZL1 => 16, # Q
|
37
|
+
:CKZL2 => 21, # V
|
38
|
+
:CBGG => 34, # AI
|
39
|
+
:CIKS => 15, # P
|
40
|
+
:ITHE => 33, # AH
|
41
|
+
:CEAN => 4, # E
|
42
|
+
:PACK => 10, # K
|
43
|
+
:GULT => 23, # X
|
44
|
+
},
|
45
|
+
:MIGEL => {
|
46
|
+
:PHAR => 1, # G
|
47
|
+
:ABEZ => 3, # H
|
48
|
+
:PRMO => 6, # M
|
49
|
+
:PRPU => 7, # N
|
50
|
+
:CEAN => 2, # E
|
51
|
+
}
|
41
52
|
}
|
42
53
|
LEN = {
|
43
54
|
:RECA => 2,
|
@@ -60,17 +71,26 @@ class Oddb2tdat
|
|
60
71
|
:PRPU => 66,
|
61
72
|
:CEAN => 83,
|
62
73
|
}
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
@
|
67
|
-
@
|
74
|
+
attr_accessor :target, :transfer
|
75
|
+
attr_reader :updated_prmo
|
76
|
+
def initialize(input, output, *options)
|
77
|
+
@target = [:oddb]
|
78
|
+
@transfer = false
|
79
|
+
@import = nil
|
80
|
+
@input = input
|
81
|
+
@output = output
|
82
|
+
@options = options
|
68
83
|
end
|
69
84
|
def run
|
70
85
|
parse
|
86
|
+
if @target.include?(:migel)
|
87
|
+
@input = @options.first
|
88
|
+
parse_migel
|
89
|
+
end
|
71
90
|
output
|
72
|
-
if @
|
73
|
-
@
|
91
|
+
if @transfer
|
92
|
+
@import = @options.last
|
93
|
+
@input = @output
|
74
94
|
import_prmo
|
75
95
|
end
|
76
96
|
end
|
@@ -111,40 +131,72 @@ class Oddb2tdat
|
|
111
131
|
while line=input.gets
|
112
132
|
row = ''
|
113
133
|
cols = line.split(/;/)
|
114
|
-
if cmut = cols[COL[:CMUT]] and cmut =~ /Ja/ or cmut =~ /Nein/
|
134
|
+
if cmut = cols[COL[:ODDB][:CMUT]] and cmut =~ /Ja/ or cmut =~ /Nein/
|
115
135
|
row << "%#{LEN[:RECA]}s" % '11'
|
116
|
-
row << "%#{LEN[:CMUT]}s" % if(phar = cols[COL[:PHAR]] and phar.size > 3) or (!expired?(cols[COL[:GULT]]))
|
136
|
+
row << "%#{LEN[:CMUT]}s" % if(phar = cols[COL[:ODDB][:PHAR]] and phar.size > 3) or (!expired?(cols[COL[:ODDB][:GULT]]))
|
117
137
|
(cmut =~ /Ja/ ? '3':'1')
|
118
138
|
else
|
119
139
|
'3'
|
120
140
|
end
|
121
|
-
row << "%0#{LEN[:PHAR]}d" % cols[COL[:PHAR]].to_i
|
122
|
-
row << "%-#{LEN[:ABEZ]}s" % (cols[COL[:ABEZ]].to_s.gsub(/"/,'') + " " + cols[COL[:PACK]]).to_s[0,LEN[:ABEZ]].gsub(/"/,'')
|
123
|
-
row << "%#{LEN[:PRMO]}s" % format_price(cols[COL[:PRMO]])
|
124
|
-
row << "%#{LEN[:PRPU]}s" % format_price(cols[COL[:PRPU]])
|
125
|
-
row << "%#{LEN[:CKZL]}s" % if cols[COL[:CKZL1]] =~ /Ja/
|
141
|
+
row << "%0#{LEN[:PHAR]}d" % cols[COL[:ODDB][:PHAR]].to_i
|
142
|
+
row << "%-#{LEN[:ABEZ]}s" % (cols[COL[:ODDB][:ABEZ]].to_s.gsub(/"/,'') + " " + cols[COL[:ODDB][:PACK]]).to_s[0,LEN[:ABEZ]].gsub(/"/,'')
|
143
|
+
row << "%#{LEN[:PRMO]}s" % format_price(cols[COL[:ODDB][:PRMO]])
|
144
|
+
row << "%#{LEN[:PRPU]}s" % format_price(cols[COL[:ODDB][:PRPU]])
|
145
|
+
row << "%#{LEN[:CKZL]}s" % if cols[COL[:ODDB][:CKZL1]] =~ /Ja/
|
126
146
|
1
|
127
|
-
elsif cols[COL[:CKZL2]] =~ /Ja/
|
147
|
+
elsif cols[COL[:ODDB][:CKZL2]] =~ /Ja/
|
128
148
|
2
|
129
149
|
else
|
130
150
|
3
|
131
151
|
end
|
132
152
|
row << "%#{LEN[:CLAG]}s" % 0
|
133
|
-
row << "%#{LEN[:CBGG]}s" % (cols[COL[:CBGG]] =~ /Ja/ ? 1:0)
|
134
|
-
row << "%#{LEN[:CIKS]}s" % if ciks = cols[COL[:CIKS]] and ciks != '""'
|
153
|
+
row << "%#{LEN[:CBGG]}s" % (cols[COL[:ODDB][:CBGG]] =~ /Ja/ ? 1:0)
|
154
|
+
row << "%#{LEN[:CIKS]}s" % if ciks = cols[COL[:ODDB][:CIKS]] and ciks != '""'
|
135
155
|
ciks
|
136
156
|
else
|
137
157
|
0
|
138
158
|
end
|
139
|
-
row << "%#{LEN[:ITHE]}s" % format_date(cols[COL[:ITHE]])
|
140
|
-
row << "%#{LEN[:CEAN]}s" % cols[COL[:CEAN]]
|
159
|
+
row << "%#{LEN[:ITHE]}s" % format_date(cols[COL[:ODDB][:ITHE]])
|
160
|
+
row << "%#{LEN[:CEAN]}s" % cols[COL[:ODDB][:CEAN]]
|
161
|
+
row << "%#{LEN[:CMWS]}s" % '2'
|
162
|
+
@rows << row
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
def parse_migel
|
168
|
+
return if @rows.empty?
|
169
|
+
File.open(@input, 'r:utf-8:iso-8859-1') do |input|
|
170
|
+
while line=input.gets
|
171
|
+
row = ''
|
172
|
+
cols = line.split(/,/)
|
173
|
+
if cols[COL[:MIGEL][:CEAN]].length == LEN[:CEAN]
|
174
|
+
row << "%#{LEN[:RECA]}s" % '11'
|
175
|
+
row << "%#{LEN[:CMUT]}s" % if (phar = cols[COL[:MIGEL][:PHAR]] and phar.size > 3)
|
176
|
+
'1'
|
177
|
+
else
|
178
|
+
'3'
|
179
|
+
end
|
180
|
+
row << "%0#{LEN[:PHAR]}d" % cols[COL[:MIGEL][:PHAR]].to_i
|
181
|
+
row << "%-#{LEN[:ABEZ]}s" % (cols[COL[:MIGEL][:ABEZ]].to_s.gsub(/"/,'')).to_s[0,LEN[:ABEZ]].gsub(/"/,'')
|
182
|
+
row << "%#{LEN[:PRMO]}s" % format_price(cols[COL[:MIGEL][:PRMO]].to_i.to_s) if cols[COL[:MIGEL][:PRMO]]
|
183
|
+
row << "%#{LEN[:PRPU]}s" % format_price(cols[COL[:MIGEL][:PRPU]].to_i.to_s) if cols[COL[:MIGEL][:PRPU]]
|
184
|
+
row << "%#{LEN[:CKZL]}s" % 3
|
185
|
+
row << "%#{LEN[:CLAG]}s" % 0
|
186
|
+
row << "%#{LEN[:CBGG]}s" % 0
|
187
|
+
row << "%#{LEN[:CIKS]}s" % 0
|
188
|
+
row << "%0#{LEN[:ITHE]}d" % 0
|
189
|
+
row << "%0#{LEN[:CEAN]}d" % if (ean = cols[COL[:MIGEL][:CEAN]] and !ean.empty?)
|
190
|
+
ean.to_i
|
191
|
+
else
|
192
|
+
0
|
193
|
+
end
|
141
194
|
row << "%#{LEN[:CMWS]}s" % '2'
|
142
195
|
@rows << row
|
143
196
|
end
|
144
197
|
end
|
145
198
|
end
|
146
199
|
end
|
147
|
-
attr_reader :updated_prmo
|
148
200
|
def import_prmo
|
149
201
|
import_ean = {}
|
150
202
|
import_pha = {}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oddb2tdat
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.9
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-03-
|
12
|
+
date: 2012-03-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rdoc
|
16
|
-
requirement: &
|
16
|
+
requirement: &8718900 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '3.10'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *8718900
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: hoe
|
27
|
-
requirement: &
|
27
|
+
requirement: &8718440 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: '2.13'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *8718440
|
36
36
|
description: ! '* oddb2tdat converts oddb.csv to oddb.dat
|
37
37
|
|
38
38
|
* http://dev.ywesee.com/wiki.php/ODDB/Oddb2tdat'
|