Exemple #1
0
        //пересмотреть
        public async Task <int> HireTheCarAsync(CarHireDTO carHireDTO)
        {
            var carHire = mapper.Map <CarHire>(carHireDTO);

            carHire.BeginDate = DateTime.Now;
            var car = await unitOfWork.CarRepository.GetAsync(carHire.CarId);

            if (car == null)
            {
                return(-1); //переделать
            }
            var client = await unitOfWork.ClientRepository.GetAsync(carHire.ClientId);

            if (client == null)
            {
                return(-2); //переделать
            }
            if (carHire.ExpectedEndDate < carHire.BeginDate)
            {
                return(-3); //переделать
            }
            var timeGap = (carHire.ExpectedEndDate - carHire.BeginDate).TotalSeconds;

            carHire.ExpectedPrice = car.PricePerHour / 3600 * Convert.ToDecimal(timeGap); //упростить/вынести в другой метод

            carHire.Returned = false;

            if (carHire.ExpectedPrice <= 0) //очень интересная проверка
            {
                carHire.ExpectedPrice = 0;
            }

            return(await unitOfWork.CarHireRepository.AddAsync(carHire));
        }
Exemple #2
0
        public async Task <int> ReturnTheCarAsync(CarHireDTO carHireDTO)
        {
            var carHire = await unitOfWork.CarHireRepository.GetAsync(carHireDTO.Id);

            var car = await unitOfWork.CarRepository.GetAsync(carHire.CarId);

            var client = await unitOfWork.ClientRepository.GetAsync(carHire.ClientId);

            var EndDate = DateTime.Now;

            var timeGap = (EndDate - carHire.BeginDate).TotalSeconds;

            carHire.EndDate = EndDate;

            var price = car.PricePerHour / 3600 * Convert.ToDecimal(timeGap);                                               //аналогично с верхним пересмотреть

            if (client.ClientTypeId != 2 && await unitOfWork.CarHireRepository.GetReturnedCarCountByIdAsync(client.Id) > 5) //избавиться от хардкода
            {
                client.ClientTypeId = 2;
                await unitOfWork.ClientRepository.UpdateAsync(client);
            }

            if (client.ClientTypeId == 2)     //избавиться от хардкода
            {
                var discount = price * 0.01M; //тут тоже
                carHire.Discount = discount;
                price           -= discount;
            }

            carHire.CarStateId = carHireDTO.CarStateId; //избавиться от хардкода
            if (carHireDTO.CarStateId == 2)
            {
                var penalty = price * 0.3M; //тут тоже
                carHire.Penalty = penalty;
                price          += penalty;
            }
            if (carHire.Penalty == null)
            {
                carHire.Penalty = 0;
            }
            if (carHire.Discount == null) //пересмотреть
            {
                carHire.Discount = 0;
            }

            carHire.Price    = price;
            carHire.Returned = true;
            await unitOfWork.CarHireRepository.UpdateAsync(carHire);

            return(1);
        }
Exemple #3
0
 public async Task UpdateCarHireAsync(CarHireDTO carHireDTO)
 {
     var carHire = mapper.Map <CarHire>(carHireDTO);
     await unitOfWork.CarHireRepository.UpdateAsync(carHire);
 }