Ejemplo n.º 1
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);
        }
Ejemplo n.º 2
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);
        }
Ejemplo n.º 3
0
        public Type650Header ParseHeader(XElement element, IDictionary <string, XNamespace> namespaces)
        {
            XNamespace empty;

            if (!namespaces.TryGetValue(string.Empty, out empty))
            {
                empty = XNamespace.None;
            }

            var model = new Type650Header
            {
                TransactionSetId          = element.GetChildText(empty + "TransactionSetId"),
                TransactionSetControlNbr  = element.GetChildText(empty + "TransactionSetControlNbr"),
                TransactionSetPurposeCode = element.GetChildText(empty + "TransactionSetPurposeCode"),
                TransactionDate           = element.GetChildText(empty + "TransactionDate"),
                TransactionNbr            = element.GetChildText(empty + "TransactionNbr"),
                ReferenceNbr              = element.GetChildText(empty + "ReferenceNbr"),
                TransactionType           = element.GetChildText(empty + "TransactionType"),
                ActionCode                = element.GetChildText(empty + "ActionCode"),
                TdspName                  = element.GetChildText(empty + "TdspName"),
                TdspDuns                  = element.GetChildText(empty + "TdspDuns"),
                CrName                    = element.GetChildText(empty + "CrName"),
                CrDuns                    = element.GetChildText(empty + "CrDuns"),
                ProcessedReceivedDateTime = element.GetChildText(empty + "ProcessedReceivedDateTime"),
            };

            var nameLoopElement = element.Element(empty + "NameLoop");

            if (nameLoopElement != null)
            {
                var nameElements = nameLoopElement.Elements(empty + "Name");
                foreach (var nameElement in nameElements)
                {
                    var nameModel = ParseName(nameElement, namespaces);
                    model.AddName(nameModel);
                }
            }

            var serviceLoopElement = element.Element(empty + "ServiceLoop");

            if (serviceLoopElement != null)
            {
                var serviceElements = serviceLoopElement.Elements(empty + "Service");
                foreach (var serviceElement in serviceElements)
                {
                    var serviceModel = ParseService(serviceElement, namespaces);
                    model.AddService(serviceModel);
                }
            }

            return(model);
        }
Ejemplo n.º 4
0
        public void SaveHeader(Type650Header header)
        {
            logger.Trace("Start inserting header.");

            var headerKey = marketDataAccess.InsertHeader(header);

            logger.DebugFormat("Inserted Header \"{0}\".", headerKey);

            foreach (var name in header.Names)
            {
                name.HeaderKey = headerKey;
                var nameKey = marketDataAccess.InsertName(name);
                logger.DebugFormat("Inserted Name \"{0}\" for Header \"{1}\".", nameKey, headerKey);
            }

            foreach (var service in header.Services)
            {
                service.HeaderKey = headerKey;
                var serviceKey = marketDataAccess.InsertService(service);
                logger.DebugFormat("Inserted Service \"{0}\" for Header \"{1}\".", serviceKey, headerKey);

                foreach (var change in service.Changes)
                {
                    change.ServiceKey = serviceKey;
                    var changeKey = marketDataAccess.InsertServiceChange(change);
                    logger.DebugFormat("Inserted Service Change \"{0}\" for Service \"{1}\".", changeKey, serviceKey);
                }

                foreach (var meter in service.Meters)
                {
                    meter.ServiceKey = serviceKey;
                    var meterKey = marketDataAccess.InsertServiceMeter(meter);
                    logger.DebugFormat("Inserted Service Meter \"{0}\" for Service \"{1}\".", meterKey, serviceKey);
                }

                foreach (var pole in service.Poles)
                {
                    pole.ServiceKey = serviceKey;
                    var poleKey = marketDataAccess.InsertServicePole(pole);
                    logger.DebugFormat("Inserted Service Pole \"{0}\" for Service \"{1}\".", poleKey, serviceKey);
                }

                foreach (var reject in service.Rejects)
                {
                    reject.ServiceKey = serviceKey;
                    var rejectKey = marketDataAccess.InsertServiceReject(reject);
                    logger.DebugFormat("Inserted Service Reject \"{0}\" for Service \"{1}\".", rejectKey, serviceKey);
                }
            }

            logger.Trace("Completed inserting header.");
        }
Ejemplo n.º 5
0
        public Type650Header[] ListUnprocessed(string ldcDuns, string duns, int providerId)
        {
            using (var connection = new SqlConnection(connectionString))
                using (var command = connection.CreateCommand("esp_650ExportList"))
                {
                    command.AddWithValue("@CrDuns", duns)
                    .AddWithValue("@TdspDuns", ldcDuns);

                    if (connection.State != ConnectionState.Open)
                    {
                        connection.Open();
                    }

                    var collection = new List <Type650Header>();
                    using (var reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            var item = new Type650Header
                            {
                                HeaderKey   = reader.GetInt32("650_Key"),
                                Direction   = reader.GetBoolean("Direction"),
                                ProcessFlag = reader.GetInt16("ProcessFlag"),
                            };

                            reader.TryGetInt32("MarketFileId", x => item.MarketFileId          = x);
                            reader.TryGetString("TransactionSetId", x => item.TransactionSetId = x);
                            reader.TryGetString("TransactionSetControlNbr", x => item.TransactionSetControlNbr   = x);
                            reader.TryGetString("TransactionSetPurposeCode", x => item.TransactionSetPurposeCode = x);
                            reader.TryGetString("TransactionDate", x => item.TransactionDate = x);
                            reader.TryGetString("TransactionNbr", x => item.TransactionNbr   = x);
                            reader.TryGetString("ReferenceNbr", x => item.ReferenceNbr       = x);
                            reader.TryGetString("TransactionType", x => item.TransactionType = x);
                            reader.TryGetString("ActionCode", x => item.ActionCode           = x);
                            reader.TryGetString("TdspName", x => item.TdspName = x);
                            reader.TryGetString("TdspDuns", x => item.TdspDuns = x);
                            reader.TryGetString("CrName", x => item.CrName     = x);
                            reader.TryGetString("CrDuns", x => item.CrDuns     = x);
                            reader.TryGetString("ProcessedReceivedDateTime", x => item.ProcessedReceivedDateTime = x);
                            reader.TryGetDateTime("ProcessDate", x => item.ProcessDate          = x);
                            reader.TryGetInt32("TransactionTypeID", x => item.TransactionTypeId = x);
                            reader.TryGetInt32("MarketID", x => item.MarketId     = x);
                            reader.TryGetInt32("ProviderID", x => item.ProviderId = x);

                            collection.Add(item);
                        }

                        return(collection.ToArray());
                    }
                }
        }
Ejemplo n.º 6
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);
        }
Ejemplo n.º 7
0
        public int InsertHeader(Type650Header model)
        {
            using (var connection = new SqlConnection(connectionString))
                using (var command = connection.CreateCommand("csp650HeaderInsert"))
                {
                    SqlParameter keyParameter;

                    command.AddWithValue("@MarketFileId", model.MarketFileId)
                    .AddIfNotEmptyOrDbNull("@TransactionSetPurposeCode", model.TransactionSetPurposeCode)
                    .AddIfNotEmptyOrDbNull("@TransactionDate", model.TransactionDate)
                    .AddIfNotEmptyOrDbNull("@TransactionNbr", model.TransactionNbr)
                    .AddIfNotEmptyOrDbNull("@ReferenceNbr", model.ReferenceNbr)
                    .AddIfNotEmptyOrDbNull("@TransactionType", model.TransactionType)
                    .AddIfNotEmptyOrDbNull("@ActionCode", model.ActionCode)
                    .AddIfNotEmptyOrDbNull("@TdspName", model.TdspName)
                    .AddIfNotEmptyOrDbNull("@TdspDuns", model.TdspDuns)
                    .AddWithValue("@CrName", model.CrName)
                    .AddWithValue("@CrDuns", model.CrDuns)
                    .AddIfNotEmptyOrDbNull("@ProcessedReceivedDateTime", model.ProcessedReceivedDateTime)
                    .AddWithValue("@Direction", true)
                    .AddWithValue("@MarketID", model.MarketId)
                    .AddWithValue("@ProviderID", model.ProviderId)
                    .AddWithValue("@TransactionTypeID", model.TransactionTypeId)
                    .AddOutParameter("@Key", SqlDbType.Int, out keyParameter);

                    if (connection.State != ConnectionState.Open)
                    {
                        connection.Open();
                    }

                    command.ExecuteNonQuery();

                    if (keyParameter.Value == null)
                    {
                        throw new Exception();
                    }

                    var headerKey = (int)keyParameter.Value;
                    model.HeaderKey = headerKey;

                    return(headerKey);
                }
        }
Ejemplo n.º 8
0
        public void WriteHeader(XContainer container, Type650Header header)
        {
            if (header == null)
            {
                return;
            }

            if (!header.HeaderKey.HasValue)
            {
                return;
            }

            var headerKey = header.HeaderKey.Value;
            var element   = new XElement("Header",
                                         new XElement("HeaderKey", headerKey));

            element.TryAddElement("TransactionSetId", header.TransactionSetId);
            element.TryAddElement("TransactionSetControlNbr", header.TransactionSetControlNbr);
            element.TryAddElement("TransactionSetPurposeCode", header.TransactionSetPurposeCode);
            element.TryAddElement("TransactionDate", header.TransactionDate);
            element.TryAddElement("TransactionNbr", header.TransactionNbr);
            element.TryAddElement("ReferenceNbr", header.ReferenceNbr);
            element.TryAddElement("TransactionType", header.TransactionType);
            element.TryAddElement("ActionCode", header.ActionCode);
            element.TryAddElement("TdspName", header.TdspName);
            element.TryAddElement("TdspDuns", header.TdspDuns);
            element.TryAddElement("CrName", header.CrName);
            element.TryAddElement("CrDuns", header.CrDuns);
            element.TryAddElement("ProcessedReceivedDateTime", header.ProcessedReceivedDateTime);
            container.Add(element);
            logger.TraceFormat("Added 650 \"Header\" XML element for Header {0}", headerKey);

            var names = exportDataAccess.ListNames(headerKey);

            WriteName(element, names);

            var services = exportDataAccess.ListServices(headerKey);

            WriteService(element, services);
        }
Ejemplo n.º 9
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);
        }
Ejemplo n.º 10
0
        public void Should_Produce_The_Same_Content_As_A_Sample_File()
        {
            const string expectedContent =
                @"SH|ACTTX957877905MTR|8842008|O|
01|ACTTX957877905MTR|TX|13|20130319|8842008|8841948|79|IT|TYRA BROWN|||1800 EL PASEO ST|APT 205|HOUSTON|TX|77054|BROWN TYRA|6824338859|6824338859|CENTERPOINT ENERGY|957877905|ACCENT ENERGY TEXAS|133305370|201303191003|
10|ACTTX957877905MTR|RC001|01|1008901018191437145100|N|20130319||N||||||||||||||||||||||||||||||
TL|1";

            // arrange
            var port = new CspDunsPortModel
            {
                CspDunsId        = 1,
                CspDunsPortId    = 1,
                Duns             = "133305370",
                LdcDuns          = string.Empty,
                LdcShortName     = string.Empty,
                TradingPartnerId = "ACTTX{DUNS}",
                ProviderId       = 1,
                FileType         = string.Empty,
            };

            var header = new Type650Header
            {
                HeaderKey                 = 275531,
                TransactionNbr            = "8842008",
                TransactionSetPurposeCode = "13",
                TransactionDate           = "20130319",
                TransactionType           = "79",
                ReferenceNbr              = "8841948",
                ActionCode                = "IT",
                TdspName = "Centerpoint Energy",
                TdspDuns = "957877905",
                CrName   = "Accent Energy Texas",
                CrDuns   = "133305370",
                ProcessedReceivedDateTime = "201303191003",
                TransactionTypeId         = 18,
                MarketId   = 1,
                ProviderId = 1,
            };

            var name = new Type650Name
            {
                HeaderKey        = 275531,
                NameKey          = 122923,
                EntityName       = "Tyra Brown",
                EntityName2      = string.Empty,
                EntityName3      = string.Empty,
                EntityIdType     = "8R",
                Address1         = "1800 EL PASEO ST",
                Address2         = "APT 205",
                City             = "HOUSTON",
                State            = "TX",
                PostalCode       = "77054",
                ContactName      = "Brown Tyra",
                ContactPhoneNbr1 = "682-433-8859",
                ContactPhoneNbr2 = "682-433-8859"
            };

            var service = new Type650Service
            {
                HeaderKey               = 275531,
                ServiceKey              = 275393,
                PurposeCode             = "RC001",
                PriorityCode            = "01",
                EsiId                   = "1008901018191437145100",
                SpecialProcessCode      = "N",
                ServiceReqDate          = "20130319",
                CallAhead               = "N",
                NotBeforeDate           = string.Empty,
                PremLocation            = string.Empty,
                ReportRemarks           = string.Empty,
                Directions              = string.Empty,
                MeterNbr                = string.Empty,
                Membership              = string.Empty,
                RemarksPermanentSuspend = string.Empty,
                DisconnectAuthorization = string.Empty
            };

            clientDataAccess.Expect(x => x.ListCspDunsPort())
            .Return(new[] { port });

            clientDataAccess.Expect(x => x.IdentifyMarket(Arg <string> .Is.Anything))
            .Return(1);

            exportDataAccess.Expect(x => x.ListUnprocessed(Arg <string> .Is.Anything, Arg <string> .Is.Anything, Arg.Is(1)))
            .Return(new[] { header });

            exportDataAccess.Expect(x => x.ListNames(Arg <int> .Is.Anything))
            .Return(new[] { name });

            exportDataAccess.Expect(x => x.ListServices(Arg <int> .Is.Anything))
            .Return(new[] { service });

            exportDataAccess.Stub(x => x.ListServiceRejects(Arg <int> .Is.Anything))
            .Return(new Type650ServiceReject[0]);

            exportDataAccess.Stub(x => x.ListServiceMeters(Arg <int> .Is.Anything))
            .Return(new Type650ServiceMeter[0]);

            // act
            var results = concern.Export(CancellationToken.None);

            // assert
            Assert.IsNotNull(results);
            Assert.AreEqual(1, results.Length);

            var result = results[0];

            Assert.IsNotNull(result);

            Assert.AreEqual(1, result.HeaderCount);
            CollectionAssert.Contains(result.HeaderKeys, 275531);

            result.FinalizeDocument(1);
            Assert.AreEqual(expectedContent, result.Content);
        }
Ejemplo n.º 11
0
        public Type650Header[] ListUnprocessed(string ldcDuns, string duns, int providerId)
        {
            using (var connection = new SqlConnection(connectionString))
                using (var command = connection.CreateCommand("csp650ExportList"))
                {
                    command.AddWithValue("@TDSPDuns", ldcDuns)
                    .AddWithValue("@CrDuns", duns)
                    .AddWithValue("@ProviderID", providerId);

                    if (connection.State != ConnectionState.Open)
                    {
                        connection.Open();
                    }

                    var collection = new List <Type650Header>();
                    using (var reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            var item = new Type650Header
                            {
                                HeaderKey   = reader.GetInt32("650_Key"),
                                Direction   = reader.GetBoolean("Direction"),
                                ProcessFlag = reader.GetInt16("ProcessFlag"),
                            };

                            reader.TryGetString("TransactionDate", x => item.TransactionDate = x);
                            reader.TryGetString("TransactionSetPurposeCode", x => item.TransactionSetPurposeCode = x);
                            reader.TryGetString("TransactionNbr", x => item.TransactionNbr   = x);
                            reader.TryGetString("ReferenceNbr", x => item.ReferenceNbr       = x);
                            reader.TryGetString("TransactionType", x => item.TransactionType = x);
                            reader.TryGetString("ActionCode", x => item.ActionCode           = x);
                            reader.TryGetString("TdspName", x => item.TdspName = x);
                            reader.TryGetString("TdspDuns", x => item.TdspDuns = x);
                            reader.TryGetString("CrName", x => item.CrName     = x);
                            reader.TryGetString("CrDuns", x => item.CrDuns     = x);
                            reader.TryGetString("ProcessedReceivedDateTime", x => item.ProcessedReceivedDateTime = x);
                            reader.TryGetInt32("MarketID", x => item.MarketId = x);
                            reader.TryGetInt32("TransactionTypeID", x => item.TransactionTypeId = x);
                            reader.TryGetInt32("ProviderID", x => item.ProviderId = x);

                            // this is a little concerning since this stored procedure
                            // actually returns a name record as well
                            var name = new Type650Name {
                                HeaderKey = reader.GetInt32("650_Key")
                            };
                            reader.TryGetString("Customer", x => name.EntityName       = x);
                            reader.TryGetString("CustomerName1", x => name.EntityName2 = x);
                            reader.TryGetString("CustomerName2", x => name.EntityName3 = x);
                            reader.TryGetString("Address1", x => name.Address1         = x);
                            reader.TryGetString("Address2", x => name.Address2         = x);
                            reader.TryGetString("City", x => name.City                         = x);
                            reader.TryGetString("State", x => name.State                       = x);
                            reader.TryGetString("PostalCode", x => name.PostalCode             = x);
                            reader.TryGetString("TechnicalContact", x => name.ContactName      = x);
                            reader.TryGetString("ContactPhoneNbr1", x => name.ContactPhoneNbr1 = x);
                            reader.TryGetString("ContactPhoneNbr2", x => name.ContactPhoneNbr2 = x);
                            item.AddName(name);

                            collection.Add(item);
                        }

                        return(collection.ToArray());
                    }
                }
        }
Ejemplo n.º 12
0
 public void AddHeader(Type650Header item)
 {
     headers.Add(item);
 }
Ejemplo n.º 13
0
 public void SaveHeader(Type650Header header, int marketFileId)
 {
     header.MarketFileId = marketFileId;
     SaveHeader(header);
 }