Vertretungsmodul

Zeit kann jetzt leer sein in der Mobilversion
This commit is contained in:
Lyndon Jetten
2019-12-03 13:00:04 +01:00
parent 11d0c83269
commit bc36b78d62
16 changed files with 458 additions and 305 deletions

View File

@@ -1,6 +1,10 @@
using System;
using System.Collections.Generic;
using System.Linq;
using BeWo.ServiceProxy;
using BS.Shared;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
using BS.Shared.Extensions;
namespace BeWo.SchulbegleitenderDienst.SBDUtils
@@ -13,6 +17,26 @@ namespace BeWo.SchulbegleitenderDienst.SBDUtils
var employeeSubstitutionList = new List<TagesansichtVM>();
var customerSubstitutionList = new List<TagesansichtVM>();
var customer2AbsenceTimes = new Dictionary<CompactCustomerDC, List<AbsenceTimeDC>>();
viewModels.Where(w => w.VertretungsStatus == VertretungsStatus.KlientKrank && w.Customer != null).DoForEach(vi =>
{
customer2AbsenceTimes.AddOrUpdateValueInDictionary(vi.Customer, vi.Absencetime);
});
var employeeAbsenceTimes = viewModels.Where(w => w.VertretungsStatus != VertretungsStatus.KlientKrank && w.Customer != null).ToList();
var itemsForunwantedSubstitutionList = new List<TagesansichtVM>();
foreach (var item in employeeAbsenceTimes)
{
if (customer2AbsenceTimes.ContainsKey(item.Customer))
{
item.KlientStatusColor = "#7FFF7F";
itemsForunwantedSubstitutionList.AddIfNotIn(item);
}
}
foreach (var viewModel in viewModels)
{
if(viewModel.VertretungsStatus != VertretungsStatus.KlientKrank)
@@ -29,7 +53,7 @@ namespace BeWo.SchulbegleitenderDienst.SBDUtils
}
}
if (substitutionStartingDayCountCondition || viewModel.Vertretung?.VertretenderMitarbeiterOid != null || viewModel.Customer != null && viewModel.Customer.SubstitutionNeed == SubstitutionNeed.NoSubstitutionWanted)
if (itemsForunwantedSubstitutionList.Contains(viewModel) || substitutionStartingDayCountCondition || viewModel.Vertretung?.VertretenderMitarbeiterOid != null || viewModel.Customer != null && viewModel.Customer.SubstitutionNeed == SubstitutionNeed.NoSubstitutionWanted)
{
unwantedSubstitutionList.AddIfNotIn(viewModel);
}
@@ -40,15 +64,7 @@ namespace BeWo.SchulbegleitenderDienst.SBDUtils
}
else
{
//if(viewModel.Customer.SubstitutionNeed == SubstitutionNeed.SubstitutionNeeded || viewModel.Customer.SubstitutionNeed == SubstitutionNeed.SubstitutionWanted)
//{
customerSubstitutionList.Add(viewModel);
//}
//else
//{
// unwantedSubstitutionList.Add(viewModel);
//}
customerSubstitutionList.Add(viewModel);
}
}

View File

@@ -56,7 +56,8 @@ namespace BeWo.SchulbegleitenderDienst
VertretungsStatus = vertretungsItem.VertretungsStatus,
WochenansichtBemerkung = vertretungsItem.WochenansichtBemerkung,
VertreterInfoString = vertretungsItem.VertreterInfoString,
EmployeeAddressString = vertretungsItem.EmployeeAddressString
EmployeeAddressString = vertretungsItem.EmployeeAddressString,
Id = vertretungsItem.Id
};
if (vertretungsItem.Arbeitszeiten != null && vertretungsItem.Arbeitszeiten.Any())

View File

@@ -267,5 +267,7 @@ namespace BeWo.SchulbegleitenderDienst
}
public new string VertreterInfoString { get; set; }
public Guid Id { get; set; }
}
}

View File

@@ -162,19 +162,19 @@
Margin="3,3,3,3" />
<TextBox Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="9" Margin="3" Height="50" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" x:Name="MitarbeiterNotice"/>
<StackPanel Grid.Column="2" Grid.Row="10" Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Bottom">
<Button x:Name="button_addMitarbeiterVertretung" Content="Hinzufügen" Height="25" FontWeight="Normal" Margin="3" Click="Button_addMitarbeiterVertretung_OnClick"/>
<Button Height="25" Margin="3" Content="Abbrechen" x:Name="button_cancelMitarbeiterVertretung" Click="Button_cancelMitarbeiterVertretung_OnClick"/>
<Button x:Name="ButtonAddMitarbeiterVertretung" Content="Hinzufügen" Height="25" FontWeight="Normal" Margin="3" Click="Button_addMitarbeiterVertretung_OnClick"/>
<Button Height="25" Margin="3" Content="Abbrechen" x:Name="ButtonCancelMitarbeiterVertretung" Click="Button_cancelMitarbeiterVertretung_OnClick"/>
</StackPanel>
</Grid>
</GroupBox>
</Border>
</controls:PopupNonTopmost>
<Button x:Name="KlientVertretung_Button" Background="Transparent" BorderBrush="Transparent" HorizontalAlignment="Left" Margin="3,3,3,3" Click="KlientVertretung_Button_OnClick" Content="{markup:Translate Neue Abwesenheit für Klient/in}" />
<Button x:Name="KlientVertretungButton" Background="Transparent" BorderBrush="Transparent" HorizontalAlignment="Left" Margin="3,3,3,3" Click="KlientVertretung_Button_OnClick" Content="{markup:Translate Neue Abwesenheit für Klient/in}" />
<controls:PopupNonTopmost Topmost="False" x:Name="popup_newKlientVertretung" Width="300" StaysOpen="True" Placement="MousePoint" PlacementTarget="{Binding ElementName=KlientVertretung_Button}">
<controls:PopupNonTopmost Topmost="False" x:Name="PopupNewKlientVertretung" Width="300" StaysOpen="True" Placement="MousePoint" PlacementTarget="{Binding ElementName=KlientVertretungButton}">
<Border Background="White" Padding="3" BorderThickness="1" BorderBrush="Gray">
<GroupBox x:Name="groupbox_newKlientVertretung" Header="Klient/in hinzufügen" Style="{DynamicResource ObjectEditGroupBox}">
<GroupBox x:Name="GroupboxNewKlientVertretung" Header="Klient/in hinzufügen" Style="{DynamicResource ObjectEditGroupBox}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
@@ -230,11 +230,11 @@
<TextBox Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="8" Margin="3" Height="50" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" x:Name="KlientNotice"/>
<Button Grid.Column="1" Grid.Row="9" x:Name="button_addKlientVertretung" Content="Hinzufügen" Height="25"
<Button Grid.Column="1" Grid.Row="9" x:Name="ButtonAddKlientVertretung" Content="Hinzufügen" Height="25"
FontWeight="Normal" Margin="3" VerticalAlignment="Bottom" HorizontalAlignment="Right" Click="Button_addKlientVertretung_OnClick" />
<Button Grid.Row="9" Grid.Column="2" HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Height="25"
Margin="3" Content="Abbrechen" x:Name="button_cancelKlientVertretung" Click="Button_cancelKlientVertretung_OnClick" />
Margin="3" Content="Abbrechen" x:Name="ButtonCancelKlientVertretung" Click="Button_cancelKlientVertretung_OnClick" />
</Grid>
</GroupBox>
@@ -1317,11 +1317,11 @@
</Grid>
<!-- /Wochenansicht -->
<Popup Grid.Row="0" Margin="10" x:Name="popup_MitarbeiterVertretung" StaysOpen="False" Placement="MousePoint" Width="370" Height="250" Closed="popup_Closed" Opened="popup_Opened">
<Popup Grid.Row="0" Margin="10" x:Name="PopupMitarbeiterVertretung" StaysOpen="False" Placement="MousePoint" Width="370" Height="250" Closed="popup_Closed" Opened="popup_Opened">
<search:EmployeeSearchView x:Name="MitarbeiterVertretungsearchview" />
</Popup>
<Popup Grid.Row="0" Margin="10" x:Name="popup_KlientVertretung" StaysOpen="False" Placement="MousePoint" Width="370" Height="250" Closed="popup_Closed" Opened="popup_Opened">
<Popup Grid.Row="0" Margin="10" x:Name="PopupKlientVertretung" StaysOpen="False" Placement="MousePoint" Width="370" Height="250" Closed="popup_Closed" Opened="popup_Opened">
<search:CustomerSearchView x:Name="KlientVertretungsearchview" />
</Popup>
</Grid>

View File

@@ -109,7 +109,7 @@ namespace BeWo.SchulbegleitenderDienst
});
}
private void GetWochenDienstFromItems(DateTime time, IEnumerable<TagesansichtVM> items)
private void GetWochenDienstFromItems(DateTime time, IEnumerable<TagesansichtVM> tagesansichtVMs)
{
_ItemsWochenMitarbeiter.Clear();
_ItemsWochenKlienten.Clear();
@@ -119,7 +119,7 @@ namespace BeWo.SchulbegleitenderDienst
var customerList = new List<TagesansichtVM>();
var unwantedList = new List<TagesansichtVM>();
foreach(var item in items)
foreach(var item in tagesansichtVMs)
{
if(item.VertretungsStatus == VertretungsStatus.KlientKrank)
{
@@ -243,12 +243,12 @@ namespace BeWo.SchulbegleitenderDienst
private void Popupedit_MitarbeiterVertretungSearch_OnPopUpClick_popupedit_MitarbeiterVertretungSearch_PopUpClick(object sender, RoutedEventArgs e)
{
popup_MitarbeiterVertretung.IsOpen = true;
PopupMitarbeiterVertretung.IsOpen = true;
}
private void MitarbeiterVertretungsearchview_MitarbeiterVertretungSelected(object sender, EventArgs<CompactEmployeeDC> e)
{
popup_MitarbeiterVertretung.IsOpen = false;
PopupMitarbeiterVertretung.IsOpen = false;
_CurrentEmployee = e.Data;
@@ -440,23 +440,23 @@ namespace BeWo.SchulbegleitenderDienst
private void KlientVertretung_Button_OnClick(object sender, RoutedEventArgs e)
{
popup_newKlientVertretung.IsOpen = true;
PopupNewKlientVertretung.IsOpen = true;
}
private void Button_cancelKlientVertretung_OnClick(object sender, RoutedEventArgs e)
{
popup_newKlientVertretung.IsOpen = false;
PopupNewKlientVertretung.IsOpen = false;
ClearAllKlientValues();
}
private void Popupedit_KlientVertretungSearch_OnPopUpClick(object sender, RoutedEventArgs e)
{
popup_KlientVertretung.IsOpen = true;
PopupKlientVertretung.IsOpen = true;
}
private void KlientVertretungsearchview_KlientVertretungSelected(object sender, EventArgs<CompactCustomerDC> e)
{
popup_KlientVertretung.IsOpen = false;
PopupKlientVertretung.IsOpen = false;
_CurrentCustomer = e.Data;
@@ -526,7 +526,7 @@ namespace BeWo.SchulbegleitenderDienst
if(isValid)
{
popup_newKlientVertretung.IsOpen = false;
PopupNewKlientVertretung.IsOpen = false;
SaveCustomerAbsenceTime();

View File

@@ -36,11 +36,14 @@ namespace BeWo.SchulbegleitenderDienst.ViewModel
get => _Notice;
set
{
if (!Equals(_Notice, value))
if (Equals(_Notice, value))
{
_Notice = value;
FirePropertyChanged(nameof(Bemerkung));
return;
}
_Notice = value;
FirePropertyChanged(nameof(Bemerkung));
}
}

View File

@@ -46,6 +46,9 @@
</PropertyGroup>
<ItemGroup>
<Reference Include="DevExpress.Data.v17.1, Version=17.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Mvvm.v17.1, Version=17.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
<Private>False</Private>
</Reference>
<Reference Include="DevExpress.Xpf.Scheduler.v17.1, Version=17.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraScheduler.v17.1, Version=17.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraScheduler.v17.1.Core, Version=17.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />

View File

@@ -70,4 +70,22 @@
border: 1px solid #ff5a00;
margin: 0 .5em;
padding: 0 .5em;
}
#absence-times-table p {
margin: .1em 0;
}
.absence-time-interval {
color: #AB4A07;
font-weight: bold;
}
#create-absence-time-form {
display: none;
padding-top: .25em;
}
input:focus + label, textarea:focus + label {
color: #FF5A00 !important;
}

View File

@@ -76,7 +76,7 @@ namespace BeWoPlanerMobil.Controllers
}
[Authorize]
public ActionResult PreselectCustomer(long customerOid)
public ActionResult PreselectCustomer(long? customerOid)
{
if (!MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer"))
{
@@ -85,11 +85,10 @@ namespace BeWoPlanerMobil.Controllers
InitViewModel();
// TODO: select customer
if (customerOid > 0)
if (customerOid.HasValue && customerOid > 0)
{
Model.SelectedCustomerOid = customerOid;
Model.SelectedCustomer = CustomerService.LoadCustomer(customerOid);
Model.SelectedCustomer = CustomerService.LoadCustomer(customerOid.Value);
}
return RedirectToActionPermanent("Customer");
@@ -133,22 +132,62 @@ namespace BeWoPlanerMobil.Controllers
[HttpPost]
public ActionResult CreateAbsenceTime(FormCollection formCollection)
{
if (Model?.SelectedCustomerOid == null)
{
return RedirectToActionPermanent("Index", "Login");
}
try
{
if (Model == null)
{
return RedirectToActionPermanent("Index", "Login");
}
var startDateRaw = formCollection["absence-time-start-input"];
var endDateRaw = formCollection["absence-time-end-input"];
var absenceReasonOidRaw = formCollection["SelectedAbsenceReasonOid"];
var notice = formCollection["absencetime-notice-input"];
var startDate = DateTime.Parse(startDateRaw);
DateTime? endDate = null;
DateTime? startDate = null;
if (!string.IsNullOrWhiteSpace(startDateRaw))
{
if (DateTime.TryParse(startDateRaw, out var startDateTime))
{
startDate = startDateTime;
}
}
else
{
return RedirectToActionPermanent("Customer");
}
if (!string.IsNullOrWhiteSpace(endDateRaw))
{
if (DateTime.TryParse(endDateRaw, out var endDateTime))
{
endDate = endDateTime;
}
}
AbsenceReasonDC absenceReason = null;
if (!string.IsNullOrWhiteSpace(absenceReasonOidRaw))
{
if (long.TryParse(absenceReasonOidRaw, out var absenceReasonOid))
{
absenceReason = CustomerService.LoadAbsenceReason(absenceReasonOid);
}
}
if (absenceReason != null)
{
var absenceTime = new AbsenceTimeDC
{
CustomerOid = Model.SelectedCustomerOid,
End = endDate,
Start = startDate,
Notice = notice,
Reason = absenceReason
};
CustomerService.InsertAbsenceTimes(new List<AbsenceTimeDC> {absenceTime});
}
}
catch (Exception exception)
@@ -156,7 +195,7 @@ namespace BeWoPlanerMobil.Controllers
log.Error(exception.Message, exception);
}
return RedirectToActionPermanent("Customer");
return RedirectToActionPermanent("PreselectCustomer", new {customerOid = Model.SelectedCustomerOid});
}
}
}

View File

@@ -52,6 +52,7 @@ namespace BeWoPlanerMobil.Models
public string EnvironmentPersonsDisplayValue => SelectedJsonCustomer != null && SelectedJsonCustomer.Umfeldpersonen.Count > 0 ? "block" : "none";
public string TabControlDisplayValue => SelectedJsonCustomer != null ? "block" : "none";
public int SelectedCustomerTab { get; set; }
}
}

View File

@@ -129,27 +129,30 @@ function karteAnzeigen() {
}
function cancelAbsenceTimeCreation() {
// TODO: Inputs leeren und das Formular ausblenden.
$("#absence-time-start").val("");
$("#absence-time-end").val("");
$("#absencetime-notice").text("");
$("#absencetime-notice").val("");
$("#absence-time-reason").val($("#absence-time-reason").eq(0).val());
$("#absencetime-notice").change();
//toggleCreationForm();
}
function validateAndCreateAbsenceTime() {
// TODO: Start- und Enddatum validieren und gegebenenfalls Fehlermeldung anzeigen oder Formular abschicken
var startStr = $("#absence-time-start").val();
var endStr = $("#absence-time-end").val();
var startDate = new BeWoDateObject(startStr).date;
var startDate = new BeWoDateObject(startStr).getDateFromBeWoDateObject();
var isStartDateValid = validateDate(startDate);
var isStartDateValid = validateDate(startStr);
var isValid = isStartDateValid;
if (endStr.length > 0 && isStartDateValid) {
var endDate = new BeWoDateObject(endStr).date;
var isEndDateValid = validateDate(endDate);
var endDate = new BeWoDateObject(endStr).getDateFromBeWoDateObject();
var isEndDateValid = validateDate(endStr);
if (isEndDateValid) {
isValid = endDate > startDate;
@@ -161,6 +164,14 @@ function validateAndCreateAbsenceTime() {
if (!isValid) {
toggleErrorPopup("Das Startdatum und/oder Enddatum ist ungültig", 2);
} else {
$("#create-absencetime-form").submit();
$("#create-absence-time-form").submit();
}
}
function toggleCreationForm() {
var creationButton = $("#show-absence-time-creation-form-btn");
var creationForm = $("#create-absence-time-form");
creationButton.toggle();
creationForm.toggle();
}

View File

@@ -37,6 +37,14 @@
var startStr = startDateBox.val();
var endStr = endDateBox.val();
if (startStr.length === 0) {
startStr = "0000";
}
if (endStr.length === 0) {
endStr = "0000";
}
if (!validateDate(dateStr) || !zeitRegEx.test(startStr) || !zeitRegEx.test(endStr)) {
hideSanduhr();

View File

@@ -15,219 +15,217 @@
</div>
}
<div id="klienten" style="display: @Model.TabControlDisplayValue; padding-left: 1em;">
<div id="klientenTabelle">
<div class="eigenschaftsdiv">
<h4>Eigenschaften</h4>
<hr />
<table class="width-inheriting-table">
<tr>
<td class="customer-td">Vorname:</td>
<td class="contentTd">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.Vorname : string.Empty)</td>
</tr>
<tr>
<td class="customer-td">Nachname:</td>
<td class="contentTd" id="KlientNachname">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.Nachname : string.Empty)</td>
</tr>
<tr>
<td class="customer-td">Geburtstag:</td>
<td class="contentTd" id="KlientGeb">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.Geburtstag : string.Empty)</td>
</tr>
<tr>
<td class="customer-td">Geschlecht:</td>
<td class="contentTd" id="KlientSex">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.Geschlecht : string.Empty)</td>
</tr>
</table>
</div>
<div class="eigenschaftsdiv">
<h4 class="inline-display-element">Adresse</h4>
<input type="button" onclick="karteAnzeigen()" style="background-image: url(@Url.Content("~/Content/images/location-orange.svg")); background-repeat: no-repeat; background-position: center; background-size: 55%; background-color: transparent; margin-top: -0.6em; display: inline; width: auto; float: right;" />
<hr />
<table class="width-inheriting-table">
<tr>
<td class="customer-td">Adresszusatz:</td>
<td class="contentTd" id="KlientAdresse">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.Adresszusatz : string.Empty)</td>
</tr>
<tr>
<td class="customer-td">Stra&szlig;e:</td>
<td class="contentTd" id="adressfeld">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.Strasse : string.Empty)</td>
</tr>
<tr>
<td class="customer-td">PLZ:</td>
<td class="contentTd" id="plzfeld">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.Postleitzahl : string.Empty)</td>
</tr>
<tr>
<td class="customer-td">Ort:</td>
<td class="contentTd" id="ortfeld">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.Ort : string.Empty)</td>
</tr>
</table>
</div>
<div class="eigenschaftsdiv">
<h4>Rechnungsadresse</h4>
<hr />
<table class="width-inheriting-table">
<tr>
<td class="customer-td">Name:</td>
<td class="contentTd" id="KlientReName">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.RechnungsadresseName : string.Empty)</td>
</tr>
<tr>
<td class="customer-td">Stra&szlig;e:</td>
<td class="contentTd" id="KlientReStrasse">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.RechnungsadresseStrasse : string.Empty)</td>
</tr>
<tr>
<td class="customer-td">Postleitzahl:</td>
<td class="contentTd" id="KlientRePostleitzahl">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.RechnungsadressePostleitzahl : string.Empty)</td>
</tr>
<tr>
<td class="customer-td">Ort:</td>
<td class="contentTd" id="KlientReOrt">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.RechnungsadresseOrt : string.Empty)</td>
</tr>
</table>
</div>
<div class="eigenschaftsdiv">
<h4>Kontakt</h4>
<hr />
<table class="width-inheriting-table">
<tr>
<td class="customer-td">Handy:</td>
<td class="contentTd" id="KlientHandy">
<a style="color: black" href="@Html.Raw(Model.SelectedJsonCustomer != null ? "tel:" + Model.SelectedJsonCustomer.Handy : string.Empty)">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.Handy : string.Empty)</a>
</td>
</tr>
<tr>
<td class="customer-td">Telefon:</td>
<td class="contentTd" id="KlientTelefon">
<a style="color: black" href="@Html.Raw(Model.SelectedJsonCustomer != null ? "tel:" + Model.SelectedJsonCustomer.Telefon : string.Empty)">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.Telefon : string.Empty)</a>
</td>
</tr>
<tr>
<td class="customer-td">Fax:</td>
<td class="contentTd" id="KlientFax">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.Fax : string.Empty)</td>
</tr>
<tr>
<td class="customer-td">Mail:</td>
<td class="contentTd" id="KlientMail"><a style="color: black" href="@Html.Raw(Model.SelectedJsonCustomer != null ? "mailto:" + Model.SelectedJsonCustomer.EMail : string.Empty)">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.EMail : string.Empty)</a></td>
</tr>
</table>
</div>
</div>
<div style="padding-right: 1em; margin-bottom: 16px; display: @Model.ReferenceNumberDisplayValue" id="aktenzeichenContainer">
<h4 style="display: inline; color: #AB4A07;">Aktenzeichen pro Kostenträger</h4>
<hr />
<table id="aktenzeichenTable" class="width-inheriting-table">
<thead>
<tr>
<th scope="col">
<p style="float: left;">Kostenträger</p>
</th>
<th scope="col">
<p style="float: right;">Aktenzeichen</p>
</th>
</tr>
</thead>
<tbody>
@if (Model.SelectedJsonCustomer != null)
{
foreach (var referenceNumber in Model.SelectedJsonCustomer.ReferenceNumbers)
{
<tr class="testklasse">
<td class="customer-td">@referenceNumber.Costbearer</td>
<td class="contentTd">@referenceNumber.ReferenceNumber</td>
</tr>
<tr class="testklasse">
<td colspan="2"><hr /></td>
</tr>
}
}
</tbody>
</table>
</div>
<div style="padding-right: 1em; display: @Model.NoticeDisplayValue" id="kommentarContainer">
<h4 style="display: inline; color: #AB4A07;">Kommentar</h4>
<hr />
<pre>
@if (Model.SelectedJsonCustomer != null)
{
@Html.Raw(Model.SelectedJsonCustomer.Kommentar)
;
}
</pre>
</div>
<div style="padding-right: 1em; display: @Model.EnvironmentPersonsDisplayValue" id="umfeldContainer">
<h4 style="display: inline; color: #AB4A07;">Umfeld</h4>
<hr />
<div style="width: inherit;">
@if (Model.SelectedJsonCustomer != null)
{
foreach (var relatedPerson in Model.SelectedJsonCustomer.Umfeldpersonen)
{
<div class="collapsible-container">
<input type="button" class="toggle-btn2" value="@relatedPerson.FormattedName" />
<div style="display: none;" class="kollabierbar">
<table class="width-inheriting-table">
<tbody>
<tr class="testklasse">
<td class="customer-td">Rolle:</td>
<td class="contentTd">@relatedPerson.Rolle</td>
</tr>
<tr class="testklasse">
<td class="customer-td">Adresse:</td>
<td class="contentTd">@relatedPerson.StrNameNr</td>
</tr>
<tr class="testklasse">
<td class="customer-td"></td>
<td class="contentTd">@relatedPerson.PLZOrt</td>
</tr>
<tr class="testklasse">
<td class="customer-td">Tel.:</td>
<td class="contentTd">
<a style="color: black" href="tel:@relatedPerson.TelNr">@relatedPerson.TelNr</a>
</td>
</tr>
<tr class="testklasse">
<td class="customer-td">Mobil:</td>
<td class="contentTd">
<a style="color: black" href="tel:@relatedPerson.Mobil">@relatedPerson.Mobil</a>
</td>
</tr>
<tr class="testklasse">
<td class="customer-td">E-Mail</td>
<td class="contentTd">
<a style="color: black" href="mailto:@relatedPerson.EMail">@relatedPerson.EMail</a>
</td>
</tr>
<tr class="testklasse">
<td class="customer-td">Fax:</td>
<td class="contentTd">@relatedPerson.Fax</td>
</tr>
</tbody>
</table>
</div>
</div>
}
}
</div>
</div>
</div>
<div class="input-wrapper" style="display: none;">
<div class="input-wrapper" style="display: @Model.TabControlDisplayValue;">
<div class="customer-tab">
<input type="button" class="customer-tab-link" id="customer-tab-1" onclick="focusOnCustomerTab(1)" value="Details"/>
<input type="button" class="customer-tab-link" id="customer-tab-2" onclick="focusOnCustomerTab(2)" value="Abwesenheiten"/>
</div>
<div class="customer-tab-content" id="customer-tab-content-1">
<div id="klienten" style="display: @Model.TabControlDisplayValue;">
<div id="klientenTabelle">
<div class="eigenschaftsdiv">
<h4>Eigenschaften</h4>
<hr />
<table class="width-inheriting-table">
<tr>
<td class="customer-td">Vorname:</td>
<td class="contentTd">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.Vorname : string.Empty)</td>
</tr>
<tr>
<td class="customer-td">Nachname:</td>
<td class="contentTd" id="KlientNachname">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.Nachname : string.Empty)</td>
</tr>
<tr>
<td class="customer-td">Geburtstag:</td>
<td class="contentTd" id="KlientGeb">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.Geburtstag : string.Empty)</td>
</tr>
<tr>
<td class="customer-td">Geschlecht:</td>
<td class="contentTd" id="KlientSex">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.Geschlecht : string.Empty)</td>
</tr>
</table>
</div>
<div class="eigenschaftsdiv">
<h4 class="inline-display-element">Adresse</h4>
<input type="button" onclick="karteAnzeigen()" style="background-image: url(@Url.Content("~/Content/images/location-orange.svg")); background-repeat: no-repeat; background-position: center; background-size: 55%; background-color: transparent; margin-top: -0.6em; display: inline; width: auto; float: right;" />
<hr />
<table class="width-inheriting-table">
<tr>
<td class="customer-td">Adresszusatz:</td>
<td class="contentTd" id="KlientAdresse">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.Adresszusatz : string.Empty)</td>
</tr>
<tr>
<td class="customer-td">Stra&szlig;e:</td>
<td class="contentTd" id="adressfeld">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.Strasse : string.Empty)</td>
</tr>
<tr>
<td class="customer-td">PLZ:</td>
<td class="contentTd" id="plzfeld">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.Postleitzahl : string.Empty)</td>
</tr>
<tr>
<td class="customer-td">Ort:</td>
<td class="contentTd" id="ortfeld">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.Ort : string.Empty)</td>
</tr>
</table>
</div>
<div class="eigenschaftsdiv">
<h4>Rechnungsadresse</h4>
<hr />
<table class="width-inheriting-table">
<tr>
<td class="customer-td">Name:</td>
<td class="contentTd" id="KlientReName">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.RechnungsadresseName : string.Empty)</td>
</tr>
<tr>
<td class="customer-td">Stra&szlig;e:</td>
<td class="contentTd" id="KlientReStrasse">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.RechnungsadresseStrasse : string.Empty)</td>
</tr>
<tr>
<td class="customer-td">Postleitzahl:</td>
<td class="contentTd" id="KlientRePostleitzahl">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.RechnungsadressePostleitzahl : string.Empty)</td>
</tr>
<tr>
<td class="customer-td">Ort:</td>
<td class="contentTd" id="KlientReOrt">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.RechnungsadresseOrt : string.Empty)</td>
</tr>
</table>
</div>
<div class="eigenschaftsdiv">
<h4>Kontakt</h4>
<hr />
<table class="width-inheriting-table">
<tr>
<td class="customer-td">Handy:</td>
<td class="contentTd" id="KlientHandy">
<a style="color: black" href="@Html.Raw(Model.SelectedJsonCustomer != null ? "tel:" + Model.SelectedJsonCustomer.Handy : string.Empty)">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.Handy : string.Empty)</a>
</td>
</tr>
<tr>
<td class="customer-td">Telefon:</td>
<td class="contentTd" id="KlientTelefon">
<a style="color: black" href="@Html.Raw(Model.SelectedJsonCustomer != null ? "tel:" + Model.SelectedJsonCustomer.Telefon : string.Empty)">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.Telefon : string.Empty)</a>
</td>
</tr>
<tr>
<td class="customer-td">Fax:</td>
<td class="contentTd" id="KlientFax">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.Fax : string.Empty)</td>
</tr>
<tr>
<td class="customer-td">Mail:</td>
<td class="contentTd" id="KlientMail"><a style="color: black" href="@Html.Raw(Model.SelectedJsonCustomer != null ? "mailto:" + Model.SelectedJsonCustomer.EMail : string.Empty)">@Html.Raw(Model.SelectedJsonCustomer != null ? Model.SelectedJsonCustomer.EMail : string.Empty)</a></td>
</tr>
</table>
</div>
</div>
<div style="margin-bottom: 16px; display: @Model.ReferenceNumberDisplayValue" id="aktenzeichenContainer">
<h4 style="display: inline; color: #AB4A07;">Aktenzeichen pro Kostenträger</h4>
<hr />
<table id="aktenzeichenTable" class="width-inheriting-table">
<thead>
<tr>
<th scope="col">
<p style="float: left;">Kostenträger</p>
</th>
<th scope="col">
<p style="float: right;">Aktenzeichen</p>
</th>
</tr>
</thead>
<tbody>
@if (Model.SelectedJsonCustomer != null)
{
foreach (var referenceNumber in Model.SelectedJsonCustomer.ReferenceNumbers)
{
<tr class="testklasse">
<td class="customer-td">@referenceNumber.Costbearer</td>
<td class="contentTd">@referenceNumber.ReferenceNumber</td>
</tr>
<tr class="testklasse">
<td colspan="2"><hr /></td>
</tr>
}
}
</tbody>
</table>
</div>
<div style="display: @Model.NoticeDisplayValue" id="kommentarContainer">
<h4 style="display: inline; color: #AB4A07;">Kommentar</h4>
<hr />
<pre>
@if (Model.SelectedJsonCustomer != null)
{
@Html.Raw(Model.SelectedJsonCustomer.Kommentar)
;
}
</pre>
</div>
<div style="display: @Model.EnvironmentPersonsDisplayValue" id="umfeldContainer">
<h4 style="display: inline; color: #AB4A07;">Umfeld</h4>
<hr />
<div style="width: inherit; padding-bottom: .5em;">
@if (Model.SelectedJsonCustomer != null)
{
foreach (var relatedPerson in Model.SelectedJsonCustomer.Umfeldpersonen)
{
<div class="collapsible-container">
<input type="button" class="toggle-btn2" value="@relatedPerson.FormattedName" />
<div style="display: none;" class="kollabierbar">
<table class="width-inheriting-table">
<tbody>
<tr class="testklasse">
<td class="customer-td">Rolle:</td>
<td class="contentTd">@relatedPerson.Rolle</td>
</tr>
<tr class="testklasse">
<td class="customer-td">Adresse:</td>
<td class="contentTd">@relatedPerson.StrNameNr</td>
</tr>
<tr class="testklasse">
<td class="customer-td"></td>
<td class="contentTd">@relatedPerson.PLZOrt</td>
</tr>
<tr class="testklasse">
<td class="customer-td">Tel.:</td>
<td class="contentTd">
<a style="color: black" href="tel:@relatedPerson.TelNr">@relatedPerson.TelNr</a>
</td>
</tr>
<tr class="testklasse">
<td class="customer-td">Mobil:</td>
<td class="contentTd">
<a style="color: black" href="tel:@relatedPerson.Mobil">@relatedPerson.Mobil</a>
</td>
</tr>
<tr class="testklasse">
<td class="customer-td">E-Mail</td>
<td class="contentTd">
<a style="color: black" href="mailto:@relatedPerson.EMail">@relatedPerson.EMail</a>
</td>
</tr>
<tr class="testklasse">
<td class="customer-td">Fax:</td>
<td class="contentTd">@relatedPerson.Fax</td>
</tr>
</tbody>
</table>
</div>
</div>
}
}
</div>
</div>
</div>
</div>
<div class="customer-tab-content" id="customer-tab-content-2">
<div>
@using (Html.BeginForm("CreateAbsenceTime", "Customer", FormMethod.Post, new { id="create-absencetime-form"}))
@using (Html.BeginForm("CreateAbsenceTime", "Customer", FormMethod.Post, new { id="create-absence-time-form"}))
{
<table>
<tr>
@@ -249,7 +247,7 @@
<div class="combobox-label-parent">
@Html.LabelFor(m => m.SelectedAbsenceReasonOid)
<div class="styled-select-div">
@Html.DropDownListFor(m => m.SelectedAbsenceReasonOid, Model.AbsenceReasonListItems, new {@class = "dropdownlist-for"})
@Html.DropDownListFor(m => m.SelectedAbsenceReasonOid, Model.AbsenceReasonListItems, new {@class = "dropdownlist-for", id = "absence-time-reason"})
</div>
</div>
</td>
@@ -264,18 +262,47 @@
</tr>
<tr>
<td>
<input type="button" value="Anlegen" onclick="validateAndCreateAbsenceTime()" style="margin-right: .5em; margin-bottom: .3em;" />
<input type="button" value="Abbrechen" onclick="cancelAbsenceTimeCreation()" style="margin-right: .5em; margin-bottom: .3em;" />
</td>
<td>
<input type="button" value="Abbrechen" onclick="cancelAbsenceTimeCreation()" style="margin-left: .5em; margin-bottom: .3em;" />
<div class="input-wrapper cell-content" style="margin-right: .5em;">
<input type="button" value="Anlegen" onclick="validateAndCreateAbsenceTime()" style="margin-left: .5em; margin-bottom: .3em;" />
</div>
</td>
</tr>
</table>
}
<input type="button" value="Neue Abwesenheit anlegen" id="show-absence-time-creation-form-btn" style="margin-top: .75em;" onclick="toggleCreationForm()" />
@if (Model.SelectedJsonCustomer != null)
{
<table id="absence-times-table">
<tbody>
@foreach (var absenceTime in Model.SelectedJsonCustomer.AbsenceTimes)
{
<tr class="testklasse">
<td>
<p class="absence-time-interval" style="margin-top: 1em;">@absenceTime.AbsenceInterval</p>
</td>
</tr>
<tr class="testklasse">
<td>
<p style="font-weight: bold;">@absenceTime.AbsenceReason</p>
</td>
</tr>
<tr class="testklasse">
<td>
<p style="font-style: italic;">@absenceTime.Notice</p>
</td>
</tr>
}
</tbody>
</table>
}
</div>
</div>
</div>
<script>
$(".dropdownlist-for").css("height", '@AbstractModel.DropdownHeight' + "px");
</script>

View File

@@ -33,8 +33,6 @@ namespace BeWo.Service.SBD
var customerOids = new List<long>();
var employeeOids = new List<long>();
// TODO: Eine SearchDAO Funktion schreiben, um die Klienten zu laden?
employeeAbsenceTimes.DoForEach(absenceTime =>
{
if(absenceTime.EmployeeOid.HasValue)
@@ -178,9 +176,9 @@ namespace BeWo.Service.SBD
{
continue;
}
MigriereSubstitutionStatus(customer);
var addEmpty = true;
foreach (var employee2Customer in customer.Employee2CustomerList.Where(e2c => e2c.Employee.IsActive == ActivationTypeId.Active))
@@ -237,7 +235,7 @@ namespace BeWo.Service.SBD
}
}
}
return result;
}
@@ -246,8 +244,7 @@ namespace BeWo.Service.SBD
private static IEnumerable<VertretungsItemDC> ErstelleVertretungsItemsForAbsenceEmployee(AbsenceTime absenceTime, Employee employee, Customer customer, List<Vertretung> vertretungen, DateTime start, DateTime end, List<ContactDC> customerContactInformation, List<ContactDC> employeeContactInformation, List<CustomerOrganisationRelationDC> schools)
{
var vertretungsItems = new List<VertretungsItemDC>();
var items2Remove = new List<Guid>();
var dateTime = start;
while (dateTime <= end)
@@ -256,7 +253,7 @@ namespace BeWo.Service.SBD
{
// TODO: Vertretungen erzeugen ein zweites VertretungsItem!
var newVertretungsItem = new VertretungsItemDC {Datum = dateTime, Absencetime = MapperFactory.AbsenceTimeDC_AbsenceTime.MapToNewDC(absenceTime)};
var newVertretungsItem = new VertretungsItemDC {Datum = dateTime, Absencetime = MapperFactory.AbsenceTimeDC_AbsenceTime.MapToNewDC(absenceTime), Id = Guid.NewGuid()};
var vertretungsOids = new List<long>();
@@ -282,11 +279,11 @@ namespace BeWo.Service.SBD
newVertretungsItem.CustomerContactInformation = customerContactInformation;
newVertretungsItem.EmployeeContactInformation = employeeContactInformation;
newVertretungsItem.Schools = schools;
// Klientenabwesenheit von Klient mit Betreuungszeiten oder mit Schule
// 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 = MapperFactory.ArbeitszeitDC_Arbeitszeit.MapToNewDCs(customer.Arbeitszeiten);
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<ArbeitszeitDC>();
var time = dateTime;
var interval = betreuungszeiten.Where(
@@ -307,7 +304,7 @@ namespace BeWo.Service.SBD
return time <= w.GueltigBis;
}
if(w.GueltigVon.HasValue && w.GueltigBis == null)
if(w.GueltigBis == null)
{
return time >= w.GueltigVon;
}
@@ -319,7 +316,7 @@ namespace BeWo.Service.SBD
foreach(var item in interval)
{
assistanceTimeEntries.AddRange(item.Eintraege.Where(assistanceTimeEntry => DateTimeUtils.ConvertAppointmentDayOfWeekToDayOfWeek(assistanceTimeEntry.Tag) == dateTime.DayOfWeek));
assistanceTimeEntries.AddRange(item.Eintraege.Where(assistanceTimeEntry => assistanceTimeEntry.DayOfWeek == dateTime.DayOfWeek && Equals(assistanceTimeEntry.Employee?.EmployeeOid, employee?.Oid) || assistanceTimeEntry.Employee == null));
}
if(assistanceTimeEntries.Any())
@@ -328,6 +325,30 @@ namespace BeWo.Service.SBD
}
}
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)
@@ -498,7 +519,10 @@ namespace BeWo.Service.SBD
vertretungsItems.AddIfNotIn(copy);
}
vertretungsItems.Add(newVertretungsItem);
if (!items2Remove.Contains(newVertretungsItem.Id))
{
vertretungsItems.Add(newVertretungsItem);
}
}
dateTime = dateTime.AddDays(1);
@@ -519,9 +543,7 @@ namespace BeWo.Service.SBD
}
else
{
customer.SubstitutionNeed = customer.VertretungGewuenscht
? SubstitutionNeed.SubstitutionWanted
: SubstitutionNeed.NoSubstitutionWanted;
customer.SubstitutionNeed = customer.VertretungGewuenscht ? SubstitutionNeed.SubstitutionWanted : SubstitutionNeed.NoSubstitutionWanted;
}
}
else
@@ -530,8 +552,7 @@ namespace BeWo.Service.SBD
}
}
}
private static void SetTeamleitung(BeWoEntityBase employee, VertretungsItemDC item)
{
if(employee.Oid == null)
@@ -681,33 +702,8 @@ namespace BeWo.Service.SBD
private static bool GetIsSubstitutedCompletely(IEnumerable<ArbeitszeitEintrag> assistanceTimes, Vertretung substitution, DateTime dateTime, AbsenceTime absenceTime)
{
// TODO: absenceTime beachten!
/*
* Vertretung mit AssistanceTimes und AbsenceTime vergleichen
*
* AssistanceTimes: Do 08:00 - 10:30 und 10:45 - 12:15 und 12:30 - 14:00
* AbsenceTime: 19.09.2019 09:00 bis 30.09.2019 15:00
* Vertretung 1: 19.09.2019 10:00 bis 22.09.2019 13:00
* Vertretung 2:
*
* Das Ende der Abwesenheit darf nicht größer als das Ende der Vertretung sein
* Der Anfang der Abwesenheit darf nicht kleiner sein als der Anfang der Vertretung
*/
//var valid = absenceTime.Start.HasValue && absenceTime.End.HasValue && absenceTime.End.Value <= substitution.VertretungsZeitraumBis && absenceTime.Start.Value >= substitution.VertretungsZeitraumVon;
//if(!valid)
//{
// return false;
//}
var isSubstituted = true;
if(substitution.CustomerOid == 46)
{
}
foreach(var assistanceTime in assistanceTimes)
{
var assistanceDateTimes = Utils.GetAssistanceTimeComparisonDateTime(assistanceTime.UhrzeitVon, assistanceTime.UhrzeitBis, dateTime);
@@ -715,6 +711,7 @@ namespace BeWo.Service.SBD
{
substitution.VertretungsZeitraumBis = substitution.VertretungsZeitraumBis.AddDays(1).AddTicks(-1);
}
isSubstituted = assistanceDateTimes.Start.AreInBetweenDates(assistanceDateTimes.End, substitution.VertretungsZeitraumVon, substitution.VertretungsZeitraumBis);
if(!isSubstituted)
@@ -805,5 +802,19 @@ namespace BeWo.Service.SBD
return result;
}
private static bool IsAbsenceTimeInAssistanceTime(DateTime currentDate, ArbeitszeitEintragDC assistanceTime, AbsenceTime absenceTime)
{
if (currentDate.DayOfWeek != assistanceTime.DayOfWeek)
{
return false;
}
var assistanceDateTimes = Utils.GetAssistanceTimeComparisonDateTime(assistanceTime.UhrzeitVon, assistanceTime.UhrzeitBis, currentDate);
var isInbetween = currentDate.InBetween(assistanceDateTimes.Start, assistanceDateTimes.End);
return isInbetween;
}
}
}

View File

@@ -124,5 +124,8 @@ namespace BS.Shared.DataContracts
[DataMember]
public string EmployeeAddressString { get; set; }
[DataMember]
public Guid Id { get; set; }
}
}

View File

@@ -481,6 +481,16 @@ namespace BS.Shared.Extensions
return start1 >= start2 && end1 <= end2;
}
public static bool IsIntervalInAbsenceTimeInterval(this DateTime start, DateTime end, DateTime absenceTimeStart, DateTime? absenceTimeEnd)
{
if (absenceTimeEnd == null)
{
return start >= absenceTimeStart && end >= absenceTimeStart;
}
return AreInBetweenDates(start, end, absenceTimeStart, absenceTimeEnd.Value);
}
/// <summary>
/// Prüft, ob das Datum in einem Zeitraum liegt. Wurde für Betreuungszeiten geschrieben.
/// Achtung: Sind beide Daten des Zeitraums null, wird true zurückgegeben!