From 7f3978b58ae565a16d8ac30f013ab88613822873 Mon Sep 17 00:00:00 2001
From: taisHryssai <thryssai@gmail.com>
Date: Tue, 17 Oct 2023 18:43:52 -0300
Subject: [PATCH 1/2] choose between company and user in the first step of
 registration

---
 .../controller/UserRegisterController.java    | 175 +++++++---------
 .../user-registration/wizard-step-01.jsp      | 193 +++++++++++-------
 .../user-registration/wizard-step-06-old.jsp  | 111 ++++++++++
 .../user-registration/wizard-step-06.jsp      | 118 ++++++-----
 .../user-registration/wizard-step-07.jsp      | 177 ++++++++++------
 .../user-registration/wizard-step-08.jsp      | 170 ---------------
 6 files changed, 485 insertions(+), 459 deletions(-)
 create mode 100644 src/main/webapp/WEB-INF/view/visitor/user-registration/wizard-step-06-old.jsp
 delete mode 100644 src/main/webapp/WEB-INF/view/visitor/user-registration/wizard-step-08.jsp

diff --git a/src/main/java/br/edu/utfpr/servicebook/controller/UserRegisterController.java b/src/main/java/br/edu/utfpr/servicebook/controller/UserRegisterController.java
index 3ff8b031..ea3b249c 100644
--- a/src/main/java/br/edu/utfpr/servicebook/controller/UserRegisterController.java
+++ b/src/main/java/br/edu/utfpr/servicebook/controller/UserRegisterController.java
@@ -129,13 +129,13 @@ public String showUserRegistrationWizard(
             @RequestParam(value = "passo", required = false, defaultValue = "1") Long step,
             HttpSession httpSession,
             Model model
-    ) throws Exception{
+    ) throws Exception {
 
         if (step < 1 || step > 9) {
             step = 1L;
         }
 
-        if(step == 8){
+        if (step == 7) {
             List<Expertise> professionPage = expertiseService.findAll();
             List<ExpertiseDTO> expertiseDTOs = professionPage.stream()
                     .map(s -> expertiseMapper.toDto(s))
@@ -152,9 +152,9 @@ public String showUserRegistrationWizard(
 
             List<Expertise> professionalExpertises = new ArrayList<>();
 
-            if(professionalExpertiseDTO.getIds() != null){
+            if (professionalExpertiseDTO.getIds() != null) {
                 for (Integer id : professionalExpertiseDTO.getIds()) {
-                    Optional<Expertise> oExpertises =  expertiseService.findById((Long.valueOf(id)));
+                    Optional<Expertise> oExpertises = expertiseService.findById((Long.valueOf(id)));
                     if (!oExpertises.isPresent()) {
                         throw new Exception("Não existe essa especialidade!");
                     }
@@ -184,6 +184,7 @@ private void resetSessionAttributes(HttpSession httpSession) {
      * Guarda na sessão que o cadastro é de um indivíduo.
      * Recebe o email apenas e antes de persistir, verifica se já não está sendo usado.
      * Envia o email com o código para confirmar a veracidade do email.
+     *
      * @param httpSession
      * @param dto
      * @param errors
@@ -197,14 +198,18 @@ private void resetSessionAttributes(HttpSession httpSession) {
     public String saveUserEmail(
             HttpSession httpSession,
             @Validated(UserDTO.RequestUserEmailInfoGroupValidation.class) IndividualDTO dto,
+            @Validated(UserDTO.RequestUserNameAndCPFInfoGroupValidation.class) IndividualDTO dtouser,
             BindingResult errors,
             RedirectAttributes redirectAttributes,
             Model model
     ) throws MessagingException {
 
-        if(errors.hasErrors()) {
+        if (errors.hasErrors()) {
             return this.userRegistrationErrorForwarding("1", dto, model, errors);
         }
+        if (errors.hasErrors()) {
+            return this.userRegistrationErrorForwarding("1", dtouser, model, errors);
+        }
 
         String email = dto.getEmail().trim();
         httpSession.setAttribute(UserWizardUtil.KEY_IS_REGISTER_COMPANY, false);
@@ -242,9 +247,31 @@ public String saveUserEmail(
 
         IndividualDTO userSessionDTO = null;
         userSessionDTO = (IndividualDTO) userWizardUtil.getWizardState(httpSession, IndividualDTO.class, UserWizardUtil.KEY_WIZARD_INDIVIDUAL);
+
+        if (!dtouser.getCpf().isEmpty()) {
+            //verifica se o CPF já está cadastrado para algum outro usuário
+            Optional<Individual> oUserCpf = individualService.findByCpf(dtouser.getCpf());
+
+            if (oUserCpf.isPresent()) {
+                errors.rejectValue("cpf", "error.dto", "CPF já cadastrado! Por favor, insira um CPF não cadastrado.");
+            }
+
+            if (errors.hasErrors()) {
+                return this.userRegistrationErrorForwarding("1", dtouser, model, errors);
+            }
+
+            userSessionDTO.setCpf(dtouser.getCpf());
+        }
+
+        System.out.println("userSessionDTO");
+        System.out.println(dtouser.getCpf());
+
         userSessionDTO.setProfile(ProfileEnum.ROLE_USER);
         userSessionDTO.setEmail(email);
-
+        //salva na sessão
+        userSessionDTO.setName(dtouser.getName());
+        userSessionDTO.setCpf(dtouser.getCpf());
+        userSessionDTO.setProfileVerified(true);
         return "redirect:/cadastrar-se?passo=2";
     }
 
@@ -253,6 +280,7 @@ public String saveUserEmail(
      * Guarda na sessão que o cadastro é de empresa e não de um indivíduo.
      * Recebe o email apenas e antes de persistir, verifica se já não está sendo usado.
      * Envia o email com o código para confirmar a veracidade do email.
+     *
      * @param httpSession
      * @param dto
      * @param errors
@@ -266,6 +294,7 @@ public String saveUserEmail(
     public String saveUserEmail(
             HttpSession httpSession,
             @Validated(UserDTO.RequestUserEmailInfoGroupValidation.class) CompanyDTO dto,
+            @Validated(UserDTO.RequestUserNameAndCNPJInfoGroupValidation.class) CompanyDTO dtocompany,
             BindingResult errors,
             RedirectAttributes redirectAttributes,
             Model model
@@ -274,7 +303,9 @@ public String saveUserEmail(
         if (errors.hasErrors()) {
             return this.userRegistrationErrorForwarding("1", dto, model, errors);
         }
-
+        if (errors.hasErrors()) {
+            return this.userRegistrationErrorForwarding("1", dtocompany, model, errors);
+        }
         String email = dto.getEmail().trim();
         httpSession.setAttribute(UserWizardUtil.KEY_IS_REGISTER_COMPANY, true);
 
@@ -317,11 +348,31 @@ public String saveUserEmail(
         userSessionDTO.setProfile(ROLE_COMPANY);
         userSessionDTO.setEmail(email);
 
+        CompanyDTO companySessionDTO = (CompanyDTO) userWizardUtil.getWizardState(httpSession, CompanyDTO.class, UserWizardUtil.KEY_WIZARD_COMPANY);
+
+        //verifica se o CPF já está cadastrado para algum outro usuário
+        Optional<Company> oUserCnpj = companyService.findByCnpj(dtocompany.getCnpj());
+
+        if (oUserCnpj.isPresent()) {
+            errors.rejectValue("cnpj", "error.dto", "CNPJ já cadastrado! Por favor, insira um CNPJ não cadastrado.");
+        }
+
+        if (errors.hasErrors()) {
+            return this.userRegistrationErrorForwarding("1", dtocompany, model, errors);
+        }
+
+        companySessionDTO.setName(dto.getName().trim());
+        companySessionDTO.setCnpj(dto.getCnpj().trim());
+        companySessionDTO.setProfileVerified(true);
+
+
+
         return "redirect:/cadastrar-se?passo=2";
     }
 
     /**
      * Realiza a verificação do email por meio de um código numérico enviado para o respectivo email.
+     *
      * @param httpSession
      * @param dto
      * @param errors
@@ -372,6 +423,7 @@ public String saveUserEmailCode(
 
     /**
      * Salva a senha e contrasenha na sessão
+     *
      * @param httpSession
      * @param dto
      * @param errors
@@ -392,7 +444,7 @@ public String saveUserPassword(
             return this.userRegistrationErrorForwarding("3", dto, model, errors);
         }
 
-        if(!dto.getPassword().equals(dto.getRepassword())){
+        if (!dto.getPassword().equals(dto.getRepassword())) {
             errors.rejectValue("password", "error.dto", "As senhas não correspondem. Por favor, tente novamente.");
         }
 
@@ -409,6 +461,7 @@ public String saveUserPassword(
 
     /**
      * Salva o telefone na sessão e enviar o código para verificação do número de telefone.
+     *
      * @param httpSession
      * @param dto
      * @param errors
@@ -442,6 +495,7 @@ public String saveUserPhone(
 
     /**
      * Verifica se o código recebido por SMS é válido.
+     *
      * @param httpSession
      * @param dto
      * @param errors
@@ -493,7 +547,7 @@ public String saveUserPhoneCode(
         //verificado pelo usuário corrente que está sendo cadastrado
         Optional<User> oUser = userService.findByPhoneNumber(dto.getPhoneNumber());
 
-        if(oUser.isPresent()) {
+        if (oUser.isPresent()) {
             User user = oUser.get();
             user.setPhoneVerified(false);
             userService.save(user);
@@ -501,90 +555,14 @@ public String saveUserPhoneCode(
 
         redirectAttributes.addFlashAttribute("msg", "Telefone verificado com sucesso!");
 
+//        return "redirect:/cadastrar-se?passo=6";
         return "redirect:/cadastrar-se?passo=6";
-    }
-
-    /**
-     * Salva na sessão o nome e o CPF do indivíduo.
-     * Porém, somente se o CPF ainda não foi cadastrado.
-     * @param httpSession
-     * @param dto
-     * @param errors
-     * @param redirectAttributes
-     * @param model
-     * @return
-     */
-    @PostMapping("/individuo/passo-6")
-    @PermitAll
-    public String saveUserNameAndCPF(
-            HttpSession httpSession,
-            @Validated(UserDTO.RequestUserNameAndCPFInfoGroupValidation.class) IndividualDTO dto,
-            BindingResult errors,
-            RedirectAttributes redirectAttributes,
-            Model model
-    ) {
-
-        if (errors.hasErrors()) {
-            return this.userRegistrationErrorForwarding("6", dto, model, errors);
-        }
-
-        //verifica se o CPF já está cadastrado para algum outro usuário
-        Optional<Individual> oUser = individualService.findByCpf(dto.getCpf());
-
-        if (oUser.isPresent()) {
-            errors.rejectValue("cpf", "error.dto", "CPF já cadastrado! Por favor, insira um CPF não cadastrado.");
-        }
-
-        if (errors.hasErrors()) {
-            return this.userRegistrationErrorForwarding("6", dto, model, errors);
-        }
-
-        //salva na sessão
-        IndividualDTO userSessionDTO = (IndividualDTO) userWizardUtil.getWizardState(httpSession, IndividualDTO.class, UserWizardUtil.KEY_WIZARD_INDIVIDUAL);
-        userSessionDTO.setName(dto.getName());
-        userSessionDTO.setCpf(dto.getCpf());
-        userSessionDTO.setProfileVerified(true);
-
-        return "redirect:/cadastrar-se?passo=7";
-    }
-
-    @PostMapping("/empresa/passo-6")
-    @PermitAll
-    public String saveUserNameAndCNPJ(
-            HttpSession httpSession,
-            @Validated(UserDTO.RequestUserNameAndCNPJInfoGroupValidation.class) CompanyDTO dto,
-            BindingResult errors,
-            RedirectAttributes redirectAttributes,
-            Model model
-    ) {
 
-        if (errors.hasErrors()) {
-            return this.userRegistrationErrorForwarding("6", dto, model, errors);
-        }
-
-        //verifica se o CNPJ ainda não está cadastrado
-        Optional<Company> oUser = companyService.findByCnpj(dto.getCnpj());
-
-        if (oUser.isPresent()) {
-            errors.rejectValue("cnpj", "error.dto", "CNPJ já cadastrado! Por favor, " +
-                    "insira um CNPJ não cadastrado.");
-        }
-
-        if (errors.hasErrors()) {
-            return this.userRegistrationErrorForwarding("6", dto, model, errors);
-        }
-
-        //salva na sessão
-        CompanyDTO companySessionDTO = (CompanyDTO) userWizardUtil.getWizardState(httpSession, CompanyDTO.class, UserWizardUtil.KEY_WIZARD_COMPANY);
-        companySessionDTO.setName(dto.getName().trim());
-        companySessionDTO.setCnpj(dto.getCnpj().trim());
-        companySessionDTO.setProfileVerified(true);
-
-        return "redirect:/cadastrar-se?passo=7";
     }
 
     /**
      * Salva o endereço na sessão.
+     *
      * @param httpSession
      * @param dto
      * @param errors
@@ -592,7 +570,7 @@ public String saveUserNameAndCNPJ(
      * @param model
      * @return
      */
-    @PostMapping("/passo-7")
+    @PostMapping("/passo-6")
     @PermitAll
     public String saveUserAddress(
             HttpSession httpSession,
@@ -628,25 +606,25 @@ public String saveUserAddress(
         UserDTO userSessionDTO = userWizardUtil.getUserDTO(httpSession);
         userSessionDTO.setAddress(addressFullDTO);
 
-        return "redirect:/cadastrar-se?passo=8";
+        return "redirect:/cadastrar-se?passo=7";
     }
 
-    @PostMapping("/passo-8")
+    @PostMapping("/passo-7")
     @PermitAll
     public String saveExpertises(
             HttpSession httpSession,
             ProfessionalExpertiseDTO dto,
             RedirectAttributes redirectAttributes,
             Model model
-    )throws Exception{
+    ) throws Exception {
 
         UserDTO userSessionDTO = userWizardUtil.getUserDTO(httpSession);
         Set<Integer> ids = dto.getIds();
 
-        if(ids != null){
+        if (ids != null) {
             ProfessionalExpertiseDTO professionalExpertiseSessionDTO = (ProfessionalExpertiseDTO) userWizardUtil.getWizardState(httpSession, ProfessionalExpertiseDTO.class, UserWizardUtil.KEY_EXPERTISES);
             for (Integer id : ids) {
-                Optional<Expertise> oExpertise =  expertiseService.findById((Long.valueOf(id)));
+                Optional<Expertise> oExpertise = expertiseService.findById((Long.valueOf(id)));
                 if (!oExpertise.isPresent()) {
                     throw new Exception("Não existe essa especialidade!");
                 }
@@ -657,7 +635,7 @@ public String saveExpertises(
         return "redirect:/cadastrar-se?passo=8";
     }
 
-    @PostMapping("/passo-9")
+    @PostMapping("/passo-8")
     @PermitAll
     public String saveUser(
             HttpSession httpSession,
@@ -666,12 +644,12 @@ public String saveUser(
             Model model,
             RedirectAttributes redirectAttributes,
             SessionStatus status
-    )throws Exception {
+    ) throws Exception {
 
         boolean isCompany = (Boolean) httpSession.getAttribute(UserWizardUtil.KEY_IS_REGISTER_COMPANY);
         String email = null;
 
-        if(isCompany){
+        if (isCompany) {
             CompanyDTO userSessionDTO = (CompanyDTO) userWizardUtil.getWizardState(httpSession, CompanyDTO.class, UserWizardUtil.KEY_WIZARD_COMPANY);
 
             validator.validate(userSessionDTO, errors, new Class[]{
@@ -689,8 +667,7 @@ public String saveUser(
             Company company = companyMapper.toEntity(userSessionDTO);
             email = company.getEmail();
             companyService.save(company);
-        }
-        else{
+        } else {
             IndividualDTO userSessionDTO = (IndividualDTO) userWizardUtil.getWizardState(httpSession, IndividualDTO.class, UserWizardUtil.KEY_WIZARD_INDIVIDUAL);
 
             validator.validate(userSessionDTO, errors, new Class[]{
@@ -712,7 +689,7 @@ public String saveUser(
 
         Optional<User> oUser = userService.findByEmail(email);
 
-        if(!oUser.isPresent()){
+        if (!oUser.isPresent()) {
             throw new Exception("O usuário não foi encontrado.");
         }
 
diff --git a/src/main/webapp/WEB-INF/view/visitor/user-registration/wizard-step-01.jsp b/src/main/webapp/WEB-INF/view/visitor/user-registration/wizard-step-01.jsp
index dd68100c..ebf69c6e 100644
--- a/src/main/webapp/WEB-INF/view/visitor/user-registration/wizard-step-01.jsp
+++ b/src/main/webapp/WEB-INF/view/visitor/user-registration/wizard-step-01.jsp
@@ -1,83 +1,129 @@
 <%@page contentType="text/html" pageEncoding="UTF-8" %>
 <%@taglib prefix="t" tagdir="/WEB-INF/tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
 <head>
-    <!-- Funciona apenas com caminho absoluto porque é renderizado antes da tag base -->
-    <link href="${pageContext.request.contextPath}/assets/resources/styles/visitor/visitor.css" rel="stylesheet">
+  <!-- Funciona apenas com caminho absoluto porque é renderizado antes da tag base -->
+  <link href="${pageContext.request.contextPath}/assets/resources/styles/visitor/visitor.css" rel="stylesheet">
 </head>
 
 <t:template title="Servicebook - Cadastro - Passo 1">
-    <jsp:body>
-
-        <main>
-            <div class="container">
-                <c:if test="${not empty errors}">
-                    <div class="card-panel red">
-                        <c:forEach var="e" items="${errors}">
-                            <span class="white-text">${e.getDefaultMessage()}</span><br>
-                        </c:forEach>
-                    </div>
-                </c:if>
-
-                <div class="section">
-                    <div class="row">
-                            <!-- o endereço do formulário está atrelado a aba clicada pelo usuário, ou seja, para
-                            cadastro de empresa ou indivíduo. Por default, a aba empresa é mostrada. A atualização
-                             do endereço é realizado via JavaScript.-->
-                            <form method="post" action="cadastrar-se/empresa/passo-1" id="register-form">
-                                <div class="row">
-                                    <div id="tabButton" class="col s10 input-field col s12 m8 l6 xl6 offset-s1 offset-m2 offset-l3 offset-xl3">
-                                        <ul class="tabs tabs_register">
-                                            <li id="tab_company" class="list tab col s5">
-                                                <a data-tabName="company" class="active" href="#company">Empresa</a>
-                                            </li>
-                                            <li id="tab_individual" class="list tab col s5">
-                                                <a data-tabName="individual" href="#individual">Cliente/Profissional</a>
-                                            </li>
-                                        </ul>
-                                    </div>
-
-                                    <div class="input-field col s12 m8 l6 xl6 offset-s1 offset-m2 offset-l3 offset-xl3">
-                                        <h3 class="center secondary-color-text">
-                                            Qual o seu email?
-                                        </h3>
-                                        <h5 class="center secondary-color-text">
-                                            O seu email será utilizado para você acessar o sistema e receber informações sobre os
-                                            serviços!
-                                        </h5>
-
-                                    </div>
-
-                                    <div class="div_email input-field col s12 m8 l6 xl6 offset-s1 offset-m2 offset-l3 offset-xl3">
-                                        <label for="email">Email</label>
-                                        <input id="email" name="email" type="text" value="${dto.email}" class="validate">
-                                    </div>
-
-                                    <div class="col s6 m3 offset-m3 spacing-buttons">
-                                        <div class="center">
-                                            <a class="waves-effect waves-light btn btn-gray" href="bem-vindo">Voltar</a>
-                                        </div>
-                                    </div>
-
-                                    <div class="col s6 m3 spacing-buttons">
-                                        <div class="center">
-                                            <button type="submit" class="waves-effect waves-light btn">Próximo</button>
-                                        </div>
-                                    </div>
-                                </div>
-                            </form>
-                    </div>
+  <jsp:body>
+
+    <main>
+      <div class="container">
+        <c:if test="${not empty errors}">
+          <div class="card-panel red">
+            <c:forEach var="e" items="${errors}">
+              <span class="white-text">${e.getDefaultMessage()}</span><br>
+            </c:forEach>
+          </div>
+        </c:if>
+
+        <div class="section">
+          <div class="row">
+            <!-- o endereço do formulário está atrelado a aba clicada pelo usuário, ou seja, para
+            cadastro de empresa ou indivíduo. Por default, a aba empresa é mostrada. A atualização
+             do endereço é realizado via JavaScript.-->
+            <form method="post" action="cadastrar-se/empresa/passo-1" id="register-form">
+              <div class="row">
+                <div id="tabButton"
+                     class="col s10 input-field col s12 m8 l6 xl6 offset-s1 offset-m2 offset-l3 offset-xl3">
+                  <ul class="tabs tabs_register">
+                    <li id="tab_company" class="list tab col s5">
+                      <a data-tabName="company" class="active" href="#company">Empresa</a>
+                    </li>
+                    <li id="tab_individual" class="list tab col s5">
+                      <a data-tabName="individual" href="#individual">Cliente/Profissional</a>
+                    </li>
+                  </ul>
+                </div>
+
+                <div class="input-field col s12 m8 l6 xl6 offset-s1 offset-m2 offset-l3 offset-xl3">
+                  <h4 class="center secondary-color-text">
+                    Qual o seu nome completo?
+                  </h4>
+                  <h5 class="center secondary-color-text">
+                    O usuários precisam saber com quem estão negociando.
+                  </h5>
+                </div>
+
+                <div class="div_email input-field col s12 m8 l6 xl6 offset-s1 offset-m2 offset-l3 offset-xl3">
+                  <label for="name">Nome completo</label>
+                  <input id="name" name="name" type="text" value="${dto.name}" class="validate">
+                </div>
+
+                <div class="input-field col s12 m8 l6 xl6 offset-s1 offset-m2 offset-l3 offset-xl3 div_cpf">
+                  <h4 class="center secondary-color-text">
+                    Qual o seu CPF?
+                  </h4>
+                  <h5 class="center secondary-color-text">
+                    Poderá ser usado para validar a veracidade dos dados pessoais.
+                  </h5>
+                </div>
+
+                <div class="input-field col s12 m8 l6 xl6 offset-s1 offset-m2 offset-l3 offset-xl3 div_cpf">
+                  <input id="cpf" name="cpf" type="text" value="${dto.cpf}" class="">
+                  <label for="cpf">CPF</label>
+                </div>
+                <!-- verifica na sessão se o cadastro atual é de empresa -->
+                <div class="input-field col s12 m8 l6 xl6 offset-s1 offset-m2 offset-l3 offset-xl3 div_cnpj">
+                  <h4 class="center secondary-color-text">
+                    Qual o seu CNPJ?
+                  </h4>
+                  <h5 class="center secondary-color-text">
+                    Poderá ser usado para validar a veracidade dos dados pessoais.
+                  </h5>
                 </div>
-            </div>
-        </main>
 
-    </jsp:body>
+                <div class="input-field col s12 m8 l6 xl6 offset-s1 offset-m2 offset-l3 offset-xl3 div_cnpj">
+                  <input id="cnpj" name="cnpj" type="text" value="${dto.cnpj}" class="">
+                  <label for="cnpj">CNPJ</label>
+                </div>
+
+                <div class="input-field col s12 m8 l6 xl6 offset-s1 offset-m2 offset-l3 offset-xl3">
+                  <h4 class="center secondary-color-text">
+                    Qual o seu email?
+                  </h4>
+                  <h5 class="center secondary-color-text">
+                    O seu email será utilizado para você acessar o sistema e receber informações sobre os
+                    serviços!
+                  </h5>
+                </div>
+
+                <div class="div_email input-field col s12 m8 l6 xl6 offset-s1 offset-m2 offset-l3 offset-xl3">
+                  <label for="email">Email</label>
+                  <input id="email" name="email" type="text" value="${dto.email}" class="validate">
+                </div>
+                <div class="col s6 m3 offset-m3 spacing-buttons">
+                  <div class="center">
+                    <a class="waves-effect waves-light btn btn-gray" href="bem-vindo">Voltar</a>
+                  </div>
+                </div>
+
+                <div class="col s6 m3 spacing-buttons">
+                  <div class="center">
+                    <button type="submit" class="waves-effect waves-light btn">Próximo</button>
+                  </div>
+                </div>
+              </div>
+            </form>
+          </div>
+        </div>
+      </div>
+    </main>
+
+  </jsp:body>
 </t:template>
+<script src="assets/libraries/jquery.mask.js"></script>
 
 <script>
-
-    $("#tabButton ul li a").click(function(e){
+    $(".div_cpf").hide();
+    $(document).ready(function () {
+        $('#cpf').mask('000.000.000-00', {reverse: true});
+        $('#cnpj').mask('00.000.000/0000-00', {reverse: true});
+    });
+    $("#tabButton ul li a").click(function (e) {
         // active deactivate tab buttons
         $("#tabButton ul li a").removeClass('active');
         $(this).addClass('active');
@@ -85,14 +131,17 @@
         // show hide tab content
         let tabName = $(this).attr('data-tabName');
         $("#tabContent .tab").removeClass('active');
-        $("#tabContent #"+tabName).addClass('active');
+        $("#tabContent #" + tabName).addClass('active');
 
         //altera o endereço do action do form de acordo com o tipo de usuário cadastrado
-        if(tabName == 'company'){
+        if (tabName == 'company') {
             $('#register-form').attr('action', 'cadastrar-se/empresa/passo-1');
-        }
-        else{
+            $(".div_cpf").hide();
+            $(".div_cnpj").show();
+        } else {
             $('#register-form').attr('action', 'cadastrar-se/individuo/passo-1');
+            $(".div_cpf").show();
+            $(".div_cnpj").hide();
         }
 
         // stop reload
diff --git a/src/main/webapp/WEB-INF/view/visitor/user-registration/wizard-step-06-old.jsp b/src/main/webapp/WEB-INF/view/visitor/user-registration/wizard-step-06-old.jsp
new file mode 100644
index 00000000..5a928413
--- /dev/null
+++ b/src/main/webapp/WEB-INF/view/visitor/user-registration/wizard-step-06-old.jsp
@@ -0,0 +1,111 @@
+<%@page contentType="text/html" pageEncoding="UTF-8" %>
+<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>
+<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<head>
+    <!-- Funciona apenas com caminho absoluto porque é renderizado antes da tag base -->
+    <link href="${pageContext.request.contextPath}/assets/resources/styles/visitor/visitor.css" rel="stylesheet">
+</head>
+
+<t:template title="Servicebook - Cadastro - Passo 6">
+    <jsp:body>
+        <main>
+            <div class="container">
+                <c:if test="${not empty errors}">
+                    <div class="card-panel red">
+                        <c:forEach var="e" items="${errors}">
+                            <span class="white-text">${e.getDefaultMessage()}</span><br>
+                        </c:forEach>
+                    </div>
+                </c:if>
+
+                <c:if test="${not empty msg}">
+                    <div class="row">
+                        <div class="col s12">
+                            <div class="card-panel green lighten-1 msg-view center-align">
+                                <span class="white-text">${msg}</span>
+                            </div>
+                        </div>
+                    </div>
+                </c:if>
+
+                <div class="section">
+                    <div class="row">
+                        <div class="row">
+                            <h3 class="center secondary-color-text">Nos conte mais sobre você!</h3>
+                        </div>
+                        <!-- verifica na sessão se o cadastro atual é de indivíduo e ajusta a URL -->
+                        <form method="post" action="${sessionScope.get('KEY_IS_REGISTER_COMPANY') == true ? 'cadastrar-se/empresa/passo-6' : 'cadastrar-se/individuo/passo-6'}">
+                            <div class="row center spacing-buttons">
+                                <h4 class="center secondary-color-text">
+                                    Qual o seu nome completo?
+                                </h4>
+                                <h5 class="center secondary-color-text">
+                                    O usuários precisam saber com quem estão negociando.
+                                </h5>
+                                <div class="input-field col s12 l6 offset-l3 spacing-buttons">
+                                    <input id="name" name="name" type="text" value="${dto.name}" class="validate">
+                                    <label for="name">Nome completo</label>
+                                </div>
+                            </div>
+                            <!-- verifica na sessão se o cadastro atual é de indivíduo -->
+                            <c:if test="${sessionScope.get('KEY_IS_REGISTER_COMPANY') == false}">
+                                <div class="row center spacing-buttons">
+                                    <h4 class="center secondary-color-text">
+                                        Qual o seu CPF?
+                                    </h4>
+                                    <h5 class="center secondary-color-text">
+                                        Poderá ser usado para validar a veracidade dos dados pessoais.
+                                    </h5>
+
+                                    <div class="input-field col s12 l6 offset-l3 spacing-buttons">
+                                        <input id="cpf" name="cpf" type="text" value="${dto.cpf}" class="">
+                                        <label for="cpf">CPF</label>
+                                    </div>
+                                </div>
+                            </c:if>
+                            <!-- verifica na sessão se o cadastro atual é de empresa -->
+                            <c:if test="${sessionScope.get('KEY_IS_REGISTER_COMPANY') == true}">
+                                <div class="row center spacing-buttons">
+                                    <h4 class="center secondary-color-text">
+                                        Qual o seu CNPJ?
+                                    </h4>
+                                    <h5 class="center secondary-color-text">
+                                        Poderá ser usado para validar a veracidade dos dados pessoais.
+                                    </h5>
+
+                                    <div class="input-field col s12 l6 offset-l3 spacing-buttons">
+                                        <input id="cnpj" name="cnpj" type="text" value="${dto.cnpj}" class="">
+                                        <label for="cnpj">CNPJ</label>
+                                    </div>
+                                </div>
+                            </c:if>
+                            <div class="col s6 m3 offset-m3 spacing-buttons">
+                                <div class="center">
+                                    <a class="waves-effect waves-light btn btn-gray"
+                                       href="cadastrar-se?passo=5">
+                                        Voltar
+                                    </a>
+                                </div>
+                            </div>
+                            <div class="col s6 m3 spacing-buttons">
+                                <div class="center">
+                                    <button type="submit" class="waves-effect waves-light btn">Próximo</button>
+                                </div>
+                            </div>
+                        </form>
+                    </div>
+                </div>
+            </div>
+        </main>
+
+    </jsp:body>
+</t:template>
+
+<script src="assets/libraries/jquery.mask.js"></script>
+
+<script>
+    $(document).ready(function () {
+        $('#cpf').mask('000.000.000-00', {reverse: true});
+        $('#cnpj').mask('00.000.000/0000-00', {reverse: true});
+    });
+</script>
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/view/visitor/user-registration/wizard-step-06.jsp b/src/main/webapp/WEB-INF/view/visitor/user-registration/wizard-step-06.jsp
index 5a928413..76558d97 100644
--- a/src/main/webapp/WEB-INF/view/visitor/user-registration/wizard-step-06.jsp
+++ b/src/main/webapp/WEB-INF/view/visitor/user-registration/wizard-step-06.jsp
@@ -1,6 +1,6 @@
 <%@page contentType="text/html" pageEncoding="UTF-8" %>
 <%@taglib prefix="t" tagdir="/WEB-INF/tags" %>
-<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 <head>
     <!-- Funciona apenas com caminho absoluto porque é renderizado antes da tag base -->
     <link href="${pageContext.request.contextPath}/assets/resources/styles/visitor/visitor.css" rel="stylesheet">
@@ -8,6 +8,7 @@
 
 <t:template title="Servicebook - Cadastro - Passo 6">
     <jsp:body>
+
         <main>
             <div class="container">
                 <c:if test="${not empty errors}">
@@ -18,71 +19,68 @@
                     </div>
                 </c:if>
 
-                <c:if test="${not empty msg}">
-                    <div class="row">
-                        <div class="col s12">
-                            <div class="card-panel green lighten-1 msg-view center-align">
-                                <span class="white-text">${msg}</span>
-                            </div>
-                        </div>
-                    </div>
-                </c:if>
-
                 <div class="section">
                     <div class="row">
-                        <div class="row">
-                            <h3 class="center secondary-color-text">Nos conte mais sobre você!</h3>
-                        </div>
-                        <!-- verifica na sessão se o cadastro atual é de indivíduo e ajusta a URL -->
-                        <form method="post" action="${sessionScope.get('KEY_IS_REGISTER_COMPANY') == true ? 'cadastrar-se/empresa/passo-6' : 'cadastrar-se/individuo/passo-6'}">
-                            <div class="row center spacing-buttons">
-                                <h4 class="center secondary-color-text">
-                                    Qual o seu nome completo?
-                                </h4>
-                                <h5 class="center secondary-color-text">
-                                    O usuários precisam saber com quem estão negociando.
-                                </h5>
-                                <div class="input-field col s12 l6 offset-l3 spacing-buttons">
-                                    <input id="name" name="name" type="text" value="${dto.name}" class="validate">
-                                    <label for="name">Nome completo</label>
-                                </div>
-                            </div>
-                            <!-- verifica na sessão se o cadastro atual é de indivíduo -->
-                            <c:if test="${sessionScope.get('KEY_IS_REGISTER_COMPANY') == false}">
-                                <div class="row center spacing-buttons">
-                                    <h4 class="center secondary-color-text">
-                                        Qual o seu CPF?
-                                    </h4>
-                                    <h5 class="center secondary-color-text">
-                                        Poderá ser usado para validar a veracidade dos dados pessoais.
-                                    </h5>
+                        <h3 class="row center secondary-color-text">
+                            Qual o seu endereço?
+                        </h3>
+                        <h5 class="row center secondary-color-text">
+                            Será útil para filtrar serviços por região e de acordo com a distância
+                            para o local de realização do serviço.
+                        </h5>
 
-                                    <div class="input-field col s12 l6 offset-l3 spacing-buttons">
-                                        <input id="cpf" name="cpf" type="text" value="${dto.cpf}" class="">
-                                        <label for="cpf">CPF</label>
+                        <form method="post" action="cadastrar-se/passo-6">
+                            <div class="row spacing-buttons">
+                                <div class="row">
+                                    <div class="center">
+                                        <a id="btn-search-cep" class="waves-effect waves-light btn">Buscar CEP</a>
                                     </div>
                                 </div>
-                            </c:if>
-                            <!-- verifica na sessão se o cadastro atual é de empresa -->
-                            <c:if test="${sessionScope.get('KEY_IS_REGISTER_COMPANY') == true}">
-                                <div class="row center spacing-buttons">
-                                    <h4 class="center secondary-color-text">
-                                        Qual o seu CNPJ?
-                                    </h4>
-                                    <h5 class="center secondary-color-text">
-                                        Poderá ser usado para validar a veracidade dos dados pessoais.
-                                    </h5>
-
-                                    <div class="input-field col s12 l6 offset-l3 spacing-buttons">
-                                        <input id="cnpj" name="cnpj" type="text" value="${dto.cnpj}" class="">
-                                        <label for="cnpj">CNPJ</label>
+                                <div class="row">
+                                    <div class="input-field col s8 offset-s2">
+                                        <input id="postalCode" name="postalCode" type="text" placeholder="CEP"
+                                               class="validate">
+                                        <label for="postalCode">CEP</label>
+                                        <span id="errorPostalCode" class="hide helper-text red-text darken-3"></span>
+                                    </div>
+                                </div>
+                                <div class="row">
+                                    <div class="input-field col s8 offset-s2">
+                                        <input id="number" name="number" type="text" placeholder="Número"
+                                               class="validate">
+                                        <label for="number">Número</label>
+                                    </div>
+                                </div>
+                                <div class="row">
+                                    <div class="input-field col s8 offset-s2">
+                                        <input id="street" name="street" type="text" placeholder="Rua" class="validate">
+                                        <label for="street">Rua</label>
+                                    </div>
+                                </div>
+                                <div class="row">
+                                    <div class="input-field col s8 offset-s2">
+                                        <input id="neighborhood" name="neighborhood" type="text" placeholder="Bairro"
+                                               class="validate">
+                                        <label for="neighborhood">Bairro</label>
                                     </div>
                                 </div>
-                            </c:if>
+                                <div class="row">
+                                    <div class="input-field col s8 offset-s2">
+                                        <input id="city" name="city" type="text" placeholder="Cidade" class="validate">
+                                        <label for="city">Cidade</label>
+                                    </div>
+                                </div>
+                                <div class="row">
+                                    <div class="input-field col s8 offset-s2">
+                                        <input id="state" name="state" type="text" placeholder="Estado"
+                                               class="validate">
+                                        <label for="state">Estado</label>
+                                    </div>
+                                </div>
+                            </div>
                             <div class="col s6 m3 offset-m3 spacing-buttons">
                                 <div class="center">
-                                    <a class="waves-effect waves-light btn btn-gray"
-                                       href="cadastrar-se?passo=5">
+                                    <a href="cadastrar-se?passo=5" class="waves-effect waves-light btn btn-gray">
                                         Voltar
                                     </a>
                                 </div>
@@ -101,11 +99,9 @@
     </jsp:body>
 </t:template>
 
+<script src="assets/resources/scripts/cep-user-registration.js"></script>
 <script src="assets/libraries/jquery.mask.js"></script>
 
 <script>
-    $(document).ready(function () {
-        $('#cpf').mask('000.000.000-00', {reverse: true});
-        $('#cnpj').mask('00.000.000/0000-00', {reverse: true});
-    });
+    $('#postalCode').mask('00000-000');
 </script>
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/view/visitor/user-registration/wizard-step-07.jsp b/src/main/webapp/WEB-INF/view/visitor/user-registration/wizard-step-07.jsp
index 55d2ed1b..2d2cb4cb 100644
--- a/src/main/webapp/WEB-INF/view/visitor/user-registration/wizard-step-07.jsp
+++ b/src/main/webapp/WEB-INF/view/visitor/user-registration/wizard-step-07.jsp
@@ -22,86 +22,149 @@
                 <div class="section">
                     <div class="row">
                         <h3 class="row center secondary-color-text">
-                            Qual o seu endereço?
+                            Escolha uma especialidade!
                         </h3>
                         <h5 class="row center secondary-color-text">
-                            Será útil para filtrar serviços por região e de acordo com a distância
-                            para o local de realização do serviço.
+                            Se você tem alguma habilidade e deseja receber solicitações para execução de serviços, então
+                            nos informe suas especialidades.
                         </h5>
 
-                        <form method="post" action="cadastrar-se/passo-7">
-                            <div class="row spacing-buttons">
-                                <div class="row">
-                                    <div class="center">
-                                        <a id="btn-search-cep" class="waves-effect waves-light btn">Buscar CEP</a>
-                                    </div>
-                                </div>
-                                <div class="row">
-                                    <div class="input-field col s8 offset-s2">
-                                        <input id="postalCode" name="postalCode" type="text" placeholder="CEP"
-                                               class="validate">
-                                        <label for="postalCode">CEP</label>
-                                        <span id="errorPostalCode" class="hide helper-text red-text darken-3"></span>
-                                    </div>
-                                </div>
-                                <div class="row">
-                                    <div class="input-field col s8 offset-s2">
-                                        <input id="number" name="number" type="text" placeholder="Número"
-                                               class="validate">
-                                        <label for="number">Número</label>
+                        <div class="row">
+                            <c:choose>
+                                <c:when test="${empty professionalExpertises}">
+                                    <div class="row center spacing-buttons">
+                                        <div class="col s12 l4 offset-l4 spacing-buttons">
+                                            <div class="none-profission">
+                                                <h5 class="center">Nenhuma profissão foi selecionada!</h5>
+                                            </div>
+                                        </div>
                                     </div>
-                                </div>
-                                <div class="row">
-                                    <div class="input-field col s8 offset-s2">
-                                        <input id="street" name="street" type="text" placeholder="Rua" class="validate">
-                                        <label for="street">Rua</label>
-                                    </div>
-                                </div>
-                                <div class="row">
-                                    <div class="input-field col s8 offset-s2">
-                                        <input id="neighborhood" name="neighborhood" type="text" placeholder="Bairro"
-                                               class="validate">
-                                        <label for="neighborhood">Bairro</label>
-                                    </div>
-                                </div>
-                                <div class="row">
-                                    <div class="input-field col s8 offset-s2">
-                                        <input id="city" name="city" type="text" placeholder="Cidade" class="validate">
-                                        <label for="city">Cidade</label>
-                                    </div>
-                                </div>
-                                <div class="row">
-                                    <div class="input-field col s8 offset-s2">
-                                        <input id="state" name="state" type="text" placeholder="Estado"
-                                               class="validate">
-                                        <label for="state">Estado</label>
+                                </c:when>
+                                <c:otherwise>
+                                    <div class="col s12">
+                                        <div class="row center expertises">
+                                            <c:forEach var="professionalExpertise" items="${professionalExpertises}">
+                                                <div class="col s12 m5 offset-m1 card-expertise-list row">
+                                                    <div class="col s2 delete-exerpertise expertise-icon">
+                                                        <i class="material-icons">work</i>
+                                                    </div>
+                                                    <div class="col s8">
+                                                        <p class="center">
+                                                            <strong>
+                                                                    ${professionalExpertise.name}
+                                                            </strong>
+                                                        </p>
+                                                    </div>
+
+                                                    <div class="col s12 right">
+                                                        <p class="center">
+                                                            Descrição da especialidade
+                                                        </p>
+                                                    </div>
+                                                </div>
+                                            </c:forEach>
+                                        </div>
                                     </div>
-                                </div>
+                                </c:otherwise>
+                            </c:choose>
+
+                            <div class="center spacing-buttons">
+
+                                <button  class="waves-effect waves-light btn">
+                                    <a href="#modal-expertises" class="modal-trigger">
+                                        Adicionar especialidade
+                                    </a>
+                                </button>
                             </div>
+                        </div>
+
+                        <div class="row">
                             <div class="col s6 m3 offset-m3 spacing-buttons">
                                 <div class="center">
-                                    <a href="cadastrar-se?passo=6" class="waves-effect waves-light btn btn-gray">
+                                    <a href="cadastrar-se?passo=7" class="waves-effect waves-light btn btn-gray">
                                         Voltar
                                     </a>
                                 </div>
                             </div>
                             <div class="col s6 m3 spacing-buttons">
-                                <div class="center">
-                                    <button type="submit" class="waves-effect waves-light btn">Próximo</button>
+                                <form action="cadastrar-se/passo-8" method="post">
+                                    <div class="center">
+                                        <button type="submit" class="waves-effect waves-light btn">Fim</button>
+                                    </div>
+                                </form>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+
+            <div id="modal-expertises" class="modal">
+                <div class="modal-content ui-front">
+                    <div class="row">
+                        <div class="col s9">
+                            <h4>Escolha uma ou mais especialidades!</h4>
+                        </div>
+                        <div class="col s3">
+                            <button class="modal-close modal-expertise-close right">
+                                <i class="material-icons">close</i>
+                            </button>
+                        </div>
+                    </div>
+
+                    <div class="row">
+                        <div class="col s12">
+                            <div class="row">
+                                <div class="input-field col s12">
+                                    <i class="material-icons prefix">work</i>
+                                    <input type="text" id="txtBusca" class="autocomplete">
+                                    <label for="txtBusca">Selecione sua especialidade</label>
                                 </div>
                             </div>
+                        </div>
+                    </div>
+                    <div class="row">
+                        <form class="s12" id="form-expertises" action="cadastrar-se/passo-7" method="post">
+                            <ul id="search-expertises">
+                                <c:forEach var="expertise" items="${expertises}">
+                                    <li>
+                                        <label class='card-expertise col s12 m10 offset-m1'>
+                                            <input id='ids' name='ids' type='checkbox' class='reset-checkbox' value="${expertise.id}">
+                                            <span class='center name-expertise'>
+                                                    <i class='material-icons'>work</i>
+                                                    ${expertise.name}
+                                                </span>
+                                        </label>
+                                    </li>
+                                </c:forEach>
+                            </ul>
+
+                            <div class="input-field col s8 offset-s1">
+                                <button id="submit-expertise" type="submit" class="btn waves-effect waves-light left">Salvar</button>
+                            </div>
+                            <div class="input-field col s3">
+                                <a class="btn waves-effect waves-light modal-close">Fechar</a>
+                            </div>
                         </form>
                     </div>
+
                 </div>
             </div>
         </main>
 
     </jsp:body>
 </t:template>
-
-<script src="assets/resources/scripts/cep-user-registration.js"></script>
-<script src="assets/libraries/jquery.mask.js"></script>
-
 <script>
-    $('#postalCode').mask('00000-000');
+    $(function(){
+        $("#txtBusca").keyup(function(){
+            var texto = $(this).val();
+            $("#search-expertises li").css("display", "block");
+            $("#search-expertises li").each(function(){
+                if($(this).text().toUpperCase().indexOf(texto.toUpperCase()) < 0)
+                    $(this).css("display", "none");
+            });
+        });
+    });
+    $(".myclass").hover(function(e) {
+        $(this).css("color",e.type === "mouseenter"?"red":"grey")
+    })
 </script>
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/view/visitor/user-registration/wizard-step-08.jsp b/src/main/webapp/WEB-INF/view/visitor/user-registration/wizard-step-08.jsp
deleted file mode 100644
index 810d69ae..00000000
--- a/src/main/webapp/WEB-INF/view/visitor/user-registration/wizard-step-08.jsp
+++ /dev/null
@@ -1,170 +0,0 @@
-<%@page contentType="text/html" pageEncoding="UTF-8" %>
-<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<head>
-    <!-- Funciona apenas com caminho absoluto porque é renderizado antes da tag base -->
-    <link href="${pageContext.request.contextPath}/assets/resources/styles/visitor/visitor.css" rel="stylesheet">
-</head>
-
-<t:template title="Servicebook - Cadastro - Passo 8">
-    <jsp:body>
-
-        <main>
-            <div class="container">
-                <c:if test="${not empty errors}">
-                    <div class="card-panel red">
-                        <c:forEach var="e" items="${errors}">
-                            <span class="white-text">${e.getDefaultMessage()}</span><br>
-                        </c:forEach>
-                    </div>
-                </c:if>
-
-                <div class="section">
-                    <div class="row">
-                        <h3 class="row center secondary-color-text">
-                            Escolha uma especialidade!
-                        </h3>
-                        <h5 class="row center secondary-color-text">
-                            Se você tem alguma habilidade e deseja receber solicitações para execução de serviços, então
-                            nos informe suas especialidades.
-                        </h5>
-
-                        <div class="row">
-                            <c:choose>
-                                <c:when test="${empty professionalExpertises}">
-                                    <div class="row center spacing-buttons">
-                                        <div class="col s12 l4 offset-l4 spacing-buttons">
-                                            <div class="none-profission">
-                                                <h5 class="center">Nenhuma profissão foi selecionada!</h5>
-                                            </div>
-                                        </div>
-                                    </div>
-                                </c:when>
-                                <c:otherwise>
-                                    <div class="col s12">
-                                        <div class="row center expertises">
-                                            <c:forEach var="professionalExpertise" items="${professionalExpertises}">
-                                                <div class="col s12 m5 offset-m1 card-expertise-list row">
-                                                    <div class="col s2 delete-exerpertise expertise-icon">
-                                                        <i class="material-icons">work</i>
-                                                    </div>
-                                                    <div class="col s8">
-                                                        <p class="center">
-                                                            <strong>
-                                                                    ${professionalExpertise.name}
-                                                            </strong>
-                                                        </p>
-                                                    </div>
-
-                                                    <div class="col s12 right">
-                                                        <p class="center">
-                                                            Descrição da especialidade
-                                                        </p>
-                                                    </div>
-                                                </div>
-                                            </c:forEach>
-                                        </div>
-                                    </div>
-                                </c:otherwise>
-                            </c:choose>
-
-                            <div class="center spacing-buttons">
-
-                                <button  class="waves-effect waves-light btn">
-                                    <a href="#modal-expertises" class="modal-trigger">
-                                        Adicionar especialidade
-                                    </a>
-                                </button>
-                            </div>
-                        </div>
-
-                        <div class="row">
-                            <div class="col s6 m3 offset-m3 spacing-buttons">
-                                <div class="center">
-                                    <a href="cadastrar-se?passo=7" class="waves-effect waves-light btn btn-gray">
-                                        Voltar
-                                    </a>
-                                </div>
-                            </div>
-                            <div class="col s6 m3 spacing-buttons">
-                                <form action="cadastrar-se/passo-9" method="post">
-                                    <div class="center">
-                                        <button type="submit" class="waves-effect waves-light btn">Fim</button>
-                                    </div>
-                                </form>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-
-            <div id="modal-expertises" class="modal">
-                <div class="modal-content ui-front">
-                    <div class="row">
-                        <div class="col s9">
-                            <h4>Escolha uma ou mais especialidades!</h4>
-                        </div>
-                        <div class="col s3">
-                            <button class="modal-close modal-expertise-close right">
-                                <i class="material-icons">close</i>
-                            </button>
-                        </div>
-                    </div>
-
-                    <div class="row">
-                        <div class="col s12">
-                            <div class="row">
-                                <div class="input-field col s12">
-                                    <i class="material-icons prefix">work</i>
-                                    <input type="text" id="txtBusca" class="autocomplete">
-                                    <label for="txtBusca">Selecione sua especialidade</label>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                    <div class="row">
-                        <form class="s12" id="form-expertises" action="cadastrar-se/passo-8" method="post">
-                            <ul id="search-expertises">
-                                <c:forEach var="expertise" items="${expertises}">
-                                    <li>
-                                        <label class='card-expertise col s12 m10 offset-m1'>
-                                            <input id='ids' name='ids' type='checkbox' class='reset-checkbox' value="${expertise.id}">
-                                            <span class='center name-expertise'>
-                                                    <i class='material-icons'>work</i>
-                                                    ${expertise.name}
-                                                </span>
-                                        </label>
-                                    </li>
-                                </c:forEach>
-                            </ul>
-
-                            <div class="input-field col s8 offset-s1">
-                                <button id="submit-expertise" type="submit" class="btn waves-effect waves-light left">Salvar</button>
-                            </div>
-                            <div class="input-field col s3">
-                                <a class="btn waves-effect waves-light modal-close">Fechar</a>
-                            </div>
-                        </form>
-                    </div>
-
-                </div>
-            </div>
-        </main>
-
-    </jsp:body>
-</t:template>
-<script>
-    $(function(){
-        $("#txtBusca").keyup(function(){
-            var texto = $(this).val();
-            $("#search-expertises li").css("display", "block");
-            $("#search-expertises li").each(function(){
-                if($(this).text().toUpperCase().indexOf(texto.toUpperCase()) < 0)
-                    $(this).css("display", "none");
-            });
-        });
-    });
-    $(".myclass").hover(function(e) {
-        $(this).css("color",e.type === "mouseenter"?"red":"grey")
-    })
-</script>
\ No newline at end of file

From 5b499414f6296cabf93043c49410d41bc3fe866e Mon Sep 17 00:00:00 2001
From: taisHryssai <thryssai@gmail.com>
Date: Mon, 23 Oct 2023 22:24:12 -0300
Subject: [PATCH 2/2] adjust user registration

---
 .../controller/UserRegisterController.java    | 44 +++++++++----------
 1 file changed, 22 insertions(+), 22 deletions(-)

diff --git a/src/main/java/br/edu/utfpr/servicebook/controller/UserRegisterController.java b/src/main/java/br/edu/utfpr/servicebook/controller/UserRegisterController.java
index ea3b249c..1b164f83 100644
--- a/src/main/java/br/edu/utfpr/servicebook/controller/UserRegisterController.java
+++ b/src/main/java/br/edu/utfpr/servicebook/controller/UserRegisterController.java
@@ -198,19 +198,21 @@ private void resetSessionAttributes(HttpSession httpSession) {
     public String saveUserEmail(
             HttpSession httpSession,
             @Validated(UserDTO.RequestUserEmailInfoGroupValidation.class) IndividualDTO dto,
-            @Validated(UserDTO.RequestUserNameAndCPFInfoGroupValidation.class) IndividualDTO dtouser,
+            //@Validated(UserDTO.RequestUserNameAndCPFInfoGroupValidation.class) IndividualDTO dtouser,
             BindingResult errors,
             RedirectAttributes redirectAttributes,
             Model model
     ) throws MessagingException {
 
-        if (errors.hasErrors()) {
-            return this.userRegistrationErrorForwarding("1", dto, model, errors);
+        if (dto.getCpf().isEmpty()) {
+            errors.rejectValue("cpf", "error.dto", "Por favor, insira um CPF!");
         }
-        if (errors.hasErrors()) {
-            return this.userRegistrationErrorForwarding("1", dtouser, model, errors);
+
+        if (dto.getName().isEmpty()) {
+            errors.rejectValue("name", "error.dto", "Por favor, insira um Nome!");
         }
 
+
         String email = dto.getEmail().trim();
         httpSession.setAttribute(UserWizardUtil.KEY_IS_REGISTER_COMPANY, false);
 
@@ -221,10 +223,10 @@ public String saveUserEmail(
             errors.rejectValue("email", "error.dto", "Email já cadastrado! Por favor, insira um email não cadastrado.");
         }
 
+
         if (errors.hasErrors()) {
             return this.userRegistrationErrorForwarding("1", dto, model, errors);
         }
-
         //gera um código para validar o email no passo seguinte
         Optional<UserCode> oUserCode = userCodeService.findByEmail(email);
         String actualCode = "";
@@ -248,29 +250,26 @@ public String saveUserEmail(
         IndividualDTO userSessionDTO = null;
         userSessionDTO = (IndividualDTO) userWizardUtil.getWizardState(httpSession, IndividualDTO.class, UserWizardUtil.KEY_WIZARD_INDIVIDUAL);
 
-        if (!dtouser.getCpf().isEmpty()) {
+        if (!dto.getCpf().isEmpty()) {
             //verifica se o CPF já está cadastrado para algum outro usuário
-            Optional<Individual> oUserCpf = individualService.findByCpf(dtouser.getCpf());
+            Optional<Individual> oUserCpf = individualService.findByCpf(dto.getCpf());
 
             if (oUserCpf.isPresent()) {
                 errors.rejectValue("cpf", "error.dto", "CPF já cadastrado! Por favor, insira um CPF não cadastrado.");
             }
 
             if (errors.hasErrors()) {
-                return this.userRegistrationErrorForwarding("1", dtouser, model, errors);
+                return this.userRegistrationErrorForwarding("1", dto, model, errors);
             }
 
-            userSessionDTO.setCpf(dtouser.getCpf());
+            userSessionDTO.setCpf(dto.getCpf());
         }
 
-        System.out.println("userSessionDTO");
-        System.out.println(dtouser.getCpf());
-
         userSessionDTO.setProfile(ProfileEnum.ROLE_USER);
         userSessionDTO.setEmail(email);
         //salva na sessão
-        userSessionDTO.setName(dtouser.getName());
-        userSessionDTO.setCpf(dtouser.getCpf());
+        userSessionDTO.setName(dto.getName());
+        userSessionDTO.setCpf(dto.getCpf());
         userSessionDTO.setProfileVerified(true);
         return "redirect:/cadastrar-se?passo=2";
     }
@@ -294,17 +293,18 @@ public String saveUserEmail(
     public String saveUserEmail(
             HttpSession httpSession,
             @Validated(UserDTO.RequestUserEmailInfoGroupValidation.class) CompanyDTO dto,
-            @Validated(UserDTO.RequestUserNameAndCNPJInfoGroupValidation.class) CompanyDTO dtocompany,
             BindingResult errors,
             RedirectAttributes redirectAttributes,
             Model model
     ) throws MessagingException {
 
-        if (errors.hasErrors()) {
-            return this.userRegistrationErrorForwarding("1", dto, model, errors);
+
+        if (dto.getCnpj().isEmpty()) {
+            errors.rejectValue("cnpj", "error.dto", "Por favor, insira um CNPJ!");
         }
-        if (errors.hasErrors()) {
-            return this.userRegistrationErrorForwarding("1", dtocompany, model, errors);
+
+        if (dto.getName().isEmpty()) {
+            errors.rejectValue("name", "error.dto", "Por favor, insira um Nome!");
         }
         String email = dto.getEmail().trim();
         httpSession.setAttribute(UserWizardUtil.KEY_IS_REGISTER_COMPANY, true);
@@ -351,14 +351,14 @@ public String saveUserEmail(
         CompanyDTO companySessionDTO = (CompanyDTO) userWizardUtil.getWizardState(httpSession, CompanyDTO.class, UserWizardUtil.KEY_WIZARD_COMPANY);
 
         //verifica se o CPF já está cadastrado para algum outro usuário
-        Optional<Company> oUserCnpj = companyService.findByCnpj(dtocompany.getCnpj());
+        Optional<Company> oUserCnpj = companyService.findByCnpj(dto.getCnpj());
 
         if (oUserCnpj.isPresent()) {
             errors.rejectValue("cnpj", "error.dto", "CNPJ já cadastrado! Por favor, insira um CNPJ não cadastrado.");
         }
 
         if (errors.hasErrors()) {
-            return this.userRegistrationErrorForwarding("1", dtocompany, model, errors);
+            return this.userRegistrationErrorForwarding("1", dto, model, errors);
         }
 
         companySessionDTO.setName(dto.getName().trim());