Merge branch 'master' of ssh://float.beyondsoft.de/git/beyondSoft/BeWo

This commit is contained in:
Lyndon Jetten
2021-06-18 14:18:43 +02:00
21 changed files with 419 additions and 94 deletions

View File

@@ -4629,6 +4629,11 @@ namespace BeWo.ServiceProxy
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IResourceService/DeleteMobileTestAppointments", ReplyAction="http://tempuri.org/IResourceService/DeleteMobileTestAppointmentsResponse")]
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IResourceService/DeleteMobileTestAppointmentsBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
void DeleteMobileTestAppointments();
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IResourceService/LoadFilteredAllActiveAppointments", ReplyAction="http://tempuri.org/IResourceService/LoadFilteredAllActiveAppointmentsResponse")]
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IResourceService/LoadFilteredAllActiveAppointmentsBeWoFaultFau" +
"lt", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
System.Collections.Generic.List<BS.Shared.DataContracts.SchedulerAppointmentDC> LoadFilteredAllActiveAppointments(long employeeOid, System.DateTime start, System.DateTime end, System.Collections.Generic.List<long> customerOids);
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
@@ -4924,6 +4929,11 @@ namespace BeWo.ServiceProxy
{
base.Channel.DeleteMobileTestAppointments();
}
public System.Collections.Generic.List<BS.Shared.DataContracts.SchedulerAppointmentDC> LoadFilteredAllActiveAppointments(long employeeOid, System.DateTime start, System.DateTime end, System.Collections.Generic.List<long> customerOids)
{
return base.Channel.LoadFilteredAllActiveAppointments(employeeOid, start, end, customerOids);
}
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
@@ -5067,6 +5077,12 @@ namespace BeWo.ServiceProxy
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/BuildUrlaubsplanerRootObjectBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
BS.Shared.DataContracts.UrlaubsplanerRootDC BuildUrlaubsplanerRootObject(int year, int month);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/GetInformationStringForUrlaubsplaner", ReplyAction="http://tempuri.org/IOperationsService/GetInformationStringForUrlaubsplanerRespons" +
"e")]
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/GetInformationStringForUrlaubsplanerBeWoFau" +
"ltFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
string GetInformationStringForUrlaubsplaner(BS.Shared.DataContracts.UrlaubskontoDC dc, decimal tageUrlaub, decimal tageKrank, bool urlaubVerfallen);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/GetFlexibleReportResult", ReplyAction="http://tempuri.org/IOperationsService/GetFlexibleReportResultResponse")]
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/GetFlexibleReportResultBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
BS.Shared.DataContracts.FlexibleReportResultDC GetFlexibleReportResult(BS.Shared.DataContracts.FlexibleReportFilterDC filter);
@@ -6381,6 +6397,11 @@ namespace BeWo.ServiceProxy
return base.Channel.BuildUrlaubsplanerRootObject(year, month);
}
public string GetInformationStringForUrlaubsplaner(BS.Shared.DataContracts.UrlaubskontoDC dc, decimal tageUrlaub, decimal tageKrank, bool urlaubVerfallen)
{
return base.Channel.GetInformationStringForUrlaubsplaner(dc, tageUrlaub, tageKrank, urlaubVerfallen);
}
public BS.Shared.DataContracts.FlexibleReportResultDC GetFlexibleReportResult(BS.Shared.DataContracts.FlexibleReportFilterDC filter)
{
return base.Channel.GetFlexibleReportResult(filter);

View File

@@ -48,7 +48,7 @@ namespace BeWo.View.Controls
c.Text = string.Empty;
c.ToolTip = "Kein gültiger Arbeitsvertrag";
}
else if (info.Reason != null && !info.IsFeiertag && info.DayOfWeek != DayOfWeek.Saturday && info.DayOfWeek != DayOfWeek.Sunday)
else if (info.Reason != null && !info.IsFeiertag /*&& info.DayOfWeek != DayOfWeek.Saturday && info.DayOfWeek != DayOfWeek.Sunday*/)
{
c.Foreground = Brushes.Red;
c.Text = $"{info.Reason.Description[0]}";

View File

@@ -50,7 +50,9 @@ namespace BeWo.View.Controls
ctrl.Text = ctrl.DisplayMember;
ctrl.ToolTip = new DPCtrlEmployeeTooltip(information.Employee, information.Contracts);
ctrl.ToolTip = new DPCtrlEmployeeTooltip(information.Employee, information.Contracts, information.IsVertretung);
//if (information.IsVertretung)
// ctrl.Path_Notice.Visibility = Visibility.Visible;
}
else
{
@@ -107,51 +109,51 @@ namespace BeWo.View.Controls
{
case 0: return EmployeeInformation.Employee.LastNameFirstName;
//Auskommentieren für nur eine Zeile
case 1:
//case 1:
foreach (var contract in EmployeeInformation.Contracts)
{
sb.Append(contract.EmploymentType?.Name);
sb.Append('/');
}
// foreach (var contract in EmployeeInformation.Contracts)
// {
// sb.Append(contract.EmploymentType?.Name);
// sb.Append('/');
// }
sb.Remove(sb.Length - 1, 1);
// sb.Remove(sb.Length - 1, 1);
return sb.ToString();
// return sb.ToString();
case 2:
//case 2:
foreach (var contract in EmployeeInformation.Contracts)
{
sb.Append('(');
// foreach (var contract in EmployeeInformation.Contracts)
// {
// sb.Append('(');
if (contract.EntryDate.HasValue)
sb.Append(contract.EntryDate.Value.ToString("dd.MM.yy"));
else
sb.Append("k.A.");
// if (contract.EntryDate.HasValue)
// sb.Append(contract.EntryDate.Value.ToString("dd.MM.yy"));
// else
// sb.Append("k.A.");
sb.Append(" - ");
// sb.Append(" - ");
if (contract.ContractEndDate.HasValue)
sb.Append(contract.ContractEndDate.Value.ToString("dd.MM.yy"));
else
sb.Append("unbefr.");
// if (contract.ContractEndDate.HasValue)
// sb.Append(contract.ContractEndDate.Value.ToString("dd.MM.yy"));
// else
// sb.Append("unbefr.");
sb.Append(')');
// sb.Append(')');
sb.Append('/');
}
// sb.Append('/');
// }
sb.Remove(sb.Length - 1, 1);
// sb.Remove(sb.Length - 1, 1);
// return sb.ToString();
return sb.ToString();
}
}
else
{
return Translator.Translate("Besetzungsstatus");
return Translator.Translate("Status");
}
return null;
@@ -165,5 +167,6 @@ namespace BeWo.View.Controls
public List<ContractDC> Contracts { get; set; }
public int Row { get; set; }
public bool IsLastRow { get; set; }
public bool IsVertretung { get; set; }
}
}

View File

@@ -16,7 +16,7 @@ namespace BeWo.View.Controls
/// </summary>
public partial class DPCtrlEmployeeTooltip : UserControl
{
public DPCtrlEmployeeTooltip(EmployeeDC employeeDC, List<ContractDC> contractDCs)
public DPCtrlEmployeeTooltip(EmployeeDC employeeDC, List<ContractDC> contractDCs, bool isVertretung)
{
InitializeComponent();
@@ -28,12 +28,15 @@ namespace BeWo.View.Controls
foreach (var contract in contractDCs)
{
var sep = new Separator();
var sep1 = new Separator();
var sep2 = new Separator();
var txtType1 = new TextBlock();
var txtType2 = new TextBlock();
var txtArbeit1 = new TextBlock();
var txtArbeit2 = new TextBlock();
var txtVertretung1 = new TextBlock();
var txtVertretung2 = new TextBlock();
txtType1.Text = "Beschäftigungsart:";
txtType2.Text = $"{contract.EmploymentType?.Name}";
@@ -51,12 +54,14 @@ namespace BeWo.View.Controls
{
txtArbeit2.Text = $"k.A.";
}
txtVertretung1.Text = "Vertretung:";
txtVertretung2.Text = isVertretung ? "Ja" : "Nein";
RootGrid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto });
RootGrid.Children.Add(sep);
RootGrid.Children.Add(sep1);
Grid.SetRow(sep, RootGrid.RowDefinitions.Count - 1);
Grid.SetColumnSpan(sep, 3);
Grid.SetRow(sep1, RootGrid.RowDefinitions.Count - 1);
Grid.SetColumnSpan(sep1, 3);
RootGrid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto });
RootGrid.Children.Add(txtType1);
@@ -73,6 +78,22 @@ namespace BeWo.View.Controls
Grid.SetRow(txtArbeit1, RootGrid.RowDefinitions.Count - 1);
Grid.SetRow(txtArbeit2, RootGrid.RowDefinitions.Count - 1);
Grid.SetColumn(txtArbeit2, 2);
RootGrid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto });
RootGrid.Children.Add(sep2);
Grid.SetRow(sep2, RootGrid.RowDefinitions.Count - 1);
Grid.SetColumnSpan(sep2, 3);
RootGrid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto });
RootGrid.Children.Add(txtVertretung1);
RootGrid.Children.Add(txtVertretung2);
Grid.SetRow(txtVertretung1, RootGrid.RowDefinitions.Count - 1);
Grid.SetRow(txtVertretung2, RootGrid.RowDefinitions.Count - 1);
Grid.SetColumn(txtVertretung2, 2);
}
}

View File

@@ -30,13 +30,13 @@ namespace BeWo.View.Controls
}
if (information.Statuszeile)
ctrl.BorderBlack.BorderThickness = new Thickness(0, 0, 0, 2);
ctrl.BorderBlack.BorderThickness = new Thickness(0, 0, 1, 2);
else
{
if (information.IsLastRow)
ctrl.BorderBlack.BorderThickness = new Thickness(0, 0, 0, 1);
ctrl.BorderBlack.BorderThickness = new Thickness(0, 0, 1, 1);
else
ctrl.BorderBlack.BorderThickness = new Thickness(0, 0, 0, 0);
ctrl.BorderBlack.BorderThickness = new Thickness(0, 0, 1, 0);
}
}
}

View File

@@ -1,5 +1,7 @@
using System;
using BS.Shared.DataContracts;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -24,10 +26,12 @@ namespace BeWo.View.Controls
{
if(information != null)
{
Debug.WriteLine("Status: " + information.Statuszeile + " | MA: " + information.EmployeeDC + " | Soll: " + information.SollWert);
if (information.Row == 0 && !information.Statuszeile)
{
ctrl.Text = string.Format("{0:0.00}", information.SollWert);
ctrl.ToolTip = "Soll-Wert";
}
if (information.Statuszeile)
@@ -62,6 +66,7 @@ namespace BeWo.View.Controls
public bool Statuszeile { get; set; }
public decimal SollWert { get; set; }
public bool IsLastRow { get; set; }
public EmployeeDC EmployeeDC { get; set; }
}
}

View File

@@ -464,8 +464,8 @@
<dxe:TextEdit MaskType="Numeric" Mask="########0.00" MaskUseAsDisplayFormat="True" Grid.Column="1" Grid.Row="7" Margin="3" Height="23" EditValue="{Binding Path=WeeklyTotalHours, UpdateSourceTrigger=PropertyChanged}" />
<dxe:TextEdit MaskType="Numeric" Mask="########0.00" MaskUseAsDisplayFormat="True" Grid.Column="1" Grid.Row="8" Margin="3" Height="23" EditValue="{Binding Path=MonthlyTotalHours, UpdateSourceTrigger=PropertyChanged}" />
<dxe:SpinEdit MinValue="0" MaxValue="7" IsFloatValue="False" Grid.Column="1" Grid.Row="9" Margin="3" Height="23" EditValue="{Binding Path=WeeklyDays, Converter={StaticResource Int2DecimalConverter}, UpdateSourceTrigger=PropertyChanged}"/>
<dxe:TextEdit MaskType="Numeric" Mask="########0.00" MaskUseAsDisplayFormat="True" Grid.Column="1" Grid.Row="10" Margin="3" Height="23" EditValue="{Binding Path=EmploymentType.LeaveDays, UpdateSourceTrigger=PropertyChanged}" Visibility="{Binding EmploymentTypeLeaveDaysVisibility}" IsEnabled="False" />
<dxe:TextEdit MaskType="Numeric" Mask="########0.00" MaskUseAsDisplayFormat="True" Grid.Column="1" Grid.Row="10" Margin="3" Height="23" EditValue="{Binding Path=LeaveDays, UpdateSourceTrigger=PropertyChanged}" Visibility="{Binding LeaveDaysVisibility}" />
<dxe:TextEdit MaskType="Numeric" Mask="########0.00" MaskUseAsDisplayFormat="True" Grid.Column="1" Grid.Row="10" Margin="3" Height="23" EditValue="{Binding Path=EmploymentType.LeaveDays, UpdateSourceTrigger=PropertyChanged}" Visibility="{Binding EmploymentTypeLeaveDaysVisibility, UpdateSourceTrigger=PropertyChanged}" IsEnabled="False" />
<dxe:TextEdit MaskType="Numeric" Mask="########0.00" MaskUseAsDisplayFormat="True" Grid.Column="1" Grid.Row="10" Margin="3" Height="23" EditValue="{Binding Path=LeaveDays, UpdateSourceTrigger=PropertyChanged}" Visibility="{Binding LeaveDaysVisibility, UpdateSourceTrigger=PropertyChanged}" IsEnabled="True" />
<dxe:SpinEdit MinValue="0" IsFloatValue="False" Grid.Column="1" Grid.Row="11" Margin="3" Height="23" EditValue="{Binding Path=ProbationPeriod, Converter={StaticResource Int2DecimalConverter}, UpdateSourceTrigger=PropertyChanged}" />
<dxe:SpinEdit MinValue="0" IsFloatValue="True" Mask="########0.00" MaskUseAsDisplayFormat="True" Grid.Column="1" Grid.Row="12" Margin="3" Height="23" EditValue="{Binding Path=ProbationPeriod2, UpdateSourceTrigger=PropertyChanged}" />
<dxe:SpinEdit MinValue="0" IsFloatValue="False" Grid.Column="1" Grid.Row="13" Margin="3" Height="23" EditValue="{Binding Path=CancellationPeriod, Converter={StaticResource Int2DecimalConverter}, UpdateSourceTrigger=PropertyChanged}" />

View File

@@ -259,7 +259,8 @@ namespace BeWo.View.Detail
int restlicheTageImJahr = Convert.ToInt32((new DateTime(ViewModel.LastContract.EntryDate.Value.Year, 12, 31) - ViewModel.LastContract.EntryDate.Value.Date).TotalDays);
urlaubstage = CalculateUrlaubstage((DateTime)ViewModel.LastContract.EntryDate, arbeitstage, restlicheTageImJahr, urlaubstage);
//Urlaubskonto: Verbleibende Tage hier auf urlaubstage setzen..
// Urlaubskonto: Verbleibende Tage hier auf Urlaubstage setzen..
}
}
else // Beschäftigungsart sind keine festen Urlaubstage zugeordnet
@@ -700,6 +701,18 @@ namespace BeWo.View.Detail
contract.EmploymentTypeLeaveDaysVisibility = Visibility.Collapsed;
contract.LeaveDaysVisibility = Visibility.Visible;
}
//var index = tabcontrol_contracts.SelectedIndex;
//if(index == tabcontrol_contracts.Items.Count - 1)
// {
// Cache.GetInstance().ClearEmployees();
// BeWoApp.MainControl.ResetView(UIContext.Employee);
//}
//else
// {
// tabcontrol_contracts.SelectedIndex = tabcontrol_contracts.Items.Count - 1;
// tabcontrol_contracts.SelectedIndex = index;
//}
}
}
}

View File

@@ -118,7 +118,7 @@ namespace BeWo.View.Detail.Report
{
// Alle Tage in einem Monat
if (spanne.Start.Value.Month == spanne.End.Value.Month)
tageUrlaub += Convert.ToInt32((spanne.End.Value.Date - spanne.Start.Value.Date).TotalDays + 1);
tageKrankheit += Convert.ToInt32((spanne.End.Value.Date - spanne.Start.Value.Date).TotalDays + 1);
// Tage über mehrere Monate verteilt
else
{
@@ -163,7 +163,7 @@ namespace BeWo.View.Detail.Report
}
c._EmployeeUrlaubDieserMonat.Text = "Urlaub diesen Monat: " + tageUrlaub + " Tage";
c._EmployeeKrankheitDieserMonat.Text = "Krankheit diesen Monat: " + tageKrankheit + " Tage";
((AbwesenheitsEmployeeHeaderTooltip)c.ToolTip).Set(dc.Employee, tageUrlaub, tageKrankheit);
((AbwesenheitsEmployeeHeaderTooltip)c.ToolTip).Set(dc.Employee, tageUrlaub, tageKrankheit, dc.Month);
}
}

View File

@@ -18,6 +18,7 @@
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Text="Resturlaub Vorjahr" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Left" Foreground="Black" Margin="3"/>
<TextBlock x:Name="_TxtResturlaubVorjahr" Text="35,00 Tage" Grid.Column="1" Grid.Row="0" HorizontalAlignment="Left" Foreground="Black" Margin="3"/>
@@ -33,5 +34,8 @@
<TextBlock x:Name="_TxtTageUrlaub" Text="00,00 Tage" Grid.Column="1" Grid.Row="4" HorizontalAlignment="Left" Foreground="Black" Margin="3" />
<TextBlock Text="Tage Krank" Grid.Column="0" Grid.Row="5" HorizontalAlignment="Left" Foreground="Black" Margin="3" />
<TextBlock x:Name="_TxtTageKrank" Text="00,00 Tage" Grid.Column="1" Grid.Row="5" HorizontalAlignment="Left" Foreground="Black" Margin="3" />
<TextBlock Text="Verfallene Urlaubstage" Grid.Column="0" Grid.Row="6" HorizontalAlignment="Left" Foreground="Black" Margin="3" />
<TextBlock x:Name="_TxtVerfallenerUrlaub" Text="00,00 Tage" Grid.Column="1" Grid.Row="6" HorizontalAlignment="Left" Foreground="Black" Margin="3" />
</Grid>
</UserControl>

View File

@@ -24,7 +24,7 @@ namespace BeWo.View.Detail.Report
InitializeComponent();
}
public void Set(EmployeeDC emp, int tageUrlaub, int tageKrankheit)
public void Set(EmployeeDC emp, int tageUrlaub, int tageKrankheit, int month)
{
var konto = emp.Urlaubskonto;
@@ -36,6 +36,11 @@ namespace BeWo.View.Detail.Report
_TxtUrlaubsanspruchVorjahr.Text = konto.ResturlaubVorjahrTotal.ToString("0.00") + " Tage";
_TxtTageUrlaub.Text = tageUrlaub.ToString("0.00") + " Tage";
_TxtTageKrank.Text = tageKrankheit.ToString("0.00") + " Tage";
if (emp.Urlaubskonto.UrlaubsVerfallsdatum.Month >= month)
_TxtVerfallenerUrlaub.Text = "0.00 Tage";
else
_TxtVerfallenerUrlaub.Text = konto.VerfallenerUrlaub.ToString("0.00") + " Tage";
}
}
}

View File

@@ -61,11 +61,6 @@ namespace BeWo.View.Detail.Report
public int SelectedMonth { get; set; }
public int SelectedYear { get; set; }
//public List<AbsenceTimeDC> Abwesenheiten { get; set; }
//public List<FeiertagDC> Feiertage { get; set; }
//public List<GeschenkterUrlaubstagDC> GeschenkteUrlaubstage { get; set; }
public AbwesenheitstabelleView()
{
InitializeComponent();
@@ -96,11 +91,6 @@ namespace BeWo.View.Detail.Report
UrlaubsplanerRootObj = ServiceFacade.DoOperationsServiceSync(s => s.BuildUrlaubsplanerRootObject(SelectedYear, SelectedMonth));
//Feiertage = ServiceFacade.DoOperationsServiceSync(s => s.GetDefaultFeiertageForYear(SelectedYear)).Where(f => f.Datum.Month == SelectedMonth).ToList();
//Abwesenheiten = ServiceFacade.DoEmployeeServiceSync(s => s.GetAllEmployeeAbsenceTimesForMonth(SelectedYear, SelectedMonth));
//GeschenkteUrlaubstage = ServiceFacade.DoEmployeeServiceSync(s => s.GetGeschenkteUrlaubstageForYear(SelectedYear));
UpdateScheduler();
ColorizeFeiertage();
}
@@ -339,6 +329,8 @@ namespace BeWo.View.Detail.Report
AbsenceTimes = UrlaubsplanerRootObj.Abwesenheiten.Where(a => a.EmployeeOid == employee.EmployeeOid).ToList(),
GeschenkteUrlaubstage = UrlaubsplanerRootObj.GeschenkteUrlaubstage.Where(u => u.Employee == employee.EmployeeOid).ToList()
};
infoDC.TageUrlaub = CountUrlaubstage(infoDC);
infoDC.TageKrankheit = CountKrankheitstage(infoDC);
var resource = _SchedulerStorage.CreateResource(employee.EmployeeOid.Value.ToString());
@@ -417,11 +409,154 @@ namespace BeWo.View.Detail.Report
{
var temp = (VerticalHeaderControl)sender;
var c = (VisualResourceHeaderContent)temp.Content;
var info = c.CustomFields["AbwesenheitsInformationDC"]; //Hierin steht das AbwesenheitsInformationDC, aber man kommt nicht dran
var info = c.CustomFields["AbwesenheitsInformationDC"] as AbwesenheitsInformationDC; //Hierin steht das AbwesenheitsInformationDC, aber man kommt nicht dran
var urlaubskonto = info.Employee.Urlaubskonto;
bool urlaubVerfallen = info.Month >= urlaubskonto.UrlaubsVerfallsdatum.Month ? true : false;
string xamlstring = ServiceFacade.DoOperationsServiceSync(s => s.GetInformationStringForUrlaubsplaner(urlaubskonto, info.TageUrlaub, info.TageKrankheit, urlaubVerfallen));
var control = new InformationView();
control.SetXaml(xamlstring);
var beWoWindow = new BeWoWindow();
control.ButtonCloseClicked += () => beWoWindow.Close();
beWoWindow.Height = 100;
beWoWindow.Width = 400;
beWoWindow.WindowStartupLocation = WindowStartupLocation.CenterOwner;
beWoWindow.GroupBoxContent = control;
beWoWindow.Owner = BeWoApp.CurrentBeWo.MainWindow;
beWoWindow.rootGroupBox.Header = "Infos zu " + info.Employee.LastNameFirstName;
beWoWindow.ShowDialog();
}
private decimal CountUrlaubstage(AbwesenheitsInformationDC info)
{
decimal tageUrlaub = 0;
List<AbsenceTimeDC> urlaubstage = new List<AbsenceTimeDC>();
foreach (var tag in info.AbsenceTimes)
{
if (tag.Reason.Description.Equals("Urlaub"))
urlaubstage.Add(tag);
}
if (urlaubstage.Count > 0)
{
foreach (var spanne in urlaubstage)
{
if (spanne.End == null)
spanne.End = new DateTime(info.Year, info.Month, DateTime.DaysInMonth(info.Year, info.Month));
// Nur ein Tag
if (spanne.Start == spanne.End)
tageUrlaub++;
// Mehrere Tage
else
{
// Alle Tage in einem Monat
if (spanne.Start.Value.Month == spanne.End.Value.Month)
tageUrlaub += Convert.ToInt32((spanne.End.Value.Date - spanne.Start.Value.Date).TotalDays + 1);
// Tage über Monate verteilt
else
{
DateTime? tempStart = null;
DateTime? tempEnd = null;
// Prüfen, ob Start und/oder Ende nicht dem ausgewählten Monat entspricht
if (spanne.Start.Value.Month != info.Month)
{
tempStart = new DateTime(info.Year, info.Month, 1);
}
if (spanne.End.Value.Month != info.Month)
{
tempEnd = new DateTime(info.Year, info.Month, 1).AddMonths(1).AddTicks(-1);
}
if (tempStart != null && tempEnd != null)
tageUrlaub += Convert.ToInt32((tempEnd.Value.Date - tempStart.Value.Date).TotalDays + 1);
else if (tempStart != null && tempEnd == null)
tageUrlaub += Convert.ToInt32((spanne.End.Value.Date - tempStart.Value.Date).TotalDays + 1);
else if (tempStart == null && tempEnd != null)
tageUrlaub += Convert.ToInt32((tempEnd.Value.Date - spanne.Start.Value.Date).TotalDays + 1);
}
}
}
}
return tageUrlaub;
}
private decimal CountKrankheitstage(AbwesenheitsInformationDC info)
{
int tageKrankheit = 0;
List<AbsenceTimeDC> krankheitstage = new List<AbsenceTimeDC>();
foreach (var tag in info.AbsenceTimes)
{
if (tag.Reason.Description.Equals("Krankheit"))
krankheitstage.Add(tag);
}
if (krankheitstage.Count > 0)
{
foreach (var spanne in krankheitstage)
{
// Nur ein Tag
if (spanne.Start == spanne.End)
tageKrankheit++;
// Mehrere Tage
else
{
// Wenn Krankheit ein Enddatum hat
if (spanne.End != null)
{
// Alle Tage in einem Monat
if (spanne.Start.Value.Month == spanne.End.Value.Month)
tageKrankheit += Convert.ToInt32((spanne.End.Value.Date - spanne.Start.Value.Date).TotalDays + 1);
// Tage über mehrere Monate verteilt
else
{
// Prüfen, ob Start und/oder Ende nicht dem ausgewählten Monat entspricht
DateTime? tempStart = null;
DateTime? tempEnd = null;
if (spanne.Start.Value.Month != info.Month)
{
tempStart = new DateTime(info.Year, info.Month, 1);
}
if (spanne.End.Value.Month != info.Month)
{
tempEnd = new DateTime(info.Year, info.Month, 1).AddMonths(1).AddTicks(-1);
}
if (tempStart != null && tempEnd != null)
tageKrankheit += Convert.ToInt32((tempEnd.Value.Date - tempStart.Value.Date).TotalDays + 1);
else if (tempStart != null && tempEnd == null)
tageKrankheit += Convert.ToInt32((spanne.End.Value.Date - tempStart.Value.Date).TotalDays + 1);
else if (tempStart == null && tempEnd != null)
tageKrankheit += Convert.ToInt32((tempEnd.Value.Date - spanne.Start.Value.Date).TotalDays + 1);
}
}
// Wenn Krankheit kein Enddatum gesetzt wurde
else
{
if (spanne.Start.Value.Month != info.Month)
{
DateTime tempEnd = new DateTime(info.Year, info.Month, DateTime.DaysInMonth(info.Year, info.Month));
DateTime tempStart = new DateTime(info.Year, info.Month, 1); ;
tageKrankheit += Convert.ToInt32((tempEnd.Date - tempStart.Date).TotalDays + 1);
}
else
{
DateTime tempEnd = new DateTime(spanne.Start.Value.Year, spanne.Start.Value.Month, DateTime.DaysInMonth(spanne.Start.Value.Year, spanne.Start.Value.Month));
tageKrankheit += Convert.ToInt32((tempEnd.Date - spanne.Start.Value.Date).TotalDays + 1);
}
}
}
}
}
return tageKrankheit;
}
}
public class MouseHandlerService : MouseHandlerServiceWrapper

View File

@@ -238,7 +238,7 @@
</ListBox>
<Button x:Name="Btn_RegelSchichtHinzufuegen" Grid.Column="3" Grid.Row="2" Margin="5 5 0 0" Content="Hinzufügen" Click="Btn_RegelSchichtHinzufuegen_Click"/>
<Button x:Name="Btn_RegelSchichtEntfernen" Grid.Column="2" Grid.Row="2" Margin="0 5 0 0" Content="Löschen" Click="Btn_RegelSchichtEntfernen_Click"/>
<Button x:Name="Btn_ZeileHinzufuegen" Grid.Column="0" Grid.Row="2" Margin="0 5 0 0" HorizontalAlignment="Left" Content="Zeile hinzufügen" Click="Btn_ZeileHinzufuegen_Click"/>
<!--<Button x:Name="Btn_ZeileHinzufuegen" Grid.Column="0" Grid.Row="2" Margin="0 5 0 0" HorizontalAlignment="Left" Content="Zeile hinzufügen" Click="Btn_ZeileHinzufuegen_Click"/>-->
</Grid>
</GroupBox>
</Border>

View File

@@ -145,7 +145,6 @@ namespace BeWo.View.Detail.Report
{
RefreshStatusForDay(i);
}
_GridControl.ItemsSource = null;
_GridControl.ItemsSource = _DienstplanerRootObj.DienstZeilenListe;
}
@@ -598,19 +597,6 @@ namespace BeWo.View.Detail.Report
textblock_link_pdfexport.Visibility = Visibility.Visible;
}
private void FillDienstLists()
{
//_AlleDienstEintraege = ServiceFacade.DoOperationsServiceSync(s => s.GetAllDienstEintraegeAsList(AuswahlWohnheim.WohnheimOid,
// _AuswahlMonat.Year, _AuswahlMonat.Month));
//_AlleDienstvertretungen = ServiceFacade.DoOperationsServiceSync(s => s.GetAllDienstvertretungenAsList(AuswahlWohnheim.WohnheimOid,
// _AuswahlMonat.Year, _AuswahlMonat.Month));
//_DienstplanerRootObj.AlleDienstEintraege = ServiceFacade.DoOperationsServiceSync(s => s.GetAllDienstEintraegeAsList(AuswahlWohnheim.WohnheimOid,
// _AuswahlMonat.Year, _AuswahlMonat.Month)); //Root
//_DienstplanerRootObj.AlleDienstvertretungen = ServiceFacade.DoOperationsServiceSync(s => s.GetAllDienstvertretungenAsList(AuswahlWohnheim.WohnheimOid,
// _AuswahlMonat.Year, _AuswahlMonat.Month)); //Root
}
private void button_neuerMitarbeiter_Click(object sender, RoutedEventArgs e)
{
popUp_neuerMitarbeiterFuerWohnheim.IsOpen = true;
@@ -676,7 +662,7 @@ namespace BeWo.View.Detail.Report
DienstBlockDC newDC = new DienstBlockDC()
{
Contracts = emp.Contracts,
DienstDictArray = new Dictionary<int, long>[3],
DienstDictArray = new Dictionary<int, long>[3] { new Dictionary<int, long>(), new Dictionary<int, long>(), new Dictionary<int, long>() },
Employee = emp,
Wohnheim = _AuswahlWohnheim
};
@@ -709,6 +695,9 @@ namespace BeWo.View.Detail.Report
return;
if (_AuswahlWohnheim.EmployeeOids.Contains((long)_AuswahlDienstZeileDC.Employee.EmployeeOid))
{
Btn_RegelSchichtHinzufuegen.Visibility = Visibility.Visible;
Btn_RegelSchichtEntfernen.Visibility = Visibility.Visible;
popUp_RightClickEmployee.IsOpen = true;
groupbox_popUp_RightClickEmployee.Header = dpCtrlEmp.EmployeeInformation.Employee.LastNameFirstName;
@@ -717,7 +706,16 @@ namespace BeWo.View.Detail.Report
return;
}
else
{
Btn_RegelSchichtHinzufuegen.Visibility = Visibility.Collapsed;
Btn_RegelSchichtEntfernen.Visibility = Visibility.Collapsed;
popUp_RightClickEmployee.IsOpen = true;
groupbox_popUp_RightClickEmployee.Header = dpCtrlEmp.EmployeeInformation.Employee.LastNameFirstName;
return;
}
return;
}
@@ -728,14 +726,21 @@ namespace BeWo.View.Detail.Report
var fieldname = _GridControl.View.GetColumnByMouseEventArgs(e).FieldName.Split('_');
_AuswahlTag = int.Parse(fieldname[1]);
/* Dienste an Feiertagen setzen können deaktivieren
////Dienste an Feiertagen setzen können deaktivieren
//var date = new DateTime(_AuswahlMonat.Year, _AuswahlMonat.Month, _AuswahlTag);
//foreach (var tag in _DienstplanerRootObj.Feiertage)
//{
// if (tag.Datum.Date == date)
// return;
//}
//Dienste an Abwesenheitstagen setzen können deaktivieren
var date = new DateTime(_AuswahlMonat.Year, _AuswahlMonat.Month, _AuswahlTag);
foreach (var tag in _DienstplanerRootObj.Feiertage)
foreach (var at in _DienstplanerRootObj.AbsenceTimes)
{
if (tag.Datum.Date == date)
if (at.EmployeeOid == _AuswahlDienstZeileDC.Employee.EmployeeOid && at.AbsenceSpan.ContainsDate(date))
return;
}
*/
popUp_RightClick.IsOpen = true;
combobox_dienste.ItemsSource = _DienstplanerRootObj.AlleDienste;
@@ -920,13 +925,15 @@ namespace BeWo.View.Detail.Report
}
else
{
//var vertretung = ServiceFacade.DoOperationsServiceSync(s => s.GetDienstvertretung(_AuswahlDienstZeileDC.Employee.EmployeeOid.Value,
// _AuswahlWohnheim.WohnheimOid, _AuswahlDienstZeileDC.Zeile, Pointer)); //Zeit sparen durch Root-Objekt
var vertretung = GetDienstvertretung(_AuswahlDienstZeileDC.Employee.EmployeeOid.Value,
_AuswahlWohnheim.WohnheimOid, _AuswahlDienstZeileDC.Zeile, Pointer);
decimal stundenFuerSaldo = 0.0m;
if (vertretung != null)
{
stundenFuerSaldo += Convert.ToDecimal(vertretung.DauerInStunden);
var oldDienst = TryGetDienst(_AuswahlDienstZeileDC, _AuswahlTag); //abc
ServiceFacade.DoOperationsServiceSync(x => x.DeleteDienstvertretung(_AuswahlDienstZeileDC.Employee.EmployeeOid.Value, AuswahlWohnheim.WohnheimOid, _AuswahlDienstZeileDC.Zeile, Pointer));
_AuswahlDienstZeileDC.RemoveDienst(_AuswahlTag);
@@ -959,7 +966,7 @@ namespace BeWo.View.Detail.Report
if (item.Employee.EmployeeOid == _AuswahlDienstZeileDC.Employee.EmployeeOid)
{
item.Ist += Convert.ToDecimal(newVertretung.DauerInStunden);
item.Saldo += Convert.ToDecimal(newVertretung.DauerInStunden);
item.Saldo += (stundenFuerSaldo == 0.0m) ? Convert.ToDecimal(newVertretung.DauerInStunden) : Convert.ToDecimal(newVertretung.DauerInStunden) - stundenFuerSaldo;
}
}
}
@@ -967,6 +974,7 @@ namespace BeWo.View.Detail.Report
_AuswahlDienstZeileDC.AddDienst(_AuswahlTag, combobox_dienste.SelectedItem as DienstInfoDC);
//FillDienstLists();
RefreshStatusForDay(Pointer.Day);
RefreshGrid();
textbox_bemerkung.Text = "";
popUp_RightClick.IsOpen = false;
}
@@ -1179,7 +1187,8 @@ namespace BeWo.View.Detail.Report
Employee = selZeile.Employee,
Contracts = selZeile.Contracts,
Row = selZeile.Zeile,
IsLastRow = isLastRow
IsLastRow = isLastRow,
IsVertretung = (selZeile.Employee != null) ? !_AuswahlWohnheim.EmployeeOids.Contains((long)selZeile.Employee.EmployeeOid) : false
};
return;
@@ -1212,13 +1221,14 @@ namespace BeWo.View.Detail.Report
case "SO":
if(selZeile.StatusListe == null)
{
{
e.Value = new DPCtrlSollInformation
{
Row = selZeile.Zeile,
Statuszeile = selZeile.DienstDict == null,
SollWert = summary.Soll,
IsLastRow = isLastRow
IsLastRow = isLastRow,
EmployeeDC = selZeile.Employee
};
}
else
@@ -1226,7 +1236,8 @@ namespace BeWo.View.Detail.Report
e.Value = new DPCtrlSollInformation
{
Row = selZeile.Zeile,
Statuszeile = selZeile.DienstDict == null
Statuszeile = selZeile.DienstDict == null,
EmployeeDC = selZeile.Employee
};
}
@@ -1533,7 +1544,7 @@ namespace BeWo.View.Detail.Report
{
if (zeile.Employee == emp && _DienstplanerRootObj.DienstZeilenListe[i + 1].Employee != zeile.Employee && zeile.Zeile + 1 <= 2) //Letzte Zeile des ausgewählten Mitarbeiters
{
_DienstplanerRootObj.DienstZeilenListe.Insert(i + 1,
_DienstplanerRootObj.DienstZeilenListe.Insert(zeile.Zeile + 1,
new DienstZeileDC()
{
Contracts = zeile.Contracts,
@@ -1564,7 +1575,6 @@ namespace BeWo.View.Detail.Report
break;
}
}
}
popUp_RightClickEmployee.IsOpen = false;
}
@@ -1860,8 +1870,8 @@ namespace BeWo.View.Detail.Report
{
var zeileDC = eintragDC.DienstDictArray[i];
if(zeileDC.Count > 0 || i == 0)
{
//if(zeileDC.Count > 0 || i == 0) //Nur eine Zeile
//{
var newDic = new Dictionary<int, DienstInfoDC>();
if (zeileDC != null)
@@ -1872,7 +1882,7 @@ namespace BeWo.View.Detail.Report
toAdd.DienstDictUpdated += dienstDictUpdate;
res.Add(toAdd);
}
//}
}

View File

@@ -56,12 +56,20 @@ namespace BeWo.ViewModel
public Visibility EmploymentTypeLeaveDaysVisibility
{
get { return _EmploymentTypeLeaveDaysVisibility; }
set { _EmploymentTypeLeaveDaysVisibility = value; }
set
{
_EmploymentTypeLeaveDaysVisibility = value;
FirePropertyChanged("EmploymentTypeLeaveDaysVisibility");
}
}
public Visibility LeaveDaysVisibility
{
get { return _LeaveDaysVisibility; }
set { _LeaveDaysVisibility = value; }
set
{
_LeaveDaysVisibility = value;
FirePropertyChanged("LeaveDaysVisibility");
}
}

View File

@@ -289,6 +289,7 @@ namespace BeWo.Service.Plugins
var dauer = BerechneAnzahlUrlaubstage(emp, absence, year);
var expiration = GetExpirationDate(year);
current.UrlaubsVerfallsdatum = expiration;
// Resturlaub vom Vorjahr verwenden, wenn möglich
if (current.ResturlaubVorjahr > 0 && start <= expiration)
@@ -301,6 +302,10 @@ namespace BeWo.Service.Plugins
current.ResturlaubVorjahr -= bucheVorjahr;
dauer -= bucheVorjahr;
}
else if (start > expiration)
{
current.VerfallenerUrlaub = current.ResturlaubVorjahr;
}
// Restliche Dauer vom Urlaub abziehen
current.Resturlaub -= dauer;

View File

@@ -1176,5 +1176,9 @@ namespace BeWo.Service.ServiceContracts
[FaultContract(typeof(BeWoFault))]
[OperationContract]
UrlaubsplanerRootDC BuildUrlaubsplanerRootObject(int year, int month);
[FaultContract(typeof(BeWoFault))]
[OperationContract]
string GetInformationStringForUrlaubsplaner(UrlaubskontoDC dc, decimal tageUrlaub, decimal tageKrank, bool urlaubVerfallen);
}
}

View File

@@ -6812,8 +6812,13 @@ namespace BeWo.Service.ServiceImplementations
{
empOids.Add((long)item.EmployeeOid);
}
foreach (var item in root.AlleDienstvertretungen)
{
if (!empOids.Contains(item.EmployeeOid))
empOids.Add((long)item.EmployeeOid);
}
root.AllEmployee = MapperFactory.EmployeeDC_Employee.MapToNewDCs(DAOFactory.GenericDAO.GetActiveByIDs<Employee>(empOids));
//root.AllEmployee = MapperFactory.EmployeeDC_Employee.MapToNewDCs(DAOFactory.GenericDAO.GetActiveByIDs<Employee>(empOids));
var konto = MitarbeiterstundenkontoRO.Create(null, null, date, date.AddMonths(1), empOids);
@@ -7105,5 +7110,17 @@ namespace BeWo.Service.ServiceImplementations
return root;
}
public string GetInformationStringForUrlaubsplaner(UrlaubskontoDC dc, decimal tageUrlaub, decimal tageKrank, bool urlaubVerfallen)
{
try
{
return XAMLInformation.InfoViaXAMLManager.GetXAMLInformationStringForUrlaubsplaner(dc, tageUrlaub, tageKrank, urlaubVerfallen);
}
catch (Exception exception)
{
throw Utils.CreateBeWoFaultException(exception);
}
}
}
}

View File

@@ -1,5 +1,6 @@
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BS.Shared.DataContracts;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -16,6 +17,7 @@ namespace BeWo.Service.XAMLInformation
string xamlstring = "";
xamlstring = "<ScrollViewer xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' VerticalScrollBarVisibility='Auto' HorizontalScrollBarVisibility='auto'/>";
return xamlstring;
#region Variablen setzen
//Geburtstag
var birthdayTimeAndDate = employee.Person.DateOfBirth.ToString().Split(' ');
@@ -225,5 +227,67 @@ namespace BeWo.Service.XAMLInformation
return xamlstring;
}
public static string GetXAMLInformationStringForUrlaubsplaner(UrlaubskontoDC konto, decimal tageUrlaub, decimal tageKrank, bool urlaubVerfallen)
{
decimal verfalleneTage = urlaubVerfallen ? konto.VerfallenerUrlaub : 0;
string xamlstring =
"<ScrollViewer xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' VerticalScrollBarVisibility='Auto' HorizontalScrollBarVisibility='auto'>" +
"<Grid xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'>" +
"<Grid.RowDefinitions>" +
"<RowDefinition Height=\"auto\"/>" +
"<RowDefinition Height='auto'/>" +
"<RowDefinition Height='auto'/>" +
"<RowDefinition Height='auto'/>" +
"<RowDefinition Height='auto'/>" +
"<RowDefinition Height='auto'/>" +
"<RowDefinition Height='auto'/>" +
"<RowDefinition Height='auto'/>" +
"<RowDefinition Height='auto'/>" +
"</Grid.RowDefinitions>" +
"<Grid.ColumnDefinitions>" +
"<ColumnDefinition Width='auto'/>" +
"<ColumnDefinition Width='*'/>" +
"</Grid.ColumnDefinitions>" +
"<Label xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' Grid.Row='0' Grid.Column='0' Background='Transparent' " +
"Margin='5 0 5 0' FontSize='14'>Resturlaub Vorjahr:</Label>" +
"<Label xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' Grid.Row='0' Grid.Column='1' Background='Transparent' " +
"Margin='5 0 5 0' FontSize='14'>" + konto.ResturlaubVorjahr.ToString("0.00") + " Tage" + "</Label>" +
"<Label xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' Grid.Row='1' Grid.Column='0' Background='Transparent' " +
"Margin='5 0 5 0' FontSize='14'>Urlaubsanspruch Vorjahr:</Label>" +
"<Label xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' Grid.Row='1' Grid.Column='1' Background='Transparent' " +
"Margin='5 0 5 0' FontSize='14'>" + konto.ResturlaubVorjahrTotal.ToString("0.00") + " Tage" + "</Label>" +
"<Label xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' Grid.Row='2' Grid.Column='0' Background='Transparent' " +
"Margin='5 0 5 0' FontSize='14'>Resturlaub</Label>" +
"<Label xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' Grid.Row='2' Grid.Column='1' Background='Transparent' " +
"Margin='5 0 5 0' FontSize='14'>" + konto.Resturlaub.ToString("0.00") + " Tage" + "</Label>" +
"<Label xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' Grid.Row='3' Grid.Column='0' Background='Transparent' " +
"Margin='5 0 5 0' FontSize='14'>Urlaubsanspruch</Label>" +
"<Label xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' Grid.Row='3' Grid.Column='1' Background='Transparent' " +
"Margin='5 0 5 0' FontSize='14'>" + konto.Urlaubsanspruch.ToString("0.00") + " Tage" + "</Label>" +
"<Label xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' Grid.Row='4' Grid.Column='0' Background='Transparent' " +
"Margin='5 0 5 0' FontSize='14'>Tage Urlaub</Label>" +
"<Label xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' Grid.Row='4' Grid.Column='1' Background='Transparent' " +
"Margin='5 0 5 0' FontSize='14'>" + tageUrlaub + "</Label>" +
"<Label xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' Grid.Row='5' Grid.Column='0' Background='Transparent' " +
"Margin='5 0 5 0' FontSize='14'>Tage krank</Label>" +
"<Label xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' Grid.Row='5' Grid.Column='1' Background='Transparent' " +
"Margin='5 0 5 0' FontSize='14'>" + tageKrank + "</Label>" +
"<Label xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' Grid.Row='6' Grid.Column='0' Background='Transparent' " +
"Margin='5 0 5 0' FontSize='14'>Verfallener Urlaub</Label>" +
"<Label xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' Grid.Row='6' Grid.Column='1' Background='Transparent' " +
"Margin='5 0 5 0' FontSize='14'>" + verfalleneTage.ToString("0.00") + " Tage" + "</Label>" +
"</Grid>" +
"</ScrollViewer>";
return xamlstring;
}
}
}

View File

@@ -19,5 +19,9 @@ namespace BS.Shared.DataContracts
public List<AbsenceTimeDC> AbsenceTimes { get; set; }
[DataMember]
public List<GeschenkterUrlaubstagDC> GeschenkteUrlaubstage { get; set; }
[DataMember]
public decimal TageUrlaub { get; set; }
[DataMember]
public decimal TageKrankheit { get; set; }
}
}

View File

@@ -24,5 +24,11 @@ namespace BS.Shared.DataContracts
[DataMember]
public decimal Urlaubsanspruch { get; set; }
[DataMember]
public decimal VerfallenerUrlaub { get; set; }
[DataMember]
public DateTime UrlaubsVerfallsdatum { get; set; }
}
}