Programm_Wirl/AA-Forms/FormMain.cs

1466 lines
52 KiB
C#

using BrightIdeasSoftware;
using DatenDB;
using Deckungsbeitrag.AA_Forms;
using Deckungsbeitrag.AA_Klassen;
using Deckungsbeitrag.Properties;
using Npgsql;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Management.Instrumentation;
using System.Reflection;
using System.Runtime;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Input;
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;
private Size _fixedSize;
private bool _handlingResize;
private readonly UserSettingsManager _settings = new UserSettingsManager();
private bool formloading = false;
private Dictionary<DateTime, List<Auftrag>> auftragliste;
private GroupBox draggedBox;
private Point dragOffset;
private Point dragOffsetButton;
private PictureBox ghostImage;
private Button draggedButton;
private bool isButtonDragging = false;
private Timer dragEndTimer;
public FormMain()
{
InitializeComponent();
this.panelMain.AllowDrop = true;
this.toolStripMenu.Size = new Size(toolStripButton1.Size.Width + 20, this.Height);
}
public FormMain(Benutzer benutzer) : this()
{
this.benutzer = benutzer;
this.groupBoxUpdate.Enabled = false;
// AKTIVE ELEMENTE JE BENUTZER ROLLE
switch (benutzer.Rolle)
{
case BenutzerRolle.Verwaltung:
this.toolStripDB.Enabled = this.toolStripButtonImport.Enabled = this.tSBExpedit.Enabled = false;
this.toolStripDB.Visible = this.toolStripButtonImport.Visible = this.tSBExpedit.Enabled = false;
break;
case BenutzerRolle.Fahrer:
// ToolStripButtons werden deaktiviert.
foreach(ToolStripButton tsb in this.toolStripMenu.Items)
{
// Ausgewählter ToolStripButton bleibt aktiv.
if(!tsb.Name.Contains("Auftrag")) tsb.Enabled = false;
}
// Controls im PanelMain werden deaktiviert.
foreach(Control ctr in this.panelMain.Controls)
{
// Ausgewählte Buttons bleiben aktiv.
if (ctr.Name.Contains("Auftrag") || ctr.Name.Contains("Tourenliste")) ctr.Visible = true;
else
{
//if (ctr.GetType() == typeof(Button)) ctr.BackColor = Color.Gray;
ctr.Visible = false;
}
}
break;
case BenutzerRolle.Admin:
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:
this.groupBoxUpdate.Visible = this.groupBoxUpdate.Enabled = true;
break;
default:
break;
}
ghostImage = new PictureBox
{
Size = new Size(200, 100), // GroupBox-Größe
Visible = false,
BackColor = Color.Transparent,
SizeMode = PictureBoxSizeMode.StretchImage
};
panelMain.Controls.Add(ghostImage); // Zum Panel!
}
private async void FormMain_Load(object sender, EventArgs e)
{
formloading = true;
_settings.Load();
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);
this.Text += Assembly.GetExecutingAssembly().GetName().Version.ToString();
this.labelKundenDatum.Text = @"N:\TECHNIK\Software\Wirl-Verwaltung\Listen\Kundenstammblatt.csv";
this.labelSoftwareDatum.Text = @"N:\TECHNIK\Software\Wirl-Verwaltung\Setup\SetupVerwaltung*.msi";
this.labelArtikelDatum.Text = @"N:\TECHNIK\Software\Wirl-Verwaltung\Listen\Artikelkurzliste.csv";
GetStatistik();
GetSaison();
// GroupBoxen im PanelMain werden ausgeblendet
foreach (GroupBox gb in this.panelMain.Controls.OfType<GroupBox>())
{
if (!gb.Name.Contains("Update") & !gb.Name.Contains("Statistik") & !gb.Name.Contains("Neuer") & !gb.Name.Contains("Saison") & !gb.Name.Contains("ContAnz"))
{
gb.Visible = false;
gb.Location = new Point(0, 0);
gb.Size = new Size(this.panelMain.Width, this.panelMain.Height);
}
RegisterDragEvents(gb);
}
if (this.groupBoxContAnz.Visible)
{
await GetAuftraege();
GetContainerProTag();
}
this.Activate();
_fixedSize = this.Size;
formloading = false;
}
private async Task GetAuftraege()
{
var conn = new NpgsqlConnection(ConfigurationManager.AppSettings["ConnectionString"]); // Pro Task!
try
{
await conn.OpenAsync();
auftragliste = await Auftrag.GetAuftraegeProLiefertagAsync(conn, AuftragTyp.Standart, AuftragStatus.Aufgelegt);
}
finally
{
if (conn.State == ConnectionState.Open)
conn.Close();
conn.Dispose();
}
}
private void Paint_Boarder(Size size, Point location, PaintEventArgs e)
{
e.Graphics.Clear(Color.White);
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);
}
#region ToolStripButton_Click-Events
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 tSBWaschstrasse_Click(object sender, EventArgs e)
{
FormAufleger aufleger = new FormAufleger();
aufleger.ShowDialog();
}
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)
{
this.Cursor = Cursors.WaitCursor;
if (!this.groupBoxAuftrag.Visible)
{
if (benutzer.Rolle == BenutzerRolle.Fahrer) this.rBFertig.Checked = true;
else this.rBAlle.Checked = true;
// Groupbox einblenden wenn OLV noch nicht sichtbar ist.
foreach (GroupBox gb in this.panelMain.Controls.OfType<GroupBox>()) gb.Visible = gb.Name.Contains("Auftrag") ? true : false;
// PanelMain Buttons ausblenden.
foreach (Button btn in this.panelMain.Controls.OfType<Button>()) btn.Visible = false;
}
else
{
// Groupbox ausblenden wenn OLV sichtbar ist.
foreach (GroupBox gb in this.panelMain.Controls.OfType<GroupBox>()) gb.Visible = gb.Name.Contains("Auftrag") ? false : true;
// PanelMain Buttons einblenden.
foreach (Button btn in this.panelMain.Controls.OfType<Button>()) btn.Visible = true;
}
this.Cursor = Cursors.Default;
}
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();
}
#endregion
/// <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, AuftragTyp.Standart); 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);
}
private void buttonNeueAufgabe_Click(object sender, EventArgs e)
{
FormNeueAufgabe neueAufgabe = new FormNeueAufgabe();
neueAufgabe.ShowDialog();
}
private void buttonNeuerStand_Click(object sender, EventArgs e)
{
FormNeuerAuftrag neuerAuftrag;
DialogResult result = meldung.GetFrage(this, "Möchtest du eine Standverminderung oder Standerhöhung erstellen? \n\n [JA = Standverminerung | NEIN = Standerhöhung]", true);
switch (result)
{
case DialogResult.Cancel:
return;
case DialogResult.Yes:
neuerAuftrag = new FormNeuerAuftrag(this.benutzer, AuftragTyp.Standverminderung); neuerAuftrag.ShowDialog();
break;
case DialogResult.No:
neuerAuftrag = new FormNeuerAuftrag(this.benutzer, AuftragTyp.Standerhöhung); neuerAuftrag.ShowDialog();
break;
default:
break;
}
}
private void buttonNeueInventur_Click(object sender, EventArgs e)
{
FormNeuerAuftrag neuerAuftrag = new FormNeuerAuftrag(this.benutzer, AuftragTyp.Inventur); neuerAuftrag.ShowDialog();
}
/// <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 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);
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, List<Artikel> artikelkurzliste)
{
int i = 0;
//TODO: Artikel Update weiter testen und programmieren. Für ArtikelKurzliste ausprogrammieren.
if (artikelkurzliste == null)
{
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();
}
}
}
}
else
{
foreach (Artikel artikel in artikelkurzliste)
{
// Fortschrittswert an die ProgressBar melden
progress.Report(++i);
Artikel art = Artikel.GetArtikel(artikel.Nummer);
if (art == null) artikel.Save();
else
{
art.Bezeichnung = artikel.Bezeichnung;
art.Short = artikel.Short;
switch (artikel.Nummer)
{
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"))
{
string extra;
int index = art.Bezeichnung.IndexOf(" ") + 1;
int length = art.Bezeichnung.IndexOf(" ", index + 1) - index;
art.Short = art.Short + "PB";
if (index > 0 & length > 0)
{
extra = art.Bezeichnung.Substring(index, length);
art.Short += " " + extra;
}
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"))
{
string extra;
int index = art.Bezeichnung.IndexOf(" ") + 1;
int length = art.Bezeichnung.IndexOf(" ", index + 1) - index;
art.Short = art.Short + "DB";
if (index > 0 & length > 0)
{
extra = art.Bezeichnung.Substring(index, length);
art.Short += " " + extra;
}
}
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";
art.Save();
}
}
}
}
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;
switch (rB.Tag)
{
case AuftragStatus.Abgeholt:
break;
case AuftragStatus.Aufgelegt:
break;
case AuftragStatus.Gewaschen:
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 async void GetExpeditList(int? status)
{
this.objectListViewAuftrag.SuspendLayout();
this.objectListViewAuftrag.BeginUpdate();
List<Auftrag> alist = new List<Auftrag>();
var conn = new NpgsqlConnection(ConfigurationManager.AppSettings["ConnectionString"]); // Pro Task!
try
{
await conn.OpenAsync();
alist = await Auftrag.GetStatusListAsync(status, conn);
}
finally
{
if (conn.State == ConnectionState.Open)
conn.Close();
conn.Dispose();
}
if (alist.Count == 0) meldung.KeineAufträge();
else Load_OLV(alist); // Load_ListView(alist);
this.objectListViewAuftrag.EndUpdate();
this.objectListViewAuftrag.ResumeLayout();
}
/// <summary>
/// AUFTRAGSVERWALTUNG FUNKTIONEN
/// ObjectListView für Auftragsverwaltung laden.
/// </summary>
/// <param name="alist"></param>
private void Load_OLV(List<Auftrag> alist)
{
// Cursor auf Warte-Status setzen, um Benutzerfeedback zu geben
this.Cursor = Cursors.WaitCursor;
// Spalten erstellen nach Typ Auftrag.
Generator.GenerateColumns(this.objectListViewAuftrag, typeof(Auftrag), true);
// ========== CHECKBOX COLUMNS FÜR ABTEILUNGEN ===========
// Spalten-Setup
var colFrottee = new OLVColumn("Frottee", "Frottee");
colFrottee.Text = "FR";
colFrottee.DisplayIndex = 6;
colFrottee.TextAlign = HorizontalAlignment.Center;
colFrottee.CheckBoxes = false;
colFrottee.TriStateCheckBoxes = false;
colFrottee.Width = 50;
colFrottee.AspectGetter = row => {
var auftrag = (Auftrag)row;
int abteilungen = (int)auftrag.Abteilungen;
bool begonnen = (abteilungen & (int)AbteilungsStatus.FrotteeBegonnen) != 0;
bool beendet = (abteilungen & (int)AbteilungsStatus.FrotteeBeendet) != 0;
if (beendet) return "✅"; // Status 1 ✓
if (begonnen) return "⭕"; // Status 2 ✓
return "❌"; // Status 0 ✓
};
var colKleinteile = new OLVColumn("Kleinteile", "Kleinteile");
colKleinteile.Text = "KT";
colKleinteile.DisplayIndex = 7;
colKleinteile.TextAlign = HorizontalAlignment.Center;
colKleinteile.CheckBoxes = false;
colKleinteile.TriStateCheckBoxes = false;
colKleinteile.Width = 50;
colKleinteile.AspectGetter = row => {
var auftrag = (Auftrag)row;
int abteilungen = (int)auftrag.Abteilungen;
bool begonnen = (abteilungen & (int)AbteilungsStatus.KleinteileBegonnen) != 0;
bool beendet = (abteilungen & (int)AbteilungsStatus.KleinteileBeendet) != 0;
if (beendet) return "✅"; // Status 1 ✓
if (begonnen) return "⭕"; // Status 2 ✓
return "❌"; // Status 0 ✓
};
var colGrosseTeile = new OLVColumn("Großteile", "Großteile");
colGrosseTeile.Text = "GT";
colGrosseTeile.DisplayIndex = 8;
colGrosseTeile.TextAlign = HorizontalAlignment.Center;
colGrosseTeile.CheckBoxes = false;
colGrosseTeile.TriStateCheckBoxes = false;
colGrosseTeile.Width = 50;
colGrosseTeile.AspectGetter = row => {
var auftrag = (Auftrag)row;
int abteilungen = (int)auftrag.Abteilungen;
bool begonnen = (abteilungen & (int)AbteilungsStatus.GrossteileBegonnen) != 0;
bool beendet = (abteilungen & (int)AbteilungsStatus.GrossteileBeendet) != 0;
if (beendet) return "✅"; // Status 1 ✓
if (begonnen) return "⭕"; // Status 2 ✓
return "❌"; // Status 0 ✓
};
this.objectListViewAuftrag.AllColumns.Add(colFrottee);
this.objectListViewAuftrag.AllColumns.Add(colKleinteile);
this.objectListViewAuftrag.AllColumns.Add(colGrosseTeile);
foreach (OLVColumn col in this.objectListViewAuftrag.AllColumns)
{
switch (col.Text)
{
case "Abschließen": // Abschließen Spalte als Button-Spalte konfigurieren
OLVColumn fertigColumn = col;
fertigColumn.DisplayIndex = 11;
fertigColumn.IsButton = true; // Als Button rendern
fertigColumn.ButtonSizing = OLVColumn.ButtonSizingMode.CellBounds; // Button füllt gesamte Zelle
fertigColumn.HeaderImageKey = "abschließen";
fertigColumn.ShowTextInHeader = false;
fertigColumn.MinimumWidth = fertigColumn.MaximumWidth = 80;
break;
case "Etikett": // Etikett Spalte als Button-Spalte konfigurieren
OLVColumn etikettColumn = col;
etikettColumn.DisplayIndex = 10;
etikettColumn.IsButton = true; // Als Button rendern
etikettColumn.ButtonSizing = OLVColumn.ButtonSizingMode.CellBounds; // Button füllt gesamte Zelle
etikettColumn.HeaderImageKey = "print";
etikettColumn.ShowTextInHeader = false;
etikettColumn.MinimumWidth = etikettColumn.MaximumWidth = 80;
break;
case "Aufgabe": // Aufgabe Spalte als Icon-Spalte: zeigt Icon wenn AufgabeID vorhanden
OLVColumn iconColumn = col;
iconColumn.DisplayIndex = 9;
iconColumn.ImageGetter = rowObject =>
{
var auftrag = rowObject as Auftrag;
if (auftrag.AufgabeID == null) return null; // null = kein Icon anzeigen
else return 0; // Index 0 aus SmallImageList
};
break;
case "Kunde": // Kunde Spalte als Icon-Spalte: zeigt Icon und Kundename wenn Anmerkung vorhanden
OLVColumn iColumn = col;
iColumn.DisplayIndex = 0;
iColumn.ImageGetter = rowObject =>
{
var _auftrag = rowObject as Auftrag;
if (string.IsNullOrWhiteSpace(Kunde.GetKunde(null, _auftrag.KundeID, null).Anmerkung)) return null; // null = kein Icon anzeigen
else return 1; // Index 0 aus SmallImageList
};
break;
case "Liefertag": // Liefertag Spalte Zeigt Liefertag als String an.
OLVColumn dateColumn = col;
dateColumn.DisplayIndex = 1;
dateColumn.AspectToStringFormat = "{0:ddd dd.MM.}";
// DateTime-Filter für Spalte 2
dateColumn.ClusteringStrategy = new DateTimeClusteringStrategy(DateTimePortion.Day, "ddd dd.MM."); // DateTimeClustering damit Datum gefiltert werden kann
this.objectListViewAuftrag.SecondarySortColumn = dateColumn; // Primary Sortiert nach Spalte 5 (Status) Secundary Sortiert nach Spalte 2 (Liefertag)
break;
case "Status": // Spalte 5 als primäre Sortier-Spalte festlegen (nach Datenbindung!)
OLVColumn sortcolumn = col;
sortcolumn.DisplayIndex = 4;
this.objectListViewAuftrag.PrimarySortColumn = sortcolumn; // Primary Sortiert nach Spalte 5 (Status) Secundary Sortiert nach Spalte 2 (Liefertag)
break;
case "Auswählen":
col.IsVisible = false;
break;
case "Erstellt":
col.IsVisible = false;
break;
case "Gedruckt":
col.IsVisible = false;
break;
case "Erledigt":
col.IsVisible = false;
break;
case "schmutzig":
col.HeaderImageKey = "dirt";
col.ShowTextInHeader = false;
col.MinimumWidth = col.MaximumWidth = 80;
col.DisplayIndex = 2;
break;
case "sauber":
col.HeaderImageKey = "clean";
col.ShowTextInHeader = false;
col.MinimumWidth = col.MaximumWidth = 80;
col.DisplayIndex = 3;
break;
default:
break;
}
}
// ========== IMAGE-LIST ZUWEISEN ==========
// SmallImageList für Icons in Detail-View (16x16 Pixel standard)
Program.imagelist.ImageSize = new Size(24, 24);
this.objectListViewAuftrag.SmallImageList = Program.imagelist; // Voraussetzung: imagelist mit Icon Index 0 gefüllt
// ========== TOOLTIP FÜR ICON-SPALTEN ==========
// Automatischer Cell-Tooltip bei Mouse-Hover über Spalte 10 und 1
this.objectListViewAuftrag.CellToolTipShowing += (s, e) =>
{
// Nur für Icon-Spalte (Index 10) und gültiges Model
if (e.Column.Text == "Aufgabe" && e.Model is Auftrag auftrag)
{
// Lade Bezeichnung der Aufgabe als Tooltip-Text
e.Text = Aufgabe.GetAufgabe(null, auftrag.AufgabeID).Bezeichnung;
}
// Nur für Icon-Spalte (Index 1) und gültiges Model
if (e.Column.Text == "Kunde" && e.Model is Auftrag _auftrag)
{
if (!string.IsNullOrWhiteSpace(Kunde.GetKunde(null, _auftrag.KundeID, null).Anmerkung))
{
// Lade Anmerkung als Tooltip-Text
e.Text = Kunde.GetKunde(null, _auftrag.KundeID, null).Anmerkung;
}
}
//TODO: Alle Icons in einer Spalte anzeigen? I für Anmerkung und ! für Aufgabe??
if (e.Column.Text == "Fahrer" && e.Model is Auftrag auftrag1)
{
e.Text = auftrag1.ZusatzInfo;
}
};
// ========== DATEN LADEN ==========
// WICHTIG: SetObjects NACH Column-Konfiguration aufrufen!
this.objectListViewAuftrag.SetObjects(alist);
this.objectListViewAuftrag.RebuildColumns();
if (_settings.OLV_State != null) this.objectListViewAuftrag.RestoreState(_settings.OLV_State);
this.objectListViewAuftrag = Funktionen.Columns_Resize(null, this.objectListViewAuftrag).olv;
// Cursor auf Default-Status setzen, um Benutzerfeedback zu geben
this.Cursor = Cursors.Default;
}
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 abgeschlossen:", "Container abgeholt:", "Kunden gewaschen:", "Kunden abgeschlossen:", "Kunden abgeholt:" };
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.Gewaschen) 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.Abgeholt) j += a.ContainerClean;
lbl.Text = j.ToString();
break;
case var s when s.Contains($"4"):
foreach (Auftrag a in auftraglist) if (a.Status == AuftragStatus.Gewaschen) 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.Abgeholt) j++;
lbl.Text = j.ToString();
break;
default:
break;
}
}
}
}
}
//this.groupBoxStatistik.Width = this.tableLayoutPanelStatistik.Right;
}
private void GetContainerProTag()
{
for (int i = 0; i < this.tLPContAnz.ColumnCount; i++)
{
if (i == 0)
{
int row = 1;
foreach (var key in auftragliste.Keys.OrderBy(k => k))
{
Control ctr = this.tLPContAnz.GetControlFromPosition(i, row);
ctr.Text = Funktionen.GetWochentagDeutsch(key.DayOfWeek);
ctr.Text += " (" + key.ToShortDateString() + "):"; // "13.02.2026"
row++;
}
Control control = this.tLPContAnz.GetControlFromPosition(i, row - 1);
control.Text = "Rest";
}
if (i == 1)
{
int row = 1;
int cont = 0;
int gescont = 0;
foreach (List<Auftrag> liste in auftragliste.Values)
{
foreach (Auftrag a in liste)
{
cont += a.Container;
}
Control ctr = this.tLPContAnz.GetControlFromPosition(i, row);
ctr.Text = cont.ToString();
gescont += cont;
row++;
cont = 0;
}
Control control = this.tLPContAnz.GetControlFromPosition(1, 6);
control.Text = gescont.ToString();
}
if (i == 2 || i == 3)
{
double geszeit = 0;
for (int j = 1; j < this.tLPContAnz.RowCount; j++)
{
Control ctr = this.tLPContAnz.GetControlFromPosition(1, j);
if (double.TryParse(ctr.Text, out double cont)) cont = (cont * 2.7 * 3.5) / 60 / (i-1);
Control control = this.tLPContAnz.GetControlFromPosition(i, j);
control.Text = cont.ToString("F1") + " h";
if (j < 6) geszeit += cont;
}
Control _ctr = this.tLPContAnz.GetControlFromPosition(i, 6);
_ctr.Text = geszeit.ToString("F1") + " h";
}
}
}
private void GetSaison()
{
var listenQuelle = Saison.LadeSaisons(); // Liste<Saison>
comboBoxSaison.DataSource = listenQuelle;
comboBoxSaison.DisplayMember = nameof(Saison.Bezeichnung);
comboBoxSaison.ValueMember = nameof(Saison.SaisonId);
// aktiven Eintrag suchen (falls genau einer aktiv ist)
var aktiveSaison = listenQuelle
.FirstOrDefault(s => s.Aktiv); // LINQ FirstOrDefault [web:13][web:16][web:19]
if (aktiveSaison != null)
{
comboBoxSaison.SelectedValue = aktiveSaison.SaisonId; // per ValueMember setzen [web:11][web:20]
}
}
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)
{
if (ctr.GetType() == typeof(ComboBox) || ctr.GetType() == typeof(DateTimePicker)) return;
ctr.MouseDown += groupBox_MouseDown;
ctr.MouseMove += groupBox_MouseMove;
ctr.MouseUp += groupBox_MouseUp;
}
}
private void groupBox_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
draggedBox = FindParentGroupBox((Control)sender);
// 1. BILD der GroupBox erstellen
Bitmap dragImage = new Bitmap(draggedBox.Width, draggedBox.Height);
draggedBox.DrawToBitmap(dragImage, draggedBox.ClientRectangle);
// 2. Ghost-Bild setzen + sichtbar machen
ghostImage.Image?.Dispose();
ghostImage.Image = dragImage;
ghostImage.Size = draggedBox.Size;
ghostImage.Visible = true;
ghostImage.BringToFront();
dragOffset = e.Location;
isDragging = true;
panelMain.SuspendLayout();
// 2. Original unsichtbar machen
draggedBox.Visible = false;
}
}
private void groupBox_MouseMove(object sender, MouseEventArgs e)
{
if (isButtonDragging) return;
if (isDragging)
{
Point mousePos = panelMain.PointToClient(MousePosition);
Point newPos = new Point(mousePos.X - dragOffset.X, mousePos.Y - dragOffset.Y);
// Grenzen
newPos.X = Math.Max(0, Math.Min(panelMain.Width - draggedBox.Width, newPos.X));
newPos.Y = Math.Max(0, Math.Min(panelMain.Height - draggedBox.Height, newPos.Y));
// 1. Ghost folgt Maus
ghostImage.Location = newPos;
// 2. Original folgt (unsichtbar)
draggedBox.Location = newPos;
}
}
private void groupBox_GiveFeedback(object sender, GiveFeedbackEventArgs e)
{
if (draggedBox != null)
{
// Screenshot erstellen
Bitmap bmp = new Bitmap(draggedBox.Width, draggedBox.Height);
draggedBox.DrawToBitmap(bmp, draggedBox.ClientRectangle);
// Ghost 50% transparent machen
float[][] matrix = {
new float[] {1, 0, 0, 0, 0},
new float[] {0, 1, 0, 0, 0},
new float[] {0, 0, 1, 0, 0},
new float[] {0, 0, 0, 0.5f, 0},
new float[] {0, 0, 0, 0, 1}
};
using (ImageAttributes attr = new ImageAttributes())
{
attr.SetColorMatrix(new ColorMatrix(matrix));
// Graphics.FromImage für DragImage rendern (komplex)
}
}
}
private void groupBox_MouseUp(object sender, MouseEventArgs e)
{
if (isDragging)
{
isDragging = false;
ghostImage.Visible = false;
draggedBox.Visible = true;// Ghost weg
panelMain.ResumeLayout();
}
}
private void RegisterDragEvents(Control parent)
{
parent.MouseDown += Child_MouseDown;
// 1. Parent selbst behandeln (GroupBox)
if (parent is GroupBox gb)
{
gb.MouseDown += groupBox_MouseDown;
gb.MouseMove += groupBox_MouseMove;
gb.MouseUp += groupBox_MouseUp;
}
// 2. ALLE Children (rekursiv) - auch Child of Child!
foreach (Control child in parent.Controls)
{
// JEDES Control bekommt Child-Handler
child.MouseDown += Child_MouseDown;
child.MouseMove += Child_MouseMove;
child.MouseUp += Child_MouseUp;
// Rekursion für NESTED Children
RegisterDragEvents(child);
}
}
private void Child_MouseDown(object sender, MouseEventArgs e)
{
// Koordinaten an Parent weiterleiten
Control child = (Control)sender;
if (child is Button buttonBase)
{
//buttonBase.PerformClick(); // Löst Childs Click-Event aus
return;
}
GroupBox parentGb = FindParentGroupBox(child);
if (parentGb != null)
{
Point parentPos = child.PointToClient(child.PointToScreen(e.Location));
MouseEventArgs parentEvent = new MouseEventArgs(e.Button, e.Clicks,
parentPos.X, parentPos.Y, e.Delta);
groupBox_MouseDown(parentGb, parentEvent);
}
}
private void Child_MouseMove(object sender, MouseEventArgs e)
{
GroupBox gb = FindParentGroupBox((Control)sender);
if (gb != null && isDragging && draggedBox == gb)
{
groupBox_MouseMove(gb, e);
}
}
private void Child_MouseUp(object sender, MouseEventArgs e)
{
GroupBox gb = FindParentGroupBox((Control)sender);
if (gb != null && isDragging && draggedBox == gb)
{
groupBox_MouseUp(gb, e); // ← Dragging beenden!
}
}
private GroupBox FindParentGroupBox(Control control)
{
while (control != null)
{
if (control is GroupBox) return (GroupBox)control;
control = control.Parent;
}
return null;
}
/// <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
{
_settings.LocationButtonNeueAufgabe = this.buttonNeueAufgabe.Location;
_settings.LocationButtonNeueInventur = this.buttonNeueInventur.Location;
_settings.LocationButtonNeuerAuftrag = this.buttonNeuerAuftrag.Location;
_settings.LocationButtonNeuerStand = this.buttonNeuerStand.Location;
_settings.LocationButtonNeuerUser = this.buttonNeuerUser.Location;
_settings.LocationGroupBoxContainer = this.groupBoxContAnz.Location;
_settings.LocationGroupBoxSaison = this.groupBoxSaison.Location;
_settings.LocationGroupBoxStatistik = this.groupBoxStatistik.Location;
_settings.OLV_State = this.objectListViewAuftrag.SaveState();
_settings.Save();
}
catch (Exception ex)
{
MessageBox.Show("Fehler beim Speichern" + ex.Message);
}
}
private void FormMain_ResizeBegin(object sender, EventArgs e)
{
_handlingResize = true;
this.Size = _fixedSize;
_handlingResize = false;
}
private void FormMain_Resize(object sender, EventArgs e)
{
if (_handlingResize) return;
if(this.Size != _fixedSize)
{
_handlingResize = true;
this.Size = _fixedSize;
_handlingResize = false;
}
}
private void tSBTourenplanung_Click(object sender, EventArgs e)
{
this.Cursor = Cursors.WaitCursor;
FormTourenplanung tourenplanung = new FormTourenplanung(this.benutzer);
tourenplanung.ShowDialog();
this.Cursor = Cursors.Default;
}
private void comboBoxSaison_SelectedIndexChanged(object sender, EventArgs e)
{
if (formloading) { return; }
if (meldung.GetFrage(this, "Bist du dir sicher, dass du die Aktive Saison ändern möchtest?", false) == DialogResult.No)
{
formloading = true;
try
{
foreach (Saison saison in comboBoxSaison.Items)
{
if (saison.Aktiv)
{
comboBoxSaison.SelectedItem = saison; // Event wird aktuell unterdrückt
break;
}
}
}
finally
{
formloading = false;
}
return;
}
foreach (Saison saison in comboBoxSaison.Items)
{
if (saison == comboBoxSaison.SelectedItem) saison.Aktiv = true;
else saison.Aktiv = false;
saison.Save();
}
}
private void buttonTestChart_Click(object sender, EventArgs e)
{
FehlmengeChart chart = new FehlmengeChart();
chart.Show();
}
private void buttonTourenliste_Click(object sender, EventArgs e)
{
Benutzer fahrer = new Benutzer();
if (this.benutzer.Rolle == BenutzerRolle.Fahrer) fahrer = this.benutzer;
else
{
List<Benutzer> fahrerliste = Benutzer.GetFahrerList();
FormBenutzerVW benutzerVW = new FormBenutzerVW(fahrerliste);
if (benutzerVW.ShowDialog() == DialogResult.OK)
{
fahrer = benutzerVW.user;
}
}
if (fahrer != null)
{
List<Auftrag> auftragliste = Auftrag.GetTourenListe(fahrer);
if(auftragliste.Count > 0) Funktionen.TourenListe_Drucken(auftragliste, fahrer, this, this.benutzer);
}
}
private void panelMain_Resize(object sender, EventArgs e)
{
panelMain.Invalidate();
}
private void FormMain_Shown(object sender, EventArgs e)
{
if (Program.Artikelliste_Importiert | Program.Kundenliste_Importiert | Program.Software_Updated)
{
string[] updates = new string[3];
updates[0] = Program.Artikelliste_Importiert ? "Artikelliste: ✅" : "Artikelliste: ❌";
updates[1] = Program.Kundenliste_Importiert ? "Kundenliste: ✅" : "Kundenliste: ❌";
updates[2] = Program.Software_Updated ? "Software: ✅" : "Sofware: ❌";
MessageBox.Show($"Folgende Updates wurden heute durchgeführt:\n\n{updates[0]}\n{updates[1]}\n{updates[2]}", "UPDATES DURCHGEFÜHRT", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
}
//CHANGES: Fahrer können abgeholte Aufträge erstellen und ausgelieferte Aufträge markieren.
//CHANGES: Saisonauswahl DropDown eingefügt. Wenn Zwischensaison gewählt wir Warnung wegen falschen Liefertagen gezeigt. Sonst wird Saisonrhythmus als Liefertag beachtet.
//CHANGES: Artikelliste und Kundenliste werden automatisch importiert wenn vorhanden.
//CHANGES: Datum von letztem Import verfügbar.
//TODO: Dateinamen aus Tikos anschauen. Eventuell Datum von letztem Import über Dateiname wählen?
//TODO: JSON nach angemeldeten Fahrer durchsuchen und Kundenliste des aktuellen Wochentag anzeigen.
//TODO: Auftrag Schnellerfassung erstellen. Kundenliste aus JSON in OLV einfügen wenn schmutzig > 0 dann Auftrag erstellen. Spalten: "Kunde, schmutzig, liefertag, zustellfahrer" evnetuell in AuftragVW?