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.Security; using BeWo.Service.ServiceContracts; 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; 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); 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)); 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 { return MapperFactory.CompactEmployeeDC_Employee.MapToNewDCs(DAOFactory.GenericDAO.GetAllActiveAndArchived()); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetAllActiveEmployeesCompact() { try { return MapperFactory.CompactEmployeeDC_Employee.MapToNewDCs(DAOFactory.GenericDAO.GetAllActive()); } 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 = false; foreach (var e in team.MemberList) { if ((team.Leader != null && team.Leader.Oid == employee.EmployeeOid) || 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 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 { if (Utils.UserHasRight(LoggedInUserOperationContextExt.Current.User, UserRightType.TeamView_ViewAll)) { return MapperFactory.CompactTeamDC_Team.MapToNewDCs(DAOFactory.GenericDAO.GetAllActive()); } if (Utils.UserHasRight(LoggedInUserOperationContextExt.Current.User, UserRightType.TeamView_ViewMyTeams)) { var teams = DAOFactory.SearchDAO.FindAllActiveTeamsOfEmployee( LoggedInUserOperationContextExt.Current.User.Employee.Oid.Value); return MapperFactory.CompactTeamDC_Team.MapToNewDCs(teams); } return new List(); } 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) { 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; } Employee lEmployee = MapperFactory.EmployeeDC_Employee.MapToNewEntity(pEmployeeDC); DAOFactory.GenericDAO.Insert(lEmployee); return lEmployee.Oid.Value; } 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); 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 { SettingsLogic.AddToUsersHistory(pEmployeeOid); return MapperFactory.EmployeeDC_Employee.MapToNewDC(DAOFactory.GenericDAO.LoadByID(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); DAOFactory.GenericDAO.Update(lOriginal); 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); 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 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); } 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); foreach (var groupOfPeople in allgroups) { if (!processedGroups.ContainsKey(groupOfPeople.Oid.Value)) { processedGroups.Add(groupOfPeople.Oid.Value, true); if (employeeOid.Value == groupOfPeople.CreatedByEmployeeOid || ContainsMemberOfEmployee(groupOfPeople, emp)) 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) { var liste = DAOFactory.SearchDAO.FindAllEmployeeAppCodes(pEmployeeOid); return MapperFactory.EmployeeAPPCodeDC_EmployeeAPPCode.MapToNewDCs(liste); } 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); } } } }