Пример #1
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);
        }
Пример #2
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);
        }
Пример #3
0
        public void ParseDetail(Prism810Context context, string[] marketFields)
        {
            var current = context.Current;

            if (current == null || current.ModelType != Type810Types.Header)
            {
                throw new InvalidOperationException();
            }

            var header = current as Type810Header;

            if (header == null)
            {
                throw new InvalidOperationException();
            }

            var model = new Type810Detail
            {
                AssignedId             = marketFields.AtIndex(2),
                ServiceTypeCode        = "SV",
                ServiceType            = marketFields.AtIndex(3),
                ServiceClassCode       = "C3",
                ServiceClass           = marketFields.AtIndex(4),
                RateClass              = marketFields.AtIndex(11),
                RateSubClass           = marketFields.AtIndex(13),
                ServicePeriodStartDate = marketFields.AtIndex(6),
                ServicePeriodEndDate   = marketFields.AtIndex(7),
            };

            header.AddDetail(model);
            context.PushModel(model);
        }
Пример #4
0
        public void ParseDetailItem(Prism810Context context, string[] marketFields)
        {
            var current = context.Current;

            if (current == null || current.ModelType != Type810Types.Detail)
            {
                throw new InvalidOperationException();
            }

            var detail = current as Type810Detail;

            if (detail == null)
            {
                throw new InvalidOperationException();
            }

            var model = new Type810DetailItem
            {
                AssignedId = marketFields.AtIndex(2),
                ServiceOrderCompleteDate  = marketFields.AtIndex(13),
                UnmeteredServiceDateRange = marketFields.AtIndex(16),
                InvoiceNbr      = marketFields.AtIndex(15),
                ServiceOrderNbr = marketFields.AtIndex(14),
                Consumption     = marketFields.AtIndex(17),
                EffectiveDate   = marketFields.AtIndex(18),
            };

            detail.AddItem(model);
            context.PushModel(model);
        }
Пример #5
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);
        }
Пример #6
0
        public void ParseTax(Prism810Context context, string[] marketFields)
        {
            var current = context.Current;

            if (current == null || current.ModelType != Type810Types.DetailItem)
            {
                throw new InvalidOperationException();
            }

            var detailItem = current as Type810DetailItem;

            if (detailItem == null)
            {
                throw new InvalidOperationException();
            }

            var model = new Type810DetailItemTax
            {
                TaxTypeCode      = marketFields.AtIndex(2),
                TaxAmount        = marketFields.AtIndex(3),
                RelationshipCode = marketFields.AtIndex(6),
            };

            detailItem.AddTax(model);
        }
Пример #7
0
        public void ParseCharge(Prism810Context context, string[] marketFields)
        {
            var current = context.Current;

            if (current == null || current.ModelType != Type810Types.DetailItem)
            {
                throw new InvalidOperationException();
            }

            var detailItem = current as Type810DetailItem;

            if (detailItem == null)
            {
                throw new InvalidOperationException();
            }

            var amount = (marketFields.AtIndexDecimal(6) * 100);
            var model  = new Type810DetailItemCharge
            {
                ChargeIndicator = marketFields.AtIndex(3),
                AgencyCode      = "EU",
                ChargeCode      = marketFields.AtIndex(5),
                Amount          = amount.ToString("0"),
                Rate            = marketFields.AtIndex(7),
                UOM             = marketFields.AtIndex(8),
                Quantity        = marketFields.AtIndex(9),
                Description     = marketFields.AtIndex(11),
            };

            detailItem.AddCharge(model);
        }
Пример #8
0
        public void ParseSummary(Prism810Context context, string[] marketFields)
        {
            context.RevertToHeader();
            var current = context.Current;

            if (current == null || current.ModelType != Type810Types.Header)
            {
                throw new InvalidOperationException();
            }

            var header = current as Type810Header;

            if (header == null)
            {
                throw new InvalidOperationException();
            }

            var model = new Type810Summary
            {
                TotalAmount    = marketFields.AtIndex(2),
                TotalLineItems = marketFields.AtIndex(3),
            };

            header.AddSummary(model);
        }
Пример #9
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);
            }
        }
Пример #10
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);
        }
Пример #11
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);
        }
Пример #12
0
        public void WriteCustInvCharges(Prism810Context context, CustomerInvoiceConfigModel configModel, 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) && !configModel.TaxesAsCharge)
                {
                    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 line = string.Format("40|{0}|{1}|{2}||{3}|{4}|{5}|{6}|{7}||{8}||", context.TradingPartnerId,
                                         lineNumber, charge.ChargeIndicator, charge.ChargeCode, amount, rate, uom, charge.Quantity,
                                         charge.Description);

                lineNumber++;
                context.AddToRunningTotal(amount);

                context.AppendLine(line);
                logger.TraceFormat("Wrote 810 \"40\" PRISM line for Header {0}", header.HeaderKey);
            }
        }
Пример #13
0
        public string IdentifyLdcAccountNumber(Prism810Context context, Type810Header header)
        {
            if (context.Market == MarketOptions.Maryland)
            {
                return(header.EsiId);
            }

            return(string.Empty);
        }
Пример #14
0
        public void ParseLine(Prism810Context 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":
                context.RevertToHeader();
                context.FirstCharge = true;
                ParseDetail(context, marketFields);
                break;

            case "40":
                if (context.FirstCharge)
                {
                    ParseDetailItem(context, marketFields);
                    context.FirstCharge = false;
                }
                ParseCharge(context, marketFields);
                break;

            case "45":
                ParseTax(context, marketFields);
                break;

            case "60":
                ParseSummary(context, marketFields);
                break;

            case "TL":
                context.ResolveToHeader();
                marketFields.TryAtIndexInt(1, x => context.TransactionAuditCount = x);
                break;
            }
        }
Пример #15
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);
        }
Пример #16
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);
        }
Пример #17
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);
        }
Пример #18
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);
        }
Пример #19
0
        public void WriteCustInvAccountTaxCharges(Prism810Context context, CustomerInvoiceConfigModel configModel, Type810Header header)
        {
            if (!context.IsCustomerInvoice)
            {
                return;
            }

            if (configModel.TaxesAsCharge)
            {
                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);

                if (configModel.IncludeTaxesInTotal)
                {
                    context.AddToRunningTotal(amount);
                }
            }
        }
Пример #20
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);
        }
Пример #21
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);
        }
Пример #22
0
        public IMarketFileParseResult Parse(Stream stream)
        {
            var context = new Prism810Context();

            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 810. Transactions may not be completed.");
                context.ResolveToHeader();
            }

            return(context.Results);
        }
Пример #23
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);
            }
        }
Пример #24
0
        public IMarketFileExportResult[] Export(CancellationToken token)
        {
            var cspDunsPorts = clientDataAccess.ListCspDunsPort();
            var prismPorts   = cspDunsPorts
                               .Where(x => x.ProviderId == 1)
                               .ToArray();

            var context = new Prism810Context();

            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 810 Prism records found to export for TDSP Duns \"{0}\" and CR Duns \"{1}\".",
                                       prismPort.LdcDuns, prismPort.Duns);
                    continue;
                }

                logger.DebugFormat("Exporting {0} unprocessed 810 record(s) for TDSP Duns \"{1}\" and CR Duns \"{2}\".",
                                   headers.Length, prismPort.LdcDuns, prismPort.Duns);

                var cspDuns = clientDataAccess.LoadDunsByCspDunsId(prismPort.CspDunsId);

                foreach (var header in headers)
                {
                    if (!header.HeaderKey.HasValue)
                    {
                        continue;
                    }

                    if (token.IsCancellationRequested)
                    {
                        break;
                    }

                    var headerKey = header.HeaderKey.Value;
                    context.Initialize();

                    var ldcModel = clientDataAccess.LoadLdcByTdspDuns(header.TdspDuns);
                    if (ldcModel == null)
                    {
                        logger.ErrorFormat("Failed to load LDC for DUNS \"{0}\".", header.TdspDuns);
                        return(context.Models);
                    }

                    context.SetMarket(ldcModel.MarketId);
                    context.SetFileProperties(prismPort, header.TdspDuns, "INV");
                    context.IsCustomerInvoice = false;
                    context.BillFromName      = header.TdspName;
                    context.BillFromDuns      = header.TdspDuns;

                    if (!string.IsNullOrWhiteSpace(cspDuns) && cspDuns.Equals("RYDER0000", StringComparison.Ordinal))
                    {
                        context.SetFileNamePrefix("ECPCUSTINVRYDER");
                    }

                    if (!string.IsNullOrEmpty(header.CustomerDUNS))
                    {
                        var seekDuns = header.TdspDuns;
                        if (seekDuns.Length > 9)
                        {
                            seekDuns = seekDuns.Substring(0, 9);
                        }

                        var partnerId = context.TradingPartnerId.Replace(seekDuns, header.CustomerDUNS);
                        context.SetTradingPartnerId(partnerId);

                        var cspDunsList = clientDataAccess.ListCspDuns();
                        if (cspDunsList == null || cspDunsList.Length == 0)
                        {
                            logger.Error("No CSP DUNS exist or none could be found.");
                            return(context.Models);
                        }

                        var cspDunsItem = cspDunsList.First();
                        context.IsCustomerInvoice = true;
                        context.BillFromName      = cspDunsItem.Description;
                        context.BillFromDuns      = cspDunsItem.Duns;

                        if (header.CustomerDUNS.Equals("055458350"))
                        {
                            var crdPartnerId      = context.TradingPartnerId;
                            var fixedCrdPartnerId = string.Concat("CRD",
                                                                  crdPartnerId.Substring(3, crdPartnerId.Length - 3));

                            context.SetTradingPartnerId(fixedCrdPartnerId);
                        }

                        if (header.CustomerDUNS.Equals("PROKARMAI", StringComparison.Ordinal))
                        {
                            var lptPartnerId      = context.TradingPartnerId;
                            var fixedLptPartnerId = string.Concat("LPT",
                                                                  lptPartnerId.Substring(3, lptPartnerId.Length - 3));

                            var zzDuns = string.Concat("ZZ", header.CustomerDUNS);
                            context.SetFileProperties(prismPort, zzDuns, fixedLptPartnerId, header.CustomerDUNS, string.Empty);
                        }
                    }

                    context.SetHeaderId(headerKey);

                    var invoiceConfig = clientDataAccess
                                        .LoadCustomerInvoiceConfig(header.CustomerDUNS, ldcModel.LdcId);

                    if (invoiceConfig != null)
                    {
                        var zzPartnerId      = context.TradingPartnerId;
                        var fixedZzPartnerId = string.Concat(zzPartnerId.Substring(0, 3), "ZZ",
                                                             zzPartnerId.Substring(5, zzPartnerId.Length - 5));

                        context.SetTradingPartnerId(fixedZzPartnerId);

                        var shouldSkipMeterReads   = false;
                        var configuredCustomerDuns = clientDataAccess
                                                     .LoadParameterConfigurationValue("CustomerDunsConfiguredForSkip30Record");
                        if (!string.IsNullOrWhiteSpace(configuredCustomerDuns))
                        {
                            shouldSkipMeterReads = configuredCustomerDuns.Equals(invoiceConfig.CustomerDuns);
                        }

                        WriteCustInvHeader(context, invoiceConfig, header);
                        WriteCustInvAccount(context, invoiceConfig, header);
                        WriteCustInvAddress(context, invoiceConfig, header);
                        WriteCustInvRemitanceAddress(context, invoiceConfig, header);
                        WriteCustInvDetail(context, invoiceConfig, header);
                        WriteCustInvAccountTaxCharges(context, invoiceConfig, header);
                        if (!shouldSkipMeterReads)
                        {
                            WriteCustInvMeterReads(context, invoiceConfig, header);
                        }
                        WriteCustInvCharges(context, invoiceConfig, header);
                        WriteCustInvTax(context, invoiceConfig, header);
                        WriteCustInvSummary(context, invoiceConfig, header);
                    }
                    else
                    {
                        if (context.TradingPartnerId.Equals("CRDTX055458350INV", StringComparison.Ordinal))
                        {
                            var txPartnerId      = context.TradingPartnerId;
                            var fixedTxPartnerId = txPartnerId.Replace("CRDTX", "CRDZZ");

                            context.SetTradingPartnerId(fixedTxPartnerId);

                            WriteNiscHeader(context, header);
                            WriteNiscAccount(context, header);
                            WriteNiscRemitanceAddress(context, header);
                            WriteNiscDetail(context, header);
                            WriteNiscAccountTaxCharges(context, header);
                            WriteNiscMeterReads(context, header);
                            WriteNiscCharges(context, header);
                            WriteNiscTax(context, header);
                            WriteNiscSummary(context, header);
                        }
                        else
                        {
                            WriteHeader(context, header);
                            WriteAccount(context, header);
                            WriteRemitanceAddress(context, header);
                            WriteDetail(context, header);
                            WriteMeterReads(context, header);
                            WriteCharges(context, header);
                            WriteTax(context, header);
                            WriteSummary(context, header);
                        }
                    }
                }
            }

            return(context.Models);
        }
Пример #25
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);
        }
Пример #26
0
        public void WriteCharges(Prism810Context context, Type810Header header)
        {
            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)
            {
                var rate = charge.Rate;
                if (rate.Length > 0)
                {
                    rate = decimal.Round(decimal.Parse(rate), 5).ToString();
                }

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

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

                    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}||", context.TradingPartnerId,
                                             chargeIndicator, charge.ChargeCode, amount, rate, uom, charge.Quantity, charge.Description);

                    context.AppendLine(line);
                    logger.TraceFormat("Wrote 810 \"40\" PRISM line for Header {0}", header.HeaderKey);
                }
                else
                {
                    var description = "---";
                    if (!string.IsNullOrEmpty(charge.Description))
                    {
                        description = charge.Description;
                    }
                    else if (!string.IsNullOrEmpty(charge.ChargeIndicator))
                    {
                        description = charge.ChargeIndicator;
                    }

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

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