373 lines
19 KiB
C#
373 lines
19 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.Collections.Specialized;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Diagnostics;
|
|
using System.Linq;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Data;
|
|
using System.Windows.Documents;
|
|
using System.Windows.Input;
|
|
using System.Windows.Media;
|
|
using System.Windows.Media.Imaging;
|
|
using System.Windows.Shapes;
|
|
|
|
namespace PEP_Tool
|
|
{
|
|
/// <summary>
|
|
/// Interaktionslogik für Zugzuweisung.xaml
|
|
/// </summary>
|
|
public partial class Zugzuweisung : Window, INotifyPropertyChanged
|
|
{
|
|
public event PropertyChangedEventHandler PropertyChanged;
|
|
|
|
|
|
private DataTable mACombo = new DataTable();
|
|
public DataTable MACombo
|
|
{
|
|
get { return mACombo; }
|
|
set { mACombo = value; OnPropertyChanged(); }
|
|
}
|
|
|
|
|
|
private List<Gewerk> mAView = new List<Gewerk>();
|
|
public List<Gewerk> MAView
|
|
{
|
|
get { return mAView; }
|
|
set { mAView = value; OnPropertyChanged(); }
|
|
}
|
|
|
|
DataTable schaltList = new DataTable("SchaltList");
|
|
DataTable schaltListGewerk = new DataTable("SchaltListGewerk");
|
|
DataTable schaltListTag = new DataTable("SchaltListTag");
|
|
|
|
public Zugzuweisung(Button sender = null)
|
|
{
|
|
this.DataContext = this;
|
|
InitializeComponent();
|
|
|
|
|
|
if (sender != null)
|
|
ZuweisungFromList(sender);
|
|
else
|
|
ZuweisungFromMenu();
|
|
|
|
dGSchaltList.DataContext = schaltList;
|
|
dGSchaltListGewerk.DataContext = schaltListGewerk;
|
|
dGSchaltListTag.DataContext = schaltListTag;
|
|
}
|
|
|
|
private void ZuweisungFromMenu()
|
|
{
|
|
lbl1.Visibility = Visibility.Collapsed;
|
|
lbl2.Visibility = Visibility.Collapsed;
|
|
btnAddMitarbeiter.Visibility = Visibility.Visible;
|
|
dPMAFilter.Visibility = Visibility.Visible;
|
|
cBGewerke.Visibility = Visibility.Visible;
|
|
}
|
|
|
|
object sending;
|
|
object buttonDatum;
|
|
private async void ZuweisungFromList(Button sender)
|
|
{
|
|
sending = sender;
|
|
|
|
dPMAFilter.Visibility = Visibility.Collapsed;
|
|
cBGewerke.Visibility = Visibility.Collapsed;
|
|
btnAddMitarbeiter.Visibility = Visibility.Collapsed;
|
|
lbl1.Visibility = Visibility.Visible;
|
|
lbl2.Visibility = Visibility.Visible;
|
|
|
|
var x = (sender);
|
|
var y = x.DataContext as System.Data.DataRowView;
|
|
var z = y.Row.ItemArray[0];
|
|
buttonDatum = y.Row.ItemArray[4];
|
|
var schicht = y.Row.ItemArray[8].ToString().Substring(0, 2);
|
|
|
|
lblDate.Text = Convert.ToDateTime(buttonDatum).ToShortDateString();
|
|
|
|
switch (schicht)
|
|
{
|
|
case "MF":
|
|
cBSchicht.SelectedIndex = 0;
|
|
break;
|
|
case "MT":
|
|
cBSchicht.SelectedIndex = 0;
|
|
break;
|
|
case "MS":
|
|
cBSchicht.SelectedIndex = 1;
|
|
break;
|
|
case "MN":
|
|
cBSchicht.SelectedIndex = 2;
|
|
break;
|
|
default:
|
|
cBSchicht.SelectedIndex = 0;
|
|
break;
|
|
}
|
|
|
|
if (schicht == "MF" || schicht == "MT")
|
|
MACombo = await SQL.ReadSQL($"SELECT Abteilung, COUNT(*) - IFNULL((SELECT SUM(AnzahlMA) from schaltung `s` where Datum = '{Convert.ToDateTime(buttonDatum).ToString("yyyy-MM-dd")}' AND (c.Arbeitsmuster like '%MF%' OR c.Arbeitsmuster like '%MT%') AND s.Abteilung = m.Abteilung),0),COUNT(*),IFNULL((SELECT SUM(AnzahlMA) from schaltung `s` where Datum = '{Convert.ToDateTime(buttonDatum).ToString("yyyy-MM-dd")}' AND (c.Arbeitsmuster like '%MF%' OR c.Arbeitsmuster like '%MT%') AND s.Abteilung = m.Abteilung),0) From `mitarbeiter_static` `m` left join `mitarbeiter_change` `c` ON m.PersNr = c.mitarbeiter_static_PersNr WHERE (c.Arbeitsmuster like '%MF%' OR c.Arbeitsmuster like '%MT%') AND c.Datum = '{Convert.ToDateTime(buttonDatum).ToString("yyyy-MM-dd")}' group by m.Abteilung order by Abteilung");
|
|
else
|
|
MACombo = await SQL.ReadSQL($"SELECT Abteilung, COUNT(*) - IFNULL((SELECT SUM(AnzahlMA) from schaltung `s` where Datum = '{Convert.ToDateTime(buttonDatum).ToString("yyyy-MM-dd")}' AND c.Arbeitsmuster like '%{schicht}%' AND s.Abteilung = m.Abteilung),0),COUNT(*),IFNULL((SELECT SUM(AnzahlMA) from schaltung `s` where Datum = '{Convert.ToDateTime(buttonDatum).ToString("yyyy-MM-dd")}' AND c.Arbeitsmuster like '%{schicht}%' AND s.Abteilung = m.Abteilung),0) From `mitarbeiter_static` `m` left join `mitarbeiter_change` `c` ON m.PersNr = c.mitarbeiter_static_PersNr WHERE c.Arbeitsmuster like '%{schicht}%' AND c.Datum = '{Convert.ToDateTime(buttonDatum).ToString("yyyy-MM-dd")}' group by m.Abteilung order by Abteilung");
|
|
|
|
//schaltList = await SQL.ReadSQL($"SELECT Abteilung,AnzahlMA,ZugName,Start,Ende,Zustand,Grund FROM `schaltung` `s` WHERE ZugName = '{tbName.Text}'", schaltList);
|
|
schaltListTag = await SQL.ReadSQL($"SELECT Abteilung,AnzahlMA,ZugName,Start,Ende,Zustand,Grund FROM `schaltung` `s` WHERE Datum = '{Convert.ToDateTime(buttonDatum).ToString("yyyy-MM-dd")}'", schaltListTag);
|
|
|
|
MAView = Helper.DataTableToGewerk(MACombo);
|
|
}
|
|
|
|
|
|
bool resultChanged = false;
|
|
private void BtnOK_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
this.Close();
|
|
}
|
|
|
|
private async void BtnAdd_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
DateTime date = DateTime.Now;
|
|
if (dPSchaltVon.Value.HasValue)
|
|
{
|
|
date = dPSchaltVon.Value.Value;
|
|
|
|
if (dPSchaltVon.Value.Value >= dPSchaltBis.Value.Value)
|
|
{
|
|
MessageBox.Show("Startzeit größer als Endzeit", "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("Kein gültiges Datum gewählt", "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
|
return;
|
|
}
|
|
|
|
|
|
li.Visibility = Visibility.Visible;
|
|
|
|
await Task.Delay(50);
|
|
|
|
|
|
await SQL.WriteSQL($"INSERT INTO `schaltung` (ZugName,Datum,Start,Ende,Zustand,Grund,AnzahlMA,Abteilung) VALUES ('{tbName.Text}','{date.ToString("yyyy-MM-dd")}','{dPSchaltVon.Text}','{dPSchaltBis.Text}','{cbSchaltzustand.Text}','{tbGrund.Text}','{cBAnzahlMA.SelectedValue.ToString()}','{(((Gewerk)((ItemCollection)(dGMAView.Items))[dGMAView.SelectedIndex]).Abteilung)}')");
|
|
|
|
|
|
schaltList = await SQL.ReadSQL($"Select Abteilung,AnzahlMA,ZugName,Start,Ende,Zustand,Grund FROM `schaltung` `s` WHERE ZugName = '{tbName.Text}'", schaltList);
|
|
schaltListGewerk = await SQL.ReadSQL($"SELECT Abteilung,AnzahlMA,ZugName,Start,Ende,Zustand,Grund FROM `schaltung` `s` WHERE Abteilung = '{(((Gewerk)((ItemCollection)(dGMAView.Items))[dGMAView.SelectedIndex]).Abteilung)}' AND Start like '{Convert.ToDateTime(buttonDatum).ToString("dd.MM.")}%'", schaltListGewerk);
|
|
schaltListTag = await SQL.ReadSQL($"SELECT Abteilung,AnzahlMA,ZugName,Start,Ende,Zustand,Grund FROM `schaltung` `s` WHERE Start like '{Convert.ToDateTime(buttonDatum).ToString("dd.MM.")}%'", schaltListTag);
|
|
|
|
var schicht = "";
|
|
|
|
switch (cBSchicht.SelectedIndex)
|
|
{
|
|
case 0:
|
|
schicht = "MF";
|
|
break;
|
|
case 1:
|
|
schicht = "MS";
|
|
break;
|
|
case 2:
|
|
schicht = "MN";
|
|
break;
|
|
default:
|
|
schicht = "MF";
|
|
break;
|
|
}
|
|
|
|
if (schicht == "MF" || schicht == "MT")
|
|
MACombo = await SQL.ReadSQL($"SELECT Abteilung, COUNT(*) - IFNULL((SELECT SUM(AnzahlMA) from schaltung `s` where Datum = '{Convert.ToDateTime(buttonDatum).ToString("yyyy-MM-dd")}' AND (c.Arbeitsmuster like '%MF%' OR c.Arbeitsmuster like '%MT%') AND s.Abteilung = m.Abteilung),0),COUNT(*),IFNULL((SELECT SUM(AnzahlMA) from schaltung `s` where Datum = '{Convert.ToDateTime(buttonDatum).ToString("yyyy-MM-dd")}' AND (c.Arbeitsmuster like '%MF%' OR c.Arbeitsmuster like '%MT%') AND s.Abteilung = m.Abteilung),0) From `mitarbeiter_static` `m` left join `mitarbeiter_change` `c` ON m.PersNr = c.mitarbeiter_static_PersNr WHERE (c.Arbeitsmuster like '%MF%' OR c.Arbeitsmuster like '%MT%') AND c.Datum = '{Convert.ToDateTime(buttonDatum).ToString("yyyy-MM-dd")}' group by m.Abteilung order by Abteilung");
|
|
else
|
|
MACombo = await SQL.ReadSQL($"SELECT Abteilung, COUNT(*) - IFNULL((SELECT SUM(AnzahlMA) from schaltung `s` where Datum = '{Convert.ToDateTime(buttonDatum).ToString("yyyy-MM-dd")}' AND c.Arbeitsmuster like '%{schicht}%' AND s.Abteilung = m.Abteilung),0),COUNT(*),IFNULL((SELECT SUM(AnzahlMA) from schaltung `s` where Datum = '{Convert.ToDateTime(buttonDatum).ToString("yyyy-MM-dd")}' AND c.Arbeitsmuster like '%{schicht}%' AND s.Abteilung = m.Abteilung),0) From `mitarbeiter_static` `m` left join `mitarbeiter_change` `c` ON m.PersNr = c.mitarbeiter_static_PersNr WHERE c.Arbeitsmuster like '%{schicht}%' AND c.Datum = '{Convert.ToDateTime(buttonDatum).ToString("yyyy-MM-dd")}' group by m.Abteilung order by Abteilung");
|
|
|
|
MAView = Helper.DataTableToGewerk(MACombo);
|
|
|
|
|
|
li.Visibility = Visibility.Collapsed;
|
|
}
|
|
|
|
|
|
|
|
private void DPMAFilter_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
private async void DGSchaltList_PreviewKeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
var dg = sender as DataGrid;
|
|
var row = dg.SelectedItem as DataRowView;
|
|
var arr = row.Row.ItemArray;
|
|
|
|
if (e.Key == Key.Delete)
|
|
{
|
|
li.Visibility = Visibility.Visible;
|
|
|
|
await Task.Delay(50);
|
|
|
|
|
|
//await SQL.WriteSQL($"UPDATE `mitarbeiter_change` `m` left join `schaltung` `s` ON m.mitarbeiter_static_PersNr = s.mitarbeiter_static_PersNr AND s.Datum = m.Datum SET `ZugNameB` = (select s.ZugName WHERE s.mitarbeiter_static_PersNr = '{arr[8]}' AND s.Start > DATE_FORMAT(NOW(), '%d.%m. %H:%i')) WHERE (s.ZugName = '{arr[1]}' AND s.Datum = '{Convert.ToDateTime(arr[3]).ToString("yyyy-MM-dd")}' AND s.Start = '{arr[4]}' AND s.Ende = '{arr[5]}' AND s.Zustand = '{arr[6]}' AND s.Grund = '{arr[7]}')");
|
|
await SQL.WriteSQL($"DELETE FROM `schaltung` WHERE (`Abteilung` = '{arr[0]}' AND `ZugName` = '{arr[2]}' AND `Datum` = '{Convert.ToDateTime(arr[3].ToString().Split(' ')[0] + "." + DateTime.Now.Year).ToString("yyyy-MM-dd")}' AND `Start` = '{arr[3]}' AND `Ende` = '{arr[4]}' AND `Zustand` = '{arr[5]}' AND `Grund` = '{arr[6]}')");
|
|
|
|
//schaltList = await SQL.ReadSQL($"Select Name,ZugName,Start,Ende,Zustand,Grund FROM `mitarbeiter_static` `m` left join `schaltung` `s` ON m.PersNr = s.mitarbeiter_static_PersNr WHERE {pers}", schaltList);
|
|
li.Visibility = Visibility.Collapsed;
|
|
}
|
|
}
|
|
|
|
private async void DGMAView_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
|
{
|
|
if (dGMAView.SelectedIndex != -1)
|
|
{
|
|
var i = Convert.ToInt16((((Gewerk)((ItemCollection)(dGMAView.Items))[dGMAView.SelectedIndex]).MAVerfuegbar));
|
|
var a = new int[i];
|
|
|
|
for (var j = 1; j != i + 1; ++j)
|
|
{
|
|
a[j - 1] = j;
|
|
}
|
|
|
|
cBAnzahlMA.ItemsSource = a;
|
|
|
|
lblPlanungGewerk.Text = $"Planung für Gewerk '{(((Gewerk)((ItemCollection)(dGMAView.Items))[dGMAView.SelectedIndex]).Abteilung)}' am {Convert.ToDateTime(buttonDatum).ToShortDateString()}:";
|
|
schaltListGewerk = await SQL.ReadSQL($"SELECT Abteilung,AnzahlMA,ZugName,Start,Ende,Zustand,Grund FROM `schaltung` `s` WHERE Abteilung = '{(((Gewerk)((ItemCollection)(dGMAView.Items))[dGMAView.SelectedIndex]).Abteilung)}' AND Start like '{Convert.ToDateTime(buttonDatum).ToString("dd.MM.")}%'", schaltListGewerk);
|
|
}
|
|
}
|
|
|
|
|
|
private async void TbName_TextChanged(object sender, TextChangedEventArgs e)
|
|
{
|
|
if (tbName.Text != "" && char.IsDigit(tbName.Text[0]))
|
|
{
|
|
tbName.Text = "Tz " + tbName.Text;
|
|
tbName.CaretIndex = tbName.Text.Length;
|
|
}
|
|
|
|
if (System.Text.RegularExpressions.Regex.IsMatch(tbName.Text, @".{1,3}\d\d\d+"))
|
|
{
|
|
schaltList = await SQL.ReadSQL($"Select Abteilung,AnzahlMA,ZugName,Start,Ende,Zustand,Grund FROM `schaltung` `s` WHERE ZugName = '{tbName.Text}'", schaltList);
|
|
lblPlanungTz.Text = $"Planung für Triebzug '{tbName.Text}':";
|
|
}
|
|
else
|
|
{
|
|
schaltList.Clear();
|
|
lblPlanungTz.Text = $"Planung für Triebzug:";
|
|
}
|
|
}
|
|
|
|
|
|
private void CBAnzahlMA_DropDownOpened(object sender, EventArgs e)
|
|
{
|
|
if (cBAnzahlMA.Items.Count == 0) cBAnzahlMA.ItemsSource = new string[1] { "Bitte zuerst Gewerk wählen" };
|
|
}
|
|
|
|
private async void CBSchicht_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
|
{
|
|
var schicht = "";//((DataRowView)((Button)sending).DataContext).Row.ItemArray[8].ToString().Substring(0, 2);
|
|
|
|
switch (cBSchicht.SelectedIndex)
|
|
{
|
|
case 0:
|
|
schicht = "MF";
|
|
break;
|
|
case 1:
|
|
schicht = "MS";
|
|
break;
|
|
case 2:
|
|
schicht = "MN";
|
|
break;
|
|
default:
|
|
schicht = "MF";
|
|
break;
|
|
}
|
|
|
|
DataTable dt = null;
|
|
if (schicht == "MF" || schicht == "MT")
|
|
dt = await SQL.ReadSQL($"SELECT Min(str_to_date(REPLACE(Beginn, '*', ':'), '%H:%i')), max(str_to_date(REPLACE(Gehen, '*', ':'), '%H:%i')) from mitarbeiter_change where Datum = '{Convert.ToDateTime(buttonDatum).ToString("yyyy-MM-dd")}' AND (Arbeitsmuster like '%{schicht}%' OR Arbeitsmuster like '%MT%')");
|
|
else
|
|
dt = await SQL.ReadSQL($"SELECT Min(str_to_date(REPLACE(Beginn, '*', ':'), '%H:%i')), max(str_to_date(REPLACE(Gehen, '*', ':'), '%H:%i')) from mitarbeiter_change where Datum = '{Convert.ToDateTime(buttonDatum).ToString("yyyy-MM-dd")}' AND Arbeitsmuster like '%{schicht}%'");
|
|
|
|
var from = dt.Rows[0].ItemArray[0].ToString();
|
|
var until = dt.Rows[0].ItemArray[1].ToString();
|
|
|
|
dPSchaltVon.Value = null;
|
|
dPSchaltBis.Value = null;
|
|
dPSchaltVon.Minimum = null;
|
|
dPSchaltBis.Maximum = DateTime.MaxValue;
|
|
|
|
if (!(string.IsNullOrEmpty(from) || string.IsNullOrEmpty(until)))
|
|
{
|
|
if (TimeSpan.Parse(from) > TimeSpan.Parse(until))
|
|
{
|
|
dPSchaltVon.Minimum = Convert.ToDateTime(buttonDatum) + TimeSpan.Parse(from);
|
|
dPSchaltBis.Maximum = Convert.ToDateTime(buttonDatum) + TimeSpan.FromDays(1) + TimeSpan.Parse(until);
|
|
}
|
|
else
|
|
{
|
|
dPSchaltVon.Minimum = Convert.ToDateTime(buttonDatum) + TimeSpan.Parse(from);
|
|
dPSchaltBis.Maximum = Convert.ToDateTime(buttonDatum) + TimeSpan.Parse(until);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
dPSchaltVon.Minimum = Convert.ToDateTime(buttonDatum);
|
|
dPSchaltBis.Maximum = Convert.ToDateTime(buttonDatum) + TimeSpan.FromDays(2);
|
|
}
|
|
|
|
dPSchaltVon.Value = dPSchaltVon.Minimum.Value;
|
|
dPSchaltBis.Value = dPSchaltBis.Maximum.Value;
|
|
|
|
if (schicht == "MF" || schicht == "MT")
|
|
MACombo = await SQL.ReadSQL($"SELECT Abteilung, COUNT(*) - IFNULL((SELECT SUM(AnzahlMA) from schaltung `s` where Datum = '{Convert.ToDateTime(buttonDatum).ToString("yyyy-MM-dd")}' AND (c.Arbeitsmuster like '%MF%' OR c.Arbeitsmuster like '%MT%') AND s.Abteilung = m.Abteilung),0),COUNT(*),IFNULL((SELECT SUM(AnzahlMA) from schaltung `s` where Datum = '{Convert.ToDateTime(buttonDatum).ToString("yyyy-MM-dd")}' AND (c.Arbeitsmuster like '%MF%' OR c.Arbeitsmuster like '%MT%') AND s.Abteilung = m.Abteilung),0) From `mitarbeiter_static` `m` left join `mitarbeiter_change` `c` ON m.PersNr = c.mitarbeiter_static_PersNr WHERE (c.Arbeitsmuster like '%MF%' OR c.Arbeitsmuster like '%MT%') AND c.Datum = '{Convert.ToDateTime(buttonDatum).ToString("yyyy-MM-dd")}' group by m.Abteilung order by Abteilung");
|
|
else
|
|
MACombo = await SQL.ReadSQL($"SELECT Abteilung, COUNT(*) - IFNULL((SELECT SUM(AnzahlMA) from schaltung `s` where Datum = '{Convert.ToDateTime(buttonDatum).ToString("yyyy-MM-dd")}' AND c.Arbeitsmuster like '%{schicht}%' AND s.Abteilung = m.Abteilung),0),COUNT(*),IFNULL((SELECT SUM(AnzahlMA) from schaltung `s` where Datum = '{Convert.ToDateTime(buttonDatum).ToString("yyyy-MM-dd")}' AND c.Arbeitsmuster like '%{schicht}%' AND s.Abteilung = m.Abteilung),0) From `mitarbeiter_static` `m` left join `mitarbeiter_change` `c` ON m.PersNr = c.mitarbeiter_static_PersNr WHERE c.Arbeitsmuster like '%{schicht}%' AND c.Datum = '{Convert.ToDateTime(buttonDatum).ToString("yyyy-MM-dd")}' group by m.Abteilung order by Abteilung");
|
|
|
|
MAView = Helper.DataTableToGewerk(MACombo);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void OnPropertyChanged([CallerMemberName] string propertyName = null)
|
|
{
|
|
System.Diagnostics.Debug.WriteLine("PropertyChanged " + propertyName);
|
|
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public class SearchFilterConverter : IMultiValueConverter
|
|
{
|
|
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
|
|
{
|
|
return $"{values[0].ToString()} {values[1].ToString()}";
|
|
}
|
|
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
}
|
|
|
|
public class Gewerk
|
|
{
|
|
public string Abteilung { get; set; }
|
|
public string MAAnwesend { get; set; }
|
|
public string MAVerplant { get; set; }
|
|
public string MAVerfuegbar { get; set; }
|
|
}
|
|
}
|