module Generators

Public Instance Methods

generate_caterers(full_data) click to toggle source
# File lib/ascii_invoicer/generators.rb, line 39
def generate_caterers full_data
  caterers = []
  full_data[:hours][:caterers].each{|name, time| caterers.push name} if full_data[:hours][:caterers]
  return caterers
end
generate_client_addressing(full_data) click to toggle source
# File lib/ascii_invoicer/generators.rb, line 28
def generate_client_addressing full_data
  return fail_at(:client_addressing) unless full_data[:client]
  return fail_at(:client_title) unless full_data[:client][:title]
  lang       = full_data[:lang]
  client     = full_data[:client]
  title      = client[:title].words.first.downcase
  gender     = @settings['gender_matches'][title]
  addressing = @settings['lang_addressing'][lang][gender]
  return "#{addressing} #{client[:title]} #{client[:last_name]}"
end
generate_client_fullname(full_data) click to toggle source
# File lib/ascii_invoicer/generators.rb, line 20
def generate_client_fullname full_data
  client = full_data[:client]
  fail_at :client_first_name unless client[:first_name]
  fail_at :client_last_name unless client[:last_name]
  return fail_at :client_fullname unless client[:first_name] and client[:last_name]
  return [client[:first_name], client[:last_name]].join ' '
end
generate_event_age(full_data) click to toggle source
# File lib/ascii_invoicer/generators.rb, line 114
def generate_event_age full_data
  (Date.today - full_data[:event][:date]).to_i
end
generate_event_calendaritems(full_data) click to toggle source
# File lib/ascii_invoicer/generators.rb, line 49
def generate_event_calendaritems full_data
  begin
    events = []
    full_data[:event][:dates].each { |date|
      # TODO event times is not implemented right
      unless date[:times].nil?

        ## set specific times
        date[:times].each { |time|
          if time[:end]
            dtstart = DateTime.parse( date[:begin].strftime("%d.%m.%Y ") + time[:begin] )
            dtend   = DateTime.parse( date[:begin].strftime("%d.%m.%Y ") + time[:end] )
          else
            dtstart = Icalendar::Values::Date.new( date[:begin].strftime  "%Y%m%d")
            dtend   = Icalendar::Values::Date.new((date[:end]+1).strftime "%Y%m%d")
          end
          event = Icalendar::Event.new
          event.dtstart = dtstart
          event.dtend   = dtend
          events.push  event unless event.dtstart.nil?

        }

      else
        ## set full day event
        event = Icalendar::Event.new
        event.dtstart = Icalendar::Values::Date.new( date[:begin].strftime  "%Y%m%d")
        event.dtend   = Icalendar::Values::Date.new((date[:end]+1).strftime "%Y%m%d")
        events.push  event unless event.dtstart.nil?

      end

      events.each{ | event|

        event.description = ""
        event.summary     = full_data[:event][:name]
        event.summary  = "CANCELED: #{ event.summary }" if full_data[:canceled]

        event.description += "Verantwortung: " + full_data[:manager]      + "\n" if full_data[:manager]
        if full_data[:hours][:caterers]
          event.description +=  "Caterer:\n"
          full_data[:caterers].each {|caterer,time| event.description +=  " - #{ caterer}\n" }
        end

        event.description += full_data[:description]  + "\n" if full_data[:description]
      }
    }
    return events
  rescue
    @errors << :event_dates
    return false
  end
end
generate_event_date(full_data) click to toggle source
# File lib/ascii_invoicer/generators.rb, line 45
def generate_event_date full_data
  Date.parse full_data[:event][:dates][0][:begin]  unless full_data[:event][:dates].nil?
end
generate_event_prettydate(full_data) click to toggle source
# File lib/ascii_invoicer/generators.rb, line 128
def generate_event_prettydate full_data
  return fail_at :event_prettydate if full_data[:event][:dates].nil?
  date = full_data[:event][:dates][0]
  first = date[:begin]
  last = full_data[:event][:dates].last[:end]
  last = full_data[:event][:dates].last[:begin] if last.nil?

  return "#{first.strftime "%d.%m.%Y"}-#{last.strftime "%d.%m.%Y"}" if first.year != last.year
  return "#{first.strftime "%d.%m."}-#{last.strftime "%d.%m.%Y"}" if first.month != last.month
  return "#{first.strftime "%d"}-#{last.strftime "%d.%m.%Y"}" if first != last
  return first.strftime "%d.%m.%Y" if first.class == Date
  return first
end
generate_hours_time(full_data) click to toggle source
# File lib/ascii_invoicer/generators.rb, line 7
def generate_hours_time full_data
  hours = full_data[:hours]
  sum = 0
  if hours[:caterers]
    hours[:caterers].values.each{|v| sum += v.rationalize}
    return sum.to_f
  elsif hours[:time]
    fail_at :caterers
    return hours[:time]
  end
  sum
end
generate_hours_total(full_data) click to toggle source
# File lib/ascii_invoicer/generators.rb, line 2
def generate_hours_total full_data
  hours = full_data[:hours]
  hours[:salary] * hours[:time]
end
generate_invoice_costs(full_data) click to toggle source
# File lib/ascii_invoicer/generators.rb, line 173
def generate_invoice_costs full_data
  sum_money :cost_invoice
end
generate_invoice_delay(full_data) click to toggle source
# File lib/ascii_invoicer/generators.rb, line 189
def generate_invoice_delay full_data
  return 0 if full_data[:canceled]
  return -(full_data[:event][:date] - full_data[:invoice][:date] if full_data[:invoice][:date]).to_i
  return -(full_data[:event][:date] - Date.today).to_i
end
generate_invoice_final(full_data) click to toggle source
# File lib/ascii_invoicer/generators.rb, line 185
def generate_invoice_final full_data
  full_data[:invoice][:total] + full_data[:hours][:total]
end
generate_invoice_longnumber(full_data) click to toggle source
# File lib/ascii_invoicer/generators.rb, line 204
def generate_invoice_longnumber full_data
  if full_data[:invoice][:date]
    year = full_data[:invoice][:date].year
    full_data[:invoice][:number].gsub /^R/, "R#{year}-" if full_data[:invoice][:number]
  end
end
generate_invoice_paydelay(full_data) click to toggle source
# File lib/ascii_invoicer/generators.rb, line 195
def generate_invoice_paydelay full_data
  if full_data[:invoice][:payed_date] and full_data[:invoice][:date]
    delay = full_data[:invoice][:payed_date] - full_data[:invoice][:date]
    fail_at :invoice_payed if delay < 0
    return delay.to_i
  end
  return nil
end
generate_invoice_taxes(full_data) click to toggle source
# File lib/ascii_invoicer/generators.rb, line 177
def generate_invoice_taxes full_data
  sum_money :tax_invoice
end
generate_invoice_total(full_data) click to toggle source
# File lib/ascii_invoicer/generators.rb, line 181
def generate_invoice_total full_data
  sum_money :total_invoice
end
generate_offer_costs(full_data) click to toggle source

costs: price of all products summed up taxes: price of all products taxes summed up ( e.g. price*0.19 ) total: costs + taxes final: total + salary * hours

# File lib/ascii_invoicer/generators.rb, line 154
def generate_offer_costs full_data
  sum_money :cost_offer
end
generate_offer_final(full_data) click to toggle source
# File lib/ascii_invoicer/generators.rb, line 166
def generate_offer_final full_data
  full_data[:offer][:total] + full_data[:hours][:total]
end
generate_offer_number(full_data) click to toggle source
# File lib/ascii_invoicer/generators.rb, line 142
def generate_offer_number full_data
  appendix  = full_data[:offer][:appendix]
  full_data[:offer][:date].strftime "A%Y%m%d-#{appendix}"
end
generate_offer_taxes(full_data) click to toggle source
# File lib/ascii_invoicer/generators.rb, line 158
def generate_offer_taxes full_data
  sum_money :tax_offer
end
generate_offer_total(full_data) click to toggle source
# File lib/ascii_invoicer/generators.rb, line 162
def generate_offer_total full_data
  sum_money :total_offer
end
generate_productsbytax(full_data) click to toggle source
# File lib/ascii_invoicer/generators.rb, line 103
def generate_productsbytax full_data
  list = {}
  taxlist = {}
  full_data[:products].each {|product|
    list[product.tax_value] = [] unless list[product.tax_value]
    list[product.tax_value] << product
  }
  list.keys.sort.each{|key| taxlist[key] = list[key] } # sorting a hash by keys
  return taxlist
end
sum_money(key) click to toggle source
# File lib/ascii_invoicer/generators.rb, line 118
def sum_money key
  sum = 0.to_euro
  @data[:products].each{|p| sum += p.hash[key]} if @data[:products].class == Array
  sum.to_euro
end