2024-06-05 14:45:33 +02:00
|
|
|
@using BeWoPlanerMobil.Models
|
|
|
|
|
@using BeWoPlanerMobil.Util
|
|
|
|
|
@using BS.Shared
|
|
|
|
|
@model BeWoPlanerMobil.Models.MainModel
|
|
|
|
|
|
2024-06-26 12:29:22 +02:00
|
|
|
@{
|
|
|
|
|
if(TempData[TempDataConstants.DoLogoutKey] is bool doLogout && doLogout)
|
|
|
|
|
{
|
|
|
|
|
<text>
|
|
|
|
|
<script type="text/javascript">
|
2025-05-16 19:24:16 +02:00
|
|
|
$("#second-logout-form").submit();
|
2024-06-26 12:29:22 +02:00
|
|
|
</script>
|
|
|
|
|
</text>
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-06-05 14:45:33 +02:00
|
|
|
<script type="text/javascript">
|
2025-05-16 19:24:16 +02:00
|
|
|
function toggleForm() {
|
|
|
|
|
const checkedCheckboxes = $(".cb2sc-input:checkbox:checked");
|
|
|
|
|
|
|
|
|
|
$(
|
|
|
|
|
"#employees-button, " +
|
|
|
|
|
"#category-select, " +
|
|
|
|
|
"#leistung-select, " +
|
|
|
|
|
"#gb-start-date-input, " +
|
|
|
|
|
"#gb-end-date-input, " +
|
|
|
|
|
"#gb-start-time-input, " +
|
|
|
|
|
"#gb-end-time-input, " +
|
|
|
|
|
"#gb-duration-input, " +
|
|
|
|
|
"#gb-distance-input, " +
|
|
|
|
|
"textarea, " +
|
|
|
|
|
"#reset-button, " +
|
|
|
|
|
"#create-button, " +
|
|
|
|
|
"#textbausteine-button, " +
|
|
|
|
|
"#gb-hours-minutes-dropdown-btn, " +
|
|
|
|
|
"#marker-cb")
|
|
|
|
|
.prop("disabled", (checkedCheckboxes.length > 0 ? false : true));
|
2024-06-26 12:29:22 +02:00
|
|
|
}
|
|
|
|
|
|
2025-05-16 19:24:16 +02:00
|
|
|
function addScCbRelsToGroupBooking() {
|
|
|
|
|
var selectedGroups = [];
|
|
|
|
|
var selectedSupportConcepts = [];
|
|
|
|
|
|
|
|
|
|
$("#group-booking-supportconcepts input:checked").each(function () {
|
|
|
|
|
selectedSupportConcepts.push($(this).attr("value"));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$("#group-booking-groups input:checked").each(function () {
|
|
|
|
|
selectedGroups.push($(this).attr("value"));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$("#group-booking-sc-cb-rel-tab-content").load("@Url.Action("AddScCbRelsToGroupBooking")", {relOids: selectedSupportConcepts, groupOids: selectedGroups}, function() {
|
|
|
|
|
$("#groupbooking-selection-container").load("@Url.Action("ReloadGroupBookingForm")", function () {
|
|
|
|
|
toggleForm();
|
|
|
|
|
|
2025-06-11 22:56:25 +02:00
|
|
|
$("#goals-tree").load("@Url.Action("ReloadGoals")", function() {
|
2025-05-16 19:24:16 +02:00
|
|
|
$("#tree").load("@Url.Action("LoadUpToDateTextModules")");
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function removeSupportConceptCostBearerRel(relOid) {
|
|
|
|
|
$(`#cb2sc-checkbox-${relOid}`).prop("checked", false);
|
|
|
|
|
|
|
|
|
|
$("#groupbooking-selection-container").load("@Url.Action("RemoveSupportConceptCostbearerRel")", {relOid: relOid}
|
2025-06-11 22:56:25 +02:00
|
|
|
, function () {
|
|
|
|
|
$("#goals-tree").load("@Url.Action("ReloadGoals")"
|
|
|
|
|
, function () {
|
|
|
|
|
toggleForm();
|
|
|
|
|
|
|
|
|
|
$("#tree").load("@Url.Action("LoadUpToDateTextModules")");
|
|
|
|
|
});
|
|
|
|
|
});
|
2025-05-16 19:24:16 +02:00
|
|
|
}
|
2024-06-05 14:45:33 +02:00
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
@if(Model != null)
|
|
|
|
|
{
|
|
|
|
|
var submitButtonText = Model.IsInEditingMode ? "Speichern" : "Anlegen";
|
|
|
|
|
|
2024-06-26 12:29:22 +02:00
|
|
|
using(Html.BeginForm("CreateOrUpdateGroupBooking", "Main", FormMethod.Post, new { id = "groupBookingForm" }))
|
2024-06-05 14:45:33 +02:00
|
|
|
{
|
2025-05-16 19:24:16 +02:00
|
|
|
var startDate = Model.SelectedServiceRecord?.Start?.ToString("yyyy-MM-dd") ?? DateTime.Today.ToString("yyyy-MM-dd");
|
|
|
|
|
var endDate = Model.SelectedServiceRecord?.End?.ToString("yyyy-MM-dd") ?? DateTime.Today.ToString("yyyy-MM-dd");
|
2024-06-05 14:45:33 +02:00
|
|
|
|
|
|
|
|
var distance = Model.SelectedServiceRecord?.DistanceInMeter?.ToString() ?? string.Empty;
|
|
|
|
|
|
|
|
|
|
var notice0 = Model.SelectedServiceRecord?.Notice ?? string.Empty;
|
|
|
|
|
var noticeList = new[] { string.Empty, string.Empty, string.Empty, string.Empty, string.Empty };
|
|
|
|
|
|
|
|
|
|
if(Model.SelectedServiceRecord?.NoticeList != null)
|
|
|
|
|
{
|
|
|
|
|
var selectedNoticeList = Model.SelectedServiceRecord.NoticeList;
|
|
|
|
|
for(var i = 0; i < selectedNoticeList.Count; i++)
|
|
|
|
|
{
|
|
|
|
|
noticeList[i] = selectedNoticeList[i] ?? string.Empty;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-06-26 12:29:22 +02:00
|
|
|
<div class="mt-3">
|
2025-04-11 18:02:24 +02:00
|
|
|
<div class="form-row">
|
|
|
|
|
<div class="col-md">
|
|
|
|
|
<div class="alert alert-danger collapse" role="alert" id="form-alert">
|
2024-06-05 14:45:33 +02:00
|
|
|
|
2025-04-11 18:02:24 +02:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2024-06-26 12:29:22 +02:00
|
|
|
@* Hilfepläne und Mitarbeiter *@
|
|
|
|
|
<div id="groupbooking-selection-container">
|
|
|
|
|
@Html.Partial("GroupBookingSelectionPartial", Model)
|
2024-06-05 14:45:33 +02:00
|
|
|
</div>
|
|
|
|
|
|
2025-04-11 18:02:24 +02:00
|
|
|
@* ----- Marker ----- *@
|
2024-06-26 12:29:22 +02:00
|
|
|
@if(Model.ShowMarker)
|
|
|
|
|
{
|
|
|
|
|
var markerCheckedValue = Model.SelectedServiceRecord?.ServiceRecordType == ServiceRecordTypeId.Content ? "checked" : string.Empty;
|
2024-06-05 14:45:33 +02:00
|
|
|
|
2025-04-11 18:02:24 +02:00
|
|
|
<div class="form-row mt-2">
|
2024-06-26 12:29:22 +02:00
|
|
|
<div class="col-md">
|
|
|
|
|
<div class="custom-control custom-checkbox custom-control-inline">
|
2025-05-23 15:57:18 +02:00
|
|
|
<input type="checkbox" class="custom-control-input" name="marker-cb" id="gb-marker-cb" @markerCheckedValue />
|
|
|
|
|
<label class="custom-control-label" for="gb-marker-cb">Marker</label>
|
2024-06-05 14:45:33 +02:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2024-06-26 12:29:22 +02:00
|
|
|
}
|
|
|
|
|
|
2024-09-12 14:55:35 +02:00
|
|
|
@* ----- Betrag ----- *@
|
2025-06-11 22:56:25 +02:00
|
|
|
@if(Model.ShowBetrag)
|
2024-09-12 14:55:35 +02:00
|
|
|
{
|
|
|
|
|
var betrag = string.Empty;
|
|
|
|
|
if(Model.SelectedServiceRecord?.Betrag != null && Model.SelectedServiceRecord.Betrag.Value > 0)
|
|
|
|
|
{
|
|
|
|
|
betrag = Model.SelectedServiceRecord.Betrag.Value.ToString("#.00");
|
|
|
|
|
}
|
|
|
|
|
|
2025-04-11 18:02:24 +02:00
|
|
|
<div class="form-row mt-2">
|
2024-09-12 14:55:35 +02:00
|
|
|
<div class="col-md">
|
2025-04-11 18:02:24 +02:00
|
|
|
<div class="form-group my-0">
|
2024-09-12 14:55:35 +02:00
|
|
|
<div class="input-group">
|
|
|
|
|
<div class="input-group-prepend">
|
|
|
|
|
<div class="input-group-text prepend-input-group-text">
|
|
|
|
|
Betrag
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2025-03-25 17:36:15 +01:00
|
|
|
<input class="form-control" type="text" autocomplete="on" id="betrag" name="betrag" value="@betrag" />
|
2024-09-12 14:55:35 +02:00
|
|
|
<div class="input-group-append">
|
|
|
|
|
<div class="input-group-text">€</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
}
|
|
|
|
|
|
2024-06-26 12:29:22 +02:00
|
|
|
@* Trennstrich *@
|
2025-04-11 18:02:24 +02:00
|
|
|
<hr class="py-0 mt-2 mb-0" />
|
2024-06-05 14:45:33 +02:00
|
|
|
|
2024-06-26 12:29:22 +02:00
|
|
|
@* Start- und Enddatum *@
|
2025-05-16 19:24:16 +02:00
|
|
|
@{
|
|
|
|
|
var columnWidth = Model.IsEndDateVisible ? "col-md-6" : "col";
|
|
|
|
|
}
|
2024-06-05 14:45:33 +02:00
|
|
|
|
2025-05-16 19:24:16 +02:00
|
|
|
<div class="form-row">
|
|
|
|
|
<div class="@columnWidth mt-2">
|
|
|
|
|
<div class="input-group">
|
|
|
|
|
<div class="input-group-prepend">
|
|
|
|
|
<span class="input-group-text">
|
|
|
|
|
Startdatum
|
|
|
|
|
</span>
|
|
|
|
|
</div>
|
|
|
|
|
<input class="form-control" type="date" name="Datum" id="gb-start-date-input" onchange="calcDuration('gb', false, true, false)" value="@startDate" />
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
@if(Model.IsEndDateVisible)
|
|
|
|
|
{
|
|
|
|
|
<div class="col-md-6 mt-2">
|
|
|
|
|
<div class="input-group">
|
|
|
|
|
<div class="input-group-prepend">
|
|
|
|
|
<span class="input-group-text">
|
|
|
|
|
Enddatum
|
|
|
|
|
</span>
|
|
|
|
|
</div>
|
|
|
|
|
<input class="form-control" type="date" name="Enddatum" id="gb-end-date-input" onchange="calcDuration('gb', false, false, true)" value="@endDate"/>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
}
|
|
|
|
|
</div>
|
2024-06-26 12:29:22 +02:00
|
|
|
|
|
|
|
|
@* Von und Bis *@
|
|
|
|
|
<div class="form-row">
|
2025-05-16 19:24:16 +02:00
|
|
|
@{
|
|
|
|
|
var startTimeValue = Model.StartTimeToEdit;
|
|
|
|
|
var endTimeValue = Model.EndTimeToEdit;
|
|
|
|
|
var divisor = Model.SelectedDurationUnit == "Stunden" ? 60 : 1;
|
|
|
|
|
var durationValue = string.Empty;
|
|
|
|
|
|
|
|
|
|
if(!(Model.SelectedServiceRecord is null))
|
|
|
|
|
{
|
|
|
|
|
durationValue = (Model.SelectedServiceRecord?.RoundedDuration / divisor).ToString();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var afterValidationState = TempData[TempDataConstants.AfterValidationStateKey];
|
|
|
|
|
|
|
|
|
|
if(Model.SetStartTimeToEndTimeAfterSave && !Model.IsInEditingMode && afterValidationState is bool isAfterValidation && isAfterValidation == false)
|
|
|
|
|
{
|
|
|
|
|
startTimeValue = Model.NewStartTime;
|
|
|
|
|
endTimeValue = Model.NewEndTime;
|
|
|
|
|
if(Model.NewDuration.HasValue)
|
|
|
|
|
{
|
|
|
|
|
durationValue = (Model.NewDuration / divisor).ToString();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
<div class="col mt-2">
|
|
|
|
|
<div class="input-group">
|
|
|
|
|
<div class="input-group-prepend">
|
2025-05-21 19:34:42 +02:00
|
|
|
<span class="input-group-text">
|
2025-05-16 19:24:16 +02:00
|
|
|
Von
|
|
|
|
|
</span>
|
|
|
|
|
</div>
|
|
|
|
|
<input class="form-control" type="time" name="Start" id="gb-start-time-input" onchange="calcDuration('gb', false, true, false)" value="@startTimeValue" />
|
|
|
|
|
<span class="input-group-text rounded-0 border-left-0 border-right-0">
|
|
|
|
|
Bis
|
|
|
|
|
</span>
|
|
|
|
|
<input class="form-control" type="time" name="Ende" id="gb-end-time-input" onchange="calcDuration('gb', false, false, true)" value="@endTimeValue" />
|
|
|
|
|
</div>
|
2024-06-05 14:45:33 +02:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
2024-06-26 12:29:22 +02:00
|
|
|
@* Dauer und Stunden/Minuten-Auswahl *@
|
|
|
|
|
<div class="form-row">
|
|
|
|
|
<div class="col-md">
|
2025-04-11 18:02:24 +02:00
|
|
|
<div class="form-group my-0">
|
|
|
|
|
<div class="input-group mt-2">
|
2024-06-26 12:29:22 +02:00
|
|
|
<div class="input-group-prepend">
|
|
|
|
|
@{
|
|
|
|
|
var labelText = Model.EinheitZeiterfassung == 1 ? "Dauer (h)" : "Dauer";
|
|
|
|
|
}
|
|
|
|
|
<div class="input-group-text prepend-input-group-text">
|
|
|
|
|
@labelText
|
|
|
|
|
</div>
|
2024-06-05 14:45:33 +02:00
|
|
|
</div>
|
2025-05-16 19:24:16 +02:00
|
|
|
<input type="text" autocomplete="on" class="form-control" id="gb-duration-input" name="Dauer" onchange="beiDaueraenderung('gb')" value="@durationValue">
|
2024-06-26 12:29:22 +02:00
|
|
|
@if(Model.IsZeiterfassungInStdMin)
|
|
|
|
|
{
|
|
|
|
|
<div class="input-group-append">
|
2025-05-16 19:24:16 +02:00
|
|
|
<button id="gb-hours-minutes-dropdown-btn" class="btn btn-outline-primary dropdown-toggle" type="button" data-toggle="dropdown">
|
2024-06-26 12:29:22 +02:00
|
|
|
@Model.SelectedDurationUnit
|
|
|
|
|
</button>
|
|
|
|
|
<div class="dropdown-menu w-100">
|
|
|
|
|
<a class="dropdown-item hours-minutes-link" href="#">Minuten</a>
|
|
|
|
|
<a class="dropdown-item hours-minutes-link" href="#">Stunden</a>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
}
|
2024-06-05 14:45:33 +02:00
|
|
|
</div>
|
2024-06-26 12:29:22 +02:00
|
|
|
</div>
|
2024-06-05 14:45:33 +02:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
2024-06-26 12:29:22 +02:00
|
|
|
@* Gefahrene Kilometer *@
|
2025-06-11 22:56:25 +02:00
|
|
|
@if(Model.ShowDistanceField)
|
2024-06-26 12:29:22 +02:00
|
|
|
{
|
|
|
|
|
<div class="form-row">
|
|
|
|
|
<div class="col-md">
|
2025-04-11 18:02:24 +02:00
|
|
|
<div class="form-group my-0">
|
|
|
|
|
<div class="input-group mt-2">
|
2024-06-26 12:29:22 +02:00
|
|
|
<div class="input-group-prepend">
|
|
|
|
|
<div class="input-group-text">Gefahrene Kilometer</div>
|
|
|
|
|
</div>
|
2025-05-16 19:24:16 +02:00
|
|
|
<input type="text" autocomplete="on" class="form-control" id="gb-distance-input" name="Distanz" onchange="validateDistanceInput()" value="@distance">
|
2024-06-26 12:29:22 +02:00
|
|
|
</div>
|
2024-06-05 14:45:33 +02:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2024-06-26 12:29:22 +02:00
|
|
|
}
|
2024-06-05 14:45:33 +02:00
|
|
|
|
2024-06-26 12:29:22 +02:00
|
|
|
@* Textbausteine *@
|
2025-06-11 22:56:25 +02:00
|
|
|
@if(Model.HasRightToSeeTextModules)
|
2024-06-05 14:45:33 +02:00
|
|
|
{
|
2024-06-26 12:29:22 +02:00
|
|
|
<div class="form-row" id="textmodule-container">
|
|
|
|
|
<div class="col-md">
|
2025-04-11 18:02:24 +02:00
|
|
|
<button type="button" class="btn btn-primary form-control mt-2" data-toggle="modal" data-target="#textbausteine-popup" id="textbausteine-button">Textbausteine</button>
|
2024-06-26 12:29:22 +02:00
|
|
|
</div>
|
2024-06-05 14:45:33 +02:00
|
|
|
</div>
|
|
|
|
|
}
|
|
|
|
|
|
2024-06-26 12:29:22 +02:00
|
|
|
@* Dokumentation *@
|
|
|
|
|
<div class="form-row">
|
2025-04-11 18:02:24 +02:00
|
|
|
<div class="col-md mt-2">
|
2024-06-26 12:29:22 +02:00
|
|
|
@if(Model.NumberOfDokuTypes == 0)
|
|
|
|
|
{
|
|
|
|
|
<div class="form-group">
|
2025-05-16 19:24:16 +02:00
|
|
|
<label for="gb-dokufeld-textarea">Dokumentation</label>
|
|
|
|
|
<button type="button" class="btn btn-outline-bewo-dev btn-sm bg-restore-btn" onclick="restoreField('gb-dokufeld-textarea')">
|
|
|
|
|
<i class="fas fa-recycle"></i>
|
|
|
|
|
</button>
|
|
|
|
|
<textarea class="form-control" autocomplete="on" name="Dokumentation6" id="gb-dokufeld-textarea">@notice0</textarea>
|
2024-06-26 12:29:22 +02:00
|
|
|
</div>
|
2024-06-05 14:45:33 +02:00
|
|
|
}
|
2024-06-26 12:29:22 +02:00
|
|
|
else
|
2024-06-05 14:45:33 +02:00
|
|
|
{
|
2024-06-26 12:29:22 +02:00
|
|
|
<ul class="nav nav-tabs" role="tab-list">
|
|
|
|
|
@for(var i = 0; i < Model.Dokutypes.Length; i++)
|
|
|
|
|
{
|
|
|
|
|
var currentDokuType = Model.Dokutypes[i];
|
|
|
|
|
|
|
|
|
|
<li class="nav-item">
|
2025-05-16 19:24:16 +02:00
|
|
|
<a href="#gb-doku_@i" id="gb-doku_@i-tab" data-toggle="tab" role="tab" class="nav-link@(i == 0 ? " active" : string.Empty)">
|
2024-06-26 12:29:22 +02:00
|
|
|
@currentDokuType.DisplayName
|
2025-05-16 19:24:16 +02:00
|
|
|
<button type="button" class="btn btn-outline-bewo-dev btn-sm gb-restore-btn" onclick="restoreField('gb-doku-textarea-@i')">
|
|
|
|
|
<i class="fas fa-recycle"></i>
|
|
|
|
|
</button>
|
2024-06-26 12:29:22 +02:00
|
|
|
</a>
|
|
|
|
|
</li>
|
|
|
|
|
}
|
|
|
|
|
</ul>
|
|
|
|
|
<div class="tab-content" id="dokufelderTab">
|
|
|
|
|
@for(var i = 0; i < Model.Dokutypes.Length; i++)
|
|
|
|
|
{
|
|
|
|
|
var textareaName = i + 1 < 1 ? "Dokumentation" : "Dokumentation" + (i + 1);
|
|
|
|
|
|
2025-05-16 19:24:16 +02:00
|
|
|
<div class="tab-pane show@(i == 0 ? " active" : string.Empty)" id="gb-doku_@i" role="tabpanel">
|
|
|
|
|
<textarea class="form-control doku-form-control" autocomplete="on" id="gb-doku-textarea-@i" name="@textareaName">@noticeList[i]</textarea>
|
2024-06-26 12:29:22 +02:00
|
|
|
</div>
|
|
|
|
|
}
|
2024-06-05 14:45:33 +02:00
|
|
|
</div>
|
|
|
|
|
}
|
|
|
|
|
</div>
|
2024-06-26 12:29:22 +02:00
|
|
|
</div>
|
2024-06-05 14:45:33 +02:00
|
|
|
</div>
|
|
|
|
|
}
|
2025-04-11 18:02:24 +02:00
|
|
|
<div class="d-flex bd-highlight mt-2">
|
2024-06-05 14:45:33 +02:00
|
|
|
<div class="mr-auto bd-highlight">
|
2024-06-26 12:29:22 +02:00
|
|
|
@* dient nur als Abstandshalter *@
|
2024-06-05 14:45:33 +02:00
|
|
|
</div>
|
|
|
|
|
<div class="ml-3 bd-highlight">
|
2025-06-27 13:11:10 +02:00
|
|
|
@if(Model.IsInTransferMode)
|
2024-06-05 14:45:33 +02:00
|
|
|
{
|
|
|
|
|
using(Html.BeginForm("ResetTransferMode", "Main", FormMethod.Post))
|
|
|
|
|
{
|
|
|
|
|
<button type="submit" class="btn btn-primary" onclick="showSpinner()">Abbrechen</button>
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
using(Html.BeginForm("ResetEditingMode", "Main", FormMethod.Post))
|
|
|
|
|
{
|
|
|
|
|
<button type="submit" class="btn btn-primary" onclick="showSpinner()">Abbrechen</button>
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
<div class="ml-3 bd-highlight">
|
|
|
|
|
<button type="button" class="btn btn-primary" id="create-button" onclick="submitGroupBookingForm()">@submitButtonText</button>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
}
|