diff --git a/BeWoPlanerMobil/BeWoPlanerMobil.csproj b/BeWoPlanerMobil/BeWoPlanerMobil.csproj index 6a7d40ba9..514490af7 100644 --- a/BeWoPlanerMobil/BeWoPlanerMobil.csproj +++ b/BeWoPlanerMobil/BeWoPlanerMobil.csproj @@ -746,7 +746,7 @@ - False + True False 8808 / diff --git a/BeWoPlanerMobil/BeWoPlanerMobil.csproj.user b/BeWoPlanerMobil/BeWoPlanerMobil.csproj.user index 359256714..2012955f6 100644 --- a/BeWoPlanerMobil/BeWoPlanerMobil.csproj.user +++ b/BeWoPlanerMobil/BeWoPlanerMobil.csproj.user @@ -15,7 +15,7 @@ root/Common/MVC/Controller 600 False - False + True False diff --git a/BeWoPlanerMobil/Controllers/MainController.cs b/BeWoPlanerMobil/Controllers/MainController.cs index c6e270aaa..684047232 100644 --- a/BeWoPlanerMobil/Controllers/MainController.cs +++ b/BeWoPlanerMobil/Controllers/MainController.cs @@ -118,7 +118,7 @@ namespace BeWoPlanerMobil.Controllers } } - Model.ShowBetrag = UserSettingsUtils.GetSettingValueAsBool(Model.Mandator.Settings, SettingsKeys.ShowBetrag); + AbstractModel.ShowBetrag = UserSettingsUtils.GetSettingValueAsBool(Model.Mandator.Settings, SettingsKeys.ShowBetrag); Model.ShowMarker = UserSettingsUtils.GetSettingValueAsBool(Model.Mandator.Settings, SettingsKeys.ShowMarker); } @@ -127,6 +127,11 @@ namespace BeWoPlanerMobil.Controllers Model.EinheitZeiterfassung = UserSettingsUtils.GetSettingValueAsInteger(mandatorSettings, SettingsKeys.EinheitZeiterfassung); + /* + * Minuten: 0 + * Stunden: 1 + * Min & Std: 2 + */ if(Model.EinheitZeiterfassung == 1) { Model.IsShowingDurationInHours = true; @@ -166,7 +171,7 @@ namespace BeWoPlanerMobil.Controllers Model.GroupsOfPeople = EmployeeService.GetAllGroups(GetUser().Employee.EmployeeOid).OrderBy(gop => gop.Name).ToList(); - Model.ShowDistanceField = UserSettingsUtils.GetSettingValueAsBool(mandatorSettings, SettingsKeys.ShowDistanceFields); + AbstractModel.ShowDistanceField = UserSettingsUtils.GetSettingValueAsBool(mandatorSettings, SettingsKeys.ShowDistanceFields); Model.Dokutypes = ValueListService.GetAllValueListEntrysByType(ValueListEntryType.DocumentType); if(Model.Dokutypes != null) @@ -184,7 +189,7 @@ namespace BeWoPlanerMobil.Controllers Model.EmployeesForGroupAndMultiBooking = EmployeeService.GetAllCompactEmployees().Where(e => e.ActivationType == ActivationTypeId.Active).OrderBy(e => e.LastName).ToList(); } - if (MobileSessionFacade.CheckForUserRight(UserRightType.ServiceRecord_AllowCreationForOtherEmployees)) + if(MobileSessionFacade.CheckForUserRight(UserRightType.ServiceRecord_AllowCreationForOtherEmployees)) { Model.Employees = EmployeeService.GetAllActiveEmployeesCompact(); } @@ -366,9 +371,7 @@ namespace BeWoPlanerMobil.Controllers return; } - var ratingTypes = OperationsService.GetAllRatingTypes().OrderBy(o => o.Position); ; - - Model.GoalRatingTypes = ratingTypes.ToList(); + Model.GoalRatingTypes = OperationsService.GetAllRatingTypes().OrderBy(o => o.Position).ToList(); } [Authorize] @@ -2343,8 +2346,6 @@ namespace BeWoPlanerMobil.Controllers var startDt = startDate.AddHours(startHoursDt.Hour).AddMinutes(startHoursDt.Minute); var endDt = endDate.AddHours(endHoursDt.Hour).AddMinutes(endHoursDt.Minute); - - var dauer = (int) (endDt - startDt).TotalMinutes; if(dauer == 0 || start == string.Empty && end == string.Empty) @@ -4542,15 +4543,44 @@ namespace BeWoPlanerMobil.Controllers var serviceRecordOids2GoalHeaders = new Dictionary>(); var goalOids = new List(); - var measures = new List(); + //var measures = new List(); + serviceRecords.DoForEach(serviceRecord => { - measures.AddRangeIfElementsNotIn(serviceRecord.Goals); + //measures.AddRangeIfElementsNotIn(serviceRecord.Goals); goalOids.AddRangeIfElementsNotIn(serviceRecord.Goals.Where(goal => goal.ParentOid.HasValue).Select(goal => goal.ParentOid.Value)); }); var goalCategories = ValueListService.GetGoalCategoriesByOids(goalOids); + //serviceRecords.DoForEach(serviceRecord => + //{ + // if(serviceRecord.ServiceRecordOid is null) + // { + // return; + // } + + // serviceRecord.Goals.OrderBy(vle => $"{vle.Abbreviation}-{vle.TypeDescription}").DoForEach(goal => + // { + // var goalCategory = goalCategories.FirstOrDefault(g => g.ValueListEntryOid.HasValue && goal.ValueListEntryOid.HasValue && g.ValueListEntryOid.Value.Equals(goal.ValueListEntryOid.Value) || (g.ValueListEntryOid.HasValue && goal.ParentOid.HasValue && g.ValueListEntryOid.Value.Equals(goal.ParentOid.Value))); + + // if(goalCategory != null) + // { + // serviceRecordOids2GoalHeaders.AddOrUpdateValueInDictionary(serviceRecord.ServiceRecordOid.Value, new List { goalCategory.DisplayName }); + // } + // }); + //}); + + Model.ServiceRecordOids2GoalHeader = GetServiceRecordOids2GoalHeaders(serviceRecords, goalCategories); + + Model.ServiceRecords = serviceRecords; + } + + [Authorize] + public static Dictionary> GetServiceRecordOids2GoalHeaders(List serviceRecords, List goalCategories) + { + var serviceRecordOids2GoalHeaders = new Dictionary>(); + serviceRecords.DoForEach(serviceRecord => { if(serviceRecord.ServiceRecordOid is null) @@ -4569,9 +4599,7 @@ namespace BeWoPlanerMobil.Controllers }); }); - Model.ServiceRecordOids2GoalHeader = serviceRecordOids2GoalHeaders; - - Model.ServiceRecords = serviceRecords; + return serviceRecordOids2GoalHeaders; } [Authorize] diff --git a/BeWoPlanerMobil/Controllers/ReportController.cs b/BeWoPlanerMobil/Controllers/ReportController.cs index 6315423dd..87107f211 100644 --- a/BeWoPlanerMobil/Controllers/ReportController.cs +++ b/BeWoPlanerMobil/Controllers/ReportController.cs @@ -14,7 +14,6 @@ using System.Linq; using System.Text; using System.Web.Mvc; using BeWo.Service.Plugins; -using BS.Shared.DataContracts.Compact; // Controller des Quittierungsbelegsmoduls @@ -113,23 +112,6 @@ namespace BeWoPlanerMobil.Controllers Model.Customers.Clear(); - //if(AbstractModel.CheckForAtLeastOneRight(new[] { UserRightType.CustomerView_View, UserRightType.ViewAll })) - //{ - // Model.Customers = CustomerService.GetAllActiveCustomersForEmployee().OrderByDescending(x => x.LastName).ToList(); - //} - //else - //{ - // if(AbstractModel.CheckRight(UserRightType.Customer_ViewMyCustomers)) - // { - // Model.Customers = MobileSessionFacade.LoggedInEmployee.RelatedCustomers.OrderByDescending(x => x.Customer.LastName).Select(customerEmployeeRelation => customerEmployeeRelation.Customer).ToList(); - // } - - // if(AbstractModel.CheckRight(UserRightType.Customer_ViewMyTeams)) - // { - // Model.Customers.AddRangeIfElementsNotIn(EmployeeService.GetActiveCompactCustomersForEmployee()); - // } - //} - Model.Customers = EmployeeService.GetActiveCompactCustomersForEmployee(Model.Employee.EmployeeOid.Value); Model.Employees = EmployeeService.GetActiveCompactEmployeesForEmployee(MobileSessionFacade.LoggedInCompactEmployee.EmployeeOid); @@ -140,6 +122,12 @@ namespace BeWoPlanerMobil.Controllers Model.Organisations.Sort((x, y) => string.Compare(x.Name, y.Name, StringComparison.CurrentCulture)); Model.AllTeams = EmployeeService.GetAllActiveCompactTeamsForEmployee(MobileSessionFacade.LoggedInEmployee.EmployeeOid); + + Model.Dokutypes = ValueListService.GetAllValueListEntrysByType(ValueListEntryType.DocumentType); + if(Model.Dokutypes != null) + { + Model.Dokutypes = Model.Dokutypes.OrderBy(s => s.ValueListEntryOid).ToArray(); + } } catch(Exception e) { @@ -1295,6 +1283,11 @@ namespace BeWoPlanerMobil.Controllers Model.ConfirmationReceiptObject.ConfirmationReceiptResultList.AddRangeIfElementsNotIn(confirmationReceiptResults.OrderBy(o => o.CustomerName)); + if(Model.ConfirmationReceiptObject.ConfirmationReceiptResultList.Any()) + { + Model.GoalRatingTypes = OperationsService.GetAllRatingTypes().OrderBy(o => o.Position).ToList(); + } + if(Model.ConfirmationReceiptObject.ConfirmationReceiptResultList.All(qbItem => qbItem.Items.Count == 0)) { TempData[TempDataConstants.HasWarningMessageKey] = true; @@ -1312,6 +1305,7 @@ namespace BeWoPlanerMobil.Controllers public class ConfirmationReceiptSignatureObject { + public Guid Identifier { get; } public string ImageStr { get; } public string InsTsStr { get; } public string PersonName { get; } @@ -1321,6 +1315,8 @@ namespace BeWoPlanerMobil.Controllers public ConfirmationReceiptSignatureObject(string imageStr, string insTsStr, string personName, bool isEmployeeSignature, List serviceRecords) { + Identifier = Guid.NewGuid(); + ImageStr = imageStr; InsTsStr = insTsStr; PersonName = personName; diff --git a/BeWoPlanerMobil/Global.asax.cs b/BeWoPlanerMobil/Global.asax.cs index 87e666920..602ebc385 100644 --- a/BeWoPlanerMobil/Global.asax.cs +++ b/BeWoPlanerMobil/Global.asax.cs @@ -29,13 +29,7 @@ namespace BeWoPlanerMobil } protected void Application_BeginRequest(object sender, EventArgs e) - { - //Context.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1)); - // Context.Response.Cache.SetAllowResponseInBrowserHistory(false); - // Context.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches); - // Context.Response.Cache.SetCacheability(HttpCacheability.NoCache); - // Context.Response.Cache.SetNoStore(); - + { ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; } diff --git a/BeWoPlanerMobil/Models/AbstractModel.cs b/BeWoPlanerMobil/Models/AbstractModel.cs index c380046a8..8816bea7c 100644 --- a/BeWoPlanerMobil/Models/AbstractModel.cs +++ b/BeWoPlanerMobil/Models/AbstractModel.cs @@ -248,5 +248,9 @@ namespace BeWoPlanerMobil.Models return "1" == settingsValue; } } + + public static bool ShowDistanceField { get; set; } + + public static bool ShowBetrag { get; set; } } } \ No newline at end of file diff --git a/BeWoPlanerMobil/Models/MainModel.cs b/BeWoPlanerMobil/Models/MainModel.cs index f72d907d2..afed56927 100644 --- a/BeWoPlanerMobil/Models/MainModel.cs +++ b/BeWoPlanerMobil/Models/MainModel.cs @@ -229,8 +229,6 @@ namespace BeWoPlanerMobil.Models public long? ServiceRecordOidToDelete { get; set; } - public bool ShowDistanceField { get; set; } - public MainModel() { NewServiceRecord = new ServiceRecordDC(); @@ -509,6 +507,10 @@ namespace BeWoPlanerMobil.Models public int EinheitZeiterfassung { get; set; } + public string StartDateToEditJSFormat => SelectedServiceRecord?.Start?.ToString("yyyy-MM-dd") ?? DateTime.Today.ToString("yyyy-MM-dd"); + + public string EndDateToEditJSFormat => SelectedServiceRecord?.End?.ToString("yyyy-MM-dd") ?? DateTime.Today.ToString("yyyy-MM-dd"); + public string StartDateToEdit => SelectedServiceRecord?.Start?.ToShortDateString() ?? DateTime.Today.ToShortDateString(); public string EndDateToEdit => SelectedServiceRecord?.End?.ToShortDateString() ?? DateTime.Today.ToShortDateString(); @@ -755,7 +757,7 @@ namespace BeWoPlanerMobil.Models return SelectedServiceDescription; } - public bool ShowBetrag { get; set; } + public string LocalStorageKey => $"bwp_{MobileSessionFacade.Tenant}_{MobileSessionFacade.LoggedInUser.Oid}"; } public class CustomSelectListItem diff --git a/BeWoPlanerMobil/Models/ReportModel.cs b/BeWoPlanerMobil/Models/ReportModel.cs index cb6a90367..57e9bbf5a 100644 --- a/BeWoPlanerMobil/Models/ReportModel.cs +++ b/BeWoPlanerMobil/Models/ReportModel.cs @@ -260,5 +260,13 @@ namespace BeWoPlanerMobil.Models public int MaxResults { get; set; } = 10; public int QbEntryPageCount { get; set; } public int CurrentQbEntryPage { get; set; } + + public List GoalRatingTypes { get; set; } = new List(); + + public Dictionary> ServiceRecordOids2GoalHeader { get; set; } + + public ValueListEntryDC[] Dokutypes { get; set; } + + public int NumberOfDokuTypes => Dokutypes?.Length ?? 0; } } \ No newline at end of file diff --git a/BeWoPlanerMobil/Models/SchedulerModel.cs b/BeWoPlanerMobil/Models/SchedulerModel.cs index f8320b4b3..bbaa5d4ad 100644 --- a/BeWoPlanerMobil/Models/SchedulerModel.cs +++ b/BeWoPlanerMobil/Models/SchedulerModel.cs @@ -174,8 +174,8 @@ namespace BeWoPlanerMobil.Models public DateTime? IntervalStartDate { get; set; } public DateTime? IntervalEndDate { get; set; } - public string IntervalStartDateStr => IntervalStartDate.HasValue ? $"{IntervalStartDate:dd.MM.yyyy}" : string.Empty; - public string IntervalEndDateStr => IntervalEndDate.HasValue ? $"{IntervalEndDate:dd.MM.yyyy}" : string.Empty; + public string IntervalStartDateStr => IntervalStartDate.HasValue ? IntervalStartDate.Value.ToString("yyyy-MM-ddTHH:mm") : string.Empty; + public string IntervalEndDateStr => IntervalEndDate.HasValue ? IntervalEndDate.Value.ToString("yyyy-MM-ddTHH:mm") : string.Empty; public string IntervalStartTimeStr => IntervalStartDate.HasValue ? $"{IntervalStartDate:HH:mm}" : string.Empty; public string IntervalEndTimeStr => IntervalEndDate.HasValue ? $"{IntervalEndDate:HH:mm}" : string.Empty; diff --git a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/mobileUtils.js b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/mobileUtils.js index 71fbe2ecd..73e759602 100644 --- a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/mobileUtils.js +++ b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/mobileUtils.js @@ -190,14 +190,18 @@ function showAlertMessageBox(title, message, callback, executeCallbackByBothButt $("#message-popup-ok-btn").off("click"); $("#message-popup-ok-btn").on("click", function() { - callback(); + if(typeof callback === "function") { + callback(); + } }); $("#message-popup-close-btn").off("click"); if(executeCallbackByBothButtons === true) { $("#message-popup-close-btn").on("click", function() { - callback(); + if (typeof callback === "function") { + callback(); + } }); } diff --git a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/signature.js b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/signature.js index 15b0673a7..534fd64c1 100644 --- a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/signature.js +++ b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/signature.js @@ -3,6 +3,60 @@ function hideSignature() { $("#signature-img-popup").modal("hide"); } +function updateCanvasSize(canvasJQueryElement) { + if(canvasJQueryElement.length === 0) { + logError("Canvas nicht gefunden!"); + return; + } + + const rowWidth = canvasJQueryElement.parent().parent().innerWidth(); + + const sourceCanvas = document.getElementById(canvasJQueryElement.attr("id")); + + const canvasWidth = sourceCanvas.scrollWidth; + + const newWidth = rowWidth; + + var parsedNewWidth = parseInt(newWidth, 10); + const parsedCanvasWidth = parseInt(canvasWidth, 10); + + let isMinDifferenceMet = false; + + if (parsedCanvasWidth > parsedNewWidth) { + isMinDifferenceMet = parsedCanvasWidth - parsedNewWidth > 4; + } else { + isMinDifferenceMet = parsedNewWidth - parsedCanvasWidth > 4; + } + + if (isMinDifferenceMet) { + var trimmedCanvas = trimCanvas(cloneCanvas(sourceCanvas)); + + var canvasContext = sourceCanvas.getContext("2d", { willReadFrequently: true }); + + canvasJQueryElement.prop("width", newWidth); + + if(trimmedCanvas.width <= 0 || trimmedCanvas.height <= 0) { + return; + } + + var img = new Image; + + img.onload = function () { + if (trimmedCanvas.width > parsedNewWidth) { + const factor = trimmedCanvas.height / trimmedCanvas.width; + const newHeight = parsedNewWidth * factor; + + canvasContext.drawImage(img, 0, 0, parsedNewWidth - 1, newHeight - 1); + } else { + canvasContext.drawImage(img, 0, 0); + } + }; + + img.src = trimmedCanvas.toDataURL(); + } +} + +// Veraltet seit 17.04.2025; Neue Funktion: updateCanvasSize(canvasJQueryElement) function resizeCanvas(sketchPadId, canvasRoId) { if($(sketchPadId).length !== 0) { const rowWidth = $(canvasRoId).innerWidth(); @@ -38,9 +92,8 @@ function resizeCanvas(sketchPadId, canvasRoId) { img.onload = function () { if(trimmedCanvas.width > parsedNewWidth) { - var factor = trimmedCanvas.height / trimmedCanvas.width; - - var newHeight = parsedNewWidth * factor; + const factor = trimmedCanvas.height / trimmedCanvas.width; + const newHeight = parsedNewWidth * factor; canvasContext.drawImage(img, 0, 0, parsedNewWidth - 1, newHeight - 1); } else { @@ -53,13 +106,14 @@ function resizeCanvas(sketchPadId, canvasRoId) { } } +// Das Initialisieren der Einzelunterschrift function initializeSignature(selectedServiceRecordOid) { $("#main-container, #checkbox-container").hide(); $("#signature-container").addClass("d-block"); - $.get(getSelectedRecordInformationUrlWithOid(), { oid: selectedServiceRecordOid }).done(function(jsonServiceRecord2Monatsunterschrift) { + $.get(window.getSelectedRecordInformationUrlWithOid(), { oid: selectedServiceRecordOid }).done(function(jsonServiceRecord2Monatsunterschrift) { if(jsonServiceRecord2Monatsunterschrift === "SessionTimeout") { - window.location.href = getRedirectLink(); + window.location.href = window.getRedirectLink(); return; } @@ -125,7 +179,7 @@ function initializeSignature(selectedServiceRecordOid) { $("#signature-alert").removeClass("d-none"); } - resizeCanvas("#sketch-pad", "#canvas-row"); + updateCanvasSize($("#sketch-pad")); var canvas = document.getElementById("sketch-pad"); diff --git a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/service-record-time-calc.js b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/service-record-time-calc.js index b0ec0ecfb..28d21d752 100644 --- a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/service-record-time-calc.js +++ b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/service-record-time-calc.js @@ -84,13 +84,13 @@ function onDurationChange(startTimeId, endTimeId, startDateId, endDateId, durati } } -// ToDo: Erst Dauer, dann Start- oder Endzeit führt dazu, dass die Dauer in Stunden benutzt wird! +// ToDo: VERALTET (14.05.2025); Erst Dauer, dann Start- oder Endzeit führt dazu, dass die Dauer in Stunden benutzt wird! function calculateDuration(isInvocatedByHoursMinutesButton, startTimeId, endTimeId, durationId, hoursMinutesDropdownBtnId, startDatePickerId, endDatePickerId, isInvokedByStartElement, isInvokedByEndElement) { var startTime = $(`#${startTimeId}`).val(); var endTime = $(`#${endTimeId}`).val(); var duration = $(`#${durationId}`).val(); - var hoursMinutesDropdownButton = $("#" + hoursMinutesDropdownBtnId); + var hoursMinutesDropdownButton = $(`#${hoursMinutesDropdownBtnId}`); var isInMin = window.getIsZeiterfassungseinheitInMinutes(); @@ -192,6 +192,207 @@ function calculateDuration(isInvocatedByHoursMinutesButton, startTimeId, endTime -function calcTimeWithDuration() { + + + + + + + + + + + + + + + +function calcDuration(idPrefix, isFormatChange, isInvokedByStart, isInvokedByEnd) { + const endDateInput = $(`#${idPrefix}-end-date-input`); + const startDateInput = $(`#${idPrefix}-start-date-input`); + const endTimeInput = $(`#${idPrefix}-end-time-input`); + const startTimeInput = $(`#${idPrefix}-start-time-input`); + const durationInput = $(`#${idPrefix}-duration-input`); + const hoursMinutesBtn = $(`#${idPrefix}-hours-minutes-dropdown-btn`); + + const startDateValue = startDateInput.val(); + const startTimeValue = startTimeInput.val(); + const endDateValue = endDateInput.val(); + const endTimeValue = endTimeInput.val(); + const durationValue = durationInput.val(); + const isInMin = hoursMinutesBtn.length === 0 || hoursMinutesBtn.length > 0 && hoursMinutesBtn.text().replaceAll(/\s/g, "") !== "Minuten"; + const hasEndDate = endDateInput.length; + + if (startDateValue.length === 0) { + return; + } + + const isStartTimeValid = startTimeValue !== null && startTimeValue !== undefined && startTimeValue.length > 0; + const isEndTimeValid = endTimeValue !== null && endTimeValue !== undefined && endTimeValue.length > 0; + const duration = parseFloat(durationValue.replace(",", ".")); + const isDurationValid = !isNaN(duration); + + let start = new Date(startDateValue); + let end = hasEndDate ? new Date(endDateValue) : start; + + if (true === isStartTimeValid && true === isEndTimeValid && false === isFormatChange) { + start = combineDateAndTime(start, startTimeValue); + end = combineDateAndTime(end, endTimeValue); + + let dauer = (end.getTime() - start.getTime()) / 60000; + + if (duration > 0 && true === isInvokedByStart && start >= end) { + end = new Date(start.getTime() + (false === isInMin ? duration * 60 : duration) / 60000); + + endTimeInput.val(getTimeAsString(end)); + endDateInput.val(getDateAsString(end)); + + dauer = (end.getTime() - start.getTime()) * 60000; + } + + if (duration > 0 && true === isInvokedByEnd && start >= end) { + start = new Date(end.getTime() - (false === isInMin ? duration * 60 : duration) / 60000); + + startTimeInput.val(getTimeAsString(start)); + startDateInput.val(getDateAsString(start)); + + dauer = (end.getTime() - start.getTime()) * 60000; + } + + durationInput.val(dauer); + } else if(true === isStartTimeValid && true === isDurationValid) { + if(true === isFormatChange) { + let newDurationValue = true === isInMin ? duration * 60.0 : duration / 60.0; + + if(isNaN(newDurationValue)) { + durationInput.val(""); + } else { + durationInput.val(newDurationValue); + } + } + + calcTimeWithDuration(startTimeValue, endTimeInput, start, duration, isFormatChange, isInMin); + } else if(true === isEndTimeValid && true === isDurationValid) { + if(true === isFormatChange) { + durationInput.val(formatDuration(isInMin, true === isInMin ? duration * 60.0 : duration / 60.0)); + } + + calcTimeWithDuration(endTimeValue, startTimeInput, start, duration * -1.0, isFormatChange, isInMin); + } else if(true === isFormatChange) { + if (true === isFormatChange) { + durationInput.val(formatDuration(isInMin, true === isInMin ? duration * 60.0 : duration / 60.0)); + } + } +} + +function formatDuration(isInMin, durationAsNumber) { + if(true === isNaN(durationAsNumber)) { + return ""; + } + + const roundedValue = Math.round(durationAsNumber * 1000) / 1000; + + if(isInMin) { + return roundedValue.toString().includes(".") ? roundedValue.toString().split(".")[0] : roundedValue; + } else { + if (roundedValue.toString().includes(".")) { + const splitRoundedValue = roundedValue.toString().split("."); + const [predecimalPlaces, decimalPlaces] = splitRoundedValue; + + const end = decimalPlaces.length === 0 ? "00" : decimalPlaces.length > 2 ? decimalPlaces.substring(0, 2) : `${decimalPlaces}0`; + + return `${predecimalPlaces},${end}`; + } else { + return `${roundedValue},00`; + } + } +} + +function calcTimeWithDuration(timeAsString, timeElement, start, duration, isFormatChange, isInMin) { + start = combineDateAndTime(start, timeAsString); + + const x = new Date(start.getTime() + duration * 60000); + timeElement.val(`${x.getMinutes().toString().padStart(2, "0")}:${x.getMinutes().toString().padStart(2, "0")}`); +} + +function beiDaueraenderung(idPrefix) { + const startTimeInput = $(`#${idPrefix}-start-time-input`); + const endTimeInput = $(`#${idPrefix}-end-time-input`); + const durationInput = $(`#${idPrefix}-duration-input`); + const startDateInput = $(`#${idPrefix}-start-date-input`); + const endDateInput = $(`#${idPrefix}-end-date-input`); + const isInMin = $(`#${idPrefix}-hours-minutes-dropdown-btn`).text().replaceAll(/\s/g, "") === "Minuten"; + + const startTimeCondition = startTimeInput.val().length > 0; + const endTimeCondition = endTimeInput.val().length > 0; + let duration = parseFloat(durationInput.val().replace(",", ".")); + + const durationCondition = false === isNaN(duration); + + if((false === startTimeCondition && false === endTimeCondition) || false === durationCondition) { + return; + } + + if(false === isInMin) { + duration *= 60; + } + + let start = new Date(); + let end = new Date(); + + if(startDateInput.length > 0) { + start = new Date(startDateInput.val()); + end = new Date(start); + } + + if(endDateInput.length > 0) { + end = new Date(endDateInput.val()); + } + + if(true === startTimeCondition) { + const startDateAndTimeCombined = combineDateAndTime(start, startTimeInput.val()); + + end = new Date(startDateAndTimeCombined.getTime() + duration * 60000); + + endTimeInput.val(getTimeAsString(end)); + endDateInput.val(getDateAsString(end)); + } else { + const endDateAndTimeCombined = combineDateAndTime(end, endTimeInput.val()); + + start = new Date(endDateAndTimeCombined.getTime() - duration * 60000); + + startTimeInput.val(getTimeAsString(start)); + startDateInput.val(getDateAsString(start)); + } +} + +function combineDateAndTime(date, time) { + const hours = time.split(":")[0]; + const minutes = time.split(":")[1]; + + return new Date(date.getFullYear(), date.getMonth(), date.getDate(), hours, minutes); +} + +function getTimeAsString(date) { + const hours = date.getHours().toString().padStart(2, "0"); + const minutes = date.getMinutes().toString().padStart(2, "0"); + + return `${hours}:${minutes}`; +} + +function getDateAsString(dateObject) { + const year = dateObject.getFullYear(); + const date = dateObject.getDate().toString().padStart(2, "0"); + const month = (dateObject.getMonth() + 1).toString().padStart(2, "0"); + + return `${year}-${month}-${date}`; +} + +function dateToDateMonthFullYearStr(date) { + const dayOfMonth = date.getDate(); + const month = date.getMonth() + 1; + const fullYear = date.getFullYear(); + + return `${dayOfMonth}.${month}.${fullYear}`; } \ No newline at end of file diff --git a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/view-scripts/main.js b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/view-scripts/main.js index b1602e4f7..25421d09e 100644 --- a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/view-scripts/main.js +++ b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/view-scripts/main.js @@ -44,39 +44,43 @@ function resetCreateForm() { function submitSingleBookingForm() { showSpinner(); - validateForm($("#singleBookingForm"), null); -} - -function submitCreateForm() { - showSpinner(); - - validateForm($("#serviceRecordCreationForm"), null); -} - -function submitEditForm() { - showSpinner(); - - validateForm($("#serviceRecordEditForm"), null); + validateForm($("#singleBookingForm"), "sb"); } function submitGroupBookingEditForm() { showSpinner(); - validateForm($("#groupBookingEditingForm"), null); + validateForm($("#groupBookingEditingForm"), "gb"); } function submitGroupBookingForm() { showSpinner(); - validateForm($("#groupBookingForm"), null); + validateForm($("#groupBookingForm"), "gb"); } -function deactivateGroupBookingForm() { - $("#betrag, #employees-button, #category-select, #leistung-select, #start-date, #end-date, #start-time, #end-time, #duration, #distance, textarea, #reset-button, #create-button, #textbausteine-button, #hours-minutes-dropdown-btn, #marker-cb").prop("disabled", true); -} - -function activateGroupBookingForm() { - $("#betrag, #employees-button, #category-select, #leistung-select, #start-date, #end-date, #start-time, #end-time, #duration, #distance, textarea, #reset-button, #create-button, #textbausteine-button, #hours-minutes-dropdown-btn, #marker-cb").prop("disabled", false); +function toggleGroupBookingForm() { + const isEnabled = $("#selected-cb2sc-list").children().length > 0; + + $( + "#betrag, " + + ".gb-restore-btn," + + "#employees-button, " + + "#category-select, " + + "#leistung-select, " + + "#gb-start-date-input, " + + "#gb-end-date-input, " + + "#gb-start-time-input, " + + "#gb-end-time-input, " + + "#db-duration-input, " + + "#gb-distance-input, " + + "textarea, " + + "#reset-button, " + + "#create-button, " + + "#textbausteine-button, " + + "#gb-hours-minutes-dropdown-btn, " + + "#marker-cb" + ).prop("disabled", isEnabled ? false : true); } function deleteServiceRecord(serviceRecordOid) { @@ -159,12 +163,12 @@ function validateForm(form, prefix) { if(isNoticeMandatory) { if(numberOfNoticeTextareas === 0) { - var doku = $(`#${prefix}dokufeld`).val(); + var doku = $(`#${prefix}-dokufeld`).val(); isValid = doku.length > 0; } else { for(var i = 0; i < numberOfNoticeTextareas; i++) { - var d = $(`#${prefix}doku-textarea-${i}`).val(); + var d = $(`#${prefix}-doku-textarea-${i}`).val(); isValid = d.length > 0; @@ -202,17 +206,19 @@ function validateForm(form, prefix) { if(startAndEndDates !== null && isValid) { var [start, end] = startAndEndDates; - if(end.isBefore(start)) { - showAlertMessageBox("Fehler", "Das Ende muss vor dem Start liegen!", null, false); + if(end.getTime() < start.getTime()) { + showAlertMessageBox("Fehler", "Der Start muss vor dem Ende liegen!", null, false); + hideSpinner(); + return; } - var [doku1, doku2, doku3, doku4, doku5] = getDokuTexte(); + var [doku1, doku2, doku3, doku4, doku5] = getDokuTexte(prefix); - var startTimeInput = $(`#${prefix}start-time`); - var endTimeInput = $(`#${prefix}end-time`); - - $("#srv-date").val(start.format("DD.MM.YYYY")); - $("#srv-end-date").val(end.format("DD.MM.YYYY")); + var startTimeInput = $(`#${prefix}-start-time-input`); + var endTimeInput = $(`#${prefix}-end-time-input`); + + $("#srv-date").val(`${dateToDateMonthFullYearStr(start)}`); + $("#srv-end-date").val(`${dateToDateMonthFullYearStr(end)}`); $("#srv-start").val(startTimeInput.val()); $("#srv-end").val(endTimeInput.val()); @@ -221,11 +227,11 @@ function validateForm(form, prefix) { $("#srv-doku3").val(doku3); $("#srv-doku4").val(doku4); $("#srv-doku5").val(doku5); - $("#srv-distance").val($(`#${prefix}distance`).val()); + $("#srv-distance").val($(`#${prefix}-distance-input`).val()); $("#srv-form-id").val(form.attr("id")); - $("#srv-marker").val($(`#${prefix}marker-cb`).is(":checked") ? "on" : "off"); - $("#srv-service-description").val($(`#${prefix}leistung-select`).find(":selected").val()); - $("#srv-duration").val($(`#${prefix}duration`).val()); + $("#srv-marker").val($(`#${prefix}-marker-cb`).is(":checked") ? "on" : "off"); + $("#srv-service-description").val($(`#${prefix}-leistung-select`).find(":selected").val()); + $("#srv-duration").val($(`#${prefix}-duration-input`).val()); $("#srv-betrag").val($("#betrag").val()); showSpinner(); @@ -233,21 +239,17 @@ function validateForm(form, prefix) { } } -function getDokuTexte() { +function getDokuTexte(prefix) { + const noticeList = [null, null, null, null, null]; + try { - const noticeList = [null, null, null, null, null]; - - const isMultiBooking = $("#mb-dokufeld").length > 0 || $("#mb-doku-textarea-0").length > 0; - - const multiBookingPrefix = isMultiBooking ? "mb-" : ""; - - const hasMultipleDokufelder = $(`#${multiBookingPrefix}dokufeld`).length === 0; + const hasMultipleDokufelder = $(`#${prefix}-dokufeld-textarea`).length === 0; let dokufeldCounter = 0; if(hasMultipleDokufelder) { for(let i = 0; i < 5; i++) { - const dokufeld = $(`#${multiBookingPrefix}doku-textarea-${i}`); + const dokufeld = $(`#${prefix}-doku-textarea-${i}`); if(dokufeld.length > 0) { noticeList[i] = dokufeld.val(); @@ -255,22 +257,22 @@ function getDokuTexte() { } } } else { - noticeList[0] = $(`#${multiBookingPrefix}dokufeld`).val(); + noticeList[0] = $(`#${prefix}-dokufeld-textarea`).val(); dokufeldCounter = 1; } let x = ""; - for(let ii = 0; ii < dokufeldCounter; ii++) { - x += noticeList[ii]; + for(let j = 0; j < dokufeldCounter; j++) { + x += noticeList[j]; - if(ii < noticeList.length - 1) { + if(j < noticeList.length - 1) { x += ", "; } } - - return noticeList; } catch (error) { window.showErrorPopup(error); + } finally { + return noticeList; } } @@ -324,91 +326,38 @@ function checkNumberInput(inputId) { } // Wird bei der Validierung des Formulars benutzt +// ToDo: Umbauen zu JavaScript-Date-Objekt function getStartAndEndDate(prefix) { if(prefix === undefined || prefix === null) { prefix = ""; } - var startTimePicker = $(`#${prefix}start-time-picker`); - var endTimePicker = $(`#${prefix}end-time-picker`); - var startDatePicker = $(`#${prefix}start-date-picker`); - var endDatePicker = $(`#${prefix}end-date-picker`); + const startDateInput = $(`#${prefix}-start-date-input`); + const endDateInput = $(`#${prefix}-end-date-input`); + const startTimeInput = $(`#${prefix}-start-time-input`); + const endTimeInput = $(`#${prefix}-end-time-input`); - startDatePicker.datetimepicker("show"); - startDatePicker.datetimepicker("hide"); + const startDate = new Date(startDateInput.val()); + const startTime = startTimeInput.val(); - endDatePicker.datetimepicker("show"); - endDatePicker.datetimepicker("hide"); - - var startDate = startDatePicker.datetimepicker("date"); - var endDate = endDatePicker.datetimepicker("date"); + const endDate = new Date(endDateInput.val()); + const endTime = endTimeInput.val(); - var a = startDate === undefined || startDate === null || !startDate.isValid(); - var b = endDatePicker.length === 0 ? false : endDate === undefined || endDate === null || !endDate.isValid(); + const isStartDateValid = false === isNaN(startDate.getTime()); + const isEndDateValid = endDateInput.length ? false === isNaN(endDate.getTime()) : true; - // Bei leeren Startzeit- und Endzeitfeldern. Muss ein Dummydate zurückgeben, - // damit das Speichern ohne Angabe der Start- und Endzeit möglich ist. - if(a && $(`#${prefix}start-time`).val().length === 0 || $(`#${prefix}end-time`).val().length === 0) { - var dummyStart = startDate; - var dummyEnd = endDatePicker.length === 0 ? startDate.clone() : endDate; - - dummyStart.hours(0); - dummyStart.minutes(0); - dummyStart.seconds(1); - - dummyEnd.hours(0); - dummyEnd.minutes(0); - dummyEnd.seconds(1); - - if (dummyEnd.isBefore(dummyStart)) { - return null; - } - - return [dummyStart, dummyEnd]; + if(false === isStartDateValid && startTimeInput.length === 0 || false === isEndDateValid && endTimeInput.length === 0) { + return [new Date(`${startDate}T00:00:01`), new Date(`${endDate}T00:00:01`)]; } - startTimePicker.datetimepicker("show"); - startTimePicker.datetimepicker("hide"); - - endTimePicker.datetimepicker("show"); - endTimePicker.datetimepicker("hide"); - - var startTime = startTimePicker.datetimepicker("date"); - var endTime = endTimePicker.datetimepicker("date"); - - var c = startTime === undefined || startTime === null || !startTime.isValid(); - var d = endTime === undefined || endTime === null || !endTime.isValid(); + const isStartTimeValid = startTime.length > 0; + const isEndTimeValid = endTime.length > 0; - if(a || b || c || d) { + if (false === isStartTimeValid || false === isStartDateValid || false === isEndTimeValid || false === isEndDateValid) { return null; } - if(endDatePicker.length === 0 || endDate.isValid() === false) { - endDate = startDate.clone(); - } - - startDate = startDate.hours(startTime.hours()); - startDate = startDate.minutes(startTime.minutes()); - - endDate = endDate.hours(endTime.hours()); - endDate = endDate.minutes(endTime.minutes()); - - if(endDate.isBefore(startDate)) { - // Wenn das Enddatum nicht sichtbar ist und der Termin länger als den Starttag geht, muss das Enddatum neu berechnet werden - // Bei Vorhandensein der Minuten/Stunden-Auswahl ist kein (h) im Dauertext! - var dropDownbutton = $(`#${prefix}hours-minutes-dropdown-btn`); - - var hasMinHourDropdown = dropDownbutton.length > 0; - var duration = $(`#${prefix}duration`).val(); - var isHour = $(`#${prefix}duration`).prev().text().trim() === "Dauer (h)" || (hasMinHourDropdown && $(`#${prefix}hours-minutes-dropdown-btn`).text() === "Stunden"); - var minutesToAdd = isHour ? 60 * duration : duration; - - endDate = startDate.clone().add(minutesToAdd, "minutes"); - - return endDate.isBefore(startDate) ? null : [startDate, endDate]; - } - - return [startDate, endDate]; + return [combineDateAndTime(startDate, startTime), combineDateAndTime(endDate, endTime)]; } diff --git a/BeWoPlanerMobil/Views/Customer/Customer.cshtml b/BeWoPlanerMobil/Views/Customer/Customer.cshtml index 2d219cd66..a69a055b9 100644 --- a/BeWoPlanerMobil/Views/Customer/Customer.cshtml +++ b/BeWoPlanerMobil/Views/Customer/Customer.cshtml @@ -9,7 +9,8 @@
diff --git a/BeWoPlanerMobil/Views/Main/GroupBookingFormPartial.cshtml b/BeWoPlanerMobil/Views/Main/GroupBookingFormPartial.cshtml index 084fbbe10..1a44e59e1 100644 --- a/BeWoPlanerMobil/Views/Main/GroupBookingFormPartial.cshtml +++ b/BeWoPlanerMobil/Views/Main/GroupBookingFormPartial.cshtml @@ -8,65 +8,77 @@ { } } @if(Model != null) @@ -75,8 +87,8 @@ using(Html.BeginForm("CreateOrUpdateGroupBooking", "Main", FormMethod.Post, new { id = "groupBookingForm" })) { - var startDate = Model.SelectedServiceRecord?.Start?.ToShortDateString() ?? DateTime.Today.ToShortDateString(); - var endDate = Model.SelectedServiceRecord?.End?.ToShortDateString() ?? DateTime.Today.ToShortDateString(); + 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"); var distance = Model.SelectedServiceRecord?.DistanceInMeter?.ToString() ?? string.Empty; @@ -121,7 +133,7 @@ } @* ----- Betrag ----- *@ - @if(Model.ShowBetrag) + @if(AbstractModel.ShowBetrag) { var betrag = string.Empty; if(Model.SelectedServiceRecord?.Betrag != null && Model.SelectedServiceRecord.Betrag.Value > 0) @@ -152,109 +164,75 @@
@* Start- und Enddatum *@ -
-
-
-
-
-
- Startdatum -
-
- -
-
- -
-
-
-
-
+ @{ + var columnWidth = Model.IsEndDateVisible ? "col-md-6" : "col"; + } - @if(Model.IsEndDateVisible) - { -
-
-
-
-
- Enddatum -
-
- -
-
- -
-
-
-
-
- } -
+
+
+
+
+ + Startdatum + +
+ +
+
+ @if(Model.IsEndDateVisible) + { +
+
+
+ + Enddatum + +
+ +
+
+ } +
@* Von und Bis *@
- @{ - var startTimeValue = Model.StartTimeToEdit; - var endTimeValue = Model.EndTimeToEdit; - var divisor = Model.SelectedDurationUnit == "Stunden" ? 60 : 1; - var durationValue = string.Empty; + @{ + 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(); - } + if(!(Model.SelectedServiceRecord is null)) + { + durationValue = (Model.SelectedServiceRecord?.RoundedDuration / divisor).ToString(); + } - var afterValidationState = TempData[TempDataConstants.AfterValidationStateKey]; + 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(); - } - } - } + 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(); + } + } + } - @* Von *@ -
-
-
-
-
- Von -
-
- -
-
- -
-
-
-
-
- - @* Bis *@ -
-
-
-
-
- Bis -
-
- -
-
- -
-
-
-
+
+
+
+ + Von + +
+ + + Bis + + +
@@ -271,11 +249,11 @@ @labelText
- + @if(Model.IsZeiterfassungInStdMin) {
- @* Gefahrene Kilometer *@ - @if(Model.ShowDistanceField) + @if(AbstractModel.ShowDistanceField) {
@@ -299,7 +277,7 @@
Gefahrene Kilometer
- +
@@ -322,8 +300,11 @@ @if(Model.NumberOfDokuTypes == 0) {
- - + + +
} else @@ -334,8 +315,11 @@ var currentDokuType = Model.Dokutypes[i]; } @@ -345,8 +329,8 @@ { var textareaName = i + 1 < 1 ? "Dokumentation" : "Dokumentation" + (i + 1); -
- +
+
}
diff --git a/BeWoPlanerMobil/Views/Main/GroupBookingPartial.cshtml b/BeWoPlanerMobil/Views/Main/GroupBookingPartial.cshtml index d8c44cb94..089a52782 100644 --- a/BeWoPlanerMobil/Views/Main/GroupBookingPartial.cshtml +++ b/BeWoPlanerMobil/Views/Main/GroupBookingPartial.cshtml @@ -13,13 +13,15 @@ } } } @if(Model != null) { using(Html.BeginForm("CreateMultiBooking", "Main", FormMethod.Post, new { id = "multiBookingForm" })) { - var startDate = Model.SelectedServiceRecord?.Start?.ToShortDateString() ?? DateTime.Today.ToShortDateString(); - var endDate = Model.SelectedServiceRecord?.End?.ToShortDateString() ?? DateTime.Today.ToShortDateString(); + var startDate = Model.SelectedServiceRecord?.Start?.ToShortDateString() ?? DateTime.Today.ToString("yyyy-MM-dd"); + var endDate = Model.SelectedServiceRecord?.End?.ToShortDateString() ?? DateTime.Today.ToString("yyyy-MM-dd"); var distance = Model.SelectedServiceRecord?.DistanceInMeter?.ToString() ?? string.Empty; @@ -91,7 +91,7 @@ } @* ----- Betrag ----- *@ - @if(Model.ShowBetrag) + @if(AbstractModel.ShowBetrag) {
@@ -116,45 +116,34 @@
@* Start- und Enddatum *@ -
-
-
-
-
-
- Startdatum -
-
- -
-
- -
-
-
-
-
+ @{ + var columnWidth = Model.IsEndDateVisible ? "col-md-6" : "col"; + } - @if(Model.IsEndDateVisible) - { -
-
-
-
-
- Enddatum -
-
- -
-
- -
-
-
-
-
- } +
+
+
+
+ + Startdatum + +
+ +
+
+ @if(Model.IsEndDateVisible) + { +
+
+
+ + Enddatum + +
+ +
+
+ }
@* Start- und Endzeit *@ @@ -167,7 +156,7 @@ var durationValue = string.Empty; - if(!(Model.SelectedServiceRecord is null)) + if(Model.SelectedServiceRecord != null) { durationValue = (Model.SelectedServiceRecord?.RoundedDuration / divisor).ToString(); } @@ -184,39 +173,19 @@ } } } -
-
-
-
-
- Von -
-
- -
-
- -
-
-
-
-
-
-
-
-
-
- Bis -
-
- -
-
- -
-
-
-
+
+
+
+ + Von + +
+ + + Bis + + +
@@ -233,7 +202,7 @@ @labelText
- + @if(Model.IsZeiterfassungInStdMin) {
@@ -252,7 +221,7 @@
@* Gefahrene Kilometer *@ - @if(Model.ShowDistanceField) + @if(AbstractModel.ShowDistanceField) {
@@ -263,7 +232,7 @@ Gefahrene Kilometer
- +
@@ -282,12 +251,15 @@ @* Dokumentationsfelder *@
-
+
@if(Model.NumberOfDokuTypes == 0) {
- - + + +
} else @@ -300,6 +272,9 @@ } diff --git a/BeWoPlanerMobil/Views/Main/MultiBookingPartial.cshtml b/BeWoPlanerMobil/Views/Main/MultiBookingPartial.cshtml index 982079ef5..c69ee0e21 100644 --- a/BeWoPlanerMobil/Views/Main/MultiBookingPartial.cshtml +++ b/BeWoPlanerMobil/Views/Main/MultiBookingPartial.cshtml @@ -31,11 +31,11 @@ const buttonText = $(this).text(); $("#mb-hours-minutes-dropdown-btn").text(buttonText); - window.setInputFilter('mb-duration', 'mb-distance', 'mb-hours-minutes-dropdown-btn'); + window.setInputFilter('mb-duration-input', 'mb-distance-input', 'mb-hours-minutes-dropdown-btn'); $.get('@Url.Action("ToggleDurationUnit")', { isInHoursMode: buttonText === "Stunden" }); - calculateDuration(true, 'mb-start-time', 'mb-end-time', 'mb-duration', 'mb-hours-minutes-dropdown-btn', 'mb-start-date-picker', 'mb-end-date-picker', false, false); + calcDuration("mb", true, false, false); }); }); diff --git a/BeWoPlanerMobil/Views/Main/MultiBookingScCbRelList.cshtml b/BeWoPlanerMobil/Views/Main/MultiBookingScCbRelList.cshtml index aad08594d..2b3c0c406 100644 --- a/BeWoPlanerMobil/Views/Main/MultiBookingScCbRelList.cshtml +++ b/BeWoPlanerMobil/Views/Main/MultiBookingScCbRelList.cshtml @@ -49,8 +49,7 @@ {
  • @{ - long groupOid; - var wasSuccessful = long.TryParse(group.Value, out groupOid); + var wasSuccessful = long.TryParse(group.Value, out var groupOid); var shouldBeChecked = wasSuccessful ? Model.MultiBookingSelectedGroupOfPeopleOids.Contains(groupOid) : wasSuccessful; diff --git a/BeWoPlanerMobil/Views/Main/ServiceRecordListPartial.cshtml b/BeWoPlanerMobil/Views/Main/ServiceRecordListPartial.cshtml index f59c58d1a..26a626aac 100644 --- a/BeWoPlanerMobil/Views/Main/ServiceRecordListPartial.cshtml +++ b/BeWoPlanerMobil/Views/Main/ServiceRecordListPartial.cshtml @@ -341,7 +341,7 @@ @* Gefahrene Kilometer *@ - @if(Model.ShowDistanceField && serviceRecord.DistanceInMeterDecimal != null && serviceRecord.DistanceInMeterDecimal.Value > 0) + @if(AbstractModel.ShowDistanceField && serviceRecord.DistanceInMeterDecimal != null && serviceRecord.DistanceInMeterDecimal.Value > 0) { @@ -407,7 +407,7 @@ Angelegt für: - @($"{serviceRecord.Employee.FirstName} {serviceRecord.Employee.LastName}") + @serviceRecord.Employee.FirstNameLastName @@ -433,7 +433,7 @@ } @* Betrag *@ - @if(Model.ShowBetrag && serviceRecord.Betrag.HasValue && serviceRecord.Betrag.Value > 0) + @if(AbstractModel.ShowBetrag && serviceRecord.Betrag.HasValue && serviceRecord.Betrag.Value > 0) { var betrag = serviceRecord.Betrag.Value.ToString("#.00") + " €"; diff --git a/BeWoPlanerMobil/Views/Main/SingleBookingPartial.cshtml b/BeWoPlanerMobil/Views/Main/SingleBookingPartial.cshtml index 3915a2378..5d843e4c5 100644 --- a/BeWoPlanerMobil/Views/Main/SingleBookingPartial.cshtml +++ b/BeWoPlanerMobil/Views/Main/SingleBookingPartial.cshtml @@ -16,13 +16,15 @@ } -
    -
    - -
    -
    - } - - @* ----- Einzelbuchung: Dokumentation ----- *@ -
    -
    - @if (Model.NumberOfDokuTypes == 0) - { -
    - - -
    - } - else - { - -
    - @for (var i = 0; i < Model.Dokutypes.Length; i++) - { - var textareaName = i + 1 < 1 ? "Dokumentation" : "Dokumentation" + (i + 1); - -
    - -
    - } -
    - } -
  • +
    + } + +
    + + @* ----- Einzelbuchung: Startdatum und gegebenenfalls Enddatum ----- *@ + @{ + var divisor = Model.SelectedDurationUnit == "Stunden" ? 60 : 1; + var durationValue = Model.DurationToEdit; + + var afterValidationState = TempData[TempDataConstants.AfterValidationStateKey]; + + if(Model.SetStartTimeToEndTimeAfterSave && !Model.IsInEditingMode && afterValidationState is bool and false) + { + durationValue = Model.NewDuration?.ToString(); + if(Model.NewDuration.HasValue) + { + durationValue = (Model.NewDuration / divisor).ToString(); + } } -
    -
    + var columnWidth = Model.IsEndDateVisible ? "col-md-6" : "col"; + } - @if(Model.IsInEditingMode) +
    +
    +
    +
    + + Startdatum + +
    + +
    +
    + @if(Model.IsEndDateVisible) + { +
    +
    +
    + + Enddatum + +
    + +
    +
    + } +
    +
    +
    +
    +
    + + Von + +
    + + + Bis + + +
    +
    +
    + + @* ----- Einzelbuchung: Dauer ----- *@ +
    +
    +
    +
    +
    + @{ + var labelText = Model.EinheitZeiterfassung == 1 ? "Dauer (h)" : "Dauer"; + } +
    + @labelText +
    +
    + + @if(Model.IsZeiterfassungInStdMin) + { +
    + + +
    + } +
    +
    +
    +
    + + @* ----- Einzelbuchung: Distanz ----- *@ + @if(AbstractModel.ShowDistanceField) + { +
    +
    +
    +
    +
    +
    + Gefahrene Kilometer +
    +
    + +
    +
    +
    +
    + } + + @* ----- Einzelbuchung: Textbausteine ----- *@ + @if(AbstractModel.HasRightToSeeTextModules) + { + +
    +
    + +
    +
    + } + + @* ----- Einzelbuchung: Dokumentation ----- *@ +
    +
    + @if(Model.NumberOfDokuTypes == 0) + { +
    + + + +
    + } + else + { + +
    + @for(var i = 0; i < Model.Dokutypes.Length; i++) + { + var textareaName = i + 1 < 1 ? "Dokumentation" : "Dokumentation" + (i + 1); + +
    + +
    + } +
    + } +
    +
    +
    + } + +
    + + + @if(Model.IsInEditingMode) { using(Html.BeginForm("ResetEditingMode", "Main", FormMethod.Post)) { - + } } else if(TempData[TempDataConstants.IsInTransferModeKey] is bool isInTransferMode && isInTransferMode) { using(Html.BeginForm("ResetTransferMode", "Main", FormMethod.Post)) { - + } } else { -
    - -
    + } - -
    - -
    }
    diff --git a/BeWoPlanerMobil/Views/Main/TextModulePartial.cshtml b/BeWoPlanerMobil/Views/Main/TextModulePartial.cshtml index f7cd6c966..14d2ab4cf 100644 --- a/BeWoPlanerMobil/Views/Main/TextModulePartial.cshtml +++ b/BeWoPlanerMobil/Views/Main/TextModulePartial.cshtml @@ -63,6 +63,7 @@ const textAfter = v.substring(cursorPosition, v.length); focusedDokuFeld.val(textBefore + textModuleText + textAfter); + focusedDokuFeld.trigger("change"); $("#textbausteine-popup").modal("hide"); }); diff --git a/BeWoPlanerMobil/Views/Report/ConfirmationReceiptSignaturePartial.cshtml b/BeWoPlanerMobil/Views/Report/ConfirmationReceiptSignaturePartial.cshtml index fcfecd2bb..10d50480c 100644 --- a/BeWoPlanerMobil/Views/Report/ConfirmationReceiptSignaturePartial.cshtml +++ b/BeWoPlanerMobil/Views/Report/ConfirmationReceiptSignaturePartial.cshtml @@ -1,5 +1,7 @@ -@using BeWoPlanerMobil.Util +@using BeWoPlanerMobil.Models +@using BeWoPlanerMobil.Util @using BeWoPlanerMobil.Util.ReportUtils +@using BS.Shared @model BeWoPlanerMobil.Models.ReportModel @{ @@ -23,12 +25,6 @@ $(document).ready(function () { $(".left-col").width(window.getMaxWidth("left-col")); }); - - $(".signature-card").ready(function () { - setTimeout(function () { - $(".signature-card").height(window.getMaxElementHeight("signature-card")); - }, 100); - });
    @@ -84,14 +80,14 @@ } @if(message != null) { -