public IEnumerable <IResult> ConsumptionReport()
        {
            var commnand = new ConsumptionReport(Waybill);

            yield return(new Models.Results.TaskResult(commnand.ToTask(Shell.Config)));

            yield return(new OpenResult(commnand.Result));
        }
        private async Task <bool> CheckCounters(IStreamBatchingTestConsumerGrain consumer, int expectedConsumed, int minBatchSize, bool assertIsTrue)
        {
            ConsumptionReport report = await consumer.GetConsumptionReport();

            this.output.WriteLine($"Report - Consumed: {report.Consumed}, MaxBatchSize: {report.MaxBatchSize}");
            if (assertIsTrue)
            {
                Assert.Equal(expectedConsumed, report.Consumed);
                Assert.True(report.MaxBatchSize >= minBatchSize);
                return(true);
            }
            else
            {
                return(report.Consumed == expectedConsumed && report.MaxBatchSize >= minBatchSize);
            }
        }
Beispiel #3
0
        public async Task consumption_report_returns_ok_when_valid_input()
        {
            var duration = "24h";

            _mockRepo.Setup(repo => repo.GetByCutOffDateAsync(It.IsAny <DateTime>()))
            .Returns(Task.FromResult(GetByCutOffDateAsync()));
            var controller           = new ConsumptionReportController(_mockRepo.Object);
            var expectedResultObject = new ConsumptionReport(new List <ConsumptionPerVillage>(2)
            {
                new ConsumptionPerVillage("Villarriba", 10000.123f),
                new ConsumptionPerVillage("Villabajo", 20000.246f)
            });

            var result = await controller.consumption_report(duration);

            var content = ((OkObjectResult)result).Value;

            result.Should().BeOfType <OkObjectResult>();
            content.ShouldBeEquivalentTo(expectedResultObject);
        }
        public async Task <ActionResult> consumption_report(string duration)
        {
            var timeInterval = new ConsumptionTimeInterval(duration);

            if (!timeInterval.IsValid)
            {
                return(BadRequest("The time interval supplied is invalid"));
            }

            var cutOffDate = GetCutOffDateByTimeInterval(DateTime.Now, timeInterval);
            var consumptionCounterFilteredByDate = await _repository.GetByCutOffDateAsync(cutOffDate);

            var consumptionPerVillage = consumptionCounterFilteredByDate
                                        .GroupBy(a => a.VillageName)
                                        .Select(x => new ConsumptionPerVillage(x.Key, x.Sum(y => y.Amount)));

            var result = new ConsumptionReport(consumptionPerVillage);

            return(Ok(result));
        }
        public void Handle(CalculateFuelConsumption command)
        {
            commandValidator.Validate(command);

            if (!unitOfWork.Context.Vehicle.Any(v => v.Id == command.VehicleId))
            {
                throw new VehicleNotFoundException(command.VehicleId);
            }

            if (!unitOfWork.Context.User.Any(u => u.Id == command.UserId))
            {
                throw new UserNotFoundException(command.UserId);
            }

            var unitsSettings = unitOfWork.Context.UserSettings.Single(s => s.UserId == command.UserId);

            if (unitsSettings == null)
            {
                throw new UserSettingsNotFoundException(command.UserId);
            }

            var report = new ConsumptionReport()
            {
                Id           = command.Id,
                VehicleId    = command.VehicleId,
                Distance     = command.Distance,
                FuelBurned   = command.FuelBurned,
                DateCreated  = DateTime.Now,
                PricePerUnit = command.PricePerUnit,
                LastChanged  = DateTime.Now
            };

            switch (unitsSettings.Units)
            {
            case Units.Imperial:
                report.Units          = Units.Imperial;
                report.FuelEfficiency = command.Distance / command.FuelBurned;
                break;

            case Units.Metric:
                report.Units          = Units.Metric;
                report.FuelEfficiency = (command.FuelBurned * 100) / command.Distance;
                break;

            default:
                throw new NotImplementedException();
            }

            var fuelSummary = unitOfWork.Context.FuelSummary.SingleOrDefault(f => f.VehicleId == command.VehicleId);

            if (fuelSummary == null)
            {
                fuelSummary = new FuelSummary()
                {
                    Id = Guid.NewGuid()
                };

                fuelSummary.DistanceDriven     = report.Distance;
                fuelSummary.FuelBurned         = report.FuelBurned;
                fuelSummary.MoneySpent         = report.PricePerUnit * report.FuelBurned;
                fuelSummary.ReportsNumber      = 1;
                fuelSummary.VehicleId          = command.VehicleId;
                fuelSummary.AverageConsumption = report.FuelEfficiency;
                fuelSummary.Units = report.Units;

                switch (fuelSummary.Units)
                {
                case Units.Metric:
                    fuelSummary.AverageConsumption = (fuelSummary.FuelBurned * 100) / fuelSummary.DistanceDriven;
                    break;

                case Units.Imperial:
                    fuelSummary.AverageConsumption = fuelSummary.DistanceDriven / fuelSummary.FuelBurned;
                    break;
                }

                unitOfWork.Context.FuelSummary.Add(fuelSummary);
            }
            else
            {
                fuelSummary.ReportsNumber++;
                fuelSummary.DistanceDriven += report.Distance;
                fuelSummary.FuelBurned     += report.FuelBurned;
                fuelSummary.MoneySpent     += report.PricePerUnit * report.FuelBurned;

                switch (unitsSettings.Units)
                {
                case Units.Imperial:
                    fuelSummary.Units = Units.Imperial;
                    fuelSummary.AverageConsumption = fuelSummary.DistanceDriven / fuelSummary.FuelBurned;
                    break;

                case Units.Metric:
                    report.Units          = Units.Metric;
                    report.FuelEfficiency = (fuelSummary.FuelBurned * 100) / fuelSummary.DistanceDriven;
                    break;

                default:
                    throw new NotImplementedException();
                }

                unitOfWork.Context.Entry(fuelSummary).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
            }

            unitOfWork.Context.ConsumptionReport.Add(report);
        }