예제 #1
0
        private EpsOutputTask GetEpsPrintTask(EpsOutput epsOutput, string printerName = "some physical printer",
                                              int copies = 1)
        {
            var task = new EpsOutputTask
            {
                Output           = epsOutput,
                OutputTaskCode   = EpsOutputTaskCodes.OTC_PRINT,
                OutputTaskOrder  = 1,
                OutputTaskStatus = OutputStatuses.OS_NEW
            };

            task.OutputTask_EpsOutputParam_List = new Quartz.Collection.HashSet <EpsOutputParam>
            {
                new EpsOutputParam
                {
                    Output           = epsOutput,
                    OutputTask       = task,
                    OutputParamCode  = EpsTaskParameterTypes.Copies,
                    OutputParamValue = copies.ToString()
                },
                new EpsOutputParam
                {
                    Output           = epsOutput,
                    OutputTask       = task,
                    OutputParamCode  = EpsTaskParameterTypes.PhysicalPrinter,
                    OutputParamValue = printerName
                }
            };
            return(task);
        }
예제 #2
0
        private EpsOutputTask GetEpsShareTask(EpsOutput epsOutput, string targetFolder,
                                              string exportFormat = "wmsMLC.EPS.wmsEPS.ExportTypes.FRExcel2007")
        {
            var task = new EpsOutputTask
            {
                Output           = epsOutput,
                OutputTaskCode   = EpsOutputTaskCodes.OTC_SHARE,
                OutputTaskOrder  = 1,
                OutputTaskStatus = OutputStatuses.OS_NEW
            };

            task.OutputTask_EpsOutputParam_List = new Quartz.Collection.HashSet <EpsOutputParam>
            {
                new EpsOutputParam
                {
                    Output           = epsOutput,
                    OutputTask       = task,
                    OutputParamCode  = EpsTaskParameterTypes.TargetFolder,
                    OutputParamValue = targetFolder
                },
                new EpsOutputParam
                {
                    Output           = epsOutput,
                    OutputTask       = task,
                    OutputParamCode  = EpsTaskParameterTypes.FileFormat,
                    OutputParamValue = exportFormat
                }
            };
            return(task);
        }
예제 #3
0
        private EpsOutputTask GetEpsFtpTask(EpsOutput epsOutput, string targetFolder,
                                            string exportFormat = "wmsMLC.EPS.wmsEPS.ExportTypes.FRExcel2007")
        {
            var task = new EpsOutputTask
            {
                Output           = epsOutput,
                OutputTaskCode   = EpsOutputTaskCodes.OTC_FTP,
                OutputTaskOrder  = 1,
                OutputTaskStatus = OutputStatuses.OS_NEW
            };

            task.OutputTask_EpsOutputParam_List = new Quartz.Collection.HashSet <EpsOutputParam>
            {
                new EpsOutputParam
                {
                    Output           = epsOutput,
                    OutputTask       = task,
                    OutputParamCode  = EpsTaskParameterTypes.TargetFolder,
                    OutputParamValue = targetFolder
                },
                new EpsOutputParam
                {
                    Output           = epsOutput,
                    OutputTask       = task,
                    OutputParamCode  = EpsTaskParameterTypes.FTPServerName,
                    OutputParamValue = "10.0.0.19"
                },
                new EpsOutputParam
                {
                    Output           = epsOutput,
                    OutputTask       = task,
                    OutputParamCode  = EpsTaskParameterTypes.FTPServerLogin,
                    OutputParamValue = "ftp_tester"
                },
                new EpsOutputParam
                {
                    Output           = epsOutput,
                    OutputTask       = task,
                    OutputParamCode  = EpsTaskParameterTypes.FTPServerPassword,
                    OutputParamValue = "123"
                },
                new EpsOutputParam
                {
                    Output           = epsOutput,
                    OutputTask       = task,
                    OutputParamCode  = EpsTaskParameterTypes.FileFormat,
                    OutputParamValue = exportFormat
                }
            };
            return(task);
        }
        public void When_outputtask_has_more_than_one_export_parameter_than_error()
        {
            var epsConfig    = GetEpsConfiguration();
            var configurator = new EpsJobConfigurator(epsConfig, new MacroProcessor());

            var output = new EpsOutput
            {
                OutputID     = -100,
                OutputStatus = OutputStatuses.OS_ON_TRANSFER,
                EpsHandler   = 100,
                Login_r      = "test_user_login"
            };

            output.Output_EpsOutputParam_List.Add(new EpsOutputParam
            {
                OutputParamType  = EpsParamTypes.EPS,
                OutputParamCode  = EpsTaskParameterTypes.Zip,
                OutputParamValue = "1"
            });
            output.Output_EpsOutputParam_List.Add(new EpsOutputParam
            {
                OutputParamType  = EpsParamTypes.EPS,
                OutputParamCode  = EpsTaskParameterTypes.ReserveCopy,
                OutputParamValue = "1"
            });

            var emailTask = new EpsOutputTask
            {
                OutputTaskID     = -101,
                OutputTaskCode   = EpsOutputTaskCodes.OTC_MAIL,
                OutputTaskOrder  = 1,
                OutputTaskStatus = OutputStatuses.OS_NEW,
            };

            emailTask.OutputTask_EpsOutputParam_List.Add(new EpsOutputParam()
            {
                OutputParamType  = EpsParamTypes.TSK,
                OutputParamCode  = EpsTaskParameterTypes.FileFormat,
                OutputParamValue = "test1"
            });
            emailTask.OutputTask_EpsOutputParam_List.Add(new EpsOutputParam()
            {
                OutputParamType  = EpsParamTypes.TSK,
                OutputParamCode  = EpsTaskParameterTypes.FileFormat,
                OutputParamValue = "test2"
            });
            output.Output_EpsOutputTask_List.Add(emailTask);

            var session      = new Mock <ISession>();
            var resultConfig = configurator.Configure(output, session.Object, (i, exception, arg3) => { });
        }
예제 #5
0
        private EpsOutputTask GetEpsMailTask(EpsOutput epsOutput,
                                             string exportFormat = "wmsMLC.EPS.wmsEPS.ExportTypes.FRText")
        {
            var task = new EpsOutputTask
            {
                Output           = epsOutput,
                OutputTaskCode   = EpsOutputTaskCodes.OTC_MAIL,
                OutputTaskOrder  = 1,
                OutputTaskStatus = OutputStatuses.OS_NEW
            };

            task.OutputTask_EpsOutputParam_List = new Quartz.Collection.HashSet <EpsOutputParam>
            {
                new EpsOutputParam
                {
                    Output           = epsOutput,
                    OutputTask       = task,
                    OutputParamCode  = EpsTaskParameterTypes.AsAttachment,
                    OutputParamValue = "1"
                },
                new EpsOutputParam
                {
                    Output           = epsOutput,
                    OutputTask       = task,
                    OutputParamCode  = EpsTaskParameterTypes.Email,
                    OutputParamValue = "*****@*****.**"
                },
                new EpsOutputParam
                {
                    Output           = epsOutput,
                    OutputTask       = task,
                    OutputParamCode  = EpsTaskParameterTypes.FileFormat,
                    OutputParamValue = exportFormat
                }
            };
            return(task);
        }
예제 #6
0
        private static IEpsTaskConfig CreateTaskConfig(EpsOutputTask task, IMacroProcessor macroProcessor,
                                                       bool isNeedZip, bool isNeedReserveCopy, Action <int, Exception, TimeSpan> taskCompleteAction)
        {
            var res = new EpsTaskConfig();

            res.TaskId            = task.OutputTaskID;
            res.TaskOrder         = task.OutputTaskOrder;
            res.IsNeedZip         = isNeedZip;
            res.IsNeedReserveCopy = isNeedReserveCopy;

            res.Parameters = task
                             .OutputTask_EpsOutputParam_List
                             .Select(i => new EpsTaskParameter
            {
                Code     = i.OutputParamCode,
                Value    = macroProcessor.Process(i.OutputParamValue),
                Subvalue = macroProcessor.Process(i.OutputParamSubValue)
            })
                             .ToArray();

            //Такое "кривое" преобразование, чтобы разделить функциональность в Eps и основной системы
            // По сути дублируем enum EpsTaskType
            var taskType = EpsTaskExecutorTypes.None;

            if (task.OutputTaskCode != EpsOutputTaskCodes.None)
            {
                Enum.TryParse(task.OutputTaskCode.ToString().Substring(4), true, out taskType);
            }
            res.TaskExecutorType = taskType;

            var exportFormats = res.Parameters
                                .Where(i => i.Code == EpsTaskParameterTypes.FileFormat)
                                .Select(p => p.Value)
                                .Cast <string>()
                                .ToArray();

            //больше не должно быть форматов
            if (exportFormats.Length > 1)
            {
                throw new Exception(
                          string.Format(
                              "For output task with id {0} set more then one FileFormat. Please, check the settings.",
                              task.OutputTaskID));
            }

            if (exportFormats.Length == 1)
            {
                var exportFormat = exportFormats[0];
                if (string.IsNullOrEmpty(exportFormat))
                {
                    throw new Exception(
                              string.Format("For output task with id {0} set empty FileFormat. Please, check the settings.",
                                            task.OutputTaskID));
                }

                var encodingNames = res.Parameters
                                    .Where(i => i.Code == EpsTaskParameterTypes.Conversion)
                                    .Select(p => p.Value)
                                    .Cast <string>()
                                    .ToArray();

                if (encodingNames.Length > 1)
                {
                    throw new Exception(
                              string.Format(
                                  "For output task with id {0} set more then one Conversion parameter. Please, check the settings.",
                                  task.OutputTaskID));
                }

                var encoding = DefaultFileEncoding;
                if (encodingNames.Length == 1)
                {
                    if (string.IsNullOrEmpty(encodingNames[0]))
                    {
                        throw new Exception(
                                  string.Format(
                                      "For output task with id {0} set empty Conversion. Please, check the settings.",
                                      task.OutputTaskID));
                    }

                    encoding = Encoding.GetEncoding(encodingNames[0]);
                }

                var spacelife = res.Parameters
                                .Any(i => i.Code == EpsTaskParameterTypes.Spacelife && string.Equals(i.Value, "1"));

                res.ExportType = new ExportType {
                    Encoding = encoding, Format = exportFormat, Spacelife = spacelife
                };
            }

            res.HandleTaskComplete = taskCompleteAction;

            return(res);
        }
예제 #7
0
        private static IEnumerable <EpsOutputTask> ProcessTaskParams(EpsJob job, ISession session,
                                                                     List <WmsReport> reports, ILog log)
        {
            var res = new List <EpsOutputTask>();

            if (job.Job_EpsTask2Job_List.Count == 0)
            {
                return(res);
            }

            var uselog = log != null;

            foreach (var task2Job in job.Job_EpsTask2Job_List)
            {
                var task = task2Job.Task;

                if (task.TaskLocked)
                {
                    if (uselog)
                    {
                        log.DebugFormat("Task '{0}' is locked.", task.TaskCode);
                    }
                    continue;
                }

                if (task.TaskType == EpsTaskTypes.None)
                {
                    if (uselog)
                    {
                        log.Debug("Undefined EPS Task type.");
                    }
                    continue;
                }

                var outputTask = new EpsOutputTask
                {
                    OutputTaskCode =
                        (EpsOutputTaskCodes)Enum.Parse(typeof(EpsOutputTaskCodes), "OTC_" + task.TaskType),
                    OutputTaskOrder = task2Job.Task2JobOrder
                };

                // разбираем параметры
                if (task.CFG_List.Count > 0)
                {
                    EpsPrinterLogical printerLogical = null;

                    foreach (var configTsk in task.CFG_List)
                    {
                        if (configTsk.EpsConfigLocked)
                        {
                            if (uselog)
                            {
                                log.DebugFormat("Task {0}. Parameter '{1}' (id={2}) is locked.", task.TaskCode,
                                                configTsk.EpsConfigParamCode, configTsk.EpsConfigID);
                            }
                            continue;
                        }

                        if (string.IsNullOrEmpty(configTsk.EpsConfigParamCode))
                        {
                            throw new Exception(string.Format("Param code in task {0} (id={1}) is empty.",
                                                              configTsk.EpsConfigParamCode, configTsk.EpsConfigID));
                        }

                        EpsTaskParams param;
                        if (!Enum.TryParse(configTsk.EpsConfigParamCode, out param))
                        {
                            param = EpsTaskParams.None;
                        }

                        var epsConfigParamCode = configTsk.EpsConfigParamCode;
                        var epsConfigValue     = configTsk.EpsConfigValue;

                        switch (param)
                        {
                        case EpsTaskParams.PhysicalPrinter:
                            continue;

                        case EpsTaskParams.None:
                            // из таких мы знаем только EpsLogicalPrinter
                            if (
                                !string.Equals(configTsk.EpsConfigParamCode, EpsLogicalPrinter,
                                               StringComparison.InvariantCultureIgnoreCase))
                            {
                                throw new Exception(string.Format("Unknown EpsConfigParamCode '{0}'.",
                                                                  configTsk.EpsConfigParamCode));
                            }

                            //Задан логический принтер
                            if (!string.IsNullOrEmpty(configTsk.EpsConfigValue))
                            {
                                printerLogical = session.Get <EpsPrinterLogical>(configTsk.EpsConfigValue);
                                if (printerLogical == null)
                                {
                                    throw new Exception(
                                              string.Format("Can't get PrinterLogical by key '{0}'.",
                                                            configTsk.EpsConfigValue));
                                }

                                //Проверяем физический принтер
                                var printerPhysical = printerLogical.PhysicalPrinter_r;
                                if (printerPhysical == null)
                                {
                                    throw new Exception(
                                              string.Format("Can't get PrinterPhysical by logical '{0}'.",
                                                            printerLogical.LogicalPrinter));
                                }

                                if (printerPhysical.PhysicalPrinterLocked)
                                {
                                    throw new Exception(
                                              string.Format("Physical printer '{0}' is locked.",
                                                            printerPhysical.PhysicalPrinter));
                                }

                                epsConfigParamCode = EpsTaskParams.PhysicalPrinter.ToString();
                                epsConfigValue     = printerLogical.PhysicalPrinter_r.PhysicalPrinter;
                            }
                            break;
                        }

                        outputTask.OutputTask_EpsOutputParam_List.Add(new EpsOutputParam
                        {
                            OutputTask       = outputTask,
                            OutputParamCode  = epsConfigParamCode,
                            OutputParamValue = epsConfigValue,
                            OutputParamType  = EpsParamTypes.TSK
                        });
                    }

                    //Проверяем наличие физ. принтера
                    if (task.TaskType == EpsTaskTypes.PRINT)
                    {
                        if (
                            outputTask.OutputTask_EpsOutputParam_List.All(
                                p =>
                                EnumHelper.ParseEnum(p.OutputParamCode, EpsTaskParams.None) !=
                                EpsTaskParams.PhysicalPrinter))
                        {
                            throw new Exception(string.Format(
                                                    "PhysicalPrinter parameter is not present for task '{0}'.", task.TaskCode));
                        }

                        //Добавляем copies для задачи Print
                        if (reports != null)
                        {
                            var copies =
                                outputTask.OutputTask_EpsOutputParam_List.Where(
                                    p =>
                                    EnumHelper.ParseEnum(p.OutputParamCode, EpsTaskParams.None) ==
                                    EpsTaskParams.Copies).ToArray();
                            if (copies.Length > 0) //Удаляем
                            {
                                foreach (var p in copies)
                                {
                                    session.Delete(p);
                                    outputTask.OutputTask_EpsOutputParam_List.Remove(p);
                                }

                                //Определяем новые copies с учетом отчета и принтера
                                //TODO: почему тут мы берем первую попапвшуюся запись?
                                int copy;
                                int.TryParse(copies[0].OutputParamValue, out copy);
                                foreach (var report in reports.Where(p => p.ReportFile_r != null))
                                {
                                    outputTask.OutputTask_EpsOutputParam_List.Add(new EpsOutputParam
                                    {
                                        OutputTask       = outputTask,
                                        OutputParamCode  = EpsTaskParams.Copies.ToString(),
                                        OutputParamValue =
                                            (report.ReportCopies * copy *
                                             (printerLogical == null ? 0 : printerLogical.LogicalPrinterCopies))
                                            .ToString(CultureInfo.InvariantCulture),
                                        OutputParamSubValue = report.ReportFile_r.ReportFile,
                                        OutputParamType     = EpsParamTypes.TSK
                                    });
                                }
                            }
                        }
                    }
                }

                res.Add(outputTask);
            }

            return(res);
        }
        public void When_parameters_is_pased_than_its_recognized()
        {
            var epsConfig    = GetEpsConfiguration();
            var configurator = new EpsJobConfigurator(epsConfig, new MacroProcessor());

            var output = new EpsOutput
            {
                OutputID              = -100,
                OutputStatus          = OutputStatuses.OS_ON_TRANSFER,
                EpsHandler            = 100,
                Login_r               = "test_user_login",
                ReportFileSubFolder_r = "TST"
            };

            output.Output_EpsOutputParam_List.Add(new EpsOutputParam
            {
                OutputParamType  = EpsParamTypes.EPS,
                OutputParamCode  = EpsTaskParameterTypes.Zip,
                OutputParamValue = "1"
            });
            output.Output_EpsOutputParam_List.Add(new EpsOutputParam
            {
                OutputParamType  = EpsParamTypes.EPS,
                OutputParamCode  = EpsTaskParameterTypes.ReserveCopy,
                OutputParamValue = "1"
            });

            var emailTask = new EpsOutputTask
            {
                OutputTaskID     = -101,
                OutputTaskCode   = EpsOutputTaskCodes.OTC_MAIL,
                OutputTaskOrder  = 1,
                OutputTaskStatus = OutputStatuses.OS_NEW,
            };

            output.Output_EpsOutputTask_List.Add(emailTask);

            emailTask.OutputTask_EpsOutputParam_List.Add(new EpsOutputParam
            {
                OutputParamType  = EpsParamTypes.TSK,
                OutputParamCode  = EpsTaskParameterTypes.FileFormat,
                OutputParamValue = "wmsMLC.EPS.wmsEPS.ExportTypes.FRExcel2007"
            });

            emailTask.OutputTask_EpsOutputParam_List.Add(new EpsOutputParam
            {
                OutputParamType  = EpsParamTypes.TSK,
                OutputParamCode  = EpsTaskParameterTypes.Conversion,
                OutputParamValue = "UTF-32"
            });

            emailTask.OutputTask_EpsOutputParam_List.Add(new EpsOutputParam
            {
                OutputParamType  = EpsParamTypes.TSK,
                OutputParamCode  = EpsTaskParameterTypes.Spacelife,
                OutputParamValue = "1"
            });

            var reportParam = new EpsOutputParam
            {
                OutputParamType  = EpsParamTypes.REP,
                OutputParamCode  = EpsTaskParameterTypes.EpsReport,
                OutputParamValue = "Test001.frx"
            };

            output.Output_EpsOutputParam_List.Add(new EpsOutputParam
            {
                OutputParamType     = EpsParamTypes.REP,
                OutputParamCode     = "Parameter1",
                OutputParamValue    = "value1",
                OutputParamSubValue = "Test001.frx"
            });
            output.Output_EpsOutputParam_List.Add(new EpsOutputParam
            {
                OutputParamType     = EpsParamTypes.REP,
                OutputParamCode     = "Parameter2",
                OutputParamValue    = "value2",
                OutputParamSubValue = "Test001.frx"
            });
            output.Output_EpsOutputParam_List.Add(new EpsOutputParam
            {
                OutputParamType     = EpsParamTypes.REP,
                OutputParamCode     = EpsTaskParameterTypes.ResultReportFile,
                OutputParamValue    = "${SQL=select REPORT_${SYSMACHINENAME}_${UserCode}_${DATE:yyyyMMdd}_${Parameter1}_${Parameter2}.txt from dual}",
                OutputParamSubValue = "Test001.frx"
            });
            output.Output_EpsOutputParam_List.Add(new EpsOutputParam
            {
                OutputParamType  = EpsParamTypes.REP,
                OutputParamCode  = EpsTaskParameterTypes.ChangeODBC,
                OutputParamValue = "1"
            });

            output.Output_EpsOutputParam_List.Add(reportParam);
            var resultReportName = string.Format("REPORT_{0}_{1}_{2:yyyyMMdd}_value1_value2.txt", Environment.MachineName, output.Login_r, DateTime.Now);

            var sqlQuery = new Mock <ISQLQuery>();

            sqlQuery.Setup(i => i.UniqueResult <string>()).Returns(resultReportName);

            var session = new Mock <ISession>();

            session.Setup(i => i.CreateSQLQuery(It.IsAny <string>())).Returns(sqlQuery.Object);
            var reportUseODACCpv = new WmsReportCPV
            {
                CPVValue    = "1",
                CustomParam = new WmsCustomParam {
                    CustomParamCode = WmsReportCPV.ReportUseODACParameter
                },
                REPORT = new WmsReport {
                    Report = Path.GetFileNameWithoutExtension(reportParam.OutputParamValue)
                }
            };

            using (ShimsContext.Create())
            {
                ShimLinqExtensionMethods.QueryOf1ISession(s => new[] { reportUseODACCpv }.AsQueryable());

                var resultConfig = configurator.Configure(output, session.Object, (i, exception, arg3) => { });

                resultConfig.JobId.Should().Be(output.OutputID);
                resultConfig.Tasks.Should().HaveCount(1);
                resultConfig.Reports.Should().HaveCount(1);

                var resultEmailTask = resultConfig.Tasks.Single(i => i.TaskId == emailTask.OutputTaskID);
                ("OTC_" + resultEmailTask.TaskExecutorType).Should().Be(emailTask.OutputTaskCode.ToString());
                resultEmailTask.IsNeedZip.Should().BeTrue();
                resultEmailTask.IsNeedReserveCopy.Should().BeTrue();
                resultEmailTask.ExportType.Should().NotBeNull();
                resultEmailTask.ExportType.Encoding.Should().Be(Encoding.UTF32);
                resultEmailTask.ExportType.Spacelife.Should().BeTrue();
                resultEmailTask.ExportType.Format.Should().Be("wmsMLC.EPS.wmsEPS.ExportTypes.FRExcel2007");
                resultEmailTask.HandleTaskComplete.Should().NotBeNull();

                var resultReport = resultConfig.Reports.Single(i => i.ReportName == reportParam.OutputParamValue);
                resultReport.ReportCode.Should().Be(Path.GetFileNameWithoutExtension(reportParam.OutputParamValue));
                resultReport.ConnectionString.Should().Be(epsConfig.OdacConnectionString);
                resultReport.ReportFullFileName.Should().Be(Path.Combine(epsConfig.ReportPath, output.ReportFileSubFolder_r, reportParam.OutputParamValue));
                resultReport.Parameters.Should().Contain("Parameter1", "value1");
                resultReport.Parameters.Should().Contain("Parameter2", "value2");
                resultReport.Parameters.Should().Contain(EpsReportParameterTypes.UserCode, output.Login_r);
                resultReport.ReportResultFileName.Should().Be(resultReportName);
            }
        }