public async Task <IActionResult> Save(WasteCollectionArea area) { if (area.Id == default(int)) { _db.WasteCollectionAreas.Add(area); } else { _db.WasteCollectionAreas.Update(area); } await _db.SaveChangesAsync(); return(RedirectToAction("admin")); }
public void SetNewVolume(WasteCollectionArea waste, DateTime currentDateTime, TimeSpan timePassed) { if (waste.Volume <= 0) { return; } if (!_todayClearedWastes.Keys.Contains(waste.Id)) { _todayClearedWastes.Add(waste.Id, false); } if (!_wasteFillFactors.Keys.Contains(waste.Id)) { // Assumes that some of wastes filles more quickly than others _wasteFillFactors.Add(waste.Id, 1.0 + _random.NextDouble() * 4.0); } bool wasteClearedToday = _todayClearedWastes[waste.Id]; double wasteFillFactor = _wasteFillFactors.GetValueOrDefault(waste.Id, 1.0F); int hoursToSeconds(int x) => x * 3600; int currentHour = currentDateTime.TimeOfDay.Hours; double currentTimeTotalSeconds = currentDateTime.TimeOfDay.TotalSeconds; bool isDay() => _beginWorkHour <= currentHour && currentHour <= _endWorkHour; if (isDay()) { double garbageCollectProbability = (1 * timePassed.TotalSeconds) / (hoursToSeconds(_endWorkHour) - hoursToSeconds(_beginWorkHour)); // 90 % Filled wastes has more garbage collect probability (+20%) if ((double)(waste.FilledVolume / waste.Volume) >= 0.9) { garbageCollectProbability += (0.20 * timePassed.TotalSeconds) / (hoursToSeconds(_endWorkHour) - hoursToSeconds(_beginWorkHour)); } if (_random.NextDouble() < garbageCollectProbability && !wasteClearedToday) { Console.WriteLine($"Waste {waste.Name} was cleared. Filled volume was {waste.FilledVolume}"); waste.FilledVolume = 0; _todayClearedWastes[waste.Id] = true; } } if (currentTimeTotalSeconds <= (2 * timePassed.TotalSeconds)) { _todayClearedWastes[waste.Id] = false; } // Once a mounth somebody throws out a granmother's case if ((timePassed.TotalSeconds / (3600 * 24 * 30)) > _random.NextDouble()) { waste.FilledVolume = waste.Volume; } decimal newVolume = waste.FilledVolume + (decimal)(((isDay() ? _wasteFillFactors[waste.Id] : 1.0) * timePassed.TotalSeconds * ((double)waste.Volume / (7.5 * _secondsInDay))) + _random.NextDouble() * timePassed.TotalMinutes); waste.FilledVolume = (newVolume > waste.Volume) ? waste.Volume : newVolume; }
public void SetNewVolume(WasteCollectionArea waste, DateTime currentDateTime, TimeSpan timePassed) { decimal newVolume = waste.FilledVolume + (decimal)(_random.NextDouble() * 100); waste.FilledVolume = (newVolume > waste.Volume) ? waste.Volume : newVolume; }