/// <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); }
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); } }
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); }); }
/// <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); } }
/// <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); } } } }
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); } }