Skip to content
Snippets Groups Projects

Feature/variable hourly dist table

Closed emanuel buzey requested to merge feature/variable_hourly_dist_table into dev
1 file
+ 1
1
Compare changes
  • Side-by-side
  • Inline
from odoo import _, api, fields, models
from odoo import _, api, fields, models
from odoo.exceptions import ValidationError
from odoo.exceptions import ValidationError
STATE_VALUES = [
STATE_VALUES = [
("draft", _("Draft")),
("draft", _("Draft")),
("validated", _("Validated")),
("validated", _("Validated")),
@@ -9,21 +8,16 @@ STATE_VALUES = [
@@ -9,21 +8,16 @@ STATE_VALUES = [
("active", _("Active")),
("active", _("Active")),
]
]
TYPE_VALUES = [("fixed", _("Fixed"))]
TYPE_VALUES = [
 
("fixed", _("Fixed")),
 
("variable_schedule", _("Variable schedule")),
 
]
class DistributionTable(models.Model):
class DistributionTable(models.Model):
_name = "energy_selfconsumption.distribution_table"
_name = "energy_selfconsumption.distribution_table"
_description = "Distribution Table"
_description = "Distribution Table"
_inherit = ["mail.thread", "mail.activity.mixin"]
@api.depends("supply_point_assignation_ids.coefficient")
def _compute_coefficient_is_valid(self):
for record in self:
record.coefficient_is_valid = not fields.Float.compare(
sum(record.supply_point_assignation_ids.mapped("coefficient")),
1.00000,
precision_rounding=0.00001,
)
name = fields.Char(readonly=True)
name = fields.Char(readonly=True)
selfconsumption_project_id = fields.Many2one(
selfconsumption_project_id = fields.Many2one(
@@ -36,32 +30,108 @@ class DistributionTable(models.Model):
@@ -36,32 +30,108 @@ class DistributionTable(models.Model):
TYPE_VALUES, default="fixed", required=True, string="Modality"
TYPE_VALUES, default="fixed", required=True, string="Modality"
)
)
state = fields.Selection(STATE_VALUES, default="draft", required=True)
state = fields.Selection(STATE_VALUES, default="draft", required=True)
supply_point_assignation_ids = fields.One2many(
"energy_selfconsumption.supply_point_assignation", "distribution_table_id"
)
coefficient_is_valid = fields.Boolean(
compute=_compute_coefficient_is_valid, readonly=True, store=False
)
active = fields.Boolean(default=True)
active = fields.Boolean(default=True)
company_id = fields.Many2one(
company_id = fields.Many2one(
"res.company", default=lambda self: self.env.company, readonly=True
"res.company", default=lambda self: self.env.company, readonly=True
)
)
supply_point_assignation_ids = fields.One2many(
 
"energy_selfconsumption.supply_point_assignation", "distribution_table_id"
 
)
 
import_error_found = fields.Boolean(default=False)
 
distribution_table_variable_coefficient_ids = fields.One2many(
 
'energy_selfconsumption.distribution_table_var_coeff',
 
'distribution_table_variable_id',
 
string='Variable Coefficients'
 
)
 
@api.model
@api.model
def create(self, vals):
def create(self, vals):
vals['name'] = self.env.ref('energy_selfconsumption.distribution_table_sequence', False).next_by_id()
# if isinstance(vals, list):
return super(DistributionTable, self).create(vals)
# vals = vals[0]
 
vals["name"] = self.env.ref(
 
"energy_selfconsumption.distribution_table_sequence", False
 
).next_by_id()
 
return super().create(vals)
@api.constrains('supply_point_assignation_ids')
def write(self, vals):
def _supply_point_constrain(self):
result = super().write(vals)
 
for record in self:
 
if record.type == "fixed":
 
fixed_record = self.env[
 
"energy_selfconsumption.distribution_table_fixed"
 
].search([("distribution_table_id", "=", record.id)], limit=1)
 
if fixed_record:
 
pass
 
else:
 
self.env["energy_selfconsumption.distribution_table_fixed"].create(
 
{"distribution_table_id": record.id}
 
)
 
elif record.type == "variable_schedule":
 
pass
 
return result
 
 
def button_draft(self):
for record in self:
for record in self:
if record.state in ('validated', 'process', 'active'):
record.write({"state": "draft"})
raise ValidationError(_("The supply point can't be removed because the distribution table state is {table_state}").format(table_state=record.state))
def action_distribution_table_import_wizard(self):
@api.onchange('selfconsumption_project_id')
self.ensure_one()
 
return {
 
"name": _("Import Distribution Table"),
 
"type": "ir.actions.act_window",
 
"view_mode": "form",
 
"res_model": "energy_selfconsumption.distribution_table_import.wizard",
 
"views": [(False, "form")],
 
"view_id": False,
 
"target": "new",
 
"context": {"type": self.type},
 
}
 
 
@api.onchange("selfconsumption_project_id")
def _onchange_selfconsumption_project_id(self):
def _onchange_selfconsumption_project_id(self):
self.supply_point_assignation_ids = False
self.supply_point_assignation_ids = False
 
def button_validate_proxy(self):
 
# This method acts as a proxy.
 
self.ensure_one()
 
if self.type == "fixed":
 
fixed_record = self.env[
 
"energy_selfconsumption.distribution_table_fixed"
 
].search([("distribution_table_id", "=", self.id)], limit=1)
 
fixed_record.button_validate()
 
 
 
class DistributionTableFixed(models.Model):
 
_name = "energy_selfconsumption.distribution_table_fixed"
 
_inherits = {"energy_selfconsumption.distribution_table": "distribution_table_id"}
 
 
@api.depends("supply_point_assignation_ids.coefficient")
 
def _compute_coefficient_is_valid(self):
 
for record in self:
 
record.coefficient_is_valid = not fields.Float.compare(
 
sum(record.supply_point_assignation_ids.mapped("coefficient")),
 
1.00000,
 
precision_rounding=0.00001,
 
)
 
 
distribution_table_id = fields.Many2one(
 
"energy_selfconsumption.distribution_table", required=True, ondelete="cascade"
 
)
 
 
coefficient_is_valid = fields.Boolean(
 
compute=_compute_coefficient_is_valid, readonly=True, store=False
 
)
 
 
@api.constrains("supply_point_assignation_ids")
 
def _supply_point_constrain(self):
 
for record in self:
 
if record.state in ("validated", "process", "active"):
 
raise ValidationError(
 
_(
 
"The supply point can't be removed because the distribution table state is {table_state}"
 
).format(table_state=record.state)
 
)
 
def button_validate(self):
def button_validate(self):
for record in self:
for record in self:
if not record.coefficient_is_valid:
if not record.coefficient_is_valid:
@@ -80,18 +150,36 @@ class DistributionTable(models.Model):
@@ -80,18 +150,36 @@ class DistributionTable(models.Model):
)
)
record.write({"state": "validated"})
record.write({"state": "validated"})
def button_draft(self):
for record in self:
record.write({"state": "draft"})
def action_distribution_table_import_wizard(self):
class DistributionTableVariable(models.Model):
self.ensure_one()
_name = "energy_selfconsumption.distribution_table_variable"
return {
_inherits = {"energy_selfconsumption.distribution_table": "distribution_table_id"}
"name": _("Import Distribution Table"),
"type": "ir.actions.act_window",
distribution_table_id = fields.Many2one(
"view_mode": "form",
"energy_selfconsumption.distribution_table",
"res_model": "energy_selfconsumption.distribution_table_import.wizard",
required=True,
"views": [(False, "form")],
ondelete="cascade",
"view_id": False,
auto_join=True
"target": "new",
)
}
cups_id = fields.Char(string="CUPS")
 
# one2many to coefficient
 
 
 
class DistributionTableVariableCoefficient(models.Model):
 
_name = "energy_selfconsumption.distribution_table_var_coeff"
 
 
distribution_table_variable_id = fields.Many2one(
 
"energy_selfconsumption.distribution_table_variable",
 
required=True,
 
ondelete="cascade",
 
index=True
 
)
 
hour = fields.Integer(string="Hour", required=True)
 
coefficient = fields.Float(string="Coefficient", required=True)
 
coefficient_display = fields.Char(default="*", string="Coefficient")
 
cups_id = fields.Char(
 
related='distribution_table_variable_id.cups_id',
 
string="CUPS",
 
readonly=True,
 
store=False
 
)
Loading