/// <summary> /// Lesen der Positionen der zu druckenden Elemente aus der entsprechenden XML Datei. /// </summary> /// <param name="art">Art des zu druckenden Dokuments (Auftrag oder Stundenzettel)</param> /// <returns></returns> private XmlPrintMapperAuftrag LoadPrintMappings(string art) { // Festlegen des Ordnerpfads der XML Datei string path = Path.Combine(Application.StartupPath, "Config"); // gibt den Namen der XML Datei in den Pfad path = Path.Combine(path, "Print" + art + ".xml"); // Laden der XML Datei XmlDocument xml = new XmlDocument(); xml.Load(path); // Filtern der XML nach Tags und Hinzufügen der Elemente in Listen XmlNodeList mappinglstXmlItems = xml.GetElementsByTagName("printitem"); XmlNodeList tatlstXmlItems = xml.GetElementsByTagName("listitem"); XmlPrintMapperAuftrag printMA = new XmlPrintMapperAuftrag(); // Speichern des Layouts in einem XMLPrintMapperAuftrag foreach (XmlNode node in mappinglstXmlItems) { PrintMapperItem printMI = new PrintMapperItem(); printMI.Name = node.Attributes["name"].Value; printMI.X = Convert.ToInt32(node.Attributes["x"].Value); printMI.Y = Convert.ToInt32(node.Attributes["y"].Value); printMA.MappingList.Add(printMI); } foreach (XmlNode node in tatlstXmlItems) { PrintMapperTaetigkeit printMT = new PrintMapperTaetigkeit(); printMT.Name = node.Attributes["name"].Value; printMT.X = Convert.ToInt32(node.Attributes["x"].Value); printMA.TatList.Add(printMT); } printMA.Start = Convert.ToInt32(xml.GetElementsByTagName("printlist").Item(0).Attributes["start"].Value); printMA.Inc = Convert.ToInt32(xml.GetElementsByTagName("printlist").Item(0).Attributes["inc"].Value); return(printMA); }
/// <summary> /// Methode, die das Layout zum Drucken der Sollstunden und geleisteten Stunden eines Mitarbeiters /// (--> <see cref="Core.Model.StundenDoc"/>) festlegt /// </summary> private void PrintDocument_PrintStunden(object sender, System.Drawing.Printing.PrintPageEventArgs e) { // Laden der Positionen der zu druckenden Elemente aus der XML Datei XmlPrintMapperAuftrag mapper = LoadPrintMappings("Stunden"); //TODO Config Datei erstellen, die Stundensoll enthält. try { Config conf = new Config(); conf.LeseXML(); // Setzen der Schriftart und Größe Font font = new Font(FontFamily.GenericSansSerif, 10.0F, FontStyle.Regular); // Setzen der Einheit auf Millimeter e.Graphics.PageUnit = GraphicsUnit.Millimeter; // Elemente in der Mappinglist wird entsprechend der Informationen des Stundenzettels auf das Dokument gezeichnet foreach (var item in mapper.MappingList) { // Unterscheiden, um welche Information es sich handelt switch (item.Name) { case "MitarbeiterName": e.Graphics.DrawString(_stundenDoc.Mitarbeiter.Name, font, Brushes.Black, item.X, item.Y, StringFormat.GenericTypographic); break; case "Anfang": e.Graphics.DrawString(_stundenDoc.Anfang.ToShortDateString(), font, Brushes.Black, item.X, item.Y, StringFormat.GenericTypographic); break; case "Ende": e.Graphics.DrawString(_stundenDoc.Ende.ToShortDateString(), font, Brushes.Black, item.X, item.Y, StringFormat.GenericTypographic); break; case "Sollstunden": e.Graphics.DrawString((Convert.ToDouble(_stundenDoc.Mitarbeiter.AuslastungStelle) / 100 * conf.StundenSoll).ToString(), font, Brushes.Black, item.X, item.Y, StringFormat.GenericTypographic); break; case "Arbeitszeit": e.Graphics.DrawString(Berechnung.ArbeitsZeit(_stundenDoc).ToString(), font, Brushes.Black, item.X, item.Y, StringFormat.GenericTypographic); break; } } // Setzen der Y-Koordinate der Tätigkeiten int y = mapper.Start; // Alle Tätigkeiten werden auf das Dokument gezeichnet foreach (Taetigkeit t in _stundenDoc.Tatlist) { // Mapping Liste der Tätigkeiten wird auf das Dokument gezeichnet foreach (var item in mapper.TatList) { switch (item.Name) { case "Datum": e.Graphics.DrawString(t.Datum.ToShortDateString(), font, Brushes.Black, item.X, y, StringFormat.GenericTypographic); break; case "Mitarbeiter": e.Graphics.DrawString(_stundenDoc.Mitarbeiter.Name, font, Brushes.Black, item.X, y, StringFormat.GenericTypographic); break; case "Beschreibung": e.Graphics.DrawString(t.Name, font, Brushes.Black, item.X, y, StringFormat.GenericTypographic); break; case "StartZeit": e.Graphics.DrawString(t.StartZeit.ToString(), font, Brushes.Black, item.X, y, StringFormat.GenericTypographic); break; case "EndZeit": e.Graphics.DrawString(t.EndZeit.ToString(), font, Brushes.Black, item.X, y, StringFormat.GenericTypographic); break; case "Stunden": e.Graphics.DrawString(Math.Round(t.Minuten / 60, 1).ToString(), font, Brushes.Black, item.X, y, StringFormat.GenericTypographic); break; } } // Erhöhen der Y-Koordinate entsprechend dem Zeilenabstand y += mapper.Inc; } } catch (Exception ex) { ErrorHandler.ErrorHandle(ex); } }
/// <summary> /// Methode, die das Layout zum Drucken eines Auftrags (--> <see cref="Core.Model.DruckDoc"/>) festlegt /// </summary> private void PrintDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { // Laden der Positionen der zu druckenden Elemente aus der XML Datei XmlPrintMapperAuftrag mapper = LoadPrintMappings("Auftrag"); // Setzen der Einheit auf Millimeter e.Graphics.PageUnit = GraphicsUnit.Millimeter; // Setzen der Schriftart und Größe Font font = new Font(FontFamily.GenericSansSerif, 10.0F, FontStyle.Regular); // Elemente in der Mappinglist werden auf das Dokument gezeichnet foreach (var item in mapper.MappingList) { // Unterscheiden, um welche Information es sich handelt switch (item.Name) { case "AuftragNr": e.Graphics.DrawString(_druckDoc.AuftragNr, font, Brushes.Black, item.X, item.Y, StringFormat.GenericTypographic); break; case "KundeName": e.Graphics.DrawString(_druckDoc.KundeName, font, Brushes.Black, item.X, item.Y, StringFormat.GenericTypographic); break; case "KundeAnschrift": e.Graphics.DrawString(_druckDoc.KundeAnschrift, font, Brushes.Black, item.X, item.Y, StringFormat.GenericTypographic); break; case "KundeTelefon": e.Graphics.DrawString(_druckDoc.KundeTelefon, font, Brushes.Black, item.X, item.Y, StringFormat.GenericTypographic); break; } } // Setzen der Y-Koordinate für die Tätigkeiten int y = mapper.Start; // Alle Tätigkeiten auf das Dokument zeichen foreach (Taetigkeit t in _druckDoc.TatListe) { // Mapping Liste wird ensprechend der Koordinaten auf das Dokument gezeichnet foreach (var item in mapper.TatList) { // Selektieren des Mitarbeiter aus der Mitarbeiter Liste string mitarbeiter = (from i in _druckDoc.MitListe where i.MitarbeiterID == t.MitarbeiterID select i.Name).First(); // Unterscheiden, um welche Information der Tätigkeit es sich handelt switch (item.Name) { case "Datum": e.Graphics.DrawString(t.Datum.ToShortDateString(), font, Brushes.Black, item.X, y, StringFormat.GenericTypographic); break; case "Mitarbeiter": e.Graphics.DrawString(mitarbeiter, font, Brushes.Black, item.X, y, StringFormat.GenericTypographic); break; case "Beschreibung": e.Graphics.DrawString(t.Name, font, Brushes.Black, item.X, y, StringFormat.GenericTypographic); break; case "StartZeit": e.Graphics.DrawString(t.StartZeit.ToString(), font, Brushes.Black, item.X, y, StringFormat.GenericTypographic); break; case "EndZeit": e.Graphics.DrawString(t.EndZeit.ToString(), font, Brushes.Black, item.X, y, StringFormat.GenericTypographic); break; case "Stunden": e.Graphics.DrawString(Math.Round(t.Minuten / 60, 1).ToString(), font, Brushes.Black, item.X, y, StringFormat.GenericTypographic); break; } } // Erhöhen der Y-Koordinate entsprechend dem Zeilenabstand y += mapper.Inc; } }