Ejemplo n.º 1
0
        public async Task <ActionResult> Index(AccountActivationPage currentPage, string customerNumber, string organizationNumber)
        {
            switch (Request.Form["Action"])
            {
            default:
                break;

            case "PrivateFirm":
                return(await PrivateFirm(currentPage, PrivateFirmActivationForm.FromRequest(Request)));

            case "NonPrivateFirm":
                return(await NonPrivateFirm(currentPage, NonPrivateFirmActivationForm.FromRequest(Request)));
            }

            var organisationPureNumber = organizationNumber.Trim().Replace("-", "");

            ViewData[customerNumberViewKey]     = customerNumber = customerNumber.Trim();
            ViewData[organizationNumberViewKey] = organizationNumber = organizationNumber.Trim();
            var formatValid = true;

            if (!CustomerNumberRegex.IsMatch(customerNumber))
            {
                formatValid = false;
                ViewData["errorCustomer"] = "Kundnummeret kan bara bestå av siffror";
            }
            if (!OrganizationNumberRegex.IsMatch(organisationPureNumber))
            {
                formatValid = false;
                ViewData["errorOrganisation"] = "Organisationsnumret måste bestå av 10 sifrror";
            }

            if (!formatValid)
            {
                return(View("~/Views/Registration/Activation/Verification.cshtml", new PageViewModel <AccountActivationPage>(currentPage)));
            }

            var matchCode = await _securityRepo.MatchCustomerNumberAndOrganizationNumberAsync(customerNumber, organizationNumber);

#if DEBUG
            matchCode = CustomerCheckCode.SoleTrader;
#endif

            switch (matchCode)
            {
            case CustomerCheckCode.CustomerNumberNotMatch:
            {
                ViewData["errorCode"] = "Felkod: 1";
                return(VerificationError(currentPage));
                //ViewData["errorCustomer"] = "Kundnumret du har angett finns inte registrerat hos Lantmännen för det organisationsnummer du har angett";
                //ViewData["errorOrganisation"] = "Organisationsnumret du har angett stämmer inte överens med kundnumret du har angett";
            }

            case CustomerCheckCode.CustomerNumberNotExist:
            {
                ViewData["errorCode"] = "Felkod: 2";
                return(VerificationError(currentPage));
                //ViewData["errorCustomer"] = "Kundnumret finns inte registrerat hos Lantmännen.";
            }

            case CustomerCheckCode.CustomerNumberActivated:
            {
                ViewData["errorCode"] = "Felkod: 3";
                return(VerificationError(currentPage));
                //ViewData["errorCustomer"] = "Kundnumret och organisationsnumret  du har angett är redan aktiverat för ett konto i LM\xB2. ";
                //ViewData["errorOrganisation"] = "Organisationsnumret och kundnumret du har angett är redan aktiverat för ett konto i LM\xB2.";
            }

            case CustomerCheckCode.Underkund:
            {
                ViewData["errorCode"] = "Felkod: 4";
                return(VerificationError(currentPage));
            }
                //Case If proxy customer/Underkund tries to activate customer number
            }

            ViewData[customerNumberViewKey]     = customerNumber;
            ViewData[organizationNumberViewKey] = organizationNumber;

            //if (!NonPrivateFirmRegex.IsMatch(organisationPureNumber))
            //{
            return(View("~/Views/Registration/Activation/ChooseBankIdPage.cshtml", new PageViewModel <AccountActivationPage>(currentPage)));
            //}

            //            var existingRegistration = await _orgRepo.GetExistingRegistrationAsync(customerNumber, organisationPureNumber);
            //#if DEBUG
            //#else
            //            if (existingRegistration == null) return new HttpStatusCodeResult(400);
            //#endif
            //            ViewData["email"] = existingRegistration?.User_Email ?? existingRegistration?.Contact_Email;
            //            ViewData["firstName"] = existingRegistration?.User_FirstName;
            //            ViewData["lastName"] = existingRegistration?.User_LastName;
            //            ViewData["customerName"] = existingRegistration?.Customer_Name;
            //return View("~/Views/Registration/Activation/NonPrivateFirm.cshtml", new PageViewModel<AccountActivationPage>(currentPage));
        }
Ejemplo n.º 2
0
        private async Task <ActionResult> PrivateFirm(AccountActivationPage currentPage, PrivateFirmActivationForm viewModel)
        {
            if (!TryValidateModel(viewModel) || string.IsNullOrWhiteSpace(viewModel.SerialNumber))
            {
                _logger.Error("ModelState is invalid");
                var message = string.Join(" | ", ModelState.Values
                                          .SelectMany(v => v.Errors)
                                          .Select(e => e.ErrorMessage));
                _logger.Info(message);
                return(new HttpStatusCodeResult(400));
            }

            var userId = await _securityRepo.GetPersonObjectIdByNameAsync(viewModel.Email);

            if (!string.IsNullOrWhiteSpace(userId))
            {
                ViewData[customerNumberViewKey]     = viewModel.CustomerNumber;
                ViewData[organizationNumberViewKey] = viewModel.OrganizationNumber;
                ViewData["firstName"]  = viewModel?.FirstName;
                ViewData["lastName"]   = viewModel?.LastName;
                ViewData["email"]      = viewModel?.Email;
                ViewData["emailError"] = $"Det finns redan en användare registrerad på den här e-postadressen";
                return(View("~/Views/Registration/Activation/PrivateFirm.cshtml", new PageViewModel <AccountActivationPage>(currentPage)));
            }

            var matchCode = await _securityRepo.MatchCustomerNumberAndOrganizationNumberAsync(viewModel.CustomerNumber, viewModel.OrganizationNumber);

            switch (matchCode)
            {
            case CustomerCheckCode.CustomerNumberActivated:
                //conflict
                _logger.Error("Customer number has already been activated");
                return(new HttpStatusCodeResult(409));

            case CustomerCheckCode.CustomerNumberNotExist:
            case CustomerCheckCode.CustomerNumberNotMatch:
                _logger.Error("Customer number is invalid or does not match");
                return(new HttpStatusCodeResult(400));
            }

            var existingRegistration = await _orgRepo.GetExistingRegistrationAsync(viewModel.CustomerNumber, viewModel.OrganizationNumber);

            if (existingRegistration == null)
            {
                _logger.Error("No existing registration found");
                return(new HttpStatusCodeResult(400));
            }

            string personNumber;

            if (!IsBankIdMatchingRegistration(viewModel.SerialNumber, viewModel.OrganizationNumber, out personNumber))
            {
                _logger.Error($"existing registration {viewModel.OrganizationNumber} did not match serial number {viewModel.SerialNumber}");
                return(new HttpStatusCodeResult(400));
            }

            var newUser = await _accountRepo.CreateUserAsync(viewModel.FirstName, viewModel.LastName, viewModel.Telephone, viewModel.Mobilephone,
                                                             viewModel.Email, string.Empty, string.Empty, string.Empty, personNumber, viewModel.CustomerNumber, false);

            ViewData["email"] = newUser.Email;

            var ownerRoles = _securityRepo.GetRolesOfProfileAsync("Admin").Result.Select(x => x.RoleId.ToString()).ToArray();

            await _orgUserRepo.UpdateUserCustomerRolesAsync(newUser.UserName, new CustomerBasicInfo
            {
                CustomerName = string.Empty,
                CustomerNo   = viewModel.CustomerNumber,
            }, ownerRoles);

            await SendActivationEmail(newUser);

            //let the user accept the agreement
            AcceptUserAgreement(newUser, currentPage.UserAgreementPageReference);

            ViewData["reference"] = nameof(PrivateFirm);
            return(View("~/Views/Registration/Activation/Finish.cshtml", new PageViewModel <AccountActivationPage>(currentPage)));
        }