예제 #1
0
        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();
                    }
                }
            }
        }
예제 #2
0
        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");
                        }
                    }
                }
            }
        }