Çoklu Para Birimi Dönüşümünde TcmbCurrency Geminin Kullanımı

Rails'da Çoklu para birimi dönüşümü (Multi Currency) için geliştirilmiş olan money gem ve money-rails gem‘i ni kullanırken geçmişe yönelik dönüşüm yapma sıkıntısı ve oranları Türkiye Cumhuriyeti Merkez Bankası'ndan kur almak amacıyla google-currency gem'ini uyarlanmıştır. Bu gem ile Merkez Bankası'ndaki 20'ye yakın para birimi ile dönüşümü Money gemi altyapısıyla kullanabilirsiniz.

Öncelikle gemfile'ımıza money-rails ve tcmb_currency gemlerini ekliyoruz

gem 'money-rails'
gem 'tcmb_currency', :git => 'git://github.com/lab2023/tcmb_currency.git

ve ardından bundle install komutunu çalıştırarak gemleri projeye dahil ediyoruz. Gemler yüklenip, projeye dahil edildikten sonra terminalden

$ rails g tcmb_currency:initializer
$ rails g tcmb_currency:migration
$ rake db:migrate

komutlarını çalıştırıp initializer dosyasını ve database tablolarını oluşturuyoruz. <!– more –> Son olarak ise

$ rake tcmb_currency:insert_from_tcmb

rake task'ını günlük olarak çalışacak bir cron job a atayarak (bu iş için whenever gem kullanılabilir), günlük olarak oranların database'e eklenmesi sağlanır

Ardından tek yapılması gereken money gemi işlemleri cent,kuruş vb. bazlı yaptığı için modelinize monetize :price_cents eklemek.

class Product < ActiveRecord::Base
    attr_accessible :price, :product ,:price_cents, :price_currency
    monetize :price_cents
end

Artık view katmanında

<% @products.each do |product| %>
    <tr>
        <td><%= product.product %></td>
        <td><% price =Money.new(product.price_cents,product.price_currency) %></td>
        <td><%= humanized_money_with_symbol price %></td>
        <td><%= humanized_money_with_symbol price.exchange_to(:JPY) %></td>
        <td><%= humanized_money_with_symbol price.exchange_to(:EUR, "2013-03-06") %></td>
        <td><%= link_to 'Show', product %></td>
        <td><%= link_to 'Edit', edit_product_path(product) %></td>
        <td><%= link_to 'Destroy', product, method: :delete, data: { confirm: 'Are you sure?' } %></td>
    </tr>
<% end %>

şeklinde kullanabilirsiniz

# O güne ait oranlara göre dönüşüm yapar
Money.new(1000,"USD").exchange_to(:EUR) 
# Verilen tarihe ait oranlara göre dönüşüm yapar
Money.new(1000,"USD").exchange_to(:EUR, "2013-03-02") 
comments powered by Disqus