public async Task <ActionResult> PartnershipDetails(PartnershipDetailsViewModel model)
        {
            SetBreadcrumb(InternalUserActivity.CreateOrganisation);

            if (!ModelState.IsValid)
            {
                var countries = await GetCountries();

                model.Address.Countries = countries;
                return(View(model));
            }

            using (var client = apiClient())
            {
                var request = new CreateOrganisationAdmin()
                {
                    Address          = model.Address,
                    BusinessName     = model.BusinessTradingName,
                    OrganisationType = model.OrganisationType.GetValueFromDisplayName <OrganisationType>()
                };

                var id = await client.SendAsync(User.GetAccessToken(), request);

                return(RedirectToAddAction(id, model.EntityType));
            }
        }
        public async Task PartnershipDetailsPost_Always_SetsInternalBreadcrumb()
        {
            var viewModel = new PartnershipDetailsViewModel()
            {
                BusinessTradingName = "Company",
                OrganisationType    = "Sole trader or individual",
                Address             = A.Dummy <AddressData>()
            };

            await controller.PartnershipDetails(viewModel);

            Assert.Equal("Add new organisation", breadcrumbService.InternalActivity);
        }
        public async Task <ActionResult> PartnershipDetails(string organisationType, EntityType entityType, string searchedText = null)
        {
            SetBreadcrumb(InternalUserActivity.CreateOrganisation);

            var countries = await GetCountries();

            var model = new PartnershipDetailsViewModel
            {
                BusinessTradingName = searchedText,
                OrganisationType    = organisationType,
                EntityType          = entityType,
                Address             = { Countries = countries }
            };

            return(View(model));
        }
        public async Task PartnershipDetailsPost_ValidViewModel_RequestWithCorrectParametersCreated()
        {
            var viewModel = new PartnershipDetailsViewModel()
            {
                BusinessTradingName = "Company",
                OrganisationType    = "Sole trader or individual",
                Address             = A.Dummy <AddressData>()
            };

            viewModel.Address.Countries = countries;

            await controller.PartnershipDetails(viewModel);

            A.CallTo(() => weeeClient.SendAsync(A <string> ._, A <CreateOrganisationAdmin> .That.Matches(
                                                    p => p.BusinessName == viewModel.BusinessTradingName &&
                                                    p.Address == viewModel.Address &&
                                                    p.OrganisationType == viewModel.OrganisationType.GetValueFromDisplayName <OrganisationType>()))).MustHaveHappened(Repeated.Exactly.Once);
        }
        public async Task PartnershipDetailsPost_ModelNotValid_ReturnsView()
        {
            var viewModel = new PartnershipDetailsViewModel
            {
                BusinessTradingName = "Company", OrganisationType = "Sole trader or individual", Address = { Countries = countries }
            };

            controller.ModelState.AddModelError("error", "error");

            var result = await controller.PartnershipDetails(viewModel) as ViewResult;

            var resultViewModel = result.Model as PartnershipDetailsViewModel;

            Assert.True(string.IsNullOrEmpty(result.ViewName) || result.ViewName == "SoleTraderOrPartnershipDetails");
            Assert.Equal(viewModel.BusinessTradingName, resultViewModel.BusinessTradingName);
            Assert.Equal(viewModel.OrganisationType, resultViewModel.OrganisationType);
            Assert.Equal(countries, resultViewModel.Address.Countries);
        }
        public async Task PartnershipDetailsPost_ValidViewModel_ReturnsCorrectRedirect(EntityType type, string expectedController, string expectedAction)
        {
            var viewModel = new PartnershipDetailsViewModel
            {
                BusinessTradingName = "Company",
                OrganisationType    = "Sole trader or individual",
                EntityType          = type,
                Address             = { Countries = countries }
            };

            var result = await controller.PartnershipDetails(viewModel) as RedirectToRouteResult;

            result.RouteValues["action"].Should().Be(expectedAction);
            result.RouteValues["controller"].Should().Be(expectedController);

            result.RouteValues["organisationId"].Should().NotBe(null);

            if (type != EntityType.Pcs)
            {
                result.RouteValues["facilityType"].Should().Be(viewModel.EntityType);
            }
        }
        public async Task<ActionResult> PartnershipDetails(PartnershipDetailsViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return View(model);
            }

            using (var client = apiClient())
            {
                if (model.OrganisationId != null)
                {
                    // update orgnisation details
                    UpdateOrganisationTypeDetails updateRequest = new UpdateOrganisationTypeDetails(
                        model.OrganisationId.Value,
                        OrganisationType.Partnership,
                        string.Empty,
                        model.BusinessTradingName,
                        String.Empty);

                    Guid organisationId = await client.SendAsync(User.GetAccessToken(), updateRequest);
                    return RedirectToAction("MainContactPerson", new { organisationId });
                }

                CreatePartnershipRequest request = new CreatePartnershipRequest
                {
                    TradingName = model.BusinessTradingName
                };
                //create the organisation only if does not exist
                Guid orgId = await client.SendAsync(User.GetAccessToken(), request);
                return RedirectToAction("MainContactPerson", new { organisationId = orgId });
            }
        }
        public async Task<ActionResult> PartnershipDetails(Guid? organisationId = null, string searchedText = null)
        {
            if (organisationId != null)
            {
                using (var client = apiClient())
                {
                    var organisation = await GetOrganisation(organisationId, client);
                    if (organisation.OrganisationType == OrganisationType.Partnership)
                    {
                        var model = new PartnershipDetailsViewModel
                        {
                            BusinessTradingName = organisation.TradingName,
                            OrganisationId = organisationId.Value
                        };

                        return View("PartnershipDetails", model);
                    }
                    return View(new PartnershipDetailsViewModel { BusinessTradingName = searchedText });
                }
            }
            return View(new PartnershipDetailsViewModel { BusinessTradingName = searchedText });
        }