Пример #1
0
 public static string Everything(this TemplatedEmail email)
 {
     return
         ("{1}{0}{2}{0}{3}".FormatWith(
              Environment.NewLine + "---------------------------------" + Environment.NewLine,
              email.Subject, email.HtmlBody, email.PlainTextBody));
 }
        public ActionResult SendTestEmail(int id)
        {
            EmailTemplate emailtemplate = db.EmailTemplates.Find(id);

            if (emailtemplate == null)
            {
                return(HttpNotFound());
            }

            //AppGlobal.EmailQueue.AddToSendQueue(
            //    TemplatedEmail.EmailMessage(
            //        Permission.GetCurrentUserId(),
            //        (Constants.EmailTemplates)id,
            //        new List<EmailParameter>()));

            var emailMessage = TemplatedEmail.EmailMessage(
                Permission.GetCurrentUserId(),
                (Constants.EmailTemplates)id,
                new List <EmailParameter>());
            var response = SfaSendGridClient.SendGridEmailMessage(emailMessage, null);

            return(RedirectToAction("Edit", new { id = id }));
        }
Пример #3
0
        public static void ImportRoATPData(Object stateInfo)
        {
            Boolean automatedTaskStarted = false;

            try
            {
                if (String.IsNullOrEmpty(Constants.ConfigSettings.RoATPAPIImportTime))
                {
                    // Log Warning about RoATPAPIImportTime not being set
                    AppGlobal.Log.WriteError(AppGlobal.Language.GetText("Automation_RoATPAPIImport_ImportTimeNotConfigured", "Error Importing RoATP Data.  RoATPAPIImportTime Not Configured", false, languageId));
                    return;
                }

                if (DateTime.Now.ToString("HH:mm") == Constants.ConfigSettings.RoATPAPIImportTime)
                {
                    // Ensure that another server hasn't picked this up
                    if (!CanRunAutomatedTask(AutomatedTaskName.RoATPAPI))
                    {
                        AppGlobal.Log.WriteLog(AppGlobal.Language.GetText("Automation_RoATPImport_Running", "Automated RoATP API data import running on a different server", false, languageId));
                        return;
                    }

                    automatedTaskStarted = true;

                    // Do the import
                    new Thread(() =>
                    {
                        try
                        {
                            using (ProviderPortalEntities db = new ProviderPortalEntities())
                            {
                                List <Int32> ukprns = new List <Int32>();
                                using (RoatpApiClient client = new RoatpApiClient())
                                {
                                    foreach (SFA.Roatp.Api.Types.Provider apiProvider in client.FindAll())
                                    {
                                        if (apiProvider.ProviderType == SFA.Roatp.Api.Types.ProviderType.MainProvider)
                                        {
                                            if (apiProvider.Ukprn <= Int32.MaxValue) // Should always be but just incase
                                            {
                                                ukprns.Add(Convert.ToInt32(apiProvider.Ukprn));
                                            }
                                        }

                                        List <Provider> providers = db.Providers.Where(x => x.Ukprn == apiProvider.Ukprn && x.RecordStatusId == (Int32)Constants.RecordStatus.Live).ToList();
                                        if (providers.Count > 0)
                                        {
                                            foreach (Provider provider in providers)
                                            {
                                                RoATPProviderType providerType = db.RoATPProviderTypes.Find((Int32)apiProvider.ProviderType);
                                                if (providerType != null)
                                                {
                                                    if (provider.RoATPProviderType != providerType || provider.RoATPStartDate != apiProvider.StartDate || provider.ApprenticeshipContract != (apiProvider.ProviderType == SFA.Roatp.Api.Types.ProviderType.MainProvider))
                                                    {
                                                        // Provider found and updated - log it.
                                                        AppGlobal.Log.WriteLog(String.Format(AppGlobal.Language.GetText("Automation_RoATPImport_ProviderUpdated", "Automated RoATP API data import updated provider {0} for ukprn {1}", false, languageId), provider.ProviderId, provider.Ukprn));

                                                        provider.RoATPProviderType      = providerType;
                                                        provider.RoATPStartDate         = apiProvider.StartDate;
                                                        provider.ApprenticeshipContract = apiProvider.ProviderType == SFA.Roatp.Api.Types.ProviderType.MainProvider;
                                                        db.Entry(provider).State        = EntityState.Modified;
                                                    }
                                                }
                                            }
                                        }
                                        else
                                        {
                                            // Provider not found - log it
                                            AppGlobal.Log.WriteLog(String.Format(AppGlobal.Language.GetText("Automation_RoATPImport_ProviderNotFound", "Automated RoATP API data import no provider found for ukprn {0}", false, languageId), apiProvider.Ukprn));
                                        }
                                    }
                                }

                                // Get current apprenticeship provers who are not in the API
                                foreach (Provider provider in db.Providers.Where(x => x.ApprenticeshipContract == true && !ukprns.Contains(x.Ukprn)))
                                {
                                    // Log it
                                    AppGlobal.Log.WriteLog(String.Format(AppGlobal.Language.GetText("Automation_RoATPImport_RemovedProviderFromRoATP", "Automated RoATP API data import removed provider {0} from RoATP, ukprn {1}", false, languageId), provider.ProviderId, provider.Ukprn));

                                    provider.ApprenticeshipContract = false;
                                    db.Entry(provider).State        = EntityState.Modified;
                                }

                                // Save the changes
                                db.SaveChanges();
                            }

                            // Complete the task
                            CompleteAutomatedTask(AutomatedTaskName.RoATPAPI);
                        }
                        catch (Exception ex)
                        {
                            // Send Email
                            foreach (String address in Constants.ConfigSettings.RoATPImportErrorEmailAddress.Split(';'))
                            {
                                //AppGlobal.EmailQueue.AddToSendQueue(
                                //    TemplatedEmail.EmailMessage(
                                //        new MailAddress(address),
                                //        null,
                                //        new MailAddress(Constants.ConfigSettings.AutomatedFromEmailAddress, Constants.ConfigSettings.AutomatedFromEmailName),
                                //        Constants.EmailTemplates.RoATPImportError,
                                //        new List<EmailParameter>
                                //        {
                                //            new EmailParameter("%EXCEPTION%", ex.Message),
                                //            new EmailParameter("%STACKTRACE%", ex.StackTrace)
                                //        },
                                //        AppGlobal.Language.GetText("TemplatedEmail_EmailOverride_FormatString", "<p>This email was originally sent to {0}:<p>{1}", false, languageId)));

                                var emailMessage = TemplatedEmail.EmailMessage(
                                    new MailAddress(address),
                                    null,
                                    new MailAddress(Constants.ConfigSettings.AutomatedFromEmailAddress, Constants.ConfigSettings.AutomatedFromEmailName),
                                    Constants.EmailTemplates.RoATPImportError,
                                    new List <EmailParameter>
                                {
                                    new EmailParameter("%EXCEPTION%", ex.Message),
                                    new EmailParameter("%STACKTRACE%", ex.StackTrace)
                                },
                                    AppGlobal.Language.GetText("TemplatedEmail_EmailOverride_FormatString", "<p>This email was originally sent to {0}:<p>{1}", false, languageId));

                                var response = SfaSendGridClient.SendGridEmailMessage(emailMessage, null);
                            }

                            AppGlobal.Log.WriteError(String.Format(AppGlobal.Language.GetText("Automation_RoATPImport_GenericError", "Automated RoATP API Data Importer Failed With Error: {0}", false, languageId), ex.Message));
                            if (automatedTaskStarted)
                            {
                                CompleteAutomatedTask(AutomatedTaskName.RoATPAPI);
                            }
                        }
                    }).Start();
                }
            }
            catch (Exception ex)
            {
                AppGlobal.Log.WriteError(String.Format(AppGlobal.Language.GetText("Automation_RoATPImport_GenericError", "Automated RoATP API Data Importer Failed With Error: {0}", false, languageId), ex.Message));
                if (automatedTaskStarted)
                {
                    CompleteAutomatedTask(AutomatedTaskName.RoATPAPI);
                }
            }
        }
Пример #4
0
        static void webClient_LARSDownloadFileCompleted(Object sender, System.ComponentModel.AsyncCompletedEventArgs e)
        {
            try
            {
                if (e.Error != null)
                {
                    EmptyLARSFolder();

                    // Log Error Downloading File
                    AppGlobal.Log.WriteError(String.Format(AppGlobal.Language.GetText("Automation_LARSImport_Error", "Error Importing LARS File: {0}", false, languageId), e.Error.Message));
                    return;
                }

                if (String.IsNullOrEmpty(Constants.ConfigSettings.LARSImportUserId))
                {
                    // Already checked so unlikely but if we do get here then delete the downloaded file
                    EmptyLARSFolder();

                    // Log Warning about LARSImportUserId not being set
                    AppGlobal.Log.WriteError(AppGlobal.Language.GetText("Automation_LARSImport_UserIdNotConfigured", "Error Importing LARS File.  LARSImportUserId Not Configured", false, languageId));
                    return;
                }

                AspNetUser aspNetUser = new ProviderPortalEntities().AspNetUsers.Find(Constants.ConfigSettings.LARSImportUserId);
                if (aspNetUser == null)
                {
                    // Already checked so unlikely but if we do get here then delete the downloaded file
                    EmptyLARSFolder();

                    // Log Error
                    AppGlobal.Log.WriteError(String.Format(AppGlobal.Language.GetText("Automation_LARSImport_UserIdNotFound", "Error Importing LARS File.  Cannot find user Id {0}", false, languageId), Constants.ConfigSettings.LARSImportUserId));
                    return;
                }

                // Import the data
                LARSController.ImportLARSFile(aspNetUser.Id, languageId);

                // Log Success!!
                AppGlobal.Log.WriteLog(String.Format(AppGlobal.Language.GetText("Automation_LARSImport_Success", "Succesfully Imported LARS File: {0}", false, languageId), GetFileName(LARSFilename)));
            }
            catch (Exception ex)
            {
                // Log Error
                AppGlobal.Log.WriteError(String.Format(AppGlobal.Language.GetText("Automation_LARSImport_Error", "Error Importing LARS File: {0}", false, languageId), ex.Message));

                // Send Email
                foreach (String address in Constants.ConfigSettings.LARSImportErrorEmailAddress.Split(';'))
                {
                    //AppGlobal.EmailQueue.AddToSendQueue(
                    //    TemplatedEmail.EmailMessage(
                    //        new MailAddress(address),
                    //        null,
                    //        new MailAddress(Constants.ConfigSettings.AutomatedFromEmailAddress, Constants.ConfigSettings.AutomatedFromEmailName),
                    //        Constants.EmailTemplates.LARSImportError,
                    //        new List<EmailParameter>
                    //        {
                    //            new EmailParameter("%EXCEPTION%", ex.Message),
                    //            new EmailParameter("%STACKTRACE%", ex.StackTrace),
                    //            new EmailParameter("%FILENAME%", GetFileName(LARSFilename))
                    //        },
                    //        AppGlobal.Language.GetText("TemplatedEmail_EmailOverride_FormatString", "<p>This email was originally sent to {0}:<p>{1}", false, languageId)));

                    var emailMessage = TemplatedEmail.EmailMessage(
                        new MailAddress(address),
                        null,
                        new MailAddress(Constants.ConfigSettings.AutomatedFromEmailAddress, Constants.ConfigSettings.AutomatedFromEmailName),
                        Constants.EmailTemplates.LARSImportError,
                        new List <EmailParameter>
                    {
                        new EmailParameter("%EXCEPTION%", ex.Message),
                        new EmailParameter("%STACKTRACE%", ex.StackTrace),
                        new EmailParameter("%FILENAME%", GetFileName(LARSFilename))
                    },
                        AppGlobal.Language.GetText("TemplatedEmail_EmailOverride_FormatString", "<p>This email was originally sent to {0}:<p>{1}", false, languageId));

                    var response = SfaSendGridClient.SendGridEmailMessage(emailMessage, null);
                }
            }
            finally
            {
                EmptyLARSFolder();
            }
        }
Пример #5
0
        public static void CheckLARSDownload(Object stateInfo)
        {
            Boolean automatedTaskStarted = false;

            try
            {
                if (String.IsNullOrEmpty(Constants.ConfigSettings.LARSImportTime))
                {
                    // Log Warning about LARSImportTime not being set
                    AppGlobal.Log.WriteError(AppGlobal.Language.GetText("Automation_LARSImport_LARSImportTimeNotConfigured", "Error Importing LARS File.  LARSImportTime Not Configured", false, languageId));
                    return;
                }

                LARSFolder = Constants.ConfigSettings.LARSUploadVirtualDirectoryName;
                if (LARSFolder.EndsWith(@"\"))
                {
                    LARSFolder = LARSFolder.Substring(0, LARSFolder.Length - 1);
                }

                // Check if config setting is valid
                if (String.IsNullOrEmpty(LARSFolder) || !Directory.Exists(LARSFolder))
                {
                    AppGlobal.Log.WriteError(String.Format(AppGlobal.Language.GetText("Automation_LARSImport_LARSFolderNotConfigured", "Error Importing LARS File.  LARSFolderNotConfigured Not Configured Correctly: {0}", false, languageId), LARSFolder));
                    return;
                }

                if (String.IsNullOrEmpty(Constants.ConfigSettings.LARSImportUserId))
                {
                    // Log Warning about LARSImportUserId not being set
                    AppGlobal.Log.WriteError(AppGlobal.Language.GetText("Automation_LARSImport_UserIdNotConfigured", "Error Importing LARS File.  LARSImportUserId Not Configured", false, languageId));
                    return;
                }

                AspNetUser aspNetUser = new ProviderPortalEntities().AspNetUsers.Find(Constants.ConfigSettings["LARSImportUserId"].ToString());
                if (aspNetUser == null)
                {
                    // Log Error
                    AppGlobal.Log.WriteError(String.Format(AppGlobal.Language.GetText("Automation_LARSImport_UserIdNotFound", "Error Importing LARS File.  Cannot find user Id {0}", false, languageId), Constants.ConfigSettings["LARSImportUserId"]));
                    return;
                }

                if (DateTime.Now.ToString("HH:mm") == Constants.ConfigSettings.LARSImportTime)
                {
                    // Ensure that another server hasn't picked this up
                    if (!CanRunAutomatedTask(AutomatedTaskName.LARSImport))
                    {
                        AppGlobal.Log.WriteLog(AppGlobal.Language.GetText("Automation_LARSImport_Running", "Automated LARS import running on a different server", false, languageId));
                        return;
                    }

                    automatedTaskStarted = true;

                    DateTime date       = DateTime.Today;
                    DateTime lastImport = DateTime.MinValue.Date;

                    MetadataUpload mtu = new ProviderPortalEntities().MetadataUploads.Where(x => x.MetadataUploadTypeId == (Int32)Constants.MetadataUploadType.LearningAim).OrderByDescending(x => x.CreatedDateTimeUtc).FirstOrDefault();
                    if (mtu != null)
                    {
                        lastImport = mtu.CreatedDateTimeUtc.Date;
                    }

                    Boolean fileFound = false;
                    String  fileName  = String.Empty;
                    while (date > lastImport)
                    {
                        fileName = Constants.ConfigSettings.LARSUrlAndFileName.Replace("{date}", date.ToString("yyyyMMdd")).Replace("{year}", GetLastYear());
                        if (DoesFileExistAtUrl(fileName))
                        {
                            fileFound = true;
                            break;
                        }
                        fileName = Constants.ConfigSettings.LARSUrlAndFileName.Replace("{date}", date.ToString("yyyyMMdd")).Replace("{year}", GetThisYear());
                        if (DoesFileExistAtUrl(fileName))
                        {
                            fileFound = true;
                            break;
                        }

                        date = date.AddDays(-1);
                    }

                    if (fileFound)
                    {
                        AppGlobal.Log.WriteLog(String.Format(AppGlobal.Language.GetText("Automation_LARSImport_FileFound", "Found LARS File {0}.  Importing...", false, languageId), fileName));

                        // Download the file
                        using (WebClient webClient = new WebClient())
                        {
                            LARSFilename = LARSFolder + @"\" + GetFileName(fileName);
                            webClient.DownloadFileCompleted += webClient_LARSDownloadFileCompleted;
                            webClient.DownloadFileAsync(new Uri(fileName), LARSFilename);
                        }
                    }
                    else
                    {
                        CompleteAutomatedTask(AutomatedTaskName.LARSImport);

                        AppGlobal.Log.WriteLog(AppGlobal.Language.GetText("Automation_LARSImport_NoFileFound", "No Updated LARS File Found", false, languageId));
                        AppGlobal.Log.WriteLog(String.Format(AppGlobal.Language.GetText("Automation_LARSImport_NoOfDaysSinceLastImport", "{0} day(s) since last LARS import.", false, languageId), (DateTime.Now - lastImport).Days));

                        // Check if we need to send an email
                        Int32 daysBeforeSendingEmail = Constants.ConfigSettings.LARSDaysSinceLastImportBeforeSendingEmail;
                        if (daysBeforeSendingEmail > 0)
                        {
                            TimeSpan ts = TimeSpan.FromDays(daysBeforeSendingEmail);
                            if (DateTime.Today - lastImport >= ts)
                            {
                                // Send email once per week
                                if ((DateTime.Today - lastImport).Subtract(ts).Days % 7 == 0)
                                {
                                    AppGlobal.Log.WriteLog(AppGlobal.Language.GetText("Automation_LARSImport_SendingWarningEmail", "LARS Importer: Sending warning email.", false, languageId));

                                    if (String.IsNullOrWhiteSpace(Constants.ConfigSettings.LARSLongTimeSinceImportEmailAddress))
                                    {
                                        AppGlobal.Log.WriteLog(AppGlobal.Language.GetText("Automation_LARSImport_LARSLongTimeSinceImportEmailAddressNotConfigured", "LARSLongTimeSinceImportEmailAddress Not Configured", false, languageId));
                                    }
                                    else if (!AppGlobal.IsValidEmail(Constants.ConfigSettings.LARSLongTimeSinceImportEmailAddress))
                                    {
                                        AppGlobal.Log.WriteError(String.Format(AppGlobal.Language.GetText("Automation_LARSImport_LARSLongTimeSinceImportEmailAddressInvalid", "LARSLongTimeSinceImportEmailAddress is Invalid: {0}", false, languageId), Constants.ConfigSettings.LARSLongTimeSinceImportEmailAddress));
                                    }
                                    else
                                    {
                                        // Send email(s)
                                        foreach (String address in Constants.ConfigSettings.LARSLongTimeSinceImportEmailAddress.Split(';'))
                                        {
                                            //AppGlobal.EmailQueue.AddToSendQueue(
                                            //    TemplatedEmail.EmailMessage(
                                            //        new MailAddress(address),
                                            //        null,
                                            //        new MailAddress(Constants.ConfigSettings.AutomatedFromEmailAddress, Constants.ConfigSettings.AutomatedFromEmailName),
                                            //        Constants.EmailTemplates.LARSFileNotImportSinceXDaysAgo,
                                            //        new List<EmailParameter>
                                            //        {
                                            //            new EmailParameter("%LASTIMPORT%", lastImport.ToString("dd MMM yyyy")),
                                            //            new EmailParameter("%NUMBEROFDAYSSINCELASTIMPORT%", (DateTime.Today - lastImport).Days.ToString("N0")),
                                            //            new EmailParameter("%CONFIGUREDNUMBEROFDAYS%", daysBeforeSendingEmail.ToString("N0"))
                                            //        },
                                            //        AppGlobal.Language.GetText("TemplatedEmail_EmailOverride_FormatString", "<p>This email was originally sent to {0}:<p>{1}", false, languageId)));

                                            var emailMessage = TemplatedEmail.EmailMessage(
                                                new MailAddress(address),
                                                null,
                                                new MailAddress(Constants.ConfigSettings.AutomatedFromEmailAddress, Constants.ConfigSettings.AutomatedFromEmailName),
                                                Constants.EmailTemplates.LARSFileNotImportSinceXDaysAgo,
                                                new List <EmailParameter>
                                            {
                                                new EmailParameter("%LASTIMPORT%", lastImport.ToString("dd MMM yyyy")),
                                                new EmailParameter("%NUMBEROFDAYSSINCELASTIMPORT%", (DateTime.Today - lastImport).Days.ToString("N0")),
                                                new EmailParameter("%CONFIGUREDNUMBEROFDAYS%", daysBeforeSendingEmail.ToString("N0"))
                                            },
                                                AppGlobal.Language.GetText("TemplatedEmail_EmailOverride_FormatString", "<p>This email was originally sent to {0}:<p>{1}", false, languageId));

                                            var response = SfaSendGridClient.SendGridEmailMessage(emailMessage, null);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                if (automatedTaskStarted)
                {
                    CompleteAutomatedTask(AutomatedTaskName.LARSImport);
                }
                AppGlobal.Log.WriteError(String.Format(AppGlobal.Language.GetText("Automation_LARSImport_GenericError", "Automated LARS Importer Failed With Error: {0}", false, languageId), ex.Message));
            }
        }
Пример #6
0
        private void SendProviderTrafficLightStatusEmails(Dictionary <int, ProviderTrafficLightStatusViewModel.ProviderTrafficLightEmail> providers, DateTime today)
        {
            if (!providers.Any())
            {
                return;
            }

            var sendToProviderIds = providers.Values
                                    .Where(x => x.EmailTemplateId != null)
                                    .Where(x => !x.QualityEmailsPaused)
                                    .Select(x => x.ProviderId)
                                    .ToList();
            var superUsers = ProvisionUtilities.GetProviderUsers(db, sendToProviderIds, false, true);

            // Send the emails out
            foreach (var user in superUsers)
            {
                if (!providers.ContainsKey(user.ProviderId))
                {
                    continue;
                }
                var provider = providers[user.ProviderId];
                if (provider.EmailTemplateId == null)
                {
                    continue;
                }
                provider.HasValidRecipients = true;

                //AppGlobal.EmailQueue.AddToSendQueue(
                //    TemplatedEmail.EmailMessage(
                //        new MailAddress(user.Email, user.Name),
                //        null,
                //        null,
                //        provider.EmailTemplateId.Value,
                //        new List<EmailParameter>
                //        {
                //            new EmailParameter("%PROVIDERNAME%", provider.ProviderName),
                //            new EmailParameter("%LASTUPDATEDATE%",
                //                provider.ModifiedDateTimeUtc.HasValue
                //                    ? provider.ModifiedDateTimeUtc.Value.ToString(
                //                        Constants.ConfigSettings.ShortDateFormat)
                //                    : AppGlobal.Language.GetText(this, "NeverUpdated", "never")),
                //            new EmailParameter("%MONTHSSINCEUPDATE%",
                //                provider.ModifiedDateTimeUtc.HasValue
                //                ? QualityIndicator.GetMonthsBetween(provider.ModifiedDateTimeUtc.Value, DateTime.UtcNow).ToString()
                //                : NewProviderGracePeriod.ToString(CultureInfo.InvariantCulture))
                //        }));

                var emailMessage = TemplatedEmail.EmailMessage(
                    new MailAddress(user.Email, user.Name),
                    null,
                    null,
                    provider.EmailTemplateId.Value,
                    new List <EmailParameter>
                {
                    new EmailParameter("%PROVIDERNAME%", provider.ProviderName),
                    new EmailParameter("%LASTUPDATEDATE%",
                                       provider.ModifiedDateTimeUtc.HasValue
                                    ? provider.ModifiedDateTimeUtc.Value.ToString(
                                           Constants.ConfigSettings.ShortDateFormat)
                                    : AppGlobal.Language.GetText(this, "NeverUpdated", "never")),
                    new EmailParameter("%MONTHSSINCEUPDATE%",
                                       provider.ModifiedDateTimeUtc.HasValue
                                ? QualityIndicator.GetMonthsBetween(provider.ModifiedDateTimeUtc.Value, DateTime.UtcNow).ToString()
                                : NewProviderGracePeriod.ToString(CultureInfo.InvariantCulture))
                });

                var response = SfaSendGridClient.SendGridEmailMessage(emailMessage, null);
            }

            // Update the providers
            foreach (var providerId in sendToProviderIds)
            {
                var provider = new Provider
                {
                    ProviderId = providerId,
                    TrafficLightEmailDateTimeUtc = today
                };

                db.Providers.Attach(provider);
                db.Entry(provider).Property(x => x.TrafficLightEmailDateTimeUtc).IsModified = true;

                providers[providerId].EmailDateTimeUtc = today;
            }

            db.Configuration.ValidateOnSaveEnabled = false;
            db.SaveChanges();
        }