Programm_Wirl/AA-Forms/FormNeuerAuftrag.cs

771 lines
29 KiB
C#

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<Sortiment> 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")
{
if (!ShowTourenplan())
{
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;
}
else return false;
}
/// <summary>
/// Kundendaten Liefertag werden eingefügt.
/// </summary>
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<Benutzer>().FirstOrDefault(t => t.Tour == tour);
else this.comboBoxFahrer.SelectedItem = this.comboBoxFahrer.Items.Cast<Benutzer>().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<Benutzer> benutzerliste = Benutzer.GetFahrerList();
this.comboBoxFahrer.DataSource = benutzerliste;
if (string.IsNullOrWhiteSpace(tour)) this.comboBoxFahrer.DisplayMember = "BenutzerName";
else this.comboBoxFahrer.DisplayMember = "Tour";
}
/// <summary>
/// Button Click Events.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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<AuftragArtikel> 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)
{
if (ShowTourenplan())
{
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();
}
/// <summary>
/// TextBox Events
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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; }
}
/// <summary>
/// Liefertag mit automatischer Berechnung des nächsten Datums bzw. des Wochentages des Datums.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dTPLiefertag_Leave(object sender, EventArgs e)
{
foreach (RadioButton liefertag in this.Controls.OfType<RadioButton>())
{
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<RadioButton>())
{
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();
}
/// <summary>
/// Überprüfen ob die Eingabe eine Zahl ist. Es wird sonst eine Meldung angezeigt und das weiterspringen wird verhindert.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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<Artikel> 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<KundeArtikel> 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.