diff --git a/BeWoPlanerMobil/BeWoPlanerMobil.csproj b/BeWoPlanerMobil/BeWoPlanerMobil.csproj index eb41afbeb..36097b8d3 100644 --- a/BeWoPlanerMobil/BeWoPlanerMobil.csproj +++ b/BeWoPlanerMobil/BeWoPlanerMobil.csproj @@ -680,6 +680,7 @@ + diff --git a/BeWoPlanerMobil/Controllers/MainController.cs b/BeWoPlanerMobil/Controllers/MainController.cs index 10ff8a8d4..49fd0cc23 100644 --- a/BeWoPlanerMobil/Controllers/MainController.cs +++ b/BeWoPlanerMobil/Controllers/MainController.cs @@ -1401,7 +1401,6 @@ namespace BeWoPlanerMobil.Controllers Model.NewServiceRecord.IP = Request.UserHostAddress; - Model.NewServiceRecord.Goals = CreateValueListEntriesFromMokZiele(Model.SelectedGoals); Model.NewServiceRecord.Start = zeitenFeld[0]; @@ -1513,7 +1512,7 @@ namespace BeWoPlanerMobil.Controllers TempData[TempDataConstants.AfterInsertKey] = true; - if(Model.NewServiceRecord.CostBearer != null && Model.ShowSignature) + if(Model.NewServiceRecord.CostBearer != null && Model.ShowSignature && (Model.NewServiceRecord.ServiceDescription.Category.IsBillable || Model.NewServiceRecord.ServiceDescription.Category.BillableAmount > 0m || Model.NewServiceRecord.ServiceDescription.BillableAmount > 0m)) { TempData[TempDataConstants.ShowSignatureSuggestionPopup] = true; } @@ -1596,7 +1595,6 @@ namespace BeWoPlanerMobil.Controllers Model.PreviouslySelectedCostbearer2SupportConceptOid = null; } - //Wenn nicht im Editing Mode, dann behalte die zuletzt ausgewählte Leistung bei, die im Reset zurückgesetzt wird long? oldCatOid = null; long? oldDescOid = null; @@ -1617,8 +1615,6 @@ namespace BeWoPlanerMobil.Controllers Model.SelectedServiceDescriptionOid = oldDescOid; } - - return result; } @@ -2692,6 +2688,28 @@ namespace BeWoPlanerMobil.Controllers return SerializeObject(serviceRecord2Monatsunterschrift); } + [Authorize] + public ActionResult GetSingleSignatureInfo(long serviceRecordOid) + { + if(Model is null) + { + return Logout(); + } + + var serviceRecord = GetServiceRecordDC(serviceRecordOid, false); + + if(serviceRecord?.ServiceRecordOid is null) + { + return PartialView("SingleSignaturePopupPartial", Model); + } + + var hasMonatsunterschrift = OperationsService.CheckForConfirmationReceiptSignatureForServiceRecord(serviceRecord.ServiceRecordOid.Value, SignatureType.Customer); + + Model.ServiceRecord2Monatsunterschrift = new ServiceRecord2Monatsunterschrift(serviceRecord, hasMonatsunterschrift); + + return PartialView("SingleSignaturePopupPartial", Model); + } + [Authorize] [HttpPost] public ActionResult ValidateServiceRecord(FormCollection formCollection) @@ -4202,154 +4220,194 @@ namespace BeWoPlanerMobil.Controllers return Logout(); } - SkipModelInitialization = true; - Model.TransferringAppointmentOid = TempData[TempDataConstants.AppointmentOidKey] as long?; - if(Model.TransferringAppointmentOid.HasValue && Model.LoggedInEmployee.EmployeeOid.HasValue) + var isSerientermin = TempData[TempDataConstants.AppointmentIsSerienterminKey] is true; + + if((!Model.TransferringAppointmentOid.HasValue && !isSerientermin) || !Model.LoggedInEmployee.EmployeeOid.HasValue) { - var app = DAOFactory.GenericDAO.LoadByID(Model.TransferringAppointmentOid.Value); - - var appointment = MapperFactory.SchedulerAppointmentDCSchedulerAppointment.MapToNewDC(app); + return View("Main", Model); + } - var start = appointment.StartDate; - var end = appointment.EndDate; - var customerOids = appointment.CustomerList.Select(customer => customer.CustomerOid).ToList(); - var employeeOids = appointment.EmployeeList.Select(e2a => e2a.Employee.EmployeeOid).ToList(); + var app = Model.TransferringAppointmentOid.HasValue ? DAOFactory.GenericDAO.LoadByID(Model.TransferringAppointmentOid.Value) : null; + var appointment = app is null ? null : MapperFactory.SchedulerAppointmentDCSchedulerAppointment.MapToNewDC(app); - if(appointment.AllDay && start.HasValue && end.HasValue) + var startRaw = TempData[TempDataConstants.AppointmentStartKey]?.ToString(); + var endRaw = TempData[TempDataConstants.AppointmentEndKey]?.ToString(); + var subject = TempData[TempDataConstants.AppointmentSubjectKey]?.ToString(); + var isAllDay = false; + + if(TempData[TempDataConstants.AppointmentIsAllDayKey] is bool isAllDayRaw && isAllDayRaw == true) + { + isAllDay = true; + } + else if(appointment != null) + { + isAllDay = appointment.AllDay; + } + + var customerOids = new List(); + var employeeOids = new List(); + + if(TempData[TempDataConstants.AppointmentEmployeeOidsKey] is string employeeOidsRaw && employeeOidsRaw.Length > 0) + { + employeeOids = Utils.ConvertCharSeparatedValuesToLongList(employeeOidsRaw, ','); + } + + if(TempData[TempDataConstants.AppointmentCustomerOidsKey] is string customerOidsRaw && customerOidsRaw.Length > 0) + { + customerOids = Utils.ConvertCharSeparatedValuesToLongList(customerOidsRaw, ','); + } + + var isStartParsingSuccessful = DateTime.TryParse(startRaw, out var parsedStart); + var isEndParsingSuccessful = DateTime.TryParse(endRaw, out var parsedEnd); + + var start = appointment is null ? parsedStart : appointment.StartDate; + var end = appointment is null ? parsedEnd : appointment.EndDate; + + if(appointment is object) + { + customerOids = appointment.CustomerList.Select(customer => customer.CustomerOid).ToList(); + employeeOids = appointment.EmployeeList.Select(e2a => e2a.Employee.EmployeeOid).ToList(); + } + + if(isAllDay && start.HasValue && end.HasValue) + { + start = start.Value.MergeDateWithHoursMinutesSeconds(0, 0, 1); + end = end.Value.MergeDateWithHoursMinutesSeconds(0, 0, 1); + } + + if(employeeOids.Count == 0) + { + employeeOids.Add(Model.LoggedInEmployee.EmployeeOid.Value); + } + + var notice = appointment?.Description ?? TempData[TempDataConstants.AppointmentSubjectKey]?.ToString(); + + Model.SupportConceptListObjects.Clear(); //Macht, dass beim Init die SupportConcepts neu geladen werden + InitViewModel(true); + + var supportConcepts = Model.SupportConcepts.Where(sc => customerOids.Contains(sc.Customer.CustomerOid) && sc.StartDate.HasValue && sc.EndDate.HasValue && start.Value.AreInBetweenDates(end.Value, sc.StartDate.Value, sc.EndDate.Value)).ToList(); + + var supportConceptList = new List(); + + foreach(var customerOid in customerOids) + { + var supportConcept = supportConcepts.FirstOrDefault(sc => sc.Customer.CustomerOid.Equals(customerOid)); + + if(supportConcept is null) { - start = start.Value.MergeDateWithHoursMinutesSeconds(0, 0, 1); - end = end.Value.MergeDateWithHoursMinutesSeconds(0, 0, 1); + continue; } - if(employeeOids.Count == 0) + supportConceptList.AddIfNotIn(supportConcept); + } + + // Ohne Hilfeplan + if(supportConceptList.Count == 0) + { + ResetBookingMode(BookingMode.SingleBookingMode); + + Model.SelectedEmployee = Model.AllEmployees.FirstOrDefault(e => e.EmployeeOid.Equals(Model.LoggedInEmployee.EmployeeOid.Value)); + + LoadSupportConceptThings(-2, false); + + if(Model.SelectedServiceDescription != null) { - employeeOids.Add(Model.LoggedInEmployee.EmployeeOid.Value); + Model.SelectedServiceCategory = Model.SelectedServiceDescription.Category; + var serviceRecord = CreateServiceRecordFromScratch(start.Value, end.Value, null, Model.SelectedEmployee, notice); + serviceRecord.ServiceDescription = Model.SelectedServiceDescription; + Model.SelectedServiceRecord = serviceRecord; } - - var notice = appointment.Description; - - Model.SupportConceptListObjects.Clear(); //Macht, dass beim Init die SupportConcepts neu geladen werden - InitViewModel(); - - var supportConcepts = Model.SupportConcepts.Where(sc => customerOids.Contains(sc.Customer.CustomerOid) && sc.StartDate.HasValue && sc.EndDate.HasValue && start.Value.AreInBetweenDates(end.Value, sc.StartDate.Value, sc.EndDate.Value)).ToList(); - - var supportConceptList = new List(); - - foreach(var customerOid in customerOids) + } + // Einzelbuchung + else + { + var availableRelOids = new List(); + Model.SupportConceptListObjects.DoForEach(sclo => { - var supportConcept = supportConcepts.FirstOrDefault(sc => sc.Customer.CustomerOid.Equals(customerOid)); + availableRelOids.AddIfNotIn(sclo.CostBearer2SupportConceptOid); + }); - if(supportConcept is null) - { - continue; - } - - supportConceptList.AddIfNotIn(supportConcept); - } - - // Ohne Hilfeplan - if(supportConceptList.Count == 0) + if(supportConceptList.Count == 1 && employeeOids.Count == 1) { ResetBookingMode(BookingMode.SingleBookingMode); - Model.SelectedEmployee = Model.AllEmployees.FirstOrDefault(e => e.EmployeeOid.Equals(Model.LoggedInEmployee.EmployeeOid.Value)); + Model.SelectedEmployee = Model.AllEmployees.FirstOrDefault(e => e.EmployeeOid.Equals(employeeOids.FirstOrDefault())); - LoadSupportConceptThings(-2, false); + var compactSupportConcept = supportConceptList.First(); + var scListObject = Model.SupportConceptListObjects.FirstOrDefault(f => f.SupportConceptOid.Equals(compactSupportConcept.SupportConceptOid)); + + if(scListObject is object) + { + LoadSupportConceptThings(scListObject.CostBearer2SupportConceptOid, true); + } + + var serviceRecord = CreateServiceRecordFromScratch(start.Value, end.Value, compactSupportConcept?.Customer, Model.SelectedEmployee, notice); + + var costBearer = compactSupportConcept?.CostBearerList.FirstOrDefault(); + + var cb2ScOid = compactSupportConcept?.CostBearerRelOids.FirstOrDefault(cbOid => availableRelOids.Contains(cbOid)); + + serviceRecord.CostBearer = costBearer?.Organisation; + serviceRecord.CostBearer2SupportConceptOid = cb2ScOid; + serviceRecord.ServiceDescription = Model.SelectedServiceDescription; if(Model.SelectedServiceDescription != null) { - Model.SelectedServiceCategory = Model.SelectedServiceDescription.Category; - var serviceRecord = CreateServiceRecordFromScratch(start.Value, end.Value, null, Model.SelectedEmployee, notice); - serviceRecord.ServiceDescription = Model.SelectedServiceDescription; Model.SelectedServiceRecord = serviceRecord; } + Model.SelectedCostBearerSupportConceptOid = cb2ScOid; } - // Einzelbuchung - else + else // Gruppenbuchung { - var availableRelOids = new List(); - Model.SupportConceptListObjects.DoForEach(sclo => + ResetBookingMode(BookingMode.GroupBookingMode); + + Model.GroupBookingSelectedEmployees = Model.AllEmployees.Where(w => employeeOids.Contains(w.EmployeeOid)).ToList(); + + var roundedDuration = (int) ((end - start)?.TotalMinutes ?? 0); + + Model.SelectedServiceRecord = new ServiceRecordDC() { - availableRelOids.AddIfNotIn(sclo.CostBearer2SupportConceptOid); - }); + Start = start, + End = end, + RoundedDuration = roundedDuration, + Notice = notice, + ServiceDescription = Model.GetSelectedOrFirstServiceDescription() + }; - if(supportConceptList.Count == 1 && employeeOids.Count == 1) - { - ResetBookingMode(BookingMode.SingleBookingMode); - - Model.SelectedEmployee = Model.AllEmployees.FirstOrDefault(e => e.EmployeeOid.Equals(employeeOids.FirstOrDefault())); - - var compactSupportConcept = supportConceptList.First(); - var scListObject = Model.SupportConceptListObjects.FirstOrDefault(f => f.SupportConceptOid.Equals(compactSupportConcept.SupportConceptOid)); - - var serviceRecord = CreateServiceRecordFromScratch(start.Value, end.Value, compactSupportConcept?.Customer, Model.SelectedEmployee, notice); - - var costBearer = compactSupportConcept?.CostBearerList.FirstOrDefault(); - - var cb2ScOid = compactSupportConcept?.CostBearerRelOids.FirstOrDefault(cbOid => availableRelOids.Contains(cbOid)); - - serviceRecord.CostBearer = costBearer?.Organisation; - serviceRecord.CostBearer2SupportConceptOid = cb2ScOid; - serviceRecord.ServiceDescription = Model.SelectedServiceDescription; - - if(Model.SelectedServiceDescription != null) - { - Model.SelectedServiceRecord = serviceRecord; - } - Model.SelectedCostBearerSupportConceptOid = cb2ScOid; - } - else // Gruppenbuchung - { - ResetBookingMode(BookingMode.GroupBookingMode); - - Model.GroupBookingSelectedEmployees = Model.AllEmployees.Where(w => employeeOids.Contains(w.EmployeeOid)).ToList(); - - var roundedDuration = (int) ((end - start)?.TotalMinutes ?? 0); - - Model.SelectedServiceRecord = new ServiceRecordDC() - { - Start = start, - End = end, - RoundedDuration = roundedDuration, - Notice = notice, - ServiceDescription = Model.GetSelectedOrFirstServiceDescription() - }; - - var costBearer2SupportConceptOids = new List(); + var costBearer2SupportConceptOids = new List(); - foreach(var supportConcept in supportConceptList) + foreach(var supportConcept in supportConceptList) + { + var cb2ScOid = supportConcept?.CostBearerRelOids.FirstOrDefault(cbOid => availableRelOids.Contains(cbOid)); + + if(cb2ScOid is null) { - var cb2ScOid = supportConcept?.CostBearerRelOids.FirstOrDefault(cbOid => availableRelOids.Contains(cbOid)); - - if(cb2ScOid is null) - { - continue; - } - - costBearer2SupportConceptOids.AddIfNotIn(cb2ScOid.Value); + continue; } - if(costBearer2SupportConceptOids.Any()) - { - Model.GroupBookingSelectedCostBearerSupportConceptOids = costBearer2SupportConceptOids; - //Model.SelectedConceptCostBearerRelations = costBearer2SupportConcepts; - //Model.GroupBookingSelectedSupportConcepts = supportConceptsForGroupBooking; - } - Model.GroupBookingSelectedEmployeeOids = employeeOids; - + costBearer2SupportConceptOids.AddIfNotIn(cb2ScOid.Value); } + + if(costBearer2SupportConceptOids.Any()) + { + Model.GroupBookingSelectedCostBearerSupportConceptOids = costBearer2SupportConceptOids; + //Model.SelectedConceptCostBearerRelations = costBearer2SupportConcepts; + //Model.GroupBookingSelectedSupportConcepts = supportConceptsForGroupBooking; + } + Model.GroupBookingSelectedEmployeeOids = employeeOids; + } - - Model.SelectedServiceRecordOid = Model.SelectedServiceRecord?.ServiceRecordOid; - - SetSelectedObjects(); - - Model.TransferringAppointmentOid = appointment.SchedulerAppointmentOid; - Model.IsInTransferMode = true; } + Model.SelectedServiceRecordOid = Model.SelectedServiceRecord?.ServiceRecordOid; + + SetSelectedObjects(); + + Model.TransferringAppointmentOid = appointment?.SchedulerAppointmentOid; + Model.IsInTransferMode = true; + return View("Main", Model); } @@ -5374,10 +5432,23 @@ namespace BeWoPlanerMobil.Controllers public ServiceRecordDC ServiceRecord { get; } public bool HasMonatsunterschrift { get; } + public string ServiceRecordTimeInfo { get; } + public string Kategorie { get; } + public string Leistung { get; } + public string Mitarbeiter { get; } + public string DatumSchraegstrichUhrzeit { get; } + public ServiceRecord2Monatsunterschrift(ServiceRecordDC serviceRecord, bool hasMonatsunterschrift) { ServiceRecord = serviceRecord; HasMonatsunterschrift = hasMonatsunterschrift; + + ServiceRecordTimeInfo = MainModel.GetServiceRecordTimeString(serviceRecord); + Kategorie = serviceRecord.ServiceDescription.CategoryName; + Leistung = serviceRecord.ServiceDescription.Name; + Mitarbeiter = serviceRecord.Employee.ToString(); + + DatumSchraegstrichUhrzeit = MainModel.GetServiceRecordTimeHeader(serviceRecord, true); } } } diff --git a/BeWoPlanerMobil/Controllers/ReportController.cs b/BeWoPlanerMobil/Controllers/ReportController.cs index ffa750c79..e0c0e305b 100644 --- a/BeWoPlanerMobil/Controllers/ReportController.cs +++ b/BeWoPlanerMobil/Controllers/ReportController.cs @@ -425,22 +425,16 @@ namespace BeWoPlanerMobil.Controllers Model.SelectedOrganisationOid = null; Model.SelectedServiceCategoryOid = null; - if (long.TryParse(organisationOidStr, out var organisationOid)) + if(long.TryParse(organisationOidStr, out var organisationOid)) { Model.SelectedOrganisationOid = organisationOid; } - if (long.TryParse(categoryOidStr, out var categoryOid)) + if(long.TryParse(categoryOidStr, out var categoryOid)) { Model.SelectedServiceCategoryOid = categoryOid; } - - //Model.SelectedOrganisation = isParsingSuccessful2 ? Model.Organisations.FirstOrDefault(organisation => organisation.OrganisationOid.Equals(organisationOid)) : null; - - //Model.SelectedServiceCategory = isParsingSuccessful3 ? OperationsService.LoadServiceCategory(categoryOid) : null; - - return LeerzeichenFuerGetMethoden; } @@ -870,9 +864,10 @@ namespace BeWoPlanerMobil.Controllers if(Model is null) { TempData[TempDataConstants.DoLogoutKey] = true; - PartialView("ConfirmationReceiptSignaturePartial"); + return PartialView("ConfirmationReceiptSignaturePartial"); } + // Ist leer oder null! var obj = Model.ConfirmationReceiptObject.ConfirmationReceiptResultList.FirstOrDefault(f => f.Identifier.Equals(identifier)); if(obj is null) @@ -881,11 +876,32 @@ namespace BeWoPlanerMobil.Controllers } var oids = isEmployee ? obj.EmployeeSignatureOids : obj.CustomerSignatureOids; - + var signatures = Model.GetConfirmationReceitSignaturesByOids(oids); Model.SelectedConfirmationReceiptSignatures = ConvertSignatureDCsToSignatureObjects(signatures); + var serviceRecords = new List(); + + signatures.DoForEach(s => + { + serviceRecords.AddRangeIfElementsNotIn(s.ServiceRecords); + }); + + Model.ServiceRecordOids2GoalHeader = new Dictionary>(); + + foreach(var serviceRecord in serviceRecords) + { + if(serviceRecord.ServiceRecordOid is null || serviceRecord.Goals is null || serviceRecord.Goals.Count == 0) + { + continue; + } + + var goalHeaders = serviceRecord.Goals.Select(g => g.DisplayName).ToList(); + + Model.ServiceRecordOids2GoalHeader.AddOrUpdateValueInDictionary(serviceRecord.ServiceRecordOid.Value, goalHeaders); + } + var customerName = obj.CustomerName; var employeeName = LoggedInUser.Employee.SimpleDescription; @@ -893,7 +909,9 @@ namespace BeWoPlanerMobil.Controllers if(isEmployee) { - serviceRecordCount = Model.HasRightToProvideEmployeeSignatureForOthers ? obj.Items.Count : obj.Items.Count(x => x.EmployeeOid.Equals(LoggedInEmployee.EmployeeOid)); + serviceRecordCount = Model.HasRightToProvideEmployeeSignatureForOthers + ? obj.Items.Count + : obj.Items.Count(x => x.EmployeeOid.Equals(LoggedInEmployee.EmployeeOid)); } else { diff --git a/BeWoPlanerMobil/Controllers/SchedulerController.cs b/BeWoPlanerMobil/Controllers/SchedulerController.cs index 9f81d1594..844fff7f9 100644 --- a/BeWoPlanerMobil/Controllers/SchedulerController.cs +++ b/BeWoPlanerMobil/Controllers/SchedulerController.cs @@ -1429,13 +1429,18 @@ namespace BeWoPlanerMobil.Controllers var appointment = appointmentListItem.SchedulerAppointment; - //var employeeOids = appointment.EmployeeList.Select(employee2Appointment => employee2Appointment.Employee.EmployeeOid).ToList(); - //if(employeeOids.Count == 0) - //{ - // employeeOids.Add(appointment.Originator.EmployeeOid); - //} + TempData[TempDataConstants.AppointmentOidKey] = appointment?.SchedulerAppointmentOid; - TempData[TempDataConstants.AppointmentOidKey] = appointmentListItem.SchedulerAppointment?.SchedulerAppointmentOid; + TempData[TempDataConstants.AppointmentStartKey] = appointment?.StartDate; + TempData[TempDataConstants.AppointmentEndKey] = appointment?.EndDate; + TempData[TempDataConstants.AppointmentSubjectKey] = appointment?.Subject; + TempData[TempDataConstants.AppointmentIsAllDayKey] = appointment?.AllDay ?? false; + + TempData[TempDataConstants.AppointmentCustomerOidsKey] = string.Join(",", appointment?.CustomerList.Select(s => s.CustomerOid) ?? new List()); + + TempData[TempDataConstants.AppointmentEmployeeOidsKey] = string.Join(",", appointment?.EmployeeList.Select(s => s.Employee.EmployeeOid) ?? new List()); + + TempData[TempDataConstants.AppointmentIsSerienterminKey] = appointment != null && appointment.SchedulerAppointmentOid is null && appointment.RecurrenceInfo is string; return RedirectToActionPermanent("PrepareServiceRecordInsert", "Main"); diff --git a/BeWoPlanerMobil/Models/MainModel.cs b/BeWoPlanerMobil/Models/MainModel.cs index 57d00be6e..733503c97 100644 --- a/BeWoPlanerMobil/Models/MainModel.cs +++ b/BeWoPlanerMobil/Models/MainModel.cs @@ -1,16 +1,17 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Diagnostics; -using System.Linq; -using System.Web.Mvc; -using BeWo.View.Navigation.Filter; +using BeWo.View.Navigation.Filter; +using BeWoPlanerMobil.Controllers; using BeWoPlanerMobil.Util; using BS.Shared; using BS.Shared.DataContracts; using BS.Shared.DataContracts.Compact; using BS.Shared.Extensions; using BS.Shared.Settings; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Diagnostics; +using System.Linq; +using System.Web.Mvc; namespace BeWoPlanerMobil.Models { @@ -681,14 +682,15 @@ namespace BeWoPlanerMobil.Models { get { - if (SelectedServiceRecord != null) + if(SelectedServiceRecord != null) { - var duration = SelectedServiceRecord.RoundedDuration; + var duration = SelectedServiceRecord.GroupRoundedDuration ?? SelectedServiceRecord.RoundedDuration; - if (SelectedDurationUnit == "Stunden") + if(SelectedDurationUnit == "Stunden") { return Math.Round(duration / 60, 2, MidpointRounding.AwayFromZero).ToString(); } + return Math.Round(duration, 0, MidpointRounding.AwayFromZero).ToString(); } @@ -931,6 +933,8 @@ namespace BeWoPlanerMobil.Models return result.Trim(','); } + + public ServiceRecord2Monatsunterschrift ServiceRecord2Monatsunterschrift { get; set; } } public class CustomSelectListItem diff --git a/BeWoPlanerMobil/Models/ReportModel.cs b/BeWoPlanerMobil/Models/ReportModel.cs index f45f15baa..262e92559 100644 --- a/BeWoPlanerMobil/Models/ReportModel.cs +++ b/BeWoPlanerMobil/Models/ReportModel.cs @@ -22,15 +22,13 @@ namespace BeWoPlanerMobil.Models SessionModel = new ReportSessionModel(); } - public ReportSessionModel ReportSessionModel - { - get - { - return SessionModel as ReportSessionModel; - } - } + public ReportSessionModel ReportSessionModel => SessionModel as ReportSessionModel; - public QbSignatureIntervalSelection SelectedIntervalSelection { get { return ReportSessionModel.SelectedIntervalSelection; } set { ReportSessionModel.SelectedIntervalSelection = value; } } + public QbSignatureIntervalSelection SelectedIntervalSelection + { + get => ReportSessionModel.SelectedIntervalSelection; + set => ReportSessionModel.SelectedIntervalSelection = value; + } public List IntervalSelections => new List { @@ -59,11 +57,19 @@ namespace BeWoPlanerMobil.Models public CompactCustomerDC SelectedCustomer { get; set; } - [Display(Name = "Monat")] - public int? SelectedMonth { get { return ReportSessionModel.SelectedMonth; } set { ReportSessionModel.SelectedMonth = value; } } + [Display(Name = "Monat")] + public int? SelectedMonth + { + get => ReportSessionModel.SelectedMonth; + set => ReportSessionModel.SelectedMonth = value; + } - [Display(Name = "Jahr")] - public int? SelectedYear { get { return ReportSessionModel.SelectedYear; } set { ReportSessionModel.SelectedYear = value; } } + [Display(Name = "Jahr")] + public int? SelectedYear + { + get => ReportSessionModel.SelectedYear; + set => ReportSessionModel.SelectedYear = value; + } public List Months { @@ -128,10 +134,18 @@ namespace BeWoPlanerMobil.Models } [Display(Name = "Vom")] - public int? SelectedStartDay { get { return ReportSessionModel.SelectedStartDay; } set { ReportSessionModel.SelectedStartDay = value; } } + public int? SelectedStartDay + { + get => ReportSessionModel.SelectedStartDay; + set => ReportSessionModel.SelectedStartDay = value; + } [Display(Name = "Bis")] - public int? SelectedEndDay { get { return ReportSessionModel.SelectedEndDay; } set { ReportSessionModel.SelectedEndDay = value; } } + public int? SelectedEndDay + { + get => ReportSessionModel.SelectedEndDay; + set => ReportSessionModel.SelectedEndDay = value; + } public ConfirmationReceiptObject ConfirmationReceiptObject { get { return ReportSessionModel.ConfirmationReceiptObject; } set { ReportSessionModel.ConfirmationReceiptObject = value; } } @@ -193,7 +207,9 @@ namespace BeWoPlanerMobil.Models } } - public QBFilterEnum? SelectedFilterItemId { get { return ReportSessionModel.SelectedFilterItemId; } set { ReportSessionModel.SelectedFilterItemId = value; } } + public QBFilterEnum? SelectedFilterItemId { get => ReportSessionModel.SelectedFilterItemId; + set => ReportSessionModel.SelectedFilterItemId = value; + } //{ // get // { @@ -255,7 +271,11 @@ namespace BeWoPlanerMobil.Models public List ReportServiceRecordOids { get; set; } - public List ConfirmationReceiptSignatures { get; set; } = new List(); + public List ConfirmationReceiptSignatures + { + get => ReportSessionModel.ConfirmationReceiptSignatures; + set => ReportSessionModel.ConfirmationReceiptSignatures = value; + } public ConfirmationReceiptSignatureDC GetConfirmationReceiptSignatureByOid(long confirmationReceiptSignatureOid) { @@ -290,7 +310,11 @@ namespace BeWoPlanerMobil.Models public List GoalRatingTypes { get; set; } = new List(); - public Dictionary> ServiceRecordOids2GoalHeader { get; set; } + public Dictionary> ServiceRecordOids2GoalHeader + { + get => ReportSessionModel.ServiceRecordOids2GoalHeader; + set => ReportSessionModel.ServiceRecordOids2GoalHeader = value; + } public ValueListEntryDC[] Dokutypes { get; set; } diff --git a/BeWoPlanerMobil/Models/ReportSessionModel .cs b/BeWoPlanerMobil/Models/ReportSessionModel .cs index d19aed200..6b52199a5 100644 --- a/BeWoPlanerMobil/Models/ReportSessionModel .cs +++ b/BeWoPlanerMobil/Models/ReportSessionModel .cs @@ -1,17 +1,9 @@ using System; using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Web.Mvc; -using BeWo.View.Navigation.Filter; using BeWoPlanerMobil.Controllers; -using BeWoPlanerMobil.Service; -using BeWoPlanerMobil.Util; using BeWoPlanerMobil.Util.ReportUtils; using BS.Shared; using BS.Shared.DataContracts; -using BS.Shared.DataContracts.Compact; -using DevExpress.XtraReports.UI; namespace BeWoPlanerMobil.Models { @@ -36,6 +28,8 @@ namespace BeWoPlanerMobil.Models public Quittierungsbelegsunterschriftenobjekt Quittierungsbelegsunterschriftenobjekt { get; internal set; } public List SelectedConfirmationReceiptSignatures { get; internal set; } public QbSignatureIntervalSelection SelectedIntervalSelection { get; internal set; } + public List ConfirmationReceiptSignatures { get; internal set; } + public Dictionary> ServiceRecordOids2GoalHeader { get; internal set; } public override void ResetValues() { @@ -59,6 +53,8 @@ namespace BeWoPlanerMobil.Models Quittierungsbelegsunterschriftenobjekt = null; SelectedConfirmationReceiptSignatures = null; SelectedIntervalSelection = QbSignatureIntervalSelection.FirstHalf; + ConfirmationReceiptSignatures = null; + ServiceRecordOids2GoalHeader = null; } } } \ No newline at end of file diff --git a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/signature.js b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/signature.js index fb42574b5..442eafc15 100644 --- a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/signature.js +++ b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/signature.js @@ -56,71 +56,24 @@ function updateCanvasSize(canvasJQueryElement) { } } -// Veraltet seit 17.04.2025; Neue Funktion: updateCanvasSize(canvasJQueryElement) -function resizeCanvas(sketchPadId, canvasRoId) { - if($(sketchPadId).length !== 0) { - const rowWidth = $(canvasRoId).innerWidth(); - const sourceCanvas = document.getElementById(sketchPadId.split("#")[1]); - - 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}); - - $(sketchPadId).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(); - } - } -} - // Das Initialisieren der Einzelunterschrift function initializeSignature(selectedServiceRecordOid) { $("#form-container, #checkbox-container").hide(); $("#signature-container").addClass("d-block"); - + + // Info-String wird vom Server geholt. $.get(window.getSelectedRecordInformationUrlWithOid(), { oid: selectedServiceRecordOid }).done(function(jsonServiceRecord2Monatsunterschrift) { if(jsonServiceRecord2Monatsunterschrift === "SessionTimeout") { window.location.href = window.getRedirectLink(); return; } + // Ist der Info-String null oder leer, wird das Unterschriftenoverlay versteckt. if(isEmptyOrSpaces(jsonServiceRecord2Monatsunterschrift)) { $("#form-container, #checkbox-container").show(); $("#signature-container").removeClass("d-block"); + // Ein Fehler beim Holen des Info-Strings ist passiert. showMessagePopupWithHtmlAndCallback("Fehler", "Der zu unterschreibende Zeiterfassungseintrag konnte nicht geladen werden. Bitte wenden Sie sich an den Support.support@bewoplaner.de", false, function() { showSpinner(); @@ -217,6 +170,7 @@ function initializeSignature(selectedServiceRecordOid) { }); } +// Die Button-Events function saveButtonClick(selectedServiceRecordOid) { try { const date = moment(new Date()); diff --git a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/dateUtils.js b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/dateUtils.js index 086d72f22..d5518a03e 100644 --- a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/dateUtils.js +++ b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/dateUtils.js @@ -8,8 +8,6 @@ function dateToShortDateString(date) { try { - logInfo2(`Konvertiere Datum zu kurzem Datum: ${date}`); - if (isValidDate(date)) { const ddNum = date.getDate(); const mmNum = date.getMonth(); @@ -46,7 +44,7 @@ function mergeDateAndTime(date, time) { var result = new Date(); try { - if (isValidDate(date) && isValidDate(time)) { + if(isValidDate(date) && isValidDate(time)) { const day = date.getDate(); const month = date.getMonth(); const year = date.getFullYear(); @@ -55,7 +53,7 @@ function mergeDateAndTime(date, time) { result = new Date(year, month, day, hours, minutes, 0, 0); } - } catch (error) { + } catch(error) { window.showErrorPopup(error); } finally { return result; 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 54ac54b28..2e05e0025 100644 --- a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/service-record-time-calc.js +++ b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/service-record-time-calc.js @@ -246,7 +246,7 @@ function getDateAsString(dateObject) { return `${year}-${month}-${date}`; } -function getDateAndTimeAsString(dateObject) { +function getDateAndTimeAsString(dateObject, ignoreMilliseconds) { if(dateObject === null || dateObject === undefined) { return null; } @@ -260,5 +260,11 @@ function getDateAndTimeAsString(dateObject) { const date = dateObject.getDate().toString().padStart(2, "0"); const month = (dateObject.getMonth() + 1).toString().padStart(2, "0"); - return `${year}-${month}-${date} ${hours}:${minutes}:${seconds}.${milliseconds}`; + let result = `${year}-${month}-${date} ${hours}:${minutes}:${seconds}`; + + if(ignoreMilliseconds === false) { + result += `.${milliseconds}`; + } + + return result; } \ No newline at end of file diff --git a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/trimCanvas.js b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/trimCanvas.js index e6fd9aee1..c195b4b40 100644 --- a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/trimCanvas.js +++ b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/utils/trimCanvas.js @@ -1,37 +1,38 @@ function trimCanvas(canvas) { - var context = canvas.getContext("2d", {willReadFrequently: true}); + const context = canvas.getContext("2d", {willReadFrequently: true}); - var imgWidth = canvas.width; - var imgHeight = canvas.height; + const imgWidth = canvas.width; + const imgHeight = canvas.height; - var imgData = context.getImageData(0, 0, imgWidth, imgHeight).data; + const imgData = context.getImageData(0, 0, imgWidth, imgHeight).data; - // get the corners of the relevant content (everything that's not white) - var cropTop = scanY(true, imgWidth, imgHeight, imgData); - var cropBottom = scanY(false, imgWidth, imgHeight, imgData); - var cropLeft = scanX(true, imgWidth, imgHeight, imgData); - var cropRight = scanX(false, imgWidth, imgHeight, imgData); + // Die Grenzen der nichtweißen Schrift ermitteln: + const cropTop = scanY(true, imgWidth, imgHeight, imgData); + const cropBottom = scanY(false, imgWidth, imgHeight, imgData); + const cropLeft = scanX(true, imgWidth, imgHeight, imgData); + const cropRight = scanX(false, imgWidth, imgHeight, imgData); - // + 1 is needed because this is a difference, there are n + 1 pixels in - // between the two numbers inclusive - var cropXDiff = (cropRight - cropLeft) + 1; - var cropYDiff = (cropBottom - cropTop) + 1; + // Ein Pixel muss hinzugefügt werden, da es n + 1 Pixel zwischen Ziffern gibt: + const cropXDiff = (cropRight - cropLeft) + 1; + const cropYDiff = (cropBottom - cropTop) + 1; - // get the relevant data from the calculated coordinates - var trimmedData = context.getImageData(cropLeft, cropTop, cropXDiff, cropYDiff); + // Die Bilddaten holen: + const trimmedData = context.getImageData(cropLeft, cropTop, cropXDiff, cropYDiff); - // set the trimmed width and height + // Breite und Höhe der getrimmten Leinwand setzen: canvas.width = cropXDiff; canvas.height = cropYDiff; - // clear the canvas + + // Leinwand leeren context.clearRect(0, 0, cropXDiff, cropYDiff); - // place the trimmed data into the cleared canvas to create - // a new, trimmed canvas + + // Das Bild wird in die geleerte Leinwand gesetzt: context.putImageData(trimmedData, 0, 0); - return canvas; // for chaining + + return canvas; // Zum Aneinanderreihen } -// returns the RGBA values of an x, y coord of imgData +// Erzeugt ein Rot-Grün-Blau-Alpha-Objekt mittels einer imgData-Koordinate und dessen Breite function getRGBA(x, y, imgWidth, imgData) { return { red: imgData[(imgWidth * y + x) * 4], @@ -45,42 +46,42 @@ function getAlpha(x, y, imgWidth, imgData) { return getRGBA(x, y, imgWidth, imgData).alpha; } -// finds the first y coord in imgData that is not white +// Ermittelt den nächsten nichtweißen Pixel. function scanY(fromTop, imgWidth, imgHeight, imgData) { - var offset = fromTop ? 1 : -1; - var firstCol = fromTop ? 0 : imgHeight - 1; + const offset = fromTop ? 1 : -1; + const firstCol = fromTop ? 0 : imgHeight - 1; - // loop through each row - for(var y = firstCol; fromTop ? (y < imgHeight) : (y > -1); y += offset) { - // loop through each column - for(var x = 0; x < imgWidth; x++) { - // if not white, return col + // Zeilenweise Durchgehen + for(let y = firstCol; fromTop ? (y < imgHeight) : (y > -1); y += offset) { + // Spaltenweises Durchgehen + for(let x = 0; x < imgWidth; x++) { + // Wenn nicht weiß, gibt es die Spalte zurück if(getAlpha(x, y, imgWidth, imgData)) { return y; } } } - // the whole image is white already - return null + // Das gesamte Bild ist bereits weiß + return null; } -// finds the first x coord in imgData that is not white +// Ermittelt die erste X-Koordinate in einem imgData-Objekt, die nicht weiß ist. function scanX(fromLeft, imgWidth, imgHeight, imgData) { - var offset = fromLeft ? 1 : -1; - var firstRow = fromLeft ? 0 : imgWidth - 1; + const offset = fromLeft ? 1 : -1; + const firstRow = fromLeft ? 0 : imgWidth - 1; - // loop through each column - for(var x = firstRow; fromLeft ? (x < imgWidth) : (x > -1); x += offset) { - // loop through each row - for(var y = 0; y < imgHeight; y++) { - // if not white, return row + // Spaltenweises Durchgehen + for(let x = firstRow; fromLeft ? (x < imgWidth) : (x > -1); x += offset) { + // Zeilenweise Durchgehen + for(let y = 0; y < imgHeight; y++) { + // Wenn nicht weiß, gibt es die Spalte zurück if(getAlpha(x, y, imgWidth, imgData)) { return x; } } } - // the whole image is white already + // Das gesamte Bild ist bereits weiß return null; } \ No newline at end of file diff --git a/BeWoPlanerMobil/Util/DcToMokMapper.cs b/BeWoPlanerMobil/Util/DcToMokMapper.cs index 6e3462b26..ce78701b2 100644 --- a/BeWoPlanerMobil/Util/DcToMokMapper.cs +++ b/BeWoPlanerMobil/Util/DcToMokMapper.cs @@ -1,13 +1,8 @@ using BeWoPlanerMobil.Models; using BS.Shared; using BS.Shared.DataContracts; -using BS.Shared.DataContracts.Compact; -using BS.Shared.DataContracts.Invoicing; -using System; using System.Collections.Generic; using System.Linq; -using System.Runtime.Serialization; -using System.Windows.Media; namespace BeWoPlanerMobil.Util { @@ -125,7 +120,7 @@ namespace BeWoPlanerMobil.Util } } - if (model != null && model.ServiceRecordOids2GoalHeader.ContainsKey(s.Oid.Value)) + if (model?.ServiceRecordOids2GoalHeader?.ContainsKey(s.Oid.Value) ?? false) { var ziele = dc.Goals.Where(g => g.Type == ValueListEntryType.SupportConceptIndividualGoalCategoryType || g.Type == ValueListEntryType.SupportConceptGoalCategoryType).ToList(); diff --git a/BeWoPlanerMobil/Util/FormCollectionConstants.cs b/BeWoPlanerMobil/Util/FormCollectionConstants.cs index 028189d78..6a5237f5c 100644 --- a/BeWoPlanerMobil/Util/FormCollectionConstants.cs +++ b/BeWoPlanerMobil/Util/FormCollectionConstants.cs @@ -94,6 +94,13 @@ public static string InfoMessageKey => "InfoMessage"; public static string ReportMessageKey => "ReportMessage"; public static string AppointmentOidKey => "AppointmentOid"; + public static string AppointmentStartKey => "AppointmentStart"; + public static string AppointmentEndKey => "AppointmentEnd"; + public static string AppointmentCustomerOidsKey => "AppointmentCustomerOids"; + public static string AppointmentEmployeeOidsKey => "AppointmentEmployeeOids"; + public static string AppointmentIsAllDayKey => "AppointmentAllDay"; + public static string AppointmentSubjectKey => "AppointmentSubject"; + public static string AppointmentIsSerienterminKey => "AppointmentIsSerientermin"; public static string AfterRestoreKey => "AfterRestore"; public static string SaveSupportConceptDependenciesKey => "SaveSupportConceptDependencies"; public static string DeleteLocalInputsKey => "DeleteLocalInputsKey"; diff --git a/BeWoPlanerMobil/Views/ExternalSignature/ExternalSignature.cshtml b/BeWoPlanerMobil/Views/ExternalSignature/ExternalSignature.cshtml index c962bbe6a..ccc1d34d1 100644 --- a/BeWoPlanerMobil/Views/ExternalSignature/ExternalSignature.cshtml +++ b/BeWoPlanerMobil/Views/ExternalSignature/ExternalSignature.cshtml @@ -24,7 +24,7 @@ else if(Model != null) { @{ @@ -308,7 +319,7 @@ @* Unterschrift-Anlegen-Button *@ @if(Model.ShowSignature && !serviceRecord.SignatureOid.HasValue && serviceRecord.Customer != null) { - + @@ -606,27 +617,27 @@ @* Die externe Unterschrift *@ - - - - Einmal-Unterschrift - - × - - - - - + + + + Einmal-Unterschrift + + × + + + + + - - - - - - + + + + + + \ No newline at end of file diff --git a/BeWoPlanerMobil/Views/Main/SingleBookingPartial.cshtml b/BeWoPlanerMobil/Views/Main/SingleBookingPartial.cshtml index 8491319b9..5792e691b 100644 --- a/BeWoPlanerMobil/Views/Main/SingleBookingPartial.cshtml +++ b/BeWoPlanerMobil/Views/Main/SingleBookingPartial.cshtml @@ -177,13 +177,15 @@ { using (Html.BeginForm("SelectSupportConcept", "Main", FormMethod.Post, new { Id = "selectSupportConceptForm", onreset = "resetSingleBookingForm()" })) { - var selectedSuportConceptTimeSpanColorClass = Model.SelectedSupportConceptListObject.IsAboutToExpire + var selectedSuportConceptTimeSpanColorClass = (Model.SelectedSupportConceptListObject?.IsAboutToExpire ?? false) ? "text-bewo-is-about-to-expire" - : Model.SelectedSupportConceptListObject.ExpiresInThreeMonthsOrLess + : (Model.SelectedSupportConceptListObject?.ExpiresInThreeMonthsOrLess ?? false) ? "text-bewo-expires-in-three-months" : "text-light"; var isFormDisabled = Model.SelectedCostBearerSupportConceptOid.HasValue ? string.Empty : "disabled"; + var nameAndDateOfBirth = Model.SelectedSupportConceptListObject?.NameAndDateOfBirth ?? string.Empty; + var supportConceptTimeSpan = Model.SelectedSupportConceptListObject?.SupportConceptTimeSpan ?? string.Empty; @@ -192,19 +194,19 @@ - @Model.SelectedSupportConceptListObject.NameAndDateOfBirth + @nameAndDateOfBirth @if(Model.SelectedCostBearerSupportConceptOid > 0) { } - @Model.SelectedSupportConceptListObject.SupportConceptTimeSpan + @supportConceptTimeSpan - @if (Model.SelectedCostBearerSupportConceptOid != null && Model.SelectedCostBearerSupportConceptOid > 0) + @if(Model.SelectedCostBearerSupportConceptOid is > 0) { @@ -317,7 +319,7 @@ - + @Html.Partial("GoalTreePartial", Model) @@ -394,9 +396,6 @@ } var columnWidth = Model.IsEndDateVisible ? "col-md-6" : "col"; - - - //var x = Model.StartTimeToEdit; } @@ -426,8 +425,10 @@ @{ - var von = Model.IsInEditingMode || afterValidationState is true ? Model.StartTimeToEdit : Model.NewStartTime; - var bis = Model.IsInEditingMode || afterValidationState is true ? Model.EndTimeToEdit : Model.NewEndTime; + var von = Model.IsInTransferMode || Model.IsInEditingMode || afterValidationState is true ? Model.StartTimeToEdit : Model.NewStartTime; + var bis = Model.IsInTransferMode || Model.IsInEditingMode || afterValidationState is true ? Model.EndTimeToEdit : Model.NewEndTime; + + var x = von; } diff --git a/BeWoPlanerMobil/Views/Main/SingleSignaturePopupPartial.cshtml b/BeWoPlanerMobil/Views/Main/SingleSignaturePopupPartial.cshtml new file mode 100644 index 000000000..034472b95 --- /dev/null +++ b/BeWoPlanerMobil/Views/Main/SingleSignaturePopupPartial.cshtml @@ -0,0 +1,243 @@ +@model BeWoPlanerMobil.Models.MainModel + + + +@if(Model.ServiceRecord2Monatsunterschrift is null) +{ + + + Fehler: Es wurde kein passender Eintrag gefunden! + Bitte wenden Sie sich an Ihren Administrator. + + +} +else +{ + + + var nameAndDateOfBirth = Model.SelectedSupportConceptListObject?.NameAndDateOfBirth ?? string.Empty; + var supportConceptTimeSpan = Model.SelectedSupportConceptListObject?.SupportConceptTimeSpan ?? string.Empty; + + var info = $"{nameAndDateOfBirth} | {supportConceptTimeSpan}"; + + + + + + Unterschrift + + × + + + + + + + Hilfeplan: + + + @info + + + + + Kategorie + + + @Model.ServiceRecord2Monatsunterschrift.Kategorie + + + + + Leistung + + + @Model.ServiceRecord2Monatsunterschrift.Leistung + + + + + Mitarbeiter + + + @Model.ServiceRecord2Monatsunterschrift.Mitarbeiter + + + + + Datum / Uhrzeit + + + @Model.ServiceRecord2Monatsunterschrift.DatumSchraegstrichUhrzeit + + + + + + + + + + + + + + + + +} diff --git a/BeWoPlanerMobil/Views/Shared/_Layout.cshtml b/BeWoPlanerMobil/Views/Shared/_Layout.cshtml index 71bcdd7d4..a83ddb1d4 100644 --- a/BeWoPlanerMobil/Views/Shared/_Layout.cshtml +++ b/BeWoPlanerMobil/Views/Shared/_Layout.cshtml @@ -337,7 +337,9 @@ function getMaxElementHeight(elementClassName) { return Math.max.apply(Math, $(`.${elementClassName}`).map(function () { return $(this).height(); }).get()); - } + } + + @@ -663,5 +665,7 @@ } @RenderBody() - + + +
- @Model.SelectedSupportConceptListObject.SupportConceptTimeSpan + @supportConceptTimeSpan