/// <summary> /// Create employment in OS2 database for person identified by personId /// </summary> /// <param name="empl"></param> /// <param name="personId"></param> /// <returns></returns> public Employment CreateEmploymentIDM(IDMEmployee empl, int personId) { if (empl.AnsættelseFra == null) { _logger.Debug($"{this.GetType().Name}, CreateEmploymentIDM(), Employment not created for personId={personId} with OrgUnitOUID={empl.OrgEnhedOUID} due to missing employment start date"); return(null); } var orgUnit = _orgRepo.AsQueryable().FirstOrDefault(x => x.OrgOUID == empl.OrgEnhedOUID); if (orgUnit == null) { _logger.Debug($"{this.GetType().Name}, CreateEmploymentIDM(), Employment not created for personId={personId} with OrgUnitOUID={empl.OrgEnhedOUID} due to orgunit not found"); return(null); } var employment = _emplRepo.AsQueryable().FirstOrDefault(x => x.OrgUnit.OrgOUID == orgUnit.OrgOUID && x.Person.CprNumber == empl.CPRNummer); //It is ok that we do not save after inserting untill //we are done as we loop over employments from the view, and //two view employments will not share an employment in the db. if (employment == null) { employment = _emplRepo.Insert(new Employment()); } employment.OrgUnitId = orgUnit.Id; employment.Position = empl.Stillingsbetegnelse ?? ""; employment.IsLeader = _dataProvider.GetOrganisationsAsQueryableIDM().Any(x => ExtractInitialsIDM(x.Leder) == empl.BrugerID); employment.PersonId = personId; var startDate = empl.AnsættelseFra ?? new DateTime(); employment.StartDateTimestamp = (Int32)(startDate.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; employment.ExtraNumber = 0; employment.CostCenter = 0; employment.EmploymentId = empl.Tjenestenummer; employment.InstituteCode = empl.Institutionskode; if (empl.AnsættelseTil != null && empl.AnsættelseTil != Convert.ToDateTime("31-12-9999")) { employment.EndDateTimestamp = (Int32)(((DateTime)empl.AnsættelseTil).Subtract(new DateTime(1970, 1, 1)).Add(new TimeSpan(1, 0, 0, 0))).TotalSeconds; } else { employment.EndDateTimestamp = 0; } return(employment); }
public IQueryable <IDMEmployee> GetEmployeesAsQueryableIDM() { string medarbejderView = _customSettings.DbViewMedarbejder; if (medarbejderView == null) { _logger.Error($"{this.GetType().Name}, GetEmployeesAsQueryable(): DATABASE_VIEW_MEDARBEJDER is null"); } var result = new List <IDMEmployee>(); using (var sqlConnection1 = new MySqlConnection(_connectionString)) { var cmd = new MySqlCommand() { CommandText = $"SELECT * FROM {medarbejderView}", CommandType = CommandType.Text, Connection = sqlConnection1 }; try { sqlConnection1.Open(); var reader = cmd.ExecuteReader(); while (reader.Read()) { var temp1 = SafeGetString(reader, 3); var temp2 = SafeGetString(reader, 4); var currentRow = new IDMEmployee { Institutionskode = SafeGetString(reader, 0), Tjenestenummer = SafeGetString(reader, 1), CPRNummer = SafeGetString(reader, 2), AnsættelseFra = SafeGetString(reader, 3) == "" ? DateTime.Now : Convert.ToDateTime(SafeGetString(reader, 3)), AnsættelseTil = SafeGetString(reader, 4) == "" ? DateTime.Parse("31-12-9999") : Convert.ToDateTime(SafeGetString(reader, 4)), Fornavn = SafeGetString(reader, 5), Efternavn = SafeGetString(reader, 6), APOSUID = SafeGetString(reader, 7), BrugerID = SafeGetString(reader, 8), OrgEnhed = SafeGetString(reader, 9), OrgEnhedOUID = SafeGetString(reader, 10), Email = SafeGetString(reader, 11), Stillingsbetegnelse = SafeGetString(reader, 12), Vejnavn = SafeGetString(reader, 13), PostNr = SafeGetString(reader, 15), PostDistrikt = SafeGetString(reader, 16) }; result.Add(currentRow); } } catch (Exception e) { _logger.Error($"{this.GetType().Name}, GetOrganisationsAsQueryableIDM(): Error when reading employees from IDM view", e); throw; } } return(result.AsQueryable()); }
/// <summary> /// Updates home address for person identified by personId. /// </summary> /// <param name="empl"></param> /// <param name="personId"></param> public void UpdateHomeAddressIDM(IDMEmployee empl, string cpr) { try { if (empl.Vejnavn == null || empl.Vejnavn == "") { return; } var person = _personRepo.AsQueryable().FirstOrDefault(x => x.CprNumber == cpr); if (person == null) { throw new Exception("Person does not exist."); } var launderer = new CachedAddressLaunderer(_cachedRepo, _actualLaunderer, _coordinates); var splitStreetAddress = SplitAddressIDM(empl.Vejnavn, empl.PostNr, empl.PostDistrikt); var addressToLaunder = new Address { Description = person.FirstName + " " + person.LastName + " [" + person.Initials + "]", StreetName = splitStreetAddress.ElementAtOrDefault(0), StreetNumber = splitStreetAddress.ElementAtOrDefault(1) ?? "", ZipCode = Convert.ToInt32(splitStreetAddress.ElementAtOrDefault(3) ?? "9999"), Town = splitStreetAddress.ElementAtOrDefault(2) ?? "" }; addressToLaunder = launderer.Launder(addressToLaunder); var launderedAddress = new PersonalAddress() { PersonId = person.Id, Type = PersonalAddressType.Home, StreetName = addressToLaunder.StreetName, StreetNumber = addressToLaunder.StreetNumber, ZipCode = addressToLaunder.ZipCode, Town = addressToLaunder.Town, Latitude = addressToLaunder.Latitude ?? "", Longitude = addressToLaunder.Longitude ?? "", Description = addressToLaunder.Description }; var homeAddr = _personalAddressRepo.AsQueryable().FirstOrDefault(x => x.PersonId.Equals(person.Id) && x.Type == PersonalAddressType.Home); if (homeAddr == null) { _personalAddressRepo.Insert(launderedAddress); } else { if (homeAddr != launderedAddress) { // Address has changed // Change type of current (The one about to be changed) home address to OldHome. // Is done in loop because there was an error that created one or more home addresses for the same person. // This will make sure all home addresses are set to old if more than one exists. foreach (var addr in _personalAddressRepo.AsQueryable().Where(x => x.PersonId.Equals(person.Id) && x.Type == PersonalAddressType.Home).ToList()) { addr.Type = PersonalAddressType.OldHome;; } // Update actual current home address. _personalAddressRepo.Insert(launderedAddress); _personalAddressRepo.Save(); } } } catch (Exception e) { _logger.Error($"{this.GetType().Name}, UpdateHomeAddressIDM(), Error when updating address for CPR={cpr}", e); throw; } }