Class: XmlConv::Util::Invoicer
- Inherits:
-
Object
- Object
- XmlConv::Util::Invoicer
- Defined in:
- lib/xmlconv/util/invoicer.rb
Class Method Summary collapse
- .create_invoice(time_range, groups, date, currency = 'CHF') ⇒ Object
- .group_by_partner(transactions) ⇒ Object
- .run(time_range, transactions, date) ⇒ Object
- .send_invoice(invoice_id) ⇒ Object
- .ydim_connect(&block) ⇒ Object
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.login(server, key) block.call(client) ensure client.logout if(client) end |