Exemple #1
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));
            }
        }