// Корректная регистрация водяного счетчика
        public void AddMeterTestSuccess()
        {
            using (var monitor = new WaterMonitor(new UnitOfWorkEF(new MonitoringContextEF(CreateNewContextOptions()))))
            {
                // Регистрация новом дома
                var newHouse = new House {
                    Address = "Lenina 1"
                };
                monitor.AddBuilding(newHouse);

                // Регистрация водяного счетчика в новом доме
                var newWaterMeter = new WaterMeter
                {
                    BuildingId = newHouse.Id,
                    Id         = 1,
                    Value      = 1
                };
                monitor.AddMeter(newWaterMeter);

                // Получение полной информации о новом доме
                var house = monitor.GetBuilding(h => h.Id == newWaterMeter.BuildingId, w => w.WaterMeter);

                // В доме устновлен водяной счетчик
                Assert.NotNull(house.WaterMeter);
                // У этого счетчика правильные показатели
                Assert.Equal(house.WaterMeter.Id, newWaterMeter.Id);
                // У этого счетчика правильные показатели
                Assert.Equal(house.WaterMeter.Value, newWaterMeter.Value);
            }
        }
示例#2
0
        public async Task <IActionResult> Create(WaterMeterViewModel model)
        {
            if (ModelState.IsValid)
            {
                var user = await _userHelper.GetUserByIdAsync(model.UserId);

                var city = await _cityRepository.GetByIdAsync(model.CityId);

                var waterMeter = new WaterMeter
                {
                    Address          = model.Address,
                    CityId           = model.CityId,
                    MeterState       = model.MeterState,
                    TotalConsumption = 0,
                    ZipCode          = model.ZipCode,
                    CreationDate     = DateTime.UtcNow,
                    User             = user
                };

                await _waterMeterRepository.CreateAsync(waterMeter);

                return(RedirectToAction(nameof(Index)));
            }

            return(View(model));
        }
示例#3
0
        public async Task <IActionResult> Edit(int id, WaterMeterViewModel model)
        {
            if (id != model.MeterId)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    var waterMeter = new WaterMeter
                    {
                        Id               = model.MeterId,
                        Address          = model.Address,
                        TotalConsumption = model.TotalConsumption,
                        MeterState       = model.MeterState,
                        CityId           = model.CityId,
                        ZipCode          = model.ZipCode,
                        CreationDate     = model.CreationDate
                    };

                    _context.Update(waterMeter);
                    await _context.SaveChangesAsync();
                }
                catch
                {
                    return(NotFound());
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(model));
        }
        public ActionResult DeleteConfirmed(long id)
        {
            WaterMeter waterMeter = db.WaterMeters.Find(id);

            db.WaterMeters.Remove(waterMeter);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
        public async Task <WaterMeter> Add(WaterMeter model)
        {
            var entry = await _context.WaterMeters.AddAsync(model);

            await _context.SaveChangesAsync();

            return(entry.Entity);
        }
        public ActionResult Edit([Bind(Include = "MeterID,MeterNo,Meter_Status,BillName,Brand,MeterOwner,Ward,Street,Arrears,Meter_Account_No")] WaterMeter waterMeter, string payout)
        {
            if (ModelState.IsValid)
            {
                string billStatus;
                //Get building owner number
                PersonTable payer = db.PersonTables.Where(v => v.PersonID.Equals(waterMeter.MeterOwner)).First();

                TempData["CheckOutID"] = "ws_CO_DMZ_52859272_19072018112557828";

                //Register Payment
                Payment newPayment = new Payment {
                    PaymentMade = decimal.Parse(payout), PermitType = 5, PaymentDate = DateTime.Now, PersonID = waterMeter.MeterOwner
                };
                db.Payments.Add(newPayment);

                //Update Wallet
                PersonWallet currentWallet = db.PersonWallets.Where(v => v.PersonTable.PersonID.Equals(waterMeter.MeterOwner)).First();
                currentWallet.CurrentAmount = currentWallet.CurrentAmount - decimal.Parse(payout);
                currentWallet.LastUpdate    = DateTime.Now;

                //Update Building data
                waterMeter.Arrears = waterMeter.Arrears - decimal.Parse(payout);
                if (waterMeter.Arrears <= 0)
                {
                    billStatus = "Paid";
                }
                else
                {
                    billStatus = "Unpaid";
                }


                //Update GIS
                Result final = GetWithParams(usename, pasword, waterMeter.Arrears.ToString(), payout, billStatus, waterMeter.MeterNo.ToString());

                if (final.resultCode.Equals("Result Code: 0000"))
                {
                    //Update DB
                    db.Entry(waterMeter).State = EntityState.Modified;
                    db.SaveChanges();

                    return(RedirectToAction("MeterPaymentConfirmation", "Intermediate"));
                }
                else
                {
                    return(RedirectToAction("Edit"));
                }



                /*db.Entry(waterMeter).State = EntityState.Modified;
                 * db.SaveChanges();
                 * return RedirectToAction("Index");*/
            }
            ViewBag.MeterOwner = new SelectList(db.PersonTables, "PersonID", "Person_Name", waterMeter.MeterOwner);
            return(View(waterMeter));
        }
示例#7
0
        public IActionResult Create([FromBody] WaterMeter waterMeter)
        {
            if (ModelState.IsValid)
            {
                _monitor.AddMeter(waterMeter);
                return(CreatedAtAction(nameof(Get), new { id = waterMeter.Id }, waterMeter));
            }

            return(BadRequest());
        }
        public ActionResult Create([Bind(Include = "MeterID,MeterNo,Meter_Status,BillName,Brand,MeterOwner,Ward,Street,Arrears,Meter_Account_No")] WaterMeter waterMeter)
        {
            if (ModelState.IsValid)
            {
                db.WaterMeters.Add(waterMeter);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            ViewBag.MeterOwner = new SelectList(db.PersonTables, "PersonID", "Person_Name", waterMeter.MeterOwner);
            return(View(waterMeter));
        }
示例#9
0
        public ActionResult WaterMeterDetails(int id)
        {
            WaterMeter waterMeter = WaterMeter.GetByID(id);

            if (waterMeter != null)
            {
                return(View("WaterMeterDetails", waterMeter));
            }
            else
            {
                return(Redirect("Index"));
            }
        }
        // GET: WaterMeters/Details/5
        public ActionResult Details(long?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            WaterMeter waterMeter = db.WaterMeters.Find(id);

            if (waterMeter == null)
            {
                return(HttpNotFound());
            }
            return(View(waterMeter));
        }
        // GET: WaterMeters/Edit/5
        public ActionResult Edit(long?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            WaterMeter waterMeter = db.WaterMeters.Find(id);

            if (waterMeter == null)
            {
                return(HttpNotFound());
            }
            ViewBag.MeterOwner = new SelectList(db.PersonTables, "PersonID", "Person_Name", waterMeter.MeterOwner);
            return(View(waterMeter));
        }
示例#12
0
        public List <ChartDataViewModel> ProcessChartData(WaterMeter waterMeter)
        {
            List <ChartDataViewModel> chartData = new List <ChartDataViewModel>();

            List <Bill> list = waterMeter.Bills.OrderByDescending(b => b.MonthYear).Take(12).ToList();

            list = list.OrderBy(b => b.MonthYear).ToList();

            for (int i = 0; i < list.Count; i++)
            {
                chartData.Add(new ChartDataViewModel {
                    xValue = list[i].MonthYear.ToString("MM-yyyy"), yValue = Convert.ToDouble(list[i].Consumption)
                });
            }

            return(chartData);
        }
示例#13
0
    // Start is called before the first frame update
    void Start()
    {
        _initialScale = Water.transform.localScale.y;
        var pipe = GameObject.Find("PipeManager");

        if (pipe != null)
        {
            pipe.GetComponent <PipesManager>().BrokenPipesUpdated += OnLeakingUpdate;
        }

        var slider = GameObject.Find("WaterSlider");

        if (slider != null)
        {
            _slider = slider.GetComponent <WaterMeter>();
        }
    }
        public async Task <IActionResult> Create([Bind(ATTRIBUTES_TO_BIND)] ContractVM UpdateVm)
        {
            Person person = await _personRepository.GetById(UpdateVm.PersonId);

            Estate estate = await _estateRepository.GetById(UpdateVm.EstateId);

            WaterMeter meter = await _waterMeterRepository.GetById(UpdateVm.MeterId);

            ContractType contractType = await _contractTypeRepository.GetById(UpdateVm.ContractTypeId);

            Contract localContract = Contract.Create(contractType: contractType,
                                                     personsByEstate: PersonsByEstate.Create(person, estate),
                                                     waterMeter: meter,
                                                     initialMeterRead: UpdateVm.InitialMeterRead,
                                                     doubleBasicCharge: UpdateVm.DoubleBasicCharge,
                                                     isActive: UpdateVm.IsActive);

            return(await ConfirmSaveConcrete(UpdateVm, localContract));
        }
示例#15
0
        // Регистрация счетчиков с одним номером в разных строениях
        public void AddMeterTestDuplicate()
        {
            using (var monitor = new WaterMonitor(new UnitOfWorkEF(new MonitoringContextEF(CreateNewContextOptions()))))
            {
                // Регистрация новых домов
                var newHouse1 = new House {
                    Address = "Lenina 1"
                };
                var newHouse2 = new House {
                    Address = "Lenina 2"
                };
                monitor.AddBuilding(newHouse1);
                monitor.AddBuilding(newHouse2);

                // Регистрация водяных счетчиков с одинаковыми номерами в новых домах
                var newWaterMeter1 = new WaterMeter
                {
                    BuildingId = newHouse1.Id,
                    Id         = 1,
                    Value      = 1
                };

                var newWaterMeter2 = new WaterMeter
                {
                    BuildingId = newHouse2.Id,
                    Id         = 1,
                    Value      = 1
                };

                monitor.AddMeter(newWaterMeter1);

                // Исключение, одинаковые номера счетчиков в разных домах
                Assert.Throws <InvalidOperationException>(() => monitor.AddMeter(newWaterMeter2));
                // Первый счетчик зарегистрировался
                Assert.NotNull(monitor.GetMeter(newWaterMeter1.Id));
                // Первый счетчик зарегистрировался с первым строением
                Assert.NotNull(monitor.GetBuilding(b => b.Id == newWaterMeter1.BuildingId, w => w.WaterMeter)
                               .WaterMeter);
                // Второго счетчик не зарегистрировася со вторым строением
                Assert.Null(monitor.GetBuilding(b => b.Id == newWaterMeter2.BuildingId, w => w.WaterMeter).WaterMeter);
            }
        }
示例#16
0
        public async Task <ActionResult> RegisterCustomer(RegisterCustomerViewModel model)
        {
            if (ModelState.IsValid)
            {
                var user = new CustomerUser {
                    Id = Guid.NewGuid(), UserName = model.Email, Email = model.Email, FirstName = model.FirstName, LastName = model.LastName, CustomerNumber = model.CustomerNumber
                };
                var result = await UserManager.CreateAsync(user, model.Password);

                if (result.Succeeded)
                {
                    await this.UserManager.AddToRoleAsync(user.Id, "Customer");

                    // Add default water meter.
                    // NOTE: This is for demonstration purposes only! In the actual application, water meters would not be addef from the customer portal.
                    WaterMeter waterMeter = new WaterMeter()
                    {
                        CustomerUserGuid = user.Id,
                        Id = "123456789",
                    };
                    using (VesiPortalDbContext context = new VesiPortalDbContext())
                    {
                        WaterMeter.Add(context, waterMeter);
                    }

                    await SignInManager.SignInAsync(user, isPersistent : false, rememberBrowser : false);

                    // For more information on how to enable account confirmation and password reset please visit https://go.microsoft.com/fwlink/?LinkID=320771
                    // Send an email with this link
                    // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
                    // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                    // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");

                    TempData[StaticMembers.MESSAGE] = Resources.Messages.Messages.RegisterSuccess;
                    return(RedirectToAction("Index", "Home"));
                }
                AddErrors(result);
            }

            // If we got this far, something failed, redisplay form
            return(View(model));
        }
示例#17
0
        public async Task AfterAccountReceivedAsync(IDialogContext context, IAwaitable <AccountDetails> result)
        {
            try
            {
                this.accountDetails             = await result;
                this.accountDetails.WaterMeters = new List <WaterMeter>();
                this.currentMeterCount          = 1;

                var waterMeter       = new WaterMeter();
                var waterMeterDialog = new FormDialog <WaterMeter>(waterMeter, WaterMeter.BuildWaterMeterForm, FormOptions.PromptInStart);

                context.Call(waterMeterDialog, this.AfterWaterMeterReceivedAsync);
            }
            catch (OperationCanceledException)
            {
                await context.PostAsync("Вы отменили ввод данных.");

                context.Wait(MessageReceivedAsync);
            }
        }
示例#18
0
        public ActionResult GetConsumptionChart(ConsumptionHistoryViewModel viewModel)
        {
            CustomerUser user = null;
            ConsumptionHistoryChartViewModel consumptionHistoryChartViewModel = new ConsumptionHistoryChartViewModel();

            try
            {
                using (VesiPortalDbContext context = new VesiPortalDbContext())
                {
                    var guid = User.Identity.GetUserId();
                    user = (CustomerUser)UserManager.FindById(Guid.Parse(guid));

                    WaterMeter waterMeter = WaterMeter.Get(context, viewModel.WaterMeterGuid);
                    if (waterMeter == null)
                    {
                        throw new Exception(ErrorMessages.WaterMeterNotFound);
                    }
                    List <RegisteredWaterMeterReading> registeredWaterMeterReadings =
                        RegisteredWaterMeterReading.GetRegisteredWaterMeterReadings(context, waterMeter, viewModel.StartDate, viewModel.EndDate)
                        .ToList();

                    if (registeredWaterMeterReadings.Count > 0)
                    {
                        consumptionHistoryChartViewModel.ConsumptionAmounts = registeredWaterMeterReadings.OrderBy(x => x.ReadingDate).Select(x => x.DailyConsumption).ToList();
                        consumptionHistoryChartViewModel.ConsumptionDates   = registeredWaterMeterReadings.OrderBy(x => x.ReadingDate).Select(x => x.ReadingDate).ToList();

                        DateTime minDate = viewModel.StartDate.HasValue ? viewModel.StartDate.Value :  registeredWaterMeterReadings.Min(x => x.ReadingDate);
                        DateTime maxDate = viewModel.EndDate.HasValue ? viewModel.EndDate.Value  :registeredWaterMeterReadings.Max(x => x.ReadingDate);
                        consumptionHistoryChartViewModel.StartDate = minDate;
                        consumptionHistoryChartViewModel.EndDate   = maxDate;
                    }

                    consumptionHistoryChartViewModel.FileName = user.Id.GetHashCode().ToString() + ".png";
                    return(PartialView("_ConsumptionHistoryChart", consumptionHistoryChartViewModel));
                }
            }
            catch
            {
                return(PartialView("_ConsumptionHistoryChart", new ConsumptionHistoryChartViewModel()));
            }
        }
示例#19
0
        // Регистрация водяного счетчика в несуществующем строении
        public void AddMeterTestNotFoundBuilding()
        {
            using (var monitor = new WaterMonitor(new UnitOfWorkEF(new MonitoringContextEF(CreateNewContextOptions()))))
            {
                // Регистрация водяного счетчика в доме
                var newWaterMeter = new WaterMeter
                {
                    BuildingId = 1,
                    Id         = 1,
                    Value      = 1
                };

                // Убеждаемся что строение в котором региструем счетчик не существует
                Assert.Null(monitor.GetBuilding(newWaterMeter.BuildingId));
                // Исключение, дом в котором региструется счетчик не найден
                Assert.Throws <NotFoundException>(() => monitor.AddMeter(newWaterMeter));
                // Счетчик с несуществующим зданием не создается
                Assert.Null(monitor.GetMeter(newWaterMeter.Id));
                // Строение не создается
                Assert.Null(monitor.GetBuilding(newWaterMeter.BuildingId));
            }
        }
        public async Task <IActionResult> Edit(int id, [Bind(ATTRIBUTES_TO_BIND)] ContractVM UpdateVm)
        {
            WaterMeter meter = await _waterMeterRepository.GetById(UpdateVm.MeterId);

            ContractType contractType = await _contractTypeRepository.GetById(UpdateVm.ContractTypeId);

            var MaybePersonByState = await _personsByEstateRepository.GetDataByIdentifier(UpdateVm.PersonId, UpdateVm.EstateId);

            if (MaybePersonByState.HasNoValue)
            {
                ModelState.AddModelError(string.Empty, "No se encontró el contrato");
                return(View(UpdateVm));
            }

            Contract localContract = Contract.Create(contractType: contractType,
                                                     personsByEstate: MaybePersonByState.Value,
                                                     waterMeter: meter,
                                                     initialMeterRead: UpdateVm.InitialMeterRead,
                                                     doubleBasicCharge: UpdateVm.DoubleBasicCharge,
                                                     isActive: UpdateVm.IsActive);

            return(await ConfirmUpdateConcrete(id, localContract, UpdateVm));
        }
示例#21
0
        public HttpResponseMessage AddWaterMeterByHouseID(long houseId, [FromBody] WaterMeter wm)
        {
            if (wm == null)
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest));
            }

            var response = Request.CreateResponse <WaterMeter>(HttpStatusCode.Created, wm);

            try
            {
                var updated = m_houseRepository.AddWaterMeterByHouseID(houseId, wm);
                if (updated == null)
                {
                    throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound));
                }
            }
            catch (DbEntityValidationException ex)
            {
                response.Content = new StringContent(GetErrorLog(ex));
            }
            response.Headers.Location = GetHouseLocation(wm.WM_id);
            return(response);
        }
示例#22
0
        public ActionResult ShowConsumptionHistory(ConsumptionHistoryViewModel viewModel)
        {
            CustomerUser user         = null;
            WaterMeter   defaultMeter = null;

            try
            {
                if (User.IsInRole("Customer"))
                {
                    var guid = User.Identity.GetUserId();
                    user = (CustomerUser)UserManager.FindById(Guid.Parse(guid));

                    if (user == null)
                    {
                        throw new Exception(ErrorMessages.UserNotFound);
                    }

                    viewModel.CustomerUserGuid = user.Id;
                    List <WaterMeter> waterMeters = user.WaterMeters.ToList();

                    if (waterMeters.Count <= 0)
                    {
                        throw new Exception(ErrorMessages.UserHasNoWaterMeters);
                    }

                    for (int i = 0; i < waterMeters.Count; i++)
                    {
                        // Add select list item for each water meter
                        SelectListItem selectListItem = new SelectListItem()
                        {
                            Value = waterMeters[i].Guid.ToString(),
                            Text  = waterMeters[i].Id
                        };
                        viewModel.SelectWaterMeters.Add(selectListItem);

                        if (i == 0)
                        {
                            // Set the first meter as default choice
                            viewModel.SelectWaterMeters[i].Selected = true;
                            viewModel.WaterMeterGuid = waterMeters[i].Guid;
                            defaultMeter             = waterMeters[i];
                        }
                    }
                }

                if (defaultMeter != null)
                {
                    List <RegisteredWaterMeterReading> waterMeterReadings = defaultMeter.WaterMeterReadings.ToList();
                    viewModel.Chart.ConsumptionAmounts = waterMeterReadings.OrderBy(x => x.ReadingDate).Select(x => x.DailyConsumption).ToList();
                    viewModel.Chart.ConsumptionDates   = waterMeterReadings.OrderBy(x => x.ReadingDate).Select(x => x.ReadingDate).ToList();

                    DateTime minDate = waterMeterReadings.Min(x => x.ReadingDate);
                    DateTime maxDate = waterMeterReadings.Max(x => x.ReadingDate);

                    viewModel.StartDate      = viewModel.Chart.StartDate = minDate;
                    viewModel.EndDate        = viewModel.Chart.EndDate = maxDate;
                    viewModel.Chart.FileName = user.Id.GetHashCode().ToString() + ".png";
                }
                return(View("ConsumptionHistoryView", viewModel));
            }
            catch (Exception e)
            {
                TempData[StaticMembers.ERROR_MSG] = e.Message;
                return(RedirectToAction("Index", "Home"));
            }
        }
示例#23
0
 // View for Water
 public PartialViewResult WaterMeterView()
 {
     return(PartialView("WaterMeter", WaterMeter.GetAll()));
 }
        /// <summary>
        /// BsonDocument转实体对象
        /// </summary>
        /// <param name="doc">Bson文档</param>
        /// <returns></returns>
        protected override ExpenseAccount DocToEntity(BsonDocument doc)
        {
            ExpenseAccount entity = new ExpenseAccount();

            entity.Id        = doc["_id"].ToString();
            entity.Name      = doc["name"].ToString();
            entity.ShortName = doc["shortName"].ToString();
            entity.ModelType = doc["modelType"].ToString();
            entity.Remark    = doc["remark"].ToString();
            entity.Status    = doc["status"].ToInt32();

            if (doc.Contains("parentId"))
            {
                entity.ParentId = doc["parentId"].ToString();
            }

            entity.EnergyType = new List <int>();
            if (doc.Contains("energyType"))
            {
                BsonArray array = doc["energyType"].AsBsonArray;
                foreach (var item in array)
                {
                    entity.EnergyType.Add(item.ToInt32());
                }
            }

            entity.ElectricMeters = new List <ElectricMeter>();
            if (doc.Contains("electricMeters"))
            {
                BsonArray array = doc["electricMeters"].AsBsonArray;
                foreach (BsonDocument item in array)
                {
                    ElectricMeter meter = new ElectricMeter();
                    meter.Name          = item["name"].ToString();
                    meter.Number        = item["number"].ToString();
                    meter.SectionNumber = item["sectionNumber"].ToString();
                    meter.AccountName   = item["accountName"].ToString();
                    meter.Address       = item["address"].ToString();
                    meter.Multiple      = item["multiple"].ToDecimal();
                    meter.Remark        = item["remark"].ToString();
                    meter.Status        = item["status"].ToInt32();

                    entity.ElectricMeters.Add(meter);
                }
            }

            entity.WaterMeters = new List <WaterMeter>();
            if (doc.Contains("waterMeters"))
            {
                BsonArray array = doc["waterMeters"].AsBsonArray;
                foreach (BsonDocument item in array)
                {
                    WaterMeter meter = new WaterMeter();
                    meter.Name        = item["name"].ToString();
                    meter.Number      = item["number"].ToString();
                    meter.AccountName = item["accountName"].ToString();
                    meter.Address     = item["address"].ToString();
                    meter.Remark      = item["remark"].ToString();
                    meter.Status      = item["status"].ToInt32();

                    entity.WaterMeters.Add(meter);
                }
            }

            return(entity);
        }
示例#25
0
        /// <summary>
        /// Show the view for adding a new reading for registered customer
        /// </summary>
        /// <returns>View</returns>
        public ActionResult ShowNewRegisteredReading()
        {
            RegisteredWaterMeterReadingViewModel registeredWaterMeterReadingViewModel =
                new RegisteredWaterMeterReadingViewModel();
            WaterMeter defaultMeter = null;

            try
            {
                if (User.IsInRole("Customer"))
                {
                    var          guid = User.Identity.GetUserId();
                    CustomerUser user = (CustomerUser)UserManager.FindById(Guid.Parse(guid));

                    if (user == null)
                    {
                        throw new Exception(ErrorMessages.UserNotFound);
                    }

                    List <WaterMeter> waterMeters = user.WaterMeters.ToList();
                    if (waterMeters.Count <= 0)
                    {
                        throw new Exception(ErrorMessages.UserHasNoWaterMeters);
                    }
                    for (int i = 0; i < waterMeters.Count; i++)
                    {
                        // Add select list item for each water meter
                        SelectListItem selectListItem = new SelectListItem()
                        {
                            Value = waterMeters[i].Guid.ToString(),
                            Text  = waterMeters[i].Id
                        };
                        registeredWaterMeterReadingViewModel.SelectWaterMeters.Add(selectListItem);

                        if (i == 0)
                        {
                            // Set the first meter as default choice
                            registeredWaterMeterReadingViewModel.SelectWaterMeters[i].Selected = true;
                            defaultMeter = waterMeters[i];
                        }
                    }

                    if (defaultMeter != null)
                    {
                        // Get previous reading info for the default water meter
                        RegisteredWaterMeterReading previousReading = defaultMeter.WaterMeterReadings
                                                                      .OrderByDescending(x => x.ReadingDate)
                                                                      .ThenByDescending(x => x.Timestamp)
                                                                      .FirstOrDefault();

                        if (previousReading != null)
                        {
                            registeredWaterMeterReadingViewModel.PreviousReading     = previousReading.Reading;
                            registeredWaterMeterReadingViewModel.PreviousReadingDate = previousReading.ReadingDate;
                        }
                    }
                }
                return(View("RegisteredWaterMeterReadingAddView", registeredWaterMeterReadingViewModel));
            }
            catch (Exception e)
            {
                TempData[StaticMembers.ERROR_MSG] = e.Message;
                return(RedirectToAction("Index", "Home"));
            }
        }