class XmlConv::Util::Invoicer

Public Class Methods

create_invoice(time_range, groups, date, currency='CHF') click to toggle source
# File lib/xmlconv/util/invoicer.rb, line 11
def create_invoice(time_range, groups, date, currency='CHF')
  time = Time.now
  format = XmlConv::CONFIG.invoice_item_format
  ydim_connect { |client|
    ydim_inv = client.create_invoice(XmlConv::CONFIG.ydim_id)
    ydim_inv.description = sprintf(XmlConv::CONFIG.invoice_format,
                                   time_range.first.strftime("%d.%m.%Y"),
                                   (time_range.last - 1).strftime("%d.%m.%Y"))
    ydim_inv.date = date
    ydim_inv.currency = currency
    ydim_inv.payment_period = 30
    default_rate = XmlConv::CONFIG.commission
    item_data = groups.sort.collect { |group, bdds|
      rate = XmlConv::CONFIG.group_commissions[group] || default_rate
      amount = bdds.inject(0) { |memo, bdd| memo + bdd.invoiced_amount }
      {
        :price    =>  (amount * rate) / 100.0,
        :quantity =>  1,
        :text     =>  sprintf(format, group.to_s, currency, amount, bdds.size),
        :time                       =>  Time.local(date.year, date.month, date.day),
        :unit     =>  ("%3.2f%%" % rate).gsub(/0+%/, '%'),
      }
    }
    client.add_items(ydim_inv.unique_id, item_data)
    ydim_inv
  }
end
group_by_partner(transactions) click to toggle source
# File lib/xmlconv/util/invoicer.rb, line 38
def group_by_partner(transactions)
  groups = {}
  transactions.each { |transaction|
    (groups[transaction.partner] ||= []).push(transaction.model)
  }
  groups
end
run(time_range, transactions, date) click to toggle source
# File lib/xmlconv/util/invoicer.rb, line 45
def run(time_range, transactions, date)
  unless(transactions.empty?)
    invoice = create_invoice(time_range, group_by_partner(transactions), 
                             date)
    send_invoice(invoice.unique_id)
  end
end
send_invoice(invoice_id) click to toggle source
# File lib/xmlconv/util/invoicer.rb, line 52
def send_invoice(invoice_id)
  ydim_connect { |client| client.send_invoice(invoice_id) }
end
ydim_connect(&block) click to toggle source
# File lib/xmlconv/util/invoicer.rb, line 55
def ydim_connect(&block)
  config = YDIM::Client::CONFIG
  if(path = XmlConv::CONFIG.ydim_config)
    config.load(path)
  end
  server = DRbObject.new(nil, config.server_url)
  client = YDIM::Client.new(config)
  key = OpenSSL::PKey::DSA.new(File.read(config.private_key))
  client.login(server, key)
  block.call(client)
ensure
  client.logout if(client)
end