コード例 #1
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");
                        }
                    }
                }
            }
        }
コード例 #2
0
        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;
        }