Exemple #1
0
        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"));
        }
Exemple #2
0
        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;
        }
Exemple #3
0
        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;
        }