Class: XmlConv::Util::Invoicer

Inherits:
Object
  • Object
show all
Defined in:
lib/xmlconv/util/invoicer.rb

Class Method Summary collapse

Class Method Details

.create_invoice(time_range, groups, date, currency = 'CHF') ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 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) ⇒ Object



38
39
40
41
42
43
44
# 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) ⇒ Object



45
46
47
48
49
50
51
# 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) ⇒ Object



52
53
54
# 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) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
67
# 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.(server, key)
  block.call(client)
ensure
  client.logout if(client)
end