Programm_Wirl/UserControls/UCTabPageLKW.cs

128 lines
3.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using DatenDB;
using Deckungsbeitrag.AA_Klassen;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Deckungsbeitrag.UserControls
{
public partial class UCTabPageLKW : UserControl
{
public UCTabPageLKW()
{
InitializeComponent();
}
private void FlowLayout_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent("KundeData")) // Custom Format
e.Effect = DragDropEffects.Copy;
}
private void FlowLayout_DragOver(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Copy;
}
private void FlowLayout_DragDrop(object sender, DragEventArgs e)
{
FlowLayoutPanel dropTarget = sender as FlowLayoutPanel;
if (e.Data.GetDataPresent("KundeData"))
{
KundenControl kunde = e.Data.GetData("KundeData") as KundenControl;
if (kunde != null)
{
// Kunde klonen (nicht original bewegen)
KundenControl kundeKopie = (KundenControl)kunde.Clone();
kundeKopie.Parent = dropTarget;
dropTarget.Controls.Add(kundeKopie);
}
}
}
// ★ SPEICHERN nutzt TAG der FlowLayoutPanels ★
public TourenDaten SpeichereDaten()
{
var data = new TourenDaten
{
FahrzeugName = this.Parent?.Text ?? "Unbekannt",
KundenProTag = new List<KundeData>()
};
// Alle FlowLayoutPanels durchgehen
foreach (Control ctrl in tableLayoutPanelTage.Controls)
{
if (ctrl is FlowLayoutPanel flp && flp.Tag is string tag) // ← TAG!
{
// Kunden sammeln
foreach (Control kundeCtrl in flp.Controls)
{
if (kundeCtrl is KundenControl kc)
{
data.KundenProTag.Add(new KundeData
{
Name = kc.KundenName,
Region = kc.Region,
Tag = tag // ← Wochentag mit speichern!
});
}
}
// Counter finden (labelContMO -> MO, etc.)
string counterName = $"labelCont{tag}";
var counterLabel = tableLayoutPanelTage.Controls.Find(counterName, true).FirstOrDefault() as Label;
if (counterLabel != null)
data.Counter[tag] = int.Parse(counterLabel.Text);
}
}
return data;
}
// ★ LADEN TAG der FlowLayoutPanels nutzen ★
public void LadeDaten(TourenDaten data)
{
// Zuerst alle FlowLayoutPanels leeren
foreach (Control ctrl in tableLayoutPanelTage.Controls)
{
if (ctrl is FlowLayoutPanel flp)
flp.Controls.Clear();
}
// Kunden nach TAG verteilen
var kundenGruppiert = data.KundenProTag.GroupBy(k => k.Tag);
foreach (var gruppe in kundenGruppiert)
{
string tag = gruppe.Key;
FlowLayoutPanel zielFlp = tableLayoutPanelTage.Controls
.OfType<FlowLayoutPanel>()
.FirstOrDefault(flp => flp.Tag?.ToString() == tag);
if (zielFlp != null)
{
foreach (var kundeData in gruppe)
{
var kunde = new KundenControl(kundeData.Name, kundeData.Region);
zielFlp.Controls.Add(kunde);
}
}
// Counter setzen
if (data.Counter.TryGetValue(tag, out int count))
{
string counterName = $"labelCont{tag}";
var counterLabel = tableLayoutPanelTage.Controls.Find(counterName, true).FirstOrDefault() as Label;
counterLabel.Text = count.ToString();
}
}
}
}
}
//TODO: Kein Clone mehr wenn im Panel bewegt wird. Nur neue Position übernehmen. (Fahrreihenfolge)
//TODO: Kein Clone wenn zwischen den Panelen bewegt wird.