441 lines
16 KiB
C#
441 lines
16 KiB
C#
using DatenDB;
|
|
using Deckungsbeitrag.AA_Klassen;
|
|
using HarfBuzzSharp;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Globalization;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
using Font = System.Drawing.Font;
|
|
|
|
namespace Deckungsbeitrag.AA_Forms
|
|
{
|
|
public partial class FormWSVerfolgung : Form
|
|
{
|
|
private readonly SPSDaten _monitor; //Ziel der Eventanfragen für die SPS.
|
|
private string Userid;
|
|
private Maschine maschine;
|
|
private Auftrag auftrag;
|
|
private Meldungen meldung = new Meldungen();
|
|
private Aufgabe aufgabe;
|
|
private WSFach fach;
|
|
private Auftrag extraAuftrag;
|
|
private List<object> auftragsliste;
|
|
|
|
public bool ws1transport = false;
|
|
public bool ws2transport = false;
|
|
|
|
public FormWSVerfolgung()
|
|
{
|
|
InitializeComponent();
|
|
|
|
this.BackColor = Color.Black;
|
|
this.WindowState = FormWindowState.Maximized;
|
|
this.FormBorderStyle = FormBorderStyle.None;
|
|
}
|
|
public FormWSVerfolgung(string userid) : this()
|
|
{
|
|
this.Userid = userid;
|
|
if (userid.Contains("01")) this.maschine = Maschine.GetMaschine(null, "Waschstrasse 1");
|
|
if (userid.Contains("02")) this.maschine = Maschine.GetMaschine(null, "Waschstrasse 2");
|
|
|
|
this._monitor = new SPSDaten();
|
|
|
|
//Je nach Maschine werden die richtigen Events erstellt.
|
|
if (maschine.MaschineID == 1)
|
|
{
|
|
_monitor.WS1Transport += Transport_ValueChanged;
|
|
//_monitor.Presse1Leer += WS1_Value_Changed;
|
|
//_monitor.Trockner1Beladen += WS1_Value_Changed;
|
|
//_monitor.Trockner1Entladen += WS1_Value_Changed;
|
|
//_monitor.TischSummaryWS1_print += TischSummary_print;
|
|
//_monitor.BegleitzettelWS1_print += Begleitzettel_print;
|
|
} //Maschine 1
|
|
else
|
|
{
|
|
_monitor.WS2Transport += Transport_ValueChanged;
|
|
//_monitor.Presse2Leer += WS2_Value_Changed;
|
|
//_monitor.Trockner2Beladen += WS2_Value_Changed;
|
|
//_monitor.Trockner2Entladen += WS2_Value_Changed;
|
|
//_monitor.TischSummaryWS2_print += TischSummary_print;
|
|
//_monitor.BegleitzettelWS2_print += Begleitzettel_print;
|
|
} //Maschine 2
|
|
|
|
}
|
|
|
|
private void WSVerfolgung_Load(object sender, EventArgs e)
|
|
{
|
|
// WaitCursor
|
|
this.Cursor = Cursors.WaitCursor;
|
|
|
|
// StatusStrip DropDown laden.
|
|
this.toolStripDropDownButtonInfo.DropDownItems.Clear();
|
|
List<Aufgabe> aufgabenliste = Aufgabe.GetList((int)Kategorie.Waschstrasse);
|
|
foreach(Aufgabe auf in aufgabenliste)
|
|
{
|
|
ToolStripMenuItem item = new ToolStripMenuItem(auf.Bezeichnung);
|
|
item.Tag = auf;
|
|
item.Click += AufgabeAuswaehlen_Click;
|
|
toolStripDropDownButtonInfo.DropDownItems.Add(item);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Controls werden hier bevor sie angezeigt werden berechnet. Danach werden sie Eingeblendet und der Cursor auf Default gestellt.
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void FormWSVerfolgung_Shown(object sender, EventArgs e)
|
|
{
|
|
// Während dem Laden wird das Layout unterdrückt und der Screen ausgeblendet.
|
|
this.SuspendLayout();
|
|
this.Visible = false;
|
|
|
|
// Größer des TabelPanels anpassen.
|
|
this.tableLayoutPanelWSVerfolgung.Height = this.statusStripWSVerfolgung.Top;
|
|
|
|
// Wenn bei Maschine TrocknerKaputt wird Anzahl Fächer um 1 reduziert.
|
|
if (maschine.TrocknerKaputt) this.tableLayoutPanelWSVerfolgung.RowCount = maschine.Faecher - 1;
|
|
else this.tableLayoutPanelWSVerfolgung.RowCount = maschine.Faecher;
|
|
|
|
// Bei TabelPanel werden die Styles gelöscht und neu ertellt. Gleichmäßige Aufteilung in Prozent.
|
|
this.tableLayoutPanelWSVerfolgung.RowStyles.Clear();
|
|
for (int i = 0; i < tableLayoutPanelWSVerfolgung.RowCount; i++)
|
|
{
|
|
tableLayoutPanelWSVerfolgung.RowStyles.Add(new RowStyle(SizeType.Percent, 100f / tableLayoutPanelWSVerfolgung.RowCount));
|
|
}
|
|
|
|
// TabelPanel laden.
|
|
Panel_Laden(true);
|
|
|
|
// Layout unterdrücken und Screen einblenden. Cursor wird auf Default gesetzt.
|
|
this.Visible = true;
|
|
this.ResumeLayout(true);
|
|
this.Cursor = Cursors.Default;
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// ScreenControls in Panel von Fachliste laden.
|
|
/// </summary>
|
|
/// <param name="neustart"> Wenn Neustart dann true sonst false.</param>
|
|
private void Panel_Laden(bool neustart)
|
|
{
|
|
|
|
// Fachliste holen damit letzter Auftrag vom Vortag übernommen werden kann.
|
|
List<WSFach> fachliste = WSFach.GetFachliste(maschine);
|
|
|
|
// Wenn erster Start dann Auftrag aus letztem Fach holen?
|
|
if (neustart)
|
|
{
|
|
this.fach = new WSFach();
|
|
|
|
if (meldung.MaschinenStart() == DialogResult.Yes)
|
|
{
|
|
// Wenn holen, dann Auftrag und aufgabe aus fachliste holen.
|
|
this.auftrag = Auftrag.GetAuftrag(fachliste[0].AuftragID);
|
|
this.aufgabe = Aufgabe.GetAufgabe(null, fachliste[0].AufgabeID);
|
|
}
|
|
else
|
|
{
|
|
// Wenn nicht holen, dann Auftrag und Aufgabe enfernen.
|
|
this.auftrag = null;
|
|
this.aufgabe = null;
|
|
|
|
// Neuen Auftrag eingeben. Wenn kein ExtraKunde wird false als extra weitergegeben.
|
|
//Open_NeuerAuftrag(false); //TODO: Auftragauswahl aufrufen statt NeuerAuftrag. (Wenn Fahrer Aufträge erstellen)
|
|
Open_Liste(false);
|
|
// Fachliste neu laden damit neuer Auftrag in erstes Fach geladen werden kann.
|
|
fachliste = WSFach.GetFachliste(maschine);
|
|
}
|
|
}
|
|
|
|
// Alle Controls aus dem Panel entfernen.
|
|
this.tableLayoutPanelWSVerfolgung.Controls.Clear();
|
|
|
|
// UserControls mit Daten aus Fachliste in Panel laden.
|
|
if (fachliste.Count > 0)
|
|
{
|
|
for (int row = 0; row < fachliste.Count; row++)
|
|
{
|
|
Auftrag auftrag = Auftrag.GetAuftrag(fachliste[row].AuftragID);
|
|
Aufgabe aufgabe = Aufgabe.GetAufgabe(null, fachliste[row].AufgabeID);
|
|
UCFach ucfach = new UCFach();
|
|
ucfach.Dock = DockStyle.Fill;
|
|
|
|
// Fach Name und Farbe
|
|
if (this.maschine.Bezeichnung == "Waschstrasse 1")
|
|
{
|
|
switch (row + 1)
|
|
{
|
|
case int n when (n <= 4):
|
|
ucfach.ForeColor = Config.FarbenConfig.Farben["Beladeband"];
|
|
ucfach.FachName = $"F";
|
|
break;
|
|
case int n when (n >= 5 && n <= 13):
|
|
ucfach.ForeColor = Config.FarbenConfig.Farben["Waschstrasse"];
|
|
ucfach.FachName = $"W";
|
|
break;
|
|
case int n when (n == 14):
|
|
ucfach.ForeColor = Config.FarbenConfig.Farben["Presse"];
|
|
ucfach.FachName = $"P";
|
|
break;
|
|
case int n when (n == 15):
|
|
ucfach.ForeColor = Config.FarbenConfig.Farben["Hubband"];
|
|
ucfach.FachName = $"H";
|
|
break;
|
|
case int n when (n == 16):
|
|
ucfach.ForeColor = Config.FarbenConfig.Farben["Trockner"];
|
|
ucfach.FachName = $"T";
|
|
break;
|
|
case int n when (n == 17):
|
|
if (maschine.TrocknerKaputt) { ucfach.ForeColor = Config.FarbenConfig.Farben["Entladeband"]; ucfach.FachName = $"E"; }
|
|
else { ucfach.ForeColor = Config.FarbenConfig.Farben["Trockner"]; ucfach.FachName = $"T"; }
|
|
break;
|
|
case int n when (n == 18):
|
|
ucfach.ForeColor = Config.FarbenConfig.Farben["Entladeband"];
|
|
ucfach.FachName = $"E";
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
}
|
|
// Wenn Kunde hat keinen Suchtext, dann Kundename anzeigen.
|
|
if(string.IsNullOrWhiteSpace(Kunde.GetKunde(null, auftrag.KundeID, null).Suchtext))ucfach.KundeName = Kunde.GetKunde(null, auftrag.KundeID, null).KundeName;
|
|
else ucfach.KundeName = Kunde.GetKunde(null, auftrag.KundeID, null).Suchtext;
|
|
|
|
CultureInfo deCult = new CultureInfo("de-DE");
|
|
ucfach.LieferTag = ((Liefertag)auftrag.Liefertag.DayOfWeek).ToString();
|
|
|
|
// Wenn Fachliste Item hat Aufgabe.
|
|
if (aufgabe != null)
|
|
{
|
|
// Wenn Aufgabe ist ein Extra Kunde.
|
|
if (aufgabe.Bezeichnung == "Extra Kunde") ucfach.Aufgabe = "Extra Kunde " + Kunde.GetKunde(null, Auftrag.GetAuftrag(fachliste[row].ExtraAuftragID).KundeID, null).Suchtext;
|
|
else ucfach.Aufgabe = aufgabe.Bezeichnung;
|
|
|
|
// Hintergrund des Fachs in der Farbe der Aufgabe. ACHTUNG WEGEN KONTRAST ZU SCHRIFTFARBE.
|
|
ucfach.BackColor = aufgabe.Farbe;
|
|
}
|
|
else ucfach.Aufgabe = null;
|
|
|
|
this.tableLayoutPanelWSVerfolgung.Controls.Add(ucfach, 0, row);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Wenn eine Info von der Statusleiste gewählt wurde.
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void AufgabeAuswaehlen_Click(object sender, EventArgs e)
|
|
{
|
|
ToolStripMenuItem item = (ToolStripMenuItem)sender;
|
|
|
|
// Aufgabe wird aus dem StatusStripItem geholt.
|
|
this.aufgabe = (Aufgabe)item.Tag;
|
|
|
|
// Wenn Aufgabe ist ExtraKunde wird NeuerAuftrag geöffnet.
|
|
if (((Aufgabe)item.Tag).Bezeichnung == "Extra Kunde")
|
|
{
|
|
// Wenn ExtraKunde wird true als extra weitergegeben.
|
|
//Open_NeuerAuftrag(true);
|
|
Open_Liste(true);
|
|
}
|
|
Fach_speichern(); // Gleiches Fach mit neuem Auftrag = Update.
|
|
}
|
|
|
|
/// <summary>
|
|
/// NeuerAuftrag wird geöffnet und Ergebnis verarbeitet.
|
|
/// </summary>
|
|
/// <param name="extra">Wenn ExtraKunde in Fach dann true, sonst false</param>
|
|
private void Open_NeuerAuftrag(bool extra)
|
|
{
|
|
FormNeuerAuftrag neuerAuftrag = new FormNeuerAuftrag(this.Userid);
|
|
if (neuerAuftrag.ShowDialog() == DialogResult.OK)
|
|
{
|
|
if (extra) this.extraAuftrag = neuerAuftrag.Auftrag;
|
|
else this.auftrag = neuerAuftrag.Auftrag;
|
|
Fach_speichern(); // Gleiches Fach mit neuem Auftrag = Update.
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Auftragliste aufrufen.
|
|
/// </summary>
|
|
/// <param name="extra">Wenn Extrakunde dann true</param>
|
|
private void Open_Liste(bool extra)
|
|
{
|
|
auftragsliste = new List<object>(Auftrag.GetRampeAuftragList());
|
|
|
|
FormListe liste = new FormListe(auftragsliste, 3);
|
|
switch (liste.ShowDialog())
|
|
{
|
|
case DialogResult.None:
|
|
break;
|
|
case DialogResult.OK:
|
|
if (extra)
|
|
{
|
|
this.extraAuftrag = liste.auftrag;
|
|
this.extraAuftrag.Status = AuftragStatus.Aufgelegt;
|
|
if (this.extraAuftrag.Save()[0] != 1) meldung.Speicherfehler();
|
|
}
|
|
else
|
|
{
|
|
this.auftrag = liste.auftrag;
|
|
this.auftrag.Status = AuftragStatus.Aufgelegt;
|
|
if (this.auftrag.Save()[0] != 1) meldung.Speicherfehler();
|
|
}
|
|
Fach_speichern();
|
|
break;
|
|
case DialogResult.Cancel:
|
|
break;
|
|
case DialogResult.Abort:
|
|
break;
|
|
case DialogResult.Retry:
|
|
break;
|
|
case DialogResult.Ignore:
|
|
break;
|
|
case DialogResult.Yes:
|
|
Open_NeuerAuftrag(extra);
|
|
break;
|
|
case DialogResult.No:
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// Fach wird gespeichert. Bei Änderungen wird Fach überschrieben. Wenn FachID = 0 oder null wird neues Fach erstellt, sonst überschrieben.
|
|
/// </summary>
|
|
private void Fach_speichern()
|
|
{
|
|
this.fach.AuftragID = (int)this.auftrag.AuftragID;
|
|
this.fach.MaschineID = (int)this.maschine.MaschineID;
|
|
this.fach.Gewaschen = DateTime.Now;
|
|
this.fach.Gewicht = 0;
|
|
this.fach.WProgrammID = 1;
|
|
if (this.aufgabe != null) this.fach.AufgabeID = this.aufgabe.AufgabeID;
|
|
else this.fach.AufgabeID = null;
|
|
if (this.extraAuftrag != null) this.fach.ExtraAuftragID = this.extraAuftrag.AuftragID;
|
|
else this.fach.ExtraAuftragID = null;
|
|
|
|
|
|
if (this.fach.Save() == 1) Panel_Laden(false);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Value für Transport hat sich geändert und Fach wird gespeichert.
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void Transport_ValueChanged(object sender, EventArgs e)
|
|
{
|
|
// Warten bis erster Transport durchgeführt wurde.
|
|
while (_monitor.WS_1_Transport == true & _monitor.WS_2_Transport == true)
|
|
{
|
|
}
|
|
if (_monitor.WS_1_Transport || _monitor.WS_2_Transport)
|
|
{
|
|
Maschine ms = (Maschine)this.maschine;
|
|
|
|
// Fehlermeldung falls kein Auftrag erstellt wurde.
|
|
if (this.auftrag != null)
|
|
{
|
|
// Nach Transport wird FachAufgabe und FachExtraAuftrag entfernt da diese nur für ein Fach gelten.
|
|
this.aufgabe = null;
|
|
this.extraAuftrag = null;
|
|
|
|
// Wenn Fach nicht null ist wird für ein neues Fach die ID entfernt. Dadurch wird bei Save() neues Fach erzeugt.
|
|
if (this.fach != null) this.fach.FachID = null;
|
|
Fach_speichern();
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show($"Kein Auftrag erstellt. LEERFACH wird eingegeben. Fach bitte im nachhinein bearbeiten.");
|
|
} //WENN kein Kunde gewählt dann Fach mit KundeID 0.
|
|
|
|
_monitor.WS_2_Transport = _monitor.WS_1_Transport = false;
|
|
}
|
|
|
|
//this.ResumeLayout(false);
|
|
} //Wenn sich SPSDaten Transport ändert wird Event ausgelöst. (Bis jetzt mit Button ausgelöst)
|
|
|
|
/// <summary>
|
|
/// KEIN VERWEIS NOTWENDIG
|
|
/// Wenn ESC gedrückt wird schließt sich das Fenster.
|
|
/// </summary>
|
|
/// <param name="keyData"></param>
|
|
/// <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)
|
|
{
|
|
this.Close();
|
|
return true;
|
|
}
|
|
|
|
// Insert [Einfg] öffnet neuen Auftrag.
|
|
if (Form.ModifierKeys == Keys.None && keyData == Keys.Insert)
|
|
{
|
|
// Neuer Auftrag wird geöffnet. Wenn nicht ExtraKunde wird false weitergegeben, sonst true.
|
|
//Open_NeuerAuftrag(false);
|
|
Open_Liste(false);
|
|
return true;
|
|
}
|
|
|
|
// R-Taste [R] simuliert Transport. Sollte wenn SPS angeschlossen ist nicht mehr notwendig sein und deaktiviert werden.
|
|
//TODO: Deaktivieren wenn SPS funktioniert. Transport wird simuliert.
|
|
if (Form.ModifierKeys == Keys.None && keyData == Keys.R)
|
|
{
|
|
Cursor.Current = Cursors.WaitCursor;
|
|
if (((Maschine)this.maschine).MaschineID == 1)
|
|
{
|
|
if (this.auftrag == null) MessageBox.Show($"Kein Kunde ausgewählt. Bitte JETZT erledigen.", "ACHTUNG", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
else _monitor.WS_1_Transport = true;
|
|
}
|
|
if (((Maschine)this.maschine).MaschineID == 2)
|
|
{
|
|
if (this.auftrag == null) MessageBox.Show($"Kein Kunde ausgewählt. Bitte JETZT erledigen.", "ACHTUNG", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
else _monitor.WS_2_Transport = true;
|
|
}
|
|
Cursor.Current = Cursors.Default;
|
|
return true;
|
|
}
|
|
|
|
return base.ProcessDialogKey(keyData);
|
|
}
|
|
|
|
/// <summary>
|
|
/// ShortCuts für
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void FormWSVerfolgung_KeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
if (e.Control && e.KeyCode == Keys.I) // Ctrl+I
|
|
{
|
|
e.Handled = true;
|
|
e.SuppressKeyPress = true;
|
|
|
|
toolStripDropDownButtonInfo.DropDown.Show();
|
|
}
|
|
}
|
|
}
|
|
}
|