示例#1
0
        public async Task <IActionResult> AddVehicle(AddVehicleViewModel model)
        {
            if (ModelState.IsValid)
            {
                var user = await _userHelper.GetUserByEmailAsync(this.User.Identity.Name);

                var vehicle = _converterHelper.ToNewVehicle(model, user);


                try
                {
                    if (model.ModelName != null)
                    {
                        if (await _brandRepository.ModelNameExistsAsync(model.ModelName))
                        {
                            ModelState.AddModelError(string.Empty, $"There is already a model registered with {model.ModelName}, please chose from list of models");
                            model.Brands = await _vehicleRepository.GetComboSoloBrand(model).ToAsyncEnumerable().ToList();

                            model.Models = _vehicleRepository.GetComboModels(model.BrandId);
                            model.Fuels  = _vehicleRepository.GetComboFuels();
                            model.Colors = _vehicleRepository.GetComboColors();
                            return(View(model));
                        }

                        if (await _brandRepository.ExistsAsync(model.BrandId))
                        {
                            var newModel = new BrandModel
                            {
                                ModelName = model.ModelName,
                                BrandId   = model.BrandId,
                            };

                            try
                            {
                                await _brandRepository.AddModelFromNewVehicleAsync(newModel);
                            }
                            catch (Exception ex)
                            {
                                if (ex.InnerException.Message.Contains("duplicate"))
                                {
                                    ModelState.AddModelError(string.Empty, $"There is already a model registered with the name {newModel.ModelName}, please chose another from the list");
                                    model.Brands = await _vehicleRepository.GetComboSoloBrand(model).ToAsyncEnumerable().ToList();

                                    model.Models = _vehicleRepository.GetComboModels(model.BrandId);
                                    model.Fuels  = _vehicleRepository.GetComboFuels();
                                    model.Colors = _vehicleRepository.GetComboColors();
                                    return(View(model));
                                }
                                else
                                {
                                    ModelState.AddModelError(string.Empty, ex.InnerException.Message);
                                    model.Brands = await _vehicleRepository.GetComboSoloBrand(model).ToAsyncEnumerable().ToList();

                                    model.Models = _vehicleRepository.GetComboModels(model.BrandId);
                                    model.Fuels  = _vehicleRepository.GetComboFuels();
                                    model.Colors = _vehicleRepository.GetComboColors();
                                    return(View(model));
                                }
                            }

                            var modelId = await _brandRepository.GetModelIdAsync(model.ModelName);

                            model.ModelId = modelId;
                            var vehicle1 = _converterHelper.ToNewVehicle(model, user);

                            try
                            {
                                await _vehicleRepository.CreateAsync(vehicle1);

                                return(RedirectToAction(nameof(Index)));
                            }
                            catch (Exception ex)
                            {
                                if (ex.InnerException.Message.Contains("duplicate"))
                                {
                                    ModelState.AddModelError(string.Empty, $"There is already a Car registered with the Licence PLate number {vehicle.LicencePlate}");
                                    model.Brands = _vehicleRepository.GetComboBrands();
                                    model.Models = _vehicleRepository.GetComboModels(model.BrandId);
                                    model.Fuels  = _vehicleRepository.GetComboFuels();
                                    model.Colors = _vehicleRepository.GetComboColors();
                                    return(View(model));
                                }
                                else
                                {
                                    ModelState.AddModelError(string.Empty, ex.InnerException.Message);
                                    model.Brands = _vehicleRepository.GetComboBrands();
                                    model.Models = _vehicleRepository.GetComboModels(model.BrandId);
                                    model.Fuels  = _vehicleRepository.GetComboFuels();
                                    model.Colors = _vehicleRepository.GetComboColors();
                                    return(View(model));
                                }
                            }
                        }
                        else
                        {
                            ModelState.AddModelError(string.Empty, "The Brand chosen is no longer available, please contact the company for more information");
                            model.Brands = _vehicleRepository.GetComboBrands();
                            model.Models = _vehicleRepository.GetComboModels(model.BrandId);
                            model.Fuels  = _vehicleRepository.GetComboFuels();
                            model.Colors = _vehicleRepository.GetComboColors();
                            return(View(model));
                        }
                    }

                    await _vehicleRepository.CreateAsync(vehicle);

                    return(RedirectToAction(nameof(Index)));
                }
                catch (Exception ex)
                {
                    if (ex.InnerException.Message.Contains("duplicate"))
                    {
                        if (ModelState.IsValid)
                        {
                            ModelState.AddModelError(string.Empty, $"There is already a Car registered with the licence Plate {vehicle}, please insert another");
                            model.Brands = _vehicleRepository.GetComboBrands();
                            model.Models = _vehicleRepository.GetComboModels(model.BrandId);
                            model.Fuels  = _vehicleRepository.GetComboFuels();
                            model.Colors = _vehicleRepository.GetComboColors();
                            return(View(model));
                        }
                    }
                    else
                    {
                        ModelState.AddModelError(string.Empty, ex.InnerException.Message);
                        model.Brands = _vehicleRepository.GetComboBrands();
                        model.Models = _vehicleRepository.GetComboModels(model.BrandId);
                        model.Fuels  = _vehicleRepository.GetComboFuels();
                        model.Colors = _vehicleRepository.GetComboColors();
                        return(View(model));
                    }
                }
            }
            return(View(model));
        }