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