using DatenDB; using Deckungsbeitrag.AA_Forms; using Deckungsbeitrag.AA_Klassen; using Deckungsbeitrag.UserControls; using Microsoft.VisualBasic; using System; using System.Collections.Generic; using System.ComponentModel; using System.Configuration; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.InteropServices; using System.Text; using System.Text.Json; using System.Threading.Tasks; using System.Web.Caching; using System.Windows.Forms; using System.Windows.Forms.VisualStyles; namespace Deckungsbeitrag { public partial class FormNeuerAuftrag : Form { #region Properties public Meldungen meldung = new Meldungen(); public Kunde kunde; public Auftrag Auftrag; public Auftrag extraAuftrag; public Fach fach; public AuftragArtikel AuftragArtikel; private Benutzer benutzer; private Maschine maschine; bool extra; List sortimentListe; public DateTime? letzterLiefertag; private Kunde knd; public DataGridViewCell aktivCell; private string userid; private AuftragTyp auftragtyp = AuftragTyp.Standart; private string eingabe = string.Empty; private DateTime nextLiefertag = DateTime.Today; private OnboardingSchritt onBoardingArt = OnboardingSchritt.NeuerAuftrag; string[] touren; string tour; #endregion #region Form-Konstruktor public FormNeuerAuftrag() { InitializeComponent(); } public FormNeuerAuftrag(Benutzer benutzer) : this() { this.benutzer = benutzer; } public FormNeuerAuftrag(Benutzer benutzer, AuftragTyp auftragTyp) : this(benutzer) { this.auftragtyp = auftragTyp; } public FormNeuerAuftrag(Benutzer benutzer, DateTime? letzterLiefertag, AuftragTyp auftragTyp) : this(benutzer, auftragTyp) { this.letzterLiefertag = letzterLiefertag; } public FormNeuerAuftrag(string userid) : this() { this.userid = userid; if (userid.Contains("wstrasse01")) this.benutzer = Benutzer.GetBenutzer("ws1", null); if (userid.Contains("wstrasse02")) this.benutzer = Benutzer.GetBenutzer("ws2", null); } #endregion private void FormNeuerAuftrag_Load(object sender, EventArgs e) { string kndService = string.Empty; this.Text += " Version: " + Assembly.GetExecutingAssembly().GetName().Version.ToString(); // SortimentListe holen sortimentListe = Funktionen.SortimentLesen("Liste"); // Kunde holen if (auftragtyp == AuftragTyp.Regelmäßig) kndService = "Geschäft"; if (this.benutzer.Rolle == BenutzerRolle.Fahrer) kndService = "Geschäft"; this.kunde = Funktionen.Open_List(kndService); // ComboBox AuftragTyp wird geladen und richtiges Item selected. // Falls KundenAuswahl null liefert wird Form geschlossen oder wenn Waschstrasse neu geladen. if (this.kunde != null) { if (this.auftragtyp != AuftragTyp.Regelmäßig) { Saison Saison = Saison.GetAktivSaison(); if (Saison.Bezeichnung == "Sommer") nextLiefertag = Funktionen.GetNextLiefertag((Liefertage)this.kunde.SommerLieferRhythmus); if (Saison.Bezeichnung == "Winter") nextLiefertag = Funktionen.GetNextLiefertag((Liefertage)this.kunde.WinterLieferRhythmus); if (Saison.Bezeichnung == "Zwischensaison") { bool? ok = ShowTourenplan(); if (ok == null) { this.Close(); return; } if ((bool)!ok) { meldung.GetInfo(this, "Achtung Liefertag kann falsch sein, da Zwischensaison ist.", false); DateTime datum = DateTime.Today; int tage = 2; while (tage > 0) { datum = datum.AddDays(1); if (datum.DayOfWeek != DayOfWeek.Saturday && datum.DayOfWeek != DayOfWeek.Sunday) { tage--; } } nextLiefertag = datum; } } } comboBoxTyp_Load(); comboBoxFahrer_Load(); DatenLaden(); } else { this.DialogResult = DialogResult.Cancel; this.Close(); } this.textBoxKundeName.Enabled = false; this.textBoxKndNr.Enabled = false; // RadioButtons und ComboBoxen laden. if(this.kunde != null) Funktionen.Get_RadioButtons(this); } private bool? ShowTourenplan() { FormShowUserControl showUserControl = new FormShowUserControl("Tourenplan", this.benutzer, this.kunde); if (showUserControl.ShowDialog() == DialogResult.OK) { var data = showUserControl.lieferDaten; nextLiefertag = data.datum; touren = data.touren; tour = data.text; return true; } if (MessageBox.Show("Möchtest du die Eingabe von Aufträgen beenden?", "FRAGE", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) return false; else { return null; } } /// /// Kundendaten Liefertag werden eingefügt. /// private void DatenLaden() { this.textBoxKndNr.Text = kunde.KundeNummer; if (string.IsNullOrWhiteSpace(kunde.Suchtext)) this.textBoxKundeName.Text = kunde.KundeName; else this.textBoxKundeName.Text = kunde.Suchtext; this.dTPLiefertag.Value = nextLiefertag; this.textBoxCont.Text = "0"; if (this.benutzer.Rolle == BenutzerRolle.Fahrer) { if (this.benutzer.Tour == tour) this.comboBoxFahrer.SelectedItem = this.comboBoxFahrer.Items.Cast().FirstOrDefault(t => t.Tour == tour); else this.comboBoxFahrer.SelectedItem = this.comboBoxFahrer.Items.Cast().FirstOrDefault(t => t.Tour == tour); } else this.comboBoxFahrer.SelectedIndex = -1; dTPLiefertag_Leave(this.dTPLiefertag, EventArgs.Empty); } private void comboBoxTyp_Load() { try { this.SuspendLayout(); this.comboBoxTyp.SelectedValueChanged -= comboBoxTyp_SelectedValueChanged; // Items werden von AuftragTyp geladen. this.comboBoxTyp.DataSource = Enum.GetValues(typeof(AuftragTyp)); // Wenn der Kunde ein Geschäftskunde ist, wird AuftragTyp.Geschäft ausgewählt. Andernfalls wird der AuftragTyp aus dem Konstruktor gewählt. this.comboBoxTyp.SelectedValueChanged += comboBoxTyp_SelectedValueChanged; if (kunde.Service == "Geschäft") this.comboBoxTyp.SelectedItem = AuftragTyp.Geschäft; else this.comboBoxTyp.SelectedItem = auftragtyp; //if (this.benutzer.Rolle == BenutzerRolle.Fahrer) //{ // this.comboBoxTyp.Enabled = true; //} //else this.comboBoxTyp.Enabled = false; this.ResumeLayout(false); } catch (Exception ex) { MessageBox.Show(ex.Message, "FEHLER", MessageBoxButtons.OK, MessageBoxIcon.Error); Program.AddFehler(this.benutzer, ex.Message, ex.StackTrace, null); throw; } } private void comboBoxFahrer_Load() { List benutzerliste = Benutzer.GetFahrerList(); this.comboBoxFahrer.DataSource = benutzerliste; if (string.IsNullOrWhiteSpace(tour)) this.comboBoxFahrer.DisplayMember = "BenutzerName"; else this.comboBoxFahrer.DisplayMember = "Tour"; } /// /// Button Click Events. /// /// /// private void buttonAbbrechen_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.Cancel; this.Close(); } private void buttonSpeichern_Click(object sender, EventArgs e) { if (!this.ValidateChildren(ValidationConstraints.Enabled)) return; if(kunde == null) { MessageBox.Show("Auftrag kann nicht gespeichert werden. Kein Kunde vorhanden.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); this.textBoxKndNr.Focus(); return; } this.Auftrag = Aktualisieren(kunde); // Wenn Fahrer den Auftrag speichert if (this.benutzer.Rolle == BenutzerRolle.Fahrer) { FahrerAuftraegeSpeichern(this.Auftrag); return; } // Wenn Expedit/Waschstrasse/Verwaltung/Admin den Auftrag speichert switch ((AuftragTyp)comboBoxTyp.SelectedItem) { //case AuftragTyp.Geschäft: // break; //case AuftragTyp.Standart: // break; //case AuftragTyp.Inventur: // break; //case AuftragTyp.AufAbruf: // break; case AuftragTyp.Standerhöhung: SpezialAuftragSpeichern(Auftrag); return; case AuftragTyp.Standverminderung: SpezialAuftragSpeichern(Auftrag); return; case AuftragTyp.Regelmäßig: SpezialAuftragSpeichern(Auftrag); return; case AuftragTyp.Einmalig: SpezialAuftragSpeichern(Auftrag); return; default: break; } if (Auftrag.FindeAuftrag(true).Gefunden) //TODO: Aufträge zusammenführen wenn gleicher Kunde und Liefertag. { if (meldung.AuftragVorhanden(Auftrag) == DialogResult.Yes) { if (benutzer.Rolle == BenutzerRolle.Verwaltung || benutzer.Rolle == BenutzerRolle.Admin) Auftrag.Status = AuftragStatus.Herrichten; else Auftrag.Status = AuftragStatus.Abgeholt; //Wenn SONDERAUFTRAG(STH,STV,STA) dann ARTIKEL speichern. if (Auftrag.Typ >= AuftragTyp.Inventur & Auftrag.Typ <= AuftragTyp.Standverminderung) { int tosave = 0; int saved = 0; //Kontrolle ob alle Artikel gespeichert wurden. if (saved != tosave) meldung.Speicherfehler(); else { //Speichern von AUFTRAG Auftrag.Save(); //GetInventurCSV(); } } else { if (!extra) { if (Auftrag.Save()[1] == 1) this.Close(); } else Auftrag.Save(); } } else { Auftrag = new Auftrag(); FormNeuerAuftrag_Load(this, e); return; } } else { switch (benutzer.Rolle) { case BenutzerRolle.Verwaltung: Auftrag.Status = AuftragStatus.Herrichten; break; case BenutzerRolle.Fahrer: Auftrag.Status = AuftragStatus.Abgeholt; if (Auftrag.ArbeiterID == null) Auftrag.ArbeiterID = benutzer.BenutzerID; break; case BenutzerRolle.Admin: Auftrag.Status = AuftragStatus.Herrichten; break; case BenutzerRolle.Waschstrasse: Auftrag.Status = AuftragStatus.Aufgelegt; break; case BenutzerRolle.Master: break; case BenutzerRolle.Expedit: Auftrag.Status = AuftragStatus.Gewaschen; break; case BenutzerRolle.Frottee: break; case BenutzerRolle.Flach: break; default: break; } Auftrag.Save(); } this.DialogResult = DialogResult.OK; this.Close(); } private Auftrag Aktualisieren(Kunde knd) { int? arbeiterID; DateTime liefertag; string zusatz = string.Empty; // Wenn Kundennummer ist Div.Barzahler(in FormListe wenn mit ? am Anfang) wird individueller Kundename als Zusatzinfo gespeichert. if (knd.KundeNummer == "2320000") zusatz = string.IsNullOrWhiteSpace(knd.Suchtext) ? "Kunde: " + knd.KundeName : "Kunde: " + knd.Suchtext; else if (!string.IsNullOrWhiteSpace(eingabe)) zusatz = "Fahrerwechsel: " + eingabe; Auftrag _auftrag = new Auftrag() { AuftragID = this.Auftrag == null ? null : this.Auftrag.AuftragID, KundeID = (int)knd.KundeID, ArbeiterID = arbeiterID = this.comboBoxFahrer.SelectedIndex == -1 ? null : ((Benutzer)this.comboBoxFahrer.SelectedItem).BenutzerID, AufgabeID = knd.Aufgabe != null ? knd.Aufgabe : null, Liefertag = liefertag = this.dTPLiefertag.Value, Container = int.TryParse(this.textBoxCont.Text, out int i) ? i : 0, ErstelltVon = (int)this.benutzer.BenutzerID, Erstellt = DateTime.Now, Typ = (AuftragTyp)comboBoxTyp.SelectedItem, Abteilungen = AbteilungsStatus.Keine, Priority = Funktionen.GetPriority((Benutzer)this.comboBoxFahrer.SelectedItem), Status = this.benutzer.Rolle == BenutzerRolle.Fahrer ? AuftragStatus.Abgeholt : AuftragStatus.Herrichten, Rhythmus = this.comboBoxRhythmus.Enabled ? (RegRhythmen)this.comboBoxRhythmus.SelectedItem : RegRhythmen.Unbekannt, TourID = this.Auftrag.TourID == null || this.Auftrag.TourID == 0 ? GetTour(arbeiterID, liefertag) : this.Auftrag.TourID, ZusatzInfo = zusatz, }; return _auftrag; } private int? GetTour(int? arbeiterID, DateTime liefertag) { Tour tour = null; do { tour = Tour.FindeTour(null, arbeiterID, liefertag); if (tour == null) Funktionen.UpdateOrSaveTour(Auftrag.TourID, Auftrag); } while (tour == null); return tour.TourID; } private void SpezialAuftragSpeichern(Auftrag Auftrag) { if (Auftrag.FindeAuftrag(true).Gefunden) { int aufID = Auftrag.FindeAuftrag(false).auftragID; Auftrag auf = Auftrag.GetAuftrag(aufID); List liste = AuftragArtikel.GetList(auf.AuftragID); string output = string.Join(Environment.NewLine, liste.Select(a => $"{a.ArtikelName,-20} {a.Anzahl,4} Stk.")); if (MessageBox.Show($"Es wurde ein Auftrag von {kunde.Suchtext ?? kunde.KundeName} für {auf.Liefertag.ToShortDateString()}\nmit folgenden Artikeln gefunden:\n\n{output}\nGeplanter Rhythmus: {Lieferrhythmen.Rhythmus}\n\nMöchtest du den Auftrag als erledigt markieren?", "AUFTRAG GEFUNDEN", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { auf.Status = AuftragStatus.Erledigt; foreach (AuftragArtikel art in liste) { art.Erledigt = true; art.Save(); } if (auf.Save()[0] != 1) meldung.Speicherfehler(); } else return; } if (Auftrag.Save()[0] != 1) meldung.Speicherfehler(); else { foreach (UCArtikel uca in this.fLPArtikel.Controls) { int? id; string artname; if (uca.Tag != null) { if (uca.Tag is Artikel) { id = ((Artikel)uca.Tag).ArtikelID; artname = ((Artikel)uca.Tag).Nummer + ((Artikel)uca.Tag).Bezeichnung; } else { id = ((KundeArtikel)uca.Tag).ArtikelID; artname = ((KundeArtikel)uca.Tag).ArtikelNR + ((KundeArtikel)uca.Tag).ArtikelName; } } else { id = null; artname = uca.ArtikelName.ToString(); } AuftragArtikel aufart = new AuftragArtikel() { AuftragID = Auftrag.AuftragID, ArtikelID = id, ArtikelName = artname, Anzahl = uca.Anzahl, Erledigt = false, Gesamt = uca.Anzahl, }; aufart.Save(); } } this.Close(); } private void FahrerAuftraegeSpeichern(Auftrag Auftrag) { if (Auftrag.FindeAuftrag(false).Gefunden) { if (meldung.GetFrage(this, $"Der Auftrag {Kunde.GetKunde(null, Auftrag.KundeID, null).Suchtext} Liefertag {Auftrag.Liefertag.ToShortDateString()} ist bereits vorhanden.\nMöchtest du diesen bearbeiten?\n\n[JA] => Auftrag bearbeiten\n[NEIN] => Neuen Auftrag erstellen", false) == DialogResult.Yes) { Auftrag = Auftrag.GetAuftrag(Auftrag.FindeAuftrag(false).auftragID); Auftrag.Container += int.Parse(this.textBoxCont.Text); if (Auftrag.Save()[0] != 1) meldung.Speicherfehler(); else meldung.GetInfo(this, $"Der Auftrag wurde bearbeitet.\nBitte suche den Auftrag von {Kunde.GetKunde(null, Auftrag.KundeID, null).Suchtext} mit Liefertag {Auftrag.Liefertag.ToShortDateString()} und stelle deine Container dazu.\nVergiss nicht die Containeranzahl auf der Karte auszubessern.", false); } else { Auftrag.ZusatzInfo += " Auftrag 2"; if (Auftrag.Save()[0] != 1) meldung.Speicherfehler(); else meldung.GetInfo(this, "Der Auftrag wurde als neuer Auftrag gespeichert.\nBitte vermerke auf der Containerkarte, dass dieser Auftrag 'Auftrag 2' ist.\n\nSollte das nicht richtig sein, melde es deinem Vorgesetzten.", false); } } else if (Auftrag.Save()[0] != 1) meldung.Speicherfehler(); if (this.benutzer.Rolle == BenutzerRolle.Fahrer) { this.Auftrag = null; this.kunde = Funktionen.KundenAuswahl(); if (this.kunde != null) { bool? ok = ShowTourenplan(); if (ok == null) { this.Close(); return; } if ((bool)ok) { DatenLaden(); return; } else this.Close(); } else this.Close(); } } private void Container_Click(object sender, EventArgs e) { PictureBox pb = (PictureBox)sender; int cont = int.Parse(this.textBoxCont.Text); if (pb.Name.ToString().Contains("Plus")) cont++; if (pb.Name.ToString().Contains("Minus")) cont--; this.textBoxCont.Text = cont.ToString(); } /// /// TextBox Events /// /// /// private void textBoxCont_TextChanged(object sender, EventArgs e) { if (this.textBoxCont.Text == "0") { this.pictureBoxMinus.Enabled = false; this.pictureBoxMinus.BackColor = Color.Gray; } else { this.pictureBoxMinus.Enabled = true; this.pictureBoxMinus.BackColor = Color.Red; } } /// /// Liefertag mit automatischer Berechnung des nächsten Datums bzw. des Wochentages des Datums. /// /// /// private void dTPLiefertag_Leave(object sender, EventArgs e) { foreach (RadioButton liefertag in this.Controls.OfType()) { if (liefertag.Name.Contains(((Liefertag)dTPLiefertag.Value.DayOfWeek).ToString())) liefertag.Checked = true; } } private void Liefertag_rB_Checked(object sender, EventArgs e) { foreach (RadioButton radioButton in this.Controls.OfType()) { if (radioButton.Checked) radioButton.BackColor = Color.Yellow; else { radioButton.BackColor = Color.Gray; } } } private void Liefertag_rB_Click(object sender, EventArgs e) { RadioButton radioButton = (RadioButton)sender; foreach(Liefertag tag in Enum.GetValues(typeof(Liefertag))) { if (radioButton.Name.Contains(tag.ToString())) this.dTPLiefertag.Value = Berechnungen.GetNextWeekday((int)tag); } //this.dTPLiefertag.Enabled = false; } private void dTPLiefertag_ValueChanged(object sender, EventArgs e) { dTPLiefertag_Leave(sender, e); } private void textBoxKndNr_Click(object sender, EventArgs e) { this.textBoxKndNr.Clear(); //Process.Start("C:\\Windows\\WinSxS\\amd64_microsoft-windows-osk_31bf3856ad364e35_10.0.22621.3672_none_8a93c823d58f9d77\\osk.exe"); } //Wenn der Kunde nicht gefunden wird und händisch eingegeben wird, wird beim verlassen der Textbox der Kunde als DIV ZIELKUNDE erstellt. //Der individuelle Kundename wird als KUNDE.SUCHTEXT eingetragen aber nicht gespeichert. private void textBoxKundeName_Leave(object sender, EventArgs e) { if (!string.IsNullOrWhiteSpace(textBoxKundeName.Text)) { kunde = Kunde.GetKunde("2300000", null, null); kunde.Suchtext = this.textBoxKundeName.Text; } } //Wenn mit TAB aus Textbox gesprungen wird, wird Focus auf TEXTBOX KUNDENAME gelegt. (Dadurch wird Fehlermeldung aktiviert) private void textBoxKndNr_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) { if (e.KeyValue == 9) textBoxKundeName.Focus(); } /// /// Überprüfen ob die Eingabe eine Zahl ist. Es wird sonst eine Meldung angezeigt und das weiterspringen wird verhindert. /// /// /// private void dGArtikel_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) { if (e.ColumnIndex >= 5) { DataGridView dgv = (DataGridView)sender; DataGridViewCell dgc = dgv.CurrentCell; if (!int.TryParse(dgc.EditedFormattedValue.ToString(), out int i)) { meldung.Eingabefehler(); e.Cancel = true; } } } private void comboBoxTyp_SelectedValueChanged(object sender, EventArgs e) { if (this.benutzer.Rolle == BenutzerRolle.Fahrer) { if ((AuftragTyp)comboBoxTyp.SelectedValue != AuftragTyp.Standart & (AuftragTyp)comboBoxTyp.SelectedValue != AuftragTyp.AufAbruf) { meldung.GetFehler(this, "Unerlaubter AuftragTyp. Bitte wähle Standart oder AufAbruf."); return; } } switch ((AuftragTyp)comboBoxTyp.SelectedValue) { case AuftragTyp.Geschäft: // Wird derzeit wenig verwendet da die Auswahl in DatenLaden nach KundenService erfolgt. this.Width = textBoxKundeName.Right + 30; this.Height = 470; break; case AuftragTyp.Standart: this.Width = textBoxKundeName.Right + 30; this.Height = 470; break; case AuftragTyp.Inventur: this.DialogResult = DialogResult.Abort; this.Close(); break; case AuftragTyp.Standerhöhung: if (this.kunde == null) return; this.panelRegAuftrag.Enabled = this.panelRegAuftrag.Visible = true; this.pictureBoxPlus.Enabled = this.pictureBoxMinus.Enabled = this.textBoxCont.Enabled = false; this.Width = this.panelRegAuftrag.Right + 25; this.Height = 470; break; case AuftragTyp.Standverminderung: if (this.kunde == null) return; this.panelRegAuftrag.Enabled = this.panelRegAuftrag.Visible = true; this.pictureBoxPlus.Enabled = this.pictureBoxMinus.Enabled = this.textBoxCont.Enabled = false; this.Width = this.panelRegAuftrag.Right + 25; this.Height = 470; break; case AuftragTyp.Regelmäßig: this.panelRegAuftrag.Enabled = this.panelRegAuftrag.Visible = true; this.pictureBoxPlus.Enabled = this.pictureBoxMinus.Enabled = this.textBoxCont.Enabled = false; this.Width = this.panelRegAuftrag.Right + 25; this.Height = 470; break; case AuftragTyp.AufAbruf: this.Width = textBoxKundeName.Right + 30; this.Height = 470; break; case AuftragTyp.Einmalig: this.panelRegAuftrag.Enabled = this.panelRegAuftrag.Visible = true; this.pictureBoxPlus.Enabled = this.pictureBoxMinus.Enabled = this.textBoxCont.Enabled = false; this.Width = this.panelRegAuftrag.Right + 25; this.Height = 470; break; default: break; } } private void comboBoxFahrer_Validating(object sender, CancelEventArgs e) { if (((ComboBox)sender).SelectedIndex == -1) return; if (((Benutzer)((ComboBox)sender).SelectedItem).BenutzerID == this.benutzer.BenutzerID) return; if (this.benutzer.Rolle == BenutzerRolle.Verwaltung || this.benutzer.Rolle == BenutzerRolle.Admin || this.benutzer.Rolle == BenutzerRolle.Expedit) return; if (meldung.GetFrage(this, "Möchtest du den Auftrag wirklich einem anderen Fahrer zuteilen?", false) == DialogResult.No) { ((ComboBox)sender).SelectedIndex = -1; e.Cancel = true; } else { eingabe = Interaction.InputBox("Warum möchtest du den Auftrag einem anderen Fahrer zuteilen?\n\nGrund:", "Sonderzuteilung", ""); if (string.IsNullOrWhiteSpace(eingabe)) e.Cancel = true; else eingabe += " / "; } } private void buttonEinstellung_Click(object sender, EventArgs e) { FormKundeVW kundeVW = new FormKundeVW(this.kunde); kundeVW.ShowDialog(); } private void pictureBoxAddArtikel_Click(object sender, EventArgs e) { int index = 0; int artAnzahl = 1; string artname = string.Empty; string anzahl = string.Empty; UCArtikel uca; artname = Interaction.InputBox($"Möchtest du einen individuellen Artikel eingeben?\n\nArtikelname:", "ARTIKELNAME WÄHLEN", ""); if (!string.IsNullOrWhiteSpace(artname)) { do { if (index > 0) if (MessageBox.Show("Bitte nur ganze Zahlen eingeben.", "ACHTUNG", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.Cancel) return; anzahl = Interaction.InputBox($"Wieviel Stück sollen geliefert werden?\n\nStück:", "Artikelanzahl", ""); index++; } while (!int.TryParse(anzahl, out artAnzahl)); } var art = new Artikel() { Bezeichnung = artname, Nummer = 0000 }; uca = new UCArtikel(art, artAnzahl); uca.Width = fLPArtikel.Width - 25; uca.DeleteClicked += Uca_DeleteClicked; this.fLPArtikel.Controls.Add(uca); } private void Uca_DeleteClicked(object sender, EventArgs e) { this.fLPArtikel.Controls.Remove((UCArtikel)sender); } private void panelRegAuftrag_EnabledChanged(object sender, EventArgs e) { comboBoxArtikel.SelectedIndexChanged -= comboBoxArtikel_SelectedIndexChanged; Panel panel = sender as Panel; int dropdownWidth = comboBoxArtikel.DropDownWidth; if (panel.Enabled) { if ((AuftragTyp)comboBoxTyp.SelectedValue == AuftragTyp.Regelmäßig || (AuftragTyp)comboBoxTyp.SelectedValue == AuftragTyp.Einmalig) { List artikelListe; if ((AuftragTyp)comboBoxTyp.SelectedValue == AuftragTyp.Regelmäßig) artikelListe = Artikel.GetRegArtikelList(); else artikelListe = Artikel.GetArtikelList("Alle"); comboBoxArtikel.DataSource = artikelListe; comboBoxArtikel.DisplayMember = "Bezeichnung"; foreach (Artikel art in artikelListe) { int bezWidth = TextRenderer.MeasureText(art.Bezeichnung, comboBoxArtikel.Font).Width; if (dropdownWidth < bezWidth) dropdownWidth = bezWidth; } comboBoxArtikel.DropDownWidth = dropdownWidth; comboBoxArtikel.SelectedIndex = -1; comboBoxRhythmus.DataSource = Enum.GetValues(typeof(RegRhythmen)); comboBoxRhythmus.SelectedIndex = -1; if ((AuftragTyp)comboBoxTyp.SelectedValue == AuftragTyp.Einmalig) comboBoxRhythmus.Enabled = false; } if ((AuftragTyp)comboBoxTyp.SelectedValue == AuftragTyp.Standerhöhung || (AuftragTyp)comboBoxTyp.SelectedValue == AuftragTyp.Standverminderung) { List kndartikel = KundeArtikel.GetList(this.kunde.KundeID.ToString()); comboBoxArtikel.DataSource = kndartikel; comboBoxArtikel.DisplayMember = "ArtikelName"; foreach (KundeArtikel art in kndartikel) { int bezWidth = TextRenderer.MeasureText(art.ArtikelName, comboBoxArtikel.Font).Width; if (dropdownWidth < bezWidth) dropdownWidth = bezWidth; } comboBoxArtikel.DropDownWidth = dropdownWidth; comboBoxArtikel.SelectedIndex = -1; comboBoxRhythmus.Enabled = false; } } comboBoxArtikel.SelectedIndexChanged += comboBoxArtikel_SelectedIndexChanged; } private void FormNeuerAuftrag_Shown(object sender, EventArgs e) { } private async void FormNeuerAuftrag_HelpButtonClicked(object sender, CancelEventArgs e) { this.benutzer.OnboardingStatus = this.benutzer.ClearOnboardingFlag(onBoardingArt); // OnBoarding zurücksetzen await this.benutzer.UpdateOnBoardingAsync(); // Update OnBoardingStatus ZeigeOnboarding(); } private async void ZeigeOnboarding() { if (this.benutzer.IstGesehen(onBoardingArt)) return; // Bereits fertig if (Program.ShowOnBoarding(this.benutzer.Rolle.ToString(), onBoardingArt) == DialogResult.OK) { // Nächster Schritt → Flag setzen this.benutzer.OnboardingStatus = this.benutzer.SetOnboardingFlag(onBoardingArt); await this.benutzer.UpdateOnBoardingAsync(); // Deine Update-Methode //this.Close(); // Onboarding beendet } } private void comboBoxArtikel_SelectedIndexChanged(object sender, EventArgs e) { int index = 0; int artAnzahl = 1; string anzahl = string.Empty; UCArtikel uca; var art = this.comboBoxArtikel.SelectedItem; do { if (index > 0) if (MessageBox.Show("Bitte nur ganze Zahlen eingeben.", "ACHTUNG", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.Cancel) return; anzahl = Interaction.InputBox($"Wieviel Stück sollen geliefert werden?\n\nStück:", "Artikelanzahl", ""); index++; } while (!int.TryParse(anzahl, out artAnzahl)); if (art is Artikel) uca = new UCArtikel((Artikel)art, artAnzahl); else uca = new UCArtikel((KundeArtikel)art, artAnzahl); uca.Width = fLPArtikel.Width - 25; uca.DeleteClicked += Uca_DeleteClicked; this.fLPArtikel.Controls.Add(uca); } } } //TODO: TourenListe Entwurf muss überarbeitet werden.