using DatenDB; using Deckungsbeitrag.AA_Klassen; using Deckungsbeitrag.UserControls; using Microsoft.VisualBasic; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Text.Json; using System.Threading.Tasks; using System.Windows.Forms; namespace Deckungsbeitrag.AA_Forms { public partial class FormTourenplanung : Form { private Benutzer Benutzer; #region Form-Konstruktor public FormTourenplanung() { InitializeComponent(); } public FormTourenplanung(Benutzer benutzer) : this() { this.Cursor = Cursors.WaitCursor; this.Benutzer = benutzer; LadeAlleTabs(); // Controls steuern nach BenutzerRolle switch (this.Benutzer.Rolle) { case BenutzerRolle.Verwaltung: break; case BenutzerRolle.Fahrer: this.buttonAddPage.Enabled = false; break; case BenutzerRolle.Admin: break; case BenutzerRolle.Waschstrasse: this.buttonAddPage.Enabled = false; break; case BenutzerRolle.Master: break; case BenutzerRolle.Expedit: this.buttonAddPage.Enabled = false; break; case BenutzerRolle.Frottee: this.buttonAddPage.Enabled = false; break; case BenutzerRolle.Flach: this.buttonAddPage.Enabled = false; break; default: break; } } #endregion private void FormTourenplanung_Load(object sender, EventArgs e) { List kundenliste = Kunde.GetKundenTourenListe(); // Kunden hinzufügen foreach (Kunde kunde in kundenliste) { // Wenn kein Suchtext vorhanden, dann KundeName verwenden. KundenControl control = new KundenControl(kunde.Suchtext == string.Empty ? kunde.KundeName : kunde.Suchtext, kunde.Region); control.Tag = kunde; flowLayoutPanelKunden.Controls.Add(control); } // Breite des Panels anpassen damit die kompletten KundenControls sichtbar sind. +25 = ScrollBar Breite. this.flowLayoutPanelKunden.Width = flowLayoutPanelKunden.Controls[0].Width + 25; this.tabControlLKW.Location = new Point(this.flowLayoutPanelKunden.Right, this.tabControlLKW.Location.Y); } #region TabControl-Funktionen // 1. TabPage wird hinzugefügt. private void buttonAddPage_Click(object sender, EventArgs e) { UCTabPageLKW uc = new UCTabPageLKW(); TabPage tp = new TabPage("Neue TabPage"); uc.Dock = DockStyle.Fill; tp.Controls.Add(uc); this.tabControlLKW.TabPages.Add(tp); } // 2. Umbennen mit DoppelClick starten private void tabControlLKW_MouseDoubleClick(object sender, MouseEventArgs e) { if(this.Benutzer.Rolle == BenutzerRolle.Admin || this.Benutzer.Rolle == BenutzerRolle.Verwaltung) { for (int i = 0; i < tabControlLKW.TabCount; i++) { Rectangle r = tabControlLKW.GetTabRect(i); if (r.Contains(e.Location)) { string altText = tabControlLKW.TabPages[i].Text; string neuText = PromptForText("Tab-Namen ändern", "Neuer Name:", altText); if (!string.IsNullOrWhiteSpace(neuText)) tabControlLKW.TabPages[i].Text = neuText; break; } } } } // 3. Öffnet Fenster mit Texteingabe für neuen Name private string PromptForText(string titel, string prompt, string defaultText) { return Interaction.InputBox(prompt, titel, defaultText); } private void tabControlLKW_SelectedIndexChanged(object sender, EventArgs e) { if (tabControlLKW.SelectedTab.Controls.Count == 0) { UCTabPageLKW uc = new UCTabPageLKW(); uc.Dock = DockStyle.Fill; tabControlLKW.SelectedTab.Controls.Add(uc); } } private void SpeichereAlleTabs() { var alleTabs = new List(); foreach (TabPage tab in tabControlLKW.TabPages) { if (tab.Controls[0] is UCTabPageLKW uc) { alleTabs.Add(uc.SpeichereDaten()); } } string json = JsonSerializer.Serialize(alleTabs, new JsonSerializerOptions { WriteIndented = true }); File.WriteAllText("lkw-touren.json", json); } private void LadeAlleTabs() { if (!File.Exists("lkw-touren.json")) return; try { string json = File.ReadAllText("lkw-touren.json"); var tabDaten = JsonSerializer.Deserialize>(json); // Bestehende Tabs löschen tabControlLKW.TabPages.Clear(); // Jede Fahrzeug-Tab laden foreach (var tabData in tabDaten) { // Neuer TabPage TabPage tabPage = new TabPage(tabData.FahrzeugName); // UserControl erstellen UCTabPageLKW uc = new UCTabPageLKW(); uc.Dock = DockStyle.Fill; // DATEN laden! uc.LadeDaten(tabData); // UC zum Tab hinzufügen tabPage.Controls.Add(uc); tabControlLKW.TabPages.Add(tabPage); } MessageBox.Show($"Geladen: {tabDaten.Count} Fahrzeuge"); } catch (Exception ex) { MessageBox.Show($"Fehler beim Laden: {ex.Message}"); } } #endregion private void FormTourenplanung_FormClosing(object sender, FormClosingEventArgs e) { SpeichereAlleTabs(); } private void FormTourenplanung_Shown(object sender, EventArgs e) { this.Cursor = Cursors.Default; } } } //DONE: Testen ob umbenennen funktioniert. //TODO: Max Clones von PanelKunde zu PanelTourenplanung. (Lieferrythmus eingeben?) //TODO: Speichern der Touren ermöglichen. Eventuell über .json oder .xml Datei? //TODO: Filter für Regionen ermöglichen. //TODO: Funktioniert mehrere KundenControls auf einmal DragDrop?