161 lines
6.6 KiB
C#
161 lines
6.6 KiB
C#
using MySql.Data.MySqlClient;
|
|
using PdfSharp.Drawing;
|
|
using PdfSharp.Fonts;
|
|
using PdfSharp.Pdf;
|
|
using System;
|
|
using System.Data;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using static System.Runtime.InteropServices.JavaScript.JSType;
|
|
using System.IO;
|
|
|
|
namespace SkyTeam
|
|
{
|
|
public partial class BuchungenPage : Page
|
|
{
|
|
public BuchungenPage()
|
|
{
|
|
InitializeComponent();
|
|
LoadBookings();
|
|
}
|
|
|
|
private void LoadBookings()
|
|
{
|
|
if (SessionManager.CurrentUserId == 0) return;
|
|
|
|
string query = @"SELECT b.Id AS BuchungId, f.Flugnummer, f.Abflugort, f.Zielort, f.Abflugdatum, b.Status
|
|
FROM buchungen b
|
|
JOIN fluege f ON b.FlugId = f.Id
|
|
WHERE b.UserId = @uid";
|
|
|
|
try
|
|
{
|
|
using (MySqlConnection conn = new MySqlConnection(DatenbankServices.GetConnection()))
|
|
{
|
|
conn.Open();
|
|
MySqlCommand cmd = new MySqlCommand(query, conn);
|
|
cmd.Parameters.AddWithValue("@uid", SessionManager.CurrentUserId);
|
|
|
|
MySqlDataAdapter adapter = new MySqlDataAdapter(cmd);
|
|
DataTable dt = new DataTable();
|
|
adapter.Fill(dt);
|
|
|
|
if (dt.Rows.Count > 0)
|
|
{
|
|
BookingsGrid.ItemsSource = dt.DefaultView;
|
|
NoBookingsView.Visibility = Visibility.Collapsed;
|
|
BookingsGrid.Visibility = Visibility.Visible;
|
|
CancelBtn.Visibility = Visibility.Visible;
|
|
CreatePdfBtn.Visibility = Visibility.Visible;
|
|
}
|
|
else
|
|
{
|
|
NoBookingsView.Visibility = Visibility.Visible;
|
|
BookingsGrid.Visibility = Visibility.Collapsed;
|
|
CancelBtn.Visibility = Visibility.Collapsed;
|
|
CreatePdfBtn.Visibility = Visibility.Collapsed;
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex) { MessageBox.Show(ex.Message); }
|
|
}
|
|
|
|
private void CancelBooking_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
if (BookingsGrid.SelectedItem == null)
|
|
{
|
|
MessageBox.Show("Bitte wählen Sie einen Flug aus.");
|
|
return;
|
|
}
|
|
|
|
DataRowView row = (DataRowView)BookingsGrid.SelectedItem;
|
|
int bid = Convert.ToInt32(row["BuchungId"]);
|
|
|
|
if (MessageBox.Show("Stornieren?", "Confirm", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
|
|
{
|
|
using (MySqlConnection conn = new MySqlConnection(DatenbankServices.GetConnection()))
|
|
{
|
|
conn.Open();
|
|
new MySqlCommand($"DELETE FROM buchungen WHERE Id={bid}", conn).ExecuteNonQuery();
|
|
}
|
|
LoadBookings();
|
|
}
|
|
}
|
|
// Idee und Grundlage aus folgendem Video:
|
|
// https://www.youtube.com/watch?v=sfeJprlUT7E
|
|
// Datum: 05.03.2026
|
|
// Anpassung und Implementierung mit Unterstützung von ChatGPT (OpenAI)
|
|
public class CustomFontResolver : IFontResolver
|
|
{
|
|
private readonly string fontPath = "OpenSans-Regular.ttf";
|
|
|
|
public string DefaultFontName => "OpenSans";
|
|
|
|
public byte[] GetFont(string faceName)
|
|
{
|
|
return File.ReadAllBytes(fontPath);
|
|
}
|
|
|
|
public FontResolverInfo ResolveTypeface(string familyName, bool isBold, bool isItalic)
|
|
{
|
|
return new FontResolverInfo("OpenSans");
|
|
}
|
|
}
|
|
|
|
// Feature: PDF-Export für Flugbuchungen hinzugefügt
|
|
//Quelle:
|
|
//YouTube Tutorial: https://www.youtube.com/watch?v=C-yMypr_TdY
|
|
//Datum: 05.03.2026
|
|
private void CreatePdf_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
if (BookingsGrid.SelectedItem == null)
|
|
{
|
|
MessageBox.Show("Bitte wählen Sie einen Flug aus.");
|
|
return;
|
|
}
|
|
|
|
DataRowView row = (DataRowView)BookingsGrid.SelectedItem;
|
|
|
|
int buchungId = Convert.ToInt32(row["BuchungId"]);
|
|
string flugNr = row["Flugnummer"].ToString();
|
|
string von = row["Abflugort"].ToString();
|
|
string nach = row["Zielort"].ToString();
|
|
DateTime datum = Convert.ToDateTime(row["Abflugdatum"]);
|
|
string status = row["Status"].ToString();
|
|
|
|
string logoPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "icon.png");
|
|
XImage logo = XImage.FromFile(logoPath);
|
|
|
|
PdfDocument document = new PdfDocument();
|
|
document.Info.Title = "Flugbuchung";
|
|
|
|
PdfPage page = document.AddPage();
|
|
XGraphics gfx = XGraphics.FromPdfPage(page);
|
|
|
|
XFont titleFont = new XFont("OpenSans", 30);
|
|
XFont textFont = new XFont("OpenSans", 20);
|
|
|
|
gfx.DrawImage(logo, 40, 20, 100, 100);
|
|
gfx.DrawString("Flugbuchung", titleFont, XBrushes.Black, new XPoint(200, 80));
|
|
gfx.DrawString($"Buchung-ID: {buchungId}", textFont, XBrushes.Black, new XPoint(40, 160));
|
|
gfx.DrawString($"Flug-Nr.: {flugNr}", textFont, XBrushes.Black, new XPoint(40, 200));
|
|
gfx.DrawString($"Von: {von}", textFont, XBrushes.Black, new XPoint(40, 240));
|
|
gfx.DrawString($"Nach: {nach}", textFont, XBrushes.Black, new XPoint(40, 280));
|
|
gfx.DrawString($"Datum: {datum:dd.MM.yyyy}", textFont, XBrushes.Black, new XPoint(40, 320));
|
|
gfx.DrawString($"Status: {status}", textFont, XBrushes.Black, new XPoint(40, 360));
|
|
|
|
string filename = $"Flugbuchung_{buchungId}.pdf";
|
|
document.Save(filename);
|
|
|
|
MessageBox.Show($"PDF erfolgreich erstellt: {filename}");
|
|
}
|
|
|
|
private void HomeButton_Click(object sender, RoutedEventArgs e) => NavigationService.Navigate(new NavigationPage());
|
|
private void BookingsButton_Click(object sender, RoutedEventArgs e) => NavigationService.Navigate(new BuchungenPage());
|
|
private void SettingsButton_Click(object sender, RoutedEventArgs e) => NavigationService.Navigate(new SettingsPage());
|
|
private void LogoutButton_Click(object sender, RoutedEventArgs e) => NavigationService.Navigate(new LogInPage());
|
|
private void OpenReservierungSuche_Click(object sender, RoutedEventArgs e) => NavigationService.Navigate(new ReservierungssuchePage());
|
|
|
|
|
|
}
|
|
} |