Files
BeWoPlaner/BeWoPlanerMobil/Views/Customer/CustomerAbsenceTimeFormPartial.cshtml

233 lines
8.9 KiB
Plaintext

@using BeWoPlanerMobil.Models;
@using BS.Shared.Extensions
@model CustomerModel
<script type="text/javascript">
var initialDatePrependWidth = 0;
function calcAbsenceTimePrependWidth() {
try {
setTimeout(function () {
if(initialDatePrependWidth <= 0 && $.isNumeric(getMaxWidth("customer-absence-time-prepend"))) {
initialDatePrependWidth = getMaxWidth("customer-absence-time-prepend");
}
if(initialDatePrependWidth <= 0) {
return;
}
$(".customer-absence-time-prepend").width(getMaxWidth("customer-absence-time-prepend"));
});
} catch(error) {
showErrorPopup(error);
}
}
function validateAbsenceTimeForm() {
try {
$("#form-validation-result-column").addClass("d-none");
$("#form-validation-result-container").html("");
let validationMessage = "";
const allDay = $("#customer-absence-time-allday-cb").is(":checked");
const startDateString = $("#customer-absence-time-start-date-input").val();
const endDateString = $("#customer-absence-time-end-date-input").val(); // z.B. 2025-05-20
const startTimeString = $("#customer-absence-time-start-time-input").val(); // z.B. 09:17
const endTimeString = $("#customer-absence-time-end-time-input").val();
const isInfinite = endDateString.length === 0 && endTimeString.length === 0;
const start = allDay ? new Date(startDateString) : combineDateAndTime(new Date(startDateString), startTimeString);
const end = allDay ? new Date(endDateString) : combineDateAndTime(new Date(endDateString), endTimeString);
const isStartValid = false === isNaN(start.getTime());
const isEndValid = false === isNaN(end.getTime()) || isInfinite;
if(!isStartValid || !isEndValid) {
return "Die Datumsangaben sind ungültig!";
}
const selectedOption = $("#absence-reason-select option:selected");
if(!isInfinite && end.getTime() < start.getTime()) {
validationMessage = "Das Startdatum muss vor dem Enddatum liegen.";
}
if(selectedOption.val() === "-1") {
if(validationMessage.length === 0) {
validationMessage = "Die Kategorie darf nicht leer sein.";
} else {
validationMessage += "<br />Die Kategorie darf nicht leer sein.";
}
}
return validationMessage;
} catch(error) {
showErrorPopup(error);
}
}
function toggleAllDay() {
try {
const checkbox = $("#customer-absence-time-allday-cb");
const isChecked = checkbox.is(":checked");
if(isChecked === true) {
$("#customer-absence-time-start-time-input, #customer-absence-time-end-time-input").val(null);
}
$("#customer-absence-time-start-time-input, #customer-absence-time-end-time-input").prop("disabled", isChecked);
} catch(error) {
showErrorPopup(error);
}
}
function submitCustomerAbsenceTimesForm() {
try {
const validationMessage = validateAbsenceTimeForm();
if(validationMessage !== undefined && validationMessage !== null && validationMessage.length > 0) {
$("#form-validation-result-row").removeClass("d-none");
$("#form-validation-result-container").html(validationMessage);
return;
}
showSpinner();
$("#create-absence-time-form").submit();
$("#customer-absence-times-form-popup").modal("hide");
} catch(error) {
showErrorPopup(error);
}
}
function clearCustomerAbsenceTimesForm() {
try {
$("#customer-absence-time-notice, #customer-absence-time-start-date, #customer-absence-time-end-date, #customer-absence-time-start-time, #customer-absence-time-end-time").val("");
$.get("@Url.Action("DeselectAbsenceTime")");
//$.get("@Url.Action("DeselectAbsenceTime")").done(function() {
// $("#customer-absence-time-modal-body").load('@Url.Action("LoadAbsenceTimeToForm", "Customer")').load();
//});
} catch(error) {
showErrorPopup(error);
}
}
</script>
@using(Html.BeginForm("CreateOrUpdateAbsenceTime", "Customer", FormMethod.Post, new { id = "create-absence-time-form" }))
{
var isAllDay = Model.SelectedAbsenceTime?.Start?.IsTimeZero() ?? true;
var allDay = isAllDay ? "checked" : "";
var isDisabled = isAllDay ? "disabled" : "";
var startDate = Model.SelectedAbsenceTime?.Start?.ToString("yyyy-MM-dd");
var endDate = Model.SelectedAbsenceTime?.End?.ToString("yyyy-MM-dd");
var startTime = Model.SelectedAbsenceTime?.Start?.ToString("HH:mm");
var endTime = Model.SelectedAbsenceTime?.End?.ToString("HH:mm");
if(startTime?.Equals("00:00") ?? false)
{
startTime = string.Empty;
}
if(endTime?.Equals("00:00") ?? false)
{
endTime = string.Empty;
}
<input type="hidden" name="customer-absence-time-oid" value="@Model.SelectedAbsenceTime?.AbsenceTimeOid" />
<div class="form-row d-none" id="form-validation-result-row">
<div class="col-12">
<div class="alert alert-danger mb-0" role="alert" id="form-validation-result-container"></div>
</div>
</div>
@* Neue Datums- und Zeitinputs *@
<div class="form-row">
<div class="col-md-6 mt-2">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">
Startdatum
</span>
</div>
<input type="date" value="@startDate" class="form-control" id="customer-absence-time-start-date-input" name="customer-absence-time-start-date" />
</div>
</div>
<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 type="date" value="@endDate" class="form-control" id="customer-absence-time-end-date-input" name="customer-absence-time-end-date" />
</div>
</div>
</div>
<div class="form-row">
<div class="col-md-6 mt-2">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">
Von
</span>
</div>
<input type="time" class="form-control" id="customer-absence-time-start-time-input" name="customer-absence-time-start-time" @isDisabled value="@startTime" />
</div>
</div>
<div class="col-md-6 mt-2">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">
Bis
</span>
</div>
<input type="time" class="form-control" id="customer-absence-time-end-time-input" name="customer-absence-time-end-time" @isDisabled value="@endTime" />
</div>
</div>
</div>
@* /Neue Datums- und Zeitinputs *@
<div class="form-row">
<div class="col-md py-1">
<div class="custom-control custom-checkbox custom-control-inline">
<input type="checkbox" class="custom-control-input" name="customer-absence-time-allday-cb" id="customer-absence-time-allday-cb" onclick="toggleAllDay()" @allDay />
<label class="custom-control-label" for="customer-absence-time-allday-cb">ganztägig</label>
</div>
</div>
</div>
<div class="form-row">
<div class="col-md">
<div class="form-group mb-2 mt-0">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text customer-absence-time-prepend">
Kategorie
</div>
</div>
@Html.DropDownListFor(m => m.SelectedAbsenceReasonOid, Model.AbsenceReasonItems, new { @class = "custom-select", Id = "absence-reason-select", Name = "customer-absence-time-category" })
</div>
</div>
</div>
</div>
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text customer-absence-time-prepend">
Erläuterung
</div>
</div>
<textarea class="form-control" autocomplete="on" id="customer-absence-time-notice" name="customer-absence-time-notice" maxlength="1024">@(Model.SelectedAbsenceTime?.Notice ?? string.Empty)</textarea>
</div>
</div>
</div>
</div>
}