Programm_Wirl/AA-Forms/FormFehlmengeCount.cs

507 lines
18 KiB
C#

using AForge.Video.DirectShow;
using DatenDB;
using System;
using System.CodeDom;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Web.UI.WebControls.WebParts;
using System.Windows.Forms;
using ZXing;
namespace Deckungsbeitrag
{
public partial class FormFehlmengeCount : Form
{
private FilterInfoCollection videoDevices;
Kunde kunde;
Auftrag auftrag;
List<KundeArtikel> artikelListe;
Meldungen meldung = new Meldungen();
private Benutzer benutzer;
private List<object> auftragsliste;
string userid;
#region Form-Konstruktor
public FormFehlmengeCount()
{
InitializeComponent();
this.groupBoxArtikel.Visible = false;
//this.textBoxScann.Focus();
}
public FormFehlmengeCount(Benutzer ben) : this()
{
this.benutzer = ben;
}
public FormFehlmengeCount(string uid) : this()
{
this.userid = uid;
}
#endregion
private void FormFehlmengeCount_Load(object sender, EventArgs e)
{
videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
this.Text = " Version: " + Assembly.GetExecutingAssembly().GetName().Version.ToString();
//Kunde wird durch Scan oder Handeingabe Ausgewählt.
//this.kunde = Funktionen.KundenAuswahl();
Open_Liste();
ControlLaden();
CloseKeyboard();
}
private void CloseKeyboard()
{
// Alle gestarteten Instanzen von TabTip.exe (Touch Tastatur) schließen
foreach (var process in Process.GetProcessesByName("TabTip"))
{
try
{
process.Close();
}
catch (Exception es)
{
// Fehlerbehandlung falls Prozess nicht beendet werden kann
MessageBox.Show($"Fehler beim Schließen: " + es.Message);
}
}
}
private void ControlLaden()
{
// Nachdem die textboxScann verlassen wird und ein Kunde gefunden wurde wird Form_Load ausgelöst.
if (kunde != null)
{
this.labelSuchtext.Text = kunde.Suchtext;
this.labelName.Text = kunde.KundeName;
this.labelName.Visible = this.labelSuchtext.Visible = true;
this.labelAnmerkung.Visible = this.labelAnmerkungText.Visible = true;
if (!string.IsNullOrWhiteSpace(this.kunde.Anmerkung))
{
this.labelAnmerkungText.Text = kunde.Anmerkung;
this.labelAnmerkungText.BackColor = Color.Yellow;
}
else
{
this.labelAnmerkungText.Text = "Derzeit keine Anmerkungen vorhanden.";
this.labelAnmerkungText.BackColor = Color.White;
}
//this.textBoxScann.Clear();
this.artikelListe = KundeArtikel.GetList(kunde.KundeID.ToString());
this.textBoxScann.Text = this.kunde.KundeNummer;
this.textBoxScann.Enabled = false;
if ((userid != null && userid.Contains("reklamation")) || (this.benutzer != null && this.benutzer.Rolle == BenutzerRolle.Expedit)) Reklamation_GroupBox();
else GroupBox_Load();
if (kunde.Aufgabe != null)
{
string n = kunde.Suchtext == null ? kunde.KundeName : kunde.Suchtext;
meldung.GetInfo(this, $"Bei Kunde {n} solltest du folgendes beachten: {Aufgabe.GetAufgabe(null, kunde.Aufgabe).Bezeichnung}", false);
}
}
if (auftrag != null)
{
if (this.benutzer == null | (userid != null && !userid.Contains("reklamation")))
{
// AbteilungsStatus Begonnen wird hier gesetzt.
if (userid.Contains("kleinteile")) { auftrag.Abteilungen |= AbteilungsStatus.KleinteileBegonnen; auftrag.Save(); }
if (userid.Contains("grossteile")) { auftrag.Abteilungen |= AbteilungsStatus.GrossteileBegonnen; auftrag.Save(); }
if (userid.Contains("frottee") || userid.Contains("spannleintuch")) { auftrag.Abteilungen |= AbteilungsStatus.FrotteeBegonnen; auftrag.Save(); }
}
}
CloseKeyboard();
}
/// <summary>
/// Die GroupBox mit den Artikel-Buttons wird geladen
/// </summary>
private void GroupBox_Load()
{
foreach (Button btn in this.tableLayoutPanelArtikel.Controls) btn.Tag = btn.Text = null;
this.groupBoxArtikel.Visible = true;
//TODO: Nach Test und Rücksprache eventuell wieder umbauen. Benutzer.Rolle etc.
// Buttons werden den Artikeln aus der Artikelliste zugewiesen. Unterschied zwischen Frotteewäsche, Spannleintüchern, Großteilen und Kleinteilen
foreach (KundeArtikel artikel in artikelListe)
{
// Unterschied zwischen Maschine oder Person.
if(this.userid.StartsWith("ms"))
{
// Wird bei Frottee verarbeitet
if (this.userid.Contains("frottee"))
{
// Wird bei FROTTEE verarbeitet.
switch (artikel.ArtikelNR)
{
case var nr when nr.ToString().StartsWith("6311"): //HANDTUCH
this.buttonArt1.Tag = artikel;
break;
case var nr when nr.ToString().StartsWith("6312") & nr.ToString().EndsWith("0"): //DUSCHTUCH WEISS
this.buttonArt2.Tag = artikel;
break;
case var nr when nr.ToString().StartsWith("6314"): //BADEVORLEGER
this.buttonArt3.Tag = artikel;
break;
case var nr when nr.ToString().StartsWith("6313"): //BADETUCH
this.buttonArt4.Tag = artikel;
break;
case var nr when nr.ToString().StartsWith("6316"): //BADEMANTEL
this.buttonArt5.Tag = artikel;
break;
case var nr when nr.ToString().StartsWith("6324"): //SAUNATUCH
this.buttonArt6.Tag = artikel;
break;
case var nr when nr.ToString().StartsWith("6312") & nr.ToString().EndsWith("1"): //DUSCHTUCH BLAU
this.buttonArt7.Tag = artikel;
break;
case var nr when nr.ToString().StartsWith("61115") & (nr.ToString().EndsWith("00") || nr.ToString().EndsWith("30") || nr.ToString().EndsWith("10")): //SPANNLEINTUCH SINGLE
this.buttonArt8.Tag = artikel;
break;
default:
break;
}
}
// Wird bei Großteile verarbeitet
if (this.userid.Contains("grossteile"))
{
// Wird bei Großteilen verarbeitet
switch (artikel.ArtikelNR)
{
case var nr when nr.ToString().StartsWith("6112"): //DECKENBEZUG
this.buttonArt1.Tag = artikel;
break;
case var nr when nr.ToString().StartsWith("61110"): //LEINTUCH SINGLE
this.buttonArt2.Tag = artikel;
break;
case var nr when nr.ToString().StartsWith("61112"): //DOPPELLEINTUCH
this.buttonArt3.Tag = artikel;
break;
//case var nr when nr.ToString().StartsWith(""):
// this.buttonArt4.Tag = artikel;
// break;
//case var nr when nr.ToString().StartsWith(""):
// this.buttonArt5.Tag = artikel;
// break;
//case var nr when nr.ToString().StartsWith(""):
// this.buttonArt6.Tag = artikel;
// break;
//case var nr when nr.ToString().StartsWith(""):
// this.buttonArt7.Tag = artikel;
// break;
//case var nr when nr.ToString().StartsWith(""):
// this.buttonArt8.Tag = artikel;
// break;
default:
break;
}
}
// Wird bei Kleinteile verarbeitet
if (this.userid.Contains("kleinteile"))
{
// Wird bei Kleinteilen verarbeitet
switch (artikel.ArtikelNR)
{
case var nr when nr.ToString().StartsWith("61210"): //POLSTERBEZUG 60x80
this.buttonArt1.Tag = artikel;
break;
case var nr when nr.ToString().StartsWith("61211") & nr.ToString().EndsWith("0"): //POLSTERBEZUG 40x40
this.buttonArt2.Tag = artikel;
break;
case var nr when nr.ToString().StartsWith("61211") & nr.ToString().EndsWith("1"): //POLSTERBEZUG 40x50
this.buttonArt3.Tag = artikel;
break;
case var nr when nr.ToString().StartsWith("61211") & nr.ToString().EndsWith("2"): //POLSTERBEZUG 40x60
this.buttonArt4.Tag = artikel;
break;
case var nr when nr.ToString().StartsWith("61211") & nr.ToString().EndsWith("3"): //POLSTERBEZUG 40x70
this.buttonArt5.Tag = artikel;
break;
case var nr when nr.ToString().StartsWith("61221"): //MUNDSERVIETTE
this.buttonArt6.Tag = artikel;
break;
case var nr when nr.ToString().StartsWith("61222"): //DECKSERVIETTE
this.buttonArt7.Tag = artikel;
break;
default:
break;
}
}
}
else // UserID Contains "ps" für Person
{
// Wird bei Spannleintuch verarbeitet.
if (this.userid.Contains("spannleintuch"))
{
switch (artikel.ArtikelNR)
{
case var nr when nr.ToString().StartsWith("61115") & (nr.ToString().EndsWith("00") || nr.ToString().EndsWith("30")): //SPANNLEINTUCH SINGLE
this.buttonArt1.Tag = artikel;
break;
case var nr when nr.ToString().StartsWith("61115") & nr.ToString().EndsWith("10"): //SPANNLEINTUCH SINGLE GELB
this.buttonArt2.Tag = artikel;
break;
case var nr when nr.ToString().StartsWith("61115") & nr.ToString().EndsWith("20"): //SPANNLEINTUCH SINGLE WEISS
this.buttonArt3.Tag = artikel;
break;
case var nr when nr.ToString().StartsWith("61115") & (nr.ToString().EndsWith("30") || nr.ToString().EndsWith("40")): //SPANNLEINTUCH QUEEN BLAU GELB
this.buttonArt4.Tag = artikel;
break;
case var nr when nr.ToString().StartsWith("61116") & nr.ToString().EndsWith("00"): //SPANNLEINTUCH DOUBLE
this.buttonArt5.Tag = artikel;
break;
case var nr when nr.ToString().StartsWith("61116") & (nr.ToString().EndsWith("10") || nr.ToString().EndsWith("40")): //SPANNLEINTUCH LILA ITALO
this.buttonArt6.Tag = artikel;
break;
case var nr when nr.ToString().StartsWith("61116") & (nr.ToString().EndsWith("20") || nr.ToString().EndsWith("21")): //SPANNLEINTUCH DOUBLE WEISS GRAU
this.buttonArt7.Tag = artikel;
break;
case var nr when nr.ToString().StartsWith("61116") & nr.ToString().EndsWith("30"): //SPANNLEINTUCH DOUBLE ROT
this.buttonArt8.Tag = artikel;
break;
default:
break;
}
}
}
}
// Button mit Tag bearbeiten. Buttons ohne Tag werden deaktiviert.
foreach(Button btn in this.tableLayoutPanelArtikel.Controls)
{
if (btn.Tag == null) { btn.Enabled = false; btn.BackColor = Color.Gray; btn.Text = ""; }
else
{
KundeArtikel art = (KundeArtikel)btn.Tag;
int index = art.ArtikelName.IndexOf(" ");
btn.Text = art.ArtikelName;
btn.Font = new Font(btn.Font.Name, 18);
btn.BackColor = Color.Turquoise;
btn.Enabled = true;
}
}
}
private void Reklamation_GroupBox()
{
this.groupBoxArtikel.Controls.Clear();
FlowLayoutPanel flowPanel = new FlowLayoutPanel
{
Dock = DockStyle.Fill,
FlowDirection = FlowDirection.LeftToRight,
WrapContents = true,
AutoSize = true
};
this.groupBoxArtikel.Controls.Add(flowPanel);
foreach (KundeArtikel artikel in artikelListe)
{
int index = artikel.ArtikelName.IndexOf(" ");
string name = string.Empty;
if (index > 0) name = artikel.ArtikelName.Substring(0, index) + "\n" + artikel.ArtikelName.Substring(index);
else name = artikel.ArtikelName;
Button btn = new Button
{
Text = name,
Tag = artikel,
Name = $"btn_{artikel.ArtikelNR}",
AutoSize = true,
Margin = new Padding(5),
BackColor = Color.Turquoise,
ForeColor = Color.Black,
};
btn.Click += Button_Click;
btn.MouseUp += Button_MouseUp;
btn.MouseDown += Button_MouseDown;
flowPanel.Controls.Add(btn);
}
int buttons = flowPanel.Controls.OfType<Button>().Count();
Size btnsize = new Size(flowPanel.Width / (buttons / 2), (flowPanel.Height / 2) - (flowPanel.Margin.All * 3));
foreach (Button btn in flowPanel.Controls)
{
btn.MaximumSize = btnsize;
btn.MinimumSize = btnsize;
}
groupBoxArtikel.ResumeLayout();
groupBoxArtikel.Visible = true;
}
/// <summary>
/// Wenn der Kunde Fertig gemacht wurde, werden Controls deaktiviert und ausgeblendet bis neuer Kunde gewählt
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonFertig_Click(object sender, EventArgs e)
{
// Controls werden durchgegangen und ausgeblendet oder der Text entfernt.
foreach (Control ctr in this.Controls)
{
switch (ctr)
{
case Label lbl:
//lbl.Text = string.Empty;
lbl.Visible = false;
break;
case GroupBox gb:
gb.Visible = false;
break;
case TextBox txt:
txt.Clear();
txt.Enabled = true;
break;
default:
break;
}
}
if (userid.Contains("reklamation") || (this.benutzer != null && this.benutzer.Rolle == BenutzerRolle.Expedit))
{
DialogResult result = meldung.GetFrage(this, "Möchtest du eine weitere Reklamation eingeben?", false);
switch (result)
{
case DialogResult.Yes:
break;
case DialogResult.No:
this.Close();
return;
default:
break;
}
}
else
{
// AbteilungsStatus für Kleinteile und Großteile wird hier gesetzt.
if (!userid.Contains("frottee") & !userid.Contains("spannleintuch"))
{
if (userid.Contains("kleinteile")) { auftrag.Abteilungen |= AbteilungsStatus.KleinteileBeendet; auftrag.Save(); }
if (userid.Contains("grossteile")) { auftrag.Abteilungen |= AbteilungsStatus.GrossteileBeendet; auftrag.Save(); }
}
}
//Kunde wird durch Scan oder Handeingabe Ausgewählt.
Open_Liste();
ControlLaden();
}
/// <summary>
/// Auftragliste aufrufen.
/// </summary>
/// <param name="extra">Wenn Extrakunde dann true</param>
private void Open_Liste()
{
if ((userid != null && userid.Contains("reklamation")) || (this.benutzer != null && this.benutzer.Rolle == BenutzerRolle.Expedit)) auftragsliste = null;
else auftragsliste = new List<object>(Auftrag.GetFinishingList());
FormListe liste = new FormListe(auftragsliste, 0);
if (liste.ShowDialog() == DialogResult.OK)
{
if (liste.auftrag != null)
{
this.auftrag = liste.auftrag;
this.kunde = Kunde.GetKunde(null, auftrag.KundeID, null);
}
else this.kunde = liste.kunde;
}
}
/// <summary>
/// TextBox Scann Events
/// Beim Verlassen der TextBox wird Kunde aus DB geholt
/// Wenn Enter gedrückt wird, wird TextBox verlassen
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void textBoxScann_Leave(object sender, EventArgs e)
{
//TODO: Wenn Nachwäsche oder Müllwäsche alle Artikel anzeigen.
// Kundennummer wird ausgelesen und Kunde aus DB geholt. Form_Load wird danach ausgelöst
if (this.kunde == null)
{
this.kunde = Kunde.GetKunde(this.textBoxScann.Text, null, null);
ControlLaden();
}
}
private void textBoxScann_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
// Leave-Ereignis manuell ausführen
textBoxScann_Leave(sender, EventArgs.Empty);
// Fokus auf das nächste Steuerelement verschieben
//this.SelectNextControl((Control)sender, true, true, true, true);
// Standardverhalten (Beep) unterdrücken
e.SuppressKeyPress = true;
}
}
/// <summary>
/// FehlmengeCount Button Events
/// Mouse Up & Down Event für Button Farbwechsel
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button_MouseUp(object sender, MouseEventArgs e)
{
Button btn = sender as Button;
if (btn != null)
{
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)
{
btn.BackColor = Color.LightSeaGreen; // Gewünschte Farbe beim MouseDown
}
}
private void Button_Click(object sender, EventArgs e)
{
// Beim geklickten Artikel wird Fehlmenge erhöht
Button btn = (Button)sender;
KundeArtikel artstand = (KundeArtikel)btn.Tag;
if ((userid != null && userid.Contains("reklamation")) || (this.benutzer != null && this.benutzer.Rolle == BenutzerRolle.Expedit)) artstand.Reklamation++;
else { artstand.Fehlmenge++; artstand.Save(); return; }
// Wenn speichern nicht möglich, wird darauf hingewiesen.
if (artstand.Save() != 1) meldung.FehlmengeCount();
else
{
Artikel artikel = Artikel.GetArtikel(artstand.ArtikelNR);
artikel.Nachwaesche++;
artikel.Save();
}
}
}
}
//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.