Ejemplo n.º 1
0
        public void ExportResult(ExportFileContext context, IMarketFileExportResult result, IExportTransactionHandler handler)
        {
            var fileName   = result.GenerateFileName(context.FileType, context.Extension);
            var marketFile = new MarketFileModel
            {
                DirectionFlag           = false,
                FileName                = fileName,
                FileType                = context.FileType,
                ProcessError            = string.Empty,
                ProcessStatus           = "N",
                LdcId                   = result.LdcId,
                CspDunsId               = result.CspDunsId,
                CspDunsTradingPartnerId = result.CspDunsTradingPartnerId,
            };

            try
            {
                var filePath = Path.Combine(context.DirectoryOut, fileName);
                var fileInfo = new FileInfo(filePath);
                if (fileInfo.Exists)
                {
                    throw new InvalidOperationException();
                }

                var options = new TransactionOptions {
                    IsolationLevel = IsolationLevel.ReadCommitted
                };
                using (var scope = new TransactionScope(TransactionScopeOption.Required, options))
                {
                    marketFile.ProcessDate = DateTime.Now;
                    marketFile.Status      = MarketFileStatusOptions.Inserted;
                    var marketFileId = marketFileDataAccess
                                       .InsertMarketFile(marketFile);

                    using (var stream = fileInfo.Open(FileMode.Create, FileAccess.Write, FileShare.None))
                        using (var writer = new StreamWriter(stream))
                        {
                            result.FinalizeDocument(marketFileId);
                            writer.Write(result.Content);
                            logger.DebugFormat("Wrote {0} \"{1}\" transaction(s) to file \"{2}\".",
                                               result.HeaderCount, context.FileType, fileName);
                        }

                    foreach (var headerKey in result.HeaderKeys)
                    {
                        handler.UpdateHeader(headerKey, marketFileId, fileName);
                    }

                    logger.InfoFormat("Exported {0} \"{1}\" transaction(s). File Name \"{2}\".",
                                      result.HeaderCount, context.FileType, fileName);

                    scope.Complete();
                }
            }
            catch (Exception ex)
            {
                logger.ErrorFormat(ex, "Unknown error occurred while exporting file \"{0}\".", context.FileType);
            }
        }
Ejemplo n.º 2
0
        public void When_Exporting_Transactions_The_Trading_Partner_Substring_Is_Consider_For_Duplicate_Check()
        {
            // arrange
            var results = new IMarketFileExportResult[]
            {
                new Export814Model(false)
                {
                    LdcShortName = "DUP", TradingPartnerId = "Partner_Diff", CspDunsId = 1
                },
                new Export814Model(false)
                {
                    LdcShortName = "DUP", TradingPartnerId = "Partner_Fail", CspDunsId = 2
                },
                new Export814Model(false)
                {
                    LdcShortName = "DUP", TradingPartnerId = "Partner_Term", CspDunsId = 3
                },
                new Export814Model(false)
                {
                    LdcShortName = "DUP", TradingPartnerId = "Partner_Unique", CspDunsId = 4
                },
                new Export814Model(false)
                {
                    LdcShortName = "UNIQUE", TradingPartnerId = "Partner_Unique", CspDunsId = 5
                }
            };

            var concern = new ExportMarketFileTask(null, null, null, 0);

            // act
            concern.HandleDuplicateLdcTradingPartners(results);

            // assert
            Assert.AreEqual(4, results.Count(x => x.DuplicateFileIdentifier.HasValue));

            var firstDuplicate = results.First(x => x.CspDunsId.Equals(1));
            var firstFileName  = string.Format("814_Par_DUP_{0:yyyyMMddHHmmss}_1.txt", DateTime.Now);

            Assert.AreEqual(firstFileName, firstDuplicate.GenerateFileName("814", "txt"));

            var lastDuplicate = results.First(x => x.CspDunsId.Equals(4));
            var lastFileName  = string.Format("814_Par_DUP_{0:yyyyMMddHHmmss}_4.txt", DateTime.Now);

            Assert.AreEqual(lastFileName, lastDuplicate.GenerateFileName("814", "txt"));

            var uniqueModel    = results.First(x => x.CspDunsId.Equals(5));
            var uniqueFileName = string.Format("814_Par_UNIQUE_{0:yyyyMMddHHmmss}.txt", DateTime.Now);

            Assert.AreEqual(uniqueFileName, uniqueModel.GenerateFileName("814", "txt"));
        }