ReadMe-Änderungen für bessere Lesbarkeit von Usern/Kevin. DatenLaden bei NeuerAuftrag von Fahrer adaptiert.

This commit is contained in:
Kilian Wirl 2026-04-24 17:12:39 +02:00
parent 197797672f
commit dbfd17bad3
11 changed files with 226 additions and 78 deletions

39
AA-Forms/CustomMessageBox.Designer.cs generated Normal file
View File

@ -0,0 +1,39 @@
namespace Deckungsbeitrag.AA_Forms
{
partial class CustomMessageBox
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Text = "CustomMessageBox";
}
#endregion
}
}

View File

@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Deckungsbeitrag.AA_Forms
{
public partial class CustomMessageBox : Form
{
public CustomMessageBox()
{
InitializeComponent();
}
}
}

View File

@ -511,7 +511,6 @@ namespace Deckungsbeitrag
} }
//PRINT PAGE FÜR DRUCK
private void FormAuftragDetail_Shown(object sender, EventArgs e) private void FormAuftragDetail_Shown(object sender, EventArgs e)
{ {
fb = new UCFeedback(benutzer); fb = new UCFeedback(benutzer);
@ -554,18 +553,18 @@ namespace Deckungsbeitrag
ObjectListView olv = (ObjectListView)sender; ObjectListView olv = (ObjectListView)sender;
AuftragArtikel auftragArtikel = (AuftragArtikel)e.RowObject; AuftragArtikel auftragArtikel = (AuftragArtikel)e.RowObject;
if (e.Column.Text == "Anzahl") diff = (int)e.Value - ((int)e.NewValue); int newValue = (int)e.NewValue;
if (diff > 0) Tosave = true;
if (this.auftrag.Typ == AuftragTyp.SOLL_Verminderung) if (newValue > 0) newValue = newValue * -1;
if (e.Column.Text == "Anzahl") diff = (int)e.Value - (newValue);
if (diff != 0) Tosave = true;
if (auftragDictionary.TryGetValue((int)auftragArtikel.AuftragArtikelID, out int val)) if (auftragDictionary.TryGetValue((int)auftragArtikel.AuftragArtikelID, out int val))
{ {
val = (int)e.NewValue; val = newValue;
if ((int)e.NewValue == 0) e.ListViewItem.Checked = true; if (newValue == 0) e.ListViewItem.Checked = true;
} }
else auftragDictionary.Add((int)auftragArtikel.AuftragArtikelID, (int)e.NewValue); else auftragDictionary.Add((int)auftragArtikel.AuftragArtikelID, newValue);
//auftragArtikel.Anzahl = (int)e.NewValue;
//auftragArtikel.Save();
KundeArtikel kndart = KundeArtikel.GetKundeArtikelVonArtikelID(this.kunde.KundeID, auftragArtikel.ArtikelID); KundeArtikel kndart = KundeArtikel.GetKundeArtikelVonArtikelID(this.kunde.KundeID, auftragArtikel.ArtikelID);
@ -574,12 +573,7 @@ namespace Deckungsbeitrag
int stand = kndart.Stand; int stand = kndart.Stand;
int korrektur = kndart.Korrektur; int korrektur = kndart.Korrektur;
KorrigiereBestand(diff, ref reklamation, ref fehlmenge, ref stand, ref korrektur); KorrigiereBestand(diff, ref reklamation, ref fehlmenge, ref stand, ref korrektur);
//kndart.Reklamation = reklamation;
//kndart.Fehlmenge = fehlmenge;
//kndart.Stand = stand;
//kndart.Korrektur = korrektur;
//kndart.Save();
if (dictionary.TryGetValue((int)kndart.KundeArtikelID, out int[] value)) if (dictionary.TryGetValue((int)kndart.KundeArtikelID, out int[] value))
{ {
for (int i = 0; i < value.Length; i++) for (int i = 0; i < value.Length; i++)
@ -598,7 +592,7 @@ namespace Deckungsbeitrag
bestand = new int[4]; bestand = new int[4];
if (diff == 0) if (diff == 0)
return; return;
if (diff < 0) { bestand[2] = diff; stand += diff; return; } if (diff < 0 || this.auftrag.Typ == AuftragTyp.SOLL_Erhoehung) { bestand[2] = diff; stand += diff; return; }
int rest = diff * 1; int rest = diff * 1;
@ -667,3 +661,4 @@ namespace Deckungsbeitrag
//CHANGES: 3. Abschließen nur möglich wenn alle Artikel auf 0 sind (Checked) und gespeichert wurde. //CHANGES: 3. Abschließen nur möglich wenn alle Artikel auf 0 sind (Checked) und gespeichert wurde.
//CHANGES: Bei Druckabbruch wird die geänderte Zahl NICHT zurückgesetzt. (Das muss händisch erfolgen) //CHANGES: Bei Druckabbruch wird die geänderte Zahl NICHT zurückgesetzt. (Das muss händisch erfolgen)
//CHANGES: Wenn die Zahlen zurückgesetzt werden sollen, muss AuftragDetail geschlossen werden. //CHANGES: Wenn die Zahlen zurückgesetzt werden sollen, muss AuftragDetail geschlossen werden.
//CHANGES: Wenn die reduzierte Anzahl bei SOLL-Verminderung nicht negativ ist, wird diese negativ gemacht. So wird ein möglicher Fehler ausgebessert.

View File

@ -161,7 +161,23 @@ namespace Deckungsbeitrag
#region Button_Click-Events #region Button_Click-Events
private async void ButtonNeuerAuftrag_Click(object sender, EventArgs e) private async void ButtonNeuerAuftrag_Click(object sender, EventArgs e)
{ {
FormNeuerAuftrag neuerAuftrag = new FormNeuerAuftrag(benutzer, this.letzterLiefertag, AuftragTyp.Standart); DialogResult result = DialogResult.Cancel;
AuftragTyp? auftragTyp = null;
result = MessageBox.Show("Welchen Auftrag möchtest du erstellen?\n\n[JA] => Geschäft\n[NEIN] => Standart", "FRAGE", MessageBoxButtons.YesNoCancel);
switch (result)
{
case DialogResult.Yes:
auftragTyp = AuftragTyp.Geschäft;
break;
case DialogResult.No:
auftragTyp = AuftragTyp.Standart;
break;
default:
return;
}
FormNeuerAuftrag neuerAuftrag = new FormNeuerAuftrag(benutzer, this.letzterLiefertag, auftragTyp);
if (neuerAuftrag.ShowDialog() == DialogResult.OK) if (neuerAuftrag.ShowDialog() == DialogResult.OK)
{ {
this.letzterLiefertag = neuerAuftrag.letzterLiefertag; this.letzterLiefertag = neuerAuftrag.letzterLiefertag;
@ -1319,3 +1335,4 @@ namespace Deckungsbeitrag
//CHANGES: Im Tab Rampe wird bei DoppelClick der Auftrag als gewaschen markiert und im Tab Aufträge heute sichtbar. //CHANGES: Im Tab Rampe wird bei DoppelClick der Auftrag als gewaschen markiert und im Tab Aufträge heute sichtbar.
//CHANGES: Wenn ein anderer Fahrer ausgewählt wird, wird auch die Priority laut dem Fahrer geändert. //CHANGES: Wenn ein anderer Fahrer ausgewählt wird, wird auch die Priority laut dem Fahrer geändert.
//CHANGES: NumericUpDown markiert automatisch den Inhalt. Erleichtert die Eingabe. //CHANGES: NumericUpDown markiert automatisch den Inhalt. Erleichtert die Eingabe.
//CHANGES: Wenn Expedit NeuerAuftrag aufruft wird gefragt welcher Auftrag gewünscht ist. Geschäftkunde = Geschäft (Notwendig bis ausschließlich Fahrer die Standardaufträge erstellen)

View File

@ -369,6 +369,7 @@ namespace Deckungsbeitrag
this.buttonSWS_Drucken.TabIndex = 36; this.buttonSWS_Drucken.TabIndex = 36;
this.buttonSWS_Drucken.Text = "SWS-Drucken"; this.buttonSWS_Drucken.Text = "SWS-Drucken";
this.buttonSWS_Drucken.UseVisualStyleBackColor = false; this.buttonSWS_Drucken.UseVisualStyleBackColor = false;
this.buttonSWS_Drucken.Visible = false;
this.buttonSWS_Drucken.Click += new System.EventHandler(this.ButtonDrucken_Click); this.buttonSWS_Drucken.Click += new System.EventHandler(this.ButtonDrucken_Click);
// //
// pictureBoxEntwurf // pictureBoxEntwurf
@ -401,7 +402,7 @@ namespace Deckungsbeitrag
this.tabPageUmsatz.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); this.tabPageUmsatz.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.tabPageUmsatz.Name = "tabPageUmsatz"; this.tabPageUmsatz.Name = "tabPageUmsatz";
this.tabPageUmsatz.Padding = new System.Windows.Forms.Padding(4, 5, 4, 5); this.tabPageUmsatz.Padding = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.tabPageUmsatz.Size = new System.Drawing.Size(925, 692); this.tabPageUmsatz.Size = new System.Drawing.Size(1001, 734);
this.tabPageUmsatz.TabIndex = 0; this.tabPageUmsatz.TabIndex = 0;
this.tabPageUmsatz.Text = "Umsatz"; this.tabPageUmsatz.Text = "Umsatz";
// //

View File

@ -388,7 +388,7 @@ namespace Deckungsbeitrag
this.textBoxText.Size = new System.Drawing.Size(518, 459); this.textBoxText.Size = new System.Drawing.Size(518, 459);
this.textBoxText.TabIndex = 48; this.textBoxText.TabIndex = 48;
this.textBoxText.Visible = false; this.textBoxText.Visible = false;
this.textBoxText.VisibleChanged += new System.EventHandler(this.textBoxText_VisibleChanged); this.textBoxText.VisibleChanged += new System.EventHandler(this.TextBoxText_VisibleChanged);
// //
// pictureBoxAddArtikel // pictureBoxAddArtikel
// //

View File

@ -64,7 +64,7 @@ namespace Deckungsbeitrag
{ {
this.auftragtyp = auftragTyp; this.auftragtyp = auftragTyp;
} }
public FormNeuerAuftrag(Benutzer benutzer, DateTime? letzterLiefertag, AuftragTyp auftragTyp) : this(benutzer, auftragTyp) public FormNeuerAuftrag(Benutzer benutzer, DateTime? letzterLiefertag, AuftragTyp? auftragTyp) : this(benutzer, auftragTyp)
{ {
this.letzterLiefertag = letzterLiefertag; this.letzterLiefertag = letzterLiefertag;
} }
@ -85,17 +85,8 @@ namespace Deckungsbeitrag
if (this.auftragtyp == AuftragTyp.Regelmäßig) {kndService = "Geschäft"; labelLiefertag.Text = "Erster Liefertag:"; } if (this.auftragtyp == AuftragTyp.Regelmäßig) {kndService = "Geschäft"; labelLiefertag.Text = "Erster Liefertag:"; }
if (this.benutzer.Rolle == BenutzerRolle.Fahrer) kndService = "Geschäft"; if (this.benutzer.Rolle == BenutzerRolle.Fahrer) kndService = "Geschäft";
// Kunde laden if (this.auftragtyp == null || this.auftragtyp == AuftragTyp.Geschäft) SonderDatenLaden(kndService);
this.kunde = Funktionen.Open_List(kndService); else DatenLaden(kndService);
if (this.kunde == null) { CloseForm(DialogResult.Cancel); return; }
this.textBoxKndNr.Text = kunde.KundeNummer;
this.kundeName = this.textBoxKundeName.Text = this.kunde.Suchtext ?? this.kunde.KundeName;
this.textBoxKundeName.Enabled = false;
this.textBoxKndNr.Enabled = false;
if (this.auftragtyp == null || this.auftragtyp == AuftragTyp.Geschäft) SonderDatenLaden();
else DatenLaden();
} }
private async void FormNeuerAuftrag_HelpButtonClicked(object sender, CancelEventArgs e) private async void FormNeuerAuftrag_HelpButtonClicked(object sender, CancelEventArgs e)
{ {
@ -104,16 +95,22 @@ namespace Deckungsbeitrag
ZeigeOnboarding(); ZeigeOnboarding();
} }
private void SonderDatenLaden() private void SonderDatenLaden(string kndService)
{ {
// Kunde laden
if (!GetKunde(kndService)) { CloseForm(DialogResult.Cancel); return; }
// ComboBox Typ & Fahrer wird mit Items geladen // ComboBox Typ & Fahrer wird mit Items geladen
ComboBoxTyp_Load(); ComboBoxTyp_Load();
ComboBoxFahrer_Load(); ComboBoxFahrer_Load();
} }
private void DatenLaden() private void DatenLaden(string kndService)
{ {
this.SuspendLayout(); this.SuspendLayout();
// Kunde laden
if (!GetKunde(kndService)) { CloseForm(DialogResult.Cancel); return; }
// Containeranzahl laden // Containeranzahl laden
if (int.TryParse(Interaction.InputBox($"Wieviel Container hast du beim Kunde {kundeName} abgeholt?", "CONTAINERANZAHL", "1"), out int i)) this.textBoxCont.Text = i.ToString(); if (int.TryParse(Interaction.InputBox($"Wieviel Container hast du beim Kunde {kundeName} abgeholt?", "CONTAINERANZAHL", "1"), out int i)) this.textBoxCont.Text = i.ToString();
else { CloseForm(DialogResult.Cancel); return; } else { CloseForm(DialogResult.Cancel); return; }
@ -127,6 +124,19 @@ namespace Deckungsbeitrag
this.ResumeLayout(); this.ResumeLayout();
} }
private bool GetKunde(string kndService)
{
this.kunde = Funktionen.Open_List(kndService);
if (this.kunde == null) { CloseForm(DialogResult.Cancel); return false; }
this.textBoxKndNr.Text = kunde.KundeNummer;
this.kundeName = this.textBoxKundeName.Text = this.kunde.Suchtext ?? this.kunde.KundeName;
// Textboxen mit Kundedaten füllen
this.textBoxKundeName.Enabled = false;
this.textBoxKndNr.Enabled = false;
return true;
}
private void GetNextLiefertag() private void GetNextLiefertag()
{ {
DateTime nextLiefertag = DateTime.Today; DateTime nextLiefertag = DateTime.Today;
@ -226,11 +236,12 @@ namespace Deckungsbeitrag
List<Tour> tourliste = Tour.GetSaisonListe(saison); List<Tour> tourliste = Tour.GetSaisonListe(saison);
this.comboBoxFahrer.DataSource = tourliste; this.comboBoxFahrer.DataSource = tourliste;
this.comboBoxFahrer.DisplayMember = "Bezeichnung"; this.comboBoxFahrer.DisplayMember = "Bezeichnung";
this.comboBoxFahrer.ValueMember = "TourID";
this.comboBoxFahrer.DropDownWidth = GetDropDownWidth(this.comboBoxFahrer); this.comboBoxFahrer.DropDownWidth = GetDropDownWidth(this.comboBoxFahrer);
// ComboBox-Auswahl vordefinieren. // ComboBox-Auswahl vordefinieren.
if (this.benutzer.Rolle == BenutzerRolle.Fahrer) if (this.benutzer.Rolle == BenutzerRolle.Fahrer)
{ {
this.comboBoxFahrer.SelectedItem = tour; this.comboBoxFahrer.SelectedValue = tour.TourID;
} }
else this.comboBoxFahrer.SelectedIndex = -1; else this.comboBoxFahrer.SelectedIndex = -1;
this.comboBoxFahrer.Validating += ComboBoxFahrer_Validating; this.comboBoxFahrer.Validating += ComboBoxFahrer_Validating;
@ -326,7 +337,7 @@ namespace Deckungsbeitrag
do do
{ {
if (index > 0) if (MessageBox.Show("Bitte nur ganze Zahlen eingeben.", "ACHTUNG", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.Cancel) return; if (index > 0) if (MessageBox.Show("Bitte nur ganze Zahlen eingeben.", "ACHTUNG", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.Cancel) return;
anzahl = Interaction.InputBox($"Wieviel Stück sollen geliefert werden?\n\nStück:", "Artikelanzahl", ""); anzahl = Interaction.InputBox($"Wieviel Stück sollen geliefert oder eingezogen werden?\n\nStück:", "Artikelanzahl", "");
index++; index++;
} while (!int.TryParse(anzahl, out artAnzahl)); } while (!int.TryParse(anzahl, out artAnzahl));
@ -449,6 +460,8 @@ namespace Deckungsbeitrag
return; return;
case AuftragTyp.Regelmäßig: SpezialAuftragSpeichern(Auftrag); case AuftragTyp.Regelmäßig: SpezialAuftragSpeichern(Auftrag);
return; return;
case AuftragTyp.IST_Erhoehung: SpezialAuftragSpeichern(Auftrag);
return;
default: default:
break; break;
} }
@ -579,7 +592,7 @@ namespace Deckungsbeitrag
Rhythmus = this.comboBoxRhythmus.Enabled ? (RegRhythmen)this.comboBoxRhythmus.SelectedItem : RegRhythmen.Unbekannt, // Wenn Rhythmus ist nicht Enabled dann RegRhythmus Unbekannt. Rhythmus = this.comboBoxRhythmus.Enabled ? (RegRhythmen)this.comboBoxRhythmus.SelectedItem : RegRhythmen.Unbekannt, // Wenn Rhythmus ist nicht Enabled dann RegRhythmus Unbekannt.
TourID = selectedTour?.TourID, // Wenn Tour hinterlegt dann TourID speichern. TourID = selectedTour?.TourID, // Wenn Tour hinterlegt dann TourID speichern.
ArbeiterID = selectedTour?.BenutzerID, // Wenn Tour hinterlegt dann BenutzerID der Tour speichern. KANN AUCH null SEIN!! ArbeiterID = selectedTour?.BenutzerID, // Wenn Tour hinterlegt dann BenutzerID der Tour speichern. KANN AUCH null SEIN!!
Priority = selectedTour.Priority, // Wenn Tour hinterlegt dann Priority der Tour speichern. Priority = selectedTour == null ? Priority.None : selectedTour.Priority, // Wenn Tour hinterlegt dann Priority der Tour speichern.
ZusatzInfo = zusatz, ZusatzInfo = zusatz,
}; };
@ -677,7 +690,7 @@ namespace Deckungsbeitrag
if (this.benutzer.Rolle == BenutzerRolle.Fahrer) if (this.benutzer.Rolle == BenutzerRolle.Fahrer)
{ {
this.Auftrag = null; this.Auftrag = null;
DatenLaden(); DatenLaden(string.Empty);
} }
} }
@ -739,7 +752,7 @@ namespace Deckungsbeitrag
//this.Close(); // Onboarding beendet //this.Close(); // Onboarding beendet
} }
} }
private void textBoxText_VisibleChanged(object sender, EventArgs e) private void TextBoxText_VisibleChanged(object sender, EventArgs e)
{ {
if (textBoxText.Visible) if (textBoxText.Visible)
{ {

View File

@ -6,7 +6,7 @@
</sectionGroup> </sectionGroup>
</configSections> </configSections>
<appSettings> <appSettings>
<add key="ConnectionString" value="user id=msfrottee01;password=5KsA4BSf4P;host=10.10.10.1;port=5432;database=Wirl_DB_17012023;Timeout=15" /> <add key="ConnectionString" value="user id=postgres;password=Ki985941Wi;host=10.10.10.1;port=5432;database=Test_Wirl;Timeout=15" />
<add key="SortimentPfad" value="N:\\TECHNIK\\Software\\Wirl-Verwaltung\\Listen\\Kundensortiment.txt" /> <add key="SortimentPfad" value="N:\\TECHNIK\\Software\\Wirl-Verwaltung\\Listen\\Kundensortiment.txt" />
<add key="InventurPfad" value="N:\BÜRO\KUNDEN\INVENTUREN\Verwaltung" /> <add key="InventurPfad" value="N:\BÜRO\KUNDEN\INVENTUREN\Verwaltung" />
<add key="BildPfad" value="C:\\Users\\KilianWirl\\OneDrive - gehgassi GmbH\\Wäscherei Wirl\\Programme\\Deckungsbeitrag\\Deckungsbeitrag\\Star.png" /> <add key="BildPfad" value="C:\\Users\\KilianWirl\\OneDrive - gehgassi GmbH\\Wäscherei Wirl\\Programme\\Deckungsbeitrag\\Deckungsbeitrag\\Star.png" />

View File

@ -43,6 +43,7 @@ if (Test-Path $assemblyInfoPath) {
} }
# Dateien durchsuchen # Dateien durchsuchen
$changesList = @()
$openTodos = @() $openTodos = @()
$doneTodos = @() $doneTodos = @()
$installReminders = @() $installReminders = @()
@ -74,10 +75,39 @@ foreach ($file in $csFiles) {
} }
# CHANGES erkennen # CHANGES erkennen
$changeMatches = [regex]::Matches($content, '//\s*CHANGES\s*:?\s*(.+?)(?=\r?\n|//|$)', 'IgnoreCase') $pattern = '//\s*CHANGES\s*:?\s*(.+?)(?=\r?\n|//|$)'
$changeMatches = [regex]::Matches($content, $pattern, 'IgnoreCase')
foreach ($match in $changeMatches) { foreach ($match in $changeMatches) {
$txt = $match.Groups[1].Value.Trim() $txt = $match.Groups[1].Value.Trim()
if ($txt) { $changes += "$txt [$($file.Name)]" } if ($txt) {
$changesList += [PSCustomObject]@{
Datei = if ($file.Name.StartsWith("Form")) {
$file.Name.Substring(4)
} else {$file.Name}
Text = $txt
}
}
$markdownLines = @()
# Nach Class gruppieren, ClassNamen sortieren, dann pro Gruppe Text sortieren
$changesList |
Group-Object -Property Datei |
Sort-Object -Property Name |
ForEach-Object {
$datei = $_.Name
$markdownLines += "## $datei ##"
$markdownLines += ""
$_.Group |
Sort-Object -Property Text |
ForEach-Object {
$markdownLines += "- ✨ $($_.Text)"
}
$markdownLines += ""
}
} }
} }
@ -85,7 +115,6 @@ foreach ($file in $csFiles) {
$openTodos = $openTodos | Sort-Object | Get-Unique $openTodos = $openTodos | Sort-Object | Get-Unique
$doneTodos = $doneTodos | Sort-Object | Get-Unique $doneTodos = $doneTodos | Sort-Object | Get-Unique
$installReminders = $installReminders | Sort-Object | Get-Unique $installReminders = $installReminders | Sort-Object | Get-Unique
$changes = $changes | Sort-Object | Get-Unique
# Formatierte Abschnitte # Formatierte Abschnitte
$doneSection = if ($doneTodos.Count -gt 0) { $doneSection = if ($doneTodos.Count -gt 0) {
@ -109,9 +138,9 @@ $installSection = if ($installReminders.Count -gt 0) {
@("Keine Install-Reminder vorhanden ✅") @("Keine Install-Reminder vorhanden ✅")
} }
$changesSection = if ($changes.Count -gt 0) { $changesSection = if ($markdownLines.Count -gt 0) {
@("=== ✨ CHANGES ($($changes.Count)) ===") + @("=== ✨ CHANGES ($($markdownLines.Count)) ===") +
($changes | ForEach-Object { "- $_" }) ($markdownLines | ForEach-Object { "- $_" })
} else { } else {
@("Keine Changes vorhanden") @("Keine Changes vorhanden")
} }
@ -121,6 +150,7 @@ $doneText = $doneSection -join "`r`n"
$openText = $openSection -join "`r`n" $openText = $openSection -join "`r`n"
$installText = $installSection -join "`r`n" $installText = $installSection -join "`r`n"
$changesText = $changesSection -join "`r`n" $changesText = $changesSection -join "`r`n"
$markdown = $markdownLines -join "`n"
$custom = "Release Build" $custom = "Release Build"
$buildDate = Get-Date -Format "dd.MM.yyyy HH:mm" $buildDate = Get-Date -Format "dd.MM.yyyy HH:mm"
@ -136,9 +166,10 @@ Build-Info:
- Erledigte TODOs: $($doneTodos.Count) - Erledigte TODOs: $($doneTodos.Count)
- Offene TODOs: $($openTodos.Count) - Offene TODOs: $($openTodos.Count)
- Install-Reminders: $($installReminders.Count) - Install-Reminders: $($installReminders.Count)
- Changes: $($changes.Count) - Changes: $($changesList.Count)
$changesText === CHANGES ($($changesList.Count)) ===
$markdown
$installText $installText

View File

@ -157,6 +157,12 @@
</Reference> </Reference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="AA-Forms\CustomMessageBox.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="AA-Forms\CustomMessageBox.Designer.cs">
<DependentUpon>CustomMessageBox.cs</DependentUpon>
</Compile>
<Compile Include="AA-Forms\FehlmengeChart.cs"> <Compile Include="AA-Forms\FehlmengeChart.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>

View File

@ -7,38 +7,64 @@ Build-Info:
- Erledigte TODOs: 6 - Erledigte TODOs: 6
- Offene TODOs: 24 - Offene TODOs: 24
- Install-Reminders: 1 - Install-Reminders: 1
- Changes: 26 - Changes: 28
=== ✨ CHANGES (28) ===
## ArtikelVW.cs ##
- ✨ Reklamation als Spalte hinzugefügt und Anzeigen implementiert. Sowohl bei KundeArtikel als auch bei NW_Artikel.
## AuftragDetail.cs ##
- ✨ 1. Es wird ab sofort nur ein Button zum Speichern und Abschließen bereitgestellt. System entscheidet was getan wird.
- ✨ 2. Änderungen werden nur gespeichert wenn ein Etikett gedruckt wurde.
- ✨ 3. Abschließen nur möglich wenn alle Artikel auf 0 sind (Checked) und gespeichert wurde.
- ✨ Bei Druckabbruch wird die geänderte Zahl NICHT zurückgesetzt. (Das muss händisch erfolgen)
- ✨ Wenn die reduzierte Anzahl bei SOLL-Verminderung nicht negativ ist, wird diese negativ gemacht. So wird ein möglicher Fehler ausgebessert.
- ✨ Wenn die Zahlen zurückgesetzt werden sollen, muss AuftragDetail geschlossen werden.
## Expedit.cs ##
- ✨ Im Tab Rampe wird bei DoppelClick der Auftrag als gewaschen markiert und im Tab Aufträge heute sichtbar.
- ✨ Im Tab Vorbereitet wird beim Ändern der sauberen Containeranzahl gefragt ob die Etiketten neu gedruckt werden sollen.
- ✨ NumericUpDown markiert automatisch den Inhalt. Erleichtert die Eingabe.
- ✨ Wenn ein anderer Fahrer ausgewählt wird, wird auch die Priority laut dem Fahrer geändert.
- ✨ Wenn Expedit NeuerAuftrag aufruft wird gefragt welcher Auftrag gewünscht ist. Geschäftkunde = Geschäft (Notwendig bis ausschließlich Fahrer die Standardaufträge erstellen)
## Main.cs ##
- ✨ Artikelliste und Kundenliste werden automatisch importiert wenn vorhanden.
- ✨ Fahrer können abgeholte Aufträge erstellen und ausgelieferte Aufträge markieren.
## NeuerAuftrag.cs ##
- ✨ Auftrag LAUFZETTEL (ehem. Einmalig) läuft als Sonderauftrag also Tab-Sonderaufträge.
- ✨ Der Text des LAUFZETTELS wird bei Expedit im InfoFeld angezeigt.
- ✨ DropDownWidth wird an das größte Item angepasst.
- ✨ Es kann ab jetzt Morgen als Liefertag gewählt werden.
## Tourenplanung.cs ##
- ✨ Es kann nach der Kontrolle der Lieferrhythmus geändert werden. Dazu muss auch die Anzahl der Liefertage gewählt werden.
- ✨ Es können nur so viele Clone erstellt werden wie Liefertag im Lieferrhythmus hinterlegt sind.
- ✨ Es wir kontrolliert ob der gewählte Liefertag zum hinterlegten Lieferrhythmus passt.
- ✨ TabText wird mit Benutzerliste verglichen. Wenn ein passender gefunden wird Tag hinterlegt.
## UCInventur.cs ##
- ✨ Beim nachträglichen Ändern des Standes wird jetzt die Schwund-Spalte neu berechnet. Damit sollte die Berechnung wieder stimmen.
- ✨ Es wird jetzt nur ein Button "Speichern/Freigeben" bereitgestellt und dort dann gefragt ob speichern oder freigeben. Hier wird auch zwischen den Rollen unterschieden.
## UCTabPageLKW.cs ##
- ✨ Innerhalb eines Tages kann die Reihenfolge angepasst werden.
- ✨ Lieferrhythmen können angepasst und übernommen werden.
- ✨ Speichern und Laden wurde angepasst, JSON enthält jetzt pro Tag eine Kundenliste.
- ✨ Wenn der Lieferrhythmus geändert wird, werden KundenControls an falschen Tagen gelöscht.
=== ✨ CHANGES (26) ===
- ✨ 1. Es wird ab sofort nur ein Button zum Speichern und Abschließen bereitgestellt. System entscheidet was getan wird. [FormAuftragDetail.cs]
- ✨ 2. Änderungen werden nur gespeichert wenn ein Etikett gedruckt wurde. [FormAuftragDetail.cs]
- ✨ 3. Abschließen nur möglich wenn alle Artikel auf 0 sind (Checked) und gespeichert wurde. [FormAuftragDetail.cs]
- ✨ Artikelliste und Kundenliste werden automatisch importiert wenn vorhanden. [FormMain.cs]
- ✨ Auftrag LAUFZETTEL (ehem. Einmalig) läuft als Sonderauftrag also Tab-Sonderaufträge. [FormNeuerAuftrag.cs]
- ✨ Bei Druckabbruch wird die geänderte Zahl NICHT zurückgesetzt. (Das muss händisch erfolgen) [FormAuftragDetail.cs]
- ✨ Beim nachträglichen Ändern des Standes wird jetzt die Schwund-Spalte neu berechnet. Damit sollte die Berechnung wieder stimmen. [UCInventur.cs]
- ✨ Der Text des LAUFZETTELS wird bei Expedit im InfoFeld angezeigt. [FormNeuerAuftrag.cs]
- ✨ DropDownWidth wird an das größte Item angepasst. [FormNeuerAuftrag.cs]
- ✨ Es kann ab jetzt Morgen als Liefertag gewählt werden. [FormNeuerAuftrag.cs]
- ✨ Es kann nach der Kontrolle der Lieferrhythmus geändert werden. Dazu muss auch die Anzahl der Liefertage gewählt werden. [FormTourenplanung.cs]
- ✨ Es können nur so viele Clone erstellt werden wie Liefertag im Lieferrhythmus hinterlegt sind. [FormTourenplanung.cs]
- ✨ Es wir kontrolliert ob der gewählte Liefertag zum hinterlegten Lieferrhythmus passt. [FormTourenplanung.cs]
- ✨ Es wird jetzt nur ein Button "Speichern/Freigeben" bereitgestellt und dort dann gefragt ob speichern oder freigeben. Hier wird auch zwischen den Rollen unterschieden. [UCInventur.cs]
- ✨ Fahrer können abgeholte Aufträge erstellen und ausgelieferte Aufträge markieren. [FormMain.cs]
- ✨ Im Tab Rampe wird bei DoppelClick der Auftrag als gewaschen markiert und im Tab Aufträge heute sichtbar. [FormExpedit.cs]
- ✨ Im Tab Vorbereitet wird beim Ändern der sauberen Containeranzahl gefragt ob die Etiketten neu gedruckt werden sollen. [FormExpedit.cs]
- ✨ Innerhalb eines Tages kann die Reihenfolge angepasst werden. [UCTabPageLKW.cs]
- ✨ Lieferrhythmen können angepasst und übernommen werden. [UCTabPageLKW.cs]
- ✨ NumericUpDown markiert automatisch den Inhalt. Erleichtert die Eingabe. [FormExpedit.cs]
- ✨ Reklamation als Spalte hinzugefügt und Anzeigen implementiert. Sowohl bei KundeArtikel als auch bei NW_Artikel. [FormArtikelVW.cs]
- ✨ Speichern und Laden wurde angepasst, JSON enthält jetzt pro Tag eine Kundenliste. [UCTabPageLKW.cs]
- ✨ TabText wird mit Benutzerliste verglichen. Wenn ein passender gefunden wird Tag hinterlegt. [FormTourenplanung.cs]
- ✨ Wenn der Lieferrhythmus geändert wird, werden KundenControls an falschen Tagen gelöscht. [UCTabPageLKW.cs]
- ✨ Wenn die Zahlen zurückgesetzt werden sollen, muss AuftragDetail geschlossen werden. [FormAuftragDetail.cs]
- ✨ Wenn ein anderer Fahrer ausgewählt wird, wird auch die Priority laut dem Fahrer geändert. [FormExpedit.cs]
=== ⚙️ INSTALL-REMINDER (1) === === ⚙️ INSTALL-REMINDER (1) ===
- ⚙️ DB anpassen. (Priority in Auftrag etc.) [Auftrag.cs] - ⚙️ DB anpassen. (Priority in Auftrag etc.) [Auftrag.cs]
Installation: 24.04.2026 13:46 Installation: 24.04.2026 17:10
===================================== =====================================