Пример #1
0
        public void WriteCustInvTax(Prism810Context context, CustomerInvoiceConfigModel configModel, 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);
            }
        }
Пример #2
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);
        }
Пример #3
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);
        }
Пример #4
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);
            }
        }
Пример #5
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);
        }
Пример #6
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);
        }
Пример #7
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);
                }
            }
        }
Пример #8
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);
        }
Пример #9
0
        public void WriteCustInvDetail(Prism810Context context, CustomerInvoiceConfigModel configModel, Type810Header header)
        {
            if (!context.IsCustomerInvoice)
            {
                return;
            }

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

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

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

            var detail      = details.First();
            var premiseInfo = clientDataAccess.LoadPremiseByEsiId(header.EsiId);

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

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

            context.AppendLine(line);
            logger.TraceFormat("Wrote 810 \"10\" PRISM line for Header {0}", header.HeaderKey);
        }
Пример #10
0
        public void WriteCustInvMeterReads(Prism810Context context, CustomerInvoiceConfigModel configModel, 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);
            }
        }
Пример #11
0
        public CustomerInvoiceConfigModel LoadCustomerInvoiceConfig(string customerDuns, int ldcId)
        {
            if (string.IsNullOrWhiteSpace(customerDuns))
            {
                throw new ArgumentNullException("customerDuns");
            }

            using (var connection = new SqlConnection(connectionString))
                using (var command = connection.CreateCommand("csp810GetCustInvConfig"))
                {
                    command
                    .AddWithValue("@CustomerDUNS", customerDuns)
                    .AddWithValue("@LDCId", ldcId);

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

                    using (var reader = command.ExecuteReader())
                    {
                        if (!reader.Read())
                        {
                            return(null);
                        }

                        var item = new CustomerInvoiceConfigModel
                        {
                            CustomerDuns               = reader.GetString("CustomerDUNS"),
                            LdcId                      = reader.GetInt32("LDCID"),
                            BtCustomAddressLine        = reader.GetBoolean("BTCustomAddressLine"),
                            ReAddressLine              = reader.GetBoolean("REAddressLine"),
                            AggregateByChargeIndicator = reader.GetBoolean("AggregateByChargeIndicator"),
                            AggregateByChargeCode      = reader.GetBoolean("AggregateByChargeCode"),
                            AggregateByUom             = reader.GetBoolean("AggregateByUOM"),
                            AggregateByDescription     = reader.GetBoolean("AggregateByDescription"),
                            TaxesAsCharge              = reader.GetBoolean("TaxesAsCharge"),
                            CalculateChargeIndicator   = reader.GetBoolean("CalculateChargeIndicator"),
                            UseAccNumberForInvoice     = reader.GetBoolean("UseAccNumberForInvoice"),
                        };

                        reader.TryGetString("BTEntityName", x => item.BtEntityName         = x);
                        reader.TryGetString("BTEntityId", x => item.BtEntityId             = x);
                        reader.TryGetString("BTAttn", x => item.BtAttn                     = x);
                        reader.TryGetString("BTEntityAddress1", x => item.BtEntityAddress1 = x);
                        reader.TryGetString("BTEntityAddress2", x => item.BtEntityAddress2 = x);
                        reader.TryGetString("BTEntityCity", x => item.BtEntityCity         = x);
                        reader.TryGetString("BTEntityState", x => item.BtEntityState       = x);
                        reader.TryGetString("BTEntityZip", x => item.BtEntityZip           = x);

                        reader.TryGetString("REEntityName", x => item.ReEntityName         = x);
                        reader.TryGetString("REEntityId", x => item.ReEntityId             = x);
                        reader.TryGetString("REEntityAddress1", x => item.ReEntityAddress1 = x);
                        reader.TryGetString("REEntityAddress2", x => item.ReEntityAddress2 = x);
                        reader.TryGetString("REEntityCity", x => item.ReEntityCity         = x);
                        reader.TryGetString("REEntityState", x => item.ReEntityState       = x);
                        reader.TryGetString("REEntityZip", x => item.ReEntityZip           = x);

                        return(item);
                    }
                }
        }