diff --git a/AA-Forms/FormAusschlager.cs b/AA-Forms/FormAusschlager.cs index 6e53507..23d6829 100644 --- a/AA-Forms/FormAusschlager.cs +++ b/AA-Forms/FormAusschlager.cs @@ -305,8 +305,8 @@ namespace Deckungsbeitrag Fach_Laden(); } } - //TODO: Wenn NeuerAuftrag gewählt wie gehts weiter? } } //DONE: Bei Transport wir ein Fach mit Aktuellem Auftrag erstellt. Das Alte wird bei Transport gespeichert. //DONE: Wenn NeuerAuftrag gewählt Fach ändern nicht vergessen. +//DONE: Wenn NeuerAuftrag gewählt wie gehts weiter? diff --git a/AA-Forms/FormExpedit.Designer.cs b/AA-Forms/FormExpedit.Designer.cs index a7f0e21..5d76939 100644 --- a/AA-Forms/FormExpedit.Designer.cs +++ b/AA-Forms/FormExpedit.Designer.cs @@ -71,7 +71,23 @@ this.tabPageAll = new System.Windows.Forms.TabPage(); this.objectListViewAuftrag = new BrightIdeasSoftware.ObjectListView(); this.tabControlAuftragList = new System.Windows.Forms.TabControl(); + this.buttonStats = new System.Windows.Forms.Button(); this.buttonEinstellung = new System.Windows.Forms.Button(); + this.groupBoxStatistik = new System.Windows.Forms.GroupBox(); + this.dateTimePicker1 = new System.Windows.Forms.DateTimePicker(); + this.tableLayoutPanelStatistik = new System.Windows.Forms.TableLayoutPanel(); + this.labelZahl6 = new System.Windows.Forms.Label(); + this.labelStatistik6 = new System.Windows.Forms.Label(); + this.labelZahl5 = new System.Windows.Forms.Label(); + this.labelStatistik5 = new System.Windows.Forms.Label(); + this.labelZahl4 = new System.Windows.Forms.Label(); + this.labelStatistik4 = new System.Windows.Forms.Label(); + this.labelZahl3 = new System.Windows.Forms.Label(); + this.labelStatistik3 = new System.Windows.Forms.Label(); + this.labelZahl2 = new System.Windows.Forms.Label(); + this.labelStatistik2 = new System.Windows.Forms.Label(); + this.labelZahl1 = new System.Windows.Forms.Label(); + this.labelStatistik1 = new System.Windows.Forms.Label(); this.groupBoxEtikett.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureBoxMinus)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBoxPlus)).BeginInit(); @@ -82,6 +98,8 @@ this.tabPageAll.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.objectListViewAuftrag)).BeginInit(); this.tabControlAuftragList.SuspendLayout(); + this.groupBoxStatistik.SuspendLayout(); + this.tableLayoutPanelStatistik.SuspendLayout(); this.SuspendLayout(); // // label10 @@ -382,7 +400,7 @@ this.buttonSWS_Drucken.FlatAppearance.BorderSize = 0; this.buttonSWS_Drucken.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.buttonSWS_Drucken.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.buttonSWS_Drucken.Location = new System.Drawing.Point(1226, 727); + this.buttonSWS_Drucken.Location = new System.Drawing.Point(1179, 727); this.buttonSWS_Drucken.Margin = new System.Windows.Forms.Padding(2); this.buttonSWS_Drucken.Name = "buttonSWS_Drucken"; this.buttonSWS_Drucken.Size = new System.Drawing.Size(200, 41); @@ -461,7 +479,7 @@ this.buttonNeuerAuftrag.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.buttonNeuerAuftrag.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.buttonNeuerAuftrag.ForeColor = System.Drawing.Color.Black; - this.buttonNeuerAuftrag.Location = new System.Drawing.Point(1022, 727); + this.buttonNeuerAuftrag.Location = new System.Drawing.Point(975, 727); this.buttonNeuerAuftrag.Margin = new System.Windows.Forms.Padding(2); this.buttonNeuerAuftrag.Name = "buttonNeuerAuftrag"; this.buttonNeuerAuftrag.Size = new System.Drawing.Size(200, 41); @@ -667,6 +685,20 @@ this.tabControlAuftragList.SelectedIndexChanged += new System.EventHandler(this.tabControlAuftragList_SelectedIndexChanged); this.tabControlAuftragList.Selected += new System.Windows.Forms.TabControlEventHandler(this.tabControlAuftragList_Selected); // + // buttonStats + // + this.buttonStats.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonStats.FlatAppearance.BorderColor = System.Drawing.Color.White; + this.buttonStats.FlatAppearance.BorderSize = 3; + this.buttonStats.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.buttonStats.Image = global::Deckungsbeitrag.Properties.Resources.StatisticsWarning_16x; + this.buttonStats.Location = new System.Drawing.Point(1384, 727); + this.buttonStats.Name = "buttonStats"; + this.buttonStats.Size = new System.Drawing.Size(41, 41); + this.buttonStats.TabIndex = 46; + this.buttonStats.UseVisualStyleBackColor = true; + this.buttonStats.Click += new System.EventHandler(this.buttonStats_Click); + // // buttonEinstellung // this.buttonEinstellung.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); @@ -681,12 +713,225 @@ this.buttonEinstellung.UseVisualStyleBackColor = true; this.buttonEinstellung.Click += new System.EventHandler(this.buttonEinstellung_Click); // + // groupBoxStatistik + // + this.groupBoxStatistik.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxStatistik.Controls.Add(this.dateTimePicker1); + this.groupBoxStatistik.Controls.Add(this.tableLayoutPanelStatistik); + this.groupBoxStatistik.ForeColor = System.Drawing.Color.White; + this.groupBoxStatistik.Location = new System.Drawing.Point(1171, 12); + this.groupBoxStatistik.Name = "groupBoxStatistik"; + this.groupBoxStatistik.Size = new System.Drawing.Size(301, 197); + this.groupBoxStatistik.TabIndex = 62; + this.groupBoxStatistik.TabStop = false; + this.groupBoxStatistik.Text = "STATISTIK"; + this.groupBoxStatistik.Visible = false; + // + // dateTimePicker1 + // + this.dateTimePicker1.CustomFormat = "dddd dd.MM.yyyy"; + this.dateTimePicker1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.dateTimePicker1.Format = System.Windows.Forms.DateTimePickerFormat.Custom; + this.dateTimePicker1.Location = new System.Drawing.Point(10, 19); + this.dateTimePicker1.Name = "dateTimePicker1"; + this.dateTimePicker1.Size = new System.Drawing.Size(224, 26); + this.dateTimePicker1.TabIndex = 1; + this.dateTimePicker1.CloseUp += new System.EventHandler(this.dateTimePicker1_CloseUp); + // + // tableLayoutPanelStatistik + // + this.tableLayoutPanelStatistik.ColumnCount = 2; + this.tableLayoutPanelStatistik.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelStatistik.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelStatistik.Controls.Add(this.labelZahl6, 1, 5); + this.tableLayoutPanelStatistik.Controls.Add(this.labelStatistik6, 0, 5); + this.tableLayoutPanelStatistik.Controls.Add(this.labelZahl5, 1, 4); + this.tableLayoutPanelStatistik.Controls.Add(this.labelStatistik5, 0, 4); + this.tableLayoutPanelStatistik.Controls.Add(this.labelZahl4, 1, 3); + this.tableLayoutPanelStatistik.Controls.Add(this.labelStatistik4, 0, 3); + this.tableLayoutPanelStatistik.Controls.Add(this.labelZahl3, 1, 2); + this.tableLayoutPanelStatistik.Controls.Add(this.labelStatistik3, 0, 2); + this.tableLayoutPanelStatistik.Controls.Add(this.labelZahl2, 1, 1); + this.tableLayoutPanelStatistik.Controls.Add(this.labelStatistik2, 0, 1); + this.tableLayoutPanelStatistik.Controls.Add(this.labelZahl1, 1, 0); + this.tableLayoutPanelStatistik.Controls.Add(this.labelStatistik1, 0, 0); + this.tableLayoutPanelStatistik.Dock = System.Windows.Forms.DockStyle.Bottom; + this.tableLayoutPanelStatistik.Location = new System.Drawing.Point(3, 51); + this.tableLayoutPanelStatistik.Name = "tableLayoutPanelStatistik"; + this.tableLayoutPanelStatistik.RowCount = 6; + this.tableLayoutPanelStatistik.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667F)); + this.tableLayoutPanelStatistik.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667F)); + this.tableLayoutPanelStatistik.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667F)); + this.tableLayoutPanelStatistik.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667F)); + this.tableLayoutPanelStatistik.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667F)); + this.tableLayoutPanelStatistik.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667F)); + this.tableLayoutPanelStatistik.Size = new System.Drawing.Size(295, 143); + this.tableLayoutPanelStatistik.TabIndex = 0; + // + // labelZahl6 + // + this.labelZahl6.AutoSize = true; + this.labelZahl6.Dock = System.Windows.Forms.DockStyle.Left; + this.labelZahl6.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelZahl6.ForeColor = System.Drawing.Color.White; + this.labelZahl6.Location = new System.Drawing.Point(99, 115); + this.labelZahl6.Name = "labelZahl6"; + this.labelZahl6.Size = new System.Drawing.Size(53, 28); + this.labelZahl6.TabIndex = 11; + this.labelZahl6.Text = "Zahl 6"; + this.labelZahl6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // labelStatistik6 + // + this.labelStatistik6.AutoSize = true; + this.labelStatistik6.Dock = System.Windows.Forms.DockStyle.Left; + this.labelStatistik6.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelStatistik6.ForeColor = System.Drawing.Color.White; + this.labelStatistik6.Location = new System.Drawing.Point(3, 115); + this.labelStatistik6.Name = "labelStatistik6"; + this.labelStatistik6.Size = new System.Drawing.Size(90, 28); + this.labelStatistik6.TabIndex = 10; + this.labelStatistik6.Text = "Statistik 6"; + this.labelStatistik6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // labelZahl5 + // + this.labelZahl5.AutoSize = true; + this.labelZahl5.Dock = System.Windows.Forms.DockStyle.Left; + this.labelZahl5.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelZahl5.ForeColor = System.Drawing.Color.White; + this.labelZahl5.Location = new System.Drawing.Point(99, 92); + this.labelZahl5.Name = "labelZahl5"; + this.labelZahl5.Size = new System.Drawing.Size(53, 23); + this.labelZahl5.TabIndex = 9; + this.labelZahl5.Text = "Zahl 5"; + this.labelZahl5.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // labelStatistik5 + // + this.labelStatistik5.AutoSize = true; + this.labelStatistik5.Dock = System.Windows.Forms.DockStyle.Left; + this.labelStatistik5.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelStatistik5.ForeColor = System.Drawing.Color.White; + this.labelStatistik5.Location = new System.Drawing.Point(3, 92); + this.labelStatistik5.Name = "labelStatistik5"; + this.labelStatistik5.Size = new System.Drawing.Size(90, 23); + this.labelStatistik5.TabIndex = 8; + this.labelStatistik5.Text = "Statistik 5"; + this.labelStatistik5.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // labelZahl4 + // + this.labelZahl4.AutoSize = true; + this.labelZahl4.Dock = System.Windows.Forms.DockStyle.Left; + this.labelZahl4.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelZahl4.ForeColor = System.Drawing.Color.White; + this.labelZahl4.Location = new System.Drawing.Point(99, 69); + this.labelZahl4.Name = "labelZahl4"; + this.labelZahl4.Size = new System.Drawing.Size(53, 23); + this.labelZahl4.TabIndex = 7; + this.labelZahl4.Text = "Zahl 4"; + this.labelZahl4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // labelStatistik4 + // + this.labelStatistik4.AutoSize = true; + this.labelStatistik4.Dock = System.Windows.Forms.DockStyle.Left; + this.labelStatistik4.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelStatistik4.ForeColor = System.Drawing.Color.White; + this.labelStatistik4.Location = new System.Drawing.Point(3, 69); + this.labelStatistik4.Name = "labelStatistik4"; + this.labelStatistik4.Size = new System.Drawing.Size(90, 23); + this.labelStatistik4.TabIndex = 6; + this.labelStatistik4.Text = "Statistik 4"; + this.labelStatistik4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // labelZahl3 + // + this.labelZahl3.AutoSize = true; + this.labelZahl3.Dock = System.Windows.Forms.DockStyle.Left; + this.labelZahl3.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelZahl3.ForeColor = System.Drawing.Color.White; + this.labelZahl3.Location = new System.Drawing.Point(99, 46); + this.labelZahl3.Name = "labelZahl3"; + this.labelZahl3.Size = new System.Drawing.Size(53, 23); + this.labelZahl3.TabIndex = 5; + this.labelZahl3.Text = "Zahl 3"; + this.labelZahl3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // labelStatistik3 + // + this.labelStatistik3.AutoSize = true; + this.labelStatistik3.Dock = System.Windows.Forms.DockStyle.Left; + this.labelStatistik3.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelStatistik3.ForeColor = System.Drawing.Color.White; + this.labelStatistik3.Location = new System.Drawing.Point(3, 46); + this.labelStatistik3.Name = "labelStatistik3"; + this.labelStatistik3.Size = new System.Drawing.Size(90, 23); + this.labelStatistik3.TabIndex = 4; + this.labelStatistik3.Text = "Statistik 3"; + this.labelStatistik3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // labelZahl2 + // + this.labelZahl2.AutoSize = true; + this.labelZahl2.Dock = System.Windows.Forms.DockStyle.Left; + this.labelZahl2.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelZahl2.ForeColor = System.Drawing.Color.White; + this.labelZahl2.Location = new System.Drawing.Point(99, 23); + this.labelZahl2.Name = "labelZahl2"; + this.labelZahl2.Size = new System.Drawing.Size(53, 23); + this.labelZahl2.TabIndex = 3; + this.labelZahl2.Text = "Zahl 2"; + this.labelZahl2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // labelStatistik2 + // + this.labelStatistik2.AutoSize = true; + this.labelStatistik2.Dock = System.Windows.Forms.DockStyle.Left; + this.labelStatistik2.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelStatistik2.ForeColor = System.Drawing.Color.White; + this.labelStatistik2.Location = new System.Drawing.Point(3, 23); + this.labelStatistik2.Name = "labelStatistik2"; + this.labelStatistik2.Size = new System.Drawing.Size(90, 23); + this.labelStatistik2.TabIndex = 2; + this.labelStatistik2.Text = "Statistik 2"; + this.labelStatistik2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // labelZahl1 + // + this.labelZahl1.AutoSize = true; + this.labelZahl1.Dock = System.Windows.Forms.DockStyle.Left; + this.labelZahl1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelZahl1.ForeColor = System.Drawing.Color.White; + this.labelZahl1.Location = new System.Drawing.Point(99, 0); + this.labelZahl1.Name = "labelZahl1"; + this.labelZahl1.Size = new System.Drawing.Size(53, 23); + this.labelZahl1.TabIndex = 1; + this.labelZahl1.Text = "Zahl 1"; + this.labelZahl1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // labelStatistik1 + // + this.labelStatistik1.AutoSize = true; + this.labelStatistik1.Dock = System.Windows.Forms.DockStyle.Left; + this.labelStatistik1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelStatistik1.ForeColor = System.Drawing.Color.White; + this.labelStatistik1.Location = new System.Drawing.Point(3, 0); + this.labelStatistik1.Name = "labelStatistik1"; + this.labelStatistik1.Size = new System.Drawing.Size(90, 23); + this.labelStatistik1.TabIndex = 0; + this.labelStatistik1.Text = "Statistik 1"; + this.labelStatistik1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // // FormExpedit // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(1)))), ((int)(((byte)(53)))), ((int)(((byte)(101))))); this.ClientSize = new System.Drawing.Size(1481, 777); + this.Controls.Add(this.groupBoxStatistik); + this.Controls.Add(this.buttonStats); this.Controls.Add(this.buttonEinstellung); this.Controls.Add(this.dGArtikel); this.Controls.Add(this.buttonNeuerAuftrag); @@ -719,6 +964,9 @@ this.tabPageAll.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.objectListViewAuftrag)).EndInit(); this.tabControlAuftragList.ResumeLayout(false); + this.groupBoxStatistik.ResumeLayout(false); + this.tableLayoutPanelStatistik.ResumeLayout(false); + this.tableLayoutPanelStatistik.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); @@ -766,5 +1014,21 @@ private BrightIdeasSoftware.ObjectListView objectListViewAuftrag; private System.Windows.Forms.TabControl tabControlAuftragList; private System.Windows.Forms.Button buttonEinstellung; + private System.Windows.Forms.Button buttonStats; + private System.Windows.Forms.GroupBox groupBoxStatistik; + private System.Windows.Forms.DateTimePicker dateTimePicker1; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelStatistik; + private System.Windows.Forms.Label labelZahl6; + private System.Windows.Forms.Label labelStatistik6; + private System.Windows.Forms.Label labelZahl5; + private System.Windows.Forms.Label labelStatistik5; + private System.Windows.Forms.Label labelZahl4; + private System.Windows.Forms.Label labelStatistik4; + private System.Windows.Forms.Label labelZahl3; + private System.Windows.Forms.Label labelStatistik3; + private System.Windows.Forms.Label labelZahl2; + private System.Windows.Forms.Label labelStatistik2; + private System.Windows.Forms.Label labelZahl1; + private System.Windows.Forms.Label labelStatistik1; } } \ No newline at end of file diff --git a/AA-Forms/FormExpedit.cs b/AA-Forms/FormExpedit.cs index e15ed1e..2202bc5 100644 --- a/AA-Forms/FormExpedit.cs +++ b/AA-Forms/FormExpedit.cs @@ -1,10 +1,13 @@ using BrightIdeasSoftware; using DatenDB; using Deckungsbeitrag.Properties; +using Npgsql; using System; using System.Collections.Generic; +using System.Diagnostics; using System.Drawing; using System.Linq; +using System.Net.Sockets; using System.Windows.Forms; using System.Xml.Resolvers; @@ -34,7 +37,9 @@ namespace Deckungsbeitrag private Screen[] screens; private Point itemlocation; private ImageList imagelist = new ImageList(); - + private volatile bool _isProcessing = false; // Thread-sicherer Flag gegen Überlappung + private int _consecutiveFailures = 0; + private const int MAX_FAILURES = 3; public FormExpedit(Benutzer benutzer) { @@ -164,15 +169,62 @@ namespace Deckungsbeitrag /// private void Timer1_Tick(object sender, EventArgs e) { + // Vermeide Überlappung (wenn vorheriger Tick noch läuft) + if (_isProcessing) return; + Cursor.Current = Cursors.WaitCursor; + _isProcessing = true; - if(auftrag != null) + try { - Auftrag _auftrag = Auftrag.GetAuftrag(auftrag.AuftragID); - if(dGArtikel.Visible) Load_Gridview(_auftrag); - } + if (auftrag != null) + { + const int maxRetries = 3; + Auftrag _auftrag = null; - Cursor.Current = Cursors.Default; + for (int retry = 0; retry < maxRetries; retry++) + { + try + { + _auftrag = Auftrag.GetAuftrag(auftrag.AuftragID); + if (dGArtikel.Visible) Load_Gridview(_auftrag); + + _consecutiveFailures = 0; // Erfolg -> Zähler reset + break; + } + catch (NpgsqlException ex) when ((ex.InnerException is SocketException || ex.InnerException is System.IO.IOException) && retry < maxRetries - 1) + { + _consecutiveFailures++; + Debug.WriteLine($"Retry {retry + 1}/{maxRetries}: {ex.Message}"); // Logging + + System.Threading.Thread.Sleep(1000 * (int)Math.Pow(2, retry)); // Backoff: 1s, 2s, 4s + } + catch (Exception ex) + { + Debug.WriteLine($"Unexpected error: {ex.Message}"); // Logging + break; + } + } + + // Timer stoppen bei zu vielen aufeinanderfolgenden Fehlern + if (_consecutiveFailures >= MAX_FAILURES) + { + timer1.Enabled = false; + Debug.WriteLine("Timer gestoppt nach " + MAX_FAILURES + " Fehlern. Bitte manuell neu starten."); + // Optional: Status-Label setzen oder MessageBox + } + } + } + catch (Exception ex) + { + Debug.WriteLine($"Timer1_Tick globaler Fehler: {ex}"); + _consecutiveFailures++; + } + finally + { + _isProcessing = false; + Cursor.Current = Cursors.Default; + } } /// @@ -379,9 +431,7 @@ namespace Deckungsbeitrag if(knd != null) Funktionen.SWS_Drucken(null, knd, this); } - /// - /// ObjectListView Funktionen - /// + #region ObjectListView-Events private void objectListViewAuftrag_CellClick(object sender, CellClickEventArgs e) { itemlocation = new Point(e.Location.X, e.Location.Y); @@ -682,7 +732,9 @@ namespace Deckungsbeitrag // Cursor zurücksetzen Cursor.Current = Cursors.Default; } - + #endregion + + /// /// Liefertag wird ermittelt und in Day of Week umgerechnet. RadioButtons werden Checked oder Unchecked und Click wird registriert. /// @@ -808,8 +860,71 @@ namespace Deckungsbeitrag einstellung.ShowDialog(); } + #region Statistik + private void buttonStats_Click(object sender, EventArgs e) + { + if (this.groupBoxStatistik.Visible) this.groupBoxStatistik.Visible = false; + else this.groupBoxStatistik.Visible = true; + } + private void GetStatistik() + { + string[] statistik = { "Container gewaschen:", "Container hergerichtet:", "Container fertig:", "Kunden gewaschen:", "Kunden hergerichtet:", "Kunden abgeschlossen:" }; + List auftraglist = Auftrag.GetAuftragStatsListToday(this.dateTimePicker1.Value.Date); + + for (int i = 1; i <= statistik.Length; i++) + { + foreach (Control ctr in this.tableLayoutPanelStatistik.Controls) + { + Label lbl; + if (ctr.GetType() == typeof(Label)) + { + lbl = (Label)ctr; + if (lbl.Text.Contains("Statistik") && lbl.Text.Contains($"{i.ToString()}")) lbl.Text = statistik[i - 1].ToString(); + if (lbl.Name.Contains("Zahl")) + { + + int j = 0; + switch (lbl.Name) + { + case var s when s.Contains($"1"): + foreach (Auftrag a in auftraglist) if (a.Status == AuftragStatus.Aufgelegt) j += a.Container; + lbl.Text = j.ToString(); + break; + case var s when s.Contains($"2"): + foreach (Auftrag a in auftraglist) if (a.Status == AuftragStatus.Vorbereitet) j += a.ContainerClean; + lbl.Text = j.ToString(); + break; + case var s when s.Contains($"3"): + foreach (Auftrag a in auftraglist) if (a.Status == AuftragStatus.Fertig) j += a.ContainerClean; + lbl.Text = j.ToString(); + break; + case var s when s.Contains($"4"): + foreach (Auftrag a in auftraglist) if (a.Status == AuftragStatus.Aufgelegt) j++; + lbl.Text = j.ToString(); + break; + case var s when s.Contains($"5"): + foreach (Auftrag a in auftraglist) if (a.Status == AuftragStatus.Vorbereitet) j++; + lbl.Text = j.ToString(); + break; + case var s when s.Contains($"{i}"): + foreach (Auftrag a in auftraglist) if (a.Status == AuftragStatus.Fertig) j++; + lbl.Text = j.ToString(); + break; + default: + break; + } + } + } + } + } + //this.groupBoxStatistik.Width = this.tableLayoutPanelStatistik.Right; + + } + private void dateTimePicker1_CloseUp(object sender, EventArgs e) + { + GetStatistik(); + } + #endregion } } -//DONE: Breite der GridView festlegen. -//DONE: OLV-Item refresh. Neuer Liefertag speichern. -//DONE: Testen ob ausblenden der Button Column funktioniert. Benutzer-Verwaltung oder Frottee oder Flach notwendig. +//CHANGES: Statistik für Expedit. (Same as in Main) \ No newline at end of file diff --git a/AA-Forms/FormFehlmengeCount.cs b/AA-Forms/FormFehlmengeCount.cs index d29b823..c4797cf 100644 --- a/AA-Forms/FormFehlmengeCount.cs +++ b/AA-Forms/FormFehlmengeCount.cs @@ -21,7 +21,8 @@ namespace Deckungsbeitrag Kunde kunde; List artikelListe; Meldungen meldung = new Meldungen(); - //Benutzer benutzer; + private List auftragsliste; + string userid; public FormFehlmengeCount() { @@ -45,7 +46,8 @@ namespace Deckungsbeitrag //Kunde wird durch Scan oder Handeingabe Ausgewählt. - this.kunde = Funktionen.KundenAuswahl(); + //this.kunde = Funktionen.KundenAuswahl(); + Open_Liste(); ControlLaden(); CloseKeyboard(); @@ -305,9 +307,30 @@ namespace Deckungsbeitrag } //Kunde wird durch Scan oder Handeingabe Ausgewählt. - this.kunde = Funktionen.KundenAuswahl(); + Open_Liste(); ControlLaden(); } + /// + /// Auftragliste aufrufen. + /// + /// Wenn Extrakunde dann true + private void Open_Liste() + { + auftragsliste = Auftrag.GetFinishingList(); + List kundenliste = new List(); + foreach(Auftrag auf in auftragsliste) + { + object kunde = Kunde.GetKunde(null, auf.KundeID, null); + kundenliste.Add(kunde); + } + + FormListe liste = new FormListe(kundenliste, 0); + if (liste.ShowDialog() == DialogResult.OK) + { + this.kunde = liste.kunde; + } + + } /// /// TextBox Scann Events @@ -388,5 +411,6 @@ namespace Deckungsbeitrag } } -//DONE: Kunde Anmerkung anzeigen. Spezielle Farbe verwenden. Label oder Textbox? -//TODO: Eventuell bei erstem Erscheinen Info anzeigen. \ No newline at end of file +//DONE: Auftrag über FormListe holen und daraus den Kunden für Fehlmenge holen. +//DONE: Logik überlegen wie ein bearbeiteter Auftrag nicht doppelt gewählt werden kann. (Abteilungen zu Auftrag hinzufügen und bei Ausschlager Druck definieren?) +//DONE: Nur die Kunden der Aufträge als Liste anzeigen wäre möglich. Macht die Auswahl für das Personal einfacher weil 90% bereits weg fallen. \ No newline at end of file diff --git a/AA-Forms/FormKundeVW.cs b/AA-Forms/FormKundeVW.cs index 13a2bd5..11c840f 100644 --- a/AA-Forms/FormKundeVW.cs +++ b/AA-Forms/FormKundeVW.cs @@ -538,5 +538,3 @@ namespace Deckungsbeitrag } } } -//DONE: TextBox Anmerkung ausprogrammieren. (Immer Enabled, Speichern bei Leave oder Button) -//DONE: Zeichenanzahl aktuell/maximal anzeigen. \ No newline at end of file diff --git a/AA-Forms/FormListe.Designer.cs b/AA-Forms/FormListe.Designer.cs index 5db56bc..f7a8a32 100644 --- a/AA-Forms/FormListe.Designer.cs +++ b/AA-Forms/FormListe.Designer.cs @@ -38,7 +38,7 @@ namespace Deckungsbeitrag this.textBoxKunde = new System.Windows.Forms.TextBox(); this.label1 = new System.Windows.Forms.Label(); this.buttonOK = new System.Windows.Forms.Button(); - this.buttonNeuerBenutzer = new System.Windows.Forms.Button(); + this.buttonNeuerAuftrag = new System.Windows.Forms.Button(); this.SuspendLayout(); // // listViewKunde @@ -63,7 +63,7 @@ namespace Deckungsbeitrag this.listViewKunde.Margin = new System.Windows.Forms.Padding(2); this.listViewKunde.MultiSelect = false; this.listViewKunde.Name = "listViewKunde"; - this.listViewKunde.Size = new System.Drawing.Size(396, 303); + this.listViewKunde.Size = new System.Drawing.Size(396, 466); this.listViewKunde.TabIndex = 1; this.listViewKunde.UseCompatibleStateImageBehavior = false; this.listViewKunde.View = System.Windows.Forms.View.Details; @@ -129,31 +129,30 @@ namespace Deckungsbeitrag this.buttonOK.UseVisualStyleBackColor = false; this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click); // - // buttonNeuerBenutzer + // buttonNeuerAuftrag // - this.buttonNeuerBenutzer.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this.buttonNeuerAuftrag.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.buttonNeuerBenutzer.BackColor = System.Drawing.Color.Yellow; - this.buttonNeuerBenutzer.FlatAppearance.BorderSize = 0; - this.buttonNeuerBenutzer.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.buttonNeuerBenutzer.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.buttonNeuerBenutzer.Location = new System.Drawing.Point(115, 114); - this.buttonNeuerBenutzer.Margin = new System.Windows.Forms.Padding(2); - this.buttonNeuerBenutzer.Name = "buttonNeuerBenutzer"; - this.buttonNeuerBenutzer.Size = new System.Drawing.Size(167, 34); - this.buttonNeuerBenutzer.TabIndex = 16; - this.buttonNeuerBenutzer.Text = "Neuer Benutzer"; - this.buttonNeuerBenutzer.UseVisualStyleBackColor = false; - this.buttonNeuerBenutzer.Visible = false; - this.buttonNeuerBenutzer.Click += new System.EventHandler(this.buttonNeuerBenutzer_Click); + this.buttonNeuerAuftrag.BackColor = System.Drawing.Color.Turquoise; + this.buttonNeuerAuftrag.FlatAppearance.BorderSize = 0; + this.buttonNeuerAuftrag.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.buttonNeuerAuftrag.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.buttonNeuerAuftrag.Location = new System.Drawing.Point(120, 467); + this.buttonNeuerAuftrag.Margin = new System.Windows.Forms.Padding(2); + this.buttonNeuerAuftrag.Name = "buttonNeuerAuftrag"; + this.buttonNeuerAuftrag.Size = new System.Drawing.Size(167, 34); + this.buttonNeuerAuftrag.TabIndex = 16; + this.buttonNeuerAuftrag.Text = "Neuer Auftrag"; + this.buttonNeuerAuftrag.UseVisualStyleBackColor = false; + this.buttonNeuerAuftrag.Click += new System.EventHandler(this.buttonNeuerAuftrag_Click); // // FormListe // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(1)))), ((int)(((byte)(53)))), ((int)(((byte)(101))))); - this.ClientSize = new System.Drawing.Size(413, 358); - this.Controls.Add(this.buttonNeuerBenutzer); + this.ClientSize = new System.Drawing.Size(413, 521); + this.Controls.Add(this.buttonNeuerAuftrag); this.Controls.Add(this.buttonOK); this.Controls.Add(this.label1); this.Controls.Add(this.textBoxKunde); @@ -170,6 +169,7 @@ namespace Deckungsbeitrag this.Text = "LISTE"; this.TopMost = true; this.Load += new System.EventHandler(this.FormListe_Load); + this.Shown += new System.EventHandler(this.FormListe_Shown); this.ResumeLayout(false); this.PerformLayout(); @@ -185,6 +185,6 @@ namespace Deckungsbeitrag private System.Windows.Forms.TextBox textBoxKunde; private System.Windows.Forms.Label label1; private System.Windows.Forms.Button buttonOK; - private System.Windows.Forms.Button buttonNeuerBenutzer; + private System.Windows.Forms.Button buttonNeuerAuftrag; } } \ No newline at end of file diff --git a/AA-Forms/FormListe.cs b/AA-Forms/FormListe.cs index 521da10..901d8ab 100644 --- a/AA-Forms/FormListe.cs +++ b/AA-Forms/FormListe.cs @@ -20,29 +20,34 @@ namespace Deckungsbeitrag { Kundenliste = 0, Aufgabenliste = 1, - Benutzerliste = 2 + Benutzerliste = 2, + Auftragliste = 3 } public partial class FormListe : Form { public Kunde kunde; public Benutzer benutzer; - public List Kundenliste; - public List Aufgabenliste; - public List Benutzerliste; + public Auftrag auftrag; + private List Kundenliste; + private List Aufgabenliste; + private List Benutzerliste; + private List Auftragliste; + private Meldungen meldung = new Meldungen(); bool isKundenliste = false; bool isAufgabenliste = false; bool isBenutzerliste = false; int type_of_list; string path = "C:\\Windows\\WinSxS\\amd64_microsoft-windows-osk_31bf3856ad364e35_10.0.22621.3672_none_8a93c823d58f9d77\\osk.exe"; string ben_col = "Vorname,Nachname,Benutzername,Rolle,Schein,Gueltig bis,Aktiv"; - string knd_col = "KundenNr,KundenName,PLZ,Ort"; + string knd_col = "KundenNr,Suchtext,KundenName,Ort"; string auf_col = "Aufgabe,Beschreibung"; + string auftrag_col = "Kunde,Liefertag,Container"; string progFiles = @"C:\Program Files\Common Files\Microsoft Shared\ink"; string keyboardPath; private Timer timer; - //QR-Code Scan mit integrierter Kamera - + + #region Form-Konstruktor public FormListe() { InitializeComponent(); @@ -59,9 +64,20 @@ namespace Deckungsbeitrag } public FormListe(List objliste, int listentyp) : this() { - this.type_of_list = listentyp; + // Welcher Listentyp angezeigt wird muss beim Öffnen mitgegeben werden. + this.type_of_list = listentyp; + if(this.type_of_list == (int)Listentyp.Auftragliste) + { + this.Auftragliste = objliste.Cast().ToList(); + } + if(this.type_of_list == (int)Listentyp.Kundenliste) + { + this.Kundenliste = objliste.OfType().GroupBy(k => k.KundeID).Select(g => g.First()).ToList(); + } } - private void FormListe_Load(object sender, EventArgs e) + #endregion + + private void FormListe_Load(object sender, EventArgs e) { // Timer für Wartezeit bis TextChanged eintritt. timer = new Timer(); @@ -71,12 +87,16 @@ namespace Deckungsbeitrag this.buttonOK.Visible = this.buttonOK.Enabled = false; listViewKunde_Load(); - this.textBoxKunde.Focus(); - StartPosition = FormStartPosition.CenterScreen; + this.CenterToScreen(); } - private void listViewKunde_Load() + private void FormListe_Shown(object sender, EventArgs e) + { + this.CenterToScreen(); + } + + private void listViewKunde_Load() { //LISTE LEEREN this.listViewKunde.Items.Clear(); @@ -98,19 +118,20 @@ namespace Deckungsbeitrag } //KUNDEN LADEN this.Text = "KUNDE WÄHLEN"; - foreach (Kunde kunde in Kunde.GetTmpList(textBoxKunde.Text)) + if (this.Kundenliste == null) this.Kundenliste = Kunde.GetTmpList(textBoxKunde.Text); + foreach (Kunde kunde in this.Kundenliste) { ListViewItem item = new ListViewItem(); item.Tag = kunde; item.Text = kunde.KundeNummer; + item.SubItems.Add(kunde.Suchtext); item.SubItems.Add(kunde.KundeName); - item.SubItems.Add(kunde.PLZ.ToString()); item.SubItems.Add(kunde.Ort); this.listViewKunde.Items.Add(item); } if (listViewKunde.Items.Count == 1) kunde = (Kunde)listViewKunde.Items[0].Tag; - + this.buttonNeuerAuftrag.Visible = this.buttonNeuerAuftrag.Enabled = false; } break; case var aufliste when type_of_list == (int)Listentyp.Aufgabenliste: @@ -128,7 +149,7 @@ namespace Deckungsbeitrag case var benliste when type_of_list == (int)Listentyp.Benutzerliste: { this.textBoxKunde.Visible = this.label1.Visible = false; - this.buttonNeuerBenutzer.Visible = true; + this.buttonNeuerAuftrag.Visible = true; string[] colname = ben_col.Split(','); foreach (string s in colname) { @@ -155,6 +176,27 @@ namespace Deckungsbeitrag } } break; + case var auftragliste when type_of_list == (int)Listentyp.Auftragliste: + string[] col = auftrag_col.Split(','); + foreach(string s in col) + { + ColumnHeader ch = new ColumnHeader(); + ch.Text = s; + this.listViewKunde.Columns.Add(ch); + } + this.Text = "AUFTRAG WÄHLEN"; + foreach(Auftrag auftrag in this.Auftragliste) + { + ListViewItem item = new ListViewItem(); + item.Tag = auftrag; + item.Text = auftrag.Kundename; + item.SubItems.Add(auftrag.Liefertag.ToString("ddd dd.MM")); + item.SubItems.Add(auftrag.Container.ToString()); + + this.listViewKunde.Items.Add(item); + } + this.textBoxKunde.Enabled = false; + break; default: break; } @@ -180,15 +222,6 @@ namespace Deckungsbeitrag this.Size = new Size(lvwWidth + 50, this.Height); } - private void FormListe_Shown(object sender, EventArgs e) - { - if (isAufgabenliste) - { - //FormNeueAufgabe aufgabe = new FormNeueAufgabe(); - //aufgabe.ShowDialog(); - } - FormListe_Load(this, null); - } private void TextBoxKunde_Enter(object sender, EventArgs e) { this.textBoxKunde.ForeColor = Color.Black; @@ -208,7 +241,7 @@ namespace Deckungsbeitrag // Wenn kein Fragezeichen am Anfang wird Kundenliste erstellt. if (!textBoxKunde.Text.StartsWith("?")) { - Kundenliste = Kunde.GetTmpList(this.textBoxKunde.Text); + if(this.Kundenliste == null) this.Kundenliste = Kunde.GetTmpList(this.textBoxKunde.Text); listViewKunde_Load(); } @@ -234,6 +267,11 @@ namespace Deckungsbeitrag this.Close(); } break; + case var _ when type_of_list == (int)Listentyp.Auftragliste: + auftrag = (Auftrag)item.Tag; + this.DialogResult = DialogResult.OK; + this.Close(); + break; default: break; } @@ -277,12 +315,6 @@ namespace Deckungsbeitrag this.DialogResult = DialogResult.OK; this.Close(); } - private void buttonNeuerBenutzer_Click(object sender, EventArgs e) - { - //FormBenutzerDetail benutzerdetail = new FormBenutzerDetail(); - //benutzerdetail.ShowDialog(); - this.Close(); - } private void textBoxKunde_Leave(object sender, EventArgs e) { @@ -300,5 +332,16 @@ namespace Deckungsbeitrag } } } + private void buttonNeuerAuftrag_Click(object sender, EventArgs e) + { + if (meldung.GetFrage(this, "Konntest du den gewünschten Auftrag nicht finden und möchtest diesen neu erstellen?", false) == DialogResult.Yes) + { + this.DialogResult = DialogResult.Yes; + this.Close(); + } + } } } +//CHANGES: Die Liste zeigt jetzt auch die Aufträge und die Kunden der möglich Aufträge an. (Erleichtert die Kundenauswahl bei Fehlmengecount) +//DONE: Listentyp.Auftragliste implementiert um über FormWSVerfolgung die Auftragliste abrufen zu können. +//DONE: Kunde anzeigen Reihenfolge der Spalten zuerst Suchtext danach Name. \ No newline at end of file diff --git a/AA-Forms/FormMain.cs b/AA-Forms/FormMain.cs index 0851eea..696de75 100644 --- a/AA-Forms/FormMain.cs +++ b/AA-Forms/FormMain.cs @@ -1,6 +1,7 @@ using BrightIdeasSoftware; using DatenDB; using Deckungsbeitrag.AA_Forms; +using Deckungsbeitrag.Properties; using System; using System.Collections.Generic; using System.ComponentModel; @@ -28,6 +29,8 @@ namespace Deckungsbeitrag private Point newLocation; private Size _fixedSize; private bool _handlingResize; + private ImageList imagelist = new ImageList(); + public FormMain() { @@ -52,11 +55,14 @@ namespace Deckungsbeitrag this.groupBoxUpdate.Visible = this.toolStripDB.Visible = this.toolStripButtonImport.Visible = this.tSBExpedit.Enabled = false; break; case BenutzerRolle.Fahrer: - this.toolStripDB.Enabled = this.toolStripButtonImport.Enabled = this.tSBBenutzerVW.Enabled = this.tSBAufgabeVW.Enabled = this.tSBExpedit.Enabled = false; - this.groupBoxUpdate.Visible = this.toolStripDB.Visible = this.toolStripButtonImport.Visible = this.tSBBenutzerVW.Enabled = this.tSBAufgabeVW.Enabled = this.tSBExpedit.Enabled = false; + foreach(ToolStripButton tsb in this.toolStripMenu.Items) + { + if(!tsb.Name.Contains("Auftrag")) tsb.Enabled = false; + } + this.groupBoxStatistik.Enabled = this.buttonNeueAufgabe.Enabled = this.buttonNeuerUser.Enabled = false; + this.groupBoxStatistik.Visible = this.buttonNeueAufgabe.Visible = this.buttonNeuerUser.Visible = this.groupBoxUpdate.Visible = false; break; case BenutzerRolle.Admin: - this.groupBoxUpdate.Visible = false; break; case BenutzerRolle.Waschstrasse: @@ -73,7 +79,11 @@ namespace Deckungsbeitrag private void FormMain_Load(object sender, EventArgs e) { - this.WindowState = FormWindowState.Maximized; + imagelist.Images.Add(Resources.Exclamation_Red); + imagelist.Images.Add(Resources.InformationSymbol_16x); + imagelist.ImageSize = new Size(16, 16); + + 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); @@ -109,12 +119,7 @@ namespace Deckungsbeitrag } - - /// - /// ToolStrip Buttons Click Events - /// - /// - /// + #region ToolStripButton_Click-Events private void tSBBenutzerVW_Click(object sender, EventArgs e) { FormBenutzerVW benutzerVW = new FormBenutzerVW(); @@ -178,16 +183,17 @@ namespace Deckungsbeitrag { if (!this.objectListViewAuftrag.Visible) { - this.rBAlle.Checked = true; + if (benutzer.Rolle == BenutzerRolle.Fahrer) this.rBFertig.Checked = true; + else this.rBAlle.Checked = true; this.rBAlle.Visible = this.rBAusgeliefert.Visible = this.rBFertig.Visible = this.rBVorbereitet.Visible = this.rBAufAbruf.Visible = true; this.groupBoxAuftrag.Visible = true; - this.groupBoxStatistik.Visible = this.groupBoxUpdate.Visible = this.buttonNeuerAuftrag.Visible = this.buttonNeuerAuftrag.Enabled = this.buttonNeuerUser.Visible = this.buttonNeuerUser.Enabled = false; + this.groupBoxStatistik.Visible = this.groupBoxUpdate.Visible = this.buttonNeueAufgabe.Visible = this.buttonNeueAufgabe.Enabled = this.buttonNeuerAuftrag.Visible = this.buttonNeuerAuftrag.Enabled = this.buttonNeuerUser.Visible = this.buttonNeuerUser.Enabled = false; this.objectListViewAuftrag.Enabled = this.objectListViewAuftrag.Visible = true; } else { this.groupBoxAuftrag.Visible = this.buttonAufAbruf.Visible = this.buttonAusgeliefert.Visible = this.rBAlle.Visible = this.rBAusgeliefert.Visible = this.rBFertig.Visible = this.rBVorbereitet.Visible = this.rBAufAbruf.Visible = this.objectListViewAuftrag.Enabled = this.objectListViewAuftrag.Visible = false; - this.groupBoxStatistik.Visible = this.buttonNeuerAuftrag.Visible = this.buttonNeuerAuftrag.Enabled = this.buttonNeuerUser.Enabled = this.buttonNeuerUser.Visible = true; + this.groupBoxStatistik.Visible = this.buttonNeuerAuftrag.Visible = this.buttonNeueAufgabe.Visible = this.buttonNeueAufgabe.Enabled = this.buttonNeuerAuftrag.Enabled = this.buttonNeuerUser.Enabled = this.buttonNeuerUser.Visible = true; } } private void tSBScannTest_Click(object sender, EventArgs e) @@ -212,12 +218,12 @@ namespace Deckungsbeitrag FormArtikelVW artikelVW = new FormArtikelVW(); artikelVW.ShowDialog(); } - + #endregion - /// - /// TOOLSTRIP BUTTON DESIGN - /// - private void get_Border_Paint(object sender, PaintEventArgs e) + /// + /// TOOLSTRIP BUTTON DESIGN + /// + 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); @@ -505,7 +511,6 @@ namespace Deckungsbeitrag tSBArtikelVW.Enabled = true; progressBarArtikel.Value = 0; } - private void buttonAllUpdate_Click(object sender, EventArgs e) { //Update_Artikel(); @@ -637,14 +642,68 @@ namespace Deckungsbeitrag { this.objectListViewAuftrag.HeaderFormatStyle = Funktionen.GetHeader(); Generator.GenerateColumns(this.objectListViewAuftrag, typeof(Auftrag), true); - this.objectListViewAuftrag.SetObjects(alist); - OLVColumn sortcolumn = (OLVColumn)this.objectListViewAuftrag.Columns[1]; - this.objectListViewAuftrag.Sort(sortcolumn); + + // ========== SPALTE 11: BUTTON-COLUMNE ========== + // Spalte 11 (Index 11) als Button-Spalte konfigurieren OLVColumn buttonColumn = new OLVColumn(); - buttonColumn = (OLVColumn)this.objectListViewAuftrag.Columns[10]; + buttonColumn = (OLVColumn)this.objectListViewAuftrag.Columns[11]; buttonColumn.IsButton = true; buttonColumn.ButtonSizing = OLVColumn.ButtonSizingMode.CellBounds; + // ========== IMAGE-LIST ZUWEISEN ========== + // SmallImageList für Icons in Detail-View (16x16 Pixel standard) + this.objectListViewAuftrag.SmallImageList = imagelist; // Voraussetzung: imagelist mit Icon Index 0 gefüllt + + // ========== SPALTE 10 & 1: ICON-KOLUMNE ========== + // Spalte 10 als Icon-Spalte: zeigt Icon wenn AufgabeID vorhanden + OLVColumn iconColumn = (OLVColumn)this.objectListViewAuftrag.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 + }; + OLVColumn iColumn = (OLVColumn)this.objectListViewAuftrag.Columns[1]; + 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 + }; + + // ========== TOOLTIP FÜR ICON-SPALTE ========== + // 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.ColumnIndex == 10 && 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.ColumnIndex == 1 && 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?? + }; + + // ========== DATEN LADEN ========== + // WICHTIG: SetObjects NACH Column-Konfiguration aufrufen! + this.objectListViewAuftrag.SetObjects(alist); + + // ========== SORTIERUNG ========== + // Spalte 2 als primäre Sortier-Spalte festlegen (nach Datenbindung!) + OLVColumn sortcolumn = (OLVColumn)this.objectListViewAuftrag.Columns[2]; + this.objectListViewAuftrag.Sort(sortcolumn); + + // ========== CHECKBOX-FUNKTIONALITÄT ========== + // Aktiviert Checkboxen basierend auf "IsChecked" Property des Auftrag-Modells this.objectListViewAuftrag.CheckedAspectName = "IsChecked"; Funktionen.Columns_Resize(this.objectListViewAuftrag); @@ -930,7 +989,7 @@ namespace Deckungsbeitrag } } } -//DONE: DragDrop verbessern -//DONE: GroupBox Realtime verschieben testen. Sonst Endposition nehmen. gb.Location hier entfernen und unten einkommentieren. -//DONE: GroupBox wird an Endposition verschoben. - +//DONE: Wenn Fahrer registriert kann nur NeuerAuftrag aufgerufen werden. Dort kann er Aufträge erstellen mit dem Status "Abgeholt" (Wichtig für Auftragauswahl bei Waschstraße) +//DONE: Wenn Fahrer Auftragverwaltung öffnet werden Aufträge mit AuftragStatus "Fertig" angezeigt. Fahrer können dann als "Ausgeliefert" markieren. +//CHANGES: Fahrer können abgeholte Aufträge erstellen und ausgelieferte Aufträge markieren. +//CHANGES: Auftragverwaltung Spalten wurden aktualisiert. Mit Icons, Buttons und Sortierung auf Liefertag. \ No newline at end of file diff --git a/AA-Forms/FormNeueAufgabe.cs b/AA-Forms/FormNeueAufgabe.cs index ed23859..aa42509 100644 --- a/AA-Forms/FormNeueAufgabe.cs +++ b/AA-Forms/FormNeueAufgabe.cs @@ -81,4 +81,4 @@ namespace Deckungsbeitrag } } } -//TODO: Neue Aufgabe Screen erstellen. \ No newline at end of file +//DONE: Neue Aufgabe Screen erstellen. \ No newline at end of file diff --git a/AA-Forms/FormNeuerAuftrag.cs b/AA-Forms/FormNeuerAuftrag.cs index 1386325..18729b7 100644 --- a/AA-Forms/FormNeuerAuftrag.cs +++ b/AA-Forms/FormNeuerAuftrag.cs @@ -48,7 +48,6 @@ namespace Deckungsbeitrag { this.letzterLiefertag = letzterLiefertag; } - public FormNeuerAuftrag(string userid) : this() { this.userid = userid; @@ -289,9 +288,32 @@ namespace Deckungsbeitrag } else { - - if (benutzer.Rolle == BenutzerRolle.Verwaltung || benutzer.Rolle == BenutzerRolle.Admin) Auftrag.Status = AuftragStatus.Herrichten; - else Auftrag.Status = AuftragStatus.Aufgelegt; + switch (benutzer.Rolle) + { + case BenutzerRolle.Verwaltung: + Auftrag.Status = AuftragStatus.Herrichten; + break; + case BenutzerRolle.Fahrer: + Auftrag.Status = AuftragStatus.Abgeholt; + break; + case BenutzerRolle.Admin: + Auftrag.Status = AuftragStatus.Herrichten; + break; + case BenutzerRolle.Waschstrasse: + Auftrag.Status = AuftragStatus.Aufgelegt; + break; + case BenutzerRolle.Master: + break; + case BenutzerRolle.Expedit: + Auftrag.Status = AuftragStatus.Herrichten; + break; + case BenutzerRolle.Frottee: + break; + case BenutzerRolle.Flach: + break; + default: + break; + } //Wenn SONDERAUFTRAG(STH,STV,STA) dann ARTIKEL speichern. if (Auftrag.Typ >= AuftragTyp.Inventur) @@ -487,3 +509,6 @@ namespace Deckungsbeitrag } } } +//DONE: AuftragStatus mit Switch nach BenutzerRolle ermöglichen. +//DONE: FahrerAufträge erhalten Status "Abgeholt". +//DONE: Wenn der Auftrag nicht gefunden wird, wird neuer Auftrag erstellt und mit Status "Aufgelegt" versehen. \ No newline at end of file diff --git a/AA-Forms/FormWSVerfolgung.cs b/AA-Forms/FormWSVerfolgung.cs index 417302d..be78f4d 100644 --- a/AA-Forms/FormWSVerfolgung.cs +++ b/AA-Forms/FormWSVerfolgung.cs @@ -25,6 +25,7 @@ namespace Deckungsbeitrag.AA_Forms private Aufgabe aufgabe; private WSFach fach; private Auftrag extraAuftrag; + private List auftragsliste; public bool ws1transport = false; public bool ws2transport = false; @@ -82,8 +83,6 @@ namespace Deckungsbeitrag.AA_Forms item.Click += AufgabeAuswaehlen_Click; toolStripDropDownButtonInfo.DropDownItems.Add(item); } - - } /// @@ -150,8 +149,8 @@ namespace Deckungsbeitrag.AA_Forms this.aufgabe = null; // Neuen Auftrag eingeben. Wenn kein ExtraKunde wird false als extra weitergegeben. - Open_NeuerAuftrag(false); - + //Open_NeuerAuftrag(false); //TODO: Auftragauswahl aufrufen statt NeuerAuftrag. (Wenn Fahrer Aufträge erstellen) + Open_Liste(false); // Fachliste neu laden damit neuer Auftrag in erstes Fach geladen werden kann. fachliste = WSFach.GetFachliste(maschine); } @@ -233,6 +232,7 @@ namespace Deckungsbeitrag.AA_Forms } + /// /// Wenn eine Info von der Statusleiste gewählt wurde. /// @@ -249,7 +249,8 @@ namespace Deckungsbeitrag.AA_Forms if (((Aufgabe)item.Tag).Bezeichnung == "Extra Kunde") { // Wenn ExtraKunde wird true als extra weitergegeben. - Open_NeuerAuftrag(true); + //Open_NeuerAuftrag(true); + Open_Liste(true); } Fach_speichern(); // Gleiches Fach mit neuem Auftrag = Update. } @@ -269,6 +270,53 @@ namespace Deckungsbeitrag.AA_Forms } } + /// + /// Auftragliste aufrufen. + /// + /// Wenn Extrakunde dann true + private void Open_Liste(bool extra) + { + auftragsliste = new List(Auftrag.GetRampeAuftragList()); + + FormListe liste = new FormListe(auftragsliste, 3); + switch (liste.ShowDialog()) + { + case DialogResult.None: + break; + case DialogResult.OK: + if (extra) + { + this.extraAuftrag = liste.auftrag; + this.extraAuftrag.Status = AuftragStatus.Aufgelegt; + if (this.extraAuftrag.Save()[0] != 1) meldung.Speicherfehler(); + } + else + { + this.auftrag = liste.auftrag; + this.auftrag.Status = AuftragStatus.Aufgelegt; + if (this.auftrag.Save()[0] != 1) meldung.Speicherfehler(); + } + Fach_speichern(); + break; + case DialogResult.Cancel: + break; + case DialogResult.Abort: + break; + case DialogResult.Retry: + break; + case DialogResult.Ignore: + break; + case DialogResult.Yes: + Open_NeuerAuftrag(extra); + break; + case DialogResult.No: + break; + default: + break; + } + + } + /// /// Fach wird gespeichert. Bei Änderungen wird Fach überschrieben. Wenn FachID = 0 oder null wird neues Fach erstellt, sonst überschrieben. /// @@ -283,6 +331,7 @@ namespace Deckungsbeitrag.AA_Forms else this.fach.AufgabeID = null; if (this.extraAuftrag != null) this.fach.ExtraAuftragID = this.extraAuftrag.AuftragID; else this.fach.ExtraAuftragID = null; + if (this.fach.Save() == 1) Panel_Laden(false); } @@ -345,7 +394,8 @@ namespace Deckungsbeitrag.AA_Forms if (Form.ModifierKeys == Keys.None && keyData == Keys.Insert) { // Neuer Auftrag wird geöffnet. Wenn nicht ExtraKunde wird false weitergegeben, sonst true. - Open_NeuerAuftrag(false); + //Open_NeuerAuftrag(false); + Open_Liste(false); return true; } @@ -386,6 +436,11 @@ namespace Deckungsbeitrag.AA_Forms toolStripDropDownButtonInfo.DropDown.Show(); } } - } } +//DONE: Statt Neuen Auftrag wird Auftragsliste mit Status "abgeholt" angezeigt. Dadurch muss Aufleger weder scannen noch Namen eintippen und suchen. +//DONE: Auch wenn Extra Auftrag benötigt wird funktioniert es über die Auftragsliste. +//DONE: Wenn kein Auftrag gefunden wird, kann ein neuer erstellt werden. +//CHANGES: Aufleger muss keine Aufträge mehr erstellen da Fahrer das machen können. +//CHANGES: Wenn Auftrag nicht gefunden kann er trotzdem einen neuen Erstellen. +//CHANGES: Auftragsliste zeigt hier nur AuftragStatus "Abgeholt" Aufträge. \ No newline at end of file diff --git a/AA-Klassen/Aufgabe.cs b/AA-Klassen/Aufgabe.cs index 5230e38..097cf0c 100644 --- a/AA-Klassen/Aufgabe.cs +++ b/AA-Klassen/Aufgabe.cs @@ -135,5 +135,4 @@ namespace DatenDB } } } -//TODO: Aktive Property einfügen. //INSTALL-REMINDER: Spalte Aktiv in DB einfügen. diff --git a/AA-Klassen/Auftrag.cs b/AA-Klassen/Auftrag.cs index 70c8abe..cd5c5b3 100644 --- a/AA-Klassen/Auftrag.cs +++ b/AA-Klassen/Auftrag.cs @@ -43,6 +43,38 @@ namespace DatenDB { } + public static List GetFinishingList() + { + DatenbankConnection.GetConnection().Open(); + List resultList = new List(); + NpgsqlCommand cmd = new NpgsqlCommand(); + cmd.Connection = DatenbankConnection.GetConnection(); + + cmd.CommandText = $"select {COLUMNS} from {TABLE} where status = 1 order by liefertag asc"; + + NpgsqlDataReader reader = cmd.ExecuteReader(); + while (reader.Read()) resultList.Add(new Auftrag(reader)); + reader.Close(); + DatenbankConnection.GetConnection().Close(); + return resultList; + } + + public static List GetRampeAuftragList() + { + DatenbankConnection.GetConnection().Open(); + List resultList = new List(); + NpgsqlCommand cmd = new NpgsqlCommand(); + cmd.Connection = DatenbankConnection.GetConnection(); + + cmd.CommandText = $"select {COLUMNS} from {TABLE} where status = 0 order by liefertag asc"; + + NpgsqlDataReader reader = cmd.ExecuteReader(); + while (reader.Read()) resultList.Add(new Auftrag(reader)); + reader.Close(); + DatenbankConnection.GetConnection().Close(); + return resultList; + } + public static List GetAuftragList(string s, Auftrag auftrag) { int? aID = null; @@ -205,11 +237,11 @@ namespace DatenDB } - - /// - /// CheckBoxen zur Auftragsauswahl als erste Spalte. - /// - [OLVColumn("Auswählen", CheckBoxes = true, DisplayIndex = 0)] + #region Properties + /// + /// CheckBoxen zur Auftragsauswahl als erste Spalte. + /// + [OLVColumn("Auswählen", CheckBoxes = true, DisplayIndex = 0)] public bool IsChecked { get; set; } /// @@ -373,12 +405,9 @@ namespace DatenDB public int? AufgabeID { get; set; } [OLVIgnore] public bool AufgabeErledigt { get; set; } = false; + #endregion - - - - - public int[] Save() + public int[] Save() { DatenbankConnection.GetConnection().Open(); int[] result = new int[2]; @@ -424,4 +453,6 @@ namespace DatenDB } } //INSTALL-REMINDER: AufgabeID als Spalte in DB hinzufügen. -//INSTALL-REMINDER: AufgabeErledigt als Spalte in DB hinzufügen. \ No newline at end of file +//INSTALL-REMINDER: AufgabeErledigt als Spalte in DB hinzufügen. +//DONE: Neuer Konstruktor für Auftragliste "Rampe". (abgeholte Aufträge die noch nicht aufgelegt sind) +//DONE: Neuer Konstruktor für Auftragliste "Finishing" oder "Aufgelegt". (aufgelegte Aufträge die noch nicht \ No newline at end of file diff --git a/AA-Klassen/Funktionen.cs b/AA-Klassen/Funktionen.cs index ae12ebc..62cd500 100644 --- a/AA-Klassen/Funktionen.cs +++ b/AA-Klassen/Funktionen.cs @@ -1097,6 +1097,4 @@ namespace Deckungsbeitrag return g; } } -} - -//DONE: Funktionalität klären. MessageBox vor Screenauswahl? oder mit Button im Screen Kamera? +} \ No newline at end of file diff --git a/AA-Klassen/Kunde.cs b/AA-Klassen/Kunde.cs index 21e95a7..cafb0d1 100644 --- a/AA-Klassen/Kunde.cs +++ b/AA-Klassen/Kunde.cs @@ -290,7 +290,7 @@ namespace DatenDB } } - + #region Properties [OLVIgnore] public int? KundeID { get; set; } @@ -372,6 +372,7 @@ namespace DatenDB [OLVIgnore] public string Anmerkung { get; set; } + #endregion } } //INSTALL-REMINDER: Spalte Anmerkung in DB hinzufügen. diff --git a/App.config b/App.config index 638466a..ba669e3 100644 --- a/App.config +++ b/App.config @@ -6,7 +6,7 @@ - + diff --git a/Program.cs b/Program.cs index 0702c22..46d0127 100644 --- a/Program.cs +++ b/Program.cs @@ -1,8 +1,11 @@ using DatenDB; using Deckungsbeitrag.AA_Forms; +using Microsoft.Win32; using System; using System.Collections.Generic; using System.Configuration; +using System.Diagnostics; +using System.IO; using System.Linq; using System.Management; using System.Runtime.CompilerServices; @@ -27,7 +30,53 @@ namespace Deckungsbeitrag Application.SetCompatibleTextRenderingDefault(false); Screen[] screens = Screen.AllScreens; - if (userid.StartsWith("ms") | userid.StartsWith("ps")) + string readmePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Verwaltung_ReadMe.txt"); + + // Prüfe, ob ReadMe schon einmal geöffnet wurde + using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\KilianWirlGmbH\Verwaltung")) + { + if (key == null || key.GetValue("ReadMeShown") == null) + { + // Erstes Mal nach Installation + if (File.Exists(readmePath)) + { + Process.Start(new ProcessStartInfo + { + FileName = readmePath, + UseShellExecute = true + }); + + // WICHTIG: Warte 2 Sekunden (ReadMe öffnen) + System.Threading.Thread.Sleep(2000); + + // Abbruch-Dialog + DialogResult result = MessageBox.Show( + "ReadMe wurde geöffnet.\n\n" + + "Falls INSTALL-REMINDER noch Änderungen enthält,\n" + + "soll die Anwendung jetzt ABGEBROCHEN werden?\n\n" + + "[JA = Abbruch | NEIN = Fortfahren]", + "Nach Installation - Update prüfen", + MessageBoxButtons.YesNo, + MessageBoxIcon.Question, + MessageBoxDefaultButton.Button1 // Standard: Abbruch + ); + + if (result == DialogResult.Yes) + { + MessageBox.Show("Installation wurde abgebrochen.\nBitte Änderungen vornehmen und neu installieren.", + "Abbruch", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; // App beenden + } + + // Markiere als gezeigt + Registry.CurrentUser.CreateSubKey(@"Software\KilianWirlGmbH\Verwaltung") + .SetValue("ReadMeShown", 1); + } + } + } + + + if (userid.StartsWith("ms") | userid.StartsWith("ps")) { if (userid.Contains("wstrasse")) Application.Run(new FormWSVerfolgung(userid)); else Application.Run(new FormFehlmengeCount(userid)); @@ -74,5 +123,4 @@ namespace Deckungsbeitrag } } } -} -//DONE: Für Maschinen keine Anmeldung notwendig. +} \ No newline at end of file diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs index cfdb9b0..cd19e56 100644 --- a/Properties/AssemblyInfo.cs +++ b/Properties/AssemblyInfo.cs @@ -31,5 +31,5 @@ using System.Runtime.InteropServices; // // Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, // indem Sie "*" wie unten gezeigt eingeben: -[assembly: AssemblyVersion("1.0.3.0")] -[assembly: AssemblyFileVersion("1.0.3.0")] +[assembly: AssemblyVersion("1.0.4.2")] +[assembly: AssemblyFileVersion("1.0.4.2")] diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs index ddcdec9..e7d3f4d 100644 --- a/Properties/Resources.Designer.cs +++ b/Properties/Resources.Designer.cs @@ -140,6 +140,16 @@ namespace Deckungsbeitrag.Properties { } } + /// + /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap StatisticsWarning_16x { + get { + object obj = ResourceManager.GetObject("StatisticsWarning_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. /// diff --git a/Properties/Resources.resx b/Properties/Resources.resx index c0881d0..e825302 100644 --- a/Properties/Resources.resx +++ b/Properties/Resources.resx @@ -121,11 +121,17 @@ ..\Resources\Checkmark_blue_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\PenOne_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\InformationSymbol_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\WarningRule_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Monaco_Settings_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\weather_warning_signal_alert_exclamation_icon_124159.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\UpdatedScript_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -136,16 +142,13 @@ ..\Resources\Close_red_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\Monaco_Settings_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\weather_warning_signal_alert_exclamation_icon_124159.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\WarningRule_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Close_WhiteNoHalo_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\PenOne_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\StatisticsWarning_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a \ No newline at end of file diff --git a/Resources/StatisticsWarning_16x.png b/Resources/StatisticsWarning_16x.png new file mode 100644 index 0000000..3295edf Binary files /dev/null and b/Resources/StatisticsWarning_16x.png differ diff --git a/SetupVerwaltung/SetupVerwaltung.vdproj b/SetupVerwaltung/SetupVerwaltung.vdproj index 42b176d..ae60c9a 100644 --- a/SetupVerwaltung/SetupVerwaltung.vdproj +++ b/SetupVerwaltung/SetupVerwaltung.vdproj @@ -13,6 +13,210 @@ "SccProvider" = "8:" "Hierarchy" { + "Entry" + { + "MsmKey" = "8:_0846CD93A9DEA4DD0DD05E0933FFBC5B" + "OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_0846CD93A9DEA4DD0DD05E0933FFBC5B" + "OwnerKey" = "8:_8A99731973E81EB05A1847C294F0CECC" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_0BD5D517A5EBAEC4CE21A08AB9CD3422" + "OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_0BD5D517A5EBAEC4CE21A08AB9CD3422" + "OwnerKey" = "8:_4FCAEBB85B559E3350E3A4912FADA0F0" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_14F178F5FD5EFA4C1973A6B30514E332" + "OwnerKey" = "8:_5E4D6952244F4AAC64F327394623EE57" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_14F178F5FD5EFA4C1973A6B30514E332" + "OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_1FC10E99927FDE0DB378759FE2A2C1DD" + "OwnerKey" = "8:_BF71649AE43FBD7A416893054714CE91" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_1FC10E99927FDE0DB378759FE2A2C1DD" + "OwnerKey" = "8:_A00008624800CAF367880713AFB719F2" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_1FC10E99927FDE0DB378759FE2A2C1DD" + "OwnerKey" = "8:_FD8164C4BBFD975FAFD2A4D86340E915" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_1FC10E99927FDE0DB378759FE2A2C1DD" + "OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_1FC10E99927FDE0DB378759FE2A2C1DD" + "OwnerKey" = "8:_CC6E1B525578AF50C3DD3123399882F3" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_1FC10E99927FDE0DB378759FE2A2C1DD" + "OwnerKey" = "8:_A90E24C686315EC9D9B0BA1C76886A15" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_1FC10E99927FDE0DB378759FE2A2C1DD" + "OwnerKey" = "8:_14F178F5FD5EFA4C1973A6B30514E332" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_1FC10E99927FDE0DB378759FE2A2C1DD" + "OwnerKey" = "8:_E0CD318B00C3EBC6018E7287D1C5C964" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_1FC10E99927FDE0DB378759FE2A2C1DD" + "OwnerKey" = "8:_E73BA90E452C02520292C6FF727EB5AC" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_2DC89B818FE015B8ED93A73216EFCCE7" + "OwnerKey" = "8:_14F178F5FD5EFA4C1973A6B30514E332" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_2DC89B818FE015B8ED93A73216EFCCE7" + "OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_2DC89B818FE015B8ED93A73216EFCCE7" + "OwnerKey" = "8:_5E4D6952244F4AAC64F327394623EE57" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_3518CDF283287B9BB382E0C864B0B344" + "OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_3518CDF283287B9BB382E0C864B0B344" + "OwnerKey" = "8:_9C2D77065F590227E595BA5087763024" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_3518CDF283287B9BB382E0C864B0B344" + "OwnerKey" = "8:_14F178F5FD5EFA4C1973A6B30514E332" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_3518CDF283287B9BB382E0C864B0B344" + "OwnerKey" = "8:_5E4D6952244F4AAC64F327394623EE57" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_361CD6DDAD5DAD87766154F455EA61CE" + "OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_3C6E04C363E24C3CA7B567967C6D818F" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_404BC92A271981651469C5BBB22AFBC1" + "OwnerKey" = "8:_E73BA90E452C02520292C6FF727EB5AC" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_404BC92A271981651469C5BBB22AFBC1" + "OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_404BC92A271981651469C5BBB22AFBC1" + "OwnerKey" = "8:_A00008624800CAF367880713AFB719F2" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_404BC92A271981651469C5BBB22AFBC1" + "OwnerKey" = "8:_FD8164C4BBFD975FAFD2A4D86340E915" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_404BC92A271981651469C5BBB22AFBC1" + "OwnerKey" = "8:_CC6E1B525578AF50C3DD3123399882F3" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_404BC92A271981651469C5BBB22AFBC1" + "OwnerKey" = "8:_14F178F5FD5EFA4C1973A6B30514E332" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_404BC92A271981651469C5BBB22AFBC1" + "OwnerKey" = "8:_5E4D6952244F4AAC64F327394623EE57" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_404BC92A271981651469C5BBB22AFBC1" + "OwnerKey" = "8:_5DDEB1FF3DD78281FF3203E5E9933C19" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_4FCAEBB85B559E3350E3A4912FADA0F0" + "OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_4FCAEBB85B559E3350E3A4912FADA0F0" + "OwnerKey" = "8:_601349A5165EA7E437FA222E90548041" + "MsmSig" = "8:_UNDEFINED" + } "Entry" { "MsmKey" = "8:_52990414836E4CF7BD50C1245D0F9B6F" @@ -21,10 +225,400 @@ } "Entry" { + "MsmKey" = "8:_5CDE0A18B0E8657CBCF9143673DB464A" + "OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5CDE0A18B0E8657CBCF9143673DB464A" + "OwnerKey" = "8:_5E4D6952244F4AAC64F327394623EE57" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5DDEB1FF3DD78281FF3203E5E9933C19" + "OwnerKey" = "8:_3518CDF283287B9BB382E0C864B0B344" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5DDEB1FF3DD78281FF3203E5E9933C19" + "OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5DDEB1FF3DD78281FF3203E5E9933C19" + "OwnerKey" = "8:_9C2D77065F590227E595BA5087763024" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5DDEB1FF3DD78281FF3203E5E9933C19" + "OwnerKey" = "8:_5E4D6952244F4AAC64F327394623EE57" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5DDEB1FF3DD78281FF3203E5E9933C19" + "OwnerKey" = "8:_14F178F5FD5EFA4C1973A6B30514E332" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5DDEB1FF3DD78281FF3203E5E9933C19" + "OwnerKey" = "8:_A90E24C686315EC9D9B0BA1C76886A15" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5E4D6952244F4AAC64F327394623EE57" + "OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_601349A5165EA7E437FA222E90548041" + "OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_6A4E9AB7C92A8099AD635862468BFCBE" + "OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_6A4E9AB7C92A8099AD635862468BFCBE" + "OwnerKey" = "8:_BF71649AE43FBD7A416893054714CE91" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_719473B495FBAC457431A4E48A1F4B17" + "OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_8A99731973E81EB05A1847C294F0CECC" + "OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_9C2D77065F590227E595BA5087763024" + "OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_A00008624800CAF367880713AFB719F2" + "OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_A2FA7AC58F6A16AB132434F8A00EA507" + "OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_A90E24C686315EC9D9B0BA1C76886A15" + "OwnerKey" = "8:_14F178F5FD5EFA4C1973A6B30514E332" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_A90E24C686315EC9D9B0BA1C76886A15" + "OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_AB17FAEB828C8765351F17BFC0E97F98" + "OwnerKey" = "8:_E73BA90E452C02520292C6FF727EB5AC" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_AB17FAEB828C8765351F17BFC0E97F98" + "OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_AB17FAEB828C8765351F17BFC0E97F98" + "OwnerKey" = "8:_14F178F5FD5EFA4C1973A6B30514E332" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } + "Entry" + { + "MsmKey" = "8:_BA8B9295763872FA6F6B706A524178AD" + "OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_BF71649AE43FBD7A416893054714CE91" + "OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_CC6E1B525578AF50C3DD3123399882F3" + "OwnerKey" = "8:_14F178F5FD5EFA4C1973A6B30514E332" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_CC6E1B525578AF50C3DD3123399882F3" + "OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_E0CD318B00C3EBC6018E7287D1C5C964" + "OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_E73BA90E452C02520292C6FF727EB5AC" + "OwnerKey" = "8:_BF71649AE43FBD7A416893054714CE91" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_E73BA90E452C02520292C6FF727EB5AC" + "OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_E73BA90E452C02520292C6FF727EB5AC" + "OwnerKey" = "8:_A00008624800CAF367880713AFB719F2" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_E73BA90E452C02520292C6FF727EB5AC" + "OwnerKey" = "8:_FD8164C4BBFD975FAFD2A4D86340E915" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_E73BA90E452C02520292C6FF727EB5AC" + "OwnerKey" = "8:_CC6E1B525578AF50C3DD3123399882F3" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_E73BA90E452C02520292C6FF727EB5AC" + "OwnerKey" = "8:_14F178F5FD5EFA4C1973A6B30514E332" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_E73BA90E452C02520292C6FF727EB5AC" + "OwnerKey" = "8:_A90E24C686315EC9D9B0BA1C76886A15" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_E73BA90E452C02520292C6FF727EB5AC" + "OwnerKey" = "8:_5E4D6952244F4AAC64F327394623EE57" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_E73BA90E452C02520292C6FF727EB5AC" + "OwnerKey" = "8:_E0CD318B00C3EBC6018E7287D1C5C964" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_FD8164C4BBFD975FAFD2A4D86340E915" + "OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_8A99731973E81EB05A1847C294F0CECC" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_0846CD93A9DEA4DD0DD05E0933FFBC5B" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_9C2D77065F590227E595BA5087763024" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_A00008624800CAF367880713AFB719F2" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_FD8164C4BBFD975FAFD2A4D86340E915" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_361CD6DDAD5DAD87766154F455EA61CE" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_719473B495FBAC457431A4E48A1F4B17" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_5E4D6952244F4AAC64F327394623EE57" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_14F178F5FD5EFA4C1973A6B30514E332" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_2DC89B818FE015B8ED93A73216EFCCE7" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_CC6E1B525578AF50C3DD3123399882F3" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_A90E24C686315EC9D9B0BA1C76886A15" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_E0CD318B00C3EBC6018E7287D1C5C964" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_BA8B9295763872FA6F6B706A524178AD" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_3518CDF283287B9BB382E0C864B0B344" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_5DDEB1FF3DD78281FF3203E5E9933C19" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_BF71649AE43FBD7A416893054714CE91" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_E73BA90E452C02520292C6FF727EB5AC" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_404BC92A271981651469C5BBB22AFBC1" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_AB17FAEB828C8765351F17BFC0E97F98" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_1FC10E99927FDE0DB378759FE2A2C1DD" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_601349A5165EA7E437FA222E90548041" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_4FCAEBB85B559E3350E3A4912FADA0F0" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_0BD5D517A5EBAEC4CE21A08AB9CD3422" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_A2FA7AC58F6A16AB132434F8A00EA507" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_6A4E9AB7C92A8099AD635862468BFCBE" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_5CDE0A18B0E8657CBCF9143673DB464A" + "MsmSig" = "8:_UNDEFINED" + } } "Configurations" { @@ -97,6 +691,20 @@ { "CustomAction" { + "{4AA51A2D-7D85-4A59-BA75-B0809FC8B380}:_361CBAC1329945C3B59EDDE91B890C89" + { + "Name" = "8:Primäre Ausgabe from Verwaltung (Active)" + "Condition" = "8:" + "Object" = "8:_AD2C2F4AADC342899908C708EB4F4A72" + "FileType" = "3:2" + "InstallAction" = "3:1" + "Arguments" = "8:" + "EntryPoint" = "8:" + "Sequence" = "3:1" + "Identifier" = "8:_21EB0CCF_0F46_48D6_888C_4906CAEEBE87" + "InstallerClass" = "11:TRUE" + "CustomActionData" = "8:/showreadme=\"1\"" + } } "DefaultFeature" { @@ -120,6 +728,305 @@ } "File" { + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_0846CD93A9DEA4DD0DD05E0933FFBC5B" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:zxing, Version=0.16.11.0, Culture=neutral, PublicKeyToken=4e88037ac681fe60, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_0846CD93A9DEA4DD0DD05E0933FFBC5B" + { + "Name" = "8:zxing.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:zxing.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_C848DFB5E4D140A7A7F5E1F129613626" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_0BD5D517A5EBAEC4CE21A08AB9CD3422" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:AForge, Version=2.2.5.0, Culture=neutral, PublicKeyToken=c1db6ff4eaa06aeb, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_0BD5D517A5EBAEC4CE21A08AB9CD3422" + { + "Name" = "8:AForge.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:AForge.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_C848DFB5E4D140A7A7F5E1F129613626" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_14F178F5FD5EFA4C1973A6B30514E332" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:System.Text.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_14F178F5FD5EFA4C1973A6B30514E332" + { + "Name" = "8:System.Text.Json.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:System.Text.Json.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_C848DFB5E4D140A7A7F5E1F129613626" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_1FC10E99927FDE0DB378759FE2A2C1DD" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:System.Buffers, Version=4.0.5.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_1FC10E99927FDE0DB378759FE2A2C1DD" + { + "Name" = "8:System.Buffers.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:System.Buffers.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_C848DFB5E4D140A7A7F5E1F129613626" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_2DC89B818FE015B8ED93A73216EFCCE7" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_2DC89B818FE015B8ED93A73216EFCCE7" + { + "Name" = "8:System.ValueTuple.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:System.ValueTuple.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_C848DFB5E4D140A7A7F5E1F129613626" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_3518CDF283287B9BB382E0C864B0B344" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:Microsoft.Bcl.AsyncInterfaces, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_3518CDF283287B9BB382E0C864B0B344" + { + "Name" = "8:Microsoft.Bcl.AsyncInterfaces.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:Microsoft.Bcl.AsyncInterfaces.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_C848DFB5E4D140A7A7F5E1F129613626" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_361CD6DDAD5DAD87766154F455EA61CE" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:Spire.Barcode, Version=7.4.1.0, Culture=neutral, PublicKeyToken=663f351905198cb3, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_361CD6DDAD5DAD87766154F455EA61CE" + { + "Name" = "8:Spire.Barcode.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:Spire.Barcode.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_C848DFB5E4D140A7A7F5E1F129613626" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3C6E04C363E24C3CA7B567967C6D818F" + { + "SourcePath" = "8:..\\Verwaltung_ReadMe.txt" + "TargetName" = "8:Verwaltung_ReadMe.txt" + "Tag" = "8:" + "Folder" = "8:_C848DFB5E4D140A7A7F5E1F129613626" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_404BC92A271981651469C5BBB22AFBC1" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:System.Runtime.CompilerServices.Unsafe, Version=6.0.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_404BC92A271981651469C5BBB22AFBC1" + { + "Name" = "8:System.Runtime.CompilerServices.Unsafe.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:System.Runtime.CompilerServices.Unsafe.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_C848DFB5E4D140A7A7F5E1F129613626" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_4FCAEBB85B559E3350E3A4912FADA0F0" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:AForge.Video, Version=2.2.5.0, Culture=neutral, PublicKeyToken=cbfb6e07d173c401, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_4FCAEBB85B559E3350E3A4912FADA0F0" + { + "Name" = "8:AForge.Video.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:AForge.Video.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_C848DFB5E4D140A7A7F5E1F129613626" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_52990414836E4CF7BD50C1245D0F9B6F" { "SourcePath" = "8:..\\wirlneu_transparent (1).ico" @@ -140,6 +1047,564 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_5CDE0A18B0E8657CBCF9143673DB464A" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:System.Net.Sockets, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" + "ScatterAssemblies" + { + "_5CDE0A18B0E8657CBCF9143673DB464A" + { + "Name" = "8:System.Net.Sockets.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:System.Net.Sockets.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_C848DFB5E4D140A7A7F5E1F129613626" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_5DDEB1FF3DD78281FF3203E5E9933C19" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:System.Threading.Tasks.Extensions, Version=4.2.4.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_5DDEB1FF3DD78281FF3203E5E9933C19" + { + "Name" = "8:System.Threading.Tasks.Extensions.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:System.Threading.Tasks.Extensions.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_C848DFB5E4D140A7A7F5E1F129613626" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_5E4D6952244F4AAC64F327394623EE57" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:Npgsql, Version=4.1.14.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_5E4D6952244F4AAC64F327394623EE57" + { + "Name" = "8:Npgsql.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:Npgsql.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_C848DFB5E4D140A7A7F5E1F129613626" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_601349A5165EA7E437FA222E90548041" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:AForge.Video.DirectShow, Version=2.2.5.0, Culture=neutral, PublicKeyToken=61ea4348d43881b7, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_601349A5165EA7E437FA222E90548041" + { + "Name" = "8:AForge.Video.DirectShow.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:AForge.Video.DirectShow.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_C848DFB5E4D140A7A7F5E1F129613626" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_6A4E9AB7C92A8099AD635862468BFCBE" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:System.Runtime.InteropServices.RuntimeInformation, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" + "ScatterAssemblies" + { + "_6A4E9AB7C92A8099AD635862468BFCBE" + { + "Name" = "8:System.Runtime.InteropServices.RuntimeInformation.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:System.Runtime.InteropServices.RuntimeInformation.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_C848DFB5E4D140A7A7F5E1F129613626" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_719473B495FBAC457431A4E48A1F4B17" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:ObjectListView, Version=2.9.3.0, Culture=neutral, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_719473B495FBAC457431A4E48A1F4B17" + { + "Name" = "8:ObjectListView.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:ObjectListView.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_C848DFB5E4D140A7A7F5E1F129613626" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_8A99731973E81EB05A1847C294F0CECC" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:zxing.presentation, Version=0.16.11.0, Culture=neutral, PublicKeyToken=4e88037ac681fe60, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_8A99731973E81EB05A1847C294F0CECC" + { + "Name" = "8:zxing.presentation.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:zxing.presentation.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_C848DFB5E4D140A7A7F5E1F129613626" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_9C2D77065F590227E595BA5087763024" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:System.Threading.Channels, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_9C2D77065F590227E595BA5087763024" + { + "Name" = "8:System.Threading.Channels.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:System.Threading.Channels.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_C848DFB5E4D140A7A7F5E1F129613626" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_A00008624800CAF367880713AFB719F2" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:System.Diagnostics.DiagnosticSource, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_A00008624800CAF367880713AFB719F2" + { + "Name" = "8:System.Diagnostics.DiagnosticSource.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:System.Diagnostics.DiagnosticSource.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_C848DFB5E4D140A7A7F5E1F129613626" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_A2FA7AC58F6A16AB132434F8A00EA507" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" + "ScatterAssemblies" + { + "_A2FA7AC58F6A16AB132434F8A00EA507" + { + "Name" = "8:System.Net.Http.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:System.Net.Http.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_C848DFB5E4D140A7A7F5E1F129613626" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_A90E24C686315EC9D9B0BA1C76886A15" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:System.IO.Pipelines, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_A90E24C686315EC9D9B0BA1C76886A15" + { + "Name" = "8:System.IO.Pipelines.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:System.IO.Pipelines.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_C848DFB5E4D140A7A7F5E1F129613626" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_AB17FAEB828C8765351F17BFC0E97F98" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:System.Numerics.Vectors, Version=4.1.6.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_AB17FAEB828C8765351F17BFC0E97F98" + { + "Name" = "8:System.Numerics.Vectors.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:System.Numerics.Vectors.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_C848DFB5E4D140A7A7F5E1F129613626" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_BA8B9295763872FA6F6B706A524178AD" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:Microsoft.Bcl.HashCode, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_BA8B9295763872FA6F6B706A524178AD" + { + "Name" = "8:Microsoft.Bcl.HashCode.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:Microsoft.Bcl.HashCode.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_C848DFB5E4D140A7A7F5E1F129613626" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_BF71649AE43FBD7A416893054714CE91" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:HarfBuzzSharp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_BF71649AE43FBD7A416893054714CE91" + { + "Name" = "8:HarfBuzzSharp.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:HarfBuzzSharp.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_C848DFB5E4D140A7A7F5E1F129613626" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_CC6E1B525578AF50C3DD3123399882F3" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:System.Text.Encodings.Web, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_CC6E1B525578AF50C3DD3123399882F3" + { + "Name" = "8:System.Text.Encodings.Web.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:System.Text.Encodings.Web.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_C848DFB5E4D140A7A7F5E1F129613626" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_E0CD318B00C3EBC6018E7287D1C5C964" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_E0CD318B00C3EBC6018E7287D1C5C964" + { + "Name" = "8:Microsoft.Extensions.Logging.Abstractions.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:Microsoft.Extensions.Logging.Abstractions.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_C848DFB5E4D140A7A7F5E1F129613626" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_E73BA90E452C02520292C6FF727EB5AC" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:System.Memory, Version=4.0.5.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_E73BA90E452C02520292C6FF727EB5AC" + { + "Name" = "8:System.Memory.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:System.Memory.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_C848DFB5E4D140A7A7F5E1F129613626" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_FD8164C4BBFD975FAFD2A4D86340E915" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:System.Collections.Immutable, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_FD8164C4BBFD975FAFD2A4D86340E915" + { + "Name" = "8:System.Collections.Immutable.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:System.Collections.Immutable.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_C848DFB5E4D140A7A7F5E1F129613626" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } } "FileType" { @@ -196,15 +1661,15 @@ { "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:SetupVerwaltung" - "ProductCode" = "8:{601F4593-8E33-43BA-BEA7-BAEC889C93C1}" - "PackageCode" = "8:{BFD84107-8494-45DD-8545-61CCDC28A655}" + "ProductCode" = "8:{681D4BE0-85C6-49F3-B837-C9ABEC74802B}" + "PackageCode" = "8:{3E02C75F-E8EE-454B-9579-2FD60899A00E}" "UpgradeCode" = "8:{2DC7CE56-8D1C-42EB-B326-2E887EBB7F5A}" "AspNetVersion" = "8:" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:TRUE" "DetectNewerInstalledVersion" = "11:TRUE" "InstallAllUsers" = "11:FALSE" - "ProductVersion" = "8:1.0.25" + "ProductVersion" = "8:1.0.28" "Manufacturer" = "8:Kilian Wirl GmbH" "ARPHELPTELEPHONE" = "8:" "ARPHELPLINK" = "8:" diff --git a/UpdateVerwaltungReadMe.ps1 b/UpdateVerwaltungReadMe.ps1 index 5180d3f..8f0d9c4 100644 --- a/UpdateVerwaltungReadMe.ps1 +++ b/UpdateVerwaltungReadMe.ps1 @@ -1,5 +1,5 @@ # ===================================== -# Skript: UpdateVerwaltungReadMe.ps1 - mit INSTALL-REMINDER +# Skript: UpdateVerwaltungReadMe.ps1 - mit INSTALL-REMINDER + CHANGES # ===================================== $ProjectDir = Split-Path $MyInvocation.MyCommand.Path -Parent @@ -19,13 +19,16 @@ Build-Info: - Erledigte TODOs: ##DONE_COUNT## - Offene TODOs: ##OPEN_COUNT## - Install-Reminders: ##REMINDER_COUNT## +- Changes: ##CHANGE_COUNT## + +##INSTALL_REMINDERS## + +##CHANGES## ##DONE_TODOS## ##OPEN_TODOS## -##INSTALL_REMINDERS## - Installation: ##BUILD_DATE## ===================================== "@ | Out-File $readmePath -Encoding UTF8 @@ -47,6 +50,7 @@ if (Test-Path $assemblyInfoPath) { $openTodos = @() $doneTodos = @() $installReminders = @() +$changes = @() $csFiles = Get-ChildItem -Path $ProjectDir -Recurse -Filter "*.cs" -ErrorAction SilentlyContinue foreach ($file in $csFiles) { @@ -72,12 +76,20 @@ foreach ($file in $csFiles) { $txt = $match.Groups[1].Value.Trim() if ($txt) { $installReminders += "⚙️ $txt [$($file.Name)]" } } + + # CHANGES erkennen + $changeMatches = [regex]::Matches($content, '//\s*CHANGES\s*:?\s*(.+?)(?=\r?\n|//|$)', 'IgnoreCase') + foreach ($match in $changeMatches) { + $txt = $match.Groups[1].Value.Trim() + if ($txt) { $changes += "✨ $txt [$($file.Name)]" } + } } # Duplikate entfernen $openTodos = $openTodos | Sort-Object | Get-Unique $doneTodos = $doneTodos | Sort-Object | Get-Unique $installReminders = $installReminders | Sort-Object | Get-Unique +$changes = $changes | Sort-Object | Get-Unique # Formatierte Abschnitte $doneSection = if ($doneTodos.Count -gt 0) { @@ -101,15 +113,23 @@ $installSection = if ($installReminders.Count -gt 0) { @("Keine Install-Reminder vorhanden ✅") } +$changesSection = if ($changes.Count -gt 0) { + @("=== ✨ CHANGES ($($changes.Count)) ===") + + ($changes | ForEach-Object { "- $_" }) +} else { + @("Keine Changes vorhanden") +} + # Textaufbereitung $doneText = $doneSection -join "`r`n" $openText = $openSection -join "`r`n" $installText = $installSection -join "`r`n" +$changesText = $changesSection -join "`r`n" $custom = "Release Build" $buildDate = Get-Date -Format "dd.MM.yyyy HH:mm" -# ReadMe aufbauen +# ReadMe aufbauen (CHANGES nach INSTALL-REMINDER) $readmeContent = @" ===================================== NEUIGKEITEN - Version $version @@ -120,10 +140,13 @@ Build-Info: - Erledigte TODOs: $($doneTodos.Count) - Offene TODOs: $($openTodos.Count) - Install-Reminders: $($installReminders.Count) +- Changes: $($changes.Count) $installText +$changesText + `r`n$doneText `r`n$openText @@ -136,3 +159,4 @@ Installation: $buildDate $readmeContent | Out-File $readmePath -Encoding UTF8 Write-Host "✅ Verwaltung_ReadMe.txt erfolgreich aktualisiert!" +Write-Host "📊 Stats: $($doneTodos.Count) DONE, $($openTodos.Count) TODO, $($installReminders.Count) REMINDER, $($changes.Count) CHANGES" diff --git a/Verwaltung.csproj b/Verwaltung.csproj index d9a79b7..e338930 100644 --- a/Verwaltung.csproj +++ b/Verwaltung.csproj @@ -494,6 +494,8 @@ + + diff --git a/Verwaltung_ReadMe.txt b/Verwaltung_ReadMe.txt index 9051eee..3ad45e9 100644 --- a/Verwaltung_ReadMe.txt +++ b/Verwaltung_ReadMe.txt @@ -1,12 +1,13 @@ ===================================== -NEUIGKEITEN - Version 1.0.3.0 +NEUIGKEITEN - Version 1.0.4.2 ===================================== Build-Info: - Build-Typ: Release Build -- Erledigte TODOs: 13 -- Offene TODOs: 22 +- Erledigte TODOs: 19 +- Offene TODOs: 20 - Install-Reminders: 5 +- Changes: 7 === ⚙️ INSTALL-REMINDER (5) === @@ -16,37 +17,51 @@ Build-Info: - ⚙️ Spalte Anmerkung in DB hinzufügen. [Kunde.cs] - ⚙️ Spalte Aufgabe Count in DB hinzufügen. [Kunde.cs] +=== ✨ CHANGES (7) === +- ✨ Aufleger muss keine Aufträge mehr erstellen da Fahrer das machen können. [FormWSVerfolgung.cs] +- ✨ Auftragsliste zeigt hier nur AuftragStatus "Abgeholt" Aufträge. [FormWSVerfolgung.cs] +- ✨ Auftragverwaltung Spalten wurden aktualisiert. Mit Icons, Buttons und Sortierung auf Liefertag. [FormMain.cs] +- ✨ Die Liste zeigt jetzt auch die Aufträge und die Kunden der möglich Aufträge an. (Erleichtert die Kundenauswahl bei Fehlmengecount) [FormListe.cs] +- ✨ Fahrer können abgeholte Aufträge erstellen und ausgelieferte Aufträge markieren. [FormMain.cs] +- ✨ Statistik für Expedit. (Same as in Main) [FormExpedit.cs] +- ✨ Wenn Auftrag nicht gefunden kann er trotzdem einen neuen Erstellen. [FormWSVerfolgung.cs] -=== ✅ ERLEDIGTE TODOs (13) === + +=== ✅ ERLEDIGTE TODOs (19) === +- ✅ : Auch wenn Extra Auftrag benötigt wird funktioniert es über die Auftragsliste. [FormWSVerfolgung.cs] +- ✅ : Auftrag über FormListe holen und daraus den Kunden für Fehlmenge holen. [FormFehlmengeCount.cs] +- ✅ : AuftragStatus mit Switch nach BenutzerRolle ermöglichen. [FormNeuerAuftrag.cs] - ✅ : Bei Transport wir ein Fach mit Aktuellem Auftrag erstellt. Das Alte wird bei Transport gespeichert. [FormAusschlager.cs] -- ✅ : Breite der GridView festlegen. [FormExpedit.cs] -- ✅ : DragDrop verbessern [FormMain.cs] -- ✅ : Funktionalität klären. MessageBox vor Screenauswahl? oder mit Button im Screen Kamera? [Funktionen.cs] -- ✅ : Für Maschinen keine Anmeldung notwendig. [Program.cs] -- ✅ : GroupBox Realtime verschieben testen. Sonst Endposition nehmen. gb.Location hier entfernen und unten einkommentieren. [FormMain.cs] -- ✅ : GroupBox wird an Endposition verschoben. [FormMain.cs] -- ✅ : Kunde Anmerkung anzeigen. Spezielle Farbe verwenden. Label oder Textbox? [FormFehlmengeCount.cs] -- ✅ : OLV-Item refresh. Neuer Liefertag speichern. [FormExpedit.cs] -- ✅ : Testen ob ausblenden der Button Column funktioniert. Benutzer-Verwaltung oder Frottee oder Flach notwendig. [FormExpedit.cs] -- ✅ : TextBox Anmerkung ausprogrammieren. (Immer Enabled, Speichern bei Leave oder Button) [FormKundeVW.cs] +- ✅ : FahrerAufträge erhalten Status "Abgeholt". [FormNeuerAuftrag.cs] +- ✅ : Kunde anzeigen Reihenfolge der Spalten zuerst Suchtext danach Name. [FormListe.cs] +- ✅ : Listentyp.Auftragliste implementiert um über FormWSVerfolgung die Auftragliste abrufen zu können. [FormListe.cs] +- ✅ : Logik überlegen wie ein bearbeiteter Auftrag nicht doppelt gewählt werden kann. (Abteilungen zu Auftrag hinzufügen und bei Ausschlager Druck definieren?) [FormFehlmengeCount.cs] +- ✅ : Neue Aufgabe Screen erstellen. [FormNeueAufgabe.cs] +- ✅ : Neuer Konstruktor für Auftragliste "Finishing" oder "Aufgelegt". (aufgelegte Aufträge die noch nicht [Auftrag.cs] +- ✅ : Neuer Konstruktor für Auftragliste "Rampe". (abgeholte Aufträge die noch nicht aufgelegt sind) [Auftrag.cs] +- ✅ : Nur die Kunden der Aufträge als Liste anzeigen wäre möglich. Macht die Auswahl für das Personal einfacher weil 90% bereits weg fallen. [FormFehlmengeCount.cs] +- ✅ : Statt Neuen Auftrag wird Auftragsliste mit Status "abgeholt" angezeigt. Dadurch muss Aufleger weder scannen noch Namen eintippen und suchen. [FormWSVerfolgung.cs] +- ✅ : Wenn der Auftrag nicht gefunden wird, wird neuer Auftrag erstellt und mit Status "Aufgelegt" versehen. [FormNeuerAuftrag.cs] +- ✅ : Wenn Fahrer Auftragverwaltung öffnet werden Aufträge mit AuftragStatus "Fertig" angezeigt. Fahrer können dann als "Ausgeliefert" markieren. [FormMain.cs] +- ✅ : Wenn Fahrer registriert kann nur NeuerAuftrag aufgerufen werden. Dort kann er Aufträge erstellen mit dem Status "Abgeholt" (Wichtig für Auftragauswahl bei Waschstraße) [FormMain.cs] +- ✅ : Wenn kein Auftrag gefunden wird, kann ein neuer erstellt werden. [FormWSVerfolgung.cs] - ✅ : Wenn NeuerAuftrag gewählt Fach ändern nicht vergessen. [FormAusschlager.cs] -- ✅ : Zeichenanzahl aktuell/maximal anzeigen. [FormKundeVW.cs] +- ✅ : Wenn NeuerAuftrag gewählt wie gehts weiter? [FormAusschlager.cs] -=== 🔄 OFFENE TODOs (22) === -- 🔄 Aktive Property einfügen. [Aufgabe.cs] +=== 🔄 OFFENE TODOs (20) === - 🔄 Alle Icons in einer Spalte anzeigen? I für Anmerkung und ! für Aufgabe?? [FormExpedit.cs] +- 🔄 Alle Icons in einer Spalte anzeigen? I für Anmerkung und ! für Aufgabe?? [FormMain.cs] - 🔄 Artikel Update weiter testen und programmieren. Für ArtikelKurzliste ausprogrammieren. [FormMain.cs] +- 🔄 Auftragauswahl aufrufen statt NeuerAuftrag. (Wenn Fahrer Aufträge erstellen) [FormWSVerfolgung.cs] - 🔄 Ausprobieren ob die Ausrichtung jetzt richtig ist. Sowohl beim ersten wie auch zweiten Mal. [Funktionen.cs] - 🔄 Deaktivieren wenn SPS funktioniert. Transport wird simuliert. [FormWSVerfolgung.cs] - 🔄 Einkommentieren wenn ArtikelUpdate auf ArtikelKurzliste umgestellt werden kann. [FormMain.cs] - 🔄 Eventuell auch andere ListViews einbinden? [Funktionen.cs] -- 🔄 Eventuell bei erstem Erscheinen Info anzeigen. [FormFehlmengeCount.cs] - 🔄 für Ladescreen den Progressbar programieren. (perplexity fragen wie der Status an einen anderen Screen übergeben werden kann) [FormMain.cs] - 🔄 Hier Settings speichern mit UserSettingsManager Klasse. [FormEinstellung.cs] - 🔄 LadenScreen anzeigen etc. [FormMain.cs] - 🔄 Nach Test und Rücksprache eventuell wieder umbauen. Benutzer.Rolle etc. [FormFehlmengeCount.cs] -- 🔄 Neue Aufgabe Screen erstellen. [FormNeueAufgabe.cs] - 🔄 Settings hier ändern auf UserSettingsManager Klasse. [FormEinstellung.cs] - 🔄 Testen ob Get_ArtikelKurzliste funktioniert. [FormMain.cs] - 🔄 Testen ob SWS-QRCodes gelesen werden können. Nur notwendig bis alle SWS-QRCodes richtig gedruckt und gelesen werden. [Kunde.cs] @@ -55,7 +70,6 @@ Build-Info: - 🔄 UserSetting Properties eintragen und in EinstellungsScreen abrufen. [UserSettingsManager.cs] - 🔄 Weitere Properties von oben hier zuweisen [UserSettingsManager.cs] - 🔄 Wenn Nachwäsche oder Müllwäsche alle Artikel anzeigen. [FormFehlmengeCount.cs] -- 🔄 Wenn NeuerAuftrag gewählt wie gehts weiter? [FormAusschlager.cs] -Installation: 15.12.2025 18:26 +Installation: 16.12.2025 16:57 =====================================