<< | Index | >>
Confirm (Data)
ch.oddb> ODDB::MiGeLPlugin.new(self).update_items_by_migel -> Array ch.oddb> search_migel_products('342101021','de').length -> 1 ch.oddb> search_migel_products('342101021','de')[0] -> Elastische (Ideal-)Binden, Fixation, 100 % Baumwolle, gedehnt, textilelastisch ch.oddb> search_migel_products('342101021','de')[0].items.length -> 7 ch.oddb> search_migel_products('342101021','de')[0].item('1740101').class -> ODDB::Migel::Item ch.oddb> search_migel_products('342101021','de')[0].item('1740101').pharmacode -> 1740101 ch.oddb> search_migel_products('342101021','de')[0].item('1740101').pharmacode
Experiment
require 'model/migel/item' ... def initialize(session, migel_code, migel_product) # plugin = ODDB::SwissindexNonpharmaPlugin.new(session.app) # @table = plugin.search_migel_table(migel_code).map do |record| # Record.new(record, self) # end @table = migel_product.items.values @price = migel_product.price @qty = migel_product.qty @unit = migel_product.unit @pointer_descr = migel_product.migel_code end
#!/usr/bin/env ruby # ODDB::Migel::Item -- oddb.org -- 12.08.2011 -- mhatakeyama@ywesee.com require 'util/language' require 'model/text' module ODDB module Migel class Item include SimpleLanguage attr_accessor :ean_code, :pharmacode, :article_name, :companyname, :ppha, :ppub, :factor, :size, :status attr_reader :product def initialize(product) @product = product end def price @product.price end def qty @product.qty end def unit @product.unit end end end end
Run
Note
Access
Result
Access (for example)
Log
error in SBSM::Session#process: /de/gcc/migel_search/migel_code/151002001 NoMethodError undefined method `values' for nil:NilClass /home/masa/ywesee/oddb.org/src/model/migel/searched_table.rb:42:in `initialize' /home/masa/ywesee/oddb.org/src/state/global.rb:476:in `new' /home/masa/ywesee/oddb.org/src/state/global.rb:476:in `migel_search' /usr/lib64/ruby/site_ruby/1.8/sbsm/state.rb:222:in `send' /usr/lib64/ruby/site_ruby/1.8/sbsm/state.rb:222:in `_trigger'
Note
Next
Experiment
def migel_code(model) if items = model.items and !items.empty? link = PointerLink.new(:to_s, model, @session, self) link.value = model.migel_code link.href = @lookandfeel._event_url(:migel_search, {:migel_code => model.migel_code.gsub(/\./, '')}) link else model.migel_code end end
def migel_code(model) if items = model.items and !items.empty? link = PointerLink.new(:to_s, model, @session, self) link.value = model.migel_code link.href = @lookandfeel._event_url(:migel_search, {:migel_code => model.migel_code.gsub(/\./, '')}) link else model.migel_code end end
Access
Result
Next
Note
Experiment
def update_items_by_migel product = @app.search_migel_products('349903021', 'de')[0] migel_code = product.migel_code.split('.').to_s plugin = ODDB::SwissindexNonpharmaPlugin.new(@app) if table = plugin.search_migel_table(migel_code) table.each do |record| if record[:pharmacode] update_item(product, record) end end end end
Run
ch.oddb> ODDB::MiGeLPlugin.new(self).update_items_by_migel -> Array
Result
Next
Experiment
def estimate_time(start_time, total, count) estimate = (Time.now - start_time) * total / count log = count.to_s + " / " + total.to_s + "\t" em = estimate/60 eh = em/60 rest = estimate - (Time.now - start_time) rm = rest/60 rh = rm/60 log << "Estimate total: " if eh > 1.0 log << "%.2f" % eh + " [h]" else log << "%.2f" % em + " [m]" end log << " It will be done in: " if rh > 1.0 log << "%.2f" % rh + " [h]\n" else log << "%.2f" % rm + " [m]\n" end log end def update_items_by_migel(time_estimate = false) total = @app.migel_count start_time = Time.now @app.migel_products.each_with_index do |product, count| migel_code = product.migel_code.split('.').to_s plugin = ODDB::SwissindexNonpharmaPlugin.new(@app) if table = plugin.search_migel_table(migel_code) table.each do |record| if record[:pharmacode] update_item(product, record) end end end p estimate_time(start_time, total, count + 1) if time_estimate end end
Run
ch.oddb> ODDB::MiGeLPlugin.new(self).update_items_by_migel true
Log
"1 / 571\tEstimate total: 1.56 [h] It will be done in: 1.56 [h]\n" "2 / 571\tEstimate total: 57.60 [m] It will be done in: 57.40 [m]\n" "3 / 571\tEstimate total: 42.62 [m] It will be done in: 42.40 [m]\n" "4 / 571\tEstimate total: 1.10 [h] It will be done in: 1.09 [h]\n" "5 / 571\tEstimate total: 53.83 [m] It will be done in: 53.36 [m]\n" "6 / 571\tEstimate total: 45.18 [m] It will be done in: 44.71 [m]\n" "7 / 571\tEstimate total: 38.97 [m] It will be done in: 38.49 [m]\n" "8 / 571\tEstimate total: 34.40 [m] It will be done in: 33.92 [m]\n" "9 / 571\tEstimate total: 1.90 [h] It will be done in: 1.87 [h]\n" "10 / 571\tEstimate total: 1.75 [h] It will be done in: 1.72 [h]\n" "11 / 571\tEstimate total: 1.60 [h] It will be done in: 1.57 [h]\n" "12 / 571\tEstimate total: 1.47 [h] It will be done in: 1.44 [h]\n" "13 / 571\tEstimate total: 1.55 [h] It will be done in: 1.51 [h]\n" "14 / 571\tEstimate total: 1.46 [h] It will be done in: 1.42 [h]\n" "15 / 571\tEstimate total: 1.38 [h] It will be done in: 1.34 [h]\n" "16 / 571\tEstimate total: 1.39 [h] It will be done in: 1.35 [h]\n" "17 / 571\tEstimate total: 1.34 [h] It will be done in: 1.30 [h]\n" "18 / 571\tEstimate total: 2.15 [h] It will be done in: 2.08 [h]\n" "19 / 571\tEstimate total: 2.39 [h] It will be done in: 2.31 [h]\n" "20 / 571\tEstimate total: 2.71 [h] It will be done in: 2.61 [h]\n" "21 / 571\tEstimate total: 2.63 [h] It will be done in: 2.53 [h]\n" "22 / 571\tEstimate total: 2.55 [h] It will be done in: 2.45 [h]\n" "23 / 571\tEstimate total: 2.49 [h] It will be done in: 2.39 [h]\n" "24 / 571\tEstimate total: 2.45 [h] It will be done in: 2.34 [h]\n" "25 / 571\tEstimate total: 2.38 [h] It will be done in: 2.27 [h]\n" ...
Note
Error
... "161 / 571\tEstimate total: 2.25 [h] It will be done in: 1.62 [h]\n" "162 / 571\tEstimate total: 2.32 [h] It will be done in: 1.66 [h]\n" /usr/lib64/ruby/site_ruby/1.8/odba/persistable.rb:577: [BUG] Segmentation fault ruby 1.8.6 (2009-06-08) [x86_64-linux] Abgebrochen
Commit
Experiment
ch.oddb> search_migel_products('349903021','de')[0].oid -> ch.oddb> search_migel_products('349903021','de')[0].oid.class -> NilClass ch.oddb> search_migel_products('349903021','de')[0].odba_id -> 797294
Note
Design
Note
Next
Experiment
def merge_swissindex_migel(swissindex_item, migel_line) # Swissindex data swissindex = {} swissindex.update({ :ean_code => swissindex_item[:gtin], :datetime => swissindex_item[:dt], :stdate => swissindex_item[:stdate], :language => swissindex_item[:lang], :article_name => swissindex_item[:dscr], :size => swissindex_item[:addscr], :status => swissindex_item[:status], }) if company = swissindex_item[:comp] swissindex[:companyname] = company[:name] swissindex[:companyean] = company[:gln] end # Migel data pharmacode, article_name, companyname, ppha, ppub, factor = *migel_line migel = { :pharmacode => pharmacode, :article_name => article_name, :companyname => companyname, :ppha => ppha, :ppub => ppub, :factor => factor, } migel.update swissindex end
def search_migel_table(code, query_key = 'Pharmacode') # 'MiGelCode' is also available for query_key agent = Mechanize.new try_time = 3 begin agent.get(@base_url + query_key + '=' + code) count = 100 table = [] line = [] migel = {} agent.page.search('td').each_with_index do |td, i| text = td.inner_text.chomp.strip if text.is_a?(String) && text.length == 7 && text.match(/\d{7}/) migel_item = if pharmacode = line[0] and pharmacode.match(/\d{7}/) and swissindex_item = search_item(pharmacode) merge_swissindex_migel(swissindex_item, line) else merge_swissindex_migel({}, line) end table << migel_item line = [] count = 0 end if count < 7 text = text.split(/\n/)[1] || text.split(/\n/)[0] text = text.gsub(/\302\240/, '').strip if text line << text count += 1 end end # for the last line migel_item = if pharmacode = line[0] and pharmacode.match(/\d{7}/) and swissindex_item = search_item(pharmacode) merge_swissindex_migel(swissindex_item, line) else merge_swissindex_migel({}, line) end table << migel_item table.shift table
#def update_items_by_migel(time_estimate = false) def update_items_by_migel(migel_code) total = @app.migel_count start_time = Time.now #@app.migel_products.each_with_index do |product, count| product = search_migel_products(migel_code, 'de')[0] migel_code = product.migel_code.split('.').to_s plugin = ODDB::SwissindexNonpharmaPlugin.new(@app) if table = plugin.search_migel_table(migel_code) table.each do |record| if record[:pharmacode] update_item(product, record) end end end # p estimate_time(start_time, total, count + 1) if time_estimate # end end
def update_item(product, record) pointer = product.pointer + [:item, record[:pharmacode]] update_values = { :pharmacode => record[:pharmacode], :ean_code => record[:ean_code], :article_name => record[:article_name], :companyname => record[:companyname], :ppha => record[:ppha], :ppub => record[:ppub], :factor => record[:factor], :pzr => record[:pzr], :size => record[:size], :status => record[:status], :datetime => record[:datetime], :stdate => record[:stdate], :language => record[:language], } @app.update(pointer.creator, update_values, :migel) end
#!/usr/bin/env ruby # encondig: utf-8 # ODDB::Migel::Item -- oddb.org -- 15.08.2011 -- mhatakeyama@ywesee.com require 'util/language' require 'model/text' module ODDB module Migel class Item include SimpleLanguage attr_accessor :ean_code, :pharmacode, :article_name, :companyname, :ppha, :ppub, :factor, :pzr, :size, :status, :datetime, :stdate, :language, ...
Run
ch.oddb> ODDB::MiGeLPlugin.new(self).update_items_by_migel '342101021' -> Array
Result
ch.oddb> search_migel_products('342101021','de')[0].item('1740101').pzr -> 5.60
class SwissindexNonpharmaPlugin < SwissindexPlugin SWISSINDEX_NONPHARMA_SERVER = DRbObject.new(nil, ODDB::Swissindex::SwissindexNonpharma::URI) def migel_nonpharma_one_line(migel_item) [ migel_item.odba_id, migel_item.migel_code, migel_item.pharmacode, migel_item.ean_code, migel_item.datetime, migel_item.status, migel_item.stdate, migel_item.language, migel_item.article_name, migel_item.size, migel_item.companyname, migel_item.company_ean, migel_item.ppha, migel_item.pppub, migel_item.factor, migel_item.pzr, ].join(";") end def output_migel_nonpharma dir = File.expand_path('../../data/csv', File.dirname(__FILE__)) FileUtils.mkdir_p dir output_file = File.join(dir, 'swissINDEX_MiGel.csv') open(output_file, "w") do |out| f.print "odba_id;position number;pharmacode;GTIN;datetime;status;stdate;lang;description;additional description;company name;company GLN;pharmpreis;ppub;faktor;pzr\n" @app.each_migel_product do |product| product.items.each do |item| out.print migel_nonpharma_one_line(item), "\n" end end end end
Run
ch.oddb> ODDB::SwissindexNonpharmaPlugin.new(self).output_migel_nonpharma -> Hash
Result
Bug
Then
Log
error in SBSM::Session#to_html: /de/gcc/search/zone/migel/search_query/151002011 NoMethodError undefined method `items' for #<ODDB::Migel::Group:0x7fb0ea61b6b8> /home/masa/ywesee/oddb.org/src/util/language.rb:44:in `method_missing' /home/masa/ywesee/oddb.org/src/view/migel/result.rb:83:in `migel_code' /home/masa/ywesee/oddb.org/src/view/migel/result.rb:113:in `compose_subheader' /home/masa/ywesee/oddb.org/src/view/migel/result.rb:100:in `compose_list' /home/masa/ywesee/oddb.org/src/view/migel/result.rb:97:in `each' /home/masa/ywesee/oddb.org/src/view/migel/result.rb:97:in `compose_list' /usr/lib64/ruby/site_ruby/1.8/htmlgrid/list.rb:54:in `compose' /usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:55:in `init' /usr/lib64/ruby/site_ruby/1.8/htmlgrid/list.rb:129:in `init' /home/masa/ywesee/oddb.org/src/view/migel/result.rb:59:in `init' /usr/lib64/ruby/site_ruby/1.8/htmlgrid/component.rb:138:in `initialize' /usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:59:in `new' /usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:59:in `create' /usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:280:in `compose_component' /usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:209:in `compose' /usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:203:in `each' /usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:203:in `compose' /usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:55:in `init' /usr/lib64/ruby/site_ruby/1.8/htmlgrid/component.rb:138:in `initialize' /home/masa/ywesee/oddb.org/src/view/publictemplate.rb:53:in `new' /home/masa/ywesee/oddb.org/src/view/publictemplate.rb:53:in `content' /usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:66:in `send' /usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:66:in `create' /usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:280:in `compose_component' /usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:209:in `compose' /usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:203:in `each' /usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:203:in `compose' /usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:55:in `init' /home/masa/ywesee/oddb.org/src/view/publictemplate.rb:50:in `init' /home/masa/ywesee/oddb.org/src/view/privatetemplate.rb:16:in `init' /usr/lib64/ruby/site_ruby/1.8/htmlgrid/component.rb:138:in `initialize' /usr/lib64/ruby/site_ruby/1.8/sbsm/state.rb:285:in `new' /usr/lib64/ruby/site_ruby/1.8/sbsm/state.rb:285:in `view' /usr/lib64/ruby/site_ruby/1.8/sbsm/state.rb:197:in `to_html' /usr/lib64/ruby/site_ruby/1.8/sbsm/session.rb:529:in `to_html' /usr/lib64/ruby/site_ruby/1.8/sbsm/session.rb:177:in `drb_process' /usr/lib64/ruby/site_ruby/1.8/sbsm/session.rb:174:in `synchronize' /usr/lib64/ruby/site_ruby/1.8/sbsm/session.rb:174:in `drb_process' /usr/lib64/ruby/1.8/drb/drb.rb:1555:in `__send__' /usr/lib64/ruby/1.8/drb/drb.rb:1555:in `perform_without_block' /usr/lib64/ruby/1.8/drb/drb.rb:1515:in `perform' /usr/lib64/ruby/1.8/drb/drb.rb:1589:in `main_loop' /usr/lib64/ruby/1.8/drb/drb.rb:1585:in `loop' /usr/lib64/ruby/1.8/drb/drb.rb:1585:in `main_loop' /usr/lib64/ruby/1.8/drb/drb.rb:1581:in `start' /usr/lib64/ruby/1.8/drb/drb.rb:1581:in `main_loop' /usr/lib64/ruby/1.8/drb/drb.rb:1430:in `run' /usr/lib64/ruby/1.8/drb/drb.rb:1427:in `start' /usr/lib64/ruby/1.8/drb/drb.rb:1427:in `run' /usr/lib64/ruby/1.8/drb/drb.rb:1347:in `initialize' /usr/lib64/ruby/1.8/drb/drb.rb:1627:in `new' /usr/lib64/ruby/1.8/drb/drb.rb:1627:in `start_service' bin/oddbd:38 ODDB::View::Migel::ResultComposite::COMPONENTS[[0, 0]] in create(ODDB::View::Migel::ResultList) ODDB::View::Migel::Result::COMPONENTS[[0, 3]] in create(content) error in SBSM::Session#http_headers: /de/gcc/search/zone/migel/search_query/151002011 NoMethodError undefined method `items' for #<ODDB::Migel::Group:0x7fb0ea61b6b8> /home/masa/ywesee/oddb.org/src/util/language.rb:44:in `method_missing' /home/masa/ywesee/oddb.org/src/view/migel/result.rb:83:in `migel_code' /home/masa/ywesee/oddb.org/src/view/migel/result.rb:113:in `compose_subheader' /home/masa/ywesee/oddb.org/src/view/migel/result.rb:100:in `compose_list' /home/masa/ywesee/oddb.org/src/view/migel/result.rb:97:in `each'
Experiment
def migel_code(model)
if model.respond_to?(:items)
and items = model.items and !items.empty?
link = PointerLink.new(:to_s, model, @session, self)
link.value = model.migel_code
link.href = @lookandfeel._event_url(:migel_search, {:migel_code => model.migel_code.gsub(/\./, '')})
link
else
model.migel_code
end
end
Result
def export_migel_nonpharma update_notify_simple(SwissindexNonpharmaPlugin, 'Export Swissindex Migel Nonpharma', :export_migel_nonpharma) end
def export_migel_nonpharma dir = File.expand_path('../../data/csv', File.dirname(__FILE__)) FileUtils.mkdir_p dir @output_file = File.join(dir, 'swissINDEX_MiGel.csv') open(@output_file, "w") do |out| out.print "odba_id;position number;pharmacode;GTIN;datetime;status;stdate;lang;description;additional description;company name;company GLN;pharmpreis;ppub;faktor;pzr\n" @app.each_migel_product do |product| if items = product.items items.values.each do |item| out.print migel_nonpharma_one_line(item), "\n" end end end end end
Run
ch.oddb> Updater.new(self).export_migel_nonpharma -> mhatakeyama@ywesee.com
Result
Note
Commit