public IActionResult Add([FromBody] Meter meter)
        {
            var dbMeterType      = helper.ConvertMeterType(meter.MeterType);
            var dbMeterStatus    = helper.ConvertMeterStatus(meter.MeterStatus);
            var dbMeterCondition = helper.ConvertMeterCondition(meter.MeterCondition);


            var dbModel = new DbModels.Meter();

            dbModel.MIRN           = meter.MIRN;
            dbModel.MeterType      = dbMeterType;
            dbModel.MeterStatus    = dbMeterStatus;
            dbModel.MeterCondition = dbMeterCondition;
            dbModel.ExpriyDate     = meter.ExpriyDate;

            var result = _repo.Add(dbModel);

            if (result.Equals("-1"))
            {
                ModelState.AddModelError("Error", "Meter ID already exists");
                return(NotFound());
            }
            else
            {
                return(Ok(result));
            }
        }
        public IActionResult Update(string id, [FromBody] Meter meter)
        {
            // getting Pay roll ID, User
            var meterByID = _repo.Get(id);

            if (meterByID == null)
            {
                return(NotFound());
            }
            else
            {
                var dbMeterType      = helper.ConvertMeterType(meter.MeterType);
                var dbMeterStatus    = helper.ConvertMeterStatus(meter.MeterStatus);
                var dbMeterCondition = helper.ConvertMeterCondition(meter.MeterCondition);


                var dbModel = new DbModels.Meter();
                dbModel.MIRN           = id;
                dbModel.MeterType      = dbMeterType;
                dbModel.MeterStatus    = dbMeterStatus;
                dbModel.MeterCondition = dbMeterCondition;
                dbModel.ExpriyDate     = meter.ExpriyDate;

                var result = _repo.Update(id, dbModel);
                if (result.Equals("-1"))
                {
                    ModelState.AddModelError("Error", "Invalid Meter ID");
                    return(NotFound());
                }
                else
                {
                    return(Ok(result));
                }
            }
        }
        // converting dbModel meter into view model meter
        public Models.Meter ConvertMeterModel(DbModels.Meter dbMeter)
        {
            var vmMeter = new Models.Meter()
            {
                MIRN           = dbMeter.MIRN,
                MeterType      = ConverViewModeltMeterType(dbMeter.MeterType),
                MeterStatus    = ConvertViewModelMeterStatus(dbMeter.MeterStatus),
                MeterCondition = ConvertViewModelMeterCondition(dbMeter.MeterCondition)
            };

            return(vmMeter);
        }
        //Get Meter details by passing MeterID, PayRollId and MeterStatus
        public Tuple <bool, string, ArrayList> GetMeterByUserAndStatus(Models.MeterHistory mpsRequest)
        {
            // Store meter in array
            ArrayList metersList = new ArrayList();
            var       result     = Tuple.Create(true, "", metersList);

            DbModels.MeterStatus dbmStatus;

            var validMeterStatus = validater.ValidateMeterStatus(mpsRequest.MeterStatus);

            if (validMeterStatus == true)
            {
                dbmStatus = helper.ConvertMeterStatus(mpsRequest.MeterStatus);
                // validating PayRoll ID
                var user = _urepo.Get(mpsRequest.PayRollID);
                if (user == null)
                {
                    return(Tuple.Create(false, "PayRollID " + mpsRequest.PayRollID + " is not found", metersList));
                }
                // Find meter ID using payroll id and meter status from meter history table
                var meters = _context.MeterHistories.Where(x => x.PayRollID.Contains(mpsRequest.PayRollID) && (x.MeterStatus == dbmStatus)).ToList();

                foreach (DbModels.MeterHistory meter in meters)
                {
                    // Find the meter record from meter table using meterid
                    //  var m = _context.Meters.Where(x => x.MIRN.Equals(meter.MIRN));
                    // _context.Installations.FirstOrDefault(x => x.InstallationID == id);

                    DbModels.Meter meterDb = _context.Meters.FirstOrDefault(x => x.MIRN == meter.MIRN && x.MeterStatus == dbmStatus);

                    if (meterDb != null)
                    {
                        metersList.Add(meterDb);
                    }
                }
                return(Tuple.Create(true, "Meters List", metersList));
            }
            else
            {
                return(Tuple.Create(false, "Invalid meter status: " + mpsRequest.MeterStatus, metersList));
            }
        }