예제 #1
0
        public async Task CheckIfAlertHasBeenHandled(int alertId)
        {
            var alert = await _nyssContext.Alerts.Where(a => a.Id == alertId)
                        .Select(a =>
                                new
            {
                a.Status,
                a.CreatedAt,
                a.ProjectHealthRisk.Project.NationalSociety.HeadManager,
                Supervisors         = a.AlertReports.Select(x => x.Report.DataCollector.Supervisor.Name),
                HealthRiskName      = a.ProjectHealthRisk.HealthRisk.LanguageContents.First().Name,
                VillageOfLastReport = a.AlertReports.OrderByDescending(ar => ar.Report.ReceivedAt)
                                      .Select(ar => ar.Report.RawReport.Village.Name)
                                      .FirstOrDefault(),
                LanguageCode = a.ProjectHealthRisk.Project.NationalSociety.ContentLanguage.LanguageCode.ToLower()
            })
                        .FirstOrDefaultAsync();

            if (alert == null)
            {
                _loggerAdapter.WarnFormat("Alert {0} not found", alertId);
                return;
            }

            if (alert.Status == AlertStatus.Pending)
            {
                _loggerAdapter.WarnFormat("Alert {0} has not been assessed since it was triggered {1}, sending email to head manager", alertId, alert.CreatedAt.ToString("O"));

                var timeSinceTriggered = (_dateTimeProvider.UtcNow - alert.CreatedAt).TotalHours;
                var emailSubject       = await GetEmailMessageContent(EmailContentKey.AlertHasNotBeenHandled.Subject, alert.LanguageCode);

                var emailBody = await GetEmailMessageContent(EmailContentKey.AlertHasNotBeenHandled.Body, alert.LanguageCode);

                emailBody = emailBody
                            .Replace("{{healthRiskName}}", alert.HealthRiskName)
                            .Replace("{{lastReportVillage}}", alert.VillageOfLastReport)
                            .Replace("{{supervisors}}", string.Join(", ", alert.Supervisors.Distinct()))
                            .Replace("{{timeSinceAlertWasTriggeredInHours}}", timeSinceTriggered.ToString("0.##"));

                await _queuePublisherService.SendEmail((alert.HeadManager.Name, alert.HeadManager.EmailAddress), emailSubject, emailBody);
            }
        }