public async Task <IActionResult> PostHistory([FromBody] SensorHistoryEntry value)
        {
            if (ModelState.IsValid)
            {
                await _db.SensorHistory.AddAsync(value);

                await _db.SaveChangesAsync();

                return(Ok("Ok"));
            }
            else
            {
                return(new BadRequestObjectResult("Not Found"));
            }
        }
        public async Task <ActionResult> Put(int id)
        {
            var oldMonitor = await _db.Monitors
                             .Where(monitor => monitor.Id == id)
                             .FirstOrDefaultAsync();

            if (oldMonitor == null)
            {
                return(NotFound());
            }
            var updateMonitor = oldMonitor;

            updateMonitor.Status = "normal";
            _db.Entry(oldMonitor).CurrentValues.SetValues(updateMonitor);
            await _db.SaveChangesAsync();

            var oldhistories = await _db.SensorHistory.Where(history => history.SensorId == id).ToListAsync();

            if (oldhistories != null)
            {
                var latesthistory = oldhistories.Where(history => history.SensorResolved == EnumResolveStatus.UNRESOLVED)
                                    .OrderByDescending(history => history.FaultDate).FirstOrDefault();
                if (latesthistory != null)
                {
                    SensorHistoryEntry newHistory = latesthistory;
                    newHistory.SensorResolved = latesthistory.SensorResolved == EnumResolveStatus.UNRESOLVED
                        ? EnumResolveStatus.RESOLVED
                        : EnumResolveStatus.UNRESOLVED;
                    newHistory.AttendedDate = DateTime.Now;
                    _db.Entry(latesthistory).CurrentValues.SetValues(newHistory);
                    await _db.SaveChangesAsync();
                }
            }

            return(Ok(updateMonitor));
        }
        public async Task Post([FromBody] InputSensor values)
        {
            if (values.valueIn == 0 && values.valueOut != 0)
            {
                MonitorsEntry mon = await _db.Monitors.FindAsync(values.IdIn);

                MonitorsEntry old = await _db.Monitors.FindAsync(values.IdIn);

                mon.Status     = "faulty";
                mon.FaultCount = mon.FaultCount + 1;
                _db.Entry(old).CurrentValues.SetValues(mon);
                await _db.SaveChangesAsync();

                var sensorHistory = await _db.SensorHistory
                                    .Where(h => h.SensorId == mon.Id)
                                    .OrderByDescending(h => h.FaultDate)
                                    .FirstOrDefaultAsync();

                if (sensorHistory == null)
                {
                    SensorHistoryEntry history = new SensorHistoryEntry();
                    history.SensorId       = values.IdIn;
                    history.SensorType     = EnumSensorType.WATER_FLOW_SENSOR;
                    history.SensorResolved = EnumResolveStatus.UNRESOLVED;
                    history.FaultDate      = DateTime.Now;
                    history.EmailSentDate  = DateTime.Now;
                    history.AttendedDate   = DateTime.MinValue;
                    await _db.SensorHistory.AddAsync(history);
                }
                else
                {
                    var updatedHistory = sensorHistory;
                    updatedHistory.SensorResolved = EnumResolveStatus.UNRESOLVED;
                    updatedHistory.EmailSentDate  = DateTime.Now;
                    _db.Entry(sensorHistory).CurrentValues.SetValues(updatedHistory);
                    await _db.SaveChangesAsync();
                }
            }
            else if (values.valueOut == 0 && values.valueIn != 0 || values.valueOut > values.valueIn)
            {
                MonitorsEntry mon = await _db.Monitors.FindAsync(values.IdOut);

                MonitorsEntry old = await _db.Monitors.FindAsync(values.IdOut);

                mon.Status     = "faulty";
                mon.FaultCount = mon.FaultCount + 1;
                _db.Entry(old).CurrentValues.SetValues(mon);
                await _db.SaveChangesAsync();

                var sensorHistory = await _db.SensorHistory
                                    .Where(h => h.SensorId == mon.Id)
                                    .OrderByDescending(h => h.FaultDate)
                                    .FirstOrDefaultAsync();

                if (sensorHistory == null)
                {
                    SensorHistoryEntry history = new SensorHistoryEntry();
                    history.SensorId       = values.IdOut;
                    history.SensorType     = EnumSensorType.WATER_FLOW_SENSOR;
                    history.SensorResolved = EnumResolveStatus.UNRESOLVED;
                    history.FaultDate      = DateTime.Now;
                    history.EmailSentDate  = DateTime.Now;
                    history.AttendedDate   = DateTime.MinValue;
                    await _db.SensorHistory.AddAsync(history);
                }
                else
                {
                    var updatedHistory = sensorHistory;
                    updatedHistory.SensorResolved = EnumResolveStatus.UNRESOLVED;
                    updatedHistory.EmailSentDate  = DateTime.Now;
                    _db.Entry(sensorHistory).CurrentValues.SetValues(updatedHistory);
                    await _db.SaveChangesAsync();
                }
            }

            ReadingsEntry reading  = new ReadingsEntry();
            ReadingsEntry reading2 = new ReadingsEntry();

            reading.TimesStamp  = DateTime.Now;
            reading2.TimesStamp = DateTime.Now;
            reading.Value       = (values.valueIn) * Globals.MinuteToHour;
            reading2.Value      = (values.valueOut) * Globals.MinuteToHour;
            reading.MonitorsId  = values.IdIn;
            reading2.MonitorsId = values.IdOut;
            await _db.Readings.AddAsync(reading);

            await _db.SaveChangesAsync();

            await _db.Readings.AddAsync(reading2);

            await _db.SaveChangesAsync();

            Procedures procedure = new Procedures(_db, _config);
            await procedure.TriggerInsert(reading);
        }