/// <summary> /// Gets the email address of all leaders that have pending reports to be approved. /// </summary> /// <returns>List of email addresses.</returns> public IEnumerable <Report> GetLeadersWithPendingReportsMails() { var reports = reportRepo.AsQueryableLazy().Where(r => r.Status == ReportStatus.Pending).ToList(); var reportsWithNoLeader = reports.Where(report => report.ResponsibleLeader == null); foreach (var report in reportsWithNoLeader) { logger.LogError(report.Person.FullName + "s indberetning har ingen leder. Indberetningen kan derfor ikke godkendes."); } return(reports.Where(report => report.ResponsibleLeaderId != null && !string.IsNullOrEmpty(report.ResponsibleLeader.Mail) && report.ResponsibleLeader.RecieveMail)); }
public void AddLeadersToReportsThatHaveNone() { var i = 0; var reports = _reportRepo.AsQueryableLazy().Where(r => r.Status == ReportStatus.Pending && (r.ResponsibleLeader == null || !r.ResponsibleLeader.IsActive || r.ActualLeader == null || !r.ActualLeader.IsActive)).ToList(); foreach (var report in reports) { i++; report.ResponsibleLeaderId = _reportService.GetResponsibleLeaderForReport(report).Id; report.ActualLeaderId = _reportService.GetActualLeaderForReport(report).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 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(); }
private void UpdateOrgUnits(IEnumerable <APIOrgUnit> apiOrgUnits) { // Handle inserts var toBeInserted = apiOrgUnits.Where(s => !_orgUnitRepo.AsNoTracking().Select(d => d.OrgId.ToString()).Contains(s.Id)).ToList(); var toBeUpdated = _orgUnitRepo.AsQueryableLazy().Where(d => apiOrgUnits.Select(s => s.Id).Contains(d.OrgId.ToString())).ToList(); var insertTotal = toBeInserted.Count(); var insertCounter = 0; _logger.LogDebug("Orgunits to be inserted: {0}", insertTotal); foreach (var apiOrgUnit in toBeInserted) { if (++insertCounter % 10 == 0) { _logger.LogDebug("Inserting orgunit {0} of {1}", insertCounter, insertTotal); } var orgToInsert = new OrgUnit(); orgToInsert.HasAccessToFourKmRule = false; orgToInsert.HasAccessToVacation = false; orgToInsert.DefaultKilometerAllowance = KilometerAllowance.Calculated; mapAPIOrgUnit(apiOrgUnit, ref orgToInsert); if (orgToInsert.Address == null) { _logger.LogWarning("Skipping orgunit insert because it has no address. OrgId: {0} Name: {1}", orgToInsert.OrgId, orgToInsert.LongDescription); continue; } _orgUnitRepo.Insert(orgToInsert); // need to save each time to generate db id used in the next parent references _orgUnitRepo.Save(); } // Handle updates var updateTotal = toBeUpdated.Count(); var updateCounter = 0; _logger.LogDebug("Orgunits to be updated: {0}", updateTotal); foreach (var orgUnit in toBeUpdated) { try { if (++updateCounter % 10 == 0) { _logger.LogDebug("Updating orgunit {0} of {1}", updateCounter, updateTotal); } var apiOrgUnit = apiOrgUnits.Where(s => s.Id == orgUnit.OrgId.ToString()).First(); var orgToUpdate = orgUnit; mapAPIOrgUnit(apiOrgUnit, ref orgToUpdate); if (orgToUpdate.Address == null) { _logger.LogWarning("Skipping orgunit update because it has no address. OrgId: {0} Name: {1}", orgToUpdate.OrgId, orgToUpdate.LongDescription); continue; } _orgUnitRepo.Update(orgToUpdate); } catch (Exception e) { _logger.LogError(e, "Failed to update Orgunit. OrgId: {0} Name: {1}", orgUnit.OrgId, orgUnit.LongDescription); } } _orgUnitRepo.DetectChanges(); _orgUnitRepo.Save(); }
private void UpdatePersons(IEnumerable <APIPerson> apiPersons) { // Handle inserts var toBeInserted = apiPersons.Where(s => !_personRepo.AsNoTracking().Select(d => d.CprNumber).Contains(s.CPR)); var toBeUpdated = _personRepo.AsQueryableLazy().Where(d => apiPersons.Select(s => s.CPR).Contains(d.CprNumber)).ToList(); var toBeDeleted = _personRepo.AsQueryableLazy().Where(p => p.IsActive && !apiPersons.Select(ap => ap.CPR).Contains(p.CprNumber)).ToList(); var insertTotal = toBeInserted.Count(); var insertCounter = 0; _logger.LogDebug("Persons to be inserted: {0}", insertTotal); foreach (var apiPerson in toBeInserted) { if (++insertCounter % 10 == 0) { _logger.LogDebug("Inserting person {0} of {1}", insertCounter, insertTotal); } var personToInsert = new Person(); personToInsert.IsAdmin = false; personToInsert.RecieveMail = true; personToInsert.Employments = new List <Employment>(); personToInsert.PersonalAddresses = new List <PersonalAddress>(); mapAPIPerson(apiPerson, ref personToInsert); _personRepo.Insert(personToInsert); _personRepo.Save(); //UpdateHomeAddress(apiPerson, ref personToInsert); UpdateVacationBalances(apiPerson, ref personToInsert); } _personRepo.Save(); // Handle updates var updateTotal = toBeUpdated.Count(); var updateCounter = 0; _logger.LogDebug("Persons to be updated: {0}", updateTotal); foreach (var person in toBeUpdated) { try { if (++updateCounter % 10 == 0) { _logger.LogDebug("Updating person {0} of {1}", updateCounter, updateTotal); } var apiPerson = apiPersons.Where(s => s.CPR == person.CprNumber).First(); var personToUpdate = person; mapAPIPerson(apiPerson, ref personToUpdate); //UpdateHomeAddress(apiPerson, ref personToUpdate); UpdateVacationBalances(apiPerson, ref personToUpdate); _personRepo.Update(personToUpdate); } catch (Exception e) { _logger.LogError(e, "Failed to update Person. Name: {0}", person.FullName); } } // Handle deletes var deleteTotal = toBeDeleted.Count(); var deleteCounter = 0; _logger.LogDebug("Persons to be inactivated: {0}", deleteTotal); foreach (var personToBeDeleted in toBeDeleted) { if (++deleteCounter % 10 == 0) { _logger.LogDebug("Inactivating person {0} of {1}", deleteCounter, deleteTotal); } personToBeDeleted.IsActive = false; foreach (var employment in personToBeDeleted.Employments) { if (employment.EndDateTimestamp == 0 || employment.EndDateTimestamp > GetUnixTime(DateTime.Now.Date)) { employment.EndDateTimestamp = GetUnixTime(DateTime.Now.Date); } } _personRepo.Update(personToBeDeleted); } _personRepo.DetectChanges(); _personRepo.Save(); }