128 lines
3.8 KiB
C#
128 lines
3.8 KiB
C#
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. |