public async Task <IHttpActionResult> GetOpenRentalByID(int vehicleID) { string userContext = RequestContext.Principal.Identity.GetUserId(); try { Vehicle_Types vehicle = await carStore.GetVehicleType(vehicleID); var rental = await store.getOpenByVehicleNumber(vehicleID); if (rental != null && rental.Returned_Date == null) { rental.Total_Price = store.CalculateCurrentTotalSum(vehicle, rental); return(Ok(rental)); } else { return(Content(HttpStatusCode.OK, "No Rental Found")); } } catch (Exception) { return(Content(HttpStatusCode.NotFound, "No Rental Found")); } }
internal int?CalculateTotalSum(Vehicle_Types vehicle, RentalModel rental) { var car = vehicle; int total; double daysRented = rental.Returned_Date.Value.Subtract(rental.Start_Date).TotalDays; double daysIntended = rental.Return_Date.Subtract(rental.Start_Date).TotalDays; if (daysRented > 0) { int days = (int)daysIntended - (int)daysRented; if ((int)daysIntended >= (int)daysRented) { total = (int)daysRented * car.Daily_Rate; } else { total = (int)(((daysRented - daysIntended) * (car.Penalty_Rate + car.Daily_Rate)) + (daysRented * car.Daily_Rate)); } } else { total = 0; } return(total); }
internal int?CalculateCurrentTotalSum(Vehicle_Types vehicle, RentalModel rental) { var car = vehicle; int total; int daysInRental = (int)rental.Return_Date.Subtract(rental.Start_Date).TotalDays; int daysRented = (int)DateTime.Now.Subtract(rental.Start_Date).TotalDays; if (daysRented > 0) { if (daysRented > daysInRental) { total = ((daysRented - daysInRental) * (car.Penalty_Rate + car.Daily_Rate)) + (daysInRental * car.Daily_Rate); } else { total = daysRented * car.Daily_Rate; } } else { total = 0; } return(total); }
internal async Task <Vehicle_Types> GetVehicleType(int vehicleID) { Vehicle_Types car = new Vehicle_Types(); await Task.Run(() => { var vehicleFound = dBase.Vehicles.FirstOrDefault(vehicle => vehicle.Vehicle_ID == vehicleID); if (vehicleFound != null) { car = dBase.Vehicle_Types.FirstOrDefault(vehicle => vehicle.Vehicle_Makes.Make_Name == vehicleFound.Vehicle_Types.Vehicle_Makes.Make_Name && vehicle.Vehicle_Models.Model_Name == vehicleFound.Vehicle_Types.Vehicle_Models.Model_Name); } }); return(car); }
internal async Task <Tuple <Status, string> > AddVehicleType(VehicleTypes model) { Vehicle_Types existingType = dBase.Vehicle_Types.FirstOrDefault(car => ( car.Vehicle_Makes.Make_Name.ToLower() == model.Make.ToLower() && car.Vehicle_Models.Model_Name.ToLower() == model.Model.ToLower() && car.Gear_Type == model.Gear_Type && car.Year == model.Year )); if (existingType == null) { int makeId = dBase.Vehicle_Makes.FirstOrDefault(make => make.Make_Name == model.Make).Make_ID; int modelId = dBase.Vehicle_Models.FirstOrDefault(carModel => carModel.Model_Name == model.Model).Model_ID; Vehicle_Types addedType = dBase.Vehicle_Types.Add(new Vehicle_Types() { Daily_Rate = model.Daily_Rate, Penalty_Rate = model.Penalty_Rate, Gear_Type = model.Gear_Type, Year = model.Year, Make_ID = makeId, Model_ID = modelId }); await dBase.SaveChangesAsync(); if (addedType != null) { return(new Tuple <Status, string>(Status.Success, addedType.Vehicle_Makes.Make_Name + " " + addedType.Vehicle_Models.Model_Name + " Successfully Added To The Models Inventory")); } else { return(new Tuple <Status, string>(Status.Failure, "Something Went Wrong While Trying To Add The Type")); } } else { return(new Tuple <Status, string>(Status.Failure, "Type Already Exists")); } }
internal async Task <Tuple <Status, string> > TryDeleteType(PublicVehicleViewModel model) { Vehicle_Types chosenType = dBase.Vehicle_Types.FirstOrDefault(type => ( type.Vehicle_Models.Model_Name == model.Model && type.Vehicle_Makes.Make_Name == model.Make && type.Year == model.Year && type.Gear_Type == model.Gear_Type )); int typeId = chosenType.Vehicle_Type_ID; bool vehicles = false, rentals = false; if (dBase.Vehicles.FirstOrDefault(carModel => carModel.Vehicle_Types.Vehicle_Type_ID == typeId) != null) { vehicles = true; } if (dBase.Rentals.FirstOrDefault(carModel => carModel.Vehicle.Vehicle_Type_ID == typeId) != null) { rentals = true; } if (vehicles || rentals) { string error = concatErrorString(vehicles, rentals); return(new Tuple <Status, string>(Status.Failure, error)); } else { dBase.Vehicle_Types.Remove(chosenType); await dBase.SaveChangesAsync(); return(new Tuple <Status, string>(Status.Success, model + " Deleted")); } }