private async Task <ManagerUser> CreateManagerUser(IdentityUser identityUser, int nationalSocietyId, CreateManagerRequestDto createManagerRequestDto) { var nationalSociety = await _dataContext.NationalSocieties.Include(ns => ns.ContentLanguage) .SingleOrDefaultAsync(ns => ns.Id == nationalSocietyId); if (nationalSociety == null) { throw new ResultException(ResultKey.User.Registration.NationalSocietyDoesNotExist); } if (nationalSociety.IsArchived) { throw new ResultException(ResultKey.User.Registration.CannotCreateUsersInArchivedNationalSociety); } var defaultUserApplicationLanguage = await _dataContext.ApplicationLanguages .SingleOrDefaultAsync(al => al.LanguageCode == nationalSociety.ContentLanguage.LanguageCode); var user = new ManagerUser { IdentityUserId = identityUser.Id, EmailAddress = identityUser.Email, Name = createManagerRequestDto.Name, PhoneNumber = createManagerRequestDto.PhoneNumber, AdditionalPhoneNumber = createManagerRequestDto.AdditionalPhoneNumber, Organization = createManagerRequestDto.Organization, ApplicationLanguage = defaultUserApplicationLanguage }; var userNationalSociety = CreateUserNationalSocietyReference(nationalSociety, user); await _dataContext.AddAsync(userNationalSociety); await _dataContext.SaveChangesAsync(); return(user); }
public async Task Handle(string queryString) { var parsedQueryString = HttpUtility.ParseQueryString(queryString); var sender = parsedQueryString[SenderParameterName]; var timestamp = parsedQueryString[TimestampParameterName]; var text = parsedQueryString[TextParameterName]; var incomingMessageId = parsedQueryString[IncomingMessageIdParameterName].ParseToNullableInt(); var outgoingMessageId = parsedQueryString[OutgoingMessageIdParameterName].ParseToNullableInt(); var modemNumber = parsedQueryString[ModemNumberParameterName].ParseToNullableInt(); var apiKey = parsedQueryString[ApiKeyParameterName]; ErrorReportData reportErrorData = null; try { Alert triggeredAlert = null; ProjectHealthRisk projectHealthRisk = null; GatewaySetting gatewaySetting = null; using (var transactionScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)) { var rawReport = new RawReport { Sender = sender, Timestamp = timestamp, ReceivedAt = _dateTimeProvider.UtcNow, Text = text, IncomingMessageId = incomingMessageId, OutgoingMessageId = outgoingMessageId, ModemNumber = modemNumber, ApiKey = apiKey }; await _nyssContext.AddAsync(rawReport); var reportValidationResult = await ParseAndValidateReport(rawReport, parsedQueryString); if (reportValidationResult.IsSuccess) { gatewaySetting = reportValidationResult.GatewaySetting; projectHealthRisk = reportValidationResult.ReportData.ProjectHealthRisk; var epiDate = _dateTimeProvider.GetEpiDate(reportValidationResult.ReportData.ReceivedAt); var report = new Report { IsTraining = reportValidationResult.ReportData.DataCollector.IsInTrainingMode, ReportType = reportValidationResult.ReportData.ParsedReport.ReportType, Status = ReportStatus.New, ReceivedAt = reportValidationResult.ReportData.ReceivedAt, CreatedAt = _dateTimeProvider.UtcNow, DataCollector = reportValidationResult.ReportData.DataCollector, EpiWeek = epiDate.EpiWeek, EpiYear = epiDate.EpiYear, PhoneNumber = sender, Location = reportValidationResult.ReportData.DataCollector.Location, ReportedCase = reportValidationResult.ReportData.ParsedReport.ReportedCase, KeptCase = new ReportCase { CountMalesBelowFive = null, CountMalesAtLeastFive = null, CountFemalesBelowFive = null, CountFemalesAtLeastFive = null }, DataCollectionPointCase = reportValidationResult.ReportData.ParsedReport.DataCollectionPointCase, ProjectHealthRisk = projectHealthRisk, ReportedCaseCount = projectHealthRisk.HealthRisk.HealthRiskType == HealthRiskType.Human ? (reportValidationResult.ReportData.ParsedReport.ReportedCase.CountFemalesAtLeastFive ?? 0) + (reportValidationResult.ReportData.ParsedReport.ReportedCase.CountFemalesBelowFive ?? 0) + (reportValidationResult.ReportData.ParsedReport.ReportedCase.CountMalesAtLeastFive ?? 0) + (reportValidationResult.ReportData.ParsedReport.ReportedCase.CountMalesBelowFive ?? 0) : 1 }; rawReport.Report = report; await _nyssContext.Reports.AddAsync(report); triggeredAlert = await _alertService.ReportAdded(report); } else { reportErrorData = reportValidationResult.ErrorReportData; gatewaySetting = reportValidationResult.GatewaySetting; } await _nyssContext.SaveChangesAsync(); transactionScope.Complete(); } if (reportErrorData == null) { if (!string.IsNullOrEmpty(gatewaySetting?.EmailAddress) && projectHealthRisk != null) { var recipients = new List <string> { sender }; await _queuePublisherService.SendSMSesViaEagle(gatewaySetting.EmailAddress, gatewaySetting.Name, recipients, projectHealthRisk.FeedbackMessage); } if (triggeredAlert != null) { await _alertService.SendNotificationsForNewAlert(triggeredAlert, gatewaySetting); } } else { await SendFeedbackOnError(reportErrorData, gatewaySetting); } } catch (ReportValidationException e) { _loggerAdapter.Warn(e.Message); } }