public async Task <bool> RemoveVehicleToEmployeeAsync(EmployeeRemoveInputModel employeeFromView) { var employee = await this.employeesService.GetByIdAsync <Employee>(employeeFromView.Id); if (employee == null) { Exception innerException = new Exception(nameof(employeeFromView.Id)); throw new NullReferenceException(string.Format(GarageConstants.NullReferenceId, employeeFromView.Id), innerException); } var vehicleEmployee = await this.garageRepository.All().FirstOrDefaultAsync(x => x.EmployeeId == employeeFromView.Id && x.Vehicle.RegistrationNumber == employeeFromView.RegistrationNumber); if (vehicleEmployee == null) { Exception innerException = new Exception(nameof(employeeFromView.RegistrationNumber)); throw new NullReferenceException(string.Format(GarageConstants.NullReferenceId, employeeFromView.RegistrationNumber), innerException); } // TODO: CHECK ORDERS BY STATUS AND DO NOT REMOVE IF is in status StatusPickUpArrangeHourRangeWaiting, StatusPickUpArrangedDateWaiting, StatusPickUpArrangedDateCоnfirmed, StatusPickedUpConfirm, StatusDeliveryArrangeHourRangeWaiting, StatusDeliveryArrangedDateCоnfirmed, StatusDeliverConfirmed var isInNotCorrectStatus = await this.orderRepository.AllAsNoTracking() .Where(x => x.PickUpVehicles.Count < 2 || x.DeliveryVehicles.Count < 2) .Where(x => x.Status.Name == OrderConstants.StatusPickUpArrangeHourRangeWaiting || x.Status.Name == OrderConstants.StatusPickUpArrangedDateWaiting || x.Status.Name == OrderConstants.StatusPickUpArrangedDateCоnfirmed || x.Status.Name == OrderConstants.StatusDeliveryArrangeHourRangeWaiting || x.Status.Name == OrderConstants.StatusDeliveryArrangedDateWaiting || x.Status.Name == OrderConstants.StatusDeliveryArrangedDateCоnfirmed) .AnyAsync(x => x.PickUpVehicles.Any(z => z.VehicleEmployee.Id == vehicleEmployee.Id) || x.DeliveryVehicles.Any(z => z.VehicleEmployee.Id == vehicleEmployee.Id)); // TODO: Return false and in controller add error to modelState if (isInNotCorrectStatus) { Exception innerException = new Exception(nameof(employeeFromView.RegistrationNumber)); throw new ArgumentException(string.Format(GarageConstants.ArgumentExceptionVehicleInIncorrectStatus, employeeFromView.RegistrationNumber), innerException); } this.garageRepository.Delete(vehicleEmployee); await this.garageRepository.SaveChangesAsync(); return(true); }
public async Task <IActionResult> Remove(string id, EmployeeRemoveInputModel employeeToRemove) { var employee = await this.garageService.RemoveVehicleToEmployeeAsync(employeeToRemove); return(this.Redirect($"/{GlobalConstants.AreaAdministrationName}/{GlobalConstants.ContollerEmployeesName}")); }