예제 #1
0
        public int InsertNonIntervalDetail(Type867NonIntervalDetail model)
        {
            using (var connection = new SqlConnection(_connectionString))
                using (var command = connection.CreateCommand("csp867NonIntervalDetailInsert"))
                {
                    SqlParameter keyParameter;

                    command.AddWithValue("@867_Key", model.HeaderKey)
                    .AddIfNotEmptyOrDbNull("@TypeCode", model.TypeCode)
                    .AddIfNotEmptyOrDbNull("@MeterNumber", model.MeterNumber)
                    .AddIfNotEmptyOrDbNull("@MovementTypeCode", model.MovementTypeCode)
                    .AddIfNotEmptyOrDbNull("@ServicePeriodStart", model.ServicePeriodStart)
                    .AddIfNotEmptyOrDbNull("@ServicePeriodEnd", model.ServicePeriodEnd)
                    .AddIfNotEmptyOrDbNull("@ExchangeDate", model.ExchangeDate)
                    .AddIfNotEmptyOrDbNull("@MeterRole", model.MeterRole)
                    .AddIfNotEmptyOrDbNull("@MeterUOM", model.MeterUom)
                    .AddIfNotEmptyOrDbNull("@MeterInterval", model.MeterInterval)
                    .AddWithValue("@CommodityCode", model.CommodityCode)
                    .AddWithValue("@NumberOfDials", model.NumberOfDials)
                    .AddWithValue("@ServicePointId", model.ServicePointId)
                    .AddWithValue("@UtilityRateServiceClass", model.UtilityRateServiceClass)
                    .AddWithValue("@RateSubClass", model.RateSubClass)
                    .AddWithValue("@Ratchet_DateTime", model.RatchetDateTime)
                    .AddOutParameter("@NonIntervalDetail_Key", SqlDbType.Int, out keyParameter);

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

                    command.ExecuteNonQuery();

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

                    var key = (int)keyParameter.Value;
                    model.NonIntervalDetailKey = key;

                    return(key);
                }
        }
예제 #2
0
        public Type867NonIntervalDetail ParseNonIntervalDetail(XElement element, IDictionary <string, XNamespace> namespaces)
        {
            XNamespace empty;

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

            var model = new Type867NonIntervalDetail
            {
                TypeCode                = element.GetChildText(empty + "TypeCode"),
                MeterNumber             = element.GetChildText(empty + "MeterNumber"),
                MovementTypeCode        = element.GetChildText(empty + "MovementTypeCode"),
                ServicePeriodStart      = element.GetChildText(empty + "ServicePeriodStart"),
                ServicePeriodEnd        = element.GetChildText(empty + "ServicePeriodEnd"),
                ExchangeDate            = element.GetChildText(empty + "ExchangeDate"),
                MeterRole               = element.GetChildText(empty + "MeterRole"),
                MeterInterval           = element.GetChildText(empty + "MeterInterval"),
                CommodityCode           = element.GetChildText(empty + "CommodityCode"),
                NumberOfDials           = element.GetChildText(empty + "NumberOfDials"),
                ServicePointId          = element.GetChildText(empty + "ServicePointId"),
                UtilityRateServiceClass = element.GetChildText(empty + "UtilityRateServiceClass"),
                RateSubClass            = element.GetChildText(empty + "RateSubClass"),
                MeterUom                = element.GetChildText(empty + "MeterUOM"),
                RatchetDateTime         = element.GetChildText(empty + "Ratchet_DateTime")
            };

            var quantitiesLoopElement = element.Element(empty + "NonIntervalDetailQtyLoop");

            if (quantitiesLoopElement != null)
            {
                var quantityElements = quantitiesLoopElement.Elements(empty + "NonIntervalDetailQty");
                foreach (var quantityElement in quantityElements)
                {
                    var quantityModel = ParseNonIntervalDetailQty(quantityElement, namespaces);
                    model.AddQuantity(quantityModel);
                }
            }

            return(model);
        }
예제 #3
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);
        }