diff --git a/BeWo/SchulbegleitenderDienst/SBDUtils/SBDUtils.cs b/BeWo/SchulbegleitenderDienst/SBDUtils/SBDUtils.cs
index 1d64eadfe..60a115f00 100644
--- a/BeWo/SchulbegleitenderDienst/SBDUtils/SBDUtils.cs
+++ b/BeWo/SchulbegleitenderDienst/SBDUtils/SBDUtils.cs
@@ -36,7 +36,7 @@ namespace BeWo.SchulbegleitenderDienst.SBDUtils
itemsForunwantedSubstitutionList.AddIfNotIn(item);
}
}
-
+
foreach (var viewModel in viewModels)
{
if(viewModel.VertretungsStatus != VertretungsStatus.KlientKrank)
@@ -45,7 +45,7 @@ namespace BeWo.SchulbegleitenderDienst.SBDUtils
if (viewModel.Customer != null)
{
- var substitutionNeededDate = DateTime.Now.AddDays(-1 * viewModel.Customer.SubstitutionStartingDayCount);
+ var substitutionNeededDate = DateTime.Now.AddDays(-1 * (viewModel.Customer.SubstitutionStartingDayCount - 1));
if (viewModel.Absencetime?.Start.HasValue ?? false)
{
diff --git a/BeWo/SchulbegleitenderDienst/SchulbegleitenderDienstCustomerView.xaml b/BeWo/SchulbegleitenderDienst/SchulbegleitenderDienstCustomerView.xaml
index 6a10261a8..34ef696f8 100644
--- a/BeWo/SchulbegleitenderDienst/SchulbegleitenderDienstCustomerView.xaml
+++ b/BeWo/SchulbegleitenderDienst/SchulbegleitenderDienstCustomerView.xaml
@@ -68,7 +68,7 @@
SelectedIndexChanged="SubstitutionNeedComboBox_OnSelectedIndexChanged"/>
-
diff --git a/BeWo/SchulbegleitenderDienst/SchulbegleitenderDienstCustomerView.xaml.cs b/BeWo/SchulbegleitenderDienst/SchulbegleitenderDienstCustomerView.xaml.cs
index 90efab3a9..21fbf8dc5 100644
--- a/BeWo/SchulbegleitenderDienst/SchulbegleitenderDienstCustomerView.xaml.cs
+++ b/BeWo/SchulbegleitenderDienst/SchulbegleitenderDienstCustomerView.xaml.cs
@@ -11,10 +11,10 @@ namespace BeWo.SchulbegleitenderDienst
{
public partial class SchulbegleitenderDienstCustomerView
{
- private List tokenlist = new List();
+ private List _TokenList = new List();
- readonly Dictionary verfuegbarerWunschToken = new Dictionary();
- readonly Dictionary verfuegbarerAusschlussToken = new Dictionary();
+ readonly Dictionary _VerfuegbareWunschTokenList = new Dictionary();
+ readonly Dictionary _VerfuegbareAusschlussTokenList = new Dictionary();
private CustomerVM _ViewModel;
@@ -39,11 +39,11 @@ namespace BeWo.SchulbegleitenderDienst
private void GetAllTokenItems()
{
- tokenlist.Clear();
+ _TokenList.Clear();
ServiceFacade.DoOperationsServiceAsync(r => r.GetAllTokens(SchulbegleitenderZugehoerigkeitsTyp.Klient, ViewModel.DataContract.CustomerOid.Value), h => this.Dispatch(delegate
{
- tokenlist = h;
+ _TokenList = h;
SetAusschlussKriterien();
@@ -54,116 +54,127 @@ namespace BeWo.SchulbegleitenderDienst
private void SetAusschlussKriterien()
{
- List list = new List();
- List valuelist = new List();
+ var list = new List();
+ var valuelist = new List();
- if (tokenlist != null)
+ if (_TokenList != null)
{
- foreach (var token in tokenlist)
+ foreach (var token in _TokenList)
{
if (token.TokenType == TokenTyp.AusschlussKriterium && token.MemberOid == ViewModel.DataContract.CustomerOid.Value)
{
valuelist.Add(token.Beschreibung);
- if (!verfuegbarerAusschlussToken.ContainsKey(token.Beschreibung))
- verfuegbarerAusschlussToken.Add(token.Beschreibung, token);
+ if (!_VerfuegbareAusschlussTokenList.ContainsKey(token.Beschreibung))
+ {
+ _VerfuegbareAusschlussTokenList.Add(token.Beschreibung, token);
+ }
}
else if (token.TokenType == TokenTyp.AusschlussKriterium)
{
list.Add(token.Beschreibung);
- if (!verfuegbarerAusschlussToken.ContainsKey(token.Beschreibung))
- verfuegbarerAusschlussToken.Add(token.Beschreibung, token);
+ if (!_VerfuegbareAusschlussTokenList.ContainsKey(token.Beschreibung))
+ {
+ _VerfuegbareAusschlussTokenList.Add(token.Beschreibung, token);
+ }
}
}
}
- // if(list.Count > 0)
- ComboAusschlussAnzeige.ItemsSource = list;
-
- // if (valuelist.Count > 0)
- ComboAusschlussAnzeige.EditValue = valuelist;
+ ComboAusschlussAnzeige.ItemsSource = list;
+ ComboAusschlussAnzeige.EditValue = valuelist;
}
private void SetWunschKriterien()
{
- List list = new List();
- List valuelist = new List();
+ var list = new List();
+ var valuelist = new List();
- if (tokenlist != null)
+ if (_TokenList != null)
{
- foreach (var token in tokenlist)
+ foreach (var token in _TokenList)
{
if (token.TokenType == TokenTyp.WunschKriterium && token.MemberOid == ViewModel.DataContract.CustomerOid.Value)
{
valuelist.Add(token.Beschreibung);
- if (!verfuegbarerWunschToken.ContainsKey(token.Beschreibung))
- verfuegbarerWunschToken.Add(token.Beschreibung, token);
+ if (!_VerfuegbareWunschTokenList.ContainsKey(token.Beschreibung))
+ {
+ _VerfuegbareWunschTokenList.Add(token.Beschreibung, token);
+ }
}
else if (token.TokenType == TokenTyp.WunschKriterium)
{
list.Add(token.Beschreibung);
- if (!verfuegbarerWunschToken.ContainsKey(token.Beschreibung))
- verfuegbarerWunschToken.Add(token.Beschreibung, token);
+ if (!_VerfuegbareWunschTokenList.ContainsKey(token.Beschreibung))
+ {
+ _VerfuegbareWunschTokenList.Add(token.Beschreibung, token);
+ }
}
-
}
}
if (list.Count > 0)
+ {
ComboWunschAnzeige.ItemsSource = list;
+ }
if(valuelist.Count > 0)
+ {
ComboWunschAnzeige.EditValue = valuelist;
-
+ }
}
private void TokenEditorWunschBehavior_OnTokensChanged(object sender, TokensChangedEventArgs e)
{
- var x = e.AddedTokens;
- var y = e.RemovedTokens;
+ var addedTokens = e.AddedTokens;
+ var removedTokens = e.RemovedTokens;
- if (x != null && x.Count > 0)
+ if (addedTokens != null && addedTokens.Count > 0)
{
- ServiceFacade.DoOperationsServiceSync(r=>r.DoTokenWunschOperation(1, ViewModel.DataContract.CustomerOid.Value, SchulbegleitenderZugehoerigkeitsTyp.Klient, verfuegbarerWunschToken,x[0].ToString()));
+ ServiceFacade.DoOperationsServiceSync(r=>r.DoTokenWunschOperation(1, ViewModel.DataContract.CustomerOid.Value, SchulbegleitenderZugehoerigkeitsTyp.Klient, _VerfuegbareWunschTokenList,addedTokens[0].ToString()));
}
- if (y != null && y.Count > 0)
+ if (removedTokens != null && removedTokens.Count > 0)
{
- ServiceFacade.DoOperationsServiceSync(r=>r.DoTokenWunschOperation(0, ViewModel.DataContract.CustomerOid.Value, SchulbegleitenderZugehoerigkeitsTyp.Klient, verfuegbarerWunschToken, y[0].ToString()));
+ ServiceFacade.DoOperationsServiceSync(r=>r.DoTokenWunschOperation(0, ViewModel.DataContract.CustomerOid.Value, SchulbegleitenderZugehoerigkeitsTyp.Klient, _VerfuegbareWunschTokenList, removedTokens[0].ToString()));
}
}
private void TokenEditorAusschlussBehavior_OnTokensChanged(object sender, TokensChangedEventArgs e)
{
- var x = e.AddedTokens;
- var y = e.RemovedTokens;
+ var addedTokens = e.AddedTokens;
+ var removedTokens = e.RemovedTokens;
- if (x != null && x.Count > 0)
+ if (addedTokens != null && addedTokens.Count > 0)
{
- ServiceFacade.DoOperationsServiceSync(r => r.DoTokenAusschlussOperation(1, ViewModel.DataContract.CustomerOid.Value, SchulbegleitenderZugehoerigkeitsTyp.Klient, verfuegbarerWunschToken, x[0].ToString()));
+ ServiceFacade.DoOperationsServiceSync(r => r.DoTokenAusschlussOperation(1, ViewModel.DataContract.CustomerOid.Value, SchulbegleitenderZugehoerigkeitsTyp.Klient, _VerfuegbareWunschTokenList, addedTokens[0].ToString()));
}
- if (y != null && y.Count > 0)
+ if (removedTokens != null && removedTokens.Count > 0)
{
- ServiceFacade.DoOperationsServiceSync(r => r.DoTokenAusschlussOperation(0, ViewModel.DataContract.CustomerOid.Value, SchulbegleitenderZugehoerigkeitsTyp.Klient, verfuegbarerWunschToken, y[0].ToString()));
+ ServiceFacade.DoOperationsServiceSync(r => r.DoTokenAusschlussOperation(0, ViewModel.DataContract.CustomerOid.Value, SchulbegleitenderZugehoerigkeitsTyp.Klient, _VerfuegbareWunschTokenList, removedTokens[0].ToString()));
}
}
private void ComboWunschAnzeige_OnIsKeyboardFocusWithinChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if (ComboWunschAnzeige.IsKeyboardFocusWithin)
+ {
ComboWunschAnzeige.IsPopupOpen = true;
+ }
}
private void ComboAusschlussAnzeige_OnIsKeyboardFocusWithinChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if (ComboAusschlussAnzeige.IsKeyboardFocusWithin)
+ {
ComboAusschlussAnzeige.IsPopupOpen = true;
+ }
}
private void SubstitutionNeedComboBox_OnSelectedIndexChanged(object sender, RoutedEventArgs e)
diff --git a/BeWo/SchulbegleitenderDienst/TagesVertretung.cs b/BeWo/SchulbegleitenderDienst/TagesVertretung.cs
index 0d9cadb03..15eabf64c 100644
--- a/BeWo/SchulbegleitenderDienst/TagesVertretung.cs
+++ b/BeWo/SchulbegleitenderDienst/TagesVertretung.cs
@@ -57,7 +57,8 @@ namespace BeWo.SchulbegleitenderDienst
WochenansichtBemerkung = vertretungsItem.WochenansichtBemerkung,
VertreterInfoString = vertretungsItem.VertreterInfoString,
EmployeeAddressString = vertretungsItem.EmployeeAddressString,
- Id = vertretungsItem.Id
+ Id = vertretungsItem.Id,
+ AssistanceTimeEntry = vertretungsItem.AssistanceTime
};
if (vertretungsItem.Arbeitszeiten != null && vertretungsItem.Arbeitszeiten.Any())
@@ -90,7 +91,7 @@ namespace BeWo.SchulbegleitenderDienst
{
if (viewModel.Vertretung == null)
{
- viewModel.Vertretung = new VertretungDC();
+ viewModel.Vertretung = new VertretungDC {Notice = viewModel.Bemerkung};
}
viewModel.Vertretung.VertretungsZeitraumVon = startDate ?? DateTime.Today.Date;
@@ -215,58 +216,31 @@ namespace BeWo.SchulbegleitenderDienst
return;
}
- var absenceTime = new AbsenceTimeDC
- {
- AbsenceTimeOid = viewModel.Absencetime.AbsenceTimeOid,
- Start = viewModel.StartDate,
- End = viewModel.EndDate,
- Reason = viewModel.Absencetime.Reason,
- KrankheitsMeldung = viewModel.Absencetime.KrankheitsMeldung
- };
-
- if (viewModel.Customer != null)
- {
- absenceTime.CustomerOid = viewModel.Customer.CustomerOid;
- }
-
- if (viewModel.Employee != null)
- {
- absenceTime.EmployeeOid = viewModel.Employee.EmployeeOid;
- }
-
- if (viewModel.Absencetime != null)
- {
- absenceTime.AbsenceTimeOid = viewModel.Absencetime.AbsenceTimeOid;
- }
-
- ServiceFacade.DoOperationsServiceSync(s => s.UpdateAbsenceTime(absenceTime));
-
if (viewModel.Vertretung == null)
{
- viewModel.Vertretung = new VertretungDC();
- }
-
- viewModel.Vertretung.VertretungsZeitraumVon = viewModel.StartDate.Value;
- viewModel.Vertretung.VertretungsZeitraumBis = viewModel.EndDate.Value;
- viewModel.Vertretung.Notice = viewModel.Bemerkung;
-
- if (viewModel.Customer != null)
- {
- viewModel.Vertretung.CustomerOid = viewModel.Customer.CustomerOid;
- }
-
- if (viewModel.Employee != null)
- {
- viewModel.Vertretung.EmployeeOid = viewModel.Employee.EmployeeOid;
- }
-
- if (viewModel.Vertretung.VertretungOid.HasValue)
- {
- ServiceFacade.DoOperationsServiceSync(s => s.UpdateVertretung(viewModel.Vertretung));
+ viewModel.Absencetime.Notice = viewModel.Bemerkung;
}
else
{
- ServiceFacade.DoOperationsServiceSync(s => s.CreateVertretung(viewModel.Vertretung));
+ viewModel.Vertretung.Notice = viewModel.Bemerkung;
+ }
+
+ var absenceTime = viewModel.Absencetime;
+
+ ServiceFacade.DoOperationsServiceSync(s => s.UpdateAbsenceTime(absenceTime));
+
+ if (viewModel.Vertretung != null)
+ {
+ viewModel.Vertretung.Notice = viewModel.Bemerkung;
+
+ viewModel.Vertretung.CustomerOid = viewModel.Customer?.CustomerOid;
+
+ viewModel.Vertretung.EmployeeOid = viewModel.Employee?.EmployeeOid;
+
+ if (viewModel.Vertretung.VertretungOid.HasValue)
+ {
+ ServiceFacade.DoOperationsServiceSync(s => s.UpdateVertretung(viewModel.Vertretung));
+ }
}
}
catch(Exception ex)
diff --git a/BeWo/SchulbegleitenderDienst/TagesansichtVM.cs b/BeWo/SchulbegleitenderDienst/TagesansichtVM.cs
index ae4eed928..608979309 100644
--- a/BeWo/SchulbegleitenderDienst/TagesansichtVM.cs
+++ b/BeWo/SchulbegleitenderDienst/TagesansichtVM.cs
@@ -128,20 +128,7 @@ namespace BeWo.SchulbegleitenderDienst
}
}
}
-
- public ArbeitszeitEintragDC FirstAssistanceTimeEntry
- {
- get
- {
- if (AssistanceTimes != null && AssistanceTimes.Any())
- {
- return AssistanceTimes[0];
- }
-
- return null;
- }
- }
-
+
public new string SchulbegleitenderDienstString
{
get
@@ -269,5 +256,7 @@ namespace BeWo.SchulbegleitenderDienst
public new string VertreterInfoString { get; set; }
public Guid Id { get; set; }
+
+ public ArbeitszeitEintragDC AssistanceTimeEntry { get; set; }
}
}
diff --git a/BeWo/SchulbegleitenderDienst/VertretungsMainViewV2.xaml b/BeWo/SchulbegleitenderDienst/VertretungsMainViewV2.xaml
index 692889958..a549c2aa0 100644
--- a/BeWo/SchulbegleitenderDienst/VertretungsMainViewV2.xaml
+++ b/BeWo/SchulbegleitenderDienst/VertretungsMainViewV2.xaml
@@ -261,6 +261,7 @@
+
@@ -346,12 +347,7 @@
-
-
-
-
-
-
+
@@ -409,6 +405,7 @@
+
@@ -428,12 +425,7 @@
-
-
-
-
-
-
+
@@ -543,6 +535,7 @@
+
@@ -667,6 +660,7 @@
+
@@ -970,6 +964,7 @@
+
@@ -1166,6 +1161,7 @@
+
diff --git a/BeWo/SchulbegleitenderDienst/VertretungsMainViewV2.xaml.cs b/BeWo/SchulbegleitenderDienst/VertretungsMainViewV2.xaml.cs
index 743729a80..70b7fe4bd 100644
--- a/BeWo/SchulbegleitenderDienst/VertretungsMainViewV2.xaml.cs
+++ b/BeWo/SchulbegleitenderDienst/VertretungsMainViewV2.xaml.cs
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Globalization;
+using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
@@ -51,6 +52,7 @@ namespace BeWo.SchulbegleitenderDienst
InitializeComponent();
DataContext = this;
+ this.Dispatch(() => {});
ScrollViewerTagesansicht.Visibility = Visibility.Visible;
WochenansichtsContainerGrid.Visibility = Visibility.Collapsed;
@@ -109,53 +111,17 @@ namespace BeWo.SchulbegleitenderDienst
});
}
- private void GetWochenDienstFromItems(DateTime time, IEnumerable tagesansichtVMs)
+ private void GetWochenDienstFromItems(DateTime time, List tagesansichtVMs)
{
_ItemsWochenMitarbeiter.Clear();
_ItemsWochenKlienten.Clear();
_SubstitutionUnwantedWeekViewList.Clear();
- var employeeList = new List();
- var customerList = new List();
- var unwantedList = new List();
+ var lists = SBDUtils.SBDUtils.GetListType(tagesansichtVMs);
- foreach(var item in tagesansichtVMs)
- {
- if(item.VertretungsStatus == VertretungsStatus.KlientKrank)
- {
- if(item.Customer.IsSubstitutionWanted)
- {
- customerList.Add(item);
- }
- else
- {
- unwantedList.Add(item);
- }
- }
- else
- {
- var substitutionStartingDayCountCondition = false;
-
- if (item.Customer != null)
- {
- var substitutionNeededDate = DateTime.Now.AddDays(-1 * item.Customer.SubstitutionStartingDayCount);
-
- if (item.Absencetime?.Start.HasValue ?? false)
- {
- substitutionStartingDayCountCondition = substitutionNeededDate < item.Absencetime.Start;
- }
- }
-
- if(item.Vertretung?.VertretenderMitarbeiterOid != null || substitutionStartingDayCountCondition)
- {
- unwantedList.Add(item);
- }
- else
- {
- employeeList.Add(item);
- }
- }
- }
+ var employeeList = lists.AbsentEmployeesList;
+ var customerList = lists.AbsentCustomersList;
+ var unwantedList = lists.SubstitutionUnwantedList;
_ItemsWochenMitarbeiter.AddRangeIfElementsNotIn(_Wochenvertretung.GetWochenAnsichtFromItems(time, employeeList));
_ItemsWochenKlienten.AddRangeIfElementsNotIn(_Wochenvertretung.GetWochenAnsichtFromItems(time, customerList));
diff --git a/BeWo/SchulbegleitenderDienst/VertretungsSearchView.xaml.cs b/BeWo/SchulbegleitenderDienst/VertretungsSearchView.xaml.cs
index cc3bb7d9a..7745ecd9c 100644
--- a/BeWo/SchulbegleitenderDienst/VertretungsSearchView.xaml.cs
+++ b/BeWo/SchulbegleitenderDienst/VertretungsSearchView.xaml.cs
@@ -10,6 +10,7 @@ using System.Linq;
using System.Runtime.CompilerServices;
using BeWo.Annotations;
using BS.Shared;
+using BS.Shared.Core;
using BS.Shared.DataContracts.Compact;
using DevExpress.Xpf.Editors;
using DevExpress.Xpf.Grid;
@@ -154,31 +155,26 @@ namespace BeWo.SchulbegleitenderDienst
private void SetzeStartEndDatum()
{
- DateTime? start = _Tagesansicht.Datum;
- DateTime? end = _Tagesansicht.Datum;
+ var start = _Tagesansicht.Datum;
+ var end = _Tagesansicht.Datum;
+
+ var assistanceTime = _Tagesansicht.AssistanceTimeEntry;
- if (_Tagesansicht.Absencetime?.Start != null)
- {
- start = _Tagesansicht.Absencetime.Start.Value;
- }
+ var assistanceTimeDates = DateTimeUtils.GetAssistanceTimeComparisonDateTime(assistanceTime.UhrzeitVon, assistanceTime.UhrzeitBis, start);
- if (_Tagesansicht.Absencetime?.End != null)
- {
- end = _Tagesansicht.Absencetime.End.Value;
- }
+ start = assistanceTimeDates.Start;
+
+ end = assistanceTimeDates.End;
if (_Tagesansicht.Vertretung != null)
{
start = _Tagesansicht.Vertretung.VertretungsZeitraumVon;
- }
- if (_Tagesansicht.Vertretung != null)
- {
end = _Tagesansicht.Vertretung.VertretungsZeitraumBis;
}
- SubstitutionStart = start.Value;
+ SubstitutionStart = start;
- SubstitutionEnd = end.Value;
+ SubstitutionEnd = end;
}
private void RootGroupBox_OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
@@ -238,6 +234,7 @@ namespace BeWo.SchulbegleitenderDienst
dateTime = _Tagesansicht.Datum;
}
+ // TODO: GetAllActiveVertreterEmployeesCompact neuschreiben und AssistanceTimeEntry mitübergeben
ServiceFacade.DoEmployeeServiceAsync(s => s.GetAllActiveVertreterEmployeesCompact(customerOid, dateTime), r => this.Dispatch(delegate
{
GridControlPossibleVertreter.Visibility = Visibility.Hidden;
@@ -274,7 +271,7 @@ namespace BeWo.SchulbegleitenderDienst
}
}
- var sex = employee.Geschlecht == Sex.Male ? "Männlich" : "Weiblich";
+ var sex = BS.Shared.Core.Utils.GetSexTranslation(employee.Geschlecht);
result.Add(new SearchViewDaten(employee.FirstName, employee.LastName, employee.PersonAdressPLZ, employee.PersonAdressStr, employee.PersonAdressStadt, arbeitszeitEintrag, employee, sex));
}
@@ -768,7 +765,6 @@ namespace BeWo.SchulbegleitenderDienst
public TagesansichtVM TagesItem { get; set; }
public WochenansichtVM WochenItem { get; set; }
-
}
public class SearchViewDaten
@@ -796,7 +792,7 @@ namespace BeWo.SchulbegleitenderDienst
public override string ToString()
{
- return String.Format("{0} {1}", Vorname, Nachname);
+ return $"{Vorname} {Nachname}";
}
}
}
diff --git a/BeWo/SchulbegleitenderDienst/ViewModel/VertretungsansichtBaseVM.cs b/BeWo/SchulbegleitenderDienst/ViewModel/VertretungsansichtBaseVM.cs
index ecff4bfe8..07900b076 100644
--- a/BeWo/SchulbegleitenderDienst/ViewModel/VertretungsansichtBaseVM.cs
+++ b/BeWo/SchulbegleitenderDienst/ViewModel/VertretungsansichtBaseVM.cs
@@ -170,7 +170,7 @@ namespace BeWo.SchulbegleitenderDienst.ViewModel
}
}
- public string SchulbegleitenderDienstString;
+ public string SchulbegleitenderDienstString { get; set; }
public List Schools { get; set; }
diff --git a/Data/Access/SearchDAO.cs b/Data/Access/SearchDAO.cs
index 76b040f0f..645a01276 100644
--- a/Data/Access/SearchDAO.cs
+++ b/Data/Access/SearchDAO.cs
@@ -3028,7 +3028,7 @@ namespace BeWo.Data.Access
criteria.SetMaxResults(count);
- return criteria.List();
+ return criteria.List().Where(w => w.VertretungsZeitraumVon > DateTime.MinValue && w.VertretungsZeitraumBis > DateTime.MinValue).ToList();
}
public Dictionary> GetAssistanceTimesForEmployee(long employeeOid, DateTime start, DateTime end)
diff --git a/Data/DefaultHibernateSessionManager.cs b/Data/DefaultHibernateSessionManager.cs
index b17f7a958..6d5ba9d4f 100644
--- a/Data/DefaultHibernateSessionManager.cs
+++ b/Data/DefaultHibernateSessionManager.cs
@@ -54,10 +54,10 @@ namespace BeWo.Data
{
#if DEBUG
//TODO: wieder einkommentieren!
- var hierarchy = (Hierarchy)LogManager.GetRepository();
- var logger = (Logger)hierarchy.GetLogger("NHibernate.SQL");
- logger.AddAppender(new TraceAppender { Layout = new SimpleLayout() });
- hierarchy.Configured = true;
+ //var hierarchy = (Hierarchy)LogManager.GetRepository();
+ //var logger = (Logger)hierarchy.GetLogger("NHibernate.SQL");
+ //logger.AddAppender(new TraceAppender { Layout = new SimpleLayout() });
+ //hierarchy.Configured = true;
#endif
var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
diff --git a/Data/WCFHibernateSessionManager.cs b/Data/WCFHibernateSessionManager.cs
index 729d4f501..7ffaaec53 100644
--- a/Data/WCFHibernateSessionManager.cs
+++ b/Data/WCFHibernateSessionManager.cs
@@ -47,10 +47,10 @@ namespace BeWo.Data
{
#if DEBUG
//TODO: wieder einkommentieren!
- var hierarchy = (Hierarchy)LogManager.GetRepository();
- var logger = (Logger)hierarchy.GetLogger("NHibernate.SQL");
- logger.AddAppender(new TraceAppender { Layout = new SimpleLayout() });
- hierarchy.Configured = true;
+ //var hierarchy = (Hierarchy)LogManager.GetRepository();
+ //var logger = (Logger)hierarchy.GetLogger("NHibernate.SQL");
+ //logger.AddAppender(new TraceAppender { Layout = new SimpleLayout() });
+ //hierarchy.Configured = true;
#endif
_SessionFactories[MultitenancyOperationContextExt.Current.Tenant] = new Configuration().Configure(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Multitenancy\" + MultitenancyOperationContextExt.Current.Tenant + ".config")).BuildSessionFactory();
}
diff --git a/Host/Multitenancy/demo.config b/Host/Multitenancy/demo.config
index b3c03c5ef..8b974bcce 100644
--- a/Host/Multitenancy/demo.config
+++ b/Host/Multitenancy/demo.config
@@ -15,14 +15,14 @@
NHibernate.Driver.MySqlDataDriver
-
-
- Server=localhost;Password=root;User ID=root; Initial Catalog=bewodemo
+ Server=localhost;Password=root;User ID=root; Initial Catalog=1111111111
+
+
NHibernate.Dialect.MySQLDialect
@@ -30,7 +30,7 @@
NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle
none
- true
+ false
true
diff --git a/Model/Changes_2019_12_07 AbWelchemKrankheitsTag UPDATE.txt b/Model/Changes_2019_12_07 AbWelchemKrankheitsTag UPDATE.txt
new file mode 100644
index 000000000..e2fcf311d
--- /dev/null
+++ b/Model/Changes_2019_12_07 AbWelchemKrankheitsTag UPDATE.txt
@@ -0,0 +1,2 @@
+# War früher 0, ist jetzt 1 -> Vertretung gewünscht bzw. benötigt ab dem ersten Tag statt wie bisher am nullten Tag.
+UPDATE customer SET AbWelchemKrankheitsTag = 1 WHERE AbwelchemKrankheitsTag = 0 AND Oid > 0;
\ No newline at end of file
diff --git a/Service/SBD/VertretungsManager.cs b/Service/SBD/VertretungsManager.cs
index 55039455c..0e907a855 100644
--- a/Service/SBD/VertretungsManager.cs
+++ b/Service/SBD/VertretungsManager.cs
@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
-using System.Diagnostics;
using System.Linq;
using System.Text;
@@ -18,81 +17,6 @@ namespace BeWo.Service.SBD
{
internal class VertretungsManager
{
- private List CreateSubstitutionList(DateTime intervalStart, DateTime intervalEnd)
- {
- var result = new List();
- var start = intervalStart;
- var end = intervalEnd.AddDays(1).AddTicks(-1);
-
- var allAbsenceTimes = DAOFactory.SearchDAO.FindAbsenceTimes(start, end).ToList();
- var customerAbsenceTimes = allAbsenceTimes.Where(absenceTime => absenceTime.CustomerOid.HasValue);
- var employeeAbsenceTimes = allAbsenceTimes.Where(absenceTime => absenceTime.EmployeeOid.HasValue);
-
- var substitutions = DAOFactory.SearchDAO.FindVertretungen(start, end).ToList();
-
- var customerOids = new List();
- var employeeOids = new List();
-
- employeeAbsenceTimes.DoForEach(absenceTime =>
- {
- if(absenceTime.EmployeeOid.HasValue)
- {
- employeeOids.AddIfNotIn(absenceTime.EmployeeOid.Value);
- }
- });
-
- substitutions.DoForEach(substitution =>
- {
- if(substitution.EmployeeOid.HasValue)
- {
- employeeOids.AddIfNotIn(substitution.EmployeeOid.Value);
- }
- });
-
- var employees = DAOFactory.GenericDAO.LoadByIDs(employeeOids);
- employees.DoForEach(employee =>
- {
- if(employee.Arbeitszeiten.Any())
- {
- foreach(var arbeitszeit in employee.Arbeitszeiten.Where(a => a.Customer != null))
- {
- var date = start;
- do
- {
- if (date.InBetween(arbeitszeit.GueltigVon, arbeitszeit.GueltigBis))
- {
- customerOids.AddIfNotIn(arbeitszeit.Customer.Oid.Value);
- }
- date = date.AddDays(1);
- } while ((end - date).TotalDays > 0);
- }
- }
- });
-
- customerAbsenceTimes.DoForEach(absenceTime =>
- {
- if(absenceTime.CustomerOid.HasValue)
- {
- customerOids.AddIfNotIn(absenceTime.CustomerOid.Value);
- }
- });
-
- substitutions.DoForEach(substitution =>
- {
- if(substitution.CustomerOid.HasValue)
- {
- customerOids.AddIfNotIn(substitution.CustomerOid.Value);
- }
- });
-
- var customers = DAOFactory.GenericDAO.LoadByIDs(customerOids);
-
- // Klienten aus den employeeAbsenceTimes, customerAbsenceTimes und aus den Vertretungen
-
-
- return result;
- }
-
private static List LoadContactInformationForEntity(long entityOid) where T : BeWoEntityBase
{
var entity = typeof(T) == typeof(Employee) ? DAOFactory.GenericDAO.LoadByID(entityOid).Person : DAOFactory.GenericDAO.LoadByID(entityOid).Person;
@@ -100,114 +24,295 @@ namespace BeWo.Service.SBD
return MapperFactory.ContactDC_Contact.MapToNewDCs(entity.Contacts);
}
- public List CreateVertretungsListe(DateTime start, DateTime end)
+ public List CreateSubstitutions(DateTime start, DateTime end)
{
- var result = new List();
+ var vertretungsItems = new List();
end = end.Date.AddDays(1).AddTicks(-1);
var vertretungen = DAOFactory.SearchDAO.FindVertretungen(start, end).ToList();
var absenceTimes = DAOFactory.SearchDAO.FindAbsenceTimes(start, end).ToList();
+ var employeeAbsenceTimes = absenceTimes.Where(absenceTime => absenceTime.EmployeeOid.HasValue).ToList();
+ var customerAbsenceTimes = absenceTimes.Where(absenceTime => absenceTime.CustomerOid.HasValue).ToList();
+
var customerOids = vertretungen.Where(w => w.CustomerOid.HasValue).Select(s => s.CustomerOid.Value).ToList();
customerOids.AddRangeIfElementsNotIn(absenceTimes.Where(w => w.CustomerOid.HasValue).Select(s => s.CustomerOid.Value).ToList());
var customers = DAOFactory.GenericDAO.LoadByIDs(customerOids);
var customerContactInformation = new Dictionary>();
+ var employees = DAOFactory.GenericDAO.LoadByIDs(employeeAbsenceTimes.Select(absenceTime => absenceTime.EmployeeOid.Value));
- var employeeOids = new List();
- foreach(var absenceTime in absenceTimes)
- {
- if(absenceTime.EmployeeOid.HasValue)
- {
- employeeOids.AddIfNotIn(absenceTime.EmployeeOid.Value);
- }
- }
+ var employeeVertretungsItems = new List();
+ var customerVertretungsItems = new List();
+ var employeeVertretungsItemsGuids2Ignore = new List();
foreach (var customer in customers)
{
var contacts = MapperFactory.ContactDC_Contact.MapToNewDCs(customer.Person.Contacts);
- if(customer.Oid != null)
+ if (customer.Oid != null)
{
customerContactInformation.AddOrUpdateValueInDictionary(customer.Oid.Value, contacts);
}
}
- foreach (var absenceTime in absenceTimes)
+ // Mitarbeiterabwesenheiten
+ foreach (var absenceTime in employeeAbsenceTimes)
{
- if (absenceTime.EmployeeOid.HasValue) //Abwesenheit Mitarbeiter
+ var employee = employees.FirstOrDefault(emp => emp.Oid.HasValue && emp.Oid.Value.Equals(absenceTime.EmployeeOid));
+ if (employee == null)
{
- //Erstelle für jeden betreuten Klienten ein Abwesenheitsitem
- var employee = DAOFactory.GenericDAO.GetActiveByIDs(new List{ absenceTime.EmployeeOid.Value }).FirstOrDefault();
- if(employee == null)
+ continue;
+ }
+
+ var employeeDC = MapperFactory.CompactEmployeeDC_Employee.MapToNewDC(employee);
+ var employeeAddressString = GetEmployeeAddressInfo(employee.Oid.Value);
+ var employeeContactInformationList = LoadContactInformationForEntity(employee.Oid.Value);
+
+ foreach (var employee2Customer in employee.Employee2CustomerList.Where(e2C => e2C.IsActive == ActivationTypeId.Active))
+ {
+ foreach (var valueListEntry2Object in employee2Customer.ValueList.Where(entry2Object => entry2Object.Entry.Type == ValueListEntryType.StaffRoleType))
{
- continue;
- }
+ var customer = employee2Customer.Customer;
+ var customerDC = MapperFactory.CompactCustomerDC_Customer.MapToNewDC(customer);
+ var customerContactInformationList = LoadContactInformationForEntity(customer.Oid.Value);
+ var schools = MapperFactory.CustomerOrganisationRelationDC_Customer2Organisation.MapToNewDCs(customer.Customer2OrganisationList.Where(customer2Organisation => customer2Organisation.ValueList.Any(b => b.Entry.Type == ValueListEntryType.EnvironmentOrganisationType && b.Entry.Value.Equals("Schule"))));
- var employeAssistanceTimes = DAOFactory.SearchDAO.GetAssistanceTimesForEmployee(employee.Oid.Value, start, end);
+ var assistanceTimeEntries = GetAssistanceTimesForCustomer(customer, employee, absenceTime, start, end);
- foreach(var item in employeAssistanceTimes)
- {
- var vertretungsItems = ErstelleVertretungsItemsForAbsenceEmployee(absenceTime, employee, item.Key, vertretungen, start, end, LoadContactInformationForEntity(item.Key.Oid.Value), MapperFactory.ContactDC_Contact.MapToNewDCs(employee.Person.Contacts), MapperFactory.CustomerOrganisationRelationDC_Customer2Organisation.MapToNewDCs(item.Key.Customer2OrganisationList));
-
- result.AddRangeIfElementsNotIn(vertretungsItems);
- }
-
- foreach (var employee2Customer in employee.Employee2CustomerList.Where(e2c => e2c.Customer.IsActive == ActivationTypeId.Active && !employeAssistanceTimes.Values.Any(a => a.Any(b => b.Employee?.Oid != null && b.Employee.Oid.Value.Equals(e2c.EmployeeOid)))))
- {
- foreach (var valueListEntry2Object in employee2Customer.ValueList)
+ var dateTime = start;
+ while (dateTime <= end)
{
- if (valueListEntry2Object.Entry.Type == ValueListEntryType.StaffRoleType) //TODO: Wie bei VKMAachen && !valueListEntry2Object.Entry.Value.Equals("ehemalige Betreuung")) // Nur Hauptbetreuer?
+ if (LiegtImZeitraum(dateTime, absenceTime))
{
- var vertretungsItems = ErstelleVertretungsItemsForAbsenceEmployee(absenceTime, employee, employee2Customer.Customer, vertretungen, start, end, LoadContactInformationForEntity(employee2Customer.Customer.Oid.Value), MapperFactory.ContactDC_Contact.MapToNewDCs(employee.Person.Contacts), MapperFactory.CustomerOrganisationRelationDC_Customer2Organisation.MapToNewDCs(employee2Customer.Customer.Customer2OrganisationList));
- if (vertretungsItems != null)
+ var dateTimeCopy = dateTime;
+ var relevantAssistanceTimeEntries = assistanceTimeEntries.Where(entry => IsAbsenceTimeInAssistanceTime(dateTimeCopy, entry, absenceTime));
+
+ foreach (var assistanceTimeEntry in relevantAssistanceTimeEntries)
{
- result.AddRange(vertretungsItems);
+ var vertretungsObjekte = vertretungen.Where(w => w.EmployeeOid.HasValue && w.EmployeeOid.Equals(employee.Oid) && w.CustomerOid.HasValue && w.CustomerOid.Equals(customer.Oid) && w.VertretungsZeitraumVon.Date <= dateTimeCopy && w.VertretungsZeitraumBis.Date >= dateTimeCopy);
+ var lastSubstitutions = DAOFactory.SearchDAO.GetLastSubstitutionItems(employee.Oid.Value, 3);
+ var lastSubstitutionDCs = MapperFactory.VertretungDC_Vertretung.MapToNewDCs(lastSubstitutions);
+ var absenceTimeDC = MapperFactory.AbsenceTimeDC_AbsenceTime.MapToNewDC(absenceTime);
+ var assistanceTimeEntryDC = MapperFactory.ArbeitszeitEintragDC_ArbeitszeitEintrag.MapToNewDC(assistanceTimeEntry);
+
+ var newVertretungsItem = new VertretungsItemDC
+ {
+ Id = Guid.NewGuid(),
+ Datum = dateTime,
+ Absencetime = absenceTimeDC,
+ AssistanceTime = assistanceTimeEntryDC,
+ Employee = employeeDC,
+ EmployeeAddressString = employeeAddressString,
+ LastSubstitutions = lastSubstitutionDCs,
+ Customer = customerDC,
+ CustomerContactInformation = customerContactInformationList,
+ EmployeeContactInformation = employeeContactInformationList,
+ Schools = schools,
+ Bemerkung = absenceTime.Notice
+ };
+
+ AddKrankheitsZeitraumAndMeldungToItem(newVertretungsItem, newVertretungsItem.Absencetime);
+ GetVertretungsstatus(newVertretungsItem, dateTime, absenceTime.Start.Value, customer);
+
+ // Es gibt immer nur ein Vertretungsobjekt
+ var vertretung = vertretungsObjekte.FirstOrDefault();
+
+ if (vertretung?.VertretenderMitarbeiterOid != null)
+ {
+ if (GetIsSubstitutedCompletely(new List{assistanceTimeEntry}, vertretung, dateTime))
+ {
+ var substitutionEmployee = DAOFactory.GenericDAO.LoadByID(vertretung.VertretenderMitarbeiterOid.Value);
+ var substitutionEmployeeDC = MapperFactory.CompactEmployeeDC_Employee.MapToNewDC(substitutionEmployee);
+
+ newVertretungsItem.Vertreter = substitutionEmployeeDC;
+
+ newVertretungsItem.VertreterInfoString = GetEmployeeAddressInfo(vertretung.VertretenderMitarbeiterOid.Value);
+
+ newVertretungsItem.Vertretung = MapperFactory.VertretungDC_Vertretung.MapToNewDC(vertretung);
+ newVertretungsItem.Bemerkung = vertretung.Notice;
+
+ newVertretungsItem.VertretungsStatus = VertretungsStatus.MaKrankVertretungVorhanden;
+ }
+ }
+
+ SetSubstitutionColor(newVertretungsItem);
+
+ SetSBDInformation(newVertretungsItem, customer, employee, true);
+
+ SetTeamleitung(employee, newVertretungsItem);
+
+ employeeVertretungsItems.Add(newVertretungsItem);
}
}
+
+ dateTime = dateTime.AddDays(1);
}
}
}
- else if (absenceTime.CustomerOid.HasValue) // Abwesenheit Klient
- {
- var customer = DAOFactory.GenericDAO.GetActiveByIDs(new List{ absenceTime.CustomerOid.Value }).FirstOrDefault();
- if(customer == null || !customer.Arbeitszeiten.Any() && !customer.Employee2CustomerList.Any())
- {
- continue;
- }
-
- MigriereSubstitutionStatus(customer);
-
- var addEmpty = true;
-
- foreach (var employee2Customer in customer.Employee2CustomerList.Where(e2c => e2c.Employee.IsActive == ActivationTypeId.Active))
- {
- foreach (var valueListEntry2Object in employee2Customer.ValueList)
- {
- if (valueListEntry2Object.Entry.Type == ValueListEntryType.StaffRoleType) // Nur Hauptbetreuer?
- {
- var substitutions = vertretungen.Where(vertretung => vertretung.CustomerOid.HasValue && vertretung.CustomerOid == customer.Oid).ToList();
- var items = ErstelleVertretungsItemsForAbsenceEmployee(absenceTime, employee2Customer.Employee, customer, substitutions, start, end, customerContactInformation[customer.Oid.Value], MapperFactory.ContactDC_Contact.MapToNewDCs(employee2Customer.Employee.Person.Contacts), MapperFactory.CustomerOrganisationRelationDC_Customer2Organisation.MapToNewDCs(customer.Customer2OrganisationList));
-
- addEmpty = false;
- result.AddRange(items);
- }
- }
- }
-
- if (addEmpty)
- {
- // TODO: Schulen hinzufügen bzw. filtern -> Rolle ist Schule
- var items = ErstelleVertretungsItemsForAbsenceEmployee(absenceTime, null, customer, null, start, end, customerContactInformation[customer.Oid.Value], null, MapperFactory.CustomerOrganisationRelationDC_Customer2Organisation.MapToNewDCs(customer.Customer2OrganisationList)).ToList();
-
- result.AddRange(items);
- }
- }
}
+ // Klientenabwesenheiten
+ foreach (var absenceTime in customerAbsenceTimes)
+ {
+ var customer = customers.FirstOrDefault(first => first.Oid.HasValue && first.Oid.Equals(absenceTime.CustomerOid)) ?? DAOFactory.GenericDAO.LoadByID(absenceTime.CustomerOid.Value);
+ var absenceTimeDC = MapperFactory.AbsenceTimeDC_AbsenceTime.MapToNewDC(absenceTime);
+ var customerDC = MapperFactory.CompactCustomerDC_Customer.MapToNewDC(customer);
+ var customerContactInformationList = LoadContactInformationForEntity(customer.Oid.Value);
+ var schools = MapperFactory.CustomerOrganisationRelationDC_Customer2Organisation.MapToNewDCs(customer.Customer2OrganisationList.Where(customer2Organisation => customer2Organisation.ValueList.Any(b => b.Entry.Type == ValueListEntryType.EnvironmentOrganisationType && b.Entry.Value.Equals("Schule"))));
+
+ MigriereSubstitutionStatus(customer);
+
+ var hasCaregiver = customer.Employee2CustomerList.Any(a => a.ValueList.Any(b => b.Entry.Type.Equals(ValueListEntryType.StaffRoleType) && !b.Entry.Value.Equals("ehemalige Betreuung")));
+ if (hasCaregiver)
+ {
+ foreach (var employee2Customer in customer.Employee2CustomerList.Where(e2C => e2C.Employee.IsActive == ActivationTypeId.Active))
+ {
+ var employee = employee2Customer.Employee;
+ var employeeDC = MapperFactory.CompactEmployeeDC_Employee.MapToNewDC(employee);
+ var employeeAddressString = GetEmployeeAddressInfo(employee.Oid.Value);
+ var employeeContactInformationList = LoadContactInformationForEntity(employee.Oid.Value);
+
+ var assistanceTimeEntries = GetAssistanceTimesForCustomer(customer, employee, absenceTime, start, end);
+
+ foreach (var valueListEntry2Object in employee2Customer.ValueList.Where(w => w.Entry.Type.Equals(ValueListEntryType.StaffRoleType) && !w.Entry.Value.Equals("ehemalige Betreuung")))
+ {
+ var dateTime = start;
+ while (dateTime <= end)
+ {
+ if (LiegtImZeitraum(dateTime, absenceTime))
+ {
+ var dateTimeCopy = dateTime;
+ var relevantAssistanceTimeEntries = assistanceTimeEntries.Where(entry => IsAbsenceTimeInAssistanceTime(dateTime, entry, absenceTime)).ToList();
+ var vertretungsObjekte = vertretungen.Where(w => w.EmployeeOid.HasValue && w.EmployeeOid.Equals(employee.Oid) && w.CustomerOid.HasValue && w.CustomerOid.Equals(customer.Oid) && w.VertretungsZeitraumVon.Date <= dateTimeCopy && w.VertretungsZeitraumBis.Date >= dateTimeCopy);
+ var lastSubstitutions = DAOFactory.SearchDAO.GetLastSubstitutionItems(employee.Oid.Value, 3);
+ var lastSubstitutionDCs = MapperFactory.VertretungDC_Vertretung.MapToNewDCs(lastSubstitutions);
+ var assistanceTimeEntryDCs = MapperFactory.ArbeitszeitEintragDC_ArbeitszeitEintrag.MapToNewDCs(relevantAssistanceTimeEntries);
+
+ // TODO: Hat die vertretungsItemListe Objekte mit dem Klienten im selben Zeitfenster?
+ foreach (var employeeVertretungsItem in employeeVertretungsItems.Where(w => w.Customer.Equals(customerDC)))
+ {
+ if (employeeVertretungsItem.Datum == dateTime)
+ {
+ if (IsAbsenceTimeInAssistanceTime(dateTime, employeeVertretungsItem.AssistanceTime, absenceTime))
+ {
+ employeeVertretungsItemsGuids2Ignore.AddIfNotIn(employeeVertretungsItem.Id);
+ }
+ }
+ }
+
+ var newVertretungsItem = new VertretungsItemDC
+ {
+ Id = Guid.NewGuid(),
+ Datum = dateTime,
+ Absencetime = absenceTimeDC,
+ Arbeitszeiten = assistanceTimeEntryDCs,
+ Employee = employeeDC,
+ EmployeeAddressString = employeeAddressString,
+ LastSubstitutions = lastSubstitutionDCs,
+ Customer = customerDC,
+ CustomerContactInformation = customerContactInformationList,
+ EmployeeContactInformation = employeeContactInformationList,
+ Schools = schools,
+ VertretungsStatus = VertretungsStatus.KlientKrank,
+ Bemerkung = absenceTime.Notice
+ };
+
+ AddKrankheitsZeitraumAndMeldungToItem(newVertretungsItem, newVertretungsItem.Absencetime);
+
+ var vertretung = vertretungsObjekte.FirstOrDefault();
+
+ if (vertretung?.VertretenderMitarbeiterOid != null)
+ {
+ if (GetIsSubstitutedCompletely(relevantAssistanceTimeEntries, vertretung, dateTime))
+ {
+ var substitutionEmployee = DAOFactory.GenericDAO.LoadByID(vertretung.VertretenderMitarbeiterOid.Value);
+ var substitutionEmployeeDC = MapperFactory.CompactEmployeeDC_Employee.MapToNewDC(substitutionEmployee);
+
+ newVertretungsItem.Vertreter = substitutionEmployeeDC;
+
+ newVertretungsItem.VertreterInfoString = GetEmployeeAddressInfo(vertretung.VertretenderMitarbeiterOid.Value);
+
+ newVertretungsItem.Vertretung = MapperFactory.VertretungDC_Vertretung.MapToNewDC(vertretung);
+ newVertretungsItem.Bemerkung = vertretung.Notice;
+
+ newVertretungsItem.VertretungsStatus = VertretungsStatus.MaKrankVertretungVorhanden;
+ }
+ }
+
+ SetSubstitutionColor(newVertretungsItem);
+
+ SetSBDInformation(newVertretungsItem, customer, employee, false);
+
+ SetTeamleitung(employee, newVertretungsItem);
+
+ customerVertretungsItems.Add(newVertretungsItem);
+ }
+
+ dateTime = dateTime.AddDays(1);
+ }
+ }
+ }
+ }
+ else // Kein Betreuer, also auch keine Vertretungen
+ {
+ var assistanceTimeEntries = GetAssistanceTimesForCustomer(customer, null, absenceTime, start, end);
+
+ var dateTime = start;
+ while (dateTime <= end)
+ {
+ if (LiegtImZeitraum(dateTime, absenceTime))
+ {
+ var relevantAssistanceTimeEntries = assistanceTimeEntries.Where(entry => IsAbsenceTimeInAssistanceTime(dateTime, entry, absenceTime)).ToList();
+ var assistanceTimeEntryDCs = MapperFactory.ArbeitszeitEintragDC_ArbeitszeitEintrag.MapToNewDCs(relevantAssistanceTimeEntries);
+
+ var newVertretungsItem = new VertretungsItemDC
+ {
+ Id = Guid.NewGuid(),
+ Datum = dateTime,
+ Absencetime = absenceTimeDC,
+ Arbeitszeiten = assistanceTimeEntryDCs,
+ Customer = customerDC,
+ CustomerContactInformation = customerContactInformationList,
+ Schools = schools,
+ VertretungsStatus = VertretungsStatus.KlientKrank,
+ Bemerkung = absenceTime.Notice
+ };
+
+ SetzeSchule(newVertretungsItem, customer);
+
+ AddKrankheitsZeitraumAndMeldungToItem(newVertretungsItem, absenceTimeDC);
+
+ SetSubstitutionColor(newVertretungsItem);
+
+ SetSBDInformation(newVertretungsItem, customer, null, false);
+
+ customerVertretungsItems.Add(newVertretungsItem);
+ }
+
+ dateTime = dateTime.AddDays(1);
+ }
+ }
+ }
+
+ vertretungsItems.AddRange(employeeVertretungsItems.Where(vertretungsItem => !employeeVertretungsItemsGuids2Ignore.Contains(vertretungsItem.Id)));
+ vertretungsItems.AddRange(customerVertretungsItems);
+
+ SetSubstitutingEmployee2CustomersRelation(vertretungsItems);
+
+ return vertretungsItems;
+ }
+
+ public List CreateVertretungsListe(DateTime start, DateTime end)
+ {
+ return CreateSubstitutions(start, end);
+ }
+
+ private static void SetSubstitutingEmployee2CustomersRelation(IEnumerable vertretungsItems)
+ {
var vertreterZuKlient = new Dictionary();
- foreach (var item in result)
+ foreach (var item in vertretungsItems)
{
//Suche alle Vertreter für Klienten und merke diese
if (item.VertretungsStatus != VertretungsStatus.KlientKrank)
@@ -235,300 +340,65 @@ namespace BeWo.Service.SBD
}
}
}
-
- return result;
}
-
-
- private static IEnumerable ErstelleVertretungsItemsForAbsenceEmployee(AbsenceTime absenceTime, Employee employee, Customer customer, List vertretungen, DateTime start, DateTime end, List customerContactInformation, List employeeContactInformation, List schools)
+ private static void SetSBDInformation(VertretungsItemDC vertretungsItem, Customer customer, Employee employee, bool isEmployeeAbsenceTime)
{
- var vertretungsItems = new List();
- var items2Remove = new List();
+ vertretungsItem.CustomerPflege = customer.Pflege ? "Ja" : "Nein";
+ vertretungsItem.CustomerToilettengang = customer.Toilettengang ? "Ja" : "Nein";
+ vertretungsItem.CustomerAggressivitaet = customer.Aggressiv ? "Ja" : "Nein";
+ vertretungsItem.CustomerHygienebelehrung = customer.Hygienebelehrung ? "Ja" : "Nein";
+ vertretungsItem.CustomerSchutzstufe = customer.Schutzstufe;
- var dateTime = start;
- while (dateTime <= end)
+ vertretungsItem.EmployeePflege = employee == null ? "Nein" : employee.Pflege ? "Ja" : "Nein";
+ vertretungsItem.EmployeeToilettengang = employee == null ? "Nein" : employee.Toilettengang ? "Ja" : "Nein";
+ vertretungsItem.EmployeeAggressivitaet = employee == null ? "Nein" : employee.Aggressiv ? "Ja" : "Nein";
+ vertretungsItem.EmployeeHygienebelehrung = employee == null ? "Nein" : employee.Hygienebelehrung ? "Ja" : "Nein";
+ vertretungsItem.EmployeeSchutzstufe = employee?.Schutzstufe;
+
+ if (isEmployeeAbsenceTime)
{
- if (LiegtImZeitraum(dateTime, absenceTime))
+ vertretungsItem.Pflege = customer.Pflege ? "Ja" : "Nein";
+ vertretungsItem.Toilettengang = customer.Toilettengang ? "Ja" : "Nein";
+ vertretungsItem.Aggressiv = customer.Aggressiv ? "Ja" : "Nein";
+
+ if (customer.Person.Sex.HasValue)
{
- // TODO: Vertretungen erzeugen ein zweites VertretungsItem!
+ vertretungsItem.Geschlecht = Utils.GetSexAbbrevation(customer.Person.Sex);
+ }
+ }
+ else
+ {
+ vertretungsItem.Pflege = employee == null ? "Nein" : employee.Pflege ? "Ja" : "Nein";
+ vertretungsItem.Toilettengang = employee == null ? "Nein" : employee.Toilettengang ? "Ja" : "Nein";
+ vertretungsItem.Aggressiv = employee == null ? "Nein" : employee.Aggressiv ? "Ja" : "Nein";
- var newVertretungsItem = new VertretungsItemDC {Datum = dateTime, Absencetime = MapperFactory.AbsenceTimeDC_AbsenceTime.MapToNewDC(absenceTime), Id = Guid.NewGuid()};
-
- var vertretungsOids = new List();
-
- // Mitarbeiterabwesenheit
- if (employee != null)
- {
- newVertretungsItem.Employee = MapperFactory.CompactEmployeeDC_Employee.MapToNewDC(employee);
-
- newVertretungsItem.EmployeeAddressString = GetEmployeeAddressInfo(employee.Oid.Value);
-
- var lastSubstitutions = DAOFactory.SearchDAO.GetLastSubstitutionItems(employee.Oid.Value, 3);
-
- var lastSubstitutionDCs = MapperFactory.VertretungDC_Vertretung.MapToNewDCs(lastSubstitutions);
-
- newVertretungsItem.LastSubstitutions = lastSubstitutionDCs;
-
- AddArbeitszeitToVertretungsItem(newVertretungsItem, employee, dateTime, customer);
- }
-
- newVertretungsItem.Customer = MapperFactory.CompactCustomerDC_Customer.MapToNewDC(customer);
- SetzeSchule(newVertretungsItem, customer);
-
- newVertretungsItem.CustomerContactInformation = customerContactInformation;
- newVertretungsItem.EmployeeContactInformation = employeeContactInformation;
- newVertretungsItem.Schools = schools;
-
- // Klientenabwesenheit von Klient mit Betreuungszeiten oder mit Schule (Stundenplan)
- if (customer != null && customer.Arbeitszeiten.Any() || customer.Customer2OrganisationList.Any(a => a.ValueList.Any(b => b.Entry.Type == ValueListEntryType.EnvironmentOrganisationType && b.Entry.Value.Equals("Schule"))))
- {
- var betreuungszeiten = customer.Arbeitszeiten.Any() ? MapperFactory.ArbeitszeitDC_Arbeitszeit.MapToNewDCs(customer.Arbeitszeiten) : MapperFactory.ArbeitszeitDC_Arbeitszeit.MapToNewDCs(customer.Customer2OrganisationList.FirstOrDefault().Organisation.Arbeitszeiten.Where(w => w.EmployeeOid == null || w.EmployeeOid.Equals(employee?.Oid))) ?? new List();
-
- var time = dateTime;
- var interval = betreuungszeiten.Where(
- w =>
- {
- if(w.GueltigVon == null && w.GueltigBis == null)
- {
- return true;
- }
-
- if(w.GueltigVon.HasValue && w.GueltigBis.HasValue)
- {
- return time.InBetween(w.GueltigVon.Value, w.GueltigBis.Value, true);
- }
-
- if(w.GueltigVon == null && w.GueltigBis.HasValue)
- {
- return time <= w.GueltigBis;
- }
-
- if(w.GueltigBis == null)
- {
- return time >= w.GueltigVon;
- }
-
- return false;
- }).ToList();
-
- var assistanceTimeEntries = new List();
-
- foreach(var item in interval)
- {
- assistanceTimeEntries.AddRange(item.Eintraege.Where(assistanceTimeEntry => assistanceTimeEntry.DayOfWeek == dateTime.DayOfWeek && Equals(assistanceTimeEntry.Employee?.EmployeeOid, employee?.Oid) || assistanceTimeEntry.Employee == null));
- }
-
- if(assistanceTimeEntries.Any())
- {
- newVertretungsItem.Arbeitszeiten = assistanceTimeEntries;
- }
- }
-
- if (absenceTime.EmployeeOid.HasValue && absenceTime.Start.HasValue && newVertretungsItem.Arbeitszeiten != null)
- {
- var assistanceTimes = newVertretungsItem.Arbeitszeiten.Where(w => employee?.Oid == w.Employee?.EmployeeOid);
-
- var blubb = assistanceTimes.Any(a =>
- {
- var assistanceTimeDates = Utils.GetAssistanceTimeComparisonDateTime(a.UhrzeitVon, a.UhrzeitBis, dateTime);
-
- var absenceTimeEnd = absenceTime.End;
-
- if (absenceTimeEnd.HasValue && absenceTime.Start.Value.Equals(absenceTimeEnd.Value))
- {
- absenceTimeEnd = absenceTimeEnd.Value.AddHours(23).AddMinutes(59).AddSeconds(59);
- }
-
- return assistanceTimeDates.Start.IsIntervalInAbsenceTimeInterval(assistanceTimeDates.End, absenceTime.Start.Value, absenceTimeEnd);
- });
-
- if (!blubb)
- {
- items2Remove.Add(newVertretungsItem.Id);
- }
- }
-
- AddKrankheitsZeitraumAndMeldungToItem(newVertretungsItem, newVertretungsItem.Absencetime);
-
- if (absenceTime.CustomerOid.HasValue)
- {
- newVertretungsItem.VertretungsStatus = VertretungsStatus.KlientKrank;
-
- // Migriere alten Vertretungsstatus auf neuen enum, sonst wirds im Klient in der falschen Liste angezeigt
- }
- else
- {
- GetVertretungsstatus(newVertretungsItem, dateTime, absenceTime.Start.Value, customer);
- }
-
- if (vertretungen != null)
- {
- foreach (var vertretung in vertretungen)
- {
- if (vertretung.EmployeeOid != null && vertretung.CustomerOid != null && vertretung.EmployeeOid == employee.Oid && vertretung.CustomerOid == customer.Oid)
- {
- if (vertretung.VertretungsZeitraumVon.Date <= dateTime && vertretung.VertretungsZeitraumBis.Date >= dateTime)
- {
- if (vertretung.VertretenderMitarbeiterOid.HasValue)
- {
- newVertretungsItem.Vertreter = MapperFactory.CompactEmployeeDC_Employee.MapToNewDC(DAOFactory.GenericDAO.LoadByID(vertretung.VertretenderMitarbeiterOid.Value));
-
- newVertretungsItem.VertreterInfoString = GetEmployeeAddressInfo(vertretung.VertretenderMitarbeiterOid.Value);
-
- // Beachten, dass alle Betreuungszeiten vertreten sind!
- // TODO: Wenn nur ein Teil einer Betreuungszeit vertreten wird, muss das VertretungsItem kopiert werden!
- // TODO: Mitarbeiterarbeitszeiten berücksichtigen!
- var arbeitsZeiten = customer.Arbeitszeiten.Where(w => dateTime.InBetween(w.GueltigVon, w.GueltigBis)).ToList();
- arbeitsZeiten.AddRange(employee.Arbeitszeiten.Where(w => dateTime.InBetween(w.GueltigVon, w.GueltigBis) && w.Customer != null && w.Customer.Equals(customer)));
- var possibleAssistanceTimes = new List();
- foreach(var item in arbeitsZeiten)
- {
- if(dateTime.InBetween(item.GueltigVon, item.GueltigBis))
- {
- possibleAssistanceTimes.AddRangeIfElementsNotIn(item.ArbeitszeitEintraege.Where(w => DateTimeUtils.ConvertAppointmentDayOfWeekToDayOfWeek(w.Tag).Equals(dateTime.DayOfWeek)));
- }
- }
-
- if(GetIsSubstitutedCompletely(possibleAssistanceTimes, vertretung, dateTime, absenceTime))
- {
- newVertretungsItem.VertretungsStatus = VertretungsStatus.MaKrankVertretungVorhanden;
- }
- else if(vertretung.Oid.HasValue)
- {
- // Oid speichern und am Ende die Vertretung kopieren
- vertretungsOids.AddIfNotIn(vertretung.Oid.Value);
- }
- }
-
- newVertretungsItem.Vertretung = MapperFactory.VertretungDC_Vertretung.MapToNewDC(vertretung);
-
- newVertretungsItem.Bemerkung = newVertretungsItem.Vertretung.Notice;
- }
- }
- }
- }
-
- switch (newVertretungsItem.VertretungsStatus)
- {
- case VertretungsStatus.MaKrankVertretungBenoetigt:
- newVertretungsItem.KlientStatusColor = "#FF0000";
- break;
- case VertretungsStatus.MaKrankKeineVertretungBenoetigt:
- newVertretungsItem.KlientStatusColor = "#7FFF7F";
- break;
- case VertretungsStatus.MaKrankVertretungVorhanden:
- newVertretungsItem.KlientStatusColor = "#7FFF7F";
- break;
- case VertretungsStatus.KlientKrank:
- newVertretungsItem.KlientStatusColor = "#FFFFA5";
- break;
- }
-
- newVertretungsItem.CustomerPflege = customer.Pflege ? "Ja" : "Nein";
- newVertretungsItem.CustomerToilettengang = customer.Toilettengang ? "Ja" : "Nein";
- newVertretungsItem.CustomerAggressivitaet = customer.Aggressiv ? "Ja" : "Nein";
- newVertretungsItem.CustomerHygienebelehrung = customer.Hygienebelehrung ? "Ja" : "Nein";
- newVertretungsItem.CustomerSchutzstufe = customer.Schutzstufe;
-
- newVertretungsItem.EmployeePflege = employee == null ? "Nein" : employee.Pflege ? "Ja" : "Nein";
- newVertretungsItem.EmployeeToilettengang = employee == null ? "Nein" : employee.Toilettengang ? "Ja" : "Nein";
- newVertretungsItem.EmployeeAggressivitaet = employee == null ? "Nein" : employee.Aggressiv ? "Ja" : "Nein";
- newVertretungsItem.EmployeeHygienebelehrung = employee == null ? "Nein" : employee.Hygienebelehrung ? "Ja" : "Nein";
- newVertretungsItem.EmployeeSchutzstufe = employee?.Schutzstufe;
-
- if (absenceTime.EmployeeOid.HasValue) // Mitarbeiter krank
- {
- newVertretungsItem.Pflege = customer.Pflege ? "Ja" : "Nein";
- newVertretungsItem.Toilettengang = customer.Toilettengang ? "Ja" : "Nein";
- newVertretungsItem.Aggressiv = customer.Aggressiv ? "Ja" : "Nein";
-
- if (customer.Person.Sex.HasValue)
- {
- newVertretungsItem.Geschlecht = customer.Person.Sex.Value == Sex.Male ? "m" : "w";
- }
- }
- else if (absenceTime.CustomerOid.HasValue && employee != null) // Klient krank
- {
- newVertretungsItem.Pflege = employee.Pflege ? "Ja" : "Nein";
- newVertretungsItem.Toilettengang = employee.Toilettengang ? "Ja" : "Nein";
- newVertretungsItem.Aggressiv = employee.Aggressiv ? "Ja" : "Nein";
-
- if (employee.Person.Sex.HasValue)
- {
- newVertretungsItem.Geschlecht = employee.Person.Sex.Value == Sex.Male ? "m" : "w";
- }
-
- newVertretungsItem.MitarbeiterEinsatzBei = "???";
- }
-
- if (employee != null)
- {
- SetTeamleitung(employee, newVertretungsItem);
- }
-
- foreach(var substitutionOid in vertretungsOids)
- {
- var copy = new VertretungsItemDC
- {
- Datum = newVertretungsItem.Datum,
- Arbeitszeiten = newVertretungsItem.Arbeitszeiten,
- Customer = newVertretungsItem.Customer,
- Employee = newVertretungsItem.Employee,
- Schule = newVertretungsItem.Schule,
- Dringlichkeit = newVertretungsItem.Dringlichkeit,
- DringlichkeitColor = newVertretungsItem.DringlichkeitColor,
- Teamleitung = newVertretungsItem.Teamleitung,
- Geschlecht = newVertretungsItem.Geschlecht,
- Pflege = newVertretungsItem.Pflege,
- Toilettengang = newVertretungsItem.Toilettengang,
- MitarbeiterEinsatzBei = newVertretungsItem.MitarbeiterEinsatzBei,
- Aggressiv = newVertretungsItem.Aggressiv,
- MitarbeiterStatusColor = newVertretungsItem.MitarbeiterStatusColor,
- KlientStatusColor = newVertretungsItem.KlientStatusColor,
- Krankheitszeitraum = newVertretungsItem.Krankheitszeitraum,
- VertretungsStatus = newVertretungsItem.VertretungsStatus
- };
-
- copy.Krankheitszeitraum = newVertretungsItem.Krankheitszeitraum;
- copy.Absencetime = newVertretungsItem.Absencetime;
-
- copy.EmployeeContactInformation = newVertretungsItem.EmployeeContactInformation;
- copy.Schools = newVertretungsItem.Schools;
- copy.LastSubstitutions = newVertretungsItem.LastSubstitutions;
-
- copy.EmployeePflege = newVertretungsItem.EmployeePflege;
- copy.EmployeeAggressivitaet = newVertretungsItem.EmployeeAggressivitaet;
- copy.EmployeeHygienebelehrung = newVertretungsItem.EmployeeHygienebelehrung;
- copy.EmployeeSchutzstufe = newVertretungsItem.EmployeeSchutzstufe;
- copy.EmployeeToilettengang = newVertretungsItem.EmployeeToilettengang;
-
- copy.CustomerAggressivitaet = newVertretungsItem.CustomerAggressivitaet;
- copy.CustomerContactInformation = newVertretungsItem.CustomerContactInformation;
- copy.CustomerHygienebelehrung = newVertretungsItem.CustomerHygienebelehrung;
- copy.CustomerPflege = newVertretungsItem.CustomerPflege;
- copy.CustomerSchutzstufe = newVertretungsItem.CustomerSchutzstufe;
-
- copy.Arbeitszeiten = newVertretungsItem.Arbeitszeiten;
- copy.CustomerToilettengang = newVertretungsItem.CustomerToilettengang;
- copy.Schools = newVertretungsItem.Schools;
- copy.Schule = newVertretungsItem.Schule;
-
- GetVertretungsstatus(copy, copy.Datum, copy.Absencetime.Start.Value, DAOFactory.GenericDAO.LoadByID(copy.Customer.Oid.Value));
-
- vertretungsItems.AddIfNotIn(copy);
- }
-
- if (!items2Remove.Contains(newVertretungsItem.Id))
- {
- vertretungsItems.Add(newVertretungsItem);
- }
+ if (employee?.Person.Sex != null)
+ {
+ vertretungsItem.Geschlecht = Utils.GetSexAbbrevation(employee.Person.Sex);
}
- dateTime = dateTime.AddDays(1);
+ vertretungsItem.MitarbeiterEinsatzBei = "???";
}
+ }
- return vertretungsItems;
+ private static void SetSubstitutionColor(VertretungsItemDC vertretungsItem)
+ {
+ switch (vertretungsItem.VertretungsStatus)
+ {
+ case VertretungsStatus.MaKrankVertretungBenoetigt:
+ vertretungsItem.KlientStatusColor = "#FF0000"; // Rot
+ break;
+ case VertretungsStatus.MaKrankKeineVertretungBenoetigt:
+ vertretungsItem.KlientStatusColor = "#7FFF7F"; // Grün
+ break;
+ case VertretungsStatus.MaKrankVertretungVorhanden:
+ vertretungsItem.KlientStatusColor = "#7FFF7F"; // Grün
+ break;
+ case VertretungsStatus.KlientKrank:
+ vertretungsItem.KlientStatusColor = "#FFFFA5"; // Gelb
+ break;
+ }
}
private static void MigriereSubstitutionStatus(Customer customer)
@@ -664,49 +534,13 @@ namespace BeWo.Service.SBD
}
}
- private static void AddArbeitszeitToVertretungsItem(VertretungsItemDC vertretungsItem, Employee employee, DateTime datum, Customer customer)
- {
- var shouldAddArbeitszeit = false;
-
- foreach (var arbeitszeit in employee.Arbeitszeiten)
- {
- if (!arbeitszeit.GueltigVon.HasValue && !arbeitszeit.GueltigBis.HasValue)
- {
- shouldAddArbeitszeit = true;
- }
- else
- {
- if ((!arbeitszeit.GueltigVon.HasValue || arbeitszeit.GueltigVon.Value <= datum) && (!arbeitszeit.GueltigBis.HasValue || arbeitszeit.GueltigBis.Value >= datum))
- {
- shouldAddArbeitszeit = true;
- }
- }
-
- if (shouldAddArbeitszeit)
- {
- foreach (var eintrag in arbeitszeit.ArbeitszeitEintraege)
- {
- if ((int)datum.DayOfWeek == (int)eintrag.Tag + 1)
- {
- if (vertretungsItem.Arbeitszeiten == null)
- {
- vertretungsItem.Arbeitszeiten = new List();
- }
-
- vertretungsItem.Arbeitszeiten.Add(MapperFactory.ArbeitszeitEintragDC_ArbeitszeitEintrag.MapToNewDC(eintrag));
- }
- }
- }
- }
- }
-
- private static bool GetIsSubstitutedCompletely(IEnumerable assistanceTimes, Vertretung substitution, DateTime dateTime, AbsenceTime absenceTime)
+ private static bool GetIsSubstitutedCompletely(IEnumerable assistanceTimes, Vertretung substitution, DateTime dateTime)
{
var isSubstituted = true;
foreach(var assistanceTime in assistanceTimes)
{
- var assistanceDateTimes = Utils.GetAssistanceTimeComparisonDateTime(assistanceTime.UhrzeitVon, assistanceTime.UhrzeitBis, dateTime);
+ var assistanceDateTimes = DateTimeUtils.GetAssistanceTimeComparisonDateTime(assistanceTime.UhrzeitVon, assistanceTime.UhrzeitBis, dateTime);
if (substitution.VertretungsZeitraumBis.Hour == 0 && substitution.VertretungsZeitraumBis.Minute == 0)
{
substitution.VertretungsZeitraumBis = substitution.VertretungsZeitraumBis.AddDays(1).AddTicks(-1);
@@ -731,23 +565,23 @@ namespace BeWo.Service.SBD
{
vertretungsItem.VertretungsStatus = VertretungsStatus.MaKrankVertretungBenoetigt;
vertretungsItem.Dringlichkeit = "Dringend";
- vertretungsItem.DringlichkeitColor = "#FF0000";
+ vertretungsItem.DringlichkeitColor = "#FF0000"; // rot
}
if (customer.SubstitutionNeed == SubstitutionNeed.SubstitutionWanted && customer.SubstitutionNeed != SubstitutionNeed.SubstitutionNeeded)
{
vertretungsItem.Dringlichkeit = "Möglichst";
- vertretungsItem.DringlichkeitColor = "#F3D04F";
+ vertretungsItem.DringlichkeitColor = "#F3D04F"; // Senfgelb
}
if (customer.AbWelchemKrankheitsTag > 1 && dateTime < absenceTimeStartDate.AddDays(customer.AbWelchemKrankheitsTag - 1))
{
vertretungsItem.VertretungsStatus = VertretungsStatus.MaKrankKeineVertretungBenoetigt;
vertretungsItem.Dringlichkeit = $"Vertretung erst ab dem {customer.AbWelchemKrankheitsTag}.Tag benötigt";
- vertretungsItem.DringlichkeitColor = "#FFFFFF";
+ vertretungsItem.DringlichkeitColor = "#FFFFFF"; // weiß
}
- if (customer.AbWelchemKrankheitsTag == 0 && customer.SubstitutionNeed == SubstitutionNeed.SubstitutionWanted == false && customer.SubstitutionNeed == SubstitutionNeed.SubstitutionNeeded == false)
+ if (customer.AbWelchemKrankheitsTag == 1 && customer.SubstitutionNeed != SubstitutionNeed.SubstitutionWanted && customer.SubstitutionNeed != SubstitutionNeed.SubstitutionNeeded)
{
vertretungsItem.VertretungsStatus = VertretungsStatus.MaKrankKeineVertretungBenoetigt;
}
@@ -803,18 +637,118 @@ namespace BeWo.Service.SBD
return result;
}
- private static bool IsAbsenceTimeInAssistanceTime(DateTime currentDate, ArbeitszeitEintragDC assistanceTime, AbsenceTime absenceTime)
+ private static bool IsAbsenceTimeInAssistanceTime(DateTime currentDate, ArbeitszeitEintrag assistanceTime, AbsenceTime absenceTime)
{
- if (currentDate.DayOfWeek != assistanceTime.DayOfWeek)
+ if (currentDate.DayOfWeek != DateTimeUtils.ConvertAppointmentDayOfWeekToDayOfWeek(assistanceTime.Tag) || absenceTime.Start == null)
{
return false;
}
- var assistanceDateTimes = Utils.GetAssistanceTimeComparisonDateTime(assistanceTime.UhrzeitVon, assistanceTime.UhrzeitBis, currentDate);
+ var assistanceTimeDates = DateTimeUtils.GetAssistanceTimeComparisonDateTime(assistanceTime.UhrzeitVon, assistanceTime.UhrzeitBis, currentDate);
- var isInbetween = currentDate.InBetween(assistanceDateTimes.Start, assistanceDateTimes.End);
+ var absenceTimeEnd = absenceTime.End;
- return isInbetween;
+ if (absenceTimeEnd.HasValue && absenceTime.Start.Value.Equals(absenceTimeEnd.Value))
+ {
+ absenceTimeEnd = absenceTimeEnd.Value.AddHours(23).AddMinutes(59).AddSeconds(59);
+ }
+
+ return assistanceTimeDates.Start.IsIntervalOverlappingWithAbsenceTimeInterval(assistanceTimeDates.End, absenceTime.Start.Value, absenceTimeEnd);
+ }
+
+ private static bool IsAbsenceTimeInAssistanceTime(DateTime currentDate, ArbeitszeitEintragDC assistanceTime, AbsenceTime absenceTime)
+ {
+ if (currentDate.DayOfWeek != DateTimeUtils.ConvertAppointmentDayOfWeekToDayOfWeek(assistanceTime.Tag) || absenceTime.Start == null)
+ {
+ return false;
+ }
+
+ var assistanceTimeDates = DateTimeUtils.GetAssistanceTimeComparisonDateTime(assistanceTime.UhrzeitVon, assistanceTime.UhrzeitBis, currentDate);
+
+ var absenceTimeEnd = absenceTime.End;
+
+ if (absenceTimeEnd.HasValue && absenceTime.Start.Value.Equals(absenceTimeEnd.Value))
+ {
+ absenceTimeEnd = absenceTimeEnd.Value.AddHours(23).AddMinutes(59).AddSeconds(59);
+ }
+
+ return assistanceTimeDates.Start.IsIntervalOverlappingWithAbsenceTimeInterval(assistanceTimeDates.End, absenceTime.Start.Value, absenceTimeEnd);
+ }
+
+ private static List GetAssistanceTimesForCustomer(Customer customer, Employee employee, AbsenceTime absenceTime, DateTime start, DateTime end)
+ {
+ var assistanceTimeEntries = new List();
+
+ var allSchoolAssistanceTimes = new List();
+ var allCustomerAssistanceTimes = new List();
+
+ var schoolAssistanceTimes = new List();
+ var customerAssistanceTimes = new List();
+
+ var hasSchoolAssistanceTimes = customer.Customer2OrganisationList.Any(a => a.ValueList.Any(b => b.Entry.Type == ValueListEntryType.EnvironmentOrganisationType && b.Entry.Value.Equals("Schule")));
+ if (hasSchoolAssistanceTimes)
+ {
+ var school = customer.Customer2OrganisationList.FirstOrDefault(f => f.ValueList.Any(b => b.Entry.Type == ValueListEntryType.EnvironmentOrganisationType && b.Entry.Value.Equals("Schule")));
+ if (school != null)
+ {
+ allSchoolAssistanceTimes.AddRange(school.Organisation.Arbeitszeiten);
+ }
+ }
+
+ var hasAssistanceTimes = customer.Arbeitszeiten?.Count > 0;
+ if (hasAssistanceTimes)
+ {
+ allCustomerAssistanceTimes.AddRange(customer.Arbeitszeiten);
+ }
+
+ var dateTime = start;
+ while (dateTime <= end)
+ {
+ if (LiegtImZeitraum(dateTime, absenceTime))
+ {
+ customerAssistanceTimes.AddRange(allCustomerAssistanceTimes.Where(w => IsArbeitszeitValid(w, dateTime)));
+
+ schoolAssistanceTimes.AddRange(allSchoolAssistanceTimes.Where(w => IsArbeitszeitValid(w, dateTime)));
+ }
+
+ dateTime = dateTime.AddDays(1);
+ }
+
+ if (customerAssistanceTimes.Count > 0)
+ {
+ customerAssistanceTimes.DoForEach(assistanceTime => assistanceTimeEntries.AddRange(assistanceTime.ArbeitszeitEintraege.Where(entry => entry.Employee == null || entry.Employee.Equals(employee))));
+ }
+ else
+ {
+ schoolAssistanceTimes.DoForEach(assistanceTime => assistanceTimeEntries.AddRange(assistanceTime.ArbeitszeitEintraege.Where(entry => entry.Employee == null || entry.Employee.Equals(employee))));
+ }
+
+ return assistanceTimeEntries;
+ }
+
+ private static bool IsArbeitszeitValid(Arbeitszeit arbeitszeit, DateTime time)
+ {
+ if (arbeitszeit.GueltigVon == null && arbeitszeit.GueltigBis == null)
+ {
+ return true;
+ }
+
+ if (arbeitszeit.GueltigVon.HasValue && arbeitszeit.GueltigBis.HasValue)
+ {
+ return time.InBetween(arbeitszeit.GueltigVon.Value, arbeitszeit.GueltigBis.Value, true);
+ }
+
+ if (arbeitszeit.GueltigVon == null && arbeitszeit.GueltigBis.HasValue)
+ {
+ return time <= arbeitszeit.GueltigBis;
+ }
+
+ if (arbeitszeit.GueltigBis == null)
+ {
+ return time >= arbeitszeit.GueltigVon;
+ }
+
+ return false;
}
}
}
diff --git a/Shared/Core/DateTimeUtils.cs b/Shared/Core/DateTimeUtils.cs
index 41603a7b6..b5f8a4453 100644
--- a/Shared/Core/DateTimeUtils.cs
+++ b/Shared/Core/DateTimeUtils.cs
@@ -1,4 +1,5 @@
using System;
+using BS.Shared.Extensions;
using DevExpress.XtraScheduler;
namespace BS.Shared.Core
@@ -168,6 +169,21 @@ namespace BS.Shared.Core
{
return (DayOfWeek) (((int) appointmentDayOfWeek + 1) % 7);
}
+
+ public static ArbeitszeitEintragDateTimeObject GetAssistanceTimeComparisonDateTime(string uhrzeitVon, string uhrzeitBis, DateTime date)
+ {
+ var day = date.GetShortDateTime();
+
+ var isStartSuccessfullyParsed = DateTime.TryParse($"{day:dd.MM.yyyy} {uhrzeitVon}", out var start);
+ var isEndSuccessfullyParsed = DateTime.TryParse($"{day:dd.MM.yyyy} {uhrzeitBis}", out var end);
+
+ if (isStartSuccessfullyParsed && isEndSuccessfullyParsed)
+ {
+ return new ArbeitszeitEintragDateTimeObject(start, end);
+ }
+
+ return new ArbeitszeitEintragDateTimeObject(start, end);
+ }
}
public class AnzahlMonate
diff --git a/Shared/Core/Utils.cs b/Shared/Core/Utils.cs
index 51c20bf95..7a9d55cd9 100644
--- a/Shared/Core/Utils.cs
+++ b/Shared/Core/Utils.cs
@@ -903,26 +903,42 @@ namespace BS.Shared.Core
public static readonly string TestAppointmentNotice = "k9Rx2mU4y";
- public static ArbeitszeitEintragDateTimeObject GetAssistanceTimeComparisonDateTime(string uhrzeitVon, string uhrzeitBis, DateTime date)
+ public static string GetSexAbbrevation(Sex? sex)
{
- var day = date.GetShortDateTime();
-
- var isStartSuccessfullyParsed = DateTime.TryParse($"{day:dd.MM.yyyy} {uhrzeitVon}", out var start);
- var isEndSuccessfullyParsed = DateTime.TryParse($"{day:dd.MM.yyyy} {uhrzeitBis}", out var end);
-
- if (isStartSuccessfullyParsed && isEndSuccessfullyParsed)
+ switch (sex)
{
- return new ArbeitszeitEintragDateTimeObject(start, end);
+ case Sex.Male:
+ return "m";
+ case Sex.Female:
+ return "w";
+ case Sex.Divers:
+ return "d";
+ default:
+ return string.Empty;
}
-
- return new ArbeitszeitEintragDateTimeObject(start, end);
}
- public static bool IsArbeitsZeitInInterval(DateTime intervalStart, DateTime intervalEnd, ArbeitszeitDC arbeitszeit)
+ public static string GetSexTranslation(Sex? sex, bool lowerCase = false)
{
-
+ string result;
- return false;
+ switch (sex)
+ {
+ case Sex.Male:
+ result = "Männlich";
+ break;
+ case Sex.Female:
+ result = "Weiblich";
+ break;
+ case Sex.Divers:
+ result = "Divers";
+ break;
+ default:
+ result = string.Empty;
+ break;
+ }
+
+ return lowerCase ? result.ToLowerInvariant() : result;
}
}
diff --git a/Shared/DataContracts/ArbeitszeitEintragDC.cs b/Shared/DataContracts/ArbeitszeitEintragDC.cs
index 339a3beff..df49dbb82 100644
--- a/Shared/DataContracts/ArbeitszeitEintragDC.cs
+++ b/Shared/DataContracts/ArbeitszeitEintragDC.cs
@@ -36,7 +36,6 @@ namespace BS.Shared.DataContracts
{
return $"{UhrzeitVon} - {UhrzeitBis}";
}
-
public DayOfWeek DayOfWeek => Core.DateTimeUtils.ConvertAppointmentDayOfWeekToDayOfWeek(Tag);
[DataMember]
diff --git a/Shared/DataContracts/ClientPartials/VertretungsItemDC.cs b/Shared/DataContracts/ClientPartials/VertretungsItemDC.cs
index 71af956da..9ed4b52d8 100644
--- a/Shared/DataContracts/ClientPartials/VertretungsItemDC.cs
+++ b/Shared/DataContracts/ClientPartials/VertretungsItemDC.cs
@@ -1,4 +1,7 @@
-namespace BS.Shared.DataContracts
+using System.Linq;
+using BS.Shared.Extensions;
+
+namespace BS.Shared.DataContracts
{
public partial class VertretungsItemDC
{
@@ -12,10 +15,82 @@
var areTheSameSubstitution = Vertretung?.Equals(item2.Vertretung) ?? false;
var haveTheSameAbsenceTimes = Absencetime?.Equals(item2.Absencetime) ?? false;
- return (areCustomersEqual || areEmployeesEqual) && areTheSameSubstitution && haveTheSameAbsenceTimes;
+ return (areCustomersEqual || areEmployeesEqual) && areTheSameSubstitution && haveTheSameAbsenceTimes && Equals(Id, item2.Id);
}
return false;
}
+
+ public override string ToString()
+ {
+ var assistanceTimes = string.Empty;
+
+ for(var i = 0; i < Arbeitszeiten.Count; i++)
+ {
+ var at = Arbeitszeiten[i];
+
+ assistanceTimes += $"\t\t{at.UhrzeitVon} - {at.UhrzeitBis}";
+
+ if (i < Arbeitszeiten.Count - 1)
+ {
+ assistanceTimes += ",\n";
+ }
+ }
+
+ var absenceTime = "";
+
+ if (Absencetime.Start.HasValue)
+ {
+ var start = Absencetime.Start.Value;
+ var startStr = string.Empty;
+
+ if (Absencetime.End == null)
+ {
+ if (start.Hour == 0 && start.Minute == 0)
+ {
+ startStr = start.ToShortDateString();
+ }
+ else
+ {
+ startStr = start.ToLongDateString();
+ }
+
+ absenceTime = $"Ab dem {startStr}";
+ }
+ else
+ {
+ var end = Absencetime.End.Value;
+
+ if (end.Date.Equals(start.Date))
+ {
+ if (start.Hour == 0 && start.Minute == 0 && end.Hour == 0 && end.Minute == 0)
+ {
+ absenceTime = $"{start:dd.MM.yyyy}";
+ }
+ else
+ {
+ absenceTime = $"{start:dd.MM.yyyy HH:mm} - {end:HH:mm}";
+ }
+ }
+ else
+ {
+ if (end.Hour == 0 && end.Minute == 0)
+ {
+ absenceTime = $"{start:dd.MM.yyyy HH:mm} - {end:dd.MM.yyyy}";
+ }
+ else
+ {
+ absenceTime = $"{start:dd.MM.yyyy HH:mm} - {end:dd.MM.yyyy HH:mm}";
+ }
+ }
+ }
+ }
+
+ var info =
+ $"{Id} {Datum:dd.MM.yyyy}:\n\t{(VertretungsStatus == VertretungsStatus.KlientKrank ? "Klientenabwesenheit" : "Mitarbeiterabwesenheit")} " +
+ $"\n\tEmployee: {Employee}\n\tCustomer: {Customer} \n\t{absenceTime} \n\t Betreuungszeiten:\n {assistanceTimes}\n\n";
+
+ return info;
+ }
}
}
diff --git a/Shared/DataContracts/VertretungsItemDC.cs b/Shared/DataContracts/VertretungsItemDC.cs
index c2ba34e5c..e19ee3e14 100644
--- a/Shared/DataContracts/VertretungsItemDC.cs
+++ b/Shared/DataContracts/VertretungsItemDC.cs
@@ -127,5 +127,8 @@ namespace BS.Shared.DataContracts
[DataMember]
public Guid Id { get; set; }
+
+ [DataMember]
+ public ArbeitszeitEintragDC AssistanceTime { get; set; }
}
}
\ No newline at end of file
diff --git a/Shared/Extensions/DateTimeExtensions.cs b/Shared/Extensions/DateTimeExtensions.cs
index 7da933258..a4ca96fe3 100644
--- a/Shared/Extensions/DateTimeExtensions.cs
+++ b/Shared/Extensions/DateTimeExtensions.cs
@@ -481,14 +481,17 @@ namespace BS.Shared.Extensions
return start1 >= start2 && end1 <= end2;
}
- public static bool IsIntervalInAbsenceTimeInterval(this DateTime start, DateTime end, DateTime absenceTimeStart, DateTime? absenceTimeEnd)
+ public static bool IsIntervalOverlappingWithAbsenceTimeInterval(this DateTime start, DateTime end, DateTime absenceTimeStart, DateTime? absenceTimeEnd)
{
if (absenceTimeEnd == null)
{
return start >= absenceTimeStart && end >= absenceTimeStart;
}
- return AreInBetweenDates(start, end, absenceTimeStart, absenceTimeEnd.Value);
+ var start2 = absenceTimeStart;
+ var end2 = absenceTimeEnd.Value;
+
+ return !(start >= start2 && start >= end2 || end <= start2 && end <= end2);
}
///