Programm_Wirl/AA-Forms/FormTourenplanung.cs

204 lines
5.9 KiB
C#

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<Kunde> 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<TourenDaten>();
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<List<TourenDaten>>(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?