Пример #1
0
        /// <summary>
        /// Erneuert die Einträge in der Monat-Combobox.
        /// Anhand einer LINQ-Abfrage werden alle entsprechenden Monate bestimmt.
        /// </summary>
        private void RenewZeitausgabeComboBoxMonat()
        {
            Person person = _user;

            if (_user.Position == Position.Manager)
            {
                person = (Person)comboBoxZeitausgabeMitarbeiter.SelectedItem;
            }

            if (person == null)
            {
                return;
            }

            DateTime[] dates = StorageContainer.Get <Person>().Values
                               .Where(p => checkBoxZeitausgabeAlleMitarbeiter.Checked || p == person)
                               .SelectMany(p => p.Arbeitszeiten).Select(arbeitszeit => arbeitszeit.Datum)
                               .Select(arbeitszeit => Convert.ToDateTime(arbeitszeit.ToString("MM.yyyy")))
                               .Distinct()
                               .OrderBy(date => date.Year)
                               .ThenBy(date => date.Month)
                               .ToArray();

            comboBoxZeitausgabeMonat.Items.Clear();
            Array.ForEach(dates, date => comboBoxZeitausgabeMonat.Items.Add(date));

            if (comboBoxZeitausgabeMonat.Items.Count > 0)
            {
                comboBoxZeitausgabeMonat.SelectedIndex = 0;
            }
        }
Пример #2
0
        // Beim Laden der Form alle Personen zur Auswahl hinzufügen
        private void FormLogin_Load(object sender, EventArgs e)
        {
            Array.ForEach(StorageContainer.Get <Person>().Values, person => comboBoxUser.Items.Add(person));

            if (comboBoxUser.Items.Count > 0)
            {
                comboBoxUser.SelectedIndex = 0;
            }
        }
Пример #3
0
        //Zeitausgabe

        /// <summary>
        /// Erneuert die Einträge in der Mitarbeiter-Combobox.
        /// </summary>
        private void RenewZeitausgabeComboBoxMitarbeiter()
        {
            comboBoxZeitausgabeMitarbeiter.Items.Clear();

            switch (_user.Position)
            {
            case Position.Mitarbeiter:
                comboBoxZeitausgabeMitarbeiter.Visible = false;

                checkBoxZeitausgabeAlleMitarbeiter.Checked = false;
                checkBoxZeitausgabeAlleMitarbeiter.Visible = false;
                break;

            case Position.Manager:
                int index = -1;
                if (comboBoxZeitausgabeMitarbeiter.SelectedItem != null)
                {
                    index = comboBoxZeitausgabeMitarbeiter.SelectedIndex;
                }

                comboBoxZeitausgabeMitarbeiter.Items.Add(_user);
                comboBoxZeitausgabeMitarbeiter.Items.AddRange(StorageContainer.Get <Person>().Values.Where(person => person.Position == Position.Mitarbeiter).ToArray());

                if (index != -1 && comboBoxZeitausgabeMitarbeiter.Items.Count > index)
                {
                    comboBoxZeitausgabeMitarbeiter.SelectedIndex = index;
                }
                else if (comboBoxZeitausgabeMitarbeiter.Items.Count > 0)
                {
                    comboBoxZeitausgabeMitarbeiter.SelectedIndex = 0;
                }

                comboBoxZeitausgabeMitarbeiter.Visible     = true;
                checkBoxZeitausgabeAlleMitarbeiter.Visible = true;
                break;

            default:
                break;
            }
        }
Пример #4
0
        /// <summary>
        /// Erneuert die Ausgabe in der Zeitausgabe-Textbox.
        /// Anhand von LINQ-Abfragen werden alle entsprechenden Arbeitszeiten bestimmt.
        /// </summary>
        private void RefreshZeitausgabeBeschreibung()
        {
            textBoxZeitausgabe.Clear();

            if (comboBoxZeitausgabeMonat.SelectedItem == null && !checkBoxZeitausgabeAlleMonate.Checked)
            {
                return;
            }

            Person[] personen;                              //Array, welcher nachher alle zu berücksichtigenden Personen enthält

            if (checkBoxZeitausgabeAlleMitarbeiter.Checked) //Ist die Checkbox für alle Mitarbeiter aktiviert, werden alle Mitarbeiter (Manager ausgeschlossen) berücksichtigt.
            {
                List <Person> personenTmp = StorageContainer.Get <Person>().Values
                                            .Where(person => person.Position == Position.Mitarbeiter)
                                            .ToList();
                personenTmp.Add(_user);
                personen = personenTmp.ToArray();
            }
            else //Ansonsten wird nur die ausgewählte Person berücksichtigt
            {
                Person person = _user;
                if (_user.Position == Position.Manager)
                {
                    person = (Person)comboBoxZeitausgabeMitarbeiter.SelectedItem;
                }

                if (person == null)
                {
                    return;
                }

                personen = new Person[] { person };
            }

            Dictionary <Person, Arbeitszeit[]> arbeitszeiten = new Dictionary <Person, Arbeitszeit[]>();

            //Nun werden die Arbeitszeiten von allen zu berücksichtigenden Personen sortiert gesammelt.
            //Hierbei wird berücksichtigt, welcher Monat gewollt ist, oder ob alle Monate berücksichtigt werden sollen. (Siehe .Where)
            foreach (Person person in personen)
            {
                arbeitszeiten.Add(person, person.Arbeitszeiten
                                  .Where(arbeitszeit => checkBoxZeitausgabeAlleMonate.Checked || arbeitszeit.Datum.Month == ((DateTime)comboBoxZeitausgabeMonat.SelectedItem).Month)
                                  .OrderBy(arbeitszeit => arbeitszeit.Datum.Year)
                                  .ThenBy(arbeitszeit => arbeitszeit.Datum.Month)
                                  .ThenBy(arbeitszeit => arbeitszeit.Datum.Day)
                                  .ThenBy(arbeitszeit => arbeitszeit.Anfang)
                                  .ThenBy(arbeitszeit => arbeitszeit.Zeitspanne.Ticks)
                                  .ToArray());
            }

            //Anschließend werden die Arbeitszeiten der Personen ausgegeben.
            //Hierbei gibt es unterschiedliche Formate:
            // - eine detaillierte Ausgabe, wenn es sich um eine Person handelt
            // - eine zusammenfassende Ausgabe, wenn es sich um mehrere Personen handelt
            if (personen.Length == 1)
            {
                Person        person = personen[0];
                Arbeitszeit[] personenArbeitszeiten = arbeitszeiten[person];
                textBoxZeitausgabe.Text = $"Arbeitszeiten von {person.ToString()}{Environment.NewLine}{Environment.NewLine}";

                if (personenArbeitszeiten.Length == 0)
                {
                    textBoxZeitausgabe.Text += $"Keine{Environment.NewLine}";
                }
                else
                {
                    foreach (Arbeitszeit arbeitszeit in personenArbeitszeiten)
                    {
                        textBoxZeitausgabe.Text += $"{arbeitszeit.Datum.Day}. {arbeitszeit.Datum.ToString("MMMM")} {arbeitszeit.Datum.Year} - {arbeitszeit.Zeitspanne.TotalHours.ToString("#.##")} Std. von {arbeitszeit.Anfang.ToString("HH:mm:ss")} bis {arbeitszeit.Ende.ToString("HH:mm:ss")}: {arbeitszeit.Beschreibung}{Environment.NewLine}";
                    }
                }

                textBoxZeitausgabe.Text += $"{Environment.NewLine}Gesamt: {(personenArbeitszeiten.Length == 0 ? "0,00" : personenArbeitszeiten.Sum(arbeitszeit => arbeitszeit.Zeitspanne.TotalHours).ToString("#.##"))} Std.";
            }
            else
            {
                foreach (Person person in personen)
                {
                    textBoxZeitausgabe.Text += $"{person.ToString()} Gesamt: {(arbeitszeiten[person].Length == 0 ? "0,00" : arbeitszeiten[person].Sum(arbeitszeit => arbeitszeit.Zeitspanne.TotalHours).ToString("#.##"))} Std.{Environment.NewLine}";
                }
                textBoxZeitausgabe.Text += $"{Environment.NewLine}Gesamt: {(personen.SelectMany(person => person.Arbeitszeiten).ToArray().Length == 0 ? "0,00" : personen.Sum(person => arbeitszeiten[person].Sum(arbeitszeit => arbeitszeit.Zeitspanne.TotalHours)).ToString("#.##"))} Std.";
            }
        }
Пример #5
0
        //Person Management

        /// <summary>
        /// Fügt, falls alle Werte korrekt, eine neue Person hinzu
        /// </summary>
        private async void buttonAdd_Click(object sender, EventArgs e)
        {
            string   vorname, name, email, passwort;
            double   gehalt;
            DateTime geburtsdatum;
            Position position;

            vorname = textBoxName.Text;
            if (string.IsNullOrWhiteSpace(vorname))
            {
                MessageBox.Show("Bitte das Feld \"Name\" ausfüllen!", "Fehlende Angabe", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            name = textBoxVorName.Text;
            if (string.IsNullOrWhiteSpace(name))
            {
                MessageBox.Show("Bitte das Feld \"Vorname\" ausfüllen!", "Fehlende Angabe", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            email = textBoxEmail.Text;
            if (string.IsNullOrWhiteSpace(email))
            {
                MessageBox.Show("Bitte das Feld \"Email\" ausfüllen!", "Fehlende Angabe", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            passwort = textBoxPasswort.Text;
            if (string.IsNullOrWhiteSpace(passwort))
            {
                MessageBox.Show("Bitte das Feld \"Passwort\" ausfüllen!", "Fehlende Angabe", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            if (!double.TryParse(textBoxGehalt.Text, out gehalt))
            {
                MessageBox.Show("Bitte das Feld \"Gehalt\" korrekt ausfüllen!", "Fehlerhafte Angabe", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            if (!DateTime.TryParse(textBoxGeburtsdatum.Text, out geburtsdatum))
            {
                MessageBox.Show("Bitte das Feld \"Geburtsdatum\" korrekt ausfüllen!", "Fehlerhafte Angabe", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            if (comboBoxPosition.SelectedItem == null)
            {
                MessageBox.Show($"Bitte eine der {Enum.GetValues(typeof(Position)).Length} möglichen Positionen auswählen!", "Fehlerhafte Angabe", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            position = (Position)comboBoxPosition.SelectedItem;

            if (StorageContainer.Get <Person>().Values.Any(person => person.Name == vorname && person.Vorname == name))
            {
                MessageBox.Show("Eine Person mit diesem Namen existiert bereits!", "Halt Stop!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            StorageContainer.Get <Person>().Add(new Person(vorname, name, position, geburtsdatum, email, HashUtils.GenerateHash(passwort), gehalt));
            await SavePersons();

            RenewZeitausgabeComboBoxMitarbeiter();
            MessageBox.Show("Person hinzugefügt!", "Erfolgreich", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
Пример #6
0
 /// <summary>
 /// Schreibt die Daten der Personen aus dem Storage<Person> des StorageContainers in die Personen.csv-Datei.
 /// </summary>
 private async Task SavePersons() => await DataWriters.FileDataWriter.WriteAllAsync("Assets/Personen.csv", CSVHandlers.CSVHandlerPerson.RevertAll(StorageContainer.Get <Person>().Values));
Пример #7
0
 public string Get(string key)
 {
     return(_container.Get(key));
 }