Codehygiene

This commit is contained in:
Kilian Wirl 2026-04-21 09:02:20 +02:00
parent 15d3d99bc0
commit e67d73edf6
34 changed files with 1268 additions and 1270 deletions

View File

@ -61,10 +61,10 @@
this.objectListViewArtikel.UseCompatibleStateImageBehavior = false;
this.objectListViewArtikel.UseFiltering = true;
this.objectListViewArtikel.View = System.Windows.Forms.View.Details;
this.objectListViewArtikel.ButtonClick += new System.EventHandler<BrightIdeasSoftware.CellClickEventArgs>(this.objectListViewArtikel_ButtonClick);
this.objectListViewArtikel.CellEditFinished += new BrightIdeasSoftware.CellEditEventHandler(this.objectListViewArtikel_CellEditFinished);
this.objectListViewArtikel.CellEditStarting += new BrightIdeasSoftware.CellEditEventHandler(this.objectListViewArtikel_CellEditStarting);
this.objectListViewArtikel.Resize += new System.EventHandler(this.objectListViewArtikel_Resize);
this.objectListViewArtikel.ButtonClick += new System.EventHandler<BrightIdeasSoftware.CellClickEventArgs>(this.ObjectListViewArtikel_ButtonClick);
this.objectListViewArtikel.CellEditFinished += new BrightIdeasSoftware.CellEditEventHandler(this.ObjectListViewArtikel_CellEditFinished);
this.objectListViewArtikel.CellEditStarting += new BrightIdeasSoftware.CellEditEventHandler(this.ObjectListViewArtikel_CellEditStarting);
this.objectListViewArtikel.Resize += new System.EventHandler(this.ObjectListViewArtikel_Resize);
//
// fLPSuche
//
@ -85,7 +85,7 @@
this.comboBoxArtikel.Name = "comboBoxArtikel";
this.comboBoxArtikel.Size = new System.Drawing.Size(261, 33);
this.comboBoxArtikel.TabIndex = 0;
this.comboBoxArtikel.SelectedIndexChanged += new System.EventHandler(this.comboBoxArtikel_SelectedIndexChanged);
this.comboBoxArtikel.SelectedIndexChanged += new System.EventHandler(this.ComboBoxArtikel_SelectedIndexChanged);
//
// FormArtikelVW
//

View File

@ -18,9 +18,8 @@ namespace Deckungsbeitrag
{
public partial class FormArtikelVW : Form
{
private Benutzer user;
private readonly Benutzer user;
private List<Artikel> artikelList;
private List<ArtikelNachwaesche> artNWList;
private int dropdownWidth;
public FormArtikelVW()
{
@ -35,7 +34,7 @@ namespace Deckungsbeitrag
{
List<Artikel> artlist = Artikel.GetArtikelList("Nachwaesche");
this.comboBoxArtikel.SelectedIndexChanged -= comboBoxArtikel_SelectedIndexChanged;
this.comboBoxArtikel.SelectedIndexChanged -= ComboBoxArtikel_SelectedIndexChanged;
this.comboBoxArtikel.DataSource = artlist;
this.comboBoxArtikel.DisplayMember = "Bezeichnung";
foreach (Artikel art in artlist)
@ -45,7 +44,7 @@ namespace Deckungsbeitrag
}
this.comboBoxArtikel.DropDownWidth = dropdownWidth;
this.comboBoxArtikel.SelectedIndex = -1;
this.comboBoxArtikel.SelectedIndexChanged += comboBoxArtikel_SelectedIndexChanged;
this.comboBoxArtikel.SelectedIndexChanged += ComboBoxArtikel_SelectedIndexChanged;
OLV_Load_with_Artikel();
@ -64,7 +63,7 @@ namespace Deckungsbeitrag
Artikel art = (Artikel)item.RowObject;
sum += art.Nachwaesche;
}
group.Header = $"{group.Header} (Anzahl: {sum.ToString()})";
group.Header = $"{group.Header} (Anzahl: {sum})";
}
}
@ -115,7 +114,7 @@ namespace Deckungsbeitrag
//buttonColumn.ButtonSizing = OLVColumn.ButtonSizingMode.CellBounds;
}
OLV_ColumnsResize(this.objectListViewArtikel);
OLV_ColumnsResize();
}
/// <summary>
@ -143,27 +142,28 @@ namespace Deckungsbeitrag
KndArtID = kndart.KundeArtikelID,
KundeID = kndart.KundeID,
KndNummer = knd.KundeNummer,
Kunde = knd.Suchtext == null ? knd.KundeName : knd.Suchtext,
Nachwaesche = kndart.Fehlmenge
Kunde = knd.Suchtext ?? knd.KundeName,
Nachwaesche = kndart.Fehlmenge,
Reklamation = kndart.Reklamation
});
}
this.objectListViewArtikel.SetObjects(NWDataList);
this.objectListViewArtikel.Refresh();
OLV_ColumnsResize(this.objectListViewArtikel);
OLV_ColumnsResize();
this.ResumeLayout();
this.Cursor = Cursors.Default;
}
private void OLV_ColumnsResize(ObjectListView olv)
private void OLV_ColumnsResize()
{
this.objectListViewArtikel.FilterMenuBuildStrategy = new MeinFilterMenu();
this.objectListViewArtikel.Width = Funktionen.Columns_Resize(null, objectListViewArtikel).olv.Width + 20;
this.objectListViewArtikel.Refresh();
}
private void objectListViewArtikel_ButtonClick(object sender, CellClickEventArgs e)
private void ObjectListViewArtikel_ButtonClick(object sender, CellClickEventArgs e)
{
Artikel artikel = (Artikel)e.Model;
artikel.Nachwaesche = 0;
@ -171,7 +171,7 @@ namespace Deckungsbeitrag
if(artikel.Save() == 1) this.objectListViewArtikel.RefreshObject(e.Model);
}
private void objectListViewArtikel_AfterCreatingGroups(object sender, CreateGroupsEventArgs e)
private void ObjectListViewArtikel_AfterCreatingGroups(object sender, CreateGroupsEventArgs e)
{
foreach (OLVGroup group in this.objectListViewArtikel.OLVGroups)
{
@ -182,12 +182,12 @@ namespace Deckungsbeitrag
Artikel art = (Artikel)item.RowObject;
sum += art.Nachwaesche;
}
group.Header = $"{group.Header} (Anzahl: {sum.ToString()})";
group.Header = $"{group.Header} (Anzahl: {sum})";
}
}
private void objectListViewArtikel_CellEditFinished(object sender, CellEditEventArgs e)
private void ObjectListViewArtikel_CellEditFinished(object sender, CellEditEventArgs e)
{
OLVColumn col = e.Column;
DateTime timestamp = DateTime.Now.Date;
@ -249,13 +249,12 @@ namespace Deckungsbeitrag
this.objectListViewArtikel.RefreshObject(e.RowObject);
}
private void objectListViewArtikel_CellEditStarting(object sender, CellEditEventArgs e)
private void ObjectListViewArtikel_CellEditStarting(object sender, CellEditEventArgs e)
{
OLVColumn col = e.Column;
if (e.Control is NumericUpDown numeric) { numeric.Select(0, Text.Length); numeric.Focus(); }
}
#endregion
private void comboBoxArtikel_SelectedIndexChanged(object sender, EventArgs e)
private void ComboBoxArtikel_SelectedIndexChanged(object sender, EventArgs e)
{
ComboBox cb = sender as ComboBox;
Artikel art = cb.SelectedItem as Artikel;
@ -263,9 +262,10 @@ namespace Deckungsbeitrag
OLV_Load_with_Kunden(art);
}
private void objectListViewArtikel_Resize(object sender, EventArgs e)
private void ObjectListViewArtikel_Resize(object sender, EventArgs e)
{
this.ClientSize = new Size(this.objectListViewArtikel.Width + this.objectListViewArtikel.Left, this.ClientSize.Height);
}
}
}
//CHANGES: Reklamation als Spalte hinzugefügt und Anzeigen implementiert. Sowohl bei KundeArtikel als auch bei NW_Artikel.

View File

@ -105,7 +105,7 @@
this.labelContT5.Tag = "FR";
this.labelContT5.Text = "0";
this.labelContT5.TextAlign = System.Drawing.ContentAlignment.TopCenter;
this.labelContT5.DoubleClick += new System.EventHandler(this.labelCont_DoubleClick);
this.labelContT5.DoubleClick += new System.EventHandler(this.LabelCont_DoubleClick);
//
// labelContT4
//
@ -122,7 +122,7 @@
this.labelContT4.Tag = "DO";
this.labelContT4.Text = "0";
this.labelContT4.TextAlign = System.Drawing.ContentAlignment.TopCenter;
this.labelContT4.DoubleClick += new System.EventHandler(this.labelCont_DoubleClick);
this.labelContT4.DoubleClick += new System.EventHandler(this.LabelCont_DoubleClick);
//
// labelContT3
//
@ -139,7 +139,7 @@
this.labelContT3.Tag = "MI";
this.labelContT3.Text = "0";
this.labelContT3.TextAlign = System.Drawing.ContentAlignment.TopCenter;
this.labelContT3.DoubleClick += new System.EventHandler(this.labelCont_DoubleClick);
this.labelContT3.DoubleClick += new System.EventHandler(this.LabelCont_DoubleClick);
//
// labelContT2
//
@ -156,7 +156,7 @@
this.labelContT2.Tag = "DI";
this.labelContT2.Text = "0";
this.labelContT2.TextAlign = System.Drawing.ContentAlignment.TopCenter;
this.labelContT2.DoubleClick += new System.EventHandler(this.labelCont_DoubleClick);
this.labelContT2.DoubleClick += new System.EventHandler(this.LabelCont_DoubleClick);
//
// labelContT1
//
@ -173,7 +173,7 @@
this.labelContT1.Tag = "MO";
this.labelContT1.Text = "0";
this.labelContT1.TextAlign = System.Drawing.ContentAlignment.TopCenter;
this.labelContT1.DoubleClick += new System.EventHandler(this.labelCont_DoubleClick);
this.labelContT1.DoubleClick += new System.EventHandler(this.LabelCont_DoubleClick);
//
// fLP_T5
//
@ -324,7 +324,7 @@
this.textBoxScan.Name = "textBoxScan";
this.textBoxScan.Size = new System.Drawing.Size(268, 46);
this.textBoxScan.TabIndex = 25;
this.textBoxScan.TextChanged += new System.EventHandler(this.textBoxScan_TextChanged);
this.textBoxScan.TextChanged += new System.EventHandler(this.TextBoxScan_TextChanged);
//
// buttonCloseForm
//
@ -342,7 +342,7 @@
this.buttonCloseForm.TabIndex = 27;
this.buttonCloseForm.Text = "Schließen";
this.buttonCloseForm.UseVisualStyleBackColor = false;
this.buttonCloseForm.Click += new System.EventHandler(this.buttonCloseForm_Click);
this.buttonCloseForm.Click += new System.EventHandler(this.ButtonCloseForm_Click);
//
// labelVersion
//

View File

@ -16,26 +16,27 @@ using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Input;
namespace Deckungsbeitrag
{
public partial class FormAufleger : Form
{
private Dictionary<DateTime, List<Auftrag>> auftragliste;
private System.Windows.Forms.Timer timer;
private readonly System.Windows.Forms.Timer timer;
private Auftrag auftrag;
private Meldungen meldung = new Meldungen();
private readonly Meldungen meldung = new Meldungen();
private bool iswechsel = false;
private string userid;
private readonly string userid;
public FormAufleger()
{
InitializeComponent();
// Timer für Wartezeit bis TextChanged eintritt.
timer = new System.Windows.Forms.Timer();
timer.Interval = 700; // 0,7 Sekunden
timer = new System.Windows.Forms.Timer
{
Interval = 700 // 0,7 Sekunden
};
timer.Tick += Timer_Tick;
}
@ -119,8 +120,10 @@ namespace Deckungsbeitrag
int anzUCA = 0;
foreach (Auftrag auftrag in liste)
{
UCAuftrag uca = new UCAuftrag(auftrag);
uca.Tag = auftrag;
UCAuftrag uca = new UCAuftrag(auftrag)
{
Tag = auftrag
};
if (auftrag.Status == AuftragStatus.Aufgelegt)
{
@ -194,7 +197,7 @@ namespace Deckungsbeitrag
try
{
await conn.OpenAsync();
auftragliste = await Auftrag.GetAuftraegeProLiefertagAsync(conn, AuftragTyp.Standart, AuftragStatus.Aufgelegt);
auftragliste = await Auftrag.GetAuftraegeProLiefertagAsync(conn, AuftragStatus.Aufgelegt);
}
finally
{
@ -229,7 +232,7 @@ namespace Deckungsbeitrag
return base.ProcessDialogKey(keyData);
}
private void textBoxScan_TextChanged(object sender, EventArgs e)
private void TextBoxScan_TextChanged(object sender, EventArgs e)
{
// TextChanged tritt nur ein wenn x Sekunden keine Eingabe erfolgt. Logik befindet sich in Timer_Tick
timer.Stop(); // Alten Timer beenden
@ -285,7 +288,7 @@ namespace Deckungsbeitrag
}
private void SucheAuftrag()
{
this.textBoxScan.TextChanged -= textBoxScan_TextChanged;
this.textBoxScan.TextChanged -= TextBoxScan_TextChanged;
foreach (FlowLayoutPanel flp in this.tLPAuftrag.Controls.OfType<FlowLayoutPanel>())
{
@ -305,7 +308,7 @@ namespace Deckungsbeitrag
this.textBoxScan.Clear();
this.textBoxScan.Focus();
this.textBoxScan.TextChanged += textBoxScan_TextChanged;
this.textBoxScan.TextChanged += TextBoxScan_TextChanged;
}
private bool AuftragSpeichern()
{
@ -320,7 +323,7 @@ namespace Deckungsbeitrag
//if (auftrag == null) return;
//if (AuftragSpeichern() == false) e.Cancel = true;
}
private void buttonCloseForm_Click(object sender, EventArgs e)
private void ButtonCloseForm_Click(object sender, EventArgs e)
{
if (meldung.GetFrage(this, "Möchtest du das Programm wirklich schließen?", false) == DialogResult.No) return;
@ -333,7 +336,7 @@ namespace Deckungsbeitrag
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void labelCont_DoubleClick(object sender, EventArgs e)
private void LabelCont_DoubleClick(object sender, EventArgs e)
{
Label lbl = sender as Label;
double[] zeit = { 0, 0 };
@ -343,9 +346,8 @@ namespace Deckungsbeitrag
if (double.TryParse(lbl.Text, out double cont)) zeit[i-1] = (cont * 2.7 * 3.5) / 60 / i;
}
meldung.GetInfo(this, $"Die Waschzeiten für den gewünschten Tag lauten:\n\n[Eine Waschstraße] => {zeit[0].ToString("F1")} Stunden\n[Zwei Waschstraßen] => {zeit[1].ToString("F1")} Stunden", false);
meldung.GetInfo(this, $"Die Waschzeiten für den gewünschten Tag lauten:\n\n[Eine Waschstraße] => {zeit[0]:F1} Stunden\n[Zwei Waschstraßen] => {zeit[1]:F1} Stunden", false);
}
}
}
//CHANGES: Programm wird mit Button geschlossen. (Sicherheitsabfrage ob wirklich gewollt wird gemacht.)

View File

@ -15,7 +15,6 @@ using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Windows.Forms;
using System.Windows.Input;
using ZXing;
namespace Deckungsbeitrag
@ -496,16 +495,6 @@ namespace Deckungsbeitrag
/// UNUSED THINGS
/// </summary>
//RAHMEN UM FORM ZEICHNEN
private void FormAuftragDetail_Paint(object sender, PaintEventArgs e)
{
Graphics surface = CreateGraphics();
Pen pen1 = new Pen(Color.White, 5);
surface.DrawLine(pen1, 10, 215, this.buttonAbbrechen.Right + 15, 215);
surface.DrawRectangle(pen1, 10, 10, this.buttonAbbrechen.Right + 5, this.buttonAbbrechen.Bottom + 5);
}
//PRINT PAGE FÜR DRUCK
private void FormAuftragDetail_Shown(object sender, EventArgs e)
{
@ -654,7 +643,7 @@ namespace Deckungsbeitrag
}
}
//DONE: Korrigiere Bestand: Wenn -Zahl dann Stand - Zahl.
//TODO: Speichern etc. durchgehen und adaptieren
//DONE: Speichern etc. durchgehen und adaptieren
//DONE: Feedback Button hinzufügen
//DONE: ComboBox Fahrer und Priorität implementieren
//DONE: Container schmutzig bearbeitbar machen

View File

@ -59,9 +59,9 @@
this.objectListViewBenutzer.UseCompatibleStateImageBehavior = false;
this.objectListViewBenutzer.UseFiltering = true;
this.objectListViewBenutzer.View = System.Windows.Forms.View.Details;
this.objectListViewBenutzer.CellEditFinished += new BrightIdeasSoftware.CellEditEventHandler(this.objectListViewBenutzer_CellEditFinished);
this.objectListViewBenutzer.CellEditStarting += new BrightIdeasSoftware.CellEditEventHandler(this.objectListViewBenutzer_CellEditStarting);
this.objectListViewBenutzer.SubItemChecking += new System.EventHandler<BrightIdeasSoftware.SubItemCheckingEventArgs>(this.objectListViewBenutzer_SubItemChecking);
this.objectListViewBenutzer.CellEditFinished += new BrightIdeasSoftware.CellEditEventHandler(this.ObjectListViewBenutzer_CellEditFinished);
this.objectListViewBenutzer.CellEditStarting += new BrightIdeasSoftware.CellEditEventHandler(this.ObjectListViewBenutzer_CellEditStarting);
this.objectListViewBenutzer.SubItemChecking += new System.EventHandler<BrightIdeasSoftware.SubItemCheckingEventArgs>(this.ObjectListViewBenutzer_SubItemChecking);
//
// buttonNewUser
//
@ -78,7 +78,7 @@
this.buttonNewUser.Text = "Neuer User";
this.buttonNewUser.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
this.buttonNewUser.UseVisualStyleBackColor = false;
this.buttonNewUser.Click += new System.EventHandler(this.buttonNewUser_Click);
this.buttonNewUser.Click += new System.EventHandler(this.ButtonNewUser_Click);
//
// buttonAbbrechen
//
@ -96,7 +96,7 @@
this.buttonAbbrechen.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
this.buttonAbbrechen.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText;
this.buttonAbbrechen.UseVisualStyleBackColor = false;
this.buttonAbbrechen.Click += new System.EventHandler(this.buttonAbbrechen_Click);
this.buttonAbbrechen.Click += new System.EventHandler(this.ButtonAbbrechen_Click);
//
// buttonSpeichern
//

View File

@ -18,7 +18,7 @@ namespace Deckungsbeitrag
{
public Meldungen meldung = new Meldungen();
public Benutzer user;
private List<Benutzer> fahrerliste;
private readonly List<Benutzer> fahrerliste;
public FormBenutzerVW()
{
@ -33,7 +33,7 @@ namespace Deckungsbeitrag
private void FormBenutzerVW_Load(object sender, EventArgs e)
{
List<Benutzer> list = new List<Benutzer>();
List<Benutzer> list;
try
{
if (this.fahrerliste != null && this.fahrerliste.Count > 0) list = this.fahrerliste;
@ -55,28 +55,24 @@ namespace Deckungsbeitrag
}
/// <summary>
/// BUTTON CLICK EVENTS
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonNewUser_Click(object sender, EventArgs e)
{
FormNeuerBenutzer neuerBenutzer = new FormNeuerBenutzer();
neuerBenutzer.Show();
}
private void buttonAbbrechen_Click(object sender, EventArgs e)
{
this.Close();
}
private void Save_Benutzer(Benutzer benutzer, bool show)
{
if (benutzer.Save() == 1) if (show) meldung.Gespeichert();
else if (show) meldung.Speicherfehler();
}
#region ObjectListView-Funktionen
private void ButtonNewUser_Click(object sender, EventArgs e)
{
FormNeuerBenutzer neuerBenutzer = new FormNeuerBenutzer();
neuerBenutzer.Show();
}
private void ButtonAbbrechen_Click(object sender, EventArgs e)
{
this.Close();
}
private void Load_OLV(List<Benutzer> alist)
{
Generator.GenerateColumns(this.objectListViewBenutzer, typeof(Benutzer), true);
@ -95,12 +91,12 @@ namespace Deckungsbeitrag
this.objectListViewBenutzer = Funktionen.Columns_Resize(null, this.objectListViewBenutzer).olv;
}
private void objectListViewBenutzer_CellEditFinished(object sender, CellEditEventArgs e)
private void ObjectListViewBenutzer_CellEditFinished(object sender, CellEditEventArgs e)
{
Benutzer benutzer = (Benutzer)e.RowObject;
if(!string.IsNullOrWhiteSpace(e.NewValue.ToString())) Save_Benutzer(benutzer, false);
}
private void objectListViewBenutzer_SubItemChecking(object sender, SubItemCheckingEventArgs e)
private void ObjectListViewBenutzer_SubItemChecking(object sender, SubItemCheckingEventArgs e)
{
Benutzer benutzer = (Benutzer)e.RowObject;
if (benutzer.Aktiv) benutzer.Aktiv = false;
@ -108,15 +104,13 @@ namespace Deckungsbeitrag
Save_Benutzer(benutzer, false);
}
private void objectListViewBenutzer_CellEditStarting(object sender, CellEditEventArgs e)
private void ObjectListViewBenutzer_CellEditStarting(object sender, CellEditEventArgs e)
{
ObjectListView olv = (ObjectListView)sender;
user = e.RowObject as Benutzer;
if (user == null) return;
}
#endregion
}

View File

@ -228,8 +228,6 @@ namespace Deckungsbeitrag
}
}
}
private void ButtonReklamation_Click(object sender, EventArgs e)
{
FormFehlmengeCount reklamation = new FormFehlmengeCount(this.benutzer);
@ -333,8 +331,7 @@ namespace Deckungsbeitrag
{
aufgabeCol.ImageGetter = rowObject =>
{
var a = rowObject as View_Auftrag_Expedit;
if (a == null) return -1;
if (!(rowObject is View_Auftrag_Expedit a)) return -1;
return string.IsNullOrEmpty(a.AufgabeBezeichnung) ? -1 : 0;
};
}
@ -345,8 +342,7 @@ namespace Deckungsbeitrag
{
kundeCol.ImageGetter = rowObject =>
{
var a = rowObject as View_Auftrag_Expedit;
if (a == null) return -1;
if (!(rowObject is View_Auftrag_Expedit a)) return -1;
return string.IsNullOrEmpty(a.Zusatz) ? -1 : 1;
};
}
@ -389,6 +385,7 @@ namespace Deckungsbeitrag
fertigCol.ShowTextInHeader = false;
fertigCol.MinimumWidth = fertigCol.MaximumWidth = 80;
}
}
private void Olv_CellToolTipShowing(object sender, ToolTipShowingEventArgs e)
{
@ -889,18 +886,55 @@ namespace Deckungsbeitrag
/// <param name="e"></param>
private void ObjectListViewAuftrag_CellEditFinished(object sender, CellEditEventArgs e)
{
ObjectListView olv = (ObjectListView)sender;
this.auftrag = Auftrag.GetAuftrag(((View_Auftrag_Expedit)e.RowObject).AuftragID);
if (e.Column.Text == "sauber") altecontclean = (int?)e.Value;
if (!string.IsNullOrWhiteSpace(e.NewValue.ToString())) { this.auftrag.ContainerClean = (int)e.NewValue; Save_Auftrag(this.auftrag, false); }
var modelType = this.auftrag.GetType();
var propInfo = modelType.GetProperty(e.Column.AspectName);
if (this.auftrag.Status == AuftragStatus.Vorbereitet & e.Value != e.NewValue)
switch (e.Column.AspectName)
{
case var t when t == "ContainerClean":
{
altecontclean = (int?)e.Value;
if (e.Value != e.NewValue)
{
if (this.auftrag.Status <= AuftragStatus.Warten)
{
if (int.TryParse(e.NewValue.ToString(), out int i)) this.auftrag.ContainerClean = i;
else return;
if (this.auftrag.Status == AuftragStatus.Vorbereitet)
{
if (MessageBox.Show("Die Containeranzahl wurde verändert. Möchtest du die Etiketten nochmals drucken?", "FRAGE", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
Funktionen.Etikett_Drucken(this.auftrag, nocont);
}
}
//Neuladen_OLV(olv);
}
}
}
break;
case var t when t == "Fahrer":
{
if (e.NewValue != null)
{
this.auftrag.ArbeiterID = ((Benutzer)e.NewValue).BenutzerID;
this.auftrag.Priority = Funktionen.GetPriority((Benutzer)e.NewValue);
}
}
break;
default:
if (propInfo != null && e.NewValue != null)
{
// Dynamisch setzen
propInfo.SetValue(this.auftrag, Convert.ChangeType(e.NewValue, propInfo.PropertyType));
}
break;
}
Save_Auftrag(this.auftrag, false);
Neuladen_OLV(olv);
}
/// <summary>
@ -909,12 +943,12 @@ namespace Deckungsbeitrag
/// <param name="sender"></param>
/// <param name="e"></param>
private void ObjectListViewAuftrag_CellEditStarting(object sender, CellEditEventArgs e)
{
if (e.Column.AspectName == "KundeName")
{
ObjectListView olv = (ObjectListView)sender;
Auftrag _auftrag = Auftrag.GetAuftrag(((View_Auftrag_Expedit)e.RowObject).AuftragID);
if (e.Column.AspectName == "KundeName")
{
if (_auftrag == null) return;
Kunde _kunde = Kunde.GetKunde(null, _auftrag.KundeID, null);
@ -923,9 +957,42 @@ namespace Deckungsbeitrag
olv.RefreshObject(olv.SelectedObject);
e.Cancel = true;
return;
}
else if (meldung.GetFrage(this, $"Möchtest du die gewählte Zelle wirklich bearbeiten?", false) == DialogResult.No) e.Cancel = true;
else if (meldung.GetFrage(this, $"Möchtest du die gewählte Zelle wirklich bearbeiten?", false) == DialogResult.No) { e.Cancel = true; return; }
if (e.Column.AspectName == "Fahrer")
{
List<Benutzer> list = Benutzer.GetFahrerList();
ComboBox fahrer = new ComboBox
{
Bounds = e.CellBounds,
DropDownStyle = ComboBoxStyle.DropDownList,
DisplayMember = "BenutzerName",
DataSource = list
};
e.Control = fahrer;
}
if (e.Control is NumericUpDown num) num.Select(0, int.MaxValue);
}
/// <summary>
/// Satt Edit wird der Kunde als gewaschen markiert.
/// Solange Waschstraße nicht involviert, muss Expedit so die Aufträge in Aufträge heute bringen.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ObjectListViewRampe_CellEditStarting(object sender, CellEditEventArgs e)
{
ObjectListView olv = (ObjectListView)sender;
Auftrag _auftrag = Auftrag.GetAuftrag(((View_Auftrag_Expedit)e.RowObject).AuftragID);
if (_auftrag == null) return;
_auftrag.Status = AuftragStatus.Gewaschen;
_auftrag.Save();
Neuladen_OLV(olv);
e.Cancel = true;
}
#endregion
@ -1225,18 +1292,6 @@ namespace Deckungsbeitrag
//this.Close(); // Onboarding beendet
}
}
private void ObjectListViewRampe_CellEditStarting(object sender, CellEditEventArgs e)
{
ObjectListView olv = (ObjectListView)sender;
if (!(e.RowObject is Auftrag _auftrag)) return;
//Kunde _kunde = Kunde.GetKunde(null, _auftrag.KundeID, null);
_auftrag.Status = AuftragStatus.Gewaschen;
_auftrag.Save();
olv.RefreshObject(olv.SelectedObject);
e.Cancel = true;
}
private void ButtonNW_Click(object sender, EventArgs e)
{
FormArtikelVW artikelVW = new FormArtikelVW(this.benutzer);
@ -1244,4 +1299,7 @@ namespace Deckungsbeitrag
}
}
}
//CHANGES: Im Tap Vorbereitet wird beim Ändern der sauberen Containeranzahl gefragt ob die Etiketten neu gedruckt werden sollen.
//CHANGES: Im Tab Vorbereitet wird beim Ändern der sauberen Containeranzahl gefragt ob die Etiketten neu gedruckt werden sollen.
//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: NumericUpDown markiert automatisch den Inhalt. Erleichtert die Eingabe.

View File

@ -56,8 +56,8 @@
this.textBoxScann.Name = "textBoxScann";
this.textBoxScann.Size = new System.Drawing.Size(130, 31);
this.textBoxScann.TabIndex = 1;
this.textBoxScann.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textBoxScann_KeyDown);
this.textBoxScann.Leave += new System.EventHandler(this.textBoxScann_Leave);
this.textBoxScann.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TextBoxScann_KeyDown);
this.textBoxScann.Leave += new System.EventHandler(this.TextBoxScann_Leave);
//
// labelSuchtext
//
@ -81,7 +81,7 @@
this.buttonFertig.TabIndex = 3;
this.buttonFertig.Text = "Kunde Fertig";
this.buttonFertig.UseVisualStyleBackColor = false;
this.buttonFertig.Click += new System.EventHandler(this.buttonFertig_Click);
this.buttonFertig.Click += new System.EventHandler(this.ButtonFertig_Click);
//
// labelName
//

View File

@ -25,11 +25,11 @@ namespace Deckungsbeitrag
Kunde kunde;
Auftrag auftrag;
List<KundeArtikel> artikelListe;
Meldungen meldung = new Meldungen();
private Benutzer benutzer;
readonly Meldungen meldung = new Meldungen();
private readonly Benutzer benutzer;
private List<object> auftragsliste;
private ArtikelKategorie kategorie;
string userid;
readonly string userid;
#region Form-Konstruktor
@ -114,7 +114,7 @@ namespace Deckungsbeitrag
if (kunde.Aufgabe != null)
{
string n = kunde.Suchtext == null ? kunde.KundeName : kunde.Suchtext;
string n = kunde.Suchtext ?? kunde.KundeName;
meldung.GetInfo(this, $"Bei Kunde {n} solltest du folgendes beachten: {Aufgabe.GetAufgabe(null, kunde.Aufgabe).Bezeichnung}", false);
}
}
@ -387,7 +387,7 @@ namespace Deckungsbeitrag
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonFertig_Click(object sender, EventArgs e)
private void ButtonFertig_Click(object sender, EventArgs e)
{
// Controls werden durchgegangen und ausgeblendet oder der Text entfernt.
@ -470,7 +470,7 @@ namespace Deckungsbeitrag
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void textBoxScann_Leave(object sender, EventArgs e)
private void TextBoxScann_Leave(object sender, EventArgs e)
{
// Kundennummer wird ausgelesen und Kunde aus DB geholt. Form_Load wird danach ausgelöst
if (this.kunde == null)
@ -479,12 +479,12 @@ namespace Deckungsbeitrag
ControlLaden();
}
}
private void textBoxScann_KeyDown(object sender, KeyEventArgs e)
private void TextBoxScann_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
// Leave-Ereignis manuell ausführen
textBoxScann_Leave(sender, EventArgs.Empty);
TextBoxScann_Leave(sender, EventArgs.Empty);
// Fokus auf das nächste Steuerelement verschieben
//this.SelectNextControl((Control)sender, true, true, true, true);
@ -502,16 +502,14 @@ namespace Deckungsbeitrag
/// <param name="e"></param>
private void Button_MouseUp(object sender, MouseEventArgs e)
{
Button btn = sender as Button;
if (btn != null)
if (sender is Button btn)
{
btn.BackColor = Color.Turquoise; // Gewünschte Farbe beim MouseUp
}
}
private void Button_MouseDown(object sender, MouseEventArgs e)
{
Button btn = sender as Button;
if (btn != null)
if (sender is Button btn)
{
btn.BackColor = Color.LightSeaGreen; // Gewünschte Farbe beim MouseDown
}
@ -521,36 +519,25 @@ namespace Deckungsbeitrag
// Beim geklickten Artikel wird Fehlmenge erhöht
Button btn = (Button)sender;
KundeArtikel kndart = (KundeArtikel)btn.Tag;
if ((userid != null && userid.Contains("reklamation")) || (this.benutzer != null && this.benutzer.Rolle == BenutzerRolle.Expedit)) kndart.Reklamation++;
else kndart.Fehlmenge++;
// Wenn speichern nicht möglich, wird darauf hingewiesen.
if (kndart.Save() != 1) meldung.FehlmengeCount();
else
{
DateTime timestamp = DateTime.Now.Date;
ArtikelNachwaesche artnw = ArtikelNachwaesche.FindeDatensatz(kndart.ArtikelID, timestamp);
if (artnw.NachwaescheID != null) artnw.Nachwaesche++;
else
if (artnw.NachwaescheID == null)
{
artnw = new ArtikelNachwaesche()
{
ArtikelID = kndart.ArtikelID,
Datum = timestamp,
Nachwaesche = 1
Nachwaesche = 0,
Reklamation = 0
};
}
artnw.Save();
}
}
if ((userid != null && userid.Contains("reklamation")) || (this.benutzer != null && this.benutzer.Rolle == BenutzerRolle.Expedit)) { kndart.Reklamation++; artnw.Reklamation++; }
else { kndart.Fehlmenge++; artnw.Nachwaesche++; }
// Wenn speichern nicht möglich, wird darauf hingewiesen.
if (kndart.Save() != 1 || artnw.Save() != 1) meldung.FehlmengeCount();
}
}
//TODO: Wenn Frottee-Expedit auch Relamation bearbeitet, muss BenutzerRolle abgefragt werden. siehe CHANGES.
//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.
}
//DONE: Wenn Frottee-Expedit auch Reklamation bearbeitet, muss BenutzerRolle abgefragt werden. siehe CHANGES.

View File

@ -604,5 +604,3 @@ namespace Deckungsbeitrag
}
}
}
//INSTALL-REMINDER: Tabelle KundeArtikel Spalten ArtikelID und Reihung hinzufügen.
//CHANGES: KundeArtikel wird mit Reihung gespeichert und angezeigt.

View File

@ -67,8 +67,8 @@ namespace Deckungsbeitrag
this.listViewKunde.TabIndex = 1;
this.listViewKunde.UseCompatibleStateImageBehavior = false;
this.listViewKunde.View = System.Windows.Forms.View.Details;
this.listViewKunde.KeyDown += new System.Windows.Forms.KeyEventHandler(this.listViewKunde_KeyDown);
this.listViewKunde.MouseClick += new System.Windows.Forms.MouseEventHandler(this.listViewKunde_MouseClick);
this.listViewKunde.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ListViewKunde_KeyDown);
this.listViewKunde.MouseClick += new System.Windows.Forms.MouseEventHandler(this.ListViewKunde_MouseClick);
//
// columnHeader1
//
@ -97,10 +97,10 @@ namespace Deckungsbeitrag
this.textBoxKunde.Size = new System.Drawing.Size(120, 26);
this.textBoxKunde.TabIndex = 0;
this.textBoxKunde.Text = "Hier eingeben";
this.textBoxKunde.TextChanged += new System.EventHandler(this.textBoxKunde_TextChanged);
this.textBoxKunde.TextChanged += new System.EventHandler(this.TextBoxKunde_TextChanged);
this.textBoxKunde.Enter += new System.EventHandler(this.TextBoxKunde_Enter);
this.textBoxKunde.KeyDown += new System.Windows.Forms.KeyEventHandler(this.listViewKunde_KeyDown);
this.textBoxKunde.Leave += new System.EventHandler(this.textBoxKunde_Leave);
this.textBoxKunde.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ListViewKunde_KeyDown);
this.textBoxKunde.Leave += new System.EventHandler(this.TextBoxKunde_Leave);
//
// label1
//
@ -127,7 +127,7 @@ namespace Deckungsbeitrag
this.buttonOK.TabIndex = 15;
this.buttonOK.Text = "Kunde übernehmen";
this.buttonOK.UseVisualStyleBackColor = false;
this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click);
this.buttonOK.Click += new System.EventHandler(this.ButtonOK_Click);
//
// buttonNeuerAuftrag
//
@ -144,7 +144,7 @@ namespace Deckungsbeitrag
this.buttonNeuerAuftrag.TabIndex = 16;
this.buttonNeuerAuftrag.Text = "Neuer Auftrag";
this.buttonNeuerAuftrag.UseVisualStyleBackColor = false;
this.buttonNeuerAuftrag.Click += new System.EventHandler(this.buttonNeuerAuftrag_Click);
this.buttonNeuerAuftrag.Click += new System.EventHandler(this.ButtonNeuerAuftrag_Click);
//
// FormListe
//

View File

@ -31,16 +31,16 @@ namespace Deckungsbeitrag
public Benutzer benutzer;
public Auftrag auftrag;
private List<Kunde> Kundenliste;
private List<Auftrag> Auftragliste;
private List<Auftrag> Finishingliste;
private Meldungen meldung = new Meldungen();
int type_of_list;
string ben_col = "Vorname,Nachname,Benutzername,Rolle,Schein,Gueltig bis,Aktiv";
string knd_col = "KundenNr,Suchtext,KundenName,Ort";
string auf_col = "Aufgabe,Beschreibung";
string auftrag_col = "Kunde,Liefertag,Container";
private readonly List<Auftrag> Auftragliste;
private readonly List<Auftrag> Finishingliste;
private readonly Meldungen meldung = new Meldungen();
readonly int type_of_list;
readonly string ben_col = "Vorname,Nachname,Benutzername,Rolle,Schein,Gueltig bis,Aktiv";
readonly string knd_col = "KundenNr,Suchtext,KundenName,Ort";
readonly string auf_col = "Aufgabe,Beschreibung";
readonly string auftrag_col = "Kunde,Liefertag,Container";
private Timer timer;
private string kndService;
private readonly string kndService;
#region Form-Konstruktor
@ -74,13 +74,15 @@ namespace Deckungsbeitrag
private void FormListe_Load(object sender, EventArgs e)
{
// Timer für Wartezeit bis TextChanged eintritt.
timer = new Timer();
timer.Interval = 700; // 0,7 Sekunden
timer = new Timer
{
Interval = 700 // 0,7 Sekunden
};
timer.Tick += Timer_Tick;
this.buttonOK.Visible = this.buttonOK.Enabled = false;
listViewKunde_Load();
ListViewKunde_Load();
this.textBoxKunde.Focus();
this.CenterToScreen();
@ -90,7 +92,7 @@ namespace Deckungsbeitrag
this.CenterToScreen();
}
private void listViewKunde_Load()
private void ListViewKunde_Load()
{
//LISTE LEEREN
this.listViewKunde.Items.Clear();
@ -99,14 +101,16 @@ namespace Deckungsbeitrag
//SWITCH NACH LISTENTYP
switch (type_of_list)
{
case var kndliste when type_of_list == (int)Listentyp.Kundenliste:
case var _ when type_of_list == (int)Listentyp.Kundenliste:
{
//SPALTEN ERSTELLEN UND EINFÜGEN
string[] colname = knd_col.Split(',');
foreach (string s in colname)
{
ColumnHeader ch = new ColumnHeader();
ch.Text = s;
ColumnHeader ch = new ColumnHeader
{
Text = s
};
this.listViewKunde.Columns.Add(ch);
}
@ -136,27 +140,31 @@ namespace Deckungsbeitrag
this.buttonNeuerAuftrag.Visible = this.buttonNeuerAuftrag.Enabled = false;
}
break;
case var aufliste when type_of_list == (int)Listentyp.Aufgabenliste:
case var _ when type_of_list == (int)Listentyp.Aufgabenliste:
{
string[] colname = auf_col.Split(',');
foreach (string s in colname)
{
ColumnHeader ch = new ColumnHeader();
ch.Text = s;
ColumnHeader ch = new ColumnHeader
{
Text = s
};
this.listViewKunde.Columns.Add(ch);
}
}
break;
case var benliste when type_of_list == (int)Listentyp.Benutzerliste:
case var _ when type_of_list == (int)Listentyp.Benutzerliste:
{
this.textBoxKunde.Visible = this.label1.Visible = false;
this.buttonNeuerAuftrag.Visible = true;
string[] colname = ben_col.Split(',');
foreach (string s in colname)
{
ColumnHeader ch = new ColumnHeader();
ch.Text = s;
ColumnHeader ch = new ColumnHeader
{
Text = s
};
this.listViewKunde.Columns.Add(ch);
}
@ -164,9 +172,11 @@ namespace Deckungsbeitrag
this.Text = "BENUTZER WÄHLEN";
foreach(Benutzer b in Benutzer.GetList())
{
ListViewItem item = new ListViewItem();
item.Tag = b;
item.Text = b.Vorname;
ListViewItem item = new ListViewItem
{
Tag = b,
Text = b.Vorname
};
item.SubItems.Add(b.Nachname);
item.SubItems.Add(b.BenutzerName);
item.SubItems.Add(b.Rolle.ToString());
@ -178,20 +188,24 @@ namespace Deckungsbeitrag
}
}
break;
case var auftragliste when type_of_list == (int)Listentyp.Auftragliste:
case var _ when type_of_list == (int)Listentyp.Auftragliste:
string[] col = auftrag_col.Split(',');
foreach(string s in col)
{
ColumnHeader ch = new ColumnHeader();
ch.Text = s;
ColumnHeader ch = new ColumnHeader
{
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;
ListViewItem item = new ListViewItem
{
Tag = auftrag,
Text = auftrag.Kundename
};
item.SubItems.Add(auftrag.Liefertag.ToString("ddd dd.MM"));
item.SubItems.Add(auftrag.Container.ToString());
@ -208,13 +222,15 @@ namespace Deckungsbeitrag
this.buttonNeuerAuftrag.Visible = this.buttonNeuerAuftrag.Enabled = false;
break;
case var finishliste when type_of_list == (int)Listentyp.Finishingliste:
case var _ when type_of_list == (int)Listentyp.Finishingliste:
//SPALTEN ERSTELLEN UND EINFÜGEN
string[] colname1 = knd_col.Split(',');
foreach (string s in colname1)
{
ColumnHeader ch = new ColumnHeader();
ch.Text = s;
ColumnHeader ch = new ColumnHeader
{
Text = s
};
this.listViewKunde.Columns.Add(ch);
}
@ -224,9 +240,11 @@ namespace Deckungsbeitrag
{
Kunde knd = Kunde.GetKunde(null, a.KundeID, null);
ListViewItem item = new ListViewItem();
item.Tag = a;
item.Text = knd.KundeNummer;
ListViewItem item = new ListViewItem
{
Tag = a,
Text = knd.KundeNummer
};
item.SubItems.Add(knd.Suchtext);
item.SubItems.Add(knd.KundeName);
item.SubItems.Add(knd.Ort);
@ -242,14 +260,16 @@ namespace Deckungsbeitrag
this.buttonNeuerAuftrag.Visible = this.buttonNeuerAuftrag.Enabled = false;
break;
case var reklamationliste when type_of_list == (int)Listentyp.Reklamationliste:
case var _ when type_of_list == (int)Listentyp.Reklamationliste:
{
//SPALTEN ERSTELLEN UND EINFÜGEN
string[] colname = knd_col.Split(',');
foreach (string s in colname)
{
ColumnHeader ch = new ColumnHeader();
ch.Text = s;
ColumnHeader ch = new ColumnHeader
{
Text = s
};
this.listViewKunde.Columns.Add(ch);
}
@ -258,9 +278,11 @@ namespace Deckungsbeitrag
if (this.Kundenliste == null) this.Kundenliste = Kunde.GetReklamationListe("Miete");
foreach (Kunde kunde in this.Kundenliste)
{
ListViewItem item = new ListViewItem();
item.Tag = kunde;
item.Text = kunde.KundeNummer;
ListViewItem item = new ListViewItem
{
Tag = kunde,
Text = kunde.KundeNummer
};
item.SubItems.Add(kunde.Suchtext);
item.SubItems.Add(kunde.KundeName);
item.SubItems.Add(kunde.Ort);
@ -280,12 +302,12 @@ namespace Deckungsbeitrag
default:
break;
}
listViewKunde_Design();
ListViewKunde_Design();
//Funktionen.Columns_Resize(this.listViewKunde);
//this.Size = new Size(this.listViewKunde.Width + 70, this.Height);
}
private void listViewKunde_Design()
private void ListViewKunde_Design()
{
int lvwWidth = 0;
this.listViewKunde.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
@ -310,7 +332,7 @@ namespace Deckungsbeitrag
//GetKeyboard();
}
private void textBoxKunde_TextChanged(object sender, EventArgs e)
private void TextBoxKunde_TextChanged(object sender, EventArgs e)
{
// TextChanged tritt nur ein wenn x Sekunden keine Eingabe erfolgt. Logik befindet sich in Timer_Tick
timer.Stop(); // Alten Timer beenden
@ -319,26 +341,25 @@ namespace Deckungsbeitrag
private void Timer_Tick(object sender, EventArgs e)
{
timer.Stop(); // Timer stoppen
string text = string.Empty;
if (string.IsNullOrEmpty(textBoxKunde.Text)) { return; }
// Wenn kein Fragezeichen am Anfang wird Kundenliste erstellt.
if (!textBoxKunde.Text.StartsWith("?"))
{
string text;
if (textBoxKunde.Text.StartsWith("http"))
{
int index = 1;
int i = 0;
index += textBoxKunde.Text.IndexOf("=", index);
i = textBoxKunde.Text.IndexOf("%", index);
int i = textBoxKunde.Text.IndexOf("%", index);
text = textBoxKunde.Text.Substring(index, i - index);
textBoxKunde.Text = text;
}
else text = this.textBoxKunde.Text;
this.Kundenliste = Kunde.GetTmpList(text, this.kndService);
listViewKunde_Load();
ListViewKunde_Load();
return;
}
@ -351,7 +372,7 @@ namespace Deckungsbeitrag
}
}
private void listViewKunde_MouseClick(object sender, MouseEventArgs e)
private void ListViewKunde_MouseClick(object sender, MouseEventArgs e)
{
ListViewItem item = this.listViewKunde.GetItemAt(e.X, e.Y);
@ -385,7 +406,7 @@ namespace Deckungsbeitrag
break;
}
}
private void listViewKunde_KeyDown(object sender, KeyEventArgs e)
private void ListViewKunde_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
@ -425,7 +446,7 @@ namespace Deckungsbeitrag
}
e.Handled = true;
textBoxKunde_Leave(this, e);
TextBoxKunde_Leave(this, e);
this.DialogResult = DialogResult.OK;
this.Close();
}
@ -436,7 +457,7 @@ namespace Deckungsbeitrag
}
}
private void buttonOK_Click(object sender, EventArgs e)
private void ButtonOK_Click(object sender, EventArgs e)
{
this.kunde = Kunde.GetKunde("2320000", null, null);
this.kunde.Suchtext = this.textBoxKunde.Text.Substring(1);
@ -445,7 +466,7 @@ namespace Deckungsbeitrag
this.DialogResult = DialogResult.OK;
this.Close();
}
private void textBoxKunde_Leave(object sender, EventArgs e)
private void TextBoxKunde_Leave(object sender, EventArgs e)
{
// Alle gestarteten Instanzen von TabTip.exe (Touch Tastatur) schließen
@ -462,7 +483,7 @@ namespace Deckungsbeitrag
}
}
}
private void buttonNeuerAuftrag_Click(object sender, EventArgs e)
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)
{

View File

@ -750,7 +750,7 @@ namespace Deckungsbeitrag
this.groupBoxContAnz.Controls.Add(this.tLPContAnz);
this.groupBoxContAnz.Enabled = false;
this.groupBoxContAnz.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(1)))), ((int)(((byte)(53)))), ((int)(((byte)(101)))));
this.groupBoxContAnz.Location = new System.Drawing.Point(375, 224);
this.groupBoxContAnz.Location = new System.Drawing.Point(558, 311);
this.groupBoxContAnz.Margin = new System.Windows.Forms.Padding(4);
this.groupBoxContAnz.Name = "groupBoxContAnz";
this.groupBoxContAnz.Padding = new System.Windows.Forms.Padding(4);
@ -818,7 +818,7 @@ namespace Deckungsbeitrag
this.label14.Dock = System.Windows.Forms.DockStyle.Right;
this.label14.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label14.ForeColor = System.Drawing.SystemColors.ControlText;
this.label14.Location = new System.Drawing.Point(417, 222);
this.label14.Location = new System.Drawing.Point(306, 222);
this.label14.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label14.Name = "label14";
this.label14.Size = new System.Drawing.Size(54, 37);
@ -874,7 +874,7 @@ namespace Deckungsbeitrag
this.label5.Dock = System.Windows.Forms.DockStyle.Right;
this.label5.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label5.ForeColor = System.Drawing.SystemColors.ControlText;
this.label5.Location = new System.Drawing.Point(421, 185);
this.label5.Location = new System.Drawing.Point(310, 185);
this.label5.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(50, 37);
@ -930,7 +930,7 @@ namespace Deckungsbeitrag
this.labelZeit52.Dock = System.Windows.Forms.DockStyle.Right;
this.labelZeit52.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.labelZeit52.ForeColor = System.Drawing.SystemColors.ControlText;
this.labelZeit52.Location = new System.Drawing.Point(421, 148);
this.labelZeit52.Location = new System.Drawing.Point(310, 148);
this.labelZeit52.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.labelZeit52.Name = "labelZeit52";
this.labelZeit52.Size = new System.Drawing.Size(50, 37);
@ -944,7 +944,7 @@ namespace Deckungsbeitrag
this.labelZeit42.Dock = System.Windows.Forms.DockStyle.Right;
this.labelZeit42.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.labelZeit42.ForeColor = System.Drawing.SystemColors.ControlText;
this.labelZeit42.Location = new System.Drawing.Point(421, 111);
this.labelZeit42.Location = new System.Drawing.Point(310, 111);
this.labelZeit42.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.labelZeit42.Name = "labelZeit42";
this.labelZeit42.Size = new System.Drawing.Size(50, 37);
@ -958,7 +958,7 @@ namespace Deckungsbeitrag
this.labelZeit32.Dock = System.Windows.Forms.DockStyle.Right;
this.labelZeit32.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.labelZeit32.ForeColor = System.Drawing.SystemColors.ControlText;
this.labelZeit32.Location = new System.Drawing.Point(421, 74);
this.labelZeit32.Location = new System.Drawing.Point(310, 74);
this.labelZeit32.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.labelZeit32.Name = "labelZeit32";
this.labelZeit32.Size = new System.Drawing.Size(50, 37);
@ -972,7 +972,7 @@ namespace Deckungsbeitrag
this.labelZeit22.Dock = System.Windows.Forms.DockStyle.Right;
this.labelZeit22.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.labelZeit22.ForeColor = System.Drawing.SystemColors.ControlText;
this.labelZeit22.Location = new System.Drawing.Point(421, 37);
this.labelZeit22.Location = new System.Drawing.Point(310, 37);
this.labelZeit22.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.labelZeit22.Name = "labelZeit22";
this.labelZeit22.Size = new System.Drawing.Size(50, 37);
@ -989,7 +989,7 @@ namespace Deckungsbeitrag
this.labelZeit12.Location = new System.Drawing.Point(306, 0);
this.labelZeit12.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.labelZeit12.Name = "labelZeit12";
this.labelZeit12.Size = new System.Drawing.Size(165, 37);
this.labelZeit12.Size = new System.Drawing.Size(54, 37);
this.labelZeit12.TabIndex = 15;
this.labelZeit12.Text = "2";
this.labelZeit12.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
@ -1195,7 +1195,7 @@ namespace Deckungsbeitrag
this.groupBoxSaison.Controls.Add(this.comboBoxSaison);
this.groupBoxSaison.Enabled = false;
this.groupBoxSaison.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(1)))), ((int)(((byte)(53)))), ((int)(((byte)(101)))));
this.groupBoxSaison.Location = new System.Drawing.Point(294, 408);
this.groupBoxSaison.Location = new System.Drawing.Point(558, 224);
this.groupBoxSaison.Margin = new System.Windows.Forms.Padding(4);
this.groupBoxSaison.Name = "groupBoxSaison";
this.groupBoxSaison.Padding = new System.Windows.Forms.Padding(4);

View File

@ -25,7 +25,6 @@ using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Input;
using System.Xml.Serialization;
using ZXing.Common;
using Timer = System.Windows.Forms.Timer;
@ -99,8 +98,12 @@ namespace Deckungsbeitrag
this.labelSoftwareDatum.Text = @"N:\TECHNIK\Software\Wirl-Verwaltung\Setup\SetupVerwaltung*.msi";
this.labelArtikelDatum.Text = @"N:\TECHNIK\Software\Wirl-Verwaltung\Listen\Artikelkurzliste.csv";
if (this.benutzer.Rolle == BenutzerRolle.Admin || this.benutzer.Rolle == BenutzerRolle.Verwaltung || this.benutzer.Rolle == BenutzerRolle.Master) GetInventuren();
// Inventuren sind ausschließlich für Admin, Verwaltung oder Master sichtbar.
if (this.benutzer.Rolle == BenutzerRolle.Admin || this.benutzer.Rolle == BenutzerRolle.Verwaltung || this.benutzer.Rolle == BenutzerRolle.Master)
{
GetInventuren();
GetSaison();
}
if (this.groupBoxContAnz.Visible)
{
@ -1108,9 +1111,8 @@ namespace Deckungsbeitrag
this.panelMain.Controls.Add(uCInventur);
}
Get_UCInventur_Location();
//Get_UCInventur_Location();
}
private void Do_UCInventur_Delete()
{
this.panelMain.Controls.Remove(uCInventur);
@ -1119,16 +1121,14 @@ namespace Deckungsbeitrag
private void Get_UCInventur_Location()
{
// UCInventur in den Vordergrund bringen und Location setzen.
int y = 0;
int x = 0;
if (!formloading) y = panelMain.Controls["feedback"].Top;
int y = panelMain.Controls["feedback"].Bottom + 10;
foreach (UCInventur uci in panelMain.Controls.OfType<UCInventur>())
{
if (!formloading) x = panelMain.Controls["feedback"].Left - uCInventur.Width - 10;
int x = panelMain.Width - uCInventur.Width - 10;
uci.Visible = true;
uci.BringToFront();
uci.Location = new Point(x, y);
y += uci.Height;
uci.Visible = true;
}
}
@ -1317,7 +1317,7 @@ namespace Deckungsbeitrag
try
{
await conn.OpenAsync();
auftragliste = await Auftrag.GetAuftraegeProLiefertagAsync(conn, AuftragTyp.Standart, AuftragStatus.Aufgelegt);
auftragliste = await Auftrag.GetAuftraegeProLiefertagAsync(conn, AuftragStatus.Aufgelegt);
//TODO: nicht ganze Aufträge holen sondern nur die Zahlen?
}
finally
@ -1469,21 +1469,9 @@ namespace Deckungsbeitrag
textBox1.Width = (int)size.Width + 10; // +10 als Puffer
}
}
private void buttonTestInventur_Click(object sender, EventArgs e)
{
FormShowUserControl showUserControl = new FormShowUserControl("Tourenplan", this.benutzer);
showUserControl.ShowDialog();
var data = showUserControl.lieferDaten;
MessageBox.Show($"{data.datum} {data.text}", "Test", MessageBoxButtons.OK);
}
}
}
//CHANGES: Fahrer können abgeholte Aufträge erstellen und ausgelieferte Aufträge markieren.
//CHANGES: Artikelliste und Kundenliste werden automatisch importiert wenn vorhanden.
//TODO: Dateinamen aus Tikos anschauen. Eventuell Datum von letztem Import über Dateiname wählen?
//TODO: JSON nach angemeldeten Fahrer durchsuchen und Kundenliste des aktuellen Wochentag anzeigen.
//TODO: Auftrag Schnellerfassung erstellen. Kundenliste aus JSON in OLV einfügen wenn schmutzig > 0 dann Auftrag erstellen. Spalten: "Kunde, schmutzig, liefertag, zustellfahrer" evnetuell in AuftragVW?
//DONE: HILFE zeigt OnBoarding.
//DONE: Auftragliste bei Fahrer anzeigen wenn Login.
//DONE: Wenn RegAuftrag wird als augeliefert markiert, wird dieser automatisch neu erstellt laut hinterlegtem Rhythmus.
//DONE: JSON nach angemeldeten Fahrer durchsuchen und Kundenliste des aktuellen Wochentag anzeigen.

View File

@ -13,9 +13,7 @@ using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Forms;
using System.Windows.Input;
using Point = System.Drawing.Point;
using Size = System.Drawing.Size;

View File

@ -81,4 +81,3 @@ namespace Deckungsbeitrag
}
}
}
//DONE: Neue Aufgabe Screen erstellen.

View File

@ -37,7 +37,7 @@ namespace Deckungsbeitrag
this.label2 = new System.Windows.Forms.Label();
this.textBoxKundeName = new System.Windows.Forms.TextBox();
this.label3 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.labelLiefertag = new System.Windows.Forms.Label();
this.label5 = new System.Windows.Forms.Label();
this.rBMO = new System.Windows.Forms.RadioButton();
this.rBFR = new System.Windows.Forms.RadioButton();
@ -76,8 +76,8 @@ namespace Deckungsbeitrag
this.dTPLiefertag.Name = "dTPLiefertag";
this.dTPLiefertag.Size = new System.Drawing.Size(187, 38);
this.dTPLiefertag.TabIndex = 2;
this.dTPLiefertag.ValueChanged += new System.EventHandler(this.dTPLiefertag_ValueChanged);
this.dTPLiefertag.Leave += new System.EventHandler(this.dTPLiefertag_Leave);
this.dTPLiefertag.ValueChanged += new System.EventHandler(this.DTPLiefertag_ValueChanged);
this.dTPLiefertag.Leave += new System.EventHandler(this.DTPLiefertag_Leave);
//
// buttonSpeichern
//
@ -97,7 +97,7 @@ namespace Deckungsbeitrag
this.buttonSpeichern.Text = "Speichern";
this.buttonSpeichern.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText;
this.buttonSpeichern.UseVisualStyleBackColor = false;
this.buttonSpeichern.Click += new System.EventHandler(this.buttonSpeichern_Click);
this.buttonSpeichern.Click += new System.EventHandler(this.ButtonSpeichern_Click);
//
// buttonAbbrechen
//
@ -118,7 +118,7 @@ namespace Deckungsbeitrag
this.buttonAbbrechen.Text = "Abbrechen";
this.buttonAbbrechen.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText;
this.buttonAbbrechen.UseVisualStyleBackColor = false;
this.buttonAbbrechen.Click += new System.EventHandler(this.buttonAbbrechen_Click);
this.buttonAbbrechen.Click += new System.EventHandler(this.ButtonAbbrechen_Click);
//
// textBoxKndNr
//
@ -128,8 +128,6 @@ namespace Deckungsbeitrag
this.textBoxKndNr.Name = "textBoxKndNr";
this.textBoxKndNr.Size = new System.Drawing.Size(139, 37);
this.textBoxKndNr.TabIndex = 0;
this.textBoxKndNr.Click += new System.EventHandler(this.textBoxKndNr_Click);
this.textBoxKndNr.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.textBoxKndNr_PreviewKeyDown);
//
// label2
//
@ -149,7 +147,6 @@ namespace Deckungsbeitrag
this.textBoxKundeName.Name = "textBoxKundeName";
this.textBoxKundeName.Size = new System.Drawing.Size(369, 37);
this.textBoxKundeName.TabIndex = 8;
this.textBoxKundeName.Leave += new System.EventHandler(this.textBoxKundeName_Leave);
//
// label3
//
@ -161,15 +158,15 @@ namespace Deckungsbeitrag
this.label3.TabIndex = 19;
this.label3.Text = "Kunde:";
//
// label4
// labelLiefertag
//
this.label4.AutoSize = true;
this.label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label4.Location = new System.Drawing.Point(7, 266);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(120, 25);
this.label4.TabIndex = 22;
this.label4.Text = "Lieferdatum:";
this.labelLiefertag.AutoSize = true;
this.labelLiefertag.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.labelLiefertag.Location = new System.Drawing.Point(7, 266);
this.labelLiefertag.Name = "labelLiefertag";
this.labelLiefertag.Size = new System.Drawing.Size(120, 25);
this.labelLiefertag.TabIndex = 22;
this.labelLiefertag.Text = "Lieferdatum:";
//
// label5
//
@ -309,7 +306,7 @@ namespace Deckungsbeitrag
this.comboBoxTyp.Name = "comboBoxTyp";
this.comboBoxTyp.Size = new System.Drawing.Size(224, 38);
this.comboBoxTyp.TabIndex = 1;
this.comboBoxTyp.SelectedValueChanged += new System.EventHandler(this.comboBoxTyp_SelectedValueChanged);
this.comboBoxTyp.SelectedValueChanged += new System.EventHandler(this.ComboBoxTyp_SelectedValueChanged);
//
// textBoxCont
//
@ -321,7 +318,7 @@ namespace Deckungsbeitrag
this.textBoxCont.TabIndex = 31;
this.textBoxCont.Text = "0";
this.textBoxCont.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
this.textBoxCont.TextChanged += new System.EventHandler(this.textBoxCont_TextChanged);
this.textBoxCont.TextChanged += new System.EventHandler(this.TextBoxCont_TextChanged);
//
// label1
//
@ -345,7 +342,7 @@ namespace Deckungsbeitrag
this.comboBoxFahrer.Name = "comboBoxFahrer";
this.comboBoxFahrer.Size = new System.Drawing.Size(224, 38);
this.comboBoxFahrer.TabIndex = 34;
this.comboBoxFahrer.Validating += new System.ComponentModel.CancelEventHandler(this.comboBoxFahrer_Validating);
this.comboBoxFahrer.Validating += new System.ComponentModel.CancelEventHandler(this.ComboBoxFahrer_Validating);
//
// buttonEinstellung
//
@ -362,7 +359,7 @@ namespace Deckungsbeitrag
this.buttonEinstellung.TabIndex = 46;
this.buttonEinstellung.Text = "i";
this.buttonEinstellung.UseVisualStyleBackColor = true;
this.buttonEinstellung.Click += new System.EventHandler(this.buttonEinstellung_Click);
this.buttonEinstellung.Click += new System.EventHandler(this.ButtonEinstellung_Click);
//
// panelRegAuftrag
//
@ -379,7 +376,7 @@ namespace Deckungsbeitrag
this.panelRegAuftrag.Size = new System.Drawing.Size(569, 514);
this.panelRegAuftrag.TabIndex = 47;
this.panelRegAuftrag.Visible = false;
this.panelRegAuftrag.EnabledChanged += new System.EventHandler(this.panelRegAuftrag_EnabledChanged);
this.panelRegAuftrag.EnabledChanged += new System.EventHandler(this.PanelRegAuftrag_EnabledChanged);
//
// pictureBoxAddArtikel
//
@ -393,7 +390,7 @@ namespace Deckungsbeitrag
this.pictureBoxAddArtikel.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBoxAddArtikel.TabIndex = 39;
this.pictureBoxAddArtikel.TabStop = false;
this.pictureBoxAddArtikel.Click += new System.EventHandler(this.pictureBoxAddArtikel_Click);
this.pictureBoxAddArtikel.Click += new System.EventHandler(this.PictureBoxAddArtikel_Click);
//
// label8
//
@ -419,7 +416,7 @@ namespace Deckungsbeitrag
this.comboBoxArtikel.Name = "comboBoxArtikel";
this.comboBoxArtikel.Size = new System.Drawing.Size(449, 38);
this.comboBoxArtikel.TabIndex = 37;
this.comboBoxArtikel.SelectedIndexChanged += new System.EventHandler(this.comboBoxArtikel_SelectedIndexChanged);
this.comboBoxArtikel.SelectedIndexChanged += new System.EventHandler(this.ComboBoxArtikel_SelectedIndexChanged);
//
// label7
//
@ -506,7 +503,7 @@ namespace Deckungsbeitrag
this.Controls.Add(this.pictureBoxMinus);
this.Controls.Add(this.pictureBoxPlus);
this.Controls.Add(this.label5);
this.Controls.Add(this.label4);
this.Controls.Add(this.labelLiefertag);
this.Controls.Add(this.label3);
this.Controls.Add(this.textBoxKundeName);
this.Controls.Add(this.label2);
@ -529,7 +526,6 @@ namespace Deckungsbeitrag
this.Text = "NEUER AUFTRAG";
this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.FormNeuerAuftrag_HelpButtonClicked);
this.Load += new System.EventHandler(this.FormNeuerAuftrag_Load);
this.Shown += new System.EventHandler(this.FormNeuerAuftrag_Shown);
this.panelRegAuftrag.ResumeLayout(false);
this.panelRegAuftrag.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBoxAddArtikel)).EndInit();
@ -548,7 +544,7 @@ namespace Deckungsbeitrag
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox textBoxKundeName;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Label labelLiefertag;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.PictureBox pictureBoxPlus;
private System.Windows.Forms.PictureBox pictureBoxMinus;

File diff suppressed because it is too large Load Diff

View File

@ -93,7 +93,6 @@ namespace Deckungsbeitrag.AA_Forms
private void FormShowUserControl_Shown(object sender, EventArgs e)
{
this.ClientSize = new Size(uc.Width, uc.Height);
//ucs.Location = new Point(5, 10);
}
private void FormShowUserControl_FormClosing(object sender, FormClosingEventArgs e)
@ -103,7 +102,6 @@ namespace Deckungsbeitrag.AA_Forms
{
UCTourenplan uc = (UCTourenplan)form.Controls[0];
lieferDaten = uc.lieferDaten;
//this.DialogResult = DialogResult.OK;
}
}
}

View File

@ -48,8 +48,8 @@
this.tabControlLKW.SelectedIndex = 0;
this.tabControlLKW.Size = new System.Drawing.Size(594, 411);
this.tabControlLKW.TabIndex = 0;
this.tabControlLKW.SelectedIndexChanged += new System.EventHandler(this.tabControlLKW_SelectedIndexChanged);
this.tabControlLKW.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.tabControlLKW_MouseDoubleClick);
this.tabControlLKW.SelectedIndexChanged += new System.EventHandler(this.TabControlLKW_SelectedIndexChanged);
this.tabControlLKW.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.TabControlLKW_MouseDoubleClick);
//
// flowLayoutPanelKunden
//
@ -72,7 +72,7 @@
this.comboBoxFilter.Name = "comboBoxFilter";
this.comboBoxFilter.Size = new System.Drawing.Size(199, 33);
this.comboBoxFilter.TabIndex = 2;
this.comboBoxFilter.SelectedIndexChanged += new System.EventHandler(this.comboBoxFilter_SelectedIndexChanged);
this.comboBoxFilter.SelectedIndexChanged += new System.EventHandler(this.ComboBoxFilter_SelectedIndexChanged);
//
// buttonAddPage
//
@ -92,7 +92,7 @@
this.buttonAddPage.Text = "Neues Fahrzeug";
this.buttonAddPage.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
this.buttonAddPage.UseVisualStyleBackColor = false;
this.buttonAddPage.Click += new System.EventHandler(this.buttonAddPage_Click);
this.buttonAddPage.Click += new System.EventHandler(this.ButtonAddPage_Click);
//
// radioButtonSommer
//
@ -110,7 +110,7 @@
this.radioButtonSommer.Text = "Sommer";
this.radioButtonSommer.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.radioButtonSommer.UseVisualStyleBackColor = false;
this.radioButtonSommer.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged);
this.radioButtonSommer.CheckedChanged += new System.EventHandler(this.RadioButton_CheckedChanged);
//
// radioButtonWinter
//
@ -128,7 +128,7 @@
this.radioButtonWinter.Text = "Winter";
this.radioButtonWinter.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.radioButtonWinter.UseVisualStyleBackColor = false;
this.radioButtonWinter.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged);
this.radioButtonWinter.CheckedChanged += new System.EventHandler(this.RadioButton_CheckedChanged);
//
// radioButtonFruehling26
//

View File

@ -21,8 +21,8 @@ namespace Deckungsbeitrag.AA_Forms
public partial class FormTourenplanung : Form
{
private List<Kunde> kundenliste;
private Benutzer Benutzer;
Meldungen meldung = new Meldungen();
private readonly Benutzer Benutzer;
readonly Meldungen meldung = new Meldungen();
#region Form-Konstruktor
@ -100,15 +100,17 @@ namespace Deckungsbeitrag.AA_Forms
foreach (Kunde kunde in kundenliste)
{
// Wenn kein Suchtext vorhanden, dann KundeName verwenden.
UCKunde control = new UCKunde(kunde);
control.Tag = kunde;
UCKunde control = new UCKunde(kunde)
{
Tag = kunde
};
flowLayoutPanelKunden.Controls.Add(control);
}
}
#region TabControl-Funktionen
// 1. TabPage wird hinzugefügt.
private void buttonAddPage_Click(object sender, EventArgs e)
private void ButtonAddPage_Click(object sender, EventArgs e)
{
UCTabPageLKW uc = new UCTabPageLKW();
TabPage tp = new TabPage("Neue TabPage");
@ -117,7 +119,7 @@ namespace Deckungsbeitrag.AA_Forms
this.tabControlLKW.TabPages.Add(tp);
}
// 2. Umbennen mit DoppelClick starten
private void tabControlLKW_MouseDoubleClick(object sender, MouseEventArgs e)
private void TabControlLKW_MouseDoubleClick(object sender, MouseEventArgs e)
{
if (this.Benutzer.Rolle == BenutzerRolle.Admin || this.Benutzer.Rolle == BenutzerRolle.Verwaltung)
{
@ -146,13 +148,15 @@ namespace Deckungsbeitrag.AA_Forms
{
return Interaction.InputBox(prompt, titel, defaultText);
}
private void tabControlLKW_SelectedIndexChanged(object sender, EventArgs e)
private void TabControlLKW_SelectedIndexChanged(object sender, EventArgs e)
{
if (tabControlLKW.SelectedTab == null) return;
if (tabControlLKW.SelectedTab.Controls.Count == 0)
{
UCTabPageLKW uc = new UCTabPageLKW();
uc.Dock = DockStyle.Fill;
UCTabPageLKW uc = new UCTabPageLKW
{
Dock = DockStyle.Fill
};
tabControlLKW.SelectedTab.Controls.Add(uc);
}
}
@ -179,8 +183,7 @@ namespace Deckungsbeitrag.AA_Forms
}
private void LadeAlleTabs()
{
string json = string.Empty;
string json;
if (this.radioButtonSommer.Checked)
{
if (!File.Exists("lkw-touren-sommer.json")) return;
@ -206,8 +209,10 @@ namespace Deckungsbeitrag.AA_Forms
TabPage tabPage = new TabPage(tabData.TourName);
// UserControl erstellen
UCTabPageLKW uc = new UCTabPageLKW();
uc.Dock = DockStyle.Fill;
UCTabPageLKW uc = new UCTabPageLKW
{
Dock = DockStyle.Fill
};
// DATEN laden!
uc.LadeDaten(tabData);
@ -292,7 +297,7 @@ namespace Deckungsbeitrag.AA_Forms
return true;
}
private void comboBoxFilter_SelectedIndexChanged(object sender, EventArgs e)
private void ComboBoxFilter_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.comboBoxFilter.SelectedIndex != -1) GetList((string)this.comboBoxFilter.SelectedItem);
}
@ -300,8 +305,7 @@ namespace Deckungsbeitrag.AA_Forms
public static void KundenControlToDelete(FormTourenplanung form, UCKunde kundectr)
{
Kunde _knd = (Kunde)kundectr.Tag;
int saisonrhythmus = 0;
int saisonrhythmus;
if (form.radioButtonSommer.Checked) { saisonrhythmus = _knd.SommerLieferRhythmus; }
else { saisonrhythmus = _knd.WinterLieferRhythmus; }
// Global über ALLE Tabs/Panels zählen
@ -358,7 +362,7 @@ namespace Deckungsbeitrag.AA_Forms
}
}
private void radioButton_CheckedChanged(object sender, EventArgs e)
private void RadioButton_CheckedChanged(object sender, EventArgs e)
{
RadioButton rb = sender as RadioButton;
if (!rb.Checked) SpeichereAlleTabs(rb);

View File

@ -381,8 +381,6 @@ namespace Deckungsbeitrag.AA_Forms
/// <returns></returns>
protected override bool ProcessDialogKey(Keys keyData)
{
//TODO: Umbau in Switch.
// Escape [ESC] schließt den Screen.
if (Form.ModifierKeys == Keys.None && keyData == Keys.Escape)
{

View File

@ -12,8 +12,8 @@ namespace Deckungsbeitrag.AA_Klassen
{
internal class ArtikelNachwaesche
{
// 0 1 2 3 4 5
private static string COLUMNS = "nw_artikel_id, artikel_id, datum, nachwaesche, nw_muell, nw_sauber";
// 0 1 2 3 4 5 6
private static string COLUMNS = "nw_artikel_id, artikel_id, datum, nachwaesche, nw_muell, nw_sauber, reklamation";
private static string TABLE = "kundenverwaltung.nw_artikel";
#region Class-Standarts (Properties, Save, reader)
@ -31,6 +31,7 @@ namespace Deckungsbeitrag.AA_Klassen
public int Muell { get; set; }
[OLVColumn("Sauber", DisplayIndex = 2)]
public int Sauber { get; set; }
public int Reklamation { get; set; }
public int? Save()
{
@ -43,13 +44,13 @@ namespace Deckungsbeitrag.AA_Klassen
if (this.NachwaescheID.HasValue & this.NachwaescheID != 0)
{
command.CommandText = $"update {TABLE} set artikel_id = :p1, datum = :p2, nachwaesche = :p3, nw_muell = :p4, nw_sauber = :p5 WHERE nw_artikel_id = :p0";
command.CommandText = $"update {TABLE} set artikel_id = :p1, datum = :p2, nachwaesche = :p3, nw_muell = :p4, nw_sauber = :p5, reklamation = :p6 WHERE nw_artikel_id = :p0";
}
else
{
command.CommandText = "select nextval('kundenverwaltung.tour_seq')";
this.NachwaescheID = (int)(long)command.ExecuteScalar();
command.CommandText = $"insert into {TABLE} ({COLUMNS}) values (:p0, :p1, :p2, :p3, :p4, :p5)";
command.CommandText = $"insert into {TABLE} ({COLUMNS}) values (:p0, :p1, :p2, :p3, :p4, :p5, :p6)";
}
command.Parameters.AddWithValue("p0", this.NachwaescheID);
@ -58,6 +59,7 @@ namespace Deckungsbeitrag.AA_Klassen
command.Parameters.AddWithValue("p3", this.Nachwaesche);
command.Parameters.AddWithValue("p4", this.Muell);
command.Parameters.AddWithValue("p5", this.Sauber);
command.Parameters.AddWithValue("p6", this.Reklamation);
result = command.ExecuteNonQuery();
@ -75,6 +77,7 @@ namespace Deckungsbeitrag.AA_Klassen
this.Nachwaesche = reader.IsDBNull(3) ? 0 : reader.GetInt32(3);
this.Muell = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
this.Sauber = reader.IsDBNull(5) ? 0 : reader.GetInt32(5);
this.Reklamation = reader.IsDBNull(6) ? 0 : reader.GetInt32(5);
}
#endregion

View File

@ -199,7 +199,7 @@ namespace DatenDB
return resultList;
}
public static async Task<Dictionary<DateTime, List<Auftrag>>> GetAuftraegeProLiefertagAsync(NpgsqlConnection conn, AuftragTyp standart, AuftragStatus aufgelegt)
public static async Task<Dictionary<DateTime, List<Auftrag>>> GetAuftraegeProLiefertagAsync(NpgsqlConnection conn, AuftragStatus aufgelegt)
{
// ✅ 5 FIXED Keys mit Sonntags-Check
@ -236,7 +236,8 @@ namespace DatenDB
{
DatenbankConnection.GetConnection().Open();
List<Auftrag> resultList = new List<Auftrag>();
NpgsqlCommand cmd = new NpgsqlCommand();
using (NpgsqlCommand cmd = new NpgsqlCommand())
{
cmd.Connection = DatenbankConnection.GetConnection();
//cmd.CommandText = $"select {COLUMNS} from {TABLE} where status = 2 order by liefertag asc";
if (kategorie == ArtikelKategorie.Frottee) cmd.CommandText = $"select {ACOLUMNS} from {TABLE} a JOIN kundenverwaltung.kunde_artikel k ON a.kunde_id = k.kunde_id JOIN kundenverwaltung.artikel b ON k.artikel_id = b.artikel_id WHERE a.status = 2 and b.kategorie = {(int)kategorie} or a.status = 2 and b.kategorie = 4 GROUP BY a.auftrag_id, a.kunde_id HAVING COUNT(*) >= 1";
@ -245,6 +246,8 @@ namespace DatenDB
NpgsqlDataReader reader = cmd.ExecuteReader();
while (reader.Read()) resultList.Add(new Auftrag(reader));
reader.Close();
}
DatenbankConnection.GetConnection().Close();
return resultList;
}
@ -252,7 +255,8 @@ namespace DatenDB
{
DatenbankConnection.GetConnection().Open();
List<Auftrag> resultList = new List<Auftrag>();
NpgsqlCommand cmd = new NpgsqlCommand();
using (NpgsqlCommand cmd = new NpgsqlCommand())
{
cmd.Connection = DatenbankConnection.GetConnection();
cmd.CommandText = $"select {COLUMNS} from {TABLE} where status = 0 order by liefertag asc";
@ -260,6 +264,8 @@ namespace DatenDB
NpgsqlDataReader reader = cmd.ExecuteReader();
while (reader.Read()) resultList.Add(new Auftrag(reader));
reader.Close();
}
DatenbankConnection.GetConnection().Close();
return resultList;
}
@ -278,7 +284,8 @@ namespace DatenDB
DatenbankConnection.GetConnection().Open();
List<Auftrag> resultList = new List<Auftrag>();
NpgsqlCommand command = new NpgsqlCommand();
using (NpgsqlCommand command = new NpgsqlCommand())
{
command.Connection = DatenbankConnection.GetConnection();
if (s == "Expedit") command.CommandText = $"select {COLUMNS} from {TABLE} where status = 3 order by liefertag asc";
@ -290,6 +297,8 @@ namespace DatenDB
NpgsqlDataReader reader = command.ExecuteReader();
while (reader.Read()) resultList.Add(new Auftrag(reader));
reader.Close();
}
DatenbankConnection.GetConnection().Close();
return resultList;
}
@ -297,7 +306,8 @@ namespace DatenDB
{
DatenbankConnection.GetConnection().Open();
List<Auftrag> resultList = new List<Auftrag>();
NpgsqlCommand command = new NpgsqlCommand();
using (NpgsqlCommand command = new NpgsqlCommand())
{
command.Connection = DatenbankConnection.GetConnection();
command.CommandText = $"select {COLUMNS} from {TABLE} where typ = 1 and erstellt::date = '{produktion.Date}' order by liefertag asc";
@ -305,6 +315,8 @@ namespace DatenDB
NpgsqlDataReader reader = command.ExecuteReader();
while (reader.Read()) resultList.Add(new Auftrag(reader));
reader.Close();
}
DatenbankConnection.GetConnection().Close();
return resultList;
}
@ -313,7 +325,8 @@ namespace DatenDB
DateTime dateTime = NaechsterLiefertag();
DatenbankConnection.GetConnection().Open();
List<Auftrag> resultList = new List<Auftrag>();
NpgsqlCommand command = new NpgsqlCommand();
using (NpgsqlCommand command = new NpgsqlCommand())
{
command.Connection = DatenbankConnection.GetConnection();
command.CommandText = $"select {ACOLUMNS} from {TABLE} a join kundenverwaltung.kunde k on a.kunde_id = k.kunde_id where typ >= {(int)AuftragTyp.Standart} and a.liefertag = '{dateTime}' and a.benutzer_id = {fahrer.BenutzerID} and a.status <= {(int)AuftragStatus.Fertig} order by k.region, k.bezeichnung";
@ -321,6 +334,8 @@ namespace DatenDB
NpgsqlDataReader reader = command.ExecuteReader();
while (reader.Read()) resultList.Add(new Auftrag(reader));
reader.Close();
}
DatenbankConnection.GetConnection().Close();
return resultList;
}
@ -332,12 +347,15 @@ namespace DatenDB
try
{
DatenbankConnection.GetConnection().Open();
NpgsqlCommand command = new NpgsqlCommand();
using (NpgsqlCommand command = new NpgsqlCommand())
{
command.Connection = DatenbankConnection.GetConnection();
command.CommandText = $"select {COLUMNS} from {TABLE} where auftrag_id = {auftragID}";
NpgsqlDataReader reader = command.ExecuteReader();
while (reader.Read()) result = new Auftrag(reader);
reader.Close();
}
DatenbankConnection.GetConnection().Close();
}
@ -354,12 +372,15 @@ namespace DatenDB
{
DatenbankConnection.GetConnection().Open();
Auftrag result = new Auftrag();
NpgsqlCommand command = new NpgsqlCommand();
using (NpgsqlCommand command = new NpgsqlCommand())
{
command.Connection = DatenbankConnection.GetConnection();
command.CommandText = $"select {COLUMNS} from {TABLE} where erstellt_von = {benutzerID} order by erstellt desc limit 1";
NpgsqlDataReader reader = command.ExecuteReader();
while (reader.Read()) result = new Auftrag(reader);
reader.Close();
}
DatenbankConnection.GetConnection().Close();
return result;
@ -368,8 +389,8 @@ namespace DatenDB
{
List<Auftrag> result = new List<Auftrag>();
DatenbankConnection.GetConnection().Open();
NpgsqlCommand command = new NpgsqlCommand();
using (NpgsqlCommand command = new NpgsqlCommand())
{
command.Connection = DatenbankConnection.GetConnection();
if (string.IsNullOrWhiteSpace(zusatz))
{
@ -380,6 +401,8 @@ namespace DatenDB
NpgsqlDataReader reader = command.ExecuteReader();
while (reader.Read()) result.Add(new Auftrag(reader));
reader.Close();
}
DatenbankConnection.GetConnection().Close();
return result;
@ -413,7 +436,7 @@ namespace DatenDB
}
finally
{
if (cmd != null) cmd.Dispose();
cmd?.Dispose();
if (conn != null && conn.State == ConnectionState.Open)
{
conn.Close();
@ -428,13 +451,15 @@ namespace DatenDB
try
{
DatenbankConnection.GetConnection().Open();
NpgsqlCommand command = new NpgsqlCommand();
using (NpgsqlCommand command = new NpgsqlCommand())
{
command.Connection = DatenbankConnection.GetConnection();
command.CommandText = $"select a.benutzer_id from {TABLE} a inner join kundenverwaltung.kunde k on a.kunde_id = k.kunde_id where k.region = '{kunde.Region}' and a.liefertag = '{liefertag.Date}' order by a.benutzer_id limit 1";
NpgsqlDataReader reader = command.ExecuteReader();
while (reader.Read()) result = reader.GetInt32(0);
reader.Close();
}
DatenbankConnection.GetConnection().Close();
return result;
@ -453,8 +478,8 @@ namespace DatenDB
try
{
DatenbankConnection.GetConnection().Open();
NpgsqlCommand command = new NpgsqlCommand();
using (NpgsqlCommand command = new NpgsqlCommand())
{
command.Connection = DatenbankConnection.GetConnection();
if (this.Typ != AuftragTyp.Regelmäßig)
{
@ -465,6 +490,8 @@ namespace DatenDB
NpgsqlDataReader reader = command.ExecuteReader();
while (reader.Read()) result = reader.GetInt16(0);
reader.Close();
}
DatenbankConnection.GetConnection().Close();
}
catch (Exception ex)
@ -525,8 +552,8 @@ namespace DatenDB
int[] result = { 0, 0, 0 };
int i = 0;
DatenbankConnection.GetConnection().Open();
NpgsqlCommand command = new NpgsqlCommand();
using (NpgsqlCommand command = new NpgsqlCommand())
{
command.Connection = DatenbankConnection.GetConnection();
command.CommandText = $"select max(container_clean), avg(container_clean), min(container_clean) from {TABLE} where kunde_id = {kundeId}";
@ -537,6 +564,8 @@ namespace DatenDB
i++;
}
reader.Close();
}
DatenbankConnection.GetConnection().Close();
@ -562,7 +591,7 @@ namespace DatenDB
this.MaschineID = reader.IsDBNull(15) ? null : (int?)reader.GetInt32(15);
this.ContainerClean = reader.IsDBNull(16) ? 0 : reader.GetInt32(16);
this.Typ = reader.IsDBNull(17) ? AuftragTyp.Standart : (AuftragTyp)reader.GetInt32(17);
this.AufgabeErledigt = reader.IsDBNull(18) ? false : reader.GetBoolean(18);
this.AufgabeErledigt = !reader.IsDBNull(18) && reader.GetBoolean(18);
this.Abteilungen = reader.IsDBNull(19) ? AbteilungsStatus.Keine : (AbteilungsStatus)reader.GetInt16(19);
this.Rhythmus = reader.IsDBNull(20) ? RegRhythmen.Unbekannt : (RegRhythmen)reader.GetInt32(20);
this.Priority = (AuftragPriority)reader.GetInt32(21);
@ -597,7 +626,7 @@ namespace DatenDB
this.MaschineID = reader.IsDBNull(15) ? null : (int?)reader.GetInt32(15);
this.ContainerClean = reader.IsDBNull(16) ? 0 : reader.GetInt32(16);
this.Typ = reader.IsDBNull(17) ? AuftragTyp.Standart : (AuftragTyp)reader.GetInt32(17);
this.AufgabeErledigt = reader.IsDBNull(18) ? false : reader.GetBoolean(18);
this.AufgabeErledigt = !reader.IsDBNull(18) && reader.GetBoolean(18);
this.Abteilungen = reader.IsDBNull(19) ? AbteilungsStatus.Keine : (AbteilungsStatus)reader.GetInt16(19);
this.Rhythmus = reader.IsDBNull(20) ? RegRhythmen.Unbekannt : (RegRhythmen)reader.GetInt32(20);
this.Priority = (AuftragPriority)reader.GetInt32(21);
@ -719,33 +748,6 @@ namespace DatenDB
}
}
/// <summary>
/// SPALTE 12 - Button Etikett Drucken wird angezeigt.
/// </summary>
private string _etikett;
[OLVColumn("Etikett", DisplayIndex = 11, TextAlign = System.Windows.Forms.HorizontalAlignment.Center)]
public string Etikett
{
get
{
if (Typ >= AuftragTyp.Inventur & Typ <= AuftragTyp.Standverminderung)
{
if (Status >= AuftragStatus.Vorbereitet) return _fertig = string.Empty;
else return _fertig = "🖨";
}
else
{
if (Status <= AuftragStatus.Herrichten) return _fertig = "🖨";
else
{
if (Status == AuftragStatus.Vorbereitet) return _fertig = "🖨";
else return _fertig = string.Empty;
}
}
}
}
/// <summary>
/// SPALTE 13 - Button Abschließenvon Aufträgen wird angezeigt.
/// </summary>
@ -830,7 +832,8 @@ namespace DatenDB
conn.Open();
int auftragStatusID = 0;
NpgsqlCommand command = new NpgsqlCommand();
using (NpgsqlCommand command = new NpgsqlCommand())
{
command.Connection = conn;
command.CommandText = "select nextval('kundenverwaltung.auftrag_status_seq')";
@ -846,6 +849,7 @@ namespace DatenDB
command.ExecuteNonQuery();
}
}
catch (Exception)
{
throw;
@ -862,7 +866,8 @@ namespace DatenDB
{
DatenbankConnection.GetConnection().Open();
int[] result = new int[2];
NpgsqlCommand command = new NpgsqlCommand();
using (NpgsqlCommand command = new NpgsqlCommand())
{
command.Connection = DatenbankConnection.GetConnection();
if (this.AuftragID.HasValue & this.AuftragID != 0)
@ -877,21 +882,21 @@ namespace DatenDB
}
command.Parameters.AddWithValue("p0", this.AuftragID);
command.Parameters.AddWithValue("p1", this.ArbeiterID.HasValue ? this.ArbeiterID.Value : (object)DBNull.Value);
command.Parameters.AddWithValue("p2", this.AufgabeID.HasValue ? this.AufgabeID.Value : (object)DBNull.Value);
command.Parameters.AddWithValue("p1", this.ArbeiterID ?? (object)DBNull.Value);
command.Parameters.AddWithValue("p2", this.AufgabeID ?? (object)DBNull.Value);
command.Parameters.AddWithValue("p3", this.KundeID);
command.Parameters.AddWithValue("p4", string.IsNullOrEmpty(this.ZusatzInfo) ? (object)DBNull.Value : this.ZusatzInfo);
command.Parameters.AddWithValue("p5", this.Liefertag);
command.Parameters.AddWithValue("p6", this.Gedruckt.HasValue ? this.Gedruckt.Value : (object)DBNull.Value);
command.Parameters.AddWithValue("p7", this.GedrucktVon.HasValue ? this.GedrucktVon.Value : (object)DBNull.Value);
command.Parameters.AddWithValue("p8", this.Erledigt.HasValue ? this.Erledigt.Value : (object)DBNull.Value);
command.Parameters.AddWithValue("p9", this.ErledigtVon.HasValue ? this.ErledigtVon.Value : (object)DBNull.Value);
command.Parameters.AddWithValue("p6", this.Gedruckt ?? (object)DBNull.Value);
command.Parameters.AddWithValue("p7", this.GedrucktVon ?? (object)DBNull.Value);
command.Parameters.AddWithValue("p8", this.Erledigt ?? (object)DBNull.Value);
command.Parameters.AddWithValue("p9", this.ErledigtVon ?? (object)DBNull.Value);
command.Parameters.AddWithValue("p10", this.Erstellt);
command.Parameters.AddWithValue("p11", this.ErstelltVon);
command.Parameters.AddWithValue("p12", (int)this.Status);
command.Parameters.AddWithValue("p13", this.TourID.HasValue ? this.TourID.Value : (object)DBNull.Value);
command.Parameters.AddWithValue("p13", this.TourID ?? (object)DBNull.Value);
command.Parameters.AddWithValue("p14", this.Container);
command.Parameters.AddWithValue("p15", this.MaschineID.HasValue ? this.MaschineID.Value : 0);
command.Parameters.AddWithValue("p15", this.MaschineID ?? 0);
command.Parameters.AddWithValue("p16", this.ContainerClean);
command.Parameters.AddWithValue("p17", (int)this.Typ);
command.Parameters.AddWithValue("p18", this.AufgabeErledigt);
@ -900,6 +905,8 @@ namespace DatenDB
command.Parameters.AddWithValue("p21", (int)this.Priority);
result[0] = command.ExecuteNonQuery();
}
DatenbankConnection.GetConnection().Close();
return result;
}
@ -922,8 +929,8 @@ namespace DatenDB
string and = " and ";
List<Auftrag> result = new List<Auftrag>();
DatenbankConnection.GetConnection().Open();
NpgsqlCommand command = new NpgsqlCommand();
using (NpgsqlCommand command = new NpgsqlCommand())
{
command.Connection = DatenbankConnection.GetConnection();
if (!string.IsNullOrWhiteSpace(datum)) { commandline += $"{datum} = '{date}'"; parts++; }
if (status != null)
@ -941,6 +948,8 @@ namespace DatenDB
NpgsqlDataReader reader = command.ExecuteReader();
while (reader.Read()) result.Add(new Auftrag(reader));
reader.Close();
}
DatenbankConnection.GetConnection().Close();
return result;

View File

@ -46,12 +46,15 @@ namespace DatenDB
{
DatenbankConnection.GetConnection().Open();
List<Benutzer> resultList = new List<Benutzer>();
NpgsqlCommand command = new NpgsqlCommand();
using (NpgsqlCommand command = new NpgsqlCommand())
{
command.Connection = DatenbankConnection.GetConnection();
command.CommandText = $"select {COLUMNS} from {TABLE}";
NpgsqlDataReader reader = command.ExecuteReader();
while (reader.Read()) resultList.Add(new Benutzer(reader));
reader.Close();
}
DatenbankConnection.GetConnection().Close();
return resultList;
@ -60,12 +63,15 @@ namespace DatenDB
{
DatenbankConnection.GetConnection().Open();
List<Benutzer> resultList = new List<Benutzer>();
NpgsqlCommand command = new NpgsqlCommand();
using (NpgsqlCommand command = new NpgsqlCommand())
{
command.Connection = DatenbankConnection.GetConnection();
command.CommandText = $"select {COLUMNS} from {TABLE} where rolle = 'Fahrer' and ist_aktiv is true order by benutzer_id asc";
NpgsqlDataReader reader = command.ExecuteReader();
while (reader.Read()) resultList.Add(new Benutzer(reader));
reader.Close();
}
DatenbankConnection.GetConnection().Close();
return resultList;
}
@ -73,12 +79,15 @@ namespace DatenDB
{
DatenbankConnection.GetConnection().Open();
List<Benutzer> resultList = new List<Benutzer>();
NpgsqlCommand command = new NpgsqlCommand();
using (NpgsqlCommand command = new NpgsqlCommand())
{
command.Connection = DatenbankConnection.GetConnection();
command.CommandText = $"select {COLUMNS} from {TABLE} where ist_aktiv is true and rolle = 'Fahrer' or rolle = 'Verwaltung' or rolle = 'Expedit' order by benutzer_id asc";
NpgsqlDataReader reader = command.ExecuteReader();
while (reader.Read()) resultList.Add(new Benutzer(reader));
reader.Close();
}
DatenbankConnection.GetConnection().Close();
return resultList;
}
@ -90,13 +99,16 @@ namespace DatenDB
try
{
DatenbankConnection.GetConnection().Open();
NpgsqlCommand command = new NpgsqlCommand();
using (NpgsqlCommand command = new NpgsqlCommand())
{
command.Connection = DatenbankConnection.GetConnection();
if (!string.IsNullOrEmpty(benutzerName)) command.CommandText = $"select {COLUMNS} from {TABLE} where benutzer_name = '{benutzerName}'";
if (benID != null) command.CommandText = $"select {COLUMNS} from {TABLE} where benutzer_id = {benID}";
NpgsqlDataReader reader = command.ExecuteReader();
while (reader.Read()) benutzer = new Benutzer(reader);
reader.Close();
}
DatenbankConnection.GetConnection().Close();
return benutzer;
}
@ -185,7 +197,8 @@ namespace DatenDB
throw new LoginException("Datenbank ist nicht verbunden", -4);
}
NpgsqlCommand command = new NpgsqlCommand();
using (NpgsqlCommand command = new NpgsqlCommand())
{
command.Connection = DatenbankConnection.GetConnection();
command.CommandText = $"select {COLUMNS} from {TABLE} where lower(benutzer_name) = :ben";
command.Parameters.AddWithValue(":ben", benutzerName.ToLower());
@ -201,6 +214,7 @@ namespace DatenDB
if (person.Passwort != passwort) throw new LoginException("Passwort ist falsch!", -2);
return person;
}
} //FEHLERMELDUNG DYNAMISCH GENERIEREN...
public Benutzer(NpgsqlDataReader reader)
{
@ -211,7 +225,7 @@ namespace DatenDB
this.Nachname = reader.IsDBNull(4) ? string.Empty : reader.GetString(4);
this.Schein = reader.IsDBNull(5) ? null : (int?)reader.GetInt32(5);
this.GueltigBis = reader.IsDBNull(6) ? null : (DateTime?)reader.GetDateTime(6);
this.Aktiv = reader.IsDBNull(7) ? true : reader.GetBoolean(7);
this.Aktiv = reader.IsDBNull(7) || reader.GetBoolean(7);
this.BenutzerName = reader.IsDBNull(8) ? string.Empty : reader.GetString(8);
this.OnboardingStatus = reader.GetInt32(9);
this.Tour = reader.IsDBNull(10) ? string.Empty : reader.GetString(10);
@ -220,7 +234,8 @@ namespace DatenDB
{
DatenbankConnection.GetConnection().Open();
NpgsqlCommand command = new NpgsqlCommand();
using (NpgsqlCommand command = new NpgsqlCommand())
{
command.Connection = DatenbankConnection.GetConnection();
if (this.BenutzerID.HasValue & this.BenutzerID != 0)
@ -239,7 +254,7 @@ namespace DatenDB
command.Parameters.AddWithValue("p2", string.IsNullOrEmpty(this.Passwort) ? (object)DBNull.Value : this.Passwort);
command.Parameters.AddWithValue("p3", string.IsNullOrEmpty(this.Vorname) ? (object)DBNull.Value : this.Vorname);
command.Parameters.AddWithValue("p4", string.IsNullOrEmpty(this.Nachname) ? (object)DBNull.Value : this.Nachname);
command.Parameters.AddWithValue("p5", this.Schein.HasValue ? this.Schein.Value : (object)DBNull.Value);
command.Parameters.AddWithValue("p5", this.Schein ?? (object)DBNull.Value);
command.Parameters.AddWithValue("p6", this.Rolle == BenutzerRolle.Fahrer ? this.GueltigBis.Value : (object)DBNull.Value);
command.Parameters.AddWithValue("p7", this.Aktiv);
command.Parameters.AddWithValue("p8", string.IsNullOrEmpty(this.BenutzerName) ? (object)DBNull.Value : this.BenutzerName);
@ -251,6 +266,7 @@ namespace DatenDB
return result;
}
}
}
public static class BenutzerExtensions
{
public static int SetOnboardingFlag(this Benutzer user, OnboardingSchritt schritt)
@ -269,5 +285,3 @@ namespace DatenDB
}
}
//INSTALL-REMINDER: DB anpassen.
//CHANGES: OnBoarding wird jetzt gespeichert wenn gesehen.

View File

@ -24,6 +24,7 @@ namespace Deckungsbeitrag.AA_Klassen
[OLVColumn("KndNr.", DisplayIndex = 0, IsEditable = false)] public string KndNummer { get; set; }
[OLVColumn("Kunde", DisplayIndex = 1, IsEditable = false)] public string Kunde { get; set; }
[OLVColumn("NW", DisplayIndex = 2, TextAlign = HorizontalAlignment.Center)] public int Nachwaesche { get; set; }
[OLVColumn("Rekl", DisplayIndex = 3, TextAlign = HorizontalAlignment.Center)]public int Reklamation { get; set; }
}
/// <summary>
@ -64,7 +65,7 @@ namespace Deckungsbeitrag.AA_Klassen
using (var conn = new NpgsqlConnection(_connectionString))
using (var cmd = new NpgsqlCommand(@"
SELECT artnr, abteilung, artname, nw, muell, sauber
SELECT artnr, abteilung, artname, nw, reklamation, muell, sauber
FROM kundenverwaltung.vw_art_nachwaesche
ORDER BY artnr ASC", conn))
{
@ -79,8 +80,9 @@ namespace Deckungsbeitrag.AA_Klassen
Abteilung = (ArtikelKategorie)reader.GetInt16(1),
ArtName = reader.GetString(2),
Nachwaesche = reader.IsDBNull(3) ? 0 : reader.GetInt32(3),
Muell = reader.IsDBNull(4) ? 0 : reader.GetInt32(4),
Sauber = reader.IsDBNull(5) ? 0 : reader.GetInt32(5)
Reklamation = reader.IsDBNull(4) ? 0 : reader.GetInt32(4),
Muell = reader.IsDBNull(5) ? 0 : reader.GetInt32(5),
Sauber = reader.IsDBNull(6) ? 0 : reader.GetInt32(6)
});
}
}
@ -89,11 +91,12 @@ namespace Deckungsbeitrag.AA_Klassen
return result;
}
[OLVColumn("ArtNr.", DisplayIndex = 0, IsEditable = false)] public int ArtNr { get; set; }
[OLVColumn("Abteilung", DisplayIndex = 1, IsEditable = false)] public ArtikelKategorie Abteilung { get; set; }
[OLVColumn("ArtName", DisplayIndex = 2, IsEditable = false)] public string ArtName { get; set; }
[OLVColumn("NW", DisplayIndex = 3, TextAlign = HorizontalAlignment.Center)] public int Nachwaesche { get; set; }
[OLVColumn("Müll", DisplayIndex = 4, TextAlign = HorizontalAlignment.Center)] public int Muell { get; set; }
[OLVColumn("Sauber", DisplayIndex = 5, TextAlign = HorizontalAlignment.Center)] public int Sauber { get; set; }
[OLVColumn("Abteilung", DisplayIndex = 10, IsEditable = false)] public ArtikelKategorie Abteilung { get; set; }
[OLVColumn("ArtName", DisplayIndex = 20, IsEditable = false)] public string ArtName { get; set; }
[OLVColumn("NW", DisplayIndex = 30, TextAlign = HorizontalAlignment.Center)] public int Nachwaesche { get; set; }
[OLVColumn("Rekl", DisplayIndex = 32, TextAlign = HorizontalAlignment.Center)] public int Reklamation { get; set; }
[OLVColumn("Müll", DisplayIndex = 40, TextAlign = HorizontalAlignment.Center)] public int Muell { get; set; }
[OLVColumn("Sauber", DisplayIndex = 50, TextAlign = HorizontalAlignment.Center)] public int Sauber { get; set; }
}
/// <summary>
@ -235,7 +238,7 @@ namespace Deckungsbeitrag.AA_Klassen
[OLVIgnore]public int? TourID { get; set; }
[OLVColumn("Schmutzig", DisplayIndex = 20, TextAlign = HorizontalAlignment.Center)]public int ContainerDirt { get; set; }
[OLVColumn("Sauber", DisplayIndex = 30, TextAlign = HorizontalAlignment.Center)]public int ContainerClean { get; set; }
[OLVColumn("Typ", DisplayIndex = 50)]public AuftragTyp Typ { get; set; }
[OLVColumn("Typ", DisplayIndex = 50, IsEditable = false)]public AuftragTyp Typ { get; set; }
[OLVIgnore]public bool AufgabeErledigt { get; set; }
[OLVIgnore]public AbteilungsStatus AbteilungenStatus { get; set; }
[OLVIgnore]public RegRhythmen Rhythmus { get; set; }
@ -312,7 +315,6 @@ namespace Deckungsbeitrag.AA_Klassen
return reader.IsDBNull(ordinal) ? 0 : reader.GetInt32(ordinal);
}
private static int? SafeIntNullable(NpgsqlDataReader reader, string columnName)
{
int ordinal;
@ -321,28 +323,36 @@ namespace Deckungsbeitrag.AA_Klassen
return reader.IsDBNull(ordinal) ? (int?)null : reader.GetInt32(ordinal);
}
private static string SafeString(NpgsqlDataReader reader, string columnName)
{
int ordinal;
string name;
try { ordinal = reader.GetOrdinal(columnName); }
catch { return null; }
if (columnName == "suchtext")
switch (columnName)
{
case var t when t == "suchtext":
{
if (reader.IsDBNull(ordinal))
{
ordinal = reader.GetOrdinal("kunde_name");
}
}
name = reader.IsDBNull(ordinal) ? null : reader.GetString(ordinal);
if (name == "BAR DIVERSE") ordinal = reader.GetOrdinal("zusatz");
}
break;
case var t when t == "fahrer":
{
name = reader.IsDBNull(ordinal) ? null : reader.GetString(ordinal);
name += reader.IsDBNull(ordinal + 1) ? string.Empty : " (" + reader.GetString(ordinal + 1) + ")";
}
break;
default:
name = reader.IsDBNull(ordinal) ? null : reader.GetString(ordinal);
break;
}
return name;
}
private static bool SafeBool(NpgsqlDataReader reader, string columnName)
{
int ordinal;
@ -351,7 +361,6 @@ namespace Deckungsbeitrag.AA_Klassen
return !reader.IsDBNull(ordinal) && reader.GetBoolean(ordinal);
}
private static DateTime? SafeDateTime(NpgsqlDataReader reader, string columnName)
{
int ordinal;

View File

@ -33,16 +33,15 @@ namespace Deckungsbeitrag.AA_Klassen
public int? Save()
{
int? result = 0;
DatenbankConnection.GetConnection().Open();
using (NpgsqlCommand command = new NpgsqlCommand())
{
command.Connection = DatenbankConnection.GetConnection();
int? result;
if (this.TourID.HasValue & this.TourID != 0)
{
result = this.TourID;
command.CommandText = $"update {TABLE} set benutzer_id = :p1, kundenanzahl = :p2, liefertag = :p3, start = :p4, ende = :p5, container_dirt = :p6, container_clean = :p7, saison_id = :p8, tourenliste = :p9, listegedruckt = :p10, gedruckt_von = :p11 WHERE tour_id = :p0";
}
else
@ -104,8 +103,8 @@ namespace Deckungsbeitrag.AA_Klassen
{
Tour result = null;
DatenbankConnection.GetConnection().Open();
NpgsqlCommand command = new NpgsqlCommand();
using (NpgsqlCommand command = new NpgsqlCommand())
{
command.Connection = DatenbankConnection.GetConnection();
if (tourID == null) command.CommandText = $"select {COLUMNS} from {TABLE} where benutzer_id = {arbeiterID} and liefertag = '{liefertag}'";
else
@ -116,6 +115,8 @@ namespace Deckungsbeitrag.AA_Klassen
NpgsqlDataReader reader = command.ExecuteReader();
while (reader.Read()) result = new Tour(reader);
reader.Close();
}
DatenbankConnection.GetConnection().Close();
return result;
@ -125,13 +126,15 @@ namespace Deckungsbeitrag.AA_Klassen
{
Tour result = null;
DatenbankConnection.GetConnection().Open();
NpgsqlCommand command = new NpgsqlCommand();
using (NpgsqlCommand command = new NpgsqlCommand())
{
command.Connection = DatenbankConnection.GetConnection();
command.CommandText = $"select {COLUMNS} from {TABLE} where tour_id = {tourID}";
NpgsqlDataReader reader = command.ExecuteReader();
while (reader.Read()) result = new Tour(reader);
reader.Close();
}
DatenbankConnection.GetConnection().Close();
return result;
@ -156,7 +159,7 @@ namespace Deckungsbeitrag.AA_Klassen
//CHANGES: Class Tour wurde erstellt. Speichern, Laden und Bearbeiten von Touren sollte möglich sein.
//DONE: Wenn Fahrer neuen Auftrag erstellt, wird Tour (BenutzerID & Liefertag) gesucht und gespeichert oder upgedatet. Dabei werden die Containerzahlen schmutzig addiert und die Kundenanzahl um 1 erhöht.
//TODO: Wenn Auftrag abgeschlossen wird muss die Containerzahl sauber addiert werden. Kundenanzahl und Containeranzahl schmutzig darf nicht erhöht werden.
//TODO: !!ÜBERLEGE!! Tour Start und Ende automatisch erfassen. (Beladenscan und Entladescan?)
//TODO: Eingabemöglichkeit von Tour Start und Ende muss erledigt werden.
//TODO: !!ÜBERLEGE!! Tour Start und Ende automatisch erfassen.
//TODO: Kundenanzahl bei Tourenliste erstellen vergleichen und anpassen.
//TODO: !!ÜBERLEGE!! DB-Query für Kundenanzahl und Containeranzahl Abgleich. (Aufträge haben TourID hinterlegt. So sollte alles vergleichbar sein.)

View File

@ -6,7 +6,7 @@
</sectionGroup>
</configSections>
<appSettings>
<add key="ConnectionString" value="user id=postgres;password=Ki985941Wi;host=10.10.10.1;port=5432;database=Test_Wirl;Timeout=15" />
<add key="ConnectionString" value="user id=postgres;password=Ki985941Wi;host=10.10.10.1;port=5432;database=Wirl_DB_17012023;Timeout=15" />
<add key="SortimentPfad" value="N:\\TECHNIK\\Software\\Wirl-Verwaltung\\Listen\\Kundensortiment.txt" />
<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" />

View File

@ -35,12 +35,11 @@ namespace Deckungsbeitrag
public static bool Artikelliste_Importiert = false;
public static bool Kundenliste_Importiert = false;
public static bool Software_Updated = false;
private static DateTime zielZeit = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 22, 0, 0);
private static readonly DateTime zielZeit = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 22, 0, 0);
private static System.Timers.Timer timer;
//public static string vaultPath = @"N:\TECHNIK\Software\Wirl-Verwaltung\Feedback";
private static string savePath = ConfigurationManager.AppSettings["DateiSavePfad"];
private static readonly string login = "login";
private static bool istest = false;
private static readonly string savePath = ConfigurationManager.AppSettings["DateiSavePfad"];
private static readonly bool istest = false;
/// <summary>
@ -51,8 +50,10 @@ namespace Deckungsbeitrag
{
userid = ConfigurationManager.AppSettings["ConnectionString"].Split(';')[0];
userid = userid.Split('=')[1];
timer = new System.Timers.Timer();
timer.Interval = 1000;
timer = new System.Timers.Timer
{
Interval = 1000
};
timer.Elapsed += Timer_Elapsed;
timer.Start();
Application.EnableVisualStyles();
@ -102,12 +103,9 @@ namespace Deckungsbeitrag
}
Settings.Default.Save();
Cursor.Current = Cursors.Default;
if (istest) { Application.Run(new FormAufleger()); return; }
if (userid.StartsWith("ms") | userid.StartsWith("ps"))
@ -239,7 +237,6 @@ namespace Deckungsbeitrag
private static void ArtikelList_Laden()
{
string updatePath = Path.Combine(savePath, "Listen");
updatePath = @"N:\TECHNIK\Software\Wirl-Verwaltung\Listen"; //Pfad zu Listen
string dateiName = "Artikelkurzliste.csv";
string row;
string[] rows;
@ -280,9 +277,7 @@ namespace Deckungsbeitrag
tosave++;
// Artikel wird in DB gesucht und geholt.
Artikel art = Artikel.GetArtikel(Convert.ToInt32(linedata[1]), null);
if (art == null) art = new Artikel();
Artikel art = Artikel.GetArtikel(Convert.ToInt32(linedata[1]), null) ?? new Artikel();
art.Nummer = Convert.ToInt32(linedata[1]);
art.Bezeichnung = linedata[3];
@ -437,9 +432,7 @@ namespace Deckungsbeitrag
tosave++;
// Kunde wird gesucht und aus DB geholt.
Kunde kunde = Kunde.GetKunde(linedata[0], null, null);
if (kunde == null) kunde = new Kunde();
Kunde kunde = Kunde.GetKunde(linedata[0], null, null) ?? new Kunde();
kunde.KundeNummer = linedata[0];
kunde.KundeGruppe = linedata[3];
kunde.PLZ = int.TryParse(linedata[4], out int tmp2) ? tmp2 : 00;
@ -458,7 +451,7 @@ namespace Deckungsbeitrag
}
kunde.Region = linedata[48];
if (kunde.Suchtext != linedata[55]) kunde.Suchtext = linedata[55];
kunde.Aktiv = linedata[56] == "1" ? true : false;
kunde.Aktiv = linedata[56] == "1";
if (kunde.Save() == 1) saved++;
}
@ -525,7 +518,7 @@ namespace Deckungsbeitrag
var psi = new ProcessStartInfo
{
FileName = "msiexec.exe",
Arguments = $"/i \"{localMsi}\" /qn /norestart ALLUSERS=1 /L*v \"C:\\tmp\\update.log\"",
Arguments = $"/i \"{localMsi}\" /norestart ALLUSERS=1 /L*v \"C:\\tmp\\update.log\"",
Verb = "runas",
UseShellExecute = true
};
@ -602,12 +595,12 @@ namespace Deckungsbeitrag
public static void AddFeedback(Benutzer user, string feedbackText, string bildDateiname, string timeStamp)
{
string vaultPath = Path.Combine(savePath, "Feedback\\VerwaltungFeedback.md");
string feedback = string.Empty;
Benutzer ben = benutzer;
// Wenn User existiert wird dieser Verwendet. Sonst der bei Anmeldung registrierte Benutzer.
if (user != null) ben = user;
string feedback;
// Wenn der Bilddateiname leer ist wird feedback ohne Bilddateiname erstellt.
if (string.IsNullOrWhiteSpace(bildDateiname))
{
@ -636,15 +629,15 @@ namespace Deckungsbeitrag
{
string path = Path.Combine(savePath, "Feedback");
string vaultPath = Path.Combine(path, "VerwaltungFehler.md");
//string bildPath = Path.Combine(savePath, bildDateiname);
string fehler = string.Empty;
string benutzerKennung = string.Empty;
Benutzer ben = benutzer;
// Wenn User existiert wird dieser Verwendet. Sonst der bei Anmeldung registrierte Benutzer.
if (user != null) ben = user;
string benutzerKennung;
if (ben.BenutzerID == null) benutzerKennung = userid; else benutzerKennung = ben.Vorname + " " + ben.Nachname;
if (timeStamp == null) timeStamp = DateTime.Now.ToString("dd.MM.yyyy-HH-mm");
//string bildPath = Path.Combine(savePath, bildDateiname);
string fehler;
// Wenn der Bilddateiname leer ist wird feedback ohne Bilddateiname erstellt.
if (string.IsNullOrWhiteSpace(fehlerStackTrace))
{
@ -664,5 +657,5 @@ namespace Deckungsbeitrag
#endregion
}
}
//TODO: Mit AddFehler in Obsidian eine Fehlerliste betreiben. (Wichtige Infos feststellen und bereitstellen)
//DOEN: Mit AddFehler in Obsidian eine Fehlerliste betreiben. (Wichtige Infos feststellen und bereitstellen)
//DONE: Mit AddFehler können Fehler aus try/chatch in Obsidian eingefügt werden. (Timestamp, PC-Name, Ex-Message)

View File

@ -25,7 +25,6 @@ namespace Deckungsbeitrag.UserControls
private readonly Benutzer user;
private readonly Kunde kunde;
private List<KundeArtikel> artikelListe;
private readonly int controlHeight;
private bool neueinventur = false;
private readonly string[] lines;
private bool formLoading = false;

View File

@ -48,7 +48,7 @@ namespace Deckungsbeitrag.UserControls
{
bool toClone = true;
string saison = string.Empty;
int saisonrhythmus = 0;
int saisonrhythmus;
FlowLayoutPanel dropTarget = sender as FlowLayoutPanel;
DayOfWeek dropDay = DayOfWeek.Sunday;
@ -114,9 +114,7 @@ namespace Deckungsbeitrag.UserControls
// Move statt Clone KundenControl
if (e.Data.GetDataPresent(typeof(UCKunde)))
{
UCKunde draggedControl = e.Data.GetData(typeof(UCKunde)) as UCKunde;
if (draggedControl == null || dropTarget == null || draggedControl.Parent.Tag != dropTarget.Tag) return;
if (!(e.Data.GetData(typeof(UCKunde)) is UCKunde draggedControl) || dropTarget == null || draggedControl.Parent.Tag != dropTarget.Tag) return;
dropTarget.SuspendLayout();
try
@ -182,7 +180,6 @@ namespace Deckungsbeitrag.UserControls
private static Liefertage GetKompatiblenRhythmus(DayOfWeek dropDay, Liefertage originalRhythmus)
{
Meldungen meldung = new Meldungen();
CancelEventArgs e = new CancelEventArgs();
string dropTag = CultureInfo.GetCultureInfo("de-DE").DateTimeFormat.GetDayName(dropDay);
// 1. Ist dropDay im Original enthalten? Wird originalRhythums zurück gegeben.
@ -331,11 +328,10 @@ namespace Deckungsbeitrag.UserControls
for (int i = 0; i < 3; i++)
{
string lblName = $"{baseName}{i}"; // labelContMO0, labelContMO1, labelContMO2
var lbl = tableLayoutPanelTage.Controls
.Find(lblName, true)
.FirstOrDefault() as Label;
if (lbl != null && int.TryParse(lbl.Text, out int value))
if (tableLayoutPanelTage.Controls
.Find(lblName, true)
.FirstOrDefault() is Label lbl && int.TryParse(lbl.Text, out int value))
{
counts[i] = value;
}
@ -372,8 +368,10 @@ namespace Deckungsbeitrag.UserControls
foreach (var kundeData in kundenListe) // nur die Kunden dieses Tags
{
Kunde kunde = Kunde.GetKunde(null, kundeData.KundeID, null);
UCKunde kundectrl = new UCKunde(kunde);
kundectrl.Tag = kunde;
UCKunde kundectrl = new UCKunde(kunde)
{
Tag = kunde
};
zielFlp.Controls.Add(kundectrl);
}
}
@ -382,11 +380,10 @@ namespace Deckungsbeitrag.UserControls
if (data.Counter.TryGetValue(tag, out int[] counts))
{
string counterName = $"labelCont{tag}";
var counterLabel = tableLayoutPanelTage.Controls
.Find(counterName, true)
.FirstOrDefault() as Label;
if (counterLabel != null)
if (tableLayoutPanelTage.Controls
.Find(counterName, true)
.FirstOrDefault() is Label counterLabel)
{
counterLabel.Text = $"{counts[0]}/{counts[1]}/{counts[2]}";
}
@ -401,4 +398,3 @@ namespace Deckungsbeitrag.UserControls
//CHANGES: Wenn der Lieferrhythmus geändert wird, werden KundenControls an falschen Tagen gelöscht.
//CHANGES: Lieferrhythmen können angepasst und übernommen werden.
//CHANGES: Speichern und Laden wurde angepasst, JSON enthält jetzt pro Tag eine Kundenliste.
//CHANGES: Winter und Sommer wird getrennt geändert und gespeichert.

View File

@ -85,6 +85,7 @@
<Reference Include="ObjectListView, Version=2.9.3.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>packages\ObjectListView.Updated.2.9.3\lib\net40\ObjectListView.dll</HintPath>
</Reference>
<Reference Include="PresentationCore" />
<Reference Include="Spire.Barcode, Version=7.4.1.0, Culture=neutral, PublicKeyToken=663f351905198cb3, processorArchitecture=MSIL">
<HintPath>packages\Spire.Barcode.7.4.1\lib\net48\Spire.Barcode.dll</HintPath>
</Reference>

View File

@ -4,65 +4,59 @@ NEUIGKEITEN - Version 1.0.9.2
Build-Info:
- Build-Typ: Release Build
- Erledigte TODOs: 19
- Offene TODOs: 37
- Install-Reminders: 4
- Changes: 15
- Erledigte TODOs: 15
- Offene TODOs: 31
- Install-Reminders: 2
- Changes: 16
=== ⚙️ INSTALL-REMINDER (4) ===
- ⚙️ DB anpassen. [Benutzer.cs]
=== ⚙️ INSTALL-REMINDER (2) ===
- ⚙️ DB anpassen. (Priority in Auftrag etc.) [Auftrag.cs]
- ⚙️ Tabelle KundeArtikel Spalten ArtikelID und Reihung hinzufügen. [FormKundeVW.cs]
- ⚙️ Tabelle Tour in Datenbank einfügen [Tour.cs]
=== ✨ CHANGES (15) ===
=== ✨ CHANGES (16) ===
- ✨ Artikelliste und Kundenliste werden automatisch importiert wenn vorhanden. [FormMain.cs]
- ✨ Class Tour wurde erstellt. Speichern, Laden und Bearbeiten von Touren sollte möglich sein. [Tour.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]
- ✨ 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]
- ✨ KundeArtikel wird mit Reihung gespeichert und angezeigt. [FormKundeVW.cs]
- ✨ Lieferrhythmen können angepasst und übernommen werden. [UCTabPageLKW.cs]
- ✨ OnBoarding wird jetzt gespeichert wenn gesehen. [Benutzer.cs]
- ✨ Programm wird mit Button geschlossen. (Sicherheitsabfrage ob wirklich gewollt wird gemacht.) [FormAufleger.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]
- ✨ Winter und Sommer wird getrennt geändert und gespeichert. [UCTabPageLKW.cs]
- ✨ Wenn ein anderer Fahrer ausgewählt wird, wird auch die Priority laut dem Fahrer geändert. [FormExpedit.cs]
=== ✅ ERLEDIGTE TODOs (19) ===
- ✅ : Auftrag über FormListe holen und daraus den Kunden für Fehlmenge holen. [FormFehlmengeCount.cs]
- ✅ : Auftragliste bei Fahrer anzeigen wenn Login. [FormMain.cs]
=== ✅ ERLEDIGTE TODOs (15) ===
- ✅ : Bei Transport wir ein Fach mit Aktuellem Auftrag erstellt. Das Alte wird bei Transport gespeichert. [FormAusschlager.cs]
- ✅ : CLick auf Inventur freigeben Dateiname von "Warten" auf "Herrichten" ändern. [UCInventur.cs]
- ✅ : ComboBox Fahrer und Priorität implementieren [FormAuftragDetail.cs]
- ✅ : Container schmutzig bearbeitbar machen [FormAuftragDetail.cs]
- ✅ : Feedback Button hinzufügen [FormAuftragDetail.cs]
- ✅ : HILFE zeigt OnBoarding. [FormMain.cs]
- ✅ : Inventur freigeben nur für Admin oder Verwaltung. [UCInventur.cs]
- ✅ : Inventur für Expedit zugänglich machen. [UCInventur.cs]
- ✅ : JSON nach angemeldeten Fahrer durchsuchen und Kundenliste des aktuellen Wochentag anzeigen. [FormMain.cs]
- ✅ : Korrigiere Bestand: Wenn -Zahl dann Stand - Zahl. [FormAuftragDetail.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]
- ✅ : Mit AddFehler können Fehler aus try/chatch in Obsidian eingefügt werden. (Timestamp, PC-Name, Ex-Message) [Program.cs]
- ✅ : Neue Aufgabe Screen erstellen. [FormNeueAufgabe.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]
- ✅ : Speichern etc. durchgehen und adaptieren [FormAuftragDetail.cs]
- ✅ : Wenn Fahrer neuen Auftrag erstellt, wird Tour (BenutzerID & Liefertag) gesucht und gespeichert oder upgedatet. Dabei werden die Containerzahlen schmutzig addiert und die Kundenanzahl um 1 erhöht. [Tour.cs]
- ✅ : Wenn Frottee-Expedit auch Reklamation bearbeitet, muss BenutzerRolle abgefragt werden. siehe CHANGES. [FormFehlmengeCount.cs]
- ✅ : Wenn NeuerAuftrag gewählt Fach ändern nicht vergessen. [FormAusschlager.cs]
- ✅ : Wenn NeuerAuftrag gewählt wie gehts weiter? [FormAusschlager.cs]
- ✅ : Wenn RegAuftrag wird als augeliefert markiert, wird dieser automatisch neu erstellt laut hinterlegtem Rhythmus. [FormMain.cs]
=== 🔄 OFFENE TODOs (37) ===
=== 🔄 OFFENE TODOs (31) ===
- 🔄 !!ÜBERLEGE!! DB-Query für Kundenanzahl und Containeranzahl Abgleich. (Aufträge haben TourID hinterlegt. So sollte alles vergleichbar sein.) [Tour.cs]
- 🔄 !!ÜBERLEGE!! Tour Start und Ende automatisch erfassen. [Tour.cs]
- 🔄 !!ÜBERLEGE!! Tour Start und Ende automatisch erfassen. (Beladenscan und Entladescan?) [Tour.cs]
- 🔄 Alle Icons in einer Spalte anzeigen? I für Anmerkung und ! für Aufgabe?? [FormMain.cs]
- 🔄 Alle Icons in einer Spalte anzeigen? I für Anmerkung und ! für Aufgabe?? [UCAuftragListe.cs]
- 🔄 Auftrag richtig speichern... mit gedruckt bzw. erledigt bzw. [FormExpedit.cs]
- 🔄 Auftrag Schnellerfassung erstellen. Kundenliste aus JSON in OLV einfügen wenn schmutzig > 0 dann Auftrag erstellen. Spalten: "Kunde, schmutzig, liefertag, zustellfahrer" evnetuell in AuftragVW? [FormMain.cs]
- 🔄 Auftragauswahl aufrufen statt NeuerAuftrag. (Wenn Fahrer Aufträge erstellen) [FormWSVerfolgung.cs]
- 🔄 Aufträge zusammenführen wenn gleicher Kunde und Liefertag. [FormNeuerAuftrag.cs]
- 🔄 Ausprobieren ob die Ausrichtung jetzt richtig ist. Sowohl beim ersten wie auch zweiten Mal. [Funktionen.cs]
@ -77,23 +71,18 @@ Build-Info:
- 🔄 Funktioniert mehrere KundenControls auf einmal DragDrop? [FormTourenplanung.cs]
- 🔄 Gesamt soll immer 100% sein. [Funktionen.cs]
- 🔄 Hier Settings speichern mit UserSettingsManager Klasse. [FormEinstellung.cs]
- 🔄 JSON nach angemeldeten Fahrer durchsuchen und Kundenliste des aktuellen Wochentag anzeigen. [FormMain.cs]
- 🔄 Kundenanzahl bei Tourenliste erstellen vergleichen und anpassen. [Tour.cs]
- 🔄 Mit AddFehler in Obsidian eine Fehlerliste betreiben. (Wichtige Infos feststellen und bereitstellen) [Program.cs]
- 🔄 Nach Test und Rücksprache eventuell wieder umbauen. Benutzer.Rolle etc. [FormFehlmengeCount.cs]
- 🔄 nicht ganze Aufträge holen sondern nur die Zahlen? [FormMain.cs]
- 🔄 Non-Hard-Coded-Lösung für Priority finden. [Auftrag.cs]
- 🔄 Reg.Aufträge einbauen. Besonderheit: Die Artikel sollen ebenfalls erscheinen. [Funktionen.cs]
- 🔄 Settings hier ändern auf UserSettingsManager Klasse. [FormEinstellung.cs]
- 🔄 Speichern etc. durchgehen und adaptieren [FormAuftragDetail.cs]
- 🔄 TourenListe Entwurf muss überarbeitet werden. [FormNeuerAuftrag.cs]
- 🔄 Umbau in Switch. [FormWSVerfolgung.cs]
- 🔄 UserSetting Properties eintragen und in EinstellungsScreen abrufen. [UserSettingsManager.cs]
- 🔄 Warum der falsche Path? Immer mit \\ [UCFeedback.cs]
- 🔄 Weitere Properties von oben hier zuweisen [UserSettingsManager.cs]
- 🔄 Wenn Auftrag abgeschlossen wird muss die Containerzahl sauber addiert werden. Kundenanzahl und Containeranzahl schmutzig darf nicht erhöht werden. [Tour.cs]
- 🔄 Wenn Frottee-Expedit auch Relamation bearbeitet, muss BenutzerRolle abgefragt werden. siehe CHANGES. [FormFehlmengeCount.cs]
- 🔄 Zuweisung zu Fahrer muss geklärt werden. [Funktionen.cs]
Installation: 17.04.2026 07:41
Installation: 21.04.2026 09:01
=====================================