Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        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());
        }
Exemplo n.º 3
0
        /// <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;
            }
        }