diff --git a/energy_communities/models/res_users.py b/energy_communities/models/res_users.py
index aeed779935cf649e2f8204dbd48083d3e5a14405..2a8bea4034d1d58fbfea7259764b895ed6b18cde 100644
--- a/energy_communities/models/res_users.py
+++ b/energy_communities/models/res_users.py
@@ -241,3 +241,60 @@ class ResUsers(models.Model):
                 "active": True,
                 "role_id": role.id,
             })
+
+    def make_ce_member(self, company):
+        # Create role line with role, company and user
+        # Add company in allowed_company_ids
+        pass
+
+    def make_ce_admin(self, company):
+        pass
+
+    def make_coord_admin(self, company):
+        # Create role line with role, company and user
+        # Add company in allowed_company_ids
+        # Create a line for every company
+        # Add all companies in allowed_company_ids
+        pass
+
+    def make_coord_worker(self, company):
+        # Create role line with role, company and user
+        # Add company in allowed_company_ids
+        # Create a line for every company
+        # Add all companies in allowed_company_ids
+        pass
+
+    def add_energy_community_role(self, role, company_id):
+        # TODO: Refactor quan tingui més info de com queden els roles 😟
+        if role == 'role_ce_member':
+            self.make_ce_member(company_id)
+        elif role == 'role_ce_admin':
+            self.make_ce_admin(company_id)
+        elif role == 'role_coordination':
+            self.make_coord_admin(company_id)
+        elif role == 'role_platform_admin':
+            self.make_coord_worker(company_id)
+        else:
+            raise exceptions.UserError(
+                _('Role not found')
+            )
+
+    def create_energy_community_user(
+        cls, vat, first_name, last_name, lang_code, email, company_id
+    ):
+        vals = {
+            "login": vat,
+            "firstname": first_name,
+            "lastname": last_name,
+            # "company_id": company_id,  # TODO: Move!
+            # "company_ids": [(6, 0, [company_id])],  # TODO: Move!
+            "lang": lang_code,
+            "email": email,
+        }
+        user = cls.create(vals)
+
+        user.make_internal_user()
+        # user.create_users_on_keycloak()  # TEMPORAL
+        # user.send_reset_password_mail()  # TEMPORAL
+
+        return user
diff --git a/energy_communities/wizards/assign_admin_wizard.py b/energy_communities/wizards/assign_admin_wizard.py
index e4241fe1512eedd24f275e43aa7d906021d2ef1a..60a0727b33c65fe9b9b4a986e8dd4f7bced925c5 100644
--- a/energy_communities/wizards/assign_admin_wizard.py
+++ b/energy_communities/wizards/assign_admin_wizard.py
@@ -18,42 +18,40 @@ class AssignAdminWizard(models.TransientModel):
         'res.lang',
         string=_("Language")
     )
+    role = fields.Selection(
+        selection='_get_available_roles',
+        string=_("Role")
+    )
 
+    @api.model
+    def _get_available_roles(self):
+        company = self.env['res.company'].browse(self.env.company.id)
+        if company.hierarchy_level == 'community':
+            return [
+                ('role_ce_admin', _("Energy Community Administrator")),
+                ('role_ce_member', _("Energy Community Member")),
+            ]
+        elif company.hierarchy_level == 'coordinator':
+            return [  # TODO: branch_new_roles is required
+                # ('role_ce_admin', _("Energy Community Administrator")),
+                # ('role_ce_member', _("Energy Community Member"))
+            ]
+        return []
 
     def process_data(self):
-        company_ids = self.env.context.get('active_ids')
-        if not company_ids:
-            raise ValidationError(_('Company not found'))
-
-        company_id = company_ids[0]
+        company_id = self.env.company.id
         if self.is_new_admin:
-            user = self.create_user(company_id)
+            user = self.env['res.users'].create_energy_community_user(
+                vat=self.vat,
+                first_name=self.first_name,
+                last_name=self.last_name,
+                lang_code=self.lang.code,
+                email=self.email,
+                company_id=company_id,
+            )
         else:
             user = self.env['res.users'].search([('login', '=', self.vat)])
 
-
-        company = self.env['res.company'].browse(company_id)
-        company.add_ce_admin(user)
-        user.make_internal_user()
+        user.add_energy_community_role(self.role, company_id)
 
         return True
-
-
-    # TODO: Move this method inside res_users
-    def create_user(self, company_id):
-        vals = {
-            "login": self.vat,
-            "firstname": self.first_name,
-            "lastname": self.last_name,
-            "company_id": company_id,
-            "company_ids": [(6, 0, [company_id])],
-            "lang": self.lang.code,
-            "email": self.email,
-        }
-        user = self.env["res.users"].create(vals)
-
-        user.create_users_on_keycloak()
-        user.send_reset_password_mail()
-
-
-        return user
diff --git a/energy_communities/wizards/assign_admin_wizard.xml b/energy_communities/wizards/assign_admin_wizard.xml
index 9674bbdd7ce4340bbfa9196dd730e797ac24e928..7aaa47ec232716a126a6988815d1d080e2c22131 100644
--- a/energy_communities/wizards/assign_admin_wizard.xml
+++ b/energy_communities/wizards/assign_admin_wizard.xml
@@ -16,6 +16,7 @@
                             <field name="last_name" attrs="{'invisible':[('is_new_admin', '=', False)]}"/>
                             <field name="email" attrs="{'invisible':[('is_new_admin', '=', False)]}"/>
                             <field name="lang" attrs="{'invisible':[('is_new_admin', '=', False)]}"/>
+                            <field name="role" attrs="{'invisible':[('is_new_admin', '=', False)]}"/>
                         </group>
                     </sheet>
                     <footer>