コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
            }
        }