using System; using System.Collections.Generic; using System.Linq; using System.ServiceModel; using BeWo.Data; using BeWo.Data.Access; using BeWo.Data.Entities; using BeWo.Service.Core; using BeWo.Service.DCEntityMapper; using BeWo.Service.OwnChat; using BeWo.Service.Plugins; using BeWo.Service.SBD; using BeWo.Service.Security; using BeWo.Service.ServiceContracts; using BeWo.Service.Urlaubsplanung; using BeWo.View.Navigation.Filter; using BS.Shared; using BS.Shared.DataContracts; using BS.Shared.DataContracts.Compact; using BS.Shared.Extensions; using NHibernate; namespace BeWo.Service.ServiceImplementations { [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Single)] public class EmployeeServiceImp : IEmployeeService { public void ArchiveEmployee(long pOid, long pVersion) { try { var e = DAOFactory.GenericDAO.LoadByID(pOid); e.Person.IsActive = ActivationTypeId.Archived; MakeNewEmployeeHistoryEntry(e, StatementType.Archived); ServiceLogic.SetActivationType(pOid, pVersion, ActivationTypeId.Archived); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public void DeactivateAssessmentSheetCategories(List dcs) { try { ServiceLogic.SetActivationType(dcs.ToDictionary(i => i.AssessmentSheetCategoryOid.Value, i => i.AssessmentSheetCategoryVersion.Value), ActivationTypeId.Deleted); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public void DeactivateAssessmentSheetEntries(List dcs) { try { //ServiceLogic.SetActivationType(dcs.ToDictionary(i => i.AssessmentSheetEntryOid.Value, i => i.AssessmentSheetEntryVersion.Value), ActivationTypeId.Deleted); var entries = DAOFactory.GenericDAO.LoadByIDs(dcs.Select(i => i.AssessmentSheetEntryOid.Value)).Where(e => e.SystemEntryID == null); //entries.DoForEach(or => MapperFactory.AssessmentSheetEntryDC_AssessmentSheetEntry.ConcurrencyCheck(pOid2Version[or.Oid.Value], or)); DAOFactory.GenericDAO.Delete(entries); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public void DeactivateAssessmentSheetValues(List dcs) { try { ServiceLogic.SetActivationType(dcs.ToDictionary(i => i.AssessmentSheetValueOid.Value, i => i.AssessmentSheetValueVersion.Value), ActivationTypeId.Deleted); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public void DeactivateEmployee(long pOid, long pVersion) { try { var e = DAOFactory.GenericDAO.LoadByID(pOid); e.Person.IsActive = ActivationTypeId.Deleted; ServiceLogic.SetActivationType(pOid, pVersion, ActivationTypeId.Deleted); MakeNewEmployeeHistoryEntry(e, StatementType.Delete); DeleteEmployeeCustomerRelationForEmployee(pOid); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public void DeleteEmployeeCustomerRelationForEmployee(long employeeOid) { var emp = DAOFactory.GenericDAO.LoadByID(employeeOid); foreach (var e2c in emp.Employee2CustomerList) { DAOFactory.GenericDAO.Delete(e2c); } } public void DeactivateEmployees(Dictionary pOid2Version) { try { ServiceLogic.SetActivationType(pOid2Version, ActivationTypeId.Deleted); foreach (var key in pOid2Version.Keys) { DeleteEmployeeCustomerRelationForEmployee(key); } } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public void DeactivateNewsItems(List dcs) { try { ServiceLogic.SetActivationType(dcs.ToDictionary(i => i.NewsItemOid.Value, i => i.NewsItemVersion.Value), ActivationTypeId.Deleted); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public void DeactivateTeam(long pOid, long pVersion) { try { ServiceLogic.SetActivationType(pOid, pVersion, ActivationTypeId.Deleted); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public void DeactivateTeams(Dictionary pOid2Version) { try { ServiceLogic.SetActivationType(pOid2Version, ActivationTypeId.Deleted); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public void DeleteEmployee(long pOid, long pVersion) { try { this.DeleteEmployees(new Dictionary { { pOid, pVersion } }); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public void DeleteEmployeeCustomerRelation(long pOid, long pVersion) { try { this.DeleteEmployeeCustomerRelations(new Dictionary { { pOid, pVersion } }); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public void DeleteEmployeeCustomerRelations(Dictionary pOid2Version) { try { var lOriginals = DAOFactory.GenericDAO.LoadByIDs(pOid2Version.Select(e => e.Key)); lOriginals.DoForEach(or => MapperFactory.EmployeeCustomerRelDC_Employee2CustomerMapper.ConcurrencyCheck(pOid2Version[or.Oid.Value], or)); DAOFactory.GenericDAO.Delete(lOriginals); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public void DeleteEmployees(Dictionary pOid2Version) { try { pOid2Version.Keys.DoForEach(SettingsLogic.RemoveFromAllHistories); var lOriginals = DAOFactory.GenericDAO.LoadByIDs(pOid2Version.Select(e => e.Key)); lOriginals.DoForEach(or => MapperFactory.EmployeeDC_Employee.ConcurrencyCheck(pOid2Version[or.Oid.Value], or)); foreach (Employee e in lOriginals) { MakeNewEmployeeHistoryEntry(e, StatementType.Delete); } DAOFactory.GenericDAO.Delete(lOriginals); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List FindEmployee(string pFirstName, string pLastName, string pPersonnelNumber) { try { return MapperFactory.CompactEmployeeDC_Employee.MapToNewDCs(DAOFactory.SearchDAO.FindEmployee(pFirstName, pLastName, pPersonnelNumber)); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List FindTeams(string pTeamName, string pLeaderFirstName, string pLeaderLastName) { try { return MapperFactory.CompactTeamDC_Team.MapToNewDCs(DAOFactory.SearchDAO.FindTeams(pTeamName, pLeaderFirstName, pLeaderLastName)); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetAllActiveAndArchivedEmployeesCompact() { try { var s = PluginLoader.FindClass(); return s.GetAllActiveAndArchivedEmployeesCompact(); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetAllActiveEmployeesCompact() { try { var s = PluginLoader.FindClass(); return s.GetAllActiveEmployeesCompact(); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetAllAuthorizedCompactEmployees() { try { try { var s = PluginLoader.FindClass(); return s.GetAllAuthorizedCompactEmployees(); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetAllTeamMember(CompactEmployeeDC employee) { try { Dictionary inTeamDict = new Dictionary(); List teamMember = new List(); var teams = DAOFactory.GenericDAO.GetAllActive(); foreach (var team in teams) { bool contained = (team.Leader != null && team.Leader.Oid == employee.EmployeeOid); if (!contained) { foreach (var e in team.MemberList) { if (e.Oid.Value.Equals(employee.EmployeeOid)) contained = true; } } if (contained) { foreach (var e in team.MemberList) { if (!inTeamDict.ContainsKey(e.Oid.Value)) { teamMember.Add(e); inTeamDict.Add(e.Oid.Value, true); } } } } var dcList = MapperFactory.CompactEmployeeDC_Employee.MapToNewDCs(teamMember); if (!inTeamDict.ContainsKey(employee.EmployeeOid)) dcList.Add(employee); return dcList; } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetAllEmploymentTypes() { try { return MapperFactory.EmploymentTypeDC_EmploymentType.MapToNewDCs(DAOFactory.GenericDAO.GetAllActive()); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public EmploymentTypeDC GetEmploymentType(long oid) { try { return MapperFactory.EmploymentTypeDC_EmploymentType.MapToNewDC(DAOFactory.GenericDAO.GetByID(oid)); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List InsertNewEmploymentTypes(List pEntries) { try { var lEntities = MapperFactory.EmploymentTypeDC_EmploymentType.MapToNewEntities(pEntries); DAOFactory.GenericDAO.Insert(lEntities); return lEntities.Select(e => e.Oid.Value).ToList(); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public void UpdateEmploymentTypes(List pEntries) { try { var lOriginals = DAOFactory.GenericDAO.LoadByIDs(pEntries.Select(en => en.EmploymentTypeOid.Value)); MapperFactory.EmploymentTypeDC_EmploymentType.MergeWithEntitys(pEntries, lOriginals); DAOFactory.GenericDAO.Update(lOriginals); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public void DeactivateEmploymentTypes(Dictionary pOid2Version) { try { ServiceLogic.SetActivationType(pOid2Version, ActivationTypeId.Deleted); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetAllAssessmentSheetCategories() { try { return MapperFactory.AssessmentSheetCategoryDC_AssessmentSheetCategory.MapToNewDCs(DAOFactory.GenericDAO.GetAllActive().Where(cat => !cat.ScopeType.HasValue || cat.ScopeType.Value == ScopeTypeId.Global)); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetAllAssessmentSheetEntries() { try { return MapperFactory.AssessmentSheetEntryDC_AssessmentSheetEntry.MapToNewDCs(DAOFactory.GenericDAO.GetAllActive()); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetAllAssessmentSheetValues() { try { return MapperFactory.AssessmentSheetValueDC_AssessmentSheetValue.MapToNewDCs(DAOFactory.GenericDAO.GetAllActive()); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetAllEmployees() { try { return DAOFactory.GenericDAO.GetAll().Select(emp => MapperFactory.EmployeeDC_Employee.MapToNewDC(emp)).ToList(); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetAllNewsItems() { try { return MapperFactory.NewsItemDC_NewsItem.MapToNewDCs(DAOFactory.GenericDAO.GetAllActive()); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetAllTeamsCompact() { try { var s = PluginLoader.FindClass(); return s.GetAllTeamsCompact(); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetAssessmentSheetEntriesForCustomer(long customerOid, DateTime startDt, DateTime endDt) { try { return MapperFactory.AssessmentSheetEntryDC_AssessmentSheetEntry.MapToNewDCs(DAOFactory.SearchDAO.GetAssessmentSheetEntriesForCustomer(customerOid, startDt, endDt)); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public EmployeeDC GetEmployeeWithPersonOid(long pPersonOid) { try { return MapperFactory.EmployeeDC_Employee.MapToNewDC(DAOFactory.SearchDAO.FindEmployeeWithPersonOid(pPersonOid)); } catch (Exception e) { throw new FaultException(new BeWoFault(String.Format("Mitarbeiter mit Id {0} wurde nicht gefunden!", pPersonOid))); } } public List GetLastOpenedEmployees() { try { return MapperFactory.CompactEmployeeDC_Employee.MapToNewDCs(SettingsLogic.GetLastOpened()); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetLastOpenedTeams() { try { return MapperFactory.CompactTeamDC_Team.MapToNewDCs(SettingsLogic.GetLastOpened()); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetPublishedNewsItems() { try { return this.GetAllNewsItems().Where(i => i.PublishDate.HasValue && i.PublishDate.Value.Date <= DateTime.Now).ToList(); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetPublishedNewsItemsForEmployee(long employeeOid, bool fetchTeamNews) { try { IList teamOids = new List(); var allItems = DAOFactory.GenericDAO.GetAllActive(); if (fetchTeamNews) { var teams = DAOFactory.SearchDAO.FindTeamsOfEmployee(employeeOid); var leadingTeams = DAOFactory.SearchDAO.FindLeadingTeams(employeeOid); if (teams != null) { teamOids = teams.Select(t => t.Oid.Value).ToList(); } if (leadingTeams != null) { teamOids.AddRange(leadingTeams.Select(t => t.Oid.Value)); } } teamOids = teamOids.Distinct().ToList(); var items = allItems.Where( i => { if (!i.TeamOid.HasValue) { return i.PublishDate.HasValue && i.PublishDate.Value.Date <= DateTime.Now; } return teamOids.Contains(i.TeamOid.Value); }).ToList(); var dcList = MapperFactory.NewsItemDC_NewsItem.MapToNewDCs(items); List newDcList = new List(); if (fetchTeamNews) { foreach (var teamOid in teamOids) { if (dcList.Count(i => i.Team != null && i.Team.TeamOid == teamOid) == 0) { Team t = DAOFactory.GenericDAO.LoadByID(teamOid); NewsItemDC newDc = new NewsItemDC(); newDc.Team = new CompactTeamDC(); newDc.Team.Name = t.Name; newDc.Team.TeamOid = t.Oid.Value; newDc.Team.TeamVersion = t.Version.Value; newDcList.Add(newDc); } } } dcList.AddRange(newDcList); return dcList.OrderByDescending(i => i.PublishDate).ToList(); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public void DeleteNewsItem(long pOid, long pVersion) { try { var original = DAOFactory.GenericDAO.LoadByID(pOid); MapperFactory.NewsItemDC_NewsItem.ConcurrencyCheck(pVersion, original); DAOFactory.GenericDAO.Delete(original); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public long InsertNewNewsItem(NewsItemDC dc) { return InsertNewNewsItems(new List{dc}).FirstOrDefault(); } public long UpdateNewsItem(NewsItemDC dc) { try { var lOrigial = DAOFactory.GenericDAO.LoadByID(dc.NewsItemOid.Value); MapperFactory.NewsItemDC_NewsItem.MergeWithEntity(dc, lOrigial); DAOFactory.GenericDAO.Update(lOrigial); return lOrigial.Oid.Value; } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public void InsertEmployeeCustomerRelation(CustomerEmployeeRelationDC pRelationDC) { try { DAOFactory.GenericDAO.Insert(MapperFactory.EmployeeCustomerRelDC_Employee2CustomerMapper.MapToNewEntity(pRelationDC)); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List InsertNewAssessmentSheetCategories(List dcs) { try { var newAssessmentSheetCategories = MapperFactory.AssessmentSheetCategoryDC_AssessmentSheetCategory.MapToNewEntities(dcs); DAOFactory.GenericDAO.Insert(newAssessmentSheetCategories); return newAssessmentSheetCategories.Select(i => i.Oid.Value).ToList(); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List InsertNewAssessmentSheetEntries(List dcs) { try { var newAssessmentSheetEntries = MapperFactory.AssessmentSheetEntryDC_AssessmentSheetEntry.MapToNewEntities(dcs); DAOFactory.GenericDAO.Insert(newAssessmentSheetEntries); return newAssessmentSheetEntries.Select(i => i.Oid.Value).ToList(); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List InsertNewAssessmentSheetValues(List dcs) { try { var newAssessmentSheetValues = MapperFactory.AssessmentSheetValueDC_AssessmentSheetValue.MapToNewEntities(dcs); DAOFactory.GenericDAO.Insert(newAssessmentSheetValues); return newAssessmentSheetValues.Select(i => i.Oid.Value).ToList(); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public long InsertNewEmployee(EmployeeDC pEmployeeDC) { try { var li = SecurityUtils.GetLicenseInfo(); if (li.EmployeeCount >= li.MaxEmployeeCount) { return -1; } var es = PluginLoader.FindClass(); var id = es.InsertNewEmployee(pEmployeeDC); var temp = DAOFactory.GenericDAO.LoadByID(id); MakeNewEmployeeHistoryEntry(temp, StatementType.Insert); OwnChatHelper.StartOwnChatSync(); return id; } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List InsertNewNewsItems(List dcs) { try { var newNewsItems = MapperFactory.NewsItemDC_NewsItem.MapToNewEntities(dcs); DAOFactory.GenericDAO.Insert(newNewsItems); return newNewsItems.Select(i => i.Oid.Value).ToList(); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public long InsertNewTeam(TeamDC pTeam) { try { Team lTeam = MapperFactory.TeamDC_Team.MapToNewEntity(pTeam); DAOFactory.GenericDAO.Insert(lTeam); OwnChatHelper.StartOwnChatSync(); return lTeam.Oid.Value; } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public TeamDC LoadTeam(long pTeamOid) { try { SettingsLogic.AddToUsersHistory(pTeamOid); return MapperFactory.TeamDC_Team.MapToNewDC(DAOFactory.GenericDAO.LoadByID(pTeamOid)); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public CompactTeamDC LoadCompactTeam(long pTeamOid) { try { SettingsLogic.AddToUsersHistory(pTeamOid); return MapperFactory.CompactTeamDC_Team.MapToNewDC(DAOFactory.GenericDAO.LoadByID(pTeamOid)); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public EmployeeDC LoadLoggedOnEmployee(long pEmployeeOid) { try { return MapperFactory.EmployeeDC_Employee.MapToNewDC(DAOFactory.GenericDAO.LoadByID(pEmployeeOid)); } catch (Exception e) { throw new FaultException(new BeWoFault(e), e.Message); } } public EmployeeDC LoadEmployee(long pEmployeeOid) { try { var es = PluginLoader.FindClass(); return es.LoadEmployee(pEmployeeOid); } catch (Exception e) { throw new FaultException(new BeWoFault(e), e.Message); } } public CompactEmployeeDC LoadCompactEmployee(long pEmployeeOid) { try { SettingsLogic.AddToUsersHistory(pEmployeeOid); return MapperFactory.CompactEmployeeDC_Employee.MapToNewDC(DAOFactory.GenericDAO.LoadByID(pEmployeeOid)); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public void UpdateAssessmentSheetCategories(List dcs) { try { var originals = DAOFactory.GenericDAO.LoadByIDs(dcs.Select(i => i.AssessmentSheetCategoryOid.Value)); MapperFactory.AssessmentSheetCategoryDC_AssessmentSheetCategory.MergeWithEntitys(dcs, originals); DAOFactory.GenericDAO.Update(originals); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public void UpdateAssessmentSheetEntries(List dcs) { try { var originals = DAOFactory.GenericDAO.LoadByIDs(dcs.Select(i => i.AssessmentSheetEntryOid.Value)); var aSCategories = DAOFactory.GenericDAO.GetAll().Where(c => c.SystemEntryID.Equals(SystemEntryID.AdditionalServiceAssessmentSheet)); List removeList = new List(); foreach (var ase in originals) { if (ase.SystemEntryID.Equals(SystemEntryID.AdditionalServiceAssessmentSheet) && aSCategories.Count(c => c.Description.Equals(ase.AssessmentSheetCategory.Description)) > 0) { removeList.Add(ase); } } foreach (var ase in removeList) { originals.Remove(ase); } if (originals.Count > 0) { MapperFactory.AssessmentSheetEntryDC_AssessmentSheetEntry.MergeWithEntitys(dcs, originals); if (originals.Count > 0) DAOFactory.GenericDAO.Update(originals); } } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public void UpdateAssessmentSheetValues(List dcs) { try { var originals = DAOFactory.GenericDAO.LoadByIDs(dcs.Select(i => i.AssessmentSheetValueOid.Value)); MapperFactory.AssessmentSheetValueDC_AssessmentSheetValue.MergeWithEntitys(dcs, originals); DAOFactory.GenericDAO.Update(originals); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public long UpdateEmployee(EmployeeDC pEmployeeDC) { try { var lOriginal = DAOFactory.GenericDAO.LoadByID(pEmployeeDC.EmployeeOid.Value); MapperFactory.EmployeeDC_Employee.MergeWithEntity(pEmployeeDC, lOriginal); MakeNewEmployeeHistoryEntry(lOriginal, StatementType.Update); DAOFactory.GenericDAO.Update(lOriginal); OwnChatHelper.StartOwnChatSync(); return lOriginal.Oid.Value; } catch (StaleObjectStateException) { throw new FaultException(new BeWoFault("Wurde in der Zwischenzeit geändert", BeWoFaultType.Concurrency)); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public void UpdateNewsItems(List dcs) { try { var originals = DAOFactory.GenericDAO.LoadByIDs(dcs.Select(i => i.NewsItemOid.Value)); MapperFactory.NewsItemDC_NewsItem.MergeWithEntitys(dcs, originals); DAOFactory.GenericDAO.Update(originals); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public long UpdateTeam(TeamDC pTeam) { try { Team lOriginal = DAOFactory.GenericDAO.LoadByID(pTeam.TeamOid.Value); MapperFactory.TeamDC_Team.MergeWithEntity(pTeam, lOriginal); DAOFactory.GenericDAO.Update(lOriginal); OwnChatHelper.StartOwnChatSync(); return lOriginal.Oid.Value; } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetAllEmployeeAbsenceTimes() { try { return MapperFactory.AbsenceTimeDC_AbsenceTime.MapToNewDCs(DAOFactory.SearchDAO.FindAbsenceTimes(true, false)); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetAllEmployeeAbsenceTimesForMonth(int year, int month) { try { var startdate = new DateTime(year, month, 1); var enddate = startdate.AddMonths(1).AddTicks(-1); var absencetimes = DAOFactory.SearchDAO.FindAbsenceTimes(startdate, enddate); return MapperFactory.AbsenceTimeDC_AbsenceTime.MapToNewDCs(absencetimes); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetMultipleEmployeeAbsenceTimesForMonth(int year, int month, List empOids) { try { var startdate = new DateTime(year, month, 1); var enddate = startdate.AddMonths(1).AddTicks(-1); List absenceTimes = new List(); foreach (var oid in empOids) { absenceTimes.AddRange(DAOFactory.SearchDAO.FindAbsenceTimesForEmployee(startdate, enddate, oid)); } return MapperFactory.AbsenceTimeDC_AbsenceTime.MapToNewDCs(absenceTimes); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetAllEmployeeAbsenceTimesForYear(int year) { try { var startdate = new DateTime(year, 1, 1); var enddate = startdate.AddYears(1).AddTicks(-1); var absencetimes = DAOFactory.SearchDAO.FindAbsenceTimes(startdate, enddate); return MapperFactory.AbsenceTimeDC_AbsenceTime.MapToNewDCs(absencetimes); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public void DeactivateGroupOfPeople(long pOid, long pVersion) { try { ServiceLogic.SetActivationType(pOid, pVersion, ActivationTypeId.Deleted); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public long InsertNewGroupOfPeople(GroupOfPeopleDC pGroupOfPeople) { try { GroupOfPeople obj = MapperFactory.GroupOfPeopleDC_GroupOfPeople.MapToNewEntity(pGroupOfPeople); DAOFactory.GenericDAO.Insert(obj); return obj.Oid.Value; } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public GroupOfPeopleDC LoadGroupOfPeople(long pOid) { try { return MapperFactory.GroupOfPeopleDC_GroupOfPeople.MapToNewDC(DAOFactory.GenericDAO.LoadByID(pOid)); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public long UpdateGroupOfPeople(GroupOfPeopleDC pGroupOfPeople) { try { GroupOfPeople lOriginal = DAOFactory.GenericDAO.LoadByID(pGroupOfPeople.GroupOfPeopleOid.Value); MapperFactory.GroupOfPeopleDC_GroupOfPeople.MergeWithEntity(pGroupOfPeople, lOriginal); DAOFactory.GenericDAO.Update(lOriginal); return lOriginal.Oid.Value; } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetAllGroupsCompact(long? employeeOid) { try { var groups = GetAllGroupsContainingMemberOfEmployee(employeeOid); return MapperFactory.CompactGroupOfPeopleDC_GroupOfPeople.MapToNewDCs(groups); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetAllGroups(long? employeeOid) { try { var groups = GetAllGroupsContainingMemberOfEmployee(employeeOid); return MapperFactory.GroupOfPeopleDC_GroupOfPeople.MapToNewDCs(groups.OrderBy(g => g.Name)); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } private IEnumerable GetAllGroupsContainingMemberOfEmployee(long? employeeOid) { var allgroups = DAOFactory.GenericDAO.GetAllActive(); if (!employeeOid.HasValue) return allgroups; var groups = new List(); Dictionary processedGroups = new Dictionary(); Employee emp = DAOFactory.GenericDAO.LoadByID(employeeOid.Value); ApplicationUser loggedInUser = null; if (LoggedInUserOperationContextExt.Current != null && LoggedInUserOperationContextExt.Current.User != null) { loggedInUser = LoggedInUserOperationContextExt.Current.User; } else { loggedInUser = SessionFacade.LoggedInUser; } bool nurEigene = true; if (loggedInUser != null) { //Alle if (Utils.UserHasRight(loggedInUser, UserRightType.SupportConcept_ViewAllSupportConcepts)) { nurEigene = false; } //Vom Team else if (Utils.UserHasRight(loggedInUser, UserRightType.SupportConcept_ViewMyTeams)) { //? } //Eigene else if (Utils.UserHasRight(loggedInUser, UserRightType.SupportConceptView_View)) { nurEigene = true; } } foreach (var groupOfPeople in allgroups) { if (!processedGroups.ContainsKey(groupOfPeople.Oid.Value)) { processedGroups.Add(groupOfPeople.Oid.Value, true); if (nurEigene) { if (employeeOid.Value == groupOfPeople.CreatedByEmployeeOid || ContainsMemberOfEmployee(groupOfPeople, emp)) groups.Add(groupOfPeople); } else { groups.Add(groupOfPeople); } } } return groups; } private bool ContainsMemberOfEmployee(GroupOfPeople groupOfPeople, Employee emp) { return groupOfPeople.CostBearer2SupportConceptList.Any(c2s => emp.Employee2CustomerList.Any(e2c => e2c.CustomerOid == c2s.SupportConcept.Customer.Oid)); } public bool IsAssessmentSheetEntryBelongingToAS(long assessmentSheetCategoryOid) { var cat = DAOFactory.GenericDAO.GetByID(assessmentSheetCategoryOid); return cat.SystemEntryID.Equals(SystemEntryID.AdditionalServiceAssessmentSheet); } public bool IsAssessmentSheetCategoryBelongingToAS(long assessmentSheetCategoryOid) { try { var category = DAOFactory.GenericDAO.GetByID(assessmentSheetCategoryOid); return category.SystemEntryID.Equals(SystemEntryID.AdditionalServiceAssessmentSheet); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetAllOvertimesFromEmployee(long employeeOid) { try { var allOvertimes = DAOFactory.GenericDAO.GetAll(); var overtimes = allOvertimes.Where(o => o.EmployeeOid.Equals(employeeOid)); return MapperFactory.OvertimeDC_Overtime.MapToNewDCs(overtimes); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetAllOvertimes() { try { var allOvertimes = DAOFactory.GenericDAO.GetAll(); return MapperFactory.OvertimeDC_Overtime.MapToNewDCs(allOvertimes); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public void DeleteOvertimes(Dictionary pOid2Version) { try { pOid2Version.Keys.DoForEach(SettingsLogic.RemoveFromAllHistories); var lOriginals = DAOFactory.GenericDAO.LoadByIDs(pOid2Version.Select(e => e.Key)); lOriginals.DoForEach(or => MapperFactory.OvertimeDC_Overtime.ConcurrencyCheck(pOid2Version[or.Oid.Value], or)); DAOFactory.GenericDAO.Delete(lOriginals); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List InsertOvertimes(List pOvertimes) { try { var newOvertimes = MapperFactory.OvertimeDC_Overtime.MapToNewEntities(pOvertimes); DAOFactory.GenericDAO.Insert(newOvertimes); return newOvertimes.Select(i => i.Oid.Value).ToList(); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List UpdateOvertimes(List pOvertimes) { try { var pOids = (from motherfucker in pOvertimes where motherfucker.OvertimeOid.HasValue select motherfucker.OvertimeOid.Value).ToList(); var lOriginals = DAOFactory.GenericDAO.LoadByIDs(pOids); MapperFactory.OvertimeDC_Overtime.MergeWithEntitys(pOvertimes, lOriginals); DAOFactory.GenericDAO.Update(lOriginals); return (from mumu in lOriginals where mumu.Oid.HasValue select mumu.Oid.Value).ToList(); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetAllAuszahlungsarten() { try { var alleAuszahlungsarten = DAOFactory.GenericDAO.GetAll(); return MapperFactory.AuszahlungsartDC_Auszahlungsart.MapToNewDCs(alleAuszahlungsarten); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List InsertAuszahlungsarten(IEnumerable pAuszahlungsarten) { try { var neueAuszahlungsarten = MapperFactory.AuszahlungsartDC_Auszahlungsart.MapToNewEntities(pAuszahlungsarten); DAOFactory.GenericDAO.Insert(neueAuszahlungsarten); return neueAuszahlungsarten.Select(i => i.Oid.Value).ToList(); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List UpdateAuszahlungsarten(List pAuszahlungsarten) { try { var pOids = (from motherfucker in pAuszahlungsarten where motherfucker.AuszahlungsartOid.HasValue select motherfucker.AuszahlungsartOid.Value).ToList(); var lOriginals = DAOFactory.GenericDAO.LoadByIDs(pOids); MapperFactory.AuszahlungsartDC_Auszahlungsart.MergeWithEntitys(pAuszahlungsarten, lOriginals); DAOFactory.GenericDAO.Update(lOriginals); return (from mumu in lOriginals where mumu.Oid.HasValue select mumu.Oid.Value).ToList(); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public void DeleteAuszahlungsarten(Dictionary pOid2Version) { try { pOid2Version.Keys.DoForEach(SettingsLogic.RemoveFromAllHistories); var lOriginals = DAOFactory.GenericDAO.LoadByIDs(pOid2Version.Select(e => e.Key)); lOriginals.DoForEach(or => MapperFactory.AuszahlungsartDC_Auszahlungsart.ConcurrencyCheck(pOid2Version[or.Oid.Value], or)); DAOFactory.GenericDAO.Delete(lOriginals); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetTeamOidsByEmployee(long pEmployeeOid) { try { var liste = DAOFactory.SearchDAO.FindTeamsOfEmployee(pEmployeeOid); return MapperFactory.CompactTeamDC_Team.MapToNewDCs(liste); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetAllChatActiveEmployeesCompact() { try { var employees = DAOFactory.SearchDAO.FindAllChatActiveEmployees(); return MapperFactory.CompactEmployeeDC_Employee.MapToNewDCs(employees); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetAllEmployeeAppCodes(long pEmployeeOid) { try { var liste = DAOFactory.SearchDAO.FindAllEmployeeAppCodes(pEmployeeOid); return MapperFactory.EmployeeAPPCodeDC_EmployeeAPPCode.MapToNewDCs(liste); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public Byte[] GetEmployeeImage(long employeeOid) { try { var employee = DAOFactory.GenericDAO.GetByID(employeeOid); return employee.Person.Images != null && employee.Person.Images.Count > 0 ? employee.Person.Images[0].Original : null; } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public Byte[] GetEmployeeThumbnail(long employeeOid) { try { var employee = DAOFactory.GenericDAO.GetByID(employeeOid); return employee.Person.Images != null && employee.Person.Images.Count > 0 ? employee.Person.Images[0].SmallThumbnail : null; } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public CompactEmployeeDC GetActiveCompactEmployeeWithOid(long employeeOid) { try { var employee = DAOFactory.GenericDAO.GetByID(employeeOid); return MapperFactory.CompactEmployeeDC_Employee.MapToNewDC(employee); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public void InsertNewArbeitsZeit(ArbeitszeitDC arbeitszeit, ArbeitszeitEintragDC arbeitszeitEintrag) { try { var x = MapperFactory.ArbeitszeitDC_Arbeitszeit.MapToNewEntity(arbeitszeit); DAOFactory.GenericDAO.Insert(x); arbeitszeitEintrag.ArbeitszeitOid = x.Oid; var y = MapperFactory.ArbeitszeitEintragDC_ArbeitszeitEintrag.MapToNewEntity(arbeitszeitEintrag); DAOFactory.GenericDAO.Insert(y); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public ArbeitszeitDC UpdateArbeitszeit(ArbeitszeitDC pArbeitszeit) { try { var lOriginal = DAOFactory.GenericDAO.LoadByID(pArbeitszeit.ArbeitszeitOid.Value); MapperFactory.ArbeitszeitDC_Arbeitszeit.MergeWithEntity(pArbeitszeit, lOriginal); DAOFactory.GenericDAO.Update(lOriginal); return MapperFactory.ArbeitszeitDC_Arbeitszeit.MapToNewDC(lOriginal); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public void DeleteArbeitszeitEintrag(long arbeistzeitEintragOid) { try { var lOriginal = DAOFactory.GenericDAO.LoadByID(arbeistzeitEintragOid); DAOFactory.GenericDAO.Delete(lOriginal); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetAllActiveVertreterEmployeesCompact(long? customerOid, DateTime date) { try { var vertretungsManager = new VertretungsManager(); var vertretungsListe = vertretungsManager.CreateVertretungsListe(date, date); // EmployeeOids der Mitarbeiter, die einen abwesenden Mitarbeiter vertreten var ausgewaehlteVertreter = vertretungsListe.Where(vertretungsItem => vertretungsItem.VertretungsStatus != VertretungsStatus.KlientKrank && vertretungsItem.Vertreter != null && vertretungsItem.Vertreter.ActivationType == ActivationTypeId.Active).Select(item => item.Vertreter.EmployeeOid); // EmployeeOids der Betreuer abwesender Klienten, die nicht schon einen anderen Klienten vertreten var employeeOids = vertretungsListe.Where(vertretungsItem => vertretungsItem.Employee != null && vertretungsItem.VertretungsStatus == VertretungsStatus.KlientKrank && !ausgewaehlteVertreter.Contains(vertretungsItem.Employee.EmployeeOid)).Select(s => s.Employee.EmployeeOid); // EmployeeOids von abwesenden Mitarbeitern var abwesenendeEmployeeOids = vertretungsListe.Where(vertretungsItem => vertretungsItem.VertretungsStatus != VertretungsStatus.KlientKrank && vertretungsItem.Employee != null).Select(item => item.Employee.EmployeeOid); employeeOids = employeeOids.Where(e => !abwesenendeEmployeeOids.Contains(e)); var list = MapperFactory.CompactVertreterEmployeeDC_VertreterEmployee.MapToNewDCs(DAOFactory.GenericDAO.GetActiveByIDs(employeeOids)); //Setze Betreuungszeiten foreach (var vertreter in list) { foreach (var item in vertretungsListe) { if (item.Employee != null && item.Employee.EmployeeOid == vertreter.EmployeeOid) { //if (vertreter.Arbeitszeit == null) //{ // vertreter.Arbeitszeit = new List(); //} //if (vertreter.Arbeitszeit.Count == 0) //{ // vertreter.Arbeitszeit.Add(new ArbeitszeitDC // { // Eintraege = new List() // }); //} //vertreter.Arbeitszeit[0].Eintraege.AddRange(item.Arbeitszeiten); vertreter.Arbeitszeit = new List(); vertreter.Arbeitszeit.Add( new ArbeitszeitDC { Eintraege = item.Arbeitszeiten.ToList() }); } } } return list; } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List LoadEmployeeTokenRelationsByOid(IEnumerable pOids) { try { var customerTokenRels = DAOFactory.GenericDAO.LoadByIDs(pOids); return MapperFactory.EmployeeTokenRelationDC_Employee2Token.MapToNewDCs(customerTokenRels); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public EmployeeDC GetEmployeeByID(long employeeOid) { try { var employee = DAOFactory.GenericDAO.GetByID(employeeOid); return MapperFactory.EmployeeDC_Employee.MapToNewDC(employee); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public void CreateOrUpdateChatBewoMessageSync(long? eOid, string text) { try { var chatMessageSync = DAOFactory.SearchDAO.FindEmployeeChatBewoMessageSync(eOid.Value); int count = chatMessageSync.Count(); if(count > 0) { foreach (var item in chatMessageSync) { item.MessageSyncText = text; } DAOFactory.GenericDAO.Update(chatMessageSync); } else { ChatBewoMessageSyncDC cms = new ChatBewoMessageSyncDC(); cms.EmployeeOid = eOid; cms.MessageSyncText = text; var x = MapperFactory.ChatBewoMessageSyncDC_ChatBewoMessageSync.MapToNewEntity(cms); DAOFactory.GenericDAO.Insert(x); } } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public ChatBewoMessageSyncDC GetChatBewoMessageSync(long? eOid) { try { var chatMessageSync = DAOFactory.GenericDAO.GetAllActive(); ChatBewoMessageSync cms = null; foreach (var item in chatMessageSync) { if (eOid == item.EmployeeOid) { cms = item; } } if (cms != null) { var x = MapperFactory.ChatBewoMessageSyncDC_ChatBewoMessageSync.MapToNewDC(cms); return x; } return null; } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public void ReactivateEmployee(long pOid, long pVersion) { try { var e = DAOFactory.GenericDAO.LoadByID(pOid); MakeNewEmployeeHistoryEntry(e, StatementType.Reactivate); ServiceLogic.SetActivationType(pOid, pVersion, ActivationTypeId.Active); } catch(Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetAllCompactEmployees() { try { var s = PluginLoader.FindClass(); return s.GetAllCompactEmployees(); } catch(Exception e) { throw Utils.CreateBeWoFaultException(e); } } public void MakeNewEmployeeHistoryEntry(Employee employee, StatementType statementType) { try { var employeeHistory = new EmployeeHistory { ChangeType = statementType, Employee_Aggressiv = employee.Aggressiv, //Employee_ApplicationUserOid, //Employee_CancellationPeriod, Employee_EmployeeColor = employee.EmployeeColor, //Employee_EntryDate, Employee_HealthInsurance = employee.HealthInsurance, //Employee_HourlyRate, Employee_Hygienebelehrung = employee.Hygienebelehrung, Employee_InsTs = employee.InsTs, Employee_InsuranceNumber = employee.InsuranceNumber, Employee_InsUser = employee.InsUser, Employee_IsActive = employee.IsActive, Employee_IsQualified = employee.IsQualified, //Employee_leavedays, Employee_Notice = employee.Notice, Employee_Notice2 = employee.Notice2, Employee_Oid = employee.Oid, Employee_PersonnelNumber = employee.PersonnelNumber, //Employee_PersonOid, Employee_Pflege = employee.Pflege, //Employee_ProbationPeriod, Employee_Schutzstufe = employee.Schutzstufe, //Employee_Sequence, Employee_SystemEntryID = employee.SystemEntryID, Employee_TaxNumber = employee.TaxNumber, Employee_Text1 = employee.Text1, Employee_Text2 = employee.Text2, Employee_Text3 = employee.Text3, Employee_Text4 = employee.Text4, Employee_Text5 = employee.Text5, Employee_Tid = employee.Tid, Employee_Toilettengang = employee.Toilettengang, Employee_UdpUser = employee.UdpUser, Employee_Version = employee.Version, //Employee_weeklyfls = employee, //Employee_weeklytotalhours, }; CustomerServiceImp.MakeNewPersonHistoryEntry(employee.Person, statementType); MakeNewContractHistoryEntry(employee, statementType); DAOFactory.GenericDAO.Insert(employeeHistory); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List LoadTeamsRelatedCustomerOids(long employeeOid) { try { return DAOFactory.SearchDAO.FindTeamRelatedCustomerOids(employeeOid); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetAllActiveEmployees() { try { var employees = DAOFactory.GenericDAO.GetAllActive(); return MapperFactory.EmployeeDC_Employee.MapToNewDCs(employees); } catch(Exception exception) { throw Utils.CreateBeWoFaultException(exception); } } /// /// Lädt die aktiven CompactCustomerDCs für einen Mitarbeiter mit Rücksichtnahme auf dessen Rechte. /// /// Oid des Mitarbeiters für den die CompactCustomerDCs geladen werden sollen /// Eine Liste mit CompactCustomerDCs public List GetActiveCompactCustomersForEmployee(long? employeeOid) { try { var customers = DAOFactory.SearchDAO.GetAllCustomersForEmployee(employeeOid); return MapperFactory.CompactCustomerDC_Customer.MapToNewDCs(customers); } catch(Exception exception) { throw Utils.CreateBeWoFaultException(exception); } } /// /// Lädt die aktiven CompactEmployeeDCs für einen Mitarbeiter mit Rücksichtnahme auf dessen Rechte. /// /// Oid des Mitarbeiters für den die CompactEmployeeDCs geladen werden sollen /// Eine Liste mit CompactEmployeeDCs public List GetActiveCompactEmployeesForEmployee(long employeeOid) { try { var employees = DAOFactory.SearchDAO.GetAllActiveEmployeesForEmployee(employeeOid); return MapperFactory.CompactEmployeeDC_Employee.MapToNewDCs(employees); } catch(Exception exception) { throw Utils.CreateBeWoFaultException(exception); } } /// /// Lädt die Oids der Klienten der Teams und deren Mitgliedern und Anführern. /// /// Mitarbeiter dessen Teams durchsucht werden sollen. /// Die Oid eines spezifischen Teams, das durchsucht werden soll. Ist die Oid null, werden alle mit dem angegebenen Mitarbeiter verknüpften Teams durchsucht. /// public List GetTeamRelatedCustomerOids(long employeeOid, long? teamOid) { try { var result = new List(); var teams = new List(); var teamOids = teams.Where(team => team.Oid.HasValue).Select(team => team.Oid.Value); if(teamOid.HasValue) { teams.Add(DAOFactory.GenericDAO.LoadByID(teamOid.Value)); } else { teams.AddRange(DAOFactory.SearchDAO.FindLeadingTeams(employeeOid)); teams.AddRange(DAOFactory.SearchDAO.FindTeamsOfEmployee(employeeOid)); } teams.DoForEach(team => { team.MemberList.Where(member => member.Oid.HasValue && member.Oid != employeeOid).DoForEach(member => { // Nur, wo der Klient auch vom Team betreut wird result.AddRangeIfElementsNotIn( member.Employee2CustomerList.Where( employee2Customer => employee2Customer.CustomerOid.HasValue && employee2Customer.Customer.Team2CustomerList.Any(team2Customer => team2Customer.TeamOid.HasValue && teamOids.Contains(team2Customer.TeamOid.Value)) ).Select(employee2Customer => employee2Customer.CustomerOid.Value) ); }); }); return result; } catch(Exception exception) { throw Utils.CreateBeWoFaultException(exception); } } /// /// Lädt die aktiven TeamDCs für einen Mitarbeiter mit Rücksichtnahme auf dessen Rechte. /// /// Oid des Mitarbeiters für den die TeamDCs geladen werden sollen. Ist die employeeOid null, wird die des angemeldeten Mitarbeiters genommen. /// Eine Liste mit TeamDCs public List GetAllActiveTeamsForEmployee(long? employeeOid) { try { var teams = DAOFactory.SearchDAO.GetAllActiveTeamsForEmployee(employeeOid); return MapperFactory.TeamDC_Team.MapToNewDCs(teams); } catch(Exception exception) { throw Utils.CreateBeWoFaultException(exception); } } /// /// Lädt die aktiven CompactTeamDCs für einen Mitarbeiter mit Rücksichtnahme auf dessen Rechte. /// /// Oid des Mitarbeiters für den die CompactTeamDCs geladen werden sollen. Ist die employeeOid null, wird die des angemeldeten Mitarbeiters genommen. /// Eine Liste mit CompactTeamDCs public List GetAllActiveCompactTeamsForEmployee(long? employeeOid) { try { var teams = DAOFactory.SearchDAO.GetAllActiveTeamsForEmployee(employeeOid); return MapperFactory.CompactTeamDC_Team.MapToNewDCs(teams); } catch(Exception exception) { throw Utils.CreateBeWoFaultException(exception); } } public List GetActiveSupportConceptsForEmployee(long? employeeOid, CustomerFilterEnum supportConceptFilter) { try { var supportConcepts = DAOFactory.SearchDAO.GetActiveSupportConceptsForEmployee(employeeOid, supportConceptFilter); return MapperFactory.SupportConceptDC_SupportConcept.MapToNewDCs(supportConcepts); } catch(Exception exception) { throw Utils.CreateBeWoFaultException(exception); } } public List FindTeamCustomers(long? teamOid) { try { var customerOids = new List(); ApplicationUser loggedInUser; if(LoggedInUserOperationContextExt.Current != null && LoggedInUserOperationContextExt.Current.User != null) { loggedInUser = LoggedInUserOperationContextExt.Current.User; } else { loggedInUser = SessionFacade.LoggedInUser; } if(loggedInUser?.Employee != null) { var teams = new List(); if(teamOid.HasValue) { teams.Add(DAOFactory.GenericDAO.LoadByID(teamOid.Value)); } else if(loggedInUser.Employee.Oid.HasValue) { teams.AddRange(DAOFactory.SearchDAO.FindLeadingTeams(loggedInUser.Employee.Oid.Value)); teams.AddRange(DAOFactory.SearchDAO.FindTeamsOfEmployee(loggedInUser.Employee.Oid.Value)); } foreach(var team in teams) { if(!team.Oid.HasValue) { continue; } var customers = DAOFactory.SearchDAO.FindCustomerOfTeam(team.Oid.Value); foreach(var c in customers) { if(c.IsActive == ActivationTypeId.Active) { if(c.Oid.HasValue && !customerOids.Contains(c.Oid.Value)) { customerOids.Add(c.Oid.Value); } } } } } return customerOids; } catch(Exception exception) { throw Utils.CreateBeWoFaultException(exception); } } public List GetActiveCustomersForEmployee(long? employeeOid, CustomerFilterEnum customerFilter) { try { var customers = DAOFactory.SearchDAO.GetActiveCustomersForEmployee(employeeOid, customerFilter); return MapperFactory.CompactCustomerDC_Customer.MapToNewDCs(customers); } catch(Exception exception) { throw Utils.CreateBeWoFaultException(exception); } } public UrlaubsplanerRootDC BuildUrlaubsplanerRootObject(AbsenceOverviewFilterDC filter) { try { UrlaubsplanungsManager manager = new UrlaubsplanungsManager(); return manager.BuildUrlaubsplanerRootObject(filter); } catch (Exception exception) { throw Utils.CreateBeWoFaultException(exception); } } public decimal CalculateUrlaubstage(DateTime entryDate, DateTime? endDate, int anzahlArbeitstage, int restlicheTageImJahr, decimal? urlaubstageProJahr) // Enddatum in die Parameterliste { try { decimal urlaubstage = 0; if (urlaubstageProJahr == null) urlaubstageProJahr = 0m; if (entryDate.Day == 1 && entryDate.Month == 1 || entryDate.Day == 2 && entryDate.Month == 1) //Erster Tag im Jahr { //Prüfen, ob Enddatum Ende des Jahres oder früher ist if(endDate == null) { if (anzahlArbeitstage < 5) // weniger als 5 Tage urlaubstage = (decimal)urlaubstageProJahr / 5m * anzahlArbeitstage; else { if (anzahlArbeitstage == 5) // 5 Tage urlaubstage = (decimal)urlaubstageProJahr; else if (anzahlArbeitstage == 6) // 6 Tage urlaubstage = (decimal)urlaubstageProJahr; } } else { if (anzahlArbeitstage < 5) // weniger als 5 Tage urlaubstage = (decimal)urlaubstageProJahr / 5m * anzahlArbeitstage; else { if (anzahlArbeitstage == 5) // 5 Tage urlaubstage = (decimal)urlaubstageProJahr / 365m * restlicheTageImJahr; else if (anzahlArbeitstage == 6) // 6 Tage urlaubstage = (decimal)urlaubstageProJahr / 365m * restlicheTageImJahr; } } } else if (/*entryDate.Day > 1 && */anzahlArbeitstage < 5) // Mitten im Jahr, weniger als 5 Tage { urlaubstage = (decimal)urlaubstageProJahr / 5m * 3m / 365m * restlicheTageImJahr; } else if (/*entryDate.Day > 1 && */anzahlArbeitstage >= 5) // Mitten im Jahr, 5 oder 6 Tage { urlaubstage = (decimal)urlaubstageProJahr / 365m * restlicheTageImJahr; } // Runden //urlaubstage = 25.51m; if (urlaubstage - (int)urlaubstage <= 0.1m) { urlaubstage = Math.Round(urlaubstage, MidpointRounding.AwayFromZero); } else if (urlaubstage - (int)urlaubstage <= 0.5m) { decimal digits = urlaubstage - (int)urlaubstage; urlaubstage = urlaubstage - digits + 0.5m; } else if (urlaubstage - (int)urlaubstage <= 1.0m) { urlaubstage = Math.Ceiling(urlaubstage); } return urlaubstage; } catch (Exception ex) { throw Utils.CreateBeWoFaultException(ex); } } public List GetGeschenkteUrlaubstageForEmployee(long empOid) { try { List tage = new List(); var tageEntities = DAOFactory.SearchDAO.FindGeschenkteUrlaubstageByEmpOid(empOid); if (tageEntities != null) tage.AddRange(MapperFactory.GeschenkterUrlaubstagDC_GeschenkterUrlaubstag.MapToNewDCs(tageEntities)); return tage; } catch (Exception ex) { throw Utils.CreateBeWoFaultException(ex); } } public List GetGeschenkteUrlaubstageForYear(int year) { try { List tage = new List(); var tageEntities = DAOFactory.SearchDAO.FindGeschenkteUrlaubstageByYear(year); if (tageEntities != null) tage.AddRange(MapperFactory.GeschenkterUrlaubstagDC_GeschenkterUrlaubstag.MapToNewDCs(tageEntities)); return tage; } catch (Exception ex) { throw Utils.CreateBeWoFaultException(ex); } } public void InsertGeschenkterUrlaubstag(GeschenkterUrlaubstagDC dc) { try { var entity = MapperFactory.GeschenkterUrlaubstagDC_GeschenkterUrlaubstag.MapToNewEntity(dc); DAOFactory.GenericDAO.Insert(entity); } catch (Exception ex) { throw Utils.CreateBeWoFaultException(ex); } } public void InsertMultipleGeschenkteUrlaubstage(List dcs) { try { DAOFactory.GenericDAO.Insert(MapperFactory.GeschenkterUrlaubstagDC_GeschenkterUrlaubstag.MapToNewEntities(dcs)); } catch (Exception ex) { throw Utils.CreateBeWoFaultException(ex); } } public void DeleteGeschenkterUrlaubstag(long oid) { try { var lOriginal = DAOFactory.GenericDAO.LoadByID((long)oid); DAOFactory.GenericDAO.Delete(lOriginal); } catch (Exception ex) { throw Utils.CreateBeWoFaultException(ex); } } public List InsertAbwesenheitsInformationPrint(List abwesenheitsInformationPrints) { try { DAOFactory.GenericDAO.Insert(MapperFactory.AbwesenheitsInformationPrintDC_AbwesenheitsInformationPrint.MapToNewEntities(abwesenheitsInformationPrints)); var prints = DAOFactory.GenericDAO.GetAll(); return MapperFactory.AbwesenheitsInformationPrintDC_AbwesenheitsInformationPrint.MapToNewDCs(prints); } catch (Exception ex) { throw Utils.CreateBeWoFaultException(ex); } } public List GetAbwesenheitsInformationPrints(List oids) { try { var entities = DAOFactory.GenericDAO.LoadByIDs(oids); List objekte = MapperFactory.AbwesenheitsInformationPrintDC_AbwesenheitsInformationPrint.MapToNewDCs(entities); return objekte; } catch (Exception ex) { throw Utils.CreateBeWoFaultException(ex); } } public List GetAllAbwesenheitsInformationPrints() { try { var entities = DAOFactory.GenericDAO.GetAllActive(); var dcs = MapperFactory.AbwesenheitsInformationPrintDC_AbwesenheitsInformationPrint.MapToNewDCs(entities); return dcs; } catch (Exception ex) { throw Utils.CreateBeWoFaultException(ex); } } public void DeleteAbwesenheitsInformationPrints(List dcs) { try { UrlaubsplanungsManager manager = new UrlaubsplanungsManager(); manager.DeleteAbwesenheitsInformationPrints(dcs); } catch (Exception ex) { throw Utils.CreateBeWoFaultException(ex); } } public List ErstelleUrlaubskontoDarstellung(EmployeeDC emp, int year) { try { var vs = PluginLoader.FindClass(); return vs.BerechneUrlaubskontoZurDarstellung(emp, year); } catch (Exception ex) { throw Utils.CreateBeWoFaultException(ex); } } public Dictionary BerechneAnzEinerAbwesenheitFuerMehrereMitarbeiter(List empOids, int year, string reason) { try { var vs = PluginLoader.FindClass(); return vs.BerechneAnzEinerAbwesenheitFuerMehrereMitarbeiter(empOids, year, reason); } catch ( Exception ex) { throw Utils.CreateBeWoFaultException(ex); } } public decimal CountKrankheitstage(AbwesenheitsInformationDC infoDC) { try { var manager = new UrlaubsplanungsManager(); return manager.CountKrankheitstage(infoDC); } catch (Exception ex) { throw Utils.CreateBeWoFaultException(ex); } } public decimal CountUrlaubstage(AbwesenheitsInformationDC infoDC) { try { var manager = new UrlaubsplanungsManager(); return manager.CountUrlaubstage(infoDC); } catch (Exception ex) { throw Utils.CreateBeWoFaultException(ex); } } public List GetAbsenceOverview(AbsenceOverviewFilterDC filter) { try { var res = new List(); var vs = PluginLoader.FindClass(); var allEmployees = DAOFactory.GenericDAO.GetAllActive().ToList(); List teams = new List(); if (filter.Teams != null) teams = DAOFactory.GenericDAO.GetActiveByIDs(filter.Teams) as List; //foreach (var emp in allEmployees.OrderBy(x => x.Person.LastNameFirstName)) List benoetigteMitarbeiter = new List(); if (teams.Count == 0) benoetigteMitarbeiter = allEmployees; else { foreach (var team in teams) { benoetigteMitarbeiter.AddRange(team.MemberList); } } benoetigteMitarbeiter.OrderBy(x => x.Person.LastNameFirstName).ToList(); foreach (var emp in benoetigteMitarbeiter) { if (filter.EmploymentType != null) if (!emp.Contracts.Any(x => x.EmploymentType != null && filter.EmploymentType.Contains(x.EmploymentType.Oid.Value))) continue; var dict = vs.BerechneUrlaubskonto(emp, filter.Year); if (filter.AbsenceReasons != null) emp.AbsenceTimes.RemoveRange(x => !filter.AbsenceReasons.Contains(x.AbsenceReason.Oid.Value)); //if (filter.Teams != null) //{ // bool isInTeam = false; // foreach (var team in teams) // { // if (team.MemberList.Contains(emp)) // isInTeam = true; // } // if (!isInTeam) // continue; //} var empDC = MapperFactory.EmployeeDC_Employee.MapToNewDC(emp); if (dict.ContainsKey(filter.Year)) { empDC.Urlaubskonto = dict[filter.Year]; } else { int test = 0; } res.Add(empDC); } return res.OrderBy(e => e.LastNameFirstName).ToList(); } catch (Exception exception) { throw Utils.CreateBeWoFaultException(exception); } } public void MakeNewContractHistoryEntry(Employee employee, StatementType statementType) { foreach (var contract in employee.Contracts) { var historyEntry = new ContractHistory() { ContractHistoryCancellationPeriod = contract.CancellationPeriod, ContractHistoryContractEndDate = contract.ContractEndDate, ContractHistoryContractTypeValueListEntry = contract.ContractTypeValueListEntry, ContractHistoryEmployeeOid = employee.Oid.Value, ContractHistoryEmploymentType = contract.EmploymentType, ContractHistoryEntryDate = contract.EntryDate, ContractHistoryHourlyRate = contract.HourlyRate, ContractHistoryHourlyRateCostRateValue = contract.HourlyRateCostRateValue, ContractHistoryLeaveDays = contract.LeaveDays, ContractHistoryMonthlyFLS = contract.MonthlyFLS, ContractHistoryMonthlyTotalHours = contract.MonthlyTotalHours, ContractHistoryProbationPeriod = contract.ProbationPeriod, ContractHistoryProbationPeriod2 = contract.ProbationPeriod2, ContractHistoryQualifikationsBedarfValueListEntry = contract.QualifikationsBedarfValueListEntry, ContractHistoryWeeklyDays = contract.WeeklyDays, ContractHistoryWeeklyFLS = contract.WeeklyFLS, ContractHistoryWeeklyTotalHours = contract.WeeklyTotalHours, IsActive = contract.IsActive, Notice = contract.Notice, InsTs = contract.InsTs, InsUser = contract.InsUser, SystemEntryID = contract.SystemEntryID, Version = contract.Version, UdpUser = employee.UdpUser, UpdTs = employee.UpdTs, ChangeType = statementType }; DAOFactory.GenericDAO.Insert(historyEntry); }; } public CompactEmployeeDC FindCompactEmployeeByFullname(string fullname) { try { var employee = DAOFactory.SearchDAO.FindEmployeeByFullname(fullname); return employee is null ? null : MapperFactory.CompactEmployeeDC_Employee.MapToNewDC(employee); } catch(Exception ex) { throw Utils.CreateBeWoFaultException(ex); } } public TeamDC FindTeamByOid(long teamOid, long employeeOid) { try { var teams = GetAllActiveTeamsForEmployee(employeeOid); return teams.FirstOrDefault(t => t.TeamOid.HasValue && t.TeamOid.Value.Equals(teamOid)); } catch(Exception ex) { throw Utils.CreateBeWoFaultException(ex); } } } }