class YDIM::Invoice
Constants
- ODBA_SERIALIZABLE
Attributes
currency[RW]
date[RW]
debitor[R]
deleted[RW]
description[RW]
items[R]
payment_period[RW]
payment_received[RW]
precision[RW]
suppress_vat[R]
unique_id[R]
Public Class Methods
new(unique_id)
click to toggle source
# File lib/ydim/invoice.rb, line 35 def initialize(unique_id) @unique_id = unique_id @items = [] @precision = 2 @payment_period = 10 end
sum(key)
click to toggle source
# File lib/ydim/invoice.rb, line 27 def Invoice.sum(key) define_method(key) { @items.inject(0.0) { |value, item| value + item.send(key) } } end
Public Instance Methods
add_item(item)
click to toggle source
# File lib/ydim/invoice.rb, line 44 def add_item(item) item.index = next_item_id @items.push(item) item end
date=(d)
click to toggle source
# File lib/ydim/invoice.rb, line 32 def date=(d) @date = Date.new(d.year, d.month, d.day) end
debitor=(debitor)
click to toggle source
# File lib/ydim/invoice.rb, line 49 def debitor=(debitor) if(@debitor) @debitor.send("delete_#{invoice_key}", self) end if(debitor) debitor.send("add_#{invoice_key}", self) end @debitor = debitor end
debitor_email()
click to toggle source
# File lib/ydim/invoice.rb, line 58 def debitor_email @debitor.email if(@debitor) end
debitor_id()
click to toggle source
# File lib/ydim/invoice.rb, line 61 def debitor_id @debitor.unique_id if(@debitor) end
debitor_name()
click to toggle source
# File lib/ydim/invoice.rb, line 64 def debitor_name @debitor.name if(@debitor) end
due_date()
click to toggle source
# File lib/ydim/invoice.rb, line 67 def due_date if(@date && !@payment_received) @date + @payment_period.to_i end end
empty?()
click to toggle source
# File lib/ydim/invoice.rb, line 83 def empty? @items.empty? end
info()
click to toggle source
# File lib/ydim/invoice.rb, line 86 def info Info.new(self) end
invoice_key()
click to toggle source
# File lib/ydim/invoice.rb, line 41 def invoice_key :invoice end
item(index)
click to toggle source
# File lib/ydim/invoice.rb, line 89 def item(index) @items.find { |item| item.index == index } end
pdf_invoice(sort_args={})
click to toggle source
# File lib/ydim/invoice.rb, line 104 def pdf_invoice(sort_args={}) config = PdfInvoice.config.dup config.formats['quantity'] = "%1.#{@precision}f" config.formats['total'] = "#{@currency} %1.2f" if(item = @items[0]) config.texts['tax'] = sprintf("MwSt %0.1f%%", item.vat_rate) end invoice = PdfInvoice::Invoice.new(config) invoice.date = @date invoice.invoice_number = @unique_id invoice.description = @description invoice.debitor_address = @debitor.address items = @items if sort_by = sort_args[:sortby] begin items = items.sort_by do |item| item.send(sort_by) end if sort_args[:sort_reverse] items.reverse! end rescue StandardError end end invoice.items = items.collect { |item| [ item.time, item.text, item.unit, item.quantity.to_f, item.price.to_f, item.vat.to_f ] } invoice end
status()
click to toggle source
# File lib/ydim/invoice.rb, line 92 def status if(@deleted) 'is_trash' elsif(@payment_received) 'is_paid' elsif(@date && @payment_period \ && ((@date + @payment_period) < Date.today)) 'is_due' else 'is_open' end end
suppress_vat=(bool)
click to toggle source
# File lib/ydim/invoice.rb, line 134 def suppress_vat= bool rate = bool ? 0 : YDIM::Server.config.vat_rate @items.each do |item| item.vat_rate = rate end @suppress_vat = bool end
to_pdf(sort_args={})
click to toggle source
# File lib/ydim/invoice.rb, line 139 def to_pdf(sort_args={}) pdf_invoice(sort_args).to_pdf end