204 lines
5.9 KiB
C#
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? |