Programm_Wirl/AA-Forms/FormFahrerScreen.cs
2025-11-30 11:51:28 +01:00

310 lines
10 KiB
C#

using BrightIdeasSoftware;
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 FormFahrerScreen : Form
{
private Benutzer Benutzer;
public Benutzer Fahrer;
public Auftrag Auftrag;
public List<FahrerAuftrag> fahrerauftragliste;
private ListViewItem.ListViewSubItem _currentsubitem = null;
Color Wirlblau = Color.FromArgb(1, 53, 101);
ToolTip toolTip1 = new ToolTip();
public FormFahrerScreen()
{
InitializeComponent();
}
public FormFahrerScreen(Benutzer benutzer) : this()
{
this.Benutzer = benutzer;
}
private void FormFahrerScreen_Load(object sender, EventArgs e)
{
this.listViewAuftrag.SuspendLayout();
this.listViewAuftrag.BeginUpdate();
get_Columns();
get_Groups();
get_Items();
get_lvDesign();
this.listViewAuftrag.EndUpdate();
this.listViewAuftrag.ResumeLayout();
}
private void get_lvDesign()
{
this.listViewAuftrag.ForeColor = Color.White;
//this.listViewAuftrag.MouseMove += new MouseEventHandler(listViewAuftrag_Hover);
toolTip1.ToolTipIcon = ToolTipIcon.Info;
toolTip1.ToolTipTitle = "BESCHREIBUNG";
toolTip1.SetToolTip(listViewAuftrag, "");
//COLUMNS RESIZE
this.listViewAuftrag.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
ListView.ColumnHeaderCollection cc = listViewAuftrag.Columns;
int[] colBreite = new int[cc.Count];
for (int i = 0; i < cc.Count; i++)
{
int colWidth = TextRenderer.MeasureText(cc[i].Text, listViewAuftrag.Font).Width + 10;
if (colWidth > cc[i].Width)
{
colBreite[i] = cc[i].Width = colWidth;
}
else colBreite[i] = cc[i].Width;
}//COLUMNS BREITE CONTENT ODER HEADER SIZE
this.listViewAuftrag.AllowColumnReorder = true;
//GROUP-ITEMS BACKCOLOR
int groups = this.listViewAuftrag.Groups.Count;
for (int i = 0; i < this.listViewAuftrag.Groups.Count; i++)
{
ListViewGroup group = this.listViewAuftrag.Groups[i];
if (i % 2 == 0) foreach (ListViewItem item in group.Items) item.BackColor = Wirlblau;
else foreach (ListViewItem item in group.Items) item.BackColor = Wirlblau;
}
}
private void get_Items()
{
this.listViewAuftrag.Items.Clear();
ListViewItem item;
foreach(FahrerAuftrag auftrag in FahrerAuftrag.GetAuftragList())
{
item = new ListViewItem();
if (auftrag.FahrerID != null) item.Name = Benutzer.GetBenutzer(null, auftrag.FahrerID).Vorname + " " + Benutzer.GetBenutzer(null, auftrag.FahrerID).Nachname;
else item.Name = "Alle Fahrer";
item.Tag = auftrag;
item.Text = auftrag.Wann.ToShortDateString();
item.SubItems.Add(auftrag.KundeNummer);
item.SubItems.Add(auftrag.Kunde);
item.SubItems.Add(auftrag.Aufgabe);
item.SubItems.Add(auftrag.Zusatz);
item.SubItems.Add(auftrag.Gedruckt.HasValue ? "JA" : "NEIN");
item.SubItems.Add(Benutzer.GetBenutzer(null, auftrag.ErstelltVon).Vorname + " " + Benutzer.GetBenutzer(null, auftrag.ErstelltVon).Nachname);
item.SubItems.Add(auftrag.Erstellt.HasValue ? auftrag.Erstellt.Value.ToString("dd.MM.yyyy HH:mm") : string.Empty);
foreach (ListViewGroup group in this.listViewAuftrag.Groups) if (group.Name == item.Name) item.Group = group;
this.listViewAuftrag.Items.Add(item);
}
}
private void get_Columns()
{
this.listViewAuftrag.Columns.Clear();
foreach(string s in FahrerAuftrag.ASPECTS.Split(','))
{//COLUMNS ERSTELLEN!!!
ColumnHeader col = new ColumnHeader();
col.Name = col.Text = s;
col.Width = 100;
if (!col.Name.Contains("ID") && col.Name != "Fahrer" && col.Name != "Erledigt" && col.Name != "Beschreibung") this.listViewAuftrag.Columns.Add(col);
}
}
private void get_Groups()
{
this.listViewAuftrag.Groups.Clear();
ListViewGroup group;
group = new ListViewGroup("Alle Fahrer", HorizontalAlignment.Left);
group.Name = group.Header;
group.Tag = null;
this.listViewAuftrag.Groups.Add(group);
foreach (Benutzer fahrer in Benutzer.GetFahrerList())
{
group = new ListViewGroup(fahrer.Vorname + " " + fahrer.Nachname, HorizontalAlignment.Left);
group.Name = group.Header;
group.Tag = fahrer;
if (!this.listViewAuftrag.Groups.Contains(group)) this.listViewAuftrag.Groups.Add(group);
}
}
private void listViewAuftrag_MouseMove(object sender, MouseEventArgs e)
{
ListView lv = (ListView)sender;
if (lv != null)
{
ListViewHitTestInfo htInfo = lv.HitTest(e.X, e.Y);
if (htInfo != null)
{
if (htInfo.Item != null && htInfo.SubItem != null)
{
// wenn Subitem in Spalte 2 (Index == 1) gewählt
if (htInfo.Item.SubItems.IndexOf(htInfo.SubItem) == 3)
{
if (_currentsubitem != htInfo.SubItem | _currentsubitem == null)
{
toolTip1.Show(Aufgabe.GetAufgabe(htInfo.SubItem.Text, null).Beschreibung, lv, e.X, e.Y);
_currentsubitem = htInfo.SubItem;
}
}
else
{
toolTip1.Hide(lv);
_currentsubitem = null;
}
}
//else
//{
// toolTip1.Hide(lv);
// _currentsubitem = null;
//}
}
}
}
private void tSButtonDrucken_Click(object sender, EventArgs e)
{
if(Benutzer == null) Benutzer = do_Login();
fahrerauftragliste = new List<FahrerAuftrag>();
foreach (ListViewItem item in this.listViewAuftrag.Items)
{
if (item.Checked == true)
{
FahrerAuftrag fahrerauftrag = (FahrerAuftrag)item.Tag;
Auftrag auftrag = Auftrag.GetAuftrag(fahrerauftrag.AuftragID);
if (auftrag.ArbeiterID != null)
{
if (auftrag.ArbeiterID == Benutzer.BenutzerID)
{
auftrag.Gedruckt = DateTime.Now;
auftrag.GedrucktVon = Benutzer.BenutzerID;
if (auftrag.Save()[0] == 1) fahrerauftragliste.Add(fahrerauftrag);
}
else MessageBox.Show($"Der Auftrag vom {fahrerauftrag.Wann.ToShortDateString()} ist nicht dein Auftrag.");
}
else
{
auftrag.Gedruckt = DateTime.Now;
auftrag.GedrucktVon = Benutzer.BenutzerID;
if (auftrag.Save()[0] == 1) fahrerauftragliste.Add(fahrerauftrag);
}
}
}
PrintDialog dialog = new PrintDialog();
if (dialog.ShowDialog() == DialogResult.OK)
{
PrintPreviewDialog previewDialog = new PrintPreviewDialog();
PrintDocument printDocument = new PrintDocument();
printDocument.PrintPage += new PrintPageEventHandler(printDocument_PrintPage);
printDocument.PrinterSettings = dialog.PrinterSettings;
previewDialog.UseAntiAlias = true;
previewDialog.Document = printDocument;
(previewDialog as Form).WindowState = FormWindowState.Maximized;
previewDialog.ShowDialog();
}
FormFahrerScreen_Load(this, null);
}
private void tSButtonErledigt_Click(object sender, EventArgs e)
{
if (Benutzer == null) Benutzer = do_Login();
fahrerauftragliste = new List<FahrerAuftrag>();
foreach(ListViewItem item in this.listViewAuftrag.Items)
{
if (item.Checked == true)
{
FahrerAuftrag fahrerauftrag = (FahrerAuftrag)item.Tag;
Auftrag auftrag = Auftrag.GetAuftrag(fahrerauftrag.AuftragID);
if (auftrag.ArbeiterID != null)
{
if (auftrag.ArbeiterID == Benutzer.BenutzerID)
{
auftrag.Erledigt = DateTime.Now;
auftrag.ErledigtVon = Benutzer.BenutzerID;
if (auftrag.Save()[0] == 1) fahrerauftragliste.Add(fahrerauftrag);
}
else MessageBox.Show($"Der Auftrag vom {fahrerauftrag.Wann.ToShortDateString()} ist nicht dein Auftrag.");
}
else
{
auftrag.Erledigt = DateTime.Now;
auftrag.ErledigtVon = Benutzer.BenutzerID;
if (auftrag.Save()[0] == 1) fahrerauftragliste.Add(fahrerauftrag);
}
}
}
FormFahrerScreen_Load(this, null);
}
private Benutzer do_Login()
{
Benutzer benutzer = new Benutzer();
FormLogin loginForm = new FormLogin();
if (loginForm.ShowDialog() == DialogResult.OK)
{
benutzer = loginForm.Person;
}
return benutzer;
}//LOGIN damit Fahrer nur ihre Aufträge drucken und erledigen können.
private Image druck_Auftrag()
{
Bitmap bitmap = new Bitmap(1120, 790);
Graphics g = Graphics.FromImage(bitmap);
Pen pen = new Pen(Brushes.Black);
Font kat1 = new Font("Arial", 20, FontStyle.Bold);
Font kat2 = new Font("Arial", 12, FontStyle.Regular);
Font kat3 = new Font("Arial", 8, FontStyle.Regular);
SizeF datum = g.MeasureString("22.22.2222", kat2);
SizeF gedruckt = g.MeasureString("Datum: 22.22.2222", kat2);
//SEITE WEISS & KOPFZEILE ERSTELLEN
g.FillRectangle(Brushes.White, 0, 0, bitmap.Width, bitmap.Height);
g.DrawString($"Fahrer: {Benutzer.Vorname} {Benutzer.Nachname}", kat1, Brushes.Black, 50, 50);
g.DrawString($"Datum: {DateTime.Now.Date.ToShortDateString()}", kat2, Brushes.Black, 740 - gedruckt.Width, 50);
int y = 100;
int height = 100;
foreach (FahrerAuftrag auftrag in fahrerauftragliste)
{
Rectangle rahmen = new Rectangle(50, y, 690, height);
g.DrawRectangle(pen, rahmen);
g.DrawLine(pen, new Point(50, y + (int)datum.Height), new Point(740, y + (int)datum.Height));
g.DrawString(auftrag.Wann.ToShortDateString(), kat2, Brushes.Black, 50, y);
g.DrawString(auftrag.KundeNummer + " " + auftrag.Kunde, kat2, Brushes.Black, (790 / 2) - (g.MeasureString(auftrag.KundeNummer + " " + auftrag.Kunde, kat2).Width / 2), y);
g.DrawString(auftrag.Aufgabe, kat2, Brushes.Black, 740 - g.MeasureString(auftrag.Aufgabe, kat2).Width, y);
//ZUSATZ SCHREIBEN
g.DrawString("Zusatz:", kat2, Brushes.Black, 50, y + (int)datum.Height + 5);
if (g.MeasureString(auftrag.Zusatz, kat2).Width + 100 <= 790) g.DrawString(auftrag.Zusatz, kat2, Brushes.Black, 50, y + (int)datum.Height * 2 + 10);
else g.DrawString("Zusatztext zu lange. Bitte händisch hinzufügen.", kat2, Brushes.Black, 50, y + (int)datum.Height * 2 + 10);
y += height + 5;
}//AUFTRÄGE ERSTELLEN
Image image = bitmap;
return image;
}//AUFTRÄGE DRUCKENTWURF
private void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
e.Graphics.DrawImage(druck_Auftrag(), 0, 0);
}
}
}