<< | 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