示例#1
0
        public RegistreringType1 Read(CprBroker.Schemas.PersonIdentifier uuid, LaesInputType input, Func <string, Guid> cpr2uuidFunc, out CprBroker.Schemas.QualityLevel?ql)
        {
            RegistreringType1 ret = null;

            if (IPartPerCallDataProviderHelper.CanCallOnline(uuid.CprNumber))
            {
                // TODO: Shall we remove this explicit logging after integration of budget control?
                Admin.AddNewLog(System.Diagnostics.TraceEventType.Information, "KMD.Read", string.Format("Calling AS78207 with PNR <{0}>", uuid.CprNumber), null, null);
                var detailsResponse = new EnglishAS78207Response(CallAS78207(uuid.CprNumber));

                Admin.AddNewLog(System.Diagnostics.TraceEventType.Information, "KMD.Read", string.Format("Calling AS78205 with PNR <{0}>", uuid.CprNumber), null, null);
                var addressResponse = CallAS78205(uuid.CprNumber);

                Admin.AddNewLog(System.Diagnostics.TraceEventType.Information, "KMD.Read", string.Format("Converting PNR <{0}>", uuid.CprNumber), null, null);

                var kmdResponse = new KmdResponse()
                {
                    AS78205Response = addressResponse.InnerResponse,
                    AS78207Response = detailsResponse.InnerResponse
                };

                UuidCache cache = new UuidCache();
                cache.FillCache(kmdResponse.RelatedPnrs);

                ret = kmdResponse.ToRegistreringType1(cache.GetUuid);
            }
            ql = CprBroker.Schemas.QualityLevel.Cpr;

            return(ret);
        }
示例#2
0
            public void FillCache_Null_Zero()
            {
                var cache = new UuidCache();
                var ret   = cache.FillCache(null);

                Assert.AreEqual(0, ret);
            }
示例#3
0
 public void FillCache_Exception_Propagated([Random(0, 1000, 5)] int count)
 {
     var pnrs  = Utilities.RandomCprNumbers(count);
     var cache = new UuidCache()
     {
         GetUuidArrayMethod = (kjasdlk) => { throw new Exception("abcdefg"); }
     };
     var ret = cache.FillCache(pnrs);
 }
示例#4
0
 public void FillCache_NullMethod_Exception([Random(0, 1000, 5)] int count)
 {
     var pnrs  = Utilities.RandomCprNumbers(count);
     var cache = new UuidCache()
     {
         GetUuidArrayMethod = null
     };
     var ret = cache.FillCache(pnrs);
 }
示例#5
0
            public void FillCache_FakeUuidMethod_ReturnsSameCount([Random(0, 1000, 5)] int count)
            {
                var pnrs  = Utilities.RandomCprNumbers(count);
                var cache = new UuidCache()
                {
                    GetUuidArrayMethod = (arr) => arr.Select(p => Guid.NewGuid() as Guid?).ToArray()
                };
                var ret = cache.FillCache(pnrs);

                Assert.AreEqual(count, ret);
            }
示例#6
0
            public void FillCache_InvalidUuidCount_Zero([Random(10, 1000, 5)] int count)
            {
                var cache = new UuidCache()
                {
                    GetUuidArrayMethod = (arr) => arr.Take(arr.Length - 1).Select(p => Guid.NewGuid() as Guid?).ToArray()
                };
                var pnrs = Utilities.RandomCprNumbers(count);
                var sss  = cache.GetUuidArrayMethod(pnrs);

                Assert.AreEqual(count - 1, sss.Count());
                var ret = cache.FillCache(pnrs);

                Assert.AreEqual(0, ret);
            }
示例#7
0
        public RegistreringType1 Read(CprBroker.Schemas.PersonIdentifier uuid, LaesInputType input, Func <string, Guid> cpr2uuidFunc, out QualityLevel?ql)
        {
            ql = QualityLevel.Cpr;
            IndividualResponseType response = null;

            response = ExtractManager.GetPerson(uuid.CprNumber);

            if (response != null)
            {
                UuidCache cache = new UuidCache();
                cache.FillCache(response.RelatedPnrs);

                return(response.ToRegistreringType1(cache.GetUuid));
            }
            return(null);
        }
示例#8
0
        public RegistreringType1 Read(CprBroker.Schemas.PersonIdentifier uuid, LaesInputType input, Func <string, Guid> cpr2uuidFunc, out QualityLevel?ql)
        {
            ql = QualityLevel.Cpr;

            if (IPartPerCallDataProviderHelper.CanCallOnline(uuid.CprNumber))
            {
                IndividualRequestType  request  = new IndividualRequestType(true, DataType.DefinedByTask, decimal.Parse(uuid.CprNumber));
                IndividualResponseType response = this.GetResponse(request);

                UuidCache cache = new UuidCache();
                cache.FillCache(response.RelatedPnrs);

                return(response.ToRegistreringType1(cpr2uuidFunc));
            }
            else
            {
                return(null);
            }
        }
示例#9
0
        public RegistreringType1 Read(PersonIdentifier uuid, LaesInputType input, Func <string, Guid> cpr2uuidFunc, out QualityLevel?ql)
        {
            CprBroker.Schemas.Part.RegistreringType1 ret = null;
            if (IPartPerCallDataProviderHelper.CanCallOnline(uuid.CprNumber))
            {
                EnsurePersonDataExists(uuid.CprNumber);
            }

            using (var dataContext = new DPRDataContext(this.ConnectionString))
            {
                var db = PersonInfo.GetPersonInfo(dataContext, decimal.Parse(uuid.CprNumber));
                if (db != null)
                {
                    UuidCache cache = new UuidCache();
                    cache.FillCache(db.RelatedPnrs);

                    ret = db.ToRegisteringType1(cache.GetUuid, dataContext);
                }
            }
            ql = QualityLevel.DataProvider;
            return(ret);
        }
示例#10
0
        public RegistreringType1 Read(PersonIdentifier uuid, LaesInputType input, Func <string, Guid> cpr2uuidFunc, out CprBroker.Schemas.QualityLevel?ql)
        {
            DateTime effectDate = DateTime.Now;

            ql = QualityLevel.DataProvider;

            using (var dataContext = new E_MDataContext(ConnectionString))
            {
                dataContext.SetCitizenLoadOptions();

                var dbCitizen = dataContext.Citizens
                                .Where(cit => cit.PNR == decimal.Parse(uuid.CprNumber))
                                .FirstOrDefault();
                if (dbCitizen != null)
                {
                    var cache = new UuidCache();
                    cache.FillCache(dbCitizen.RelatedPnrs);

                    return(dbCitizen.ToRegistreringType1(effectDate, cache.GetUuid));
                }
            }

            return(null);
        }
示例#11
0
        public static void ConvertPersons(int batchSize)
        {
            Admin.LogFormattedSuccess("ExtractManager.ConvertPersons() started, batch size <{0}>", batchSize);
            List <Guid> succeeded = new List <Guid>(), failed = new List <Guid>();

            using (var dataContext = new ExtractDataContext())
            {
                var dataLoadOptions = new System.Data.Linq.DataLoadOptions();
                dataLoadOptions.LoadWith <ExtractItem>(ei => ei.Extract);
                dataContext.LoadOptions = dataLoadOptions;

                var persons = ExtractPersonStaging.SelectTop(dataContext, batchSize);
                Admin.LogFormattedSuccess("ExtractManager.ConvertPersons() - <{0}> persons found", persons.Length);

                var conversionExtracts = ExtractConversion.CreateFromPersonStagings(persons);
                ExtractConversion.FillExtractItems(conversionExtracts, dataContext);

                // Preload UUIDs
                var pnrs  = ExtractConversion.AllPNRs(conversionExtracts);
                var cache = new UuidCache();
                cache.FillCache(pnrs);

                int personIndex = 0;
                foreach (var personGroup in conversionExtracts)
                {
                    Admin.LogFormattedSuccess("ExtractManager.ConvertPersons() - converting persons from extract <{0}>", personGroup.Extract.ExtractId);
                    foreach (var person in personGroup.Persons)
                    {
                        personIndex++;
                        try
                        {
                            Admin.LogFormattedSuccess("ExtractManager.ConvertPersons() - processing PNR <{0}>, person <{1}> of <{2}>", person.ExtractPersonStaging.PNR, personIndex, persons.Length);
                            var uuid             = cache.GetUuid(person.ExtractPersonStaging.PNR);
                            var response         = Extract.ToIndividualResponseType(person.ExtractPersonStaging.Extract, person.ExtractItems.AsQueryable(), Constants.DataObjectMap);
                            var oioPerson        = response.ToRegistreringType1(cache.GetUuid);
                            var personIdentifier = new Schemas.PersonIdentifier()
                            {
                                CprNumber = person.ExtractPersonStaging.PNR, UUID = uuid
                            };
                            UpdateDatabase.UpdatePersonRegistration(personIdentifier, oioPerson);

                            succeeded.Add(person.ExtractPersonStaging.ExtractPersonStagingId);
                            Admin.LogFormattedSuccess("ExtractManager.ConvertPersons() - finished PNR <{0}>, person <{1}> of <{2}>", person.ExtractPersonStaging.PNR, personIndex, persons.Length);
                        }
                        catch (Exception ex)
                        {
                            failed.Add(person.ExtractPersonStaging.ExtractPersonStagingId);
                            Admin.LogException(ex);
                        }
                    }
                }
            }

            // Delete the staging tables from a new data context to maximize performance
            using (var dataContext = new ExtractDataContext())
            {
                var persons = dataContext.ExtractPersonStagings.Where(ep => succeeded.Contains(ep.ExtractPersonStagingId));
                dataContext.ExtractPersonStagings.DeleteAllOnSubmit(persons);
                dataContext.SubmitChanges();
            }
            Admin.LogFormattedSuccess("ExtractManager.ConvertPersons() ending, batch size: <{0}>, succeeded: <{1}>, failed: <{2}>", batchSize, succeeded.Count, failed.Count);
        }