Skip to content

Instantly share code, notes, and snippets.

@serghost
Created June 9, 2011 16:54
Show Gist options
  • Save serghost/1017175 to your computer and use it in GitHub Desktop.
Save serghost/1017175 to your computer and use it in GitHub Desktop.
ah parsing
def update_price_ah # "Аптека Холдинг"
ahold = Supplier.find(37, :include => {:partners => :partners_addition})
# Чтобы не делать мильён запросов в БД по ходу обновления, делаем 1 запрос
# до обновления, и нужную нам инфу распихиваем в хэши
known_products = Hash.new
SupplierProduct.all(:select => "id, code, price", :conditions => {:supplier_id => ahold.id}).each do |s_p|
known_products[s_p.code] = {:id => s_p.id, :price => s_p.price}
end
known_vats = Hash.new
ProductVat.all(:select => "id, code", :conditions => {:supplier_id => ahold.id}).each do |p_v|
known_vats[p_v.code] = p_v.id
end
# Это нужно для импорта. data — массив, где будут лежать распарсенные товары
data = Array.new
vats_data = Array.new # в таблицу НДСов
update_time = nil
tmpdir = "#{RAILS_ROOT}/documents/temp/ahold/price"
make_path(tmpdir) # нет пути, то создаем
make_path("#{RAILS_ROOT}/documents/archive/prices/ahold")
# Парсинг прайса "Аптека Холдинг"
if File.file?("#{RAILS_ROOT}/documents/ftp/ahold/price/price.dbf") &&
(!File.file?("#{RAILS_ROOT}/documents/archive/prices/ahold/price.dbf") ||
!File.compare("#{RAILS_ROOT}/documents/ftp/ahold/price/price.dbf", "#{RAILS_ROOT}/documents/archive/prices/ahold/price.dbf"))
price = DBF::Table.new("#{RAILS_ROOT}/documents/ftp/ahold/price/price.dbf")
rightcolumns = %w(name firm qnt price1 srok_g ratepack cntry zhvls nds)
checkcolumns = price.columns.map do |column|
column.name.downcase
end
unless rightcolumns & checkcolumns == rightcolumns
puts "Wrong db format. Please check it"
else
price.records.each do |record|
data << [known_products["#{ahold.prefix}#{record.codepst}"],
ahold.id,
"#{ahold.prefix}#{record.codepst}",
Iconv.conv("utf-8", "cp866", record.name),
Iconv.conv("utf-8", "cp866", record.firm),
record.qnt, record.price1, record.srok_g, record.ratepack, 0, 0,
Iconv.conv("utf-8", "cp866", record.cntry),
record.zhvls, 1, '', record.nds,
known_products["#{ahold.prefix}#{record.codepst}"].blank? || record.price1 != known_products["#{ahold.prefix}#{record.codepst}"][:price]
]
vats_data << [known_vats["#{ahold.prefix}#{record.codepst}"],
"#{ahold.prefix}#{record.codepst}", ahold.id, record.nds]
end
price.close
update_time = File.mtime("#{RAILS_ROOT}/documents/ftp/ahold/price/price.dbf")
FileUtils.mv("#{RAILS_ROOT}/documents/ftp/ahold/price/price.dbf",
"#{RAILS_ROOT}/documents/archive/prices/ahold/price.dbf")
# Парсинг прайса "Аптека Холдинг"
# Импорт "Аптека Холдинг"
import_supplier_products(ahold, data, vats_data, update_time)
puts "Прайс 'Аптека Холдинг' обновлен"
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment