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