Example #1
0
        public void MoveToErrorTest()
        {
            string errorMsg    = "";
            var    testUser    = GetTestUser();
            var    testCompany = GetTestCompany(testUser);

            // Create a temp file
            var tempFile = GetTempFile(".txt");

            File.WriteAllText(tempFile, LorumIpsum());

            // Now archive it
            var dts    = new DataTransferService.DataTransferService(db);
            var config = createDataTransfer(testCompany, testUser);

            bool bRc = dts.MoveToError(config, tempFile, ref errorMsg);

            Assert.IsTrue(bRc == false, errorMsg);

            // Check if the file has been moved
            Assert.IsTrue(!File.Exists(tempFile), $"Error: File '{tempFile}' still exists when it should have been deleted");

            string newTarget = config.ErrorFolder.AddString("\\") + tempFile.FileName();

            Assert.IsTrue(File.Exists(newTarget), $"Error: File '{newTarget}' could not be found in its error location");
        }
        private void MoveFileToErrorFolder(DataTransferService.DataTransferService dts, FileTransferConfigurationModel config, string fileName)
        {
            string errorMsg = "";

            if (dts.MoveToError(config, fileName, ref errorMsg))
            {
                TaskService.WriteTaskLog(this.Task, $"Failed to move to Error folder\r\n{errorMsg}", LogSeverity.Severe);
            }
            else
            {
                TaskService.WriteTaskLog(this.Task, $"File '{fileName}' has been moved to the Error folder", LogSeverity.Severe);
            }
        }
        public override int DoProcessing(string[] args)
        {
            // This service transfers files which have been placed in the folder specified
            // by the parameter profile

            // TaskProcessor.exe DATATRANSFERTASK datatransferprofilename
            if (args.Length != 2)
            {
                WriteTaskLog($"Error: Incorrect parameters!\r\nUsage: TaskProcessor.exe DATATRANSFERTASK datatransferprofilename");
            }
            else
            {
                DataTransferService.DataTransferService dts = new DataTransferService.DataTransferService(_db);

                var profileName = args[1];
                var config      = dts.FindDataTransferConfigurationModel(profileName);
                if (config == null)
                {
                    WriteTaskLog($"Error: Parameter profile '{profileName}' could not be found!");
                }
                else
                {
                    WriteTaskLog($"Running transfer profile '{profileName}'");

                    if (config.TransferType == FileTransferType.Send)
                    {
                        sendFiles(config);
                    }
                    else if (config.TransferType == FileTransferType.Receive)
                    {
                        receiveFiles(config);
                    }

                    // Handle the post-transfer processing
                    if (!string.IsNullOrEmpty(config.PostTransferCommand))
                    {
                        WriteTaskLog($"Running post-transfer process '{config.PostTransferCommand} {config.PostTransferParameters}'");

                        var error = SystemService.SystemService.WinExec(config.PostTransferCommand,
                                                                        config.PostTransferParameters);
                        if (error.IsError)
                        {
                            WriteTaskLog(error.Message, LogSeverity.Severe);
                        }
                    }
                }
            }

            return(0);
        }
        public override int DoProcessing(string[] args)
        {
            var shopifyImportService = new ShopifyImportService.ShopifyImportService(_db);

            DataTransferService.DataTransferService dts = new DataTransferService.DataTransferService(_db);

            int    i           = 1;
            var    profileName = GetTaskParameter($"DataTransfer{1}", "");
            var    taskUser    = GetTaskUser();
            string errorMsg    = "";

            var config = dts.FindDataTransferConfigurationModel(profileName);

            if (config == null)
            {
                TaskService.WriteTaskLog(this.Task, $"Error: Failed to find Data Transfer configuration '{profileName}' !");
            }
            else
            {
                string fileLoc = config.TargetFolder;
                while (!string.IsNullOrEmpty(fileLoc))
                {
                    string   businessName = GetTaskParameter($"BusinessName{i}", "");
                    string[] files        = null;
                    try {
                        files = Directory.GetFiles(fileLoc);
                    } catch (Exception ex) {
                        TaskService.WriteTaskLog(this.Task, $"Error: There was a problem getting files from '{fileLoc}'\r\n" + ex, LogSeverity.Severe);
                    }

                    if (files.Length > 0 && files != null)
                    {
                        foreach (string fileName in files)
                        {
                            // Process File
                            TaskService.WriteTaskLog(this.Task, $"Success: Processing file '{fileName}'", LogSeverity.Normal);
                            ShopifyImportTempModel.Data shopifyTempModel = null;
                            try {
                                shopifyTempModel = shopifyImportService.ProcessXml(fileName, businessName);
                            } catch (Exception ex) {
                                TaskService.WriteTaskLog(this.Task, $"Error: Could not process file '{fileName}'\r\n" + ex, LogSeverity.Severe);
                                //MoveFileToErrorFolder(dts, config, fileName);
                            }

                            if (shopifyTempModel != null)
                            {
                                List <ShopifyImportHeaderTemp> sihtList = new List <ShopifyImportHeaderTemp>();

                                // Map each order to TEMP
                                foreach (var order in shopifyTempModel.Order)
                                {
                                    try {
                                        Dictionary <string, string> configDetails = LookupConfigDetails(order.StoreName);
                                        if (configDetails.Count > 0)
                                        {
                                            ShopifyImportHeaderTemp siht = new ShopifyImportHeaderTemp();
                                            siht = shopifyImportService.MapOrderToTemp(businessName, configDetails, order, taskUser);
                                            sihtList.Add(siht);
                                        }
                                        else
                                        {
                                            TaskService.WriteTaskLog(this.Task, $"Error: Configuration Setting are not setup", LogSeverity.Severe);
                                        }
                                    } catch (Exception ex) {
                                        TaskService.WriteTaskLog(this.Task, $"Error: Could not map order (#{order.OrderNumber}) details to temp table\r\n" + ex, LogSeverity.Severe);
                                        //MoveFileToErrorFolder(dts, config, fileName);
                                        break;
                                    }
                                }

                                if (sihtList.Count > 0 && sihtList.Count == shopifyTempModel.Order.Length)   // AND COUNT = THE ACTUAL NUMBER OF ORDERS IN THE XML FILE
                                // Save temp to db
                                {
                                    try {
                                        shopifyImportService.SaveDataToTempTables(sihtList);
                                        TaskService.WriteTaskLog(this.Task, $"Success: Saved '{fileName}' temp table", LogSeverity.Normal);

                                        // Get Temp table data
                                        try {
                                            sihtList = shopifyImportService.GetShopifyTempTableData();
                                            if (sihtList.Count > 0)
                                            {
                                                try {
                                                    // CopyTempDataToSalesModel
                                                    List <SalesOrderHeader> orders = shopifyImportService.CopyTempDataToSalesModel(sihtList, businessName);
                                                    if (orders.Count > 0)
                                                    {
                                                        if (shopifyImportService.SaveSalesOrders(orders))
                                                        {
                                                            TaskService.WriteTaskLog(this.Task, $"Success: Data Saved to Sales tables", LogSeverity.Normal);

                                                            // Move file to Archive folder
                                                            if (dts.MoveToArchive(config, fileName, ref errorMsg))
                                                            {
                                                                TaskService.WriteTaskLog(this.Task, $"Failed to move to Archive folder\r\n{errorMsg}", LogSeverity.Severe);
                                                            }
                                                            else
                                                            {
                                                                TaskService.WriteTaskLog(this.Task, $"Successfully moved file '{fileName}' to Archive folder", LogSeverity.Normal);
                                                            }
                                                        }
                                                        else
                                                        {
                                                            // Move file to Error folder
                                                            MoveFileToErrorFolder(dts, config, fileName);
                                                        }
                                                    }
                                                    else
                                                    {
                                                        TaskService.WriteTaskLog(this.Task, $"Error: Could not retrieve any orders from the temp table/s", LogSeverity.Severe);
                                                        MoveFileToErrorFolder(dts, config, fileName);
                                                    }
                                                } catch (Exception ex) {
                                                    TaskService.WriteTaskLog(this.Task, $"Error: Could not copy data to sales table/s\r\n" + ex, LogSeverity.Severe);
                                                    MoveFileToErrorFolder(dts, config, fileName);
                                                }
                                            }
                                        } catch (Exception ex) {
                                            TaskService.WriteTaskLog(this.Task, $"Error: Failed to get temp data from database\r\n" + ex, LogSeverity.Severe);
                                            MoveFileToErrorFolder(dts, config, fileName);
                                        }
                                    } catch (Exception ex) {
                                        TaskService.WriteTaskLog(this.Task, $"Error: Failed to save data to the temp table/s\r\n" + ex, LogSeverity.Severe);
                                        MoveFileToErrorFolder(dts, config, fileName);
                                    }
                                }
                            }
                            else
                            {
                                TaskService.WriteTaskLog(this.Task, $"Error: The file '{fileName}' was empty", LogSeverity.Severe);
                                MoveFileToErrorFolder(dts, config, fileName);
                            }
                            MoveFileToErrorFolder(dts, config, fileName);
                        }
                    }
                    else
                    {
                        TaskService.WriteTaskLog(this.Task, $"INFO: There were no files to process.'", LogSeverity.Normal);
                    }
                    i++;
                    profileName = GetTaskParameter($"DataTransfer{i}", "");
                    config      = dts.FindDataTransferConfigurationModel(profileName);
                    fileLoc     = (config != null) ? config.TargetFolder : "";
                }
            }
            return(0);
        }
        public override int DoProcessing(string[] args)
        {
            var pepperiImportService = new PepperiImportService.PepperiImportService(_db);

            DataTransferService.DataTransferService dts = new DataTransferService.DataTransferService(_db);

            int    i           = 1;
            var    profileName = GetTaskParameter($"DataTransfer{i}", "");
            var    taskUser    = GetTaskUser();
            string errorMsg    = "";

            var config = dts.FindDataTransferConfigurationModel(profileName);

            if (config == null)
            {
                TaskService.WriteTaskLog(this.Task, $"Error: Failed to find Data Transfer configuration '{profileName}' !");
            }
            else
            {
                string fileLoc = config.TargetFolder;
                while (!string.IsNullOrEmpty(fileLoc))
                {
                    string businessName = GetTaskParameter($"BusinessName{i}", "");

                    string[] files = Directory.GetFiles(fileLoc);
                    if (files.Length > 0 && files != null)
                    {
                        foreach (string fileName in files)
                        {
                            if (pepperiImportService.ProcessXml(fileName, businessName, taskUser, this.Task))
                            {
                                if (dts.MoveToArchive(config, fileName, ref errorMsg))
                                {
                                    TaskService.WriteTaskLog(this.Task, $"Failed to move to Archive folder/r/n{errorMsg}", LogSeverity.Severe);
                                }
                                else
                                {
                                    TaskService.WriteTaskLog(this.Task, $"Successfully moved file '{fileName}' to Archive folder", LogSeverity.Normal);
                                }
                            }
                            else
                            {
                                if (dts.MoveToError(config, fileName, ref errorMsg))
                                {
                                    TaskService.WriteTaskLog(this.Task, $"Failed to move to Error folder/r/n{errorMsg}", LogSeverity.Severe);
                                }
                                else
                                {
                                    TaskService.WriteTaskLog(this.Task, $"File '{fileName}' has been moved to the Error folder", LogSeverity.Severe);
                                }
                            }
                        }
                    }
                    else
                    {
                        TaskService.WriteTaskLog(this.Task, $"Warning: There are no files to import", LogSeverity.Normal);
                    }

                    i++;
                    profileName = GetTaskParameter($"DataTransfer{i}", "");
                    config      = dts.FindDataTransferConfigurationModel(profileName);
                    fileLoc     = (config != null) ? config.TargetFolder : "";
                }
            }
            return(0);
        }
        public override int DoProcessing(string[] args)
        {
            // This task retrieves unpack slips from a warehouse.
            // It uses the transfers configured in the task properties.
            // TaskProcessor.exe UNPACKRECEIVER datatransferprofilename
            if (args.Length != 2)
            {
                WriteTaskLog($"Error: Incorrect parameters!\r\nUsage: TaskProcessor.exe UNPACKRECEIVER datatransferprofilename");
            }
            else
            {
                string errorMsg = "";

                user = GetTaskUser();
                if (user != null)
                {
                    DataTransferService.DataTransferService dts = new DataTransferService.DataTransferService(_db);

                    string taskName = args[1];
                    var    config   = dts.FindDataTransferConfigurationModel(taskName);
                    if (config == null)
                    {
                        WriteTaskLog($"Warning: Task {taskName} cound not be found!", LogSeverity.Warning);
                    }
                    else
                    {
                        // Retrieve files from the warehouse
                        WriteTaskLog("Downloading files from: " + config.TransferName);
                        var ftpService = new FTPService.FTPService(config.FTPHost, config.UserId, config.Password, config.Protocol);

                        var fileList = new List <string>();
                        if (ftpService.GetFTPFileList(config.SourceFolder, ref fileList, ref errorMsg))
                        {
                            WriteTaskLog(errorMsg, LogSeverity.Severe);
                        }
                        else
                        {
                            // Download files one at a time and as each is successfully downloaded,
                            // archive of delete it on the FTP host.
                            // This ensures that if we have a comms failure, the local drive and FTP host are in
                            // sync and we prevent repeated loads of the same file.
                            FileManagerService.FileManagerService.CreateFolder(config.TargetFolder.TrimEnd('\\'));

                            foreach (var fileName in fileList)
                            {
                                var downloadedFile = new List <string>();
                                var result         = ftpService.DownloadFile(fileName,
                                                                             config.TargetFolder.TrimEnd('\\') + "\\" + fileName.FileName(),
                                                                             downloadedFile,
                                                                             ref errorMsg);
                                _db.LogTestFile(downloadedFile);
                                if (result)
                                {
                                    WriteTaskLog(errorMsg, LogSeverity.Severe);
                                }
                                else
                                {
                                    // Delete or archive the source files of those which were retrieved
                                    result = ftpService.DeleteFile(fileName, ref errorMsg);
                                    if (result)
                                    {
                                        WriteTaskLog(errorMsg, LogSeverity.Severe);
                                    }
                                }
                            }

                            // Process the files received
                            processFiles(config);
                        }
                    }
                }
            }

            return(0);
        }
Example #7
0
        public override int DoProcessing(string[] args)
        {
            var nuOrderImportService = new NuOrderImportService.NuOrderImportService(_db);

            DataTransferService.DataTransferService dts = new DataTransferService.DataTransferService(_db);

            int    i           = 1;
            var    profileName = GetTaskParameter($"DataTransfer{1}", "");
            var    taskUser    = GetTaskUser();
            string errorMsg    = "";

            var config = dts.FindDataTransferConfigurationModel(profileName);

            if (config == null)
            {
                TaskService.WriteTaskLog(this.Task, $"Error: Failed to find Data Transfer configuration '{profileName}' !");
            }
            else
            {
                string fileLoc = config.TargetFolder;
                while (!string.IsNullOrEmpty(fileLoc))
                {
                    string   businessName = GetTaskParameter($"BusinessName{i}", "");;
                    string[] files        = null;
                    try {
                        files = Directory.GetFiles(fileLoc);
                    } catch (Exception ex) {
                        TaskService.WriteTaskLog(this.Task, $"Error: There was a problem getting files from '{fileLoc}'\r\n" + ex, LogSeverity.Severe);
                    }

                    if (files.Length > 0 && files != null)
                    {
                        foreach (string fileName in files)
                        {
                            // ProcessFile
                            TaskService.WriteTaskLog(this.Task, $"Success: Processing file '{fileName}'", LogSeverity.Normal);
                            List <Dictionary <string, string> > orderLines = null;
                            try {
                                orderLines = nuOrderImportService.ProcessFile(fileName, businessName);
                            } catch (Exception ex) {
                                TaskService.WriteTaskLog(this.Task, $"Error: Could not process file '{fileName}'\r\n" + ex, LogSeverity.Severe);
                            }

                            if (orderLines != null || orderLines.Count == 0)
                            {
                                List <NuOrderImportTemp> nuOrderImportTempList = new List <NuOrderImportTemp>();

                                // MapFileToTemp
                                try {
                                    nuOrderImportTempList = nuOrderImportService.MapFileToTemp(businessName, orderLines, taskUser);
                                    TaskService.WriteTaskLog(this.Task, $"Success: Saved '{fileName}' temp table", LogSeverity.Normal);

                                    // GetTempTableData
                                    try {
                                        nuOrderImportTempList = nuOrderImportService.GetTempTableData();
                                    } catch (Exception ex) {
                                        TaskService.WriteTaskLog(this.Task, $"Error: Failed to get temp data from database\r\n" + ex, LogSeverity.Severe);
                                    }

                                    // CopyTempToProduction & Move to file to appropriate folder
                                    if (nuOrderImportTempList.Count > 0)
                                    {
                                        try {
                                            if (nuOrderImportService.CopyTempDataToProduction(nuOrderImportTempList, businessName))
                                            {
                                                TaskService.WriteTaskLog(this.Task, $"Success: Data Saved to Sales tables", LogSeverity.Normal);

                                                if (dts.MoveToArchive(config, fileName, ref errorMsg))
                                                {
                                                    TaskService.WriteTaskLog(this.Task, $"Failed to move to Archive folder\r\n{errorMsg}", LogSeverity.Severe);
                                                }
                                                else
                                                {
                                                    TaskService.WriteTaskLog(this.Task, $"Successfully moved file '{fileName}' to Archive folder", LogSeverity.Normal);
                                                }
                                            }
                                            else
                                            {
                                                MoveFileToErrorFolder(dts, config, fileName);
                                            }
                                        } catch (Exception ex) {
                                            TaskService.WriteTaskLog(this.Task, $"Error: Could not copy data to sales table/s\r\n" + ex, LogSeverity.Severe);
                                            MoveFileToErrorFolder(dts, config, fileName);
                                        }
                                    }
                                } catch (Exception ex) {
                                    TaskService.WriteTaskLog(this.Task, $"Error: Failed to map '{fileName}'\r\n" + ex, LogSeverity.Severe);
                                    MoveFileToErrorFolder(dts, config, fileName);
                                }
                            }
                            else
                            {
                                TaskService.WriteTaskLog(this.Task, $"Error: The file '{fileName}' was empty", LogSeverity.Severe);
                                MoveFileToErrorFolder(dts, config, fileName);
                            }
                        }
                    }
                    else
                    {
                        TaskService.WriteTaskLog(this.Task, $"INFO: There were no files to process.'", LogSeverity.Normal);
                    }
                    i++;
                    profileName = GetTaskParameter($"DataTransfer{i}", "");
                    config      = dts.FindDataTransferConfigurationModel(profileName);
                    fileLoc     = (config != null) ? config.TargetFolder : "";
                }
            }
            return(0);
        }