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
...@@ -167,6 +167,10 @@ class Selfconsumption(models.Model): ...@@ -167,6 +167,10 @@ class Selfconsumption(models.Model):
raise ValidationError(_("Project must have a valid CIL.")) raise ValidationError(_("Project must have a valid CIL."))
if not record.power or record.power <= 0: if not record.power or record.power <= 0:
raise ValidationError(_("Project must have a valid Rated Power.")) 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 # Create ContractGenerationWizard
contract_wizard = self.env[ contract_wizard = self.env[
......
...@@ -66,18 +66,34 @@ class TestContractGenerationWizard(TransactionCase): ...@@ -66,18 +66,34 @@ class TestContractGenerationWizard(TransactionCase):
"coefficient": 1, "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[ self.contract_generation_wizard = self.env[
"energy_selfconsumption.contract_generation.wizard" "energy_selfconsumption.contract_generation.wizard"
].create( ].create(
{ {
"price_energy": 0.1,
"recurring_interval": 1,
"recurring_rule_type": "monthly",
"selfconsumption_id": self.selfconsumption.id, "selfconsumption_id": self.selfconsumption.id,
} }
) )
def test_generation_contracts(self): 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() res = self.contract_generation_wizard.generate_contracts_button()
self.assertEqual(res, True) self.assertEqual(res, True)
......
...@@ -24,19 +24,6 @@ class ContractGenerationWizard(models.TransientModel): ...@@ -24,19 +24,6 @@ class ContractGenerationWizard(models.TransientModel):
UserWarning: When no accounting journal is found. UserWarning: When no accounting journal is found.
SomeException: When no distribution table in process of activation 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 # Get distribution table
distribution_id = ( distribution_id = (
self.selfconsumption_id.distribution_table_ids.filtered_domain( self.selfconsumption_id.distribution_table_ids.filtered_domain(
...@@ -56,22 +43,24 @@ class ContractGenerationWizard(models.TransientModel): ...@@ -56,22 +43,24 @@ class ContractGenerationWizard(models.TransientModel):
supply_point_assignation.supply_point_id.partner_id.name, supply_point_assignation.supply_point_id.partner_id.name,
), ),
"partner_id": supply_point_assignation.supply_point_id.partner_id.id, "partner_id": supply_point_assignation.supply_point_id.partner_id.id,
"journal_id": journal_id.id, "project_id": self.selfconsumption_id.id,
"recurring_interval": self.selfconsumption_id.product_id.contract_template_id.recurring_interval, "company_id": self.env.company.id,
"recurring_rule_type": self.selfconsumption_id.product_id.contract_template_id.recurring_rule_type,
"recurring_invoicing_type": "post-paid",
"date_start": fields.date.today(), "date_start": fields.date.today(),
"contract_template_id": self.selfconsumption_id.product_id.contract_template_id.id, "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 # We use the next method from the contract model to update the contract fields with contract template
contract._onchange_contract_template_id() contract._onchange_contract_template_id()
# Now, we need to update the name field using the code and display_name fields for contract_line_id in contract.contract_line_ids:
name = _("""CUPS: %s\nOwner: %s\nInvoicing period: #START# - #END#""") % ( contract_line_id.write(
supply_point_assignation.supply_point_id.code, {
supply_point_assignation.supply_point_id.owner_id.display_name, "name": contract_line_id.name.format(
) code=supply_point_assignation.supply_point_id.code,
contract.contract_line_ids.name = name 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 # Update selfconsumption and distribution_table state
self.selfconsumption_id.write({"state": "active"}) self.selfconsumption_id.write({"state": "active"})
self.selfconsumption_id.distribution_table_state("process", "active") self.selfconsumption_id.distribution_table_state("process", "active")
......
...@@ -71,7 +71,7 @@ class ContractGenerationWizard(models.TransientModel): ...@@ -71,7 +71,7 @@ class ContractGenerationWizard(models.TransientModel):
"code": code, "code": code,
} }
def _prepare_contract_values(self, journal_id, contract_line): def _prepare_contract_template_values(self, journal_id, contract_line):
return { return {
"name": self.selfconsumption_id.name, "name": self.selfconsumption_id.name,
"journal_id": journal_id.id, "journal_id": journal_id.id,
...@@ -82,6 +82,18 @@ class ContractGenerationWizard(models.TransientModel): ...@@ -82,6 +82,18 @@ class ContractGenerationWizard(models.TransientModel):
"recurring_invoicing_type": "post-paid", "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): def save_data_to_selfconsumption(self):
if self.invoicing_mode == "energy_delivered_variable": if self.invoicing_mode == "energy_delivered_variable":
raise UserError(_("This invoicing mode is not yet implemented")) raise UserError(_("This invoicing mode is not yet implemented"))
...@@ -146,19 +158,14 @@ result = line.supply_point_assignation_id.distribution_table_id.selfconsumption_ ...@@ -146,19 +158,14 @@ result = line.supply_point_assignation_id.distribution_table_id.selfconsumption_
( (
0, 0,
0, 0,
{ self._prepare_contract_line_template_values(
"product_id": product_id.id, product_id, formula_contract_id
"automatic_price": True, ),
"company_id": self.env.company.id,
"qty_type": "variable",
"qty_formula_id": formula_contract_id.id,
"name": "",
},
) )
] ]
contract_template_id = self.env["contract.template"].create( 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}) 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