private void ArbeitszeitBearbeiten_Click(object sender, RoutedEventArgs e) { var az = _ListeArbeitszeitenAuswahl.Current; var msg = $"Korrektur der Arbeitszeit für den Mitarbeiter {az.eBediener.Name}."; var anmeldung = (DateTime?)(az.Anmeldung ?? DateTime.Now); var abmeldung = az.Abmeldung; if (JgZeit.AbfrageZeit(msg, " Zeitabfrage !", ref anmeldung, false, ref abmeldung, true)) { var sichern = false; if (anmeldung != az.Anmeldung) { az.AnzeigeAnmeldung = anmeldung; az.AnzeigeAnmeldungGerundet = _AzRunden.GetZeitGerundet(EnumZeitpunkt.Anmeldung, az.fStandort, anmeldung); sichern = true; } if (abmeldung != az.Abmeldung) { az.AnzeigeAbmeldung = abmeldung; az.AnzeigeAbmeldungGerundet = _AzRunden.GetZeitGerundet(EnumZeitpunkt.Abmeldung, az.fStandort, abmeldung); sichern = true; } if (sichern) { _ListeArbeitszeitenAuswahl.DsSave(); if (az.eBediener == _Erstellung.AktuellerBediener) { _Erstellung.BenutzerGeaendert(); } } } }
public void ListeFuerJedenTagErstellen(tabArbeitszeitAuswertung AuswertungBediener, IEnumerable <tabFeiertage> ListeFeiertageMonat, IEnumerable <tabPausenzeit> ListePausen, bool WerteInDb) { if (AuswertungBediener == null) { return; } ListeTage.Clear(); // Werte für Tage berechnen var auswTage = _Db.tabArbeitszeitTagSet.Where(w => w.fArbeitszeitAuswertung == AuswertungBediener.Id).ToList(); var anzTageMonat = DateTime.DaysInMonth(AuswertungBediener.Jahr, AuswertungBediener.Monat); var monatErster = JgZeit.ErsterImMonat(AuswertungBediener.Jahr, AuswertungBediener.Monat); var monatLetzter = JgZeit.LetzerImMonat(AuswertungBediener.Jahr, AuswertungBediener.Monat); var alleZeiten = _Db.tabArbeitszeitSet.Where(w => (w.fBediener == AuswertungBediener.fBediener) && (!w.DatenAbgleich.Geloescht) && ( ((w.Anmeldung != null) && (w.Anmeldung >= monatErster) && (w.Anmeldung <= monatLetzter)) || ((w.Anmeldung == null) && (w.Abmeldung != null) && (w.Abmeldung >= monatErster) && (w.Abmeldung <= monatLetzter)) ) ).ToList(); for (byte tag = 1; tag <= anzTageMonat; tag++) { var auswTag = auswTage.FirstOrDefault(f => f.Tag == tag); if (auswTag == null) { auswTag = new tabArbeitszeitTag() { Id = Guid.NewGuid(), fArbeitszeitAuswertung = AuswertungBediener.Id, Tag = tag }; _Db.tabArbeitszeitTagSet.Add(auswTag); } var aktDatum = new DateTime(AuswertungBediener.Jahr, AuswertungBediener.Monat, tag); auswTag.Wochentag = aktDatum.ToString("ddd"); auswTag.IstSonnabend = aktDatum.DayOfWeek == DayOfWeek.Saturday; auswTag.IstSonntag = aktDatum.DayOfWeek == DayOfWeek.Sunday; auswTag.IstFeiertag = ListeFeiertageMonat.FirstOrDefault(f => f.Datum == aktDatum) != null; auswTag.ZeitBerechnet = TimeSpan.Zero; auswTag.NachtschichtBerechnet = TimeSpan.Zero; var zeiten = alleZeiten.Where(w => (w.Anmeldung?.Day == tag) || ((w.Abmeldung == null) && (w.Abmeldung?.Day == tag))).ToList(); if (zeiten.Count > 0) { foreach (var zeit in zeiten) { // Kontrolle ob Zeiten an Tagesauswertung hängt if (zeit.eArbeitszeitAuswertung != auswTag) { zeit.eArbeitszeitAuswertung = auswTag; } zeit.AnmeldungGerundet = _AzRunden.GetZeitGerundet(EnumZeitpunkt.Anmeldung, zeit.fStandort, zeit.Anmeldung); zeit.AbmeldungGerundet = _AzRunden.GetZeitGerundet(EnumZeitpunkt.Abmeldung, zeit.fStandort, zeit.Abmeldung); if ((zeit.Anmeldung != null) && (zeit.Abmeldung != null)) { auswTag.ZeitBerechnet += zeit.DauerGerundet; auswTag.NachtschichtBerechnet += NachtSchichtBerechnen(22, 0, 8, 0, zeit.AnmeldungGerundet.Value, zeit.Abmeldung.Value); } } auswTag.ZeitBerechnet = ZeitAufMinuteRunden(auswTag.ZeitBerechnet); auswTag.NachtschichtBerechnet = ZeitAufMinuteRunden(auswTag.NachtschichtBerechnet); // Pause berechnen var ersteAnmeldungZeit = zeiten.Where(w => (w.Anmeldung != null)).Min(m => m.Anmeldung); if (ersteAnmeldungZeit == null) { auswTag.PauseBerechnet = new TimeSpan(1, 0, 0); } else { var anmZeit = JgZeit.DatumInZeitMinute(ersteAnmeldungZeit.Value); var dsPause = ListePausen.FirstOrDefault(w => (anmZeit >= w.ZeitVon) && (anmZeit <= w.ZeitBis)); if (dsPause != null) { auswTag.PauseBerechnet = dsPause.Pausenzeit; } } auswTag.ZeitBerechnet -= auswTag.PauseBerechnet; auswTag.IstFehlerZeit = !Kontrolle24StundenOK(auswTag.ZeitBerechnet); auswTag.IstFehlerNachtschicht = !Kontrolle24StundenOK(auswTag.NachtschichtBerechnet); } auswTag.ArbeitszeitTagGeaendert = OnWertWurdeManuellGeaendert; ListeTage.Add(auswTag); } if (WerteInDb) { foreach (var tag in ListeTage) { if (!tag.IstManuellGeaendert) { if (tag.Pause != tag.PauseBerechnet) { tag.Pause = JgZeit.KontrolleZeitDb(tag.PauseBerechnet); tag.NotifyPropertyChanged("PauseAnzeige"); } if (tag.Zeit != tag.ZeitBerechnet) { tag.Zeit = JgZeit.KontrolleZeitDb(tag.ZeitBerechnet); tag.NotifyPropertyChanged("ZeitAnzeige"); } if (tag.NachtschichtZuschlag != tag.NachtschichtBerechnet) { tag.NachtschichtZuschlag = JgZeit.KontrolleZeitDb(tag.NachtschichtBerechnet); tag.NotifyPropertyChanged("NachtschichtZuschlagAnzeige"); } if (tag.Feiertag != tag.IstFeiertag) { tag.Feiertag = tag.IstFeiertag; tag.NotifyPropertyChanged("FeiertagAnzeige"); } } } } }