public void UpdateLeadersOnAllReports()
        {
            var i = 0;

            var reports = _reportRepo.AsQueryable().Where(x => x.Employment.OrgUnit.Level > 1).ToList();
            var max     = reports.Count();

            foreach (var report in reports)
            {
                if (i % 100 == 0)
                {
                    Console.WriteLine("Updating leaders on report " + i + " of " + max);
                }
                i++;
                report.ResponsibleLeaderId = _driveService.GetResponsibleLeaderForReport(report).Id;
                report.ActualLeaderId      = _driveService.GetActualLeaderForReport(report).Id;
                if (i % 1000 == 0)
                {
                    Console.WriteLine("Saving to database");
                    _reportRepo.Save();
                }
            }
            Console.WriteLine("Saving to database");
            _reportRepo.Save();
        }
示例#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");
        }
示例#4
0
        public void IsLeader_TwoLeadersInOrgParent_ShouldPickOneOfThemAsActualLeader()
        {
            _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()
                {
                    IsLeader = true,
                    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 = true,
                    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
                },
                new Employment()
                {
                    PersonId = 3,
                    Person   = new Person()
                    {
                        Id       = 3,
                        FullName = "Trille Due",
                    },
                    Id       = 13,
                    IsLeader = true,
                    OrgUnit  = new OrgUnit()
                    {
                        Id = 1,
                    },
                    OrgUnitId = 1
                },
            }.AsQueryable());

            var res = _uut.GetActualLeaderForReport(report);

            Assert.AreEqual("Eva Due", res.FullName);
        }