WSVerfolgung Laden der Controls verbessert, Ordnung und Comments in WSVerfolgung angepasst, FehlmengeCount - SingleSPLT bei Frottee anzeigen, Expedit Änderungen an dgArtikel und OLV,

This commit is contained in:
Kilian Wirl 2025-12-10 17:28:20 +01:00
parent 07c755c121
commit 3314e8e646
11 changed files with 260 additions and 137 deletions

View File

@ -29,8 +29,8 @@
private void InitializeComponent() private void InitializeComponent()
{ {
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormExpedit)); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormExpedit));
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle();
this.label10 = new System.Windows.Forms.Label(); this.label10 = new System.Windows.Forms.Label();
this.buttonDrucken = new System.Windows.Forms.Button(); this.buttonDrucken = new System.Windows.Forms.Button();
this.buttonAbbrechen = new System.Windows.Forms.Button(); this.buttonAbbrechen = new System.Windows.Forms.Button();
@ -491,14 +491,14 @@
// //
this.dGArtikel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) this.dGArtikel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Right))); | System.Windows.Forms.AnchorStyles.Right)));
dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control; dataGridViewCellStyle3.BackColor = System.Drawing.SystemColors.Control;
dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); dataGridViewCellStyle3.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText; dataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.WindowText;
dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; dataGridViewCellStyle3.SelectionBackColor = System.Drawing.SystemColors.Highlight;
dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
this.dGArtikel.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; this.dGArtikel.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle3;
this.dGArtikel.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.dGArtikel.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dGArtikel.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.dGArtikel.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.KundeArtikelID, this.KundeArtikelID,
@ -511,14 +511,14 @@
this.StandBearbeitet, this.StandBearbeitet,
this.FehlmengeBearbeitet, this.FehlmengeBearbeitet,
this.KorrekturBearbeitet}); this.KorrekturBearbeitet});
dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window; dataGridViewCellStyle4.BackColor = System.Drawing.SystemColors.Window;
dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); dataGridViewCellStyle4.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText; dataGridViewCellStyle4.ForeColor = System.Drawing.SystemColors.ControlText;
dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; dataGridViewCellStyle4.SelectionBackColor = System.Drawing.SystemColors.Highlight;
dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; dataGridViewCellStyle4.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
this.dGArtikel.DefaultCellStyle = dataGridViewCellStyle2; this.dGArtikel.DefaultCellStyle = dataGridViewCellStyle4;
this.dGArtikel.Location = new System.Drawing.Point(638, 42); this.dGArtikel.Location = new System.Drawing.Point(638, 42);
this.dGArtikel.Name = "dGArtikel"; this.dGArtikel.Name = "dGArtikel";
this.dGArtikel.RowHeadersWidth = 62; this.dGArtikel.RowHeadersWidth = 62;
@ -683,12 +683,12 @@
// //
// buttonEinstellung // buttonEinstellung
// //
this.buttonEinstellung.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.buttonEinstellung.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.buttonEinstellung.FlatAppearance.BorderColor = System.Drawing.Color.White; this.buttonEinstellung.FlatAppearance.BorderColor = System.Drawing.Color.White;
this.buttonEinstellung.FlatAppearance.BorderSize = 3; this.buttonEinstellung.FlatAppearance.BorderSize = 3;
this.buttonEinstellung.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.buttonEinstellung.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.buttonEinstellung.Image = global::Deckungsbeitrag.Properties.Resources.Monaco_Settings_16x; this.buttonEinstellung.Image = global::Deckungsbeitrag.Properties.Resources.Monaco_Settings_16x;
this.buttonEinstellung.Location = new System.Drawing.Point(1431, 9); this.buttonEinstellung.Location = new System.Drawing.Point(1022, 727);
this.buttonEinstellung.Name = "buttonEinstellung"; this.buttonEinstellung.Name = "buttonEinstellung";
this.buttonEinstellung.Size = new System.Drawing.Size(41, 41); this.buttonEinstellung.Size = new System.Drawing.Size(41, 41);
this.buttonEinstellung.TabIndex = 45; this.buttonEinstellung.TabIndex = 45;

View File

@ -12,6 +12,7 @@ namespace Deckungsbeitrag
{ {
public partial class FormExpedit : Form public partial class FormExpedit : Form
{ {
private ToolTip cellTooltip = new ToolTip();
public Fehlermeldungen fehlermeldung = new Fehlermeldungen(); public Fehlermeldungen fehlermeldung = new Fehlermeldungen();
public Image etikett = null; public Image etikett = null;
public Auftrag auftrag; public Auftrag auftrag;
@ -66,8 +67,10 @@ namespace Deckungsbeitrag
{ {
Cursor.Current = Cursors.WaitCursor; Cursor.Current = Cursors.WaitCursor;
this.SuspendLayout(); this.SuspendLayout();
this.Visible = false;
imagelist.Images.Add(Resources.WarningRule_16x); imagelist.Images.Add(Resources.Exclamation_Red);
imagelist.ImageSize = new Size(24, 24);
// Controls aktivieren und deaktivieren nach BenutzerRolle // Controls aktivieren und deaktivieren nach BenutzerRolle
switch (this.benutzer.Rolle) switch (this.benutzer.Rolle)
@ -125,6 +128,7 @@ namespace Deckungsbeitrag
this.ResumeLayout(); this.ResumeLayout();
this.Visible = true;
Cursor.Current = Cursors.Default; Cursor.Current = Cursors.Default;
WindowState = FormWindowState.Maximized; WindowState = FormWindowState.Maximized;
} }
@ -165,7 +169,7 @@ namespace Deckungsbeitrag
if(auftrag != null) if(auftrag != null)
{ {
Auftrag _auftrag = Auftrag.GetAuftrag(auftrag.AuftragID); Auftrag _auftrag = Auftrag.GetAuftrag(auftrag.AuftragID);
Load_Gridview(_auftrag); if(dGArtikel.Visible) Load_Gridview(_auftrag);
} }
Cursor.Current = Cursors.Default; Cursor.Current = Cursors.Default;
@ -257,9 +261,16 @@ namespace Deckungsbeitrag
// Alle Zeilenhöhen an Zellinhalt anpassen // Alle Zeilenhöhen an Zellinhalt anpassen
this.dGArtikel.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells; this.dGArtikel.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
//TODO: Breite der GridView festlegen.
this.dGArtikel = Funktionen.DGV_Size_Anpassen(this.dGArtikel); this.dGArtikel = Funktionen.DGV_Size_Anpassen(this.dGArtikel);
this.dGArtikel.Width = this.Width - dGArtikel.Left;
// Rechter Rand von letzter Spalte berechnen.
int x = 0;
foreach (ColumnHeader col in objectListViewAuftrag.Columns) x += col.Width;// x ist jetzt die Position direkt rechts von der letzten Spalte (relativ zu client origin)
this.dGArtikel.Location = new Point(this.tabControlAuftragList.Right - dGArtikel.Width, this.dGArtikel.Location.Y); this.dGArtikel.Location = new Point(this.objectListViewAuftrag.Left + x, this.dGArtikel.Location.Y);
if (this.dGArtikel.Rows.Count > 0) this.dGArtikel.Visible = true; if (this.dGArtikel.Rows.Count > 0) this.dGArtikel.Visible = true;
else this.dGArtikel.Visible = false; else this.dGArtikel.Visible = false;
} }
@ -379,9 +390,10 @@ namespace Deckungsbeitrag
private void objectListViewAuftrag_CellClick(object sender, CellClickEventArgs e) private void objectListViewAuftrag_CellClick(object sender, CellClickEventArgs e)
{ {
itemlocation = new Point(e.Location.X, e.Location.Y); itemlocation = new Point(e.Location.X, e.Location.Y);
if(e.Model == null) return;
ObjectListView olv = (ObjectListView)sender; ObjectListView olv = (ObjectListView)sender;
Auftrag _auftrag = (Auftrag)e.Model; Auftrag _auftrag = (Auftrag)e.Model;
if (e.Model == null) { dGArtikel.Visible = false; return; }
if (_auftrag.Status != AuftragStatus.Fertig) if (_auftrag.Status != AuftragStatus.Fertig)
{ {
this.auftrag = _auftrag; this.auftrag = _auftrag;
@ -396,6 +408,7 @@ namespace Deckungsbeitrag
} }
foreach (Control ctr in this.groupBoxEtikett.Controls) if (ctr.Enabled == false) ctr.Enabled = true; foreach (Control ctr in this.groupBoxEtikett.Controls) if (ctr.Enabled == false) ctr.Enabled = true;
this.buttonKundeNr.Enabled = false; this.buttonKundeNr.Enabled = false;
olv.Focus(); olv.Focus();
} }
@ -521,66 +534,99 @@ namespace Deckungsbeitrag
Cursor.Current = Cursors.Default; Cursor.Current = Cursors.Default;
} }
private void OLV_Load(ObjectListView olv, List<Auftrag> auftraglist) private void OLV_Load(ObjectListView olv, List<Auftrag> 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 =>
{ {
Cursor.Current = Cursors.WaitCursor;
olv.SuspendLayout();
olv.BeginUpdate();
Generator.GenerateColumns(olv, typeof(Auftrag), true);
// Spalte zum Sortieren festlegen.
OLVColumn sortcolumn = (OLVColumn)olv.Columns[5];
olv.Sort(sortcolumn);
// Spalte mit Button anzeigen.
OLVColumn buttonColumn = new OLVColumn();
buttonColumn = (OLVColumn)olv.Columns[11];
buttonColumn.IsButton = true;
buttonColumn.ButtonSizing = OLVColumn.ButtonSizingMode.CellBounds;
// Liste mit Images der ObjectListView zuweisen.
olv.SmallImageList = imagelist;
// Spalte mit Image anzeigen. Wenn AufgabeID != null dann Image. KEINE UNTERSCHEIDUNG WELCHE AUFGABE.
OLVColumn iconColumn = (OLVColumn)olv.Columns[10];
iconColumn.ImageGetter = rowObject =>
{
var auftrag = rowObject as Auftrag; var auftrag = rowObject as Auftrag;
if (auftrag.AufgabeID == null) return null; // null = kein Icon anzeigen
else return 0; // Index 0 aus SmallImageList
};
if (auftrag.AufgabeID == null) return null; // kein Icon // ========== TOOLTIP FÜR ICON-SPALTE ==========
else return 0; // Icon an Position 0 // Automatischer Cell-Tooltip bei Mouse-Hover über Spalte 10
}; olv.CellToolTipShowing += (s, e) =>
{
// Erst nach den Columns die Objecte einfügen. // Nur für Icon-Spalte (Index 10) und gültiges Model
olv.SetObjects(auftraglist); if (e.ColumnIndex == 10 && e.Model is Auftrag auftrag)
olv.CheckedAspectName = "IsChecked";
Funktionen.Columns_Resize(olv);
olv.Columns[0].Width = 0;
olv.Columns[7].Width = 0;
olv.Columns[8].Width = 0;
olv.Columns[9].Width = 0;
if (olv.Name.Contains("Auftrag"))
{
this.labelauftragtag.Text = olv.Items.Count.ToString();
int summe = 0;
foreach(var obj in olv.Objects)
{ {
Auftrag auf = (Auftrag)obj; // Lade Bezeichnung der Aufgabe als Tooltip-Text
if(auf.Erstellt.Value.Date == DateTime.Now.Date) summe += auf.ContainerClean; 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(); this.labelcontainertag.Text = summe.ToString();
}
olv.EndUpdate();
olv.ResumeLayout();
Cursor.Current = Cursors.Default;
} }
// ========== 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;
}
/// <summary> /// <summary>
/// Liefertag wird ermittelt und in Day of Week umgerechnet. RadioButtons werden Checked oder Unchecked und Click wird registriert. /// Liefertag wird ermittelt und in Day of Week umgerechnet. RadioButtons werden Checked oder Unchecked und Click wird registriert.
/// </summary> /// </summary>
@ -707,5 +753,6 @@ namespace Deckungsbeitrag
einstellung.ShowDialog(); einstellung.ShowDialog();
} }
} }
} }

View File

@ -128,7 +128,7 @@ namespace Deckungsbeitrag
case var nr when nr.ToString().StartsWith("6312") & nr.ToString().EndsWith("1"): //DUSCHTUCH BLAU case var nr when nr.ToString().StartsWith("6312") & nr.ToString().EndsWith("1"): //DUSCHTUCH BLAU
this.buttonArt7.Tag = artikel; this.buttonArt7.Tag = artikel;
break; break;
case var nr when nr.ToString().StartsWith("6354"): //GESICHTSTUCH case var nr when nr.ToString().StartsWith("61115") & (nr.ToString().EndsWith("00") || nr.ToString().EndsWith("30")): //SPANNLEINTUCH SINGLE
this.buttonArt8.Tag = artikel; this.buttonArt8.Tag = artikel;
break; break;
default: default:
@ -287,9 +287,6 @@ namespace Deckungsbeitrag
} }
} }
// Focus auf TextBox damit Kundennummer eingegeben oder gescannt werden kann
//this.textBoxScann.Focus();
//Kunde wird durch Scan oder Handeingabe Ausgewählt. //Kunde wird durch Scan oder Handeingabe Ausgewählt.
this.kunde = Funktionen.KundenAuswahl(); this.kunde = Funktionen.KundenAuswahl();
ControlLaden(); ControlLaden();

View File

@ -68,7 +68,6 @@ namespace Deckungsbeitrag
timer.Interval = 1000; // 1 Sekunden timer.Interval = 1000; // 1 Sekunden
timer.Tick += Timer_Tick; timer.Tick += Timer_Tick;
this.buttonOK.Visible = this.buttonOK.Enabled = false; this.buttonOK.Visible = this.buttonOK.Enabled = false;
listViewKunde_Load(); listViewKunde_Load();

View File

@ -29,8 +29,8 @@
private void InitializeComponent() private void InitializeComponent()
{ {
this.statusStripWSVerfolgung = new System.Windows.Forms.StatusStrip(); this.statusStripWSVerfolgung = new System.Windows.Forms.StatusStrip();
this.tableLayoutPanelWSVerfolgung = new System.Windows.Forms.TableLayoutPanel();
this.toolStripDropDownButtonInfo = new System.Windows.Forms.ToolStripDropDownButton(); this.toolStripDropDownButtonInfo = new System.Windows.Forms.ToolStripDropDownButton();
this.tableLayoutPanelWSVerfolgung = new System.Windows.Forms.TableLayoutPanel();
this.statusStripWSVerfolgung.SuspendLayout(); this.statusStripWSVerfolgung.SuspendLayout();
this.SuspendLayout(); this.SuspendLayout();
// //
@ -46,20 +46,6 @@
this.statusStripWSVerfolgung.TabIndex = 0; this.statusStripWSVerfolgung.TabIndex = 0;
this.statusStripWSVerfolgung.Text = "statusStrip1"; this.statusStripWSVerfolgung.Text = "statusStrip1";
// //
// tableLayoutPanelWSVerfolgung
//
this.tableLayoutPanelWSVerfolgung.BackColor = System.Drawing.Color.Transparent;
this.tableLayoutPanelWSVerfolgung.ColumnCount = 1;
this.tableLayoutPanelWSVerfolgung.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanelWSVerfolgung.Dock = System.Windows.Forms.DockStyle.Top;
this.tableLayoutPanelWSVerfolgung.Location = new System.Drawing.Point(0, 0);
this.tableLayoutPanelWSVerfolgung.Name = "tableLayoutPanelWSVerfolgung";
this.tableLayoutPanelWSVerfolgung.RowCount = 2;
this.tableLayoutPanelWSVerfolgung.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanelWSVerfolgung.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanelWSVerfolgung.Size = new System.Drawing.Size(800, 422);
this.tableLayoutPanelWSVerfolgung.TabIndex = 1;
//
// toolStripDropDownButtonInfo // toolStripDropDownButtonInfo
// //
this.toolStripDropDownButtonInfo.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0))))); this.toolStripDropDownButtonInfo.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0)))));
@ -74,6 +60,20 @@
this.toolStripDropDownButtonInfo.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; this.toolStripDropDownButtonInfo.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.toolStripDropDownButtonInfo.ToolTipText = "Wähle hier eine Info für die Ausschlager"; this.toolStripDropDownButtonInfo.ToolTipText = "Wähle hier eine Info für die Ausschlager";
// //
// tableLayoutPanelWSVerfolgung
//
this.tableLayoutPanelWSVerfolgung.BackColor = System.Drawing.Color.Transparent;
this.tableLayoutPanelWSVerfolgung.ColumnCount = 1;
this.tableLayoutPanelWSVerfolgung.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanelWSVerfolgung.Dock = System.Windows.Forms.DockStyle.Top;
this.tableLayoutPanelWSVerfolgung.Location = new System.Drawing.Point(0, 0);
this.tableLayoutPanelWSVerfolgung.Name = "tableLayoutPanelWSVerfolgung";
this.tableLayoutPanelWSVerfolgung.RowCount = 2;
this.tableLayoutPanelWSVerfolgung.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanelWSVerfolgung.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanelWSVerfolgung.Size = new System.Drawing.Size(800, 422);
this.tableLayoutPanelWSVerfolgung.TabIndex = 1;
//
// FormWSVerfolgung // FormWSVerfolgung
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@ -86,7 +86,9 @@
this.KeyPreview = true; this.KeyPreview = true;
this.Name = "FormWSVerfolgung"; this.Name = "FormWSVerfolgung";
this.Text = "WSVerfolgung"; this.Text = "WSVerfolgung";
this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
this.Load += new System.EventHandler(this.WSVerfolgung_Load); this.Load += new System.EventHandler(this.WSVerfolgung_Load);
this.Shown += new System.EventHandler(this.FormWSVerfolgung_Shown);
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.FormWSVerfolgung_KeyDown); this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.FormWSVerfolgung_KeyDown);
this.statusStripWSVerfolgung.ResumeLayout(false); this.statusStripWSVerfolgung.ResumeLayout(false);
this.statusStripWSVerfolgung.PerformLayout(); this.statusStripWSVerfolgung.PerformLayout();

View File

@ -32,6 +32,10 @@ namespace Deckungsbeitrag.AA_Forms
public FormWSVerfolgung() public FormWSVerfolgung()
{ {
InitializeComponent(); InitializeComponent();
this.BackColor = Color.Black;
this.WindowState = FormWindowState.Maximized;
this.FormBorderStyle = FormBorderStyle.None;
} }
public FormWSVerfolgung(string userid) : this() public FormWSVerfolgung(string userid) : this()
{ {
@ -65,11 +69,10 @@ namespace Deckungsbeitrag.AA_Forms
private void WSVerfolgung_Load(object sender, EventArgs e) private void WSVerfolgung_Load(object sender, EventArgs e)
{ {
// WaitCursor und Controls ausblenden. // WaitCursor
this.Cursor = Cursors.WaitCursor; this.Cursor = Cursors.WaitCursor;
//Funktionen.HideControls(this.Controls);
// StatusStrip DropDown // StatusStrip DropDown laden.
this.toolStripDropDownButtonInfo.DropDownItems.Clear(); this.toolStripDropDownButtonInfo.DropDownItems.Clear();
List<Aufgabe> aufgabenliste = Aufgabe.GetList((int)Kategorie.Waschstrasse); List<Aufgabe> aufgabenliste = Aufgabe.GetList((int)Kategorie.Waschstrasse);
foreach(Aufgabe auf in aufgabenliste) foreach(Aufgabe auf in aufgabenliste)
@ -81,65 +84,82 @@ namespace Deckungsbeitrag.AA_Forms
} }
this.BackColor = Color.Black; }
this.WindowState = FormWindowState.Maximized;
this.FormBorderStyle = FormBorderStyle.None; /// <summary>
/// Controls werden hier bevor sie angezeigt werden berechnet. Danach werden sie Eingeblendet und der Cursor auf Default gestellt.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FormWSVerfolgung_Shown(object sender, EventArgs e)
{
// Während dem Laden wird das Layout unterdrückt und der Screen ausgeblendet.
this.SuspendLayout();
this.Visible = false;
// Größer des TabelPanels anpassen.
this.tableLayoutPanelWSVerfolgung.Height = this.statusStripWSVerfolgung.Top; this.tableLayoutPanelWSVerfolgung.Height = this.statusStripWSVerfolgung.Top;
// Wenn bei Maschine TrocknerKaputt wird Anzahl Fächer um 1 reduziert.
if (maschine.TrocknerKaputt) this.tableLayoutPanelWSVerfolgung.RowCount = maschine.Faecher - 1; if (maschine.TrocknerKaputt) this.tableLayoutPanelWSVerfolgung.RowCount = maschine.Faecher - 1;
else this.tableLayoutPanelWSVerfolgung.RowCount = maschine.Faecher; else this.tableLayoutPanelWSVerfolgung.RowCount = maschine.Faecher;
// Bei TabelPanel werden die Styles gelöscht und neu ertellt. Gleichmäßige Aufteilung in Prozent.
this.tableLayoutPanelWSVerfolgung.RowStyles.Clear(); this.tableLayoutPanelWSVerfolgung.RowStyles.Clear();
for (int i = 0; i < tableLayoutPanelWSVerfolgung.RowCount; i++) for (int i = 0; i < tableLayoutPanelWSVerfolgung.RowCount; i++)
{ {
tableLayoutPanelWSVerfolgung.RowStyles.Add(new RowStyle(SizeType.Percent, 100f / tableLayoutPanelWSVerfolgung.RowCount)); tableLayoutPanelWSVerfolgung.RowStyles.Add(new RowStyle(SizeType.Percent, 100f / tableLayoutPanelWSVerfolgung.RowCount));
} }
Panel_Laden(1); // TabelPanel laden.
//DefaultCursor und Controls einblenden. Panel_Laden(true);
//Funktionen.ShowControls(this.Controls);
// Layout unterdrücken und Screen einblenden. Cursor wird auf Default gesetzt.
this.Visible = true;
this.ResumeLayout(true);
this.Cursor = Cursors.Default; this.Cursor = Cursors.Default;
} }
private void AufgabeAuswaehlen_Click(object sender, EventArgs e)
{
ToolStripMenuItem item = (ToolStripMenuItem)sender;
if (((Aufgabe)item.Tag).Bezeichnung == "Extra Kunde")
{
FormNeuerAuftrag neuerAuftrag = new FormNeuerAuftrag(this.Userid);
if (neuerAuftrag.ShowDialog() == DialogResult.OK)
{
this.extraAuftrag = neuerAuftrag.Auftrag;
}
}
this.aufgabe = (Aufgabe)item.Tag;
Fach_speichern(); // Gleiches Fach mit neuem Auftrag = Update.
}
private void Panel_Laden(int start) /// <summary>
/// ScreenControls in Panel von Fachliste laden.
/// </summary>
/// <param name="neustart"> Wenn Neustart dann true sonst false.</param>
private void Panel_Laden(bool neustart)
{ {
// Fachliste holen damit letzter Auftrag vom Vortag übernommen werden kann.
List<WSFach> fachliste = WSFach.GetFachliste(maschine); List<WSFach> fachliste = WSFach.GetFachliste(maschine);
// Wenn erster Start dann Auftrag aus letztem Fach holen? // Wenn erster Start dann Auftrag aus letztem Fach holen?
if (start == 1) if (neustart)
{ {
this.fach = new WSFach();
if (meldung.MaschinenStart() == DialogResult.Yes) if (meldung.MaschinenStart() == DialogResult.Yes)
{ {
// Wenn holen, dann Auftrag und aufgabe aus fachliste holen.
this.auftrag = Auftrag.GetAuftrag(fachliste[0].AuftragID); this.auftrag = Auftrag.GetAuftrag(fachliste[0].AuftragID);
this.aufgabe = Aufgabe.GetAufgabe(null, fachliste[0].AufgabeID); this.aufgabe = Aufgabe.GetAufgabe(null, fachliste[0].AufgabeID);
this.fach = new WSFach();
} }
else else
{ {
// Wenn nicht holen, dann Auftrag und Aufgabe enfernen.
this.auftrag = null; this.auftrag = null;
this.aufgabe = null; this.aufgabe = null;
// Neuen Auftrag eingeben. Wenn kein ExtraKunde wird false als extra weitergegeben.
Open_NeuerAuftrag(false);
// Fachliste neu laden damit neuer Auftrag in erstes Fach geladen werden kann.
fachliste = WSFach.GetFachliste(maschine);
} }
} }
// Alle Controls aus dem Panel entfernen. // Alle Controls aus dem Panel entfernen.
this.tableLayoutPanelWSVerfolgung.Controls.Clear(); this.tableLayoutPanelWSVerfolgung.Controls.Clear();
// UserControls mit Daten aus Fachliste in Panel laden. // UserControls mit Daten aus Fachliste in Panel laden.
if (fachliste.Count > 0) if (fachliste.Count > 0)
{ {
@ -188,7 +208,10 @@ namespace Deckungsbeitrag.AA_Forms
} }
} }
ucfach.KundeName = Kunde.GetKunde(null, auftrag.KundeID, null).Suchtext; // Wenn Kunde hat keinen Suchtext, dann Kundename anzeigen.
if(string.IsNullOrWhiteSpace(Kunde.GetKunde(null, auftrag.KundeID, null).Suchtext))ucfach.KundeName = Kunde.GetKunde(null, auftrag.KundeID, null).KundeName;
else ucfach.KundeName = Kunde.GetKunde(null, auftrag.KundeID, null).Suchtext;
CultureInfo deCult = new CultureInfo("de-DE"); CultureInfo deCult = new CultureInfo("de-DE");
ucfach.LieferTag = ((Liefertag)auftrag.Liefertag.DayOfWeek).ToString(); ucfach.LieferTag = ((Liefertag)auftrag.Liefertag.DayOfWeek).ToString();
@ -198,7 +221,7 @@ namespace Deckungsbeitrag.AA_Forms
// Wenn Aufgabe ist ein Extra Kunde. // Wenn Aufgabe ist ein Extra Kunde.
if (aufgabe.Bezeichnung == "Extra Kunde") ucfach.Aufgabe = "Extra Kunde " + Kunde.GetKunde(null, Auftrag.GetAuftrag(fachliste[row].ExtraAuftragID).KundeID, null).Suchtext; if (aufgabe.Bezeichnung == "Extra Kunde") ucfach.Aufgabe = "Extra Kunde " + Kunde.GetKunde(null, Auftrag.GetAuftrag(fachliste[row].ExtraAuftragID).KundeID, null).Suchtext;
else ucfach.Aufgabe = aufgabe.Bezeichnung; else ucfach.Aufgabe = aufgabe.Bezeichnung;
// Hintergrund des Fachs in der Farbe der Aufgabe. ACHTUNG WEGEN KONTRAST ZU SCHRIFTFARBE. // Hintergrund des Fachs in der Farbe der Aufgabe. ACHTUNG WEGEN KONTRAST ZU SCHRIFTFARBE.
ucfach.BackColor = aufgabe.Farbe; ucfach.BackColor = aufgabe.Farbe;
} }
@ -207,20 +230,50 @@ namespace Deckungsbeitrag.AA_Forms
this.tableLayoutPanelWSVerfolgung.Controls.Add(ucfach, 0, row); this.tableLayoutPanelWSVerfolgung.Controls.Add(ucfach, 0, row);
} }
} }
} }
private void Open_NeuerAuftrag() /// <summary>
/// Wenn eine Info von der Statusleiste gewählt wurde.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void AufgabeAuswaehlen_Click(object sender, EventArgs e)
{
ToolStripMenuItem item = (ToolStripMenuItem)sender;
// Aufgabe wird aus dem StatusStripItem geholt.
this.aufgabe = (Aufgabe)item.Tag;
// Wenn Aufgabe ist ExtraKunde wird NeuerAuftrag geöffnet.
if (((Aufgabe)item.Tag).Bezeichnung == "Extra Kunde")
{
// Wenn ExtraKunde wird true als extra weitergegeben.
Open_NeuerAuftrag(true);
}
Fach_speichern(); // Gleiches Fach mit neuem Auftrag = Update.
}
/// <summary>
/// NeuerAuftrag wird geöffnet und Ergebnis verarbeitet.
/// </summary>
/// <param name="extra">Wenn ExtraKunde in Fach dann true, sonst false</param>
private void Open_NeuerAuftrag(bool extra)
{ {
FormNeuerAuftrag neuerAuftrag = new FormNeuerAuftrag(this.Userid); FormNeuerAuftrag neuerAuftrag = new FormNeuerAuftrag(this.Userid);
if (neuerAuftrag.ShowDialog() == DialogResult.OK) if (neuerAuftrag.ShowDialog() == DialogResult.OK)
{ {
this.auftrag = neuerAuftrag.Auftrag; if (extra) this.extraAuftrag = neuerAuftrag.Auftrag;
else this.auftrag = neuerAuftrag.Auftrag;
Fach_speichern(); // Gleiches Fach mit neuem Auftrag = Update. Fach_speichern(); // Gleiches Fach mit neuem Auftrag = Update.
} }
} }
/// <summary>
/// Fach wird gespeichert. Bei Änderungen wird Fach überschrieben. Wenn FachID = 0 oder null wird neues Fach erstellt, sonst überschrieben.
/// </summary>
private void Fach_speichern() private void Fach_speichern()
{ {
//this.fach = new WSFach();
this.fach.AuftragID = (int)this.auftrag.AuftragID; this.fach.AuftragID = (int)this.auftrag.AuftragID;
this.fach.MaschineID = (int)this.maschine.MaschineID; this.fach.MaschineID = (int)this.maschine.MaschineID;
this.fach.Gewaschen = DateTime.Now; this.fach.Gewaschen = DateTime.Now;
@ -231,7 +284,7 @@ namespace Deckungsbeitrag.AA_Forms
if (this.extraAuftrag != null) this.fach.ExtraAuftragID = this.extraAuftrag.AuftragID; if (this.extraAuftrag != null) this.fach.ExtraAuftragID = this.extraAuftrag.AuftragID;
else this.fach.ExtraAuftragID = null; else this.fach.ExtraAuftragID = null;
if (this.fach.Save() == 1) Panel_Laden(2); if (this.fach.Save() == 1) Panel_Laden(false);
} }
/// <summary> /// <summary>
@ -241,8 +294,6 @@ namespace Deckungsbeitrag.AA_Forms
/// <param name="e"></param> /// <param name="e"></param>
private void Transport_ValueChanged(object sender, EventArgs e) private void Transport_ValueChanged(object sender, EventArgs e)
{ {
//this.SuspendLayout();
// Warten bis erster Transport durchgeführt wurde. // Warten bis erster Transport durchgeführt wurde.
while (_monitor.WS_1_Transport == true & _monitor.WS_2_Transport == true) while (_monitor.WS_1_Transport == true & _monitor.WS_2_Transport == true)
{ {
@ -250,16 +301,21 @@ namespace Deckungsbeitrag.AA_Forms
if (_monitor.WS_1_Transport || _monitor.WS_2_Transport) if (_monitor.WS_1_Transport || _monitor.WS_2_Transport)
{ {
Maschine ms = (Maschine)this.maschine; Maschine ms = (Maschine)this.maschine;
// Fehlermeldung falls kein Auftrag erstellt wurde.
if (this.auftrag != null) if (this.auftrag != null)
{ {
// Nach Transport wird FachAufgabe und FachExtraAuftrag entfernt da diese nur für ein Fach gelten.
this.aufgabe = null; this.aufgabe = null;
this.extraAuftrag = null; this.extraAuftrag = null;
// Wenn Fach nicht null ist wird für ein neues Fach die ID entfernt. Dadurch wird bei Save() neues Fach erzeugt.
if (this.fach != null) this.fach.FachID = null; if (this.fach != null) this.fach.FachID = null;
Fach_speichern(); // Neues Fach mit gleichem Inhalt = Fach_speichern();
} }
else else
{ {
MessageBox.Show($"Kein Auftrag erstellt. LEERFACH wird eingegeben. Bitte in BB1 bearbeiten."); MessageBox.Show($"Kein Auftrag erstellt. LEERFACH wird eingegeben. Fach bitte im nachhinein bearbeiten.");
} //WENN kein Kunde gewählt dann Fach mit KundeID 0. } //WENN kein Kunde gewählt dann Fach mit KundeID 0.
_monitor.WS_2_Transport = _monitor.WS_1_Transport = false; _monitor.WS_2_Transport = _monitor.WS_1_Transport = false;
@ -277,16 +333,24 @@ namespace Deckungsbeitrag.AA_Forms
protected override bool ProcessDialogKey(Keys keyData) protected override bool ProcessDialogKey(Keys keyData)
{ {
//TODO: Umbau in Switch. //TODO: Umbau in Switch.
// Escape [ESC] schließt den Screen.
if (Form.ModifierKeys == Keys.None && keyData == Keys.Escape) if (Form.ModifierKeys == Keys.None && keyData == Keys.Escape)
{ {
this.Close(); this.Close();
return true; return true;
} }
// Insert [Einfg] öffnet neuen Auftrag.
if (Form.ModifierKeys == Keys.None && keyData == Keys.Insert) if (Form.ModifierKeys == Keys.None && keyData == Keys.Insert)
{ {
Open_NeuerAuftrag(); // Neuer Auftrag wird geöffnet. Wenn nicht ExtraKunde wird false weitergegeben, sonst true.
Open_NeuerAuftrag(false);
return true; return true;
} }
// R-Taste [R] simuliert Transport. Sollte wenn SPS angeschlossen ist nicht mehr notwendig sein und deaktiviert werden.
//TODO: Deaktivieren wenn SPS funktioniert. Transport wird simuliert.
if (Form.ModifierKeys == Keys.None && keyData == Keys.R) if (Form.ModifierKeys == Keys.None && keyData == Keys.R)
{ {
Cursor.Current = Cursors.WaitCursor; Cursor.Current = Cursors.WaitCursor;
@ -322,5 +386,6 @@ namespace Deckungsbeitrag.AA_Forms
toolStripDropDownButtonInfo.DropDown.Show(); toolStripDropDownButtonInfo.DropDown.Show();
} }
} }
} }
} }

View File

@ -278,7 +278,7 @@ namespace DatenDB
{ {
DialogResult result = DialogResult.Cancel; DialogResult result = DialogResult.Cancel;
string s = $"Möchtest du den Auftrag des letzten Faches wiederherstellen?"; string s = $"Möchtest du den Auftrag des letzten Faches wiederherstellen? Wenn NEIN erstelle einen neuen Auftrag.";
string caption = "ACHTUNG"; string caption = "ACHTUNG";
MessageBoxButtons buttons = MessageBoxButtons.YesNo; MessageBoxButtons buttons = MessageBoxButtons.YesNo;
MessageBoxIcon icon = MessageBoxIcon.Exclamation; MessageBoxIcon icon = MessageBoxIcon.Exclamation;

View File

@ -6,7 +6,7 @@
</sectionGroup> </sectionGroup>
</configSections> </configSections>
<appSettings> <appSettings>
<add key="ConnectionString" value="user id=mswstrasse01;password=NGp5Y8Nfs2;host=10.10.10.1;port=5432;database=Test_Wirl;Timeout=5" /> <add key="ConnectionString" value="user id=postgres;password=Ki985941Wi;host=10.10.10.1;port=5432;database=Test_Wirl;Timeout=5" />
<add key="SortimentPfad" value="N:\\BÜRO\\SOCOM\\Zaehlscheine\\Kundensortiment.txt" /> <add key="SortimentPfad" value="N:\\BÜRO\\SOCOM\\Zaehlscheine\\Kundensortiment.txt" />
<add key="BildPfad" value="C:\\Users\\KilianWirl\\OneDrive - gehgassi GmbH\\Wäscherei Wirl\\Programme\\Deckungsbeitrag\\Deckungsbeitrag\\Star.png" /> <add key="BildPfad" value="C:\\Users\\KilianWirl\\OneDrive - gehgassi GmbH\\Wäscherei Wirl\\Programme\\Deckungsbeitrag\\Deckungsbeitrag\\Star.png" />
<add key="QrPfad" value="N:\\BÜRO\\SOCOM\\Zaehlscheine\\qrweb.png" /> <add key="QrPfad" value="N:\\BÜRO\\SOCOM\\Zaehlscheine\\qrweb.png" />

View File

@ -90,6 +90,16 @@ namespace Deckungsbeitrag.Properties {
} }
} }
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Exclamation_Red {
get {
object obj = ResourceManager.GetObject("Exclamation_Red", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary> /// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// </summary> /// </summary>

View File

@ -142,4 +142,7 @@
<data name="WarningRule_16x" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="WarningRule_16x" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\WarningRule_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\WarningRule_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="Exclamation_Red" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\weather_warning_signal_alert_exclamation_icon_124159.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root> </root>

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB