Skip to content
Snippets Groups Projects

Feature/variable hourly dist table

Closed emanuel buzey requested to merge feature/variable_hourly_dist_table into dev
2 files
+ 57
13
Compare changes
  • Side-by-side
  • Inline
Files
2
from odoo import _, api, fields, models
from odoo.exceptions import ValidationError
STATE_VALUES = [
("draft", _("Draft")),
("validated", _("Validated")),
@@ -9,21 +8,16 @@ STATE_VALUES = [
("active", _("Active")),
]
TYPE_VALUES = [("fixed", _("Fixed"))]
TYPE_VALUES = [
("fixed", _("Fixed")),
("variable_schedule", _("Variable schedule")),
]
class DistributionTable(models.Model):
_name = "energy_selfconsumption.distribution_table"
_description = "Distribution Table"
@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,
)
_inherit = ["mail.thread", "mail.activity.mixin"]
name = fields.Char(readonly=True)
selfconsumption_project_id = fields.Many2one(
@@ -36,32 +30,108 @@ class DistributionTable(models.Model):
TYPE_VALUES, default="fixed", required=True, string="Modality"
)
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)
company_id = fields.Many2one(
"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
def create(self, vals):
vals['name'] = self.env.ref('energy_selfconsumption.distribution_table_sequence', False).next_by_id()
return super(DistributionTable, self).create(vals)
# if isinstance(vals, list):
# 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 _supply_point_constrain(self):
def write(self, vals):
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:
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))
@api.onchange('selfconsumption_project_id')
record.write({"state": "draft"})
def action_distribution_table_import_wizard(self):
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):
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):
for record in self:
if not record.coefficient_is_valid:
@@ -80,18 +150,36 @@ class DistributionTable(models.Model):
)
record.write({"state": "validated"})
def button_draft(self):
for record in self:
record.write({"state": "draft"})
def action_distribution_table_import_wizard(self):
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",
}
class DistributionTableVariable(models.Model):
_name = "energy_selfconsumption.distribution_table_variable"
_inherits = {"energy_selfconsumption.distribution_table": "distribution_table_id"}
distribution_table_id = fields.Many2one(
"energy_selfconsumption.distribution_table",
required=True,
ondelete="cascade",
auto_join=True
)
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