public void WriteHeader(Prism820Context context, Type820Header header) { var line = string.Format("SH|{0}|{1}|O|", context.TradingPartnerId, header.TraceReferenceNbr); context.AppendLine(line); logger.TraceFormat("Wrote 820 \"SH\" PRISM line for Header {0}", header.HeaderKey); }
public void ParseHeader(Prism820Context context, string[] marketFields) { var model = new Type820Header { TotalAmount = marketFields.AtIndex(4), PaymentMethodCode = marketFields.AtIndex(5), TransactionDate = marketFields.AtIndex(13), TraceReferenceNbr = marketFields.AtIndex(14), TdspName = marketFields.AtIndex(15), TdspDuns = marketFields.AtIndex(16), CrName = marketFields.AtIndex(17), CrDuns = marketFields.AtIndex(18), CreditDebitFlag = marketFields.AtIndex(19), }; var identifiedMarket = clientDataAccess.IdentifyMarket(model.TdspDuns); if (identifiedMarket.HasValue) { context.SetMarket(identifiedMarket.Value); } model.MarketId = context.MarketId; model.ProviderId = 1; context.PushModel(model); }
public IMarketFileExportResult[] Export(CancellationToken token) { var cspDunsPorts = clientDataAccess.ListCspDunsPort(); var prismPorts = cspDunsPorts .Where(x => x.ProviderId == 1) .ToArray(); var context = new Prism820Context(); foreach (var prismPort in prismPorts) { if (token.IsCancellationRequested) { break; } var headers = marketDataAccess.ListUnprocessed(prismPort.LdcDuns, prismPort.Duns, 1); if (headers.Length == 0) { logger.TraceFormat("Zero 820 Prism records found to export for TDSP Duns \"{0}\" and CR Duns \"{1}\".", prismPort.LdcDuns, prismPort.Duns); continue; } logger.DebugFormat("Exporting {0} unprocessed 820 record(s) for TDSP Duns \"{1}\" and CR Duns \"{2}\".", headers.Length, prismPort.LdcDuns, prismPort.Duns); foreach (var header in headers) { if (!header.HeaderKey.HasValue) { continue; } if (token.IsCancellationRequested) { break; } var headerKey = header.HeaderKey.Value; context.Initialize(); var identifiedMarket = clientDataAccess.IdentifyMarket(header.TdspDuns); if (identifiedMarket.HasValue) { context.SetMarket(identifiedMarket.Value); } context.SetFileProperties(prismPort, header.TdspDuns, "PYM"); context.SetHeaderId(headerKey); WriteHeader(context, header); WritePayment(context, header); WriteDetail(context, header); } } return(context.Models); }
public void WriteDetail(Prism820Context context, Type820Header header) { if (!header.HeaderKey.HasValue) { return; } var headerKey = header.HeaderKey.Value; var details = marketDataAccess.ListDetails(headerKey); if (details == null || details.Length == 0) { return; } foreach (var detail in details) { if (!detail.DetailKey.HasValue) { continue; } var premiseNumber = IdentifyEsiId(context, detail); var membershipId = IdentifyLdcAccountNumber(context, detail); var line = string.Format("20|{0}|{5}||{1}|||||{2}||||{3}|||{4}|", context.TradingPartnerId, detail.PaymentAmount, detail.CrossReferenceNbr, detail.ReferenceNbr, premiseNumber, membershipId); context.AppendLine(line); logger.TraceFormat("Wrote 820 \"20\" PRISM line for Header {0}", header.HeaderKey); } }
public string IdentifyEsiId(Prism820Context context, Type820Detail detail) { if (context.Market == MarketOptions.Maryland) { return(string.Empty); } return(detail.EsiId); }
public void WritePayment(Prism820Context context, Type820Header header) { var partnerId = context.TradingPartnerId; var stateId = partnerId.Substring(3, 2); var line = string.Format("01|{0}|{1}|{2}|{3}|{4}||||||||{5}|{6}|{7}|{8}|{9}|{10}|{11}||||", partnerId, stateId, header.TransactionTypeCode, header.TotalAmount, header.PaymentMethodCode, header.TransactionDate, header.TraceReferenceNbr, header.CrName, header.CrDuns, header.TdspName, header.TdspDuns, header.CreditDebitFlag); context.AppendLine(line); logger.TraceFormat("Wrote 820 \"01\" PRISM line for Header {0}", header.HeaderKey); }
public string IdentifyLdcAccountNumber(Prism820Context context, Type820Detail detail) { if (context.Market == MarketOptions.Maryland) { return(detail.EsiId); } // original code has Util.GetString(dr, "MembershipID") // which is a column that was not found in the 820 Detail table // the "Util" call would result in an empty string being // returned return(string.Empty); }
public IMarketFileParseResult Parse(Stream stream) { var context = new Prism820Context(); using (var reader = new StreamReader(stream)) { string marketFileLine; while ((marketFileLine = reader.ReadLine()) != null) { ParseLine(context, marketFileLine); } } if (context.ShouldResolve) { logger.Warn("Unresolved data identified after parsing 820. Transactions may not be completed."); context.ResolveToHeader(); } return(context.Results); }
public void ParseDetail(Prism820Context context, string[] marketFields) { var current = context.Current; if (current == null || current.ModelType != Type820Types.Header) { throw new InvalidOperationException(); } var header = current as Type820Header; if (header == null) { throw new InvalidOperationException(); } var model = new Type820Detail { ReferenceNbr = marketFields.AtIndex(2), PaymentActionCode = marketFields.AtIndex(3), PaymentAmount = marketFields.AtIndex(4), AdjustmentReasonCode = marketFields.AtIndex(5), AdjustmentAmount = marketFields.AtIndex(6), }; if (context.Market == MarketOptions.Maryland) { marketFields.TryAtIndex(11, x => model.CrossReferenceNbr = x); marketFields.TryAtIndex(2, x => model.EsiId = x); } else { marketFields.TryAtIndex(9, x => model.CrossReferenceNbr = x); marketFields.TryAtIndex(16, x => model.EsiId = x); } header.AddDetail(model); }
public void ParseLine(Prism820Context context, string line) { if (string.IsNullOrWhiteSpace(line)) { return; } if (line.Length < 2) { return; } var indicator = line.Substring(0, 2); var marketFields = line.Split('|'); switch (indicator) { case "SH": context.ResolveToHeader(); context.Initialize(); context.TransactionActualCount++; break; case "01": ParseHeader(context, marketFields); break; case "20": ParseDetail(context, marketFields); break; case "TL": context.ResolveToHeader(); marketFields.TryAtIndexInt(1, x => context.TransactionAuditCount = x); break; } }