diff --git a/AA-Forms/FormAuftragDetail.cs b/AA-Forms/FormAuftragDetail.cs index 85e1de5..e325f2a 100644 --- a/AA-Forms/FormAuftragDetail.cs +++ b/AA-Forms/FormAuftragDetail.cs @@ -19,7 +19,7 @@ namespace Deckungsbeitrag public Auftrag auftrag; public Benutzer benutzer; public List artikelList; - public Fehlermeldungen meldung = new Fehlermeldungen(); + public Meldungen meldung = new Meldungen(); //WENN AUFTRAG SPEICHERN private bool _tosave = false; diff --git a/AA-Forms/FormAusschlager.cs b/AA-Forms/FormAusschlager.cs index c836b35..5123c61 100644 --- a/AA-Forms/FormAusschlager.cs +++ b/AA-Forms/FormAusschlager.cs @@ -19,7 +19,7 @@ namespace Deckungsbeitrag { public partial class FormAusschlager : Form { - private Fehlermeldungen meldung = new Fehlermeldungen(); + private Meldungen meldung = new Meldungen(); private Auftrag auftrag; private WSFach fach; public Maschine maschine; diff --git a/AA-Forms/FormBenutzerVW.cs b/AA-Forms/FormBenutzerVW.cs index f3f26f5..a1efd5c 100644 --- a/AA-Forms/FormBenutzerVW.cs +++ b/AA-Forms/FormBenutzerVW.cs @@ -16,7 +16,7 @@ namespace Deckungsbeitrag { public partial class FormBenutzerVW : Form { - public Fehlermeldungen meldung = new Fehlermeldungen(); + public Meldungen meldung = new Meldungen(); public Benutzer user; public FormBenutzerVW() diff --git a/AA-Forms/FormExpedit.Designer.cs b/AA-Forms/FormExpedit.Designer.cs index 97319f4..119eb50 100644 --- a/AA-Forms/FormExpedit.Designer.cs +++ b/AA-Forms/FormExpedit.Designer.cs @@ -648,6 +648,7 @@ // // objectListViewAuftrag // + this.objectListViewAuftrag.AlternateRowBackColor = System.Drawing.Color.LightSteelBlue; this.objectListViewAuftrag.CellEditUseWholeCell = false; this.objectListViewAuftrag.Cursor = System.Windows.Forms.Cursors.Default; this.objectListViewAuftrag.Dock = System.Windows.Forms.DockStyle.Fill; @@ -658,11 +659,13 @@ this.objectListViewAuftrag.Name = "objectListViewAuftrag"; this.objectListViewAuftrag.Size = new System.Drawing.Size(1147, 669); this.objectListViewAuftrag.TabIndex = 1; + this.objectListViewAuftrag.UseAlternatingBackColors = true; this.objectListViewAuftrag.UseCompatibleStateImageBehavior = false; this.objectListViewAuftrag.UseHotControls = false; this.objectListViewAuftrag.View = System.Windows.Forms.View.Details; this.objectListViewAuftrag.ButtonClick += new System.EventHandler(this.objectListViewAuftrag_ButtonClick); this.objectListViewAuftrag.CellClick += new System.EventHandler(this.objectListViewAuftrag_CellClick); + this.objectListViewAuftrag.CellRightClick += new System.EventHandler(this.objectListViewAuftrag_CellRightClick); // // tabControlAuftragList // diff --git a/AA-Forms/FormExpedit.cs b/AA-Forms/FormExpedit.cs index 889031e..588a525 100644 --- a/AA-Forms/FormExpedit.cs +++ b/AA-Forms/FormExpedit.cs @@ -13,7 +13,7 @@ namespace Deckungsbeitrag public partial class FormExpedit : Form { private ToolTip cellTooltip = new ToolTip(); - public Fehlermeldungen fehlermeldung = new Fehlermeldungen(); + public Meldungen fehlermeldung = new Meldungen(); public Image etikett = null; public Auftrag auftrag; public Auftrag NeuerAuftrag; //NEU FÜR UPDATE @@ -23,7 +23,7 @@ namespace Deckungsbeitrag DateTime? letzterLiefertag = null; bool nocont = false; bool nocontclicked = false; - Fehlermeldungen meldung = new Fehlermeldungen(); + Meldungen meldung = new Meldungen(); public List artikelListe; public List auftraglist; public List sonderlist; @@ -343,25 +343,26 @@ namespace Deckungsbeitrag /// private void buttonDrucken_Click(object sender, EventArgs e) { - //AUFTRAG UPDATE - this.auftrag.ContainerClean = int.Parse(this.textBoxCont.Text); - letzterLiefertag = this.auftrag.Liefertag = this.dTPLiefertag.Value; - - //ETIKETT DRUCKEN - DialogResult result = Funktionen.Etikett_Drucken(auftrag, nocont); - if(result == DialogResult.OK) + if (this.textBoxCont.Text != "0") { - this.auftrag.Gedruckt = this.auftrag.Erstellt = DateTime.Now; - this.auftrag.GedrucktVon = this.auftrag.ErstelltVon = (int)this.benutzer.BenutzerID; - this.auftrag.Status = AuftragStatus.Vorbereitet; - this.auftrag.Save(); - this.auftrag = null; - FormExpedit_Load(this, e); - this.dGArtikel.DataSource = null; - this.dGArtikel.Rows.Clear(); - } + //AUFTRAG UPDATE + this.auftrag.ContainerClean = int.Parse(this.textBoxCont.Text); + letzterLiefertag = this.auftrag.Liefertag = this.dTPLiefertag.Value; - //AUFTRAG SPEICHERN + //ETIKETT DRUCKEN + DialogResult result = Funktionen.Etikett_Drucken(auftrag, nocont); + if (result == DialogResult.OK) + { + this.auftrag.Gedruckt = this.auftrag.Erstellt = DateTime.Now; + this.auftrag.GedrucktVon = this.auftrag.ErstelltVon = (int)this.benutzer.BenutzerID; + this.auftrag.Status = AuftragStatus.Vorbereitet; + this.auftrag.Save(); + this.auftrag = null; + FormExpedit_Load(this, e); + this.dGArtikel.DataSource = null; + this.dGArtikel.Rows.Clear(); + } + } } private void buttonNeuerAuftrag_Click(object sender, EventArgs e) { @@ -412,6 +413,28 @@ namespace Deckungsbeitrag olv.Focus(); } + private void objectListViewAuftrag_CellRightClick(object sender, CellRightClickEventArgs e) + { + ObjectListView olv = (ObjectListView)sender; + + if (e.Column.Text == "Abschließen") + { + if(e.Model != null) + { + if(meldung.AuftragVorbereitetOhneEtikettDruck() == DialogResult.Yes) + { + Auftrag _auftrag = (Auftrag)e.Model; + _auftrag.Status = AuftragStatus.Vorbereitet; + _auftrag.Save(); + olv.RefreshObject(e); + GetLists(); + if (olv.Name.Contains("Sonder")) OLV_Load(olv, this.sonderlist); + else OLV_Load(olv, this.auftraglist); + } + } + } + } + private void objectListViewAuftrag_ButtonClick(object sender, CellClickEventArgs e) { Cursor.Current = Cursors.WaitCursor; @@ -534,98 +557,98 @@ namespace Deckungsbeitrag Cursor.Current = Cursors.Default; } -private void OLV_Load(ObjectListView olv, List auftraglist) -{ - // Cursor auf Warte-Status setzen, um Benutzerfeedback zu geben - Cursor.Current = Cursors.WaitCursor; - - // Layout- und Update-Änderungen pausieren, um Flackern zu verhindern - olv.SuspendLayout(); // Stoppt Layout-Berechnungen (Anchor/Dock) - olv.BeginUpdate(); // Stoppt Datenaktualisierungen/Redraws - - // Automatisch alle Properties von Auftrag als Spalten generieren - Generator.GenerateColumns(olv, typeof(Auftrag), true); - - // ========== SPALTE 11: BUTTON-KOLUMNE ========== - // Spalte 11 (Index 11) als Button-Spalte konfigurieren - OLVColumn buttonColumn = (OLVColumn)olv.Columns[11]; - buttonColumn.IsButton = true; // Als Button rendern - buttonColumn.ButtonSizing = OLVColumn.ButtonSizingMode.CellBounds; // Button füllt gesamte Zelle - - // ========== IMAGE-LIST ZUWEISEN ========== - // SmallImageList für Icons in Detail-View (16x16 Pixel standard) - olv.SmallImageList = imagelist; // Voraussetzung: imagelist mit Icon Index 0 gefüllt - - // ========== SPALTE 10: ICON-KOLUMNE ========== - // Spalte 10 als Icon-Spalte: zeigt Icon wenn AufgabeID vorhanden - OLVColumn iconColumn = (OLVColumn)olv.Columns[10]; - iconColumn.ImageGetter = rowObject => + private void OLV_Load(ObjectListView olv, List auftraglist) { - var auftrag = rowObject as Auftrag; - if (auftrag.AufgabeID == null) return null; // null = kein Icon anzeigen - else return 0; // Index 0 aus SmallImageList - }; - - // ========== TOOLTIP FÜR ICON-SPALTE ========== - // Automatischer Cell-Tooltip bei Mouse-Hover über Spalte 10 - olv.CellToolTipShowing += (s, e) => - { - // Nur für Icon-Spalte (Index 10) und gültiges Model - if (e.ColumnIndex == 10 && e.Model is Auftrag auftrag) - { - // Lade Bezeichnung der Aufgabe als Tooltip-Text - e.Text = Aufgabe.GetAufgabe(null, auftrag.AufgabeID).Bezeichnung; - } - }; - - // ========== DATEN LADEN ========== - // WICHTIG: SetObjects NACH Column-Konfiguration aufrufen! - olv.SetObjects(auftraglist); // Bindet die Auftragsliste an die View - - // ========== SORTIERUNG ========== - // Spalte 5 als primäre Sortier-Spalte festlegen (nach Datenbindung!) - OLVColumn sortcolumn = (OLVColumn)olv.Columns[5]; - olv.Sort(sortcolumn); // Sortiert aufsteigend nach Spalte 5 - - // ========== CHECKBOX-FUNKTIONALITÄT ========== - // Aktiviert Checkboxen basierend auf "IsChecked" Property des Auftrag-Modells - olv.CheckedAspectName = "IsChecked"; - - // ========== SPALTEN ANPASSEN ========== - Funktionen.Columns_Resize(olv); // Externe Funktion für responsive Spaltenbreiten - - // Unsichtbare Spalten (Width = 0 = versteckt) - olv.Columns[0].Width = 0; // Spalte 0 verstecken - olv.Columns[7].Width = 0; // Spalte 7 verstecken - olv.Columns[8].Width = 0; // Spalte 8 verstecken - olv.Columns[9].Width = 0; // Spalte 9 verstecken - - // ========== STATISTIKEN (nur bei Auftrags-OLV) ========== - if (olv.Name.Contains("Auftrag")) - { - // Anzahl sichtbarer Aufträge anzeigen - this.labelauftragtag.Text = olv.Items.Count.ToString(); + // Cursor auf Warte-Status setzen, um Benutzerfeedback zu geben + Cursor.Current = Cursors.WaitCursor; - // ContainerClean-Summe für heute berechnen - int summe = 0; - foreach (var obj in olv.Objects) // Durch alle Modelle iterieren - { - Auftrag auf = (Auftrag)obj; - // Nur Aufträge von heute zählen - if (auf.Erstellt.Value.Date == DateTime.Now.Date) - summe += auf.ContainerClean; - } - this.labelcontainertag.Text = summe.ToString(); - } - - // ========== AUFRÄUMEN & AKTIVIEREN ========== - olv.EndUpdate(); // Update-Pause beenden, Daten neu zeichnen - olv.ResumeLayout(); // Layout-Pause beenden, Positionen neu berechnen - olv.Focus(); // OLV fokussieren (Tastaturbedienung aktivieren) + // Layout- und Update-Änderungen pausieren, um Flackern zu verhindern + olv.SuspendLayout(); // Stoppt Layout-Berechnungen (Anchor/Dock) + olv.BeginUpdate(); // Stoppt Datenaktualisierungen/Redraws - // Cursor zurücksetzen - Cursor.Current = Cursors.Default; -} + // Automatisch alle Properties von Auftrag als Spalten generieren + Generator.GenerateColumns(olv, typeof(Auftrag), true); + + // ========== SPALTE 11: BUTTON-KOLUMNE ========== + // Spalte 11 (Index 11) als Button-Spalte konfigurieren + OLVColumn buttonColumn = (OLVColumn)olv.Columns[11]; + buttonColumn.IsButton = true; // Als Button rendern + buttonColumn.ButtonSizing = OLVColumn.ButtonSizingMode.CellBounds; // Button füllt gesamte Zelle + + // ========== IMAGE-LIST ZUWEISEN ========== + // SmallImageList für Icons in Detail-View (16x16 Pixel standard) + olv.SmallImageList = imagelist; // Voraussetzung: imagelist mit Icon Index 0 gefüllt + + // ========== SPALTE 10: ICON-KOLUMNE ========== + // Spalte 10 als Icon-Spalte: zeigt Icon wenn AufgabeID vorhanden + OLVColumn iconColumn = (OLVColumn)olv.Columns[10]; + 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 + }; + + // ========== TOOLTIP FÜR ICON-SPALTE ========== + // Automatischer Cell-Tooltip bei Mouse-Hover über Spalte 10 + olv.CellToolTipShowing += (s, e) => + { + // Nur für Icon-Spalte (Index 10) und gültiges Model + if (e.ColumnIndex == 10 && e.Model is Auftrag auftrag) + { + // Lade Bezeichnung der Aufgabe als Tooltip-Text + e.Text = Aufgabe.GetAufgabe(null, auftrag.AufgabeID).Bezeichnung; + } + }; + + // ========== DATEN LADEN ========== + // WICHTIG: SetObjects NACH Column-Konfiguration aufrufen! + olv.SetObjects(auftraglist); // Bindet die Auftragsliste an die View + + // ========== SORTIERUNG ========== + // Spalte 5 als primäre Sortier-Spalte festlegen (nach Datenbindung!) + OLVColumn sortcolumn = (OLVColumn)olv.Columns[5]; + olv.Sort(sortcolumn); // Sortiert aufsteigend nach Spalte 5 + + // ========== CHECKBOX-FUNKTIONALITÄT ========== + // Aktiviert Checkboxen basierend auf "IsChecked" Property des Auftrag-Modells + olv.CheckedAspectName = "IsChecked"; + + // ========== SPALTEN ANPASSEN ========== + Funktionen.Columns_Resize(olv); // Externe Funktion für responsive Spaltenbreiten + + // Unsichtbare Spalten (Width = 0 = versteckt) + olv.Columns[0].Width = 0; // Spalte 0 verstecken + olv.Columns[7].Width = 0; // Spalte 7 verstecken + olv.Columns[8].Width = 0; // Spalte 8 verstecken + olv.Columns[9].Width = 0; // Spalte 9 verstecken + + // ========== STATISTIKEN (nur bei Auftrags-OLV) ========== + if (olv.Name.Contains("Auftrag")) + { + // Anzahl sichtbarer Aufträge anzeigen + this.labelauftragtag.Text = olv.Items.Count.ToString(); + + // ContainerClean-Summe für heute berechnen + int summe = 0; + foreach (var obj in olv.Objects) // Durch alle Modelle iterieren + { + Auftrag auf = (Auftrag)obj; + // Nur Aufträge von heute zählen + if (auf.Erstellt.Value.Date == DateTime.Now.Date) + summe += auf.ContainerClean; + } + this.labelcontainertag.Text = summe.ToString(); + } + + // ========== AUFRÄUMEN & AKTIVIEREN ========== + olv.EndUpdate(); // Update-Pause beenden, Daten neu zeichnen + olv.ResumeLayout(); // Layout-Pause beenden, Positionen neu berechnen + olv.Focus(); // OLV fokussieren (Tastaturbedienung aktivieren) + + // Cursor zurücksetzen + Cursor.Current = Cursors.Default; + } /// /// Liefertag wird ermittelt und in Day of Week umgerechnet. RadioButtons werden Checked oder Unchecked und Click wird registriert. @@ -753,6 +776,5 @@ private void OLV_Load(ObjectListView olv, List auftraglist) einstellung.ShowDialog(); } - } } diff --git a/AA-Forms/FormFachBearbeiten.cs b/AA-Forms/FormFachBearbeiten.cs index 543bc84..94af4b2 100644 --- a/AA-Forms/FormFachBearbeiten.cs +++ b/AA-Forms/FormFachBearbeiten.cs @@ -19,14 +19,14 @@ namespace Deckungsbeitrag public Fach fach = null; Benutzer benutzer; Maschine maschine; - public Fehlermeldungen fm; + public Meldungen fm; private Auftrag auftrag; public FormFachBearbeiten() { InitializeComponent(); formcenter = new Point(this.Width / 2, this.Height / 2); - fm = new Fehlermeldungen(); + fm = new Meldungen(); Load_comboBoxes(); } diff --git a/AA-Forms/FormFehlmengeCount.cs b/AA-Forms/FormFehlmengeCount.cs index e6aad7a..9c1a483 100644 --- a/AA-Forms/FormFehlmengeCount.cs +++ b/AA-Forms/FormFehlmengeCount.cs @@ -20,7 +20,7 @@ namespace Deckungsbeitrag private FilterInfoCollection videoDevices; Kunde kunde; List artikelListe; - Fehlermeldungen meldung = new Fehlermeldungen(); + Meldungen meldung = new Meldungen(); //Benutzer benutzer; string userid; public FormFehlmengeCount() diff --git a/AA-Forms/FormKundeVW.cs b/AA-Forms/FormKundeVW.cs index 1b88e7a..11ce81b 100644 --- a/AA-Forms/FormKundeVW.cs +++ b/AA-Forms/FormKundeVW.cs @@ -31,7 +31,7 @@ namespace Deckungsbeitrag Kunde kunde = null; Bitmap bitmap = null; Image qrcode = null; - Fehlermeldungen meldung = new Fehlermeldungen(); + Meldungen meldung = new Meldungen(); Benutzer benutzer; int beforeedit = 0; int[] saveindex = null; diff --git a/AA-Forms/FormMain.cs b/AA-Forms/FormMain.cs index 9353d19..b268db9 100644 --- a/AA-Forms/FormMain.cs +++ b/AA-Forms/FormMain.cs @@ -21,7 +21,7 @@ namespace Deckungsbeitrag public partial class FormMain : Form { private Benutzer benutzer = null; - Fehlermeldungen meldung = new Fehlermeldungen(); + Meldungen meldung = new Meldungen(); bool open = false; private bool isDragging = false; private Point dragStartPoint; @@ -92,6 +92,8 @@ namespace Deckungsbeitrag } } this.Activate(); + + meldung.GetInfo(this, null, false); } private void Paint_Boarder(Size size, Point location, PaintEventArgs e) diff --git a/AA-Forms/FormNeuerAuftrag.cs b/AA-Forms/FormNeuerAuftrag.cs index 686415f..1386325 100644 --- a/AA-Forms/FormNeuerAuftrag.cs +++ b/AA-Forms/FormNeuerAuftrag.cs @@ -20,7 +20,7 @@ namespace Deckungsbeitrag { public partial class FormNeuerAuftrag : Form { - public Fehlermeldungen meldung = new Fehlermeldungen(); + public Meldungen meldung = new Meldungen(); public Kunde kunde; public Auftrag Auftrag; public Auftrag extraAuftrag; diff --git a/AA-Forms/FormNeuerBenutzer.cs b/AA-Forms/FormNeuerBenutzer.cs index f7476a5..6b5c4bc 100644 --- a/AA-Forms/FormNeuerBenutzer.cs +++ b/AA-Forms/FormNeuerBenutzer.cs @@ -14,7 +14,7 @@ namespace Deckungsbeitrag.AA_Forms { public partial class FormNeuerBenutzer : Form { - private Fehlermeldungen meldung = new Fehlermeldungen(); + private Meldungen meldung = new Meldungen(); bool[] tosave = { false, false, false }; public FormNeuerBenutzer() { diff --git a/AA-Forms/FormWSVerfolgung.cs b/AA-Forms/FormWSVerfolgung.cs index 97b6030..417302d 100644 --- a/AA-Forms/FormWSVerfolgung.cs +++ b/AA-Forms/FormWSVerfolgung.cs @@ -21,7 +21,7 @@ namespace Deckungsbeitrag.AA_Forms private string Userid; private Maschine maschine; private Auftrag auftrag; - private Fehlermeldungen meldung = new Fehlermeldungen(); + private Meldungen meldung = new Meldungen(); private Aufgabe aufgabe; private WSFach fach; private Auftrag extraAuftrag; diff --git a/AA-Klassen/Fehlermeldungen.cs b/AA-Klassen/Meldungen.cs similarity index 74% rename from AA-Klassen/Fehlermeldungen.cs rename to AA-Klassen/Meldungen.cs index 13fcef8..66d7857 100644 --- a/AA-Klassen/Fehlermeldungen.cs +++ b/AA-Klassen/Meldungen.cs @@ -9,10 +9,10 @@ using ZXing; namespace DatenDB { - public class Fehlermeldungen + public class Meldungen { - public Fehlermeldungen() + public Meldungen() { } @@ -286,5 +286,91 @@ namespace DatenDB result = MessageBox.Show(s, caption, buttons, icon); return result; } + + internal DialogResult AuftragVorbereitetOhneEtikettDruck() + { + DialogResult result = DialogResult.Cancel; + + string s = $"Für den Auftrag wurden keine Etiketten gedruckt, ohne Etikettendruck als Vorbereitet markieren?"; + string caption = "ACHTUNG"; + MessageBoxButtons buttons = MessageBoxButtons.YesNo; + MessageBoxIcon icon = MessageBoxIcon.Exclamation; + + result = MessageBox.Show(s, caption, buttons, icon); + return result; + } + + + #region ALLGEMEINE MELDUNGEN RETURN DIALOGRESULT + + /// + /// Allgemeine Info mit Fallbacktext. + /// + /// Position der Info. + /// Infotext. Wenn null dann Fallbacktext + /// Button Cancel anzeigen dann true. + /// DialogResult + internal DialogResult GetInfo(object sender, string s, bool cancel) + { + DialogResult result = DialogResult.Cancel; + MessageBoxIcon icon = MessageBoxIcon.Information; + MessageBoxButtons buttons; + + string caption = "INFO"; + if (cancel) buttons = MessageBoxButtons.OKCancel; + else buttons = MessageBoxButtons.OK; + if (s == null) s = $"Hier sollte eine Info stehen. Frag Kilian welche Info hier ({sender.ToString()}) erscheinen soll."; + + result = MessageBox.Show(s, caption, buttons, icon); + return result; + } + + /// + /// Allgemeine Frage mit Fallbacktext. + /// + /// Positon der Frage + /// Fragentext. Wenn null dann Fallbacktext. + /// Button Cancel anzeigen dann true. + /// DialogResult + internal DialogResult GetFrage(object sender, string s, bool cancel) + { + DialogResult result = DialogResult.Cancel; + MessageBoxIcon icon = MessageBoxIcon.Question; + MessageBoxButtons buttons; + + string caption = "FRAGE"; + if (cancel) buttons = MessageBoxButtons.YesNoCancel; + else buttons = MessageBoxButtons.YesNo; + if (s == null) s = $"Hier sollte eine Frage kommen. Frag Kilian welche Frage er dir hier ({sender.ToString()}) stellen wollte."; + + result = MessageBox.Show(s, caption, buttons, icon); + return result; + } + + /// + /// Allgemeiner Fehler mit Fallbacktext. + /// + /// Position des Fehlers + /// Fehlertext. Wenn null dann Fallbacktext. + /// Button Cancel anzeigen dann true. + /// DialogResult + internal DialogResult GetFehler(object sender, string s, bool cancel) + { + DialogResult result = DialogResult.Cancel; + MessageBoxIcon icon = MessageBoxIcon.Error; + MessageBoxButtons buttons; + + string caption = "FEHLER"; + if (cancel) buttons = MessageBoxButtons.OKCancel; + else buttons = MessageBoxButtons.OK; + if (s == null) s = $"Da ist ein Fehler aufgetreten. Frag Kilian welcher Ehler hier ({sender.ToString()}) passiert ist."; + + result = MessageBox.Show(s, caption, buttons, icon); + return result; + + } + #endregion + + } } diff --git a/Verwaltung.csproj b/Verwaltung.csproj index 2dea8ad..7d8d731 100644 --- a/Verwaltung.csproj +++ b/Verwaltung.csproj @@ -177,7 +177,7 @@ - + Form