Class: Arbeitszeitkonto::WoechentlichZeitkontoCalculator

Inherits:
ZeitkontoCalculator show all
Defined in:
lib/arbeitszeitkonto/woechentlich_zeitkonto_calculator.rb

Overview

Ein Zeitkonto im Rhythmus :wöchentlich

Instance Method Summary collapse

Constructor Details

#initialize(wday, zeit_von, zeit_bis) ⇒ WoechentlichZeitkontoCalculator

@wday: Wochentag, an dem die Zeitspanne beginnt: 0 = Sonntag, 6 = Samstag



12
13
14
15
16
17
# File 'lib/arbeitszeitkonto/woechentlich_zeitkonto_calculator.rb', line 12

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

Instance Method Details

#calculate(zeitspannen) ⇒ Object

Liefert

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

  • Die Reste (Zeitspanne)



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/arbeitszeitkonto/woechentlich_zeitkonto_calculator.rb', line 25

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