Esempio n. 1
0
        private async Task SaveSetting(CreateSetting command, Data.Outbreak outbreak, OutbreakSettings setting)
        {
            //if new setting is primary; set all others to not primary
            if (command.IsPrimary)
            {
                foreach (var s in outbreak.OutbreakSettings)
                {
                    s.InPrimary = false;
                }
            }

            setting.IdOutbreak        = command.OutbreakId;
            setting.CdSetting         = command.SettingType;
            setting.InPrimary         = command.IsPrimary;
            setting.DsSettingOther    = command.OtherType;
            setting.IdResourceSetting = command.SettingFacilityId;
            setting.DsAddress         = command.Address.AddressLine1 ?? "";
            setting.DsAddress2        = command.Address.AddressLine2 ?? "";
            setting.DsCity            = command.Address.City ?? "";
            setting.DsZip             = command.Address.Zip ?? "";
            setting.CdState           = command.Address.State ?? "";
            setting.CdCountry         = command.Address.Country ?? "";
            setting.CdCounty          = command.Address.County ?? "";
            setting.DsContactPhn      = command.SettingContactPhone ?? "";
            setting.NmContact         = command.SettingContact ?? "";


            if (command.SettingFacilityId.HasValue)
            {
                var facility = await writeContext.ResourceSetting
                               .FindAsync(command.SettingFacilityId);

                setting.NmFacility = facility.NmSetting;
                setting.DsAddress  = facility.DsAddr1Name;
                setting.DsAddress2 = facility.DsAddr2;
                setting.DsCity     = facility.DsCity;
                setting.DsZip      = facility.DsZip;
                setting.CdCounty   = facility.CdCounty;
                setting.CdCountry  = facility.CdCountry;
            }

            //generate email alert on setting save
            var alerts = await writeContext.EpiUserAlerts
                         .Where(alert => alert.CdAlert == AlertType.Outbreak)
                         .Where(alert => alert.CdCounty == outbreak.CdCountyInitiating)
                         .Select(alert => new EmailQueue
            {
                IdUserRecipient = alert.IdUser,
                CdAlert         = alert.CdAlert,
                CdCounty        = alert.CdCounty,
                CdEntity        = AlertType.Outbreak,
                CdProcessed     = AlertStatus.NotSent,
                IdEntity        = outbreak.IdOutbreak.ToString()
            })
                         .ToListAsync();

            await emailService.DispatchAlerts(alerts);
        }
Esempio n. 2
0
        private async Task ReplaceEvents(
            Data.Outbreak outbreak,
            string outbreakEventType,
            IEnumerable <string> eventData,
            DateTime eventDate,
            params string[] codeType
            )
        {
            outbreak.OutbreakEvents
            .Where(e => e.CdEventType == outbreakEventType)
            .ToList()
            .ForEach(e => writeContext.OutbreakEvents.Remove(e));

            if (eventData == null)
            {
                return;
            }

            var tasks = eventData
                        .Select(async e => new OutbreakEvents
            {
                IdOutbreak  = outbreak.IdOutbreak,
                CdEventType = outbreakEventType,
                CdSubType   = e,
                DsDesc      = await codeRepository.GetDescription(e, codeType),
                DtEvent     = eventDate,
                IdEvent     = (int)await sequenceGenerator.GetNextAsync(SequenceType.OutbreakEventId),
            })
                        .ToArray();

            await Task.WhenAll(tasks);

            foreach (var task in tasks)
            {
                outbreak.OutbreakEvents.Add(task.Result);
            }
        }
Esempio n. 3
0
        private async Task EnsureOutbreakSurvey(Data.Outbreak outbreak)
        {
            //see if we need to create a survey
            //if ICD9 is not blank
            if (!string.IsNullOrWhiteSpace(outbreak.CdIcd9))
            {
                //see if a survey row for this outbreak/ICD9 exists
                bool surveyExists = await writeContext.Survey
                                    .Where(survey => survey.DtEffective <= DateTime.Now)
                                    .AnyAsync(survey => survey.CdIcd9 == outbreak.CdIcd9 &&
                                              survey.IdOutbreak == outbreak.IdOutbreak &&
                                              survey.CdSurveyType == SurveyType.OutbreakLevel);

                //if the survey does not exist, see if a template exists
                if (!surveyExists)
                {
                    var template = await writeContext.Survey
                                   .Where(survey => survey.DtEffective <= DateTime.Now)
                                   .OrderByDescending(survey => survey.DtEffective)
                                   .FirstOrDefaultAsync(survey => survey.CdIcd9 == outbreak.CdIcd9 &&
                                                        survey.CdSurveyType == SurveyType.OutbreakTemplate);

                    //if template exists, create the survey
                    if (template != null)
                    {
                        await surveyService.Execute(new CreateSurveyFromTemplate
                        {
                            OutbreakId      = outbreak.IdOutbreak,
                            SurveyIdToClone = template.IdSurvey,
                            SurveyType      = SurveyType.OutbreakLevel,
                            SurveyName      = $"{outbreak.IdOutbreak} - {outbreak.NmOutbreak}",
                            EffectiveDate   = outbreak.DtOutbreakEvent.Value
                        });
                    }
                }
            }
        }
Esempio n. 4
0
        private void ReplaceSymptoms(
            Data.Outbreak outbreak,
            IEnumerable <string> symptoms,
            string otherSymptom)
        {
            outbreak.OutbreakSymptoms.Clear();

            var symptomsToAdd = symptoms
                                .Select(symptom => new OutbreakSymptoms
            {
                CdSymptoms = symptom,
                IdOutbreak = outbreak.IdOutbreak
            });

            foreach (var symptom in symptomsToAdd)
            {
                if (symptom.CdSymptoms == SymptomType.Other)
                {
                    symptom.DsOther = otherSymptom;
                }

                outbreak.OutbreakSymptoms.Add(symptom);
            }
        }
Esempio n. 5
0
        private async Task CreateEvent(Data.Outbreak outbreak,
                                       string outbreakEventType,
                                       string type,
                                       DateTime eventDate,
                                       string subType = "")
        {
            var Id = (int)await sequenceGenerator.GetNextAsync(SequenceType.OutbreakEventId);

            for (int i = 0; i < type.Length; i += 1000)
            {
                var obEvent = new OutbreakEvents
                {
                    IdOutbreak  = outbreak.IdOutbreak,
                    CdEventType = outbreakEventType,
                    CdSubType   = subType,
                    DsDesc      = type.Substring(i, Math.Min(type.Length - i, 1000)),
                    DtEvent     = eventDate,
                    IdSequence  = i / 1000,
                    IdEvent     = Id
                };

                outbreak.OutbreakEvents.Add(obEvent);
            }
        }