Programm_Wirl/AA-Forms/FormAufleger.cs

536 lines
22 KiB
C#

using DatenDB;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Printing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Deckungsbeitrag
{
public partial class FormAufleger : Form
{
public Fach fach; //Das aktuelle Fach welches gerade beladen wird.
private readonly SPSDaten _monitor; //Ziel der Eventanfragen für die SPS.
private Screen[] screens; //Aktueller Plan mit Screen spiegeln erfordert die Unterscheidung nicht. //Wurde zur Untescheidung der Anzeigen benötigt.
private Benutzer person; //Ist der Bediener. Daraus werden bestimmte Rechte und Funktionen abgeleitet.
public FormAusschlager ausschlager; //Wird wegen Umbau nicht mehr gebraucht. //Ansicht für den Ausschlager.
public Kunde extrakunde;
public List<Fach> fachliste; //Ist der Inhalt der jeweiligen Maschine.
public Maschine maschine; //Bearbeitete Maschine.
public Auftrag auftrag; //Ein Auftrag ist eine Abholung/Lieferung eines bestimmten Kunden zu einem bestimmten Liefertag mit X Anzahl an Containern.
public Auftrag auftragsummary; //Wir zur Erstellung einer Tischsummary benötigt.
public FormAufleger()
{
InitializeComponent();
//Die Auswahl der Maschine wird eingeblendet um die richtige MaschineID zu bekommen.
FormMSAuswahl auswahl = new FormMSAuswahl();
if (auswahl.ShowDialog() == DialogResult.OK) maschine = Maschine.GetMaschine(auswahl.s, string.Empty);
//Der Inhalt der Maschine wird aus der DB View geladen.
fachliste = Fach.GetInhalt(maschine.MaschineID, maschine.Faecher);
//Das erste Fach in der fachliste ist der aktuelle Auftrag.
this.fach = fachliste[0]; //NEUPROGRAMMIERUNG EVENTUELL UNNÖTIG
//NEUPROGRAMMIERUNG AUFTRAG WIRD AUFGERUFEN UND BEI TRANSPORT WIRD FACH ERSTELLT
if (this.auftrag == null) this.auftrag = Auftrag.GetAuftrag(fachliste[0].AuftragID);
}
public FormAufleger(Screen[] screens, Benutzer person) : this()
{
this.screens = screens;
this.person = person;
this._monitor = new SPSDaten();
this.Tag = maschine;
//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 FormAufleger_Load(object sender, EventArgs e)
{
this.Cursor = Cursors.WaitCursor;
Funktionen.HideControls(this.Controls);
//Wenn bei der Maschine ein Trockner kaputt ist wird die Fachanzahl um 1 reduziert.
if (maschine.TrocknerKaputt == true) maschine.Faecher--;
//Die Position und Größe der Labels wir hier berechnet.
int height = (this.Height / maschine.Faecher) - 1;
Point loc = new Point(this.Width / 2 - 400, 10);
//Die angezeigten Label werden erstellt zugeordnet und geholt. Je nach Maschine unterschiedlich viele.
for (int i = 1; i <= maschine.Faecher; i++)
{
Funktionen funk = new Funktionen();
this.Controls.AddRange(funk.GetFachLabels(i, maschine, height, loc, this.Width, "Aufleger"));
//Bei Maschine 1 wird das 4 Beladefach bereits an die Waschstraße übergeben.
if (maschine.MaschineID == 1 & i <= 3)
{
foreach (Label lbl in this.Controls.OfType<Label>())
{
//Click auf den Kundennamen wird ein neuer Kunde also neuer Auftrag erstellt. (Alle Facheinstellungen möglich)
if (lbl.Name == $"Kunde {i}") lbl.MouseClick += Neuer_Kunde_MouseClick;
//Click auf Label Liefertag oder Wschprogramm wird nur das Fach bearbeitet. (Waschprogramm und Extras)
if (lbl.Name == $"Tag {i}" || lbl.Name == $"PR {i}") lbl.MouseClick += Fach_bearbeiten_MouseClick;
}
}
//Bei Maschine 2 sind 5 Beladefächer verfügbar und das 5 Beladefach wird bereits an die Waschstraße übergeben.
if (maschine.MaschineID == 2 & i <= 4)
{
foreach (Label lbl in this.Controls.OfType<Label>())
{
//Click auf den Kundennamen wird ein neuer Kunde also neuer Auftrag erstellt. (Alle Facheinstellungen möglich)
if (lbl.Name == $"Kunde {i}") lbl.MouseClick += Neuer_Kunde_MouseClick;
//Click auf Label Liefertag oder Wschprogramm wird nur das Fach bearbeitet. (Waschprogramm und Extras)
if (lbl.Name == $"Tag {i}" || lbl.Name == $"PR {i}") lbl.MouseClick += Fach_bearbeiten_MouseClick;
}
}
} //Label für neuen Screen von Funktion holen.
Funktionen.ShowControls(this.Controls);
this.Cursor = Cursors.Default;
}
/// <summary>
/// BEI UMBAU NICHT BENÖTIGT. KLICK AUF FACH ZUM KUNDENSCANNEN
/// </summary>
//private void Load_ComboBox()
//{
// List<Aufgabe> aufgabenlist1 = Aufgabe.GetList(3);
// this.comboBoxExtra.DataSource = aufgabenlist1;
// this.comboBoxExtra.DisplayMember = "Bezeichnung";
// this.comboBoxExtra.SelectedIndex = -1;
// this.comboBoxExtra.Text = "EXTRA";
// List<WProgramm> programmlist1 = WProgramm.GetList();
// this.comboBoxProgramm.DataSource = programmlist1;
// this.comboBoxProgramm.DisplayMember = "Nummer";
// this.comboBoxProgramm.SelectedIndex = 0;
//}
//private void GroupBox_Position()
//{
// groupBox1.Height = this.Height;
// groupBox1.Dock = DockStyle.Right;
//}
//private void Extra_comboBox_Leave(object sender, EventArgs e)
//{
// ComboBox cb = (ComboBox)sender;
// if (cb.SelectedItem != null && cb.SelectedItem.GetType() == typeof(Aufgabe))
// {
// Aufgabe aufg = (Aufgabe)cb.SelectedItem;
// if (aufg.Bezeichnung == "Extra Kunde")
// {
// FormNeuerAuftrag liste = new FormNeuerAuftrag(person, maschine, true, null);
// if (liste.ShowDialog() == DialogResult.OK)
// {
// if (this.fach == null) this.fach = new Fach();
// extrakunde = liste.kunde;
// this.fach.ExtraAuftragID = liste.fach.ExtraAuftragID;
// this.labelKndName.Text = extrakunde.Suchtext;
// }
// }
// }
//} //Wenn die ComboBox verlassen wird und "Extra Kunde" gewählt ist. Öffnet sich Kundenliste um Extra Kunde zu wählen.
//private void buttonAuftrag_Click(object sender, EventArgs e)
//{
// FormNeuerAuftrag nauftrag = new FormNeuerAuftrag(person, maschine, false, null);
// if (nauftrag.ShowDialog() == DialogResult.OK)
// {
// if (this.fach == null) this.fach = new Fach();
// this.fach = nauftrag.fach;
// if (Kunde.GetKunde(string.Empty, fach.KundeID, string.Empty).Suchtext == "?") this.labelKndName.Text = Auftrag.GetAuftrag(fach.AuftragID).ZusatzInfo;
// else this.labelKndName.Text = Kunde.GetKunde(string.Empty, fach.KundeID, string.Empty).Suchtext;
// this.buttonAltAuftrag.Enabled = false;
// this.buttonAltAuftrag.BackColor = Color.Gray;
// }
// while (groupBox1.Width < TextRenderer.MeasureText(labelKndName.Text, labelKndName.Font).Width)
// {
// labelKndName.Font = new Font(labelKndName.Font.FontFamily, labelKndName.Font.Size - 1);
// }
//}
//private void buttonAltAuftrag_Click(object sender, EventArgs e)
//{
// if (MessageBox.Show("Möchtest du den letzten erstellten Auftrag zurückholen?", "Frage", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
// {
// //Auftrag auft = Auftrag.GetLastAuftrag(person.BenutzerID);
// Fach fach = Fach.GetInhalt(maschine.MaschineID, 1)[0];
// Auftrag auft = Auftrag.GetAuftrag(fach.AuftragID);
// FormNeuerAuftrag neuerAuftrag = new FormNeuerAuftrag(person, maschine, false, auft);
// if (neuerAuftrag.ShowDialog() == DialogResult.OK)
// {
// this.fach = neuerAuftrag.fach;
// this.labelKndName.Text = Kunde.GetKunde(string.Empty, fach.KundeID, string.Empty).Suchtext;
// this.buttonAltAuftrag.Enabled = false;
// this.buttonAltAuftrag.BackColor = Color.Gray;
// }
// }
// while (groupBox1.Width < TextRenderer.MeasureText(labelKndName.Text, labelKndName.Font).Width)
// {
// labelKndName.Font = new Font(labelKndName.Font.FontFamily, labelKndName.Font.Size - 1);
// }
//}
//private void buttonExtraDel_Click(object sender, EventArgs e)
//{
// if (this.comboBoxExtra.SelectedIndex > -1) this.comboBoxExtra.SelectedIndex = -1;
//}
//private void comboBoxExtra_DropDownClosed(object sender, EventArgs e)
//{
// Extra_comboBox_Leave(sender, e);
//}
//private void comboBoxExtra_MouseClick(object sender, MouseEventArgs e)
//{
// comboBoxExtra.DroppedDown = true;
//}
//private void comboBoxExtra_MouseDoubleClick(object sender, MouseEventArgs e)
//{
// if (this.comboBoxExtra.SelectedIndex > -1) this.comboBoxExtra.SelectedIndex = -1;
//}
//private void comboBoxProgramm_MouseClick(object sender, MouseEventArgs e)
//{
// comboBoxProgramm.DroppedDown = true;
//}
//private void comboBoxExtra_SelectedIndexChanged(object sender, EventArgs e)
//{
// if (comboBoxExtra.SelectedIndex < 0)
// {
// this.buttonExtraDel.Visible = this.buttonExtraDel.Enabled = false;
// this.comboBoxExtra.Text = "EXTRA";
// }
// else
// {
// this.buttonExtraDel.Visible = this.buttonExtraDel.Enabled = true;
// }
//}
//
private void Call_Funktionen(Label lbl, Maschine maschine, SPSDaten _monitor)
{
Funktionen.Label_Refresh(lbl, maschine, _monitor, "Aufleger");
}
//Nach einer Interaktion mit der SPS wird die Ansicht neu geladen.
private void Refresh_Form(Form form)
{
maschine = (Maschine)this.Tag;
foreach (Label lbl in this.Controls.OfType<Label>())
{
Call_Funktionen(lbl, maschine, _monitor);
}
}
//Wird bei Click auf Label Tag oder Waschprogramm sofort aufgerufen. Bei Click auf Label Kunde erst nach dem Kundenscann.
private void Fach_Bearbeiten(Label btn)
{
FormFachBearbeiten formbearbeiten = new FormFachBearbeiten(btn, person, maschine);
if (formbearbeiten.ShowDialog() == DialogResult.OK)
{
this.fach = formbearbeiten.fach;
Refresh_Form(this);
}
}
//Mauslose Bedienung mit ShortCuts wird wahrscheinlich nicht benötigt da Touchscreen.
private void FormWaschstrasse_KeyDown(object sender, KeyEventArgs e)
{
e.Handled = true;
e.SuppressKeyPress = true;
switch (e.KeyCode)
{
case Keys.F1:
foreach (Label btn in this.Controls.OfType<Label>()) if (btn.Name == "Fach 1") Fach_Bearbeiten(btn);
break;
case Keys.F2:
foreach (Label btn in this.Controls.OfType<Label>()) if (btn.Name == "Fach 2") Fach_Bearbeiten(btn);
break;
case Keys.F3:
foreach (Label btn in this.Controls.OfType<Label>()) if (btn.Name == "Fach 3") Fach_Bearbeiten(btn);
break;
case Keys.F5:
//buttonAuftrag_Click(sender, e);
break;
case Keys.E:
break;
case Keys.P:
if (((Maschine)this.Tag).MaschineID == 1) _monitor.Presse1_Leer = true;
if (((Maschine)this.Tag).MaschineID == 2) _monitor.Presse2_Leer = true;//Statt SPS -> auslösen Presse Leer Event
break;
case Keys.H:
if (((Maschine)this.Tag).MaschineID == 1) _monitor.Trockner11_Beladen = true;//Statt SPS -> auslösen Trockner beladen Event
if (((Maschine)this.Tag).MaschineID == 2) _monitor.Trockner21_Beladen = true;
break;
case Keys.S:
if (((Maschine)this.Tag).MaschineID == 1) _monitor.Trockner12_Entladen = true;
if (((Maschine)this.Tag).MaschineID == 2) _monitor.Trockner22_Entladen = true;//Statt SPS -> auslösen Trockner entladen Event
break;
case Keys.W:
break;
case Keys.End:
this.Close();
break;
case Keys.R:
Cursor.Current = Cursors.WaitCursor;
this.SuspendLayout();
if (((Maschine)this.Tag).MaschineID == 1)
{
if (fach == null) MessageBox.Show($"Kein Kunde ausgewählt. Bitte JETZT erledigen.", "ACHTUNG", MessageBoxButtons.OK, MessageBoxIcon.Warning);
else _monitor.WS_1_Transport = true;
}
if (((Maschine)this.Tag).MaschineID == 2)
{
if (fach == null) MessageBox.Show($"Kein Kunde ausgewählt. Bitte JETZT erledigen.", "ACHTUNG", MessageBoxButtons.OK, MessageBoxIcon.Warning);
else _monitor.WS_2_Transport = true;
}
this.ResumeLayout();
Cursor.Current = Cursors.Default;
break;
case Keys.PageDown:
this.WindowState = FormWindowState.Minimized;
break;
case Keys.B:
if (((Maschine)this.Tag).MaschineID == 1) _monitor.Begleitzettel_WS1 = true;
if (((Maschine)this.Tag).MaschineID == 2) _monitor.Begleitzettel_WS2 = true;
break;
case Keys.X:
if (((Maschine)this.Tag).MaschineID == 1) _monitor.TischSummary_WS1 = true;
if (((Maschine)this.Tag).MaschineID == 2) _monitor.TischSummary_WS2 = true;
break;
default:
break;
}
} //SHORTCUTS FÜR MAUSLOSE BEDIENUNG ERKENNEN UND AUSFÜHREN
//Bei Click auf Label Kunde wird ein neuer Kunde bzw. Auftrag erstellt.
private void Neuer_Kunde_MouseClick(object sender, MouseEventArgs e)
{
Label label = (Label)sender;
this.fach = (Fach)label.Tag;
//WENN LABEL IST 1 FACH DANN WIRD NEUER AUFTRAG ERSTELLT SONST WIRD AUFTRAG BEARBEITET
if (!label.Name.Contains("1")) this.auftrag = Auftrag.GetAuftrag(this.fach.AuftragID);
else this.auftrag = null;
//FormNeuerAuftrag nauftrag = new FormNeuerAuftrag(person, maschine, false, this.auftrag, this.fach);
//if (nauftrag.ShowDialog() == DialogResult.OK)
//{
// this.auftrag = nauftrag.Auftrag;
// this.fach = nauftrag.fach;
// //this.fach.AuftragID = nauftrag.Auftrag.AuftragID;
// //this.fach.KundeID = nauftrag.Auftrag.KundeID;
// //this.fach.Lieferdatum = nauftrag.Auftrag.Liefertag;
// //this.fach.Liefertag = (Liefertag)nauftrag.Auftrag.Liefertag.DayOfWeek;
// //if (nauftrag.extraAuftrag == null) { this.fach.ExtraAuftragID = null; this.fach.ExtraKundeID = null; }
// //else { this.fach.ExtraAuftragID = nauftrag.extraAuftrag.AuftragID; this.fach.ExtraKundeID = nauftrag.extraAuftrag.KundeID; }
// //this.fach.Gewaschen = (DateTime)nauftrag.Auftrag.Erstellt;
// label.Tag = this.fach;
// Refresh_Form(this);
//}
}
private void Kunde_hinzufügen_MouseDoubleClick(object sender, MouseEventArgs e)
{
Label label = (Label)sender;
this.fach = (Fach)label.Tag;
//FormNeuerAuftrag nauftrag = new FormNeuerAuftrag(person, maschine, false, null, null);
//if (nauftrag.ShowDialog() == DialogResult.OK)
//{
// this.fach.AuftragID = nauftrag.Auftrag.AuftragID;
// this.fach.KundeID = nauftrag.Auftrag.KundeID;
// this.fach.Lieferdatum = nauftrag.Auftrag.Liefertag;
// this.fach.Liefertag = (Liefertag)nauftrag.Auftrag.Liefertag.DayOfWeek;
// label.Tag = this.fach;
// Fach_Bearbeiten(label);
//}
}
//Fach bearbeiten bei Click auf Label Tag oder Waschprogramm.
private void Fach_bearbeiten_MouseClick(object sender, MouseEventArgs e)
{
Label label = (Label)sender;
this.fach = (Fach)label.Tag;
Fach_Bearbeiten(label);
}
/// <summary>
/// SPS-Steuerung
/// </summary>
private void Transport_ValueChanged(object sender, EventArgs e)
{
this.SuspendLayout();
//while (_monitor.WS_1_Transport == true & _monitor.WS_2_Transport == true)
//{
//} //Warten bis erster Transport durchgeführt wurde.
this.fach.FachID = null;
if(_monitor.WS_1_Transport || _monitor.WS_2_Transport)
{
Maschine ms = (Maschine)this.Tag;
if (fach != null)
{
fach.MaschineID = (int)((Maschine)this.Tag).MaschineID;
fach.Gewaschen = DateTime.Now;
if (fach.Save() == 1) fachliste = Fach.GetInhalt(ms.MaschineID, ms.Faecher);
}
else
{
MessageBox.Show($"Kein Auftrag erstellt. LEERFACH wird eingegeben. Bitte in BB1 bearbeiten.");
} //WENN kein Kunde gewählt dann Fach mit KundeID 0.
Refresh_Form(this);
_monitor.WS_2_Transport = _monitor.WS_1_Transport = false;
fach.FachID = null;
fach.Extra = null;
fach.ExtraKundeID = null;
fach.ExtraAuftragID = null;
}
this.ResumeLayout(false);
} //Wenn sich SPSDaten Transport ändert wird Event ausgelöst. (Bis jetzt mit Button ausgelöst)
private void WS1_Value_Changed(object sender, EventArgs e)
{
Maschine maschine = (Maschine)this.Tag;
foreach (Label lbl in this.Controls.OfType<Label>())
{
if (_monitor.Presse1_Leer)
{
if (lbl.Name.Contains("14") || lbl.Name.Contains("15")) Call_Funktionen(lbl, maschine, _monitor);
} //SPS Steuerung hat Presse 1 entladen und auf true geschaltet.
if (_monitor.Trockner11_Beladen || _monitor.Trockner12_Beladen)
{
if (lbl.Name.Contains("15") || lbl.Name.Contains("16") || lbl.Name.Contains("17")) Call_Funktionen(lbl, maschine, _monitor);
} //SPS Steuerung hat Trockner beladen und auf true geschaltet.
if (_monitor.Trockner11_Entladen || _monitor.Trockner12_Entladen)
{
if (lbl.Name.Contains("18") || lbl.Name.Contains("16") || lbl.Name.Contains("17")) Call_Funktionen(lbl, maschine, _monitor);
} //SPS Steuerung hat Trockner entladen und auf true geschaltet.
}
//ausschlager.Form_Refresh(Maschine.GetMaschine(1, string.Empty), _monitor);
}
private void WS2_Value_Changed(object sender, EventArgs e)
{
Maschine maschine = (Maschine)this.Tag;
foreach (Label lbl in this.Controls.OfType<Label>())
{
if (_monitor.Presse2_Leer)
{
if (lbl.Name.Contains("17") || lbl.Name.Contains("18")) Call_Funktionen(lbl, maschine, _monitor);
} //SPS Steuerung hat Presse 2 entladen und auf true geschaltet.
if (_monitor.Trockner21_Beladen || _monitor.Trockner22_Beladen)
{
if (lbl.Name.Contains("18") || lbl.Name.Contains("19") || lbl.Name.Contains("20")) Call_Funktionen(lbl, maschine, _monitor);
} //SPS Steuerung hat Trockner beladen und auf true geschaltet.
if (_monitor.Trockner21_Entladen || _monitor.Trockner22_Entladen)
{
if (lbl.Name.Contains("21") || lbl.Name.Contains("19") || lbl.Name.Contains("20")) Call_Funktionen(lbl, maschine, _monitor);
} //SPS Steuerung hat Trockner entladen und auf true geschalltet.
}
ausschlager.Form_Refresh(Maschine.GetMaschine(2, string.Empty), _monitor);
}
private void Begleitzettel_print(object sender, EventArgs e)
{
PrintDialog dialog = new PrintDialog();
//foreach (string printer in PrinterSettings.InstalledPrinters) if (printer.Contains(ConfigurationManager.AppSettings["PrinterName"])) dialog.PrinterSettings.PrinterName = printer;
//dialog.PrinterSettings.Copies = 10;
if (dialog.ShowDialog() == DialogResult.OK)
{
PrintDocument printDocument = new PrintDocument();
printDocument.PrintPage += new PrintPageEventHandler(PrintDocument_PrintPage_Begleitzettel);
printDocument.PrinterSettings = dialog.PrinterSettings;
printDocument.Print();
}
//STATUS VON AUFTRAG AUF AUSGESCHLAGE ÄNDERN??
}
private void PrintDocument_PrintPage_Begleitzettel(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
auftrag = Auftrag.GetAuftrag(fachliste.Last().AuftragID);
Image etikett = Funktionen.Etikett_Entwurf(this, auftrag, false);
//etikett.RotateFlip(RotateFlipType.Rotate180FlipNone);
e.Graphics.DrawImage(etikett, e.PageBounds);
}
private void PrintDocument_PrintPage_Tischsummary(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
Image etikett = Funktionen.Etikett_Entwurf(this, auftragsummary, false);
//etikett.RotateFlip(RotateFlipType.Rotate180FlipNone);
e.Graphics.DrawImage(etikett, e.PageBounds);
}
private void TischSummary_print(object sender, EventArgs e)
{
List<int> auftragliste = Fach.GetTischSummary(maschine.MaschineID);
foreach (int auf in auftragliste)
{
auftragsummary = Auftrag.GetAuftrag(auf);
PrintDialog dialog = new PrintDialog();
if (dialog.ShowDialog() == DialogResult.OK)
{
PrintDocument printDocument = new PrintDocument();
printDocument.PrintPage += new PrintPageEventHandler(PrintDocument_PrintPage_Tischsummary);
printDocument.PrinterSettings = dialog.PrinterSettings;
printDocument.Print();
}
}
Fach fach = fachliste.Last();
fach.TischSummary = true;
fach.Save();
}
}
}