Skip to content
Snippets Groups Projects
Commit 5cbeb43d authored by Daniil Digtyar Vasilieva's avatar Daniil Digtyar Vasilieva :call_me:
Browse files

[MERGE] energy_selfconsumption: invoicing integration fixes

merge branch 'feature/energy_selfconsumption_invoicing_integration_fixes' into 'feature/energy_selfconsumption_integration_invoicing'

See merge request !243
parents f64420a3 5391d84c
No related branches found
No related tags found
1 merge request!243[IMP] energy_selfconsumption: invoicing integration fixes
Pipeline #62982 passed
This commit is part of merge request !228. Comments created here will be created in the context of that merge request.
......@@ -167,6 +167,10 @@ class Selfconsumption(models.Model):
raise ValidationError(_("Project must have a valid CIL."))
if not record.power or record.power <= 0:
raise ValidationError(_("Project must have a valid Rated Power."))
if not record.invoicing_mode:
raise ValidationError(
_("Project must have defined a invoicing mode before activation.")
)
# Create ContractGenerationWizard
contract_wizard = self.env[
......
......@@ -66,18 +66,34 @@ class TestContractGenerationWizard(TransactionCase):
"coefficient": 1,
}
)
self.define_invoicing_mode_wizard = self.env[
"energy_selfconsumption.define_invoicing_mode.wizard"
].create(
{
"selfconsumption_id": self.selfconsumption.id,
"price": 0.1,
"recurrence_interval": 1,
"recurring_rule_type": "monthly",
"invoicing_mode": "power_acquired",
}
)
self.contract_generation_wizard = self.env[
"energy_selfconsumption.contract_generation.wizard"
].create(
{
"price_energy": 0.1,
"recurring_interval": 1,
"recurring_rule_type": "monthly",
"selfconsumption_id": self.selfconsumption.id,
}
)
def test_generation_contracts(self):
res = self.define_invoicing_mode_wizard.save_data_to_selfconsumption()
self.assertEqual(
res,
{
"type": "ir.actions.act_window_close",
},
)
res = self.contract_generation_wizard.generate_contracts_button()
self.assertEqual(res, True)
......
......@@ -24,19 +24,6 @@ class ContractGenerationWizard(models.TransientModel):
UserWarning: When no accounting journal is found.
SomeException: When no distribution table in process of activation is found.
"""
product_id = self.selfconsumption_id.product_id
formula_contract_id = (
self.selfconsumption_id.product_id.contract_template_id.contract_line_ids.qty_formula_id
)
# Search accounting journal
journal_id = self.env["account.journal"].search(
[("company_id", "=", self.env.company.id), ("type", "=", "sale")], limit=1
)
if not journal_id:
raise UserWarning(_("Accounting Journal not found."))
# Get distribution table
distribution_id = (
self.selfconsumption_id.distribution_table_ids.filtered_domain(
......@@ -56,22 +43,24 @@ class ContractGenerationWizard(models.TransientModel):
supply_point_assignation.supply_point_id.partner_id.name,
),
"partner_id": supply_point_assignation.supply_point_id.partner_id.id,
"journal_id": journal_id.id,
"recurring_interval": self.selfconsumption_id.product_id.contract_template_id.recurring_interval,
"recurring_rule_type": self.selfconsumption_id.product_id.contract_template_id.recurring_rule_type,
"recurring_invoicing_type": "post-paid",
"project_id": self.selfconsumption_id.id,
"company_id": self.env.company.id,
"date_start": fields.date.today(),
"contract_template_id": self.selfconsumption_id.product_id.contract_template_id.id,
}
)
# We use the next method from the contract model to update the contract fields with contract template
contract._onchange_contract_template_id()
# Now, we need to update the name field using the code and display_name fields
name = _("""CUPS: %s\nOwner: %s\nInvoicing period: #START# - #END#""") % (
supply_point_assignation.supply_point_id.code,
supply_point_assignation.supply_point_id.owner_id.display_name,
)
contract.contract_line_ids.name = name
for contract_line_id in contract.contract_line_ids:
contract_line_id.write(
{
"name": contract_line_id.name.format(
code=supply_point_assignation.supply_point_id.code,
owner_id=supply_point_assignation.supply_point_id.owner_id.display_name,
),
"supply_point_assignation_id": supply_point_assignation.id,
}
)
# Update selfconsumption and distribution_table state
self.selfconsumption_id.write({"state": "active"})
self.selfconsumption_id.distribution_table_state("process", "active")
......
......@@ -71,7 +71,7 @@ class ContractGenerationWizard(models.TransientModel):
"code": code,
}
def _prepare_contract_values(self, journal_id, contract_line):
def _prepare_contract_template_values(self, journal_id, contract_line):
return {
"name": self.selfconsumption_id.name,
"journal_id": journal_id.id,
......@@ -82,6 +82,18 @@ class ContractGenerationWizard(models.TransientModel):
"recurring_invoicing_type": "post-paid",
}
def _prepare_contract_line_template_values(self, product_id, formula_contract_id):
return {
"product_id": product_id.id,
"automatic_price": True,
"company_id": self.env.company.id,
"qty_type": "variable",
"qty_formula_id": formula_contract_id.id,
"uom_id": product_id.uom_id.id,
# Values are formatted in contract_generation_wizard
"name": """CUPS: {code}\nOwner: {owner_id}\nInvoicing period: #START# - #END#""",
}
def save_data_to_selfconsumption(self):
if self.invoicing_mode == "energy_delivered_variable":
raise UserError(_("This invoicing mode is not yet implemented"))
......@@ -146,19 +158,14 @@ result = line.supply_point_assignation_id.distribution_table_id.selfconsumption_
(
0,
0,
{
"product_id": product_id.id,
"automatic_price": True,
"company_id": self.env.company.id,
"qty_type": "variable",
"qty_formula_id": formula_contract_id.id,
"name": "",
},
self._prepare_contract_line_template_values(
product_id, formula_contract_id
),
)
]
contract_template_id = self.env["contract.template"].create(
self._prepare_contract_values(journal_id, contract_line)
self._prepare_contract_template_values(journal_id, contract_line)
)
product_id.write({"contract_template_id": contract_template_id.id})
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment