public async Task <bool> CreateAsync(FuelEntryCreateServiceModel model) { if (model == null) { return(false); } var modelOdometer = model.Odometer; var fuelEntry = Mapper.Map <FuelEntry>(model); var vehicle = await this.db .Vehicles .Where(v => v.Id == model.VehicleId && !v.IsDeleted) .AsNoTracking() .Include(v => v.FuelEntries) .FirstOrDefaultAsync(); if (vehicle == null) { return(false); } await this.SetAverageConsumption(modelOdometer, fuelEntry, vehicle); try { this.ValidateEntityState(fuelEntry); await this.db.FuelEntries.AddAsync(fuelEntry); await this.db.SaveChangesAsync(); await this.UpdateStatsOnFuelEntryChangedAsync(fuelEntry.VehicleId); return(true); } catch { return(false); } }
private static void SeedFuelEntries(JustMonitorDbContext dbContext) { if (!dbContext.FuelEntries.Any()) { var allVehicles = dbContext.Vehicles.ToList(); var defaultCurrencyId = dbContext .Currencies .First(c => c.Code == GlobalConstants.DefaultCurrencyCode) .Id; var random = new Random(); var currentDate = DateTime.UtcNow; var minDay = 1; var maxDay = 29; var odometerMinStep = 250; var odometerMaxStep = 750; var fuelQuantityMinValue = 20; var fuelQuantityMaxValue = 80; var note = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."; var firstFuelingTypeId = dbContext.FuelEntryTypes.First(fet => fet.Name == "First fueling").Id; var fullFuelingTypeId = dbContext.FuelEntryTypes.First(fet => fet.Name == "Full").Id; var routesIds = dbContext.RouteTypes.Select(r => r.Id).ToArray(); var extrasIds = dbContext.ExtraFuelConsumers.Select(ex => ex.Id).ToArray(); var fuelEntriesToBeCreated = new List <FuelEntry>(); foreach (var vehicle in allVehicles) { var odometer = 100000; var startDate = new DateTime(currentDate.Year - 2, 1, 1); var hasAnyEntries = false; while (startDate < currentDate) { var day = random.Next(minDay, maxDay); var fuelingDate = new DateTime(startDate.Year, startDate.Month, day); var quantity = random.Next(fuelQuantityMinValue, fuelQuantityMaxValue); var tripOdometer = random.Next(odometerMinStep, odometerMaxStep); if (hasAnyEntries) { odometer += tripOdometer; } var model = new FuelEntryCreateServiceModel { DateCreated = fuelingDate, Odometer = odometer, TripOdometer = hasAnyEntries ? tripOdometer : 0, Average = hasAnyEntries ? ((double)quantity / tripOdometer) * 100 : 0, FuelQuantity = quantity, Price = (decimal)(quantity * (random.NextDouble() + 0.7)), CurrencyId = defaultCurrencyId, Note = note, FuelEntryTypeId = hasAnyEntries ? fullFuelingTypeId : firstFuelingTypeId, Routes = new List <FuelEntryRouteType> { new FuelEntryRouteType { RouteTypeId = routesIds[random.Next(0, routesIds.Length)] } }, ExtraFuelConsumers = new List <FuelEntryExtraFuelConsumer> { new FuelEntryExtraFuelConsumer { ExtraFuelConsumerId = extrasIds[random.Next(0, extrasIds.Length)] } }, VehicleId = vehicle.Id, FuelTypeId = vehicle.FuelTypeId }; var newFuelEntry = Mapper.Map <FuelEntry>(model); fuelEntriesToBeCreated.Add(newFuelEntry); startDate = startDate.AddMonths(1); hasAnyEntries = true; } } dbContext.FuelEntries.AddRange(fuelEntriesToBeCreated); dbContext.SaveChanges(); UpdateVehiclesStats(dbContext); } }