Example #1
0
        /// <summary>
        /// Diese Methode überprüft, dass der aktuelle Einsatz ( ob neu oder geändert ist in diesem Falle egal ) keine Zeitüberschneidung mit einem existierenden Einsatz hat.
        /// </summary>
        /// <returns>Gibt False zurück wenn eine Zeitüberschneidung mit einem existierenden Einsatz besteht und True wenn nicht</returns>
        private bool ueberpruefeZeit()
        {
            /*
             * Es wird ein neuer Einsatz mit den gleichen werten wie der neue oder bearbeitete Einsatz.
             * Dies ist notwendig da wenn die Daten des aktuellen Einsatzes auf die Werte der eingaben gesezt werden,
             * müsste mann alle Werte auf die Werte bevor der änderung zurücksetzen wenn ein Wert nicht stimmt.
             * Mit einem testEinsatz aber ist es egal wie die Werte sind da er einfach gelöscht werden kann.
             */
            Einsatz testEinsatz = new Einsatz();

            // testEinsatz wird eine Kopie des aktuellen Einsatzes ohne dabei nur die Referenz zu kopieren.
            setzeEinsatz(testEinsatz);
            // Nun wird für jeden Einsatz ausser den aktuellen überprüft, ob eine Zeitüberschneidung besteht.
            bool        keineUeberschneidung = true;
            Mitarbeiter mitarbeiter          = Bibliothek.Mitarbeiter_nach_ID(this.mitarbeiter.SelectedIndex + 1);

            foreach (Einsatz e in Bibliothek.Einsatz_Alle())
            {
                if (testEinsatz.ID != e.ID)
                {
                    if (e.Mitarbeiter.ID == mitarbeiter.ID)
                    {
                        if (e.Start.Date == testEinsatz.Start.Date)
                        {
                            /*
                             * Falls der ausgelesene Einsatz nicht dem aktuellen Einsatz entspricht,
                             * der Mitarbeiter gleich ist wie der der in der ComboBox ausgewählt wurde und
                             * der Einsatz am gleichen Tag wie der aktuelle Einsatz statt findet,
                             * wird berprüft das Sie sich nicht überschreiben.
                             */
                            if (
                                // Das Startdatum ist gleich wie das Enddatum
                                (testEinsatz.Start != testEinsatz.Ende) ||
                                // Das Start oder Enddatum liegt auf dem zu überprüfenden Datum
                                (testEinsatz.Ende > testEinsatz.Start) ||
                                (testEinsatz.Start == e.Start || testEinsatz.Ende == e.Ende) ||
                                // Das Start und Enddatum liegt zwischen den zu überprüfenden Daten
                                (testEinsatz.Start > e.Start && testEinsatz.Ende < e.Ende) ||
                                // Das Startdatum liegt zwischen den zu überprüfenden Daten
                                (testEinsatz.Start > e.Start && testEinsatz.Start < e.Ende) ||
                                // Das Enddatum liegt zwischen den zu überprüfenden Daten
                                (testEinsatz.Ende > e.Start && testEinsatz.Ende < e.Ende) ||
                                // Das Start und das Enddatum  liegen ausserhalb der zu überprüfenden Daten.
                                (testEinsatz.Start < e.Start && testEinsatz.Ende > e.Ende) ||
                                // Das Start oder Enddatum liegt ausserhalb des Projekt Zeitraumes.
                                (testEinsatz.Start < testEinsatz.Projekt.StartDatum || testEinsatz.Ende > testEinsatz.Projekt.EndDatum)
                                )
                            {
                                // Wenn sie sich überschneiden wird ein entsprechender Fehler ausgegeben.
                                MessageBox.Show(Fehler_Zeit_ueberschneidung);
                                keineUeberschneidung = false;
                            }
                        }
                    }
                }
            }
            return(keineUeberschneidung);
        }
Example #2
0
        public listjobs()
        {
            InitializeComponent();
            List <Einsatz> jobList = Bibliothek.Einsatz_Alle();

            for (var i = 0; i < jobList.Count(); i++)
            {
                ListBoxItem job = new ListBoxItem();
                job.Tag               = jobList[i].ID;
                job.Content           = jobList[i].Name + " - " + jobList[i].Start.Date;
                job.Background        = Brushes.White;
                job.MouseDoubleClick += this.lsJob_Handler;
                this.jobsListBox.Items.Add(job);
            }
        }
Example #3
0
        private void prepareData()
        {
            listenInhalt = new List <ListenInhalt>();

            Bibliothek.Einsatz_Alle().ForEach(delegate(Einsatz einsatz)
            {
                //Definiert neues Objekt inhalt aus Klasse ListenInhalt
                ListenInhalt inhalt = new ListenInhalt();
                //füllt die später anzuzeigenden Daten in inhalt
                inhalt.ID                 = einsatz.ID;
                inhalt.Mitarbeiter        = einsatz.Mitarbeiter.Vorname + " " + einsatz.Mitarbeiter.Name;
                inhalt.ProjektBezeichnung = einsatz.Projekt.Name;
                inhalt.ProjektDauer       = einsatz.Ende - einsatz.Start;
                inhalt.ProjektStart       = einsatz.Start;
                inhalt.ProjektEnde        = einsatz.Ende;

                //fügt die zuvor abgefüllten Daten dem listenInhalt hinzu
                listenInhalt.Add(inhalt);
            });
        }
Example #4
0
 /// <param name="einsatzID">Die ID des Einsatzes der geändert werden soll oder 0 bei einem neuen Einsatz</param>
 public EinzelAnsicht(int einsatzID)
 {
     InitializeComponent();
     // Wenn einsatzID 0 ist wird Neu auf True gesezt und es ist nun klar das ein neuer Einsatz erstellt werden soll.
     Neu = (einsatzID == 0);
     if (!Neu)
     {
         // Falls kein neuer Einsatz erstellt werden soll, wird die Instanzvariabel einsatz auf das Objekt gesezt das Einsatz_nach_ID() zurückgibt.
         einsatz = Bibliothek.Einsatz_nach_ID(einsatzID);
         // Nun werden noch die Felder in der Benutzeroberfläche mit den richtigen Werten versehen.
         id.Content = einsatz.ID.ToString();
         setMitarbeiterBox();
         setProjektBox();
         datum.SelectedDate = einsatz.Start.Date;
         start_zeit.Text    = einsatz.Start.ToShortTimeString();
         end_zeit.Text      = einsatz.Ende.ToShortTimeString();
         farbe.Background   = new SolidColorBrush(einsatz.Farbe);
     }
     else
     {
         // Wenn ein neuer Einsatz erstellt werden soll, wird ein neues Objekt vom Typ Einsatz erstellt und an die Referenz einsatz gehängt.
         this.einsatz = new Einsatz();
         // Nun wird die nächst höchste ID gesucht und diesem Einsatz vergeben.
         int freieID = 0;
         foreach (Einsatz einsatz in Bibliothek.Einsatz_Alle())
         {
             if (einsatz.ID > freieID)
             {
                 freieID = einsatz.ID;
             }
         }
         this.einsatz.ID = freieID + 1;
         // Nun werden noch die Felder in der Benutzeroberfläche mit den standart Werten versehen.
         id.Content = this.einsatz.ID.ToString();
         setMitarbeiterBox();
         setProjektBox();
         farbe.Background = new SolidColorBrush(Colors.LightBlue);
     }
 }
Example #5
0
        /// <summary>
        /// Diese Methode nimmt aus jedem Einsatz die Werte die sie benötigt und
        /// füllt diese in ein Data Objekt ein. Dieses wird dann zur liste dataList hinzugefügt.
        /// </summary>
        private void setData()
        {
            // In der dataList werden von allen Einsätzen inform von Data Objekten gespeichert.
            List <Data> dataList = new List <Data>();
            // Eine Liste aller EInsätze.
            List <Einsatz> einsaetze = Bibliothek.Einsatz_Alle();

            foreach (Einsatz einsatz in einsaetze)
            {
                // Für jeden Einsatz wird nun ein Data Objekt erstellt.
                // Dieses wird dann zu der Liste dataList hinzugefügt.
                // ID des Einsatzes
                int    id          = einsatz.ID;
                String mitarbeiter = einsatz.Mitarbeiter.Vorname + " " + einsatz.Mitarbeiter.Name;
                String projekt     = einsatz.Projekt.Name;
                String dauer       = (einsatz.Ende - einsatz.Start).ToString();
                String zeitspanne  = einsatz.Start.ToShortTimeString() + " bis " + einsatz.Ende.ToShortTimeString();
                String datum       = einsatz.Start.ToShortDateString();
                dataList.Add(new Data(id, mitarbeiter, projekt, dauer, zeitspanne, datum));
            }
            // Die Liste dataList wird als Resource für das DataGrid Objekt gesezt.
            // Dieses generiert dann AUtomatisch den Kopf und die Werte der Liste.
            listen_ansicht.ItemsSource = dataList;
        }
 /// <summary>
 /// Diese Methode generiert den Kalender und sezt die Aktuelle Woche. Wenn sich in dieser Woche
 /// Einsätze befinden, werden diese mit Dauer angezeigt.
 /// </summary>
 private void generiereKalender()
 {
     // Den Kopfzeilen werden das Datum hinzugefügt.
     montag_datum.Content     += "\n" + Woche[0].Date.ToShortDateString();
     dienstag_datum.Content   += "\n" + Woche[1].Date.ToShortDateString();
     mittwoch_datum.Content   += "\n" + Woche[2].Date.ToShortDateString();
     donnerstag_datum.Content += "\n" + Woche[3].Date.ToShortDateString();
     freitag_datum.Content    += "\n" + Woche[4].Date.ToShortDateString();
     samstag_datum.Content    += "\n" + Woche[5].Date.ToShortDateString();
     sonntag_datum.Content    += "\n" + Woche[6].Date.ToShortDateString();
     foreach (Einsatz e in Bibliothek.Einsatz_Alle())
     {
         foreach (DateTime tag in Woche)
         {
             if (e.Start.Date == tag.Date)
             {
                 // Wenn das Datum des Wochentages des Einsatzes mit dem Datum des Wochentages in der foreach Schlaufe übereinstimmt,
                 // Wird ein Button generiert.
                 Button feld = new Button();
                 feld.BorderThickness = new Thickness(0, 0, 0, 0);
                 // Der Text des Buttons wird auf die ID des Einsatzes gesezt da für mehr kein Platz ist.
                 feld.Content = "ID: " + e.ID.ToString();
                 // Als ToolTip werden weitere Informationen angezeigt.
                 feld.ToolTip = "Mitarbeiter: " + e.Mitarbeiter.Vorname + " " + e.Mitarbeiter.Name + "\nProjekt: " + e.Projekt.Name;
                 feld.Width   = 50;
                 // Die höhe des Buttons entspricht der Dauer des Einsatzes. Eine Minute entspricht einem Pixel.
                 feld.Height = ((e.Ende.Hour * 60) + e.Ende.Minute) - ((e.Start.Hour * 60) + e.Start.Minute);
                 // Die Hintergrundfarbe des Buttons wird auf die Farbe des EInsatzes gsesezt.
                 feld.Background = new SolidColorBrush(e.Farbe);
                 // Der Abstand oben ist die Startzeit in Pixel also bei 02:00 wären es 120 Pixel.
                 // Das bewirkt dass der Button Dort anfängt wo die Startzeit ist.
                 feld.Margin = new Thickness(0, (e.Start.Hour * 60) + e.Start.Minute, 0, 0);
                 // Nun wird noch definiert das der Button standartmässig im linken oberen Ecken ist ( falls keine Abstände definiert sind ).
                 feld.HorizontalAlignment = HorizontalAlignment.Left;
                 feld.VerticalAlignment   = VerticalAlignment.Top;
                 // Es wird noch ein EventHandler gesezt das wenn auf den Button geklickt wird,
                 // wird der Einsatz in der Einzel Ansicht dargestellt und kann bearbeitet werden.
                 feld.Click += (sender, args) =>
                 {
                     // Eine Einzel Ansicht wird erstellt und angezeigt.
                     EinzelAnsicht einzelAnsicht = new EinzelAnsicht(e.ID);
                     einzelAnsicht.Show();
                     // Das MainWindow wird gesperrt.
                     Window.GetWindow(this).IsEnabled = false;
                     // Wenn das Fenster geschlossen wird, soll es den Kalender neu erstellen,
                     // da die Daten des EInsatzes geändert werden können während die EInzel Ansicht offen ist.
                     einzelAnsicht.Closed += new EventHandler((o, args2) =>
                     {
                         // Das MainWindow wird wieder aktiviert.
                         Window.GetWindow(this).IsEnabled = true;
                         // Für jeden Wochentag wird das Grid geleert.
                         foreach (KeyValuePair <string, Grid> eintrag in TagZuSpalte)
                         {
                             löscheKalender();
                         }
                         // Nun wird der Kalender neu generiert.
                         generiereKalender();
                     });
                 };
                 // Der Button wird zu dem passenden Grid hinzugefügt.
                 TagZuSpalte[e.Start.DayOfWeek.ToString()].Children.Add(feld);
                 // Wenn die Mitarbeiter ID grösser 1 ist, wird der Einsatz in die rechte Kolonne gesezt.
                 if (e.Mitarbeiter.ID > 1)
                 {
                     feld.SetValue(Grid.ColumnProperty, 1);
                 }
                 // Wenn die Mitarbeiter ID kleiner 1 ist, wird der Einsatz in die linke Kolonne gesezt.
                 else
                 {
                     feld.SetValue(Grid.ColumnProperty, 0);
                 }
                 // Der Button wird im Grid in die erste Reihe gesezt.
                 feld.SetValue(Grid.RowProperty, 0);
             }
         }
     }
 }
Example #7
0
        public void constructCalendar()
        {
            // Clear header
            for (var i = 0; i < calendarParent.Children.Count; i++)
            {
                if (Grid.GetRow(calendarParent.Children[i]) == 0)
                {
                    calendarParent.Children.Remove(calendarParent.Children[i]);
                }
            }
            // Clear calendar
            this.calendarGrid.Children.Clear();


            int month_diff = 0;

            // if pre or post month
            if (Application.Current.Properties["month_change"] != null)
            {
                ;
                var bool_tmp = Int32.TryParse(Application.Current.Properties["month_change"].ToString(), out month_diff);
            }
            DateTime now = DateTime.Now;

            now = now.AddMonths(month_diff);

            var month       = now.Month;
            var year        = now.Year;
            var daysInMonth = System.DateTime.DaysInMonth(year, month);
            var dayCounter  = 0;

            // Calendar header
            TextBlock month_name = new TextBlock();

            month_name.Text          = now.ToString("MMMM") + " " + now.ToString("yyyy");
            month_name.TextAlignment = TextAlignment.Center;
            this.calendarParent.Children.Add(month_name);
            Grid.SetRow(month_name, 0);
            Grid.SetColumn(month_name, 1);
            // Previous month
            var    pre_month      = now.AddMonths(-1);
            Button pre_month_name = new Button();

            pre_month_name.Content = pre_month.ToString("MMM");
            this.calendarParent.Children.Add(pre_month_name);
            pre_month_name.Click += this.monthHandler_Click;
            pre_month_name.Tag    = "-1";
            Grid.SetRow(pre_month_name, 0);
            Grid.SetColumn(pre_month_name, 0);
            // Next Month
            var    post_month      = now.AddMonths(1);
            Button post_month_name = new Button();

            post_month_name.Content = post_month.ToString("MMM");
            post_month_name.Click  += this.monthHandler_Click;
            post_month_name.Tag     = "1";
            this.calendarParent.Children.Add(post_month_name);
            Grid.SetRow(post_month_name, 0);
            Grid.SetColumn(post_month_name, 2);


            DateTime day = new DateTime(year, month, 1);

            List <Einsatz> jobList = Bibliothek.Einsatz_Alle();

            // Draw 28 days... base number for everymonth & is a multiple of 7 which is cal no. of columns
            for (var k = 0; k < 4; k++)
            {
                for (var l = 0; l < 7; l++)
                {
                    Grid cellGrid = new Grid();
                    cellGrid.RowDefinitions.Add(new RowDefinition());
                    cellGrid.RowDefinitions[0].Height = new GridLength(0.2, GridUnitType.Star);
                    cellGrid.RowDefinitions.Add(new RowDefinition());
                    dayCounter++;
                    TextBlock tblock = new TextBlock();
                    tblock.Text = dayCounter.ToString();
                    cellGrid.Children.Add(tblock);
                    tblock.FontSize   = 10;
                    tblock.Background = Brushes.Azure;

                    ListBox cell = new ListBox();
                    for (var i = 0; i < jobList.Count(); i++)
                    {
                        if (jobList[i].Start.DayOfYear <= day.DayOfYear && jobList[i].Ende.DayOfYear >= day.DayOfYear && jobList[i].Ende.Year == day.Year) // for jobs in current month
                        {
                            ListBoxItem tblock2 = new ListBoxItem();
                            tblock2.Tag = jobList[i].ID; // Set id tag to open proper job on entry double click
                            tblock2.MouseDoubleClick += this.lsJob_Handler;

                            tblock2.Content    = jobList[i].Name.ToString();
                            tblock2.FontSize   = 8;
                            tblock2.Height     = 20;
                            tblock2.Background = Brushes.BlueViolet;
                            cell.Items.Add(tblock2);
                        }
                    }
                    day = day.AddDays(1);
                    cellGrid.Children.Add(cell);
                    this.calendarGrid.Children.Add(cellGrid);
                    Grid.SetRow(cell, 1);
                    Grid.SetRow(cellGrid, k);
                    Grid.SetColumn(cellGrid, l);
                }
            }

            // Draw rest of the days for months which are longer than 28 days
            var daysRemaining = daysInMonth - dayCounter;

            for (var j = 0; j < daysRemaining; j++)
            {
                Grid cellGrid = new Grid();
                cellGrid.RowDefinitions.Add(new RowDefinition());
                cellGrid.RowDefinitions[0].Height = new GridLength(0.2, GridUnitType.Star);
                cellGrid.RowDefinitions.Add(new RowDefinition());
                dayCounter++;
                TextBlock tblock = new TextBlock();
                var       text   = 29 + j;
                tblock.Text       = text.ToString();
                tblock.FontSize   = 10;
                tblock.Background = Brushes.Azure;
                cellGrid.Children.Add(tblock);


                ListBox cell = new ListBox();
                for (var i = 0; i < jobList.Count(); i++)
                {
                    if (jobList[i].Start.DayOfYear <= day.DayOfYear && jobList[i].Ende.DayOfYear >= day.DayOfYear) // for jobs in current month
                    {
                        ListBoxItem tblock2 = new ListBoxItem();
                        tblock2.Tag = jobList[i].ID; // Set id tag to open proper job on entry double click
                        tblock2.MouseDoubleClick += this.lsJob_Handler;

                        tblock2.Content    = jobList[i].Name.ToString();
                        tblock2.FontSize   = 8;
                        tblock2.Height     = 20;
                        tblock2.Background = Brushes.BlueViolet;
                        cell.Items.Add(tblock2);
                    }
                }
                day = day.AddDays(1);

                cellGrid.Children.Add(cell);
                this.calendarGrid.Children.Add(cellGrid);
                Grid.SetRow(cell, 1);
                Grid.SetRow(cellGrid, 5);
                Grid.SetColumn(cellGrid, j);
            }
        }