public async Task <IActionResult> AddOrEditProviderType()
        {
            var model = new ProviderTypeAddOrEditViewModel();

            int?UKPRN = Session.GetInt32("UKPRN");

            var providerSearchResult = await _providerService.GetProviderByPRNAsync(UKPRN.ToString());

            if (providerSearchResult.IsSuccess)
            {
                model = new ProviderTypeAddOrEditViewModel();
                model.ProviderType = providerSearchResult.Value.FirstOrDefault()?.ProviderType ?? ProviderType.Undefined;
            }

            return(View("UpdateProviderType", model));
        }
        public async Task <IActionResult> AddOrEditProviderType(
            ProviderTypeAddOrEditViewModel model,
            [FromServices] IProviderInfoCache providerInfoCache,
            [FromServices] ISqlQueryDispatcher sqlQueryDispatcher)
        {
            int?UKPRN = Session.GetInt32("UKPRN");

            var providerSearchResult = await _providerService.GetProviderByPRNAsync(UKPRN.ToString());

            Provider provider;

            if (providerSearchResult.IsSuccess)
            {
                provider = providerSearchResult.Value.FirstOrDefault();

                var oldProviderType = provider.ProviderType;
                if (oldProviderType == ProviderType.FE && model.ProviderType.HasFlag(ProviderType.Apprenticeship))
                {
                    await sqlQueryDispatcher.ExecuteQuery(
                        new EnsureApprenticeshipQAStatusSetForProvider()
                    {
                        ProviderId = provider.id
                    });
                }

                provider.ProviderType = model.ProviderType;

                var result = await _providerService.UpdateProviderDetails(provider);

                if (!result.IsSuccess)
                {
                    throw new Exception(result.Error);
                }

                await providerInfoCache.Remove(provider.id);
            }
            else
            {
                throw new Exception(providerSearchResult.Error);
            }

            return(RedirectToAction("ProviderDetails", "Providers", new { providerId = provider.id }));
        }