MoK: Reports werden alle in einem einzigen PartialView angezeigt und das AbstractModel von dem alle Model erben, hat die Report- und ReportTitle-Eigenschaften.

ServiceRecords werden wie im FaC validiert, d.h. dass Arbeitszeiten und Pausenzeiten keine Überschneidungswarnung bekommen.
This commit is contained in:
2024-07-24 16:45:56 +02:00
parent 65495d4399
commit a75991e805
36 changed files with 1059 additions and 721 deletions

View File

@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Net;
@@ -155,7 +154,7 @@ namespace BeWoPlanerMobil.Controllers
var customerFilter = MobileUserSettingsUtils.GetSettingValueAsEnum(userSettings, SettingsKeys.CustomerFilterInZeiterfassung, CustomerFilterEnum.MyCustomer);
if (customerFilter != CustomerFilterEnum.MyCustomer && !AbstractModel.IsAllowedToSeeSupportConceptFilter)
if(customerFilter != CustomerFilterEnum.MyCustomer && !AbstractModel.IsAllowedToSeeSupportConceptFilter)
{
customerFilter = CustomerFilterEnum.MyCustomer;
}
@@ -174,11 +173,6 @@ namespace BeWoPlanerMobil.Controllers
Model.GroupsOfPeople = EmployeeService.GetAllGroups(GetUser().Employee.EmployeeOid).OrderBy(gop => gop.Name).ToList();
if(!Model.IsInEditingMode)
{
Model.SelectedGoals.Clear();
}
Model.ShowDistanceField = UserSettingsUtils.GetSettingValueAsBool(mandatorSettings, SettingsKeys.ShowDistanceFields);
Model.Dokutypes = ValueListService.GetAllValueListEntrysByType(ValueListEntryType.DocumentType);
@@ -231,11 +225,6 @@ namespace BeWoPlanerMobil.Controllers
}).ToList();
}
if(Model.ServiceCategories is null)
{
Model.ServiceCategories = new List<ServiceCategoryModel>();
}
if(Model.SelectedConceptCostBearerRelations is null)
{
Model.SelectedConceptCostBearerRelations = new List<SupportConceptCostBearerRelDC>();
@@ -255,13 +244,13 @@ namespace BeWoPlanerMobil.Controllers
Model.IsServiceRecordNoticeMandatory = settingsValue is null || !settingsValue.Equals("0");
var isInList = !(Model.SelectedSupportConceptListObject is null) && Model.SupportConceptListObjects.Contains(Model.SelectedSupportConceptListObject);
var isInList = !(Model.SelectedCostBearer2SupportConceptRelListObject is null) && Model.SupportConceptListObjects.Contains(Model.SelectedCostBearer2SupportConceptRelListObject);
if(Model.SelectedSupportConceptListObject is null || !isInList)
if(Model.SelectedCostBearer2SupportConceptRelListObject is null || !isInList)
{
if(!(Model.SelectedSupportConceptListObject is null) && !isInList)
if(!(Model.SelectedCostBearer2SupportConceptRelListObject is null) && !isInList)
{
Log.Info($"Model.SelectedSupportConceptListObject.Oid = {Model.SelectedSupportConceptListObject.CostBearer2SupportConceptOid} is not in list !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
Log.Info($"Model.SelectedSupportConceptListObject.Oid = {Model.SelectedCostBearer2SupportConceptRelListObject.CostBearer2SupportConceptOid} is not in list !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
var sb = new StringBuilder();
foreach(var o in Model.SupportConceptListObjects)
@@ -277,7 +266,7 @@ namespace BeWoPlanerMobil.Controllers
}
Model.SelectedSupportConceptListObject = Model.SupportConceptListObjects.FirstOrDefault(f => f.CostBearer2SupportConceptOid == "-1") ?? Model.SupportConceptListObjects.First();
Model.SelectedCostBearer2SupportConceptRelListObject = Model.SupportConceptListObjects.FirstOrDefault(f => f.CostBearer2SupportConceptOid == "-1") ?? Model.SupportConceptListObjects.First();
Model.CostBearer2SupportConceptOid = -1;
Model.HasAnyRatingTypes = AbstractModel.HasRightToRateGoals && OperationsService.GetAllRatingTypes().Any();
@@ -530,11 +519,16 @@ namespace BeWoPlanerMobil.Controllers
var massnahmen = goals.Where(w => Massnahmentypen.Contains(w.Type)).OrderBy(s => s.DisplayName).ToList();
var goalTree = new List<GoalTreeItem>();
var goalTreeDic = new Dictionary<long, GoalTreeItem>();
var goalsWithRating = Model.SelectedServiceRecord?.Goals.Where(goal => goal.RatingTypeOid.HasValue).ToList() ?? new List<ValueListEntryDC>();
var goalsWithRating = Model.SelectedServiceRecord?.Goals?.Where(goal => goal.RatingTypeOid.HasValue).ToList() ?? new List<ValueListEntryDC>();
var ratingTypes = OperationsService.GetRatingTypesByOids(goalsWithRating.Where(goal => goal.RatingTypeOid.HasValue).Select(goal => goal.RatingTypeOid.Value).Distinct().ToList());
foreach(var ziel in ziele.Where(z => z.ValueListEntryOid.HasValue))
foreach(var ziel in ziele)
{
if(ziel.ValueListEntryOid is null)
{
continue;
}
var treeItem = new GoalTreeItem(true, ziel.Type)
{
Children = new List<GoalTreeItem>(),
@@ -553,6 +547,11 @@ namespace BeWoPlanerMobil.Controllers
foreach(var zielMitEltern in goalTreeDic.Values.Where(zielMitEltern => zielMitEltern.ParentOid != null))
{
if(zielMitEltern.ParentOid is null)
{
continue;
}
goalTreeDic[zielMitEltern.ParentOid.Value].Children.Add(zielMitEltern);
}
@@ -590,12 +589,9 @@ namespace BeWoPlanerMobil.Controllers
goalTreeDic[ziel.ParentOid.Value].Children.Add(kind);
}
foreach(var item in goalTreeDic.Values)
foreach(var item in goalTreeDic.Values.Where(item => item.Children.Count == 0))
{
if(item.Children.Count == 0)
{
item.IsLeaf = true;
}
item.IsLeaf = true;
}
goalTree = goalTree.OrderBy(o => o.ValueListEntryOid).ToList();
@@ -622,6 +618,11 @@ namespace BeWoPlanerMobil.Controllers
{
var parentDC = ValueListService.GetValueListEntryByOid(pParentOid);
if(parentDC?.ValueListEntryOid is null)
{
continue;
}
if(!_ParentGoals.ContainsKey(parentDC.ValueListEntryOid.Value))
{
_ParentGoals.Add(parentDC.ValueListEntryOid.Value, parentDC);
@@ -866,34 +867,6 @@ namespace BeWoPlanerMobil.Controllers
return "data:image/png;base64," + SignatureUtils.ConvertImageToBase64String(watermarker.Image);
}
[Authorize]
public string LoadServiceCategories(long pServiceCategoryOid)
{
if (Model is null)
{
Logout();
return LeerzeichenFuerGetMethoden;
}
try
{
var serviceCategoryModel = Model.ServiceCategories.FirstOrDefault(s => s.ServiceCategoryOid.HasValue && s.ServiceCategoryOid.Value == pServiceCategoryOid);
if(serviceCategoryModel != null)
{
Model.SelectedServiceCategoryOid = serviceCategoryModel.ServiceCategoryOid;
Model.SelectedServiceDescriptionOid = serviceCategoryModel.ServiceDescriptions.OrderBy(serviceDescription => serviceDescription.Position).FirstOrDefault()?.ServiceDescriptionOid;
}
return SerializeObject(serviceCategoryModel != null ? serviceCategoryModel.ServiceDescriptions.OrderBy(serviceDescription => serviceDescription.Position).ToList() : new List<ServiceDescriptionDC>());
}
catch(Exception exception)
{
Debug.WriteLine(exception);
throw;
}
}
[Authorize]
public string LoadCompleteTextbausteinByOid(long pTextbausteinOid)
{
@@ -1719,17 +1692,15 @@ namespace BeWoPlanerMobil.Controllers
{
try
{
if (Model is null)
if(Model is null)
{
TempData[TempDataConstants.DoLogoutKey] = true;
TempData[TempDataConstants.ErrorMessageKey] = "Model ist null!";
return Logout();
}
long? cb2ScOid = Convert.ToInt64(formCollection[FormCollectionConstants.CostBearer2SupportConceptOidKey]);
Log.Info($"SelectSupportConcept: {cb2ScOid}");
Model.SelectedServiceDescriptionOid = null;
Model.SelectedCostBearerSupportConceptRelOid = cb2ScOid;
LoadSupportConceptThings(cb2ScOid);
@@ -1755,17 +1726,9 @@ namespace BeWoPlanerMobil.Controllers
Model.Categories2Descriptions = new Dictionary<ServiceCategoryDC, List<ServiceDescriptionDC>>();
}
if(Model.ServiceCategories is null)
{
Model.ServiceCategories = new List<ServiceCategoryModel>();
}
Model.ServiceCategories.Clear();
Model.Categories2Descriptions.Clear();
Model.SelectedServiceCategory = null;
Model.SelectedServiceCategoryOid = null;
Model.SelectedServiceDescription = null;
Model.SelectedServiceDescriptionOid = null;
if(cb2ScOid is null && (Model.IsInGroupBookingMode || Model.IsInMultiBookingMode))
{
@@ -1778,20 +1741,8 @@ namespace BeWoPlanerMobil.Controllers
// Alle ServiceDescriptions der ausgewählten Hilfepläne laden
var nodes = OperationsService.GetSupportConceptTreeNodeDetailInfos(selectedSupportConcepts.Where(sc => sc.SupportConceptOid.HasValue).Select(sc => sc.SupportConceptOid.Value).ToList());
if(Model.Categories2Descriptions is null)
{
Model.Categories2Descriptions = new Dictionary<ServiceCategoryDC, List<ServiceDescriptionDC>>();
}
Model.Categories2Descriptions = CreateServiceCategory2ServiceDescription(nodes, true);
if(Model.Categories2Descriptions.Count == 0 && nodes.Any())
{
var allServiceDescriptions = OperationsService.GetAllServiceDescriptions();
allServiceDescriptions.DoForEach(serviceDescription => Model.Categories2Descriptions.AddOrUpdateValueInDictionary(serviceDescription.Category, serviceDescription));
}
SelectFirstServiceDescription();
return;
@@ -1800,33 +1751,25 @@ namespace BeWoPlanerMobil.Controllers
Model.CostBearer2SupportConceptOid = cb2ScOid;
Model.SelectedSupportConcept =
Model.SupportConcepts.FirstOrDefault(
f =>
f.CostBearerRelations.Any(
a =>
a.CostBearer2SupportConceptOid.HasValue &&
a.CostBearer2SupportConceptOid.Value.Equals(Model.CostBearer2SupportConceptOid)));
supportConcept =>
supportConcept.CostBearerRelations.Any(
supportConceptCostBearerRel =>
supportConceptCostBearerRel.CostBearer2SupportConceptOid.HasValue &&
supportConceptCostBearerRel.CostBearer2SupportConceptOid.Value.Equals(Model.CostBearer2SupportConceptOid)));
if(Model.SelectedSupportConcept != null)
{
Model.SelectedSupportConceptListObject = Model.SupportConceptListObjects.First(f => long.Parse(f.CostBearer2SupportConceptOid) == cb2ScOid);
Model.SelectedCostBearer2SupportConceptRelListObject = Model.SupportConceptListObjects.First(f => long.Parse(f.CostBearer2SupportConceptOid) == cb2ScOid);
var node = OperationsService.GetSupportConceptTreeNodeDetailInfo(Model.SelectedSupportConcept.Customer.CustomerOid, Model.SelectedSupportConcept.SupportConceptOid, Model.CostBearer2SupportConceptOid);
Model.ServiceCategories = node.ServiceAccountings.Count > 0
? CreateServiceCategoryModels(node.ServiceAccountings.Select(sa => sa.ServiceDescription).ToList())
: CreateServiceCategoryModels(OperationsService.GetAllServiceDescriptions());
Model.ServiceCategories = Model.ServiceCategories.Where(c => !c.OhneHilfeplan.HasValue || c.OhneHilfeplan.Value == AccountingvisibilityType.Beides || c.OhneHilfeplan.Value == AccountingvisibilityType.NurKlientenbezogen).ToList();
Model.Categories2Descriptions = CreateServiceCategory2ServiceDescription(new List<SupportConceptTreeNodeDetailInfoDC> { node }, false);
}
else if(cb2ScOid == -2) // Ohne Hilfeplan
{
var allServiceDescriptions = OperationsService.GetAllServiceDescriptions();
Model.SelectedSupportConceptListObject = Model.SupportConceptListObjects.First(f => f.CostBearer2SupportConceptOid.Equals(cb2ScOid.ToString()));
Model.ServiceCategories = CreateServiceCategoryModels(OperationsService.GetAllServiceDescriptions());
Model.ServiceCategories = Model.ServiceCategories.Where(c => !c.OhneHilfeplan.HasValue || c.OhneHilfeplan.Value == AccountingvisibilityType.Beides || c.OhneHilfeplan.Value == AccountingvisibilityType.NichtKlientenbezogen).ToList();
Model.SelectedCostBearer2SupportConceptRelListObject = Model.SupportConceptListObjects.First(f => f.CostBearer2SupportConceptOid.Equals(cb2ScOid.ToString()));
if(Model.Categories2Descriptions is null)
{
@@ -1848,8 +1791,8 @@ namespace BeWoPlanerMobil.Controllers
}
else if(cb2ScOid == -1) // Hilfeplan Auswählen
{
Model.SelectedSupportConceptListObject = Model.SupportConceptListObjects.First(f => f.CostBearer2SupportConceptOid.Equals(cb2ScOid.ToString()));
Model.ServiceCategories.Clear();
Model.SelectedCostBearer2SupportConceptRelListObject = Model.SupportConceptListObjects.First(f => f.CostBearer2SupportConceptOid.Equals(cb2ScOid.ToString()));
if(Model.Categories2Descriptions is null)
{
Model.Categories2Descriptions = new Dictionary<ServiceCategoryDC, List<ServiceDescriptionDC>>();
@@ -1860,12 +1803,6 @@ namespace BeWoPlanerMobil.Controllers
}
}
// Kategorien werden nach Position sortiert
if (Model.ServiceCategories != null)
{
Model.ServiceCategories = Model.ServiceCategories.OrderBy(serviceCategory => serviceCategory.Position).ToList();
}
// Ist der Klient abwesend, wird dies wie im FaC angezeigt
if(Model.SelectedSupportConcept?.Customer?.AbsenceTimes?.Any() ?? false)
{
@@ -1900,18 +1837,18 @@ namespace BeWoPlanerMobil.Controllers
var firstServiceCategory2ServiceDescriptions = Model.Categories2Descriptions.OrderBy(c2d => c2d.Key.Position).ThenBy(c2d => c2d.Key.ServiceCategoryOid).FirstOrDefault(c2d => c2d.Value.Any());
if(firstServiceCategory2ServiceDescriptions.Key != null)
if(firstServiceCategory2ServiceDescriptions.Key is null)
{
var serviceDescription = firstServiceCategory2ServiceDescriptions.Value.OrderBy(sd => sd.Position).ThenBy(sd => sd.ServiceDescriptionOid).First();
Model.SelectedServiceDescription = serviceDescription;
Model.SelectedServiceCategory = serviceDescription.Category;
Model.SelectedServiceDescriptionOid = serviceDescription.ServiceDescriptionOid;
Model.SelectedServiceCategoryOid = serviceDescription.Category.ServiceCategoryOid;
return;
}
var serviceDescription = firstServiceCategory2ServiceDescriptions.Value.OrderBy(sd => sd.Position).ThenBy(sd => sd.ServiceDescriptionOid).First();
Model.SelectedServiceDescription = serviceDescription;
Model.SelectedServiceCategory = serviceDescription.Category;
}
private static Dictionary<ServiceCategoryDC, List<ServiceDescriptionDC>> CreateServiceCategory2ServiceDescription(List<SupportConceptTreeNodeDetailInfoDC> nodes, bool isGroupBooking)
private Dictionary<ServiceCategoryDC, List<ServiceDescriptionDC>> CreateServiceCategory2ServiceDescription(List<SupportConceptTreeNodeDetailInfoDC> nodes, bool isGroupBooking)
{
var result = new Dictionary<ServiceCategoryDC, List<ServiceDescriptionDC>>();
@@ -1926,7 +1863,7 @@ namespace BeWoPlanerMobil.Controllers
{
firstNode.ServiceAccountings.DoForEach(serviceAccounting => result.AddOrUpdateValueInDictionary(serviceAccounting.ServiceDescription.Category, serviceAccounting.ServiceDescription));
}
foreach(var serviceAccounting in firstNode.ServiceAccountings)
{
var serviceDescription = serviceAccounting.ServiceDescription;
@@ -1938,7 +1875,17 @@ namespace BeWoPlanerMobil.Controllers
}
}
return result.OrderBy(kvp => kvp.Key.Position).ToDictionary(category2Descriptions => category2Descriptions.Key, category2Descriptions => category2Descriptions.Value);
if(firstNode.ServiceAccountings.Count == 0)
{
var allServiceDescriptions = OperationsService.GetAllServiceDescriptions().Where(sd => sd.Category.OhneHilfeplan != AccountingvisibilityType.NichtKlientenbezogen).ToList();
foreach(var serviceDescription in allServiceDescriptions)
{
result.AddOrUpdateValueInDictionary(serviceDescription.Category, serviceDescription);
}
}
return result.OrderBy(kvp => kvp.Key.Position).ToDictionary(category2Descriptions => category2Descriptions.Key, category2Descriptions => category2Descriptions.Value.OrderBy(serviceDescription => serviceDescription.Position).ToList());
}
[HttpPost]
@@ -1991,20 +1938,20 @@ namespace BeWoPlanerMobil.Controllers
if (Model is null)
{
Logout();
return LeerzeichenFuerGetMethoden;
return "0";
}
var sc = Model.SelectedSupportConcept;
if (!Model.IsInGroupBookingMode && sc is null)
{
return LeerzeichenFuerGetMethoden;
return "0";
}
if(string.IsNullOrEmpty(pGoalOids))
{
Model.SelectedGoals.Clear();
return LeerzeichenFuerGetMethoden;
return "0";
}
var splitOids = pGoalOids.Trim(';').Split(';');
@@ -2028,15 +1975,13 @@ namespace BeWoPlanerMobil.Controllers
allGoals.AddRangeIfElementsNotIn(parents);
var goals = allGoals.Where(w => w.ValueListEntryOid.HasValue && selectedGoalOids.Contains(w.ValueListEntryOid.Value)).ToList();
// ToDo: Hier liegt der Bug!
// ToDo: vorhandene Bewertungen beachten!
var stillSelectedGoals = Model.SelectedGoals.Where(s => goals.Any(a => a.ValueListEntryOid.HasValue && a.ValueListEntryOid.Value == s.ValueListEntryOid)).ToList();
Model.SelectedGoals = stillSelectedGoals;
Model.SelectedGoals.AddRangeIfElementsNotIn(goals);
return LeerzeichenFuerGetMethoden;
return Model.SelectedGoals?.Count.ToString() ?? "0";
}
[Authorize]
@@ -2052,7 +1997,6 @@ namespace BeWoPlanerMobil.Controllers
Model.SelectedServiceDescription = serviceDescription;
Model.SelectedServiceDescriptionOid = pServiceDescriptionOid;
return LeerzeichenFuerGetMethoden;
}
@@ -2171,7 +2115,7 @@ namespace BeWoPlanerMobil.Controllers
var wasSuccessful = long.TryParse(oidString, out var serviceRecordOid);
if (!wasSuccessful)
if(!wasSuccessful)
{
return RedirectToActionPermanent("Main");
}
@@ -2191,8 +2135,8 @@ namespace BeWoPlanerMobil.Controllers
var selectedServiceDescription = selectedServiceRecord.ServiceDescription;
var selectedServiceCategory = selectedServiceDescription.Category;
Model.SelectedServiceDescriptionOid = selectedServiceDescription.ServiceDescriptionOid;
Model.SelectedServiceCategoryOid = selectedServiceCategory.ServiceCategoryOid;
Model.SelectedServiceDescription = selectedServiceDescription;
Model.SelectedServiceCategory = selectedServiceCategory;
Model.PreviouslySelectedEmployee = Model.SelectedEmployee;
Model.SelectedEmployee = selectedServiceRecord.Employee;
@@ -2210,8 +2154,6 @@ namespace BeWoPlanerMobil.Controllers
Model.SelectedSupportConcept = null;
Model.SelectedEmployee = null;
Model.ServiceCategories = CreateServiceCategoryModels(OperationsService.GetAllServiceDescriptions());
var group = OperationsService.GetServiceRecordGroup(selectedServiceRecord.GroupOid.Value);
var employees = group.ServiceRecordList.Select(serviceRecord => serviceRecord.Employee).Distinct().ToList();
@@ -2228,8 +2170,6 @@ namespace BeWoPlanerMobil.Controllers
LoadServiceCategoriesToModel(null);
Model.SelectedServiceDescriptionOid = selectedServiceRecord.ServiceDescription.ServiceDescriptionOid;
Model.SelectedServiceCategoryOid = selectedServiceRecord.ServiceDescription.Category.ServiceCategoryOid;
Model.SelectedServiceDescription = selectedServiceDescription;
Model.SelectedServiceCategory = selectedServiceCategory;
@@ -2242,7 +2182,7 @@ namespace BeWoPlanerMobil.Controllers
[Authorize]
public string GetSelectedRecordInformation()
{
if (Model is null)
if(Model is null)
{
Logout();
return LeerzeichenFuerGetMethoden;
@@ -2250,7 +2190,7 @@ namespace BeWoPlanerMobil.Controllers
var result = LeerzeichenFuerGetMethoden;
if (Model.SelectedServiceRecordOid.HasValue)
if(Model.SelectedServiceRecordOid.HasValue)
{
result = SerializeObject(Model.ServiceRecords.First(f => f.ServiceRecordOid == Model.SelectedServiceRecordOid));
}
@@ -2498,7 +2438,7 @@ namespace BeWoPlanerMobil.Controllers
dateRangeString = node?.SupportConceptTreeNodeDC != null ? node.SupportConceptTreeNodeDC.SupportConceptCostBearerRelDC.DateRangeString : "";
}
var result = OperationsService.ValidateServiceRecordEntry(checkServiceRecord, stats, maxDaysEditSRsAllowed, checkServiceRecord.GroupOid.HasValue, employeeOids);
var result = OperationsService.ValidateServiceRecord(checkServiceRecord, stats, maxDaysEditSRsAllowed, null, null);
validationResults.Add(new ServiceRecord2Validation(checkServiceRecord, result, dateRangeString ?? ""));
} // Mehrfachbuchung
else if(Model.IsInMultiBookingMode && !Model.IsInGroupBookingMode)
@@ -2642,9 +2582,20 @@ namespace BeWoPlanerMobil.Controllers
intervall = "" + limitFuerZeiterfassung + " Tagen";
}
newResult.Message += "Sie k&ouml;nnen keine neuen Leistungen f&uuml;r den " + von + " dokumentieren, da die Zeiterfassung innerhalb von " + intervall + " erfolgen muss.<br /><br />";
exitLoop = true;
newResult.KannTrotzdemGespeichertWerden = false;
if(!MobileSessionFacade.CheckForUserRight(UserRightType.ServiceRecordAllowEditAfterMindays))
{
if(limitFuerZeiterfassung == 1)
{
newResult.Message += $"Sie k&ouml;nnen keine neuen Leistungen f&uuml;r den {von} dokumentieren, da die Zeiterfassung innerhalb von einem Tag erfolgen muss.<br /><br />";
}
else
{
newResult.Message += $"Sie k&ouml;nnen keine neuen Leistungen f&uuml;r den {von} dokumentieren, da die Zeiterfassung innerhalb von {intervall} erfolgen muss.<br /><br />";
}
exitLoop = true;
}
break;
case Custom:
@@ -2753,10 +2704,6 @@ namespace BeWoPlanerMobil.Controllers
return LeerzeichenFuerGetMethoden;
}
var allowDeleteAfterEmployeeSignature = MobileSessionFacade.CheckForUserRight(UserRightType.ServiceRecord_AllowDeleteAfterEmployeeSignature);
var allowDeleteAll = MobileSessionFacade.CheckForUserRight(UserRightType.CreateAll);
var validationResultList = OperationsService.ValidateServiceRecordDeletion(serviceRecord, Model.Employee.EmployeeOid.Value);
if(validationResultList.Count > 0)
@@ -2813,7 +2760,7 @@ namespace BeWoPlanerMobil.Controllers
{
try
{
if (Model is null)
if(Model is null)
{
Logout();
return LeerzeichenFuerGetMethoden;
@@ -2822,7 +2769,7 @@ namespace BeWoPlanerMobil.Controllers
Model.SelectedEmployee = Model.AllEmployees.First(f => f.EmployeeOid.Equals(employeeOid));
return LeerzeichenFuerGetMethoden;
}
catch (Exception e)
catch(Exception e)
{
Log.Info("Error in SetServiceRecordEmployee:");
Log.Error(e.Message, e);
@@ -2923,7 +2870,7 @@ namespace BeWoPlanerMobil.Controllers
[Authorize]
public ActionResult SetGroupBookingMode(FormCollection pFormCollection)
{
if (Model is null)
if(Model is null)
{
TempData[TempDataConstants.DoLogoutKey] = true;
return Logout();
@@ -2947,7 +2894,7 @@ namespace BeWoPlanerMobil.Controllers
/// </param>
private void ResetBookingMode(BookingMode bookingMode)
{
if (Model is null)
if(Model is null)
{
Logout();
return;
@@ -3015,28 +2962,14 @@ namespace BeWoPlanerMobil.Controllers
}
ResetGroupBookingMode();
if (Model.SelectedSupportConcept != null)
{
var details = OperationsService.GetSupportConceptTreeNodeDetailInfo(Model.SelectedSupportConcept.Customer.CustomerOid, Model.SelectedSupportConcept.SupportConceptOid, Model.CostBearer2SupportConceptOid);
Model.ServiceCategories = details.ServiceAccountings.Count > 0
? CreateServiceCategoryModels(details.ServiceAccountings.Select(sa => sa.ServiceDescription).ToList())
: CreateServiceCategoryModels(OperationsService.GetAllServiceDescriptions());
Model.ServiceCategories = Model.ServiceCategories.Where(c => !c.OhneHilfeplan.HasValue || c.OhneHilfeplan.Value == AccountingvisibilityType.Beides || c.OhneHilfeplan.Value == AccountingvisibilityType.NurKlientenbezogen).ToList();
}
else if (Model.CostBearer2SupportConceptOid == -2)
{
Model.ServiceCategories = CreateServiceCategoryModels(OperationsService.GetAllServiceDescriptions());
Model.ServiceCategories = Model.ServiceCategories.Where(c => !c.OhneHilfeplan.HasValue || c.OhneHilfeplan.Value == AccountingvisibilityType.Beides || c.OhneHilfeplan.Value == AccountingvisibilityType.NichtKlientenbezogen).ToList();
}
}
LoadGoals();
}
private void ResetMultiBookingMode()
{
Model.ServiceCategories.Clear();
Model.Categories2Descriptions.Clear();
Model.MultiBookingSelectedConceptCostBearerRelations.Clear();
Model.MultiBookingSelectedEmployees.Clear();
Model.MultiBookingSelectedGroupOfPeopleOids.Clear();
@@ -3047,7 +2980,7 @@ namespace BeWoPlanerMobil.Controllers
private void ResetGroupBookingMode()
{
Model.ServiceCategories.Clear();
Model.Categories2Descriptions.Clear();
Model.GroupBookingSelectedCostbearerRelOids.Clear();
Model.GroupBookingSelectedEmployees.Clear();
Model.GroupBookingSelectedSupportConcepts.Clear();
@@ -3066,6 +2999,8 @@ namespace BeWoPlanerMobil.Controllers
ResetBookingMode(BookingMode.SingleBookingMode);
LoadServiceCategoriesToModel(Model.SelectedCostBearerSupportConceptRelOid);
return View("Main", Model);
}
@@ -3162,33 +3097,12 @@ namespace BeWoPlanerMobil.Controllers
Model.MultiBookingSelectedEmployees = new List<CompactEmployeeDC> { MobileSessionFacade.LoggedInCompactEmployee };
Model.MultiBookingSelectedGroupOfPeopleOids.Clear();
Model.MultiBookingSelectedSupportConcepts.Clear();
Model.SelectedGoals.Clear();
Model.SelectedServiceCategory = null;
Model.SelectedServiceCategoryOid = null;
Model.SelectedServiceDescription = null;
Model.SelectedServiceDescriptionOid = null;
LoadServiceCategoriesToModel(Model.CostBearer2SupportConceptOid);
var serviceDescriptions = Model.GetServiceDesctiptions();
if(!Model.ServiceCategories.Any() || !serviceDescriptions.Any())
{
return;
}
// Hier erst nach Kategorie gehen und dann die Leistung mit der niedrigsten Position nehmen!
var firstCategory = serviceDescriptions.Select(sd => sd.Category).OrderBy(sc => sc.Position).ThenBy(sc => sc.ServiceCategoryOid).First();
var firstServiceDescription = serviceDescriptions.Where(sd => sd.Category.ServiceCategoryOid.Value.Equals(firstCategory.ServiceCategoryOid.Value)).OrderBy(sd => sd.Position).ThenBy(sd => sd.ServiceDescriptionOid).First();
if(serviceDescriptions.Any(a => a.ServiceDescriptionOid.HasValue && Model.SelectedServiceDescriptionOid.HasValue && a.ServiceDescriptionOid.Value.Equals(Model.SelectedServiceDescriptionOid)))
{
return;
}
Model.SelectedServiceDescriptionOid = firstServiceDescription.ServiceDescriptionOid;
Model.SelectedServiceCategoryOid = firstServiceDescription.Category.ServiceCategoryOid;
}
[Authorize]
@@ -3788,85 +3702,95 @@ namespace BeWoPlanerMobil.Controllers
LoadSupportConceptThings(-2);
var serviceCategory = Model.ServiceCategories.FirstOrDefault();
var serviceDescription = serviceCategory?.ServiceDescriptions.FirstOrDefault();
if(!(serviceDescription is null))
if(Model.SelectedServiceDescription != null)
{
Model.SelectedServiceCategoryOid = serviceDescription.Category.ServiceCategoryOid;
Model.SelectedServiceCategory = Model.SelectedServiceDescription.Category;
var serviceRecord = CreateServiceRecordFromScratch(start.Value, end.Value, null, Model.SelectedEmployee, notice);
serviceRecord.ServiceDescription = serviceDescription;
Model.SelectedServiceRecord = serviceRecord;
}
}
// Einzelbuchung
else 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 supportConcept = Model.SupportConcepts.FirstOrDefault(f => f.SupportConceptOid.HasValue && f.SupportConceptOid.Value.Equals(compactSupportConcept.SupportConceptOid));
var serviceRecord = CreateServiceRecordFromScratch(start.Value, end.Value, supportConcept?.Customer, Model.SelectedEmployee, notice);
var costBearer2SupportConcept = supportConcept?.CostBearerRelations.FirstOrDefault();
LoadSupportConceptThings(costBearer2SupportConcept?.CostBearer2SupportConceptOid ?? -2);
var serviceCategory = Model.ServiceCategories.FirstOrDefault();
var serviceDescription = serviceCategory?.ServiceDescriptions.FirstOrDefault();
serviceRecord.CostBearer = costBearer2SupportConcept?.CostBearer;
serviceRecord.CostBearer2SupportConceptOid = costBearer2SupportConcept?.CostBearer2SupportConceptOid;
serviceRecord.ServiceDescription = serviceDescription;
if(!(serviceDescription is null))
{
serviceRecord.ServiceDescription = Model.SelectedServiceDescription;
Model.SelectedServiceRecord = serviceRecord;
}
}
else // Gruppenbuchung
// Einzelbuchung
else
{
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()
var availableRelOids = new List<long>();
Model.SupportConceptListObjects.DoForEach(sclo =>
{
Start = start,
End = end,
RoundedDuration = roundedDuration,
Notice = notice,
ServiceDescription = Model.ServiceCategories.FirstOrDefault()?.ServiceDescriptions.FirstOrDefault()
};
var supportConceptsForGroupBooking = Model.SupportConcepts.Where(sc => sc.SupportConceptOid.HasValue && supportConceptList.Any(csc => csc.SupportConceptOid.Equals(sc.SupportConceptOid.Value))).ToList();
var costBearer2SupportConceptOids = new List<long>();
var costBearer2SupportConcepts = new List<SupportConceptCostBearerRelDC>();
foreach(var supportConcept in supportConceptsForGroupBooking)
{
var costBearer2SupportConcept = supportConcept.CostBearerRelations.FirstOrDefault();
if(costBearer2SupportConcept?.CostBearer2SupportConceptOid is null)
if(long.TryParse(sclo.CostBearer2SupportConceptOid, out var costBearer2SupportConceptRelOid))
{
continue;
availableRelOids.AddIfNotIn(costBearer2SupportConceptRelOid);
}
});
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 supportConcept = Model.SupportConcepts.FirstOrDefault(f => f.SupportConceptOid.HasValue && f.SupportConceptOid.Value.Equals(compactSupportConcept.SupportConceptOid));
var serviceRecord = CreateServiceRecordFromScratch(start.Value, end.Value, supportConcept?.Customer, Model.SelectedEmployee, notice);
var costBearer2SupportConcept = supportConcept?.CostBearerRelations.FirstOrDefault(cbRel => cbRel.CostBearer2SupportConceptOid.HasValue && availableRelOids.Contains(cbRel.CostBearer2SupportConceptOid.Value));
LoadSupportConceptThings(costBearer2SupportConcept?.CostBearer2SupportConceptOid ?? -2);
serviceRecord.CostBearer = costBearer2SupportConcept?.CostBearer;
serviceRecord.CostBearer2SupportConceptOid = costBearer2SupportConcept?.CostBearer2SupportConceptOid;
serviceRecord.ServiceDescription = Model.SelectedServiceDescription;
if(Model.SelectedServiceDescription != null)
{
Model.SelectedServiceRecord = serviceRecord;
}
}
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 supportConceptsForGroupBooking = Model.SupportConcepts.Where(sc => sc.SupportConceptOid.HasValue && supportConceptList.Any(csc => csc.SupportConceptOid.Equals(sc.SupportConceptOid.Value))).ToList();
var costBearer2SupportConceptOids = new List<long>();
var costBearer2SupportConcepts = new List<SupportConceptCostBearerRelDC>();
foreach(var supportConcept in supportConceptsForGroupBooking)
{
var costBearer2SupportConcept = supportConcept?.CostBearerRelations.FirstOrDefault(cbRel => cbRel.CostBearer2SupportConceptOid.HasValue && availableRelOids.Contains(cbRel.CostBearer2SupportConceptOid.Value));
if(costBearer2SupportConcept?.CostBearer2SupportConceptOid is null)
{
continue;
}
costBearer2SupportConceptOids.AddIfNotIn(costBearer2SupportConcept.CostBearer2SupportConceptOid.Value);
costBearer2SupportConcepts.AddIfNotIn(costBearer2SupportConcept);
}
costBearer2SupportConceptOids.AddIfNotIn(costBearer2SupportConcept.CostBearer2SupportConceptOid.Value);
costBearer2SupportConcepts.AddIfNotIn(costBearer2SupportConcept);
}
if(costBearer2SupportConceptOids.Any())
{
Model.GroupBookingSelectedCostbearerRelOids = costBearer2SupportConceptOids;
Model.SelectedConceptCostBearerRelations = costBearer2SupportConcepts;
Model.GroupBookingSelectedSupportConcepts = supportConceptsForGroupBooking;
}
if(costBearer2SupportConceptOids.Any())
{
Model.GroupBookingSelectedCostbearerRelOids = costBearer2SupportConceptOids;
Model.SelectedConceptCostBearerRelations = costBearer2SupportConcepts;
Model.GroupBookingSelectedSupportConcepts = supportConceptsForGroupBooking;
LoadServiceCategoriesToModel(null);
LoadGoals();
}
}
@@ -4560,7 +4484,7 @@ namespace BeWoPlanerMobil.Controllers
var serviceRecord = Model.GetServiceRecord(serviceRecordOid);
var hilfeplan = Model.SelectedSupportConceptListObject.NameAndDateOfBirth + " | " + Model.SelectedSupportConceptListObject.SupportConceptTimeSpan;
var hilfeplan = Model.SelectedCostBearer2SupportConceptRelListObject.NameAndDateOfBirth + " | " + Model.SelectedCostBearer2SupportConceptRelListObject.SupportConceptTimeSpan;
var leistung = serviceRecord.ServiceDescription.Name;
var kategorie = serviceRecord.ServiceDescription.Category;
var employee = $"{serviceRecord.Employee.FirstName} {serviceRecord.Employee.LastName}";
@@ -4616,15 +4540,15 @@ namespace BeWoPlanerMobil.Controllers
if(Model is null)
{
TempData[TempDataConstants.DoLogoutKey] = true;
return PartialView("Category2ServiceDescriptionPartial", Model);
return PartialView("Category2ServiceDescriptionPartial");
}
if(long.TryParse(categoryOidStr, out var categoryOid))
{
Model.SelectedServiceCategory = Model.Categories2Descriptions.FirstOrDefault(f => f.Key?.ServiceCategoryOid != null && f.Key.ServiceCategoryOid.Value.Equals(categoryOid)).Key;
Model.SelectedServiceCategoryOid = Model.SelectedServiceCategory?.ServiceCategoryOid;
//Model.SelectedServiceCategoryOid = Model.SelectedServiceCategory?.ServiceCategoryOid;
Model.SelectedServiceDescription = null;
Model.SelectedServiceDescriptionOid = null;
//Model.SelectedServiceDescriptionOid = null;
if(Model.SelectedServiceCategory is null)
{
@@ -4634,7 +4558,7 @@ namespace BeWoPlanerMobil.Controllers
var selectedServiceDescription = Model.Categories2Descriptions[Model.SelectedServiceCategory].OrderBy(sd => sd.Position).ThenBy(sd => sd.ServiceDescriptionOid).FirstOrDefault();
Model.SelectedServiceDescription = selectedServiceDescription;
Model.SelectedServiceDescriptionOid = selectedServiceDescription?.ServiceDescriptionOid;
//Model.SelectedServiceDescriptionOid = selectedServiceDescription?.ServiceDescriptionOid;
}
return PartialView("Category2ServiceDescriptionPartial", Model);