Der Vertretungsalgorithmus wurde überarbeitet und berücksichtigt jetzt die Betreuungszeiten.

"Vertretung ab dem x. Tag" beginnt jetzt bei 1 und nicht mehr bei 0. Ein DB-Skript passt alle Werte mit 0 an -> Changes_2019_12_07 AbWelchemKrankheitsTag UPDATE.txt
This commit is contained in:
Lyndon Jetten
2019-12-07 21:06:03 +01:00
parent cee14cfa09
commit dd96a5b0f7
21 changed files with 666 additions and 686 deletions

View File

@@ -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)
{

View File

@@ -68,7 +68,7 @@
SelectedIndexChanged="SubstitutionNeedComboBox_OnSelectedIndexChanged"/>
<Label Content="Ab welchem Tag?" Margin="3" Grid.Row="1" Grid.Column="0" x:Name="AbWelchemTagLabel" />
<dxe:SpinEdit x:Name="AbWelchemTagCBox" IsFloatValue="False" Increment="1" MinValue="0" Height="23" Margin="3" Grid.Row="1"
<dxe:SpinEdit x:Name="AbWelchemTagCBox" IsFloatValue="False" Increment="1" MinValue="1" Height="23" Margin="3" Grid.Row="1"
Grid.Column="1" AllowNullInput="True" Width="50" HorizontalAlignment="Right" VerticalContentAlignment="Center"
EditValue="{Binding Path=AbWelchemKrankheitsTag, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource Int2DecimalConverter}}" />
</Grid>

View File

@@ -11,10 +11,10 @@ namespace BeWo.SchulbegleitenderDienst
{
public partial class SchulbegleitenderDienstCustomerView
{
private List<CompactTokenDC> tokenlist = new List<CompactTokenDC>();
private List<CompactTokenDC> _TokenList = new List<CompactTokenDC>();
readonly Dictionary<string, CompactTokenDC> verfuegbarerWunschToken = new Dictionary<string, CompactTokenDC>();
readonly Dictionary<string, CompactTokenDC> verfuegbarerAusschlussToken = new Dictionary<string, CompactTokenDC>();
readonly Dictionary<string, CompactTokenDC> _VerfuegbareWunschTokenList = new Dictionary<string, CompactTokenDC>();
readonly Dictionary<string, CompactTokenDC> _VerfuegbareAusschlussTokenList = new Dictionary<string, CompactTokenDC>();
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<string> list = new List<string>();
List<string> valuelist = new List<string>();
var list = new List<string>();
var valuelist = new List<string>();
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<string> list = new List<string>();
List<string> valuelist = new List<string>();
var list = new List<string>();
var valuelist = new List<string>();
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)

View File

@@ -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)

View File

@@ -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; }
}
}

View File

@@ -261,6 +261,7 @@
<RowDefinition Height="33*" />
</Grid.RowDefinitions>
<!-- Abwesende Mitarbeiter -->
<GroupBox Header="{markup:Translate Abwesenheiten Mitarbeiter}" Style="{StaticResource ObjectEditGroupBox}" >
<dxg:GridControl x:Name="GridDataControlTagesansichtMitarbeiter" Visibility="Visible" Margin="5" VerticalContentAlignment="Stretch" ItemsSource="{Binding Path=AbsentEmployeesDayViewList, UpdateSourceTrigger=PropertyChanged}">
<dxg:GridControl.Columns >
@@ -346,12 +347,7 @@
</Style>
</dxg:GridColumn.CellStyle>
</dxg:GridColumn>
<dxg:GridColumn FieldName="FirstAssistanceTimeEntry" Header="Betreuungszeiten" ReadOnly="True">
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<dxe:ComboBoxEdit ItemsSource="{Binding RowData.Row.AssistanceTimes}" Name="PART_Editor" />
</DataTemplate>
</dxg:GridColumn.CellTemplate>
<dxg:GridColumn FieldName="AssistanceTimeEntry" Header="Betreuungszeiten" ReadOnly="True">
</dxg:GridColumn>
<dxg:GridColumn FieldName="Teamleitung" Header="Teamleitung" ReadOnly="True" />
<dxg:GridColumn FieldName="Absencetime.KrankheitsMeldung" Header="Meldung vom" ReadOnly="True" />
@@ -409,6 +405,7 @@
</dxg:GridControl>
</GroupBox>
<!-- Abwesende Klienten -->
<GroupBox Grid.Row="1" Header="{markup:Translate Abwesenheiten Klienten}" Style="{StaticResource ObjectEditGroupBox}" Margin="0,10,0,0">
<dxg:GridControl x:Name="GridDataControlTagesansichtKlient" Visibility="Visible" Margin="5" VerticalContentAlignment="Stretch" ItemsSource="{Binding Path=AbsentCustomersDayViewList, UpdateSourceTrigger=PropertyChanged}">
<dxg:GridControl.Columns>
@@ -428,12 +425,7 @@
</DataTemplate>
</dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
<dxg:GridColumn FieldName="FirstAssistanceTimeEntry" Header="Betreuungszeiten" ReadOnly="False">
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<dxe:ComboBoxEdit ItemsSource="{Binding RowData.Row.AssistanceTimes}" Name="PART_Editor" />
</DataTemplate>
</dxg:GridColumn.CellTemplate>
<dxg:GridColumn FieldName="AssistanceTimeEntry" Header="Betreuungszeiten" ReadOnly="False">
</dxg:GridColumn>
<dxg:GridColumn FieldName="CustomerName" Header="Klient/in" ReadOnly="True">
<dxg:GridColumn.CellStyle>
@@ -543,6 +535,7 @@
</dxg:GridControl>
</GroupBox>
<!-- Kein Vertretungsbedarf -->
<GroupBox Grid.Row="2" Header="{markup:Translate Kein Vertretungsbedarf}" Style="{StaticResource ObjectEditGroupBox}">
<dxg:GridControl x:Name="SubstitutionUnwantedDayViewGridControl" AllowDrop="True" Margin="5" BorderBrush="Black" VerticalContentAlignment="Stretch" ItemsSource="{Binding Path=SubstitutionUnwantedDayViewList, UpdateSourceTrigger=PropertyChanged}">
<dxg:GridControl.Columns>
@@ -667,6 +660,7 @@
<RowDefinition Height="33*" />
</Grid.RowDefinitions>
<!-- Wochenansicht Abwesende Mitarbeiter -->
<GroupBox Header="{markup:Translate Abwesenheiten Mitarbeiter}" Style="{StaticResource ObjectEditGroupBox}">
<dxg:GridControl x:Name="GridDataControlWochenansichtMitarbeiter" AllowDrop="true" Margin="5" VerticalContentAlignment="Stretch" BorderBrush="Black" ItemsSource="{Binding AbsentEmployeesWeekViewList, UpdateSourceTrigger=PropertyChanged}">
<dxg:GridControl.Columns>
@@ -970,6 +964,7 @@
</dxg:GridControl>
</GroupBox>
<!-- Wochenansicht Abwesende Klienten -->
<GroupBox Grid.Row="1" Header="{markup:Translate Abwesenheiten Klienten}" Style="{StaticResource ObjectEditGroupBox}" Margin="0,10,0,0">
<dxg:GridControl x:Name="GridDataControlWochenansichtKlient" AllowDrop="true" Margin="5" VerticalContentAlignment="Stretch" BorderBrush="Black" ItemsSource="{Binding AbsentCustomersWeekViewList, UpdateSourceTrigger=PropertyChanged}">
<dxg:GridControl.Columns >
@@ -1166,6 +1161,7 @@
</dxg:GridControl>
</GroupBox>
<!-- Wochenansicht Kein Vertretungsbedarf -->
<GroupBox Grid.Row="2" Header="{markup:Translate Kein Vertretungsbedarf}" Style="{StaticResource ObjectEditGroupBox}" Margin="0,10,0,0">
<dxg:GridControl AllowDrop="True" Margin="5" VerticalContentAlignment="Stretch" BorderBrush="Black" x:Name="SubstitutionUnwantedWeekViewGridControl" ItemsSource="{Binding SubstitutionUnwantedWeekViewList, UpdateSourceTrigger=PropertyChanged}">
<dxg:GridControl.Columns>

View File

@@ -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<TagesansichtVM> tagesansichtVMs)
private void GetWochenDienstFromItems(DateTime time, List<TagesansichtVM> tagesansichtVMs)
{
_ItemsWochenMitarbeiter.Clear();
_ItemsWochenKlienten.Clear();
_SubstitutionUnwantedWeekViewList.Clear();
var employeeList = new List<TagesansichtVM>();
var customerList = new List<TagesansichtVM>();
var unwantedList = new List<TagesansichtVM>();
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));

View File

@@ -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}";
}
}
}

View File

@@ -170,7 +170,7 @@ namespace BeWo.SchulbegleitenderDienst.ViewModel
}
}
public string SchulbegleitenderDienstString;
public string SchulbegleitenderDienstString { get; set; }
public List<CustomerOrganisationRelationDC> Schools { get; set; }

View File

@@ -3028,7 +3028,7 @@ namespace BeWo.Data.Access
criteria.SetMaxResults(count);
return criteria.List<Vertretung>();
return criteria.List<Vertretung>().Where(w => w.VertretungsZeitraumVon > DateTime.MinValue && w.VertretungsZeitraumBis > DateTime.MinValue).ToList();
}
public Dictionary<Customer, List<ArbeitszeitEintrag>> GetAssistanceTimesForEmployee(long employeeOid, DateTime start, DateTime end)

View File

@@ -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;

View File

@@ -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();
}

View File

@@ -15,14 +15,14 @@
NHibernate.Driver.MySqlDataDriver
</property>
<!--<property name="connection.connection_string">
Server=localhost;Password=root;User ID=root; Initial Catalog=kette
</property>-->
<property name="connection.connection_string">
Server=localhost;Password=root;User ID=root; Initial Catalog=bewodemo
Server=localhost;Password=root;User ID=root; Initial Catalog=1111111111
</property>
<!--<property name="connection.connection_string">
Server=localhost;Password=root;User ID=root; Initial Catalog=bewodemo
</property>-->
<property name="dialect">
NHibernate.Dialect.MySQLDialect
</property>
@@ -30,7 +30,7 @@
NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle
</property>
<property name="hbm2ddl.keywords">none</property>
<property name="show_sql">true</property> <!-- Bei true wird das SQL im Output Window angezeigt -->
<property name="show_sql">false</property> <!-- Bei true wird das SQL im Output Window angezeigt -->
<property name="format_sql">true</property>
<mapping assembly="BeWo.Data" />

View File

@@ -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;

File diff suppressed because it is too large Load Diff

View File

@@ -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

View File

@@ -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;
}
}

View File

@@ -36,7 +36,6 @@ namespace BS.Shared.DataContracts
{
return $"{UhrzeitVon} - {UhrzeitBis}";
}
public DayOfWeek DayOfWeek => Core.DateTimeUtils.ConvertAppointmentDayOfWeekToDayOfWeek(Tag);
[DataMember]

View File

@@ -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;
}
}
}

View File

@@ -127,5 +127,8 @@ namespace BS.Shared.DataContracts
[DataMember]
public Guid Id { get; set; }
[DataMember]
public ArbeitszeitEintragDC AssistanceTime { get; set; }
}
}

View File

@@ -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);
}
/// <summary>