diff --git a/energy_selfconsumption/models/selfconsumption.py b/energy_selfconsumption/models/selfconsumption.py
index 8e7aafda9c14f2db366c0d2ab927a1f3abcaea0b..6fb264200ac3460e04cc28fd31eff0c942815e41 100644
--- a/energy_selfconsumption/models/selfconsumption.py
+++ b/energy_selfconsumption/models/selfconsumption.py
@@ -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[
diff --git a/energy_selfconsumption/tests/test_contract_generation_wizard.py b/energy_selfconsumption/tests/test_contract_generation_wizard.py
index 70dedb2aec7acbb6daaa5bd76b3c9d3084970963..13d3eaafc28b18a87e010f8a06178b360ecb835d 100644
--- a/energy_selfconsumption/tests/test_contract_generation_wizard.py
+++ b/energy_selfconsumption/tests/test_contract_generation_wizard.py
@@ -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)
 
diff --git a/energy_selfconsumption/wizards/contract_generation_wizard.py b/energy_selfconsumption/wizards/contract_generation_wizard.py
index 476967c1f85a7b6a3cfe32747c51410c6a84d07f..3a784ab8c8f1c21937bd9bd3ffec93ede1b33579 100644
--- a/energy_selfconsumption/wizards/contract_generation_wizard.py
+++ b/energy_selfconsumption/wizards/contract_generation_wizard.py
@@ -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")
diff --git a/energy_selfconsumption/wizards/define_invoicing_mode_wizard.py b/energy_selfconsumption/wizards/define_invoicing_mode_wizard.py
index b6e87f368f0d8e82c96e03dfb4439d0b10a9f896..49bec96f08abb24a978c7021921d3c2cad272ab7 100644
--- a/energy_selfconsumption/wizards/define_invoicing_mode_wizard.py
+++ b/energy_selfconsumption/wizards/define_invoicing_mode_wizard.py
@@ -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})