public FormOptionen(AnmeldungAuswertung Auswertung) { InitializeComponent(); _Auswertung = Auswertung; tbJahr.Text = Auswertung.Jahr.ToString(); // Sollstunden für jedes Jahr überprüfen for (byte i = 1; i <= 12; i++) { if (_Auswertung.ListeSollstundenJahr.Daten.FirstOrDefault(f => f.Monat == i) == null) { var neuSoll = new tabSollStunden() { Id = Guid.NewGuid(), Jahr = Auswertung.Jahr, Monat = i, }; _Auswertung.Db.tabSollStundenSet.Add(neuSoll); _Auswertung.ListeSollstundenJahr.Add(neuSoll); } ; } // Kontrolle, ob alle Bediener die Auswertung für Monat 0 besitzen, da hier die Vorjahresdaten eingetragen werden. var idisBediener = Auswertung.ListeBediener.Daten.Select(s => s.Id).ToArray(); var auswertungenVorjahr = Auswertung.Db.tabArbeitszeitAuswertungSet.Where(w => (idisBediener.Contains(w.fBediener)) && (w.Jahr == Auswertung.Jahr) && (w.Monat == 0)).ToList(); foreach (var bediener in _Auswertung.ListeBediener.Daten) { var auswVorjahr = auswertungenVorjahr.FirstOrDefault(f => f.fBediener == bediener.Id); if (auswVorjahr == null) { auswVorjahr = new tabArbeitszeitAuswertung() { Id = Guid.NewGuid(), Jahr = Auswertung.Jahr, Monat = 0, Ueberstunden = "00:00", Urlaub = 0, eBediener = bediener, Status = EnumStatusArbeitszeitAuswertung.Erledigt, }; Auswertung.Db.tabArbeitszeitAuswertungSet.Add(auswVorjahr); } bediener.EArbeitszeitHelper = auswVorjahr; } _ListeTerminals = new JgEntityList <tabArbeitszeitTerminal>(_Auswertung.Db) { ViewSource = (CollectionViewSource)FindResource("vsTerminals"), Tabellen = new DataGrid[] { gridTerminals }, Daten = _Auswertung.Db.tabArbeitszeitTerminalSet.ToList() }; }
private tabArbeitszeitAuswertung ArbeitszeitAuswertungErstellen(tabBediener Bediener, short Jahr, byte Monat, TimeSpan SollStundenMonat) { var az = new tabArbeitszeitAuswertung() { Id = Guid.NewGuid(), fBediener = Bediener.Id, Jahr = Jahr, Monat = Monat, Urlaub = 0, AuszahlungUeberstunden = "00:00", SollStunden = JgZeit.ZeitInString(SollStundenMonat), Status = EnumStatusArbeitszeitAuswertung.InArbeit, }; _Db.tabArbeitszeitAuswertungSet.Add(az); _Db.SaveChanges(); return(az); }
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"); } } } } }