Beispiel #1
0
        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);
        }
Beispiel #2
0
        public async Task <IActionResult> Remove(string id, EmployeeRemoveInputModel employeeToRemove)
        {
            var employee = await this.garageService.RemoveVehicleToEmployeeAsync(employeeToRemove);

            return(this.Redirect($"/{GlobalConstants.AreaAdministrationName}/{GlobalConstants.ContollerEmployeesName}"));
        }