Пример #1
0
 private bool MoveToProcessing(ImportResults importResults)
 {
     if (this.Template.ImportDirectoryHandling != Model.ImportDirectoryHandling.None)
     {
         var fileInfo            = new FileInfo(importResults.ImportFileName);
         var datePart            = DateTime.Now.ToString(Constants.DateFormattingForFileName);
         var backUpFile          = Path.Combine(importResults.Template.BackupDirectory, $"{fileInfo.Name.Substring(0, fileInfo.Name.LastIndexOf("."))}{datePart}{fileInfo.Extension}");
         var processingDirectory = Path.Combine(this.Template.ImportDirectory, "Processing");
         var newPath             = Path.Combine(processingDirectory, fileInfo.Name);
         if (File.Exists(newPath))
         {
             File.Delete(newPath);
         }
         File.Move(importResults.ImportFileName, newPath);
         if (File.Exists(newPath))
         {
             importResults.ImportFileName = newPath;
             if (this.Template.ImportDirectoryHandling == Model.ImportDirectoryHandling.Archive)
             {
                 File.Copy(importResults.ImportFileName, backUpFile, true);
             }
         }
         return(File.Exists(newPath));
     }
     return(true);
 }
Пример #2
0
        //not ready need to log any mistakes
        private bool Execute(Func <ImportResults, bool> action, ImportResults importResults, string methodName)
        {
            bool result = false;

            try {
                Stopwatch stopWatch = null;
                if (this.LogSteps)
                {
                    stopWatch = new Stopwatch();
                    stopWatch.Start();
                }
                result = action(importResults);
                if (this.LogSteps)
                {
                    Data.Log.Update.Execute(new Model.Log {
                        Notes      = $"{methodName} run took {stopWatch.ElapsedMilliseconds}ms",
                        Occurred   = DateTime.Now,
                        RanBy      = "Nathan_Carroll",
                        TemplateId = importResults.Template.TemplateId
                    });
                    stopWatch.Stop();
                }
            }
            catch (Exception ex) {
                //record ex here
                importResults.Message = ex.Message;
                result = false;
            }
            return(result);
        }
Пример #3
0
 private bool DeleteProcessingFile(ImportResults importResults)
 {
     if (this.Template.ImportDirectoryHandling != Model.ImportDirectoryHandling.None)
     {
         System.IO.File.Delete(importResults.ImportFileName);
         return(true);
     }
     return(true);
 }
Пример #4
0
 private bool SendErrorEmail(ImportResults importResults)
 {
     if (!string.IsNullOrEmpty(Template.OnErrorEmail) && Template.StartErrorId > 0)
     {
         Template.Body    = $@"Processing of {Template.ProjectGroup}: {Template.ProcessName} for the import file, {importResults.ShortName}, has failed with data issues.<br><br>The data issues are in attached file.";
         Template.Subject = "Data import error";
         Data.Template.EmailOnError.Execute(Template);
     }
     return(true);
 }
Пример #5
0
 private bool CreateWorkingTable(ImportResults importResults)
 {
     using (var conn = new SqlConnection(importResults.Template.ConnectionString)) {
         using (var cmd = new SqlCommand(importResults.Template.CreateTableComamndStatement(), conn)) {
             conn.Open();
             cmd.ExecuteNonQuery();
         }
     }
     return(true);
 }
Пример #6
0
        /// <summary>
        /// Imports only the one file
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="template"></param>
        /// <returns></returns>
        public ImportResults Single(string fileName)
        {
            var importResult = new ImportResults()
            {
                ImportFileName = fileName,
                Template       = this.Template
            };

            Execute(importResult);
            return(importResult);
        }
Пример #7
0
 private bool RunSubsequentProcedure(ImportResults importResults)
 {
     if (!string.IsNullOrEmpty(importResults.Template.LoadTransformProcedure))
     {
         using (var conn = new SqlConnection(importResults.Template.ConnectionString)) {
             using (var cmd = new SqlCommand(importResults.Template.LoadTransformProcedure, conn)) {
                 conn.Open();
                 cmd.ExecuteNonQuery();
             }
         }
     }
     return(true);
 }
Пример #8
0
 private bool PurgeFromDatabase(ImportResults importResults)
 {
     if (importResults.Template.PurgeWorkingOnEveryRun)
     {
         using (var conn = new SqlConnection(importResults.Template.ConnectionString)) {
             using (var cmd = new SqlCommand($"TRUNCATE TABLE bxl.{importResults.Template.WorkingTableName}", conn)) {
                 conn.Open();
                 cmd.ExecuteNonQuery();
             }
         }
     }
     return(true);
 }
Пример #9
0
 private bool CleanseFailedImport(ImportResults importResults)
 {
     if (importResults.Template.PurgeWorkingOnEveryRun)
     {
         using (var conn = new SqlConnection(importResults.Template.ConnectionString)) {
             using (var cmd = new SqlCommand($"DELETE FROM bxl.{importResults.Template.WorkingTableName} WHERE ImportFileName = @ImportFileName AND ImportDate = @ImportDate", conn)) {
                 cmd.Parameters.AddWithValue("@ImportFileName", importResults.ImportFileName);
                 cmd.Parameters.AddWithValue("@ImportDate", importResults.ImportDate);
                 conn.Open();
                 cmd.ExecuteNonQuery();
             }
         }
     }
     return(true);
 }
Пример #10
0
 private void Execute(ImportResults importResults)
 {
     importResults.Template.StartErrorId = 0;
     importResults.Template.EndErrorId   = 0;
     importResults.Success =
         Execute(CreateBackupDirectory, importResults, nameof(CreateBackupDirectory)) &&
         Execute(MoveToProcessing, importResults, nameof(MoveToProcessing)) &&
         Execute(CreateWorkingTable, importResults, nameof(CreateWorkingTable)) &&
         Execute(PurgeFromDatabase, importResults, nameof(PurgeFromDatabase)) ?
         Execute(DataToDatabase, importResults, nameof(DataToDatabase)) ?
         Execute(RunSubsequentProcedure, importResults, nameof(RunSubsequentProcedure)) :
         Execute(CleanseFailedImport, importResults, nameof(CleanseFailedImport))
             : false;
     //always email
     //remove the Processing File always
     Execute(DeleteProcessingFile, importResults, nameof(DeleteProcessingFile));
     Execute(SendErrorEmail, importResults, nameof(SendErrorEmail));
 }
Пример #11
0
        private List <ImportResults> GetFilesToImport()
        {
            var results = new List <ImportResults>();

            if (!string.IsNullOrEmpty(Template.ImportDirectory))
            {
                var files = System.IO.Directory.GetFiles(Template.ImportDirectory, Template.FileNamePattern);
                foreach (var file in files)
                {
                    var importResult = new ImportResults {
                        ImportFileName = file,
                        Template       = Template
                    };
                    results.Add(importResult);
                    Execute(importResult);
                }
            }
            return(results);
        }
Пример #12
0
 private bool CreateBackupDirectory(ImportResults importResults)
 {
     if (this.Template.ImportDirectoryHandling != Model.ImportDirectoryHandling.None)
     {
         var template            = importResults.Template;
         var processingDirectory = Path.Combine(this.Template.ImportDirectory, "Processing");
         template.BackupDirectory = System.IO.Path.Combine(template.ImportDirectory, DateTime.Now.Year.ToString(), DateTime.Now.Month.ToString());
         if (!Directory.Exists(template.BackupDirectory))
         {
             Directory.CreateDirectory(template.BackupDirectory);
         }
         if (!Directory.Exists(processingDirectory))
         {
             Directory.CreateDirectory(processingDirectory);
         }
         return(Directory.Exists(template.BackupDirectory) && Directory.Exists(processingDirectory));
     }
     return(true);
 }
Пример #13
0
        private bool DataToDatabase(ImportResults importResults)
        {
            var handler = Data.DataFileHandler.GetHandler(importResults.ImportFileName);

            return(handler.Import(importResults));
        }