Files
BeWoPlaner/ReportImp/HausDuelken/Service/CustomHomeContentGenerator.cs

135 lines
6.7 KiB
C#

using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Service.Configuration;
using BeWo.Service.DCEntityMapper;
using BeWo.Service.Plugins;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts.Compact;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HausDuelken.Service
{
public class CustomHomeContentGenerator : HomeContentGenerator
{
public override List<CompactSupportConceptDC> GetExpiringSupportConcepts(long? employeeOid,
DateTime expiredUntil)
{
var list = new List<CompactSupportConceptDC>();
var emp = MapperFactory.EmployeeDC_Employee.MapToNewDC(DAOFactory.GenericDAO.GetByID<Employee>(employeeOid.Value));
var user = DAOFactory.GenericDAO.GetAllActive<ApplicationUser>().FirstOrDefault(au => au.Employee.Oid.Value == employeeOid.Value);
if (user != null)
{
// Wenn der angemeldete Nutzer alle Hilfepläne sehen darf, dann:
if (user.CheckForRight(UserRightType.SupportConcept_ViewAllSupportConcepts))
{
// Alle auslaufenden Hilfepläne unabhängig vom betroffenen Mitarbeiter + Zeitraum zur Darstellung hinter den Vornamen
list = MapperFactory.CompactSupportConceptDC_SupportConcept.MapToNewDCs(
DAOFactory.SearchDAO.FindExpiringSupportConcepts(null, DateTime.Now.Date, expiredUntil));
foreach (var item in list)
{
item.Customer.FirstName += " (Zeitraum)";
}
list.AddRange(HilfeplaeneMitAuslaufendemBudget(true, employeeOid, user));
}
// Wenn der angemeldete Nutzer nicht alle Hilfepläne sehen darf, dann Standard-Homeansicht
else
{
list = MapperFactory.CompactSupportConceptDC_SupportConcept.MapToNewDCs(
DAOFactory.SearchDAO.FindExpiringSupportConcepts(employeeOid, DateTime.Now.Date, expiredUntil));
foreach (var item in list)
{
item.Customer.FirstName += " (Zeitraum)";
}
list.AddRange(HilfeplaeneMitAuslaufendemBudget(false, employeeOid, user));
}
}
else
{
list = MapperFactory.CompactSupportConceptDC_SupportConcept.MapToNewDCs(
DAOFactory.SearchDAO.FindExpiringSupportConcepts(employeeOid, DateTime.Now.Date, expiredUntil));
}
return list.Where(s => s.StartDate.HasValue && s.EndDate.HasValue).ToList();
}
private List<CompactSupportConceptDC> HilfeplaeneMitAuslaufendemBudget(bool darfAlleHilfeplaeneSehen, long? employeeOid, ApplicationUser user)
{
List<CompactSupportConceptDC> list = new List<CompactSupportConceptDC>();
if (darfAlleHilfeplaeneSehen)
{
// Alle Hilfepläne mit Restbudget unter Verwaltungsschwellwert unabhängig vom betroffenen Mitarbeiter
//Schwellwert ziehen
string schwellwertAusVerwaltung = UserSettingsUtils.GetSettingValue(AppSettings.GetMandatorEntity().Settings, SettingsKeys.ZeiterfassungsSchwellwert);
//Alle aktiven Hilfepläne holen, die noch nicht in der oberen Liste sind und von denen die CostbearerOids sammeln + Budget zur Darstellung hinter den Vornamen
var allSCs = MapperFactory.CompactSupportConceptDC_SupportConcept.MapToNewDCs(
DAOFactory.GenericDAO.GetAllActive<SupportConcept>()).ToList().Where(sc => !list.Contains(sc));
var cb2scList = new List<long>();
foreach (var sc in allSCs)
{
cb2scList.AddRange(sc.CostBearerRelOids);
sc.Customer.FirstName += " (Budget)";
}
// Analysen der Hilfepläne holen und die Hilfepläne der Liste hinzufügen, bei denen die % des aufgebrauchten Budgets größer oder gleich dem Schwellwert sind
SupportConceptAnalysisCreator scac = new SupportConceptAnalysisCreator();
var analyse = scac.GetSupportConceptAnalysis(cb2scList, null, null, null, null, false);
foreach (var a in analyse)
{
if (a.BERecordedTillNowInPercent >= Convert.ToDecimal(schwellwertAusVerwaltung))
list.Add(allSCs.First(s => s.SupportConceptOid == a.SupportConceptOid));
}
}
else
{
// Alle Hilfepläne mit Restbudget unter Verwaltungsschwellwert unabhängig vom betroffenen Mitarbeiter
// Schwellwert ziehen
string schwellwertAusVerwaltung = UserSettingsUtils.GetSettingValue(AppSettings.GetMandatorEntity().Settings, SettingsKeys.ZeiterfassungsSchwellwert);
//Alle aktiven Hilfepläne holen, die noch nicht in der oberen Liste sind und von denen die CostbearerOids sammeln + Budget zur Darstellung hinter den Vornamen
List<CompactSupportConceptDC> scsFuerBudget = new List<CompactSupportConceptDC>();
if (user.CheckForRight(UserRightType.SupportConcept_ViewMyTeams))
{
scsFuerBudget = MapperFactory.CompactSupportConceptDC_SupportConcept.MapToNewDCs(
DAOFactory.SearchDAO.GetActiveSupportConceptsForEmployee(employeeOid, BeWo.View.Navigation.Filter.CustomerFilterEnum.TeamCustomer));
}
else
{
scsFuerBudget = MapperFactory.CompactSupportConceptDC_SupportConcept.MapToNewDCs(
DAOFactory.SearchDAO.GetActiveSupportConceptsForEmployee(employeeOid, BeWo.View.Navigation.Filter.CustomerFilterEnum.MyCustomer));
}
var cb2scList = new List<long>();
foreach (var sc in scsFuerBudget)
{
cb2scList.AddRange(sc.CostBearerRelOids);
sc.Customer.FirstName += " (Budget)";
}
SupportConceptAnalysisCreator scac = new SupportConceptAnalysisCreator();
var analyse = scac.GetSupportConceptAnalysis(cb2scList, null, null, null, null, false);
foreach (var a in analyse)
{
if (a.BERecordedTillNowInPercent >= Convert.ToDecimal(schwellwertAusVerwaltung))
list.Add(scsFuerBudget.First(s => s.SupportConceptOid == a.SupportConceptOid));
}
}
return list;
}
}
}