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"); } } } } }
public FormDatumZeitVonBis(string Caption, string Anzeigetext, DateTime?DatumZeitVon, bool DatumVonNullZulassen, DateTime?DatumZeitBis, bool DatumBisNullZulassen) { InitializeComponent(); this.Title = Caption; tbInformation.Text = Anzeigetext; _ErgDatumZeitVon = DatumZeitVon; _ZeitAnzeigeVon.AnzeigeDatumZeit = DatumZeitVon == null ? DateTime.Now : DatumZeitVon.Value; _ZeitAnzeigeVon.OnNeuerWert = (d, z) => { _ErgDatumZeitVon = d + z; if (cbDatumVonLeer.IsChecked ?? false) { cbDatumVonLeer.IsChecked = false; } }; _ErgDatumZeitBis = DatumZeitBis; _ZeitAnzeigeBis.AnzeigeDatumZeit = DatumZeitBis == null ? (_ErgDatumZeitVon == null ? DateTime.Now : _ErgDatumZeitVon.Value.Date + JgZeit.DatumInZeitMinute(DateTime.Now)) : DatumZeitBis.Value; _ZeitAnzeigeBis.OnNeuerWert = (d, z) => { _ErgDatumZeitBis = d + z; if (cbDatumBisLeer.IsChecked ?? false) { cbDatumBisLeer.IsChecked = false; } }; cbDatumVonLeer.Visibility = DatumVonNullZulassen ? Visibility.Visible : Visibility.Collapsed; cbDatumVonLeer.IsChecked = !DatumZeitVon.HasValue; cbDatumBisLeer.Visibility = DatumBisNullZulassen ? Visibility.Visible : Visibility.Collapsed; cbDatumBisLeer.IsChecked = !DatumZeitBis.HasValue; }