Skip to content

Instantly share code, notes, and snippets.

@ukstv
Created July 26, 2012 09:55
Show Gist options
  • Save ukstv/3181286 to your computer and use it in GitHub Desktop.
Save ukstv/3181286 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
require 'nokogiri'
require 'active_record'
require "sqljdbc4.jar"
ActiveRecord::Base.establish_connection(
:adapter => "jdbcmssql",
:driver => "com.microsoft.sqlserver.jdbc.SQLServerDriver",
:url => "jdbc:sqlserver://192.168.0.18;databaseName=oms_db_cod_12",
:username => "secret",
:password => "secret"
)
class Lpu < ActiveRecord::Base
set_table_name "oms_LPU"
set_primary_key "LPUID"
has_many :doctors
end
class Doctor < ActiveRecord::Base
set_table_name "oms_DOCTOR"
set_primary_key "DOCTORID"
belongs_to :lpu, :foreign_key => "rf_LPUID"
end
@filepath = ARGV[0]
@doc = Nokogiri::XML(File.open(@filepath))
def check_mcodes
@mcodes = @doc.xpath('//PHARMACYRECIPE/MCOD/text()').map(&:to_s).uniq
@lpu_counts = @mcodes.select { |mcode| Lpu.where(:MCOD => mcode).count > 1 }
unless @lpu_counts.empty?
puts "DUPLICATED MCODES: #{@lpu_counts.join(', ')}"
end
end
def check_pcodes
@recepies = @doc.xpath("//PHARMACYRECIPE")
@codes = @recepies.reduce([]) do |memo, r|
memo << [r.xpath("V_C_OGRN/text()").to_s, r.xpath("PCOD/text()").to_s]
end.uniq
@code_counts = @codes.reduce([]) do |memo, codes|
ogrn = codes[0]
pcod = codes[1]
memo << [codes, Doctor.joins(:lpu).where("oms_DOCTOR.PCOD = ? and oms_LPU.C_OGRN = ?", pcod, ogrn).count]
end.select do |pairs|
pairs[1] > 1
end
@code_counts.each do |pair|
puts "#{pair[1]} for OGRN #{pair[0][0]} and PCOD #{pair[0][1]}"
end
end
check_mcodes
check_pcodes
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment