示例#1
0
 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);
     }
 }
示例#2
0
        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();
        }
示例#3
0
        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);
        }