Programm_Wirl/AA-Forms/FormMain.cs

912 lines
31 KiB
C#

using BrightIdeasSoftware;
using DatenDB;
using Deckungsbeitrag.AA_Forms;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Serialization;
using Timer = System.Windows.Forms.Timer;
namespace Deckungsbeitrag
{
public partial class FormMain : Form
{
private Benutzer benutzer = null;
Meldungen meldung = new Meldungen();
bool open = false;
private bool isDragging = false;
private Point dragStartPoint;
private Point newLocation;
public FormMain()
{
InitializeComponent();
this.toolStripMenu.Size = new Size(toolStripButton1.Size.Width + 20, this.Height);
//this.panelMain.Location = new Point(toolStripMenu.Right + 10, 12);
if (Properties.Settings.Default.Location_ButtonNeuerAuftrag_Main != Point.Empty) this.buttonNeuerAuftrag.Location = Properties.Settings.Default.Location_ButtonNeuerAuftrag_Main;
if (Properties.Settings.Default.Location_ButtonNeuerUser_Main != Point.Empty) this.buttonNeuerUser.Location = Properties.Settings.Default.Location_ButtonNeuerUser_Main;
if (Properties.Settings.Default.Location_GroupBoxStatistik_Main != Point.Empty) this.groupBoxStatistik.Location = Properties.Settings.Default.Location_GroupBoxStatistik_Main;
}
public FormMain(Benutzer benutzer) : this()
{
this.benutzer = benutzer;
//AKTIVE ELEMENTE JE BENUTZER ROLLE
switch (benutzer.Rolle)
{
case BenutzerRolle.Verwaltung:
this.toolStripDB.Enabled = this.toolStripButtonImport.Enabled = this.tSBExpedit.Enabled = false;
this.groupBoxUpdate.Visible = this.toolStripDB.Visible = this.toolStripButtonImport.Visible = this.tSBExpedit.Enabled = false;
break;
case BenutzerRolle.Fahrer:
this.toolStripDB.Enabled = this.toolStripButtonImport.Enabled = this.tSBBenutzerVW.Enabled = this.tSBAufgabeVW.Enabled = this.tSBExpedit.Enabled = false;
this.groupBoxUpdate.Visible = this.toolStripDB.Visible = this.toolStripButtonImport.Visible = this.tSBBenutzerVW.Enabled = this.tSBAufgabeVW.Enabled = this.tSBExpedit.Enabled = false;
break;
case BenutzerRolle.Admin:
this.groupBoxUpdate.Visible = false;
break;
case BenutzerRolle.Waschstrasse:
this.toolStripDB.Enabled = this.toolStripButtonImport.Enabled = this.tSBBenutzerVW.Enabled = this.tSBAufgabeVW.Enabled = this.tSBExpedit.Enabled = false;
this.groupBoxUpdate.Visible = this.toolStripDB.Visible = this.toolStripButtonImport.Visible = this.tSBBenutzerVW.Enabled = this.tSBAufgabeVW.Enabled = this.tSBExpedit.Enabled = false;
break;
case BenutzerRolle.Master:
break;
default:
break;
}
}
private void FormMain_Load(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Maximized;
this.MaximizedBounds = Screen.PrimaryScreen.WorkingArea;
this.panelMain.Width = this.Width - this.toolStripMenu.Right - 20;
this.panelMain.Location = new Point(this.toolStripMenu.Right, 0);
GetStatistik();
// GroupBoxen im PanelMain werden ausgeblendet
foreach (Control ctr in this.panelMain.Controls)
{
if (ctr.GetType() == typeof(GroupBox))
{
GroupBox gb = (GroupBox)ctr;
if(!gb.Name.Contains("Update") & !gb.Name.Contains("Statistik"))
{
gb.Visible = false;
gb.Location = new Point(0, 0);
gb.Size = new Size(this.panelMain.Width, this.panelMain.Height);
}
}
}
this.Activate();
}
private void Paint_Boarder(Size size, Point location, PaintEventArgs e)
{
Pen pen = new Pen(Color.FromArgb(1, 53, 101), 4);
Rectangle rect = new Rectangle(1, 2, size.Width - 4, size.Height - 4);
e.Graphics.DrawRectangle(pen, rect);
}
private void panelMain_Paint(object sender, PaintEventArgs e)
{
Paint_Boarder(this.panelMain.Size, this.panelMain.Location, e);
}
/// <summary>
/// ToolStrip Buttons Click Events
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void tSBBenutzerVW_Click(object sender, EventArgs e)
{
FormBenutzerVW benutzerVW = new FormBenutzerVW();
benutzerVW.ShowDialog();
}
private void toolStripBeenden_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void tSBAufgabeVW_Click(object sender, EventArgs e)
{
FormAufgabeVW aufgabeVW = new FormAufgabeVW();
aufgabeVW.ShowDialog();
}
private void toolStripZaehlscheine_Click(object sender, EventArgs e)
{
FormKundeVW kundedaten = new FormKundeVW(this.benutzer);
if (kundedaten.ShowDialog() == DialogResult.OK)
{
}
}
private void toolStripDB_Click(object sender, EventArgs e)
{
FormNeuDeckungsbeitrag deckungsbeitrag = new FormNeuDeckungsbeitrag(this.benutzer, false);
if (deckungsbeitrag.ShowDialog() == DialogResult.OK) { }
}
private void tSBWaschstrasse1_Click(object sender, EventArgs e)
{
//FormWaschstrasse waschstrasse = new FormWaschstrasse(this.tSBWaschverlauf.Text);
//waschstrasse.ShowDialog();
//LISTVIEW MIT GEWASCHTEN FÄCHERN ERSTELLEN (KOMMT WENN BENUTZER = ADMIN)
}
private void toolStripButtonImport_Click(object sender, EventArgs e)
{
FormImport import = new FormImport();
import.ShowDialog();
}
private void tSBKosten_Click(object sender, EventArgs e)
{
FormNeuDeckungsbeitrag deckungsbeitrag = new FormNeuDeckungsbeitrag(this.benutzer, true);
if (deckungsbeitrag.ShowDialog() == DialogResult.OK) { }
}
private void tSBEinstellung_Click(object sender, EventArgs e)
{
FormEinstellung einstellung = new FormEinstellung();
einstellung.ShowDialog();
}
private void toolStripStatusLabel2_DoubleClick(object sender, EventArgs e)
{
FormEinstellung einstellung = new FormEinstellung("Sortiment");
einstellung.ShowDialog();
}
private void tSBExpedit_Click(object sender, EventArgs e)
{
FormExpedit exp = new FormExpedit(benutzer);
exp.ShowDialog();
}
private void tSBAuftragVW_Click(object sender, EventArgs e)
{
if (!this.objectListViewAuftrag.Visible)
{
this.rBAlle.Checked = true;
this.rBAlle.Visible = this.rBAusgeliefert.Visible = this.rBFertig.Visible = this.rBVorbereitet.Visible = this.rBAufAbruf.Visible = true;
this.groupBoxAuftrag.Visible = true;
this.groupBoxStatistik.Visible = this.groupBoxUpdate.Visible = this.buttonNeuerAuftrag.Visible = this.buttonNeuerAuftrag.Enabled = this.buttonNeuerUser.Visible = this.buttonNeuerUser.Enabled = false;
this.objectListViewAuftrag.Enabled = this.objectListViewAuftrag.Visible = true;
}
else
{
this.groupBoxAuftrag.Visible = this.buttonAufAbruf.Visible = this.buttonAusgeliefert.Visible = this.rBAlle.Visible = this.rBAusgeliefert.Visible = this.rBFertig.Visible = this.rBVorbereitet.Visible = this.rBAufAbruf.Visible = this.objectListViewAuftrag.Enabled = this.objectListViewAuftrag.Visible = false;
this.groupBoxStatistik.Visible = this.buttonNeuerAuftrag.Visible = this.buttonNeuerAuftrag.Enabled = this.buttonNeuerUser.Enabled = this.buttonNeuerUser.Visible = true;
}
}
private void tSBScannTest_Click(object sender, EventArgs e)
{
if (open)
{
this.groupBoxScannTest.Visible = false;
this.textBoxScannTest.Visible = this.labelScannTest.Visible = this.buttonScannTest.Visible = this.pictureBoxScannTest.Visible = false;
open = false;
}
else
{
this.groupBoxScannTest.Visible = true;
this.textBoxScannTest.Visible = this.labelScannTest.Visible = this.buttonScannTest.Visible = this.pictureBoxScannTest.Visible = true;
this.pictureBoxScannTest.Image = Image.FromFile("C:\\Users\\KilianWirl\\OneDrive - gehgassi GmbH\\Wäscherei Wirl\\Programme\\Deckungsbeitrag\\static-qr-code-ca1aa53ab47cd115bc1ad29afb0e5f22.png");
this.textBoxScannTest.Focus();
open = true;
}
}
private void tSBArtikelVW_Click(object sender, EventArgs e)
{
FormArtikelVW artikelVW = new FormArtikelVW();
artikelVW.ShowDialog();
}
/// <summary>
/// TOOLSTRIP BUTTON DESIGN
/// </summary>
private void get_Border_Paint(object sender, PaintEventArgs e)
{
ToolStripItem item = (ToolStripItem)sender;
ControlPaint.DrawBorder(e.Graphics, new Rectangle(0, 0, item.Width, item.Height), Color.White, ButtonBorderStyle.Solid);
}
private void toolStrip_MouseEnter(object sender, EventArgs e)
{
if (sender.GetType() == typeof(ToolStripButton))
{
ToolStripButton tsb = (ToolStripButton)sender;
tsb.ForeColor = Color.FromArgb(1, 53, 101);
tsb.BackColor = Color.White;
}
}
private void toolStrip_MouseLeave(object sender, EventArgs e)
{
if (sender.GetType() == typeof(ToolStripButton))
{
ToolStripButton tsb = (ToolStripButton)sender;
tsb.ForeColor = Color.White;
tsb.BackColor = Color.FromArgb(1, 53, 101);
}
}
/// <summary>
/// Hilfe Events
///
/// </summary>
private void buttonNeueMaschine_HelpRequested(object sender, HelpEventArgs hlpevent)
{
MessageBox.Show($"Hier kannst du eine neue Maschine anlegen.{Environment.NewLine}{Environment.NewLine}Wenn du bei einer Maschine einen Trockner aus- oder einschalten willst musst du die Maschine doppelt anklicken.", "Hilfe", MessageBoxButtons.OK, MessageBoxIcon.Information);
} //Hilfe bei Maschine Button und Maschine Groupbox.
/// <summary>
/// Panel Main Control Funktionen
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonNeuerAuftrag_Click(object sender, EventArgs e)
{
FormNeuerAuftrag neuerAuftrag = new FormNeuerAuftrag(this.benutzer); neuerAuftrag.ShowDialog();
}
private void buttonScannTest_Click(object sender, EventArgs e)
{
string s = this.textBoxScannTest.Text;
int pos = s.IndexOf('#');
this.textBoxScannTest.Text = this.labelScannTest.Text = s.Substring(pos + 1);
}
/// <summary>
/// Scan QR-Code Test.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void textBoxScannTest_TextChanged(object sender, EventArgs e)
{
TextBox textBox1 = (TextBox)sender;
using (Graphics g = textBox1.CreateGraphics())
{
SizeF size = g.MeasureString(textBox1.Text, textBox1.Font);
textBox1.Width = (int)size.Width + 10; // +10 als Puffer
}
}
/// <summary>
/// Update Events mit Button-Click
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private async void buttonArtikelUpdate_Click(object sender, EventArgs e)
{
FormLaden laden = new FormLaden();
laden.Show();
List<Sortiment> sortiment = Funktionen.SortimentLesen("Liste");
sortiment = sortiment.GroupBy(a => a.ArtNr).Select(g => g.First()).ToList();
//TODO: Testen ob Get_ArtikelKurzliste funktioniert.
//List<Artikel> artikelkurzliste = Funktionen.Get_ArtikelKurzlisteFromDatei();
// Controls blockieren
progressBarArtikel.Value = 0;
progressBarArtikel.Visible = true;
// ProgressBar Maximum definieren
progressBarArtikel.Maximum = sortiment.Count();
tSBArtikelVW.Enabled = false;
// Fortschritt simulieren (z.B. Datenbankabfrage)
var progress = new Progress<int>(value => progressBarArtikel.Value = value);
await Task.Run(() =>
{
Update_Artikel(progress, sortiment);
//TODO: Einkommentieren wenn ArtikelUpdate auf ArtikelKurzliste umgestellt werden kann.
//Update_Artikel(progress, artikelkurzliste);
});
progressBarArtikel.Value = 0;
laden.Close();
this.Show();
//TODO: LadenScreen anzeigen etc.
}
private async void buttonSortimentUpdate_Click(object sender, EventArgs e)
{
//TODO: für Ladescreen den Progressbar programieren. (perplexity fragen wie der Status an einen anderen Screen übergeben werden kann)
// Form Laden anzeigen
FormLaden laden = new FormLaden();
laden.Show();
// Sortiment holen
List<Sortiment> sortiment = Funktionen.SortimentLesen("Liste");
// Controls blockieren
progressBarArtikel.Value = 0;
progressBarArtikel.Visible = true;
// ProgressBar Maximum definieren
progressBarArtikel.Maximum = sortiment.Count();
// Fortschritt simulieren (z.B. Datenbankabfrage)
var progress = new Progress<int>(value => progressBarArtikel.Value = value);
await Task.Run(() => Update_Sortiment(progress, sortiment));
progressBarArtikel.Value = 0;
//laden.Close();
//this.Show();
}
private void Update_Sortiment(IProgress<int> progress, List<Sortiment> sortiment)
{
int tosave = 0;
int saved = 0;
int artvorhanden = 0;
int anzahlkunden = 0;
string sortNr = string.Empty;
List<Kunde> kundenliste = Kunde.GetList(true, string.Empty);
// ProgressBar Maximum definieren
progressBarArtikel.Maximum = kundenliste.Count();
foreach (Kunde kunde in kundenliste)
{
// Fortschrittswert an die ProgressBar melden
progress.Report(++anzahlkunden);
//Jedes Innsbrucker Soziale Dienste Sortiment ist gleich.
if (kunde.KundeNummer == "010069" | kunde.KundeNummer == "010071") sortNr = "010068";
else sortNr = kunde.KundeNummer;
foreach (Sortiment sort in sortiment.FindAll(Sortiment => Sortiment.KundeNummer == sortNr))
{
KundeArtikel item = KundeArtikel.GetItemIfAvailable(Kunde.GetKundeID(sort.KundeNummer, null), sort.ArtNr);
if(item == null)
{
++tosave;
item = new KundeArtikel();
item.KundeID = Kunde.GetKundeID(sort.KundeNummer, null);
item.ArtikelNR = sort.ArtNr;
item.ArtikelName = sort.ArtName;
item.Stand = 0;
item.Fehlmenge = 0;
item.Korrektur = 0;
if (item.Save() == 1) saved++;
}
else ++artvorhanden;
}
}
// Überprüfung ob alle Zeilen gespeichert wurden.
if (tosave == saved)
{
meldung.Gespeichert();
meldung.VerarbeiteteDaten(saved, anzahlkunden, artvorhanden);
}
else meldung.Speicherfehler();
}
private void Update_Artikel(IProgress<int> progress, List<Sortiment> sortiment)
{
int i = 0;
//TODO: Artikel Update weiter testen und programmieren. Für ArtikelKurzliste ausprogrammieren.
foreach (Sortiment sort in sortiment)
{
// Fortschrittswert an die ProgressBar melden
progress.Report(++i);
if (sort.ArtNr != 0)
{
Artikel art = Artikel.GetArtikel(sort.ArtNr);
if (art.ArtikelID == null)
{
art = new Artikel();
art.Nummer = sort.ArtNr;
art.Bezeichnung = sort.ArtName;
art.Nachwaesche = 0;
art.Muellwaesche = 0;
art.LastReset = null;
//Switch für ArtikelKategorie
switch (sort.ArtNr)
{
case var nr when nr.ToString().StartsWith("63"):
art.Kategorie = ArtikelKategorie.Frottee;
break;
case var nr when nr.ToString().StartsWith("611"):
if (nr.ToString().StartsWith("61115") || nr.ToString().StartsWith("61116")) art.Kategorie = ArtikelKategorie.Spannleintuch;
else art.Kategorie = ArtikelKategorie.Grossteile;
break;
case var nr when nr.ToString().StartsWith("612"):
art.Kategorie = ArtikelKategorie.Kleinteile;
break;
default:
break;
}
//Erstellen der Shortbezeichnung für Buttons
if (art.Bezeichnung.Contains("DOPPEL") | art.Bezeichnung.Contains("D-")) art.Short = art.Short + "D-";
if (art.Bezeichnung.Contains("SPANN")) art.Short = art.Short + "SP";
if (art.Bezeichnung.Contains("LEINTUCH")) art.Short = art.Short + "LT";
if (art.Bezeichnung.Contains("SPANN"))
{
string[] s = art.Bezeichnung.Split(' ');
if (s.Length == 3) art.Short = art.Short + " " + s[2];
} //Farben zuordnen und zu Short hinzufügen
if (art.Bezeichnung.Contains("HANDTUCH")) art.Short = art.Short + "HT";
if (art.Bezeichnung.Contains("DUSCHTUCH")) art.Short = art.Short + "DT";
if (art.Bezeichnung.Contains("BADETUCH")) art.Short = art.Short + "BT";
if (art.Bezeichnung.Contains("BADEVORLEGER")) art.Short = art.Short + "BV";
if (art.Bezeichnung.Contains("BADEMANTEL")) art.Short = art.Short + "BM";
if (art.Bezeichnung.Contains("SAUNATUCH")) art.Short = art.Short + "ST";
if (art.Bezeichnung.Contains("GESICHTSTUCH")) art.Short = art.Short + "GT";
if (art.Bezeichnung.Contains("POLSTERBEZUG"))
{
art.Short = art.Short + "PB";
switch (art.Bezeichnung)
{
case var bez when bez.Contains("60x80"):
art.Short = art.Short + " 60x80";
break;
case var bez when bez.Contains("40x60"):
art.Short = art.Short + " 40x60";
break;
case var bez when bez.Contains("40x40"):
art.Short = art.Short + " 40x40";
break;
case var bez when bez.Contains("40x50"):
art.Short = art.Short + " 40x50";
break;
case var bez when bez.Contains("40x70"):
art.Short = art.Short + " 40x70";
break;
default:
break;
}
} //Größen zuordnen und zu Short hinzufügen
if (art.Bezeichnung.Contains("DECKENBEZUG")) art.Short = art.Short + "DB";
if (art.Bezeichnung.Contains("TISCHTUCH"))
{
art.Short = art.Short + "TT";
int index = art.Bezeichnung.IndexOf("x");
if (index > 0) art.Short = art.Short + art.Bezeichnung.Substring(index - 4, 8);
} //Tischtücher und Größen zuordnen und zu Short hinzufügen
if (art.Bezeichnung.Contains("MUNDSERVIETTE")) art.Short = art.Short + "MS";
if (art.Bezeichnung.Contains("DECKSERVIETTE")) art.Short = art.Short + "DS";
//Speichern jedes Artikels
art.Save();
}
else
{
art.Bezeichnung = sort.ArtName;
art.Save();
}
}
}
tSBArtikelVW.Enabled = true;
progressBarArtikel.Value = 0;
}
private void buttonAllUpdate_Click(object sender, EventArgs e)
{
//Update_Artikel();
}
/// <summary>
/// AUFTRAGSVERWALTUNG FUNKTIONEN
/// Button-Click AufAbruf und Ausgeliefert sowie ItemsChecked
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonAusgeliefert_Click(object sender, EventArgs e)
{
int saved = 0;
int tosave = 0;
if (this.objectListViewAuftrag.CheckedItems.Count > 0)
{
if (meldung.AuftragAusgeliefert() == DialogResult.Yes)
{
foreach (OLVListItem item in this.objectListViewAuftrag.CheckedItems)
{
++tosave;
Auftrag a = (Auftrag)item.RowObject;
a.Erledigt = DateTime.Today;
a.ErledigtVon = this.benutzer.BenutzerID;
a.Status = AuftragStatus.Ausgeliefert;
if (a.Save()[0] == 1) ++saved;
}
if (saved == tosave) GetExpeditList(null);
}
}
}
private void buttonAufAbruf_Click(object sender, EventArgs e)
{
if (this.objectListViewAuftrag.CheckedItems.Count == 1)
{
if (meldung.AuftragAufAbruf() == DialogResult.Yes)
{
OLVListItem item = (OLVListItem)this.objectListViewAuftrag.CheckedItems[0];
Auftrag a = (Auftrag)item.RowObject;
a.Status = AuftragStatus.AufAbruf;
if (a.Save()[0] == 1) GetExpeditList(null);
}
}
else
{
meldung.NurEinAuftrag();
}
}
private void objectListViewAuftrag_ItemChecked(object sender, ItemCheckedEventArgs e)
{
if (this.objectListViewAuftrag.CheckedItems.Count > 0) this.buttonAusgeliefert.Visible = true;
if (this.objectListViewAuftrag.CheckedItems.Count == 1) this.buttonAufAbruf.Visible = true;
else this.buttonAufAbruf.Visible = false;
}
/// <summary>
/// AUFTRAGSVERWALTUNG FUNKTIONEN
/// RadioButtons für Auftragsverwaltung & Laden der Auftragsliste nach Status.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void RadioButton_CheckedChanged(object sender, EventArgs e)
{
RadioButton rB = (RadioButton)sender;
if (rB.Checked)
{
if (Enum.TryParse(rB.Name.Substring(2), out AuftragStatus status)) rB.Tag = (int)status;
else rB.Tag = null;
List<Auftrag> alist = new List<Auftrag>();
switch (rB.Tag)
{
case AuftragStatus.Abgeholt:
break;
case AuftragStatus.Aufgelegt:
break;
case AuftragStatus.Finisching:
break;
case AuftragStatus.Herrichten:
break;
case AuftragStatus.Vorbereitet:
GetExpeditList((int?)rB.Tag);
break;
case AuftragStatus.Fertig:
GetExpeditList((int?)rB.Tag);
break;
case AuftragStatus.Ausgeliefert:
GetExpeditList((int?)rB.Tag);
break;
case AuftragStatus.AufAbruf:
GetExpeditList((int?)rB.Tag);
break;
default:
GetExpeditList((int?)rB.Tag);
break;
}
}
}
private void GetExpeditList(int? status)
{
Cursor.Current = Cursors.WaitCursor;
this.objectListViewAuftrag.SuspendLayout();
this.objectListViewAuftrag.BeginUpdate();
List<Auftrag> alist = new List<Auftrag>();
alist = Auftrag.GetStatusList(status);
if (alist.Count == 0) meldung.KeineAufträge();
else Load_OLV(alist); // Load_ListView(alist);
this.objectListViewAuftrag.EndUpdate();
this.objectListViewAuftrag.ResumeLayout();
Cursor.Current = Cursors.Default;
}
/// <summary>
/// AUFTRAGSVERWALTUNG FUNKTIONEN
/// ObjectListView für Auftragsverwaltung laden.
/// </summary>
/// <param name="alist"></param>
private void Load_OLV(List<Auftrag> alist)
{
this.objectListViewAuftrag.HeaderFormatStyle = Funktionen.GetHeader();
Generator.GenerateColumns(this.objectListViewAuftrag, typeof(Auftrag), true);
this.objectListViewAuftrag.SetObjects(alist);
OLVColumn sortcolumn = (OLVColumn)this.objectListViewAuftrag.Columns[1];
this.objectListViewAuftrag.Sort(sortcolumn);
OLVColumn buttonColumn = new OLVColumn();
buttonColumn = (OLVColumn)this.objectListViewAuftrag.Columns[10];
buttonColumn.IsButton = true;
buttonColumn.ButtonSizing = OLVColumn.ButtonSizingMode.CellBounds;
this.objectListViewAuftrag.CheckedAspectName = "IsChecked";
Funktionen.Columns_Resize(this.objectListViewAuftrag);
}
private void FormMain_HelpButtonClicked(object sender, CancelEventArgs e)
{
string[] keys = {
"Aufgelegt",
"Hergerichtet",
"Fertig" };
string[] keytext = {
"Auftrag wurde erstellt aber noch nicht ferig hergerichtet",
"Auftrag wurde fertig hergerichtet aber nicht abgeschlossen. Containeranzahl kann noch bearbeitet werden.",
"Auftrag wurde abgeschlossen und kann nichtmehr bearbeitet werden."};
FormHelp help = new FormHelp(keys, keytext);
help.ShowDialog();
//e.Cancel = true;
}
private void tSBHilfe_Click(object sender, EventArgs e)
{
FormMain_HelpButtonClicked(this, null);
}
private void GetStatistik()
{
string[] statistik = { "Container gewaschen:", "Container hergerichtet:", "Container fertig:", "Kunden gewaschen:", "Kunden hergerichtet:", "Kunden abgeschlossen:" };
List<Auftrag> auftraglist = Auftrag.GetAuftragStatsListToday(this.dateTimePicker1.Value.Date);
for (int i = 1; i <= statistik.Length; i++)
{
foreach(Control ctr in this.tableLayoutPanelStatistik.Controls)
{
Label lbl;
if (ctr.GetType() == typeof(Label))
{
lbl = (Label)ctr;
if (lbl.Text.Contains("Statistik") && lbl.Text.Contains($"{i.ToString()}")) lbl.Text = statistik[i - 1].ToString();
if (lbl.Name.Contains("Zahl"))
{
int j = 0;
switch (lbl.Name)
{
case var s when s.Contains($"1"):
foreach (Auftrag a in auftraglist) if (a.Status == AuftragStatus.Aufgelegt) j += a.Container;
lbl.Text = j.ToString();
break;
case var s when s.Contains($"2"):
foreach (Auftrag a in auftraglist) if (a.Status == AuftragStatus.Vorbereitet) j += a.ContainerClean;
lbl.Text = j.ToString();
break;
case var s when s.Contains($"3"):
foreach (Auftrag a in auftraglist) if (a.Status == AuftragStatus.Fertig) j += a.ContainerClean;
lbl.Text = j.ToString();
break;
case var s when s.Contains($"4"):
foreach (Auftrag a in auftraglist) if (a.Status == AuftragStatus.Aufgelegt) j++;
lbl.Text = j.ToString();
break;
case var s when s.Contains($"5"):
foreach (Auftrag a in auftraglist) if (a.Status == AuftragStatus.Vorbereitet) j++;
lbl.Text = j.ToString();
break;
case var s when s.Contains($"{i}"):
foreach (Auftrag a in auftraglist) if (a.Status == AuftragStatus.Fertig) j++;
lbl.Text = j.ToString();
break;
default:
break;
}
}
}
}
}
//this.groupBoxStatistik.Width = this.tableLayoutPanelStatistik.Right;
}
private void dateTimePicker1_CloseUp(object sender, EventArgs e)
{
GetStatistik();
}
/// <summary>
/// Drag & Drop für GroupBox.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void groupBox_Paint(object sender, PaintEventArgs e)
{
GroupBox gb = (GroupBox)sender;
base.OnPaint(e);
Funktionen.GetGroupBoxBoarder(gb, e);
gb.MouseDown += groupBox_MouseDown;
gb.MouseMove += groupBox_MouseMove;
gb.MouseUp += groupBox_MouseUp;
foreach(Control ctr in gb.Controls)
{
ctr.MouseDown += groupBox_MouseDown;
ctr.MouseMove += groupBox_MouseMove;
ctr.MouseUp += groupBox_MouseUp;
}
}
private void groupBox_MouseDown(object sender, MouseEventArgs e)
{
GroupBox gb;
if (sender.GetType() == typeof(GroupBox)) gb = (GroupBox)sender;
else
{
var ctr = (Control)sender;
gb = (GroupBox)ctr.Parent;
}
if (e.Button == MouseButtons.Left)
{
isDragging = true;
dragStartPoint = new Point(e.X, e.Y);
}
}
private void groupBox_MouseMove(object sender, MouseEventArgs e)
{
GroupBox gb;
if (sender.GetType() == typeof(GroupBox)) gb = (GroupBox)sender;
else
{
var ctr = (Control)sender;
gb = (GroupBox)ctr.Parent;
}
Panel panel = (Panel)gb.Parent;
//TODO: DragDrop verbessern
if (isDragging)
{
// Neue Position berechnen, relativ zum ursprünglichen Klickpunkt
newLocation = gb.PointToScreen(dragStartPoint);
newLocation.X += e.X - dragStartPoint.X;
newLocation.Y += e.Y - dragStartPoint.Y;
// Optional: Keep inside form bounds
newLocation.X = Math.Max(0, Math.Min(panel.Width - gb.Width, newLocation.X));
newLocation.Y = Math.Max(0, Math.Min(panel.Height - gb.Height, newLocation.Y));
// Position des Controls setzen
newLocation = panel.PointToClient(newLocation);
//TODO: GroupBox Realtime verschieben testen. Sonst Endposition nehmen. gb.Location hier entfernen und unten einkommentieren.
}
}
private void groupBox_MouseUp(object sender, MouseEventArgs e)
{
GroupBox gb;
if (sender.GetType() == typeof(GroupBox)) gb = (GroupBox)sender;
else
{
var ctr = (Control)sender;
gb = (GroupBox)ctr.Parent;
}
if (e.Button == MouseButtons.Left)
{
isDragging = false;
//TODO: GroupBox wird an Endposition verschoben.
gb.Location = newLocation;
}
Properties.Settings.Default.Location_GroupBoxStatistik_Main = gb.Location;
Properties.Settings.Default.Save();
}
/// <summary>
/// Drag & Drop für Buttons.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button_MouseDown(object sender, MouseEventArgs e)
{
Button btn = (Button)sender;
if (btn != null && e.Button == MouseButtons.Left)
{
//btn.DoDragDrop(btn, DragDropEffects.Move);
dragStartPoint = e.Location;
isDragging = false;
}
}
private void panelMain_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(Button)))
e.Effect = DragDropEffects.Move;
else
e.Effect = DragDropEffects.None;
}
private void panelMain_DragDrop(object sender, DragEventArgs e)
{
if (isDragging)
{
Button btn = e.Data.GetData(typeof(Button)) as Button;
if (btn != null)
{
Point p = this.panelMain.PointToClient(new Point(e.X, e.Y));
btn.Location = new Point(p.X - btn.Width / 2, p.Y - btn.Height / 2);
}
}
}
private void Button_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
var dx = Math.Abs(e.X - dragStartPoint.X);
var dy = Math.Abs(e.Y - dragStartPoint.Y);
if (!isDragging && (dx > SystemInformation.DragSize.Width || dy > SystemInformation.DragSize.Height))
{
isDragging = true;
var btn = sender as Button;
btn.DoDragDrop(btn, DragDropEffects.Move);
}
}
}
private void Button_MouseUp(object sender, MouseEventArgs e)
{
var btn = sender as Button;
if (!isDragging)
{
//btn?.PerformClick(); // oder der normale Click-Event-Handler wird aufgerufen
}
}
/// <summary>
/// Buttons auf MainPanel. Schnellzugriff für Neuer User und Neuer Auftrag.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonNeuerUser_Click(object sender, EventArgs e)
{
FormNeuerBenutzer neuerBenutzer = new FormNeuerBenutzer();
neuerBenutzer.ShowDialog();
}
/// <summary>
/// Settings speichern bei Form_Closing.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
{
try
{
Properties.Settings.Default.Location_ButtonNeuerAuftrag_Main = this.buttonNeuerAuftrag.Location;
Properties.Settings.Default.Location_ButtonNeuerUser_Main = this.buttonNeuerUser.Location;
Properties.Settings.Default.Location_GroupBoxStatistik_Main = this.groupBoxStatistik.Location;
Properties.Settings.Default.Save();
}
catch (Exception ex)
{
MessageBox.Show("Fehler beim Speichern" + ex.Message);
}
}
}
}