class Planik::Arbeitszeitkonto::WoechentlichZeitkontoCalculator

Ein Zeitkonto im Rhythmus :wöchentlich

Public Class Methods

new(wday, zeit_von, zeit_bis) click to toggle source

@wday: Wochentag, an dem die Zeitspanne beginnt: 0 = Sonntag, 6 = Samstag @zeit_von und @zeit_bis: zwei Times, die die Zeit und die Länge zwischen @zeit_von und @zeit_bis definieren

# File lib/arbeitszeitkonto/woechentlich_zeitkonto_calculator.rb, line 13
def initialize wday, zeit_von, zeit_bis
  @wday = wday
  @zeit_von = zeit_von
  @zeit_bis = zeit_bis
  @anzahl_tage_dazwischen = (@zeit_bis.to_date - @zeit_von.to_date).to_i
end

Public Instance Methods

calculate(zeitspannen) click to toggle source

Liefert

  • Anzahl Sekunden, welche die gegebene :zeitspanne mit dem Zeitkonto überlappt

  • Die Reste (Zeitspanne)

# File lib/arbeitszeitkonto/woechentlich_zeitkonto_calculator.rb, line 26
def calculate zeitspannen
  reste = []
  seconds = 0

  Array(zeitspannen).each do |zeitspanne|

    anzahl_tage_zurueck = calculate_tage_zurueck(zeitspanne.datum_zeit_von.wday, @wday)

    datum = zeitspanne.datum_zeit_von - anzahl_tage_zurueck.days
    datum_zeit_von = kombiniere(datum, @zeit_von)
    datum_zeit_bis = kombiniere(datum, @zeit_bis) + @anzahl_tage_dazwischen.days

    zeitkonto_zeitspanne_eins = Zeitspanne.new(datum_zeit_von, datum_zeit_bis)
    zeitkonto_zeitspanne_zwei = Zeitspanne.new(datum_zeit_von+7.days, datum_zeit_bis+7.days)

    #puts "#{self.class.name}#calculate: wday der ersten Zeitspanne: #{zeitkonto_zeitspanne_eins.datum_zeit_von.wday}"
    #puts "#{self.class.name}#calculate: wday der zweiten Zeitspanne: #{zeitkonto_zeitspanne_zwei.datum_zeit_von.wday}"

    raise ArbeitszeitkontoError, "wday ist entspricht nicht wday der Vorlage " if @wday != zeitkonto_zeitspanne_eins.datum_zeit_von.wday || @wday != zeitkonto_zeitspanne_zwei.datum_zeit_von.wday
    sec, r = calc([zeitspanne], [zeitkonto_zeitspanne_eins, zeitkonto_zeitspanne_zwei])
    seconds+=sec
    reste.push(*r)
  end
  [seconds, reste]
end

Private Instance Methods

calculate_tage_zurueck(wday_kandidat, wday_calculator) click to toggle source

Berechnet die Anzahl Tage

# File lib/arbeitszeitkonto/woechentlich_zeitkonto_calculator.rb, line 57
def calculate_tage_zurueck(wday_kandidat, wday_calculator)
  anzahl_tage_zurueck = (wday_kandidat - wday_calculator) % 7
  #puts "#{self.class.name}#calculate: Zeitspanne: wday Kandidat = #{wday_kandidat}, wday Calculator: #{wday_calculator}, anzahl_tage_zurueck: #{anzahl_tage_zurueck}"
  anzahl_tage_zurueck
end