Example #1
0
        public void WriteNiscTax(Prism810Context context, Type810Header header)
        {
            if (!context.IsCustomerInvoice)
            {
                return;
            }

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

            var headerKey = header.HeaderKey.Value;
            var taxes     = marketDataAccess.ListDetailItemTaxesByHeader(headerKey);

            if (taxes == null || taxes.Length == 0)
            {
                return;
            }

            foreach (var tax in taxes)
            {
                var amount = tax.TaxAmount;
                if (amount.Contains("."))
                {
                    amount = amount.Substring(0, amount.IndexOf('.') + 3);
                }

                var line = string.Format("45|{0}|{1}|{2}|||||", context.TradingPartnerId, tax.TaxTypeCode, amount);
                context.AppendLine(line);
                logger.TraceFormat("Wrote 810 \"45\" PRISM line for Header {0}", header.HeaderKey);
            }
        }
Example #2
0
        public void WriteNiscAccount(Prism810Context context, Type810Header header)
        {
            if (!context.IsCustomerInvoice)
            {
                return;
            }

            var partnerId = context.TradingPartnerId;
            var stateId   = partnerId.Substring(3, 2);

            var arSummary       = clientDataAccess.LoadArSummaryByInvoice(header.InvoiceNbr);
            var previousBalance = arSummary.PrevBal;
            var currentBalance  = arSummary.BalDue;
            var billingBalance  = (arSummary.PrevBal - arSummary.CurrPmts + arSummary.CurrAdjs);

            var line =
                string.Format(
                    "01|{0}|{1}|{2}|{3}|ME||||||||{4}|{5}|||||NISC|{6}|{7}|{8}|||||{9}|{10}|{11}|{12}|||||||||||||||||||||||||||00||||",
                    context.TradingPartnerId, stateId, header.TransactionDate, header.InvoiceNbr,
                    header.CrAccountNumber, header.EsiId, header.CustomerDUNS, context.BillFromName,
                    context.BillFromDuns, header.PaymentDueDate, previousBalance, billingBalance, currentBalance);

            context.AppendLine(line);
            logger.TraceFormat("Wrote 810 \"01\" PRISM line for Header {0}", header.HeaderKey);
        }
Example #3
0
        public void ParseHeader(Prism810Context context, string[] marketFields)
        {
            var model = new Type810Header
            {
                TransactionSetId          = "810",
                TransactionSetPurposeCode = marketFields.AtIndex(7),
                InvoiceNbr          = marketFields.AtIndex(4),
                TransactionDate     = marketFields.AtIndex(3),
                ReleaseNbr          = marketFields.AtIndex(5),
                TransactionTypeCode = marketFields.AtIndex(6),
                OriginalInvoiceNbr  = marketFields.AtIndex(12),
                EsiId          = marketFields.AtIndex(53),
                PaymentDueDate = marketFields.AtIndex(25),
                TdspDuns       = marketFields.AtIndex(20),
                TdspName       = marketFields.AtIndex(19),
                CrDuns         = marketFields.AtIndex(22),
                CrName         = marketFields.AtIndex(21),
                Direction      = true,
            };

            var identifiedMarket = clientDataAccess.IdentifyMarket(model.TdspDuns);

            if (identifiedMarket.HasValue)
            {
                context.SetMarket(identifiedMarket.Value);
            }

            model.MarketId   = context.MarketId;
            model.ProviderId = 1;

            context.PushModel(model);
        }
Example #4
0
        public void WriteRemitanceAddress(Prism810Context context, Type810Header header)
        {
            if (!context.IsCustomerInvoice)
            {
                return;
            }

            var customer = clientDataAccess.LoadCustomerDetailByEsiId(header.EsiId);

            if (customer == null)
            {
                logger.ErrorFormat("Could not load Customer from EsiId {0}.", header.EsiId);
                return;
            }

            var address1   = customer.RemitAddress1.ToAscii();
            var address2   = customer.RemitAddress2.ToAscii();
            var city       = customer.RemitCity.ToAscii();
            var state      = customer.RemitState;
            var postalCode = customer.RemitZip;

            var line = string.Format("05|{0}|RE|||||{1}|{2}|{3}|{4}|{5}||||||||", context.TradingPartnerId,
                                     address1, address2, city, state, postalCode);

            context.AppendLine(line);
            logger.TraceFormat("Wrote 810 \"05\" PRISM line for Header {0}", header.HeaderKey);
        }
Example #5
0
        public string IdentifyLdcAccountNumber(Prism810Context context, Type810Header header)
        {
            if (context.Market == MarketOptions.Maryland)
            {
                return(header.EsiId);
            }

            return(string.Empty);
        }
Example #6
0
        public int InsertHeader(Type810Header model)
        {
            using (var connection = new SqlConnection(connectionString))
                using (var command = connection.CreateCommand("csp810HeaderInsert"))
                {
                    SqlParameter keyParameter;

                    command.AddWithValue("@MarketFileId", model.MarketFileId)
                    .AddWithValue("@TransactionSetId", model.TransactionSetId)
                    .AddWithValue("@TransactionSetControlNbr", model.TransactionSetControlNbr)
                    .AddIfNotEmptyOrDbNull("@TransactionSetPurposeCode", model.TransactionSetPurposeCode)
                    .AddIfNotEmptyOrDbNull("@InvoiceNbr", model.InvoiceNbr)
                    .AddIfNotEmptyOrDbNull("@TransactionDate", model.TransactionDate)
                    .AddIfNotEmptyOrDbNull("@ReleaseNbr", model.ReleaseNbr)
                    .AddIfNotEmptyOrDbNull("@TransactionTypeCode", model.TransactionTypeCode)
                    .AddIfNotEmptyOrDbNull("@OriginalInvoiceNbr", model.OriginalInvoiceNbr)
                    .AddIfNotEmptyOrDbNull("@EsiId", model.EsiId)
                    .AddWithValue("@CRAccountNumber", model.CrAccountNumber)
                    .AddIfNotEmptyOrDbNull("@PaymentDueDate", model.PaymentDueDate)
                    .AddIfNotEmptyOrDbNull("@TdspDuns", model.TdspDuns)
                    .AddIfNotEmptyOrDbNull("@TdspName", model.TdspName)
                    .AddWithValue("@CrDuns", model.CrDuns)
                    .AddWithValue("@CrName", model.CrName)
                    .AddIfNotEmptyOrDbNull("@TotalAmount", model.TotalAmount)
                    .AddWithValue("@Direction", true)
                    .AddWithValue("@CustNoForESCO", model.CustNoForESCO)
                    .AddWithValue("@PreviousUtilityAccountNumber", model.PreviousUtilityAccountNumber)
                    .AddWithValue("@BillCalculator", model.BillCalculator)
                    .AddWithValue("@BillPresenter", model.BillPresenter)
                    .AddWithValue("@GasPoolId", model.GasPoolId)
                    .AddWithValue("@TransactionTypeID", model.TransasctionTypeId)
                    .AddWithValue("@ProviderID", model.ProviderId)
                    .AddWithValue("@MarketID", model.MarketId)
                    .AddWithValue("@CustomerDUNS", model.CustomerDUNS)
                    .AddWithValue("@ServiceDeliveryPoint", model.ServiceDeliveryPoint)
                    .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);
                }
        }
Example #7
0
        public void WriteNiscHeader(Prism810Context context, Type810Header header)
        {
            if (!context.IsCustomerInvoice)
            {
                return;
            }

            var line = string.Format("SH|{0}|{1}|O|", context.TradingPartnerId, header.InvoiceNbr);

            context.AppendLine(line);
            logger.TraceFormat("Wrote 810 \"SH\" PRISM line for Header {0}", header.HeaderKey);
        }
Example #8
0
        public void WriteSummary(Prism810Context context, Type810Header header)
        {
            var amount = header.TotalAmount;

            if (amount.Contains("."))
            {
                amount = amount.Substring(0, amount.IndexOf('.') + 3);
            }

            var line = string.Format("60|{0}|{1}|1|", context.TradingPartnerId, amount);

            context.AppendLine(line);
            logger.TraceFormat("Wrote 810 \"60\" PRISM line for Header {0}", header.HeaderKey);
        }
Example #9
0
        public void WriteDetail(Prism810Context context, Type810Header header)
        {
            if (!header.HeaderKey.HasValue)
            {
                return;
            }

            var headerKey = header.HeaderKey.Value;
            var details   = marketDataAccess.ListDetails(headerKey);

            if (details == null || details.Length == 0)
            {
                logger.ErrorFormat("No 810 Detail records found for 810 Key {0}.", headerKey);
                return;
            }

            var detail = details.First();

            string line;

            if (context.IsCustomerInvoice)
            {
                var premiseInfo = clientDataAccess.LoadPremiseByEsiId(header.EsiId);
                if (premiseInfo == null)
                {
                    logger.ErrorFormat("Could not load Premise information for EsiId {0}", header.EsiId);
                    return;
                }

                line = string.Format("10|{0}|BTC002|ELECTRIC|{1}||||{2}|{3}|{4}|{5}||{6}||{7}|{8}|{9}|{10}|{11}|||||",
                                     context.TradingPartnerId, detail.ServiceClass, detail.ServicePeriodStartDate,
                                     detail.ServicePeriodEndDate, premiseInfo.MeterNo, detail.RateClass, premiseInfo.CustName.ToAscii(),
                                     premiseInfo.Addr1.ToAscii(), premiseInfo.Addr2.ToAscii(), premiseInfo.City.ToAscii(),
                                     premiseInfo.State, premiseInfo.Zip);

                context.AppendLine(line);
                logger.TraceFormat("Wrote 810 \"10\" PRISM line for Header {0}", header.HeaderKey);
                return;
            }

            line = string.Format("10|{0}|1|ELECTRIC|{1}||{2}|{3}|||||||||", context.TradingPartnerId,
                                 detail.ServiceClass, detail.ServicePeriodStartDate, detail.ServicePeriodEndDate);

            context.AppendLine(line);
            logger.TraceFormat("Wrote 810 \"10\" PRISM line for Header {0}", header.HeaderKey);
        }
Example #10
0
        public int InsertHeader(Type810Header model)
        {
            using (var connection = new SqlConnection(connectionString))
                using (var command = connection.CreateCommand("csp810HeaderInsert"))
                {
                    SqlParameter keyParameter;

                    // this differs from other imports as the import
                    // specifies the parameters that should be used
                    // the stored procedure takes many more parameters but...
                    command.AddWithValue("@MarketFileId", model.MarketFileId)
                    .AddIfNotEmptyOrDbNull("@TransactionSetPurposeCode", model.TransactionSetPurposeCode)
                    .AddIfNotEmptyOrDbNull("@InvoiceNbr", model.InvoiceNbr)
                    .AddIfNotEmptyOrDbNull("@TransactionDate", model.TransactionDate)
                    .AddIfNotEmptyOrDbNull("@ReleaseNbr", model.ReleaseNbr)
                    .AddIfNotEmptyOrDbNull("@TransactionTypeCode", model.TransactionTypeCode)
                    .AddIfNotEmptyOrDbNull("@OriginalInvoiceNbr", model.OriginalInvoiceNbr)
                    .AddIfNotEmptyOrDbNull("@EsiId", model.EsiId)
                    .AddIfNotEmptyOrDbNull("@PaymentDueDate", model.PaymentDueDate)
                    .AddIfNotEmptyOrDbNull("@TdspDuns", model.TdspDuns)
                    .AddIfNotEmptyOrDbNull("@TdspName", model.TdspName)
                    .AddWithValue("@CrDuns", model.CrDuns)
                    .AddWithValue("@CrName", model.CrName)
                    .AddIfNotEmptyOrDbNull("@TotalAmount", model.TotalAmount)
                    .AddWithValue("@Direction", true)
                    .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);
                }
        }
Example #11
0
        public void WriteNiscAccountTaxCharges(Prism810Context context, Type810Header header)
        {
            if (!context.IsCustomerInvoice)
            {
                return;
            }

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

            var headerKey = header.HeaderKey.Value;
            var charges   = marketDataAccess.ListDetailItemChargesByHeader(headerKey);

            if (charges == null || charges.Length == 0)
            {
                return;
            }

            foreach (var charge in charges)
            {
                if (!charge.ChargeCode.Equals("D140", StringComparison.Ordinal))
                {
                    continue;
                }

                var amount = charge.Amount;
                if (amount.Contains("."))
                {
                    amount = amount.Substring(0, amount.IndexOf('.') + 3);
                }

                var line = string.Format("20|{0}|LS|{1}||||", context.TradingPartnerId, amount);
                context.AppendLine(line);
                logger.TraceFormat("Wrote 810 \"20\" PRISM line for Header {0}", header.HeaderKey);
            }
        }
Example #12
0
        public void WriteNiscMeterReads(Prism810Context context, Type810Header header)
        {
            if (!context.IsCustomerInvoice)
            {
                return;
            }

            var meterCons = clientDataAccess.ListMeterConsumptionByInvoice(header.InvoiceNbr);

            if (meterCons == null || meterCons.Length == 0)
            {
                return;
            }

            foreach (var meterCon in meterCons)
            {
                var line = string.Format("30|{0}|AA|{1}|KH|51|{2}|{3}||||", context.TradingPartnerId,
                                         meterCon.MeterFactor, meterCon.BegRead, meterCon.EndRead);

                context.AppendLine(line);
                logger.TraceFormat("Wrote 810 \"30\" PRISM line for Header {0}", header.HeaderKey);
            }
        }
Example #13
0
        public void SaveHeader(Type810Header header)
        {
            logger.Trace("Start inserting header.");

            var headerKey = marketDataAccess.InsertHeader(header);

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

            foreach (var balance in header.Balances)
            {
                balance.HeaderKey = headerKey;
                var balanceKey = marketDataAccess.InsertBalance(balance);
                logger.DebugFormat("Inserted Balance \"{0}\" for Header \"{1}\".", balanceKey, headerKey);
            }

            foreach (var payment in header.Payments)
            {
                payment.HeaderKey = headerKey;
                var paymentKey = marketDataAccess.InsertPayment(payment);
                logger.DebugFormat("Inserted Payment \"{0}\" for Header \"{1}\".", paymentKey, headerKey);
            }

            foreach (var detail in header.Details)
            {
                detail.HeaderKey = headerKey;
                var detailKey = marketDataAccess.InsertDetail(detail);
                logger.DebugFormat("Inserted Detail \"{0}\" for Header \"{1}\".", detailKey, headerKey);

                foreach (var detailItem in detail.Items)
                {
                    detailItem.DetailKey = detailKey;
                    var detailItemKey = marketDataAccess.InsertDetailItem(detailItem);
                    logger.DebugFormat("Inserted DetailItem \"{0}\" for Detail \"{1}\".", detailItemKey, detailKey);

                    foreach (var detailItemCharge in detailItem.Charges)
                    {
                        detailItemCharge.ItemKey = detailItemKey;
                        var detailItemChargeKey = marketDataAccess.InsertDetailItemCharge(detailItemCharge);
                        logger.DebugFormat("Inserted DetailItemCharge \"{0}\" for DetailItem \"{1}\".", detailItemChargeKey, detailItemKey);
                    }

                    foreach (var detailItemTax in detailItem.Taxes)
                    {
                        detailItemTax.ItemKey = detailItemKey;
                        var detailItemTaxKey = marketDataAccess.InsertDetailItemTax(detailItemTax);
                        logger.DebugFormat("Inserted DetailItemTax \"{0}\" for DetailItem \"{1}\".", detailItemTaxKey, detailItemKey);
                    }
                }

                foreach (var detailTax in detail.Taxes)
                {
                    detailTax.DetailKey = detailKey;
                    var detailTaxKey = marketDataAccess.InsertDetailTax(detailTax);
                    logger.DebugFormat("Inserted DetailTax \"{0}\" for Detail \"{1}\".", detailTaxKey, detailKey);
                }
            }

            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 summary in header.Summaries)
            {
                summary.HeaderKey = headerKey;
                var summaryKey = marketDataAccess.InsertSummary(summary);
                logger.DebugFormat("Inserted Summary \"{0}\" for Header \"{1}\".", summaryKey, headerKey);
            }

            foreach (var message in header.Messages)
            {
                message.HeaderKey = headerKey;
                var messageKey = marketDataAccess.InsertMessage(message);
                logger.DebugFormat("Inserted Message \"{0}\" for Header \"{1}\".", messageKey, headerKey);
            }

            logger.Trace("Completed inserting header.");
        }
Example #14
0
        public Type810Header ParseHeader(XElement element, IDictionary <string, XNamespace> namespaces)
        {
            XNamespace empty;

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

            var model = new Type810Header
            {
                Direction                 = true,
                TransactionSetId          = element.GetChildText(empty + "TransactionSetId"),
                TransactionSetControlNbr  = element.GetChildText(empty + "TransactionSetControlNbr"),
                TransactionDate           = element.GetChildText(empty + "TransactionDate"),
                InvoiceNbr                = element.GetChildText(empty + "InvoiceNbr"),
                ReleaseNbr                = element.GetChildText(empty + "ReleaseNbr"),
                TransactionTypeCode       = element.GetChildText(empty + "TransactionTypeCode"),
                TransactionSetPurposeCode = element.GetChildText(empty + "TransactionSetPurposeCode"),
                OriginalInvoiceNbr        = element.GetChildText(empty + "OriginalInvoiceNbr"),
                EsiId           = element.GetChildText(empty + "EsiId"),
                CrAccountNumber = element.GetChildText(empty + "CRAccountNumber"),
                PaymentDueDate  = element.GetChildText(empty + "PaymentDueDate"),
                TdspDuns        = element.GetChildText(empty + "TdspDuns"),
                TdspName        = element.GetChildText(empty + "TdspName"),
                CrDuns          = element.GetChildText(empty + "CrDuns"),
                CrName          = element.GetChildText(empty + "CrName"),
                TotalAmount     = element.GetChildText(empty + "TotalAmount"),
                CustNoForESCO   = element.GetChildText(empty + "CustNoForESCO"),
                PreviousUtilityAccountNumber = element.GetChildText(empty + "PreviousUtilityAccountNumber"),
                BillPresenter        = element.GetChildText(empty + "BillPresenter"),
                BillCalculator       = element.GetChildText(empty + "BillCalculator"),
                GasPoolId            = element.GetChildText(empty + "GasPoolId"),
                CustomerDUNS         = element.GetChildText(empty + "CustomerDUNS"),
                ChangeCode           = element.GetChildText(empty + "ChangeCode"),
                ChangeCodeDesc       = element.GetChildText(empty + "ChangeCodeDesc"),
                BillingCycleNumber   = element.GetChildText(empty + "BillingCycleNumber"),
                InvoicePeriodStart   = element.GetChildText(empty + "InvoicePeriodStart"),
                InvoicePeriodEnd     = element.GetChildText(empty + "InvoicePeriodEnd"),
                AlternateEsiId       = element.GetChildText(empty + "AlternateEsiId"),
                ServiceDeliveryPoint = element.GetChildText(empty + "ServiceDeliveryPoint"),
                TransasctionTypeId   = 24,
            };

            var balanceLoopElement = element.Element(empty + "BalanceLoop");

            if (balanceLoopElement != null)
            {
                var balanceElements = balanceLoopElement.Elements(empty + "Balance");
                foreach (var balanceElement in balanceElements)
                {
                    var balanceModel = ParseBalance(balanceElement, namespaces);
                    model.AddBalance(balanceModel);
                }
            }

            var paymentLoopElement = element.Element(empty + "PaymentLoop");

            if (paymentLoopElement != null)
            {
                var paymentElements = paymentLoopElement.Elements(empty + "Payment");
                foreach (var paymentElement in paymentElements)
                {
                    var paymentModel = ParsePayment(paymentElement, namespaces);
                    model.AddPayment(paymentModel);
                }
            }

            var detailLoopElement = element.Element(empty + "DetailLoop");

            if (detailLoopElement != null)
            {
                var detailElements = detailLoopElement.Elements(empty + "Detail");
                foreach (var detailElement in detailElements)
                {
                    var detailModel = ParseDetail(detailElement, namespaces);
                    model.AddDetail(detailModel);
                }
            }

            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 summaryLoopElement = element.Element(empty + "SummaryLoop");

            if (summaryLoopElement != null)
            {
                var summaryElements = summaryLoopElement.Elements(empty + "Summary");
                foreach (var summaryElement in summaryElements)
                {
                    var summaryModel = ParseSummary(summaryElement, namespaces);
                    model.AddSummary(summaryModel);
                }
            }

            var messageLoopElement = element.Element(empty + "MessageLoop");

            if (messageLoopElement != null)
            {
                var messageElements = messageLoopElement.Elements(empty + "Message");
                foreach (var messageElement in messageElements)
                {
                    var messageModel = ParseMessage(messageElement, namespaces);
                    model.AddMessage(messageModel);
                }
            }

            return(model);
        }
Example #15
0
        public void WriteHeader(XContainer container, Type810Header header)
        {
            if (header == null)
            {
                return;
            }

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

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

            element.TryAddElement("TransactionSetId", header.TransactionSetId);
            element.TryAddElement("TransactionSetControlNbr", header.TransactionSetControlNbr);
            element.TryAddElement("TransactionDate", header.TransactionDate);
            element.TryAddElement("InvoiceNbr", header.InvoiceNbr);
            element.Add(new XElement("ReleaseNbr", header.ReleaseNbr));
            element.TryAddElement("TransactionTypeCode", header.TransactionTypeCode);
            element.TryAddElement("TransactionSetPurposeCode", header.TransactionSetPurposeCode);
            element.TryAddElement("OriginalInvoiceNbr", header.OriginalInvoiceNbr);
            element.TryAddElement("EsiId", header.EsiId);

            if (string.IsNullOrEmpty(header.AlternateEsiId))
            {
                element.TryAddElement("AlternateEsiId", header.EsiId);
            }
            else
            {
                element.TryAddElement("AlternateEsiId", header.AlternateEsiId);
            }

            element.TryAddElement("CRAccountNumber", header.CrAccountNumber);
            element.TryAddElement("PaymentDueDate", header.PaymentDueDate);
            element.TryAddElement("TdspDuns", header.TdspDuns);
            element.TryAddElement("TdspName", header.TdspName);
            element.TryAddElement("CrDuns", header.CrDuns);
            element.TryAddElement("CrName", header.CrName);

            decimal totalAmount;

            if (decimal.TryParse(header.TotalAmount, out totalAmount))
            {
                totalAmount *= 100;
            }
            else
            {
                totalAmount = 0M;
            }

            element.TryAddElement("TotalAmount", totalAmount.ToString("0"));
            element.TryAddElement("CustNoForESCO", header.CustNoForESCO);
            element.TryAddElement("PreviousUtilityAccountNumber", header.PreviousUtilityAccountNumber);
            element.TryAddElement("BillPresenter", header.BillPresenter);
            element.TryAddElement("BillCalculator", header.BillCalculator);
            element.TryAddElement("GasPoolId", header.GasPoolId);
            element.TryAddElement("CustomerDUNS", header.CustomerDUNS);
            element.TryAddElement("ServiceDeliveryPoint", header.ServiceDeliveryPoint);
            container.Add(element);
            logger.TraceFormat("Added 810 \"Header\" XML element for Header {0}", headerKey);

            var balances = exportDataAccess.ListBalances(headerKey);

            WriteBalance(element, balances);

            var details = exportDataAccess.ListDetails(headerKey);

            WriteDetail(element, details);

            var names = exportDataAccess.ListNames(headerKey);

            WriteName(element, names);

            var summaries = exportDataAccess.ListSummaries(headerKey);

            WriteSummary(element, summaries);

            var messages = exportDataAccess.ListMessages(headerKey);

            WriteMessage(element, messages);

            if (clientDataAccess.ShouldExportMeterData(header.TdspDuns))
            {
                WriteMeter(element, details[0].Items);
            }
        }
Example #16
0
 public void SaveHeader(Type810Header header, int marketFileId)
 {
     header.MarketFileId = marketFileId;
     SaveHeader(header);
 }
Example #17
0
        public void WriteCustInvHeader(Prism810Context context, CustomerInvoiceConfigModel configModel, Type810Header header)
        {
            if (!context.IsCustomerInvoice)
            {
                return;
            }

            var referenceNbr = header.InvoiceNbr;

            if (configModel.UseAccNumberForInvoice)
            {
                referenceNbr = header.EsiId;
            }

            var line = string.Format("SH|{0}|{1}|O|", context.TradingPartnerId, referenceNbr);

            context.AppendLine(line);
            logger.TraceFormat("Wrote 810 \"SH\" PRISM line for Header {0}", header.HeaderKey);
        }
Example #18
0
        public Type810Header[] ListUnprocessed(string ldcDuns, string duns, int providerId)
        {
            using (var connection = new SqlConnection(connectionString))
                using (var command = connection.CreateCommand("esp_810ExportList"))
                {
                    command.AddIfNotEmptyOrDbNull("@CrDuns", duns)
                    .AddIfNotEmptyOrDbNull("@TDSPDuns", ldcDuns);

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

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

                            reader.TryGetInt32("MarketFileId", x => item.MarketFileId          = x);
                            reader.TryGetString("TransactionSetId", x => item.TransactionSetId = x);
                            reader.TryGetString("TransactionSetControlNbr", x => item.TransactionSetControlNbr = x);
                            reader.TryGetString("TransactionDate", x => item.TransactionDate                     = x);
                            reader.TryGetString("InvoiceNbr", x => item.InvoiceNbr                               = x);
                            reader.TryGetString("ReleaseNbr", x => item.ReleaseNbr                               = x);
                            reader.TryGetString("TransactionTypeCode", x => item.TransactionTypeCode             = x);
                            reader.TryGetString("TransactionSetPurposeCode", x => item.TransactionSetPurposeCode = x);
                            reader.TryGetString("OriginalInvoiceNbr", x => item.OriginalInvoiceNbr               = x);
                            reader.TryGetString("EsiId", x => item.EsiId = x);
                            reader.TryGetString("AlternateEsiId", x => item.AlternateEsiId   = x);
                            reader.TryGetString("CRAccountNumber", x => item.CrAccountNumber = x);
                            reader.TryGetString("PaymentDueDate", x => item.PaymentDueDate   = x);
                            reader.TryGetString("TdspDuns", x => item.TdspDuns                   = x);
                            reader.TryGetString("TdspName", x => item.TdspName                   = x);
                            reader.TryGetString("CrDuns", x => item.CrDuns                       = x);
                            reader.TryGetString("CrName", x => item.CrName                       = x);
                            reader.TryGetString("TotalAmount", x => item.TotalAmount             = x);
                            reader.TryGetInt32("ProcessFlag", x => item.ProcessFlag              = x);
                            reader.TryGetDateTime("ProcessDate", x => item.ProcessDate           = x);
                            reader.TryGetInt32("TransactionTypeID", x => item.TransasctionTypeId = x);
                            reader.TryGetInt32("MarketID", x => item.MarketId                    = x);
                            reader.TryGetInt32("ProviderID", x => item.ProviderId                = x);
                            reader.TryGetString("CustNoForESCO", x => item.CustNoForESCO         = x);
                            reader.TryGetString("PreviousUtilityAccountNumber", x => item.PreviousUtilityAccountNumber = x);
                            reader.TryGetString("BillPresenter", x => item.BillPresenter               = x);
                            reader.TryGetString("BillCalculator", x => item.BillCalculator             = x);
                            reader.TryGetString("GasPoolId", x => item.GasPoolId                       = x);
                            reader.TryGetString("CustomerDUNS", x => item.CustomerDUNS                 = x);
                            reader.TryGetString("ChangeCode", x => item.ChangeCode                     = x);
                            reader.TryGetString("ChangeCodeDesc", x => item.ChangeCodeDesc             = x);
                            reader.TryGetString("BillingCycleNumber", x => item.BillingCycleNumber     = x);
                            reader.TryGetString("InvoicePeriodStart", x => item.InvoicePeriodStart     = x);
                            reader.TryGetString("InvoicePeriodEnd", x => item.InvoicePeriodEnd         = x);
                            reader.TryGetString("ServiceDeliveryPoint", x => item.ServiceDeliveryPoint = x);

                            collection.Add(item);
                        }

                        return(collection.ToArray());
                    }
                }
        }
Example #19
0
 public void AddHeader(Type810Header item)
 {
     headers.Add(item);
 }
Example #20
0
        public void WriteCustInvAccount(Prism810Context context, CustomerInvoiceConfigModel configModel, Type810Header header)
        {
            if (!context.IsCustomerInvoice)
            {
                return;
            }

            var partnerId = context.TradingPartnerId;
            var stateId   = partnerId.Substring(3, 2);

            var invoiceNbr = header.InvoiceNbr;

            if (configModel.UseAccNumberForInvoice)
            {
                invoiceNbr = header.EsiId;
            }

            var arSummary = clientDataAccess.LoadArSummaryByInvoice(header.InvoiceNbr);

            if (arSummary == null)
            {
                logger.ErrorFormat("Could not load Customer AR Summary from Invoice {0}", header.InvoiceNbr);
                return;
            }

            var previousBalance = arSummary.PrevBal;
            var currentBalance  = arSummary.BalDue;
            var billingBalance  = (arSummary.PrevBal - arSummary.CurrPmts + arSummary.CurrAdjs);

            var billActionCode = "BD";
            var ldcName        = header.TdspName;

            if (header.CustomerDUNS.Equals("007928344"))
            {
                billActionCode = "PR";
            }

            if (header.CustomerDUNS.Equals("055458350"))
            {
                billActionCode = "ME";
                ldcName        = "NISC";
            }

            if (header.CustomerDUNS.Equals("PROKARMAI", StringComparison.Ordinal))
            {
                billActionCode = "ME";
                ldcName        = "PROKARMA";
            }

            var line =
                string.Format(
                    "01|{0}|{1}|{2}|{3}|{4}||||||||{5}|{6}|||||{7}|{8}|{9}|{10}|||||{11}|{12}|{13}|{14}|||||||||||||||||||||||||||00||||",
                    context.TradingPartnerId, stateId, header.TransactionDate, invoiceNbr, billActionCode,
                    header.CrAccountNumber, header.EsiId, ldcName, header.CustomerDUNS, context.BillFromName,
                    context.BillFromDuns, header.PaymentDueDate, previousBalance, billingBalance, currentBalance);

            context.AppendLine(line);
            logger.TraceFormat("Wrote 810 \"01\" PRISM line for Header {0}", header.HeaderKey);
        }
Example #21
0
        public void WriteCustInvAddress(Prism810Context context, CustomerInvoiceConfigModel configModel, Type810Header header)
        {
            if (!context.IsCustomerInvoice)
            {
                return;
            }

            string entityName;
            string entityId;
            string address1;
            string address2;
            string city;
            string state;
            string postalCode;
            var    attn = string.Empty;

            if (configModel.BtCustomAddressLine)
            {
                entityName = configModel.BtEntityName;
                entityId   = configModel.BtEntityId;
                attn       = configModel.BtAttn;
                address1   = configModel.BtEntityAddress1;
                address2   = configModel.BtEntityAddress2;
                city       = configModel.BtEntityCity;
                state      = configModel.BtEntityState;
                postalCode = configModel.BtEntityZip;
            }
            else
            {
                var customer = clientDataAccess.LoadCustomerDetailByEsiId(header.EsiId);
                if (customer == null)
                {
                    logger.ErrorFormat("Could not load Customer from EsiId {0}.", header.EsiId);
                    return;
                }

                entityName = customer.CustName.ToAscii();
                entityId   = customer.CustNo.ToAscii();
                address1   = customer.Address1.ToAscii();
                address2   = customer.Address2.ToAscii();
                city       = customer.City.ToAscii();
                state      = customer.State.ToAscii();
                postalCode = customer.Zip.ToAscii();
            }

            var line = string.Format("05|{0}|BT|{1}|{2}|{3}||{4}|{5}|{6}|{7}|{8}||||||||", context.TradingPartnerId,
                                     entityName, entityId, attn, address1, address2, city, state, postalCode);

            context.AppendLine(line);
            logger.TraceFormat("Wrote 810 \"05\" PRISM line for Header {0}", header.HeaderKey);
        }
Example #22
0
        public void WriteAccount(Prism810Context context, Type810Header header)
        {
            var partnerId = context.TradingPartnerId;
            var stateId   = partnerId.Substring(3, 2);

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

            var headerKey = header.HeaderKey.Value;

            string line;

            if (context.IsCustomerInvoice)
            {
                var details = marketDataAccess.ListDetails(headerKey);
                if (details == null || details.Length == 0)
                {
                    logger.ErrorFormat("No 810 Detail records found for 810 Key {0}", headerKey);
                    return;
                }

                var customer = clientDataAccess.LoadCustomerDetailByEsiId(header.EsiId);
                if (customer == null)
                {
                    logger.ErrorFormat("Could not load Customer from EsiId {0}.", header.EsiId);
                    return;
                }

                var arSummary = clientDataAccess.LoadArSummaryByInvoice(header.InvoiceNbr);
                if (arSummary == null)
                {
                    logger.ErrorFormat("Could not load Customer AR Summary from Invoice {0}", header.InvoiceNbr);
                    return;
                }

                var detail          = details.First();
                var previousBalance = arSummary.PrevBal;
                var currentBalance  = arSummary.BalDue;
                var billingBalance  = (arSummary.PrevBal - arSummary.CurrPmts + arSummary.CurrAdjs);

                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}|||||||||00||||",
                        context.TradingPartnerId, stateId, header.TransactionDate, header.InvoiceNbr,
                        header.TransactionTypeCode, customer.CustNo, header.EsiId, context.BillFromName,
                        context.BillFromDuns, customer.CustName.ToAscii(), header.CustNoForESCO, header.PaymentDueDate,
                        previousBalance, billingBalance, currentBalance, detail.ServicePeriodStartDate,
                        detail.ServicePeriodEndDate, customer.Address1.ToAscii(), customer.Address2.ToAscii(),
                        customer.City.ToAscii(), customer.State, customer.Zip);

                context.AppendLine(line);
                logger.TraceFormat("Wrote 810 \"01\" PRISM line for Header {0}", header.HeaderKey);
                return;
            }

            var customerName = string.Empty;

            if (context.Market == MarketOptions.Texas)
            {
                var firstName = marketDataAccess.LoadFirstName(headerKey);
                if (firstName != null)
                {
                    customerName = firstName.EntityName;
                    if (customerName.Length > 60)
                    {
                        customerName = customerName.Substring(0, 60);
                    }
                }
            }

            var esiId        = IdentifyEsiId(context, header);
            var membershipId = IdentifyLdcAccountNumber(context, header);

            line =
                string.Format(
                    "01|{0}|{1}|{2}|{3}|{4}|{5}|{6}|||||{7}|{8}|{14}|||{15}|{16}|{9}|{10}|{11}|{12}|{17}||||||||||||||||||||||||||||||{13}|||||",
                    context.TradingPartnerId, stateId, header.TransactionDate, header.InvoiceNbr, header.ReleaseNbr,
                    header.TransactionTypeCode, header.TransactionSetPurposeCode, header.OriginalInvoiceNbr,
                    header.CrAccountNumber, context.BillFromName, context.BillFromDuns, header.CrName.ToAscii(),
                    header.CrDuns, esiId, membershipId, header.BillPresenter, header.BillCalculator,
                    customerName.ToAscii());

            context.AppendLine(line);
            logger.TraceFormat("Wrote 810 \"01\" PRISM line for Header {0}", header.HeaderKey);
        }
Example #23
0
        public void WriteCustInvRemitanceAddress(Prism810Context context, CustomerInvoiceConfigModel configModel, Type810Header header)
        {
            if (!context.IsCustomerInvoice)
            {
                return;
            }

            if (!configModel.ReAddressLine)
            {
                return;
            }

            var entityName = configModel.ReEntityName.ToAscii();
            var entityId   = configModel.ReEntityId.ToAscii();
            var address1   = configModel.ReEntityAddress1.ToAscii();
            var address2   = configModel.ReEntityAddress2.ToAscii();
            var city       = configModel.ReEntityCity.ToAscii();
            var state      = configModel.ReEntityState;
            var postalCode = configModel.ReEntityZip;

            var line = string.Format("05|{0}|RE|{1}|{2}|||{3}|{4}|{5}|{6}|{7}||||||||", context.TradingPartnerId,
                                     entityName, entityId, address1, address2, city, state, postalCode);

            context.AppendLine(line);
            logger.TraceFormat("Wrote 810 \"05\" PRISM line for Header {0}", header.HeaderKey);
        }
Example #24
0
        public void WriteNiscCharges(Prism810Context context, Type810Header header)
        {
            if (!context.IsCustomerInvoice)
            {
                return;
            }

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

            var headerKey = header.HeaderKey.Value;
            var charges   = marketDataAccess.ListDetailItemChargesByHeader(headerKey);

            if (charges == null || charges.Length == 0)
            {
                return;
            }

            var lineNumber = 1;

            foreach (var charge in charges)
            {
                if (charge.ChargeCode.Equals("D140", StringComparison.Ordinal))
                {
                    continue;
                }

                var rate = charge.Rate;
                if (rate.Length > 0)
                {
                    rate = decimal.Round(decimal.Parse(rate), 5).ToString();
                }

                var uom = charge.UOM;
                if (string.IsNullOrEmpty(uom))
                {
                    uom = "EA";
                }

                var amount = charge.Amount;
                if (amount.Contains("."))
                {
                    amount = amount.Substring(0, amount.IndexOf('.') + 3);
                }

                var    chargeIndicator = "A";
                double amountValue;
                if (double.TryParse(charge.Amount, out amountValue))
                {
                    if (amountValue > 0d)
                    {
                        chargeIndicator = "C";
                    }
                }

                var line = string.Format("40|{0}|{1}|{2}||{3}|{4}|{5}|{6}|{7}||{8}||", context.TradingPartnerId,
                                         lineNumber, chargeIndicator, charge.ChargeCode, amount, rate, uom, charge.Quantity,
                                         charge.Description);

                lineNumber++;
                context.AppendLine(line);
                logger.TraceFormat("Wrote 810 \"40\" PRISM line for Header {0}", header.HeaderKey);
            }
        }
Example #25
0
        public void WriteCustInvSummary(Prism810Context context, CustomerInvoiceConfigModel configModel, Type810Header header)
        {
            if (!context.IsCustomerInvoice)
            {
                return;
            }

            var runningTotal = (Math.Truncate(context.RunningTotal * 100) / 100).ToString("#.#0");

            var line = string.Format("60|{0}|{1}|1|", context.TradingPartnerId, runningTotal);

            context.AppendLine(line);
            logger.TraceFormat("Wrote 810 \"60\" PRISM line for Header {0}", header.HeaderKey);
        }