Пример #1
0
        public IActionResult AddLevel(ParkingAddLevelViewModel viewModel)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            var parking = _parkingRepository.FindById(viewModel.ParkingId);

            if (parking == null)
            {
                return(NotFound());
            }

            var level  = new ParkingLevel(viewModel.Floor);
            var result = parking.AddParkingLevel(level);

            if (!result.IsSuccess)
            {
                return(BadRequest(result.ErrorMessage));
            }

            _context.SaveChanges();

            return(RedirectToAction(nameof(Edit), new { id = viewModel.ParkingId }));
        }
Пример #2
0
    private void CheckForParkingAvailability(ParkingLot parkingLot)
    {
        List <ParkingLevel> lstParkingLevel       = parkingLot.ParkingLevels;
        int MotorcycleSpotOnlyLastRowNumber       = ParkingLotConstants.MotorcycleSpotOnlyRowCount;
        int MixedSpotMotorcycleSpotLastSpotNumber = ParkingLotConstants.MixedSpotsMotorcycleSpotCount;

        for (int i = 0; i <= lstParkingLevel.Count - 1; i++)
        {
            ParkingLevel      objParkingLevel = lstParkingLevel[i];
            List <ParkingRow> lstParkingRow   = objParkingLevel.ParkingRows;

            for (int j = 0; j <= lstParkingRow.Count - 1; j++)
            {
                ParkingRow         objParkingRow  = lstParkingRow[j];
                List <ParkingSpot> lstParkingSpot = objParkingRow.ParkingSpots;

                for (int k = 0; k <= lstParkingSpot.Count - 1; k++)
                {
                    ParkingSpot objParkingSpot = lstParkingSpot[k];
                    bool        isFilled       = objParkingSpot.IsFilled;

                    if (j <= (MotorcycleSpotOnlyLastRowNumber - 1))
                    {
                        if (isFilled == false)
                        {
                            IsParkingAvailable        = true;
                            VehicleParkingInformation = VehicleUtility.GetVehicleParkingInformation(objParkingSpot.LevelNumber, objParkingSpot.RowNumber, new List <int> {
                                objParkingSpot.SpotNumber
                            }, objParkingSpot.SpotType);
                            break;
                        }
                    }
                    else if (j > (MotorcycleSpotOnlyLastRowNumber - 1))
                    {
                        if (k <= (MixedSpotMotorcycleSpotLastSpotNumber - 1))
                        {
                            if (isFilled == false)
                            {
                                IsParkingAvailable        = true;
                                VehicleParkingInformation = VehicleUtility.GetVehicleParkingInformation(objParkingSpot.LevelNumber, objParkingSpot.RowNumber, new List <int> {
                                    objParkingSpot.SpotNumber
                                }, objParkingSpot.SpotType);
                                break;
                            }
                        }
                        else
                        {
                            break;
                        }
                    }
                }

                if (IsParkingAvailable == true)
                {
                    break;
                }
            }
        }
    }
Пример #3
0
        public void AddParkingLevel()
        {
            var parking      = new Parking(Address.BelarusMinskNemiga);
            var parkingLevel = new ParkingLevel(1);

            var result = parking.AddParkingLevel(parkingLevel);

            Assert.IsTrue(result.IsSuccess);
        }
Пример #4
0
        public Result AddParkingLevel(ParkingLevel parkingLevel)
        {
            if (_parkingLevels.Any(x => x.Floor == parkingLevel.Floor))
            {
                return(Result.Failure($"Parking level with floor {parkingLevel.Floor} already exists"));
            }

            _parkingLevels.Add(parkingLevel);
            return(Result.Success());
        }
Пример #5
0
    private void CheckForParkingAvailability(ParkingLot parkingLot)
    {
        List <ParkingLevel> lstParkingLevel    = parkingLot.ParkingLevels;
        int MotorcycleSpotOnlyLastRowNumber    = ParkingLotConstants.MotorcycleSpotOnlyRowCount;
        int MixedSpotCompactSpotLastSpotNumber = ParkingLotConstants.MixedSpotsMotorcycleSpotCount + ParkingLotConstants.MixedSpotsCompactSpotCount;

        for (int i = 0; i <= lstParkingLevel.Count; i++)
        {
            ParkingLevel      objParkingLevel = lstParkingLevel[i];
            List <ParkingRow> lstParkingRow   = objParkingLevel.ParkingRows;

            for (int j = MotorcycleSpotOnlyLastRowNumber; j <= lstParkingRow.Count - 1; j++)
            {
                ParkingRow         objParkingRow        = lstParkingRow[j];
                List <ParkingSpot> lstParkingSpot       = objParkingRow.ParkingSpots;
                int        intConsecutiveFiveSpotsCount = 0;
                List <int> lstConsecutiveFiveSpots      = new List <int>();

                for (int k = MixedSpotCompactSpotLastSpotNumber; k <= lstParkingSpot.Count - 1; k++)
                {
                    ParkingSpot objParkingSpot = lstParkingSpot[k];
                    bool        isFilled       = objParkingSpot.IsFilled;

                    if (isFilled == false)
                    {
                        intConsecutiveFiveSpotsCount++;
                        lstConsecutiveFiveSpots.Add(objParkingSpot.SpotNumber);
                    }
                    else if (isFilled == true)
                    {
                        intConsecutiveFiveSpotsCount = 0;
                        lstConsecutiveFiveSpots.Clear();
                    }

                    if (intConsecutiveFiveSpotsCount == 5)
                    {
                        IsParkingAvailable        = true;
                        VehicleParkingInformation = VehicleUtility.GetVehicleParkingInformation(objParkingSpot.LevelNumber, objParkingSpot.RowNumber, lstConsecutiveFiveSpots, objParkingSpot.SpotType);
                        break;
                    }
                }

                if (IsParkingAvailable == true)
                {
                    break;
                }
            }

            if (IsParkingAvailable == true)
            {
                break;
            }
        }
    }
Пример #6
0
        public void AddExistsParkingLevel()
        {
            var parking       = new Parking(Address.BelarusMinskNemiga);
            var parkingLevel1 = new ParkingLevel(1);
            var parkingLevel2 = new ParkingLevel(1);

            var result1 = parking.AddParkingLevel(parkingLevel1);
            var result2 = parking.AddParkingLevel(parkingLevel2);

            Assert.IsTrue(result1.IsSuccess);
            Assert.IsFalse(result2.IsSuccess);
        }
Пример #7
0
    private void DoCarParking(ref ParkingLot parkingLot)
    {
        int intTargetLevelNumber = VehicleParkingInformation.LevelNumber;
        int intTargetRowNumber   = VehicleParkingInformation.RowNumber;
        int intTargetSpotNumber  = VehicleParkingInformation.SpotNumbers[0];

        ParkingLevel objTargetParkingLevel = parkingLot.ParkingLevels[intTargetLevelNumber];

        ParkingRow objTargetParkingRow = objTargetParkingLevel.ParkingRows[intTargetRowNumber - 1];

        ParkingSpot objTargetParkingSpot = objTargetParkingRow.ParkingSpots[intTargetSpotNumber - 1];

        objTargetParkingSpot.IsFilled = true;
    }
Пример #8
0
        private static ParkingLot CreateParkingLot(int totalLevels, int spaces, string parkingName)
        {
            var parkingLot = new ParkingLot();

            parkingLot.Name = parkingName;

            for (int level = 1; level <= totalLevels; level++)
            {
                var parkingLevel = new ParkingLevel();
                parkingLevel.Level        = level;
                parkingLevel.ParkingSlots = CreateParkingSlots(spaces);

                parkingLot.ParkingLevels.Add(parkingLevel);
            }

            return(parkingLot);
        }
Пример #9
0
    private void DoBusParking(ref ParkingLot parkingLot)
    {
        int        intTargetLevelNumber = VehicleParkingInformation.LevelNumber;
        int        intTargetRowNumber   = VehicleParkingInformation.RowNumber;
        List <int> lstTargetSpotNumber  = VehicleParkingInformation.SpotNumbers;

        ParkingLevel objTargetParkingLevel = parkingLot.ParkingLevels[intTargetLevelNumber];

        ParkingRow objTargetParkingRow = objTargetParkingLevel.ParkingRows[intTargetRowNumber - 1];

        List <ParkingSpot> lstTargetParkingSpot = objTargetParkingRow.ParkingSpots.
                                                  FindAll(x => (x.SpotNumber >= lstTargetSpotNumber[0] && x.SpotNumber <= lstTargetSpotNumber[lstTargetSpotNumber.Count - 1]));

        foreach (ParkingSpot parkingSpot in lstTargetParkingSpot)
        {
            parkingSpot.IsFilled = true;
        }
    }
Пример #10
0
    public static ParkingLot CreateSampleParkingLot()
    {
        List <ParkingLevel> lstSampleParkingLevel = new List <ParkingLevel>();

        for (int i = 0; i <= ParkingLotConstants.LevelCount; i++)
        {
            List <ParkingRow> lstSampleParkingRow = CreateSampleParkingRowList(i);

            ParkingLevel objSampleParkingLevel = CreateSampleParkingLevel(i, lstSampleParkingRow);

            lstSampleParkingLevel.Add(objSampleParkingLevel);
        }

        ParkingLot objSampleParkingLot = new ParkingLot();

        objSampleParkingLot.ParkingLevels = lstSampleParkingLevel;

        return(objSampleParkingLot);
    }
Пример #11
0
 public void RemoveParkingLevel(ParkingLevel parkingLevel)
 {
     _parkingLevels.Remove(parkingLevel);
 }
        public static IParkingLevel Create(int numberOfLevels)
        {
            IParkingLevel parkingLevel = new ParkingLevel(numberOfLevels);

            return(parkingLevel);
        }