Skip to content
Snippets Groups Projects
selfconsumption.py 3.49 KiB
Newer Older
from odoo import _, fields, models
from odoo.exceptions import ValidationError


class Selfconsumption(models.Model):
    _name = "energy_selfconsumption.selfconsumption"
    _inherit = ["mail.thread", "mail.activity.mixin"]
    _inherits = {
        "energy_project.project": "project_id",
    }
    _description = "Self-consumption Energy Project"

    def _compute_distribution_table_count(self):
        for record in self:
            record.distribution_table_count = len(record.distribution_table_ids)

    def _compute_inscription_count(self):
        for record in self:
            record.inscription_count = len(record.inscription_ids)

    project_id = fields.Many2one(
        "energy_project.project", required=True, ondelete="cascade"
    )
    code = fields.Char(string="CAU")
    cil = fields.Char(string="CIL", help="Production facility code for liquidation purposes")
    owner_id = fields.Many2one("res.partner", string="Owner", required=True, default=lambda self: self.env.company.partner_id)
    power = fields.Float(string="Generation Power (kW)")
    distribution_table_ids = fields.One2many('energy_selfconsumption.distribution_table', 'selfconsumption_project_id',
                                             readonly=True)
    distribution_table_count = fields.Integer(compute=_compute_distribution_table_count) 
    inscription_ids = fields.One2many('energy_project.inscription', 'project_id', readonly=True)
    inscription_count = fields.Integer(compute=_compute_inscription_count)

    def get_distribution_tables(self):
        self.ensure_one()
        return {
            'type': 'ir.actions.act_window',
            'name': 'Distribution Tables',
            'view_mode': 'tree,form',
            'res_model': 'energy_selfconsumption.distribution_table',
            'domain': [('selfconsumption_project_id', '=', self.id)],
            'context': {'create': True, 'default_selfconsumption_project_id': self.id},
        }
    
    def get_inscriptions(self):
        self.ensure_one()
        return {
            'type': 'ir.actions.act_window',
            'name': 'Inscriptions',
            'view_mode': 'tree,form',
            'res_model': 'energy_project.inscription',
            'domain': [('project_id', '=', self.id)],
            'context': {'create': True, 'default_project_id': self.id},
        }
    def distribution_table_state(self, actual_state, new_state):
        distribution_table_to_activate = self.distribution_table_ids.filtered(lambda table: table.state == actual_state)
        distribution_table_to_activate.write({"state": new_state})

    def set_activation(self):
        for record in self:
            record.write({"state": "activation"})        
        self.distribution_table_state("validated", "process")

    def activate(self):
        for record in self:
            if not record.code:
                raise ValidationError(_("Project must have a valid Code."))
            if not record.cil:
                raise ValidationError(_("Project must have a valid CIL."))
            if not record.power or record.power <= 0:
                raise ValidationError(_("Project must have a valid Generation Power."))
            record.write({"state": "active"})
        self.distribution_table_state("process", "active")

    def set_inscription(self):
        for record in self.distribution_table_ids:
            record.write({"state": "validated"})        
        for record in self:
            record.write({"state": "inscription"})
        self.distribution_table_state("process", "validated")