public void UpdateReportsAffectedBySubstitute(Substitute sub) { try { if (sub.LeaderId == sub.PersonId) { // Substitute is a substitute - Not a Personal Approver. // Select reports to be updated based on OrgUnits var orgIds = new List <int>(); orgIds.Add(sub.OrgUnitId); orgIds.AddRange(_orgService.GetChildOrgsWithoutLeader(parentId: sub.OrgUnitId).Select(x => x.Id)); var reports = _driveRepo.AsQueryable().Where(rep => orgIds.Contains(rep.Employment.OrgUnitId)).ToList(); var idsOfLeadersOfImmediateChildOrgs = _orgService.GetIdsOfLeadersInImmediateChildOrgs(parentOrgId: sub.OrgUnitId); var reportsForLeadersOfImmediateChildOrgs = _driveRepo.AsQueryable().Where(rep => idsOfLeadersOfImmediateChildOrgs.Contains(rep.PersonId)).ToList(); reports.AddRange(reportsForLeadersOfImmediateChildOrgs); foreach (var report in reports) { report.UpdateResponsibleLeaders(_driveService.GetResponsibleLeadersForReport(report)); } _driveRepo.Save(); } else { // Substitute is a personal approver // Select reports to be updated based on PersonId on report var reports = _driveRepo.AsQueryable().Where(rep => rep.PersonId == sub.PersonId).ToList(); foreach (var report in reports) { report.UpdateResponsibleLeaders(_driveService.GetResponsibleLeadersForReport(report)); } _driveRepo.Save(); } } catch (Exception e) { _logger.LogError($"{this.GetType().Name}, Error updating reports for substitute ", e); } }
public void AddLeadersToReportsThatHaveNone() { // Fail-safe as some reports for unknown reasons have not had a leader attached Console.WriteLine("Adding leaders to drive reports that have none"); var reports = _reportRepo.AsQueryableLazy().Where(r => (r.PersonReports.Count == 0 || r.ActualLeader == null) && r.Status == ReportStatus.Pending).ToList(); foreach (var report in reports) { report.UpdateResponsibleLeaders(_driveService.GetResponsibleLeadersForReport(report)); var actualLeader = _driveService.GetActualLeaderForReport(report); if (actualLeader != null) { report.ActualLeaderId = actualLeader.Id; } } _reportRepo.DetectChanges(); _reportRepo.Save(); }
public void AddLeadersToReportsThatHaveNone() { // Fail-safe as some reports for unknown reasons have not had a leader attached Console.WriteLine("Adding leaders to reports that have none"); var i = 0; var reports = _reportRepo.AsQueryable() .Where(r => (r.ResponsibleLeaders.Count == 0 || r.ActualLeader == null) && r.Status == ReportStatus.Pending) .ToList(); foreach (var report in reports) { try { i++; Console.WriteLine("Adding leaders to report " + i + " of " + reports.Count); report.UpdateResponsibleLeaders(_driveService.GetResponsibleLeadersForReport(report)); var actualLeader = _driveService.GetActualLeaderForReport(report); if (actualLeader != null) { report.ActualLeaderId = actualLeader.Id; } else { _logger.Error($"{this.GetType().Name}, AddLeadersToReportsThatHaveNone(), Could not find actual leader for person ? {report.PersonId} and report = {report.Id}"); } if (i % 100 == 0) { Console.WriteLine("Saving to database"); _reportRepo.Save(); } } catch (Exception e) { _logger.Error($"{this.GetType().Name}, AddLeadersToReportsThatHaveNone(), Error, report = {report.Id}", e); throw; } } _reportRepo.Save(); Console.WriteLine("Adding leaders to reports that have none finished"); _logger.Debug($"{this.GetType().Name}, AddLeadersToReportsThatHaveNone() finished"); }
public void NoSubs_NoLeaderInReportOrg_ShouldReturn_ClosestParentOrgLeader() { _subMock.AsQueryable().ReturnsForAnyArgs(new List<Core.DomainModel.Substitute>().AsQueryable()); var report = new DriveReport() { PersonId = 1, Person = new Person() { Id = 1, }, EmploymentId = 1, Employment = new Employment() { OrgUnit = new OrgUnit() { Id = 2 }, OrgUnitId = 2 } }; _orgUnitMock.AsQueryable().ReturnsForAnyArgs(new List<OrgUnit>() { new OrgUnit() { Id = 1, Level = 0 }, new OrgUnit() { Id = 2, Level = 1, ParentId = 1, Parent = new OrgUnit() { Id = 1, Level = 0 } } }.AsQueryable()); _emplMock.AsQueryable().ReturnsForAnyArgs(new List<Employment>() { new Employment() { PersonId = 1, Person = new Person() { Id = 1, FullName = "Jon Badstue" }, Id = 1, IsLeader = false, OrgUnit = new OrgUnit() { Id = 2, }, OrgUnitId = 2 }, new Employment() { PersonId = 2, Person = new Person() { Id = 2, FullName = "Eva Due", }, Id = 12, IsLeader = true, OrgUnit = new OrgUnit() { Id = 1, }, OrgUnitId = 1 }, }.AsQueryable()); var res = _uut.GetResponsibleLeadersForReport(report); Assert.AreEqual("Eva Due", res[0].FullName); }
public void GetResponsibleLeader_WithNoSub_ShouldGetActualLeader() { var leader = new Person() { Id = 1, FirstName = "Test", LastName = "Testesen", Initials = "TT", FullName = "Test Testesen [TT]" }; var user = new Person() { Id = 2, FirstName = "User", LastName = "Usersen", Initials = "UU", FullName = "User Usersen [UU]" }; var orgUnit = new OrgUnit() { Id = 1, }; var leaderEmpl = new Employment() { Id = 1, OrgUnit = orgUnit, OrgUnitId = 1, Person = leader, PersonId = leader.Id, IsLeader = true }; var userEmpl = new Employment() { Id = 2, OrgUnit = orgUnit, PersonId = user.Id, OrgUnitId = 1, Person = user, IsLeader = false }; var substitute = new Core.DomainModel.Substitute() { Id = 1, OrgUnitId = 12, PersonId = 3, LeaderId = 1, Sub = new Person() { FullName = "En Substitute [ES]" }, StartDateTimestamp = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1).AddDays(-1))).TotalSeconds, EndDateTimestamp = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1).AddDays(1))).TotalSeconds, }; _emplMock.AsQueryable().ReturnsForAnyArgs(new List <Employment>() { leaderEmpl, userEmpl }.AsQueryable()); _orgUnitMock.AsQueryable().ReturnsForAnyArgs(new List <OrgUnit>() { orgUnit }.AsQueryable()); _subMock.AsQueryable().ReturnsForAnyArgs(new List <Core.DomainModel.Substitute>() { substitute }.AsQueryable()); var report = new DriveReport() { Id = 1, Employment = userEmpl, EmploymentId = userEmpl.Id, PersonId = user.Id, Person = user }; var res = _uut.GetResponsibleLeadersForReport(report); Assert.AreEqual("Test Testesen [TT]", res[0].FullName); }