//пересмотреть 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)); }
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); }
public async Task UpdateCarHireAsync(CarHireDTO carHireDTO) { var carHire = mapper.Map <CarHire>(carHireDTO); await unitOfWork.CarHireRepository.UpdateAsync(carHire); }