public void ParseServiceReject(Prism650Context context, string[] marketFields) { var current = context.Current; if (current == null || current.ModelType != Type650Types.Service) { throw new InvalidOperationException(); } var service = current as Type650Service; if (service == null) { throw new InvalidOperationException(); } var model = new Type650ServiceReject { RejectCode = marketFields.AtIndex(2), RejectReason = marketFields.AtIndex(3), UnexCode = marketFields.AtIndex(4), UnexReason = marketFields.AtIndex(5), }; service.AddReject(model); }
public void WriteHeader(Prism650Context context, Type650Header header) { var line = string.Format("SH|{0}|{1}|O|", context.TradingPartnerId, header.TransactionNbr); context.AppendLine(line); logger.TraceFormat("Wrote 650 \"SH\" PRISM line for Header {0}", header.HeaderKey); }
public void WriteServiceReject(Prism650Context context, Type650Service service) { if (service == null) { return; } var serviceKey = service.ServiceKey ?? 0; if (serviceKey == 0) { return; } var rejects = marketDataAccess.ListServiceRejects(serviceKey); if (rejects == null || rejects.Length == 0) { return; } foreach (var reject in rejects) { if (!reject.ServiceRejectKey.HasValue) { continue; } var line = string.Format("13|{0}|{1}|{2}|||", context.TradingPartnerId, reject.RejectCode, reject.RejectReason); context.AppendLine(line); logger.TraceFormat("Wrote 650 \"13\" PRISM line for Header {0}", service.HeaderKey); } }
public IMarketFileExportResult[] Export(CancellationToken token) { var cspDunsPorts = clientDataAccess.ListCspDunsPort(); var prismPorts = cspDunsPorts .Where(x => x.ProviderId == 1) .ToArray(); var context = new Prism650Context(); 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 650 Prism records found to export for TDSP Duns \"{0}\" and CR Duns \"{1}\".", prismPort.LdcDuns, prismPort.Duns); continue; } logger.DebugFormat("Exporting {0} unprocessed 650 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, "MTR"); context.SetHeaderId(headerKey); context.TransactionSetPurposeCode = header.TransactionSetPurposeCode; WriteHeader(context, header); WriteAccount(context, header); WriteService(context, header); } } return(context.Models); }
public void WriteServiceChangeReason(Prism650Context context, Type650Service service) { if (service == null) { return; } var serviceKey = service.ServiceKey ?? 0; if (serviceKey == 0) { return; } var changes = marketDataAccess.ListServiceChanges(serviceKey); if (changes == null || changes.Length == 0) { return; } foreach (var change in changes) { if (!change.ServiceChangeKey.HasValue) { continue; } var line = string.Format("12|{0}|{1}|", context.TradingPartnerId, change.ChangeReason); context.AppendLine(line); logger.TraceFormat("Wrote 650 \"12\" PRISM line for Header {0}", service.HeaderKey); } }
public void WriteServicePole(Prism650Context context, Type650Service service) { if (service == null) { return; } var serviceKey = service.ServiceKey ?? 0; if (serviceKey == 0) { return; } var poles = marketDataAccess.ListServicePoles(serviceKey); if (poles == null || poles.Length == 0) { return; } foreach (var pole in poles) { if (!pole.ServicePoleKey.HasValue) { continue; } var line = string.Format("11|{0}|{1}|", context.TradingPartnerId, pole.PoleNbr); context.AppendLine(line); logger.TraceFormat("Wrote 650 \"11\" PRISM line for Header {0}", service.HeaderKey); } }
public void ParseHeader(Prism650Context context, string[] marketFields) { var headerModel = new Type650Header { TransactionSetPurposeCode = marketFields.AtIndex(3), TransactionDate = marketFields.AtIndex(4), TransactionNbr = marketFields.AtIndex(5), ReferenceNbr = marketFields.AtIndex(6), TransactionType = marketFields.AtIndex(7), ActionCode = marketFields.AtIndex(8), TdspName = marketFields.AtIndex(20), TdspDuns = marketFields.AtIndex(21), CrName = marketFields.AtIndex(22), CrDuns = marketFields.AtIndex(23), ProcessedReceivedDateTime = marketFields.AtIndex(24), }; var identifiedMarket = clientDataAccess.IdentifyMarket(headerModel.TdspDuns); if (identifiedMarket.HasValue) { context.SetMarket(identifiedMarket.Value); } headerModel.MarketId = context.MarketId; headerModel.ProviderId = 1; context.PushModel(headerModel); var hasEntityName = false; var hasContactName = false; marketFields.TryAtIndex(9, x => hasEntityName = true); marketFields.TryAtIndex(17, x => hasContactName = true); if (!hasEntityName || !hasContactName) { return; } var nameModel = new Type650Name { EntityName = marketFields.AtIndex(9), EntityName2 = marketFields.AtIndex(10), EntityName3 = marketFields.AtIndex(11), Address1 = marketFields.AtIndex(12), Address2 = marketFields.AtIndex(13), City = marketFields.AtIndex(14), State = marketFields.AtIndex(15), PostalCode = marketFields.AtIndex(16), ContactName = marketFields.AtIndex(17), ContactPhoneNbr1 = marketFields.AtIndex(18), ContactPhoneNbr2 = marketFields.AtIndex(19), }; headerModel.AddName(nameModel); }
public void ParseLine(Prism650Context 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++; marketFields.TryAtIndex(3, x => context.Alias = x); break; case "01": ParseHeader(context, marketFields); break; case "10": ParseService(context, marketFields); break; case "11": ParseServicePole(context, marketFields); break; case "12": ParseServiceChange(context, marketFields); break; case "13": ParseServiceReject(context, marketFields); break; case "14": ParseServiceMeter(context, marketFields); break; case "TL": context.ResolveToHeader(); marketFields.TryAtIndexInt(1, x => context.TransactionAuditCount = x); break; } }
public void WriteService(Prism650Context context, Type650Header header) { if (!header.HeaderKey.HasValue) { return; } var headerKey = header.HeaderKey.Value; var services = marketDataAccess.ListServices(headerKey); if (services == null || services.Length == 0) { logger.ErrorFormat("No service record for 650 Key {0}.", headerKey); return; } var service = services.First(); var line = string.Format( "10|{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}|{8}|||||||{9}|{10}|{11}|||||||||||||||||{12}|{13}|{14}|" , context.TradingPartnerId , service.PurposeCode.ToUpper() , service.PriorityCode.ToUpper() , service.EsiId.ToUpper() , service.SpecialProcessCode.ToUpper() , service.ServiceReqDate.ToUpper() , service.NotBeforeDate.ToUpper() , service.CallAhead.ToUpper() , service.PremLocation.ToUpper() , service.ReportRemarks.ToUpper() , service.Directions.ToUpper().ToAscii() , service.MeterNbr.ToUpper() , service.Membership.ToUpper() , service.RemarksPermanentSuspend.ToUpper() , service.DisconnectAuthorization.ToUpper()); context.AppendLine(line); logger.TraceFormat("Wrote 650 \"10\" PRISM line for Header {0}", header.HeaderKey); if (context.TransactionSetPurposeCode.Equals("13")) { WriteServicePole(context, service); WriteServiceChangeReason(context, service); return; } WriteServiceReject(context, service); }
public IMarketFileParseResult Parse(Stream stream) { var context = new Prism650Context(); 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 650. Transactions may not be completed."); context.ResolveToHeader(); } return(context.Results); }
public void ParseServiceMeter(Prism650Context context, string[] marketFields) { var current = context.Current; if (current == null || current.ModelType != Type650Types.Service) { throw new InvalidOperationException(); } var service = current as Type650Service; if (service == null) { throw new InvalidOperationException(); } var model = new Type650ServiceMeter { MeterNumber = marketFields.AtIndex(2), }; service.AddMeter(model); }
public void ParseService(Prism650Context context, string[] marketFields) { var current = context.Current; if (current == null || current.ModelType != Type650Types.Header) { throw new InvalidOperationException(); } var header = current as Type650Header; if (header == null) { throw new InvalidOperationException(); } var model = new Type650Service { PurposeCode = marketFields.AtIndex(2), PriorityCode = marketFields.AtIndex(3), EsiId = marketFields.AtIndex(4), SpecialProcessCode = marketFields.AtIndex(5), ServiceReqDate = marketFields.AtIndex(6), NotBeforeDate = marketFields.AtIndex(7), CallAhead = marketFields.AtIndex(8), PremLocation = marketFields.AtIndex(9), AccStatusCode = marketFields.AtIndex(10), AccStatusDesc = marketFields.AtIndex(11), EquipLocation = marketFields.AtIndex(12), ServiceOrderNbr = marketFields.AtIndex(13), CompletionDate = marketFields.AtIndex(14), CompletionTime = marketFields.AtIndex(15), ReportRemarks = marketFields.AtIndex(16), Directions = marketFields.AtIndex(17), MeterNbr = marketFields.AtIndex(18), MeterReadDate = marketFields.AtIndex(19), MeterTestDate = marketFields.AtIndex(20), MeterTestResults = marketFields.AtIndex(21), IncidentCode = marketFields.AtIndex(22), EstRestoreDate = marketFields.AtIndex(23), EstRestoreTime = marketFields.AtIndex(24), IntStartDate = marketFields.AtIndex(25), IntStartTime = marketFields.AtIndex(26), RepairRecommended = marketFields.AtIndex(27), Rescheduled = marketFields.AtIndex(28), InterDurationPeriod = marketFields.AtIndex(29), AreaOutage = marketFields.AtIndex(30), CustRepairRemarks = marketFields.AtIndex(31), MeterReadUom = marketFields.AtIndex(32), MeterRead = marketFields.AtIndex(33), MeterReadCode = marketFields.AtIndex(34), Membership = marketFields.AtIndex(35), RemarksPermanentSuspend = marketFields.AtIndex(36), DisconnectAuthorization = marketFields.AtIndex(37), PremiseTypeVerification = marketFields.AtIndex(38), PremiseTypeDesc = marketFields.AtIndex(39), SwitchHoldIndicator = marketFields.AtIndex(40), SwitchHoldDesc = marketFields.AtIndex(41), }; header.AddService(model); context.PushModel(model); }
public void WriteAccount(Prism650Context context, Type650Header header) { if (!header.HeaderKey.HasValue) { return; } var headerKey = header.HeaderKey.Value; var names = marketDataAccess.ListNames(headerKey); var name = names.FirstOrDefault(x => x.EntityIdType.Equals("8R", StringComparison.Ordinal)); if (name == null) { name = new Type650Name { EntityName = string.Empty, EntityName2 = string.Empty, EntityName3 = string.Empty, Address1 = string.Empty, Address2 = string.Empty, City = string.Empty, State = string.Empty, PostalCode = string.Empty, ContactName = string.Empty, ContactPhoneNbr1 = string.Empty, ContactPhoneNbr2 = string.Empty, }; } var phone1 = numericExp.Replace(name.ContactPhoneNbr1, string.Empty); var phone2 = numericExp.Replace(name.ContactPhoneNbr2, string.Empty); var postalCode = numericExp.Replace(name.PostalCode, string.Empty); if (phone1.Length > 16) { phone1 = phone1.Substring(0, 16); } if (phone2.Length > 16) { phone2 = phone2.Substring(0, 16); } 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}|{12}|{13}|{14}|{15}|{16}|{17}|{18}|{19}|{20}|{21}|{22}|{23}|" , partnerId , stateId , header.TransactionSetPurposeCode.ToUpper() , header.TransactionDate.ToUpper() , header.TransactionNbr.ToUpper() , header.ReferenceNbr.ToUpper() , header.TransactionType.ToUpper() , header.ActionCode.ToUpper() , name.EntityName.ToUpper().ToAscii() , name.EntityName2.ToUpper().ToAscii() , name.EntityName3.ToUpper().ToAscii() , name.Address1.ToUpper() , name.Address2.ToUpper() , name.City.ToUpper() , name.State.ToUpper() , postalCode , name.ContactName.ToUpper().ToAscii() , phone1 , phone2 , header.TdspName.ToUpper() , header.TdspDuns.ToUpper() , header.CrName.ToUpper() , header.CrDuns.ToUpper() , header.ProcessedReceivedDateTime); context.AppendLine(line); logger.TraceFormat("Wrote 650 \"01\" PRISM line for Header {0}", header.HeaderKey); }