using System; using System.Collections.Generic; using System.ComponentModel; using System.Configuration; using System.Data; using System.Drawing; using System.Drawing.Printing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web; using System.Windows.Forms; using System.Windows.Forms.DataVisualization.Charting; using DatenDB; using Deckungsbeitrag.Properties; using ZXing; using ZXing.QrCode.Internal; using static System.Windows.Forms.VisualStyles.VisualStyleElement.Window; namespace Deckungsbeitrag { public partial class FormExpedit : Form { public Image etikett = null; public Auftrag auftrag; public AuftragArtikel auftragArtikel; public Benutzer benutzer; public FormExpedit(Benutzer benutzer) { InitializeComponent(); this.benutzer = benutzer; this.groupBoxEtikett.MouseDoubleClick += new MouseEventHandler(GroupBox_DoubleClick); this.buttonDrucken.Enabled = false; this.buttonDrucken.BackColor = Color.Gray; this.pictureBoxMinus.BackColor = Color.Gray; this.pictureBoxPlus.BackColor = Color.Gray; //this.BackColor = Properties.Settings.Default.Wirlblau; } private void FormExpedit_Load(object sender, EventArgs e) { this.Cursor = Cursors.WaitCursor; Funktionen.HideControls(this.Controls); List alllist = Auftrag.GetExpeditLists(null); List sonderlist = Auftrag.GetExpeditLists((int)AuftragTyp.Sonder); List standartlist = Auftrag.GetExpeditLists((int)AuftragTyp.Standart); if (standartlist.Count == 0) this.tabPageStandart.Visible = false; if (sonderlist.Count == 0) { this.tabPageSonder.Visible = false; } ListView_Load(alllist, this.listViewLieferungen); ListView_Load(sonderlist, this.listViewSonder); ListView_Load(standartlist, this.listViewStandart); Sonderauftrag_Load(); Funktionen.ShowControls(this.Controls); this.Cursor = Cursors.Default; //Button ausblenden this.buttonStatusSpeichern.Visible = false; } private void ListView_Load(List auftraglist, ListView lv) { lv.Items.Clear(); foreach (Auftrag auftrag in auftraglist) { Kunde kunde = Kunde.GetKunde(string.Empty, auftrag.KundeID, string.Empty); ListViewItem item = new ListViewItem(); item.Tag = auftrag; item.Text = ""; item.SubItems.Add(auftrag.Liefertag.ToString("dddd dd.MM")); if (kunde.KundeNummer == "0") item.SubItems.Add(auftrag.ZusatzInfo); else item.SubItems.Add(kunde.Suchtext); item.SubItems.Add(kunde.Region); item.SubItems.Add(auftrag.Container.ToString()); if ((int)auftrag.Status == 3) item.SubItems.Add(auftrag.Status.ToString() + " " + Aufgabe.GetAufgabe(string.Empty, auftrag.AuftragID).Bezeichnung); else item.SubItems.Add(auftrag.Status.ToString()); if (auftrag.Liefertag <= DateTime.Today.AddDays(1)) { if (auftrag.Liefertag < DateTime.Today) { item.BackColor = (Color)Settings.Default["AuftAbgel"]; } else { item.BackColor = (Color)Settings.Default["AuftBald"]; item.ForeColor = Color.Black; } } lv.Items.Add(item); } Funktionen.Columns_Resize(lv); lv.Columns[0].Width = 0; lv.Columns[1].Width = lv.Columns[1].Width + 50; } private void Sonderauftrag_Load() { //this.buttonSTH.Enabled = this.buttonSTH.Visible = false; //this.listViewLieferungen.Visible = false; //this.listViewSTH.Visible = true; this.listViewSTH.Columns.Clear(); this.listViewSTH.Items.Clear(); List artikel = Views.GetArtikel_sthList(); var groups = artikel.GroupBy(a => new { a.ArtikelName, a.KundeName, a.Anzahl }); //Spalten in die ListView einfügen. Pro Kund mit STH wird eine Spalte erstellt. this.listViewSTH.Columns.Add("ARTIKEL"); foreach (var col in groups.GroupBy(g => g.Key.KundeName)) { this.listViewSTH.Columns.Add(col.Key.ToString()); } this.listViewSTH.Columns.Add("GESAMT"); //Zeilen in die ListView einfügen. Pro Artikel mit STH wird eine Zeile erstellt. //Subitems für jede Spalte erstellen foreach (var row in groups.GroupBy(g => g.Key.ArtikelName)) { ListViewItem item = new ListViewItem(); item.Tag = row; item.Text = row.Key.ToString(); //Subitems getrennt formatierbar machen item.UseItemStyleForSubItems = false; //Subitems für jede Spalte erstellen for (int i = 0; i <= this.listViewSTH.Columns.Count; i++) { item.SubItems.Add(string.Empty); } this.listViewSTH.Items.Add(item); } //Übereinstimmend mit Spalten(Kunde) und Zeile(Artikel) wird die Anzahl der Stück eingefügt //Letzte Spalte Artikelsumme berechnen und eintragen //SubItem "GESAMT" Schriftfarbe und Dicke ändern foreach (Views view in artikel) { foreach (ListViewItem item in this.listViewSTH.Items) { if (item.Text == view.ArtikelName) { foreach (ColumnHeader ch in this.listViewSTH.Columns) { if (ch.Text == view.KundeName) { item.SubItems[ch.Index].Text = view.Anzahl.ToString(); item.SubItems[ch.Index].Tag = view; } //Letzte Spalte Artikelsumme berechnen und eintragen. if (ch.Text == "GESAMT") { int ges = 0; for (int i = 0; i < this.listViewSTH.Columns.Count - 1; i++) { if (int.TryParse(item.SubItems[i].Text, out int value)) ges += value; } item.SubItems[ch.Index].Text = ges.ToString(); //SubItem "GESAMT" Schriftfarbe und Dicke ändern item.SubItems[ch.Index].ForeColor = Color.Red; item.SubItems[ch.Index].Font = new Font(item.Font, FontStyle.Bold); } } } } } //Spaltenbreite der ListView wird automatisch optimiert. Funktionen.Columns_Resize(this.listViewSTH); //Umreihen der Spalten in der Listview wird Funktionen.Columns_Reorder(this.listViewSTH); //GESAMT-Spalte wird als 2.Spalte angezeigt. foreach (ColumnHeader ch in this.listViewSTH.Columns) if (ch.Text == "GESAMT") { ch.DisplayIndex = 1; } } private void Container_Click(object sender, EventArgs e) { PictureBox pb = (PictureBox)sender; int cont = int.Parse(this.labelContainer.Text); if (pb.Name.ToString().Contains("Plus")) cont++; if (pb.Name.ToString().Contains("Minus")) cont--; this.labelContainer.Text = cont.ToString(); labelContainer_TextChanged(this, e); } private void GroupBox_DoubleClick(object sender, MouseEventArgs e) { Control ctr = this.groupBoxEtikett.GetChildAtPoint(e.Location); if (this.listViewLieferungen.SelectedItems.Count == 0 && this.textBoxQRCode.Text.Contains("scannen")) { MessageBox.Show("Containeranzahl ändern NICHT MÖGLICH. Du hast noch keinen Auftrag ausgewählt.", "ACHTUNG", MessageBoxButtons.OK, MessageBoxIcon.Stop); } else { if (ctr.Name.Contains("Minus")) { if (int.Parse(this.labelContainer.Text) == 0) MessageBox.Show($"Containeranzahl kleiner als 0 ist nicht möglich.", "ACHTUNG", MessageBoxButtons.OK, MessageBoxIcon.Warning); else { if (MessageBox.Show("Möchtest du die Containeranzahl händisch verändern?", "Frage", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { this.pictureBoxMinus.Enabled = this.pictureBoxPlus.Enabled = true; this.pictureBoxMinus.BackColor = Color.Red; this.pictureBoxPlus.BackColor = Color.FromArgb(0, 192, 0); labelContainer_TextChanged(this, e); } } } if (ctr.Name.Contains("Plus")) { if (MessageBox.Show("Möchtest du die Containeranzahl händisch verändern?", "Frage", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { this.pictureBoxMinus.Enabled = this.pictureBoxPlus.Enabled = true; this.pictureBoxMinus.BackColor = Color.Red; this.pictureBoxPlus.BackColor = Color.FromArgb(0, 192, 0); labelContainer_TextChanged(this, e); } } } } private void textBoxQRCode_Leave(object sender, EventArgs e) { //this.tabControlAuftragList.SelectedIndex = 0; FormExpedit ex; ListView listView = null; if(sender.GetType() == typeof(FormExpedit)) { ex = (FormExpedit)sender; listView = (ListView)ex.ActiveControl; } else { foreach (Control c in this.tabControlAuftragList.SelectedTab.Controls) { if (c.GetType() == typeof(ListView)) { listView = (ListView)c; } } } if (!string.IsNullOrWhiteSpace(textBoxQRCode.Text)) { if (int.TryParse(textBoxQRCode.Text, out int value)) auftrag = Auftrag.GetAuftrag(value); //Kunde kunde = Kunde.GetKunde(string.Empty, auftrag.KundeID, string.Empty); if (auftrag != null) {Load_Etikett_GroupBox(auftrag); } foreach (ListViewItem item in listView.Items) { Auftrag auftrag = item.Tag as Auftrag; if (auftrag.AuftragID.ToString() == textBoxQRCode.Text) { item.Selected = true; buttonDrucken.Enabled = true; buttonDrucken.BackColor = Color.FromArgb(0, 192, 0); this.labelContainer.Text = auftrag.ContainerClean.ToString(); } } } //this.textBoxQRCode.Clear(); //this.textBoxQRCode.Text = "QR-Code scannen"; //this.buttonDrucken.Focus(); } private void Load_Etikett_GroupBox(Auftrag auftrag) { this.textBoxQRCode.Text = auftrag.AuftragID + " " + Kunde.GetKunde(null, auftrag.KundeID, null).Suchtext; this.labelContainer.Text = auftrag.ContainerClean.ToString(); etikett = Funktionen.Etikett_Entwurf(auftrag); this.pictureBoxEntwurf.Image = etikett; } private Bitmap Entwurf_erstellen(Auftrag auftrag) { Kunde kunde = Kunde.GetKunde(string.Empty, auftrag.KundeID, string.Empty); Image qr = Funktionen.Get_QR_Code(kunde, auftrag); Bitmap bitmap = new Bitmap(1200, 350); Graphics g = Graphics.FromImage(bitmap); Font font1 = new Font("Arial", 50, FontStyle.Bold); Font font2 = new Font("Arial", 30, FontStyle.Bold); Font font3 = new Font("Arial", 20, FontStyle.Regular); Font font4 = new Font("Arial", 80, FontStyle.Bold); float height_font1 = g.MeasureString($"{kunde.Suchtext}", font1).Height; float height_font2 = g.MeasureString($"{kunde.PLZ} {kunde.Ort})", font2).Height; SizeF size_Liefertag = new SizeF(g.MeasureString("Liefertag:", font3)); float width_date_font1 = g.MeasureString("25.05.2023", font1).Width; g.FillRectangle(Brushes.White, 0, 0, bitmap.Width, bitmap.Height); //QR-Code g.DrawImage(qr, 10, 0, 400, 400); //while (g.MeasureString($"{kunde.KundeName} + ({kunde.Suchtext})", font1).Width < (bitmap.Width - bitmap.Height)) //{ // font1 = new Font(font1.FontFamily, font1.Size + 1); //} g.DrawString($"{kunde.Suchtext}", font1, Brushes.Black, 350, 25); g.DrawString($"{kunde.PLZ} {kunde.Ort}", font2, Brushes.Black, 350, 25 + height_font1 + 5); g.DrawString("Liefertag:", font3, Brushes.Black, 350, 25 + height_font1 + 10 + height_font2 + 10); //g.DrawString("Container:", font3, Brushes.Black, 350 + width_date_font1, 25 + height_font1 + 10 + height_font2 + 10); g.DrawString($"{auftrag.Liefertag.ToShortDateString()}", font1, Brushes.Black, 350, 25 + height_font1 + 10 + height_font2 + 5 + size_Liefertag.Height + 5); //g.DrawString($"{etkdata[1]}", font4, Brushes.Black, 350 + width_date_font1 + size_Liefertag.Width + 40, 25 + height_font1 + 10 + height_font2); return bitmap; } private void buttonDrucken_Click(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); printDocument.PrinterSettings = dialog.PrinterSettings; printDocument.Print(); //int z = int.Parse(labelContainer.Text); //z++; //auftrag.ContainerClean = z; //auftrag.Save(); //this.labelContainer.Text = auftrag.ContainerClean.ToString(); etikett.RotateFlip(RotateFlipType.Rotate180FlipNone); FormExpedit_Load(this, null); } } private void PrintDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { etikett.RotateFlip(RotateFlipType.Rotate180FlipNone); e.Graphics.DrawImage(etikett, e.PageBounds); //e.Graphics.DrawImage(bitmap, 0, 0, 790, 900); } private void labelContainer_TextChanged(object sender, EventArgs e) { if (this.labelContainer.Text == "0") { this.pictureBoxMinus.Enabled = false; this.pictureBoxMinus.BackColor = Color.Gray; } else { this.pictureBoxMinus.Enabled = true; this.pictureBoxMinus.BackColor = Color.Red; } } private void buttonAbbrechen_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.Cancel; this.Close(); } //FÜR QR-CODE SCANN VORBEREITET private void textBoxQRCode_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) { if (e.KeyCode == Keys.Menu) { textBoxQRCode_Leave(this, null); } //Console.WriteLine(textBoxQRCode.Text); } private void textBoxQRCode_Enter(object sender, EventArgs e) { this.textBoxQRCode.Clear(); foreach (ListViewItem item in this.listViewLieferungen.Items) item.Selected = false; } //LISTVIEW STANDERHÖHUNG WENN ITEM CHECKED WIRD BUTTON SPEICHERN VERFÜGBAR private void listViewSonder_ItemChecked(object sender, ItemCheckedEventArgs e) { ListView lv = (ListView)sender; if (lv.CheckedItems.Count > 0) { this.buttonStatusSpeichern.Enabled = this.buttonStatusSpeichern.Visible = true; this.buttonStatusSpeichern.BackColor = Color.Yellow; } } //BUTTON SPEICHERN private void buttonStatusSpeichern_Click(object sender, EventArgs e) { foreach (ListViewItem item in this.listViewSTH.CheckedItems) { foreach (ListViewItem.ListViewSubItem subItem in item.SubItems) { if (subItem.Tag != null) { auftragArtikel = AuftragArtikel.GetArtikel(((Views)subItem.Tag).AuftragArtikelID); if (auftragArtikel.Erledigt) auftragArtikel.Erledigt = false; else auftragArtikel.Erledigt = true; auftragArtikel.Save(); } } } } //WENN TAB GEWECHSELT ANZEIGE AKTUALISIEREN private void tabControlAuftragList_Selected(object sender, TabControlEventArgs e) { TabControl tabControl = (TabControl)sender; if(tabControl.SelectedIndex < 3) { this.groupBoxEtikett.Visible = true; this.buttonStatusSpeichern.Visible = this.buttonStatusSpeichern.Enabled = false; } if(tabControl.SelectedIndex == 3) { this.groupBoxEtikett.Visible = false; this.buttonStatusSpeichern.Visible = true; } } //TAB CONTROL LISTVIEWS MOUSECLICK EVENTS private void listView_MouseClick(object sender, MouseEventArgs e) { ListView listView = (ListView)sender; ListViewItem item = listView.GetItemAt(e.X, e.Y); if (listView.SelectedItems.Count == 1) { auftrag = item.Tag as Auftrag; buttonDrucken.Enabled = true; buttonDrucken.BackColor = Color.FromArgb(0, 192, 0); this.textBoxQRCode.Text = auftrag.AuftragID.ToString(); this.labelContainer.Text = auftrag.ContainerClean.ToString(); textBoxQRCode_Leave(this, e); this.textBoxQRCode.Enabled = false; } listView.Focus(); } private void listView_MouseDoubleClick(object sender, MouseEventArgs e) { ListView lv = (ListView)sender; ListViewItem item1 = lv.GetItemAt(e.X, e.Y); auftrag = item1.Tag as Auftrag; FormAuftragDetail detail = new FormAuftragDetail(auftrag, benutzer); if(detail.ShowDialog() == DialogResult.OK) { this.auftrag = detail.auftrag; Load_Etikett_GroupBox(this.auftrag); } } private void listViewLieferungen_SelectedIndexChanged(object sender, EventArgs e) { ListView l = (ListView)sender; if (l.SelectedItems.Count == 0) this.textBoxQRCode.Enabled = true; } } }