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)); } }