Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
            }
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
            }
        }
Exemple #6
0
        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);
            }
        }
Exemple #7
0
        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);
        }
Exemple #8
0
        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;
            }
        }
Exemple #9
0
        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);
        }
Exemple #10
0
        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);
        }
Exemple #11
0
        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);
        }
Exemple #12
0
        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);
        }
Exemple #13
0
        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);
        }