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)); }
private async Task <ActionResult> NonPrivateFirm(AccountActivationPage currentPage, NonPrivateFirmActivationForm 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/NonPrivateFirm.cshtml", new PageViewModel <AccountActivationPage>(currentPage))); } var matchCode = await _securityRepo.MatchCustomerNumberAndOrganizationNumberAsync(viewModel.CustomerNumber, viewModel.OrganizationNumber); switch (matchCode) { case CustomerCheckCode.CustomerNumberActivated: //conflict _logger.Error("Customer is already activated"); return(new HttpStatusCodeResult(409)); case CustomerCheckCode.CustomerNumberNotExist: case CustomerCheckCode.CustomerNumberNotMatch: _logger.Error("Customer numbers mismatched"); 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)); } existingRegistration.User_SocialSecurity = viewModel.SerialNumber; existingRegistration.User_FirstName = viewModel.FirstName; existingRegistration.User_LastName = viewModel.LastName; existingRegistration.Contact_Email = viewModel.Email; existingRegistration.User_Email = viewModel.Email; existingRegistration.Customer_Email = viewModel.Email; existingRegistration.Contact_Phone = existingRegistration.User_Phone = viewModel.Telephone; existingRegistration.Contact_Mobile = existingRegistration.User_Mobile = viewModel.Mobilephone; var newUser = await _accountRepo.CreateUserAsync(viewModel.FirstName, viewModel.LastName, viewModel.Telephone, viewModel.Mobilephone, viewModel.Email, string.Empty, string.Empty, string.Empty, viewModel.SerialNumber, string.Empty, false); ViewData["email"] = newUser.Email; _logger.Info($"Created user:{newUser.Email}:{newUser.UserId}:{newUser.UserName}"); AcceptUserAgreement(newUser, currentPage.UserAgreementPageReference); //send the user activation email await SendActivationEmail(newUser); //send registration files to the backend await _orgRepo.SaveCustomerRegistrationAsync(existingRegistration); ViewData["reference"] = nameof(NonPrivateFirm); return(View("~/Views/Registration/Activation/Finish.cshtml", new PageViewModel <AccountActivationPage>(currentPage))); }