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>