Beispiel #1
0
        public ElectricityReading RegisterReding(ElectricityReading electricityReading)
        {
            var result = _context.ElectricityReading.Add(electricityReading);

            _context.SaveChanges();
            return(result.Entity);
        }
        public void ShouldCalculateCostForMeterReadingsForEveryPricePlan()
        {
            var electricityReading = new ElectricityReading()
            {
                Time = DateTime.Now.AddHours(-1), Reading = 15.0m
            };
            var otherReading = new ElectricityReading()
            {
                Time = DateTime.Now, Reading = 5.0m
            };

            meterReadingService.StoreReadings(SMART_METER_ID, new List <ElectricityReading>()
            {
                electricityReading, otherReading
            });

            var result = controller.CalculatedCostForEachPricePlan(SMART_METER_ID).Value;

            var actualCosts = ((JObject)result).ToObject <Dictionary <string, decimal> >();

            Assert.Equal(3, actualCosts.Count);
            Assert.Equal(100m, actualCosts["" + Supplier.DrEvilsDarkEnergy], 3);
            Assert.Equal(20m, actualCosts["" + Supplier.TheGreenEco], 3);
            Assert.Equal(10m, actualCosts["" + Supplier.PowerForEveryone], 3);
        }
Beispiel #3
0
        public ActionResult Post(string panelId, [FromBody] AnalyticDto analytic)
        {
            if (analytic.Measurement <= 0)
            {
                return(BadRequest("valor incorrecto"));
            }

            var panel = _panelRepository.GetById(panelId);

            var lastMeasurement = panel.ElectricityReadings.ToList().OrderBy(p => p.ReadingDateTime).LastOrDefault();

            if (lastMeasurement != null && ValidateTimeLimits(lastMeasurement, panel.PanelType))
            {
                return(BadRequest("Mediciones no permitidas en el intervalo de tiempo actual"));
            }

            var measurement = analytic.Measurement;

            var analyticData = new ElectricityReading
            {
                ReadingDateTime = DateTime.UtcNow,
                Panel           = panel,
                KiloWatt        = panel.MeasuringUnit == MeasuringUnit.Watt ? measurement / 1000 : measurement,
            };

            _analyticRepository.Add(analyticData);

            return(Ok());
        }
Beispiel #4
0
        public ServiceResult <ElectricityReading> RegisterReading(string panelId, DateTime time, double wattage)
        {
            var newReading = new ElectricityReading
            {
                KiloWatt        = wattage,
                ReadingDateTime = time,
                PanelId         = panelId
            };

            _readingRepository.Add(newReading);
            return(ServiceResult <ElectricityReading> .SuccessResult(newReading));
        }
Beispiel #5
0
        public bool ValidateTimeLimits(ElectricityReading electricityReading, PanelType panelType)
        {
            switch (panelType)
            {
            case PanelType.Regular when DateTime.UtcNow.Subtract(electricityReading.ReadingDateTime).Hours >= 1:
            case PanelType.Limited when DateTime.UtcNow.Subtract(electricityReading.ReadingDateTime).Days >= 1 &&
                electricityReading.KiloWatt < 5:
            case PanelType.Ultimate
                when DateTime.UtcNow.Subtract(electricityReading.ReadingDateTime).Minutes >= 1 &&
                electricityReading.KiloWatt >= 5:
                return(true);

            default:
                return(false);
            }
        }
Beispiel #6
0
        public List <ElectricityReading> Generate(int number)
        {
            var readings = new List <ElectricityReading>();
            var random   = new Random();

            for (int i = 0; i < number; i++)
            {
                var reading            = (decimal)random.NextDouble();
                var electricityReading = new ElectricityReading
                {
                    Reading = reading,
                    Time    = DateTime.Now.AddSeconds(-i * 10)
                };
                readings.Add(electricityReading);
            }
            readings.Sort((reading1, reading2) => reading1.Time.CompareTo(reading2.Time));
            return(readings);
        }
Beispiel #7
0
        public ActionResult Post([FromBody] ElectricityReading bodyER)
        {
            var serviceResult = _electricityReadingService.AddElectricityReading(bodyER);

            if (serviceResult.ResponseCode != ResponseCode.Success)
            {
                return(BadRequest(serviceResult.Error));
            }
            var result = new ElectricityReading
            {
                Id              = serviceResult.Result.Id,
                KiloWatt        = serviceResult.Result.KiloWatt,
                Panel           = serviceResult.Result.Panel,
                PanelId         = serviceResult.Result.PanelId,
                ReadingDateTime = serviceResult.Result.ReadingDateTime
            };

            return(Ok(result));
        }
Beispiel #8
0
        public ServiceResult <ElectricityReading> AddElectricityReading(ElectricityReading ER)
        {
            ER.ReadingDateTime = DateTime.UtcNow;
            if (ER.KiloWatt < 0)
            {
                return ServiceResult <ElectricityReading> .ErrorResult("No se aceptan vlaores menores a 0")
            }
            ;
            if (ER.Panel.MeasuringUnit.Equals("Watt"))
            {
                ER.KiloWatt = ER.KiloWatt / 1000;
            }
            ;
            //if (ER.Panel.PanelType ==    )
            //{ }

            return(ServiceResult <ElectricityReading> .SuccessResult(_electricityReadingService.AddElectricityReading(ER)));
        }
    }
Beispiel #9
0
        public void ShouldCalculateCostForMeterReadingsForEveryPricePlan()
        {
            var electricityReading = new ElectricityReading()
            {
                Time = DateTime.Now.AddHours(-1), Reading = 15.0m
            };
            var otherReading = new ElectricityReading()
            {
                Time = DateTime.Now, Reading = 5.0m
            };

            meterReadingService.StoreReadings(SMART_METER_ID, new List <ElectricityReading>()
            {
                electricityReading, otherReading
            });

            Dictionary <string, decimal> result = controller.CalculatedCostForEachPricePlan(SMART_METER_ID).Value as Dictionary <string, decimal>;

            Assert.NotNull(result);
            Assert.Equal(3, result.Count);
            Assert.Equal(100m, result[Supplier.DrEvilsDarkEnergy.ToString()], 3);
            Assert.Equal(20m, result[Supplier.TheGreenEco.ToString()], 3);
            Assert.Equal(10m, result[Supplier.PowerForEveryone.ToString()], 3);
        }
Beispiel #10
0
 public ServiceResult <ElectricityReading> RegisterReading(ElectricityReading electricityReading)
 {
     return(ServiceResult <ElectricityReading> .SuccessResult(_electricityReadingRepository.RegisterReding(electricityReading)));
 }
Beispiel #11
0
        public ActionResult <ElectricityReadingDto> RegisterReading([FromBody] ElectricityReading electricityReading)
        {
            //.c
            if (electricityReading == null | electricityReading.KiloWatt <= 0)
            {
                return(BadRequest("Objeto nulo o valor incorrecto."));
            }

            //.a
            electricityReading.ReadingDateTime = DateTime.UtcNow;

            //.b
            if (electricityReading.Panel.MeasuringUnit == MeasuringUnit.Watt)
            {
                electricityReading.KiloWatt /= 1000;
            }

            //.d
            var MostRecentReading = _electricityReadingService.GetRecentReadingByPanelId(electricityReading.PanelId);

            switch (electricityReading.Panel.PanelType)
            {
            case PanelType.Regular:
            {
                TimeSpan timeSpan = DateTime.UtcNow.Subtract(MostRecentReading.Result.ReadingDateTime);
                if (timeSpan.Hours < 1)
                {
                    return(BadRequest("No se puede realizar la medición."));
                }
            }
            break;

            case PanelType.Limited:
            {
                TimeSpan timeSpan = DateTime.UtcNow.Subtract(MostRecentReading.Result.ReadingDateTime);
                if (timeSpan.Days < 1)
                {
                    return(BadRequest("No se puede realizar la medición."));
                }
            }
            break;

            case PanelType.Ultimate:
            {
                TimeSpan timeSpan = DateTime.UtcNow.Subtract(MostRecentReading.Result.ReadingDateTime);
                if (timeSpan.Minutes < 1)
                {
                    return(BadRequest("No se puede realizar la medición."));
                }
            }
            break;

            default:
                return(BadRequest("Error indefinidio."));
            }

            var ServiceResult = _electricityReadingService.RegisterReading(electricityReading);

            if (ServiceResult.ResponseCode != ResponseCode.Success)
            {
                return(BadRequest(ServiceResult.Error));
            }

            var result = new ElectricityReadingDto
            {
                NumeroDeSerie   = ServiceResult.Result.PanelId,
                Panel           = ServiceResult.Result.Panel,
                KiloWatt        = ServiceResult.Result.KiloWatt,
                ReadingDateTime = DateTime.UtcNow
            };

            return(Ok(result));
        }
Beispiel #12
0
 public ElectricityReading RegisterReding(ElectricityReading electricityReading)
 {
     throw new NotImplementedException();
 }