Exemple #1
0
        private void ParseSwitch(Prism867Context context, string[] marketFields)
        {
            context.RecordType = GetRecordType(context, marketFields, 0);

            var current = context.Current;

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

            var header = current as Type867Header;

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

            var model = new Type867Switch
            {
                TypeCode    = context.RecordType,
                MeterNumber = marketFields.AtIndex(2),
                SwitchDate  = marketFields.AtIndex(3)
            };

            context.PushModel(model);
            header.AddSwitch(model);
        }
Exemple #2
0
        private void ParseUnmeterDetail(Prism867Context context, string servicePeriodStart, string servicePeriodEnd, string serviceType, string description)
        {
            var current = context.Current;

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

            var header = current as Type867Header;

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

            var model = new Type867UnMeterDetail
            {
                TypeCode           = context.RecordType,
                ServicePeriodStart = servicePeriodStart,
                ServicePeriodEnd   = servicePeriodEnd,
                ServiceType        = serviceType,
                Description        = description
            };

            context.PushModel(model);
            header.AddUnMeterDetail(model);
        }
Exemple #3
0
        private void ParseNetIntervalSummary(Prism867Context context, string[] marketFields)
        {
            var current = context.Current;

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

            var header = current as Type867Header;

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

            var model = new Type867NetIntervalSummary
            {
                MeterUom      = marketFields.AtIndex(6),
                MeterInterval = marketFields.AtIndex(7),
                TypeCode      = context.RecordType
            };

            context.PushModel(model);
            header.AddNetInervalSummary(model);
        }
Exemple #4
0
        private void ParseIntervalSummary(Prism867Context context, string[] marketFields)
        {
            var current = context.Current;

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

            var header = current as Type867Header;

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

            var model = new Type867IntervalSummary
            {
                TypeCode           = context.RecordType,
                ServicePeriodStart = marketFields.AtIndex(2),
                ServicePeriodEnd   = marketFields.AtIndex(3),
                MeterUOM           = string.Empty,
                MeterInterval      = string.Empty,
            };

            if (marketFields.AtIndex(0) == "07")
            {
                model.MeterNumber = context.EsiId;
                model.MeterRole   = "A";
            }
            else
            {
                model.MeterNumber      = marketFields.AtIndex(4);
                model.MovementTypeCode = marketFields.AtIndex(18);
                model.ExchangeDate     = marketFields.AtIndex(5);
                model.ChannelNumber    = marketFields.AtIndex(16);
                model.MeterRole        = marketFields.AtIndex(10);
            }

            var meterType = marketFields.AtIndex(6) + marketFields.AtIndex(7);

            if (meterType.Length > 1)
            {
                model.MeterUOM = meterType.Substring(0, 2);
            }

            if (meterType.Length > 2)
            {
                model.MeterInterval = meterType.Substring(2, 3);
            }

            context.PushModel(model);
            header.AddIntervalSummary(model);
        }
Exemple #5
0
        private void ParseNonIntervalSummary(Prism867Context context, string[] marketFields)
        {
            var current = context.Current;

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

            var header = current as Type867Header;

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

            var meterType = string.Empty;

            switch (context.Market)
            {
            case MarketOptions.Texas:
                meterType = marketFields.AtIndex(6) + marketFields.AtIndex(7);
                break;

            case MarketOptions.Maryland:
                // MD 07 records will be imported along with with the 08 records
                // because the UOM is a part of the 08 record and must be read from there first
                context.R07ServicePeriodBeginDate = marketFields.AtIndex(2);
                context.R07ServicePeriodEndDate   = marketFields.AtIndex(3);
                return;
            }

            var model = new Type867NonIntervalSummary
            {
                TypeCode      = context.RecordType,
                MeterUOM      = string.Empty,
                MeterInterval = string.Empty,
            };

            if (meterType.Length > 1)
            {
                model.MeterUOM = meterType.Substring(0, 2);
            }

            if (meterType.Length > 2)
            {
                model.MeterInterval = meterType.Substring(2);
            }

            context.PushModel(model);
            header.AddNonIntervalSummary(model);
        }
Exemple #6
0
        private void ParseIntervalDetail(Prism867Context context, string[] marketFields)
        {
            context.RecordType = GetRecordType(context, marketFields, 0);
            switch (context.RecordType)
            {
            case "PM":
                break;

            default:
                logger.DebugFormat("Record Usage Type not found: {0}. Transaction Number \"{1}\".",
                                   context.RecordType, context.TransactionNumber);
                return;
            }

            var current = context.Current;

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

            var header = current as Type867Header;

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

            var meterType = marketFields.AtIndex(6) + marketFields.AtIndex(7);

            var model = new Type867IntervalDetail
            {
                TypeCode           = context.RecordType,
                MeterNumber        = marketFields.AtIndex(4),
                ServicePeriodStart = marketFields.AtIndex(2),
                ServicePeriodEnd   = marketFields.AtIndex(3),
                ExchangeDate       = marketFields.AtIndex(5),
                ChannelNumber      = marketFields.AtIndex(8),
                MeterRole          = marketFields.AtIndex(9),
                MeterUOM           = meterType.Length > 1 ? meterType.Substring(0, 2) : string.Empty,
                MeterInterval      = meterType.Length > 2 ? meterType.Substring(2, 3) : string.Empty,
            };

            context.PushModel(model);
            header.AddIntervalDetail(model);
        }
Exemple #7
0
        public void ParseNonIntervalSummaryForMaryland(Prism867Context context, string[] marketFields)
        {
            var current = context.Current;

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

            var header = current as Type867Header;

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

            var model = new Type867NonIntervalSummary
            {
                TypeCode      = context.RecordType,
                MeterUOM      = string.Empty,
                MeterInterval = string.Empty,
            };

            if (!string.IsNullOrEmpty(context.Uom))
            {
                var meterType = context.Uom;
                if (meterType.Length > 1)
                {
                    model.MeterUOM = meterType.Substring(0, 2);
                }

                if (meterType.Length > 2)
                {
                    model.MeterInterval = meterType.Substring(2);
                }
            }

            context.PushModel(model);
            header.AddNonIntervalSummary(model);
        }
Exemple #8
0
        private void ParseHeader(Prism867Context context, string[] marketFields)
        {
            context.TransactionNumber = marketFields.AtIndex(6);
            context.ReportTypeCode    = marketFields.AtIndex(4);

            // since we are going to end up with the value at 16
            // if the value in 35 is null or empty...
            context.EsiId = marketFields.AtIndex(16);

            // let's try to the value at 35
            // if there it will overwrite what we already have
            marketFields.TryAtIndex(35, x => context.EsiId = x);

            var model = new Type867Header
            {
                DirectionFlag          = true,
                TransactionSetId       = context.Alias,
                TransactionNbr         = context.TransactionNumber,
                TransactionDate        = marketFields.AtIndex(12),
                ReportTypeCode         = context.ReportTypeCode,
                EsiId                  = context.EsiId,
                ActionCode             = marketFields.AtIndex(5),
                PowerRegion            = marketFields.AtIndex(38),
                OriginalTransactionNbr = marketFields.AtIndex(7),
                ReferenceNbr           = marketFields.AtIndex(39),
                TdspDuns               = marketFields.AtIndex(8),
                TdspName               = marketFields.AtIndex(9),
                CrDuns                 = marketFields.AtIndex(10),
                CrName                 = marketFields.AtIndex(11),
                UtilityAccountNumber   = marketFields.AtIndex(16),
                EstimationReason       = marketFields.AtIndex(48),
                EstimationDescription  = marketFields.AtIndex(49),
                DoorHangerFlag         = marketFields.AtIndex(50),
                EsnCount               = marketFields.AtIndex(51),
                QoCount                = marketFields.AtIndex(52)
            };

            marketFields.TryAtIndex(3, x => model.TransactionSetPurposeCode = x);

            if (!string.IsNullOrEmpty(model.TransactionDate) && model.TransactionDate.Length > 8)
            {
                model.TransactionDate = model.TransactionDate.Substring(0, 8);
            }

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

            if (identifiedMarket.HasValue)
            {
                context.SetMarket(identifiedMarket.Value);
            }
            else
            {
                context.MarkAsInvalid(string.Format("Failed to load LDC Record for DUNS \"{0}\".", model.TdspDuns ?? "(null)"));
                return;
            }

            model.MarketID     = context.MarketId;
            model.MarketFileId = context.MarketFileId;

            context.PushModel(model);
        }
Exemple #9
0
        private void ParseIntervalSummaryAcrossMeters(Prism867Context context, string[] marketFields)
        {
            context.RecordType = GetRecordType(context, marketFields, 0);
            switch (context.RecordType)
            {
            case "PP":
                break;

            default:
                logger.DebugFormat("Record Usage Type not found: {0}. Transaction Number \"{1}\".",
                                   context.RecordType, context.TransactionNumber);
                return;
            }

            var current = context.Current;

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

            var header = current as Type867Header;

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

            var model = new Type867IntervalSummaryAcrossMeters
            {
                TypeCode      = context.RecordType,
                MeterRole     = marketFields.AtIndex(6),
                MeterUOM      = string.Empty,
                MeterInterval = string.Empty,
            };

            var servicePeriodStart = marketFields.AtIndex(2);

            if (servicePeriodStart.Length < 9)
            {
                model.ServicePeriodStart = servicePeriodStart;
            }
            else
            {
                model.ServicePeriodStart     = servicePeriodStart.Substring(0, 8);
                model.ServicePeriodStartTime = servicePeriodStart.Substring(8);
            }

            var servicePeriodEnd = marketFields.AtIndex(3);

            if (servicePeriodEnd.Length < 9)
            {
                model.ServicePeriodEnd = servicePeriodEnd;
            }
            else
            {
                model.ServicePeriodEnd     = servicePeriodEnd.Substring(0, 8);
                model.ServicePeriodEndTime = servicePeriodEnd.Substring(8);
            }

            var meterType = marketFields.AtIndex(4) + marketFields.AtIndex(5);

            if (meterType.Length > 1)
            {
                model.MeterUOM = meterType.Substring(0, 2);
            }

            if (meterType.Length > 2)
            {
                model.MeterInterval = meterType.Substring(2, 3);
            }

            context.PushModel(model);
            header.AddIntervalSummaryAcrossMeters(model);
        }
Exemple #10
0
        private void ParseNonIntervalDetail(Prism867Context context, string[] marketFields)
        {
            var current = context.Current;

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

            var header = current as Type867Header;

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

            var    meterType       = string.Empty;
            string ratchetDateTime = null;

            switch (context.Market)
            {
            case MarketOptions.Texas:
                meterType = marketFields.AtIndex(6) + marketFields.AtIndex(7);
                break;

            case MarketOptions.Maryland:
                meterType = context.Uom;
                break;

            case MarketOptions.Georgia:
                ratchetDateTime = marketFields.AtIndex(31);
                break;
            }

            var model = new Type867NonIntervalDetail
            {
                TypeCode           = context.RecordType,
                MeterNumber        = marketFields.AtIndex(4),
                MovementTypeCode   = marketFields.AtIndex(18),
                ServicePeriodStart = marketFields.AtIndex(2),
                ServicePeriodEnd   = marketFields.AtIndex(3),
                ExchangeDate       = marketFields.AtIndex(5),
                MeterRole          = marketFields.AtIndex(10),
                MeterUom           = string.Empty,
                MeterInterval      = string.Empty,
                RatchetDateTime    = ratchetDateTime
            };

            if (!string.IsNullOrEmpty(meterType))
            {
                if (meterType.Length > 1)
                {
                    model.MeterUom = meterType.Substring(0, 2);
                }

                if (meterType.Length > 2)
                {
                    model.MeterInterval = meterType.Substring(2);
                }
            }

            context.PushModel(model);
            header.AddNonIntervalDetail(model);
        }