Skip to content
Snippets Groups Projects
assign_admin_wizard.py 2.67 KiB
import re

from odoo import api, fields, models
from odoo.exceptions import ValidationError
from odoo.tools.translate import _


class AssignAdminWizard(models.TransientModel):
    _name = "assign.admin.wizard"
    _description = "Assign admin Wizard"

    is_new_admin = fields.Boolean(string="Is a new admin?")
    first_name = fields.Char(string="First name", required=True)
    last_name = fields.Char(string="Last name", required=True)
    vat = fields.Char(string="VAT", required=True)
    email = fields.Char(string="Email", required=True)
    lang = fields.Many2one("res.lang", string="Language", required=True)
    role = fields.Selection(
        selection="_get_available_roles", string="Role", required=True
    )
    user_is_coordinator_worker = fields.Boolean(compute="_user_is_coordinator_worker")

    def _user_is_coordinator_worker(self):
        for record in self:
            role = self.env.ref("energy_communities.role_coord_worker")
            role_line = self.env["res.users.role.line"].search(
                [("user_id", "=", self.env.user.id), ("role_id", "=", role.id)], limit=1
            )
            record.user_is_coordinator_worker = bool(role_line)

    @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 [
                ("role_coord_admin", _("Coordinator Admin")),
                ("role_coord_worker", _("Coordinator Worker")),
            ]
        return []

    def process_data(self):
        vat = re.sub(r"[^a-zA-Z0-9]", "", self.vat).upper()
        if self.is_new_admin:
            user = self.env["res.users"].create_energy_community_base_user(
                vat=vat,
                first_name=self.first_name,
                last_name=self.last_name,
                lang_code=self.lang.code,
                email=self.email,
            )
        else:
            user = self.env["res.users"].search([("login", "ilike", vat)], limit=1)
            if not user:
                raise ValidationError(_("User not found"))

        company_id = self.env.company.id
        if self.user_is_coordinator_worker:
            raise ValidationError(
                _(
                    "Since you are not a coordinator admin you are not allowed to assign coordinator admins."
                )
            )
        else:
            user.add_energy_community_role(company_id, self.role)

        return True